chef-provisioning-opennebula 0.4.6 → 0.4.7

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: be70c3a2ff409635c15cdb3983c4947e526b1af4
4
- data.tar.gz: f0d93e05af640ebc8672f0ad9ed7cf83d5f41a94
3
+ metadata.gz: 04a47001d99e4d12e8d704f0f441e80582955566
4
+ data.tar.gz: d7a148664849bd390c62620eb80434077a4bcb0d
5
5
  SHA512:
6
- metadata.gz: 432068196cae2b47b31b434588493dba50f99972d4d06004ca6ffd0dc60c54b448b7ef6ee049951c87833a451259ed9bd3b4ea4806beca28185a2c4bb2d885bf
7
- data.tar.gz: 957716c65b152719733f36643b1629b511c392f28e9c4459dec66eb5a8041708c7c4a1c958dacae2835e1f9f4e4199e88840d43be2207d8d2c360446653b6703
6
+ metadata.gz: 0c92fd314d1d51900a3d6ea3ce52316fa6ebf5123c988fe815b2e1fdb2a926ddc790cd9b657f51cd6799c6790a91ced34b040e3c71a681a6d555e787d8c8cef7
7
+ data.tar.gz: 209eb0984670a5ecfe358c8db13369952ccec9f988b2698dc3eca504df14988a32610cf560a4fae163830ebf85e7d51588f7ad8bf7d0e5947c1bfcb5e3dd7ed3
@@ -87,7 +87,12 @@ class Chef
87
87
  require 'opennebula'
88
88
  rescue Gem::LoadError => e
89
89
  e_inspect = e.inspect
90
- raise e unless e_inspect.include?('already activated')
90
+ unless e_inspect.include?('already activated')
91
+ info_out, info_err = Open3.capture2e("gem environment")
92
+ Chef::Log.fatal("Please check your environment settings")
93
+ Chef::Log.fatal(info_out + "\n" + info_err)
94
+ raise e
95
+ end
91
96
  end
92
97
  require 'chef/provisioning/opennebula_driver/one_lib'
93
98
  gem_version = Gem.loaded_specs['opennebula'].version.to_s
@@ -203,6 +208,10 @@ class Chef
203
208
  return machine_spec unless instance.nil?
204
209
 
205
210
  unless machine_options[:bootstrap_options]
211
+ instance = retry_one("Retrying allocate_machine.instance_for (missing bootstrap options)") do
212
+ instance_for(machine_spec)
213
+ end
214
+ return machine_spec unless instance.nil?
206
215
  fail "'bootstrap_options' must be specified"
207
216
  end
208
217
  check_unique_names(machine_options, machine_spec)
@@ -643,25 +652,12 @@ class Chef
643
652
 
644
653
  transport = Chef::Provisioning::Transport::SSH.new(machine_spec.reference['ip'], username, ssh_options, options, config)
645
654
 
646
- rc = retryable_operation("Waiting for SSH connection", connection_timeout.to_i) { transport.available? }
655
+ retries = connection_timeout.to_i / 3
656
+ rc = @one.retry_one("Waiting for SSH connection", retries, 3) { transport.available? ? true : nil }
647
657
  fail "Failed to establish SSH connection to '#{machine_spec.name}'" if rc.nil?
648
658
  transport
649
659
  end
650
660
 
651
- # Retry an operation until the timeout expires. Will always try at least once.
652
- def retryable_operation(msg = "operation", timeout = 15, delay = 3)
653
- return nil unless block_given?
654
- start = Time.now
655
- loop do
656
- return true if yield
657
- Chef::Log.info(msg)
658
- sleep delay
659
- break if (Time.now - start) > timeout
660
- end
661
- Chef::Log.error("Timed out waiting for operation to complete: '#{msg}'")
662
- nil
663
- end
664
-
665
661
  def convergence_strategy_for(machine_spec, machine_options)
666
662
  # TODO: Support Windoze VMs (see chef-provisioning-vagrant)
667
663
  convergence_options = Cheffish::MergedConfig.new(machine_options ? machine_options[:convergence_options] || {} : {})
@@ -173,34 +173,41 @@ class Chef
173
173
  fail "Did not find VM with ID: #{id}" unless vm
174
174
 
175
175
  # Wait up to 10 min for the VM to be ready
176
- rc = retryable_operation("wait for VM #{id} to be ready", 600, 2) do
176
+ rc = retry_one("wait for VM #{id} to be ready", 300, 2) do
177
177
  vm.info
178
178
  if vm.lcm_state_str != 'LCM_INIT'
179
179
  short_lcm = OpenNebula::VirtualMachine::SHORT_LCM_STATES[vm.lcm_state_str]
180
180
  fail "'#{vm.name}'' failed. Current state: #{vm.lcm_state_str}" if short_lcm == 'fail'
181
181
  end
182
182
  fail "'#{vm.name}'' failed. Current state: #{vm.state_str}" if vm.state_str == 'FAILED'
183
- Chef::Log.info("current state: '#{vm.lcm_state_str}' short: '#{short_lcm}'")
184
- OpenNebula::Error.new("Waiting") unless vm.lcm_state_str.casecmp(end_state) == 0
183
+ Chef::Log.info("current state #{vm.name}: '#{vm.lcm_state_str}' short: '#{short_lcm}'")
184
+ vm.lcm_state_str.casecmp(end_state) == 0 ? true : nil
185
185
  end
186
186
  fail "wait_for_vm timed out: '#{id}'" if rc.nil?
187
187
  vm
188
188
  end
189
189
 
190
- # Retry an OpenNebula operation until the timeout expires. Will always try at least once.
191
- def retryable_operation(msg = "operation", timeout = 15, delay = 2)
190
+ # Retry ONE operation
191
+ def retry_one(msg = "retry_one", retries = 3, retry_delay = 5, return_nil = false, return_error = false)
192
192
  return nil unless block_given?
193
- start = Time.now
193
+ count = 1
194
194
  rc = nil
195
195
  loop do
196
196
  rc = yield
197
- return true unless OpenNebula.is_error?(rc)
198
197
  Chef::Log.info(msg)
199
- sleep delay
200
- break if (Time.now - start) > timeout
198
+ if OpenNebula.is_error?(rc)
199
+ return rc if return_error
200
+ elsif rc.nil?
201
+ return rc if return_nil
202
+ else
203
+ return rc
204
+ end
205
+ sleep retry_delay
206
+ break if count == retries
207
+ count += 1
201
208
  end
202
- Chef::Log.info("Timed out waiting for OpenNebula operation. Got error #{rc.message} from OpenNebula.")
203
- nil
209
+ Chef::Log.info("FAIL: one_lib.retry_one '#{msg}'")
210
+ rc
204
211
  end
205
212
 
206
213
  def rename_vm(res, name)
@@ -269,7 +276,7 @@ DEV_PREFIX = #{img_config[:prefix]}
269
276
  state = 'INIT'
270
277
  pool = get_pool(:image)
271
278
 
272
- retryable_operation("wait for IMAGE #{img_id} to be ready", 600, 2) do
279
+ retry_one("wait for IMAGE #{img_id} to be ready", 600, 2) do
273
280
  pool.info!(-2, img_id, img_id)
274
281
  pool.each do |img|
275
282
  next unless img.id == img_id
@@ -279,7 +286,7 @@ DEV_PREFIX = #{img_config[:prefix]}
279
286
  state = cur_state
280
287
  break
281
288
  end
282
- OpenNebula::Error.new("Waiting") if state == 'INIT' || state == 'LOCKED'
289
+ (state == 'INIT' || state == 'LOCKED') ? nil : true
283
290
  end
284
291
  fail "Failed to create #{name} image. State = '#{state}'" if state != 'READY'
285
292
  Chef::Log.info("Image #{name} is in READY state")
@@ -368,10 +375,6 @@ DEV_PREFIX = #{img_config[:prefix]}
368
375
  unless t_hash['CONTEXT']['SSH_PUBLIC_KEY']
369
376
  t_hash['CONTEXT']['SSH_PUBLIC_KEY'] = "$USER[SSH_PUBLIC_KEY]"
370
377
  end
371
- unless t_hash['CONTEXT']['USER_DATA']
372
- t_hash['CONTEXT']['USER_DATA'] = "#cloud-config\n" \
373
- "manage_etc_hosts: true\n"
374
- end
375
378
  tpl = create_template(t_hash)
376
379
  Chef::Log.debug(tpl)
377
380
  tpl
@@ -24,7 +24,7 @@ class Chef
24
24
  # Extending module.
25
25
  #
26
26
  module OpenNebulaDriver
27
- VERSION = '0.4.6'.freeze
27
+ VERSION = '0.4.7'.freeze
28
28
  end
29
29
  end
30
30
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-provisioning-opennebula
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.6
4
+ version: 0.4.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew J. Brown
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2016-05-13 00:00:00.000000000 Z
15
+ date: 2016-08-19 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: chef
@@ -96,6 +96,20 @@ dependencies:
96
96
  - - ">="
97
97
  - !ruby/object:Gem::Version
98
98
  version: 1.8.3
99
+ - !ruby/object:Gem::Dependency
100
+ name: http-cookie
101
+ requirement: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: 1.0.2
106
+ type: :runtime
107
+ prerelease: false
108
+ version_requirements: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: 1.0.2
99
113
  - !ruby/object:Gem::Dependency
100
114
  name: rspec
101
115
  requirement: !ruby/object:Gem::Requirement