danarchy_sys 0.5.2 → 0.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/danarchy_sys +1 -0
- data/lib/danarchy_sys/cli/instance_manager.rb +7 -4
- data/lib/danarchy_sys/cli.rb +4 -7
- data/lib/danarchy_sys/openstack/compute/instances.rb +20 -12
- data/lib/danarchy_sys/openstack/compute.rb +17 -14
- data/lib/danarchy_sys/openstack.rb +0 -1
- data/lib/danarchy_sys/ssh.rb +35 -0
- data/lib/danarchy_sys/version.rb +1 -1
- data/lib/danarchy_sys.rb +1 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 425cdec809b087727a5dd9c9f6f4bf6752d1e23f29021921f5350c22201f8e46
|
4
|
+
data.tar.gz: a0a09bd3bca283330e9597d3ebbb1e1b753dff3d5e956ae14f3e427c5bc395ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 04a1a995b50c94b7237aabdcae302767835282189cf94c95c703442f4cc8a6f4e97d6f29a448d4521a63544ef4eae9b5b5200eb24c026cf3e7bd5ab56c1b6522
|
7
|
+
data.tar.gz: c2f02632a979e7b6381103fa6c191e6c6ccb3e53d0bc87a8d1f95908095ebf1f5fa7b5e29638d360e2765de5fed3773038e945575c00c330e06e75738fffef0b
|
data/bin/danarchy_sys
CHANGED
@@ -46,7 +46,11 @@ class InstanceManager
|
|
46
46
|
end
|
47
47
|
elsif cmd == 'status'
|
48
48
|
instance = @os_compute.instances.get_instance(instance.name)
|
49
|
-
|
49
|
+
if instance.state == 'ACTIVE' && @os_compute.ssh(instance, 'uptime')[:stderr]
|
50
|
+
printf("%#{instance.name.size}s %0s %0s\n", instance.name, ' => ', 'WAITING')
|
51
|
+
else
|
52
|
+
printf("%#{instance.name.size}s %0s %0s\n", instance.name, ' => ', instance.state)
|
53
|
+
end
|
50
54
|
elsif %w(pause unpause suspend resume start stop).include?(cmd.to_s)
|
51
55
|
status = instance.state
|
52
56
|
|
@@ -74,15 +78,14 @@ class InstanceManager
|
|
74
78
|
print "Should we rebuild #{instance.name} with image: #{image.name}? (Y/N): "
|
75
79
|
if gets.chomp =~ /^y(es)?$/i
|
76
80
|
puts "Rebuilding #{instance.name} with #{image.name}"
|
77
|
-
@os_compute.instances.rebuild_instance(instance, image)
|
78
|
-
instance = @os_compute.instances.get_instance(instance.name)
|
81
|
+
instance = @os_compute.instances.rebuild_instance(instance, image)
|
79
82
|
puts "\nRebuild in progress!"
|
80
83
|
else
|
81
84
|
puts "Not rebuilding #{instance.name} at this time."
|
82
85
|
end
|
83
86
|
elsif cmd == 'connect'
|
84
87
|
if instance.state == 'ACTIVE'
|
85
|
-
@os_compute.ssh(instance.name)
|
88
|
+
@os_compute.ssh(instance.name)
|
86
89
|
else
|
87
90
|
puts "Unable to connect: #{instance.name} is not running!"
|
88
91
|
end
|
data/lib/danarchy_sys/cli.rb
CHANGED
@@ -1,14 +1,11 @@
|
|
1
|
-
|
2
|
-
require_relative '
|
1
|
+
require_relative 'cli/menus'
|
2
|
+
require_relative 'cli/accounts'
|
3
|
+
require_relative 'cli/instance_manager'
|
4
|
+
require_relative 'cli/keypair_manager'
|
3
5
|
|
4
6
|
module DanarchySys
|
5
7
|
class CLI
|
6
8
|
def initialize
|
7
|
-
require_relative 'cli/menus'
|
8
|
-
require_relative 'cli/accounts'
|
9
|
-
require_relative 'cli/instance_manager'
|
10
|
-
require_relative 'cli/keypair_manager'
|
11
|
-
|
12
9
|
danarchysys_config = DanarchySys::ConfigManager::Config.new
|
13
10
|
account = Accounts.chooser(danarchysys_config)
|
14
11
|
connection = danarchysys_config[:accounts][account]
|
@@ -110,18 +110,6 @@ class ComputeInstances
|
|
110
110
|
instance
|
111
111
|
end
|
112
112
|
|
113
|
-
def rebuild_instance(instance, image)
|
114
|
-
instance = get_instance(instance) if instance.class == String
|
115
|
-
|
116
|
-
instance.rebuild(image.id, instance.name)
|
117
|
-
addrs = [get_public_addresses(instance),
|
118
|
-
get_private_addresses(instance)].flatten.compact!
|
119
|
-
addrs.each { |addr| system("ssh-keygen -R #{addr} &>/dev/null") }
|
120
|
-
|
121
|
-
# instance.wait_for { ready? }
|
122
|
-
instance
|
123
|
-
end
|
124
|
-
|
125
113
|
def delete_instance(instance)
|
126
114
|
instance = get_instance(instance) if instance.class == String
|
127
115
|
return 1 if instance == false
|
@@ -142,4 +130,24 @@ class ComputeInstances
|
|
142
130
|
|
143
131
|
return true
|
144
132
|
end
|
133
|
+
|
134
|
+
def rebuild_instance(instance, image)
|
135
|
+
instance = get_instance(instance) if instance.class == String
|
136
|
+
|
137
|
+
instance.rebuild(image.id, instance.name)
|
138
|
+
addrs = [get_public_addresses(instance),
|
139
|
+
get_private_addresses(instance)].flatten.compact!
|
140
|
+
addrs.each { |addr| system("ssh-keygen -R #{addr} &>/dev/null") }
|
141
|
+
|
142
|
+
# instance.wait_for { ready? }
|
143
|
+
get_instance(instance.name)
|
144
|
+
end
|
145
|
+
|
146
|
+
def ssh_connector(instance)
|
147
|
+
addrs = get_public_addresses(instance.name)
|
148
|
+
{ ipv4: addrs.grep(/\./).first,
|
149
|
+
ipv6: addrs.grep(/:/).first,
|
150
|
+
ssh_user: user,
|
151
|
+
ssh_key: pemfile }
|
152
|
+
end
|
145
153
|
end
|
@@ -2,6 +2,7 @@ require_relative 'compute/instances'
|
|
2
2
|
require_relative 'compute/keypairs'
|
3
3
|
require_relative 'compute/images'
|
4
4
|
require_relative 'compute/flavors'
|
5
|
+
require 'shellwords'
|
5
6
|
|
6
7
|
module DanarchySys
|
7
8
|
module OpenStack
|
@@ -34,19 +35,17 @@ module DanarchySys
|
|
34
35
|
ComputeSecgroups.new(@compute)
|
35
36
|
end
|
36
37
|
|
37
|
-
def ssh(
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
pemfile =
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
ipv6 = addrs.grep(/:/).first
|
38
|
+
def ssh(instance, *cmd)
|
39
|
+
instance = instances.get_instance(instance) if instance.class == String
|
40
|
+
opts = { quiet: true }
|
41
|
+
opts[:command] = cmd ? cmd.shift : nil
|
42
|
+
pemfile = keypairs.pemfile_path(instance.key_name)
|
43
|
+
addrs = instances.get_public_addresses(instance)
|
44
|
+
# (instances, keypairs, images) = instances, keypairs, images
|
45
|
+
# instance = instances.get_instance(instance)
|
46
46
|
|
47
47
|
# Define user by image_id
|
48
|
-
|
49
|
-
image = comp_img.get_image_by_id(image_id)
|
48
|
+
image = images.get_image_by_id(instance.image['id'])
|
50
49
|
|
51
50
|
ssh, user = nil
|
52
51
|
if image == nil
|
@@ -63,12 +62,16 @@ module DanarchySys
|
|
63
62
|
|
64
63
|
return if !user
|
65
64
|
|
66
|
-
|
67
|
-
|
68
|
-
|
65
|
+
connector = { ipv4: addrs.grep(/\./).first,
|
66
|
+
ipv6: addrs.grep(/:/).first,
|
67
|
+
ssh_user: user,
|
68
|
+
ssh_key: pemfile }
|
69
|
+
|
70
|
+
SSH.new(connector, opts)
|
69
71
|
end
|
70
72
|
|
71
73
|
def fallback_ssh(ipv4, pemfile)
|
74
|
+
# This needs some updating to utilize the SSH module as above.
|
72
75
|
users = %w[debian ubuntu centos fedora core]
|
73
76
|
ssh, user = nil
|
74
77
|
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'open3'
|
2
|
+
require 'shellwords'
|
3
|
+
|
4
|
+
class SSH
|
5
|
+
def self.new(connector, opts = {})
|
6
|
+
# connector: { ipv4: "str", ssh_user: "str", ssh_key: "str" }
|
7
|
+
# options: { command: "str", timeout: int, quiet: true|false }
|
8
|
+
opts[:timeout] ||= 30
|
9
|
+
opts[:quiet] ||= false
|
10
|
+
pid, stdout, stderr = nil
|
11
|
+
ssh = "ssh -i '#{connector[:ssh_key]}' #{connector[:ssh_user]}@#{connector[:ipv4]} "
|
12
|
+
ssh += "-o StrictHostKeyChecking=no "
|
13
|
+
ssh += "-o ConnectTimeout=#{opts[:timeout]} " if opts[:timeout]
|
14
|
+
|
15
|
+
if opts[:command]
|
16
|
+
puts "Running '#{opts[:command]}' on '#{connector[:ipv4]}'" unless opts[:quiet]
|
17
|
+
ssh += Shellwords.shellescape(opts[:command])
|
18
|
+
|
19
|
+
Open3.popen3(ssh) do |i, o, e, t|
|
20
|
+
pid = t.pid
|
21
|
+
(out, err) = o.read, e.read
|
22
|
+
stdout = !out.empty? ? out : nil
|
23
|
+
stderr = !err.empty? ? err : nil
|
24
|
+
end
|
25
|
+
else
|
26
|
+
return system(ssh)
|
27
|
+
end
|
28
|
+
|
29
|
+
if opts[:quiet] == false
|
30
|
+
puts "------\nErrored at: #{caller_locations.first.label} Line: #{caller_locations.first.lineno}\nSTDERR: ", stderr, '------' if stderr
|
31
|
+
puts "------\nSTDOUT: ", stdout, '------' if stdout
|
32
|
+
end
|
33
|
+
{ pid: pid, stdout: stdout, stderr: stderr }
|
34
|
+
end
|
35
|
+
end
|
data/lib/danarchy_sys/version.rb
CHANGED
data/lib/danarchy_sys.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: danarchy_sys
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan James
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-09-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fog-openstack
|
@@ -114,6 +114,7 @@ files:
|
|
114
114
|
- lib/danarchy_sys/openstack/compute/tests/keypairs_test.rb
|
115
115
|
- lib/danarchy_sys/openstack/compute/tests/manage_test.rb
|
116
116
|
- lib/danarchy_sys/printformats.rb
|
117
|
+
- lib/danarchy_sys/ssh.rb
|
117
118
|
- lib/danarchy_sys/version.rb
|
118
119
|
homepage: https://github.com/danarchy85/danarchy_sys
|
119
120
|
licenses:
|