knife-pantry 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -4
- data/lib/chef/knife/lookup.rb +40 -39
- data/lib/chef/knife/set.rb +42 -41
- data/lib/knife-pantry/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 48adb3a70f9ab7f7f4c8eb1d2f87a91151fa2ecf
|
4
|
+
data.tar.gz: 35d6d97cd772adf1624b1c3990c2c4a44c0d18f7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 19308121589032e63db6e17947bca7f5b7859a4a8c117f8722ded187820fcb2f881596d7460191be57c12c22312de0fc6f5b246decbc4856cbabb8bb3bdb7457
|
7
|
+
data.tar.gz: 7e904540264b2c6300bd39f4f7c0e8cd06e9ff9f05935d2466af6a6862fc46f22a1ccce71683df096fcc22a4ec732b6b698ea74c9f98e2c77778bbf50d8e6476
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# knife-pantry
|
2
2
|
|
3
3
|
Knife plugin that allows you to manage environment specific cookbook versioning.
|
4
4
|
|
@@ -37,11 +37,13 @@ knife pantry lookup <cookbook-name> <chef-environment>
|
|
37
37
|
|
38
38
|
#### set
|
39
39
|
Set allows you to, well... set a version for the specified cookbook in a particular environment, or environments.
|
40
|
-
A comma seperated list of environments can be passed in to set a version across multiple at once.
|
40
|
+
A comma seperated list of environments can be passed in to set a version across multiple at once. If your goal
|
41
|
+
is to upgrade to the newest version of a particular cookbook, you can pass in 'latest' instead of specifying
|
42
|
+
a version.
|
41
43
|
```
|
42
44
|
knife pantry set <cookbook-name> <version> <environments>
|
43
|
-
[Action Complete!] development => 0.2.5 =>
|
44
|
-
[Action Complete!] uat => 0.2.5 =>
|
45
|
+
[Action Complete!] development => 0.2.5 => my_cookbook
|
46
|
+
[Action Complete!] uat => 0.2.5 => my_cookbook
|
45
47
|
```
|
46
48
|
|
47
49
|
## Contributing
|
data/lib/chef/knife/lookup.rb
CHANGED
@@ -1,53 +1,54 @@
|
|
1
1
|
require 'chef/knife'
|
2
2
|
require 'json'
|
3
3
|
|
4
|
+
module Pantry
|
5
|
+
class PantryLookup < Chef::Knife
|
4
6
|
|
5
|
-
|
7
|
+
banner "knife pantry lookup COOKBOOK ENVIRONMENT (options)"
|
6
8
|
|
7
|
-
|
9
|
+
def run
|
10
|
+
cbk = name_args.first
|
11
|
+
env = name_args.last
|
8
12
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
get_env(env)
|
14
|
-
version = get_cbk_versions(env, cbk)
|
15
|
-
get_past_versions(cbk, version)
|
16
|
-
end
|
17
|
-
|
18
|
-
def get_env(env)
|
19
|
-
environments = []
|
20
|
-
for key in rest.get_rest('environments')
|
21
|
-
environments.push(key[0])
|
13
|
+
get_env(env)
|
14
|
+
version = get_cbk_versions(env, cbk)
|
15
|
+
get_past_versions(cbk, version)
|
22
16
|
end
|
23
|
-
if !(environments.include?(env))
|
24
|
-
puts "Specified environment does not exist"
|
25
|
-
else
|
26
|
-
puts "[Environment found!] Looking for cookbook..."
|
27
|
-
end
|
28
|
-
end
|
29
17
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
18
|
+
def get_env(env)
|
19
|
+
environments = []
|
20
|
+
for key in rest.get_rest('environments')
|
21
|
+
environments.push(key[0])
|
22
|
+
end
|
23
|
+
if !(environments.include?(env))
|
24
|
+
puts "Specified environment does not exist"
|
25
|
+
else
|
26
|
+
puts "[Environment found!] Looking for cookbook..."
|
27
|
+
end
|
38
28
|
end
|
39
|
-
return version
|
40
|
-
end
|
41
29
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
if release['version'] == version
|
47
|
-
puts release['version'] + " <== Current version"
|
30
|
+
def get_cbk_versions(env, cbk)
|
31
|
+
cookbooks = rest.get_rest("environments/#{env}/cookbooks")
|
32
|
+
if !(cookbooks.has_key?(cbk))
|
33
|
+
puts "#{cbk} not found in #{env}"
|
48
34
|
else
|
49
|
-
puts
|
35
|
+
puts "[Cookbook found!] Checking current version..."
|
36
|
+
version = cookbooks[cbk]['versions'][0]['version']
|
37
|
+
puts "[Version found!] Finding latest releases..."
|
50
38
|
end
|
51
|
-
|
39
|
+
return version
|
40
|
+
end
|
41
|
+
|
42
|
+
def get_past_versions(cbk, version)
|
43
|
+
available_versions= rest.get_rest("cookbooks/#{cbk}")
|
44
|
+
puts "[Releases found!]"
|
45
|
+
available_versions[cbk]['versions'][0..4].each { |release|
|
46
|
+
if release['version'] == version
|
47
|
+
puts release['version'] + " <== Current version"
|
48
|
+
else
|
49
|
+
puts release['version']
|
50
|
+
end
|
51
|
+
}
|
52
|
+
end
|
52
53
|
end
|
53
54
|
end
|
data/lib/chef/knife/set.rb
CHANGED
@@ -1,58 +1,59 @@
|
|
1
1
|
require 'chef/knife'
|
2
2
|
require 'json'
|
3
3
|
|
4
|
+
module Pantry
|
5
|
+
class PantrySet < Chef::Knife
|
4
6
|
|
5
|
-
|
7
|
+
banner "knife pantry set COOKBOOK VERSION [ENVIRONMENT] (options)"
|
6
8
|
|
7
|
-
|
9
|
+
def run
|
10
|
+
options = {
|
11
|
+
cbk: name_args.first,
|
12
|
+
ver: name_args[1],
|
13
|
+
env: name_args.last
|
14
|
+
}
|
8
15
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
env: name_args.last
|
14
|
-
}
|
16
|
+
if options[:ver] == 'latest'
|
17
|
+
available_versions = rest.get_rest("cookbooks/#{options[:cbk]}")
|
18
|
+
options[:ver] = available_versions[options[:cbk]]['versions'][0]['version']
|
19
|
+
end
|
15
20
|
|
16
|
-
|
17
|
-
|
18
|
-
|
21
|
+
options[:env] = options[:env].split(',')
|
22
|
+
options[:env].each {|x|
|
23
|
+
options[:current_env] = x
|
24
|
+
if set(get_cbk_list(options))
|
25
|
+
puts "[Action Complete!] #{options[:current_env]} => #{options[:ver]} => #{options[:cbk]}"
|
26
|
+
else
|
27
|
+
puts "[No Action!] #{options[:current_env]} already using #{options[:cbk]} #{options[:ver]}"
|
28
|
+
end
|
29
|
+
}
|
19
30
|
end
|
20
31
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
32
|
+
def get_cbk_list(options)
|
33
|
+
chef_env = rest.get_rest("environments/#{options[:current_env]}")
|
34
|
+
env_json = JSON.parse(chef_env.to_json(chef_env))
|
35
|
+
cbk_list = env_json['cookbook_versions']
|
36
|
+
|
37
|
+
if cbk_list.has_key?(options[:cbk])
|
38
|
+
if cbk_list[options[:cbk]] == "= " + options[:ver]
|
39
|
+
return nil
|
40
|
+
else
|
41
|
+
cbk_list[options[:cbk]] = "= " + options[:ver]
|
42
|
+
end
|
28
43
|
end
|
29
|
-
}
|
30
|
-
end
|
31
44
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
45
|
+
new_cbk_list = cbk_list
|
46
|
+
env_json['cookbook_versions'] = new_cbk_list
|
47
|
+
return env_json
|
48
|
+
end
|
36
49
|
|
37
|
-
|
38
|
-
if
|
39
|
-
|
50
|
+
def set(env_json)
|
51
|
+
if env_json != nil
|
52
|
+
rest.put_rest("environments/" + env_json['name'], env_json)
|
53
|
+
return true
|
40
54
|
else
|
41
|
-
|
55
|
+
return false
|
42
56
|
end
|
43
57
|
end
|
44
|
-
|
45
|
-
new_cbk_list = cbk_list
|
46
|
-
env_json['cookbook_versions'] = new_cbk_list
|
47
|
-
return env_json
|
48
|
-
end
|
49
|
-
|
50
|
-
def set(env_json)
|
51
|
-
if env_json != nil
|
52
|
-
rest.put_rest("environments/" + env_json['name'], env_json)
|
53
|
-
return true
|
54
|
-
else
|
55
|
-
return false
|
56
|
-
end
|
57
58
|
end
|
58
59
|
end
|
data/lib/knife-pantry/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knife-pantry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- |
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-12-
|
12
|
+
date: 2014-12-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: chef
|