gogetit 0.7.0 → 0.8.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3fe1aadb7778ccd6b7a4dcf5fadba904e63b27dc
4
- data.tar.gz: 062af3dd9a89457c06a2a6f9996b9a9bcde2c898
3
+ metadata.gz: 01a616e34651706a336ec6a266e45b0ea5facbb1
4
+ data.tar.gz: 7a49f258a50d7b4d5f678daa02c9e67a9e5f19a9
5
5
  SHA512:
6
- metadata.gz: 6ba7a634d943732ca6f4a7a0be8a7834bc79a4ebbab919548789f6870b27c039130dee6f04061dfaefdd4026fa28182e35b11cbcee9abc1bc26c037113f816d8
7
- data.tar.gz: 9c1e82982b6bc8f54dbed794c567c3687f24eae269e4ba9ca8bfadcae102bb2b395863222b4654208cb510410e798d4b90a5d60c196bfccb9e7de9404e8d6c4a
6
+ metadata.gz: ad0e68eaf277c1b05fb6fd1b9b0634f32b79bd30eee220db2b9ec4bfc3f9bfde500e6b326bf59c92d35055b07529846e6d243880a4c83643240ee1e21c3ccb23
7
+ data.tar.gz: fe1334ef49fe38c0b5cbb9a1095176a75d8735a48c8c0c16cec008380086cd04af9f4c39046036a7ce896f4de6f8d75aab286f09fc03a2f92bc737f0a179aef0
data/README.md CHANGED
@@ -56,6 +56,13 @@ gogetit create lxd01 -p lxd -i 192.168.10.10 10.0.0.2
56
56
  gogetit create kvm01 -p libvirt
57
57
  gogetit create kvm01 -p libvirt -i 192.168.10.10 10.0.0.2
58
58
 
59
+ # When specifying alias for LXD provider
60
+ gogetit create kvm01 -a centos7
61
+ gogetit create kvm01 -p lxd -a centos7
62
+
63
+ # When specifying distro for Libvirt provider
64
+ gogetit create kvm01 -p libvirt -d centos
65
+
59
66
  # to create a LXD container without MAAS awareness
60
67
  gogetit create lxd01 --no-maas -f lxd_without_maas.yml
61
68
  gogetit create lxd01 --no-maas -f lxd_without_maas_vlans.yml
@@ -78,6 +85,9 @@ CHEF=true gogetit create chef01
78
85
 
79
86
  # to destroy a container deleting corresponding chef node and client
80
87
  gogetit destroy chef01 --chef
88
+
89
+ # to release a machine(or instance created by libvirt) in MAAS
90
+ gogetit release node01
81
91
  ```
82
92
 
83
93
  ```ruby
@@ -20,7 +20,9 @@ module Gogetit
20
20
  method_option :provider, :aliases => '-p', :type => :string, \
21
21
  :default => 'lxd', :desc => 'A provider such as lxd and libvirt'
22
22
  method_option :alias, :aliases => '-a', :type => :string, \
23
- :default => '', :desc => 'An alias name for a lxd image'
23
+ :desc => 'An alias name for a lxd image'
24
+ method_option :distro, :aliases => '-d', :type => :string, \
25
+ :desc => 'A distro name with its series for libvirt provider'
24
26
  method_option :chef, :aliases => '-c', :type => :boolean, \
25
27
  :default => false, :desc => 'Chef awareness'
26
28
  method_option :vlans, :aliases => '-v', :type => :array, \
@@ -41,6 +43,12 @@ module Gogetit
41
43
  abort("'no-maas' and 'file' have to be set together.") \
42
44
  if options['no-maas'] ^ !!options['file']
43
45
 
46
+ abort("'distro' has to be set with libvirt provider.") \
47
+ if options['distro'] and options['provider'] == 'lxd'
48
+
49
+ abort("'alias' has to be set with lxd provider.") \
50
+ if options['alias'] and options['provider'] == 'libvirt'
51
+
44
52
  case options['provider']
45
53
  when 'lxd'
46
54
  Gogetit.lxd.create(name, options.to_hash)
@@ -57,7 +65,7 @@ module Gogetit
57
65
  end
58
66
  end
59
67
 
