pe-razor-client 0.14.0 → 0.15.2

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.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/NEWS.md +25 -0
  3. data/bin/razor +9 -4
  4. data/lib/razor/cli.rb +10 -0
  5. data/lib/razor/cli/document.rb +59 -0
  6. data/lib/razor/cli/format.rb +81 -20
  7. data/lib/razor/cli/navigate.rb +121 -27
  8. data/lib/razor/cli/parse.rb +83 -10
  9. data/lib/razor/cli/transforms.rb +42 -0
  10. data/lib/razor/cli/version.rb +46 -0
  11. data/lib/razor/cli/views.rb +25 -0
  12. data/lib/razor/cli/views.yaml +196 -0
  13. data/spec/cli/format_spec.rb +99 -0
  14. data/spec/cli/navigate_spec.rb +111 -2
  15. data/spec/cli/parse_spec.rb +20 -0
  16. data/spec/fixtures/vcr/Razor_CLI_Navigate/argument_formatting/should_allow_spaces.yml +966 -0
  17. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_--help_command_.yml +99 -0
  18. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_-h_command_.yml +99 -0
  19. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_command_--help_.yml +99 -0
  20. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_command_-h_.yml +99 -0
  21. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_command_help_.yml +99 -0
  22. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_help_command_.yml +99 -0
  23. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_authentication/should_preserve_that_across_navigation.yml +9 -42
  24. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_authentication/should_supply_that_to_the_API_service.yml +5 -5
  25. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_invalid_parameter/should_fail_with_bad_JSON.yml +228 -0
  26. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_invalid_parameter/should_fail_with_malformed_argument.yml +120 -0
  27. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_multiple_arguments_with_same_name/combining_as_an_array/should_merge_an_array_into_an_existing_array.yml +2006 -0
  28. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_multiple_arguments_with_same_name/combining_as_an_array/should_merge_the_arguments_as_an_array.yml +2006 -0
  29. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_multiple_arguments_with_same_name/combining_as_an_array/should_merge_the_arguments_into_an_existing_array.yml +2006 -0
  30. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_multiple_arguments_with_same_name/combining_as_an_object/should_construct_a_json_object.yml +234 -0
  31. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_multiple_arguments_with_same_name/combining_as_an_object/should_construct_a_json_object_with_unicode.yml +412 -0
  32. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_multiple_arguments_with_same_name/combining_as_an_object/should_fail_with_mixed_types_array_then_hash_.yml +228 -0
  33. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_multiple_arguments_with_same_name/combining_as_an_object/should_fail_with_mixed_types_hash_then_array_.yml +164 -0
  34. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_no_parameters/should_fail_with_bad_JSON.yml +36 -0
  35. data/spec/fixtures/vcr/Razor_CLI_Parse/_new/_help/should_print_a_list_of_known_endpoints.yml +5 -5
  36. data/spec/spec_helper.rb +12 -1
  37. data/spec/testing.md +16 -0
  38. data/spec/version_spec.rb +8 -0
  39. metadata +67 -60
  40. data/.gitignore +0 -7
  41. data/.yardopts +0 -2
  42. data/Gemfile +0 -35
  43. data/Gemfile.lock +0 -53
  44. data/Rakefile +0 -37
  45. data/lib/razor/cli/navigate.yaml +0 -28
  46. data/pe-razor-client.gemspec +0 -32
  47. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_a_single_item_path/.yml +0 -69
  48. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_an_invalid_path/.yml +0 -36
  49. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_no_path/.yml +0 -36
  50. data/spec/fixtures/vcr/Razor_CLI_Parse/_new/_help/.yml +0 -36
