cheffish 1.5.0 → 1.6.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.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +10 -0
  3. data/LICENSE +201 -201
  4. data/README.md +120 -120
  5. data/Rakefile +23 -23
  6. data/cheffish.gemspec +26 -0
  7. data/lib/chef/provider/chef_acl.rb +446 -439
  8. data/lib/chef/provider/chef_client.rb +53 -53
  9. data/lib/chef/provider/chef_container.rb +55 -55
  10. data/lib/chef/provider/chef_data_bag.rb +55 -55
  11. data/lib/chef/provider/chef_data_bag_item.rb +278 -278
  12. data/lib/chef/provider/chef_environment.rb +83 -83
  13. data/lib/chef/provider/chef_group.rb +83 -83
  14. data/lib/chef/provider/chef_mirror.rb +169 -169
  15. data/lib/chef/provider/chef_node.rb +87 -87
  16. data/lib/chef/provider/chef_organization.rb +155 -155
  17. data/lib/chef/provider/chef_resolved_cookbooks.rb +46 -46
  18. data/lib/chef/provider/chef_role.rb +84 -84
  19. data/lib/chef/provider/chef_user.rb +59 -59
  20. data/lib/chef/provider/private_key.rb +225 -225
  21. data/lib/chef/provider/public_key.rb +88 -88
  22. data/lib/chef/resource/chef_acl.rb +69 -69
  23. data/lib/chef/resource/chef_client.rb +48 -48
  24. data/lib/chef/resource/chef_container.rb +22 -22
  25. data/lib/chef/resource/chef_data_bag.rb +22 -22
  26. data/lib/chef/resource/chef_data_bag_item.rb +121 -121
  27. data/lib/chef/resource/chef_environment.rb +77 -77
  28. data/lib/chef/resource/chef_group.rb +53 -53
  29. data/lib/chef/resource/chef_mirror.rb +52 -52
  30. data/lib/chef/resource/chef_node.rb +22 -22
  31. data/lib/chef/resource/chef_organization.rb +69 -69
  32. data/lib/chef/resource/chef_resolved_cookbooks.rb +35 -35
  33. data/lib/chef/resource/chef_role.rb +110 -110
  34. data/lib/chef/resource/chef_user.rb +56 -56
  35. data/lib/chef/resource/private_key.rb +48 -48
  36. data/lib/chef/resource/public_key.rb +25 -25
  37. data/lib/cheffish.rb +235 -235
  38. data/lib/cheffish/actor_provider_base.rb +131 -131
  39. data/lib/cheffish/basic_chef_client.rb +184 -184
  40. data/lib/cheffish/chef_provider_base.rb +246 -246
  41. data/lib/cheffish/chef_run.rb +162 -162
  42. data/lib/cheffish/chef_run_data.rb +19 -19
  43. data/lib/cheffish/chef_run_listener.rb +30 -30
  44. data/lib/cheffish/key_formatter.rb +113 -113
  45. data/lib/cheffish/merged_config.rb +98 -94
  46. data/lib/cheffish/recipe_dsl.rb +157 -157
  47. data/lib/cheffish/rspec.rb +8 -8
  48. data/lib/cheffish/rspec/chef_run_support.rb +83 -83
  49. data/lib/cheffish/rspec/matchers.rb +4 -4
  50. data/lib/cheffish/rspec/matchers/be_idempotent.rb +16 -16
  51. data/lib/cheffish/rspec/matchers/emit_no_warnings_or_errors.rb +15 -15
  52. data/lib/cheffish/rspec/matchers/have_updated.rb +37 -37
  53. data/lib/cheffish/rspec/matchers/partially_match.rb +63 -63
  54. data/lib/cheffish/rspec/recipe_run_wrapper.rb +78 -78
  55. data/lib/cheffish/rspec/repository_support.rb +108 -108
  56. data/lib/cheffish/server_api.rb +52 -52
  57. data/lib/cheffish/version.rb +3 -3
  58. data/lib/cheffish/with_pattern.rb +21 -21
  59. data/spec/functional/fingerprint_spec.rb +64 -64
  60. data/spec/functional/merged_config_spec.rb +19 -19
  61. data/spec/functional/server_api_spec.rb +13 -13
  62. data/spec/integration/chef_acl_spec.rb +892 -879
  63. data/spec/integration/chef_client_spec.rb +105 -105
  64. data/spec/integration/chef_container_spec.rb +33 -33
  65. data/spec/integration/chef_group_spec.rb +309 -309
  66. data/spec/integration/chef_mirror_spec.rb +491 -491
  67. data/spec/integration/chef_node_spec.rb +786 -786
  68. data/spec/integration/chef_organization_spec.rb +226 -226
  69. data/spec/integration/chef_role_spec.rb +78 -78
  70. data/spec/integration/chef_user_spec.rb +85 -85
  71. data/spec/integration/private_key_spec.rb +399 -399
  72. data/spec/integration/recipe_dsl_spec.rb +28 -28
  73. data/spec/integration/rspec/converge_spec.rb +183 -183
  74. data/spec/support/key_support.rb +29 -29
  75. data/spec/support/spec_support.rb +15 -15
  76. data/spec/unit/get_private_key_spec.rb +131 -131
  77. data/spec/unit/recipe_run_wrapper_spec.rb +37 -37
  78. metadata +7 -5
