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.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +62 -32
  3. data/lib/chef/provider/load_balancer.rb +18 -8
  4. data/lib/chef/provider/machine.rb +11 -7
  5. data/lib/chef/provider/machine_batch.rb +8 -4
  6. data/lib/chef/provider/machine_execute.rb +1 -1
  7. data/lib/chef/provider/machine_image.rb +46 -14
  8. data/lib/chef/provisioning.rb +9 -1
  9. data/lib/chef/provisioning/chef_managed_entry_store.rb +128 -0
  10. data/lib/chef/provisioning/chef_run_data.rb +9 -16
  11. data/lib/chef/provisioning/convergence_strategy/install_cached.rb +25 -7
  12. data/lib/chef/provisioning/convergence_strategy/install_msi.rb +26 -8
  13. data/lib/chef/provisioning/convergence_strategy/install_sh.rb +28 -6
  14. data/lib/chef/provisioning/driver.rb +28 -21
  15. data/lib/chef/provisioning/load_balancer_spec.rb +6 -71
  16. data/lib/chef/provisioning/machine_image_spec.rb +34 -0
  17. data/lib/chef/provisioning/machine_spec.rb +23 -47
  18. data/lib/chef/provisioning/managed_entry.rb +121 -0
  19. data/lib/chef/provisioning/managed_entry_store.rb +136 -0
  20. data/lib/chef/provisioning/recipe_dsl.rb +0 -4
  21. data/lib/chef/provisioning/version.rb +1 -1
  22. data/lib/chef/resource/chef_data_bag_resource.rb +1 -2
  23. data/lib/chef/resource/load_balancer.rb +1 -0
  24. data/lib/chef/resource/machine.rb +1 -1
  25. data/lib/chef/resource/machine_batch.rb +2 -2
  26. data/lib/chef/resource/machine_execute.rb +2 -1
  27. metadata +7 -8
  28. data/lib/chef/provisioning/chef_image_spec.rb +0 -111
  29. data/lib/chef/provisioning/chef_load_balancer_spec.rb +0 -108
  30. data/lib/chef/provisioning/chef_machine_spec.rb +0 -83
  31. data/lib/chef/provisioning/image_spec.rb +0 -72
@@ -19,10 +19,6 @@ class Chef
19
19
  module DSL
20
20
  module Recipe
21
21
 
22
- def with_data_center(data_center, &block)
23
- run_context.chef_metal.with_data_center(data_center, &block)
24
- end
25
-
26
22
  def with_driver(driver, options = nil, &block)
27
23
  run_context.chef_provisioning.with_driver(driver, options, &block)
28
24
  end
@@ -1,5 +1,5 @@
1
1
  class Chef
2
2
  module Provisioning
3
- VERSION = '0.19'
3
+ VERSION = '0.20'
4
4
  end
5
5
  end
@@ -10,8 +10,6 @@ class Chef::Resource::ChefDataBagResource < Chef::Resource::LWRPBase
10
10
  class << self
11
11
  # The name of the databag to store the item in.
12
12
  attr_reader :databag_name
13
- # A list of attributes to be persisted into the databag.
14
- attr_reader :stored_attributes
15
13
  end
16
14
 
17
15
  def initialize(name, run_context=nil)
@@ -20,6 +18,7 @@ class Chef::Resource::ChefDataBagResource < Chef::Resource::LWRPBase
20
18
  self.hydrate
21
19
  end
22
20
 
21
+ # A list of attributes to be persisted into the databag.
23
22
  # @return [Array] List of attributes that are stored in the databag
24
23
  def self.stored_attributes
25
24
  @stored_attributes || []
@@ -22,6 +22,7 @@ class Chef
22
22
 
23
23
  # Driver attributes
24
24
  attribute :driver
25
+ attribute :chef_server
25
26
  attribute :load_balancer_options
26
27
  attribute :name, :kind_of => String, :name_attribute => true
27
28
  attribute :machines
@@ -48,7 +48,7 @@ class Machine < Chef::Resource::LWRPBase
48
48
  attribute :validator, :kind_of => [TrueClass, FalseClass]
49
49
 
50
50
  # Client Ohai hints, allows machine to enable hints
51
- # e.g. ohai_hint 'ec2' => { 'a' => 'b' } creates file ec2.json with json contents { 'a': 'b' }
51
+ # e.g. ohai_hints 'ec2' => { 'a' => 'b' } creates file ec2.json with json contents { 'a': 'b' }
52
52
  attribute :ohai_hints, :kind_of => Hash
