knuckle_cluster 1.3.1 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/knuckle_cluster +7 -0
- data/lib/knuckle_cluster.rb +31 -2
- data/lib/knuckle_cluster/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 78dfb68000ce016055de2e6a637eba4ac1f0c1e5
|
4
|
+
data.tar.gz: 921123b27124c87bdfd3c3c7c31a7f7073db1e8a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ad430a1a5c47d5674c3dccf646c7dfe315618733680d1b2946f4391cb63e02b5097887335b52ffc88408470f31c4b1f6395ff2e1c49bbabaa0c5da760aa5c63b
|
7
|
+
data.tar.gz: 1f21a272f73cf5815c3e4eaed44e367c30df0f443feb89150634e63ae05173e523bbea14a996c937398d8b639ff6c202c9fdac3a20a3b9add941b94b161c0e17
|
data/bin/knuckle_cluster
CHANGED
@@ -12,6 +12,7 @@ if ARGV.count < 2
|
|
12
12
|
knuckle_cluster CLUSTER_PROFILE CONTAINER_NAME [OPTIONAL COMMANDS] - connect to a container and start a shell or run a command
|
13
13
|
knuckle_cluster CLUSTER_PROFILE SHORTCUT_NAME - run a shortcut defined in your knuckle_cluster configuration
|
14
14
|
knuckle_cluster CLUSTER_PROFILE tunnel TUNNEL_NAME - open a tunnel defined in your knuckle_cluster configuration
|
15
|
+
knuckle_cluster CLUSTER_PROFILE scp [agent|container] source_file destination - copies a file from your local machine to a destaination container or agent
|
15
16
|
USAGE
|
16
17
|
exit
|
17
18
|
end
|
@@ -35,6 +36,12 @@ elsif ARGV[1] == 'logs'
|
|
35
36
|
kc.container_logs(name: ARGV[2])
|
36
37
|
elsif ARGV[1] == 'tunnel'
|
37
38
|
kc.open_tunnel(name: ARGV[2])
|
39
|
+
elsif ARGV[1] == 'scp'
|
40
|
+
if ARGV[2] == 'agent'
|
41
|
+
kc.scp_to_agent(source: ARGV[3], destination: ARGV[4])
|
42
|
+
elsif ARGV[2] == 'container'
|
43
|
+
kc.scp_to_container(source: ARGV[3], destination: ARGV[4])
|
44
|
+
end
|
38
45
|
else
|
39
46
|
command = ARGV.drop(2)
|
40
47
|
if command.any?
|
data/lib/knuckle_cluster.rb
CHANGED
@@ -68,6 +68,27 @@ module KnuckleCluster
|
|
68
68
|
run_command_in_container(container: container, command: command)
|
69
69
|
end
|
70
70
|
|
71
|
+
def scp_to_agent(source:, destination:, agent: nil)
|
72
|
+
agent ||= select_agent
|
73
|
+
target_ip = bastion ? agent.private_ip : agent.public_ip
|
74
|
+
command = generate_scp_connection_string(agent: agent)
|
75
|
+
command += " #{source}"
|
76
|
+
command += " #{ssh_username}@#{target_ip}:#{destination}"
|
77
|
+
system(command)
|
78
|
+
puts "Done!"
|
79
|
+
end
|
80
|
+
|
81
|
+
def scp_to_container(source:, destination:)
|
82
|
+
container = select_container
|
83
|
+
agent = container.task.agent
|
84
|
+
tmp_destination_file = '~/tmp_kc.tmp'
|
85
|
+
scp_to_agent(source: source, agent: agent, destination: tmp_destination_file)
|
86
|
+
container_id = get_container_id_command(container.name)
|
87
|
+
subcommand = "#{'sudo ' if sudo}docker cp #{tmp_destination_file} \\`#{container_id}\\`:#{destination} && rm #{tmp_destination_file}"
|
88
|
+
run_command_in_agent(agent: agent, command: subcommand)
|
89
|
+
puts "Done!"
|
90
|
+
end
|
91
|
+
|
71
92
|
def container_logs(name:)
|
72
93
|
container = find_container(name: name)
|
73
94
|
subcommand = "#{'sudo ' if sudo}docker logs -f \\`#{get_container_id_command(container.name)}\\`"
|
@@ -89,7 +110,7 @@ module KnuckleCluster
|
|
89
110
|
:region, :bastion, :rsa_key_location, :ssh_username,
|
90
111
|
:sudo, :aws_vault_profile, :shortcuts, :tunnels
|
91
112
|
|
92
|
-
def select_agent(auto:)
|
113
|
+
def select_agent(auto: false)
|
93
114
|
return agents.first if auto
|
94
115
|
|
95
116
|
puts "\nListing Agents"
|
@@ -100,7 +121,7 @@ module KnuckleCluster
|
|
100
121
|
agents[STDIN.gets.strip.to_i - 1]
|
101
122
|
end
|
102
123
|
|
103
|
-
def select_container(auto:)
|
124
|
+
def select_container(auto: false)
|
104
125
|
return containers.first if auto
|
105
126
|
|
106
127
|
puts "\nListing Containers"
|
@@ -182,6 +203,14 @@ module KnuckleCluster
|
|
182
203
|
end
|
183
204
|
end
|
184
205
|
|
206
|
+
def generate_scp_connection_string(agent:)
|
207
|
+
ip = bastion ? agent.private_ip : agent.public_ip
|
208
|
+
command = "scp"
|
209
|
+
command += " -i #{rsa_key_location}" if rsa_key_location
|
210
|
+
command += " -o ProxyCommand='ssh -qxT #{bastion} nc #{ip} 22'" if bastion
|
211
|
+
command
|
212
|
+
end
|
213
|
+
|
185
214
|
def generate_connection_string(agent:, subcommand: nil, port_forward: nil)
|
186
215
|
ip = bastion ? agent.private_ip : agent.public_ip
|
187
216
|
command = "ssh #{ip} -l#{ssh_username}"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knuckle_cluster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Envato
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-02-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -173,7 +173,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
173
173
|
version: '0'
|
174
174
|
requirements: []
|
175
175
|
rubyforge_project:
|
176
|
-
rubygems_version: 2.6.
|
176
|
+
rubygems_version: 2.6.13
|
177
177
|
signing_key:
|
178
178
|
specification_version: 4
|
179
179
|
summary: Handy cluster tool
|