rototiller 1.0.0 → 1.0.1
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 +5 -13
- data/CONTRIBUTING.md +19 -2
- data/README.md +5 -139
- data/docs/rototiller_task_reference.md +34 -37
- data/lib/rototiller/task/params/command.rb +36 -11
- data/lib/rototiller/task/rototiller_task.rb +4 -1
- data/lib/rototiller/version.rb +1 -1
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
ZDc0MDhjM2E3NWU2NjMwZjYwODAxMjAxNzkyYzRlZjQ1YzU1NjE4MQ==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5bac726b080a90b1a417f2dbbe519753651e0a09
|
4
|
+
data.tar.gz: 226f14f9d9527f807928b9f642a8dfe2190890ca
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
N2I5ZTg3MDg1NzU4MzM4YmUyNTEwZTUyZmZhZDM2ZDJkYmU2ZDgyYjM0NWZj
|
11
|
-
OWQyNTNiN2JmMDMyZTY1MTg0NDU1NGQ4MjUxZmI0NGU0Y2U2MGQ=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
NDdjMGM3ZGY0NWZiNTgxODMyZDc0ZWM0YjIyZTlhMWFjNDAxMDllMzVhYWQx
|
14
|
-
ZmQzMWViZDM0MTM4MDcyYjI3MmYxNGM4MTE0ZDMyNTA2MDM1YWI4OWFjNTAx
|
15
|
-
MGQ1ZTdmMzdhMjJmZTcwYTRhMWEyMjUxMDBjYTYyNDIxMDI0NDU=
|
6
|
+
metadata.gz: 47025a7eba9c59e1681fbdb270173478d42a9afa46d75053f1521c23231ef5b6813528300fc8a8d4353870120bc59e210a3983f1100750cd2e09518950e8aca9
|
7
|
+
data.tar.gz: 8afc54e03f69185564f16256da20ccba2e67910b01df2b57ebc3b7937eb4ca1c308af1245e7e065c16d742765a6f5279b4c0c5c7b054ece96941bca5493289e4
|
data/CONTRIBUTING.md
CHANGED
@@ -37,8 +37,25 @@
|
|
37
37
|
* Yard docs are great for other developers, but often are difficult to read for users. If your change impacts user-facing functionality, please include changes to the human-readable markdown docs starting at README.md
|
38
38
|
* During the time that you are working on your patch the master Rototiller branch may have changed - you'll want to [rebase](http://git-scm.com/book/en/Git-Branching-Rebasing) before you submit your PR with `git rebase master`. A successful rebase ensures that your patch will cleanly merge into Rototiller.
|
39
39
|
* Submitted patches will be smoke tested through a series of acceptance level tests that ensures basic Rototiller functionality - the results of these tests will be evaluated by a Rototiller team member. Failures associated with the submitted patch will result in the patch being rejected.
|
40
|
-
|
41
|
-
|
40
|
+
|
41
|
+
## Submitting Changes
|
42
|
+
|
43
|
+
* Sign the [Contributor License Agreement](http://links.puppet.com/cla).
|
44
|
+
* Push your changes to a topic branch in _your_ fork of the repository.
|
45
|
+
* Submit a pull request to [Rototiller](https://github.com/puppetlabs/rototiller)
|
46
|
+
* PRs are reviewed as time permits.
|
47
|
+
|
48
|
+
# Additional Resources
|
49
|
+
|
50
|
+
* [Rototiller's Yard Docs](http://www.rubydoc.info/github/puppetlabs/rototiller) (API/internal Architecture docs)
|
51
|
+
* [Rototiller's Architecture](docs/rototiller_class_graph.png)
|
52
|
+
* [More information on contributing](http://links.puppet.com/contribute-to-puppet)
|
53
|
+
* [Contributor License Agreement](http://links.puppet.com/cla)
|
54
|
+
* [General GitHub documentation](http://help.github.com/)
|
55
|
+
* [GitHub pull request documentation](http://help.github.com/send-pull-requests/)
|
56
|
+
* Questions? Comments? Contact the Rototiller team at qa-team@puppet.com
|
57
|
+
* The keyword `rototiller` is monitored and we'll get back to you as quick as we can.
|
58
|
+
* Rototiller's Architecture: [Rototiller's Architecture](docs/rototiller_class_graph.png)
|
42
59
|
|
43
60
|
## Submitting Changes
|
44
61
|
|
data/README.md
CHANGED
@@ -74,150 +74,16 @@ this does, _mostly_ the same as below. but what do the various environment vari
|
|
74
74
|
* [rototiller\_task reference](docs/rototiller_task_reference.md)
|
75
75
|
* contains usage information on all rototiller_task API methods
|
76
76
|
|
77
|
-
## Issues
|
78
|
-
|
79
|
-
* none. it's perfect, but just in case (sorry, this is Puppet-internal for now)
|
80
|
-
* [Jira: Rototiller](https://tickets.puppetlabs.com/issues/?jql=project%20%3D%20QA)
|
81
|
-
* [Puppet QA-team](mailto:qa-team@puppet.com)
|
82
|
-
|
83
77
|
## More Documentation
|
84
78
|
|
85
79
|
Rototiller is documented using yard
|
86
|
-
|
87
|
-
|
88
|
-
First build a local copy of the gem
|
89
|
-
|
90
|
-
$) bundle exec rake build
|
91
|
-
|
92
|
-
Next start the yard server
|
93
|
-
|
94
|
-
$) bundle exec yard server
|
95
|
-
|
96
|
-
Finally navigate to http://0.0.0.0:8808/ to view the documentation
|
80
|
+
* [Rototiller's Yard Docs](http://www.rubydoc.info/github/puppetlabs/rototiller) (API/internal Architecture docs)
|
97
81
|
|
98
82
|
## Contributing
|
99
83
|
* [Contributing](CONTRIBUTING.md)
|
100
84
|
|
101
|
-
##
|
102
|
-
### All permutations of v2 API (remove and refactor into useful doc sections below upon testing, merge-up to stable)
|
103
|
-
|
104
|
-
* all things that can take multiples should use add\_ as precursor to method name
|
105
|
-
* all things that only take one should use set\_ as precursor to method name?
|
106
|
-
require 'rototiller'
|
107
|
-
|
108
|
-
## all task methods
|
109
|
-
rototiller_task :name do |t|
|
110
|
-
t.add_command # t.add_cmd? me no likey
|
111
|
-
t.add_env
|
112
|
-
end
|
113
|
-
rototiller_task do |t|
|
114
|
-
t.set_name = 'string_name' # should this be validated?? e.g.: spaces, etc
|
115
|
-
t.add_command
|
116
|
-
t.add_env
|
117
|
-
end
|
118
|
-
|
119
|
-
|
120
|
-
## all task's add_env invocations with just name
|
121
|
-
t.add_env('env_name') #required, default messaging
|
122
|
-
t.add_env :env_name
|
123
|
-
t.add_env 'env_name' # implicitly allowed by ruby
|
124
|
-
t.add_env do |e|
|
125
|
-
e.name
|
126
|
-
end
|
127
|
-
|
128
|
-
## all task's add_env invocations with name, message
|
129
|
-
#t.add_env('env_name') # impossible
|
130
|
-
t.add_env :env_name do |e|
|
131
|
-
t.add_env 'env_name' do |e| # should we do this too?
|
132
|
-
e.set_message
|
133
|
-
end
|
134
|
-
t.add_env do |e|
|
135
|
-
e.name
|
136
|
-
e.message
|
137
|
-
end
|
138
|
-
|
139
|
-
## all task's add_env invocations with name, value
|
140
|
-
#t.add_env('env_name') # impossible
|
141
|
-
t.add_env :env_name do |e|
|
142
|
-
t.add_env 'env_name' do |e| # should we do this too?
|
143
|
-
e.default/value # does value imply the env will be set by rototiller? does default NOT?
|
144
|
-
end
|
145
|
-
t.add_env do |e|
|
146
|
-
e.name
|
147
|
-
e.default/value
|
148
|
-
end
|
149
|
-
|
150
|
-
## all task's add_env invocations with name, value, message
|
151
|
-
#t.add_env('env_name') # impossible
|
152
|
-
t.add_env :env_name do |e|
|
153
|
-
e.default/value # does value imply the env will be set by rototiller? does default NOT?
|
154
|
-
e.message
|
155
|
-
end
|
156
|
-
t.add_env do |e|
|
157
|
-
e.name
|
158
|
-
e.default/value
|
159
|
-
e.message
|
160
|
-
end
|
161
|
-
|
162
|
-
|
163
|
-
## all task's add_command invocations with only name
|
164
|
-
# default messaging, no env override?
|
165
|
-
t.add_command('echo --blah my name is ray')
|
166
|
-
t.add_command :echo
|
167
|
-
t.add_command 'echo'
|
168
|
-
t.add_command do |c|
|
169
|
-
c.name = 'echo'
|
170
|
-
end
|
171
|
-
|
172
|
-
## all task's add_command invocations with name (string), message
|
173
|
-
#t.add_command('echo --blah my name is ray', 'message') # ArgumentError
|
174
|
-
t.add_command :echo
|
175
|
-
t.add_command 'echo' do |c|
|
176
|
-
c.name = 'echo' # # nomethod error?
|
177
|
-
c.message = 'why we echo'
|
178
|
-
end
|
179
|
-
t.add_command do |c|
|
180
|
-
c.name = 'echo'
|
181
|
-
c.message = 'blah'
|
182
|
-
end
|
183
|
-
|
184
|
-
## all task's add_command invocations with name (block) (could be same for message?)
|
185
|
-
#t.add_command('echo --blah my name is ray', 'message') # ArgumentError
|
186
|
-
#t.add_command :echo
|
187
|
-
#t.add_command 'echo' do |c|
|
188
|
-
# c.message = 'blah'
|
189
|
-
#end
|
190
|
-
t.add_command do |c|
|
191
|
-
c.name 'echo' do |n|
|
192
|
-
n.add_env
|
193
|
-
end
|
194
|
-
c.add_arg 'some_arg' do |a|
|
195
|
-
a.add_env
|
196
|
-
a.message
|
197
|
-
end
|
198
|
-
c.add_option '--option_name' do |o|
|
199
|
-
o.add_arg 'switch_arg' do |a|
|
200
|
-
a.add_env 'opion-arg_env' do |e|
|
201
|
-
e.set_name
|
202
|
-
e.set_message
|
203
|
-
e.set_value
|
204
|
-
end
|
205
|
-
end
|
206
|
-
o.add_env 'option-name_env' do |e|
|
207
|
-
e.set_name
|
208
|
-
e.set_message
|
209
|
-
e.set_value
|
210
|
-
end
|
211
|
-
o.message
|
212
|
-
end
|
213
|
-
c.add_switch '--some_switch' do |s|
|
214
|
-
s.add_env 'env_name' do |e|
|
215
|
-
e.set_name
|
216
|
-
e.set_message
|
217
|
-
e.set_value
|
218
|
-
end
|
219
|
-
s.message
|
220
|
-
end
|
221
|
-
end
|
85
|
+
## Issues
|
222
86
|
|
223
|
-
|
87
|
+
* none. it's perfect, but just in case:
|
88
|
+
* [Jira: Rototiller](https://tickets.puppetlabs.com/issues/?jql=project%20%3D%20QA) (sorry, this is Puppet-internal for now)
|
89
|
+
* [Puppet QA-team](mailto:qa-team@puppet.com)
|
@@ -1,33 +1,25 @@
|
|
1
1
|
# Rototiller Task Reference
|
2
2
|
* herein lies the reference to the rototiller_task API
|
3
3
|
|
4
|
-
* [
|
5
|
-
* [#
|
6
|
-
* [#
|
7
|
-
* [Command](
|
8
|
-
* [#add\_env](
|
9
|
-
* [#add\_switch](
|
10
|
-
* [#add\_env](
|
11
|
-
* [#add\_option](
|
12
|
-
* [#add\_env](
|
13
|
-
* [#add\_argument](
|
14
|
-
* [#add\_env](
|
15
|
-
* [#add\_argument](
|
16
|
-
* [#add\_env](
|
4
|
+
* [rototiller_task](rototiller_task)
|
5
|
+
* [#add_env](rototiller_task-add_env)
|
6
|
+
* [#add_command](rototiller_task-add_command)
|
7
|
+
* [Command](Command)
|
8
|
+
* [#add\_env](Command-add_env)
|
9
|
+
* [#add\_switch](Command-add_switch)
|
10
|
+
* [#add\_env](Command-add_switch-add_env)
|
11
|
+
* [#add\_option](Command-add_option)
|
12
|
+
* [#add\_env](Command-add_option-add_env)
|
13
|
+
* [#add\_argument](Command-add_option-add_argument)
|
14
|
+
* [#add\_env](Command-add_option-add_argument-add_env)
|
15
|
+
* [#add\_argument](Command-add_argument)
|
16
|
+
* [#add\_env](Command-add_argument-add_env)
|
17
17
|
|
18
18
|
<a name="rototiller_task"></a>
|
19
|
-
##
|
19
|
+
## rototiller_task
|
20
20
|
* behaves just like any other rake task name (see below)
|
21
21
|
|
22
|
-
<a name="rototiller_task
|
23
|
-
### #add_command
|
24
|
-
* adds a command to a rototiller_task. This command can in turn contain environment variables, switches, options and arguments
|
25
|
-
* this command (and any others) will be run with the task is executed
|
26
|
-
* (!) currently a task will fail if its command fails _only_ if `#fail_on_error` is set
|
27
|
-
* the error message from the command will only be shown when rake is run with `--verbose`
|
28
|
-
* this will be fixed post-1.0
|
29
|
-
|
30
|
-
<a name="rototiller_task:add_env"></a>
|
22
|
+
<a name="rototiller_task-add_env"></a>
|
31
23
|
### #add_env
|
32
24
|
* parent methods such as `add_command`, `add_argument`, `add_switch`, and `add_option` can utilize the method `add_env` to add an env to a param
|
33
25
|
* adds an arbitrary environment variable for use in the task
|
@@ -35,20 +27,25 @@
|
|
35
27
|
* If the parent does not call the `name=` method and the method `default=` is called under `add_env` the value passed to `default=` is the default
|
36
28
|
* If the parent does not call the `name=` method and the method `name=` is called under `add_env` the task will only continue if a value is found in the environment
|
37
29
|
* if specified with a default value, and the system environment does not have this variable set, rototiller will set it, for later use in a task or otherwise
|
38
|
-
* the same method can be used for any portion of a [command](#Command
|
30
|
+
* the same method can be used for any portion of a [command](#Command-add_env) as well, including command name, options, option arguments, switches, and command arguments. In these cases the environment variable's value will override that portion of the command string.
|
39
31
|
* more add_env use cases can be seen in the [env\_var\_example\_reference](env_var_example_reference.md)
|
40
32
|
|
41
|
-
|
33
|
+
#### Environment Variable and Task/Command Interactions
|
34
|
+
|
42
35
|
| has default? | exists in ENV? | rototiller creates | rototiller stops |
|
43
36
|
| ------------ | -------------- | ------------------ | ---------------- |
|
44
37
|
| n | n | n | y |
|
45
|
-
| ------------ | -------------- | ------------------ | ---------------- |
|
46
38
|
| n | y | n | n |
|
47
|
-
| ------------ | -------------- | ------------------ | ---------------- |
|
48
39
|
| y | n | y | n |
|
49
|
-
| ------------ | -------------- | ------------------ | ---------------- |
|
50
40
|
| y | y | n | n |
|
51
41
|
|
42
|
+
<a name="rototiller_task-add_command"></a>
|
43
|
+
### #add_command
|
44
|
+
* adds a command to a rototiller_task. This command can in turn contain environment variables, switches, options and arguments
|
45
|
+
* this command (and any others) will be run with the task is executed
|
46
|
+
* (!) currently a task will fail if its command fails _only_ if `#fail_on_error` is set
|
47
|
+
* the error message from the command will only be shown when rake is run with `--verbose`
|
48
|
+
* this will be fixed post-1.0
|
52
49
|
|
53
50
|
|
54
51
|
|
@@ -83,7 +80,7 @@ produces:
|
|
83
80
|
|
84
81
|
<a name="Command"></a>
|
85
82
|
## Command
|
86
|
-
<a name="Command
|
83
|
+
<a name="Command-add_env"></a>
|
87
84
|
### #add_env
|
88
85
|
* adds an arbitrary environment variable which overrides the name of the command
|
89
86
|
* if specified with a default value, and the system environment does not have this variable set, rototiller will set it, for later use in a task or otherwise
|
@@ -130,36 +127,36 @@ produces:
|
|
130
127
|
partial success
|
131
128
|
awwww yeah!
|
132
129
|
|
133
|
-
<a name="Command
|
130
|
+
<a name="Command-add_switch"></a>
|
134
131
|
### #add_switch
|
135
|
-
<a name="Command
|
132
|
+
<a name="Command-add_argument"></a>
|
136
133
|
### #add_argument
|
137
134
|
* adds an arbitrary string to a command
|
138
135
|
* intended to add `--switch` type binary switches that do not take arguments (see [add_option](#Command:add_option))
|
139
136
|
* add\_argument is intended to add strings to the end of the command string (options and switches are added prior to arguments
|
140
137
|
|
141
|
-
<a name="Command
|
142
|
-
<a name="Command
|
138
|
+
<a name="Command-add_switch-add_env"></a>
|
139
|
+
<a name="Command-add_argument-add_env"></a>
|
143
140
|
#### #add_env
|
144
141
|
* just like the other `#add_env` methods for other portions of a Command
|
145
142
|
* adds an arbitrary environment variable which overrides the name of the switch or argument
|
146
143
|
* if specified with a default value, and the system environment does not have this variable set, rototiller will set it, for later use in a task or otherwise
|
147
144
|
* more add_env use cases can be seen in the [env\_var\_example\_reference](env_var_example_reference.md)
|
148
145
|
|
149
|
-
<a name="Command
|
146
|
+
<a name="Command-add_option"></a>
|
150
147
|
### #add_option
|
151
148
|
|
152
|
-
<a name="Command
|
149
|
+
<a name="Command-add_option-add_env"></a>
|
153
150
|
#### #add_env
|
154
151
|
* adds an arbitrary environment variable which overrides the name of the option (usually the thing with the --)
|
155
152
|
* just like the other `#add_env` methods for other portions of a Command
|
156
153
|
* more add_env use cases can be seen in the [env\_var\_example\_reference](env_var_example_reference.md)
|
157
154
|
|
158
|
-
<a name="Command
|
155
|
+
<a name="Command-add_option-add_argument"></a>
|
159
156
|
#### #add_argument
|
160
157
|
* adds an arbitrary string to trail an option (aka: an option argument)
|
161
158
|
|
162
|
-
<a name="Command
|
159
|
+
<a name="Command-add_option-add_argument-add_env"></a>
|
163
160
|
##### #add_env
|
164
161
|
* adds an arbitrary environment variable which overrides the name of _argument_ of this option
|
165
162
|
* just like the other `#add_env` methods for other portions of a Command
|
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'open3'
|
2
1
|
require 'rototiller/task/collections/env_collection'
|
3
2
|
require 'rototiller/task/collections/switch_collection'
|
4
3
|
require 'rototiller/task/collections/option_collection'
|
@@ -12,7 +11,7 @@ module Rototiller
|
|
12
11
|
# @since v0.1.0
|
13
12
|
# @attr [String] name The name of the command to run
|
14
13
|
# @attr_reader [Struct] result A structured command result
|
15
|
-
# contains members: output, exit_code and pid
|
14
|
+
# contains members: output, exit_code and pid
|
16
15
|
class Command < RototillerParam
|
17
16
|
|
18
17
|
# @return [String] the command to be used, could be considered a default
|
@@ -161,15 +160,41 @@ module Rototiller
|
|
161
160
|
# we may have to convert this to a class if it gets complex
|
162
161
|
@result = Result.new
|
163
162
|
@result.output = ''
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
@result.
|
171
|
-
@result.exit_code =
|
172
|
-
|
163
|
+
|
164
|
+
read_pipe, write_pipe = IO.pipe
|
165
|
+
begin
|
166
|
+
@result.pid = Process.spawn(self.to_str, :out => write_pipe, :err => write_pipe)
|
167
|
+
rescue Errno::ENOENT => e
|
168
|
+
$stderr.puts e
|
169
|
+
@result.output << e.to_s
|
170
|
+
@result.exit_code = 127
|
171
|
+
raise
|
172
|
+
end
|
173
|
+
#create a thread that monitors the process and tells us when it is done
|
174
|
+
@exitstatus = :not_done
|
175
|
+
Thread.new do
|
176
|
+
Process.wait(@result.pid);
|
177
|
+
@exitstatus = $?.exitstatus
|
178
|
+
@result.exit_code = @exitstatus
|
179
|
+
write_pipe.close
|
180
|
+
end
|
181
|
+
|
182
|
+
#FIXME: monitor for deadlock?
|
183
|
+
while @exitstatus == :not_done
|
184
|
+
begin
|
185
|
+
# readpartial will read UP to amount given
|
186
|
+
# we should never really need 64k, but it makes the responsiveness
|
187
|
+
# of our output much better when something is really quickly spewing output
|
188
|
+
sixty_four_k = 65536
|
189
|
+
this_read = read_pipe.readpartial(sixty_four_k)
|
190
|
+
rescue EOFError
|
191
|
+
next
|
192
|
+
end
|
193
|
+
@result.output << this_read
|
194
|
+
$stdout.sync = true # print stuff right away
|
195
|
+
print this_read
|
196
|
+
sleep 0.001
|
197
|
+
end
|
173
198
|
|
174
199
|
if block_given? # if block, send result to the block
|
175
200
|
yield @result
|
data/lib/rototiller/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rototiller
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppet, Inc.
|
@@ -10,22 +10,22 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2017-05-04 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rake
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ">="
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: '
|
21
|
+
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
|
-
- -
|
26
|
+
- - ">="
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
version: '
|
28
|
+
version: '0'
|
29
29
|
description: Puppet Labs tool for building rake tasks
|
30
30
|
email:
|
31
31
|
- qa@puppet.com
|
@@ -69,17 +69,17 @@ require_paths:
|
|
69
69
|
- lib
|
70
70
|
required_ruby_version: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
|
-
- -
|
72
|
+
- - ">="
|
73
73
|
- !ruby/object:Gem::Version
|
74
74
|
version: 1.9.3
|
75
75
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
76
|
requirements:
|
77
|
-
- -
|
77
|
+
- - ">="
|
78
78
|
- !ruby/object:Gem::Version
|
79
79
|
version: '0'
|
80
80
|
requirements: []
|
81
81
|
rubyforge_project:
|
82
|
-
rubygems_version: 2.6.
|
82
|
+
rubygems_version: 2.6.11
|
83
83
|
signing_key:
|
84
84
|
specification_version: 4
|
85
85
|
summary: Puppet Labs rake tool
|