chef-resolver 0.10.0 → 0.11.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.
data/bin/chef-resolver CHANGED
@@ -25,6 +25,7 @@ if ARGV[0] == 'install'
25
25
  # # Access with role.config_name.chef
26
26
  # config_name:
27
27
  # knife_file: /full/path/to/knife.rb
28
+ # search_extra: 'role:production' # optional
28
29
  # env: # optional
29
30
  # CHEF_ENV: production
30
31
  DEFAULT_CONFIG
@@ -1,5 +1,5 @@
1
1
  class Chef
2
2
  module Resolver
3
- VERSION = "0.10.0"
3
+ VERSION = "0.11.0"
4
4
  end
5
5
  end
@@ -96,7 +96,15 @@ class Chef
96
96
  load_chef_config config
97
97
 
98
98
  puts "\tLooking up role #{role}..."
99
- nodes = Chef::Search::Query.new.search('node', "role:#{role}")[0]
99
+
100
+ # Build search string
101
+ search = "role:#{role}"
102
+ if config.key?('search_extra')
103
+ search = "(#{config['search_extra']}) AND #{search}"
104
+ end
105
+
106
+ # Find the nodes
107
+ nodes = Chef::Search::Query.new.search('node', search)[0]
100
108
  if index >= nodes.length
101
109
  puts "\tIndex beyond bounds: #{index} vs #{nodes.length}"
102
110
  return nil
@@ -14,10 +14,10 @@ describe Chef::ResolverServer do
14
14
  @server = nil
15
15
  end
16
16
 
17
- def stub_search role, nodes
17
+ def stub_search search, nodes
18
18
  query = double('Chef::Search::Query')
19
19
  nodes.each_with_index {|n, i| n['name'] = "node #{i}" }
20
- query.should_receive(:search).with('node', "role:#{role}").and_return([nodes, 0, nodes.length])
20
+ query.should_receive(:search).with('node', search).and_return([nodes, 0, nodes.length])
21
21
  Chef::Search::Query.should_receive(:new) { query }
22
22
  end
23
23
 
@@ -45,6 +45,7 @@ describe Chef::ResolverServer do
45
45
  @default_config = Chef::Config.configuration
46
46
  @test_config = {'knife_file' => File.dirname(__FILE__)+'/files/test_knife.rb'}
47
47
  @test2_config = {'knife_file' => File.dirname(__FILE__)+'/files/test2_knife.rb', 'env' => {'ENV_PROP' => 'test2'}}
48
+ @test3_config = {'knife_file' => File.dirname(__FILE__)+'/files/test_knife.rb', 'search_extra' => 'role:staging'}
48
49
  end
49
50
 
50
51
  after :each do
@@ -84,14 +85,21 @@ describe Chef::ResolverServer do
84
85
  it "should resolve a name like ROLE.CONFIG.chef" do
85
86
  new_server 'test' => @test_config, 'test2' => @test2_config
86
87
  @server.start
87
- stub_search 'test_role', [{'ipaddress' => '1.1.1.1'}]
88
+ stub_search 'role:test_role', [{'ipaddress' => '1.1.1.1'}]
88
89
  getaddress('test_role.test2.chef').should == '1.1.1.1'
89
90
  end
90
91
 
92
+ it "should use the search_extra if given for lookups" do
93
+ new_server 'test3' => @test3_config
94
+ @server.start
95
+ stub_search '(role:staging) AND role:test_role', [{'ipaddress' => '1.1.1.1'}]
96
+ getaddress('test_role.test3.chef').should == '1.1.1.1'
97
+ end
98
+
91
99
  it "should resolve a name like ROLE-INDEX.CONFIG.chef" do
92
100
  new_server 'test' => @test_config
93
101
  @server.start
94
- stub_search 'test_role', [{'ipaddress' => '1.1.1.1'}, {'ipaddress' => '2.2.2.2'}, {'ipaddress' => '3.3.3.3'}, {'ipaddress' => '4.4.4.4'}]
102
+ stub_search 'role:test_role', [{'ipaddress' => '1.1.1.1'}, {'ipaddress' => '2.2.2.2'}, {'ipaddress' => '3.3.3.3'}, {'ipaddress' => '4.4.4.4'}]
95
103
  getaddress('test_role-3.test.chef').should == '3.3.3.3'
96
104
  end
97
105
 
@@ -105,7 +113,7 @@ describe Chef::ResolverServer do
105
113
  # Should succeed with one config
106
114
  new_server 'test' => @test_config
107
115
  @server.start
108
- stub_search 'test_role', [{'ipaddress' => '1.1.1.1'}]
116
+ stub_search 'role:test_role', [{'ipaddress' => '1.1.1.1'}]
109
117
  getaddress('test_role.chef').should == '1.1.1.1'
110
118
  end
111
119
 
@@ -118,7 +126,7 @@ describe Chef::ResolverServer do
118
126
  it "should resolve ec2 node public ip addresses properly" do
119
127
  new_server 'test' => @test_config
120
128
  @server.start