60
- desc 'destroy NAME', 'Destroy either a container or KVM domain.'
68
+ desc 'destroy NAME', 'Destroy either a container or KVM instance.'
61
69
  method_option :chef, :type => :boolean, :desc => "Enable chef awareness."
62
70
  def destroy(name)
63
71
  # Let Gogetit recognize the provider.
@@ -79,6 +87,28 @@ module Gogetit
79
87
  end
80
88
  end
81
89
 
90
+ desc 'release NAME', 'Release a node in MAAS'
91
+ method_option :chef, :type => :boolean, :desc => "Enable chef awareness."
92
+ def release(name)
93
+ # Let Gogetit recognize the provider.
94
+ provider = Gogetit.get_provider_of(name)
95
+ if provider
96
+ case provider
97
+ when 'lxd'
98
+ abort('This method is not available for LXD container.')
99
+ when 'libvirt'
100
+ Gogetit.libvirt.release(name)
101
+ else
102
+ abort('Invalid argument entered.')
103
+ end
104
+ end
105
+ # post-tasks
106
+ if options['chef']
107
+ knife_remove(name, Gogetit.logger) if options[:chef]
108
+ update_databags(Gogetit.config, Gogetit.logger)
109
+ end
110
+ end
111
+
82
112
  # This feature is broken and might be deprecated in the future.
83
113
  # desc 'rebuild NAME', 'Destroy and create either a container or KVM domain again.'
84
114
  # def rebuild(type=nil, name)
@@ -28,6 +28,14 @@ module Gogetit
28
28
  false
29
29
  end
30
30
 
31
+ def get_distro_name(system_id)
32
+ logger.info("Calling <#{__method__.to_s}>")
33
+ conn.request(:get, ['machines']).each do |m|
34
+ return m['osystem'] if m['system_id'] == system_id
35
+ end
36
+ false
37
+ end
38
+
31
39
  def dnsresource_exists?(name)
32
40
  logger.info("Calling <#{__method__.to_s}>")
33
41
  conn.request(:get, ['dnsresources']).each do |item|
@@ -201,6 +209,7 @@ module Gogetit
201
209
  until conn.request(:get, ['machines', system_id])['status_name'] == state
202
210
  sleep 3
203
211
  end
212
+ logger.info("The status has become '#{state}'.")
204
213
  end
205
214
 
206
215
  def get_machine_state(system_id)
@@ -141,7 +141,7 @@ module Gogetit
141
141
  end
142
142
  end
143
143
 
144
- def wait_until_available(ip_or_fqdn, logger)
144
+ def wait_until_available(ip_or_fqdn, distro_name, logger)
145
145
  logger.info("Calling <#{__method__.to_s}>")
146
146
  until ping_available?(ip_or_fqdn, logger)
147
147
  logger.info("Calling <#{__method__.to_s}> for ping to be ready..")
@@ -149,7 +149,7 @@ module Gogetit
149
149
  end
150
150
  logger.info("#{ip_or_fqdn} is now available to ping..")
151
151
 
152
- until ssh_available?(ip_or_fqdn, 'ubuntu', logger)
152
+ until ssh_available?(ip_or_fqdn, distro_name, logger)
153
153
  logger.info("Calling <#{__method__.to_s}> for ssh to be ready..")
154
154
  sleep 3
155
155
  end
@@ -185,9 +185,9 @@ module Gogetit
185
185
  return ifaces
186
186
  end
187
187
 
188
- def run_through_ssh(host, commands, logger)
188
+ def run_through_ssh(host, distro_name, commands, logger)
189
189
  logger.info("Calling <#{__method__.to_s}>")
190
- Net::SSH.start(host, 'ubuntu') do |ssh|
190
+ Net::SSH.start(host, distro_name) do |ssh|
191
191
  commands.each do |cmd|
192
192
  logger.info("'#{cmd}' is being executed..")
193
193
  output = ssh.exec!(cmd)
@@ -1,3 +1,3 @@
1
1
  module Gogetit
2
- VERSION = "0.7.0"
2
+ VERSION = "0.8.0"
3
3
  end
@@ -95,8 +95,8 @@ module Gogetit
95
95
  if options['ipaddresses']
96
96
  ifaces = check_ip_available(options['ipaddresses'], maas, logger)
