cheffish 0.2.2 → 0.3
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/lib/chef/provider/chef_node.rb +8 -8
- data/lib/cheffish/chef_provider_base.rb +3 -1
- data/lib/cheffish/recipe_dsl.rb +13 -0
- data/lib/cheffish/version.rb +1 -2
- data/lib/cheffish.rb +15 -76
- data/spec/integration/chef_node_spec.rb +71 -1
- data/spec/support/spec_support.rb +4 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5f6b8abbcddf03b097bc9380a4bad5367f760f2f
|
4
|
+
data.tar.gz: 3f17d2781c140a66a869ecbedfd4c0c74326f1f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 798aeb7bfd711164e71e613c2a3124aaf2cb2a8a344010aa6b97e17637802fc6ded341525677f97adc388f96360f7c28ce67145e519cf2ccc5b22fc199acd9b7
|
7
|
+
data.tar.gz: 0cbe97227f83d68327b8023f4ba23eaa81459f034fe31f5ee3e9a69bdb395cfdaaf7785b3dc1a458513312d32ff8a984ef10a6a210133d4462f3a77728f5433a
|
@@ -47,12 +47,15 @@ class Chef::Provider::ChefNode < Cheffish::ChefProviderBase
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def augment_new_json(json)
|
50
|
+
# Preserve tags even if "attributes" was overwritten directly
|
51
|
+
json['normal']['tags'] = current_json['normal']['tags'] unless json['normal']['tags']
|
50
52
|
# Apply modifiers
|
51
53
|
json['run_list'] = apply_run_list_modifiers(new_resource.run_list_modifiers, new_resource.run_list_removers, json['run_list'])
|
52
|
-
json['
|
53
|
-
|
54
|
-
json['
|
55
|
-
json['
|
54
|
+
json['normal'] = apply_modifiers(new_resource.attribute_modifiers, json['normal'])
|
55
|
+
# Preserve default/override/automatic even when "complete true"
|
56
|
+
json['default'] = current_json['default']
|
57
|
+
json['override'] = current_json['override']
|
58
|
+
json['automatic'] = current_json['automatic']
|
56
59
|
json
|
57
60
|
end
|
58
61
|
|
@@ -73,10 +76,7 @@ class Chef::Provider::ChefNode < Cheffish::ChefProviderBase
|
|
73
76
|
'name' => :name,
|
74
77
|
'chef_environment' => :chef_environment,
|
75
78
|
'run_list' => :run_list,
|
76
|
-
'
|
77
|
-
'normal' => :normal_attributes,
|
78
|
-
'override' => :override_attributes,
|
79
|
-
'automatic' => :automatic_attributes
|
79
|
+
'normal' => :attributes
|
80
80
|
}
|
81
81
|
end
|
82
82
|
end
|
@@ -69,8 +69,10 @@ module Cheffish
|
|
69
69
|
def json_to_resource(json)
|
70
70
|
resource = resource_class.new(new_resource.name)
|
71
71
|
keys.each do |json_key, resource_key|
|
72
|
-
resource.send(resource_key, json
|
72
|
+
resource.send(resource_key, json.delete(json_key))
|
73
73
|
end
|
74
|
+
# Set the leftover to raw_json
|
75
|
+
resource.raw_json json
|
74
76
|
resource
|
75
77
|
end
|
76
78
|
|
data/lib/cheffish/recipe_dsl.rb
CHANGED
@@ -94,5 +94,18 @@ class Chef
|
|
94
94
|
|
95
95
|
with_chef_server(chef_zero_server.url, &block)
|
96
96
|
end
|
97
|
+
|
98
|
+
def self.stop_local_servers
|
99
|
+
# Just in case we're running this out of order:
|
100
|
+
@@local_servers ||= []
|
101
|
+
|
102
|
+
# Stop the servers
|
103
|
+
@@local_servers.each do |server|
|
104
|
+
server.stop
|
105
|
+
end
|
106
|
+
|
107
|
+
# Clean up after ourselves (don't want to stop a server twice)
|
108
|
+
@@local_servers = []
|
109
|
+
end
|
97
110
|
end
|
98
111
|
end
|
data/lib/cheffish/version.rb
CHANGED
data/lib/cheffish.rb
CHANGED
@@ -60,10 +60,7 @@ module Cheffish
|
|
60
60
|
attribute :name, :kind_of => String, :regex => Cheffish::NAME_REGEX, :name_attribute => true
|
61
61
|
attribute :chef_environment, :kind_of => String, :regex => Cheffish::NAME_REGEX
|
62
62
|
attribute :run_list, :kind_of => Array # We should let them specify it as a series of parameters too
|
63
|
-
attribute :
|
64
|
-
attribute :normal_attributes, :kind_of => Hash
|
65
|
-
attribute :override_attributes, :kind_of => Hash
|
66
|
-
attribute :automatic_attributes, :kind_of => Hash
|
63
|
+
attribute :attributes, :kind_of => Hash
|
67
64
|
|
68
65
|
# Specifies that this is a complete specification for the environment (i.e. attributes you don't specify will be
|
69
66
|
# reset to their defaults)
|
@@ -72,82 +69,28 @@ module Cheffish
|
|
72
69
|
attribute :raw_json, :kind_of => Hash
|
73
70
|
attribute :chef_server, :kind_of => Hash
|
74
71
|
|
75
|
-
#
|
76
|
-
#
|
77
|
-
#
|
72
|
+
# attribute 'ip_address', '127.0.0.1'
|
73
|
+
# attribute [ 'pushy', 'port' ], '9000'
|
74
|
+
# attribute 'ip_addresses' do |existing_value|
|
78
75
|
# (existing_value || []) + [ '127.0.0.1' ]
|
79
76
|
# end
|
80
|
-
#
|
81
|
-
attr_accessor :
|
82
|
-
def
|
83
|
-
@
|
84
|
-
if value != Cheffish.NOT_PASSED
|
85
|
-
@default_modifiers << [ attribute_path, value ]
|
86
|
-
elsif block
|
87
|
-
@default_modifiers << [ attribute_path, block ]
|
88
|
-
else
|
89
|
-
raise "default requires either a value or a block"
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
# normal 'ip_address', '127.0.0.1'
|
94
|
-
# normal [ 'pushy', 'port' ], '9000'
|
95
|
-
# normal 'ip_addresses' do |existing_value|
|
96
|
-
# (existing_value || []) + [ '127.0.0.1' ]
|
97
|
-
# end
|
98
|
-
# normal 'ip_address', :delete
|
99
|
-
attr_accessor :normal_modifiers
|
100
|
-
def normal(attribute_path, value=NOT_PASSED, &block)
|
101
|
-
@normal_modifiers ||= []
|
77
|
+
# attribute 'ip_address', :delete
|
78
|
+
attr_accessor :attribute_modifiers
|
79
|
+
def attribute(attribute_path, value=NOT_PASSED, &block)
|
80
|
+
@attribute_modifiers ||= []
|
102
81
|
if value != NOT_PASSED
|
103
|
-
@
|
82
|
+
@attribute_modifiers << [ attribute_path, value ]
|
104
83
|
elsif block
|
105
|
-
@
|
84
|
+
@attribute_modifiers << [ attribute_path, block ]
|
106
85
|
else
|
107
|
-
raise "
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
# override 'ip_address', '127.0.0.1'
|
112
|
-
# override [ 'pushy', 'port' ], '9000'
|
113
|
-
# override 'ip_addresses' do |existing_value|
|
114
|
-
# (existing_value || []) + [ '127.0.0.1' ]
|
115
|
-
# end
|
116
|
-
# override 'ip_address', :delete
|
117
|
-
attr_accessor :override_modifiers
|
118
|
-
def override(attribute_path, value=NOT_PASSED, &block)
|
119
|
-
@override_modifiers ||= []
|
120
|
-
if value != NOT_PASSED
|
121
|
-
@override_modifiers << [ attribute_path, value ]
|
122
|
-
elsif block
|
123
|
-
@override_modifiers << [ attribute_path, block ]
|
124
|
-
else
|
125
|
-
raise "override requires either a value or a block"
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
# automatic 'ip_address', '127.0.0.1'
|
130
|
-
# automatic [ 'pushy', 'port' ], '9000'
|
131
|
-
# automatic 'ip_addresses' do |existing_value|
|
132
|
-
# (existing_value || []) + [ '127.0.0.1' ]
|
133
|
-
# end
|
134
|
-
# automatic 'ip_address', :delete
|
135
|
-
attr_accessor :automatic_modifiers
|
136
|
-
def automatic(attribute_path, value=NOT_PASSED, &block)
|
137
|
-
@automatic_modifiers ||= []
|
138
|
-
if value != NOT_PASSED
|
139
|
-
@automatic_modifiers << [ attribute_path, value ]
|
140
|
-
elsif block
|
141
|
-
@automatic_modifiers << [ attribute_path, block ]
|
142
|
-
else
|
143
|
-
raise "automatic requires either a value or a block"
|
86
|
+
raise "attribute requires either a value or a block"
|
144
87
|
end
|
145
88
|
end
|
146
89
|
|
147
90
|
# Patchy tags
|
148
91
|
# tag 'webserver', 'apache', 'myenvironment'
|
149
92
|
def tag(*tags)
|
150
|
-
|
93
|
+
attribute 'tags' do |existing_tags|
|
151
94
|
existing_tags ||= []
|
152
95
|
tags.each do |tag|
|
153
96
|
if !existing_tags.include?(tag.to_s)
|
@@ -158,7 +101,7 @@ module Cheffish
|
|
158
101
|
end
|
159
102
|
end
|
160
103
|
def remove_tag(*tags)
|
161
|
-
|
104
|
+
attribute 'tags' do |existing_tags|
|
162
105
|
if existing_tags
|
163
106
|
tags.each do |tag|
|
164
107
|
existing_tags.delete(tag.to_s)
|
@@ -172,17 +115,13 @@ module Cheffish
|
|
172
115
|
# tags :a, :b, :c # removes all other tags
|
173
116
|
def tags(*tags)
|
174
117
|
if tags.size == 0
|
175
|
-
|
118
|
+
attribute('tags')
|
176
119
|
else
|
177
120
|
tags = tags[0] if tags.size == 1 && tags[0].kind_of?(Array)
|
178
|
-
|
121
|
+
attribute 'tags', tags.map { |tag| tag.to_s }
|
179
122
|
end
|
180
123
|
end
|
181
124
|
|
182
|
-
|
183
|
-
alias :attributes :normal_attributes
|
184
|
-
alias :attribute :normal
|
185
|
-
|
186
125
|
# Order matters--if two things here are in the wrong order, they will be flipped in the run list
|
187
126
|
# recipe 'apache', 'mysql'
|
188
127
|
# recipe 'recipe@version'
|
@@ -68,8 +68,78 @@ describe Chef::Resource::ChefNode do
|
|
68
68
|
chef_node 'blah'
|
69
69
|
end
|
70
70
|
|
71
|
-
it '
|
71
|
+
it 'chef_node "blah" does not get created or updated' do
|
72
72
|
chef_run.should_not have_updated 'chef_node[blah]', :create
|
73
73
|
end
|
74
74
|
end
|
75
|
+
|
76
|
+
when_the_chef_server 'has a node named "blah" with tags' do
|
77
|
+
node 'blah', {
|
78
|
+
'normal' => { 'tags' => [ 'a', 'b' ] }
|
79
|
+
}
|
80
|
+
|
81
|
+
context 'with chef_node "blah" that sets attributes' do
|
82
|
+
with_recipe do
|
83
|
+
chef_node 'blah' do
|
84
|
+
attributes({})
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'the tags in attributes are used' do
|
89
|
+
get('/nodes/blah')['normal']['tags'].should == [ 'a', 'b' ]
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
context 'with chef_node "blah" that sets attributes with tags in them' do
|
94
|
+
with_recipe do
|
95
|
+
chef_node 'blah' do
|
96
|
+
attributes 'tags' => [ 'c', 'd' ]
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'the tags in attributes are used' do
|
101
|
+
get('/nodes/blah')['normal']['tags'].should == [ 'c', 'd' ]
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
when_the_chef_server 'has a node named "blah" with everything in it' do
|
107
|
+
node 'blah', {
|
108
|
+
'chef_environment' => 'blah',
|
109
|
+
'run_list' => [ 'recipe[bjork]' ],
|
110
|
+
'normal' => { 'foo' => 'bar', 'tags' => [ 'a', 'b' ] },
|
111
|
+
'default' => { 'foo2' => 'bar2' },
|
112
|
+
'automatic' => { 'foo3' => 'bar3' },
|
113
|
+
'override' => { 'foo4' => 'bar4' }
|
114
|
+
}
|
115
|
+
|
116
|
+
context 'with chef_node "blah"' do
|
117
|
+
with_recipe do
|
118
|
+
chef_node 'blah'
|
119
|
+
end
|
120
|
+
|
121
|
+
it 'nothing gets updated' do
|
122
|
+
chef_run.should_not have_updated 'chef_node[blah]', :create
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
context 'with chef_node "blah" with complete true' do
|
127
|
+
with_recipe do
|
128
|
+
chef_node 'blah' do
|
129
|
+
complete true
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'default, automatic and override attributes are left alone' do
|
134
|
+
chef_run.should have_updated 'chef_node[blah]', :create
|
135
|
+
node = get('/nodes/blah')
|
136
|
+
node['chef_environment'].should == '_default'
|
137
|
+
node['run_list'].should == []
|
138
|
+
node['normal'].should == { 'tags' => [ 'a', 'b' ] }
|
139
|
+
node['default'].should == { 'foo2' => 'bar2' }
|
140
|
+
node['automatic'].should == { 'foo3' => 'bar3' }
|
141
|
+
node['override'].should == { 'foo4' => 'bar4' }
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
75
145
|
end
|
@@ -87,6 +87,7 @@ require 'chef/platform'
|
|
87
87
|
require 'chef/provider/service/simple'
|
88
88
|
require 'chef/provider/service/init'
|
89
89
|
|
90
|
+
require 'chef/provider/batch'
|
90
91
|
require 'chef/provider/cron'
|
91
92
|
require 'chef/provider/cron/aix'
|
92
93
|
require 'chef/provider/cron/solaris'
|
@@ -125,6 +126,7 @@ require 'chef/provider/package/solaris'
|
|
125
126
|
require 'chef/provider/package/smartos'
|
126
127
|
require 'chef/provider/package/yum'
|
127
128
|
require 'chef/provider/package/zypper'
|
129
|
+
require 'chef/provider/powershell_script'
|
128
130
|
require 'chef/provider/remote_directory'
|
129
131
|
require 'chef/provider/route'
|
130
132
|
require 'chef/provider/ruby_block'
|
@@ -138,6 +140,7 @@ require 'chef/provider/service/insserv'
|
|
138
140
|
require 'chef/provider/service/macosx'
|
139
141
|
require 'chef/provider/service/redhat'
|
140
142
|
require 'chef/provider/service/solaris'
|
143
|
+
require 'chef/provider/service/systemd'
|
141
144
|
require 'chef/provider/service/upstart'
|
142
145
|
require 'chef/provider/service/windows'
|
143
146
|
require 'chef/provider/template'
|
@@ -146,3 +149,4 @@ require 'chef/provider/user/pw'
|
|
146
149
|
require 'chef/provider/user/useradd'
|
147
150
|
require 'chef/provider/user/solaris'
|
148
151
|
require 'chef/provider/user/windows'
|
152
|
+
require 'chef/provider/whyrun_safe_ruby_block'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cheffish
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.3'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Keiser
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-04-
|
11
|
+
date: 2014-04-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chef
|