cheffish 1.3.1 → 1.4.0
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/LICENSE +201 -201
- data/README.md +120 -117
- data/Rakefile +23 -23
- data/lib/chef/provider/chef_acl.rb +439 -434
- data/lib/chef/provider/chef_client.rb +53 -48
- data/lib/chef/provider/chef_container.rb +55 -50
- data/lib/chef/provider/chef_data_bag.rb +55 -50
- data/lib/chef/provider/chef_data_bag_item.rb +278 -273
- data/lib/chef/provider/chef_environment.rb +83 -78
- data/lib/chef/provider/chef_group.rb +83 -78
- data/lib/chef/provider/chef_mirror.rb +169 -164
- data/lib/chef/provider/chef_node.rb +87 -82
- data/lib/chef/provider/chef_organization.rb +155 -150
- data/lib/chef/provider/chef_resolved_cookbooks.rb +46 -41
- data/lib/chef/provider/chef_role.rb +84 -79
- data/lib/chef/provider/chef_user.rb +59 -54
- data/lib/chef/provider/private_key.rb +225 -220
- data/lib/chef/provider/public_key.rb +88 -82
- data/lib/chef/resource/chef_acl.rb +69 -65
- data/lib/chef/resource/chef_client.rb +48 -44
- data/lib/chef/resource/chef_container.rb +22 -18
- data/lib/chef/resource/chef_data_bag.rb +22 -18
- data/lib/chef/resource/chef_data_bag_item.rb +121 -114
- data/lib/chef/resource/chef_environment.rb +77 -71
- data/lib/chef/resource/chef_group.rb +53 -49
- data/lib/chef/resource/chef_mirror.rb +52 -48
- data/lib/chef/resource/chef_node.rb +22 -18
- data/lib/chef/resource/chef_organization.rb +69 -64
- data/lib/chef/resource/chef_resolved_cookbooks.rb +35 -31
- data/lib/chef/resource/chef_role.rb +110 -104
- data/lib/chef/resource/chef_user.rb +56 -52
- data/lib/chef/resource/private_key.rb +48 -44
- data/lib/chef/resource/public_key.rb +25 -21
- data/lib/cheffish.rb +235 -233
- data/lib/cheffish/actor_provider_base.rb +131 -131
- data/lib/cheffish/basic_chef_client.rb +184 -184
- data/lib/cheffish/chef_provider_base.rb +246 -246
- data/lib/cheffish/chef_run.rb +162 -155
- data/lib/cheffish/chef_run_data.rb +19 -19
- data/lib/cheffish/chef_run_listener.rb +30 -30
- data/lib/cheffish/key_formatter.rb +113 -113
- data/lib/cheffish/merged_config.rb +94 -94
- data/lib/cheffish/recipe_dsl.rb +157 -157
- data/lib/cheffish/rspec.rb +8 -8
- data/lib/cheffish/rspec/chef_run_support.rb +83 -83
- data/lib/cheffish/rspec/matchers.rb +4 -4
- data/lib/cheffish/rspec/matchers/be_idempotent.rb +16 -16
- data/lib/cheffish/rspec/matchers/emit_no_warnings_or_errors.rb +15 -15
- data/lib/cheffish/rspec/matchers/have_updated.rb +37 -37
- data/lib/cheffish/rspec/matchers/partially_match.rb +63 -63
- data/lib/cheffish/rspec/recipe_run_wrapper.rb +59 -47
- data/lib/cheffish/rspec/repository_support.rb +108 -108
- data/lib/cheffish/server_api.rb +52 -52
- data/lib/cheffish/version.rb +3 -3
- data/lib/cheffish/with_pattern.rb +21 -21
- data/spec/functional/fingerprint_spec.rb +64 -64
- data/spec/functional/merged_config_spec.rb +19 -19
- data/spec/functional/server_api_spec.rb +13 -13
- data/spec/integration/chef_acl_spec.rb +879 -879
- data/spec/integration/chef_client_spec.rb +105 -105
- data/spec/integration/chef_container_spec.rb +33 -33
- data/spec/integration/chef_group_spec.rb +309 -309
- data/spec/integration/chef_mirror_spec.rb +491 -491
- data/spec/integration/chef_node_spec.rb +786 -786
- data/spec/integration/chef_organization_spec.rb +226 -226
- data/spec/integration/chef_role_spec.rb +78 -0
- data/spec/integration/chef_user_spec.rb +85 -85
- data/spec/integration/private_key_spec.rb +399 -399
- data/spec/integration/recipe_dsl_spec.rb +28 -28
- data/spec/integration/rspec/converge_spec.rb +183 -183
- data/spec/support/key_support.rb +29 -29
- data/spec/support/spec_support.rb +15 -15
- data/spec/unit/get_private_key_spec.rb +131 -131
- data/spec/unit/recipe_run_wrapper_spec.rb +37 -0
- metadata +8 -5
@@ -1,114 +1,121 @@
|
|
1
|
-
require 'cheffish'
|
2
|
-
require 'chef/config'
|
3
|
-
require 'chef/resource/lwrp_base'
|
4
|
-
|
5
|
-
class Chef
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
1
|
+
require 'cheffish'
|
2
|
+
require 'chef/config'
|
3
|
+
require 'chef/resource/lwrp_base'
|
4
|
+
|
5
|
+
class Chef
|
6
|
+
class Resource
|
7
|
+
class ChefDataBagItem < Chef::Resource::LWRPBase
|
8
|
+
self.resource_name = 'chef_data_bag_item'
|
9
|
+
|
10
|
+
actions :create, :delete, :nothing
|
11
|
+
default_action :create
|
12
|
+
|
13
|
+
def initialize(*args)
|
14
|
+
super
|
15
|
+
name @name
|
16
|
+
if !data_bag
|
17
|
+
data_bag run_context.cheffish.current_data_bag
|
18
|
+
end
|
19
|
+
if run_context.cheffish.current_data_bag_item_encryption
|
20
|
+
@encrypt = true if run_context.cheffish.current_data_bag_item_encryption[:encrypt_all]
|
21
|
+
@secret = run_context.cheffish.current_data_bag_item_encryption[:secret]
|
22
|
+
@secret_path = run_context.cheffish.current_data_bag_item_encryption[:secret_path] || run_context.config[:encrypted_data_bag_secret]
|
23
|
+
@encryption_cipher = run_context.cheffish.current_data_bag_item_encryption[:encryption_cipher]
|
24
|
+
@encryption_version = run_context.cheffish.current_data_bag_item_encryption[:encryption_version] || run_context.config[:data_bag_encrypt_version]
|
25
|
+
@old_secret = run_context.cheffish.current_data_bag_item_encryption[:old_secret]
|
26
|
+
@old_secret_path = run_context.cheffish.current_data_bag_item_encryption[:old_secret_path]
|
27
|
+
end
|
28
|
+
chef_server run_context.cheffish.current_chef_server
|
29
|
+
end
|
30
|
+
|
31
|
+
def name(*args)
|
32
|
+
result = super(*args)
|
33
|
+
if args.size == 1
|
34
|
+
parts = name.split('/')
|
35
|
+
if parts.size == 1
|
36
|
+
@id = parts[0]
|
37
|
+
elsif parts.size == 2
|
38
|
+
@data_bag = parts[0]
|
39
|
+
@id = parts[1]
|
40
|
+
else
|
41
|
+
raise "Name #{args[0].inspect} must be a string with 1 or 2 parts, either 'id' or 'data_bag/id"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
result
|
45
|
+
end
|
46
|
+
|
47
|
+
# `NOT_PASSED` is defined in chef-12.5.0, this guard will ensure we
|
48
|
+
# don't redefine it if it's already there
|
49
|
+
NOT_PASSED = Object.new unless defined?(NOT_PASSED)
|
50
|
+
|
51
|
+
def id(value = NOT_PASSED)
|
52
|
+
if value == NOT_PASSED
|
53
|
+
@id
|
54
|
+
else
|
55
|
+
@id = value
|
56
|
+
name data_bag ? "#{data_bag}/#{id}" : id
|
57
|
+
end
|
58
|
+
end
|
59
|
+
def data_bag(value = NOT_PASSED)
|
60
|
+
if value == NOT_PASSED
|
61
|
+
@data_bag
|
62
|
+
else
|
63
|
+
@data_bag = value
|
64
|
+
name data_bag ? "#{data_bag}/#{id}" : id
|
65
|
+
end
|
66
|
+
end
|
67
|
+
attribute :raw_data, :kind_of => Hash
|
68
|
+
|
69
|
+
# If secret or secret_path are set, encrypt is assumed true. encrypt exists mainly for with_secret and with_secret_path
|
70
|
+
attribute :encrypt, :kind_of => [TrueClass, FalseClass]
|
71
|
+
#attribute :secret, :kind_of => String
|
72
|
+
def secret(new_secret = nil)
|
73
|
+
if !new_secret
|
74
|
+
@secret
|
75
|
+
else
|
76
|
+
@secret = new_secret
|
77
|
+
@encrypt = true if @encrypt.nil?
|
78
|
+
end
|
79
|
+
end
|
80
|
+
#attribute :secret_path, :kind_of => String
|
81
|
+
def secret_path(new_secret_path = nil)
|
82
|
+
if !new_secret_path
|
83
|
+
@secret_path
|
84
|
+
else
|
85
|
+
@secret_path = new_secret_path
|
86
|
+
@encrypt = true if @encrypt.nil?
|
87
|
+
end
|
88
|
+
end
|
89
|
+
attribute :encryption_version, :kind_of => Integer
|
90
|
+
|
91
|
+
# Old secret (or secrets) to read the old data bag when we are changing keys and re-encrypting data
|
92
|
+
attribute :old_secret, :kind_of => [String, Array]
|
93
|
+
attribute :old_secret_path, :kind_of => [String, Array]
|
94
|
+
|
95
|
+
# Specifies that this is a complete specification for the environment (i.e. attributes you don't specify will be
|
96
|
+
# reset to their defaults)
|
97
|
+
attribute :complete, :kind_of => [TrueClass, FalseClass]
|
98
|
+
|
99
|
+
attribute :raw_json, :kind_of => Hash
|
100
|
+
attribute :chef_server, :kind_of => Hash
|
101
|
+
|
102
|
+
# value 'ip_address', '127.0.0.1'
|
103
|
+
# value [ 'pushy', 'port' ], '9000'
|
104
|
+
# value 'ip_addresses' do |existing_value|
|
105
|
+
# (existing_value || []) + [ '127.0.0.1' ]
|
106
|
+
# end
|
107
|
+
# value 'ip_address', :delete
|
108
|
+
attr_reader :raw_data_modifiers
|
109
|
+
def value(raw_data_path, value=NOT_PASSED, &block)
|
110
|
+
@raw_data_modifiers ||= []
|
111
|
+
if value != NOT_PASSED
|
112
|
+
@raw_data_modifiers << [ raw_data_path, value ]
|
113
|
+
elsif block
|
114
|
+
@raw_data_modifiers << [ raw_data_path, block ]
|
115
|
+
else
|
116
|
+
raise "value requires either a value or a block"
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
@@ -1,71 +1,77 @@
|
|
1
|
-
require 'cheffish'
|
2
|
-
require 'chef/resource/lwrp_base'
|
3
|
-
require 'chef/environment'
|
4
|
-
|
5
|
-
class Chef
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
end
|
1
|
+
require 'cheffish'
|
2
|
+
require 'chef/resource/lwrp_base'
|
3
|
+
require 'chef/environment'
|
4
|
+
|
5
|
+
class Chef
|
6
|
+
class Resource
|
7
|
+
class ChefEnvironment < Chef::Resource::LWRPBase
|
8
|
+
self.resource_name = 'chef_environment'
|
9
|
+
|
10
|
+
actions :create, :delete, :nothing
|
11
|
+
default_action :create
|
12
|
+
|
13
|
+
def initialize(*args)
|
14
|
+
super
|
15
|
+
chef_server run_context.cheffish.current_chef_server
|
16
|
+
end
|
17
|
+
|
18
|
+
attribute :name, :kind_of => String, :regex => Cheffish::NAME_REGEX, :name_attribute => true
|
19
|
+
attribute :description, :kind_of => String
|
20
|
+
attribute :cookbook_versions, :kind_of => Hash, :callbacks => {
|
21
|
+
"should have valid cookbook versions" => lambda { |value| Chef::Environment.validate_cookbook_versions(value) }
|
22
|
+
}
|
23
|
+
attribute :default_attributes, :kind_of => Hash
|
24
|
+
attribute :override_attributes, :kind_of => Hash
|
25
|
+
|
26
|
+
# Specifies that this is a complete specification for the environment (i.e. attributes you don't specify will be
|
27
|
+
# reset to their defaults)
|
28
|
+
attribute :complete, :kind_of => [TrueClass, FalseClass]
|
29
|
+
|
30
|
+
attribute :raw_json, :kind_of => Hash
|
31
|
+
attribute :chef_server, :kind_of => Hash
|
32
|
+
|
33
|
+
# `NOT_PASSED` is defined in chef-12.5.0, this guard will ensure we
|
34
|
+
# don't redefine it if it's already there
|
35
|
+
NOT_PASSED=Object.new unless defined?(NOT_PASSED)
|
36
|
+
|
37
|
+
# default 'ip_address', '127.0.0.1'
|
38
|
+
# default [ 'pushy', 'port' ], '9000'
|
39
|
+
# default 'ip_addresses' do |existing_value|
|
40
|
+
# (existing_value || []) + [ '127.0.0.1' ]
|
41
|
+
# end
|
42
|
+
# default 'ip_address', :delete
|
43
|
+
attr_reader :default_attribute_modifiers
|
44
|
+
def default(attribute_path, value=NOT_PASSED, &block)
|
45
|
+
@default_attribute_modifiers ||= []
|
46
|
+
if value != NOT_PASSED
|
47
|
+
@default_attribute_modifiers << [ attribute_path, value ]
|
48
|
+
elsif block
|
49
|
+
@default_attribute_modifiers << [ attribute_path, block ]
|
50
|
+
else
|
51
|
+
raise "default requires either a value or a block"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# override 'ip_address', '127.0.0.1'
|
56
|
+
# override [ 'pushy', 'port' ], '9000'
|
57
|
+
# override 'ip_addresses' do |existing_value|
|
58
|
+
# (existing_value || []) + [ '127.0.0.1' ]
|
59
|
+
# end
|
60
|
+
# override 'ip_address', :delete
|
61
|
+
attr_reader :override_attribute_modifiers
|
62
|
+
def override(attribute_path, value=NOT_PASSED, &block)
|
63
|
+
@override_attribute_modifiers ||= []
|
64
|
+
if value != NOT_PASSED
|
65
|
+
@override_attribute_modifiers << [ attribute_path, value ]
|
66
|
+
elsif block
|
67
|
+
@override_attribute_modifiers << [ attribute_path, block ]
|
68
|
+
else
|
69
|
+
raise "override requires either a value or a block"
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
alias :attributes :default_attributes
|
74
|
+
alias :attribute :default
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -1,49 +1,53 @@
|
|
1
|
-
require 'cheffish'
|
2
|
-
require 'chef/resource/lwrp_base'
|
3
|
-
require 'chef/run_list/run_list_item'
|
4
|
-
|
5
|
-
class Chef
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
1
|
+
require 'cheffish'
|
2
|
+
require 'chef/resource/lwrp_base'
|
3
|
+
require 'chef/run_list/run_list_item'
|
4
|
+
|
5
|
+
class Chef
|
6
|
+
class Resource
|
7
|
+
class ChefGroup < Chef::Resource::LWRPBase
|
8
|
+
self.resource_name = 'chef_group'
|
9
|
+
|
10
|
+
actions :create, :delete, :nothing
|
11
|
+
default_action :create
|
12
|
+
|
13
|
+
# Grab environment from with_environment
|
14
|
+
def initialize(*args)
|
15
|
+
super
|
16
|
+
chef_server run_context.cheffish.current_chef_server
|
17
|
+
@users = []
|
18
|
+
@clients = []
|
19
|
+
@groups = []
|
20
|
+
@remove_users = []
|
21
|
+
@remove_clients = []
|
22
|
+
@remove_groups = []
|
23
|
+
end
|
24
|
+
|
25
|
+
attribute :name, :kind_of => String, :regex => Cheffish::NAME_REGEX, :name_attribute => true
|
26
|
+
def users(*users)
|
27
|
+
users.size == 0 ? @users : (@users |= users.flatten)
|
28
|
+
end
|
29
|
+
def clients(*clients)
|
30
|
+
clients.size == 0 ? @clients : (@clients |= clients.flatten)
|
31
|
+
end
|
32
|
+
def groups(*groups)
|
33
|
+
groups.size == 0 ? @groups : (@groups |= groups.flatten)
|
34
|
+
end
|
35
|
+
def remove_users(*remove_users)
|
36
|
+
remove_users.size == 0 ? @remove_users : (@remove_users |= remove_users.flatten)
|
37
|
+
end
|
38
|
+
def remove_clients(*remove_clients)
|
39
|
+
remove_clients.size == 0 ? @remove_clients : (@remove_clients |= remove_clients.flatten)
|
40
|
+
end
|
41
|
+
def remove_groups(*remove_groups)
|
42
|
+
remove_groups.size == 0 ? @remove_groups : (@remove_groups |= remove_groups.flatten)
|
43
|
+
end
|
44
|
+
|
45
|
+
# Specifies that this is a complete specification for the environment (i.e. attributes you don't specify will be
|
46
|
+
# reset to their defaults)
|
47
|
+
attribute :complete, :kind_of => [TrueClass, FalseClass]
|
48
|
+
|
49
|
+
attribute :raw_json, :kind_of => Hash
|
50
|
+
attribute :chef_server, :kind_of => Hash
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|