gogetit 0.8.0 → 0.9.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 +4 -0
- data/lib/gogetit/cli.rb +17 -2
- data/lib/gogetit/version.rb +1 -1
- data/lib/providers/libvirt.rb +98 -53
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2893781eb0a3fc67d8515b13aaaab0f25fb9f0f6
|
4
|
+
data.tar.gz: e2d9bcbfdbb819011e07c3c3143b187743fb4711
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3be3cc5ecabcf20b5ea652b2d58e8afdf96afb5c63c2ad76746da7e286b91d5f55f0b073583c7655124f5c2ccbdd07e53434980cd8938785df824e4fb7f8bb6f
|
7
|
+
data.tar.gz: f35c97aa197aeb6e7afe4e36f61017511fc4e90b4bf3369d12ce61dd7a8fe8c8b2449819d3a24c1ced7179e6162610358f947920a786b131d2566b9e7c0e311f
|
data/README.md
CHANGED
@@ -63,6 +63,10 @@ gogetit create kvm01 -p lxd -a centos7
|
|
63
63
|
# When specifying distro for Libvirt provider
|
64
64
|
gogetit create kvm01 -p libvirt -d centos
|
65
65
|
|
66
|
+
# When deploying on an existing machine(only for libvirt provider)
|
67
|
+
gogetit deploy kvm01
|
68
|
+
gogetit deploy kvm01 -d centos
|
69
|
+
|
66
70
|
# to create a LXD container without MAAS awareness
|
67
71
|
gogetit create lxd01 --no-maas -f lxd_without_maas.yml
|
68
72
|
gogetit create lxd01 --no-maas -f lxd_without_maas_vlans.yml
|
data/lib/gogetit/cli.rb
CHANGED
@@ -30,9 +30,9 @@ module Gogetit
|
|
30
30
|
method_option :ipaddresses, :aliases => '-i', :type => :array, \
|
31
31
|
:desc => 'A list of static IPs to assign'
|
32
32
|
method_option :"no-maas", :type => :boolean, \
|
33
|
-
:desc => 'Without MAAS awareness'
|
33
|
+
:desc => 'Without MAAS awareness(only for LXD provider)'
|
34
34
|
method_option :"file", :aliases => '-f', :type => :string, \
|
35
|
-
:desc => 'File location'
|
35
|
+
:desc => 'File location(only for LXD provider)'
|
36
36
|
def create(name)
|
37
37
|
abort("'vlans' and 'ipaddresses' can not be set together.") \
|
38
38
|
if options['vlans'] and options['ipaddresses']
|
@@ -87,6 +87,21 @@ module Gogetit
|
|
87
87
|
end
|
88
88
|
end
|
89
89
|
|
90
|
+
desc 'deploy NAME', 'Deploy a node existing in MAAS.'
|
91
|
+
method_option :distro, :aliases => '-d', :type => :string, \
|
92
|
+
:desc => 'A distro name with its series for libvirt provider'
|
93
|
+
method_option :chef, :aliases => '-c', :type => :boolean, \
|
94
|
+
:default => false, :desc => 'Chef awareness'
|
95
|
+
def deploy(name)
|
96
|
+
Gogetit.libvirt.deploy(name, options.to_hash)
|
97
|
+
|
98
|
+
# post-tasks
|
99
|
+
if options['chef']
|
100
|
+
knife_bootstrap(name, options[:provider], Gogetit.config, Gogetit.logger)
|
101
|
+
update_databags(Gogetit.config, Gogetit.logger)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
90
105
|
desc 'release NAME', 'Release a node in MAAS'
|
91
106
|
method_option :chef, :type => :boolean, :desc => "Enable chef awareness."
|
92
107
|
def release(name)
|
data/lib/gogetit/version.rb
CHANGED
data/lib/providers/libvirt.rb
CHANGED
@@ -42,6 +42,11 @@ module Gogetit
|
|
42
42
|
.value
|
43
43
|
end
|
44
44
|
|
45
|
+
def get_domain_xml(domain_name)
|
46
|
+
logger.info("Calling <#{__method__.to_s}>")
|
47
|
+
Oga.parse_xml(conn.lookup_domain_by_name(domain_name).xml_desc)
|
48
|
+
end
|
49
|
+
|
45
50
|
def generate_nics(ifaces, domain)
|
46
51
|
abort("There is no dns server specified for the gateway network.") \
|
47
52
|
unless ifaces[0]['dns_servers'][0]
|
@@ -85,13 +90,64 @@ module Gogetit
|
|
85
90
|
return domain
|
86
91
|
end
|
87
92
|
|
88
|
-
|
93
|
+
def configure_interfaces(ifaces, system_id)
|
94
|
+
|
95
|
+
# It assumes you only have a physical interfaces.
|
96
|
+
interfaces = maas.interfaces([system_id])
|
97
|
+
|
98
|
+
maas.interfaces(
|
99
|
+
[system_id, interfaces[0]['id']],
|
100
|
+
{
|
101
|
+
'op' => 'unlink_subnet',
|
102
|
+
'id' => interfaces[0]['links'][0]['id']
|
103
|
+
}
|
104
|
+
)
|
105
|
+
|
106
|
+
# VLAN configuration
|
107
|
+
ifaces.each_with_index do |iface,index|
|
108
|
+
if index == 0
|
109
|
+
params = {
|
110
|
+
'op' => 'link_subnet',
|
111
|
+
'mode' => 'STATIC',
|
112
|
+
'subnet' => ifaces[0]['id'],
|
113
|
+
'ip_address' => ifaces[0]['ip'],
|
114
|
+
'default_gateway' => 'True',
|
115
|
+
'force' => 'False'
|
116
|
+
}
|
117
|
+
maas.interfaces([system_id, interfaces[0]['id']], params)
|
118
|
+
|
119
|
+
elsif index > 0
|
120
|
+
params = {
|
121
|
+
'op' => 'create_vlan',
|
122
|
+
'vlan' => iface['vlan']['id'],
|
123
|
+
'parent' => interfaces[0]['id']
|
124
|
+
}
|
125
|
+
maas.interfaces([system_id], params)
|
126
|
+
|
127
|
+
interfaces = maas.interfaces([system_id])
|
128
|
+
|
129
|
+
params = {
|
130
|
+
'op' => 'link_subnet',
|
131
|
+
'mode' => 'STATIC',
|
132
|
+
'subnet' => ifaces[index]['id'],
|
133
|
+
'ip_address' => ifaces[index]['ip'],
|
134
|
+
'default_gateway' => 'False',
|
135
|
+
'force' => 'False'
|
136
|
+
}
|
137
|
+
|
138
|
+
maas.interfaces([system_id, interfaces[index]['id']], params)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
89
143
|
def create(name, options = nil)
|
90
144
|
logger.info("Calling <#{__method__.to_s}>")
|
91
145
|
abort("Domain #{name} already exists! Please check both on MAAS and libvirt.") \
|
92
146
|
if maas.domain_name_exists?(name) or domain_exists?(name)
|
93
147
|
|
94
148
|
domain = config[:libvirt][:specs][:default]
|
149
|
+
ifaces = nil
|
150
|
+
|
95
151
|
if options['ipaddresses']
|
96
152
|
ifaces = check_ip_available(options['ipaddresses'], maas, logger)
|
97
153
|
domain = generate_nics(ifaces, domain)
|
@@ -115,58 +171,8 @@ module Gogetit
|
|
115
171
|
system_id = maas.get_system_id(domain[:name])
|
116
172
|
maas.wait_until_state(system_id, 'Ready')
|
117
173
|
|
118
|
-
# To configure interfaces
|
119
174
|
if options['ipaddresses']
|
120
|
-
|
121
|
-
# It assumes you only have a physical interfaces.
|
122
|
-
interfaces = maas.interfaces([system_id])
|
123
|
-
|
124
|
-
maas.interfaces(
|
125
|
-
[system_id, interfaces[0]['id']],
|
126
|
-
{
|
127
|
-
'op' => 'unlink_subnet',
|
128
|
-
'id' => interfaces[0]['links'][0]['id']
|
129
|
-
}
|
130
|
-
)
|
131
|
-
|
132
|
-
# VLAN configuration
|
133
|
-
ifaces.each_with_index do |iface,index|
|
134
|
-
|
135
|
-
if index == 0
|
136
|
-
params = {
|
137
|
-
'op' => 'link_subnet',
|
138
|
-
'mode' => 'STATIC',
|
139
|
-
'subnet' => ifaces[0]['id'],
|
140
|
-
'ip_address' => ifaces[0]['ip'],
|
141
|
-
'default_gateway' => 'True',
|
142
|
-
'force' => 'False'
|
143
|
-
}
|
144
|
-
maas.interfaces([system_id, interfaces[0]['id']], params)
|
145
|
-
|
146
|
-
elsif index > 0
|
147
|
-
params = {
|
148
|
-
'op' => 'create_vlan',
|
149
|
-
'vlan' => iface['vlan']['id'],
|
150
|
-
'parent' => interfaces[0]['id']
|
151
|
-
}
|
152
|
-
maas.interfaces([system_id], params)
|
153
|
-
|
154
|
-
interfaces = maas.interfaces([system_id])
|
155
|
-
|
156
|
-
params = {
|
157
|
-
'op' => 'link_subnet',
|
158
|
-
'mode' => 'STATIC',
|
159
|
-
'subnet' => ifaces[index]['id'],
|
160
|
-
'ip_address' => ifaces[index]['ip'],
|
161
|
-
'default_gateway' => 'False',
|
162
|
-
'force' => 'False'
|
163
|
-
}
|
164
|
-
|
165
|
-
maas.interfaces([system_id, interfaces[index]['id']], params)
|
166
|
-
end
|
167
|
-
|
168
|
-
end
|
169
|
-
|
175
|
+
configure_interfaces(ifaces, system_id)
|
170
176
|
elsif options['vlans']
|
171
177
|
#check_vlan_available(options['vlans'])
|
172
178
|
else
|
@@ -195,7 +201,7 @@ module Gogetit
|
|
195
201
|
'sudo systemctl enable serial-getty@ttyS0.service',
|
196
202
|
'sudo systemctl start serial-getty@ttyS0.service'
|
197
203
|
]
|
198
|
-
run_through_ssh(fqdn,
|
204
|
+
run_through_ssh(fqdn, distro_name, commands, logger)
|
199
205
|
end
|
200
206
|
|
201
207
|
logger.info("#{domain[:name]} has been created.")
|
@@ -238,6 +244,45 @@ module Gogetit
|
|
238
244
|
true
|
239
245
|
end
|
240
246
|
|
247
|
+
def deploy(name, options = nil)
|
248
|
+
logger.info("Calling <#{__method__.to_s}>")
|
249
|
+
abort("The machine, '#{name}', doesn't exist.") \
|
250
|
+
unless maas.machine_exists?(name)
|
251
|
+
|
252
|
+
system_id = maas.get_system_id(name)
|
253
|
+
maas.wait_until_state(system_id, 'Ready')
|
254
|
+
|
255
|
+
logger.info("Calling to deploy...")
|
256
|
+
|
257
|
+
distro = nil
|
258
|
+
if options['distro'].nil? or options['distro'].empty?
|
259
|
+
distro = 'xenial'
|
260
|
+
else
|
261
|
+
distro = options['distro']
|
262
|
+
end
|
263
|
+
|
264
|
+
maas.conn.request(:post, ['machines', system_id], \
|
265
|
+
{'op' => 'deploy', 'distro_series' => distro})
|
266
|
+
maas.wait_until_state(system_id, 'Deployed')
|
267
|
+
|
268
|
+
fqdn = name + '.' + maas.get_domain
|
269
|
+
distro_name = maas.get_distro_name(system_id)
|
270
|
+
wait_until_available(fqdn, distro_name, logger)
|
271
|
+
|
272
|
+
# To enable serial console to use 'virsh console'
|
273
|
+
if distro_name == 'ubuntu'
|
274
|
+
commands = [
|
275
|
+
'sudo systemctl enable serial-getty@ttyS0.service',
|
276
|
+
'sudo systemctl start serial-getty@ttyS0.service'
|
277
|
+
]
|
278
|
+
run_through_ssh(fqdn, distro_name, commands, logger)
|
279
|
+
end
|
280
|
+
|
281
|
+
logger.info("#{name} has been created.")
|
282
|
+
puts "ssh #{distro_name}@#{name}"
|
283
|
+
true
|
284
|
+
end
|
285
|
+
|
241
286
|
def release(name)
|
242
287
|
logger.info("Calling <#{__method__.to_s}>")
|
243
288
|
system_id = maas.get_system_id(name)
|