@@ -0,0 +1,2006 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://localhost:8080/api
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - application/json
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Server:
22
+ - Apache-Coyote/1.1
23
+ X-Content-Type-Options:
24
+ - nosniff
25
+ Content-Type:
26
+ - application/json;charset=utf-8
27
+ Content-Length:
28
+ - '4982'
29
+ Date:
30
+ - Fri, 16 May 2014 22:18:15 GMT
31
+ body:
32
+ encoding: US-ASCII
33
+ string: '{"commands":[{"name":"add-policy-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/add-policy-tag","id":"http://localhost:8080/api/commands/add-policy-tag"},{"name":"create-broker","rel":"http://api.puppetlabs.com/razor/v1/commands/create-broker","id":"http://localhost:8080/api/commands/create-broker"},{"name":"create-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/create-policy","id":"http://localhost:8080/api/commands/create-policy"},{"name":"create-repo","rel":"http://api.puppetlabs.com/razor/v1/commands/create-repo","id":"http://localhost:8080/api/commands/create-repo"},{"name":"create-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/create-tag","id":"http://localhost:8080/api/commands/create-tag"},{"name":"create-task","rel":"http://api.puppetlabs.com/razor/v1/commands/create-task","id":"http://localhost:8080/api/commands/create-task"},{"name":"delete-broker","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-broker","id":"http://localhost:8080/api/commands/delete-broker"},{"name":"delete-node","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-node","id":"http://localhost:8080/api/commands/delete-node"},{"name":"delete-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-policy","id":"http://localhost:8080/api/commands/delete-policy"},{"name":"delete-repo","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-repo","id":"http://localhost:8080/api/commands/delete-repo"},{"name":"delete-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-tag","id":"http://localhost:8080/api/commands/delete-tag"},{"name":"disable-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/disable-policy","id":"http://localhost:8080/api/commands/disable-policy"},{"name":"enable-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/enable-policy","id":"http://localhost:8080/api/commands/enable-policy"},{"name":"modify-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/modify-node-metadata","id":"http://localhost:8080/api/commands/modify-node-metadata"},{"name":"modify-policy-max-count","rel":"http://api.puppetlabs.com/razor/v1/commands/modify-policy-max-count","id":"http://localhost:8080/api/commands/modify-policy-max-count"},{"name":"move-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/move-policy","id":"http://localhost:8080/api/commands/move-policy"},{"name":"reboot-node","rel":"http://api.puppetlabs.com/razor/v1/commands/reboot-node","id":"http://localhost:8080/api/commands/reboot-node"},{"name":"register-node","rel":"http://api.puppetlabs.com/razor/v1/commands/register-node","id":"http://localhost:8080/api/commands/register-node"},{"name":"reinstall-node","rel":"http://api.puppetlabs.com/razor/v1/commands/reinstall-node","id":"http://localhost:8080/api/commands/reinstall-node"},{"name":"remove-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/remove-node-metadata","id":"http://localhost:8080/api/commands/remove-node-metadata"},{"name":"remove-policy-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/remove-policy-tag","id":"http://localhost:8080/api/commands/remove-policy-tag"},{"name":"set-node-desired-power-state","rel":"http://api.puppetlabs.com/razor/v1/commands/set-node-desired-power-state","id":"http://localhost:8080/api/commands/set-node-desired-power-state"},{"name":"set-node-hw-info","rel":"http://api.puppetlabs.com/razor/v1/commands/set-node-hw-info","id":"http://localhost:8080/api/commands/set-node-hw-info"},{"name":"set-node-ipmi-credentials","rel":"http://api.puppetlabs.com/razor/v1/commands/set-node-ipmi-credentials","id":"http://localhost:8080/api/commands/set-node-ipmi-credentials"},{"name":"update-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/update-node-metadata","id":"http://localhost:8080/api/commands/update-node-metadata"},{"name":"update-tag-rule","rel":"http://api.puppetlabs.com/razor/v1/commands/update-tag-rule","id":"http://localhost:8080/api/commands/update-tag-rule"}],"collections":[{"name":"brokers","rel":"http://api.puppetlabs.com/razor/v1/collections/brokers","id":"http://localhost:8080/api/collections/brokers"},{"name":"repos","rel":"http://api.puppetlabs.com/razor/v1/collections/repos","id":"http://localhost:8080/api/collections/repos"},{"name":"tags","rel":"http://api.puppetlabs.com/razor/v1/collections/tags","id":"http://localhost:8080/api/collections/tags"},{"name":"policies","rel":"http://api.puppetlabs.com/razor/v1/collections/policies","id":"http://localhost:8080/api/collections/policies"},{"name":"nodes","rel":"http://api.puppetlabs.com/razor/v1/collections/nodes","id":"http://localhost:8080/api/collections/nodes"},{"name":"tasks","rel":"http://api.puppetlabs.com/razor/v1/collections/tasks","id":"http://localhost:8080/api/collections/tasks"},{"name":"commands","rel":"http://api.puppetlabs.com/razor/v1/collections/commands","id":"http://localhost:8080/api/collections/commands"}],"version":{"server":"v0.14.1-113-g8b33d83-dirty"}}'
34
+ http_version:
35
+ recorded_at: Fri, 16 May 2014 22:18:15 GMT
36
+ - request:
37
+ method: get
38
+ uri: http://localhost:8080/api/commands/create-repo
39
+ body:
40
+ encoding: US-ASCII
41
+ string: ''
42
+ headers:
43
+ Accept:
44
+ - application/json
45
+ Accept-Encoding:
46
+ - gzip, deflate
47
+ User-Agent:
48
+ - Ruby
49
+ response:
50
+ status:
51
+ code: 200
52
+ message: OK
53
+ headers:
54
+ Server:
55
+ - Apache-Coyote/1.1
56
+ Etag:
57
+ - '"server-version-v0.14.1-113-g8b33d83-dirty"'
58
+ X-Content-Type-Options:
59
+ - nosniff
60
+ Content-Type:
61
+ - application/json;charset=utf-8
62
+ Content-Length:
63
+ - '3227'
64
+ Date:
65
+ - Fri, 16 May 2014 22:18:15 GMT
66
+ body:
67
+ encoding: US-ASCII
68
+ string: '{"name":"create-repo","help":{"full":"# SYNOPSIS\nCreate a new repository,
69
+ from an ISO image or a URL\n\n# DESCRIPTION\nCreate a new repository, which
70
+ can either contain the content to install a\nnode, or simply point to an existing
71
+ online repository by URL.\n\n\n# Access Control\n\nThis command''s access
72
+ control pattern: `commands:create-repo:%{name}`\n\nWords surrounded by `%{...}`
73
+ are substitutions from the input data: typically\nthe name of the object being
74
+ modified, or some other critical detail, these\nallow roles to be granted
75
+ partial access to modify the system.\n\nFor more detail on how the permission
76
+ strings are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
77
+ pattern is expanded\nand then a permission check applied to it, before the
78
+ command is authorized.\n\nThese checks only apply if security is enabled in
79
+ the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
80
+ http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * name\n -
81
+ The name of the repository.\n - This attribute is required\n - It must
82
+ be of type string.\n - It must be between 1 and 250 in length.\n\n * url\n -
83
+ The URL of the remote repository to use.\n - It must be of type string.\n -
84
+ If present, iso-url must not be present.\n - It must be between 1 and 1000
85
+ in length.\n\n * iso-url\n - The URL of the ISO image to download and unpack
86
+ to create the\n repository. This can be an HTTP or HTTPS URL, or it can
87
+ be a\n file URL.\n \n In the later case, the file path is interpreted
88
+ as a path on the\n Razor server, rather than a path on the client. This
89
+ requires that\n you manually place the ISO image on the server before invoking
90
+ the\n command.\n - It must be of type string.\n - If present, url must
91
+ not be present.\n - It must be between 1 and 1000 in length.\n\n * task\n -
92
+ The name of the task associated with this repository. This is used to\n install
93
+ nodes that match a policy using this repository; generally it\n should match
94
+ the OS that the URL or ISO-URL attributes point to.\n - This attribute is
95
+ required\n - It must be of type string.\n\n\n\n# EXAMPLES\n Create a repository
96
+ from an ISO image, which will be downloaded and unpacked\n by the razor-server
97
+ in the background:\n \n {\n \"name\": \"fedora19\",\n \"iso-url\":
98
+ \"http://example.com/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n You
99
+ can also unpack an ISO image from a file *on the server*; this does not\n upload
100
+ the file from the client:\n {\n \"name\": \"fedora19\",\n \"iso-url\":
101
+ \"file:///tmp/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n Finally,
102
+ you can providing a `url` property when you create the repository;\n this
103
+ form is merely a pointer to a resource somehwere and nothing will be\n downloaded
104
+ onto the Razor server:\n \n {\n \"name\": \"fedora19\",\n \"url\": \"http://mirrors.n-ix.net/fedora/linux/releases/19/Fedora/x86_64/os/\"\n \"task\":
105
+ \"fedora\"\n }\n\n"},"schema":{"name":{"type":"string"},"url":{"type":"string"},"iso-url":{"type":"string"},"task":{"type":"string"}}}'
106
+ http_version:
107
+ recorded_at: Fri, 16 May 2014 22:18:15 GMT
108
+ - request:
109
+ method: get
110
+ uri: http://localhost:8080/api/commands/create-repo
111
+ body:
112
+ encoding: US-ASCII
113
+ string: ''
114
+ headers:
115
+ Accept:
116
+ - application/json
117
+ Accept-Encoding:
118
+ - gzip, deflate
119
+ User-Agent:
120
+ - Ruby
121
+ response:
122
+ status:
123
+ code: 200
124
+ message: OK
125
+ headers:
126
+ Server:
127
+ - Apache-Coyote/1.1
128
+ Etag:
129
+ - '"server-version-v0.14.1-113-g8b33d83-dirty"'
130
+ X-Content-Type-Options:
131
+ - nosniff
132
+ Content-Type:
133
+ - application/json;charset=utf-8
134
+ Content-Length:
135
+ - '3227'
136
+ Date:
137
+ - Fri, 16 May 2014 22:18:15 GMT
138
+ body:
139
+ encoding: US-ASCII
140
+ string: '{"name":"create-repo","help":{"full":"# SYNOPSIS\nCreate a new repository,
141
+ from an ISO image or a URL\n\n# DESCRIPTION\nCreate a new repository, which
142
+ can either contain the content to install a\nnode, or simply point to an existing
143
+ online repository by URL.\n\n\n# Access Control\n\nThis command''s access
144
+ control pattern: `commands:create-repo:%{name}`\n\nWords surrounded by `%{...}`
145
+ are substitutions from the input data: typically\nthe name of the object being
146
+ modified, or some other critical detail, these\nallow roles to be granted
147
+ partial access to modify the system.\n\nFor more detail on how the permission
148
+ strings are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
149
+ pattern is expanded\nand then a permission check applied to it, before the
150
+ command is authorized.\n\nThese checks only apply if security is enabled in
151
+ the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
152
+ http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * name\n -
153
+ The name of the repository.\n - This attribute is required\n - It must
154
+ be of type string.\n - It must be between 1 and 250 in length.\n\n * url\n -
155
+ The URL of the remote repository to use.\n - It must be of type string.\n -
156
+ If present, iso-url must not be present.\n - It must be between 1 and 1000
157
+ in length.\n\n * iso-url\n - The URL of the ISO image to download and unpack
158
+ to create the\n repository. This can be an HTTP or HTTPS URL, or it can
159
+ be a\n file URL.\n \n In the later case, the file path is interpreted
160
+ as a path on the\n Razor server, rather than a path on the client. This
161
+ requires that\n you manually place the ISO image on the server before invoking
162
+ the\n command.\n - It must be of type string.\n - If present, url must
163
+ not be present.\n - It must be between 1 and 1000 in length.\n\n * task\n -
164
+ The name of the task associated with this repository. This is used to\n install
165
+ nodes that match a policy using this repository; generally it\n should match
166
+ the OS that the URL or ISO-URL attributes point to.\n - This attribute is
167
+ required\n - It must be of type string.\n\n\n\n# EXAMPLES\n Create a repository
168
+ from an ISO image, which will be downloaded and unpacked\n by the razor-server
169
+ in the background:\n \n {\n \"name\": \"fedora19\",\n \"iso-url\":
170
+ \"http://example.com/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n You
171
+ can also unpack an ISO image from a file *on the server*; this does not\n upload
172
+ the file from the client:\n {\n \"name\": \"fedora19\",\n \"iso-url\":
173
+ \"file:///tmp/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n Finally,
174
+ you can providing a `url` property when you create the repository;\n this
175
+ form is merely a pointer to a resource somehwere and nothing will be\n downloaded
176
+ onto the Razor server:\n \n {\n \"name\": \"fedora19\",\n \"url\": \"http://mirrors.n-ix.net/fedora/linux/releases/19/Fedora/x86_64/os/\"\n \"task\":
177
+ \"fedora\"\n }\n\n"},"schema":{"name":{"type":"string"},"url":{"type":"string"},"iso-url":{"type":"string"},"task":{"type":"string"}}}'
178
+ http_version:
179
+ recorded_at: Fri, 16 May 2014 22:18:15 GMT
180
+ - request:
181
+ method: get
182
+ uri: http://localhost:8080/api/commands/create-repo
183
+ body:
184
+ encoding: US-ASCII
185
+ string: ''
186
+ headers:
187
+ Accept:
188
+ - application/json
189
+ Accept-Encoding:
190
+ - gzip, deflate
191
+ User-Agent:
192
+ - Ruby
193
+ response:
194
+ status:
195
+ code: 200
196
+ message: OK
197
+ headers:
198
+ Server:
199
+ - Apache-Coyote/1.1
200
+ Etag:
201
+ - '"server-version-v0.14.1-113-g8b33d83-dirty"'
202
+ X-Content-Type-Options:
203
+ - nosniff
204
+ Content-Type:
205
+ - application/json;charset=utf-8
206
+ Content-Length:
207
+ - '3227'
208
+ Date:
209
+ - Fri, 16 May 2014 22:18:15 GMT
210
+ body:
211
+ encoding: US-ASCII
212
+ string: '{"name":"create-repo","help":{"full":"# SYNOPSIS\nCreate a new repository,
213
+ from an ISO image or a URL\n\n# DESCRIPTION\nCreate a new repository, which
214
+ can either contain the content to install a\nnode, or simply point to an existing
215
+ online repository by URL.\n\n\n# Access Control\n\nThis command''s access
216
+ control pattern: `commands:create-repo:%{name}`\n\nWords surrounded by `%{...}`
217
+ are substitutions from the input data: typically\nthe name of the object being
218
+ modified, or some other critical detail, these\nallow roles to be granted
219
+ partial access to modify the system.\n\nFor more detail on how the permission
220
+ strings are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
221
+ pattern is expanded\nand then a permission check applied to it, before the
222
+ command is authorized.\n\nThese checks only apply if security is enabled in
223
+ the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
224
+ http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * name\n -
225
+ The name of the repository.\n - This attribute is required\n - It must
226
+ be of type string.\n - It must be between 1 and 250 in length.\n\n * url\n -
227
+ The URL of the remote repository to use.\n - It must be of type string.\n -
228
+ If present, iso-url must not be present.\n - It must be between 1 and 1000
229
+ in length.\n\n * iso-url\n - The URL of the ISO image to download and unpack
230
+ to create the\n repository. This can be an HTTP or HTTPS URL, or it can
231
+ be a\n file URL.\n \n In the later case, the file path is interpreted
232
+ as a path on the\n Razor server, rather than a path on the client. This
233
+ requires that\n you manually place the ISO image on the server before invoking
234
+ the\n command.\n - It must be of type string.\n - If present, url must
235
+ not be present.\n - It must be between 1 and 1000 in length.\n\n * task\n -
236
+ The name of the task associated with this repository. This is used to\n install
237
+ nodes that match a policy using this repository; generally it\n should match
238
+ the OS that the URL or ISO-URL attributes point to.\n - This attribute is
239
+ required\n - It must be of type string.\n\n\n\n# EXAMPLES\n Create a repository
240
+ from an ISO image, which will be downloaded and unpacked\n by the razor-server
241
+ in the background:\n \n {\n \"name\": \"fedora19\",\n \"iso-url\":
242
+ \"http://example.com/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n You
243
+ can also unpack an ISO image from a file *on the server*; this does not\n upload
244
+ the file from the client:\n {\n \"name\": \"fedora19\",\n \"iso-url\":
245
+ \"file:///tmp/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n Finally,
246
+ you can providing a `url` property when you create the repository;\n this
247
+ form is merely a pointer to a resource somehwere and nothing will be\n downloaded
248
+ onto the Razor server:\n \n {\n \"name\": \"fedora19\",\n \"url\": \"http://mirrors.n-ix.net/fedora/linux/releases/19/Fedora/x86_64/os/\"\n \"task\":
249
+ \"fedora\"\n }\n\n"},"schema":{"name":{"type":"string"},"url":{"type":"string"},"iso-url":{"type":"string"},"task":{"type":"string"}}}'
250
+ http_version:
251
+ recorded_at: Fri, 16 May 2014 22:18:15 GMT
252
+ - request:
253
+ method: post
254
+ uri: http://localhost:8080/api/commands/create-repo
255
+ body:
256
+ encoding: UTF-8
257
+ string: '{"name":"name","url":"http://url.com/some.iso","task":"noop"}'
258
+ headers:
259
+ Accept:
260
+ - application/json
261
+ Accept-Encoding:
262
+ - gzip, deflate
263
+ Content-Type:
264
+ - application/json
265
+ Content-Length:
266
+ - '61'
267
+ User-Agent:
268
+ - Ruby
269
+ response:
270
+ status:
271
+ code: 202
272
+ message: Accepted
273
+ headers:
274
+ Server:
275
+ - Apache-Coyote/1.1
276
+ X-Content-Type-Options:
277
+ - nosniff
278
+ Content-Type:
279
+ - application/json;charset=utf-8
280
+ Content-Length:
281
+ - '201'
282
+ Date:
283
+ - Fri, 16 May 2014 22:18:15 GMT
284
+ body:
285
+ encoding: US-ASCII
286
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/repos/member","id":"http://localhost:8080/api/collections/repos/name","name":"name","command":"http://localhost:8080/api/collections/commands/1"}'
287
+ http_version:
288
+ recorded_at: Fri, 16 May 2014 22:18:15 GMT
289
+ - request:
290
+ method: get
291
+ uri: http://localhost:8080/api/collections/repos/name
292
+ body:
293
+ encoding: US-ASCII
294
+ string: ''
295
+ headers:
296
+ Accept:
297
+ - application/json
298
+ Accept-Encoding:
299
+ - gzip, deflate
300
+ User-Agent:
301
+ - Ruby
302
+ response:
303
+ status:
304
+ code: 200
305
+ message: OK
306
+ headers:
307
+ Server:
308
+ - Apache-Coyote/1.1
309
+ X-Content-Type-Options:
310
+ - nosniff
311
+ Content-Type:
312
+ - application/json;charset=utf-8
313
+ Content-Length:
314
+ - '335'
315
+ Date:
316
+ - Fri, 16 May 2014 22:18:15 GMT
317
+ body:
318
+ encoding: US-ASCII
319
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/repos/member","id":"http://localhost:8080/api/collections/repos/name","name":"name","iso_url":null,"url":"http://url.com/some.iso","task":{"spec":"http://api.puppetlabs.com/razor/v1/collections/tasks/member","id":"http://localhost:8080/api/collections/tasks/noop","name":"noop"}}'
320
+ http_version:
321
+ recorded_at: Fri, 16 May 2014 22:18:15 GMT
322
+ - request:
323
+ method: get
324
+ uri: http://localhost:8080/api
325
+ body:
326
+ encoding: US-ASCII
327
+ string: ''
328
+ headers:
329
+ Accept:
330
+ - application/json
331
+ Accept-Encoding:
332
+ - gzip, deflate
333
+ User-Agent:
334
+ - Ruby
335
+ response:
336
+ status:
337
+ code: 200
338
+ message: OK
339
+ headers:
340
+ Server:
341
+ - Apache-Coyote/1.1
342
+ X-Content-Type-Options:
343
+ - nosniff
344
+ Content-Type:
345
+ - application/json;charset=utf-8
346
+ Content-Length:
347
+ - '4982'
348
+ Date:
349
+ - Fri, 16 May 2014 22:18:15 GMT
350
+ body:
351
+ encoding: US-ASCII
352
+ string: '{"commands":[{"name":"add-policy-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/add-policy-tag","id":"http://localhost:8080/api/commands/add-policy-tag"},{"name":"create-broker","rel":"http://api.puppetlabs.com/razor/v1/commands/create-broker","id":"http://localhost:8080/api/commands/create-broker"},{"name":"create-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/create-policy","id":"http://localhost:8080/api/commands/create-policy"},{"name":"create-repo","rel":"http://api.puppetlabs.com/razor/v1/commands/create-repo","id":"http://localhost:8080/api/commands/create-repo"},{"name":"create-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/create-tag","id":"http://localhost:8080/api/commands/create-tag"},{"name":"create-task","rel":"http://api.puppetlabs.com/razor/v1/commands/create-task","id":"http://localhost:8080/api/commands/create-task"},{"name":"delete-broker","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-broker","id":"http://localhost:8080/api/commands/delete-broker"},{"name":"delete-node","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-node","id":"http://localhost:8080/api/commands/delete-node"},{"name":"delete-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-policy","id":"http://localhost:8080/api/commands/delete-policy"},{"name":"delete-repo","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-repo","id":"http://localhost:8080/api/commands/delete-repo"},{"name":"delete-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-tag","id":"http://localhost:8080/api/commands/delete-tag"},{"name":"disable-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/disable-policy","id":"http://localhost:8080/api/commands/disable-policy"},{"name":"enable-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/enable-policy","id":"http://localhost:8080/api/commands/enable-policy"},{"name":"modify-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/modify-node-metadata","id":"http://localhost:8080/api/commands/modify-node-metadata"},{"name":"modify-policy-max-count","rel":"http://api.puppetlabs.com/razor/v1/commands/modify-policy-max-count","id":"http://localhost:8080/api/commands/modify-policy-max-count"},{"name":"move-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/move-policy","id":"http://localhost:8080/api/commands/move-policy"},{"name":"reboot-node","rel":"http://api.puppetlabs.com/razor/v1/commands/reboot-node","id":"http://localhost:8080/api/commands/reboot-node"},{"name":"register-node","rel":"http://api.puppetlabs.com/razor/v1/commands/register-node","id":"http://localhost:8080/api/commands/register-node"},{"name":"reinstall-node","rel":"http://api.puppetlabs.com/razor/v1/commands/reinstall-node","id":"http://localhost:8080/api/commands/reinstall-node"},{"name":"remove-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/remove-node-metadata","id":"http://localhost:8080/api/commands/remove-node-metadata"},{"name":"remove-policy-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/remove-policy-tag","id":"http://localhost:8080/api/commands/remove-policy-tag"},{"name":"set-node-desired-power-state","rel":"http://api.puppetlabs.com/razor/v1/commands/set-node-desired-power-state","id":"http://localhost:8080/api/commands/set-node-desired-power-state"},{"name":"set-node-hw-info","rel":"http://api.puppetlabs.com/razor/v1/commands/set-node-hw-info","id":"http://localhost:8080/api/commands/set-node-hw-info"},{"name":"set-node-ipmi-credentials","rel":"http://api.puppetlabs.com/razor/v1/commands/set-node-ipmi-credentials","id":"http://localhost:8080/api/commands/set-node-ipmi-credentials"},{"name":"update-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/update-node-metadata","id":"http://localhost:8080/api/commands/update-node-metadata"},{"name":"update-tag-rule","rel":"http://api.puppetlabs.com/razor/v1/commands/update-tag-rule","id":"http://localhost:8080/api/commands/update-tag-rule"}],"collections":[{"name":"brokers","rel":"http://api.puppetlabs.com/razor/v1/collections/brokers","id":"http://localhost:8080/api/collections/brokers"},{"name":"repos","rel":"http://api.puppetlabs.com/razor/v1/collections/repos","id":"http://localhost:8080/api/collections/repos"},{"name":"tags","rel":"http://api.puppetlabs.com/razor/v1/collections/tags","id":"http://localhost:8080/api/collections/tags"},{"name":"policies","rel":"http://api.puppetlabs.com/razor/v1/collections/policies","id":"http://localhost:8080/api/collections/policies"},{"name":"nodes","rel":"http://api.puppetlabs.com/razor/v1/collections/nodes","id":"http://localhost:8080/api/collections/nodes"},{"name":"tasks","rel":"http://api.puppetlabs.com/razor/v1/collections/tasks","id":"http://localhost:8080/api/collections/tasks"},{"name":"commands","rel":"http://api.puppetlabs.com/razor/v1/collections/commands","id":"http://localhost:8080/api/collections/commands"}],"version":{"server":"v0.14.1-113-g8b33d83-dirty"}}'
353
+ http_version:
354
+ recorded_at: Fri, 16 May 2014 22:18:16 GMT
355
+ - request:
356
+ method: get
357
+ uri: http://localhost:8080/api/commands/create-broker
358
+ body:
359
+ encoding: US-ASCII
360
+ string: ''
361
+ headers:
362
+ Accept:
363
+ - application/json
364
+ Accept-Encoding:
365
+ - gzip, deflate
366
+ User-Agent:
367
+ - Ruby
368
+ response:
369
+ status:
370
+ code: 200
371
+ message: OK
372
+ headers:
373
+ Server:
374
+ - Apache-Coyote/1.1
375
+ Etag:
376
+ - '"server-version-v0.14.1-113-g8b33d83-dirty"'
377
+ X-Content-Type-Options:
378
+ - nosniff
379
+ Content-Type:
380
+ - application/json;charset=utf-8
381
+ Content-Length:
382
+ - '2496'
383
+ Date:
384
+ - Fri, 16 May 2014 22:18:15 GMT
385
+ body:
386
+ encoding: US-ASCII
387
+ string: '{"name":"create-broker","help":{"full":"# SYNOPSIS\nCreate a new broker
388
+ configuration for hand-off of installed nodes\n\n# DESCRIPTION\nCreate a new
389
+ broker configuration. Brokers are responsible for handing a node\noff to
390
+ a config management system, such as Puppet or Chef. In cases where you\nhave
391
+ no configuration management system, you can use the `noop` broker.\n\n\n#
392
+ Access Control\n\nThis command''s access control pattern: `commands:create-broker:%{name}`\n\nWords
393
+ surrounded by `%{...}` are substitutions from the input data: typically\nthe
394
+ name of the object being modified, or some other critical detail, these\nallow
395
+ roles to be granted partial access to modify the system.\n\nFor more detail
396
+ on how the permission strings are structured and work, you can\nsee the [Shiro
397
+ Permissions documentation][shiro]. That pattern is expanded\nand then a permission
398
+ check applied to it, before the command is authorized.\n\nThese checks only
399
+ apply if security is enabled in the Razor configuration\nfile; on this server
400
+ security is currently disabled.\n\n[shiro]: http://shiro.apache.org/permissions.html\n\n#
401
+ Attributes\n\n * name\n - The name of the broker, as it will be referenced
402
+ within Razor.\n This is the name that you supply to, eg, `create-policy`
403
+ to specify\n which broker the node will be handed off via after installation.\n -
404
+ This attribute is required\n - It must be of type string.\n - It must
405
+ be between 1 and 250 in length.\n\n * broker-type\n - The broker type that
406
+ this broker is created from. The available\n broker types on your server
407
+ are:\n - chef\n - noop\n - puppet-pe\n - puppet\n - This
408
+ attribute is required\n - It must be of type string.\n - It must match
409
+ the name of an existing broker type.\n\n * configuration\n - The configuration
410
+ for the broker. The acceptable values here are\n determined by the `broker-type`
411
+ selected. In general this has\n settings like which server to contact,
412
+ and other configuration\n related to handing on the newly installed system
413
+ to the final\n configuration management system.\n - It must be of type
414
+ object.\n \n \n\n\n\n# EXAMPLES\n Creating a simple Puppet broker:\n \n {\n \"name\":
415
+ \"puppet\",\n \"configuration\": {\n \"server\": \"puppet.example.org\",\n \"environment\":
416
+ \"production\"\n },\n \"broker-type\": \"puppet\"\n }\n\n"},"schema":{"name":{"type":"string"},"broker-type":{"type":"string"},"configuration":{"type":"object"}}}'
417
+ http_version:
418
+ recorded_at: Fri, 16 May 2014 22:18:16 GMT
419
+ - request:
420
+ method: get
421
+ uri: http://localhost:8080/api/commands/create-broker
422
+ body:
423
+ encoding: US-ASCII
424
+ string: ''
425
+ headers:
426
+ Accept:
427
+ - application/json
428
+ Accept-Encoding:
429
+ - gzip, deflate
430
+ User-Agent:
431
+ - Ruby
432
+ response:
433
+ status:
434
+ code: 200
435
+ message: OK
436
+ headers:
437
+ Server:
438
+ - Apache-Coyote/1.1
439
+ Etag:
440
+ - '"server-version-v0.14.1-113-g8b33d83-dirty"'
441
+ X-Content-Type-Options:
442
+ - nosniff
443
+ Content-Type:
444
+ - application/json;charset=utf-8
445
+ Content-Length:
446
+ - '2496'
447
+ Date:
448
+ - Fri, 16 May 2014 22:18:15 GMT
449
+ body:
450
+ encoding: US-ASCII
451
+ string: '{"name":"create-broker","help":{"full":"# SYNOPSIS\nCreate a new broker
452
+ configuration for hand-off of installed nodes\n\n# DESCRIPTION\nCreate a new
453
+ broker configuration. Brokers are responsible for handing a node\noff to
454
+ a config management system, such as Puppet or Chef. In cases where you\nhave
455
+ no configuration management system, you can use the `noop` broker.\n\n\n#
456
+ Access Control\n\nThis command''s access control pattern: `commands:create-broker:%{name}`\n\nWords
457
+ surrounded by `%{...}` are substitutions from the input data: typically\nthe
458
+ name of the object being modified, or some other critical detail, these\nallow
459
+ roles to be granted partial access to modify the system.\n\nFor more detail
460
+ on how the permission strings are structured and work, you can\nsee the [Shiro
461
+ Permissions documentation][shiro]. That pattern is expanded\nand then a permission
462
+ check applied to it, before the command is authorized.\n\nThese checks only
463
+ apply if security is enabled in the Razor configuration\nfile; on this server
464
+ security is currently disabled.\n\n[shiro]: http://shiro.apache.org/permissions.html\n\n#
465
+ Attributes\n\n * name\n - The name of the broker, as it will be referenced
466
+ within Razor.\n This is the name that you supply to, eg, `create-policy`
467
+ to specify\n which broker the node will be handed off via after installation.\n -
468
+ This attribute is required\n - It must be of type string.\n - It must
469
+ be between 1 and 250 in length.\n\n * broker-type\n - The broker type that
470
+ this broker is created from. The available\n broker types on your server
471
+ are:\n - chef\n - noop\n - puppet-pe\n - puppet\n - This
472
+ attribute is required\n - It must be of type string.\n - It must match
473
+ the name of an existing broker type.\n\n * configuration\n - The configuration
474
+ for the broker. The acceptable values here are\n determined by the `broker-type`
475
+ selected. In general this has\n settings like which server to contact,
476
+ and other configuration\n related to handing on the newly installed system
477
+ to the final\n configuration management system.\n - It must be of type
478
+ object.\n \n \n\n\n\n# EXAMPLES\n Creating a simple Puppet broker:\n \n {\n \"name\":
479
+ \"puppet\",\n \"configuration\": {\n \"server\": \"puppet.example.org\",\n \"environment\":
480
+ \"production\"\n },\n \"broker-type\": \"puppet\"\n }\n\n"},"schema":{"name":{"type":"string"},"broker-type":{"type":"string"},"configuration":{"type":"object"}}}'
481
+ http_version:
482
+ recorded_at: Fri, 16 May 2014 22:18:16 GMT
483
+ - request:
484
+ method: get
485
+ uri: http://localhost:8080/api/commands/create-broker
486
+ body:
487
+ encoding: US-ASCII
488
+ string: ''
489
+ headers:
490
+ Accept:
491
+ - application/json
492
+ Accept-Encoding:
493
+ - gzip, deflate
494
+ User-Agent:
495
+ - Ruby
496
+ response:
497
+ status:
498
+ code: 200
499
+ message: OK
500
+ headers:
501
+ Server:
502
+ - Apache-Coyote/1.1
503
+ Etag:
504
+ - '"server-version-v0.14.1-113-g8b33d83-dirty"'
505
+ X-Content-Type-Options:
506
+ - nosniff
507
+ Content-Type:
508
+ - application/json;charset=utf-8
509
+ Content-Length:
510
+ - '2496'
511
+ Date:
512
+ - Fri, 16 May 2014 22:18:15 GMT
513
+ body:
514
+ encoding: US-ASCII
515
+ string: '{"name":"create-broker","help":{"full":"# SYNOPSIS\nCreate a new broker
516
+ configuration for hand-off of installed nodes\n\n# DESCRIPTION\nCreate a new
517
+ broker configuration. Brokers are responsible for handing a node\noff to
518
+ a config management system, such as Puppet or Chef. In cases where you\nhave
519
+ no configuration management system, you can use the `noop` broker.\n\n\n#
520
+ Access Control\n\nThis command''s access control pattern: `commands:create-broker:%{name}`\n\nWords
521
+ surrounded by `%{...}` are substitutions from the input data: typically\nthe
522
+ name of the object being modified, or some other critical detail, these\nallow
523
+ roles to be granted partial access to modify the system.\n\nFor more detail
524
+ on how the permission strings are structured and work, you can\nsee the [Shiro
525
+ Permissions documentation][shiro]. That pattern is expanded\nand then a permission
526
+ check applied to it, before the command is authorized.\n\nThese checks only
527
+ apply if security is enabled in the Razor configuration\nfile; on this server
528
+ security is currently disabled.\n\n[shiro]: http://shiro.apache.org/permissions.html\n\n#
529
+ Attributes\n\n * name\n - The name of the broker, as it will be referenced
530
+ within Razor.\n This is the name that you supply to, eg, `create-policy`
531
+ to specify\n which broker the node will be handed off via after installation.\n -
532
+ This attribute is required\n - It must be of type string.\n - It must
533
+ be between 1 and 250 in length.\n\n * broker-type\n - The broker type that
534
+ this broker is created from. The available\n broker types on your server
535
+ are:\n - chef\n - noop\n - puppet-pe\n - puppet\n - This
536
+ attribute is required\n - It must be of type string.\n - It must match
537
+ the name of an existing broker type.\n\n * configuration\n - The configuration
538
+ for the broker. The acceptable values here are\n determined by the `broker-type`
539
+ selected. In general this has\n settings like which server to contact,
540
+ and other configuration\n related to handing on the newly installed system
541
+ to the final\n configuration management system.\n - It must be of type
542
+ object.\n \n \n\n\n\n# EXAMPLES\n Creating a simple Puppet broker:\n \n {\n \"name\":
543
+ \"puppet\",\n \"configuration\": {\n \"server\": \"puppet.example.org\",\n \"environment\":
544
+ \"production\"\n },\n \"broker-type\": \"puppet\"\n }\n\n"},"schema":{"name":{"type":"string"},"broker-type":{"type":"string"},"configuration":{"type":"object"}}}'
545
+ http_version:
546
+ recorded_at: Fri, 16 May 2014 22:18:16 GMT
547
+ - request:
548
+ method: post
549
+ uri: http://localhost:8080/api/commands/create-broker
550
+ body:
551
+ encoding: UTF-8
552
+ string: '{"name":"puppet","configuration":{"server":"puppet.example.org","environment":"production"},"broker-type":"puppet"}'
553
+ headers:
554
+ Accept:
555
+ - application/json
556
+ Accept-Encoding:
557
+ - gzip, deflate
558
+ Content-Type:
559
+ - application/json
560
+ Content-Length:
561
+ - '115'
562
+ User-Agent:
563
+ - Ruby
564
+ response:
565
+ status:
566
+ code: 202
567
+ message: Accepted
568
+ headers:
569
+ Server:
570
+ - Apache-Coyote/1.1
571
+ X-Content-Type-Options:
572
+ - nosniff
573
+ Content-Type:
574
+ - application/json;charset=utf-8
575
+ Content-Length:
576
+ - '209'
577
+ Date:
578
+ - Fri, 16 May 2014 22:18:15 GMT
579
+ body:
580
+ encoding: US-ASCII
581
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/brokers/member","id":"http://localhost:8080/api/collections/brokers/puppet","name":"puppet","command":"http://localhost:8080/api/collections/commands/2"}'
582
+ http_version:
583
+ recorded_at: Fri, 16 May 2014 22:18:16 GMT
584
+ - request:
585
+ method: get
586
+ uri: http://localhost:8080/api/collections/brokers/puppet
587
+ body:
588
+ encoding: US-ASCII
589
+ string: ''
590
+ headers:
591
+ Accept:
592
+ - application/json
593
+ Accept-Encoding:
594
+ - gzip, deflate
595
+ User-Agent:
596
+ - Ruby
597
+ response:
598
+ status:
599
+ code: 200
600
+ message: OK
601
+ headers:
602
+ Server:
603
+ - Apache-Coyote/1.1
604
+ X-Content-Type-Options:
605
+ - nosniff
606
+ Content-Type:
607
+ - application/json;charset=utf-8
608
+ Content-Length:
609
+ - '356'
610
+ Date:
611
+ - Fri, 16 May 2014 22:18:15 GMT
612
+ body:
613
+ encoding: US-ASCII
614
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/brokers/member","id":"http://localhost:8080/api/collections/brokers/puppet","name":"puppet","configuration":{"server":"puppet.example.org","environment":"production"},"broker-type":"puppet","policies":{"id":"http://localhost:8080/api/collections/brokers/puppet/policies","count":0,"name":"policies"}}'
615
+ http_version:
616
+ recorded_at: Fri, 16 May 2014 22:18:16 GMT
617
+ - request:
618
+ method: get
619
+ uri: http://localhost:8080/api
620
+ body:
621
+ encoding: US-ASCII
622
+ string: ''
623
+ headers:
624
+ Accept:
625
+ - application/json
626
+ Accept-Encoding:
627
+ - gzip, deflate
628
+ User-Agent:
629
+ - Ruby
630
+ response:
631
+ status:
632
+ code: 200
633
+ message: OK
634
+ headers:
635
+ Server:
636
+ - Apache-Coyote/1.1
637
+ X-Content-Type-Options:
638
+ - nosniff
639
+ Content-Type:
640
+ - application/json;charset=utf-8
641
+ Content-Length:
642
+ - '4982'
643
+ Date:
644
+ - Fri, 16 May 2014 22:18:15 GMT
645
+ body:
646
+ encoding: US-ASCII
647
+ string: '{"commands":[{"name":"add-policy-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/add-policy-tag","id":"http://localhost:8080/api/commands/add-policy-tag"},{"name":"create-broker","rel":"http://api.puppetlabs.com/razor/v1/commands/create-broker","id":"http://localhost:8080/api/commands/create-broker"},{"name":"create-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/create-policy","id":"http://localhost:8080/api/commands/create-policy"},{"name":"create-repo","rel":"http://api.puppetlabs.com/razor/v1/commands/create-repo","id":"http://localhost:8080/api/commands/create-repo"},{"name":"create-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/create-tag","id":"http://localhost:8080/api/commands/create-tag"},{"name":"create-task","rel":"http://api.puppetlabs.com/razor/v1/commands/create-task","id":"http://localhost:8080/api/commands/create-task"},{"name":"delete-broker","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-broker","id":"http://localhost:8080/api/commands/delete-broker"},{"name":"delete-node","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-node","id":"http://localhost:8080/api/commands/delete-node"},{"name":"delete-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-policy","id":"http://localhost:8080/api/commands/delete-policy"},{"name":"delete-repo","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-repo","id":"http://localhost:8080/api/commands/delete-repo"},{"name":"delete-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-tag","id":"http://localhost:8080/api/commands/delete-tag"},{"name":"disable-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/disable-policy","id":"http://localhost:8080/api/commands/disable-policy"},{"name":"enable-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/enable-policy","id":"http://localhost:8080/api/commands/enable-policy"},{"name":"modify-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/modify-node-metadata","id":"http://localhost:8080/api/commands/modify-node-metadata"},{"name":"modify-policy-max-count","rel":"http://api.puppetlabs.com/razor/v1/commands/modify-policy-max-count","id":"http://localhost:8080/api/commands/modify-policy-max-count"},{"name":"move-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/move-policy","id":"http://localhost:8080/api/commands/move-policy"},{"name":"reboot-node","rel":"http://api.puppetlabs.com/razor/v1/commands/reboot-node","id":"http://localhost:8080/api/commands/reboot-node"},{"name":"register-node","rel":"http://api.puppetlabs.com/razor/v1/commands/register-node","id":"http://localhost:8080/api/commands/register-node"},{"name":"reinstall-node","rel":"http://api.puppetlabs.com/razor/v1/commands/reinstall-node","id":"http://localhost:8080/api/commands/reinstall-node"},{"name":"remove-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/remove-node-metadata","id":"http://localhost:8080/api/commands/remove-node-metadata"},{"name":"remove-policy-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/remove-policy-tag","id":"http://localhost:8080/api/commands/remove-policy-tag"},{"name":"set-node-desired-power-state","rel":"http://api.puppetlabs.com/razor/v1/commands/set-node-desired-power-state","id":"http://localhost:8080/api/commands/set-node-desired-power-state"},{"name":"set-node-hw-info","rel":"http://api.puppetlabs.com/razor/v1/commands/set-node-hw-info","id":"http://localhost:8080/api/commands/set-node-hw-info"},{"name":"set-node-ipmi-credentials","rel":"http://api.puppetlabs.com/razor/v1/commands/set-node-ipmi-credentials","id":"http://localhost:8080/api/commands/set-node-ipmi-credentials"},{"name":"update-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/update-node-metadata","id":"http://localhost:8080/api/commands/update-node-metadata"},{"name":"update-tag-rule","rel":"http://api.puppetlabs.com/razor/v1/commands/update-tag-rule","id":"http://localhost:8080/api/commands/update-tag-rule"}],"collections":[{"name":"brokers","rel":"http://api.puppetlabs.com/razor/v1/collections/brokers","id":"http://localhost:8080/api/collections/brokers"},{"name":"repos","rel":"http://api.puppetlabs.com/razor/v1/collections/repos","id":"http://localhost:8080/api/collections/repos"},{"name":"tags","rel":"http://api.puppetlabs.com/razor/v1/collections/tags","id":"http://localhost:8080/api/collections/tags"},{"name":"policies","rel":"http://api.puppetlabs.com/razor/v1/collections/policies","id":"http://localhost:8080/api/collections/policies"},{"name":"nodes","rel":"http://api.puppetlabs.com/razor/v1/collections/nodes","id":"http://localhost:8080/api/collections/nodes"},{"name":"tasks","rel":"http://api.puppetlabs.com/razor/v1/collections/tasks","id":"http://localhost:8080/api/collections/tasks"},{"name":"commands","rel":"http://api.puppetlabs.com/razor/v1/collections/commands","id":"http://localhost:8080/api/collections/commands"}],"version":{"server":"v0.14.1-113-g8b33d83-dirty"}}'
648
+ http_version:
649
+ recorded_at: Fri, 16 May 2014 22:18:16 GMT
650
+ - request:
651
+ method: get
652
+ uri: http://localhost:8080/api/commands/create-tag
653
+ body:
654
+ encoding: US-ASCII
655
+ string: ''
656
+ headers:
657
+ Accept:
658
+ - application/json
659
+ Accept-Encoding:
660
+ - gzip, deflate
661
+ User-Agent:
662
+ - Ruby
663
+ response:
664
+ status:
665
+ code: 200
666
+ message: OK
667
+ headers:
668
+ Server:
669
+ - Apache-Coyote/1.1
670
+ Etag:
671
+ - '"server-version-v0.14.1-113-g8b33d83-dirty"'
672
+ X-Content-Type-Options:
673
+ - nosniff
674
+ Content-Type:
675
+ - application/json;charset=utf-8
676
+ Content-Length:
677
+ - '2178'
678
+ Date:
679
+ - Fri, 16 May 2014 22:18:15 GMT
680
+ body:
681
+ encoding: ASCII-8BIT
682
+ string: !binary |-
683
+ eyJuYW1lIjoiY3JlYXRlLXRhZyIsImhlbHAiOnsiZnVsbCI6IiMgU1lOT1BT
684
+ SVNcbkNyZWF0ZSBhIG5ldyB0YWdcblxuIyBERVNDUklQVElPTlxuQ3JlYXRl
685
+ IGEgbmV3IHRhZywgYW5kIHNldCB0aGUgcnVsZSBpdCB3aWxsIHVzZSB0byBt
686
+ YXRjaCBvbiBmYWN0cyBhbmQgbm9kZVxubWV0YWRhdGEuXG5cblxuIyBBY2Nl
687
+ c3MgQ29udHJvbFxuXG5UaGlzIGNvbW1hbmQncyBhY2Nlc3MgY29udHJvbCBw
688
+ YXR0ZXJuOiBgY29tbWFuZHM6Y3JlYXRlLXRhZzole25hbWV9YFxuXG5Xb3Jk
689
+ cyBzdXJyb3VuZGVkIGJ5IGAley4uLn1gIGFyZSBzdWJzdGl0dXRpb25zIGZy
690
+ b20gdGhlIGlucHV0IGRhdGE6IHR5cGljYWxseVxudGhlIG5hbWUgb2YgdGhl
691
+ IG9iamVjdCBiZWluZyBtb2RpZmllZCwgb3Igc29tZSBvdGhlciBjcml0aWNh
692
+ bCBkZXRhaWwsIHRoZXNlXG5hbGxvdyByb2xlcyB0byBiZSBncmFudGVkIHBh
693
+ cnRpYWwgYWNjZXNzIHRvIG1vZGlmeSB0aGUgc3lzdGVtLlxuXG5Gb3IgbW9y
694
+ ZSBkZXRhaWwgb24gaG93IHRoZSBwZXJtaXNzaW9uIHN0cmluZ3MgYXJlIHN0
695
+ cnVjdHVyZWQgYW5kIHdvcmssIHlvdSBjYW5cbnNlZSB0aGUgW1NoaXJvIFBl
696
+ cm1pc3Npb25zIGRvY3VtZW50YXRpb25dW3NoaXJvXS4gIFRoYXQgcGF0dGVy
697
+ biBpcyBleHBhbmRlZFxuYW5kIHRoZW4gYSBwZXJtaXNzaW9uIGNoZWNrIGFw
698
+ cGxpZWQgdG8gaXQsIGJlZm9yZSB0aGUgY29tbWFuZCBpcyBhdXRob3JpemVk
699
+ LlxuXG5UaGVzZSBjaGVja3Mgb25seSBhcHBseSBpZiBzZWN1cml0eSBpcyBl
700
+ bmFibGVkIGluIHRoZSBSYXpvciBjb25maWd1cmF0aW9uXG5maWxlOyBvbiB0
701
+ aGlzIHNlcnZlciBzZWN1cml0eSBpcyBjdXJyZW50bHkgZGlzYWJsZWQuXG5c
702
+ bltzaGlyb106IGh0dHA6Ly9zaGlyby5hcGFjaGUub3JnL3Blcm1pc3Npb25z
703
+ Lmh0bWxcblxuIyBBdHRyaWJ1dGVzXG5cbiAqIG5hbWVcbiAgIC0gVGhlIG5h
704
+ bWUgb2YgdGhlIHRhZ1xuICAgLSBUaGlzIGF0dHJpYnV0ZSBpcyByZXF1aXJl
705
+ ZFxuICAgLSBJdCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLlxuICAgLSBJdCBt
706
+ dXN0IGJlIGJldHdlZW4gMSBhbmQgSW5maW5pdHkgaW4gbGVuZ3RoLlxuXG4g
707
+ KiBydWxlXG4gICAtIFRoZSB0YWcgbWF0Y2hlcyBhIG5vZGUgaWYgZXZhbHVh
708
+ dGluZyB0aGlzIHJ1biBhZ2FpbnN0IHRoZSB0YWfigJlzIGZhY3RzXG4gICBy
709
+ ZXN1bHRzIGluIHRydWUuIE5vdGUgdGhhdCB0YWcgbWF0Y2hpbmcgaXMgY2Fz
710
+ ZSBzZW5zaXRpdmUuXG4gICBcbiAgIEZvciBleGFtcGxlLCBoZXJlIGlzIGEg
711
+ dGFnIHJ1bGU6XG4gICBcbiAgICAgICBbXCJvclwiLFxuICAgICAgICBbXCI9
712
+ XCIsIFtcImZhY3RcIiwgXCJtYWNhZGRyZXNzXCJdLCBcImRlOmVhOmRiOmVl
713
+ OmYwOjAwXCJdXG4gICAgICAgIFtcIj1cIiwgW1wiZmFjdFwiLCBcIm1hY2Fk
714
+ ZHJlc3NcIl0sIFwiZGU6ZWE6ZGI6ZWU6ZjA6MDFcIl1dXG4gICBcbiAgIFRo
715
+ ZSB0YWcgY291bGQgYWxzbyBiZSB3cml0dGVuIGxpa2UgdGhpczpcbiAgIFxu
716
+ ICAgICAgIFtcImluXCIsIFtcImZhY3RcIiwgXCJtYWNhZGRyZXNzXCJdLCBc
717
+ ImRlOmVhOmRiOmVlOmYwOjAwXCIsIFwiZGU6ZWE6ZGI6ZWU6ZjA6MDFcIl1c
718
+ biAgIFxuICAgVGhlIHN5bnRheCBmb3IgcnVsZSBleHByZXNzaW9ucyBpcyBk
719
+ ZWZpbmVkIGluXG4gICBgbGliL3Jhem9yL21hdGNoZXIucmJgLiBFeHByZXNz
720
+ aW9ucyBhcmUgb2YgdGhlIGZvcm0gYFtvcCBhcmcxIGFyZzIgLi4gYXJnbl1g
721
+ XG4gICB3aGVyZSBvcCBpcyBvbmUgb2YgdGhlIG9wZXJhdG9ycyBiZWxvdywg
722
+ YW5kIGFyZzEgdGhyb3VnaCBhcmduIGFyZSB0aGVcbiAgIGFyZ3VtZW50cyBm
723
+ b3IgdGhlIG9wZXJhdG9yLiBJZiB0aGV5IGFyZSBleHByZXNzaW9ucyB0aGVt
724
+ c2VsdmVzLCB0aGV5IHdpbGxcbiAgIGJlIGV2YWx1YXRlZCBiZWZvcmUgb3Ag
725
+ aXMgZXZhbHVhdGVkXG4gICAtIFRoaXMgYXR0cmlidXRlIGlzIHJlcXVpcmVk
726
+ XG4gICAtIEl0IG11c3QgYmUgb2YgdHlwZSBhcnJheS5cblxuXG5cbiMgRVhB
727
+ TVBMRVNcbiAgQ3JlYXRlIGEgc2ltcGxlIHRhZzpcbiAgXG4gIHtcbiAgICBc
728
+ Im5hbWVcIjogXCJzbWFsbFwiLFxuICAgIFwicnVsZVwiOiBbXCI9XCIsIFtc
729
+ ImZhY3RcIiwgXCJwcm9jZXNzb3Jjb3VudFwiXSwgXCIyXCJdXG4gIH1cblxu
730
+ In0sInNjaGVtYSI6eyJuYW1lIjp7InR5cGUiOiJzdHJpbmcifSwicnVsZSI6
731
+ eyJ0eXBlIjoiYXJyYXkifX19
732
+ http_version:
733
+ recorded_at: Fri, 16 May 2014 22:18:16 GMT
734
+ - request:
735
+ method: get
736
+ uri: http://localhost:8080/api/commands/create-tag
737
+ body:
738
+ encoding: US-ASCII
739
+ string: ''
740
+ headers:
741
+ Accept:
742
+ - application/json
743
+ Accept-Encoding:
744
+ - gzip, deflate
745
+ User-Agent:
746
+ - Ruby
747
+ response:
748
+ status:
749
+ code: 200
750
+ message: OK
751
+ headers:
752
+ Server:
753
+ - Apache-Coyote/1.1
754
+ Etag:
755
+ - '"server-version-v0.14.1-113-g8b33d83-dirty"'
756
+ X-Content-Type-Options:
757
+ - nosniff
758
+ Content-Type:
759
+ - application/json;charset=utf-8
760
+ Content-Length:
761
+ - '2178'
762
+ Date:
763
+ - Fri, 16 May 2014 22:18:15 GMT
764
+ body:
765
+ encoding: ASCII-8BIT
766
+ string: !binary |-
767
+ eyJuYW1lIjoiY3JlYXRlLXRhZyIsImhlbHAiOnsiZnVsbCI6IiMgU1lOT1BT
768
+ SVNcbkNyZWF0ZSBhIG5ldyB0YWdcblxuIyBERVNDUklQVElPTlxuQ3JlYXRl
769
+ IGEgbmV3IHRhZywgYW5kIHNldCB0aGUgcnVsZSBpdCB3aWxsIHVzZSB0byBt
770
+ YXRjaCBvbiBmYWN0cyBhbmQgbm9kZVxubWV0YWRhdGEuXG5cblxuIyBBY2Nl
771
+ c3MgQ29udHJvbFxuXG5UaGlzIGNvbW1hbmQncyBhY2Nlc3MgY29udHJvbCBw
772
+ YXR0ZXJuOiBgY29tbWFuZHM6Y3JlYXRlLXRhZzole25hbWV9YFxuXG5Xb3Jk
773
+ cyBzdXJyb3VuZGVkIGJ5IGAley4uLn1gIGFyZSBzdWJzdGl0dXRpb25zIGZy
774
+ b20gdGhlIGlucHV0IGRhdGE6IHR5cGljYWxseVxudGhlIG5hbWUgb2YgdGhl
775
+ IG9iamVjdCBiZWluZyBtb2RpZmllZCwgb3Igc29tZSBvdGhlciBjcml0aWNh
776
+ bCBkZXRhaWwsIHRoZXNlXG5hbGxvdyByb2xlcyB0byBiZSBncmFudGVkIHBh
777
+ cnRpYWwgYWNjZXNzIHRvIG1vZGlmeSB0aGUgc3lzdGVtLlxuXG5Gb3IgbW9y
778
+ ZSBkZXRhaWwgb24gaG93IHRoZSBwZXJtaXNzaW9uIHN0cmluZ3MgYXJlIHN0
779
+ cnVjdHVyZWQgYW5kIHdvcmssIHlvdSBjYW5cbnNlZSB0aGUgW1NoaXJvIFBl
780
+ cm1pc3Npb25zIGRvY3VtZW50YXRpb25dW3NoaXJvXS4gIFRoYXQgcGF0dGVy
781
+ biBpcyBleHBhbmRlZFxuYW5kIHRoZW4gYSBwZXJtaXNzaW9uIGNoZWNrIGFw
782
+ cGxpZWQgdG8gaXQsIGJlZm9yZSB0aGUgY29tbWFuZCBpcyBhdXRob3JpemVk
783
+ LlxuXG5UaGVzZSBjaGVja3Mgb25seSBhcHBseSBpZiBzZWN1cml0eSBpcyBl
784
+ bmFibGVkIGluIHRoZSBSYXpvciBjb25maWd1cmF0aW9uXG5maWxlOyBvbiB0
785
+ aGlzIHNlcnZlciBzZWN1cml0eSBpcyBjdXJyZW50bHkgZGlzYWJsZWQuXG5c
786
+ bltzaGlyb106IGh0dHA6Ly9zaGlyby5hcGFjaGUub3JnL3Blcm1pc3Npb25z
787
+ Lmh0bWxcblxuIyBBdHRyaWJ1dGVzXG5cbiAqIG5hbWVcbiAgIC0gVGhlIG5h
788
+ bWUgb2YgdGhlIHRhZ1xuICAgLSBUaGlzIGF0dHJpYnV0ZSBpcyByZXF1aXJl
789
+ ZFxuICAgLSBJdCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLlxuICAgLSBJdCBt
790
+ dXN0IGJlIGJldHdlZW4gMSBhbmQgSW5maW5pdHkgaW4gbGVuZ3RoLlxuXG4g
791
+ KiBydWxlXG4gICAtIFRoZSB0YWcgbWF0Y2hlcyBhIG5vZGUgaWYgZXZhbHVh
792
+ dGluZyB0aGlzIHJ1biBhZ2FpbnN0IHRoZSB0YWfigJlzIGZhY3RzXG4gICBy
793
+ ZXN1bHRzIGluIHRydWUuIE5vdGUgdGhhdCB0YWcgbWF0Y2hpbmcgaXMgY2Fz
794
+ ZSBzZW5zaXRpdmUuXG4gICBcbiAgIEZvciBleGFtcGxlLCBoZXJlIGlzIGEg
795
+ dGFnIHJ1bGU6XG4gICBcbiAgICAgICBbXCJvclwiLFxuICAgICAgICBbXCI9
796
+ XCIsIFtcImZhY3RcIiwgXCJtYWNhZGRyZXNzXCJdLCBcImRlOmVhOmRiOmVl
797
+ OmYwOjAwXCJdXG4gICAgICAgIFtcIj1cIiwgW1wiZmFjdFwiLCBcIm1hY2Fk
798
+ ZHJlc3NcIl0sIFwiZGU6ZWE6ZGI6ZWU6ZjA6MDFcIl1dXG4gICBcbiAgIFRo
799
+ ZSB0YWcgY291bGQgYWxzbyBiZSB3cml0dGVuIGxpa2UgdGhpczpcbiAgIFxu
800
+ ICAgICAgIFtcImluXCIsIFtcImZhY3RcIiwgXCJtYWNhZGRyZXNzXCJdLCBc
801
+ ImRlOmVhOmRiOmVlOmYwOjAwXCIsIFwiZGU6ZWE6ZGI6ZWU6ZjA6MDFcIl1c
802
+ biAgIFxuICAgVGhlIHN5bnRheCBmb3IgcnVsZSBleHByZXNzaW9ucyBpcyBk
803
+ ZWZpbmVkIGluXG4gICBgbGliL3Jhem9yL21hdGNoZXIucmJgLiBFeHByZXNz
804
+ aW9ucyBhcmUgb2YgdGhlIGZvcm0gYFtvcCBhcmcxIGFyZzIgLi4gYXJnbl1g
805
+ XG4gICB3aGVyZSBvcCBpcyBvbmUgb2YgdGhlIG9wZXJhdG9ycyBiZWxvdywg
806
+ YW5kIGFyZzEgdGhyb3VnaCBhcmduIGFyZSB0aGVcbiAgIGFyZ3VtZW50cyBm
807
+ b3IgdGhlIG9wZXJhdG9yLiBJZiB0aGV5IGFyZSBleHByZXNzaW9ucyB0aGVt
808
+ c2VsdmVzLCB0aGV5IHdpbGxcbiAgIGJlIGV2YWx1YXRlZCBiZWZvcmUgb3Ag
809
+ aXMgZXZhbHVhdGVkXG4gICAtIFRoaXMgYXR0cmlidXRlIGlzIHJlcXVpcmVk
810
+ XG4gICAtIEl0IG11c3QgYmUgb2YgdHlwZSBhcnJheS5cblxuXG5cbiMgRVhB
811
+ TVBMRVNcbiAgQ3JlYXRlIGEgc2ltcGxlIHRhZzpcbiAgXG4gIHtcbiAgICBc
812
+ Im5hbWVcIjogXCJzbWFsbFwiLFxuICAgIFwicnVsZVwiOiBbXCI9XCIsIFtc
813
+ ImZhY3RcIiwgXCJwcm9jZXNzb3Jjb3VudFwiXSwgXCIyXCJdXG4gIH1cblxu
814
+ In0sInNjaGVtYSI6eyJuYW1lIjp7InR5cGUiOiJzdHJpbmcifSwicnVsZSI6
815
+ eyJ0eXBlIjoiYXJyYXkifX19
816
+ http_version:
817
+ recorded_at: Fri, 16 May 2014 22:18:16 GMT
818
+ - request:
819
+ method: post
820
+ uri: http://localhost:8080/api/commands/create-tag
821
+ body:
822
+ encoding: UTF-8
823
+ string: '{"name":"tag1","rule":["=",["fact","processorcount"],"1"]}'
824
+ headers:
825
+ Accept:
826
+ - application/json
827
+ Accept-Encoding:
828
+ - gzip, deflate
829
+ Content-Type:
830
+ - application/json
831
+ Content-Length:
832
+ - '58'
833
+ User-Agent:
834
+ - Ruby
835
+ response:
836
+ status:
837
+ code: 202
838
+ message: Accepted
839
+ headers:
840
+ Server:
841
+ - Apache-Coyote/1.1
842
+ X-Content-Type-Options:
843
+ - nosniff
844
+ Content-Type:
845
+ - application/json;charset=utf-8
846
+ Content-Length:
847
+ - '199'
848
+ Date:
849
+ - Fri, 16 May 2014 22:18:15 GMT
850
+ body:
851
+ encoding: US-ASCII
852
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/tags/member","id":"http://localhost:8080/api/collections/tags/tag1","name":"tag1","command":"http://localhost:8080/api/collections/commands/3"}'
853
+ http_version:
854
+ recorded_at: Fri, 16 May 2014 22:18:16 GMT
855
+ - request:
856
+ method: get
857
+ uri: http://localhost:8080/api/collections/tags/tag1
858
+ body:
859
+ encoding: US-ASCII
860
+ string: ''
861
+ headers:
862
+ Accept:
863
+ - application/json
864
+ Accept-Encoding:
865
+ - gzip, deflate
866
+ User-Agent:
867
+ - Ruby
868
+ response:
869
+ status:
870
+ code: 200
871
+ message: OK
872
+ headers:
873
+ Server:
874
+ - Apache-Coyote/1.1
875
+ X-Content-Type-Options:
876
+ - nosniff
877
+ Content-Type:
878
+ - application/json;charset=utf-8
879
+ Content-Length:
880
+ - '382'
881
+ Date:
882
+ - Fri, 16 May 2014 22:18:15 GMT
883
+ body:
884
+ encoding: US-ASCII
885
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/tags/member","id":"http://localhost:8080/api/collections/tags/tag1","name":"tag1","rule":["=",["fact","processorcount"],"1"],"nodes":{"id":"http://localhost:8080/api/collections/tags/tag1/nodes","count":0,"name":"nodes"},"policies":{"id":"http://localhost:8080/api/collections/tags/tag1/policies","count":0,"name":"policies"}}'
886
+ http_version:
887
+ recorded_at: Fri, 16 May 2014 22:18:16 GMT
888
+ - request:
889
+ method: get
890
+ uri: http://localhost:8080/api
891
+ body:
892
+ encoding: US-ASCII
893
+ string: ''
894
+ headers:
895
+ Accept:
896
+ - application/json
897
+ Accept-Encoding:
898
+ - gzip, deflate
899
+ User-Agent:
900
+ - Ruby
901
+ response:
902
+ status:
903
+ code: 200
904
+ message: OK
905
+ headers:
906
+ Server:
907
+ - Apache-Coyote/1.1
908
+ X-Content-Type-Options:
909
+ - nosniff
910
+ Content-Type:
911
+ - application/json;charset=utf-8
912
+ Content-Length:
913
+ - '4982'
914
+ Date:
915
+ - Fri, 16 May 2014 22:18:15 GMT
916
+ body:
917
+ encoding: US-ASCII
918
+ string: '{"commands":[{"name":"add-policy-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/add-policy-tag","id":"http://localhost:8080/api/commands/add-policy-tag"},{"name":"create-broker","rel":"http://api.puppetlabs.com/razor/v1/commands/create-broker","id":"http://localhost:8080/api/commands/create-broker"},{"name":"create-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/create-policy","id":"http://localhost:8080/api/commands/create-policy"},{"name":"create-repo","rel":"http://api.puppetlabs.com/razor/v1/commands/create-repo","id":"http://localhost:8080/api/commands/create-repo"},{"name":"create-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/create-tag","id":"http://localhost:8080/api/commands/create-tag"},{"name":"create-task","rel":"http://api.puppetlabs.com/razor/v1/commands/create-task","id":"http://localhost:8080/api/commands/create-task"},{"name":"delete-broker","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-broker","id":"http://localhost:8080/api/commands/delete-broker"},{"name":"delete-node","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-node","id":"http://localhost:8080/api/commands/delete-node"},{"name":"delete-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-policy","id":"http://localhost:8080/api/commands/delete-policy"},{"name":"delete-repo","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-repo","id":"http://localhost:8080/api/commands/delete-repo"},{"name":"delete-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-tag","id":"http://localhost:8080/api/commands/delete-tag"},{"name":"disable-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/disable-policy","id":"http://localhost:8080/api/commands/disable-policy"},{"name":"enable-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/enable-policy","id":"http://localhost:8080/api/commands/enable-policy"},{"name":"modify-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/modify-node-metadata","id":"http://localhost:8080/api/commands/modify-node-metadata"},{"name":"modify-policy-max-count","rel":"http://api.puppetlabs.com/razor/v1/commands/modify-policy-max-count","id":"http://localhost:8080/api/commands/modify-policy-max-count"},{"name":"move-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/move-policy","id":"http://localhost:8080/api/commands/move-policy"},{"name":"reboot-node","rel":"http://api.puppetlabs.com/razor/v1/commands/reboot-node","id":"http://localhost:8080/api/commands/reboot-node"},{"name":"register-node","rel":"http://api.puppetlabs.com/razor/v1/commands/register-node","id":"http://localhost:8080/api/commands/register-node"},{"name":"reinstall-node","rel":"http://api.puppetlabs.com/razor/v1/commands/reinstall-node","id":"http://localhost:8080/api/commands/reinstall-node"},{"name":"remove-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/remove-node-metadata","id":"http://localhost:8080/api/commands/remove-node-metadata"},{"name":"remove-policy-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/remove-policy-tag","id":"http://localhost:8080/api/commands/remove-policy-tag"},{"name":"set-node-desired-power-state","rel":"http://api.puppetlabs.com/razor/v1/commands/set-node-desired-power-state","id":"http://localhost:8080/api/commands/set-node-desired-power-state"},{"name":"set-node-hw-info","rel":"http://api.puppetlabs.com/razor/v1/commands/set-node-hw-info","id":"http://localhost:8080/api/commands/set-node-hw-info"},{"name":"set-node-ipmi-credentials","rel":"http://api.puppetlabs.com/razor/v1/commands/set-node-ipmi-credentials","id":"http://localhost:8080/api/commands/set-node-ipmi-credentials"},{"name":"update-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/update-node-metadata","id":"http://localhost:8080/api/commands/update-node-metadata"},{"name":"update-tag-rule","rel":"http://api.puppetlabs.com/razor/v1/commands/update-tag-rule","id":"http://localhost:8080/api/commands/update-tag-rule"}],"collections":[{"name":"brokers","rel":"http://api.puppetlabs.com/razor/v1/collections/brokers","id":"http://localhost:8080/api/collections/brokers"},{"name":"repos","rel":"http://api.puppetlabs.com/razor/v1/collections/repos","id":"http://localhost:8080/api/collections/repos"},{"name":"tags","rel":"http://api.puppetlabs.com/razor/v1/collections/tags","id":"http://localhost:8080/api/collections/tags"},{"name":"policies","rel":"http://api.puppetlabs.com/razor/v1/collections/policies","id":"http://localhost:8080/api/collections/policies"},{"name":"nodes","rel":"http://api.puppetlabs.com/razor/v1/collections/nodes","id":"http://localhost:8080/api/collections/nodes"},{"name":"tasks","rel":"http://api.puppetlabs.com/razor/v1/collections/tasks","id":"http://localhost:8080/api/collections/tasks"},{"name":"commands","rel":"http://api.puppetlabs.com/razor/v1/collections/commands","id":"http://localhost:8080/api/collections/commands"}],"version":{"server":"v0.14.1-113-g8b33d83-dirty"}}'
919
+ http_version:
920
+ recorded_at: Fri, 16 May 2014 22:18:16 GMT
921
+ - request:
922
+ method: get
923
+ uri: http://localhost:8080/api/commands/create-tag
924
+ body:
925
+ encoding: US-ASCII
926
+ string: ''
927
+ headers:
928
+ Accept:
929
+ - application/json
930
+ Accept-Encoding:
931
+ - gzip, deflate
932
+ User-Agent:
933
+ - Ruby
934
+ response:
935
+ status:
936
+ code: 200
937
+ message: OK
938
+ headers:
939
+ Server:
940
+ - Apache-Coyote/1.1
941
+ Etag:
942
+ - '"server-version-v0.14.1-113-g8b33d83-dirty"'
943
+ X-Content-Type-Options:
944
+ - nosniff
945
+ Content-Type:
946
+ - application/json;charset=utf-8
947
+ Content-Length:
948
+ - '2178'
949
+ Date:
950
+ - Fri, 16 May 2014 22:18:15 GMT
951
+ body:
952
+ encoding: ASCII-8BIT
953
+ string: !binary |-
954
+ eyJuYW1lIjoiY3JlYXRlLXRhZyIsImhlbHAiOnsiZnVsbCI6IiMgU1lOT1BT
955
+ SVNcbkNyZWF0ZSBhIG5ldyB0YWdcblxuIyBERVNDUklQVElPTlxuQ3JlYXRl
956
+ IGEgbmV3IHRhZywgYW5kIHNldCB0aGUgcnVsZSBpdCB3aWxsIHVzZSB0byBt
957
+ YXRjaCBvbiBmYWN0cyBhbmQgbm9kZVxubWV0YWRhdGEuXG5cblxuIyBBY2Nl
958
+ c3MgQ29udHJvbFxuXG5UaGlzIGNvbW1hbmQncyBhY2Nlc3MgY29udHJvbCBw
959
+ YXR0ZXJuOiBgY29tbWFuZHM6Y3JlYXRlLXRhZzole25hbWV9YFxuXG5Xb3Jk
960
+ cyBzdXJyb3VuZGVkIGJ5IGAley4uLn1gIGFyZSBzdWJzdGl0dXRpb25zIGZy
961
+ b20gdGhlIGlucHV0IGRhdGE6IHR5cGljYWxseVxudGhlIG5hbWUgb2YgdGhl
962
+ IG9iamVjdCBiZWluZyBtb2RpZmllZCwgb3Igc29tZSBvdGhlciBjcml0aWNh
963
+ bCBkZXRhaWwsIHRoZXNlXG5hbGxvdyByb2xlcyB0byBiZSBncmFudGVkIHBh
964
+ cnRpYWwgYWNjZXNzIHRvIG1vZGlmeSB0aGUgc3lzdGVtLlxuXG5Gb3IgbW9y
965
+ ZSBkZXRhaWwgb24gaG93IHRoZSBwZXJtaXNzaW9uIHN0cmluZ3MgYXJlIHN0
966
+ cnVjdHVyZWQgYW5kIHdvcmssIHlvdSBjYW5cbnNlZSB0aGUgW1NoaXJvIFBl
967
+ cm1pc3Npb25zIGRvY3VtZW50YXRpb25dW3NoaXJvXS4gIFRoYXQgcGF0dGVy
968
+ biBpcyBleHBhbmRlZFxuYW5kIHRoZW4gYSBwZXJtaXNzaW9uIGNoZWNrIGFw
969
+ cGxpZWQgdG8gaXQsIGJlZm9yZSB0aGUgY29tbWFuZCBpcyBhdXRob3JpemVk
970
+ LlxuXG5UaGVzZSBjaGVja3Mgb25seSBhcHBseSBpZiBzZWN1cml0eSBpcyBl
971
+ bmFibGVkIGluIHRoZSBSYXpvciBjb25maWd1cmF0aW9uXG5maWxlOyBvbiB0
972
+ aGlzIHNlcnZlciBzZWN1cml0eSBpcyBjdXJyZW50bHkgZGlzYWJsZWQuXG5c
973
+ bltzaGlyb106IGh0dHA6Ly9zaGlyby5hcGFjaGUub3JnL3Blcm1pc3Npb25z
974
+ Lmh0bWxcblxuIyBBdHRyaWJ1dGVzXG5cbiAqIG5hbWVcbiAgIC0gVGhlIG5h
975
+ bWUgb2YgdGhlIHRhZ1xuICAgLSBUaGlzIGF0dHJpYnV0ZSBpcyByZXF1aXJl
976
+ ZFxuICAgLSBJdCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLlxuICAgLSBJdCBt
977
+ dXN0IGJlIGJldHdlZW4gMSBhbmQgSW5maW5pdHkgaW4gbGVuZ3RoLlxuXG4g
978
+ KiBydWxlXG4gICAtIFRoZSB0YWcgbWF0Y2hlcyBhIG5vZGUgaWYgZXZhbHVh
979
+ dGluZyB0aGlzIHJ1biBhZ2FpbnN0IHRoZSB0YWfigJlzIGZhY3RzXG4gICBy
980
+ ZXN1bHRzIGluIHRydWUuIE5vdGUgdGhhdCB0YWcgbWF0Y2hpbmcgaXMgY2Fz
981
+ ZSBzZW5zaXRpdmUuXG4gICBcbiAgIEZvciBleGFtcGxlLCBoZXJlIGlzIGEg
982
+ dGFnIHJ1bGU6XG4gICBcbiAgICAgICBbXCJvclwiLFxuICAgICAgICBbXCI9
983
+ XCIsIFtcImZhY3RcIiwgXCJtYWNhZGRyZXNzXCJdLCBcImRlOmVhOmRiOmVl
984
+ OmYwOjAwXCJdXG4gICAgICAgIFtcIj1cIiwgW1wiZmFjdFwiLCBcIm1hY2Fk
985
+ ZHJlc3NcIl0sIFwiZGU6ZWE6ZGI6ZWU6ZjA6MDFcIl1dXG4gICBcbiAgIFRo
986
+ ZSB0YWcgY291bGQgYWxzbyBiZSB3cml0dGVuIGxpa2UgdGhpczpcbiAgIFxu
987
+ ICAgICAgIFtcImluXCIsIFtcImZhY3RcIiwgXCJtYWNhZGRyZXNzXCJdLCBc
988
+ ImRlOmVhOmRiOmVlOmYwOjAwXCIsIFwiZGU6ZWE6ZGI6ZWU6ZjA6MDFcIl1c
989
+ biAgIFxuICAgVGhlIHN5bnRheCBmb3IgcnVsZSBleHByZXNzaW9ucyBpcyBk
990
+ ZWZpbmVkIGluXG4gICBgbGliL3Jhem9yL21hdGNoZXIucmJgLiBFeHByZXNz
991
+ aW9ucyBhcmUgb2YgdGhlIGZvcm0gYFtvcCBhcmcxIGFyZzIgLi4gYXJnbl1g
992
+ XG4gICB3aGVyZSBvcCBpcyBvbmUgb2YgdGhlIG9wZXJhdG9ycyBiZWxvdywg
993
+ YW5kIGFyZzEgdGhyb3VnaCBhcmduIGFyZSB0aGVcbiAgIGFyZ3VtZW50cyBm
994
+ b3IgdGhlIG9wZXJhdG9yLiBJZiB0aGV5IGFyZSBleHByZXNzaW9ucyB0aGVt
995
+ c2VsdmVzLCB0aGV5IHdpbGxcbiAgIGJlIGV2YWx1YXRlZCBiZWZvcmUgb3Ag
996
+ aXMgZXZhbHVhdGVkXG4gICAtIFRoaXMgYXR0cmlidXRlIGlzIHJlcXVpcmVk
997
+ XG4gICAtIEl0IG11c3QgYmUgb2YgdHlwZSBhcnJheS5cblxuXG5cbiMgRVhB
998
+ TVBMRVNcbiAgQ3JlYXRlIGEgc2ltcGxlIHRhZzpcbiAgXG4gIHtcbiAgICBc
999
+ Im5hbWVcIjogXCJzbWFsbFwiLFxuICAgIFwicnVsZVwiOiBbXCI9XCIsIFtc
1000
+ ImZhY3RcIiwgXCJwcm9jZXNzb3Jjb3VudFwiXSwgXCIyXCJdXG4gIH1cblxu
1001
+ In0sInNjaGVtYSI6eyJuYW1lIjp7InR5cGUiOiJzdHJpbmcifSwicnVsZSI6
1002
+ eyJ0eXBlIjoiYXJyYXkifX19
1003
+ http_version:
1004
+ recorded_at: Fri, 16 May 2014 22:18:16 GMT
1005
+ - request:
1006
+ method: get
1007
+ uri: http://localhost:8080/api/commands/create-tag
1008
+ body:
1009
+ encoding: US-ASCII
1010
+ string: ''
1011
+ headers:
1012
+ Accept:
1013
+ - application/json
1014
+ Accept-Encoding:
1015
+ - gzip, deflate
1016
+ User-Agent:
1017
+ - Ruby
1018
+ response:
1019
+ status:
1020
+ code: 200
1021
+ message: OK
1022
+ headers:
1023
+ Server:
1024
+ - Apache-Coyote/1.1
1025
+ Etag:
1026
+ - '"server-version-v0.14.1-113-g8b33d83-dirty"'
1027
+ X-Content-Type-Options:
1028
+ - nosniff
1029
+ Content-Type:
1030
+ - application/json;charset=utf-8
1031
+ Content-Length:
1032
+ - '2178'
1033
+ Date:
1034
+ - Fri, 16 May 2014 22:18:15 GMT
1035
+ body:
1036
+ encoding: ASCII-8BIT
1037
+ string: !binary |-
1038
+ eyJuYW1lIjoiY3JlYXRlLXRhZyIsImhlbHAiOnsiZnVsbCI6IiMgU1lOT1BT
1039
+ SVNcbkNyZWF0ZSBhIG5ldyB0YWdcblxuIyBERVNDUklQVElPTlxuQ3JlYXRl
1040
+ IGEgbmV3IHRhZywgYW5kIHNldCB0aGUgcnVsZSBpdCB3aWxsIHVzZSB0byBt
1041
+ YXRjaCBvbiBmYWN0cyBhbmQgbm9kZVxubWV0YWRhdGEuXG5cblxuIyBBY2Nl
1042
+ c3MgQ29udHJvbFxuXG5UaGlzIGNvbW1hbmQncyBhY2Nlc3MgY29udHJvbCBw
1043
+ YXR0ZXJuOiBgY29tbWFuZHM6Y3JlYXRlLXRhZzole25hbWV9YFxuXG5Xb3Jk
1044
+ cyBzdXJyb3VuZGVkIGJ5IGAley4uLn1gIGFyZSBzdWJzdGl0dXRpb25zIGZy
1045
+ b20gdGhlIGlucHV0IGRhdGE6IHR5cGljYWxseVxudGhlIG5hbWUgb2YgdGhl
1046
+ IG9iamVjdCBiZWluZyBtb2RpZmllZCwgb3Igc29tZSBvdGhlciBjcml0aWNh
1047
+ bCBkZXRhaWwsIHRoZXNlXG5hbGxvdyByb2xlcyB0byBiZSBncmFudGVkIHBh
1048
+ cnRpYWwgYWNjZXNzIHRvIG1vZGlmeSB0aGUgc3lzdGVtLlxuXG5Gb3IgbW9y
1049
+ ZSBkZXRhaWwgb24gaG93IHRoZSBwZXJtaXNzaW9uIHN0cmluZ3MgYXJlIHN0
1050
+ cnVjdHVyZWQgYW5kIHdvcmssIHlvdSBjYW5cbnNlZSB0aGUgW1NoaXJvIFBl
1051
+ cm1pc3Npb25zIGRvY3VtZW50YXRpb25dW3NoaXJvXS4gIFRoYXQgcGF0dGVy
1052
+ biBpcyBleHBhbmRlZFxuYW5kIHRoZW4gYSBwZXJtaXNzaW9uIGNoZWNrIGFw
1053
+ cGxpZWQgdG8gaXQsIGJlZm9yZSB0aGUgY29tbWFuZCBpcyBhdXRob3JpemVk
1054
+ LlxuXG5UaGVzZSBjaGVja3Mgb25seSBhcHBseSBpZiBzZWN1cml0eSBpcyBl
1055
+ bmFibGVkIGluIHRoZSBSYXpvciBjb25maWd1cmF0aW9uXG5maWxlOyBvbiB0
1056
+ aGlzIHNlcnZlciBzZWN1cml0eSBpcyBjdXJyZW50bHkgZGlzYWJsZWQuXG5c
1057
+ bltzaGlyb106IGh0dHA6Ly9zaGlyby5hcGFjaGUub3JnL3Blcm1pc3Npb25z
1058
+ Lmh0bWxcblxuIyBBdHRyaWJ1dGVzXG5cbiAqIG5hbWVcbiAgIC0gVGhlIG5h
1059
+ bWUgb2YgdGhlIHRhZ1xuICAgLSBUaGlzIGF0dHJpYnV0ZSBpcyByZXF1aXJl
1060
+ ZFxuICAgLSBJdCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLlxuICAgLSBJdCBt
1061
+ dXN0IGJlIGJldHdlZW4gMSBhbmQgSW5maW5pdHkgaW4gbGVuZ3RoLlxuXG4g
1062
+ KiBydWxlXG4gICAtIFRoZSB0YWcgbWF0Y2hlcyBhIG5vZGUgaWYgZXZhbHVh
1063
+ dGluZyB0aGlzIHJ1biBhZ2FpbnN0IHRoZSB0YWfigJlzIGZhY3RzXG4gICBy
1064
+ ZXN1bHRzIGluIHRydWUuIE5vdGUgdGhhdCB0YWcgbWF0Y2hpbmcgaXMgY2Fz
1065
+ ZSBzZW5zaXRpdmUuXG4gICBcbiAgIEZvciBleGFtcGxlLCBoZXJlIGlzIGEg
1066
+ dGFnIHJ1bGU6XG4gICBcbiAgICAgICBbXCJvclwiLFxuICAgICAgICBbXCI9
1067
+ XCIsIFtcImZhY3RcIiwgXCJtYWNhZGRyZXNzXCJdLCBcImRlOmVhOmRiOmVl
1068
+ OmYwOjAwXCJdXG4gICAgICAgIFtcIj1cIiwgW1wiZmFjdFwiLCBcIm1hY2Fk
1069
+ ZHJlc3NcIl0sIFwiZGU6ZWE6ZGI6ZWU6ZjA6MDFcIl1dXG4gICBcbiAgIFRo
1070
+ ZSB0YWcgY291bGQgYWxzbyBiZSB3cml0dGVuIGxpa2UgdGhpczpcbiAgIFxu
1071
+ ICAgICAgIFtcImluXCIsIFtcImZhY3RcIiwgXCJtYWNhZGRyZXNzXCJdLCBc
1072
+ ImRlOmVhOmRiOmVlOmYwOjAwXCIsIFwiZGU6ZWE6ZGI6ZWU6ZjA6MDFcIl1c
1073
+ biAgIFxuICAgVGhlIHN5bnRheCBmb3IgcnVsZSBleHByZXNzaW9ucyBpcyBk
1074
+ ZWZpbmVkIGluXG4gICBgbGliL3Jhem9yL21hdGNoZXIucmJgLiBFeHByZXNz
1075
+ aW9ucyBhcmUgb2YgdGhlIGZvcm0gYFtvcCBhcmcxIGFyZzIgLi4gYXJnbl1g
1076
+ XG4gICB3aGVyZSBvcCBpcyBvbmUgb2YgdGhlIG9wZXJhdG9ycyBiZWxvdywg
1077
+ YW5kIGFyZzEgdGhyb3VnaCBhcmduIGFyZSB0aGVcbiAgIGFyZ3VtZW50cyBm
1078
+ b3IgdGhlIG9wZXJhdG9yLiBJZiB0aGV5IGFyZSBleHByZXNzaW9ucyB0aGVt
1079
+ c2VsdmVzLCB0aGV5IHdpbGxcbiAgIGJlIGV2YWx1YXRlZCBiZWZvcmUgb3Ag
1080
+ aXMgZXZhbHVhdGVkXG4gICAtIFRoaXMgYXR0cmlidXRlIGlzIHJlcXVpcmVk
1081
+ XG4gICAtIEl0IG11c3QgYmUgb2YgdHlwZSBhcnJheS5cblxuXG5cbiMgRVhB
1082
+ TVBMRVNcbiAgQ3JlYXRlIGEgc2ltcGxlIHRhZzpcbiAgXG4gIHtcbiAgICBc
1083
+ Im5hbWVcIjogXCJzbWFsbFwiLFxuICAgIFwicnVsZVwiOiBbXCI9XCIsIFtc
1084
+ ImZhY3RcIiwgXCJwcm9jZXNzb3Jjb3VudFwiXSwgXCIyXCJdXG4gIH1cblxu
1085
+ In0sInNjaGVtYSI6eyJuYW1lIjp7InR5cGUiOiJzdHJpbmcifSwicnVsZSI6
1086
+ eyJ0eXBlIjoiYXJyYXkifX19
1087
+ http_version:
1088
+ recorded_at: Fri, 16 May 2014 22:18:16 GMT
1089
+ - request:
1090
+ method: post
1091
+ uri: http://localhost:8080/api/commands/create-tag
1092
+ body:
1093
+ encoding: UTF-8
1094
+ string: '{"name":"tag2","rule":["=",["fact","processorcount"],"2"]}'
1095
+ headers:
1096
+ Accept:
1097
+ - application/json
1098
+ Accept-Encoding:
1099
+ - gzip, deflate
1100
+ Content-Type:
1101
+ - application/json
1102
+ Content-Length:
1103
+ - '58'
1104
+ User-Agent:
1105
+ - Ruby
1106
+ response:
1107
+ status:
1108
+ code: 202
1109
+ message: Accepted
1110
+ headers:
1111
+ Server:
1112
+ - Apache-Coyote/1.1
1113
+ X-Content-Type-Options:
1114
+ - nosniff
1115
+ Content-Type:
1116
+ - application/json;charset=utf-8
1117
+ Content-Length:
1118
+ - '199'
1119
+ Date:
1120
+ - Fri, 16 May 2014 22:18:15 GMT
1121
+ body:
1122
+ encoding: US-ASCII
1123
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/tags/member","id":"http://localhost:8080/api/collections/tags/tag2","name":"tag2","command":"http://localhost:8080/api/collections/commands/4"}'
1124
+ http_version:
1125
+ recorded_at: Fri, 16 May 2014 22:18:16 GMT
1126
+ - request:
1127
+ method: get
1128
+ uri: http://localhost:8080/api/collections/tags/tag2
1129
+ body:
1130
+ encoding: US-ASCII
1131
+ string: ''
1132
+ headers:
1133
+ Accept:
1134
+ - application/json
1135
+ Accept-Encoding:
1136
+ - gzip, deflate
1137
+ User-Agent:
1138
+ - Ruby
1139
+ response:
1140
+ status:
1141
+ code: 200
1142
+ message: OK
1143
+ headers:
1144
+ Server:
1145
+ - Apache-Coyote/1.1
1146
+ X-Content-Type-Options:
1147
+ - nosniff
1148
+ Content-Type:
1149
+ - application/json;charset=utf-8
1150
+ Content-Length:
1151
+ - '382'
1152
+ Date:
1153
+ - Fri, 16 May 2014 22:18:15 GMT
1154
+ body:
1155
+ encoding: US-ASCII
1156
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/tags/member","id":"http://localhost:8080/api/collections/tags/tag2","name":"tag2","rule":["=",["fact","processorcount"],"2"],"nodes":{"id":"http://localhost:8080/api/collections/tags/tag2/nodes","count":0,"name":"nodes"},"policies":{"id":"http://localhost:8080/api/collections/tags/tag2/policies","count":0,"name":"policies"}}'
1157
+ http_version:
1158
+ recorded_at: Fri, 16 May 2014 22:18:16 GMT
1159
+ - request:
1160
+ method: get
1161
+ uri: http://localhost:8080/api
1162
+ body:
1163
+ encoding: US-ASCII
1164
+ string: ''
1165
+ headers:
1166
+ Accept:
1167
+ - application/json
1168
+ Accept-Encoding:
1169
+ - gzip, deflate
1170
+ User-Agent:
1171
+ - Ruby
1172
+ response:
1173
+ status:
1174
+ code: 200
1175
+ message: OK
1176
+ headers:
1177
+ Server:
1178
+ - Apache-Coyote/1.1
1179
+ X-Content-Type-Options:
1180
+ - nosniff
1181
+ Content-Type:
1182
+ - application/json;charset=utf-8
1183
+ Content-Length:
1184
+ - '4982'
1185
+ Date:
1186
+ - Fri, 16 May 2014 22:18:15 GMT
1187
+ body:
1188
+ encoding: US-ASCII
1189
+ string: '{"commands":[{"name":"add-policy-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/add-policy-tag","id":"http://localhost:8080/api/commands/add-policy-tag"},{"name":"create-broker","rel":"http://api.puppetlabs.com/razor/v1/commands/create-broker","id":"http://localhost:8080/api/commands/create-broker"},{"name":"create-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/create-policy","id":"http://localhost:8080/api/commands/create-policy"},{"name":"create-repo","rel":"http://api.puppetlabs.com/razor/v1/commands/create-repo","id":"http://localhost:8080/api/commands/create-repo"},{"name":"create-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/create-tag","id":"http://localhost:8080/api/commands/create-tag"},{"name":"create-task","rel":"http://api.puppetlabs.com/razor/v1/commands/create-task","id":"http://localhost:8080/api/commands/create-task"},{"name":"delete-broker","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-broker","id":"http://localhost:8080/api/commands/delete-broker"},{"name":"delete-node","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-node","id":"http://localhost:8080/api/commands/delete-node"},{"name":"delete-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-policy","id":"http://localhost:8080/api/commands/delete-policy"},{"name":"delete-repo","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-repo","id":"http://localhost:8080/api/commands/delete-repo"},{"name":"delete-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-tag","id":"http://localhost:8080/api/commands/delete-tag"},{"name":"disable-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/disable-policy","id":"http://localhost:8080/api/commands/disable-policy"},{"name":"enable-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/enable-policy","id":"http://localhost:8080/api/commands/enable-policy"},{"name":"modify-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/modify-node-metadata","id":"http://localhost:8080/api/commands/modify-node-metadata"},{"name":"modify-policy-max-count","rel":"http://api.puppetlabs.com/razor/v1/commands/modify-policy-max-count","id":"http://localhost:8080/api/commands/modify-policy-max-count"},{"name":"move-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/move-policy","id":"http://localhost:8080/api/commands/move-policy"},{"name":"reboot-node","rel":"http://api.puppetlabs.com/razor/v1/commands/reboot-node","id":"http://localhost:8080/api/commands/reboot-node"},{"name":"register-node","rel":"http://api.puppetlabs.com/razor/v1/commands/register-node","id":"http://localhost:8080/api/commands/register-node"},{"name":"reinstall-node","rel":"http://api.puppetlabs.com/razor/v1/commands/reinstall-node","id":"http://localhost:8080/api/commands/reinstall-node"},{"name":"remove-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/remove-node-metadata","id":"http://localhost:8080/api/commands/remove-node-metadata"},{"name":"remove-policy-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/remove-policy-tag","id":"http://localhost:8080/api/commands/remove-policy-tag"},{"name":"set-node-desired-power-state","rel":"http://api.puppetlabs.com/razor/v1/commands/set-node-desired-power-state","id":"http://localhost:8080/api/commands/set-node-desired-power-state"},{"name":"set-node-hw-info","rel":"http://api.puppetlabs.com/razor/v1/commands/set-node-hw-info","id":"http://localhost:8080/api/commands/set-node-hw-info"},{"name":"set-node-ipmi-credentials","rel":"http://api.puppetlabs.com/razor/v1/commands/set-node-ipmi-credentials","id":"http://localhost:8080/api/commands/set-node-ipmi-credentials"},{"name":"update-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/update-node-metadata","id":"http://localhost:8080/api/commands/update-node-metadata"},{"name":"update-tag-rule","rel":"http://api.puppetlabs.com/razor/v1/commands/update-tag-rule","id":"http://localhost:8080/api/commands/update-tag-rule"}],"collections":[{"name":"brokers","rel":"http://api.puppetlabs.com/razor/v1/collections/brokers","id":"http://localhost:8080/api/collections/brokers"},{"name":"repos","rel":"http://api.puppetlabs.com/razor/v1/collections/repos","id":"http://localhost:8080/api/collections/repos"},{"name":"tags","rel":"http://api.puppetlabs.com/razor/v1/collections/tags","id":"http://localhost:8080/api/collections/tags"},{"name":"policies","rel":"http://api.puppetlabs.com/razor/v1/collections/policies","id":"http://localhost:8080/api/collections/policies"},{"name":"nodes","rel":"http://api.puppetlabs.com/razor/v1/collections/nodes","id":"http://localhost:8080/api/collections/nodes"},{"name":"tasks","rel":"http://api.puppetlabs.com/razor/v1/collections/tasks","id":"http://localhost:8080/api/collections/tasks"},{"name":"commands","rel":"http://api.puppetlabs.com/razor/v1/collections/commands","id":"http://localhost:8080/api/collections/commands"}],"version":{"server":"v0.14.1-113-g8b33d83-dirty"}}'
1190
+ http_version:
1191
+ recorded_at: Fri, 16 May 2014 22:18:16 GMT
1192
+ - request:
1193
+ method: get
1194
+ uri: http://localhost:8080/api/commands/create-policy
1195
+ body:
1196
+ encoding: US-ASCII
1197
+ string: ''
1198
+ headers:
1199
+ Accept:
1200
+ - application/json
1201
+ Accept-Encoding:
1202
+ - gzip, deflate
1203
+ User-Agent:
1204
+ - Ruby
1205
+ response:
1206
+ status:
1207
+ code: 200
1208
+ message: OK
1209
+ headers:
1210
+ Server:
1211
+ - Apache-Coyote/1.1
1212
+ Etag:
1213
+ - '"server-version-v0.14.1-113-g8b33d83-dirty"'
1214
+ X-Content-Type-Options:
1215
+ - nosniff
1216
+ Content-Type:
1217
+ - application/json;charset=utf-8
1218
+ Content-Length:
1219
+ - '5306'
1220
+ Date:
1221
+ - Fri, 16 May 2014 22:18:15 GMT
1222
+ body:
1223
+ encoding: US-ASCII
1224
+ string: '{"name":"create-policy","help":{"full":"# SYNOPSIS\nCreate a new policy\n\n#
1225
+ DESCRIPTION\nPolicies tie together the rules, as tags, with the task and repo
1226
+ containing\nthe OS to install, and the broker for post-install configuration.\n\nThe
1227
+ overall list of policies is ordered, and policies are considered in that\norder.
1228
+ When a new policy is created, the entry `before` or `after` can be\nused to
1229
+ put the new policy into the table before or after another\npolicy. If neither
1230
+ `before` or `after` are specified, the policy is\nappended to the policy table.\n\n\n#
1231
+ Access Control\n\nThis command''s access control pattern: `commands:create-policy:%{name}`\n\nWords
1232
+ surrounded by `%{...}` are substitutions from the input data: typically\nthe
1233
+ name of the object being modified, or some other critical detail, these\nallow
1234
+ roles to be granted partial access to modify the system.\n\nFor more detail
1235
+ on how the permission strings are structured and work, you can\nsee the [Shiro
1236
+ Permissions documentation][shiro]. That pattern is expanded\nand then a permission
1237
+ check applied to it, before the command is authorized.\n\nThese checks only
1238
+ apply if security is enabled in the Razor configuration\nfile; on this server
1239
+ security is currently disabled.\n\n[shiro]: http://shiro.apache.org/permissions.html\n\n#
1240
+ Attributes\n\n * name\n - The name of the policy to create.\n - This attribute
1241
+ is required\n - It must be of type string.\n - It must be between 1 and
1242
+ Infinity in length.\n\n * hostname\n - The hostname pattern to use for newly
1243
+ installed nodes. This is filled\n in on a per-node basis, and then supplied
1244
+ to the task to be configured\n appropriately on the newly installed node.\n \n Substitutions
1245
+ are performed using `${...}` syntax, and the available\n substitution names
1246
+ on your server are:\n \n - id -- the internal node ID number\n - This
1247
+ attribute is required\n - It must be of type string.\n - It must be between
1248
+ 1 and Infinity in length.\n\n * root-password\n - The root password for
1249
+ newly installed systems. This is passed directly\n to the individual task,
1250
+ rather than \"understood\" by the server, so the\n valid values are dependent
1251
+ on the individual task capabilities.\n - This attribute is required\n -
1252
+ It must be of type string.\n - It must be between 1 and Infinity in length.\n\n
1253
+ * enabled\n - Is this policy enabled when first created?\n - It must be
1254
+ of type boolean.\n\n * max-count\n - The maximum number of nodes that can
1255
+ bind to this policy.\n If omitted, the policy is ''unlimited'', and no maximum
1256
+ is applied.\n - It must be of type number.\n\n * before\n - The name of
1257
+ the policy to create this policy before in the policy list.\n - It must
1258
+ be of type string.\n - If present, after must not be present.\n - It must
1259
+ match the name of an existing policy.\n\n * after\n - The name of the policy
1260
+ to create this policy after in the policy list.\n - It must be of type string.\n -
1261
+ If present, before must not be present.\n - It must match the name of an
1262
+ existing policy.\n\n * tags\n - The array of names of tags that are used
1263
+ for matching nodes to this policy.\n \n When a node has all these tags
1264
+ matched on it, it will be a candidate\n for binding to this policy.\n -
1265
+ It must be of type array.\n \n - This value must be an array.\n -
1266
+ \n - This must be an array.\n - All elements must be of type string.\n -
1267
+ All elements must match the name of an existing tag.\n \n \n\n * repo\n -
1268
+ The name of the repository containing the OS to be installed by this policy.\n This
1269
+ should match the task assigned, or bad things will happen.\n - This attribute
1270
+ is required\n - It must be of type string.\n - It must match the name
1271
+ of an existing repo.\n\n * broker\n - The name of the broker to use when
1272
+ the node is fully installed, and is ready\n to hand off to the final configuration
1273
+ management system. If you have no\n ongoing configuration management, the
1274
+ supplied `noop` broker will do nothing.\n \n Please note that this is
1275
+ a broker created with the `create-broker` command,\n which is distinct from
1276
+ the broker types found on disk.\n - This attribute is required\n - It
1277
+ must be of type string.\n - It must match the name of an existing broker.\n\n
1278
+ * task\n - The name of the task used to install nodes that match this policy. This
1279
+ must\n match the selected repo, as it references files contained within
1280
+ that repository.\n - This attribute is required\n - It must be of type
1281
+ string.\n\n\n\n# EXAMPLES\n A sample policy installing CentOS 6.4:\n \n {\n \"name\": \"centos-for-small\",\n \"repo\": \"centos-6.4\",\n \"task\": \"centos\",\n \"broker\": \"noop\",\n \"enabled\": true,\n \"hostname\": \"host${id}.example.com\",\n \"root-password\":
1282
+ \"secret\",\n \"max-count\": 20,\n \"before\": \"other policy\",\n \"tags\": [\"small\"]\n }\n\n"},"schema":{"name":{"type":"string"},"hostname":{"type":"string"},"root-password":{"type":"string"},"enabled":{"type":"boolean"},"max-count":{"type":"number"},"before":{"type":"string"},"after":{"type":"string"},"tags":{"type":"array"},"repo":{"type":"string"},"broker":{"type":"string"},"task":{"type":"string"}}}'
1283
+ http_version:
1284
+ recorded_at: Fri, 16 May 2014 22:18:16 GMT
1285
+ - request:
1286
+ method: get
1287
+ uri: http://localhost:8080/api/commands/create-policy
1288
+ body:
1289
+ encoding: US-ASCII
1290
+ string: ''
1291
+ headers:
1292
+ Accept:
1293
+ - application/json
1294
+ Accept-Encoding:
1295
+ - gzip, deflate
1296
+ User-Agent:
1297
+ - Ruby
1298
+ response:
1299
+ status:
1300
+ code: 200
1301
+ message: OK
1302
+ headers:
1303
+ Server:
1304
+ - Apache-Coyote/1.1
1305
+ Etag:
1306
+ - '"server-version-v0.14.1-113-g8b33d83-dirty"'
1307
+ X-Content-Type-Options:
1308
+ - nosniff
1309
+ Content-Type:
1310
+ - application/json;charset=utf-8
1311
+ Content-Length:
1312
+ - '5306'
1313
+ Date:
1314
+ - Fri, 16 May 2014 22:18:15 GMT
1315
+ body:
1316
+ encoding: US-ASCII
1317
+ string: '{"name":"create-policy","help":{"full":"# SYNOPSIS\nCreate a new policy\n\n#
1318
+ DESCRIPTION\nPolicies tie together the rules, as tags, with the task and repo
1319
+ containing\nthe OS to install, and the broker for post-install configuration.\n\nThe
1320
+ overall list of policies is ordered, and policies are considered in that\norder.
1321
+ When a new policy is created, the entry `before` or `after` can be\nused to
1322
+ put the new policy into the table before or after another\npolicy. If neither
1323
+ `before` or `after` are specified, the policy is\nappended to the policy table.\n\n\n#
1324
+ Access Control\n\nThis command''s access control pattern: `commands:create-policy:%{name}`\n\nWords
1325
+ surrounded by `%{...}` are substitutions from the input data: typically\nthe
1326
+ name of the object being modified, or some other critical detail, these\nallow
1327
+ roles to be granted partial access to modify the system.\n\nFor more detail
1328
+ on how the permission strings are structured and work, you can\nsee the [Shiro
1329
+ Permissions documentation][shiro]. That pattern is expanded\nand then a permission
1330
+ check applied to it, before the command is authorized.\n\nThese checks only
1331
+ apply if security is enabled in the Razor configuration\nfile; on this server
1332
+ security is currently disabled.\n\n[shiro]: http://shiro.apache.org/permissions.html\n\n#
1333
+ Attributes\n\n * name\n - The name of the policy to create.\n - This attribute
1334
+ is required\n - It must be of type string.\n - It must be between 1 and
1335
+ Infinity in length.\n\n * hostname\n - The hostname pattern to use for newly
1336
+ installed nodes. This is filled\n in on a per-node basis, and then supplied
1337
+ to the task to be configured\n appropriately on the newly installed node.\n \n Substitutions
1338
+ are performed using `${...}` syntax, and the available\n substitution names
1339
+ on your server are:\n \n - id -- the internal node ID number\n - This
1340
+ attribute is required\n - It must be of type string.\n - It must be between
1341
+ 1 and Infinity in length.\n\n * root-password\n - The root password for
1342
+ newly installed systems. This is passed directly\n to the individual task,
1343
+ rather than \"understood\" by the server, so the\n valid values are dependent
1344
+ on the individual task capabilities.\n - This attribute is required\n -
1345
+ It must be of type string.\n - It must be between 1 and Infinity in length.\n\n
1346
+ * enabled\n - Is this policy enabled when first created?\n - It must be
1347
+ of type boolean.\n\n * max-count\n - The maximum number of nodes that can
1348
+ bind to this policy.\n If omitted, the policy is ''unlimited'', and no maximum
1349
+ is applied.\n - It must be of type number.\n\n * before\n - The name of
1350
+ the policy to create this policy before in the policy list.\n - It must
1351
+ be of type string.\n - If present, after must not be present.\n - It must
1352
+ match the name of an existing policy.\n\n * after\n - The name of the policy
1353
+ to create this policy after in the policy list.\n - It must be of type string.\n -
1354
+ If present, before must not be present.\n - It must match the name of an
1355
+ existing policy.\n\n * tags\n - The array of names of tags that are used
1356
+ for matching nodes to this policy.\n \n When a node has all these tags
1357
+ matched on it, it will be a candidate\n for binding to this policy.\n -
1358
+ It must be of type array.\n \n - This value must be an array.\n -
1359
+ \n - This must be an array.\n - All elements must be of type string.\n -
1360
+ All elements must match the name of an existing tag.\n \n \n\n * repo\n -
1361
+ The name of the repository containing the OS to be installed by this policy.\n This
1362
+ should match the task assigned, or bad things will happen.\n - This attribute
1363
+ is required\n - It must be of type string.\n - It must match the name
1364
+ of an existing repo.\n\n * broker\n - The name of the broker to use when
1365
+ the node is fully installed, and is ready\n to hand off to the final configuration
1366
+ management system. If you have no\n ongoing configuration management, the
1367
+ supplied `noop` broker will do nothing.\n \n Please note that this is
1368
+ a broker created with the `create-broker` command,\n which is distinct from
1369
+ the broker types found on disk.\n - This attribute is required\n - It
1370
+ must be of type string.\n - It must match the name of an existing broker.\n\n
1371
+ * task\n - The name of the task used to install nodes that match this policy. This
1372
+ must\n match the selected repo, as it references files contained within
1373
+ that repository.\n - This attribute is required\n - It must be of type
1374
+ string.\n\n\n\n# EXAMPLES\n A sample policy installing CentOS 6.4:\n \n {\n \"name\": \"centos-for-small\",\n \"repo\": \"centos-6.4\",\n \"task\": \"centos\",\n \"broker\": \"noop\",\n \"enabled\": true,\n \"hostname\": \"host${id}.example.com\",\n \"root-password\":
1375
+ \"secret\",\n \"max-count\": 20,\n \"before\": \"other policy\",\n \"tags\": [\"small\"]\n }\n\n"},"schema":{"name":{"type":"string"},"hostname":{"type":"string"},"root-password":{"type":"string"},"enabled":{"type":"boolean"},"max-count":{"type":"number"},"before":{"type":"string"},"after":{"type":"string"},"tags":{"type":"array"},"repo":{"type":"string"},"broker":{"type":"string"},"task":{"type":"string"}}}'
1376
+ http_version:
1377
+ recorded_at: Fri, 16 May 2014 22:18:16 GMT
1378
+ - request:
1379
+ method: get
1380
+ uri: http://localhost:8080/api/commands/create-policy
1381
+ body:
1382
+ encoding: US-ASCII
1383
+ string: ''
1384
+ headers:
1385
+ Accept:
1386
+ - application/json
1387
+ Accept-Encoding:
1388
+ - gzip, deflate
1389
+ User-Agent:
1390
+ - Ruby
1391
+ response:
1392
+ status:
1393
+ code: 200
1394
+ message: OK
1395
+ headers:
1396
+ Server:
1397
+ - Apache-Coyote/1.1
1398
+ Etag:
1399
+ - '"server-version-v0.14.1-113-g8b33d83-dirty"'
1400
+ X-Content-Type-Options:
1401
+ - nosniff
1402
+ Content-Type:
1403
+ - application/json;charset=utf-8
1404
+ Content-Length:
1405
+ - '5306'
1406
+ Date:
1407
+ - Fri, 16 May 2014 22:18:15 GMT
1408
+ body:
1409
+ encoding: US-ASCII
1410
+ string: '{"name":"create-policy","help":{"full":"# SYNOPSIS\nCreate a new policy\n\n#
1411
+ DESCRIPTION\nPolicies tie together the rules, as tags, with the task and repo
1412
+ containing\nthe OS to install, and the broker for post-install configuration.\n\nThe
1413
+ overall list of policies is ordered, and policies are considered in that\norder.
1414
+ When a new policy is created, the entry `before` or `after` can be\nused to
1415
+ put the new policy into the table before or after another\npolicy. If neither
1416
+ `before` or `after` are specified, the policy is\nappended to the policy table.\n\n\n#
1417
+ Access Control\n\nThis command''s access control pattern: `commands:create-policy:%{name}`\n\nWords
1418
+ surrounded by `%{...}` are substitutions from the input data: typically\nthe
1419
+ name of the object being modified, or some other critical detail, these\nallow
1420
+ roles to be granted partial access to modify the system.\n\nFor more detail
1421
+ on how the permission strings are structured and work, you can\nsee the [Shiro
1422
+ Permissions documentation][shiro]. That pattern is expanded\nand then a permission
1423
+ check applied to it, before the command is authorized.\n\nThese checks only
1424
+ apply if security is enabled in the Razor configuration\nfile; on this server
1425
+ security is currently disabled.\n\n[shiro]: http://shiro.apache.org/permissions.html\n\n#
1426
+ Attributes\n\n * name\n - The name of the policy to create.\n - This attribute
1427
+ is required\n - It must be of type string.\n - It must be between 1 and
1428
+ Infinity in length.\n\n * hostname\n - The hostname pattern to use for newly
1429
+ installed nodes. This is filled\n in on a per-node basis, and then supplied
1430
+ to the task to be configured\n appropriately on the newly installed node.\n \n Substitutions
1431
+ are performed using `${...}` syntax, and the available\n substitution names
1432
+ on your server are:\n \n - id -- the internal node ID number\n - This
1433
+ attribute is required\n - It must be of type string.\n - It must be between
1434
+ 1 and Infinity in length.\n\n * root-password\n - The root password for
1435
+ newly installed systems. This is passed directly\n to the individual task,
1436
+ rather than \"understood\" by the server, so the\n valid values are dependent
1437
+ on the individual task capabilities.\n - This attribute is required\n -
1438
+ It must be of type string.\n - It must be between 1 and Infinity in length.\n\n
1439
+ * enabled\n - Is this policy enabled when first created?\n - It must be
1440
+ of type boolean.\n\n * max-count\n - The maximum number of nodes that can
1441
+ bind to this policy.\n If omitted, the policy is ''unlimited'', and no maximum
1442
+ is applied.\n - It must be of type number.\n\n * before\n - The name of
1443
+ the policy to create this policy before in the policy list.\n - It must
1444
+ be of type string.\n - If present, after must not be present.\n - It must
1445
+ match the name of an existing policy.\n\n * after\n - The name of the policy
1446
+ to create this policy after in the policy list.\n - It must be of type string.\n -
1447
+ If present, before must not be present.\n - It must match the name of an
1448
+ existing policy.\n\n * tags\n - The array of names of tags that are used
1449
+ for matching nodes to this policy.\n \n When a node has all these tags
1450
+ matched on it, it will be a candidate\n for binding to this policy.\n -
1451
+ It must be of type array.\n \n - This value must be an array.\n -
1452
+ \n - This must be an array.\n - All elements must be of type string.\n -
1453
+ All elements must match the name of an existing tag.\n \n \n\n * repo\n -
1454
+ The name of the repository containing the OS to be installed by this policy.\n This
1455
+ should match the task assigned, or bad things will happen.\n - This attribute
1456
+ is required\n - It must be of type string.\n - It must match the name
1457
+ of an existing repo.\n\n * broker\n - The name of the broker to use when
1458
+ the node is fully installed, and is ready\n to hand off to the final configuration
1459
+ management system. If you have no\n ongoing configuration management, the
1460
+ supplied `noop` broker will do nothing.\n \n Please note that this is
1461
+ a broker created with the `create-broker` command,\n which is distinct from
1462
+ the broker types found on disk.\n - This attribute is required\n - It
1463
+ must be of type string.\n - It must match the name of an existing broker.\n\n
1464
+ * task\n - The name of the task used to install nodes that match this policy. This
1465
+ must\n match the selected repo, as it references files contained within
1466
+ that repository.\n - This attribute is required\n - It must be of type
1467
+ string.\n\n\n\n# EXAMPLES\n A sample policy installing CentOS 6.4:\n \n {\n \"name\": \"centos-for-small\",\n \"repo\": \"centos-6.4\",\n \"task\": \"centos\",\n \"broker\": \"noop\",\n \"enabled\": true,\n \"hostname\": \"host${id}.example.com\",\n \"root-password\":
1468
+ \"secret\",\n \"max-count\": 20,\n \"before\": \"other policy\",\n \"tags\": [\"small\"]\n }\n\n"},"schema":{"name":{"type":"string"},"hostname":{"type":"string"},"root-password":{"type":"string"},"enabled":{"type":"boolean"},"max-count":{"type":"number"},"before":{"type":"string"},"after":{"type":"string"},"tags":{"type":"array"},"repo":{"type":"string"},"broker":{"type":"string"},"task":{"type":"string"}}}'
1469
+ http_version:
1470
+ recorded_at: Fri, 16 May 2014 22:18:16 GMT
1471
+ - request:
1472
+ method: get
1473
+ uri: http://localhost:8080/api/commands/create-policy
1474
+ body:
1475
+ encoding: US-ASCII
1476
+ string: ''
1477
+ headers:
1478
+ Accept:
1479
+ - application/json
1480
+ Accept-Encoding:
1481
+ - gzip, deflate
1482
+ User-Agent:
1483
+ - Ruby
1484
+ response:
1485
+ status:
1486
+ code: 200
1487
+ message: OK
1488
+ headers:
1489
+ Server:
1490
+ - Apache-Coyote/1.1
1491
+ Etag:
1492
+ - '"server-version-v0.14.1-113-g8b33d83-dirty"'
1493
+ X-Content-Type-Options:
1494
+ - nosniff
1495
+ Content-Type:
1496
+ - application/json;charset=utf-8
1497
+ Content-Length:
1498
+ - '5306'
1499
+ Date:
1500
+ - Fri, 16 May 2014 22:18:15 GMT
1501
+ body:
1502
+ encoding: US-ASCII
1503
+ string: '{"name":"create-policy","help":{"full":"# SYNOPSIS\nCreate a new policy\n\n#
1504
+ DESCRIPTION\nPolicies tie together the rules, as tags, with the task and repo
1505
+ containing\nthe OS to install, and the broker for post-install configuration.\n\nThe
1506
+ overall list of policies is ordered, and policies are considered in that\norder.
1507
+ When a new policy is created, the entry `before` or `after` can be\nused to
1508
+ put the new policy into the table before or after another\npolicy. If neither
1509
+ `before` or `after` are specified, the policy is\nappended to the policy table.\n\n\n#
1510
+ Access Control\n\nThis command''s access control pattern: `commands:create-policy:%{name}`\n\nWords
1511
+ surrounded by `%{...}` are substitutions from the input data: typically\nthe
1512
+ name of the object being modified, or some other critical detail, these\nallow
1513
+ roles to be granted partial access to modify the system.\n\nFor more detail
1514
+ on how the permission strings are structured and work, you can\nsee the [Shiro
1515
+ Permissions documentation][shiro]. That pattern is expanded\nand then a permission
1516
+ check applied to it, before the command is authorized.\n\nThese checks only
1517
+ apply if security is enabled in the Razor configuration\nfile; on this server
1518
+ security is currently disabled.\n\n[shiro]: http://shiro.apache.org/permissions.html\n\n#
1519
+ Attributes\n\n * name\n - The name of the policy to create.\n - This attribute
1520
+ is required\n - It must be of type string.\n - It must be between 1 and
1521
+ Infinity in length.\n\n * hostname\n - The hostname pattern to use for newly
1522
+ installed nodes. This is filled\n in on a per-node basis, and then supplied
1523
+ to the task to be configured\n appropriately on the newly installed node.\n \n Substitutions
1524
+ are performed using `${...}` syntax, and the available\n substitution names
1525
+ on your server are:\n \n - id -- the internal node ID number\n - This
1526
+ attribute is required\n - It must be of type string.\n - It must be between
1527
+ 1 and Infinity in length.\n\n * root-password\n - The root password for
1528
+ newly installed systems. This is passed directly\n to the individual task,
1529
+ rather than \"understood\" by the server, so the\n valid values are dependent
1530
+ on the individual task capabilities.\n - This attribute is required\n -
1531
+ It must be of type string.\n - It must be between 1 and Infinity in length.\n\n
1532
+ * enabled\n - Is this policy enabled when first created?\n - It must be
1533
+ of type boolean.\n\n * max-count\n - The maximum number of nodes that can
1534
+ bind to this policy.\n If omitted, the policy is ''unlimited'', and no maximum
1535
+ is applied.\n - It must be of type number.\n\n * before\n - The name of
1536
+ the policy to create this policy before in the policy list.\n - It must
1537
+ be of type string.\n - If present, after must not be present.\n - It must
1538
+ match the name of an existing policy.\n\n * after\n - The name of the policy
1539
+ to create this policy after in the policy list.\n - It must be of type string.\n -
1540
+ If present, before must not be present.\n - It must match the name of an
1541
+ existing policy.\n\n * tags\n - The array of names of tags that are used
1542
+ for matching nodes to this policy.\n \n When a node has all these tags
1543
+ matched on it, it will be a candidate\n for binding to this policy.\n -
1544
+ It must be of type array.\n \n - This value must be an array.\n -
1545
+ \n - This must be an array.\n - All elements must be of type string.\n -
1546
+ All elements must match the name of an existing tag.\n \n \n\n * repo\n -
1547
+ The name of the repository containing the OS to be installed by this policy.\n This
1548
+ should match the task assigned, or bad things will happen.\n - This attribute
1549
+ is required\n - It must be of type string.\n - It must match the name
1550
+ of an existing repo.\n\n * broker\n - The name of the broker to use when
1551
+ the node is fully installed, and is ready\n to hand off to the final configuration
1552
+ management system. If you have no\n ongoing configuration management, the
1553
+ supplied `noop` broker will do nothing.\n \n Please note that this is
1554
+ a broker created with the `create-broker` command,\n which is distinct from
1555
+ the broker types found on disk.\n - This attribute is required\n - It
1556
+ must be of type string.\n - It must match the name of an existing broker.\n\n
1557
+ * task\n - The name of the task used to install nodes that match this policy. This
1558
+ must\n match the selected repo, as it references files contained within
1559
+ that repository.\n - This attribute is required\n - It must be of type
1560
+ string.\n\n\n\n# EXAMPLES\n A sample policy installing CentOS 6.4:\n \n {\n \"name\": \"centos-for-small\",\n \"repo\": \"centos-6.4\",\n \"task\": \"centos\",\n \"broker\": \"noop\",\n \"enabled\": true,\n \"hostname\": \"host${id}.example.com\",\n \"root-password\":
1561
+ \"secret\",\n \"max-count\": 20,\n \"before\": \"other policy\",\n \"tags\": [\"small\"]\n }\n\n"},"schema":{"name":{"type":"string"},"hostname":{"type":"string"},"root-password":{"type":"string"},"enabled":{"type":"boolean"},"max-count":{"type":"number"},"before":{"type":"string"},"after":{"type":"string"},"tags":{"type":"array"},"repo":{"type":"string"},"broker":{"type":"string"},"task":{"type":"string"}}}'
1562
+ http_version:
1563
+ recorded_at: Fri, 16 May 2014 22:18:16 GMT
1564
+ - request:
1565
+ method: get
1566
+ uri: http://localhost:8080/api/commands/create-policy
1567
+ body:
1568
+ encoding: US-ASCII
1569
+ string: ''
1570
+ headers:
1571
+ Accept:
1572
+ - application/json
1573
+ Accept-Encoding:
1574
+ - gzip, deflate
1575
+ User-Agent:
1576
+ - Ruby
1577
+ response:
1578
+ status:
1579
+ code: 200
1580
+ message: OK
1581
+ headers:
1582
+ Server:
1583
+ - Apache-Coyote/1.1
1584
+ Etag:
1585
+ - '"server-version-v0.14.1-113-g8b33d83-dirty"'
1586
+ X-Content-Type-Options:
1587
+ - nosniff
1588
+ Content-Type:
1589
+ - application/json;charset=utf-8
1590
+ Content-Length:
1591
+ - '5306'
1592
+ Date:
1593
+ - Fri, 16 May 2014 22:18:15 GMT
1594
+ body:
1595
+ encoding: US-ASCII
1596
+ string: '{"name":"create-policy","help":{"full":"# SYNOPSIS\nCreate a new policy\n\n#
1597
+ DESCRIPTION\nPolicies tie together the rules, as tags, with the task and repo
1598
+ containing\nthe OS to install, and the broker for post-install configuration.\n\nThe
1599
+ overall list of policies is ordered, and policies are considered in that\norder.
1600
+ When a new policy is created, the entry `before` or `after` can be\nused to
1601
+ put the new policy into the table before or after another\npolicy. If neither
1602
+ `before` or `after` are specified, the policy is\nappended to the policy table.\n\n\n#
1603
+ Access Control\n\nThis command''s access control pattern: `commands:create-policy:%{name}`\n\nWords
1604
+ surrounded by `%{...}` are substitutions from the input data: typically\nthe
1605
+ name of the object being modified, or some other critical detail, these\nallow
1606
+ roles to be granted partial access to modify the system.\n\nFor more detail
1607
+ on how the permission strings are structured and work, you can\nsee the [Shiro
1608
+ Permissions documentation][shiro]. That pattern is expanded\nand then a permission
1609
+ check applied to it, before the command is authorized.\n\nThese checks only
1610
+ apply if security is enabled in the Razor configuration\nfile; on this server
1611
+ security is currently disabled.\n\n[shiro]: http://shiro.apache.org/permissions.html\n\n#
1612
+ Attributes\n\n * name\n - The name of the policy to create.\n - This attribute
1613
+ is required\n - It must be of type string.\n - It must be between 1 and
1614
+ Infinity in length.\n\n * hostname\n - The hostname pattern to use for newly
1615
+ installed nodes. This is filled\n in on a per-node basis, and then supplied
1616
+ to the task to be configured\n appropriately on the newly installed node.\n \n Substitutions
1617
+ are performed using `${...}` syntax, and the available\n substitution names
1618
+ on your server are:\n \n - id -- the internal node ID number\n - This
1619
+ attribute is required\n - It must be of type string.\n - It must be between
1620
+ 1 and Infinity in length.\n\n * root-password\n - The root password for
1621
+ newly installed systems. This is passed directly\n to the individual task,
1622
+ rather than \"understood\" by the server, so the\n valid values are dependent
1623
+ on the individual task capabilities.\n - This attribute is required\n -
1624
+ It must be of type string.\n - It must be between 1 and Infinity in length.\n\n
1625
+ * enabled\n - Is this policy enabled when first created?\n - It must be
1626
+ of type boolean.\n\n * max-count\n - The maximum number of nodes that can
1627
+ bind to this policy.\n If omitted, the policy is ''unlimited'', and no maximum
1628
+ is applied.\n - It must be of type number.\n\n * before\n - The name of
1629
+ the policy to create this policy before in the policy list.\n - It must
1630
+ be of type string.\n - If present, after must not be present.\n - It must
1631
+ match the name of an existing policy.\n\n * after\n - The name of the policy
1632
+ to create this policy after in the policy list.\n - It must be of type string.\n -
1633
+ If present, before must not be present.\n - It must match the name of an
1634
+ existing policy.\n\n * tags\n - The array of names of tags that are used
1635
+ for matching nodes to this policy.\n \n When a node has all these tags
1636
+ matched on it, it will be a candidate\n for binding to this policy.\n -
1637
+ It must be of type array.\n \n - This value must be an array.\n -
1638
+ \n - This must be an array.\n - All elements must be of type string.\n -
1639
+ All elements must match the name of an existing tag.\n \n \n\n * repo\n -
1640
+ The name of the repository containing the OS to be installed by this policy.\n This
1641
+ should match the task assigned, or bad things will happen.\n - This attribute
1642
+ is required\n - It must be of type string.\n - It must match the name
1643
+ of an existing repo.\n\n * broker\n - The name of the broker to use when
1644
+ the node is fully installed, and is ready\n to hand off to the final configuration
1645
+ management system. If you have no\n ongoing configuration management, the
1646
+ supplied `noop` broker will do nothing.\n \n Please note that this is
1647
+ a broker created with the `create-broker` command,\n which is distinct from
1648
+ the broker types found on disk.\n - This attribute is required\n - It
1649
+ must be of type string.\n - It must match the name of an existing broker.\n\n
1650
+ * task\n - The name of the task used to install nodes that match this policy. This
1651
+ must\n match the selected repo, as it references files contained within
1652
+ that repository.\n - This attribute is required\n - It must be of type
1653
+ string.\n\n\n\n# EXAMPLES\n A sample policy installing CentOS 6.4:\n \n {\n \"name\": \"centos-for-small\",\n \"repo\": \"centos-6.4\",\n \"task\": \"centos\",\n \"broker\": \"noop\",\n \"enabled\": true,\n \"hostname\": \"host${id}.example.com\",\n \"root-password\":
1654
+ \"secret\",\n \"max-count\": 20,\n \"before\": \"other policy\",\n \"tags\": [\"small\"]\n }\n\n"},"schema":{"name":{"type":"string"},"hostname":{"type":"string"},"root-password":{"type":"string"},"enabled":{"type":"boolean"},"max-count":{"type":"number"},"before":{"type":"string"},"after":{"type":"string"},"tags":{"type":"array"},"repo":{"type":"string"},"broker":{"type":"string"},"task":{"type":"string"}}}'
1655
+ http_version:
1656
+ recorded_at: Fri, 16 May 2014 22:18:16 GMT
1657
+ - request:
1658
+ method: get
1659
+ uri: http://localhost:8080/api/commands/create-policy
1660
+ body:
1661
+ encoding: US-ASCII
1662
+ string: ''
1663
+ headers:
1664
+ Accept:
1665
+ - application/json
1666
+ Accept-Encoding:
1667
+ - gzip, deflate
1668
+ User-Agent:
1669
+ - Ruby
1670
+ response:
1671
+ status:
1672
+ code: 200
1673
+ message: OK
1674
+ headers:
1675
+ Server:
1676
+ - Apache-Coyote/1.1
1677
+ Etag:
1678
+ - '"server-version-v0.14.1-113-g8b33d83-dirty"'
1679
+ X-Content-Type-Options:
1680
+ - nosniff
1681
+ Content-Type:
1682
+ - application/json;charset=utf-8
1683
+ Content-Length:
1684
+ - '5306'
1685
+ Date:
1686
+ - Fri, 16 May 2014 22:18:16 GMT
1687
+ body:
1688
+ encoding: US-ASCII
1689
+ string: '{"name":"create-policy","help":{"full":"# SYNOPSIS\nCreate a new policy\n\n#
1690
+ DESCRIPTION\nPolicies tie together the rules, as tags, with the task and repo
1691
+ containing\nthe OS to install, and the broker for post-install configuration.\n\nThe
1692
+ overall list of policies is ordered, and policies are considered in that\norder.
1693
+ When a new policy is created, the entry `before` or `after` can be\nused to
1694
+ put the new policy into the table before or after another\npolicy. If neither
1695
+ `before` or `after` are specified, the policy is\nappended to the policy table.\n\n\n#
1696
+ Access Control\n\nThis command''s access control pattern: `commands:create-policy:%{name}`\n\nWords
1697
+ surrounded by `%{...}` are substitutions from the input data: typically\nthe
1698
+ name of the object being modified, or some other critical detail, these\nallow
1699
+ roles to be granted partial access to modify the system.\n\nFor more detail
1700
+ on how the permission strings are structured and work, you can\nsee the [Shiro
1701
+ Permissions documentation][shiro]. That pattern is expanded\nand then a permission
1702
+ check applied to it, before the command is authorized.\n\nThese checks only
1703
+ apply if security is enabled in the Razor configuration\nfile; on this server
1704
+ security is currently disabled.\n\n[shiro]: http://shiro.apache.org/permissions.html\n\n#
1705
+ Attributes\n\n * name\n - The name of the policy to create.\n - This attribute
1706
+ is required\n - It must be of type string.\n - It must be between 1 and
1707
+ Infinity in length.\n\n * hostname\n - The hostname pattern to use for newly
1708
+ installed nodes. This is filled\n in on a per-node basis, and then supplied
1709
+ to the task to be configured\n appropriately on the newly installed node.\n \n Substitutions
1710
+ are performed using `${...}` syntax, and the available\n substitution names
1711
+ on your server are:\n \n - id -- the internal node ID number\n - This
1712
+ attribute is required\n - It must be of type string.\n - It must be between
1713
+ 1 and Infinity in length.\n\n * root-password\n - The root password for
1714
+ newly installed systems. This is passed directly\n to the individual task,
1715
+ rather than \"understood\" by the server, so the\n valid values are dependent
1716
+ on the individual task capabilities.\n - This attribute is required\n -
1717
+ It must be of type string.\n - It must be between 1 and Infinity in length.\n\n
1718
+ * enabled\n - Is this policy enabled when first created?\n - It must be
1719
+ of type boolean.\n\n * max-count\n - The maximum number of nodes that can
1720
+ bind to this policy.\n If omitted, the policy is ''unlimited'', and no maximum
1721
+ is applied.\n - It must be of type number.\n\n * before\n - The name of
1722
+ the policy to create this policy before in the policy list.\n - It must
1723
+ be of type string.\n - If present, after must not be present.\n - It must
1724
+ match the name of an existing policy.\n\n * after\n - The name of the policy
1725
+ to create this policy after in the policy list.\n - It must be of type string.\n -
1726
+ If present, before must not be present.\n - It must match the name of an
1727
+ existing policy.\n\n * tags\n - The array of names of tags that are used
1728
+ for matching nodes to this policy.\n \n When a node has all these tags
1729
+ matched on it, it will be a candidate\n for binding to this policy.\n -
1730
+ It must be of type array.\n \n - This value must be an array.\n -
1731
+ \n - This must be an array.\n - All elements must be of type string.\n -
1732
+ All elements must match the name of an existing tag.\n \n \n\n * repo\n -
1733
+ The name of the repository containing the OS to be installed by this policy.\n This
1734
+ should match the task assigned, or bad things will happen.\n - This attribute
1735
+ is required\n - It must be of type string.\n - It must match the name
1736
+ of an existing repo.\n\n * broker\n - The name of the broker to use when
1737
+ the node is fully installed, and is ready\n to hand off to the final configuration
1738
+ management system. If you have no\n ongoing configuration management, the
1739
+ supplied `noop` broker will do nothing.\n \n Please note that this is
1740
+ a broker created with the `create-broker` command,\n which is distinct from
1741
+ the broker types found on disk.\n - This attribute is required\n - It
1742
+ must be of type string.\n - It must match the name of an existing broker.\n\n
1743
+ * task\n - The name of the task used to install nodes that match this policy. This
1744
+ must\n match the selected repo, as it references files contained within
1745
+ that repository.\n - This attribute is required\n - It must be of type
1746
+ string.\n\n\n\n# EXAMPLES\n A sample policy installing CentOS 6.4:\n \n {\n \"name\": \"centos-for-small\",\n \"repo\": \"centos-6.4\",\n \"task\": \"centos\",\n \"broker\": \"noop\",\n \"enabled\": true,\n \"hostname\": \"host${id}.example.com\",\n \"root-password\":
1747
+ \"secret\",\n \"max-count\": 20,\n \"before\": \"other policy\",\n \"tags\": [\"small\"]\n }\n\n"},"schema":{"name":{"type":"string"},"hostname":{"type":"string"},"root-password":{"type":"string"},"enabled":{"type":"boolean"},"max-count":{"type":"number"},"before":{"type":"string"},"after":{"type":"string"},"tags":{"type":"array"},"repo":{"type":"string"},"broker":{"type":"string"},"task":{"type":"string"}}}'
1748
+ http_version:
1749
+ recorded_at: Fri, 16 May 2014 22:18:16 GMT
1750
+ - request:
1751
+ method: get
1752
+ uri: http://localhost:8080/api/commands/create-policy
1753
+ body:
1754
+ encoding: US-ASCII
1755
+ string: ''
1756
+ headers:
1757
+ Accept:
1758
+ - application/json
1759
+ Accept-Encoding:
1760
+ - gzip, deflate
1761
+ User-Agent:
1762
+ - Ruby
1763
+ response:
1764
+ status:
1765
+ code: 200
1766
+ message: OK
1767
+ headers:
1768
+ Server:
1769
+ - Apache-Coyote/1.1
1770
+ Etag:
1771
+ - '"server-version-v0.14.1-113-g8b33d83-dirty"'
1772
+ X-Content-Type-Options:
1773
+ - nosniff
1774
+ Content-Type:
1775
+ - application/json;charset=utf-8
1776
+ Content-Length:
1777
+ - '5306'
1778
+ Date:
1779
+ - Fri, 16 May 2014 22:18:16 GMT
1780
+ body:
1781
+ encoding: US-ASCII
1782
+ string: '{"name":"create-policy","help":{"full":"# SYNOPSIS\nCreate a new policy\n\n#
1783
+ DESCRIPTION\nPolicies tie together the rules, as tags, with the task and repo
1784
+ containing\nthe OS to install, and the broker for post-install configuration.\n\nThe
1785
+ overall list of policies is ordered, and policies are considered in that\norder.
1786
+ When a new policy is created, the entry `before` or `after` can be\nused to
1787
+ put the new policy into the table before or after another\npolicy. If neither
1788
+ `before` or `after` are specified, the policy is\nappended to the policy table.\n\n\n#
1789
+ Access Control\n\nThis command''s access control pattern: `commands:create-policy:%{name}`\n\nWords
1790
+ surrounded by `%{...}` are substitutions from the input data: typically\nthe
1791
+ name of the object being modified, or some other critical detail, these\nallow
1792
+ roles to be granted partial access to modify the system.\n\nFor more detail
1793
+ on how the permission strings are structured and work, you can\nsee the [Shiro
1794
+ Permissions documentation][shiro]. That pattern is expanded\nand then a permission
1795
+ check applied to it, before the command is authorized.\n\nThese checks only
1796
+ apply if security is enabled in the Razor configuration\nfile; on this server
1797
+ security is currently disabled.\n\n[shiro]: http://shiro.apache.org/permissions.html\n\n#
1798
+ Attributes\n\n * name\n - The name of the policy to create.\n - This attribute
1799
+ is required\n - It must be of type string.\n - It must be between 1 and
1800
+ Infinity in length.\n\n * hostname\n - The hostname pattern to use for newly
1801
+ installed nodes. This is filled\n in on a per-node basis, and then supplied
1802
+ to the task to be configured\n appropriately on the newly installed node.\n \n Substitutions
1803
+ are performed using `${...}` syntax, and the available\n substitution names
1804
+ on your server are:\n \n - id -- the internal node ID number\n - This
1805
+ attribute is required\n - It must be of type string.\n - It must be between
1806
+ 1 and Infinity in length.\n\n * root-password\n - The root password for
1807
+ newly installed systems. This is passed directly\n to the individual task,
1808
+ rather than \"understood\" by the server, so the\n valid values are dependent
1809
+ on the individual task capabilities.\n - This attribute is required\n -
1810
+ It must be of type string.\n - It must be between 1 and Infinity in length.\n\n
1811
+ * enabled\n - Is this policy enabled when first created?\n - It must be
1812
+ of type boolean.\n\n * max-count\n - The maximum number of nodes that can
1813
+ bind to this policy.\n If omitted, the policy is ''unlimited'', and no maximum
1814
+ is applied.\n - It must be of type number.\n\n * before\n - The name of
1815
+ the policy to create this policy before in the policy list.\n - It must
1816
+ be of type string.\n - If present, after must not be present.\n - It must
1817
+ match the name of an existing policy.\n\n * after\n - The name of the policy
1818
+ to create this policy after in the policy list.\n - It must be of type string.\n -
1819
+ If present, before must not be present.\n - It must match the name of an
1820
+ existing policy.\n\n * tags\n - The array of names of tags that are used
1821
+ for matching nodes to this policy.\n \n When a node has all these tags
1822
+ matched on it, it will be a candidate\n for binding to this policy.\n -
1823
+ It must be of type array.\n \n - This value must be an array.\n -
1824
+ \n - This must be an array.\n - All elements must be of type string.\n -
1825
+ All elements must match the name of an existing tag.\n \n \n\n * repo\n -
1826
+ The name of the repository containing the OS to be installed by this policy.\n This
1827
+ should match the task assigned, or bad things will happen.\n - This attribute
1828
+ is required\n - It must be of type string.\n - It must match the name
1829
+ of an existing repo.\n\n * broker\n - The name of the broker to use when
1830
+ the node is fully installed, and is ready\n to hand off to the final configuration
1831
+ management system. If you have no\n ongoing configuration management, the
1832
+ supplied `noop` broker will do nothing.\n \n Please note that this is
1833
+ a broker created with the `create-broker` command,\n which is distinct from
1834
+ the broker types found on disk.\n - This attribute is required\n - It
1835
+ must be of type string.\n - It must match the name of an existing broker.\n\n
1836
+ * task\n - The name of the task used to install nodes that match this policy. This
1837
+ must\n match the selected repo, as it references files contained within
1838
+ that repository.\n - This attribute is required\n - It must be of type
1839
+ string.\n\n\n\n# EXAMPLES\n A sample policy installing CentOS 6.4:\n \n {\n \"name\": \"centos-for-small\",\n \"repo\": \"centos-6.4\",\n \"task\": \"centos\",\n \"broker\": \"noop\",\n \"enabled\": true,\n \"hostname\": \"host${id}.example.com\",\n \"root-password\":
1840
+ \"secret\",\n \"max-count\": 20,\n \"before\": \"other policy\",\n \"tags\": [\"small\"]\n }\n\n"},"schema":{"name":{"type":"string"},"hostname":{"type":"string"},"root-password":{"type":"string"},"enabled":{"type":"boolean"},"max-count":{"type":"number"},"before":{"type":"string"},"after":{"type":"string"},"tags":{"type":"array"},"repo":{"type":"string"},"broker":{"type":"string"},"task":{"type":"string"}}}'
1841
+ http_version:
1842
+ recorded_at: Fri, 16 May 2014 22:18:16 GMT
1843
+ - request:
1844
+ method: get
1845
+ uri: http://localhost:8080/api/commands/create-policy
1846
+ body:
1847
+ encoding: US-ASCII
1848
+ string: ''
1849
+ headers:
1850
+ Accept:
1851
+ - application/json
1852
+ Accept-Encoding:
1853
+ - gzip, deflate
1854
+ User-Agent:
1855
+ - Ruby
1856
+ response:
1857
+ status:
1858
+ code: 200
1859
+ message: OK
1860
+ headers:
1861
+ Server:
1862
+ - Apache-Coyote/1.1
1863
+ Etag:
1864
+ - '"server-version-v0.14.1-113-g8b33d83-dirty"'
1865
+ X-Content-Type-Options:
1866
+ - nosniff
1867
+ Content-Type:
1868
+ - application/json;charset=utf-8
1869
+ Content-Length:
1870
+ - '5306'
1871
+ Date:
1872
+ - Fri, 16 May 2014 22:18:16 GMT
1873
+ body:
1874
+ encoding: US-ASCII
1875
+ string: '{"name":"create-policy","help":{"full":"# SYNOPSIS\nCreate a new policy\n\n#
1876
+ DESCRIPTION\nPolicies tie together the rules, as tags, with the task and repo
1877
+ containing\nthe OS to install, and the broker for post-install configuration.\n\nThe
1878
+ overall list of policies is ordered, and policies are considered in that\norder.
1879
+ When a new policy is created, the entry `before` or `after` can be\nused to
1880
+ put the new policy into the table before or after another\npolicy. If neither
1881
+ `before` or `after` are specified, the policy is\nappended to the policy table.\n\n\n#
1882
+ Access Control\n\nThis command''s access control pattern: `commands:create-policy:%{name}`\n\nWords
1883
+ surrounded by `%{...}` are substitutions from the input data: typically\nthe
1884
+ name of the object being modified, or some other critical detail, these\nallow
1885
+ roles to be granted partial access to modify the system.\n\nFor more detail
1886
+ on how the permission strings are structured and work, you can\nsee the [Shiro
1887
+ Permissions documentation][shiro]. That pattern is expanded\nand then a permission
1888
+ check applied to it, before the command is authorized.\n\nThese checks only
1889
+ apply if security is enabled in the Razor configuration\nfile; on this server
1890
+ security is currently disabled.\n\n[shiro]: http://shiro.apache.org/permissions.html\n\n#
1891
+ Attributes\n\n * name\n - The name of the policy to create.\n - This attribute
1892
+ is required\n - It must be of type string.\n - It must be between 1 and
1893
+ Infinity in length.\n\n * hostname\n - The hostname pattern to use for newly
1894
+ installed nodes. This is filled\n in on a per-node basis, and then supplied
1895
+ to the task to be configured\n appropriately on the newly installed node.\n \n Substitutions
1896
+ are performed using `${...}` syntax, and the available\n substitution names
1897
+ on your server are:\n \n - id -- the internal node ID number\n - This
1898
+ attribute is required\n - It must be of type string.\n - It must be between
1899
+ 1 and Infinity in length.\n\n * root-password\n - The root password for
1900
+ newly installed systems. This is passed directly\n to the individual task,
1901
+ rather than \"understood\" by the server, so the\n valid values are dependent
1902
+ on the individual task capabilities.\n - This attribute is required\n -
1903
+ It must be of type string.\n - It must be between 1 and Infinity in length.\n\n
1904
+ * enabled\n - Is this policy enabled when first created?\n - It must be
1905
+ of type boolean.\n\n * max-count\n - The maximum number of nodes that can
1906
+ bind to this policy.\n If omitted, the policy is ''unlimited'', and no maximum
1907
+ is applied.\n - It must be of type number.\n\n * before\n - The name of
1908
+ the policy to create this policy before in the policy list.\n - It must
1909
+ be of type string.\n - If present, after must not be present.\n - It must
1910
+ match the name of an existing policy.\n\n * after\n - The name of the policy
1911
+ to create this policy after in the policy list.\n - It must be of type string.\n -
1912
+ If present, before must not be present.\n - It must match the name of an
1913
+ existing policy.\n\n * tags\n - The array of names of tags that are used
1914
+ for matching nodes to this policy.\n \n When a node has all these tags
1915
+ matched on it, it will be a candidate\n for binding to this policy.\n -
1916
+ It must be of type array.\n \n - This value must be an array.\n -
1917
+ \n - This must be an array.\n - All elements must be of type string.\n -
1918
+ All elements must match the name of an existing tag.\n \n \n\n * repo\n -
1919
+ The name of the repository containing the OS to be installed by this policy.\n This
1920
+ should match the task assigned, or bad things will happen.\n - This attribute
1921
+ is required\n - It must be of type string.\n - It must match the name
1922
+ of an existing repo.\n\n * broker\n - The name of the broker to use when
1923
+ the node is fully installed, and is ready\n to hand off to the final configuration
1924
+ management system. If you have no\n ongoing configuration management, the
1925
+ supplied `noop` broker will do nothing.\n \n Please note that this is
1926
+ a broker created with the `create-broker` command,\n which is distinct from
1927
+ the broker types found on disk.\n - This attribute is required\n - It
1928
+ must be of type string.\n - It must match the name of an existing broker.\n\n
1929
+ * task\n - The name of the task used to install nodes that match this policy. This
1930
+ must\n match the selected repo, as it references files contained within
1931
+ that repository.\n - This attribute is required\n - It must be of type
1932
+ string.\n\n\n\n# EXAMPLES\n A sample policy installing CentOS 6.4:\n \n {\n \"name\": \"centos-for-small\",\n \"repo\": \"centos-6.4\",\n \"task\": \"centos\",\n \"broker\": \"noop\",\n \"enabled\": true,\n \"hostname\": \"host${id}.example.com\",\n \"root-password\":
1933
+ \"secret\",\n \"max-count\": 20,\n \"before\": \"other policy\",\n \"tags\": [\"small\"]\n }\n\n"},"schema":{"name":{"type":"string"},"hostname":{"type":"string"},"root-password":{"type":"string"},"enabled":{"type":"boolean"},"max-count":{"type":"number"},"before":{"type":"string"},"after":{"type":"string"},"tags":{"type":"array"},"repo":{"type":"string"},"broker":{"type":"string"},"task":{"type":"string"}}}'
1934
+ http_version:
1935
+ recorded_at: Fri, 16 May 2014 22:18:16 GMT
1936
+ - request:
1937
+ method: post
1938
+ uri: http://localhost:8080/api/commands/create-policy
1939
+ body:
1940
+ encoding: UTF-8
1941
+ string: '{"name":"test","hostname":"abc.com","root-password":"abc","task":"noop","repo":"name","broker":"puppet","tags":["tag1"],"tag":"tag2"}'
1942
+ headers:
1943
+ Accept:
1944
+ - application/json
1945
+ Accept-Encoding:
1946
+ - gzip, deflate
1947
+ Content-Type:
1948
+ - application/json
1949
+ Content-Length:
1950
+ - '133'
1951
+ User-Agent:
1952
+ - Ruby
1953
+ response:
1954
+ status:
1955
+ code: 202
1956
+ message: Accepted
1957
+ headers:
1958
+ Server:
1959
+ - Apache-Coyote/1.1
1960
+ X-Content-Type-Options:
1961
+ - nosniff
1962
+ Content-Type:
1963
+ - application/json;charset=utf-8
1964
+ Content-Length:
1965
+ - '207'
1966
+ Date:
1967
+ - Fri, 16 May 2014 22:18:16 GMT
1968
+ body:
1969
+ encoding: US-ASCII
1970
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/policies/member","id":"http://localhost:8080/api/collections/policies/test","name":"test","command":"http://localhost:8080/api/collections/commands/5"}'
1971
+ http_version:
1972
+ recorded_at: Fri, 16 May 2014 22:18:16 GMT
1973
+ - request:
1974
+ method: get
1975
+ uri: http://localhost:8080/api/collections/policies/test
1976
+ body:
1977
+ encoding: US-ASCII
1978
+ string: ''
1979
+ headers:
1980
+ Accept:
1981
+ - application/json
1982
+ Accept-Encoding:
1983
+ - gzip, deflate
1984
+ User-Agent:
1985
+ - Ruby
1986
+ response:
1987
+ status:
1988
+ code: 200
1989
+ message: OK
1990
+ headers:
1991
+ Server:
1992
+ - Apache-Coyote/1.1
1993
+ X-Content-Type-Options:
1994
+ - nosniff
1995
+ Content-Type:
1996
+ - application/json;charset=utf-8
1997
+ Content-Length:
1998
+ - '1071'
1999
+ Date:
2000
+ - Fri, 16 May 2014 22:18:16 GMT
2001
+ body:
2002
+ encoding: US-ASCII
2003
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/policies/member","id":"http://localhost:8080/api/collections/policies/test","name":"test","repo":{"spec":"http://api.puppetlabs.com/razor/v1/collections/repos/member","id":"http://localhost:8080/api/collections/repos/name","name":"name"},"task":{"spec":"http://api.puppetlabs.com/razor/v1/collections/tasks/member","id":"http://localhost:8080/api/collections/tasks/noop","name":"noop"},"broker":{"spec":"http://api.puppetlabs.com/razor/v1/collections/brokers/member","id":"http://localhost:8080/api/collections/brokers/puppet","name":"puppet"},"enabled":true,"configuration":{"hostname_pattern":"abc.com","root_password":"abc"},"tags":[{"spec":"http://api.puppetlabs.com/razor/v1/collections/tags/member","id":"http://localhost:8080/api/collections/tags/tag1","name":"tag1"},{"spec":"http://api.puppetlabs.com/razor/v1/collections/tags/member","id":"http://localhost:8080/api/collections/tags/tag2","name":"tag2"}],"nodes":{"id":"http://localhost:8080/api/collections/policies/test/nodes","count":0,"name":"nodes"}}'
2004
+ http_version:
2005
+ recorded_at: Fri, 16 May 2014 22:18:16 GMT
2006
+ recorded_with: VCR 2.5.0