sistero 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|