Hi Experts,
We have quite a lot of servers but they all are like bellow format
(3 server in a pair)
DK-vk-2.domain.lan
DK-vh-2.domain.lan
DK-vm-2.domain.lan
MK-vk-3.domain.lan
MK-vh-4.domain.lan
MK-vm-3.domain.lan
So basically the different is : k,h,v
Now Problme is :
I need to run a script from one of the server and it will connect to
rest 2 by ssh and will run a command, which i know how to do
but i dont know ,how will i know from which server i am running and how
to get hostname of the rest 2 servers.
example :
def name_check(name)
#I Assuming I am running the script from DK-vk-2.domain.lan, So
i need to connect to rest 2 server
@hostname1 = " DK-vm-2.domain.lan "
@hostname2 = " DK-vh-2.domain.lan "
...................
problem is : i need set the hostname1 and hostname2 Automatically
depends on the server i am running the script.
i can get the hostname of the server by using `hostname`
so it might be
p=`hostname'
puts p
=>DK-vk-2.domain.lan
So if its vk , then rest 2 server will be vm,vh
so the rest of 2 server would be , DK-vm-2.domain.lan ,
DK-vh-2.domain.lan
only differerence is "m" and "h"
other way round
if i run the script from
DK-vh-2.domain.lan , the other 2 server will be
DK-vm-2.domain.lan
DK-vk-2.domain.lan
CAn any one help me ..
i am quite stuck now ..I would be really grateful if any one can help me
with this
Thanks
on 2012-09-09 20:15
on 2012-09-09 20:48
server_group = [
"DK-vk-2.domain.lan",
"DK-vh-2.domain.lan",
"DK-vm-2.domain.lan"
]
#p = `hostname`
p = "DK-vk-2.domain.lan"
other_two = server_group - [p]
p other_two
--output:--
["DK-vh-2.domain.lan", "DK-vm-2.domain.lan"]
Or:
other_two = server_group.select {|server| server != p}
on 2012-09-09 20:57
7stud -- wrote in post #1075229: > server_group = [ > "DK-vk-2.domain.lan", > "DK-vh-2.domain.lan", > "DK-vm-2.domain.lan" > ] Thanks but i cant define SErver name Statically WE have quite a lot of server.. example 100*3 :300 thats list has to be populate dynamically .. only thing i have is current hostname : DK-vk-2.domain.lan then get the 2 DK-vh-2.domain.lan", DK-vm-2.domain.lan" like if current host name has vk , then the rest 2 server would be vh and vm hope that make sense
on 2012-09-09 22:02
sharmin malik wrote in post #1075228: > but i dont know ,how will i know from which server i am running require 'socket' myname = Socket.gethostname > and how > to get hostname of the rest 2 servers. I guess the easiest way is to make the names of all three, and remove the one you don't want (i.e. your own) require 'socket' myname = Socket.gethostname unless myname =~ /\A(\w+-v)([khv])(-\d+\..+)\z/ raise "Bad hostname format: #{myname.inspect}" end hosts = [$1+"k"+$3, $1+"h"+$3, $1+"v"+$3] unless hosts.delete myname raise "Can't find my hostname #{myname.inspect} to remove from #{hosts.inspect}" end hosts.each do |host| puts "Please connect to #{host}" end
on 2012-09-09 22:10
given_server = "DK-vk-2.domain.lan"
server_types = ['vk', 'vh', 'vm']
start, type, the_rest = given_server.split('-')
puts type
--output:--
vk
other_two = (server_types - [type]).map do |new_type|
[start, new_type, the_rest].join('-')
end
p other_two
--output:--
["DK-vh-2.domain.lan", "DK-vm-2.domain.lan"]
on 2012-09-09 23:54
> unless myname =~ /\A(\w+-v)([khv])(-\d+\..+)\z/ > raise "Bad hostname format: #{myname.inspect}" > end > hosts = [$1+"k"+$3, $1+"h"+$3, $1+"v"+$3] > unless hosts.delete myname > raise "Can't find my hostname #{myname.inspect} to remove from > #{hosts.inspect}" > end > hosts.each do |host| > puts "Please connect to #{host}" > end HI this is nice way to do .. but system hostname is like this (i forgot put -dk ) dk-vk-2-dk.domain.lan I tried to change the Regix.. but not working Can you please modify it little bit ?? also would be able to explain me little bit how the regix is related to [$1+"k"+$3, $1+"h"+$3, $1+"v"+$3] ?? thanks
on 2012-09-09 23:55
7stud -- wrote in post #1075239: > given_server = "DK-vk-2.domain.lan" > server_types = ['vk', 'vh', 'vm'] > > start, type, the_rest = given_server.split('-') > puts type > > --output:-- > vk > > other_two = (server_types - [type]).map do |new_type| > [start, new_type, the_rest].join('-') > end > > p other_two > > --output:-- > ["DK-vh-2.domain.lan", "DK-vm-2.domain.lan"] Hi this works fine thanks
on 2012-09-09 23:58
7stud -- wrote in post #1075239: > given_server = "DK-vk-2.domain.lan" > server_types = ['vk', 'vh', 'vm'] > > start, type, the_rest = given_server.split('-') > puts type > > --output:-- > vk > > other_two = (server_types - [type]).map do |new_type| > [start, new_type, the_rest].join('-') > end > > p other_two > > --output:-- > ["DK-vh-2.domain.lan", "DK-vm-2.domain.lan"] Hi also could you please explain to me , how it working ?? other_two = (server_types - [type]).map do |new_type| [start, new_type, the_rest].join('-') end how it deleting vk from the list ??
on 2012-09-10 02:14
sharmin malik писал 10.09.2012 01:55: >> end > [$1+"k"+$3, $1+"h"+$3, $1+"v"+$3] ?? > thanks Parts of strings which are matched by capturing groups (parenthesized groups of symbols in regexen) are assigned to $-variables. For example, look at this code: "test 123 abc" =~ /test (..)3 ([ba]+)/ puts "$1,$2" # outputs 12,ab The $N numeric variables are function-local and always refer to the last regex executed in the current function. There is an effectively infinite number of them. You can make regex groups non-capturing by placing ?: in the beginning of the group. E.g. ([ba]+) is capturing, and (?:[ba]+) is non-capturing. Non-capturing groups behave in exactly same way as capturing ones, but they do not have a corresponding $N-variable.
on 2012-09-10 05:25
sharmin malik wrote in post #1075245: > 7stud -- wrote in post #1075239: >> given_server = "DK-vk-2.domain.lan" >> server_types = ['vk', 'vh', 'vm'] >> >> start, type, the_rest = given_server.split('-') >> puts type >> >> --output:-- >> vk >> >> other_two = (server_types - [type]).map do |new_type| >> [start, new_type, the_rest].join('-') >> end >> >> p other_two >> >> --output:-- >> ["DK-vh-2.domain.lan", "DK-vm-2.domain.lan"] > > Hi > also could you please explain to me , how it working ?? > > other_two = (server_types - [type]).map do |new_type| > [start, new_type, the_rest].join('-') > end > > how it deleting vk from the list ?? p server_types - [type] --output:-- ["vh", "vm"] And it's more efficient to just do this: other_two = (server_types - [type]).map do |new_type| "#{start}-#{new_type}-#{the_rest}" end Perhaps this is clearer: given_server = "DK-vk-2.domain.lan" server_types = ['vk', 'vh', 'vm'] start, type, the_rest = given_server.split('-') puts type --output:-- vk other_two_types = server_types - [type] p other_two_types --output:-- ["vh", "vm"] other_two_servers = (other_two_types).map do |type| "#{start}-#{type}-#{the_rest}" end p other_two_servers --output:-- ["DK-vh-2.domain.lan", "DK-vm-2.domain.lan"]
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.