chef-provisioning 2.0.1 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +906 -899
  3. data/Gemfile +17 -17
  4. data/LICENSE +201 -201
  5. data/README.md +312 -312
  6. data/Rakefile +55 -55
  7. data/chef-provisioning.gemspec +38 -38
  8. data/lib/chef/provider/load_balancer.rb +75 -75
  9. data/lib/chef/provider/machine.rb +219 -219
  10. data/lib/chef/provider/machine_batch.rb +224 -224
  11. data/lib/chef/provider/machine_execute.rb +36 -36
  12. data/lib/chef/provider/machine_file.rb +55 -55
  13. data/lib/chef/provider/machine_image.rb +105 -105
  14. data/lib/chef/provisioning.rb +110 -110
  15. data/lib/chef/provisioning/action_handler.rb +68 -68
  16. data/lib/chef/provisioning/add_prefix_action_handler.rb +35 -35
  17. data/lib/chef/provisioning/chef_managed_entry_store.rb +128 -128
  18. data/lib/chef/provisioning/chef_provider_action_handler.rb +74 -74
  19. data/lib/chef/provisioning/chef_run_data.rb +132 -132
  20. data/lib/chef/provisioning/convergence_strategy.rb +28 -28
  21. data/lib/chef/provisioning/convergence_strategy/ignore_convergence_failure.rb +54 -54
  22. data/lib/chef/provisioning/convergence_strategy/install_cached.rb +188 -188
  23. data/lib/chef/provisioning/convergence_strategy/install_msi.rb +71 -71
  24. data/lib/chef/provisioning/convergence_strategy/install_sh.rb +71 -71
  25. data/lib/chef/provisioning/convergence_strategy/no_converge.rb +35 -35
  26. data/lib/chef/provisioning/convergence_strategy/precreate_chef_objects.rb +255 -255
  27. data/lib/chef/provisioning/driver.rb +323 -323
  28. data/lib/chef/provisioning/load_balancer_spec.rb +14 -14
  29. data/lib/chef/provisioning/machine.rb +112 -112
  30. data/lib/chef/provisioning/machine/basic_machine.rb +84 -84
  31. data/lib/chef/provisioning/machine/unix_machine.rb +288 -288
  32. data/lib/chef/provisioning/machine/windows_machine.rb +108 -108
  33. data/lib/chef/provisioning/machine_image_spec.rb +34 -34
  34. data/lib/chef/provisioning/machine_spec.rb +58 -58
  35. data/lib/chef/provisioning/managed_entry.rb +121 -121
  36. data/lib/chef/provisioning/managed_entry_store.rb +136 -136
  37. data/lib/chef/provisioning/recipe_dsl.rb +99 -99
  38. data/lib/chef/provisioning/rspec.rb +27 -27
  39. data/lib/chef/provisioning/transport.rb +100 -100
  40. data/lib/chef/provisioning/transport/ssh.rb +403 -403
  41. data/lib/chef/provisioning/transport/winrm.rb +144 -144
  42. data/lib/chef/provisioning/version.rb +5 -5
  43. data/lib/chef/resource/chef_data_bag_resource.rb +146 -146
  44. data/lib/chef/resource/load_balancer.rb +57 -57
  45. data/lib/chef/resource/machine.rb +128 -128
  46. data/lib/chef/resource/machine_batch.rb +78 -78
  47. data/lib/chef/resource/machine_execute.rb +30 -30
  48. data/lib/chef/resource/machine_file.rb +34 -34
  49. data/lib/chef/resource/machine_image.rb +35 -35
  50. data/lib/chef_metal.rb +1 -1
  51. data/spec/chef/provisioning/convergence_strategy/ignore_convergence_failure_spec.rb +86 -86
  52. data/spec/spec_helper.rb +27 -27
  53. metadata +10 -4