53
53
 
54
54
  # A string containing extra configuration for the machine
@@ -22,7 +22,7 @@ class MachineBatch < Chef::Resource::LWRPBase
22
22
  attribute :max_simultaneous, :kind_of => [ Integer ]
23
23
  attribute :from_recipe
24
24
 
25
- # These four attributes are for when you pass names or MachineSpecs to
25
+ # These four attributes are for when you pass names or ManagedEntrys to
26
26
  # "machines". Not used for auto-batch or explicit inline machine declarations.
27
27
  attribute :driver
28
28
  attribute :chef_server
@@ -58,7 +58,7 @@ class MachineBatch < Chef::Resource::LWRPBase
58
58
  end
59
59
  end
60
60
  machine_names = @machines.map do |m|
61
- if m.is_a?(Chef::Provisioning::MachineSpec)
61
+ if m.is_a?(Chef::Provisioning::ManagedEntry)
62
62
  m.name
63
63
  elsif m.is_a?(Chef::Resource::Machine)
64
64
  m.name
@@ -19,10 +19,11 @@ class MachineExecute < Chef::Resource::LWRPBase
19
19
 
20
20
  attribute :command, :kind_of => String, :name_attribute => true
21
21
  attribute :machine, :kind_of => String
22
+ attribute :live_stream, :kind_of => [TrueClass,FalseClass], :default => false
22
23
 
23
24
  attribute :chef_server, :kind_of => Hash
24
25
  attribute :driver, :kind_of => Chef::Provisioning::Driver
25
26
 
26
27
  end
27
28
  end
28
- end
29
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-provisioning
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.19'
4
+ version: '0.20'
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Keiser
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-26 00:00:00.000000000 Z
11
+ date: 2015-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: net-ssh
@@ -144,9 +144,7 @@ files:
144
144
  - lib/chef/provisioning.rb
145
145
  - lib/chef/provisioning/action_handler.rb
146
146
  - lib/chef/provisioning/add_prefix_action_handler.rb
147
- - lib/chef/provisioning/chef_image_spec.rb
148
- - lib/chef/provisioning/chef_load_balancer_spec.rb
149
- - lib/chef/provisioning/chef_machine_spec.rb
147
+ - lib/chef/provisioning/chef_managed_entry_store.rb
150
148
  - lib/chef/provisioning/chef_provider_action_handler.rb
151
149
  - lib/chef/provisioning/chef_run_data.rb
152
150
  - lib/chef/provisioning/convergence_strategy.rb
@@ -156,13 +154,15 @@ files:
156
154
  - lib/chef/provisioning/convergence_strategy/no_converge.rb
157
155
  - lib/chef/provisioning/convergence_strategy/precreate_chef_objects.rb
158
156
  - lib/chef/provisioning/driver.rb
159
- - lib/chef/provisioning/image_spec.rb
160
157
  - lib/chef/provisioning/load_balancer_spec.rb
161
158
  - lib/chef/provisioning/machine.rb
162
159
  - lib/chef/provisioning/machine/basic_machine.rb
163
160
  - lib/chef/provisioning/machine/unix_machine.rb
164
161
  - lib/chef/provisioning/machine/windows_machine.rb
162
+ - lib/chef/provisioning/machine_image_spec.rb
165
163
  - lib/chef/provisioning/machine_spec.rb
164
+ - lib/chef/provisioning/managed_entry.rb
165
+ - lib/chef/provisioning/managed_entry_store.rb
166
166
  - lib/chef/provisioning/recipe_dsl.rb
167
167
  - lib/chef/provisioning/transport.rb
168
168
  - lib/chef/provisioning/transport/ssh.rb
@@ -195,9 +195,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
195
195
  version: '0'
196
196
  requirements: []
197
197
  rubyforge_project:
198
- rubygems_version: 2.2.2
198
+ rubygems_version: 2.4.2
199
199
  signing_key:
200
200
  specification_version: 4
201
201
  summary: A library for creating machines and infrastructures idempotently in Chef.
202
202
  test_files: []
