chef-sugar 4.2.1 → 5.1.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/lib/chef/sugar/architecture.rb +137 -132
  3. data/{recipes/default.rb → lib/chef/sugar/deprecation.rb} +31 -6
  4. data/lib/chef/sugar/docker.rb +17 -12
  5. data/lib/chef/sugar/init.rb +1 -2
  6. data/lib/chef/sugar/kitchen.rb +17 -12
  7. data/lib/chef/sugar/node.rb +6 -0
  8. data/lib/chef/sugar/platform.rb +169 -165
  9. data/lib/chef/sugar/platform_family.rb +142 -137
  10. data/lib/chef/sugar/shell.rb +7 -3
  11. data/lib/chef/sugar/version.rb +1 -1
  12. data/lib/chef/sugar/virtualization.rb +1 -1
  13. metadata +9 -139
  14. data/.github/lock.yml +0 -3
  15. data/.github/reaction.yml +0 -1
  16. data/.gitignore +0 -26
  17. data/.kitchen.yml +0 -16
  18. data/.travis.yml +0 -17
  19. data/CHANGELOG.md +0 -261
  20. data/CONTRIBUTING.md +0 -20
  21. data/Gemfile +0 -2
  22. data/README.md +0 -540
  23. data/Rakefile +0 -11
  24. data/chef-sugar.gemspec +0 -33
  25. data/libraries/chef-sugar.rb +0 -1
  26. data/metadata.rb +0 -24
  27. data/spec/spec_helper.rb +0 -25
  28. data/spec/support/shared_examples.rb +0 -20
  29. data/spec/unit/chef/sugar/architecture_spec.rb +0 -129
  30. data/spec/unit/chef/sugar/cloud_spec.rb +0 -149
  31. data/spec/unit/chef/sugar/constraints_spec.rb +0 -45
  32. data/spec/unit/chef/sugar/core_extensions/array_spec.rb +0 -10
  33. data/spec/unit/chef/sugar/core_extensions/object_spec.rb +0 -62
  34. data/spec/unit/chef/sugar/core_extensions/string_spec.rb +0 -48
  35. data/spec/unit/chef/sugar/data_bag_spec.rb +0 -118
  36. data/spec/unit/chef/sugar/docker_spec.rb +0 -39
  37. data/spec/unit/chef/sugar/init_spec.rb +0 -74
  38. data/spec/unit/chef/sugar/ip_spec.rb +0 -53
  39. data/spec/unit/chef/sugar/kernel_spec.rb +0 -16
  40. data/spec/unit/chef/sugar/kitchen_spec.rb +0 -18
  41. data/spec/unit/chef/sugar/node_spec.rb +0 -172
  42. data/spec/unit/chef/sugar/platform_family_spec.rb +0 -166
  43. data/spec/unit/chef/sugar/platform_spec.rb +0 -342
  44. data/spec/unit/chef/sugar/ruby_spec.rb +0 -39
  45. data/spec/unit/chef/sugar/run_context_spec.rb +0 -19
  46. data/spec/unit/chef/sugar/shell_spec.rb +0 -104
  47. data/spec/unit/chef/sugar/vagrant_spec.rb +0 -37
  48. data/spec/unit/chef/sugar/virtualization_spec.rb +0 -135
  49. data/spec/unit/recipes/default_spec.rb +0 -9
@@ -1,20 +0,0 @@
1
- Contributing to Chef Sugar
2
- ===============================
3
- The process for contributing to Chef sugar is rather straight-forward. It is unlikely that you'll need to modify the actual Chef recipe, so it's assumed that you want to work on the Gem itself.
4
-
5
- 1. Fork the repository on GitHub.
6
- 2. Clone your fork.
7
- 3. Create a new, semantically-named branch:
8
-
9
- $ git checkout -b my_feature_branch
10
-
11
- 4. Make any changes, ensuring you write adequate test coverage.
12
- 5. Document your changes (YARD).
13
- 6. Run the tests (make sure they pass).
14
- 7. Submit a Pull Request on GitHub.
15
- 8. (optional) Ping me on Twitter (@sethvargo)
16
-
17
- Additionally, please **DO NOT**:
18
- - Modify the version of the cookbook or gem.
19
- - Update the CHANGELOG
20
- - Make unnecessary changes to the gemspec
data/Gemfile DELETED
@@ -1,2 +0,0 @@
1
- source 'https://rubygems.org'
2
- gemspec
data/README.md DELETED
@@ -1,540 +0,0 @@
1
- # Chef Sugar
2
-
3
- [![Gem Version](http://img.shields.io/gem/v/chef-sugar.svg?style=flat-square)][gem] [![Build Status](http://img.shields.io/travis/sethvargo/chef-sugar.svg?style=flat-square)][travis]
4
-
5
- Chef Sugar is a Gem & Chef Recipe that includes series of helpful syntactic sugars on top of the Chef core and other resources to make a cleaner, more lean recipe DSL, enforce DRY principles, and make writing Chef recipes an awesome and fun experience!
6
-
7
- ## Requirements
8
-
9
- ### Platforms
10
-
11
- - any platform
12
-
13
-
14
- ### Chef
15
-
16
- - Chef 12.10+
17
-
18
- ### Cookbooks
19
-
20
- - none
21
-
22
- ## Installation
23
-
24
- If you want to develop/hack on chef-sugar, please see the CONTRIBUTING.md.
25
-
26
- If you are using Berkshelf, add `chef-sugar` to your `Berksfile`:
27
-
28
- ```ruby
29
- cookbook 'chef-sugar'
30
- ```
31
-
32
- Otherwise, you can use `knife` or download the tarball directly from the community site:
33
-
34
- ```ruby
35
- knife cookbook site install chef-sugar
36
- ```
37
-
38
- ## Usage
39
-
40
- Simply depend on this cookbook in the metadata of your cookbook and the gem will be installed and required..
41
-
42
- Requiring the Chef Sugar Gem will automatically extend the Recipe DSL, `Chef::Resource`, and `Chef::Provider` with helpful convenience methods.
43
-
44
- ### Module Method
45
-
46
- If you are working outside of the Recipe DSL, you can use the module methods instead of the Recipe DSL. In general, the module methods have the same name as their Recipe-DSL counterparts, but require the node object as a parameter. For example:
47
-
48
- In a Recipe:
49
-
50
- ```ruby
51
- # cookbook/recipes/default.rb
52
- do_something if windows?
53
- ```
54
-
55
- In a Library as a singleton:
56
-
57
- ```ruby
58
- # cookbook/libraries/default.rb
59
- def only_on_windows(&block)
60
- yield if Chef::Sugar::PlatformFamily.windows?(@node)
61
- end
62
- ```
63
-
64
- In a Library as a Mixin:
65
-
66
- ```ruby
67
- # cookbook/libraries/default.rb
68
- include Chef::Sugar::PlatformFamily
69
-
70
- def only_on_windows(&block)
71
- yield if windows?(@node)
72
- end
73
- ```
74
-
75
- ## API
76
-
77
- **Note:** For the most extensive API documentation, please see the YARD documentation.
78
-
79
- ### Architecture
80
-
81
- **Note:** Some of the architecture commands begin with an underscore (`_`) because Ruby does not permit methods to start with a numeric.
82
-
83
- - `_64_bit?`
84
- - `_32_bit?`
85
- - `intel?`
86
- - `sparc?`
87
- - `ppc64?`
88
- - `ppc64le?`
89
- - `powerpc?`
90
-
91
- #### Examples
92
-
93
- ```ruby
94
- execute 'build[my binary]' do
95
- command '...'
96
- not_if { _64_bit? }
97
- end
98
- ```
99
-
100
- ### Cloud
101
-
102
- - `azure?`
103
- - `cloud?`
104
- - `digitalocean?`
105
- - `ec2?`
106
- - `eucalyptus?`
107
- - `gce?`
108
- - `linode?`
109
- - `openstack?`
110
- - `cloudstack?`
111
- - `rackspace?`
112
- - `softlayer?`
113
-
114
- #### Examples
115
-
116
- ```ruby
117
- template '/tmp/config' do
118
- variables(
119
- # See also: best_ip_for
120
- ipaddress: cloud? ? node['local_ipv4'] : node['public_ipv4']
121
- )
122
- end
123
- ```
124
-
125
- ### Core Extensions
126
-
127
- **Note:** Core extensions are **not** included by default. You must require the `chef/sugar/core_extensions` module manually to gain access to these APIs:
128
-
129
- ```ruby
130
- require 'chef/sugar/core_extensions'
131
- ```
132
-
133
- - `String#satisfies?`
134
- - `String#satisfied_by?`
135
- - `Array#satisfied_by?`
136
- - `Object#blank?`
137
-
138
- #### Examples
139
-
140
- ```ruby
141
- # Checking version constraints
142
- '1.0.0'.satisfies?('~> 1.0') #=> true
143
- '~> 1.0'.satisfied_by?('1.0') #=> true
144
- ```
145
-
146
- ```ruby
147
- # Check for an object's presence
148
- ''.blank? #=> true
149
- ['hello'].blank? #=> false
150
- ```
151
-
152
- ### Data Bag
153
-
154
- - `encrypted_data_bag_item` - a handy DSL method for loading encrypted data bag items the same way you load a regular data bag item; this requires `Chef::Config[:encrypted_data_bag_secret]` is set!
155
- - `encrypted_data_bag_item_for_environment` - find the encrypted data bag entry for the current node's Chef environment.
156
- - `data_bag_item_for_environment` - find the data bag entry for the current node's Chef environment.
157
-
158
- #### Examples
159
-
160
- ```ruby
161
- encrypted_data_bag_item('accounts', 'hipchat')
162
- ```
163
-
164
- ```ruby
165
- encrypted_data_bag_item_for_environment('accounts', 'github')
166
- ```
167
-
168
- ```ruby
169
- data_bag_item_for_environment('accounts', 'github')
170
- ```
171
-
172
- ### Docker
173
-
174
- Chef Sugar looks for hints to see if the node being converged is a Docker container. When [Ohai supports checking other nodes](https://github.com/opscode/ohai/pull/428), Chef Sugar will automatically pick up the information.
175
-
176
- - `docker?`
177
-
178
- #### Examples
179
-
180
- ```ruby
181
- template '/runme' do
182
- only_if { docker?(node) }
183
- end
184
- ```
185
-
186
- ### Attributes
187
-
188
- Chef Sugar adds more Chef-like DSL to attribute definitions. Instead of using the Ruby hash syntax, you can define attributes using nested namespaces. This DSL may be more friendly to non-Ruby developers. It can safely be mixed-and-matched with the standard syntax.
189
-
190
- ```ruby
191
- # This is functionally the same as default['apache2']['config']['root'] = '/var/www'
192
- namespace 'apache2' do
193
- namespace 'config' do
194
- root '/var/www'
195
- end
196
- end
197
- ```
198
-
199
- ```ruby
200
- # Specify multiple keys instead of nesting namespaces
201
- namespace 'apache2', 'config' do
202
- root '/var/www'
203
- end
204
- ```
205
-
206
- ```ruby
207
- # Specify different nested precedence levels
208
- namespace 'apache2', precedence: normal do
209
- namespace 'config', precedence: override do
210
- root '/var/www' #=> override['apache2']['config']['root'] = '/var/www'
211
- end
212
- end
213
- ```
214
-
215
- ### Constraints
216
-
217
- - `constraints` - create a new constraint (or requirement) that can be used to test version validations.
218
- - `chef_version` - (DSL only) a wrapper for `version(Chef::VERSION)`
219
- - `version` - create a new version that can be used to test constraint validation.
220
-
221
- #### Examples
222
-
223
- ```ruby
224
- # Check if a version is satisfied by a constraint
225
- version('1.2.3').satisfies?('~> 1.2.0')
226
- ```
227
-
228
- ```ruby
229
- # Check if a constraint is satisfied by a version
230
- constraint('~> 1.2.0').satisfied_by?('1.2.3')
231
- ```
232
-
233
- ```ruby
234
- # Support multiple constraints
235
- version('1.2.3').satisfies?('> 1.2', '< 2.0')
236
- constraint('> 1.2', '< 2.0').satisfied_by?('1.2.3')
237
- ```
238
-
239
- ```ruby
240
- # Only perform an operation if Chef is at a certain version
241
- package 'apache2' do
242
- not_if { chef_version.satisfies?('~> 11.0') } # Ignore Chef 11
243
- end
244
- ```
245
-
246
- ### Kernel
247
-
248
- - `require_chef_gem` - "safely" require a gem. Loading a gem with Chef is sometimes difficult and confusing. The errors that Chef produces are also sometimes not very intuitive. In the event you require a gem to exist on the system, you can use `require_chef_gem`, which will attempt to require the gem and then produce helpful output if the gem is not installed:
249
-
250
- ```
251
- Chef could not load the gem `#{name}'! You may need to install the gem
252
- manually with `gem install #{name}', or include a recipe before you can
253
- use this resource. Please consult the documentation for this cookbook
254
- for proper usage.
255
- ```
256
-
257
- #### Examples
258
-
259
- ```ruby
260
- # LWRP
261
- require_chef_gem 'pry'
262
- ```
263
-
264
- ```ruby
265
- class Chef
266
- class Provider
267
- class MyProvider > Provider
268
- require_chef_gem 'pry'
269
- end
270
- end
271
- end
272
- ```
273
-
274
- ### Init
275
-
276
- - `systemd?` - detect if init system is systemd
277
- - `upstart?` - detect if init system is upstart
278
- - `runit?` - detect if init system is runit
279
-
280
- #### Examples
281
-
282
- ```ruby
283
- systemd_service 'my-service' do
284
- description 'My Service'
285
- install do
286
- wanted_by 'multi-user.target'
287
- end
288
- service do
289
- exec_start '/usr/bin/myserviced'
290
- end
291
- action [:create, :enable, :start]
292
- only_if { systemd? }
293
- end
294
-
295
- cookbook_file '/etc/init/my-service.conf' do
296
- source 'my-service.conf'
297
- only_if { upstart? }
298
- end
299
- ```
300
-
301
- ### IP
302
-
303
- - `best_ip_for` - determine the best IP address for the given "other" node, preferring local IP addresses over public ones.
304
-
305
- #### Examples
306
-
307
- ```ruby
308
- redis = search('node', 'role:redis').first
309
-
310
- template '/tmp/config' do
311
- variables(
312
- ipaddress: best_ip_for(redis)
313
- )
314
- end
315
- ```
316
-
317
- ### Node
318
-
319
- Additional methods for the `node` object
320
-
321
- - `deep_fetch` - safely fetch a nested attribute.
322
- - `deep_fetch!` - fetch a nested attribute, raising a more semantic error if the key does not exist.
323
- - `in?` - determine if the node is in the given Chef environment.
324
-
325
- #### Examples
326
-
327
- ```ruby
328
- credentials = if node.in?('production')
329
- Chef::EncryptedDataBag.new('...')
330
- else
331
- data_bag('...')
332
- end
333
- ```
334
-
335
- ```ruby
336
- node.deep_fetch('apache2', 'config', 'root') => node['apache2']['config']['root']
337
- ```
338
-
339
- ### Platform
340
-
341
- - `amazon_linux?`
342
- - `centos?`
343
- - `linux_mint?`
344
- - `oracle_linux?`
345
- - `redhat_enterprise_linux?`
346
- - `scientific_linux?`
347
- - `ubuntu?`
348
- - `solaris2?`
349
- - `aix?`
350
- - `smartos?`
351
- - `omnios?`
352
- - `raspbian?`
353
- - `nexus?`
354
- - `ios_xr?`
355
-
356
- There are also a series of dynamically defined matchers that map named operating system release versions and comparison operators in the form "#{platform}_#{operator}_#{name}?". For example:
357
-
358
- - `debian_after_squeeze?`
359
- - `linuxmint_after_or_at_olivia?`
360
- - `mac_os_x_lion?`
361
- - `centos_final?`
362
- - `ubuntu_before_lucid?`
363
- - `ubuntu_before_or_at_maverick?`
364
- - `solaris_10?`
365
- - `solaris_11?`
366
-
367
- To get a full list, run the following in IRB:
368
-
369
- ```ruby
370
- require 'chef/sugar'
371
- puts Chef::Sugar::Platform.instance_methods
372
- ```
373
-
374
- #### Examples
375
-
376
- ```ruby
377
- if ubuntu?
378
- execute 'apt-get update'
379
- end
380
- ```
381
-
382
- ### Platform Family
383
-
384
- - `arch_linux?`
385
- - `debian?`
386
- - `fedora?`
387
- - `freebsd?`
388
- - `gentoo?`
389
- - `linux?`
390
- - `mac_os_x?`
391
- - `openbsd?`
392
- - `rhel?`
393
- - `slackware?`
394
- - `suse?`
395
- - `windows?`
396
- - `wrlinux?`
397
-
398
- #### Examples
399
-
400
- ```ruby
401
- node['attribute'] = if windows?
402
- 'C:\Foo\BarDrive'
403
- else
404
- '/foo/bar_drive'
405
- end
406
- ```
407
-
408
- ### Ruby
409
-
410
- **Note:** The applies to the Ruby found at `node['languages']['ruby']`.
411
-
412
- - `ruby_20?`
413
- - `ruby_19?`
414
-
415
- #### Examples
416
-
417
- ```ruby
418
- log 'This has been known to fail on Ruby 2.0' if ruby_20?
419
- ```
420
-
421
- ### Run Context
422
-
423
- - `includes_recipe?` - determines if the current run context includes the recipe
424
-
425
- ```ruby
426
- if includes_recipe?('apache2::default')
427
- apache_module 'my_module' do
428
- # ...
429
- end
430
- end
431
- ```
432
-
433
- ### Shell
434
-
435
- - `which`
436
- - `dev_null`
437
- - `installed?`
438
- - `installed_at_version?`
439
- - `version_for`
440
-
441
- #### Examples
442
-
443
- ```ruby
444
- log "Using `mongo` at `#{which('mongo')}`"
445
-
446
- if installed?('apt')
447
- execute 'apt-get update'
448
- end
449
-
450
- execute 'install[thing]' do
451
- command "... 2>&1 #{dev_null}"
452
- not_if { installed_at_version?('thing', node['thing']['version']) }
453
- end
454
-
455
- log "Skipping git install, version is at #{version_for('mongo', '-v')}"
456
- ```
457
-
458
- ### Vagrant
459
-
460
- - `vagrant?`
461
-
462
- #### Examples
463
-
464
- ```ruby
465
- http_request 'http://...' do
466
- not_if { vagrant? }
467
- end
468
- ```
469
-
470
- ### Virtualization
471
-
472
- - `kvm?`
473
- - `lxc?`
474
- - `parallels?`
475
- - `virtualbox?`
476
- - `vmware?`
477
- - `openvz?`
478
-
479
- #### Examples
480
-
481
- ```ruby
482
- service 'ntpd' do
483
- action [:enable, :start]
484
- not_if { lxc? }
485
- end
486
- ```
487
-
488
- ### Filters
489
-
490
- - `at_compile_time` - accepts a block of resources to run at compile time
491
- - `before` - insert resource in the collection before the given resource
492
- - `after` - insert resource in the collection after the given resource
493
-
494
- #### Examples
495
-
496
- ```ruby
497
- at_compile_time do
498
- package 'apache2'
499
- end
500
-
501
- # This is equivalent to
502
- package 'apache2' do
503
- action :nothing
504
- end.run_action(:install)
505
- ```
506
-
507
- ```ruby
508
- before 'service[apache2]' do
509
- log 'I am before the apache 2 service fires!'
510
- end
511
- ```
512
-
513
- ```ruby
514
- after 'service[apache2]' do
515
- log 'I am after the apache 2 service fires!'
516
- end
517
- ```
518
-
519
- ## License & Authors
520
-
521
- - Author: Seth Vargo (sethvargo@gmail.com)
522
-
523
- ```text
524
- Copyright 2013-2015 Seth Vargo
525
-
526
- Licensed under the Apache License, Version 2.0 (the "License");
527
- you may not use this file except in compliance with the License.
528
- You may obtain a copy of the License at
529
-
530
- http://www.apache.org/licenses/LICENSE-2.0
531
-
532
- Unless required by applicable law or agreed to in writing, software
533
- distributed under the License is distributed on an "AS IS" BASIS,
534
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
535
- See the License for the specific language governing permissions and
536
- limitations under the License.
537
- ```
538
-
539
- [gem]: https://rubygems.org/gems/chef-sugar
540
- [travis]: http://travis-ci.org/sethvargo/chef-sugar