chef-provisioning 0.19 → 0.20
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 +4 -4
- data/CHANGELOG.md +62 -32
- data/lib/chef/provider/load_balancer.rb +18 -8
- data/lib/chef/provider/machine.rb +11 -7
- data/lib/chef/provider/machine_batch.rb +8 -4
- data/lib/chef/provider/machine_execute.rb +1 -1
- data/lib/chef/provider/machine_image.rb +46 -14
- data/lib/chef/provisioning.rb +9 -1
- data/lib/chef/provisioning/chef_managed_entry_store.rb +128 -0
- data/lib/chef/provisioning/chef_run_data.rb +9 -16
- data/lib/chef/provisioning/convergence_strategy/install_cached.rb +25 -7
- data/lib/chef/provisioning/convergence_strategy/install_msi.rb +26 -8
- data/lib/chef/provisioning/convergence_strategy/install_sh.rb +28 -6
- data/lib/chef/provisioning/driver.rb +28 -21
- data/lib/chef/provisioning/load_balancer_spec.rb +6 -71
- data/lib/chef/provisioning/machine_image_spec.rb +34 -0
- data/lib/chef/provisioning/machine_spec.rb +23 -47
- data/lib/chef/provisioning/managed_entry.rb +121 -0
- data/lib/chef/provisioning/managed_entry_store.rb +136 -0
- data/lib/chef/provisioning/recipe_dsl.rb +0 -4
- data/lib/chef/provisioning/version.rb +1 -1
- data/lib/chef/resource/chef_data_bag_resource.rb +1 -2
- data/lib/chef/resource/load_balancer.rb +1 -0
- data/lib/chef/resource/machine.rb +1 -1
- data/lib/chef/resource/machine_batch.rb +2 -2
- data/lib/chef/resource/machine_execute.rb +2 -1
- metadata +7 -8
- data/lib/chef/provisioning/chef_image_spec.rb +0 -111
- data/lib/chef/provisioning/chef_load_balancer_spec.rb +0 -108
- data/lib/chef/provisioning/chef_machine_spec.rb +0 -83
- data/lib/chef/provisioning/image_spec.rb +0 -72
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cef7f76f812dd3448e17029ab8f1a6ad7e6fbae0
|
4
|
+
data.tar.gz: c4eb855e69e250a2116b0cf76c86c9564f289e6d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84b90c58824627cfa6e867e6ec5bd6a4bd9537eabc2713206efcebb8132b30baf1eeb81baa21088ef901d2f411d1f7ed3fcb3d17a0ce969a9e49a720f24407ed
|
7
|
+
data.tar.gz: 9314c432528799c4f75b9d9821e1d9ce64dceecdb1ede33247b4c3b56d3f7e88ad7ed2b2e81002106a13a17c0b423cfeb49f1540aee09d2480b660e367a3877c
|
data/CHANGELOG.md
CHANGED
@@ -1,29 +1,33 @@
|
|
1
1
|
# Chef Provisioning Changelog
|
2
2
|
|
3
|
+
## 0.20 (2/25/2015)
|
4
|
+
|
5
|
+
- Marking machines `nil` in a load_balancer does not affect existing machines ([#299][])
|
6
|
+
- `with_driver` now optionally accepts a block. If passed, it is only active in that block. If not passed, existing behavior is unchanged. ([#296][])
|
7
|
+
- New `show_output` attribute for `machine_execute`, defaults to false ([@causton1][])
|
8
|
+
- Changed `MachineSpec` storage to `ManagedEntry`. Driver authors, see PR for details ([#297][])
|
9
|
+
- If specifying exact chef version, don't re-install every chef-provisioning ([#303][])
|
10
|
+
|
3
11
|
## 0.19 (2/25/2015)
|
4
12
|
|
5
13
|
- Support for different versions of Chef with the :chef_version and :prerelease arguments (`machine_options convergence_options: { chef_version: '12.0.1' }` or `prerelease: true`)
|
6
|
-
- Support HTTPS proxy (@causton1)
|
14
|
+
- Support HTTPS proxy ([@causton1][])
|
7
15
|
- Automatically configure HTTPS proxy when specifying `machine_options convergence_options: { http_proxy: '...' }`
|
8
16
|
- Support for arbitrary configuration using `machine_options convergence_options: { chef_config: "anything you want dumped in /etc/chef/client.rb (will be appended to the standard options already placed in the file)" }`
|
9
17
|
|
10
|
-
- Make load_balancer :destroy work (@lynchc)
|
11
|
-
- Default to SSL for Chef install download (@xeon22)
|
12
|
-
- Fix Chef overwriting attributes on first converge in `machine_batch` (#209)
|
13
|
-
- Fix node permissions on Hosted / Enterprise Chef: no more adding your clients to the `admins` group (ewww). (#59)
|
14
|
-
- Always pass an array (never nil) to the driver, even when there are no machines to add to it (partial fix for chef/chef-provisioning-aws#81)
|
15
|
-
-
|
16
|
-
|
17
|
-
|
18
|
-
915eac3 (origin/jk/install-sh-version, jk/install-sh-version) Add chef_version, prerelease and install_sh_arguments to InstallSh
|
18
|
+
- Make load_balancer :destroy work ([@lynchc][])
|
19
|
+
- Default to SSL for Chef install download ([@xeon22][])
|
20
|
+
- Fix Chef overwriting attributes on first converge in `machine_batch` ([#209][])
|
21
|
+
- Fix node permissions on Hosted / Enterprise Chef: no more adding your clients to the `admins` group (ewww). ([#59][])
|
22
|
+
- Always pass an array (never nil) to the driver, even when there are no machines to add to it (partial fix for chef/chef-provisioning-aws[#81][])
|
19
23
|
|
20
24
|
## 0.18 (1/27/2015)
|
21
25
|
|
22
|
-
- Allow `ssl_verify_mode` to be overridden (@mivok)
|
23
|
-
- Support `machine_options[:convergence_options][:bootstrap_proxy]` (@mivok)
|
24
|
-
- Allow `machine_options[:ssh_gateway]` without username (no @) (@mivok)
|
26
|
+
- Allow `ssl_verify_mode` to be overridden ([@mivok][])
|
27
|
+
- Support `machine_options[:convergence_options][:bootstrap_proxy]` ([@mivok][])
|
28
|
+
- Allow `machine_options[:ssh_gateway]` without username (no @) ([@mivok][])
|
25
29
|
- Fix issue with net-ssh 2.9.2
|
26
|
-
- Add `action :destroy` to `machine_image` (@miguelcnf)
|
30
|
+
- Add `action :destroy` to `machine_image` ([@miguelcnf][])
|
27
31
|
|
28
32
|
## 0.17 (12/17/2014)
|
29
33
|
|
@@ -68,7 +72,7 @@
|
|
68
72
|
|
69
73
|
## 0.14 (8/18/2014)
|
70
74
|
|
71
|
-
- FEATURE: Add the machine_image resource (@jkeiser, @johnewart):
|
75
|
+
- FEATURE: Add the machine_image resource ([@jkeiser][], [@johnewart][]):
|
72
76
|
```ruby
|
73
77
|
machine_image 'base' do
|
74
78
|
machine_options :bootstrap_options => { :image_id => 'ami-1234798123431', :ssh_username => 'root' }
|
@@ -104,7 +108,7 @@
|
|
104
108
|
- Creates a node with the name of the machine_image, which contains metadata
|
105
109
|
like the username of the image. This makes things like AWS image registries
|
106
110
|
possible.
|
107
|
-
- Fix the no_converge convergence strategy (@johnewart)
|
111
|
+
- Fix the no_converge convergence strategy ([@johnewart][])
|
108
112
|
- SSH port forwarding improvements:
|
109
113
|
- Detects *any* IP on the localhost and forwards it--not just 127.0.0.1
|
110
114
|
- Binds to localhost on the remote side instead of 127.0.0.1, allowing for IPv6 communication
|
@@ -114,8 +118,8 @@
|
|
114
118
|
|
115
119
|
## 0.13 (6/17/2014)
|
116
120
|
|
117
|
-
- make winrm work again (@mwrock)
|
118
|
-
- add bootstrap_proxy as a convergence_option for when target machines require a proxy (@MrMMorris)
|
121
|
+
- make winrm work again ([@mwrock][])
|
122
|
+
- add bootstrap_proxy as a convergence_option for when target machines require a proxy ([@MrMMorris][])
|
119
123
|
|
120
124
|
## 0.12.1 (6/18/2014)
|
121
125
|
|
@@ -125,8 +129,8 @@
|
|
125
129
|
## 0.12 (6/18/2014)
|
126
130
|
|
127
131
|
- Remove chef-provisioning-fog and chef-provisioning-vagrant as dependencies (install whatever things you want directly!)
|
128
|
-
- Fix ssl_verify_mode to work correctly when other HTTPS calls are made (@mwrock)
|
129
|
-
- Fix machine_file and machine_execute resources (@irvingpop)
|
132
|
+
- Fix ssl_verify_mode to work correctly when other HTTPS calls are made ([@mwrock][])
|
133
|
+
- Fix machine_file and machine_execute resources ([@irvingpop][])
|
130
134
|
|
131
135
|
## 0.11.2 (6/4/2014)
|
132
136
|
|
@@ -143,8 +147,8 @@
|
|
143
147
|
- get rid of annoying SSL warning (note: this turns off SSL verification, which was the default anyway)
|
144
148
|
- fix machine_batch error report to be less verbose
|
145
149
|
- fail when machine is being moved from driver to driver
|
146
|
-
- @marcusn disconnect from SSH when there is a problem
|
147
|
-
- fix SSH gateway code to honor any options given (@marcusn)
|
150
|
+
- [@marcusn][] disconnect from SSH when there is a problem
|
151
|
+
- fix SSH gateway code to honor any options given ([@marcusn][])
|
148
152
|
- Make machine_batch auto batching smarter (only batch things that have the same actions)
|
149
153
|
- Allow auto batching to be turned off with `auto_batch_machines = false` in recipes or config
|
150
154
|
- Allow this:
|
@@ -197,8 +201,8 @@
|
|
197
201
|
## 0.9 (4/9/2014)
|
198
202
|
|
199
203
|
- Add `files` and `file` attributes to the `machine` resource
|
200
|
-
- Fix `machine_execute` resource (@irvingpop)
|
201
|
-
- Fix `machine :converge` action (thanks @double-z)
|
204
|
+
- Fix `machine_execute` resource ([@irvingpop][])
|
205
|
+
- Fix `machine :converge` action (thanks [@double-z][])
|
202
206
|
- Make chef-client timeout longer by default (2 hours)
|
203
207
|
- Make chef_client_timeout a configurable option for all convergence strategies and provisioner_options
|
204
208
|
- Add `metal cp` command
|
@@ -207,7 +211,7 @@
|
|
207
211
|
|
208
212
|
- Add timeout support to execute
|
209
213
|
- Fix machine_file resource
|
210
|
-
- Add ohai_hints DSL to machine resource (@xorl)
|
214
|
+
- Add ohai_hints DSL to machine resource ([@xorl][])
|
211
215
|
|
212
216
|
## 0.8.1 (4/9/2014)
|
213
217
|
|
@@ -219,7 +223,7 @@
|
|
219
223
|
|
220
224
|
## 0.8 (4/8/2014)
|
221
225
|
|
222
|
-
- New machine_execute resource! (irving@chef.io)
|
226
|
+
- New machine_execute resource! (irving[@chef][].io)
|
223
227
|
- Experimental "metal" command line: metal execute NODENAME COMMAND ARGS
|
224
228
|
- Transport: Add ability to stream execute() for better nested chef-client debugging
|
225
229
|
|
@@ -234,23 +238,49 @@
|
|
234
238
|
|
235
239
|
## 0.5 (4/3/2014)
|
236
240
|
|
237
|
-
* Provisioner interface changes designed to allow provisioners to be used outside of Chef (doubt@chef.io)
|
241
|
+
* Provisioner interface changes designed to allow provisioners to be used outside of Chef (doubt[@chef][].io)
|
238
242
|
* All Provisioner and Machine methods now take "action_handler" instead of "driver." It uses the ActionHandler interface described in action_handler.rb. In short:
|
239
243
|
- driver.run_context -> action_handler.recipe_context
|
240
244
|
- driver.updated_by_last_action(true) -> action_handler.updated!
|
241
245
|
- driver.converge_by -> action_handler.perform_action
|
242
246
|
- driver.cookbook_name -> driver.debug_name
|
243
247
|
* Convergence strategy: delete_chef_objects() -> cleanup_convergence()
|
244
|
-
* Ability to get back to a machine from a node (another Provisioner interface change) (doubt@chef.io):
|
248
|
+
* Ability to get back to a machine from a node (another Provisioner interface change) (doubt[@chef][].io):
|
245
249
|
* Provisioners must create a file named `chef_provisioning/provisioner_init/<scheme>_init.rb`. It will be required when a node is encountered with that scheme. It should call Chef::Provisioning.add_registered_provisioner_class(<scheme>, <provisioner class name>). For the provisioner_url `fog:AWS:21348723432`, the scheme is "fog" and the file is `chef_provisioningprovisioner_init/fog_init.rb`. It should call `Chef::Provisioning.add_registered_provisioner_class('fog', Chef::Provisioning::Provisioner::FogProvisioner)`.
|
246
250
|
* Provisioner classes must implement the class method `inflate(node)`, which should create a Provisioner instance appropriate to the given `node` (generally by looking at `node['normal']['provisioner_output']`)
|
247
251
|
* New `NoConverge` convergence strategy that creates a node but does not install Chef or converge.
|
248
|
-
* Support for machine_file `group`, `owner` and `mode` attributes (@irvingpop)
|
249
|
-
* SSH transport (ryan@segv.net): try to enable pty when possible (increases chance of successful connection). Set options[:ssh_pty_enable] to `false` to turn this off. Set `true` to force it (and fail if we can't get it)
|
252
|
+
* Support for machine_file `group`, `owner` and `mode` attributes ([@irvingpop][])
|
253
|
+
* SSH transport (ryan[@segv][].net): try to enable pty when possible (increases chance of successful connection). Set options[:ssh_pty_enable] to `false` to turn this off. Set `true` to force it (and fail if we can't get it)
|
250
254
|
|
251
255
|
## 0.4 (3/29/2014)
|
252
256
|
|
253
257
|
* EC2: Make it possible for multiple IAM users to converge chef-provisioning on the same account
|
254
|
-
* Openstack: Openstack support via the Fog driver! (@cstewart87)
|
255
|
-
* EC2: Add :use_private_ip_for_ssh option, and use private ip by default if public IP does not exist. (@xorl, @dafyddcrosby)
|
258
|
+
* Openstack: Openstack support via the Fog driver! ([@cstewart87][])
|
259
|
+
* EC2: Add :use_private_ip_for_ssh option, and use private ip by default if public IP does not exist. ([@xorl][], [@dafyddcrosby][])
|
256
260
|
* RHEL/Centos: fix platform detection and installation
|
261
|
+
|
262
|
+
<!--- The following link definition list is generated by PimpMyChangelog --->
|
263
|
+
[#59]: https://github.com/chef/chef-provisioning/issues/59
|
264
|
+
[#81]: https://github.com/chef/chef-provisioning/issues/81
|
265
|
+
[#209]: https://github.com/chef/chef-provisioning/issues/209
|
266
|
+
[#296]: https://github.com/chef/chef-provisioning/issues/296
|
267
|
+
[#297]: https://github.com/chef/chef-provisioning/issues/297
|
268
|
+
[#299]: https://github.com/chef/chef-provisioning/issues/299
|
269
|
+
[#303]: https://github.com/chef/chef-provisioning/issues/303
|
270
|
+
[@MrMMorris]: https://github.com/MrMMorris
|
271
|
+
[@causton1]: https://github.com/causton1
|
272
|
+
[@chef]: https://github.com/chef
|
273
|
+
[@cstewart87]: https://github.com/cstewart87
|
274
|
+
[@dafyddcrosby]: https://github.com/dafyddcrosby
|
275
|
+
[@double-z]: https://github.com/double-z
|
276
|
+
[@irvingpop]: https://github.com/irvingpop
|
277
|
+
[@jkeiser]: https://github.com/jkeiser
|
278
|
+
[@johnewart]: https://github.com/johnewart
|
279
|
+
[@lynchc]: https://github.com/lynchc
|
280
|
+
[@marcusn]: https://github.com/marcusn
|
281
|
+
[@miguelcnf]: https://github.com/miguelcnf
|
282
|
+
[@mivok]: https://github.com/mivok
|
283
|
+
[@mwrock]: https://github.com/mwrock
|
284
|
+
[@segv]: https://github.com/segv
|
285
|
+
[@xeon22]: https://github.com/xeon22
|
286
|
+
[@xorl]: https://github.com/xorl
|
@@ -2,7 +2,6 @@ require 'chef/provider/lwrp_base'
|
|
2
2
|
require 'chef/provider/chef_node'
|
3
3
|
require 'openssl'
|
4
4
|
require 'chef/provisioning/chef_provider_action_handler'
|
5
|
-
require 'chef/provisioning/chef_load_balancer_spec'
|
6
5
|
|
7
6
|
class Chef
|
8
7
|
class Provider
|
@@ -20,12 +19,17 @@ class Chef
|
|
20
19
|
@new_driver ||= run_context.chef_metal.driver_for(new_resource.driver)
|
21
20
|
end
|
22
21
|
|
22
|
+
def chef_managed_entry_store
|
23
|
+
@chef_managed_entry_store ||= Provisioning.chef_managed_entry_store(new_resource.chef_server)
|
24
|
+
end
|
25
|
+
|
23
26
|
action :create do
|
24
|
-
lb_spec =
|
25
|
-
Chef::Provisioning::ChefLoadBalancerSpec.empty(new_resource.name)
|
27
|
+
lb_spec = chef_managed_entry_store.get_or_new(:load_balancer, new_resource.name)
|
26
28
|
|
27
29
|
Chef::Log.debug "Creating load balancer: #{new_resource.name}; loaded #{lb_spec.inspect}"
|
28
|
-
|
30
|
+
if new_resource.machines
|
31
|
+
machine_specs = new_resource.machines.map { |machine| get_machine_spec!(machine) }
|
32
|
+
end
|
29
33
|
|
30
34
|
new_driver.allocate_load_balancer(action_handler, lb_spec, lb_options, machine_specs)
|
31
35
|
lb_spec.save(action_handler)
|
@@ -33,14 +37,17 @@ class Chef
|
|
33
37
|
end
|
34
38
|
|
35
39
|
action :destroy do
|
36
|
-
lb_spec =
|
37
|
-
|
40
|
+
lb_spec = chef_managed_entry_store.get(:load_balancer, new_resource.name)
|
41
|
+
if lb_spec
|
42
|
+
new_driver.destroy_load_balancer(action_handler, lb_spec, lb_options)
|
43
|
+
end
|
38
44
|
end
|
39
45
|
|
40
46
|
private
|
41
|
-
|
47
|
+
|
48
|
+
def get_machine_spec!(machine_name)
|
42
49
|
Chef::Log.debug "Getting machine spec for #{machine_name}"
|
43
|
-
|
50
|
+
Provisioning.chef_managed_entry_store(new_resource.chef_server).get!(:machine, machine_name)
|
44
51
|
end
|
45
52
|
|
46
53
|
def lb_options
|
@@ -50,3 +57,6 @@ class Chef
|
|
50
57
|
end
|
51
58
|
end
|
52
59
|
end
|
60
|
+
|
61
|
+
require 'chef/provisioning/chef_managed_entry_store'
|
62
|
+
Chef::Provisioning::ChefManagedEntryStore.type_names_for_backcompat[:load_balancer] = "loadbalancers"
|
@@ -2,7 +2,6 @@ require 'chef/provider/lwrp_base'
|
|
2
2
|
require 'chef/provider/chef_node'
|
3
3
|
require 'openssl'
|
4
4
|
require 'chef/provisioning/chef_provider_action_handler'
|
5
|
-
require 'chef/provisioning/chef_machine_spec'
|
6
5
|
|
7
6
|
class Chef
|
8
7
|
class Provider
|
@@ -11,6 +10,9 @@ class Machine < Chef::Provider::LWRPBase
|
|
11
10
|
def action_handler
|
12
11
|
@action_handler ||= Chef::Provisioning::ChefProviderActionHandler.new(self)
|
13
12
|
end
|
13
|
+
def action_handler=(value)
|
14
|
+
@action_handler = value
|
15
|
+
end
|
14
16
|
|
15
17
|
use_inline_resources
|
16
18
|
|
@@ -26,6 +28,8 @@ class Machine < Chef::Provider::LWRPBase
|
|
26
28
|
raise "Cannot move '#{machine_spec.name}' from #{current_driver.driver_url} to #{new_driver.driver_url}: machine moving is not supported. Destroy and recreate."
|
27
29
|
end
|
28
30
|
new_driver.allocate_machine(action_handler, machine_spec, new_machine_options)
|
31
|
+
machine_spec.from_image ||= new_resource.from_image if new_resource.from_image
|
32
|
+
machine_spec.driver_url ||= new_driver.driver_url
|
29
33
|
machine_spec.save(action_handler)
|
30
34
|
end
|
31
35
|
|
@@ -107,7 +111,7 @@ class Machine < Chef::Provider::LWRPBase
|
|
107
111
|
def from_image_spec
|
108
112
|
@from_image_spec ||= begin
|
109
113
|
if new_resource.from_image
|
110
|
-
|
114
|
+
chef_managed_entry_store.get!(:machine_image, new_resource.from_image)
|
111
115
|
else
|
112
116
|
nil
|
113
117
|
end
|
@@ -125,10 +129,6 @@ class Machine < Chef::Provider::LWRPBase
|
|
125
129
|
def machine_options(driver)
|
126
130
|
configs = []
|
127
131
|
|
128
|
-
if from_image_spec && from_image_spec.machine_options
|
129
|
-
configs << from_image_spec.machine_options
|
130
|
-
end
|
131
|
-
|
132
132
|
configs << {
|
133
133
|
:convergence_options =>
|
134
134
|
[ :chef_server,
|
@@ -155,7 +155,11 @@ class Machine < Chef::Provider::LWRPBase
|
|
155
155
|
node_driver.load_current_resource
|
156
156
|
json = node_driver.new_json
|
157
157
|
json['normal']['chef_provisioning'] = node_driver.current_json['normal']['chef_provisioning']
|
158
|
-
@machine_spec =
|
158
|
+
@machine_spec = chef_managed_entry_store.new_entry(:machine, new_resource.name, json)
|
159
|
+
end
|
160
|
+
|
161
|
+
def chef_managed_entry_store
|
162
|
+
@chef_managed_entry_store ||= Provisioning.chef_managed_entry_store(new_resource.chef_server)
|
159
163
|
end
|
160
164
|
|
161
165
|
def self.upload_files(action_handler, machine, files)
|
@@ -4,7 +4,6 @@ require 'chef/provider/machine'
|
|
4
4
|
require 'chef/provisioning/chef_provider_action_handler'
|
5
5
|
require 'chef/provisioning/add_prefix_action_handler'
|
6
6
|
require 'chef/provisioning/machine_spec'
|
7
|
-
require 'chef/provisioning/chef_machine_spec'
|
8
7
|
|
9
8
|
class Chef
|
10
9
|
class Provider
|
@@ -28,6 +27,8 @@ class MachineBatch < Chef::Provider::LWRPBase
|
|
28
27
|
by_new_driver.each do |driver, specs_and_options|
|
29
28
|
driver.allocate_machines(action_handler, specs_and_options, parallelizer) do |machine_spec|
|
30
29
|
m = by_id[machine_spec.id]
|
30
|
+
machine_spec.from_image ||= m[:resource].from_image if m[:resource] && m[:resource].from_image
|
31
|
+
machine_spec.driver_url ||= driver.driver_url
|
31
32
|
machine_spec.save(m[:action_handler])
|
32
33
|
end
|
33
34
|
end
|
@@ -168,7 +169,7 @@ class MachineBatch < Chef::Provider::LWRPBase
|
|
168
169
|
:machine_options => proc { |driver| provider.machine_options(driver) },
|
169
170
|
:action_handler => Provisioning::AddPrefixActionHandler.new(action_handler, "[#{machine_resource.name}] ")
|
170
171
|
}
|
171
|
-
elsif machine.is_a?(Provisioning::
|
172
|
+
elsif machine.is_a?(Provisioning::ManagedEntry)
|
172
173
|
machine_spec = machine
|
173
174
|
{
|
174
175
|
:spec => machine_spec,
|
@@ -179,8 +180,7 @@ class MachineBatch < Chef::Provider::LWRPBase
|
|
179
180
|
}
|
180
181
|
else
|
181
182
|
name = machine
|
182
|
-
machine_spec =
|
183
|
-
Provisioning::ChefMachineSpec.empty(name, new_resource.chef_server)
|
183
|
+
machine_spec = chef_managed_entry_store.get_or_new(:machine, name)
|
184
184
|
{
|
185
185
|
:spec => machine_spec,
|
186
186
|
:desired_driver => new_resource.driver,
|
@@ -192,6 +192,10 @@ class MachineBatch < Chef::Provider::LWRPBase
|
|
192
192
|
end.to_a
|
193
193
|
end
|
194
194
|
|
195
|
+
def chef_managed_entry_store
|
196
|
+
@chef_managed_entry_store ||= Provisioning.chef_managed_entry_store(new_resource.chef_server)
|
197
|
+
end
|
198
|
+
|
195
199
|
def machine_options(driver)
|
196
200
|
result = { :convergence_options => { :chef_server => new_resource.chef_server } }
|
197
201
|
result = Chef::Mixin::DeepMerge.hash_only_merge(result, run_context.chef_provisioning.config[:machine_options]) if run_context.chef_provisioning.config[:machine_options]
|
@@ -2,7 +2,6 @@ require 'chef/provider/lwrp_base'
|
|
2
2
|
require 'chef/provider/chef_node'
|
3
3
|
require 'openssl'
|
4
4
|
require 'chef/provisioning/chef_provider_action_handler'
|
5
|
-
require 'chef/provisioning/chef_image_spec'
|
6
5
|
|
7
6
|
class Chef
|
8
7
|
class Provider
|
@@ -20,49 +19,82 @@ class MachineImage < Chef::Provider::LWRPBase
|
|
20
19
|
@new_driver ||= run_context.chef_provisioning.driver_for(new_resource.driver)
|
21
20
|
end
|
22
21
|
|
22
|
+
def chef_managed_entry_store
|
23
|
+
@chef_managed_entry_store ||= Provisioning.chef_managed_entry_store(new_resource.chef_server)
|
24
|
+
end
|
25
|
+
|
23
26
|
action :create do
|
24
27
|
# Get the image mapping on the server (from name to image-id)
|
25
|
-
image_spec =
|
26
|
-
|
27
|
-
if image_spec.location
|
28
|
+
image_spec = chef_managed_entry_store.get_or_new(:machine_image, new_resource.name)
|
29
|
+
if image_spec.reference
|
28
30
|
# TODO check for real existence and maybe update
|
29
31
|
else
|
30
32
|
#
|
31
33
|
# Create a new image
|
32
34
|
#
|
33
|
-
image_spec.machine_options
|
34
|
-
create_image(image_spec)
|
35
|
+
create_image(image_spec, new_resource.machine_options || {})
|
35
36
|
end
|
36
37
|
end
|
37
38
|
|
38
39
|
action :destroy do
|
40
|
+
# Destroy the exemplar machine if it exists
|
41
|
+
machine_provider = Chef::Provider::Machine.new(new_resource, run_context)
|
42
|
+
machine_provider.action_handler = action_handler
|
43
|
+
machine_provider.load_current_resource
|
44
|
+
machine_provider.action_destroy
|
45
|
+
|
39
46
|
# Get the image mapping on the server (from name to image-id)
|
40
|
-
image_spec =
|
41
|
-
Chef::Provisioning::ChefImageSpec.empty(new_resource.name, new_resource.chef_server)
|
47
|
+
image_spec = chef_managed_entry_store.get(:machine_image, new_resource.name)
|
42
48
|
|
43
|
-
if image_spec.
|
49
|
+
if image_spec && image_spec.reference
|
44
50
|
new_driver.destroy_image(action_handler, image_spec, new_resource.image_options)
|
45
51
|
image_spec.delete(action_handler)
|
46
52
|
end
|
47
53
|
end
|
48
54
|
|
49
|
-
def create_image(image_spec)
|
55
|
+
def create_image(image_spec, machine_options)
|
50
56
|
# 1. Create the exemplar machine
|
51
57
|
machine_provider = Chef::Provider::Machine.new(new_resource, run_context)
|
58
|
+
machine_provider.action_handler = action_handler
|
52
59
|
machine_provider.load_current_resource
|
53
60
|
machine_provider.action_converge
|
54
61
|
|
55
62
|
# 2. Create the image
|
56
|
-
|
57
|
-
|
63
|
+
machine_options = new_machine_options
|
64
|
+
begin
|
65
|
+
new_driver.allocate_image(action_handler, image_spec, new_image_options,
|
66
|
+
machine_provider.machine_spec, machine_options)
|
67
|
+
rescue ArgumentError
|
68
|
+
# Backcompat kludge - remove in later version.
|
69
|
+
Chef::Log.warn("Driver #{new_driver.driver_url} does not accept machine_options. This will be deprecated before Provisioning 1.0.")
|
70
|
+
machine_provider.machine_spec.instance_eval { @machine_options = machine_options }
|
71
|
+
new_driver.allocate_image(action_handler, image_spec, new_image_options,
|
72
|
+
machine_provider.machine_spec)
|
73
|
+
end
|
74
|
+
image_spec.driver_url ||= new_driver.driver_url
|
75
|
+
image_spec.from_image ||= new_resource.from_image if new_resource.from_image
|
76
|
+
image_spec.run_list ||= machine_provider.machine_spec.node['run_list']
|
58
77
|
|
59
78
|
# 3. Save the linkage from name -> image id
|
60
79
|
image_spec.save(action_handler)
|
61
80
|
|
62
81
|
# 4. Wait for image to be ready
|
63
|
-
new_driver.ready_image(action_handler, image_spec,
|
82
|
+
new_driver.ready_image(action_handler, image_spec, new_image_options)
|
83
|
+
|
84
|
+
machine_provider.action_destroy
|
64
85
|
end
|
65
86
|
|
87
|
+
def new_image_options
|
88
|
+
@new_image_options ||= (new_resource.image_options || {}).to_hash.dup
|
89
|
+
end
|
90
|
+
|
91
|
+
def new_machine_options
|
92
|
+
@new_machine_options ||= (new_resource.machine_options || {}).to_hash.dup
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
66
96
|
end
|
67
97
|
end
|
68
|
-
|
98
|
+
|
99
|
+
require 'chef/provisioning/chef_managed_entry_store'
|
100
|
+
Chef::Provisioning::ChefManagedEntryStore.type_names_for_backcompat[:machine_image] = "images"
|