97
97
  domain = generate_nics(ifaces, domain)
98
- elsif options[:vlans]
99
- #check_vlan_available(options[:vlans])
98
+ elsif options['vlans']
99
+ #check_vlan_available(options['vlans'])
100
100
  else
101
101
  domain[:nic] = [
102
102
  {
@@ -167,26 +167,39 @@ module Gogetit
167
167
 
168
168
  end
169
169
 
170
- elsif options[:vlans]
171
- #check_vlan_available(options[:vlans])
170
+ elsif options['vlans']
171
+ #check_vlan_available(options['vlans'])
172
172
  else
173
173
  end
174
174
 
175
175
  logger.info("Calling to deploy...")
176
- maas.conn.request(:post, ['machines', system_id], {'op' => 'deploy'})
176
+
177
+ distro = nil
178
+ if options['distro'].nil? or options['distro'].empty?
179
+ distro = 'xenial'
180
+ else
181
+ distro = options['distro']
182
+ end
183
+
184
+ maas.conn.request(:post, ['machines', system_id], \
185
+ {'op' => 'deploy', 'distro_series' => distro})
177
186
  maas.wait_until_state(system_id, 'Deployed')
178
187
 
179
188
  fqdn = name + '.' + maas.get_domain
180
- wait_until_available(fqdn, logger)
189
+ distro_name = maas.get_distro_name(system_id)
190
+ wait_until_available(fqdn, distro_name, logger)
181
191
 
182
192
  # To enable serial console to use 'virsh console'
183
- commands = [
184
- 'sudo systemctl enable serial-getty@ttyS0.service',
185
- 'sudo systemctl start serial-getty@ttyS0.service'
186
- ]
187
- run_through_ssh(fqdn, commands, logger)
193
+ if distro_name == 'ubuntu'
194
+ commands = [
195
+ 'sudo systemctl enable serial-getty@ttyS0.service',
196
+ 'sudo systemctl start serial-getty@ttyS0.service'
197
+ ]
198
+ run_through_ssh(fqdn, commands, distro_name, logger)
199
+ end
188
200
 
189
201
  logger.info("#{domain[:name]} has been created.")
202
+ puts "ssh #{distro_name}@#{name}"
190
203
  true
191
204
  end
192
205
 
@@ -225,6 +238,22 @@ module Gogetit
225
238
  true
226
239
  end
227
240
 
241
+ def release(name)
242
+ logger.info("Calling <#{__method__.to_s}>")
243
+ system_id = maas.get_system_id(name)
244
+ if maas.machine_exists?(name)
245
+ if maas.get_machine_state(system_id) == 'Deployed'
246
+ logger.info("Calling to release...")
247
+ maas.conn.request(:post, ['machines', system_id], {'op' => 'release'})
248
+ maas.wait_until_state(system_id, 'Ready')
249
+ end
250
+ end
251
+
252
+ maas.refresh_pods
253
+ logger.info("#{name} has been released.")
254
+ true
255
+ end
256
+
228
257
  def define_domain(domain)
229
258
  logger.info("Calling <#{__method__.to_s}>")
230
259
  template = File.read(config[:lib_dir] + '/template/domain.xml')
@@ -318,9 +318,6 @@ module Gogetit
318
318
  ip_or_fqdn = name + '.' + maas.get_domain
319
319
  end
320
320
 
321
- wait_until_available(ip_or_fqdn, logger)
322
- logger.info("#{name} has been created.")
323
-
324
321
  if conn.execute_command(name, "ls /etc/lsb-release")[:metadata][:return] == 0
325
322
  default_user = 'ubuntu'
326
323
  elsif conn.execute_command(name, "ls /etc/redhat-release")[:metadata][:return] == 0
@@ -329,6 +326,9 @@ module Gogetit
329
326
  default_user = config[:default][:user]
330
327
  end
331
328
 
329
+ wait_until_available(ip_or_fqdn, default_user, logger)
330
+ logger.info("#{name} has been created.")
331
+
332
332
  if options['no-maas']
333
333
  puts "ssh #{default_user}@#{options['ip_to_access']}"
334
334
  else
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gogetit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Don Draper
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-08 00:00:00.000000000 Z
11
+ date: 2017-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler