a2 0.2.0 → 0.3.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 +4 -4
- data/CHANGELOG.md +26 -0
- data/Gemfile +0 -1
- data/Gemfile.lock +71 -0
- data/README.md +2 -1
- data/a2.gemspec +8 -3
- data/lib/a2/client.rb +1 -1
- data/lib/a2/client/reporting.rb +5 -1
- data/lib/a2/commands/compliance.rb +1 -0
- data/lib/a2/mixins/approved.rb +7 -7
- data/lib/a2/mixins/filtered.rb +1 -0
- data/lib/a2/subcommands/node_mgmt.rb +6 -3
- data/lib/a2/subcommands/reporting.rb +31 -0
- data/lib/a2/subcommands/team.rb +2 -1
- data/lib/a2/subcommands/user.rb +2 -1
- data/lib/a2/version.rb +1 -1
- metadata +24 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: dc54ef0fc44adbd3b8e6fa6f6586dd100c2c536aa13ebf545de3fcab41424a3b
|
|
4
|
+
data.tar.gz: 5aaa16dae692a671ff1a76b6ec56335fcbac34c46f3753e7743e602c1f8292ab
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f8bf300517f1f6690d5000042b7cbc175666c9d84527a8f81d1750afb4de4248fb0e9add7fffc4da17e15dcf8991332a8be8176de5113796a96d095ca2ee71fa
|
|
7
|
+
data.tar.gz: 76bd17a096f75021a71733624200d2b4e2ce24ff515dceff8fc681b5f91a1e007a794243e18606dea463322cfe657d621a87b85427c5cdcb64095f1f43093551
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [Unreleased](https://github.com/gscho/a2-cli/tree/HEAD)
|
|
4
|
+
|
|
5
|
+
[Full Changelog](https://github.com/gscho/a2-cli/compare/v0.2.0...HEAD)
|
|
6
|
+
|
|
7
|
+
**Merged pull requests:**
|
|
8
|
+
|
|
9
|
+
- Add some basic unit tests for approved and filtered mixins [\#2](https://github.com/gscho/a2-cli/pull/2) ([gscho](https://github.com/gscho))
|
|
10
|
+
- Release v0.2.0 [\#1](https://github.com/gscho/a2-cli/pull/1) ([gscho](https://github.com/gscho))
|
|
11
|
+
|
|
12
|
+
## [v0.2.0](https://github.com/gscho/a2-cli/tree/v0.2.0) (2021-04-07)
|
|
13
|
+
|
|
14
|
+
[Full Changelog](https://github.com/gscho/a2-cli/compare/v0.1.1...v0.2.0)
|
|
15
|
+
|
|
16
|
+
## [v0.1.1](https://github.com/gscho/a2-cli/tree/v0.1.1) (2021-03-24)
|
|
17
|
+
|
|
18
|
+
[Full Changelog](https://github.com/gscho/a2-cli/compare/v0.1.0...v0.1.1)
|
|
19
|
+
|
|
20
|
+
## [v0.1.0](https://github.com/gscho/a2-cli/tree/v0.1.0) (2021-03-23)
|
|
21
|
+
|
|
22
|
+
[Full Changelog](https://github.com/gscho/a2-cli/compare/783f8a6384a480f7b165ef5645aa1e8e4c4dfb45...v0.1.0)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
\* *This Changelog was automatically generated by [github_changelog_generator] (https://github.com/github-changelog-generator/github-changelog-generator)*
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -8,16 +8,86 @@ PATH
|
|
|
8
8
|
GEM
|
|
9
9
|
remote: https://rubygems.org/
|
|
10
10
|
specs:
|
|
11
|
+
activesupport (6.0.3.4)
|
|
12
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
13
|
+
i18n (>= 0.7, < 2)
|
|
14
|
+
minitest (~> 5.1)
|
|
15
|
+
tzinfo (~> 1.1)
|
|
16
|
+
zeitwerk (~> 2.2, >= 2.2.2)
|
|
17
|
+
addressable (2.7.0)
|
|
18
|
+
public_suffix (>= 2.0.2, < 5.0)
|
|
19
|
+
async (1.28.9)
|
|
20
|
+
console (~> 1.10)
|
|
21
|
+
nio4r (~> 2.3)
|
|
22
|
+
timers (~> 4.1)
|
|
23
|
+
async-http (0.54.1)
|
|
24
|
+
async (~> 1.25)
|
|
25
|
+
async-io (~> 1.28)
|
|
26
|
+
async-pool (~> 0.2)
|
|
27
|
+
protocol-http (~> 0.21.0)
|
|
28
|
+
protocol-http1 (~> 0.13.0)
|
|
29
|
+
protocol-http2 (~> 0.14.0)
|
|
30
|
+
async-http-faraday (0.9.0)
|
|
31
|
+
async-http (~> 0.42)
|
|
32
|
+
faraday
|
|
33
|
+
async-io (1.30.2)
|
|
34
|
+
async (~> 1.14)
|
|
35
|
+
async-pool (0.3.5)
|
|
36
|
+
async (~> 1.25)
|
|
11
37
|
cmdparse (3.0.7)
|
|
38
|
+
concurrent-ruby (1.1.7)
|
|
39
|
+
console (1.10.2)
|
|
40
|
+
fiber-local
|
|
41
|
+
faraday (0.17.3)
|
|
42
|
+
multipart-post (>= 1.2, < 3)
|
|
43
|
+
faraday-http-cache (1.2.2)
|
|
44
|
+
faraday (~> 0.8)
|
|
45
|
+
fiber-local (1.0.0)
|
|
46
|
+
github_changelog_generator (1.16.1)
|
|
47
|
+
activesupport
|
|
48
|
+
async (>= 1.25.0)
|
|
49
|
+
async-http-faraday
|
|
50
|
+
faraday-http-cache
|
|
51
|
+
multi_json
|
|
52
|
+
octokit (~> 4.6)
|
|
53
|
+
rainbow (>= 2.2.1)
|
|
54
|
+
rake (>= 10.0)
|
|
55
|
+
retriable (~> 3.0)
|
|
12
56
|
httparty (0.18.1)
|
|
13
57
|
mime-types (~> 3.0)
|
|
14
58
|
multi_xml (>= 0.5.2)
|
|
59
|
+
i18n (1.8.5)
|
|
60
|
+
concurrent-ruby (~> 1.0)
|
|
15
61
|
mime-types (3.3.1)
|
|
16
62
|
mime-types-data (~> 3.2015)
|
|
17
63
|
mime-types-data (3.2021.0225)
|
|
18
64
|
minitest (5.14.4)
|
|
65
|
+
multi_json (1.15.0)
|
|
19
66
|
multi_xml (0.6.0)
|
|
67
|
+
multipart-post (2.1.1)
|
|
68
|
+
nio4r (2.5.4)
|
|
69
|
+
octokit (4.18.0)
|
|
70
|
+
faraday (>= 0.9)
|
|
71
|
+
sawyer (~> 0.8.0, >= 0.5.3)
|
|
72
|
+
protocol-hpack (1.4.2)
|
|
73
|
+
protocol-http (0.21.0)
|
|
74
|
+
protocol-http1 (0.13.2)
|
|
75
|
+
protocol-http (~> 0.19)
|
|
76
|
+
protocol-http2 (0.14.2)
|
|
77
|
+
protocol-hpack (~> 1.4)
|
|
78
|
+
protocol-http (~> 0.18)
|
|
79
|
+
public_suffix (4.0.6)
|
|
80
|
+
rainbow (3.0.0)
|
|
20
81
|
rake (13.0.3)
|
|
82
|
+
retriable (3.1.2)
|
|
83
|
+
sawyer (0.8.2)
|
|
84
|
+
addressable (>= 2.3.5)
|
|
85
|
+
faraday (> 0.8, < 2.0)
|
|
86
|
+
thread_safe (0.3.6)
|
|
87
|
+
timers (4.3.3)
|
|
88
|
+
tzinfo (1.2.8)
|
|
89
|
+
thread_safe (~> 0.1)
|
|
90
|
+
zeitwerk (2.4.2)
|
|
21
91
|
|
|
22
92
|
PLATFORMS
|
|
23
93
|
ruby
|
|
@@ -27,6 +97,7 @@ PLATFORMS
|
|
|
27
97
|
DEPENDENCIES
|
|
28
98
|
a2!
|
|
29
99
|
bundler (~> 2.2.15)
|
|
100
|
+
github_changelog_generator
|
|
30
101
|
minitest (~> 5.0)
|
|
31
102
|
rake (>= 12.3.3)
|
|
32
103
|
|
data/README.md
CHANGED
|
@@ -21,7 +21,7 @@ Environment variables:
|
|
|
21
21
|
```
|
|
22
22
|
AUTOMATE_URL="https://automate.example.com"
|
|
23
23
|
AUTOMATE_TOKEN="my-token"
|
|
24
|
-
|
|
24
|
+
AUTOMATE_SSL_NO_VERIFY=true
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
List the available commands:
|
|
@@ -32,6 +32,7 @@ List the available commands:
|
|
|
32
32
|
Available commands:
|
|
33
33
|
compliance Compliance management commands
|
|
34
34
|
export-node-reports
|
|
35
|
+
list-reports
|
|
35
36
|
help Provide help for individual commands
|
|
36
37
|
iam Identity access management commands
|
|
37
38
|
add-membership
|
data/a2.gemspec
CHANGED
|
@@ -8,9 +8,9 @@ Gem::Specification.new do |spec|
|
|
|
8
8
|
spec.version = A2::VERSION
|
|
9
9
|
spec.authors = ['gscho']
|
|
10
10
|
spec.email = ['greg.c.schofield@gmail.com']
|
|
11
|
-
spec.summary = %q{
|
|
12
|
-
spec.description = %q{
|
|
13
|
-
spec.homepage = 'https://github.com/gscho/a2'
|
|
11
|
+
spec.summary = %q{A gem for interacting with the Chef Automate 2+ API}
|
|
12
|
+
spec.description = %q{A gem for interacting with the Chef Automate 2+ API}
|
|
13
|
+
spec.homepage = 'https://github.com/gscho/a2-cli'
|
|
14
14
|
spec.license = 'MIT'
|
|
15
15
|
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
|
16
16
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
@@ -18,9 +18,14 @@ Gem::Specification.new do |spec|
|
|
|
18
18
|
spec.bindir = 'bin'
|
|
19
19
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
20
20
|
spec.require_paths = ['lib']
|
|
21
|
+
spec.metadata = {
|
|
22
|
+
"source_code_uri" => spec.homepage,
|
|
23
|
+
"changelog_uri" => "#{spec.homepage}/CHANGELOG.md"
|
|
24
|
+
}
|
|
21
25
|
spec.add_development_dependency 'bundler', '~> 2.2.15'
|
|
22
26
|
spec.add_development_dependency 'rake', '>= 12.3.3'
|
|
23
27
|
spec.add_development_dependency 'minitest', '~> 5.0'
|
|
28
|
+
spec.add_development_dependency 'github_changelog_generator'
|
|
24
29
|
spec.add_dependency 'cmdparse'
|
|
25
30
|
spec.add_dependency 'httparty'
|
|
26
31
|
end
|
data/lib/a2/client.rb
CHANGED
|
@@ -47,7 +47,7 @@ module A2
|
|
|
47
47
|
JSON.parse(response.body)
|
|
48
48
|
end
|
|
49
49
|
|
|
50
|
-
def
|
|
50
|
+
def download_file(path, json, output_file)
|
|
51
51
|
File.open(output_file, "w") do |file|
|
|
52
52
|
HTTParty.post(File.join(@automate_url, path).to_s, {
|
|
53
53
|
verify: !@ssl_no_verify,
|
data/lib/a2/client/reporting.rb
CHANGED
|
@@ -2,7 +2,11 @@ module A2
|
|
|
2
2
|
class Client
|
|
3
3
|
module Reporting
|
|
4
4
|
def export_node_reports(json, output_file)
|
|
5
|
-
|
|
5
|
+
download_file '/api/v0/compliance/reporting/node/export', json, output_file
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def list_reports(json)
|
|
9
|
+
post '/api/v0/compliance/reporting/reports', json
|
|
6
10
|
end
|
|
7
11
|
end
|
|
8
12
|
end
|
data/lib/a2/mixins/approved.rb
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
module A2
|
|
2
2
|
module Approved
|
|
3
|
-
def
|
|
4
|
-
super(name, takes_commands: false)
|
|
5
|
-
@opt = {}
|
|
3
|
+
def add_approval_option!(options, opt = {})
|
|
6
4
|
options.on('-y', '--yes', 'Auto approve the deletion prompt.') do
|
|
7
|
-
|
|
5
|
+
opt[:auto_approved] = true
|
|
8
6
|
end
|
|
7
|
+
opt
|
|
9
8
|
end
|
|
10
9
|
|
|
11
|
-
def ask_for_approval(message)
|
|
10
|
+
def ask_for_approval(message = '')
|
|
12
11
|
puts "Are you sure you want to #{message}?"
|
|
13
12
|
puts "Only 'yes' will be accepted to proceed:"
|
|
14
13
|
answer = $stdin.gets.chomp
|
|
@@ -16,9 +15,10 @@ module A2
|
|
|
16
15
|
answer
|
|
17
16
|
end
|
|
18
17
|
|
|
19
|
-
def with_approval(
|
|
18
|
+
def with_approval(opts, &block)
|
|
19
|
+
opts[:auto_approved] = opts[:auto_approved] || false
|
|
20
20
|
answer = 'yes'
|
|
21
|
-
answer = ask_for_approval(message) unless
|
|
21
|
+
answer = ask_for_approval(opts[:message]) unless opts[:auto_approved]
|
|
22
22
|
block.call if answer.eql?('yes')
|
|
23
23
|
end
|
|
24
24
|
end
|
data/lib/a2/mixins/filtered.rb
CHANGED
|
@@ -26,10 +26,11 @@ module A2
|
|
|
26
26
|
include A2::Approved
|
|
27
27
|
def initialize
|
|
28
28
|
super('delete', takes_commands: false)
|
|
29
|
+
@opt = add_approval_option!(options)
|
|
29
30
|
end
|
|
30
31
|
|
|
31
32
|
def execute(id)
|
|
32
|
-
with_approval("delete node #{id}") do
|
|
33
|
+
with_approval(message: "delete node #{id}", auto_approved: @opt[:auto_approved]) do
|
|
33
34
|
puts JSON.pretty_generate(A2::Client.new(command_parser.data).delete_managed_node(id))
|
|
34
35
|
end
|
|
35
36
|
end
|
|
@@ -38,10 +39,11 @@ module A2
|
|
|
38
39
|
include A2::Approved
|
|
39
40
|
def initialize
|
|
40
41
|
super('bulk-delete-by-ids', takes_commands: false)
|
|
42
|
+
@opt = add_approval_option!(options)
|
|
41
43
|
end
|
|
42
44
|
|
|
43
45
|
def execute(ids)
|
|
44
|
-
with_approval("delete nodes") do
|
|
46
|
+
with_approval(message: "delete nodes", auto_approved: @opt[:auto_approved]) do
|
|
45
47
|
puts JSON.pretty_generate(A2::Client.new(command_parser.data).bulk_delete_managed_nodes_by_id(id))
|
|
46
48
|
end
|
|
47
49
|
end
|
|
@@ -50,11 +52,12 @@ module A2
|
|
|
50
52
|
include A2::Approved
|
|
51
53
|
def initialize
|
|
52
54
|
super('bulk-delete-by-filter', takes_commands: false)
|
|
55
|
+
@opt = add_approval_option!(options)
|
|
53
56
|
end
|
|
54
57
|
|
|
55
58
|
def execute
|
|
56
59
|
with_paginated_filter_json do |json|
|
|
57
|
-
with_approval("delete nodes using filter") do
|
|
60
|
+
with_approval(message: "delete nodes using filter", auto_approved: @opt[:auto_approved]) do
|
|
58
61
|
puts JSON.pretty_generate(A2::Client.new(command_parser.data).bulk_delete_managed_nodes_by_filter(json))
|
|
59
62
|
end
|
|
60
63
|
end
|
|
@@ -25,6 +25,37 @@ module A2
|
|
|
25
25
|
end
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
|
+
class ListReports < Paginated
|
|
29
|
+
def initialize
|
|
30
|
+
super('list-reports', takes_commands: false, filter_key: 'type')
|
|
31
|
+
options.on('-i', '--skip-impact IMPACT', 'Only show reports with an impact score greater than the provided value.') do |impact|
|
|
32
|
+
@opt[:impact] = impact
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def execute
|
|
37
|
+
impact = @opt.delete(:impact)
|
|
38
|
+
with_paginated_filter_json do |json|
|
|
39
|
+
reports_json = A2::Client.new(command_parser.data).list_reports(json)
|
|
40
|
+
reports_json = filter_by_min_impact(reports_json, impact) unless impact.nil?
|
|
41
|
+
|
|
42
|
+
puts JSON.pretty_generate(reports_json)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def filter_by_min_impact(report_json, impact)
|
|
47
|
+
report_json['reports'].delete_if do |report|
|
|
48
|
+
if impact == 'minor'
|
|
49
|
+
if report['controls']['failed']['major'].eql?(0) && report['controls']['failed']['critical'].eql?(0)
|
|
50
|
+
true
|
|
51
|
+
end
|
|
52
|
+
elsif impact == 'major'
|
|
53
|
+
true if report['controls']['failed']['critical'].eql?(0)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
report_json
|
|
57
|
+
end
|
|
58
|
+
end
|
|
28
59
|
end
|
|
29
60
|
end
|
|
30
61
|
end
|
data/lib/a2/subcommands/team.rb
CHANGED
|
@@ -50,10 +50,11 @@ module A2
|
|
|
50
50
|
include A2::Approved
|
|
51
51
|
def initialize
|
|
52
52
|
super('delete-team', takes_commands: false)
|
|
53
|
+
@opt = add_approval_option!(options)
|
|
53
54
|
end
|
|
54
55
|
|
|
55
56
|
def execute(id)
|
|
56
|
-
with_approval("delete team #{id}") do
|
|
57
|
+
with_approval(message: "delete team #{id}", auto_approved: @opt[:auto_approved]) do
|
|
57
58
|
puts JSON.pretty_generate(A2::Client.new(command_parser.data).delete_team(id))
|
|
58
59
|
end
|
|
59
60
|
end
|
data/lib/a2/subcommands/user.rb
CHANGED
|
@@ -50,10 +50,11 @@ module A2
|
|
|
50
50
|
include A2::Approved
|
|
51
51
|
def initialize
|
|
52
52
|
super('delete-user', takes_commands: false)
|
|
53
|
+
@opt = add_approval_option!(options)
|
|
53
54
|
end
|
|
54
55
|
|
|
55
56
|
def execute(id)
|
|
56
|
-
with_approval("delete user #{id}") do
|
|
57
|
+
with_approval(message: "delete user #{id}", auto_approved: @opt[:auto_approved]) do
|
|
57
58
|
puts JSON.pretty_generate(A2::Client.new(command_parser.data).delete_user(id))
|
|
58
59
|
end
|
|
59
60
|
end
|
data/lib/a2/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: a2
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- gscho
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-04-
|
|
11
|
+
date: 2021-04-15 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -52,6 +52,20 @@ dependencies:
|
|
|
52
52
|
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '5.0'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: github_changelog_generator
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - ">="
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - ">="
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '0'
|
|
55
69
|
- !ruby/object:Gem::Dependency
|
|
56
70
|
name: cmdparse
|
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -80,7 +94,7 @@ dependencies:
|
|
|
80
94
|
- - ">="
|
|
81
95
|
- !ruby/object:Gem::Version
|
|
82
96
|
version: '0'
|
|
83
|
-
description:
|
|
97
|
+
description: A gem for interacting with the Chef Automate 2+ API
|
|
84
98
|
email:
|
|
85
99
|
- greg.c.schofield@gmail.com
|
|
86
100
|
executables:
|
|
@@ -93,6 +107,7 @@ files:
|
|
|
93
107
|
- ".github/workflows/gem-push.yml"
|
|
94
108
|
- ".github/workflows/run-rake.yml"
|
|
95
109
|
- ".gitignore"
|
|
110
|
+
- CHANGELOG.md
|
|
96
111
|
- Gemfile
|
|
97
112
|
- Gemfile.lock
|
|
98
113
|
- LICENSE.txt
|
|
@@ -124,10 +139,12 @@ files:
|
|
|
124
139
|
- lib/a2/subcommands/team.rb
|
|
125
140
|
- lib/a2/subcommands/user.rb
|
|
126
141
|
- lib/a2/version.rb
|
|
127
|
-
homepage: https://github.com/gscho/a2
|
|
142
|
+
homepage: https://github.com/gscho/a2-cli
|
|
128
143
|
licenses:
|
|
129
144
|
- MIT
|
|
130
|
-
metadata:
|
|
145
|
+
metadata:
|
|
146
|
+
source_code_uri: https://github.com/gscho/a2-cli
|
|
147
|
+
changelog_uri: https://github.com/gscho/a2-cli/CHANGELOG.md
|
|
131
148
|
post_install_message:
|
|
132
149
|
rdoc_options: []
|
|
133
150
|
require_paths:
|
|
@@ -143,8 +160,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
143
160
|
- !ruby/object:Gem::Version
|
|
144
161
|
version: '0'
|
|
145
162
|
requirements: []
|
|
146
|
-
rubygems_version: 3.0.3
|
|
163
|
+
rubygems_version: 3.0.3.1
|
|
147
164
|
signing_key:
|
|
148
165
|
specification_version: 4
|
|
149
|
-
summary:
|
|
166
|
+
summary: A gem for interacting with the Chef Automate 2+ API
|
|
150
167
|
test_files: []
|