chef-provisioning-opennebula 0.4.6 → 0.4.7

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