chef-sugar 1.0.0 → 1.0.1
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/.kitchen.yml +3 -1
- data/.travis.yml +1 -1
- data/CHANGELOG.md +8 -2
- data/README.md +30 -0
- data/lib/chef/sugar.rb +1 -0
- data/lib/chef/sugar/filters.rb +147 -0
- data/lib/chef/sugar/platform_family.rb +11 -0
- data/lib/chef/sugar/version.rb +1 -1
- data/metadata.rb +1 -1
- data/recipes/default.rb +1 -1
- data/recipes/development.rb +65 -0
- data/spec/unit/chef/extensions/platform_family_spec.rb +12 -0
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 75de0550f84f3b8ef3b94926f60c2b3a7a757c02
|
4
|
+
data.tar.gz: 081a7e696179a33958fe4a38cf7022da9c8c0d0b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f506eb432d8a39cfdea1b709fe760c9994887655503cb2e539bc1ffe5e299d49513a4a0f3928b1ac02e8c42e453726979df4f76d4c2f3c2f69a9d5b663fc337d
|
7
|
+
data.tar.gz: d6e52403bf24e0a37b61432373b455806d563004773a757fc2d61eff4103e4dbe89796ede0c3d67eea01ab332cdf63d64f25f9c429ea367f6367ec9bb8294983
|
data/.kitchen.yml
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
driver_plugin: vagrant
|
2
2
|
driver_config:
|
3
3
|
require_chef_omnibus: true
|
4
|
+
synced_folders:
|
5
|
+
- ['<%= File.expand_path('..', __FILE__) %>', '/gem']
|
4
6
|
|
5
7
|
platforms:
|
6
8
|
# - name: ubuntu-10.04
|
@@ -11,4 +13,4 @@ platforms:
|
|
11
13
|
suites:
|
12
14
|
- name: install
|
13
15
|
run_list:
|
14
|
-
- recipe[chef-sugar::
|
16
|
+
- recipe[chef-sugar::development]
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,12 @@ Chef Sugar Changelog
|
|
2
2
|
=========================
|
3
3
|
This file is used to list changes made in each version of the chef-sugar cookbook and gem.
|
4
4
|
|
5
|
-
|
6
|
-
|
5
|
+
|
6
|
+
v1.0.1 (2013-10-15)
|
7
|
+
-------------------
|
8
|
+
- Add development recipe
|
9
|
+
- Add `compile_time`, `before`, and `after` filters
|
10
|
+
|
11
|
+
v1.0.0 (2013-10-15)
|
12
|
+
-------------------
|
7
13
|
- First public release
|
data/README.md
CHANGED
@@ -175,6 +175,7 @@ end
|
|
175
175
|
- `arch_linux?`
|
176
176
|
- `debian?`
|
177
177
|
- `fedora?`
|
178
|
+
- `freebsd?`
|
178
179
|
- `gentoo?`
|
179
180
|
- `linux?`
|
180
181
|
- `mac_os_x?`
|
@@ -237,6 +238,35 @@ http_request 'http://...' do
|
|
237
238
|
end
|
238
239
|
```
|
239
240
|
|
241
|
+
### Filters
|
242
|
+
- `compile_time` - accepts a block of resources to run at compile time
|
243
|
+
- `before` - insert resource in the collection before the given resource
|
244
|
+
- `after` - insert resource in the collection after the given resource
|
245
|
+
|
246
|
+
#### Examples
|
247
|
+
```ruby
|
248
|
+
compile_time do
|
249
|
+
package 'apache2'
|
250
|
+
end
|
251
|
+
|
252
|
+
# This is equivalent to
|
253
|
+
package 'apache2' do
|
254
|
+
'apache2'
|
255
|
+
end.run_action(:install)
|
256
|
+
```
|
257
|
+
|
258
|
+
```ruby
|
259
|
+
before 'service[apache2]' do
|
260
|
+
log 'I am before the apache 2 service fires!'
|
261
|
+
end
|
262
|
+
```
|
263
|
+
|
264
|
+
```ruby
|
265
|
+
after 'service[apache2]' do
|
266
|
+
log 'I am after the apache 2 service fires!'
|
267
|
+
end
|
268
|
+
```
|
269
|
+
|
240
270
|
|
241
271
|
License & Authors
|
242
272
|
-----------------
|
data/lib/chef/sugar.rb
CHANGED
@@ -0,0 +1,147 @@
|
|
1
|
+
class Chef
|
2
|
+
module Sugar
|
3
|
+
module Filters
|
4
|
+
#
|
5
|
+
# Evaluate resources at compile time instead of converge time.
|
6
|
+
#
|
7
|
+
class CompileTime
|
8
|
+
def initialize(recipe)
|
9
|
+
@recipe = recipe
|
10
|
+
end
|
11
|
+
|
12
|
+
def evaluate(&block)
|
13
|
+
instance_eval(&block)
|
14
|
+
end
|
15
|
+
|
16
|
+
def method_missing(m, *args, &block)
|
17
|
+
resource = @recipe.send(m, *args, &block)
|
18
|
+
actions = Array(resource.action)
|
19
|
+
resource.action(:nothing)
|
20
|
+
actions.each do |action|
|
21
|
+
resource.run_action(action)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
#
|
27
|
+
# A top-level class for manipulation the resource collection.
|
28
|
+
#
|
29
|
+
class Injector
|
30
|
+
def initialize(recipe, identifier, placement)
|
31
|
+
@recipe = recipe
|
32
|
+
@resource_collection = @recipe.run_context.resource_collection
|
33
|
+
@resource = @resource_collection.lookup(identifier)
|
34
|
+
@placement = placement
|
35
|
+
end
|
36
|
+
|
37
|
+
def evaluate(&block)
|
38
|
+
instance_eval(&block)
|
39
|
+
end
|
40
|
+
|
41
|
+
def insert_before(resource, new_resource)
|
42
|
+
@resource_collection.instance_eval do
|
43
|
+
# Remove the resource because it's automatically created
|
44
|
+
@resources.delete_at(@resources_by_name[new_resource.to_s])
|
45
|
+
@resources_by_name.delete(new_resource.to_s)
|
46
|
+
|
47
|
+
index = @resources_by_name[resource.to_s]
|
48
|
+
@resources.insert(index, new_resource)
|
49
|
+
@resources_by_name[new_resource.to_s] = index
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def insert_after(resource, new_resource)
|
54
|
+
@resource_collection.instance_eval do
|
55
|
+
# Remove the resource because it's automatically created
|
56
|
+
@resources.delete_at(@resources_by_name[new_resource.to_s])
|
57
|
+
@resources_by_name.delete(new_resource.to_s)
|
58
|
+
|
59
|
+
index = @resources_by_name[resource.to_s] + 2
|
60
|
+
@resources.insert(index, new_resource)
|
61
|
+
@resources_by_name[new_resource.to_s] = index
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def method_missing(m, *args, &block)
|
66
|
+
new_resource = @recipe.send(m, *args, &block)
|
67
|
+
|
68
|
+
case @placement
|
69
|
+
when :before
|
70
|
+
insert_before(@resource, new_resource)
|
71
|
+
when :after
|
72
|
+
insert_after(@resource, new_resource)
|
73
|
+
else
|
74
|
+
super
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
module DSL
|
81
|
+
#
|
82
|
+
# Dynamically run resources specified in the block during the compilation
|
83
|
+
# phase, instead of the convergence phase.
|
84
|
+
#
|
85
|
+
# @example The old way
|
86
|
+
# package('apache2') do
|
87
|
+
# action :nothing
|
88
|
+
# end.run_action(:install)
|
89
|
+
#
|
90
|
+
# @example The new way
|
91
|
+
# compile_time do
|
92
|
+
# package('apache2')
|
93
|
+
# end
|
94
|
+
#
|
95
|
+
# @example Resource actions are run in order
|
96
|
+
# compile_time do
|
97
|
+
# service 'apache2' do
|
98
|
+
# action [:enable, :start] # run_action(:enable), run_action(:start)
|
99
|
+
# end
|
100
|
+
# end
|
101
|
+
#
|
102
|
+
def compile_time(&block)
|
103
|
+
Chef::Sugar::Filters::CompileTime.new(self).evaluate(&block)
|
104
|
+
end
|
105
|
+
|
106
|
+
#
|
107
|
+
# Dynamically insert resources before an existing resource in the
|
108
|
+
# resource_collection.
|
109
|
+
#
|
110
|
+
# @example Write a custom template before the apache2 service actions
|
111
|
+
# are run
|
112
|
+
# before 'service[apache2]' do
|
113
|
+
# template '/etc/apache2/thing.conf' do
|
114
|
+
# source '...'
|
115
|
+
# end
|
116
|
+
# end
|
117
|
+
#
|
118
|
+
#
|
119
|
+
# @param [String] identifier
|
120
|
+
# the +resource[name]+ identifier string
|
121
|
+
#
|
122
|
+
def before(identifier, &block)
|
123
|
+
Chef::Sugar::Filters::Injector.new(self, identifier, :before).evaluate(&block)
|
124
|
+
end
|
125
|
+
|
126
|
+
#
|
127
|
+
# Dynamically insert resources after an existing resource in the
|
128
|
+
# resource_collection.
|
129
|
+
#
|
130
|
+
# @example Write a custom template after the apache2 service actions
|
131
|
+
# are run
|
132
|
+
# after 'service[apache2]' do
|
133
|
+
# template '/etc/apache2/thing.conf' do
|
134
|
+
# source '...'
|
135
|
+
# end
|
136
|
+
# end
|
137
|
+
#
|
138
|
+
#
|
139
|
+
# @param [String] identifier
|
140
|
+
# the +resource[name]+ identifier string
|
141
|
+
#
|
142
|
+
def after(identifier, &block)
|
143
|
+
Chef::Sugar::Filters::Injector.new(self, identifier, :after).evaluate(&block)
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
@@ -53,6 +53,17 @@ class Chef
|
|
53
53
|
node['platform_family'] == 'fedora'
|
54
54
|
end
|
55
55
|
|
56
|
+
#
|
57
|
+
# Determine if the current node is a member of the freebsd family.
|
58
|
+
#
|
59
|
+
# @param [Chef::Node] node
|
60
|
+
#
|
61
|
+
# @return [Boolean]
|
62
|
+
#
|
63
|
+
def freebsd?(node)
|
64
|
+
node['platform_family'] == 'freebsd'
|
65
|
+
end
|
66
|
+
|
56
67
|
#
|
57
68
|
# Determine if the current node is a member of the arch family.
|
58
69
|
#
|
data/lib/chef/sugar/version.rb
CHANGED
data/metadata.rb
CHANGED
data/recipes/default.rb
CHANGED
@@ -0,0 +1,65 @@
|
|
1
|
+
#
|
2
|
+
# Cookbook Name:: chef-sugar
|
3
|
+
# Recipe:: development
|
4
|
+
#
|
5
|
+
# Copyright 2013, Seth Vargo <sethvargo@gmail.com>
|
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
|
+
|
20
|
+
#
|
21
|
+
# This recipe is only meant for use when developing Chef Sugar.
|
22
|
+
#
|
23
|
+
|
24
|
+
execute('apt-get update') do
|
25
|
+
only_if { Time.now.to_i - 86400 > `stat -c %Y /var/cache/apt/`.to_i }
|
26
|
+
end.run_action(:run)
|
27
|
+
|
28
|
+
[
|
29
|
+
'build-essential',
|
30
|
+
'libxslt-dev',
|
31
|
+
'libxml2-dev',
|
32
|
+
'git'
|
33
|
+
].each do |name|
|
34
|
+
package(name) do
|
35
|
+
action :nothing
|
36
|
+
end.run_action(:install)
|
37
|
+
end
|
38
|
+
|
39
|
+
execute('gem update bundler') do
|
40
|
+
action :nothing
|
41
|
+
not_if { `bundle -v`.strip.gsub(/[^0-9\.]/, '').to_f >= 1.3 }
|
42
|
+
end.run_action(:run)
|
43
|
+
|
44
|
+
execute 'bundle[chef-sugar]' do
|
45
|
+
cwd '/gem'
|
46
|
+
command 'bundle install --path vendor'
|
47
|
+
not_if 'bundle check --gemfile /gem/Gemfile'
|
48
|
+
action :nothing
|
49
|
+
end.run_action(:run)
|
50
|
+
|
51
|
+
execute 'build[chef-sugar]' do
|
52
|
+
cwd '/gem'
|
53
|
+
command 'bundle exec rake build'
|
54
|
+
action :nothing
|
55
|
+
end.run_action(:run)
|
56
|
+
|
57
|
+
sugar = chef_gem('chef-sugar') do
|
58
|
+
source '/gem/pkg/chef-sugar-1.0.0.gem'
|
59
|
+
action :nothing
|
60
|
+
end
|
61
|
+
|
62
|
+
sugar.run_action(:remove)
|
63
|
+
sugar.run_action(:install)
|
64
|
+
|
65
|
+
require 'chef/sugar'
|
@@ -39,6 +39,18 @@ describe Chef::Sugar::PlatformFamily do
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
+
describe '#freebsd?' do
|
43
|
+
it 'returns true when the platform_family is freebsd' do
|
44
|
+
node = { 'platform_family' => 'freebsd' }
|
45
|
+
expect(described_class.freebsd?(node)).to be_true
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'returns false when the platform_family is not freebsd' do
|
49
|
+
node = { 'platform_family' => 'windows' }
|
50
|
+
expect(described_class.freebsd?(node)).to be_false
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
42
54
|
describe '#gentoo?' do
|
43
55
|
it 'returns true when the platform_family is gentoo' do
|
44
56
|
node = { 'platform_family' => 'gentoo' }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chef-sugar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Seth Vargo
|
@@ -144,6 +144,7 @@ files:
|
|
144
144
|
- lib/chef/sugar.rb
|
145
145
|
- lib/chef/sugar/architecture.rb
|
146
146
|
- lib/chef/sugar/cloud.rb
|
147
|
+
- lib/chef/sugar/filters.rb
|
147
148
|
- lib/chef/sugar/ip.rb
|
148
149
|
- lib/chef/sugar/node.rb
|
149
150
|
- lib/chef/sugar/platform.rb
|
@@ -154,6 +155,7 @@ files:
|
|
154
155
|
- lib/chef/sugar/version.rb
|
155
156
|
- metadata.rb
|
156
157
|
- recipes/default.rb
|
158
|
+
- recipes/development.rb
|
157
159
|
- spec/spec_helper.rb
|
158
160
|
- spec/support/shared_examples.rb
|
159
161
|
- spec/unit/chef/extensions/architecture_spec.rb
|