knife-block 0.0.8 → 0.0.9
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/Gemfile +3 -1
- data/Rakefile +1 -1
- data/lib/chef/knife/block.rb +72 -20
- data/lib/knife-block/version.rb +1 -1
- metadata +3 -4
data/Gemfile
CHANGED
data/Rakefile
CHANGED
data/lib/chef/knife/block.rb
CHANGED
@@ -11,41 +11,86 @@
|
|
11
11
|
class Chef
|
12
12
|
class Knife
|
13
13
|
def get_config_file
|
14
|
-
|
14
|
+
|
15
|
+
# locate_config_file is only compatible with Chef 11
|
16
|
+
_chef11 = ::Chef::Version.new('11.0.0')
|
17
|
+
if GreenAndSecure.current_chef_version >= _chef11
|
18
|
+
locate_config_file if not config[:config_file]
|
19
|
+
else
|
20
|
+
GreenAndSecure.locate_config_file config
|
21
|
+
end
|
22
|
+
|
15
23
|
File.dirname(config[:config_file])
|
16
24
|
end
|
17
25
|
end
|
18
26
|
end
|
19
27
|
|
20
28
|
module GreenAndSecure
|
29
|
+
@@current_chef_version = ::Chef::Version.new(::Chef::VERSION)
|
21
30
|
@@knife = ::Chef::Knife.new
|
31
|
+
|
32
|
+
def current_chef_version
|
33
|
+
@@current_chef_version
|
34
|
+
end
|
35
|
+
|
22
36
|
def chef_config_base
|
23
37
|
@@knife.get_config_file
|
24
38
|
end
|
25
|
-
|
39
|
+
|
40
|
+
# Copied from chef/knife.rb
|
41
|
+
#
|
42
|
+
# Chef 11 defines `locate_config_file` in its chef/knife.rb but Chef 10
|
43
|
+
# has this snippet of code inlined in chef/knife.rb:configure_chef.
|
44
|
+
def locate_config_file(config)
|
45
|
+
candidate_configs = []
|
46
|
+
|
47
|
+
# Look for $KNIFE_HOME/knife.rb (allow multiple knives config on same machine)
|
48
|
+
if ENV['KNIFE_HOME']
|
49
|
+
candidate_configs << File.join(ENV['KNIFE_HOME'], 'knife.rb')
|
50
|
+
end
|
51
|
+
# Look for $PWD/knife.rb
|
52
|
+
if Dir.pwd
|
53
|
+
candidate_configs << File.join(Dir.pwd, 'knife.rb')
|
54
|
+
end
|
55
|
+
# Look for $UPWARD/.chef/knife.rb
|
56
|
+
if ::Chef::Knife.chef_config_dir
|
57
|
+
candidate_configs << File.join(::Chef::Knife.chef_config_dir, 'knife.rb')
|
58
|
+
end
|
59
|
+
# Look for $HOME/.chef/knife.rb
|
60
|
+
if ENV['HOME']
|
61
|
+
candidate_configs << File.join(ENV['HOME'], '.chef', 'knife.rb')
|
62
|
+
end
|
63
|
+
|
64
|
+
candidate_configs.each do |candidate_config|
|
65
|
+
candidate_config = File.expand_path(candidate_config)
|
66
|
+
if File.exist?(candidate_config)
|
67
|
+
config[:config_file] = candidate_config
|
68
|
+
break
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
26
72
|
|
27
73
|
def check_block_setup
|
28
74
|
base = GreenAndSecure::chef_config_base
|
29
75
|
if File.exists?(base+"/knife.rb") then
|
30
|
-
|
76
|
+
unless File.symlink?(base+"/knife.rb")
|
31
77
|
puts "#{base}/knife.rb is NOT a symlink."
|
32
78
|
puts "Please copy the file to #{base}/knife-<servername>.rb and re-run this command."
|
33
79
|
exit 3
|
34
80
|
end
|
35
81
|
end
|
36
82
|
end
|
37
|
-
module_function :check_block_setup
|
38
83
|
|
39
84
|
def printable_server(server_config)
|
40
85
|
File.basename(server_config, ".rb").split('-')[1 .. -1].join('-')
|
41
86
|
end
|
42
|
-
module_function :printable_server
|
43
87
|
|
44
88
|
# Returns path to berkshelf
|
45
89
|
def berkshelf_path
|
46
90
|
@berkshelf_path ||= ENV['BERKSHELF_PATH'] || File.expand_path('~/.berkshelf')
|
47
91
|
end
|
48
|
-
|
92
|
+
|
93
|
+
extend self
|
49
94
|
|
50
95
|
class Block < Chef::Knife
|
51
96
|
|
@@ -71,20 +116,22 @@ module GreenAndSecure
|
|
71
116
|
banner "knife block list"
|
72
117
|
|
73
118
|
@current_server = nil
|
119
|
+
|
74
120
|
def current_server
|
75
121
|
GreenAndSecure::check_block_setup
|
76
122
|
|
77
123
|
@current_server ||= if File.exists?(GreenAndSecure::chef_config_base+"/knife.rb") then
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
124
|
+
GreenAndSecure::printable_server(File.readlink(GreenAndSecure::chef_config_base+"/knife.rb"))
|
125
|
+
else
|
126
|
+
nil
|
127
|
+
end
|
82
128
|
end
|
83
129
|
|
84
130
|
@servers = []
|
131
|
+
|
85
132
|
def servers
|
86
133
|
## get the list of available environments by searching ~/.chef for knife.rb files
|
87
|
-
@servers ||= Dir.glob(GreenAndSecure::chef_config_base+"/knife-*.rb").sort.map do |
|
134
|
+
@servers ||= Dir.glob(GreenAndSecure::chef_config_base+"/knife-*.rb").sort.map do |fn|
|
88
135
|
GreenAndSecure::printable_server(fn)
|
89
136
|
end
|
90
137
|
end
|
@@ -112,34 +159,39 @@ module GreenAndSecure
|
|
112
159
|
puts "Please specify a server"
|
113
160
|
server_list = GreenAndSecure::BlockList.new
|
114
161
|
server_list.run
|
115
|
-
|
162
|
+
exit 1
|
116
163
|
end
|
164
|
+
|
117
165
|
list = GreenAndSecure::BlockList.new
|
118
166
|
new_server = name_args.first
|
119
167
|
|
120
168
|
base = GreenAndSecure::chef_config_base
|
169
|
+
|
121
170
|
if File.exists?(base+"/knife-#{new_server}.rb")
|
171
|
+
|
122
172
|
if File.exists?(base+"/knife.rb")
|
123
173
|
File.unlink(base+"/knife.rb")
|
124
174
|
end
|
125
|
-
|
126
|
-
|
175
|
+
|
176
|
+
File.symlink(base+"/knife-#{new_server}.rb", base+"/knife.rb")
|
127
177
|
puts "The knife configuration has been updated to use #{new_server}"
|
128
178
|
|
129
179
|
# update berkshelf
|
130
180
|
berks = GreenAndSecure::berkshelf_path+"/config.json"
|
131
181
|
berks_new = GreenAndSecure::berkshelf_path+"/config-#{new_server}.json"
|
132
182
|
if File.exists?(berks_new)
|
183
|
+
|
133
184
|
if File.exists?(berks)
|
134
185
|
File.unlink(berks)
|
135
186
|
end
|
187
|
+
|
136
188
|
File.symlink(berks_new, berks)
|
137
|
-
|
138
|
-
else
|
139
|
-
puts "Berkshelf configuration for #{new_server} not found"
|
140
|
-
end
|
189
|
+
puts "The berkshelf configuration has been updated to use #{new_server}"
|
141
190
|
else
|
142
|
-
puts "
|
191
|
+
puts "Berkshelf configuration for #{new_server} not found"
|
192
|
+
end
|
193
|
+
else
|
194
|
+
puts "Knife configuration for #{new_server} not found, aborting switch"
|
143
195
|
end
|
144
196
|
end
|
145
197
|
end
|
@@ -173,7 +225,7 @@ module GreenAndSecure
|
|
173
225
|
puts "#{GreenAndSecure::chef_config_base}/knife-#{@config_name}.rb has been sucessfully created"
|
174
226
|
GreenAndSecure::BlockList.new.run
|
175
227
|
use = GreenAndSecure::BlockUse.new
|
176
|
-
use.name_args = [
|
228
|
+
use.name_args = [@config_name]
|
177
229
|
use.run
|
178
230
|
end
|
179
231
|
end
|
data/lib/knife-block/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knife-block
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-09-
|
12
|
+
date: 2013-09-25 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Create and manage knife.rb files for OpsCodes' Chef
|
15
15
|
email:
|
@@ -49,10 +49,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
49
49
|
version: '0'
|
50
50
|
requirements: []
|
51
51
|
rubyforge_project:
|
52
|
-
rubygems_version: 1.8.
|
52
|
+
rubygems_version: 1.8.26
|
53
53
|
signing_key:
|
54
54
|
specification_version: 3
|
55
55
|
summary: Create and manage knife.rb files for OpsCodes' Chef
|
56
56
|
test_files:
|
57
57
|
- test/unit/knifeblock_test.rb
|
58
|
-
has_rdoc:
|