pe-razor-client 0.15.2.2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/NEWS.md +27 -0
  3. data/bin/razor +27 -2
  4. data/lib/razor/cli.rb +11 -2
  5. data/lib/razor/cli/command.rb +150 -0
  6. data/lib/razor/cli/document.rb +8 -4
  7. data/lib/razor/cli/format.rb +46 -22
  8. data/lib/razor/cli/navigate.rb +28 -156
  9. data/lib/razor/cli/parse.rb +49 -7
  10. data/lib/razor/cli/query.rb +69 -0
  11. data/lib/razor/cli/table_format.rb +41 -0
  12. data/lib/razor/cli/transforms.rb +25 -0
  13. data/lib/razor/cli/version.rb +1 -1
  14. data/lib/razor/cli/views.yaml +53 -2
  15. data/spec/cli/command_spec.rb +66 -0
  16. data/spec/cli/format_spec.rb +95 -5
  17. data/spec/cli/navigate_spec.rb +50 -6
  18. data/spec/cli/parse_spec.rb +42 -2
  19. data/spec/fixtures/vcr/Razor_CLI_Navigate/argument_formatting/should_allow_in_string.yml +233 -0
  20. data/spec/fixtures/vcr/Razor_CLI_Navigate/argument_formatting/should_allow_spaces.yml +281 -548
  21. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_--help_command_.yml +160 -37
  22. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_-h_command_.yml +160 -37
  23. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_command_--help_.yml +160 -37
  24. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_command_-h_.yml +160 -37
  25. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_command_help_.yml +160 -37
  26. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_help_command_.yml +160 -37
  27. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_authentication/should_preserve_that_across_navigation.yml +10 -10
  28. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_authentication/should_supply_that_to_the_API_service.yml +5 -5
  29. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_invalid_parameter/should_fail_with_bad_JSON.yml +71 -166
  30. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_invalid_parameter/should_fail_with_malformed_argument.yml +109 -59
  31. 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 +527 -1360
  32. 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 +528 -1361
  33. 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 +528 -1361
  34. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_multiple_arguments_with_same_name/combining_as_an_object/should_construct_a_json_object.yml +80 -111
  35. 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 +137 -123
  36. 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 +71 -166
  37. 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 +71 -102
  38. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_no_parameters/should_fail_with_bad_JSON.yml +98 -5
  39. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_query_parameters/should_append_limit.yml +69 -0
  40. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_query_parameters/should_append_start.yml +69 -0
  41. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_query_parameters/should_not_fail_when_query_returns_details_for_one_item.yml +313 -0
  42. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_query_parameters/should_store_query_without_query_parameters.yml +557 -0
  43. 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
  44. 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 +280 -0
  45. data/spec/fixtures/vcr/Razor_CLI_Parse/_new/_help/should_print_a_list_of_known_endpoints.yml +5 -5
  46. data/spec/spec_helper.rb +8 -4
  47. metadata +26 -7
@@ -0,0 +1,557 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://localhost:8150/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
+ - '5650'
29
+ Date:
30
+ - Mon, 09 Mar 2015 19:55:23 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:8150/api/commands/add-policy-tag"},{"name":"create-broker","rel":"http://api.puppetlabs.com/razor/v1/commands/create-broker","id":"http://localhost:8150/api/commands/create-broker"},{"name":"create-hook","rel":"http://api.puppetlabs.com/razor/v1/commands/create-hook","id":"http://localhost:8150/api/commands/create-hook"},{"name":"create-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/create-policy","id":"http://localhost:8150/api/commands/create-policy"},{"name":"create-repo","rel":"http://api.puppetlabs.com/razor/v1/commands/create-repo","id":"http://localhost:8150/api/commands/create-repo"},{"name":"create-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/create-tag","id":"http://localhost:8150/api/commands/create-tag"},{"name":"create-task","rel":"http://api.puppetlabs.com/razor/v1/commands/create-task","id":"http://localhost:8150/api/commands/create-task"},{"name":"delete-broker","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-broker","id":"http://localhost:8150/api/commands/delete-broker"},{"name":"delete-hook","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-hook","id":"http://localhost:8150/api/commands/delete-hook"},{"name":"delete-node","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-node","id":"http://localhost:8150/api/commands/delete-node"},{"name":"delete-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-policy","id":"http://localhost:8150/api/commands/delete-policy"},{"name":"delete-repo","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-repo","id":"http://localhost:8150/api/commands/delete-repo"},{"name":"delete-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-tag","id":"http://localhost:8150/api/commands/delete-tag"},{"name":"disable-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/disable-policy","id":"http://localhost:8150/api/commands/disable-policy"},{"name":"enable-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/enable-policy","id":"http://localhost:8150/api/commands/enable-policy"},{"name":"modify-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/modify-node-metadata","id":"http://localhost:8150/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:8150/api/commands/modify-policy-max-count"},{"name":"move-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/move-policy","id":"http://localhost:8150/api/commands/move-policy"},{"name":"reboot-node","rel":"http://api.puppetlabs.com/razor/v1/commands/reboot-node","id":"http://localhost:8150/api/commands/reboot-node"},{"name":"register-node","rel":"http://api.puppetlabs.com/razor/v1/commands/register-node","id":"http://localhost:8150/api/commands/register-node"},{"name":"reinstall-node","rel":"http://api.puppetlabs.com/razor/v1/commands/reinstall-node","id":"http://localhost:8150/api/commands/reinstall-node"},{"name":"remove-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/remove-node-metadata","id":"http://localhost:8150/api/commands/remove-node-metadata"},{"name":"remove-policy-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/remove-policy-tag","id":"http://localhost:8150/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:8150/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:8150/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:8150/api/commands/set-node-ipmi-credentials"},{"name":"update-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/update-node-metadata","id":"http://localhost:8150/api/commands/update-node-metadata"},{"name":"update-tag-rule","rel":"http://api.puppetlabs.com/razor/v1/commands/update-tag-rule","id":"http://localhost:8150/api/commands/update-tag-rule"}],"collections":[{"name":"brokers","rel":"http://api.puppetlabs.com/razor/v1/collections/brokers","id":"http://localhost:8150/api/collections/brokers"},{"name":"repos","rel":"http://api.puppetlabs.com/razor/v1/collections/repos","id":"http://localhost:8150/api/collections/repos"},{"name":"tags","rel":"http://api.puppetlabs.com/razor/v1/collections/tags","id":"http://localhost:8150/api/collections/tags"},{"name":"policies","rel":"http://api.puppetlabs.com/razor/v1/collections/policies","id":"http://localhost:8150/api/collections/policies"},{"name":"nodes","rel":"http://api.puppetlabs.com/razor/v1/collections/nodes","id":"http://localhost:8150/api/collections/nodes","params":{"start":{"type":"number"},"limit":{"type":"number"}}},{"name":"tasks","rel":"http://api.puppetlabs.com/razor/v1/collections/tasks","id":"http://localhost:8150/api/collections/tasks"},{"name":"commands","rel":"http://api.puppetlabs.com/razor/v1/collections/commands","id":"http://localhost:8150/api/collections/commands"},{"name":"events","rel":"http://api.puppetlabs.com/razor/v1/collections/events","id":"http://localhost:8150/api/collections/events","params":{"start":{"type":"number"},"limit":{"type":"number"}}},{"name":"hooks","rel":"http://api.puppetlabs.com/razor/v1/collections/hooks","id":"http://localhost:8150/api/collections/hooks"}],"version":{"server":"v0.16.1-18-gd3acc7a-dirty"}}'
34
+ http_version:
35
+ recorded_at: Mon, 09 Mar 2015 19:55:23 GMT
36
+ - request:
37
+ method: get
38
+ uri: http://localhost:8150/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.16.1-18-gd3acc7a-dirty"'
58
+ X-Content-Type-Options:
59
+ - nosniff
60
+ Content-Type:
61
+ - application/json;charset=utf-8
62
+ Content-Length:
63
+ - '6207'
64
+ Date:
65
+ - Mon, 09 Mar 2015 19:55:23 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","aliases":["hw-info"]}}}'
142
+ http_version:
143
+ recorded_at: Mon, 09 Mar 2015 19:55:24 GMT
144
+ - request:
145
+ method: post
146
+ uri: http://localhost:8150/api/commands/register-node
147
+ body:
148
+ encoding: UTF-8
149
+ string: '{"installed":true,"hw_info":{"net0":"78:31:c1:be:c8:00"}}'
150
+ headers:
151
+ Accept:
152
+ - application/json
153
+ Accept-Encoding:
154
+ - gzip, deflate
155
+ Content-Type:
156
+ - application/json
157
+ Content-Length:
158
+ - '57'
159
+ User-Agent:
160
+ - Ruby
161
+ response:
162
+ status:
163
+ code: 202
164
+ message: Accepted
165
+ headers:
166
+ Server:
167
+ - Apache-Coyote/1.1
168
+ X-Content-Type-Options:
169
+ - nosniff
170
+ Content-Type:
171
+ - application/json;charset=utf-8
172
+ Content-Length:
173
+ - '203'
174
+ Date:
175
+ - Mon, 09 Mar 2015 19:55:23 GMT
176
+ body:
177
+ encoding: US-ASCII
178
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/nodes/member","id":"http://localhost:8150/api/collections/nodes/node1","name":"node1","command":"http://localhost:8150/api/collections/commands/1"}'
179
+ http_version:
180
+ recorded_at: Mon, 09 Mar 2015 19:55:24 GMT
181
+ - request:
182
+ method: get
183
+ uri: http://localhost:8150/api/collections/nodes/node1
184
+ body:
185
+ encoding: US-ASCII
186
+ string: ''
187
+ headers:
188
+ Accept:
189
+ - application/json
190
+ Accept-Encoding:
191
+ - gzip, deflate
192
+ User-Agent:
193
+ - Ruby
194
+ response:
195
+ status:
196
+ code: 200
197
+ message: OK
198
+ headers:
199
+ Server:
200
+ - Apache-Coyote/1.1
201
+ X-Content-Type-Options:
202
+ - nosniff
203
+ Content-Type:
204
+ - application/json;charset=utf-8
205
+ Content-Length:
206
+ - '409'
207
+ Date:
208
+ - Mon, 09 Mar 2015 19:55:23 GMT
209
+ body:
210
+ encoding: US-ASCII
211
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/nodes/member","id":"http://localhost:8150/api/collections/nodes/node1","name":"node1","hw_info":{"mac":["78:31:c1:be:c8:00"]},"log":{"id":"http://localhost:8150/api/collections/nodes/node1/log","name":"log","params":{"limit":{"type":"number"},"start":{"type":"number"}}},"tags":[],"state":{"installed":"true","installed_at":"2015-03-09T14:55:24-05:00"}}'
212
+ http_version:
213
+ recorded_at: Mon, 09 Mar 2015 19:55:24 GMT
214
+ - request:
215
+ method: get
216
+ uri: http://localhost:8150/api
217
+ body:
218
+ encoding: US-ASCII
219
+ string: ''
220
+ headers:
221
+ Accept:
222
+ - application/json
223
+ Accept-Encoding:
224
+ - gzip, deflate
225
+ User-Agent:
226
+ - Ruby
227
+ response:
228
+ status:
229
+ code: 200
230
+ message: OK
231
+ headers:
232
+ Server:
233
+ - Apache-Coyote/1.1
234
+ X-Content-Type-Options:
235
+ - nosniff
236
+ Content-Type:
237
+ - application/json;charset=utf-8
238
+ Content-Length:
239
+ - '5650'
240
+ Date:
241
+ - Mon, 09 Mar 2015 19:55:23 GMT
242
+ body:
243
+ encoding: US-ASCII
244
+ string: '{"commands":[{"name":"add-policy-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/add-policy-tag","id":"http://localhost:8150/api/commands/add-policy-tag"},{"name":"create-broker","rel":"http://api.puppetlabs.com/razor/v1/commands/create-broker","id":"http://localhost:8150/api/commands/create-broker"},{"name":"create-hook","rel":"http://api.puppetlabs.com/razor/v1/commands/create-hook","id":"http://localhost:8150/api/commands/create-hook"},{"name":"create-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/create-policy","id":"http://localhost:8150/api/commands/create-policy"},{"name":"create-repo","rel":"http://api.puppetlabs.com/razor/v1/commands/create-repo","id":"http://localhost:8150/api/commands/create-repo"},{"name":"create-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/create-tag","id":"http://localhost:8150/api/commands/create-tag"},{"name":"create-task","rel":"http://api.puppetlabs.com/razor/v1/commands/create-task","id":"http://localhost:8150/api/commands/create-task"},{"name":"delete-broker","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-broker","id":"http://localhost:8150/api/commands/delete-broker"},{"name":"delete-hook","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-hook","id":"http://localhost:8150/api/commands/delete-hook"},{"name":"delete-node","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-node","id":"http://localhost:8150/api/commands/delete-node"},{"name":"delete-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-policy","id":"http://localhost:8150/api/commands/delete-policy"},{"name":"delete-repo","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-repo","id":"http://localhost:8150/api/commands/delete-repo"},{"name":"delete-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-tag","id":"http://localhost:8150/api/commands/delete-tag"},{"name":"disable-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/disable-policy","id":"http://localhost:8150/api/commands/disable-policy"},{"name":"enable-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/enable-policy","id":"http://localhost:8150/api/commands/enable-policy"},{"name":"modify-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/modify-node-metadata","id":"http://localhost:8150/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:8150/api/commands/modify-policy-max-count"},{"name":"move-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/move-policy","id":"http://localhost:8150/api/commands/move-policy"},{"name":"reboot-node","rel":"http://api.puppetlabs.com/razor/v1/commands/reboot-node","id":"http://localhost:8150/api/commands/reboot-node"},{"name":"register-node","rel":"http://api.puppetlabs.com/razor/v1/commands/register-node","id":"http://localhost:8150/api/commands/register-node"},{"name":"reinstall-node","rel":"http://api.puppetlabs.com/razor/v1/commands/reinstall-node","id":"http://localhost:8150/api/commands/reinstall-node"},{"name":"remove-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/remove-node-metadata","id":"http://localhost:8150/api/commands/remove-node-metadata"},{"name":"remove-policy-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/remove-policy-tag","id":"http://localhost:8150/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:8150/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:8150/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:8150/api/commands/set-node-ipmi-credentials"},{"name":"update-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/update-node-metadata","id":"http://localhost:8150/api/commands/update-node-metadata"},{"name":"update-tag-rule","rel":"http://api.puppetlabs.com/razor/v1/commands/update-tag-rule","id":"http://localhost:8150/api/commands/update-tag-rule"}],"collections":[{"name":"brokers","rel":"http://api.puppetlabs.com/razor/v1/collections/brokers","id":"http://localhost:8150/api/collections/brokers"},{"name":"repos","rel":"http://api.puppetlabs.com/razor/v1/collections/repos","id":"http://localhost:8150/api/collections/repos"},{"name":"tags","rel":"http://api.puppetlabs.com/razor/v1/collections/tags","id":"http://localhost:8150/api/collections/tags"},{"name":"policies","rel":"http://api.puppetlabs.com/razor/v1/collections/policies","id":"http://localhost:8150/api/collections/policies"},{"name":"nodes","rel":"http://api.puppetlabs.com/razor/v1/collections/nodes","id":"http://localhost:8150/api/collections/nodes","params":{"start":{"type":"number"},"limit":{"type":"number"}}},{"name":"tasks","rel":"http://api.puppetlabs.com/razor/v1/collections/tasks","id":"http://localhost:8150/api/collections/tasks"},{"name":"commands","rel":"http://api.puppetlabs.com/razor/v1/collections/commands","id":"http://localhost:8150/api/collections/commands"},{"name":"events","rel":"http://api.puppetlabs.com/razor/v1/collections/events","id":"http://localhost:8150/api/collections/events","params":{"start":{"type":"number"},"limit":{"type":"number"}}},{"name":"hooks","rel":"http://api.puppetlabs.com/razor/v1/collections/hooks","id":"http://localhost:8150/api/collections/hooks"}],"version":{"server":"v0.16.1-18-gd3acc7a-dirty"}}'
245
+ http_version:
246
+ recorded_at: Mon, 09 Mar 2015 19:55:24 GMT
247
+ - request:
248
+ method: get
249
+ uri: http://localhost:8150/api/commands/register-node
250
+ body:
251
+ encoding: US-ASCII
252
+ string: ''
253
+ headers:
254
+ Accept:
255
+ - application/json
256
+ Accept-Encoding:
257
+ - gzip, deflate
258
+ User-Agent:
259
+ - Ruby
260
+ response:
261
+ status:
262
+ code: 200
263
+ message: OK
264
+ headers:
265
+ Server:
266
+ - Apache-Coyote/1.1
267
+ Etag:
268
+ - '"server-version-v0.16.1-18-gd3acc7a-dirty"'
269
+ X-Content-Type-Options:
270
+ - nosniff
271
+ Content-Type:
272
+ - application/json;charset=utf-8
273
+ Content-Length:
274
+ - '6207'
275
+ Date:
276
+ - Mon, 09 Mar 2015 19:55:23 GMT
277
+ body:
278
+ encoding: US-ASCII
279
+ string: '{"name":"register-node","help":{"summary":"Register a node with Razor
280
+ before it is discovered","description":"In order to make brownfield deployments
281
+ of Razor easier we allow users to\nregister nodes explicitly. This command
282
+ allows you to perform the same\nregistration that would happen when a new
283
+ node checked in, ahead of time.\n\nIn order for this to be effective the hw_info
284
+ must contain enough information\nthat the node can successfully be matched
285
+ during the iPXE boot phase.\n\nIf the node matches an existing node, in keeping
286
+ with the overall policy of\ncommands declaring desired state, the node installed
287
+ field will be updated to\nmatch the value in this command.\n\nThe final state
288
+ is that a node with the supplied hardware information, and the\ndesired installed
289
+ state, will be present in the database, regardless of it\nexisting before
290
+ hand or not.","schema":"# Access Control\n\nThis command''s access control
291
+ pattern: `commands:register-node`\n\nFor more detail on how the permission
292
+ strings are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
293
+ pattern is expanded\nand then a permission check applied to it, before the
294
+ command is authorized.\n\nThese checks only apply if security is enabled in
295
+ the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
296
+ http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * installed\n -
297
+ Should the node be considered ''installed'' already? Installed nodes are\n not
298
+ eligible for policy matching, and will simply boot locally.\n - This attribute
299
+ is required.\n - It must be of type boolean.\n\n * hw_info\n - The hardware
300
+ information for the node. This is used to match the node on first\n boot
301
+ with the record in the database. The order of MAC address assignment in\n this
302
+ data is not significant, as a node with reordered MAC addresses will be\n treated
303
+ as the same node.\n - This attribute is required.\n - It must be of type
304
+ object.\n - It must be between 1 and Infinity in length.\n # Attributes\n \n *
305
+ serial\n - The DMI serial number of the node\n - It must be of type
306
+ string.\n \n * asset\n - The DMI asset tag of the node\n -
307
+ It must be of type string.\n \n * uuid\n - The DMI UUID of the node\n -
308
+ It must be of type string.\n","examples":{"api":"Register a machine before
309
+ you boot it, and note that it already has an OS\ninstalled, so should not
310
+ 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\":
311
+ \"xxxxxxxxxxx\",\n \"asset\": \"Asset-1234567890\",\n \"uuid\": \"Not
312
+ Settable\"\n },\n \"installed\": true\n }","cli":"Register a
313
+ machine before you boot it, and note that it already has an OS\ninstalled,
314
+ so should not be subject to policy-based reinstallation:\n\n razor register-node
315
+ --hw-info net0=78:31:c1:be:c8:00 \\\n --hw-info net1=72:00:01:f2:13:f0
316
+ \\\n --hw-info net2=72:00:01:f2:13:f1 \\\n --hw-info serial=xxxxxxxxxxx
317
+ \\\n --hw-info asset=Asset-1234567890 \\\n --hw-info uuid=\"Not
318
+ Settable\" \\\n --installed"},"full":"# SYNOPSIS\nRegister a node with
319
+ Razor before it is discovered\n\n# DESCRIPTION\nIn order to make brownfield
320
+ deployments of Razor easier we allow users to\nregister nodes explicitly. This
321
+ command allows you to perform the same\nregistration that would happen when
322
+ a new node checked in, ahead of time.\n\nIn order for this to be effective
323
+ the hw_info must contain enough information\nthat the node can successfully
324
+ be matched during the iPXE boot phase.\n\nIf the node matches an existing
325
+ node, in keeping with the overall policy of\ncommands declaring desired state,
326
+ the node installed field will be updated to\nmatch the value in this command.\n\nThe
327
+ final state is that a node with the supplied hardware information, and the\ndesired
328
+ installed state, will be present in the database, regardless of it\nexisting
329
+ before hand or not.\n# Access Control\n\nThis command''s access control pattern:
330
+ `commands:register-node`\n\nFor more detail on how the permission strings
331
+ are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
332
+ pattern is expanded\nand then a permission check applied to it, before the
333
+ command is authorized.\n\nThese checks only apply if security is enabled in
334
+ the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
335
+ http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * installed\n -
336
+ Should the node be considered ''installed'' already? Installed nodes are\n not
337
+ eligible for policy matching, and will simply boot locally.\n - This attribute
338
+ is required.\n - It must be of type boolean.\n\n * hw_info\n - The hardware
339
+ information for the node. This is used to match the node on first\n boot
340
+ with the record in the database. The order of MAC address assignment in\n this
341
+ data is not significant, as a node with reordered MAC addresses will be\n treated
342
+ as the same node.\n - This attribute is required.\n - It must be of type
343
+ object.\n - It must be between 1 and Infinity in length.\n # Attributes\n \n *
344
+ serial\n - The DMI serial number of the node\n - It must be of type
345
+ string.\n \n * asset\n - The DMI asset tag of the node\n -
346
+ It must be of type string.\n \n * uuid\n - The DMI UUID of the node\n -
347
+ It must be of type string.\n\n# EXAMPLES\n\n Register a machine before you
348
+ boot it, and note that it already has an OS\n installed, so should not be
349
+ subject to policy-based reinstallation:\n \n {\n \"hw_info\":
350
+ {\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\":
351
+ \"xxxxxxxxxxx\",\n \"asset\": \"Asset-1234567890\",\n \"uuid\": \"Not
352
+ Settable\"\n },\n \"installed\": true\n }\n"},"schema":{"installed":{"type":"boolean"},"hw_info":{"type":"object","aliases":["hw-info"]}}}'
353
+ http_version:
354
+ recorded_at: Mon, 09 Mar 2015 19:55:24 GMT
355
+ - request:
356
+ method: post
357
+ uri: http://localhost:8150/api/commands/register-node
358
+ body:
359
+ encoding: UTF-8
360
+ string: '{"installed":true,"hw_info":{"net0":"78:31:c1:be:c8:01"}}'
361
+ headers:
362
+ Accept:
363
+ - application/json
364
+ Accept-Encoding:
365
+ - gzip, deflate
366
+ Content-Type:
367
+ - application/json
368
+ Content-Length:
369
+ - '57'
370
+ User-Agent:
371
+ - Ruby
372
+ response:
373
+ status:
374
+ code: 202
375
+ message: Accepted
376
+ headers:
377
+ Server:
378
+ - Apache-Coyote/1.1
379
+ X-Content-Type-Options:
380
+ - nosniff
381
+ Content-Type:
382
+ - application/json;charset=utf-8
383
+ Content-Length:
384
+ - '203'
385
+ Date:
386
+ - Mon, 09 Mar 2015 19:55:23 GMT
387
+ body:
388
+ encoding: US-ASCII
389
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/nodes/member","id":"http://localhost:8150/api/collections/nodes/node2","name":"node2","command":"http://localhost:8150/api/collections/commands/2"}'
390
+ http_version:
391
+ recorded_at: Mon, 09 Mar 2015 19:55:24 GMT
392
+ - request:
393
+ method: get
394
+ uri: http://localhost:8150/api/collections/nodes/node2
395
+ body:
396
+ encoding: US-ASCII
397
+ string: ''
398
+ headers:
399
+ Accept:
400
+ - application/json
401
+ Accept-Encoding:
402
+ - gzip, deflate
403
+ User-Agent:
404
+ - Ruby
405
+ response:
406
+ status:
407
+ code: 200
408
+ message: OK
409
+ headers:
410
+ Server:
411
+ - Apache-Coyote/1.1
412
+ X-Content-Type-Options:
413
+ - nosniff
414
+ Content-Type:
415
+ - application/json;charset=utf-8
416
+ Content-Length:
417
+ - '409'
418
+ Date:
419
+ - Mon, 09 Mar 2015 19:55:23 GMT
420
+ body:
421
+ encoding: US-ASCII
422
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/nodes/member","id":"http://localhost:8150/api/collections/nodes/node2","name":"node2","hw_info":{"mac":["78:31:c1:be:c8:01"]},"log":{"id":"http://localhost:8150/api/collections/nodes/node2/log","name":"log","params":{"limit":{"type":"number"},"start":{"type":"number"}}},"tags":[],"state":{"installed":"true","installed_at":"2015-03-09T14:55:24-05:00"}}'
423
+ http_version:
424
+ recorded_at: Mon, 09 Mar 2015 19:55:24 GMT
425
+ - request:
426
+ method: get
427
+ uri: http://fred:dead@localhost:8150/api
428
+ body:
429
+ encoding: US-ASCII
430
+ string: ''
431
+ headers:
432
+ Accept:
433
+ - application/json
434
+ Accept-Encoding:
435
+ - gzip, deflate
436
+ User-Agent:
437
+ - Ruby
438
+ response:
439
+ status:
440
+ code: 200
441
+ message: OK
442
+ headers:
443
+ Server:
444
+ - Apache-Coyote/1.1
445
+ X-Content-Type-Options:
446
+ - nosniff
447
+ Content-Type:
448
+ - application/json;charset=utf-8
449
+ Content-Length:
450
+ - '5650'
451
+ Date:
452
+ - Mon, 09 Mar 2015 19:55:23 GMT
453
+ body:
454
+ encoding: US-ASCII
455
+ string: '{"commands":[{"name":"add-policy-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/add-policy-tag","id":"http://localhost:8150/api/commands/add-policy-tag"},{"name":"create-broker","rel":"http://api.puppetlabs.com/razor/v1/commands/create-broker","id":"http://localhost:8150/api/commands/create-broker"},{"name":"create-hook","rel":"http://api.puppetlabs.com/razor/v1/commands/create-hook","id":"http://localhost:8150/api/commands/create-hook"},{"name":"create-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/create-policy","id":"http://localhost:8150/api/commands/create-policy"},{"name":"create-repo","rel":"http://api.puppetlabs.com/razor/v1/commands/create-repo","id":"http://localhost:8150/api/commands/create-repo"},{"name":"create-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/create-tag","id":"http://localhost:8150/api/commands/create-tag"},{"name":"create-task","rel":"http://api.puppetlabs.com/razor/v1/commands/create-task","id":"http://localhost:8150/api/commands/create-task"},{"name":"delete-broker","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-broker","id":"http://localhost:8150/api/commands/delete-broker"},{"name":"delete-hook","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-hook","id":"http://localhost:8150/api/commands/delete-hook"},{"name":"delete-node","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-node","id":"http://localhost:8150/api/commands/delete-node"},{"name":"delete-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-policy","id":"http://localhost:8150/api/commands/delete-policy"},{"name":"delete-repo","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-repo","id":"http://localhost:8150/api/commands/delete-repo"},{"name":"delete-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-tag","id":"http://localhost:8150/api/commands/delete-tag"},{"name":"disable-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/disable-policy","id":"http://localhost:8150/api/commands/disable-policy"},{"name":"enable-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/enable-policy","id":"http://localhost:8150/api/commands/enable-policy"},{"name":"modify-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/modify-node-metadata","id":"http://localhost:8150/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:8150/api/commands/modify-policy-max-count"},{"name":"move-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/move-policy","id":"http://localhost:8150/api/commands/move-policy"},{"name":"reboot-node","rel":"http://api.puppetlabs.com/razor/v1/commands/reboot-node","id":"http://localhost:8150/api/commands/reboot-node"},{"name":"register-node","rel":"http://api.puppetlabs.com/razor/v1/commands/register-node","id":"http://localhost:8150/api/commands/register-node"},{"name":"reinstall-node","rel":"http://api.puppetlabs.com/razor/v1/commands/reinstall-node","id":"http://localhost:8150/api/commands/reinstall-node"},{"name":"remove-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/remove-node-metadata","id":"http://localhost:8150/api/commands/remove-node-metadata"},{"name":"remove-policy-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/remove-policy-tag","id":"http://localhost:8150/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:8150/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:8150/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:8150/api/commands/set-node-ipmi-credentials"},{"name":"update-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/update-node-metadata","id":"http://localhost:8150/api/commands/update-node-metadata"},{"name":"update-tag-rule","rel":"http://api.puppetlabs.com/razor/v1/commands/update-tag-rule","id":"http://localhost:8150/api/commands/update-tag-rule"}],"collections":[{"name":"brokers","rel":"http://api.puppetlabs.com/razor/v1/collections/brokers","id":"http://localhost:8150/api/collections/brokers"},{"name":"repos","rel":"http://api.puppetlabs.com/razor/v1/collections/repos","id":"http://localhost:8150/api/collections/repos"},{"name":"tags","rel":"http://api.puppetlabs.com/razor/v1/collections/tags","id":"http://localhost:8150/api/collections/tags"},{"name":"policies","rel":"http://api.puppetlabs.com/razor/v1/collections/policies","id":"http://localhost:8150/api/collections/policies"},{"name":"nodes","rel":"http://api.puppetlabs.com/razor/v1/collections/nodes","id":"http://localhost:8150/api/collections/nodes","params":{"start":{"type":"number"},"limit":{"type":"number"}}},{"name":"tasks","rel":"http://api.puppetlabs.com/razor/v1/collections/tasks","id":"http://localhost:8150/api/collections/tasks"},{"name":"commands","rel":"http://api.puppetlabs.com/razor/v1/collections/commands","id":"http://localhost:8150/api/collections/commands"},{"name":"events","rel":"http://api.puppetlabs.com/razor/v1/collections/events","id":"http://localhost:8150/api/collections/events","params":{"start":{"type":"number"},"limit":{"type":"number"}}},{"name":"hooks","rel":"http://api.puppetlabs.com/razor/v1/collections/hooks","id":"http://localhost:8150/api/collections/hooks"}],"version":{"server":"v0.16.1-18-gd3acc7a-dirty"}}'
456
+ http_version:
457
+ recorded_at: Mon, 09 Mar 2015 19:55:24 GMT
458
+ - request:
459
+ method: get
460
+ uri: http://fred:dead@localhost:8150/api/collections/nodes
461
+ body:
462
+ encoding: US-ASCII
463
+ string: ''
464
+ headers:
465
+ Accept:
466
+ - application/json
467
+ Accept-Encoding:
468
+ - gzip, deflate
469
+ User-Agent:
470
+ - Ruby
471
+ response:
472
+ status:
473
+ code: 200
474
+ message: OK
475
+ headers:
476
+ Server:
477
+ - Apache-Coyote/1.1
478
+ X-Content-Type-Options:
479
+ - nosniff
480
+ Content-Type:
481
+ - application/json;charset=utf-8
482
+ Content-Length:
483
+ - '369'
484
+ Date:
485
+ - Mon, 09 Mar 2015 19:55:23 GMT
486
+ body:
487
+ encoding: US-ASCII
488
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/nodes","items":[{"spec":"http://api.puppetlabs.com/razor/v1/collections/nodes/member","id":"http://localhost:8150/api/collections/nodes/node1","name":"node1"},{"spec":"http://api.puppetlabs.com/razor/v1/collections/nodes/member","id":"http://localhost:8150/api/collections/nodes/node2","name":"node2"}],"total":2}'
489
+ http_version:
490
+ recorded_at: Mon, 09 Mar 2015 19:55:24 GMT
491
+ - request:
492
+ method: get
493
+ uri: http://fred:dead@localhost:8150/api/collections/nodes/node1
494
+ body:
495
+ encoding: US-ASCII
496
+ string: ''
497
+ headers:
498
+ Accept:
499
+ - application/json
500
+ Accept-Encoding:
501
+ - gzip, deflate
502
+ User-Agent:
503
+ - Ruby
504
+ response:
505
+ status:
506
+ code: 200
507
+ message: OK
508
+ headers:
509
+ Server:
510
+ - Apache-Coyote/1.1
511
+ X-Content-Type-Options:
512
+ - nosniff
513
+ Content-Type:
514
+ - application/json;charset=utf-8
515
+ Content-Length:
516
+ - '409'
517
+ Date:
518
+ - Mon, 09 Mar 2015 19:55:23 GMT
519
+ body:
520
+ encoding: US-ASCII
521
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/nodes/member","id":"http://localhost:8150/api/collections/nodes/node1","name":"node1","hw_info":{"mac":["78:31:c1:be:c8:00"]},"log":{"id":"http://localhost:8150/api/collections/nodes/node1/log","name":"log","params":{"limit":{"type":"number"},"start":{"type":"number"}}},"tags":[],"state":{"installed":"true","installed_at":"2015-03-09T14:55:24-05:00"}}'
522
+ http_version:
523
+ recorded_at: Mon, 09 Mar 2015 19:55:24 GMT
524
+ - request:
525
+ method: get
526
+ uri: http://fred:dead@localhost:8150/api/collections/nodes/node1/log?limit=1
527
+ body:
528
+ encoding: US-ASCII
529
+ string: ''
530
+ headers:
531
+ Accept:
532
+ - application/json
533
+ Accept-Encoding:
534
+ - gzip, deflate
535
+ User-Agent:
536
+ - Ruby
537
+ response:
538
+ status:
539
+ code: 200
540
+ message: OK
541
+ headers:
542
+ Server:
543
+ - Apache-Coyote/1.1
544
+ X-Content-Type-Options:
545
+ - nosniff
546
+ Content-Type:
547
+ - application/json;charset=utf-8
548
+ Content-Length:
549
+ - '78'
550
+ Date:
551
+ - Mon, 09 Mar 2015 19:55:23 GMT
552
+ body:
553
+ encoding: US-ASCII
554
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/nodes/log","items":[]}'
555
+ http_version:
556
+ recorded_at: Mon, 09 Mar 2015 19:55:24 GMT
557
+ recorded_with: VCR 2.5.0