203
- has_rdoc:
@@ -1,111 +0,0 @@
1
- require 'chef/provisioning'
2
- require 'cheffish'
3
- require 'chef/provisioning/image_spec'
4
-
5
- class Chef
6
- module Provisioning
7
- #
8
- # Specification for a image. Sufficient information to find and contact it
9
- # after it has been set up.
10
- #
11
- class ChefImageSpec < ImageSpec
12
- def initialize(node, chef_server)
13
- super(node)
14
- @chef_server = chef_server
15
- end
16
-
17
- #
18
- # Get a ImageSpec from the chef server. If the image does not exist on the
19
- # server, it returns nil.
20
- #
21
- def self.get(name, chef_server = Cheffish.default_chef_server)
22
- chef_api = Cheffish.chef_server_api(chef_server)
23
- begin
24
- data = chef_api.get("/data/images/#{name}")
25
- data['machine_options'] = strings_to_symbols(data['machine_options'])
26
- ChefImageSpec.new(data, chef_server)
27
- rescue Net::HTTPServerException => e
28
- if e.response.code == '404'
29
- nil
30
- else
31
- raise
32
- end
33
- end
34
- end
35
-
36
- # Creates a new empty ImageSpec with the given name.
37
- def self.empty(id, chef_server = Cheffish.default_chef_server)
38
- ChefImageSpec.new({ 'id' => id }, chef_server)
39
- end
40
-
41
- #
42
- # Globally unique identifier for this image. Does not depend on the image's
43
- # location or existence.
44
- #
45
- def id
46
- ChefImageSpec.id_from(chef_server, name)
47
- end
48
-
49
- def self.id_from(chef_server, name)
50
- "#{chef_server[:chef_server_url]}/data/images/#{name}"
51
- end
52
-
53
- #
54
- # Save this image to the server. If you have significant information that
55
- # could be lost, you should do this as quickly as possible. Data will be
56
- # saved automatically for you after allocate_image and ready_image.
57
- #
58
- def save(action_handler)
59
- # Save the image to the server.
60
- _self = self
61
- _chef_server = _self.chef_server
62
- Chef::Provisioning.inline_resource(action_handler) do
63
- # Create the data bag if needed
64
- chef_data_bag 'images'
65
- # Save the image
66
- chef_data_bag_item _self.name do
67
- data_bag 'images'
68
- chef_server _chef_server
69
- raw_data _self.image_data
70
- end
71
- end
72
- end
73
-
74
- def delete(action_handler)
75
- # Delete the image from the server.
76
- _self = self
77
- _chef_server = _self.chef_server
78
- Chef::Provisioning.inline_resource(action_handler) do
79
- chef_data_bag_item _self.name do
80
- data_bag 'images'
81
- chef_server _chef_server
82
- action :delete
83
- end
84
- end
85
- end
86
-
87
- protected
88
-
89
- attr_reader :chef_server
90
-
91
- #
92
- # Chef API object for the given Chef server
93
- #
94
- def chef_api
95
- Cheffish.server_api_for(chef_server)
96
- end
97
-
98
- def self.strings_to_symbols(data)
99
- if data.is_a?(Hash)
100
- result = {}
101
- data.each_pair do |key, value|
102
- result[key.to_sym] = strings_to_symbols(value)
103
- end
104
- result
105
- else
106
- data
107
- end
108
- end
109
- end
110
- end
111
- end
@@ -1,108 +0,0 @@
1
- require 'chef/provisioning'
2
- require 'cheffish'
3
- require 'chef/provisioning/load_balancer_spec'
4
-
5
- class Chef
6
- module Provisioning
7
- #
8
- # Specification for a image. Sufficient information to find and contact it
9
- # after it has been set up.
10
- #
11
- class ChefLoadBalancerSpec < LoadBalancerSpec
12
- def initialize(node, chef_server)
13
- super(node)
14
- @chef_server = chef_server
15
- end
16
-
17
- #
18
- # Get a ImageSpec from the chef server. If the node does not exist on the
19
- # server, it returns nil.
20
- #
21
- def self.get(name, chef_server = Cheffish.default_chef_server)
22
- chef_api = Cheffish.chef_server_api(chef_server)
23
- begin
24
- data = chef_api.get("/data/loadbalancers/#{name}")
25
- ChefLoadBalancerSpec.new(data, chef_server)
26
- rescue Net::HTTPServerException => e
27
- if e.response.code == '404'
28
- nil
29
- else
30
- raise
31
- end
32
- end
33
- end
34
-
35
- # Creates a new empty ImageSpec with the given name.
36
- def self.empty(id, chef_server = Cheffish.default_chef_server)
37
- ChefLoadBalancerSpec.new({ 'id' => id }, chef_server)
38
- end
39
-
40
- #
41
- # Globally unique identifier for this image. Does not depend on the image's
42
- # location or existence.
43
- #
44
- def id
45
- ChefLoadBalancerSpec.id_from(chef_server, name)
46
- end
47
-
48
- def self.id_from(chef_server, name)
49
- "#{chef_server[:chef_server_url]}/data/loadbalancers/#{name}"
50
- end
51
-
52
- #
53
- # Save this node to the server. If you have significant information that
54
- # could be lost, you should do this as quickly as possible. Data will be
55
- # saved automatically for you after allocate_image and ready_image.
56
- #
57
- def save(action_handler)
58
- # Save the node to the server.
59
- _self = self
60
- _chef_server = _self.chef_server
61
- Chef::Provisioning.inline_resource(action_handler) do
62
- chef_data_bag 'loadbalancers'
63
- chef_data_bag_item _self.name do
64
- data_bag 'loadbalancers'
65
- chef_server _chef_server
66
- raw_data _self.load_balancer_data
67
- end
68
- end
69
- end
70
-
71
- def delete(action_handler)
72
- # Save the node to the server.
73
- _self = self
74
- _chef_server = _self.chef_server
75
- Chef::Provisioning.inline_resource(action_handler) do
76
- chef_data_bag_item _self.name do
77
- data_bag 'loadbalancers'
78
- chef_server _chef_server
79
- action :delete
80
- end
81
- end
82
- end
83
-
84
- protected
85
-
86
- attr_reader :chef_server
87
-
88
- #
89
- # Chef API object for the given Chef server
90
- #
91
- def chef_api
92
- Cheffish.server_api_for(chef_server)
93
- end
94
-
95
- def self.strings_to_symbols(data)
96
- if data.is_a?(Hash)
97
- result = {}
98
- data.each_pair do |key, value|
99
- result[key.to_sym] = strings_to_symbols(value)
100
- end
101
- result
102
- else
103
- data
104
- end
105
- end
106
- end
107
- end
108
- end
@@ -1,83 +0,0 @@
1
- require 'chef/provisioning'
2
- require 'cheffish'
3
- require 'chef/provisioning/machine_spec'
4
-
5
- class Chef
6
- module Provisioning
7
- #
8
- # Specification for a machine. Sufficient information to find and contact it
9
- # after it has been set up.
10
- #
11
- class ChefMachineSpec < MachineSpec
12
- def initialize(node, chef_server)
13
- super(node)
14
- @chef_server = chef_server
15
- end
16
-
17
- #
18
- # Get a MachineSpec from the chef server. If the node does not exist on the
19
- # server, it returns nil.
20
- #
21
- def self.get(name, chef_server = Cheffish.default_chef_server)
22
- chef_api = Cheffish.chef_server_api(chef_server)
23
- begin
24
- ChefMachineSpec.new(chef_api.get("/nodes/#{name}"), chef_server)
25
- rescue Net::HTTPServerException => e
26
- if e.response.code == '404'
27
- nil
28
- else
29
- raise
30
- end
31
- end
32
- end
33
-
34
- # Creates a new empty MachineSpec with the given name.
35
- def self.empty(name, chef_server = Cheffish.default_chef_server)
36
- ChefMachineSpec.new({ 'name' => name, 'normal' => {} }, chef_server)
37
- end
38
-
39
- #
40
- # Globally unique identifier for this machine. Does not depend on the machine's
41
- # location or existence.
42
- #
43
- def id
44
- ChefMachineSpec.id_from(chef_server, name)
45
- end
46
-
47
- def self.id_from(chef_server, name)
48
- "#{chef_server[:chef_server_url]}/nodes/#{name}"
49
- end
50
-
51
- #
52
- # Save this node to the server. If you have significant information that
53
- # could be lost, you should do this as quickly as possible. Data will be
54
- # saved automatically for you after allocate_machine and ready_machine.
55
- #
56
- def save(action_handler)
57
- if location && (!location.is_a?(Hash) || !location['driver_url'])
58
- raise "Drivers must specify a canonical driver_url in machine_spec.location. Contact your driver's author."
59
- end
60
- # Save the node to the server.
61
- _self = self
62
- _chef_server = _self.chef_server
63
- Chef::Provisioning.inline_resource(action_handler) do
64
- chef_node _self.name do
65
- chef_server _chef_server
66
- raw_json _self.node
67
- end
68
- end
69
- end
70
-
71
- protected
72
-
73
- attr_reader :chef_server
74
-
75
- #
76
- # Chef API object for the given Chef server
77
- #
78
- def chef_api
79
- Cheffish.server_api_for(chef_server)
80
- end
81
- end
82
- end
83
- end