121
- stub_search 'test_role', [{'ec2' => {'public_ipv4' => '1.1.1.1'}, 'ipaddress' => '0.0.0.0'}]
129
+ stub_search 'role:test_role', [{'ec2' => {'public_ipv4' => '1.1.1.1'}, 'ipaddress' => '0.0.0.0'}]
122
130
  getaddress('test_role.chef').should == '1.1.1.1'
123
131
  end
124
132
 
@@ -127,7 +135,7 @@ describe Chef::ResolverServer do
127
135
  File.open(path, 'w') {|f| f.write({'test' => @test_config}.to_yaml)}
128
136
  new_server path
129
137
  @server.start
130
- stub_search 'test_role', [{'ipaddress' => '1.1.1.1'}]
138
+ stub_search 'role:test_role', [{'ipaddress' => '1.1.1.1'}]
131
139
  getaddress('test_role.chef').should == '1.1.1.1'
132
140
  end
133
141
 
@@ -142,7 +150,7 @@ describe Chef::ResolverServer do
142
150
  sleep 2
143
151
 
144
152
  expect { getaddress('test_role.test.chef') }.to raise_error(Resolv::ResolvError)
145
- stub_search 'test_role', [{'ipaddress' => '1.1.1.1'}]
153
+ stub_search 'role:test_role', [{'ipaddress' => '1.1.1.1'}]
146
154
  getaddress('test_role.test2.chef').should == '1.1.1.1'
147
155
  end
148
156
 
@@ -154,7 +162,7 @@ describe Chef::ResolverServer do
154
162
  new_server config_path, true
155
163
  @server.start
156
164
 
157
- stub_search 'test_role', [{'ipaddress' => '1.1.1.1'}]
165
+ stub_search 'role:test_role', [{'ipaddress' => '1.1.1.1'}]
158
166
  getaddress('test_role.changing.chef').should == '1.1.1.1'
159
167
  Chef::Config.test_prop.should == true
160
168
 
@@ -162,7 +170,7 @@ describe Chef::ResolverServer do
162
170
  File.open(knife_path, 'w') {|f| f.write("test_prop false\n")}
163
171
  sleep 2
164
172
 
165
- stub_search 'test_role', [{'ipaddress' => '1.1.1.1'}]
173
+ stub_search 'role:test_role', [{'ipaddress' => '1.1.1.1'}]
166
174
  getaddress('test_role.changing.chef').should == '1.1.1.1'
167
175
  Chef::Config.test_prop.should == false
168
176
  end
metadata CHANGED
@@ -1,45 +1,40 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: chef-resolver
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 10
8
- - 0
9
- version: 0.10.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.11.0
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - Stephen Augenstein
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2013-09-06 00:00:00 -04:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- type: :runtime
22
- version_requirements: &id001 !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ~>
25
- - !ruby/object:Gem::Version
26
- segments:
27
- - 11
28
- - 6
29
- version: "11.6"
12
+ date: 2014-03-30 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
30
15
  name: chef
31
- requirement: *id001
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '11.6'
22
+ type: :runtime
32
23
  prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '11.6'
33
30
  description: A DNS resolver for Mac OS X that does role queries to resolve hostnames
34
- email:
31
+ email:
35
32
  - perl.programmer@gmail.com
36
- executables:
33
+ executables:
37
34
  - chef-resolver
38
35
  extensions: []
39
-
40
36
  extra_rdoc_files: []
41
-
42
- files:
37
+ files:
43
38
  - .gitignore
44
39
  - Gemfile
45
40
  - LICENSE.txt
@@ -54,37 +49,38 @@ files:
54
49
  - spec/files/test_knife.rb
55
50
  - spec/resolver_server_spec.rb
56
51
  - spec/spec_helper.rb
57
- has_rdoc: true
58
52
  homepage: https://github.com/warhammerkid/chef-resolver
59
53
  licenses: []
60
-
61
54
  post_install_message:
62
55
  rdoc_options: []
63
-
64
- require_paths:
56
+ require_paths:
65
57
  - lib
66
- required_ruby_version: !ruby/object:Gem::Requirement
67
- requirements:
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- segments:
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ none: false
60
+ requirements:
61
+ - - ! '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ segments:
71
65
  - 0
72
- version: "0"
73
- required_rubygems_version: !ruby/object:Gem::Requirement
74
- requirements:
75
- - - ">="
76
- - !ruby/object:Gem::Version
77
- segments:
66
+ hash: 160828053575409919
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ! '>='
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ segments:
78
74
  - 0
79
- version: "0"
75
+ hash: 160828053575409919
80
76
  requirements: []
81
-
82
77
  rubyforge_project:
83
- rubygems_version: 1.3.6
78
+ rubygems_version: 1.8.23
84
79
  signing_key:
85
80
  specification_version: 3
86
- summary: Instead of doing knife search node role every time you want to look up a server, simply ssh into ROLE_NAME-##.chef
87
- test_files:
81
+ summary: Instead of doing knife search node role every time you want to look up a
82
+ server, simply ssh into ROLE_NAME-##.chef
83
+ test_files:
88
84
  - spec/files/test2_knife.rb
89
85
  - spec/files/test_knife.rb
90
86
  - spec/resolver_server_spec.rb