chef-helpers 0.0.6 → 0.0.7

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.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MjNkNmNmOWZmMGEzN2UyNmJlMDE1ZWFlMTEzYmU0YTEzZmNkOTVhYw==
5
+ data.tar.gz: !binary |-
6
+ NWI5MmQxZDRjNmQ0NTc1MjNlMmFmNGQzZDQ5OWE0MWFlZTVlYWQ1Zg==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ ZTVhY2M5MzBkMzFlNjUzM2MxYjFjYzM0ZjY4NzFiNGZiNjY2OTg1NGVlNjg5
10
+ MzRhMTg2MWNhY2JlMDI3NGE4NzUwY2MwYTRiNjJmYTk4MjRkODA4NTU4MDZj
11
+ NTY2NGYzYTNjNDMyZWIyMGFjNDg0NTZjZTk1MzI4Y2I5YWNlZTc=
12
+ data.tar.gz: !binary |-
13
+ MDRlMDhmMmQyOGViNzgzZmRhM2JmODUwZjc0OGE0ZWI5YjU2YmU5MzA5MTBk
14
+ NDg1YjhhYjc0NjhlZDA5MmM2MTJjMzZmOWM5M2ZjMmI2NGUyNDM2MDBhOTNh
15
+ OTVhYTYxZTU0YzAzZDRjNWIyMTAxZWYzM2Y0ODFiY2NhNzczZmU=
data/README.md CHANGED
@@ -4,26 +4,78 @@ This gem includes miscellaneous add-on helper methods for Opscode Chef.
4
4
 
5
5
  ## Installation
6
6
 
7
- To use helper methods in your Chef recipes, add `chef_gem
8
- 'chef-helpers'` and `require 'chef-helpers'` in your recipes.
7
+ To use helper methods in your Chef recipes, use following code in your
8
+ recipe:
9
9
 
10
- To use methods locally in `knife exec` scripts or Knife plugins, add
11
- this line to your application's Gemfile:
10
+ ```ruby
11
+ chef_gem 'chef-helpers'
12
+ require 'chef-helpers'
13
+ ```
12
14
 
13
- gem 'chef-helpers'
15
+ To use the helpers locally in `knife exec` scripts or Knife plugins,
16
+ just add the `chef-helpers` gem to your dependencies and `require 'chef-helpers'`.
14
17
 
15
- And then execute:
18
+ ## Usage
16
19
 
17
- $ bundle
20
+ Detailed documentation of the helper methods can be seen at
21
+ http://rdoc.info/github/3ofcoins/chef-helpers/
18
22
 
19
- Or install it yourself as:
23
+ ### Finding existing templates and cookbook files
20
24
 
21
- $ gem install chef-helpers
25
+ The recipe DSL is extended with `ChefHelpers::HasSource` module that
26
+ provides methods for checking which templates and cookbook files exist
27
+ on the Chef server. Detailed docs are available at
28
+ http://rdoc.info/github/3ofcoins/chef-helpers/ChefHelpers/HasSource
22
29
 
23
- ## Usage
30
+ ### Chef::Node#allies
24
31
 