@@ -1,68 +1,68 @@
1
- # -*- encoding: utf-8 -*-
2
- #
3
- # Author:: Douglas Triggs (<doug@chef.io>)
4
- #
5
- # Copyright (C) 2014, Chef, Inc.
6
- #
7
- # Licensed under the Apache License, Version 2.0 (the "License");
8
- # you may not use this file except in compliance with the License.
9
- # You may obtain a copy of the License at
10
- #
11
- # http://www.apache.org/licenses/LICENSE-2.0
12
- #
13
- # Unless required by applicable law or agreed to in writing, software
14
- # distributed under the License is distributed on an "AS IS" BASIS,
15
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- # See the License for the specific language governing permissions and
17
- # limitations under the License.
18
-
19
- # This is the generic action handler
20
- class Chef
21
- module Provisioning
22
- class ActionHandler
23
-
24
- # This should be replaced with whatever records the update; by default it
25
- # essentially does nothing here.
26
- def updated!
27
- @updated = true
28
- end
29
-
30
- def should_perform_actions
31
- true
32
- end
33
-
34
- def report_progress(description)
35
- Array(description).each { |d| puts d }
36
- end
37
-
38
- def performed_action(description)
39
- Array(description).each { |d| puts d }
40
- end
41
-
42
- # This should perform the actual action (e.g., converge) if there is an
43
- # action that needs to be done.
44
- def perform_action(description)
45
- if should_perform_actions
46
- result = yield
47
- else
48
- result = nil
49
- end
50
- performed_action(description)
51
- result
52
- end
53
-
54
- # Open a stream which can be printed to and closed
55
- def open_stream(name)
56
- if block_given?
57
- yield STDOUT
58
- else
59
- STDOUT
60
- end
61
- end
62
-
63
- # A URL identifying the host node. nil if no such node.
64
- def host_node
65
- end
66
- end
67
- end
68
- end
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+ # Author:: Douglas Triggs (<doug@chef.io>)
4
+ #
5
+ # Copyright (C) 2014, Chef, Inc.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+
19
+ # This is the generic action handler
20
+ class Chef
21
+ module Provisioning
22
+ class ActionHandler
23
+
24
+ # This should be replaced with whatever records the update; by default it
25
+ # essentially does nothing here.
26
+ def updated!
27
+ @updated = true
28
+ end
29
+
30
+ def should_perform_actions
31
+ true
32
+ end
33
+
34
+ def report_progress(description)
35
+ Array(description).each { |d| puts d }
36
+ end
37
+
38
+ def performed_action(description)
39
+ Array(description).each { |d| puts d }
40
+ end
41
+
42
+ # This should perform the actual action (e.g., converge) if there is an
43
+ # action that needs to be done.
44
+ def perform_action(description)
45
+ if should_perform_actions
46
+ result = yield
47
+ else
48
+ result = nil
49
+ end
50
+ performed_action(description)
51
+ result
52
+ end
53
+
54
+ # Open a stream which can be printed to and closed
55
+ def open_stream(name)
56
+ if block_given?
57
+ yield STDOUT
58
+ else
59
+ STDOUT
60
+ end
61
+ end
62
+
63
+ # A URL identifying the host node. nil if no such node.
64
+ def host_node
65
+ end
66
+ end
67
+ end
68
+ end
@@ -1,35 +1,35 @@
1
- require 'chef/provisioning/action_handler'
2
-
3
- class Chef
4
- module Provisioning
5
- class AddPrefixActionHandler
6
- extend Forwardable
7
-
8
- def initialize(action_handler, prefix)
9
- @action_handler = action_handler
10
- @prefix = prefix
11
- end
12
-
13
- attr_reader :action_handler
14
- attr_reader :prefix
15
- attr_reader :locally_updated
16
-
17
- def_delegators :@action_handler, :should_perform_actions, :updated!, :open_stream, :host_node
18
-
19
- def report_progress(description)
20
- @locally_updated = true
21
- action_handler.report_progress(Array(description).flatten.map { |d| "#{prefix}#{d}" })
22
- end
23
-
24
- def performed_action(description)
25
- @locally_updated = true
26
- action_handler.performed_action(Array(description).flatten.map { |d| "#{prefix}#{d}" })
27
- end
28
-
29
- def perform_action(description, &block)
30
- @locally_updated = true
31
- action_handler.perform_action(Array(description).flatten.map { |d| "#{prefix}#{d}" }, &block)
32
- end
33
- end
34
- end
35
- end
1
+ require 'chef/provisioning/action_handler'
2
+
3
+ class Chef
4
+ module Provisioning
5
+ class AddPrefixActionHandler
6
+ extend Forwardable
7
+
8
+ def initialize(action_handler, prefix)
9
+ @action_handler = action_handler
10
+ @prefix = prefix
11
+ end
12
+
13
+ attr_reader :action_handler
14
+ attr_reader :prefix
15
+ attr_reader :locally_updated
16
+
17
+ def_delegators :@action_handler, :should_perform_actions, :updated!, :open_stream, :host_node
18
+
19
+ def report_progress(description)
20
+ @locally_updated = true
21
+ action_handler.report_progress(Array(description).flatten.map { |d| "#{prefix}#{d}" })
22
+ end
23
+
24
+ def performed_action(description)
25
+ @locally_updated = true
26
+ action_handler.performed_action(Array(description).flatten.map { |d| "#{prefix}#{d}" })
27
+ end
28
+
29
+ def perform_action(description, &block)
30
+ @locally_updated = true
31
+ action_handler.perform_action(Array(description).flatten.map { |d| "#{prefix}#{d}" }, &block)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,128 +1,128 @@
1
- require 'chef/provisioning/managed_entry_store'
2
- require 'cheffish'
3
-
4
- class Chef
5
- module Provisioning
6
- class ChefManagedEntryStore < ManagedEntryStore
7
- def initialize(chef_server = Cheffish.default_chef_server)
8
- @chef_server = chef_server
9
- end
10
-
11
- attr_reader :chef_server
12
-
13
- def chef_api
14
- @chef_api ||= Cheffish.chef_server_api(chef_server)
15
- end
16
-
17
- #
18
- # Get the given data
19
- #
20
- # @param resource_type [Symbol] The type of thing to retrieve (:machine, :machine_image, :load_balancer, :aws_vpc, :aws_subnet, ...)
21
- # @param name [String] The unique identifier of the thing to retrieve
22
- #
23
- # @return [Hash,Array] The data, or `nil` if the data does not exist. Will be JSON- and YAML-compatible (Hash, Array, String, Integer, Boolean, Nil)
24
- #
25
- def get_data(resource_type, name)
26
- begin
27
- if resource_type == :machine
28
- chef_api.get("nodes/#{name}")
29
- else
30
- chef_api.get("data/#{resource_type}/#{name}")
31
- end
32
- rescue Net::HTTPServerException => e
33
- if e.response.code == '404'
34
- backcompat_type = ChefManagedEntryStore.type_names_for_backcompat[resource_type]
35
- if backcompat_type && backcompat_type != resource_type
36
- get_data(backcompat_type, name)
37
- else
38
- nil
39
- end
40
- else
41
- raise
42
- end
43
- end
44
- end
45
-
46
- #
47
- # Save the given data
48
- #
49
- # @param resource_type [Symbol] The type of thing to save (:machine, :machine_image, :load_balancer, :aws_vpc, :aws_subnet ...)
50
- # @param name [String] The unique identifier of the thing to save
51
- # @param data [Hash,Array] The data to save. Must be JSON- and YAML-compatible (Hash, Array, String, Integer, Boolean, Nil)
52
- #
53
- def save_data(resource_type, name, data, action_handler)
54
- _chef_server = self.chef_server
55
- Chef::Provisioning.inline_resource(action_handler) do
56
- if resource_type == :machine
57
- chef_node name do
58
- chef_server _chef_server
59
- raw_json data
60
- end
61
- else
62
- chef_data_bag resource_type.to_s do
63
- chef_server _chef_server
64
- end
65
- chef_data_bag_item name do
66
- chef_server _chef_server
67
- data_bag resource_type.to_s
68
- raw_data data
69
- end
70
- end
71
- end
72
-
73
- backcompat_type = ChefManagedEntryStore.type_names_for_backcompat[resource_type]
74
- if backcompat_type && backcompat_type != resource_type
75
- delete_data(backcompat_type, name, action_handler)
76
- end
77
- end
78
-
79
- #
80
- # Delete the given data
81
- #
82
- # @param resource_type [Symbol] The type of thing to delete (:machine, :machine_image, :load_balancer, :aws_vpc, :aws_subnet, ...)
83
- # @param name [String] The unique identifier of the thing to delete
84
- #
85
- # @return [Boolean] Whether anything was deleted or not.
86
- #
87
- def delete_data(resource_type, name, action_handler)
88
- _chef_server = self.chef_server
89
- Chef::Provisioning.inline_resource(action_handler) do
90
- if resource_type == :machine
91
- chef_node name do
92
- chef_server _chef_server
93
- action :delete
94
- end
95
- else
96
- chef_data_bag_item name do
97
- chef_server _chef_server
98
- data_bag resource_type.to_s
99
- action :delete
100
- end
101
- end
102
- end
103
-
104
- backcompat_type = ChefManagedEntryStore.type_names_for_backcompat[resource_type]
105
- if backcompat_type && backcompat_type != resource_type
106
- delete_data(backcompat_type, name, action_handler)
107
- end
108
- end
109
-
110
- def identifier(resource_type, name)
111
- if resource_type == :machine
112
- File.join(chef_server[:chef_server_url], "nodes", name)
113
- else
114
- File.join(chef_server[:chef_server_url], "data", resource_type.to_s, name)
115
- end
116
- end
117
-
118
- #
119
- # A list of the name that we used to use to store a given type before we
120
- # standardized on "just use the resource name so we don't create collisions."
121
- # Will be used to look up the old data.
122
- #
123
- def self.type_names_for_backcompat
124
- @@type_names_for_backcompat ||= {}
125
- end
126
- end
127
- end
128
- end
1
+ require 'chef/provisioning/managed_entry_store'
2
+ require 'cheffish'
3
+
4
+ class Chef
5
+ module Provisioning
6
+ class ChefManagedEntryStore < ManagedEntryStore
7
+ def initialize(chef_server = Cheffish.default_chef_server)
8
+ @chef_server = chef_server
9
+ end
10
+
11
+ attr_reader :chef_server
12
+
13
+ def chef_api
14
+ @chef_api ||= Cheffish.chef_server_api(chef_server)
15
+ end
16
+
17
+ #
18
+ # Get the given data
19
+ #
20
+ # @param resource_type [Symbol] The type of thing to retrieve (:machine, :machine_image, :load_balancer, :aws_vpc, :aws_subnet, ...)
21
+ # @param name [String] The unique identifier of the thing to retrieve
22
+ #
23
+ # @return [Hash,Array] The data, or `nil` if the data does not exist. Will be JSON- and YAML-compatible (Hash, Array, String, Integer, Boolean, Nil)
24
+ #
25
+ def get_data(resource_type, name)
26
+ begin
27
+ if resource_type == :machine
28
+ chef_api.get("nodes/#{name}")
29
+ else
30
+ chef_api.get("data/#{resource_type}/#{name}")
31
+ end
32
+ rescue Net::HTTPServerException => e
33
+ if e.response.code == '404'
34
+ backcompat_type = ChefManagedEntryStore.type_names_for_backcompat[resource_type]
35
+ if backcompat_type && backcompat_type != resource_type
36
+ get_data(backcompat_type, name)
37
+ else
38
+ nil
39
+ end
40
+ else
41
+ raise
42
+ end
43
+ end
44
+ end
45
+
46
+ #
47
+ # Save the given data
48
+ #
49
+ # @param resource_type [Symbol] The type of thing to save (:machine, :machine_image, :load_balancer, :aws_vpc, :aws_subnet ...)
50
+ # @param name [String] The unique identifier of the thing to save
51
+ # @param data [Hash,Array] The data to save. Must be JSON- and YAML-compatible (Hash, Array, String, Integer, Boolean, Nil)
52
+ #
53
+ def save_data(resource_type, name, data, action_handler)
54
+ _chef_server = self.chef_server
55
+ Chef::Provisioning.inline_resource(action_handler) do
56
+ if resource_type == :machine
57
+ chef_node name do
58
+ chef_server _chef_server
59
+ raw_json data
60
+ end
61
+ else
62
+ chef_data_bag resource_type.to_s do
63
+ chef_server _chef_server
64
+ end
65
+ chef_data_bag_item name do
66
+ chef_server _chef_server
67
+ data_bag resource_type.to_s
68
+ raw_data data
69
+ end
70
+ end
71
+ end
72
+
73
+ backcompat_type = ChefManagedEntryStore.type_names_for_backcompat[resource_type]
74
+ if backcompat_type && backcompat_type != resource_type
75
+ delete_data(backcompat_type, name, action_handler)
76
+ end
77
+ end
78
+
79
+ #
80
+ # Delete the given data
81
+ #
82
+ # @param resource_type [Symbol] The type of thing to delete (:machine, :machine_image, :load_balancer, :aws_vpc, :aws_subnet, ...)
83
+ # @param name [String] The unique identifier of the thing to delete
84
+ #
85
+ # @return [Boolean] Whether anything was deleted or not.
86
+ #
87
+ def delete_data(resource_type, name, action_handler)
88
+ _chef_server = self.chef_server
89
+ Chef::Provisioning.inline_resource(action_handler) do
90
+ if resource_type == :machine
91
+ chef_node name do
92
+ chef_server _chef_server
93
+ action :delete
94
+ end
95
+ else
96
+ chef_data_bag_item name do
97
+ chef_server _chef_server
98
+ data_bag resource_type.to_s
99
+ action :delete
100
+ end
101
+ end
102
+ end
103
+
104
+ backcompat_type = ChefManagedEntryStore.type_names_for_backcompat[resource_type]
105
+ if backcompat_type && backcompat_type != resource_type
106
+ delete_data(backcompat_type, name, action_handler)
107
+ end
108
+ end
109
+
110
+ def identifier(resource_type, name)
111
+ if resource_type == :machine
112
+ File.join(chef_server[:chef_server_url], "nodes", name)
113
+ else
114
+ File.join(chef_server[:chef_server_url], "data", resource_type.to_s, name)
115
+ end
116
+ end
117
+
118
+ #
119
+ # A list of the name that we used to use to store a given type before we
120
+ # standardized on "just use the resource name so we don't create collisions."
121
+ # Will be used to look up the old data.
122
+ #
123
+ def self.type_names_for_backcompat
124
+ @@type_names_for_backcompat ||= {}
125
+ end
126
+ end
127
+ end
128
+ end