razor-client 0.15.1 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. checksums.yaml +7 -0
  2. data/NEWS.md +22 -0
  3. data/bin/razor +24 -0
  4. data/lib/razor/cli/command.rb +139 -0
  5. data/lib/razor/cli/document.rb +8 -4
  6. data/lib/razor/cli/format.rb +46 -22
  7. data/lib/razor/cli/navigate.rb +27 -149
  8. data/lib/razor/cli/parse.rb +21 -5
  9. data/lib/razor/cli/query.rb +68 -0
  10. data/lib/razor/cli/table_format.rb +41 -0
  11. data/lib/razor/cli/transforms.rb +18 -0
  12. data/lib/razor/cli/version.rb +1 -1
  13. data/lib/razor/cli/views.yaml +38 -0
  14. data/lib/razor/cli.rb +5 -2
  15. data/spec/cli/format_spec.rb +95 -5
  16. data/spec/cli/navigate_spec.rb +49 -5
  17. data/spec/cli/parse_spec.rb +21 -0
  18. data/spec/fixtures/vcr/Razor_CLI_Navigate/argument_formatting/should_allow_in_string.yml +322 -0
  19. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_API_command_help_for_razor_--api_command_--help_.yml +110 -0
  20. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_API_command_help_for_razor_--api_command_help_.yml +110 -0
  21. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_API_command_help_for_razor_--api_help_command_.yml +110 -0
  22. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_API_command_help_for_razor_--help_--api_command_.yml +110 -0
  23. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_API_command_help_for_razor_-a_-h_command_.yml +110 -0
  24. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_API_command_help_for_razor_-a_command_-h_.yml +110 -0
  25. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_multiple_arguments_with_same_name/combining_as_an_object/should_construct_a_json_object.yml +181 -49
  26. 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 +121 -46
  27. 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 +68 -65
  28. 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 +177 -45
  29. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_query_parameters/should_append_limit.yml +69 -0
  30. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_query_parameters/should_append_start.yml +69 -0
  31. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_query_parameters/should_not_fail_when_query_returns_details_for_one_item.yml +421 -0
  32. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_query_parameters/should_store_query_without_query_parameters.yml +773 -0
  33. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_query_parameters/should_throw_an_error_if_the_query_parameter_is_not_in_the_API.yml +36 -0
  34. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_query_parameters/should_throw_an_error_if_the_query_parameter_is_not_in_the_API_from_a_single_item.yml +388 -0
  35. metadata +94 -82
@@ -0,0 +1,773 @@
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
+ - '5644'
29
+ Date:
30
+ - Tue, 18 Nov 2014 07:10:19 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-hook","rel":"http://api.puppetlabs.com/razor/v1/commands/create-hook","id":"http://localhost:8080/api/commands/create-hook"},{"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-hook","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-hook","id":"http://localhost:8080/api/commands/delete-hook"},{"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","params":{"start":{"type":"number"},"limit":{"type":"number"}}},{"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"},{"name":"events","rel":"http://api.puppetlabs.com/razor/v1/collections/events","id":"http://localhost:8080/api/collections/events","params":{"start":{"type":"number"},"limit":{"type":"number"}}},{"name":"hooks","rel":"http://api.puppetlabs.com/razor/v1/collections/hooks","id":"http://localhost:8080/api/collections/hooks"}],"version":{"server":"v0.15.0-67-gcc2509f"}}'
34
+ http_version:
35
+ recorded_at: Tue, 18 Nov 2014 07:10:20 GMT
36
+ - request:
37
+ method: get
38
+ uri: http://localhost:8080/api/commands/register-node
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.15.0-67-gcc2509f"'
58
+ X-Content-Type-Options:
59
+ - nosniff
60
+ Content-Type:
61
+ - application/json;charset=utf-8
62
+ Content-Length:
63
+ - '6185'
64
+ Date:
65
+ - Tue, 18 Nov 2014 07:10:19 GMT
66
+ body:
67
+ encoding: US-ASCII
68
+ string: '{"name":"register-node","help":{"summary":"Register a node with Razor
69
+ before it is discovered","description":"In order to make brownfield deployments
70
+ of Razor easier we allow users to\nregister nodes explicitly. This command
71
+ allows you to perform the same\nregistration that would happen when a new
72
+ node checked in, ahead of time.\n\nIn order for this to be effective the hw_info
73
+ must contain enough information\nthat the node can successfully be matched
74
+ during the iPXE boot phase.\n\nIf the node matches an existing node, in keeping
75
+ with the overall policy of\ncommands declaring desired state, the node installed
76
+ field will be updated to\nmatch the value in this command.\n\nThe final state
77
+ is that a node with the supplied hardware information, and the\ndesired installed
78
+ state, will be present in the database, regardless of it\nexisting before
79
+ hand or not.","schema":"# Access Control\n\nThis command''s access control
80
+ pattern: `commands:register-node`\n\nFor more detail on how the permission
81
+ strings are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
82
+ pattern is expanded\nand then a permission check applied to it, before the
83
+ command is authorized.\n\nThese checks only apply if security is enabled in
84
+ the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
85
+ http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * installed\n -
86
+ Should the node be considered ''installed'' already? Installed nodes are\n not
87
+ eligible for policy matching, and will simply boot locally.\n - This attribute
88
+ is required.\n - It must be of type boolean.\n\n * hw-info\n - The hardware
89
+ information for the node. This is used to match the node on first\n boot
90
+ with the record in the database. The order of MAC address assignment in\n this
91
+ data is not significant, as a node with reordered MAC addresses will be\n treated
92
+ as the same node.\n - This attribute is required.\n - It must be of type
93
+ object.\n - It must be between 1 and Infinity in length.\n # Attributes\n \n *
94
+ serial\n - The DMI serial number of the node\n - It must be of type
95
+ string.\n \n * asset\n - The DMI asset tag of the node\n -
96
+ It must be of type string.\n \n * uuid\n - The DMI UUID of the node\n -
97
+ It must be of type string.\n","examples":{"api":"Register a machine before
98
+ you boot it, and note that it already has an OS\ninstalled, so should not
99
+ be subject to policy-based reinstallation:\n\n {\n \"hw-info\": {\n \"net0\": \"78:31:c1:be:c8:00\",\n \"net1\": \"72:00:01:f2:13:f0\",\n \"net2\": \"72:00:01:f2:13:f1\",\n \"serial\":
100
+ \"xxxxxxxxxxx\",\n \"asset\": \"Asset-1234567890\",\n \"uuid\": \"Not
101
+ Settable\"\n },\n \"installed\": true\n }","cli":"Register a
102
+ machine before you boot it, and note that it already has an OS\ninstalled,
103
+ so should not be subject to policy-based reinstallation:\n\n razor register-node
104
+ --hw-info net0=78:31:c1:be:c8:00 \\\n --hw-info net1=72:00:01:f2:13:f0
105
+ \\\n --hw-info net2=72:00:01:f2:13:f1 \\\n --hw-info serial=xxxxxxxxxxx
106
+ \\\n --hw-info asset=Asset-1234567890 \\\n --hw-info uuid=\"Not
107
+ Settable\" \\\n --installed"},"full":"# SYNOPSIS\nRegister a node with
108
+ Razor before it is discovered\n\n# DESCRIPTION\nIn order to make brownfield
109
+ deployments of Razor easier we allow users to\nregister nodes explicitly. This
110
+ command allows you to perform the same\nregistration that would happen when
111
+ a new node checked in, ahead of time.\n\nIn order for this to be effective
112
+ the hw_info must contain enough information\nthat the node can successfully
113
+ be matched during the iPXE boot phase.\n\nIf the node matches an existing
114
+ node, in keeping with the overall policy of\ncommands declaring desired state,
115
+ the node installed field will be updated to\nmatch the value in this command.\n\nThe
116
+ final state is that a node with the supplied hardware information, and the\ndesired
117
+ installed state, will be present in the database, regardless of it\nexisting
118
+ before hand or not.\n# Access Control\n\nThis command''s access control pattern:
119
+ `commands:register-node`\n\nFor more detail on how the permission strings
120
+ are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
121
+ pattern is expanded\nand then a permission check applied to it, before the
122
+ command is authorized.\n\nThese checks only apply if security is enabled in
123
+ the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
124
+ http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * installed\n -
125
+ Should the node be considered ''installed'' already? Installed nodes are\n not
126
+ eligible for policy matching, and will simply boot locally.\n - This attribute
127
+ is required.\n - It must be of type boolean.\n\n * hw-info\n - The hardware
128
+ information for the node. This is used to match the node on first\n boot
129
+ with the record in the database. The order of MAC address assignment in\n this
130
+ data is not significant, as a node with reordered MAC addresses will be\n treated
131
+ as the same node.\n - This attribute is required.\n - It must be of type
132
+ object.\n - It must be between 1 and Infinity in length.\n # Attributes\n \n *
133
+ serial\n - The DMI serial number of the node\n - It must be of type
134
+ string.\n \n * asset\n - The DMI asset tag of the node\n -
135
+ It must be of type string.\n \n * uuid\n - The DMI UUID of the node\n -
136
+ It must be of type string.\n\n# EXAMPLES\n\n Register a machine before you
137
+ boot it, and note that it already has an OS\n installed, so should not be
138
+ subject to policy-based reinstallation:\n \n {\n \"hw-info\":
139
+ {\n \"net0\": \"78:31:c1:be:c8:00\",\n \"net1\": \"72:00:01:f2:13:f0\",\n \"net2\": \"72:00:01:f2:13:f1\",\n \"serial\":
140
+ \"xxxxxxxxxxx\",\n \"asset\": \"Asset-1234567890\",\n \"uuid\": \"Not
141
+ Settable\"\n },\n \"installed\": true\n }\n"},"schema":{"installed":{"type":"boolean"},"hw-info":{"type":"object"}}}'
142
+ http_version:
143
+ recorded_at: Tue, 18 Nov 2014 07:10:20 GMT
144
+ - request:
145
+ method: get
146
+ uri: http://localhost:8080/api/commands/register-node
147
+ body:
148
+ encoding: US-ASCII
149
+ string: ''
150
+ headers:
151
+ Accept:
152
+ - application/json
153
+ Accept-Encoding:
154
+ - gzip, deflate
155
+ User-Agent:
156
+ - Ruby
157
+ response:
158
+ status:
159
+ code: 200
160
+ message: OK
161
+ headers:
162
+ Server:
163
+ - Apache-Coyote/1.1
164
+ Etag:
165
+ - '"server-version-v0.15.0-67-gcc2509f"'
166
+ X-Content-Type-Options:
167
+ - nosniff
168
+ Content-Type:
169
+ - application/json;charset=utf-8
170
+ Content-Length:
171
+ - '6185'
172
+ Date:
173
+ - Tue, 18 Nov 2014 07:10:19 GMT
174
+ body:
175
+ encoding: US-ASCII
176
+ string: '{"name":"register-node","help":{"summary":"Register a node with Razor
177
+ before it is discovered","description":"In order to make brownfield deployments
178
+ of Razor easier we allow users to\nregister nodes explicitly. This command
179
+ allows you to perform the same\nregistration that would happen when a new
180
+ node checked in, ahead of time.\n\nIn order for this to be effective the hw_info
181
+ must contain enough information\nthat the node can successfully be matched
182
+ during the iPXE boot phase.\n\nIf the node matches an existing node, in keeping
183
+ with the overall policy of\ncommands declaring desired state, the node installed
184
+ field will be updated to\nmatch the value in this command.\n\nThe final state
185
+ is that a node with the supplied hardware information, and the\ndesired installed
186
+ state, will be present in the database, regardless of it\nexisting before
187
+ hand or not.","schema":"# Access Control\n\nThis command''s access control
188
+ pattern: `commands:register-node`\n\nFor more detail on how the permission
189
+ strings are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
190
+ pattern is expanded\nand then a permission check applied to it, before the
191
+ command is authorized.\n\nThese checks only apply if security is enabled in
192
+ the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
193
+ http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * installed\n -
194
+ Should the node be considered ''installed'' already? Installed nodes are\n not
195
+ eligible for policy matching, and will simply boot locally.\n - This attribute
196
+ is required.\n - It must be of type boolean.\n\n * hw-info\n - The hardware
197
+ information for the node. This is used to match the node on first\n boot
198
+ with the record in the database. The order of MAC address assignment in\n this
199
+ data is not significant, as a node with reordered MAC addresses will be\n treated
200
+ as the same node.\n - This attribute is required.\n - It must be of type
201
+ object.\n - It must be between 1 and Infinity in length.\n # Attributes\n \n *
202
+ serial\n - The DMI serial number of the node\n - It must be of type
203
+ string.\n \n * asset\n - The DMI asset tag of the node\n -
204
+ It must be of type string.\n \n * uuid\n - The DMI UUID of the node\n -
205
+ It must be of type string.\n","examples":{"api":"Register a machine before
206
+ you boot it, and note that it already has an OS\ninstalled, so should not
207
+ be subject to policy-based reinstallation:\n\n {\n \"hw-info\": {\n \"net0\": \"78:31:c1:be:c8:00\",\n \"net1\": \"72:00:01:f2:13:f0\",\n \"net2\": \"72:00:01:f2:13:f1\",\n \"serial\":
208
+ \"xxxxxxxxxxx\",\n \"asset\": \"Asset-1234567890\",\n \"uuid\": \"Not
209
+ Settable\"\n },\n \"installed\": true\n }","cli":"Register a
210
+ machine before you boot it, and note that it already has an OS\ninstalled,
211
+ so should not be subject to policy-based reinstallation:\n\n razor register-node
212
+ --hw-info net0=78:31:c1:be:c8:00 \\\n --hw-info net1=72:00:01:f2:13:f0
213
+ \\\n --hw-info net2=72:00:01:f2:13:f1 \\\n --hw-info serial=xxxxxxxxxxx
214
+ \\\n --hw-info asset=Asset-1234567890 \\\n --hw-info uuid=\"Not
215
+ Settable\" \\\n --installed"},"full":"# SYNOPSIS\nRegister a node with
216
+ Razor before it is discovered\n\n# DESCRIPTION\nIn order to make brownfield
217
+ deployments of Razor easier we allow users to\nregister nodes explicitly. This
218
+ command allows you to perform the same\nregistration that would happen when
219
+ a new node checked in, ahead of time.\n\nIn order for this to be effective
220
+ the hw_info must contain enough information\nthat the node can successfully
221
+ be matched during the iPXE boot phase.\n\nIf the node matches an existing
222
+ node, in keeping with the overall policy of\ncommands declaring desired state,
223
+ the node installed field will be updated to\nmatch the value in this command.\n\nThe
224
+ final state is that a node with the supplied hardware information, and the\ndesired
225
+ installed state, will be present in the database, regardless of it\nexisting
226
+ before hand or not.\n# Access Control\n\nThis command''s access control pattern:
227
+ `commands:register-node`\n\nFor more detail on how the permission strings
228
+ are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
229
+ pattern is expanded\nand then a permission check applied to it, before the
230
+ command is authorized.\n\nThese checks only apply if security is enabled in
231
+ the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
232
+ http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * installed\n -
233
+ Should the node be considered ''installed'' already? Installed nodes are\n not
234
+ eligible for policy matching, and will simply boot locally.\n - This attribute
235
+ is required.\n - It must be of type boolean.\n\n * hw-info\n - The hardware
236
+ information for the node. This is used to match the node on first\n boot
237
+ with the record in the database. The order of MAC address assignment in\n this
238
+ data is not significant, as a node with reordered MAC addresses will be\n treated
239
+ as the same node.\n - This attribute is required.\n - It must be of type
240
+ object.\n - It must be between 1 and Infinity in length.\n # Attributes\n \n *
241
+ serial\n - The DMI serial number of the node\n - It must be of type
242
+ string.\n \n * asset\n - The DMI asset tag of the node\n -
243
+ It must be of type string.\n \n * uuid\n - The DMI UUID of the node\n -
244
+ It must be of type string.\n\n# EXAMPLES\n\n Register a machine before you
245
+ boot it, and note that it already has an OS\n installed, so should not be
246
+ subject to policy-based reinstallation:\n \n {\n \"hw-info\":
247
+ {\n \"net0\": \"78:31:c1:be:c8:00\",\n \"net1\": \"72:00:01:f2:13:f0\",\n \"net2\": \"72:00:01:f2:13:f1\",\n \"serial\":
248
+ \"xxxxxxxxxxx\",\n \"asset\": \"Asset-1234567890\",\n \"uuid\": \"Not
249
+ Settable\"\n },\n \"installed\": true\n }\n"},"schema":{"installed":{"type":"boolean"},"hw-info":{"type":"object"}}}'
250
+ http_version:
251
+ recorded_at: Tue, 18 Nov 2014 07:10:20 GMT
252
+ - request:
253
+ method: post
254
+ uri: http://localhost:8080/api/commands/register-node
255
+ body:
256
+ encoding: UTF-8
257
+ string: '{"installed":true,"hw-info":{"net0":"78:31:c1:be:c8:00"}}'
258
+ headers:
259
+ Accept:
260
+ - application/json
261
+ Accept-Encoding:
262
+ - gzip, deflate
263
+ Content-Type:
264
+ - application/json
265
+ Content-Length:
266
+ - '57'
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
+ - '214'
282
+ Date:
283
+ - Tue, 18 Nov 2014 07:10:19 GMT
284
+ body:
285
+ encoding: US-ASCII
286
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/nodes/member","id":"http://localhost:8080/api/collections/nodes/node15939","name":"node15939","command":"http://localhost:8080/api/collections/commands/5929"}'
287
+ http_version:
288
+ recorded_at: Tue, 18 Nov 2014 07:10:20 GMT
289
+ - request:
290
+ method: get
291
+ uri: http://localhost:8080/api/collections/nodes/node15939
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
+ - '421'
315
+ Date:
316
+ - Tue, 18 Nov 2014 07:10:19 GMT
317
+ body:
318
+ encoding: US-ASCII
319
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/nodes/member","id":"http://localhost:8080/api/collections/nodes/node15939","name":"node15939","hw_info":{"mac":["78:31:c1:be:c8:00"]},"log":{"id":"http://localhost:8080/api/collections/nodes/node15939/log","name":"log","params":{"limit":{"type":"number"},"start":{"type":"number"}}},"tags":[],"state":{"installed":"true","installed_at":"2014-11-18T01:10:20-06:00"}}'
320
+ http_version:
321
+ recorded_at: Tue, 18 Nov 2014 07:10:20 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
+ - '5644'
348
+ Date:
349
+ - Tue, 18 Nov 2014 07:10:19 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-hook","rel":"http://api.puppetlabs.com/razor/v1/commands/create-hook","id":"http://localhost:8080/api/commands/create-hook"},{"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-hook","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-hook","id":"http://localhost:8080/api/commands/delete-hook"},{"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","params":{"start":{"type":"number"},"limit":{"type":"number"}}},{"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"},{"name":"events","rel":"http://api.puppetlabs.com/razor/v1/collections/events","id":"http://localhost:8080/api/collections/events","params":{"start":{"type":"number"},"limit":{"type":"number"}}},{"name":"hooks","rel":"http://api.puppetlabs.com/razor/v1/collections/hooks","id":"http://localhost:8080/api/collections/hooks"}],"version":{"server":"v0.15.0-67-gcc2509f"}}'
353
+ http_version:
354
+ recorded_at: Tue, 18 Nov 2014 07:10:20 GMT
355
+ - request:
356
+ method: get
357
+ uri: http://localhost:8080/api/commands/register-node
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.15.0-67-gcc2509f"'
377
+ X-Content-Type-Options:
378
+ - nosniff
379
+ Content-Type:
380
+ - application/json;charset=utf-8
381
+ Content-Length:
382
+ - '6185'
383
+ Date:
384
+ - Tue, 18 Nov 2014 07:10:19 GMT
385
+ body:
386
+ encoding: US-ASCII
387
+ string: '{"name":"register-node","help":{"summary":"Register a node with Razor
388
+ before it is discovered","description":"In order to make brownfield deployments
389
+ of Razor easier we allow users to\nregister nodes explicitly. This command
390
+ allows you to perform the same\nregistration that would happen when a new
391
+ node checked in, ahead of time.\n\nIn order for this to be effective the hw_info
392
+ must contain enough information\nthat the node can successfully be matched
393
+ during the iPXE boot phase.\n\nIf the node matches an existing node, in keeping
394
+ with the overall policy of\ncommands declaring desired state, the node installed
395
+ field will be updated to\nmatch the value in this command.\n\nThe final state
396
+ is that a node with the supplied hardware information, and the\ndesired installed
397
+ state, will be present in the database, regardless of it\nexisting before
398
+ hand or not.","schema":"# Access Control\n\nThis command''s access control
399
+ pattern: `commands:register-node`\n\nFor more detail on how the permission
400
+ strings are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
401
+ pattern is expanded\nand then a permission check applied to it, before the
402
+ command is authorized.\n\nThese checks only apply if security is enabled in
403
+ the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
404
+ http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * installed\n -
405
+ Should the node be considered ''installed'' already? Installed nodes are\n not
406
+ eligible for policy matching, and will simply boot locally.\n - This attribute
407
+ is required.\n - It must be of type boolean.\n\n * hw-info\n - The hardware
408
+ information for the node. This is used to match the node on first\n boot
409
+ with the record in the database. The order of MAC address assignment in\n this
410
+ data is not significant, as a node with reordered MAC addresses will be\n treated
411
+ as the same node.\n - This attribute is required.\n - It must be of type
412
+ object.\n - It must be between 1 and Infinity in length.\n # Attributes\n \n *
413
+ serial\n - The DMI serial number of the node\n - It must be of type
414
+ string.\n \n * asset\n - The DMI asset tag of the node\n -
415
+ It must be of type string.\n \n * uuid\n - The DMI UUID of the node\n -
416
+ It must be of type string.\n","examples":{"api":"Register a machine before
417
+ you boot it, and note that it already has an OS\ninstalled, so should not
418
+ be subject to policy-based reinstallation:\n\n {\n \"hw-info\": {\n \"net0\": \"78:31:c1:be:c8:00\",\n \"net1\": \"72:00:01:f2:13:f0\",\n \"net2\": \"72:00:01:f2:13:f1\",\n \"serial\":
419
+ \"xxxxxxxxxxx\",\n \"asset\": \"Asset-1234567890\",\n \"uuid\": \"Not
420
+ Settable\"\n },\n \"installed\": true\n }","cli":"Register a
421
+ machine before you boot it, and note that it already has an OS\ninstalled,
422
+ so should not be subject to policy-based reinstallation:\n\n razor register-node
423
+ --hw-info net0=78:31:c1:be:c8:00 \\\n --hw-info net1=72:00:01:f2:13:f0
424
+ \\\n --hw-info net2=72:00:01:f2:13:f1 \\\n --hw-info serial=xxxxxxxxxxx
425
+ \\\n --hw-info asset=Asset-1234567890 \\\n --hw-info uuid=\"Not
426
+ Settable\" \\\n --installed"},"full":"# SYNOPSIS\nRegister a node with
427
+ Razor before it is discovered\n\n# DESCRIPTION\nIn order to make brownfield
428
+ deployments of Razor easier we allow users to\nregister nodes explicitly. This
429
+ command allows you to perform the same\nregistration that would happen when
430
+ a new node checked in, ahead of time.\n\nIn order for this to be effective
431
+ the hw_info must contain enough information\nthat the node can successfully
432
+ be matched during the iPXE boot phase.\n\nIf the node matches an existing
433
+ node, in keeping with the overall policy of\ncommands declaring desired state,
434
+ the node installed field will be updated to\nmatch the value in this command.\n\nThe
435
+ final state is that a node with the supplied hardware information, and the\ndesired
436
+ installed state, will be present in the database, regardless of it\nexisting
437
+ before hand or not.\n# Access Control\n\nThis command''s access control pattern:
438
+ `commands:register-node`\n\nFor more detail on how the permission strings
439
+ are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
440
+ pattern is expanded\nand then a permission check applied to it, before the
441
+ command is authorized.\n\nThese checks only apply if security is enabled in
442
+ the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
443
+ http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * installed\n -
444
+ Should the node be considered ''installed'' already? Installed nodes are\n not
445
+ eligible for policy matching, and will simply boot locally.\n - This attribute
446
+ is required.\n - It must be of type boolean.\n\n * hw-info\n - The hardware
447
+ information for the node. This is used to match the node on first\n boot
448
+ with the record in the database. The order of MAC address assignment in\n this
449
+ data is not significant, as a node with reordered MAC addresses will be\n treated
450
+ as the same node.\n - This attribute is required.\n - It must be of type
451
+ object.\n - It must be between 1 and Infinity in length.\n # Attributes\n \n *
452
+ serial\n - The DMI serial number of the node\n - It must be of type
453
+ string.\n \n * asset\n - The DMI asset tag of the node\n -
454
+ It must be of type string.\n \n * uuid\n - The DMI UUID of the node\n -
455
+ It must be of type string.\n\n# EXAMPLES\n\n Register a machine before you
456
+ boot it, and note that it already has an OS\n installed, so should not be
457
+ subject to policy-based reinstallation:\n \n {\n \"hw-info\":
458
+ {\n \"net0\": \"78:31:c1:be:c8:00\",\n \"net1\": \"72:00:01:f2:13:f0\",\n \"net2\": \"72:00:01:f2:13:f1\",\n \"serial\":
459
+ \"xxxxxxxxxxx\",\n \"asset\": \"Asset-1234567890\",\n \"uuid\": \"Not
460
+ Settable\"\n },\n \"installed\": true\n }\n"},"schema":{"installed":{"type":"boolean"},"hw-info":{"type":"object"}}}'
461
+ http_version:
462
+ recorded_at: Tue, 18 Nov 2014 07:10:20 GMT
463
+ - request:
464
+ method: get
465
+ uri: http://localhost:8080/api/commands/register-node
466
+ body:
467
+ encoding: US-ASCII
468
+ string: ''
469
+ headers:
470
+ Accept:
471
+ - application/json
472
+ Accept-Encoding:
473
+ - gzip, deflate
474
+ User-Agent:
475
+ - Ruby
476
+ response:
477
+ status:
478
+ code: 200
479
+ message: OK
480
+ headers:
481
+ Server:
482
+ - Apache-Coyote/1.1
483
+ Etag:
484
+ - '"server-version-v0.15.0-67-gcc2509f"'
485
+ X-Content-Type-Options:
486
+ - nosniff
487
+ Content-Type:
488
+ - application/json;charset=utf-8
489
+ Content-Length:
490
+ - '6185'
491
+ Date:
492
+ - Tue, 18 Nov 2014 07:10:19 GMT
493
+ body:
494
+ encoding: US-ASCII
495
+ string: '{"name":"register-node","help":{"summary":"Register a node with Razor
496
+ before it is discovered","description":"In order to make brownfield deployments
497
+ of Razor easier we allow users to\nregister nodes explicitly. This command
498
+ allows you to perform the same\nregistration that would happen when a new
499
+ node checked in, ahead of time.\n\nIn order for this to be effective the hw_info
500
+ must contain enough information\nthat the node can successfully be matched
501
+ during the iPXE boot phase.\n\nIf the node matches an existing node, in keeping
502
+ with the overall policy of\ncommands declaring desired state, the node installed
503
+ field will be updated to\nmatch the value in this command.\n\nThe final state
504
+ is that a node with the supplied hardware information, and the\ndesired installed
505
+ state, will be present in the database, regardless of it\nexisting before
506
+ hand or not.","schema":"# Access Control\n\nThis command''s access control
507
+ pattern: `commands:register-node`\n\nFor more detail on how the permission
508
+ strings are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
509
+ pattern is expanded\nand then a permission check applied to it, before the
510
+ command is authorized.\n\nThese checks only apply if security is enabled in
511
+ the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
512
+ http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * installed\n -
513
+ Should the node be considered ''installed'' already? Installed nodes are\n not
514
+ eligible for policy matching, and will simply boot locally.\n - This attribute
515
+ is required.\n - It must be of type boolean.\n\n * hw-info\n - The hardware
516
+ information for the node. This is used to match the node on first\n boot
517
+ with the record in the database. The order of MAC address assignment in\n this
518
+ data is not significant, as a node with reordered MAC addresses will be\n treated
519
+ as the same node.\n - This attribute is required.\n - It must be of type
520
+ object.\n - It must be between 1 and Infinity in length.\n # Attributes\n \n *
521
+ serial\n - The DMI serial number of the node\n - It must be of type
522
+ string.\n \n * asset\n - The DMI asset tag of the node\n -
523
+ It must be of type string.\n \n * uuid\n - The DMI UUID of the node\n -
524
+ It must be of type string.\n","examples":{"api":"Register a machine before
525
+ you boot it, and note that it already has an OS\ninstalled, so should not
526
+ be subject to policy-based reinstallation:\n\n {\n \"hw-info\": {\n \"net0\": \"78:31:c1:be:c8:00\",\n \"net1\": \"72:00:01:f2:13:f0\",\n \"net2\": \"72:00:01:f2:13:f1\",\n \"serial\":
527
+ \"xxxxxxxxxxx\",\n \"asset\": \"Asset-1234567890\",\n \"uuid\": \"Not
528
+ Settable\"\n },\n \"installed\": true\n }","cli":"Register a
529
+ machine before you boot it, and note that it already has an OS\ninstalled,
530
+ so should not be subject to policy-based reinstallation:\n\n razor register-node
531
+ --hw-info net0=78:31:c1:be:c8:00 \\\n --hw-info net1=72:00:01:f2:13:f0
532
+ \\\n --hw-info net2=72:00:01:f2:13:f1 \\\n --hw-info serial=xxxxxxxxxxx
533
+ \\\n --hw-info asset=Asset-1234567890 \\\n --hw-info uuid=\"Not
534
+ Settable\" \\\n --installed"},"full":"# SYNOPSIS\nRegister a node with
535
+ Razor before it is discovered\n\n# DESCRIPTION\nIn order to make brownfield
536
+ deployments of Razor easier we allow users to\nregister nodes explicitly. This
537
+ command allows you to perform the same\nregistration that would happen when
538
+ a new node checked in, ahead of time.\n\nIn order for this to be effective
539
+ the hw_info must contain enough information\nthat the node can successfully
540
+ be matched during the iPXE boot phase.\n\nIf the node matches an existing
541
+ node, in keeping with the overall policy of\ncommands declaring desired state,
542
+ the node installed field will be updated to\nmatch the value in this command.\n\nThe
543
+ final state is that a node with the supplied hardware information, and the\ndesired
544
+ installed state, will be present in the database, regardless of it\nexisting
545
+ before hand or not.\n# Access Control\n\nThis command''s access control pattern:
546
+ `commands:register-node`\n\nFor more detail on how the permission strings
547
+ are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
548
+ pattern is expanded\nand then a permission check applied to it, before the
549
+ command is authorized.\n\nThese checks only apply if security is enabled in
550
+ the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
551
+ http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * installed\n -
552
+ Should the node be considered ''installed'' already? Installed nodes are\n not
553
+ eligible for policy matching, and will simply boot locally.\n - This attribute
554
+ is required.\n - It must be of type boolean.\n\n * hw-info\n - The hardware
555
+ information for the node. This is used to match the node on first\n boot
556
+ with the record in the database. The order of MAC address assignment in\n this
557
+ data is not significant, as a node with reordered MAC addresses will be\n treated
558
+ as the same node.\n - This attribute is required.\n - It must be of type
559
+ object.\n - It must be between 1 and Infinity in length.\n # Attributes\n \n *
560
+ serial\n - The DMI serial number of the node\n - It must be of type
561
+ string.\n \n * asset\n - The DMI asset tag of the node\n -
562
+ It must be of type string.\n \n * uuid\n - The DMI UUID of the node\n -
563
+ It must be of type string.\n\n# EXAMPLES\n\n Register a machine before you
564
+ boot it, and note that it already has an OS\n installed, so should not be
565
+ subject to policy-based reinstallation:\n \n {\n \"hw-info\":
566
+ {\n \"net0\": \"78:31:c1:be:c8:00\",\n \"net1\": \"72:00:01:f2:13:f0\",\n \"net2\": \"72:00:01:f2:13:f1\",\n \"serial\":
567
+ \"xxxxxxxxxxx\",\n \"asset\": \"Asset-1234567890\",\n \"uuid\": \"Not
568
+ Settable\"\n },\n \"installed\": true\n }\n"},"schema":{"installed":{"type":"boolean"},"hw-info":{"type":"object"}}}'
569
+ http_version:
570
+ recorded_at: Tue, 18 Nov 2014 07:10:20 GMT
571
+ - request:
572
+ method: post
573
+ uri: http://localhost:8080/api/commands/register-node
574
+ body:
575
+ encoding: UTF-8
576
+ string: '{"installed":true,"hw-info":{"net0":"78:31:c1:be:c8:01"}}'
577
+ headers:
578
+ Accept:
579
+ - application/json
580
+ Accept-Encoding:
581
+ - gzip, deflate
582
+ Content-Type:
583
+ - application/json
584
+ Content-Length:
585
+ - '57'
586
+ User-Agent:
587
+ - Ruby
588
+ response:
589
+ status:
590
+ code: 202
591
+ message: Accepted
592
+ headers:
593
+ Server:
594
+ - Apache-Coyote/1.1
595
+ X-Content-Type-Options:
596
+ - nosniff
597
+ Content-Type:
598
+ - application/json;charset=utf-8
599
+ Content-Length:
600
+ - '214'
601
+ Date:
602
+ - Tue, 18 Nov 2014 07:10:19 GMT
603
+ body:
604
+ encoding: US-ASCII
605
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/nodes/member","id":"http://localhost:8080/api/collections/nodes/node15940","name":"node15940","command":"http://localhost:8080/api/collections/commands/5930"}'
606
+ http_version:
607
+ recorded_at: Tue, 18 Nov 2014 07:10:20 GMT
608
+ - request:
609
+ method: get
610
+ uri: http://localhost:8080/api/collections/nodes/node15940
611
+ body:
612
+ encoding: US-ASCII
613
+ string: ''
614
+ headers:
615
+ Accept:
616
+ - application/json
617
+ Accept-Encoding:
618
+ - gzip, deflate
619
+ User-Agent:
620
+ - Ruby
621
+ response:
622
+ status:
623
+ code: 200
624
+ message: OK
625
+ headers:
626
+ Server:
627
+ - Apache-Coyote/1.1
628
+ X-Content-Type-Options:
629
+ - nosniff
630
+ Content-Type:
631
+ - application/json;charset=utf-8
632
+ Content-Length:
633
+ - '421'
634
+ Date:
635
+ - Tue, 18 Nov 2014 07:10:19 GMT
636
+ body:
637
+ encoding: US-ASCII
638
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/nodes/member","id":"http://localhost:8080/api/collections/nodes/node15940","name":"node15940","hw_info":{"mac":["78:31:c1:be:c8:01"]},"log":{"id":"http://localhost:8080/api/collections/nodes/node15940/log","name":"log","params":{"limit":{"type":"number"},"start":{"type":"number"}}},"tags":[],"state":{"installed":"true","installed_at":"2014-11-18T01:10:20-06:00"}}'
639
+ http_version:
640
+ recorded_at: Tue, 18 Nov 2014 07:10:20 GMT
641
+ - request:
642
+ method: get
643
+ uri: http://fred:dead@localhost:8080/api
644
+ body:
645
+ encoding: US-ASCII
646
+ string: ''
647
+ headers:
648
+ Accept:
649
+ - application/json
650
+ Accept-Encoding:
651
+ - gzip, deflate
652
+ User-Agent:
653
+ - Ruby
654
+ response:
655
+ status:
656
+ code: 200
657
+ message: OK
658
+ headers:
659
+ Server:
660
+ - Apache-Coyote/1.1
661
+ X-Content-Type-Options:
662
+ - nosniff
663
+ Content-Type:
664
+ - application/json;charset=utf-8
665
+ Content-Length:
666
+ - '5644'
667
+ Date:
668
+ - Tue, 18 Nov 2014 07:10:19 GMT
669
+ body:
670
+ encoding: US-ASCII
671
+ 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-hook","rel":"http://api.puppetlabs.com/razor/v1/commands/create-hook","id":"http://localhost:8080/api/commands/create-hook"},{"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-hook","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-hook","id":"http://localhost:8080/api/commands/delete-hook"},{"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","params":{"start":{"type":"number"},"limit":{"type":"number"}}},{"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"},{"name":"events","rel":"http://api.puppetlabs.com/razor/v1/collections/events","id":"http://localhost:8080/api/collections/events","params":{"start":{"type":"number"},"limit":{"type":"number"}}},{"name":"hooks","rel":"http://api.puppetlabs.com/razor/v1/collections/hooks","id":"http://localhost:8080/api/collections/hooks"}],"version":{"server":"v0.15.0-67-gcc2509f"}}'
672
+ http_version:
673
+ recorded_at: Tue, 18 Nov 2014 07:10:20 GMT
674
+ - request:
675
+ method: get
676
+ uri: http://fred:dead@localhost:8080/api/collections/nodes
677
+ body:
678
+ encoding: US-ASCII
679
+ string: ''
680
+ headers:
681
+ Accept:
682
+ - application/json
683
+ Accept-Encoding:
684
+ - gzip, deflate
685
+ User-Agent:
686
+ - Ruby
687
+ response:
688
+ status:
689
+ code: 200
690
+ message: OK
691
+ headers:
692
+ Server:
693
+ - Apache-Coyote/1.1
694
+ X-Content-Type-Options:
695
+ - nosniff
696
+ Content-Type:
697
+ - application/json;charset=utf-8
698
+ Content-Length:
699
+ - '385'
700
+ Date:
701
+ - Tue, 18 Nov 2014 07:10:19 GMT
702
+ body:
703
+ encoding: US-ASCII
704
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/nodes","items":[{"spec":"http://api.puppetlabs.com/razor/v1/collections/nodes/member","id":"http://localhost:8080/api/collections/nodes/node15939","name":"node15939"},{"spec":"http://api.puppetlabs.com/razor/v1/collections/nodes/member","id":"http://localhost:8080/api/collections/nodes/node15940","name":"node15940"}],"total":2}'
705
+ http_version:
706
+ recorded_at: Tue, 18 Nov 2014 07:10:20 GMT
707
+ - request:
708
+ method: get
709
+ uri: http://fred:dead@localhost:8080/api/collections/nodes/node15939
710
+ body:
711
+ encoding: US-ASCII
712
+ string: ''
713
+ headers:
714
+ Accept:
715
+ - application/json
716
+ Accept-Encoding:
717
+ - gzip, deflate
718
+ User-Agent:
719
+ - Ruby
720
+ response:
721
+ status:
722
+ code: 200
723
+ message: OK
724
+ headers:
725
+ Server:
726
+ - Apache-Coyote/1.1
727
+ X-Content-Type-Options:
728
+ - nosniff
729
+ Content-Type:
730
+ - application/json;charset=utf-8
731
+ Content-Length:
732
+ - '421'
733
+ Date:
734
+ - Tue, 18 Nov 2014 07:10:19 GMT
735
+ body:
736
+ encoding: US-ASCII
737
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/nodes/member","id":"http://localhost:8080/api/collections/nodes/node15939","name":"node15939","hw_info":{"mac":["78:31:c1:be:c8:00"]},"log":{"id":"http://localhost:8080/api/collections/nodes/node15939/log","name":"log","params":{"limit":{"type":"number"},"start":{"type":"number"}}},"tags":[],"state":{"installed":"true","installed_at":"2014-11-18T01:10:20-06:00"}}'
738
+ http_version:
739
+ recorded_at: Tue, 18 Nov 2014 07:10:20 GMT
740
+ - request:
741
+ method: get
742
+ uri: http://fred:dead@localhost:8080/api/collections/nodes/node15939/log?limit=1
743
+ body:
744
+ encoding: US-ASCII
745
+ string: ''
746
+ headers:
747
+ Accept:
748
+ - application/json
749
+ Accept-Encoding:
750
+ - gzip, deflate
751
+ User-Agent:
752
+ - Ruby
753
+ response:
754
+ status:
755
+ code: 200
756
+ message: OK
757
+ headers:
758
+ Server:
759
+ - Apache-Coyote/1.1
760
+ X-Content-Type-Options:
761
+ - nosniff
762
+ Content-Type:
763
+ - application/json;charset=utf-8
764
+ Content-Length:
765
+ - '78'
766
+ Date:
767
+ - Tue, 18 Nov 2014 07:10:19 GMT
768
+ body:
769
+ encoding: US-ASCII
770
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/nodes/log","items":[]}'
771
+ http_version:
772
+ recorded_at: Tue, 18 Nov 2014 07:10:20 GMT
773
+ recorded_with: VCR 2.5.0