25
- Detailed documentation of the helper methods can be seen at
26
- http://rdoc.info/github/3ofcoins/chef-helpers/
32
+ The `node.allies` method returns an array of node's *allies*. These
33
+ are: all nodes in the same environment (if the environment is not
34
+ `_default`), plus nodes specified by `allies` attribute. The `allies`
35
+ attribute - if set - should be an array of node names or node search
36
+ queries; the named nodes and search results will be added to node's
37
+ allies.
38
+
39
+ This is mostly useful when defining firewall or other access rules, to
40
+ easily limit access to insides of a cluster plus a handful of friendly
41
+ machines.
42
+
43
+ ### Chef::Node#ip_for
44
+
45
+ The `node.ip_for(other_node)` method decides, which IP address should
46
+ the node use to contact the other node, and returns this IP as a
47
+ string. It is particularly useful when your setup spans across cloud
48
+ availability zones or different providers. At the moment only EC2 and
49
+ nodes with public `ipaddress` are supported; suggestions are welcome.
50
+
51
+ If both nodes are on EC2 and in the same region, then other node's
52
+ `ec2.local_ipv4` attribute is used. Otherwise, if other node is a
53
+ cloud instance, its `cloud_public.ipv4` attribute is used. Otherwise,
54
+ other node's `ipaddress` is used.
55
+
56
+ ### JSONPath access to attributes
57
+
58
+ The `Chef::Node` class is monkey-patched to allow easy deep access to
59
+ the attributes using the
60
+ [JSONPath](http://goessner.net/articles/JsonPath/) syntax:
61
+
62
+ ```
63
+ chef > require 'chef-helpers'
64
+ => true
65
+ chef > node['$..name']
66
+ => ["portinari-2.local", "Java(TM) SE Runtime Environment", "Java HotSpot(TM) 64-Bit Server VM", "Darwin"]
67
+ chef > node['$.kernel.name']
68
+ => ["Darwin"]
69
+ ```
70
+
71
+ Regular access to attributes is preserved; JSONPath is used only when
72
+ the attribute name starts with `$` character, or if a `JSONPath`
73
+ instance is used for indexing.
74
+
75
+ The [jsonpath gem](https://github.com/joshbuddy/jsonpath) is used for
76
+ the implementation. While the original gem allows modification, it's
77
+ not straightforward to achieve with Chef's attributes, so only reading
78
+ attributes with JSONPath is supported.
27
79
 
28
80
  ## Contributing
29
81
 
@@ -16,4 +16,5 @@ Gem::Specification.new do |gem|
16
16
  gem.version = ChefHelpers::VERSION
17
17
 
18
18
  gem.add_dependency "chef"
19
+ gem.add_dependency "jsonpath"
19
20
  end
@@ -67,9 +67,9 @@ module ChefHelpers
67
67
  end
68
68
  sources.find do |source|
69
69
  if source =~ /::/
70
- src, ckbk = $`, $'
70
+ ckbk, src = $`, $'
71
71
  else
72
- src, ckbk = source, cookbook_name
72
+ ckbk, src = cookbook_name, source
73
73
  end
74
74
  has_source?(src, segment, ckbk)
75
75
  end
@@ -1,4 +1,5 @@
1
1
  require 'chef/node'
2
+ require 'jsonpath'
2
3
 
3
4
  class Chef::Node
4
5
 
@@ -7,14 +8,14 @@ class Chef::Node
7
8
  # attribute. The `allies` attribute - if set - should be an array of
8
9
  # node names or node search queries; the named nodes and search
9
10
  # results will be added to node's allies.
10
- #
11
+ #
11
12
  # This is mostly useful when defining firewall or other access
12
13
  # rules, to easily limit access to insides of a cluster plus a
13
14
  # handful of friendly machines.
14
15
  #
15
16
  # @return [Array<Chef::Node>] Array of node's "allies".
16
17
  def allies
17
- @allies ||=
18
+ @allies ||=
18
19
  begin
19
20
  rv = []
20
21
  q = Chef::Search::Query.new
@@ -30,12 +31,12 @@ class Chef::Node
30
31
  end
31
32
 
32
33
  # Find out, which IP should be used to contact with other node.
33
- #
34
+ #
34
35
  # If both nodes are on EC2 and in the same region, then other node's
35
36
  # `ec2.local_ipv4` attribute is used. Otherwise, if other node is a
36
37
  # cloud instance, its `cloud_public.ipv4` attribute is
37
38
  # used. Otherwise, other node's `ipaddress` is used.
38
- #
39
+ #
39
40
  # @note This method may return wrong IP with non-EC2 cloud
40
41
  # providers, and can use some tweaking for such cases.
41
42
  # @param [Chef::Node] other_node Node, whose IP we need to know
@@ -51,4 +52,15 @@ class Chef::Node
51
52
  other_node['ipaddress']
52
53
  end
53
54
  end
55
+
56
+ # jsonpath access to node attributes
57
+ def brackets_with_jsonpath(key)
58
+ case key
59
+ when JsonPath then key.on(self.to_hash)
60
+ when /^\$/ then JsonPath.on(self.to_hash, key)
61
+ else self.brackets_without_jsonpath(key)
62
+ end
63
+ end
64
+ alias_method :brackets_without_jsonpath, :[]
65
+ alias_method :[], :brackets_with_jsonpath
54
66
  end
@@ -1,3 +1,3 @@
1
1
  module ChefHelpers
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-helpers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
5
- prerelease:
4
+ version: 0.0.7
6
5
  platform: ruby
7
6
  authors:
8
7
  - Maciej Pasternacki
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-01-28 00:00:00.000000000 Z
11
+ date: 2013-07-21 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: chef
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ! '>='
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,20 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
23
+ requirements:
24
+ - - ! '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: jsonpath
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
26
37
  requirements:
27
38
  - - ! '>='
28
39
  - !ruby/object:Gem::Version
@@ -47,33 +58,26 @@ files:
47
58
  - lib/chef-helpers/version.rb
48
59
  homepage: https://github.com/3ofcoins/chef-helpers/
49
60
  licenses: []
61
+ metadata: {}
50
62
  post_install_message:
51
63
  rdoc_options: []
52
64
  require_paths:
53
65
  - lib
54
66
  required_ruby_version: !ruby/object:Gem::Requirement
55
- none: false
56
67
  requirements:
57
68
  - - ! '>='
58
69
  - !ruby/object:Gem::Version
59
70
  version: '0'
60
- segments:
61
- - 0
62
- hash: 2272563809326156327
63
71
  required_rubygems_version: !ruby/object:Gem::Requirement
64
- none: false
65
72
  requirements:
66
73
  - - ! '>='
67
74
  - !ruby/object:Gem::Version
68
75
  version: '0'
69
- segments:
70
- - 0
71
- hash: 2272563809326156327
72
76
  requirements: []
73
77
  rubyforge_project:
74
- rubygems_version: 1.8.24
78
+ rubygems_version: 2.0.5
75
79
  signing_key:
76
- specification_version: 3
80
+ specification_version: 4
77
81
  summary: Helper methods for Opscode Chef
78
82
  test_files: []
79
83
  has_rdoc: