knife-pantry 0.1.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4a95cf4479bfbc01387b2e34e1d7045d893bde6d
4
+ data.tar.gz: 1e1a6e1bf995f6a2a67314e878b51c303fcd3622
5
+ SHA512:
6
+ metadata.gz: e7feb6757b1c978bc2ec588e0f35e9a60ae0c75f9ba33a80a2fe60dda371e4a2a312a17da85c76d88bb2ab2ccbbd77a1e8918af5b3d3630abc45aa1e8bd1e98d
7
+ data.tar.gz: 28e35551e4031911962a593e8f3846d35bd59ae4f2eab926f0bbce9647e37184230bcaafa3dd33657d0d57a6d1da153f747e660c9300a37f10fa5cb688152a85
data/.gitignore ADDED
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in knife-pantry.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,23 @@
1
+ Copyright (c) 2014 lsnyder
2
+
3
+
4
+ MIT License
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining
7
+ a copy of this software and associated documentation files (the
8
+ "Software"), to deal in the Software without restriction, including
9
+ without limitation the rights to use, copy, modify, merge, publish,
10
+ distribute, sublicense, and/or sell copies of the Software, and to
11
+ permit persons to whom the Software is furnished to do so, subject to
12
+ the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be
15
+ included in all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,53 @@
1
+ # Knife::Pantry
2
+
3
+ Knife plugin that allows you to manage environment specific cookbook versioning.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'knife-pantry'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install knife-pantry
18
+
19
+ ## Usage
20
+
21
+ Currently there are two available commands:
22
+ #### lookup
23
+ Lookup allows you to see what version of the specified cookbook is being used in a particular environment.
24
+ The output also shows you the last five releases on your chef server.
25
+ ```
26
+ knife pantry lookup <cookbook-name> <chef-environment>
27
+ [Environment found!] Looking for cookbook...
28
+ [Cookbook found!] Checking current version...
29
+ [Version found!] Finding latest releases...
30
+ [Releases found!]
31
+ 0.2.6 <== Current version
32
+ 0.2.5
33
+ 0.2.4
34
+ 0.2.3
35
+ 0.2.2
36
+ ```
37
+
38
+ #### set
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.
41
+ ```
42
+ knife pantry set <cookbook-name> <version> <environments>
43
+ [Action Complete!] development => 0.2.5 => esfeeder
44
+ [Action Complete!] uat => 0.2.5 => esfeeder
45
+ ```
46
+
47
+ ## Contributing
48
+
49
+ 1. Fork it ( https://github.com/[my-github-username]/knife-pantry/fork )
50
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
51
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
52
+ 4. Push to the branch (`git push origin my-new-feature`)
53
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'knife-pantry/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "knife-pantry"
8
+ spec.version = Knife::Pantry::VERSION
9
+ spec.authors = ["lsnyder\n"]
10
+ spec.email = ["luke.snyder@caa.com"]
11
+ spec.summary = %q{Knife pantry is a tool for managing environment controlled cookbook versioning. }
12
+ spec.description = spec.summary
13
+ spec.homepage = "http://github.com/caagency/knife-pantry"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency 'chef', '~> 11.16', '>= 11.16.4'
22
+ spec.add_dependency 'json', '~> 1.8', '>= 1.8.1'
23
+ spec.add_dependency 'ffi-yajl', '1.2.0'
24
+
25
+ spec.add_development_dependency "bundler", '~> 1.6', '>= 1.6.2'
26
+ spec.add_development_dependency "rake", '~> 10.4', '>= 10.4.2'
27
+ end
@@ -0,0 +1,53 @@
1
+ require 'chef/knife'
2
+ require 'json'
3
+
4
+
5
+ class PantryLookup < Chef::Knife
6
+
7
+ banner "knife pantry lookup COOKBOOK ENVIRONMENT (options)"
8
+
9
+ def run
10
+ cbk = name_args.first
11
+ env = name_args.last
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])
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
28
+ end
29
+
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}"
34
+ else
35
+ puts "[Cookbook found!] Checking current version..."
36
+ version = cookbooks[cbk]['versions'][0]['version']
37
+ puts "[Version found!] Finding latest releases..."
38
+ end
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
53
+ end
@@ -0,0 +1,58 @@
1
+ require 'chef/knife'
2
+ require 'json'
3
+
4
+
5
+ class PantrySet < Chef::Knife
6
+
7
+ banner "knife pantry set COOKBOOK VERSION [ENVIRONMENT] (options)"
8
+
9
+ def run
10
+ options = {
11
+ cbk: name_args.first,
12
+ ver: name_args[1],
13
+ env: name_args.last
14
+ }
15
+
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
20
+
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
+ }
30
+ end
31
+
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
43
+ 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
+ end
58
+ end
@@ -0,0 +1,5 @@
1
+ module Knife
2
+ module Pantry
3
+ VERSION = '0.1.0'
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,148 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: knife-pantry
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - |
8
+ lsnyder
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-12-13 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: chef
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '11.16'
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 11.16.4
24
+ type: :runtime
25
+ prerelease: false
26
+ version_requirements: !ruby/object:Gem::Requirement
27
+ requirements:
28
+ - - "~>"
29
+ - !ruby/object:Gem::Version
30
+ version: '11.16'
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 11.16.4
34
+ - !ruby/object:Gem::Dependency
35
+ name: json
36
+ requirement: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.8'
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 1.8.1
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - "~>"
49
+ - !ruby/object:Gem::Version
50
+ version: '1.8'
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 1.8.1
54
+ - !ruby/object:Gem::Dependency
55
+ name: ffi-yajl
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - '='
59
+ - !ruby/object:Gem::Version
60
+ version: 1.2.0
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - '='
66
+ - !ruby/object:Gem::Version
67
+ version: 1.2.0
68
+ - !ruby/object:Gem::Dependency
69
+ name: bundler
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '1.6'
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: 1.6.2
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - "~>"
83
+ - !ruby/object:Gem::Version
84
+ version: '1.6'
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: 1.6.2
88
+ - !ruby/object:Gem::Dependency
89
+ name: rake
90
+ requirement: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - "~>"
93
+ - !ruby/object:Gem::Version
94
+ version: '10.4'
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: 10.4.2
98
+ type: :development
99
+ prerelease: false
100
+ version_requirements: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - "~>"
103
+ - !ruby/object:Gem::Version
104
+ version: '10.4'
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ version: 10.4.2
108
+ description: Knife pantry is a tool for managing environment controlled cookbook versioning.
109
+ email:
110
+ - luke.snyder@caa.com
111
+ executables: []
112
+ extensions: []
113
+ extra_rdoc_files: []
114
+ files:
115
+ - ".gitignore"
116
+ - Gemfile
117
+ - LICENSE.txt
118
+ - README.md
119
+ - Rakefile
120
+ - knife-pantry.gemspec
121
+ - lib/chef/knife/lookup.rb
122
+ - lib/chef/knife/set.rb
123
+ - lib/knife-pantry/version.rb
124
+ homepage: http://github.com/caagency/knife-pantry
125
+ licenses:
126
+ - MIT
127
+ metadata: {}
128
+ post_install_message:
129
+ rdoc_options: []
130
+ require_paths:
131
+ - lib
132
+ required_ruby_version: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ required_rubygems_version: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ requirements: []
143
+ rubyforge_project:
144
+ rubygems_version: 2.2.2
145
+ signing_key:
146
+ specification_version: 4
147
+ summary: Knife pantry is a tool for managing environment controlled cookbook versioning.
148
+ test_files: []