sistero 0.2.1 → 0.3.0
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/README.md +12 -7
- data/bin/sistero +22 -12
- data/lib/sistero/version.rb +1 -1
- data/lib/sistero.rb +56 -31
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: adc5b3b7bea1e58657bbf47ddffd5e3efa69c6c1
|
4
|
+
data.tar.gz: c77fbaf01f32c5833db5960c6cb52b7acc0f92fe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: faec4b54c8ff3d797f16c00d67e6d21598d69ade190ed600205f07823849f0ba104eace69870cc2a2be5de8b5413ac5f89b3132e1cb391c3d0179548e23ab14e
|
7
|
+
data.tar.gz: 7e0e6901c61589863bbf1a6f23f81e9dbc607b17e04f749ac91a61deccb950ac49722a39d90107b6fd708611b1860d1ce5801db06eb535773eadc4ea88242064
|
data/README.md
CHANGED
@@ -13,7 +13,7 @@ Create a config file at `.config/sistero` with something like:
|
|
13
13
|
```
|
14
14
|
---
|
15
15
|
defaults:
|
16
|
-
vm_name:
|
16
|
+
vm_name: default-vm
|
17
17
|
ssh_keys:
|
18
18
|
- 1234567
|
19
19
|
ssh_options: -D1080 -A
|
@@ -21,19 +21,24 @@ defaults:
|
|
21
21
|
vm_size: 512mb
|
22
22
|
vm_region: nyc3
|
23
23
|
vm_image: ubuntu-14-04-x64
|
24
|
-
|
25
|
-
|
26
|
-
|
24
|
+
profiles:
|
25
|
+
-
|
26
|
+
vm_name: london-vm
|
27
|
+
vm_region: lon1
|
28
|
+
-
|
29
|
+
vm_name: london-bigger-vm
|
30
|
+
vm_region: lon1
|
31
|
+
vm_size: 1gb
|
27
32
|
```
|
28
33
|
|
29
34
|
The `ssh_keys` is a list of the ID numbers of your ssh keys.
|
30
35
|
|
31
|
-
Then to create a VM in new york:
|
36
|
+
Then to create a VM in new york called default-vm:
|
32
37
|
```
|
33
38
|
sistero create
|
34
39
|
```
|
35
40
|
|
36
|
-
Or to create a VM
|
41
|
+
Or to create a VM called london-vm in london:
|
37
42
|
```
|
38
|
-
sistero -
|
43
|
+
sistero -n london create
|
39
44
|
```
|
data/bin/sistero
CHANGED
@@ -46,8 +46,8 @@ module Sistero::Command
|
|
46
46
|
exit
|
47
47
|
end
|
48
48
|
|
49
|
-
op.on '-
|
50
|
-
@config.
|
49
|
+
op.on '-n vm-name', '--name', 'set vm name' do |vm_name|
|
50
|
+
@config.vm_name = vm_name
|
51
51
|
end
|
52
52
|
|
53
53
|
subcommand 'ssh', 'ssh to vm' do |subop|
|
@@ -62,6 +62,8 @@ module Sistero::Command
|
|
62
62
|
|
63
63
|
subcommand 'list', 'list vms'
|
64
64
|
|
65
|
+
subcommand 'show-config', 'show configuration'
|
66
|
+
|
65
67
|
op.parse!
|
66
68
|
end
|
67
69
|
|
@@ -70,16 +72,24 @@ module Sistero::Command
|
|
70
72
|
exit
|
71
73
|
end
|
72
74
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
sistero
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
75
|
+
vm_name = @config.vm_name
|
76
|
+
|
77
|
+
begin
|
78
|
+
sistero = Sistero::Instance.new
|
79
|
+
case @config.action
|
80
|
+
when 'ssh'
|
81
|
+
sistero.ssh_to_vm(vm_name, ssh_options: @config.ssh_options)
|
82
|
+
when 'create'
|
83
|
+
sistero.create_vm(vm_name)
|
84
|
+
when 'destroy'
|
85
|
+
sistero.destroy_vm(vm_name)
|
86
|
+
when 'list'
|
87
|
+
sistero.list_vms()
|
88
|
+
when 'show-config'
|
89
|
+
sistero.show_config()
|
90
|
+
end
|
91
|
+
rescue RuntimeError => e
|
92
|
+
puts e.to_s
|
83
93
|
end
|
84
94
|
end
|
85
95
|
end
|
data/lib/sistero/version.rb
CHANGED
data/lib/sistero.rb
CHANGED
@@ -5,42 +5,61 @@ require "droplet_kit"
|
|
5
5
|
APP_NAME = "sistero"
|
6
6
|
|
7
7
|
module Sistero
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
#
|
16
|
-
|
17
|
-
|
8
|
+
PROFILE_KEYS = [:vm_name, :vm_size, :vm_region, :vm_image, :access_token, :ssh_keys, :ssh_options]
|
9
|
+
|
10
|
+
Profile = Struct.new(*PROFILE_KEYS) do
|
11
|
+
def to_s
|
12
|
+
"vm #{vm_name}\n" + PROFILE_KEYS.map do |key|
|
13
|
+
val = self[key]
|
14
|
+
if val and key != :vm_name
|
15
|
+
" #{key} #{val}\n"
|
16
|
+
else
|
17
|
+
""
|
18
|
+
end
|
19
|
+
end.join
|
20
|
+
end
|
21
|
+
end
|
18
22
|
|
19
23
|
class Config
|
20
|
-
attr_accessor :defaults
|
24
|
+
attr_accessor :defaults, :profiles
|
21
25
|
|
22
|
-
def profile
|
23
|
-
@
|
26
|
+
def profile vm_name
|
27
|
+
if @defaults['vm_name'] and vm_name.nil?
|
28
|
+
profile = @defaults
|
29
|
+
else
|
30
|
+
# TODO: also handle wildcards
|
31
|
+
profile = @profiles.find do |profile|
|
32
|
+
profile.vm_name == vm_name
|
33
|
+
end
|
34
|
+
raise "could not find profile for #{vm_name}" unless profile
|
35
|
+
end
|
36
|
+
profile
|
24
37
|
end
|
25
38
|
|
26
39
|
def initialize(opts = {})
|
27
40
|
# read defaults from config file
|
28
41
|
cfg_file_path = "#{ENV['HOME']}/.config/#{APP_NAME}"
|
29
42
|
@defaults = Profile.new
|
30
|
-
@profiles =
|
43
|
+
@profiles = []
|
31
44
|
|
32
45
|
cfg = YAML.load_file cfg_file_path
|
33
46
|
cfg['defaults'].each do |key, value|
|
34
47
|
@defaults[key] = value
|
35
48
|
end
|
36
49
|
|
37
|
-
cfg.
|
38
|
-
|
39
|
-
profile = @profiles[name] = Profile.new *@defaults
|
50
|
+
@profiles = cfg['profiles'].map do |profile_cfg|
|
51
|
+
profile = Profile.new *@defaults
|
40
52
|
profile_cfg.each do |key, value|
|
41
53
|
profile[key] = value
|
42
54
|
end
|
55
|
+
profile
|
43
56
|
end
|
57
|
+
|
58
|
+
@profiles.push(@defaults) if @defaults['vm_name']
|
59
|
+
end
|
60
|
+
|
61
|
+
def to_s
|
62
|
+
@profiles.map(&:to_s).join "\n"
|
44
63
|
end
|
45
64
|
end
|
46
65
|
|
@@ -50,7 +69,7 @@ module Sistero
|
|
50
69
|
@client = DropletKit::Client.new(access_token: @config.defaults.access_token)
|
51
70
|
end
|
52
71
|
|
53
|
-
def find_vm(vm_name
|
72
|
+
def find_vm(vm_name)
|
54
73
|
@client.droplets.all.find { |vm| vm.name == vm_name }
|
55
74
|
end
|
56
75
|
|
@@ -60,10 +79,14 @@ module Sistero
|
|
60
79
|
end
|
61
80
|
end
|
62
81
|
|
63
|
-
def
|
64
|
-
profile = @config.profile
|
65
|
-
vm_name
|
82
|
+
def get_profile vm_name
|
83
|
+
profile = @config.profile vm_name
|
84
|
+
vm_name = profile.vm_name if vm_name.nil?
|
85
|
+
[ profile, vm_name ]
|
86
|
+
end
|
66
87
|
|
88
|
+
def create_vm(vm_name)
|
89
|
+
profile, vm_name = get_profile vm_name
|
67
90
|
puts "creating vm: #{vm_name}"
|
68
91
|
|
69
92
|
vm = DropletKit::Droplet.new(
|
@@ -74,7 +97,7 @@ module Sistero
|
|
74
97
|
ssh_keys: profile.ssh_keys
|
75
98
|
)
|
76
99
|
vm = @client.droplets.create(vm)
|
77
|
-
puts "created
|
100
|
+
puts "created: #{profile.to_s}"
|
78
101
|
vm
|
79
102
|
end
|
80
103
|
|
@@ -94,17 +117,16 @@ module Sistero
|
|
94
117
|
return false
|
95
118
|
end
|
96
119
|
|
97
|
-
def ssh_to_vm(
|
98
|
-
profile =
|
99
|
-
vm_name ||= profile.vm_name
|
120
|
+
def ssh_to_vm(vm_name, ssh_options: nil)
|
121
|
+
profile, vm_name = get_profile vm_name
|
100
122
|
ssh_options ||= profile.ssh_options
|
101
123
|
|
102
|
-
vm = find_vm(vm_name
|
124
|
+
vm = find_vm(vm_name) || create_vm(vm_name)
|
103
125
|
public_network = vm.networks.v4.find { |network| network.type == 'public' }
|
104
126
|
until public_network
|
105
127
|
puts "no public interfaces, trying again in a second"
|
106
128
|
sleep 1
|
107
|
-
vm = find_vm(vm_name
|
129
|
+
vm = find_vm(vm_name)
|
108
130
|
public_network = vm.networks.v4.find { |network| network.type == 'public' }
|
109
131
|
end
|
110
132
|
ip = public_network.ip_address
|
@@ -122,11 +144,10 @@ module Sistero
|
|
122
144
|
exec cmd
|
123
145
|
end
|
124
146
|
|
125
|
-
def destroy_vm(
|
126
|
-
profile =
|
127
|
-
vm_name ||= profile.vm_name
|
147
|
+
def destroy_vm(vm_name)
|
148
|
+
profile, vm_name = get_profile vm_name
|
128
149
|
|
129
|
-
vm = find_vm(vm_name
|
150
|
+
vm = find_vm(vm_name)
|
130
151
|
if vm
|
131
152
|
puts "destroying #{vm.id}"
|
132
153
|
@client.droplets.delete(id: vm.id)
|
@@ -134,5 +155,9 @@ module Sistero
|
|
134
155
|
puts "vm #{vm_name} not found"
|
135
156
|
end
|
136
157
|
end
|
158
|
+
|
159
|
+
def show_config
|
160
|
+
puts @config.to_s
|
161
|
+
end
|
137
162
|
end
|
138
163
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sistero
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Pike
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|