knife-api 0.1.6 → 0.1.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -1
- data/Rakefile +16 -0
- data/knife-api.gemspec +2 -1
- data/lib/knife/api.rb +44 -27
- data/lib/knife/api/version.rb +1 -1
- metadata +21 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 133c78523dfdc03c78812813cfe4e3b8bc3afb46
|
4
|
+
data.tar.gz: b345e8e05f3589958a8527ac744cb99c04e220df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d2a1c44ffe320c70f148c2a52d691a04616bbf0eaae07366ea97b53bf9315cd33138c10a45ca8528747439f15502bb0b8692b920ea97a41c7ad04931b62b91c9
|
7
|
+
data.tar.gz: 95bd4bf5c30a8f1657bcefa87fce41bba4c6b65639491bead4bcacc6e080f005ea90033a9b71f90615d897d70c76294aeedc115be12f42da119b7e9ee38b03bc
|
data/CHANGELOG.md
CHANGED
@@ -3,4 +3,10 @@ Change Log
|
|
3
3
|
|
4
4
|
2015-02-26
|
5
5
|
added a CodeShip badge to the README.md file
|
6
|
-
added a CHANGELOG.md file to better document project changes
|
6
|
+
added a CHANGELOG.md file to better document project changes
|
7
|
+
|
8
|
+
2016-01-15
|
9
|
+
found that both Ruby Mine and Atom tricked out with linter, linter-ruby,
|
10
|
+
linter-rubocop, linter-foodcritic were unhappy with the Ruby code as it was
|
11
|
+
so I cleaned it up, primarily by refactoring the knife_capture method
|
12
|
+
|
data/Rakefile
CHANGED
@@ -1 +1,17 @@
|
|
1
1
|
require 'bundler/gem_tasks'
|
2
|
+
|
3
|
+
require 'knife/api'
|
4
|
+
require 'pp'
|
5
|
+
require 'json'
|
6
|
+
|
7
|
+
task :list_nodes do
|
8
|
+
status = knife :node_list
|
9
|
+
puts "status is #{status}"
|
10
|
+
fail if status > 0
|
11
|
+
end
|
12
|
+
|
13
|
+
task :show_node, :node_name do |task_name, args|
|
14
|
+
stdout, stderr, status = knife_capture :node_show, [args[:node_name], '-F', 'j']
|
15
|
+
fail if status > 0
|
16
|
+
pp JSON.load(stdout)
|
17
|
+
end
|
data/knife-api.gemspec
CHANGED
@@ -17,10 +17,11 @@ Gem::Specification.new do |gem|
|
|
17
17
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
18
|
gem.require_paths = ['lib']
|
19
19
|
|
20
|
-
gem.add_dependency 'chef', '>= 10.32', '
|
20
|
+
gem.add_dependency 'chef', '>= 10.32', '<= 12.6.0'
|
21
21
|
gem.add_dependency 'chef-zero', '>= 2.2.1'
|
22
22
|
gem.add_dependency 'ohai', '> 7.0.0', '< 9.0.0'
|
23
23
|
gem.add_dependency 'json', '>= 1.8.2'
|
24
24
|
|
25
25
|
gem.add_development_dependency 'rake', '>= 10.4.2'
|
26
|
+
gem.add_development_dependency 'codeclimate-test-reporter', '>= 0.4.8' # , group: :test, require: nil
|
26
27
|
end
|
data/lib/knife/api.rb
CHANGED
@@ -2,6 +2,8 @@ require 'chef/application/knife'
|
|
2
2
|
require 'knife/api/version'
|
3
3
|
require 'stringio'
|
4
4
|
|
5
|
+
# Chef::Knife classes are opened to expose the Knife entry points to code
|
6
|
+
# via the injected API module
|
5
7
|
class Chef
|
6
8
|
class Knife
|
7
9
|
# adding API module to existing Chef::Knife packaging
|
@@ -9,21 +11,17 @@ class Chef
|
|
9
11
|
# adding Support module
|
10
12
|
module Support
|
11
13
|
def self.run_knife(command, args)
|
12
|
-
unless command.is_a?(Array)
|
13
|
-
command = command.to_s.split(/[\s_]+/)
|
14
|
-
end
|
15
|
-
|
14
|
+
command = command.to_s.split(/[\s_]+/) unless command.is_a?(Array)
|
16
15
|
command += args
|
17
|
-
|
18
|
-
if ENV['CHEF_CONFIG']
|
19
|
-
command += ['-c', ENV['CHEF_CONFIG']]
|
20
|
-
end
|
16
|
+
command += ['-c', ENV['CHEF_CONFIG']] if ENV['CHEF_CONFIG']
|
21
17
|
|
22
18
|
opts = Chef::Application::Knife.new.options
|
23
19
|
Chef::Knife.run(command, opts)
|
24
|
-
|
20
|
+
# believe this to be a problem -- if knife command would otherwise
|
21
|
+
# indicate a chef error this creates a false positive
|
22
|
+
0
|
25
23
|
rescue SystemExit => e
|
26
|
-
|
24
|
+
abort("Chef run failed with status " + e.status.to_s)
|
27
25
|
end
|
28
26
|
end
|
29
27
|
|
@@ -32,33 +30,52 @@ class Chef
|
|
32
30
|
end
|
33
31
|
|
34
32
|
def knife_capture(command, args = [], input = nil)
|
35
|
-
|
36
|
-
|
37
|
-
warn = $VERBOSE
|
38
|
-
$VERBOSE = nil
|
39
|
-
stderr, stdout, stdin = STDERR, STDOUT, STDIN
|
33
|
+
@input = input
|
34
|
+
set_null
|
40
35
|
|
41
|
-
|
42
|
-
Object.const_set('STDOUT', StringIO.new('', 'r+'))
|
43
|
-
Object.const_set('STDIN', input ? StringIO.new(input, 'r') : null)
|
44
|
-
$VERBOSE = warn
|
36
|
+
assign_io_channels
|
45
37
|
|
46
38
|
status = Chef::Knife::API::Support.run_knife(command, args)
|
47
39
|
return STDOUT.string, STDERR.string, status
|
48
40
|
ensure
|
49
|
-
|
50
|
-
$VERBOSE = nil
|
51
|
-
Object.const_set('STDERR', stderr)
|
52
|
-
Object.const_set('STDOUT', stdout)
|
53
|
-
Object.const_set('STDIN', stdin)
|
54
|
-
$VERBOSE = warn
|
55
|
-
null.close
|
41
|
+
revert_io_channels
|
56
42
|
end
|
57
43
|
end
|
58
44
|
end
|
45
|
+
|
46
|
+
def set_null
|
47
|
+
if Gem.win_platform? == null
|
48
|
+
File.open('NUL:', 'r')
|
49
|
+
else
|
50
|
+
File.open('/dev/null', 'r')
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def assign_io_channels
|
55
|
+
@warn = $VERBOSE
|
56
|
+
$VERBOSE = nil
|
57
|
+
@stderr = STDERR
|
58
|
+
@stdout = STDOUT
|
59
|
+
@stdin = STDIN
|
60
|
+
|
61
|
+
Object.const_set('STDERR', StringIO.new('', 'r+'))
|
62
|
+
Object.const_set('STDOUT', StringIO.new('', 'r+'))
|
63
|
+
Object.const_set('STDIN', @input ? StringIO.new(@input, 'r') : null)
|
64
|
+
$VERBOSE = @warn
|
65
|
+
end
|
66
|
+
|
67
|
+
def revert_io_channels
|
68
|
+
@warn = $VERBOSE
|
69
|
+
$VERBOSE = nil
|
70
|
+
Object.const_set('STDERR', @stderr)
|
71
|
+
Object.const_set('STDOUT', @stdout)
|
72
|
+
Object.const_set('STDIN', @stdin)
|
73
|
+
$VERBOSE = @warn
|
74
|
+
null.close
|
75
|
+
end
|
59
76
|
end
|
60
77
|
|
61
|
-
class << eval(
|
78
|
+
class << eval('self', TOPLEVEL_BINDING)
|
62
79
|
include Chef::Knife::API
|
63
80
|
end
|
64
81
|
|
data/lib/knife/api/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knife-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Erik Hollensbe
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2016-06-02 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: chef
|
@@ -19,9 +19,9 @@ dependencies:
|
|
19
19
|
- - ">="
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: '10.32'
|
22
|
-
- - "
|
22
|
+
- - "<="
|
23
23
|
- !ruby/object:Gem::Version
|
24
|
-
version:
|
24
|
+
version: 12.6.0
|
25
25
|
type: :runtime
|
26
26
|
prerelease: false
|
27
27
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,9 +29,9 @@ dependencies:
|
|
29
29
|
- - ">="
|
30
30
|
- !ruby/object:Gem::Version
|
31
31
|
version: '10.32'
|
32
|
-
- - "
|
32
|
+
- - "<="
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version:
|
34
|
+
version: 12.6.0
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: chef-zero
|
37
37
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: 10.4.2
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: codeclimate-test-reporter
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 0.4.8
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 0.4.8
|
97
111
|
description: A small library that lets you drive Chef's 'knife' programmatically
|
98
112
|
email:
|
99
113
|
- andyglick@gmailcom
|
@@ -130,7 +144,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
130
144
|
version: '0'
|
131
145
|
requirements: []
|
132
146
|
rubyforge_project:
|
133
|
-
rubygems_version: 2.
|
147
|
+
rubygems_version: 2.5.2
|
134
148
|
signing_key:
|
135
149
|
specification_version: 4
|
136
150
|
summary: A small library that lets you drive Chef's 'knife' programmatically
|