Class: EY::Serverside::Server
- Inherits:
-
Struct
- Object
- Struct
- EY::Serverside::Server
show all
- Defined in:
- lib/engineyard-serverside/server.rb
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Methods inherited from Struct
#as_json, json_create, #to_json
Instance Attribute Details
#hostname ⇒ Object
Returns the value of attribute hostname
6
7
8
|
# File 'lib/engineyard-serverside/server.rb', line 6
def hostname
@hostname
end
|
#name ⇒ Object
Returns the value of attribute name
6
7
8
|
# File 'lib/engineyard-serverside/server.rb', line 6
def name
@name
end
|
#roles ⇒ Object
Returns the value of attribute roles
6
7
8
|
# File 'lib/engineyard-serverside/server.rb', line 6
def roles
@roles
end
|
#user ⇒ Object
Returns the value of attribute user
6
7
8
|
# File 'lib/engineyard-serverside/server.rb', line 6
def user
@user
end
|
Class Method Details
.from_hash(server_hash) ⇒ Object
7
8
9
|
# File 'lib/engineyard-serverside/server.rb', line 7
def self.from_hash(server_hash)
new(server_hash[:hostname], Set.new(server_hash[:roles].map{|r|r.to_sym}), server_hash[:name], server_hash[:user])
end
|
.known_hosts_file ⇒ Object
Make a known hosts tempfile to absorb host fingerprints so we don’t show
Warning: Permanently added 'xxx' (RSA) to the list of known hosts.
for every ssh command. (even with StrictHostKeyChecking=no, the warning output is annoying)
83
84
85
|
# File 'lib/engineyard-serverside/server.rb', line 83
def self.known_hosts_file
@known_hosts_file ||= Tempfile.new('ey-ss-known-hosts')
end
|
Instance Method Details
#authority ⇒ Object
11
12
13
|
# File 'lib/engineyard-serverside/server.rb', line 11
def authority
"#{user}@#{hostname}"
end
|
#command_on_server(prefix, cmd, &block) ⇒ Object
61
62
63
64
65
|
# File 'lib/engineyard-serverside/server.rb', line 61
def command_on_server(prefix, cmd, &block)
command = block ? block.call(self, cmd.dup) : cmd
command = "#{prefix} #{Escape.shell_command([command])}"
local? ? command : remote_command(command)
end
|
#inspect ⇒ Object
15
16
17
18
|
# File 'lib/engineyard-serverside/server.rb', line 15
def inspect
name_s = name && ":#{name}"
"#{hostname}(#{role}#{name_s})"
end
|
#local? ⇒ Boolean
33
34
35
|
# File 'lib/engineyard-serverside/server.rb', line 33
def local?
hostname == 'localhost'
end
|
#matches_roles?(set) ⇒ Boolean
24
25
26
|
# File 'lib/engineyard-serverside/server.rb', line 24
def matches_roles?(set)
(roles & set).any?
end
|
#remote_command(command) ⇒ Object
Explicitly putting that space in helps us make sure we don’t accidentally leave off the space on the end of ssh_command.
73
74
75
|
# File 'lib/engineyard-serverside/server.rb', line 73
def remote_command(command)
ssh_command + " " + Escape.shell_command(["#{user}@#{hostname}", command])
end
|
#role ⇒ Object
20
21
22
|
# File 'lib/engineyard-serverside/server.rb', line 20
def role
roles.to_a.first
end
|
#run(command) {|local? ? command : remote_command(command)| ... } ⇒ Object
67
68
69
|
# File 'lib/engineyard-serverside/server.rb', line 67
def run(command)
yield local? ? command : remote_command(command)
end
|
#scp_command(local_file, remote_file) ⇒ Object
49
50
51
52
53
54
55
56
57
58
59
|
# File 'lib/engineyard-serverside/server.rb', line 49
def scp_command(local_file, remote_file)
Escape.shell_command([
'scp',
'-i', "#{ENV['HOME']}/.ssh/internal",
"-o", "StrictHostKeyChecking=no",
"-o", "UserKnownHostsFile=#{self.class.known_hosts_file.path}",
"-o", "PasswordAuthentication=no",
local_file,
"#{authority}:#{remote_file}",
])
end
|
#ssh_command ⇒ Object
87
88
89
|
# File 'lib/engineyard-serverside/server.rb', line 87
def ssh_command
"ssh -i #{ENV['HOME']}/.ssh/internal -o StrictHostKeyChecking=no -o UserKnownHostsFile=#{self.class.known_hosts_file.path} -o PasswordAuthentication=no -o ServerAliveInterval=60"
end
|
#sync_directory_command(directory, ignore_existing = false) ⇒ Object
37
38
39
40
41
42
43
44
45
46
47
|
# File 'lib/engineyard-serverside/server.rb', line 37
def sync_directory_command(directory, ignore_existing = false)
return nil if local?
ignore_flag = ignore_existing ? ["--ignore-existing"] : []
[
remote_command("mkdir -p #{directory}"),
Escape.shell_command(%w[rsync --delete -rlpgoDq] + ignore_flag + ["-e", ssh_command, "#{directory}/", "#{user}@#{hostname}:#{directory}"])
].join(' && ')
end
|