@@ -1,226 +1,226 @@
1
- require 'support/spec_support'
2
- require 'cheffish/rspec/chef_run_support'
3
- require 'chef/resource/chef_organization'
4
- require 'chef/provider/chef_organization'
5
-
6
- describe Chef::Resource::ChefOrganization do
7
- extend Cheffish::RSpec::ChefRunSupport
8
-
9
- when_the_chef_12_server 'is in multi-org mode' do
10
- context 'and chef_server_url is pointed at the top level' do
11
- user 'u', {}
12
- user 'u2', {}
13
-
14
- it 'chef_organization "x" creates the organization' do
15
- expect_recipe {
16
- chef_organization 'x'
17
- }.to have_updated('chef_organization[x]', :create)
18
- expect(get('/organizations/x')['full_name']).to eq('x')
19
- end
20
- end
21
-
22
- context 'and chef_server_url is pointed at /organizations/foo' do
23
- organization 'foo'
24
-
25
- before :each do
26
- Chef::Config.chef_server_url = URI.join(Chef::Config.chef_server_url, '/organizations/foo').to_s
27
- end
28
-
29
- context 'and is empty' do
30
- user 'u', {}
31
- user 'u2', {}
32
-
33
- it 'chef_organization "x" creates the organization' do
34
- expect_recipe {
35
- chef_organization 'x'
36
- }.to have_updated('chef_organization[x]', :create)
37
- expect(get('/organizations/x')['full_name']).to eq('x')
38
- end
39
-
40
- it 'chef_organization "x" with full_name creates the organization' do
41
- expect_recipe {
42
- chef_organization 'x' do
43
- full_name 'Hi'
44
- end
45
- }.to have_updated('chef_organization[x]', :create)
46
- expect(get('/organizations/x')['full_name']).to eq('Hi')
47
- end
48
-
49
- it 'chef_organization "x" and inviting users creates the invites' do
50
- expect_recipe {
51
- chef_organization 'x' do
52
- invites 'u', 'u2'
53
- end
54
- }.to have_updated('chef_organization[x]', :create)
55
- expect(get('/organizations/x/association_requests').map { |u| u['username'] }).to eq(%w(u u2))
56
- end
57
-
58
- it 'chef_organization "x" adds members' do
59
- expect_recipe {
60
- chef_organization 'x' do
61
- members 'u', 'u2'
62
- end
63
- }.to have_updated('chef_organization[x]', :create)
64
- expect(get('/organizations/x/users').map { |u| u['user']['username'] }).to eq(%w(u u2))
65
- end
66
- end
67
-
68
- context 'and already has an organization named x' do
69
- user 'u', {}
70
- user 'u2', {}
71
- user 'u3', {}
72
- user 'member', {}
73
- user 'member2', {}
74
- user 'invited', {}
75
- user 'invited2', {}
76
- organization 'x', { 'full_name' => 'Lo' } do
77
- org_member 'member', 'member2'
78
- org_invite 'invited', 'invited2'
79
- end
80
-
81
- it 'chef_organization "x" changes nothing' do
82
- expect_recipe {
83
- chef_organization 'x'
84
- }.not_to have_updated('chef_organization[x]', :create)
85
- expect(get('/organizations/x')['full_name']).to eq('Lo')
86
- end
87
-
88
- it 'chef_organization "x" with "complete true" reverts the full_name' do
89
- expect_recipe {
90
- chef_organization 'x' do
91
- complete true
92
- end
93
- }.to have_updated('chef_organization[x]', :create)
94
- expect(get('/organizations/x')['full_name']).to eq('x')
95
- end
96
-
97
- it 'chef_organization "x" with new full_name updates the organization' do
98
- expect_recipe {
99
- chef_organization 'x' do
100
- full_name 'Hi'
101
- end
102
- }.to have_updated('chef_organization[x]', :create)
103
- expect(get('/organizations/x')['full_name']).to eq('Hi')
104
- end
105
-
106
- context 'invites and membership tests' do
107
- it 'chef_organization "x" and inviting users creates the invites' do
108
- expect_recipe {
109
- chef_organization 'x' do
110
- invites 'u', 'u2'
111
- end
112
- }.to have_updated('chef_organization[x]', :create)
113
- expect(get('/organizations/x/association_requests').map { |u| u['username'] }).to eq(%w(invited invited2 u u2))
114
- end
115
-
116
- it 'chef_organization "x" adds members' do
117
- expect_recipe {
118
- chef_organization 'x' do
119
- members 'u', 'u2'
120
- end
121
- }.to have_updated('chef_organization[x]', :create)
122
- expect(get('/organizations/x/users').map { |u| u['user']['username'] }).to eq(%w(member member2 u u2))
123
- end
124
-
125
- it 'chef_organization "x" does nothing when inviting already-invited users and members' do
126
- expect_recipe {
127
- chef_organization 'x' do
128
- invites 'invited', 'member'
129
- end
130
- }.not_to have_updated('chef_organization[x]', :create)
131
- expect(get('/organizations/x/association_requests').map { |u| u['username'] }).to eq(%w(invited invited2))
132
- expect(get('/organizations/x/users').map { |u| u['user']['username'] }).to eq(%w(member member2))
133
- end
134
-
135
- it 'chef_organization "x" does nothing when adding members who are already members' do
136
- expect_recipe {
137
- chef_organization 'x' do
138
- members 'member'
139
- end
140
- }.not_to have_updated('chef_organization[x]', :create)
141
- expect(get('/organizations/x/association_requests').map { |u| u['username'] }).to eq(%w(invited invited2))
142
- expect(get('/organizations/x/users').map { |u| u['user']['username'] }).to eq(%w(member member2))
143
- end
144
-
145
- it 'chef_organization "x" upgrades invites to members when asked' do
146
- expect_recipe {
147
- chef_organization 'x' do
148
- members 'invited'
149
- end
150
- }.to have_updated('chef_organization[x]', :create)
151
- expect(get('/organizations/x/users').map { |u| u['user']['username'] }).to eq(%w(invited member member2))
152
- expect(get('/organizations/x/association_requests').map { |u| u['username'] }).to eq(%w(invited2))
153
- end
154
-
155
- it 'chef_organization "x" removes members and invites when asked' do
156
- expect_recipe {
157
- chef_organization 'x' do
158
- remove_members 'invited', 'member'
159
- end
160
- }.to have_updated('chef_organization[x]', :create)
161
- expect(get('/organizations/x/association_requests').map { |u| u['username'] }).to eq(%w(invited2))
162
- expect(get('/organizations/x/users').map { |u| u['user']['username'] }).to eq(%w(member2))
163
- end
164
-
165
- it 'chef_organization "x" does nothing when asked to remove non-members' do
166
- expect_recipe {
167
- chef_organization 'x' do
168
- remove_members 'u', 'u2'
169
- end
170
- }.not_to have_updated('chef_organization[x]', :create)
171
- expect(get('/organizations/x/association_requests').map { |u| u['username'] }).to eq(%w(invited invited2))
172
- expect(get('/organizations/x/users').map { |u| u['user']['username'] }).to eq(%w(member member2))
173
- end
174
-
175
- it 'chef_organization "x" with "complete true" reverts the full_name but does not remove invites or members' do
176
- expect_recipe {
177
- chef_organization 'x' do
178
- complete true
179
- end
180
- }.to have_updated('chef_organization[x]', :create)
181
- expect(get('/organizations/x')['full_name']).to eq('x')
182
- expect(get('/organizations/x/association_requests').map { |u| u['username'] }).to eq(%w(invited invited2))
183
- expect(get('/organizations/x/users').map { |u| u['user']['username'] }).to eq(%w(member member2))
184
- end
185
-
186
- it 'chef_organization "x" with members [] and "complete true" removes invites and members' do
187
- expect_recipe {
188
- chef_organization 'x' do
189
- members []
190
- complete true
191
- end
192
- }.to have_updated('chef_organization[x]', :create)
193
- expect(get('/organizations/x')['full_name']).to eq('x')
194
- expect(get('/organizations/x/association_requests').map { |u| u['username'] }).to eq([])
195
- expect(get('/organizations/x/users').map { |u| u['user']['username'] }).to eq([])
196
- end
197
-
198
- it 'chef_organization "x" with members [] and "complete true" removes invites but not members' do
199
- expect_recipe {
200
- chef_organization 'x' do
201
- invites []
202
- complete true
203
- end
204
- }.to have_updated('chef_organization[x]', :create)
205
- expect(get('/organizations/x')['full_name']).to eq('x')
206
- expect(get('/organizations/x/association_requests').map { |u| u['username'] }).to eq([])
207
- expect(get('/organizations/x/users').map { |u| u['user']['username'] }).to eq(%w(member member2))
208
- end
209
-
210
- it 'chef_organization "x" with invites, members and "complete true" removes all non-specified invites and members' do
211
- expect_recipe {
212
- chef_organization 'x' do
213
- invites 'invited', 'u'
214
- members 'member', 'u2'
215
- complete true
216
- end
217
- }.to have_updated('chef_organization[x]', :create)
218
- expect(get('/organizations/x')['full_name']).to eq('x')
219
- expect(get('/organizations/x/association_requests').map { |u| u['username'] }).to eq(%w(invited u))
220
- expect(get('/organizations/x/users').map { |u| u['user']['username'] }).to eq(%w(member u2))
221
- end
222
- end
223
- end
224
- end
225
- end
226
- end
1
+ require 'support/spec_support'
2
+ require 'cheffish/rspec/chef_run_support'
3
+ require 'chef/resource/chef_organization'
4
+ require 'chef/provider/chef_organization'
5
+
6
+ describe Chef::Resource::ChefOrganization do
7
+ extend Cheffish::RSpec::ChefRunSupport
8
+
9
+ when_the_chef_12_server 'is in multi-org mode' do
10
+ context 'and chef_server_url is pointed at the top level' do
11
+ user 'u', {}
12
+ user 'u2', {}
13
+
14
+ it 'chef_organization "x" creates the organization' do
15
+ expect_recipe {
16
+ chef_organization 'x'
17
+ }.to have_updated('chef_organization[x]', :create)
18
+ expect(get('/organizations/x')['full_name']).to eq('x')
19
+ end
20
+ end
21
+
22
+ context 'and chef_server_url is pointed at /organizations/foo' do
23
+ organization 'foo'
24
+
25
+ before :each do
26
+ Chef::Config.chef_server_url = URI.join(Chef::Config.chef_server_url, '/organizations/foo').to_s
27
+ end
28
+
29
+ context 'and is empty' do
30
+ user 'u', {}
31
+ user 'u2', {}
32
+
33
+ it 'chef_organization "x" creates the organization' do
34
+ expect_recipe {
35
+ chef_organization 'x'
36
+ }.to have_updated('chef_organization[x]', :create)
37
+ expect(get('/organizations/x')['full_name']).to eq('x')
38
+ end
39
+
40
+ it 'chef_organization "x" with full_name creates the organization' do
41
+ expect_recipe {
42
+ chef_organization 'x' do
43
+ full_name 'Hi'
44
+ end
45
+ }.to have_updated('chef_organization[x]', :create)
46
+ expect(get('/organizations/x')['full_name']).to eq('Hi')
47
+ end
48
+
49
+ it 'chef_organization "x" and inviting users creates the invites' do
50
+ expect_recipe {
51
+ chef_organization 'x' do
52
+ invites 'u', 'u2'
53
+ end
54
+ }.to have_updated('chef_organization[x]', :create)
55
+ expect(get('/organizations/x/association_requests').map { |u| u['username'] }).to eq(%w(u u2))
56
+ end
57
+
58
+ it 'chef_organization "x" adds members' do
59
+ expect_recipe {
60
+ chef_organization 'x' do
61
+ members 'u', 'u2'
62
+ end
63
+ }.to have_updated('chef_organization[x]', :create)
64
+ expect(get('/organizations/x/users').map { |u| u['user']['username'] }).to eq(%w(u u2))
65
+ end
66
+ end
67
+
68
+ context 'and already has an organization named x' do
69
+ user 'u', {}
70
+ user 'u2', {}
71
+ user 'u3', {}
72
+ user 'member', {}
73
+ user 'member2', {}
74
+ user 'invited', {}
75
+ user 'invited2', {}
76
+ organization 'x', { 'full_name' => 'Lo' } do
77
+ org_member 'member', 'member2'
78
+ org_invite 'invited', 'invited2'
79
+ end
80
+
81
+ it 'chef_organization "x" changes nothing' do
82
+ expect_recipe {
83
+ chef_organization 'x'
84
+ }.not_to have_updated('chef_organization[x]', :create)
85
+ expect(get('/organizations/x')['full_name']).to eq('Lo')
86
+ end
87
+
88
+ it 'chef_organization "x" with "complete true" reverts the full_name' do
89
+ expect_recipe {
90
+ chef_organization 'x' do
91
+ complete true
92
+ end
93
+ }.to have_updated('chef_organization[x]', :create)
94
+ expect(get('/organizations/x')['full_name']).to eq('x')
95
+ end
96
+
97
+ it 'chef_organization "x" with new full_name updates the organization' do
98
+ expect_recipe {
99
+ chef_organization 'x' do
100
+ full_name 'Hi'
101
+ end
102
+ }.to have_updated('chef_organization[x]', :create)
103
+ expect(get('/organizations/x')['full_name']).to eq('Hi')
104
+ end
105
+
106
+ context 'invites and membership tests' do
107
+ it 'chef_organization "x" and inviting users creates the invites' do
108
+ expect_recipe {
109
+ chef_organization 'x' do
110
+ invites 'u', 'u2'
111
+ end
112
+ }.to have_updated('chef_organization[x]', :create)
113
+ expect(get('/organizations/x/association_requests').map { |u| u['username'] }).to eq(%w(invited invited2 u u2))
114
+ end
115
+
116
+ it 'chef_organization "x" adds members' do
117
+ expect_recipe {
118
+ chef_organization 'x' do
119
+ members 'u', 'u2'
120
+ end
121
+ }.to have_updated('chef_organization[x]', :create)
122
+ expect(get('/organizations/x/users').map { |u| u['user']['username'] }).to eq(%w(member member2 u u2))
123
+ end
124
+
125
+ it 'chef_organization "x" does nothing when inviting already-invited users and members' do
126
+ expect_recipe {
127
+ chef_organization 'x' do
128
+ invites 'invited', 'member'
129
+ end
130
+ }.not_to have_updated('chef_organization[x]', :create)
131
+ expect(get('/organizations/x/association_requests').map { |u| u['username'] }).to eq(%w(invited invited2))
132
+ expect(get('/organizations/x/users').map { |u| u['user']['username'] }).to eq(%w(member member2))
133
+ end
134
+
135
+ it 'chef_organization "x" does nothing when adding members who are already members' do
136
+ expect_recipe {
137
+ chef_organization 'x' do
138
+ members 'member'
139
+ end
140
+ }.not_to have_updated('chef_organization[x]', :create)
141
+ expect(get('/organizations/x/association_requests').map { |u| u['username'] }).to eq(%w(invited invited2))
142
+ expect(get('/organizations/x/users').map { |u| u['user']['username'] }).to eq(%w(member member2))
143
+ end
144
+
145
+ it 'chef_organization "x" upgrades invites to members when asked' do
146
+ expect_recipe {
147
+ chef_organization 'x' do
148
+ members 'invited'
149
+ end
150
+ }.to have_updated('chef_organization[x]', :create)
151
+ expect(get('/organizations/x/users').map { |u| u['user']['username'] }).to eq(%w(invited member member2))
152
+ expect(get('/organizations/x/association_requests').map { |u| u['username'] }).to eq(%w(invited2))
153
+ end
154
+
155
+ it 'chef_organization "x" removes members and invites when asked' do
156
+ expect_recipe {
157
+ chef_organization 'x' do
158
+ remove_members 'invited', 'member'
159
+ end
160
+ }.to have_updated('chef_organization[x]', :create)
161
+ expect(get('/organizations/x/association_requests').map { |u| u['username'] }).to eq(%w(invited2))
162
+ expect(get('/organizations/x/users').map { |u| u['user']['username'] }).to eq(%w(member2))
163
+ end
164
+
165
+ it 'chef_organization "x" does nothing when asked to remove non-members' do
166
+ expect_recipe {
167
+ chef_organization 'x' do
168
+ remove_members 'u', 'u2'
169
+ end
170
+ }.not_to have_updated('chef_organization[x]', :create)
171
+ expect(get('/organizations/x/association_requests').map { |u| u['username'] }).to eq(%w(invited invited2))
172
+ expect(get('/organizations/x/users').map { |u| u['user']['username'] }).to eq(%w(member member2))
173
+ end
174
+
175
+ it 'chef_organization "x" with "complete true" reverts the full_name but does not remove invites or members' do
176
+ expect_recipe {
177
+ chef_organization 'x' do
178
+ complete true
179
+ end
180
+ }.to have_updated('chef_organization[x]', :create)
181
+ expect(get('/organizations/x')['full_name']).to eq('x')
182
+ expect(get('/organizations/x/association_requests').map { |u| u['username'] }).to eq(%w(invited invited2))
183
+ expect(get('/organizations/x/users').map { |u| u['user']['username'] }).to eq(%w(member member2))
184
+ end
185
+
186
+ it 'chef_organization "x" with members [] and "complete true" removes invites and members' do
187
+ expect_recipe {
188
+ chef_organization 'x' do
189
+ members []
190
+ complete true
191
+ end
192
+ }.to have_updated('chef_organization[x]', :create)
193
+ expect(get('/organizations/x')['full_name']).to eq('x')
194
+ expect(get('/organizations/x/association_requests').map { |u| u['username'] }).to eq([])
195
+ expect(get('/organizations/x/users').map { |u| u['user']['username'] }).to eq([])
196
+ end
197
+
198
+ it 'chef_organization "x" with members [] and "complete true" removes invites but not members' do
199
+ expect_recipe {
200
+ chef_organization 'x' do
201
+ invites []
202
+ complete true
203
+ end
204
+ }.to have_updated('chef_organization[x]', :create)
205
+ expect(get('/organizations/x')['full_name']).to eq('x')
206
+ expect(get('/organizations/x/association_requests').map { |u| u['username'] }).to eq([])
207
+ expect(get('/organizations/x/users').map { |u| u['user']['username'] }).to eq(%w(member member2))
208
+ end
209
+
210
+ it 'chef_organization "x" with invites, members and "complete true" removes all non-specified invites and members' do
211
+ expect_recipe {
212
+ chef_organization 'x' do
213
+ invites 'invited', 'u'
214
+ members 'member', 'u2'
215
+ complete true
216
+ end
217
+ }.to have_updated('chef_organization[x]', :create)
218
+ expect(get('/organizations/x')['full_name']).to eq('x')
219
+ expect(get('/organizations/x/association_requests').map { |u| u['username'] }).to eq(%w(invited u))
220
+ expect(get('/organizations/x/users').map { |u| u['user']['username'] }).to eq(%w(member u2))
221
+ end
222
+ end
223
+ end
224
+ end
225
+ end
226
+ end
@@ -1,78 +1,78 @@
1
- require 'support/spec_support'
2
- require 'cheffish/rspec/chef_run_support'
3
- require 'chef/resource/chef_role'
4
- require 'chef/provider/chef_role'
5
-
6
- describe Chef::Resource::ChefRole do
7
- extend Cheffish::RSpec::ChefRunSupport
8
-
9
- when_the_chef_12_server 'is in multi-org mode' do
10
- organization 'foo'
11
-
12
- before :each do
13
- Chef::Config.chef_server_url = URI.join(Chef::Config.chef_server_url, '/organizations/foo').to_s
14
- end
15
-
16
- context 'and is empty' do
17
- context 'and we run a recipe that creates role "blah"' do
18
- it 'the role gets created' do
19
- expect_recipe {
20
- chef_role 'blah'
21
- }.to have_updated 'chef_role[blah]', :create
22
- expect(get('roles/blah')['name']).to eq('blah')
23
- end
24
- end
25
-
26
- # TODO why-run mode
27
-
28
- context 'and another chef server is running on port 8899' do
29
- before :each do
30
- @server = ChefZero::Server.new(:port => 8899)
31
- @server.start_background
32
- end
33
-
34
- after :each do
35
- @server.stop
36
- end
37
-
38
- context 'and a recipe is run that creates role "blah" on the second chef server using with_chef_server' do
39
-
40
- it 'the role is created on the second chef server but not the first' do
41
- expect_recipe {
42
- with_chef_server 'http://127.0.0.1:8899'
43
- chef_role 'blah'
44
- }.to have_updated 'chef_role[blah]', :create
45
- expect { get('roles/blah') }.to raise_error(Net::HTTPServerException)
46
- expect(get('http://127.0.0.1:8899/roles/blah')['name']).to eq('blah')
47
- end
48
- end
49
-
50
- context 'and a recipe is run that creates role "blah" on the second chef server using chef_server' do
51
-
52
- it 'the role is created on the second chef server but not the first' do
53
- expect_recipe {
54
- chef_role 'blah' do
55
- chef_server({ :chef_server_url => 'http://127.0.0.1:8899' })
56
- end
57
- }.to have_updated 'chef_role[blah]', :create
58
- expect { get('roles/blah') }.to raise_error(Net::HTTPServerException)
59
- expect(get('http://127.0.0.1:8899/roles/blah')['name']).to eq('blah')
60
- end
61
- end
62
- end
63
- end
64
- end
65
-
66
- when_the_chef_server 'is in OSC mode' do
67
- context 'and is empty' do
68
- context 'and we run a recipe that creates role "blah"' do
69
- it 'the role gets created' do
70
- expect_recipe {
71
- chef_role 'blah'
72
- }.to have_updated 'chef_role[blah]', :create
73
- expect(get('roles/blah')['name']).to eq('blah')
74
- end
75
- end
76
- end
77
- end
78
- end
1
+ require 'support/spec_support'
2
+ require 'cheffish/rspec/chef_run_support'
3
+ require 'chef/resource/chef_role'
4
+ require 'chef/provider/chef_role'
5
+
6
+ describe Chef::Resource::ChefRole do
7
+ extend Cheffish::RSpec::ChefRunSupport
8
+
9
+ when_the_chef_12_server 'is in multi-org mode' do
10
+ organization 'foo'
11
+
12
+ before :each do
13
+ Chef::Config.chef_server_url = URI.join(Chef::Config.chef_server_url, '/organizations/foo').to_s
14
+ end
15
+
16
+ context 'and is empty' do
17
+ context 'and we run a recipe that creates role "blah"' do
18
+ it 'the role gets created' do
19
+ expect_recipe {
20
+ chef_role 'blah'
21
+ }.to have_updated 'chef_role[blah]', :create
22
+ expect(get('roles/blah')['name']).to eq('blah')
23
+ end
24
+ end
25
+
26
+ # TODO why-run mode
27
+
28
+ context 'and another chef server is running on port 8899' do
29
+ before :each do
30
+ @server = ChefZero::Server.new(:port => 8899)
31
+ @server.start_background
32
+ end
33
+
34
+ after :each do
35
+ @server.stop
36
+ end
37
+
38
+ context 'and a recipe is run that creates role "blah" on the second chef server using with_chef_server' do
39
+
40
+ it 'the role is created on the second chef server but not the first' do
41
+ expect_recipe {
42
+ with_chef_server 'http://127.0.0.1:8899'
43
+ chef_role 'blah'
44
+ }.to have_updated 'chef_role[blah]', :create
45
+ expect { get('roles/blah') }.to raise_error(Net::HTTPServerException)
46
+ expect(get('http://127.0.0.1:8899/roles/blah')['name']).to eq('blah')
47
+ end
48
+ end
49
+
50
+ context 'and a recipe is run that creates role "blah" on the second chef server using chef_server' do
51
+
52
+ it 'the role is created on the second chef server but not the first' do
53
+ expect_recipe {
54
+ chef_role 'blah' do
55
+ chef_server({ :chef_server_url => 'http://127.0.0.1:8899' })
56
+ end
57
+ }.to have_updated 'chef_role[blah]', :create
58
+ expect { get('roles/blah') }.to raise_error(Net::HTTPServerException)
59
+ expect(get('http://127.0.0.1:8899/roles/blah')['name']).to eq('blah')
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+
66
+ when_the_chef_server 'is in OSC mode' do
67
+ context 'and is empty' do
68
+ context 'and we run a recipe that creates role "blah"' do
69
+ it 'the role gets created' do
70
+ expect_recipe {
71
+ chef_role 'blah'
72
+ }.to have_updated 'chef_role[blah]', :create
73
+ expect(get('roles/blah')['name']).to eq('blah')
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end