razor-client 0.16.0 → 1.0.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.
- data/NEWS.md +15 -0
- data/bin/razor +3 -2
- data/lib/razor/cli.rb +6 -0
- data/lib/razor/cli/command.rb +24 -13
- data/lib/razor/cli/navigate.rb +1 -0
- data/lib/razor/cli/parse.rb +29 -3
- data/lib/razor/cli/query.rb +2 -1
- data/lib/razor/cli/table_format.rb +38 -2
- data/lib/razor/cli/transforms.rb +8 -1
- data/lib/razor/cli/version.rb +1 -1
- data/lib/razor/cli/views.yaml +17 -4
- data/spec/cli/command_spec.rb +66 -0
- data/spec/cli/navigate_spec.rb +7 -7
- data/spec/cli/parse_spec.rb +23 -4
- data/spec/fixtures/vcr/Razor_CLI_Navigate/argument_formatting/should_allow_in_string.yml +82 -171
- data/spec/fixtures/vcr/Razor_CLI_Navigate/argument_formatting/should_allow_spaces.yml +281 -548
- data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_--help_command_.yml +160 -37
- data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_-h_command_.yml +160 -37
- data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_command_--help_.yml +160 -37
- data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_command_-h_.yml +160 -37
- data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_command_help_.yml +160 -37
- data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_help_command_.yml +160 -37
- data/spec/fixtures/vcr/Razor_CLI_Navigate/with_authentication/should_preserve_that_across_navigation.yml +10 -10
- data/spec/fixtures/vcr/Razor_CLI_Navigate/with_authentication/should_supply_that_to_the_API_service.yml +5 -5
- data/spec/fixtures/vcr/Razor_CLI_Navigate/with_invalid_parameter/should_fail_with_bad_JSON.yml +71 -166
- data/spec/fixtures/vcr/Razor_CLI_Navigate/with_invalid_parameter/should_fail_with_malformed_argument.yml +109 -59
- 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
- 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
- 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
- data/spec/fixtures/vcr/Razor_CLI_Navigate/with_multiple_arguments_with_same_name/combining_as_an_object/should_construct_a_json_object.yml +66 -229
- 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 +104 -165
- 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 +57 -155
- 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 +57 -220
- data/spec/fixtures/vcr/Razor_CLI_Navigate/with_no_parameters/should_fail_with_bad_JSON.yml +98 -5
- data/spec/fixtures/vcr/Razor_CLI_Navigate/with_query_parameters/should_append_limit.yml +8 -8
- data/spec/fixtures/vcr/Razor_CLI_Navigate/with_query_parameters/should_append_start.yml +8 -8
- data/spec/fixtures/vcr/Razor_CLI_Navigate/with_query_parameters/should_not_fail_when_query_returns_details_for_one_item.yml +41 -149
- data/spec/fixtures/vcr/Razor_CLI_Navigate/with_query_parameters/should_store_query_without_query_parameters.yml +70 -286
- data/spec/fixtures/vcr/Razor_CLI_Navigate/with_query_parameters/should_throw_an_error_if_the_query_parameter_is_not_in_the_API.yml +5 -5
- 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 +36 -144
- data/spec/fixtures/vcr/Razor_CLI_Parse/_new/_help/should_print_a_list_of_known_endpoints.yml +5 -5
- data/spec/spec_helper.rb +8 -4
- metadata +92 -85
- checksums.yaml +0 -7
- data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_API_command_help_for_razor_--api_command_--help_.yml +0 -110
- data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_API_command_help_for_razor_--api_command_help_.yml +0 -110
- data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_API_command_help_for_razor_--api_help_command_.yml +0 -110
- data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_API_command_help_for_razor_--help_--api_command_.yml +0 -110
- data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_API_command_help_for_razor_-a_-h_command_.yml +0 -110
- data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_API_command_help_for_razor_-a_command_-h_.yml +0 -110
@@ -2,7 +2,7 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri: http://localhost:
|
5
|
+
uri: http://localhost:8150/api
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ''
|
@@ -25,17 +25,17 @@ http_interactions:
|
|
25
25
|
Content-Type:
|
26
26
|
- application/json;charset=utf-8
|
27
27
|
Content-Length:
|
28
|
-
- '
|
28
|
+
- '5650'
|
29
29
|
Date:
|
30
|
-
-
|
30
|
+
- Mon, 09 Mar 2015 19:53:39 GMT
|
31
31
|
body:
|
32
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:
|
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
34
|
http_version:
|
35
|
-
recorded_at:
|
35
|
+
recorded_at: Mon, 09 Mar 2015 19:53:39 GMT
|
36
36
|
- request:
|
37
37
|
method: get
|
38
|
-
uri: http://localhost:
|
38
|
+
uri: http://localhost:8150/api/commands/create-broker
|
39
39
|
body:
|
40
40
|
encoding: US-ASCII
|
41
41
|
string: ''
|
@@ -54,251 +54,88 @@ http_interactions:
|
|
54
54
|
Server:
|
55
55
|
- Apache-Coyote/1.1
|
56
56
|
Etag:
|
57
|
-
- '"server-version-v0.
|
57
|
+
- '"server-version-v0.16.1-18-gd3acc7a-dirty"'
|
58
58
|
X-Content-Type-Options:
|
59
59
|
- nosniff
|
60
60
|
Content-Type:
|
61
61
|
- application/json;charset=utf-8
|
62
62
|
Content-Length:
|
63
|
-
- '
|
63
|
+
- '5184'
|
64
64
|
Date:
|
65
|
-
-
|
65
|
+
- Mon, 09 Mar 2015 19:53:39 GMT
|
66
66
|
body:
|
67
67
|
encoding: US-ASCII
|
68
|
-
string: '{"name":"create-broker","help":{"
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
68
|
+
string: '{"name":"create-broker","help":{"summary":"Create a new broker configuration
|
69
|
+
for hand-off of installed nodes","description":"Create a new broker configuration. Brokers
|
70
|
+
are responsible for handing a node\noff to a config management system, such
|
71
|
+
as Puppet or Chef. In cases where you\nhave no configuration management system,
|
72
|
+
you can use the `noop` broker.","schema":"# Access Control\n\nThis command''s
|
73
|
+
access control pattern: `commands:create-broker:%{name}`\n\nWords surrounded
|
74
|
+
by `%{...}` are substitutions from the input data: typically\nthe name of
|
75
|
+
the object being modified, or some other critical detail, these\nallow roles
|
76
|
+
to be granted partial access to modify the system.\n\nFor more detail on how
|
77
|
+
the permission strings are structured and work, you can\nsee the [Shiro Permissions
|
78
|
+
documentation][shiro]. That pattern is expanded\nand then a permission check
|
79
|
+
applied to it, before the command is authorized.\n\nThese checks only apply
|
80
|
+
if security is enabled in the Razor configuration\nfile; on this server security
|
81
|
+
is currently disabled.\n\n[shiro]: http://shiro.apache.org/permissions.html\n\n#
|
82
82
|
Attributes\n\n * name\n - The name of the broker, as it will be referenced
|
83
83
|
within Razor.\n This is the name that you supply to, eg, `create-policy`
|
84
84
|
to specify\n which broker the node will be handed off via after installation.\n -
|
85
85
|
This attribute is required.\n - It must be of type string.\n - It must
|
86
|
-
be between 1 and 250 in length.\n\n *
|
86
|
+
be between 1 and 250 in length.\n\n * broker_type\n - The broker type from
|
87
87
|
which this broker is created. The available\n broker types on your server
|
88
88
|
are:\n - chef\n - noop\n - puppet-pe\n - puppet\n - This
|
89
89
|
attribute is required.\n - It must be of type string.\n - It must match
|
90
90
|
the name of an existing broker type.\n\n * configuration\n - The configuration
|
91
|
-
for the broker. The acceptable values here are\n determined by the `
|
91
|
+
for the broker. The acceptable values here are\n determined by the `broker_type`
|
92
92
|
selected. In general this has\n settings like which server to contact,
|
93
93
|
and other configuration\n related to handing on the newly installed system
|
94
94
|
to the final\n configuration management system.\n \n This attribute
|
95
|
-
can be abbreviated as `c` for convenience.\n - It must be of type object.\n
|
96
|
-
|
97
|
-
{\n
|
98
|
-
\"
|
99
|
-
|
100
|
-
|
101
|
-
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
- nosniff
|
125
|
-
Content-Type:
|
126
|
-
- application/json;charset=utf-8
|
127
|
-
Content-Length:
|
128
|
-
- '2568'
|
129
|
-
Date:
|
130
|
-
- Thu, 14 Aug 2014 20:49:46 GMT
|
131
|
-
body:
|
132
|
-
encoding: US-ASCII
|
133
|
-
string: '{"name":"create-broker","help":{"full":"# SYNOPSIS\nCreate a new broker
|
134
|
-
configuration for hand-off of installed nodes\n\n# DESCRIPTION\nCreate a new
|
135
|
-
broker configuration. Brokers are responsible for handing a node\noff to
|
136
|
-
a config management system, such as Puppet or Chef. In cases where you\nhave
|
137
|
-
no configuration management system, you can use the `noop` broker.\n\n# Access
|
138
|
-
Control\n\nThis command''s access control pattern: `commands:create-broker:%{name}`\n\nWords
|
139
|
-
surrounded by `%{...}` are substitutions from the input data: typically\nthe
|
140
|
-
name of the object being modified, or some other critical detail, these\nallow
|
141
|
-
roles to be granted partial access to modify the system.\n\nFor more detail
|
142
|
-
on how the permission strings are structured and work, you can\nsee the [Shiro
|
143
|
-
Permissions documentation][shiro]. That pattern is expanded\nand then a permission
|
144
|
-
check applied to it, before the command is authorized.\n\nThese checks only
|
145
|
-
apply if security is enabled in the Razor configuration\nfile; on this server
|
146
|
-
security is currently disabled.\n\n[shiro]: http://shiro.apache.org/permissions.html\n\n#
|
147
|
-
Attributes\n\n * name\n - The name of the broker, as it will be referenced
|
148
|
-
within Razor.\n This is the name that you supply to, eg, `create-policy`
|
149
|
-
to specify\n which broker the node will be handed off via after installation.\n -
|
150
|
-
This attribute is required.\n - It must be of type string.\n - It must
|
151
|
-
be between 1 and 250 in length.\n\n * broker-type\n - The broker type from
|
152
|
-
which this broker is created. The available\n broker types on your server
|
153
|
-
are:\n - chef\n - noop\n - puppet-pe\n - puppet\n - This
|
154
|
-
attribute is required.\n - It must be of type string.\n - It must match
|
155
|
-
the name of an existing broker type.\n\n * configuration\n - The configuration
|
156
|
-
for the broker. The acceptable values here are\n determined by the `broker-type`
|
157
|
-
selected. In general this has\n settings like which server to contact,
|
158
|
-
and other configuration\n related to handing on the newly installed system
|
159
|
-
to the final\n configuration management system.\n \n This attribute
|
160
|
-
can be abbreviated as `c` for convenience.\n - It must be of type object.\n\n#
|
161
|
-
EXAMPLES\n\n Creating a simple Puppet broker:\n \n {\n \"name\": \"puppet\",\n \"configuration\":
|
162
|
-
{\n \"server\": \"puppet.example.org\",\n \"environment\":
|
163
|
-
\"production\"\n },\n \"broker-type\": \"puppet\"\n }\n"},"schema":{"name":{"type":"string"},"broker-type":{"type":"string"},"configuration":{"type":"object"}}}'
|
164
|
-
http_version:
|
165
|
-
recorded_at: Thu, 14 Aug 2014 20:49:46 GMT
|
166
|
-
- request:
|
167
|
-
method: get
|
168
|
-
uri: http://localhost:8080/api/commands/create-broker
|
169
|
-
body:
|
170
|
-
encoding: US-ASCII
|
171
|
-
string: ''
|
172
|
-
headers:
|
173
|
-
Accept:
|
174
|
-
- application/json
|
175
|
-
Accept-Encoding:
|
176
|
-
- gzip, deflate
|
177
|
-
User-Agent:
|
178
|
-
- Ruby
|
179
|
-
response:
|
180
|
-
status:
|
181
|
-
code: 200
|
182
|
-
message: OK
|
183
|
-
headers:
|
184
|
-
Server:
|
185
|
-
- Apache-Coyote/1.1
|
186
|
-
Etag:
|
187
|
-
- '"server-version-v0.15.0-26-gfffaba4-dirty"'
|
188
|
-
X-Content-Type-Options:
|
189
|
-
- nosniff
|
190
|
-
Content-Type:
|
191
|
-
- application/json;charset=utf-8
|
192
|
-
Content-Length:
|
193
|
-
- '2568'
|
194
|
-
Date:
|
195
|
-
- Thu, 14 Aug 2014 20:49:46 GMT
|
196
|
-
body:
|
197
|
-
encoding: US-ASCII
|
198
|
-
string: '{"name":"create-broker","help":{"full":"# SYNOPSIS\nCreate a new broker
|
199
|
-
configuration for hand-off of installed nodes\n\n# DESCRIPTION\nCreate a new
|
200
|
-
broker configuration. Brokers are responsible for handing a node\noff to
|
201
|
-
a config management system, such as Puppet or Chef. In cases where you\nhave
|
202
|
-
no configuration management system, you can use the `noop` broker.\n\n# Access
|
203
|
-
Control\n\nThis command''s access control pattern: `commands:create-broker:%{name}`\n\nWords
|
204
|
-
surrounded by `%{...}` are substitutions from the input data: typically\nthe
|
205
|
-
name of the object being modified, or some other critical detail, these\nallow
|
206
|
-
roles to be granted partial access to modify the system.\n\nFor more detail
|
207
|
-
on how the permission strings are structured and work, you can\nsee the [Shiro
|
208
|
-
Permissions documentation][shiro]. That pattern is expanded\nand then a permission
|
209
|
-
check applied to it, before the command is authorized.\n\nThese checks only
|
210
|
-
apply if security is enabled in the Razor configuration\nfile; on this server
|
211
|
-
security is currently disabled.\n\n[shiro]: http://shiro.apache.org/permissions.html\n\n#
|
212
|
-
Attributes\n\n * name\n - The name of the broker, as it will be referenced
|
213
|
-
within Razor.\n This is the name that you supply to, eg, `create-policy`
|
214
|
-
to specify\n which broker the node will be handed off via after installation.\n -
|
215
|
-
This attribute is required.\n - It must be of type string.\n - It must
|
216
|
-
be between 1 and 250 in length.\n\n * broker-type\n - The broker type from
|
217
|
-
which this broker is created. The available\n broker types on your server
|
218
|
-
are:\n - chef\n - noop\n - puppet-pe\n - puppet\n - This
|
219
|
-
attribute is required.\n - It must be of type string.\n - It must match
|
220
|
-
the name of an existing broker type.\n\n * configuration\n - The configuration
|
221
|
-
for the broker. The acceptable values here are\n determined by the `broker-type`
|
222
|
-
selected. In general this has\n settings like which server to contact,
|
223
|
-
and other configuration\n related to handing on the newly installed system
|
224
|
-
to the final\n configuration management system.\n \n This attribute
|
225
|
-
can be abbreviated as `c` for convenience.\n - It must be of type object.\n\n#
|
226
|
-
EXAMPLES\n\n Creating a simple Puppet broker:\n \n {\n \"name\": \"puppet\",\n \"configuration\":
|
227
|
-
{\n \"server\": \"puppet.example.org\",\n \"environment\":
|
228
|
-
\"production\"\n },\n \"broker-type\": \"puppet\"\n }\n"},"schema":{"name":{"type":"string"},"broker-type":{"type":"string"},"configuration":{"type":"object"}}}'
|
229
|
-
http_version:
|
230
|
-
recorded_at: Thu, 14 Aug 2014 20:49:46 GMT
|
231
|
-
- request:
|
232
|
-
method: get
|
233
|
-
uri: http://localhost:8080/api/commands/create-broker
|
234
|
-
body:
|
235
|
-
encoding: US-ASCII
|
236
|
-
string: ''
|
237
|
-
headers:
|
238
|
-
Accept:
|
239
|
-
- application/json
|
240
|
-
Accept-Encoding:
|
241
|
-
- gzip, deflate
|
242
|
-
User-Agent:
|
243
|
-
- Ruby
|
244
|
-
response:
|
245
|
-
status:
|
246
|
-
code: 200
|
247
|
-
message: OK
|
248
|
-
headers:
|
249
|
-
Server:
|
250
|
-
- Apache-Coyote/1.1
|
251
|
-
Etag:
|
252
|
-
- '"server-version-v0.15.0-26-gfffaba4-dirty"'
|
253
|
-
X-Content-Type-Options:
|
254
|
-
- nosniff
|
255
|
-
Content-Type:
|
256
|
-
- application/json;charset=utf-8
|
257
|
-
Content-Length:
|
258
|
-
- '2568'
|
259
|
-
Date:
|
260
|
-
- Thu, 14 Aug 2014 20:49:46 GMT
|
261
|
-
body:
|
262
|
-
encoding: US-ASCII
|
263
|
-
string: '{"name":"create-broker","help":{"full":"# SYNOPSIS\nCreate a new broker
|
264
|
-
configuration for hand-off of installed nodes\n\n# DESCRIPTION\nCreate a new
|
265
|
-
broker configuration. Brokers are responsible for handing a node\noff to
|
266
|
-
a config management system, such as Puppet or Chef. In cases where you\nhave
|
267
|
-
no configuration management system, you can use the `noop` broker.\n\n# Access
|
268
|
-
Control\n\nThis command''s access control pattern: `commands:create-broker:%{name}`\n\nWords
|
269
|
-
surrounded by `%{...}` are substitutions from the input data: typically\nthe
|
270
|
-
name of the object being modified, or some other critical detail, these\nallow
|
271
|
-
roles to be granted partial access to modify the system.\n\nFor more detail
|
272
|
-
on how the permission strings are structured and work, you can\nsee the [Shiro
|
273
|
-
Permissions documentation][shiro]. That pattern is expanded\nand then a permission
|
274
|
-
check applied to it, before the command is authorized.\n\nThese checks only
|
275
|
-
apply if security is enabled in the Razor configuration\nfile; on this server
|
276
|
-
security is currently disabled.\n\n[shiro]: http://shiro.apache.org/permissions.html\n\n#
|
277
|
-
Attributes\n\n * name\n - The name of the broker, as it will be referenced
|
278
|
-
within Razor.\n This is the name that you supply to, eg, `create-policy`
|
279
|
-
to specify\n which broker the node will be handed off via after installation.\n -
|
280
|
-
This attribute is required.\n - It must be of type string.\n - It must
|
281
|
-
be between 1 and 250 in length.\n\n * broker-type\n - The broker type from
|
282
|
-
which this broker is created. The available\n broker types on your server
|
283
|
-
are:\n - chef\n - noop\n - puppet-pe\n - puppet\n - This
|
284
|
-
attribute is required.\n - It must be of type string.\n - It must match
|
285
|
-
the name of an existing broker type.\n\n * configuration\n - The configuration
|
286
|
-
for the broker. The acceptable values here are\n determined by the `broker-type`
|
95
|
+
can be abbreviated as `c` for convenience.\n - It must be of type object.\n","examples":{"api":"Creating
|
96
|
+
a simple Puppet broker:\n\n{\n \"name\": \"puppet\",\n \"configuration\":
|
97
|
+
{\n \"server\": \"puppet.example.org\",\n \"environment\": \"production\"\n },\n \"broker_type\":
|
98
|
+
\"puppet\"\n}","cli":"Creating a simple Puppet broker:\n\nrazor create-broker
|
99
|
+
--name puppet -c server=puppet.example.org \\\n -c environment=production
|
100
|
+
--broker-type puppet"},"full":"# SYNOPSIS\nCreate a new broker configuration
|
101
|
+
for hand-off of installed nodes\n\n# DESCRIPTION\nCreate a new broker configuration. Brokers
|
102
|
+
are responsible for handing a node\noff to a config management system, such
|
103
|
+
as Puppet or Chef. In cases where you\nhave no configuration management system,
|
104
|
+
you can use the `noop` broker.\n# Access Control\n\nThis command''s access
|
105
|
+
control pattern: `commands:create-broker:%{name}`\n\nWords surrounded by `%{...}`
|
106
|
+
are substitutions from the input data: typically\nthe name of the object being
|
107
|
+
modified, or some other critical detail, these\nallow roles to be granted
|
108
|
+
partial access to modify the system.\n\nFor more detail on how the permission
|
109
|
+
strings are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
|
110
|
+
pattern is expanded\nand then a permission check applied to it, before the
|
111
|
+
command is authorized.\n\nThese checks only apply if security is enabled in
|
112
|
+
the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
|
113
|
+
http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * name\n -
|
114
|
+
The name of the broker, as it will be referenced within Razor.\n This
|
115
|
+
is the name that you supply to, eg, `create-policy` to specify\n which
|
116
|
+
broker the node will be handed off via after installation.\n - This attribute
|
117
|
+
is required.\n - It must be of type string.\n - It must be between 1 and
|
118
|
+
250 in length.\n\n * broker_type\n - The broker type from which this broker
|
119
|
+
is created. The available\n broker types on your server are:\n -
|
120
|
+
chef\n - noop\n - puppet-pe\n - puppet\n - This attribute is
|
121
|
+
required.\n - It must be of type string.\n - It must match the name of
|
122
|
+
an existing broker type.\n\n * configuration\n - The configuration for the
|
123
|
+
broker. The acceptable values here are\n determined by the `broker_type`
|
287
124
|
selected. In general this has\n settings like which server to contact,
|
288
125
|
and other configuration\n related to handing on the newly installed system
|
289
126
|
to the final\n configuration management system.\n \n This attribute
|
290
127
|
can be abbreviated as `c` for convenience.\n - It must be of type object.\n\n#
|
291
128
|
EXAMPLES\n\n Creating a simple Puppet broker:\n \n {\n \"name\": \"puppet\",\n \"configuration\":
|
292
129
|
{\n \"server\": \"puppet.example.org\",\n \"environment\":
|
293
|
-
\"production\"\n },\n \"
|
130
|
+
\"production\"\n },\n \"broker_type\": \"puppet\"\n }\n"},"schema":{"name":{"type":"string"},"broker_type":{"type":"string","aliases":["broker-type"]},"configuration":{"type":"object","aliases":["c"]}}}'
|
294
131
|
http_version:
|
295
|
-
recorded_at:
|
132
|
+
recorded_at: Mon, 09 Mar 2015 19:53:39 GMT
|
296
133
|
- request:
|
297
134
|
method: post
|
298
|
-
uri: http://localhost:
|
135
|
+
uri: http://localhost:8150/api/commands/create-broker
|
299
136
|
body:
|
300
137
|
encoding: UTF-8
|
301
|
-
string: '{"name":"broker1","
|
138
|
+
string: '{"name":"broker1","broker_type":"puppet","configuration":{"server":"puppet.example.org","environment":"production"}}'
|
302
139
|
headers:
|
303
140
|
Accept:
|
304
141
|
- application/json
|
@@ -324,15 +161,15 @@ http_interactions:
|
|
324
161
|
Content-Length:
|
325
162
|
- '211'
|
326
163
|
Date:
|
327
|
-
-
|
164
|
+
- Mon, 09 Mar 2015 19:53:39 GMT
|
328
165
|
body:
|
329
166
|
encoding: US-ASCII
|
330
|
-
string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/brokers/member","id":"http://localhost:
|
167
|
+
string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/brokers/member","id":"http://localhost:8150/api/collections/brokers/broker1","name":"broker1","command":"http://localhost:8150/api/collections/commands/1"}'
|
331
168
|
http_version:
|
332
|
-
recorded_at:
|
169
|
+
recorded_at: Mon, 09 Mar 2015 19:53:39 GMT
|
333
170
|
- request:
|
334
171
|
method: get
|
335
|
-
uri: http://localhost:
|
172
|
+
uri: http://localhost:8150/api/collections/brokers/broker1
|
336
173
|
body:
|
337
174
|
encoding: US-ASCII
|
338
175
|
string: ''
|
@@ -357,10 +194,10 @@ http_interactions:
|
|
357
194
|
Content-Length:
|
358
195
|
- '359'
|
359
196
|
Date:
|
360
|
-
-
|
197
|
+
- Mon, 09 Mar 2015 19:53:39 GMT
|
361
198
|
body:
|
362
199
|
encoding: US-ASCII
|
363
|
-
string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/brokers/member","id":"http://localhost:
|
200
|
+
string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/brokers/member","id":"http://localhost:8150/api/collections/brokers/broker1","name":"broker1","configuration":{"server":"puppet.example.org","environment":"production"},"broker_type":"puppet","policies":{"id":"http://localhost:8150/api/collections/brokers/broker1/policies","count":0,"name":"policies"}}'
|
364
201
|
http_version:
|
365
|
-
recorded_at:
|
366
|
-
recorded_with: VCR 2.
|
202
|
+
recorded_at: Mon, 09 Mar 2015 19:53:39 GMT
|
203
|
+
recorded_with: VCR 2.5.0
|
@@ -2,7 +2,7 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri: http://localhost:
|
5
|
+
uri: http://localhost:8150/api
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ''
|
@@ -25,17 +25,17 @@ http_interactions:
|
|
25
25
|
Content-Type:
|
26
26
|
- application/json;charset=utf-8
|
27
27
|
Content-Length:
|
28
|
-
- '
|
28
|
+
- '5650'
|
29
29
|
Date:
|
30
|
-
-
|
30
|
+
- Mon, 09 Mar 2015 19:53:44 GMT
|
31
31
|
body:
|
32
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:
|
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
34
|
http_version:
|
35
|
-
recorded_at:
|
35
|
+
recorded_at: Mon, 09 Mar 2015 19:53:44 GMT
|
36
36
|
- request:
|
37
37
|
method: get
|
38
|
-
uri: http://localhost:
|
38
|
+
uri: http://localhost:8150/api/commands/register-node
|
39
39
|
body:
|
40
40
|
encoding: US-ASCII
|
41
41
|
string: ''
|
@@ -54,29 +54,29 @@ http_interactions:
|
|
54
54
|
Server:
|
55
55
|
- Apache-Coyote/1.1
|
56
56
|
Etag:
|
57
|
-
- '"server-version-v0.
|
57
|
+
- '"server-version-v0.16.1-18-gd3acc7a-dirty"'
|
58
58
|
X-Content-Type-Options:
|
59
59
|
- nosniff
|
60
60
|
Content-Type:
|
61
61
|
- application/json;charset=utf-8
|
62
62
|
Content-Length:
|
63
|
-
- '
|
63
|
+
- '6207'
|
64
64
|
Date:
|
65
|
-
-
|
65
|
+
- Mon, 09 Mar 2015 19:53:44 GMT
|
66
66
|
body:
|
67
67
|
encoding: US-ASCII
|
68
|
-
string: '{"name":"register-node","help":{"
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
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
80
|
pattern: `commands:register-node`\n\nFor more detail on how the permission
|
81
81
|
strings are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
|
82
82
|
pattern is expanded\nand then a permission check applied to it, before the
|
@@ -85,57 +85,27 @@ http_interactions:
|
|
85
85
|
http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * installed\n -
|
86
86
|
Should the node be considered ''installed'' already? Installed nodes are\n not
|
87
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 *
|
88
|
+
is required.\n - It must be of type boolean.\n\n * hw_info\n - The hardware
|
89
89
|
information for the node. This is used to match the node on first\n boot
|
90
90
|
with the record in the database. The order of MAC address assignment in\n this
|
91
91
|
data is not significant, as a node with reordered MAC addresses will be\n treated
|
92
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
|
93
|
+
object.\n - It must be between 1 and Infinity in length.\n # Attributes\n \n *
|
94
94
|
serial\n - The DMI serial number of the node\n - It must be of type
|
95
95
|
string.\n \n * asset\n - The DMI asset tag of the node\n -
|
96
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
|
98
|
-
boot it, and note that it already has an OS\
|
99
|
-
subject to policy-based reinstallation:\n
|
100
|
-
|
101
|
-
\"
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
encoding: US-ASCII
|
110
|
-
string: ''
|
111
|
-
headers:
|
112
|
-
Accept:
|
113
|
-
- application/json
|
114
|
-
Accept-Encoding:
|
115
|
-
- gzip, deflate
|
116
|
-
User-Agent:
|
117
|
-
- Ruby
|
118
|
-
response:
|
119
|
-
status:
|
120
|
-
code: 200
|
121
|
-
message: OK
|
122
|
-
headers:
|
123
|
-
Server:
|
124
|
-
- Apache-Coyote/1.1
|
125
|
-
Etag:
|
126
|
-
- '"server-version-v0.15.0-26-gfffaba4-dirty"'
|
127
|
-
X-Content-Type-Options:
|
128
|
-
- nosniff
|
129
|
-
Content-Type:
|
130
|
-
- application/json;charset=utf-8
|
131
|
-
Content-Length:
|
132
|
-
- '2936'
|
133
|
-
Date:
|
134
|
-
- Thu, 14 Aug 2014 20:49:53 GMT
|
135
|
-
body:
|
136
|
-
encoding: US-ASCII
|
137
|
-
string: '{"name":"register-node","help":{"full":"# SYNOPSIS\nRegister a node
|
138
|
-
with Razor before it is discovered\n\n# DESCRIPTION\nIn order to make brownfield
|
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
|
139
109
|
deployments of Razor easier we allow users to\nregister nodes explicitly. This
|
140
110
|
command allows you to perform the same\nregistration that would happen when
|
141
111
|
a new node checked in, ahead of time.\n\nIn order for this to be effective
|
@@ -145,21 +115,21 @@ http_interactions:
|
|
145
115
|
the node installed field will be updated to\nmatch the value in this command.\n\nThe
|
146
116
|
final state is that a node with the supplied hardware information, and the\ndesired
|
147
117
|
installed state, will be present in the database, regardless of it\nexisting
|
148
|
-
before hand or not.\n
|
149
|
-
|
150
|
-
|
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
|
151
121
|
pattern is expanded\nand then a permission check applied to it, before the
|
152
122
|
command is authorized.\n\nThese checks only apply if security is enabled in
|
153
123
|
the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
|
154
124
|
http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * installed\n -
|
155
125
|
Should the node be considered ''installed'' already? Installed nodes are\n not
|
156
126
|
eligible for policy matching, and will simply boot locally.\n - This attribute
|
157
|
-
is required.\n - It must be of type boolean.\n\n *
|
127
|
+
is required.\n - It must be of type boolean.\n\n * hw_info\n - The hardware
|
158
128
|
information for the node. This is used to match the node on first\n boot
|
159
129
|
with the record in the database. The order of MAC address assignment in\n this
|
160
130
|
data is not significant, as a node with reordered MAC addresses will be\n treated
|
161
131
|
as the same node.\n - This attribute is required.\n - It must be of type
|
162
|
-
object.\n - It must be between 1 and Infinity in length.\n
|
132
|
+
object.\n - It must be between 1 and Infinity in length.\n # Attributes\n \n *
|
163
133
|
serial\n - The DMI serial number of the node\n - It must be of type
|
164
134
|
string.\n \n * asset\n - The DMI asset tag of the node\n -
|
165
135
|
It must be of type string.\n \n * uuid\n - The DMI UUID of the node\n -
|
@@ -168,15 +138,15 @@ http_interactions:
|
|
168
138
|
subject to policy-based reinstallation:\n \n {\n \"hw_info\":
|
169
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\":
|
170
140
|
\"xxxxxxxxxxx\",\n \"asset\": \"Asset-1234567890\",\n \"uuid\": \"Not
|
171
|
-
Settable\"\n },\n \"installed\": true\n }\n"},"schema":{"installed":{"type":"boolean"},"
|
141
|
+
Settable\"\n },\n \"installed\": true\n }\n"},"schema":{"installed":{"type":"boolean"},"hw_info":{"type":"object","aliases":["hw-info"]}}}'
|
172
142
|
http_version:
|
173
|
-
recorded_at:
|
143
|
+
recorded_at: Mon, 09 Mar 2015 19:53:44 GMT
|
174
144
|
- request:
|
175
145
|
method: post
|
176
|
-
uri: http://localhost:
|
146
|
+
uri: http://localhost:8150/api/commands/register-node
|
177
147
|
body:
|
178
148
|
encoding: UTF-8
|
179
|
-
string: '{"installed":true,"
|
149
|
+
string: '{"installed":true,"hw_info":{"net0":"abcdef"}}'
|
180
150
|
headers:
|
181
151
|
Accept:
|
182
152
|
- application/json
|
@@ -202,15 +172,15 @@ http_interactions:
|
|
202
172
|
Content-Length:
|
203
173
|
- '203'
|
204
174
|
Date:
|
205
|
-
-
|
175
|
+
- Mon, 09 Mar 2015 19:53:44 GMT
|
206
176
|
body:
|
207
177
|
encoding: US-ASCII
|
208
|
-
string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/nodes/member","id":"http://localhost:
|
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"}'
|
209
179
|
http_version:
|
210
|
-
recorded_at:
|
180
|
+
recorded_at: Mon, 09 Mar 2015 19:53:44 GMT
|
211
181
|
- request:
|
212
182
|
method: get
|
213
|
-
uri: http://localhost:
|
183
|
+
uri: http://localhost:8150/api/collections/nodes/node1
|
214
184
|
body:
|
215
185
|
encoding: US-ASCII
|
216
186
|
string: ''
|
@@ -233,17 +203,17 @@ http_interactions:
|
|
233
203
|
Content-Type:
|
234
204
|
- application/json;charset=utf-8
|
235
205
|
Content-Length:
|
236
|
-
- '
|
206
|
+
- '398'
|
237
207
|
Date:
|
238
|
-
-
|
208
|
+
- Mon, 09 Mar 2015 19:53:44 GMT
|
239
209
|
body:
|
240
210
|
encoding: US-ASCII
|
241
|
-
string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/nodes/member","id":"http://localhost:
|
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":["abcdef"]},"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:53:44-05:00"}}'
|
242
212
|
http_version:
|
243
|
-
recorded_at:
|
213
|
+
recorded_at: Mon, 09 Mar 2015 19:53:44 GMT
|
244
214
|
- request:
|
245
215
|
method: get
|
246
|
-
uri: http://localhost:
|
216
|
+
uri: http://localhost:8150/api
|
247
217
|
body:
|
248
218
|
encoding: US-ASCII
|
249
219
|
string: ''
|
@@ -266,17 +236,17 @@ http_interactions:
|
|
266
236
|
Content-Type:
|
267
237
|
- application/json;charset=utf-8
|
268
238
|
Content-Length:
|
269
|
-
- '
|
239
|
+
- '5650'
|
270
240
|
Date:
|
271
|
-
-
|
241
|
+
- Mon, 09 Mar 2015 19:53:44 GMT
|
272
242
|
body:
|
273
243
|
encoding: US-ASCII
|
274
|
-
string: '{"commands":[{"name":"add-policy-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/add-policy-tag","id":"http://localhost:
|
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"}}'
|
275
245
|
http_version:
|
276
|
-
recorded_at:
|
246
|
+
recorded_at: Mon, 09 Mar 2015 19:53:44 GMT
|
277
247
|
- request:
|
278
248
|
method: get
|
279
|
-
uri: http://localhost:
|
249
|
+
uri: http://localhost:8150/api/commands/modify-node-metadata
|
280
250
|
body:
|
281
251
|
encoding: US-ASCII
|
282
252
|
string: ''
|
@@ -295,24 +265,24 @@ http_interactions:
|
|
295
265
|
Server:
|
296
266
|
- Apache-Coyote/1.1
|
297
267
|
Etag:
|
298
|
-
- '"server-version-v0.
|
268
|
+
- '"server-version-v0.16.1-18-gd3acc7a-dirty"'
|
299
269
|
X-Content-Type-Options:
|
300
270
|
- nosniff
|
301
271
|
Content-Type:
|
302
272
|
- application/json;charset=utf-8
|
303
273
|
Content-Length:
|
304
|
-
- '
|
274
|
+
- '5386'
|
305
275
|
Date:
|
306
|
-
-
|
276
|
+
- Mon, 09 Mar 2015 19:53:44 GMT
|
307
277
|
body:
|
308
278
|
encoding: US-ASCII
|
309
|
-
string: '{"name":"modify-node-metadata","help":{"
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
279
|
+
string: '{"name":"modify-node-metadata","help":{"summary":"Perform various editing
|
280
|
+
operations on node metadata","description":"Node metadata can be added, changed,
|
281
|
+
or removed with this command; it contains\na limited editing language to make
|
282
|
+
changes to the existing metadata in an\natomic fashion.\n\nIt can also clear
|
283
|
+
all metadata from a node, although that operation is\nexclusive to all other
|
284
|
+
editing operations, and cannot be performed atomically\nwith them.","schema":"#
|
285
|
+
Access Control\n\nThis command''s access control pattern: `commands:modify-node-metadata:%{node}`\n\nWords
|
316
286
|
surrounded by `%{...}` are substitutions from the input data: typically\nthe
|
317
287
|
name of the object being modified, or some other critical detail, these\nallow
|
318
288
|
roles to be granted partial access to modify the system.\n\nFor more detail
|
@@ -328,56 +298,25 @@ http_interactions:
|
|
328
298
|
It must be of type array.\n\n * clear\n - Remove all metadata from the node. Cannot
|
329
299
|
be used together with\n either ''update'' or ''remove''.\n - It must
|
330
300
|
be of type boolean.\n - If present, update, remove must not be present.\n\n
|
331
|
-
*
|
301
|
+
* no_replace\n - If true, the `update` operation will cause this command
|
332
302
|
to fail if the\n metadata key is already present on the node. No effect
|
333
|
-
on `remove` or\n clear.\n - It must be of type boolean.\n
|
334
|
-
node metadata, by adding and removing some keys, but refusing to\
|
335
|
-
|
336
|
-
\
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
string: ''
|
348
|
-
headers:
|
349
|
-
Accept:
|
350
|
-
- application/json
|
351
|
-
Accept-Encoding:
|
352
|
-
- gzip, deflate
|
353
|
-
User-Agent:
|
354
|
-
- Ruby
|
355
|
-
response:
|
356
|
-
status:
|
357
|
-
code: 200
|
358
|
-
message: OK
|
359
|
-
headers:
|
360
|
-
Server:
|
361
|
-
- Apache-Coyote/1.1
|
362
|
-
Etag:
|
363
|
-
- '"server-version-v0.15.0-26-gfffaba4-dirty"'
|
364
|
-
X-Content-Type-Options:
|
365
|
-
- nosniff
|
366
|
-
Content-Type:
|
367
|
-
- application/json;charset=utf-8
|
368
|
-
Content-Length:
|
369
|
-
- '2610'
|
370
|
-
Date:
|
371
|
-
- Thu, 14 Aug 2014 20:49:53 GMT
|
372
|
-
body:
|
373
|
-
encoding: US-ASCII
|
374
|
-
string: '{"name":"modify-node-metadata","help":{"full":"# SYNOPSIS\nPerform
|
375
|
-
various editing operations on node metadata\n\n# DESCRIPTION\nNode metadata
|
376
|
-
can be added, changed, or removed with this command; it contains\na limited
|
377
|
-
editing language to make changes to the existing metadata in an\natomic fashion.\n\nIt
|
303
|
+
on `remove` or\n clear.\n - It must be of type boolean.\n","examples":{"api":"Editing
|
304
|
+
node metadata, by adding and removing some keys, but refusing to\nmodify an
|
305
|
+
existing value already present on a node:\n\n {\n \"node\": \"node1\",\n \"update\":
|
306
|
+
{\n \"key1\": \"value1\",\n \"key2\": \"value2\"\n }\n \"remove\":
|
307
|
+
[\"key3\", \"key4\"],\n \"no_replace\": true\n }\n\nRemoving all
|
308
|
+
node metadata:\n\n {\"node\": \"node1\", \"clear\": true}","cli":"Editing
|
309
|
+
node metadata, by adding and removing some keys, but refusing to\nmodify an
|
310
|
+
existing value already present on a node:\n\n razor modify-node-metadata
|
311
|
+
--node node1 --update key1=value1 \\\n --update key2=value2 --remove
|
312
|
+
key3 --remove key4 --no-replace\n\nRemoving all node metadata:\n\n razor
|
313
|
+
modify-node-metadata --node node1 --clear"},"full":"# SYNOPSIS\nPerform various
|
314
|
+
editing operations on node metadata\n\n# DESCRIPTION\nNode metadata can be
|
315
|
+
added, changed, or removed with this command; it contains\na limited editing
|
316
|
+
language to make changes to the existing metadata in an\natomic fashion.\n\nIt
|
378
317
|
can also clear all metadata from a node, although that operation is\nexclusive
|
379
318
|
to all other editing operations, and cannot be performed atomically\nwith
|
380
|
-
them.\n
|
319
|
+
them.\n# Access Control\n\nThis command''s access control pattern: `commands:modify-node-metadata:%{node}`\n\nWords
|
381
320
|
surrounded by `%{...}` are substitutions from the input data: typically\nthe
|
382
321
|
name of the object being modified, or some other critical detail, these\nallow
|
383
322
|
roles to be granted partial access to modify the system.\n\nFor more detail
|
@@ -393,20 +332,20 @@ http_interactions:
|
|
393
332
|
It must be of type array.\n\n * clear\n - Remove all metadata from the node. Cannot
|
394
333
|
be used together with\n either ''update'' or ''remove''.\n - It must
|
395
334
|
be of type boolean.\n - If present, update, remove must not be present.\n\n
|
396
|
-
*
|
335
|
+
* no_replace\n - If true, the `update` operation will cause this command
|
397
336
|
to fail if the\n metadata key is already present on the node. No effect
|
398
337
|
on `remove` or\n clear.\n - It must be of type boolean.\n\n# EXAMPLES\n\n Editing
|
399
338
|
node metadata, by adding and removing some keys, but refusing to\n modify
|
400
339
|
an existing value already present on a node:\n \n {\n \"node\":
|
401
340
|
\"node1\",\n \"update\": {\n \"key1\": \"value1\",\n \"key2\":
|
402
|
-
\"value2\"\n }\n \"remove\": [\"key3\", \"key4\"],\n \"
|
341
|
+
\"value2\"\n }\n \"remove\": [\"key3\", \"key4\"],\n \"no_replace\":
|
403
342
|
true\n }\n \n Removing all node metadata:\n \n {\"node\": \"node1\",
|
404
|
-
\"clear\": true}\n"},"schema":{"node":{"type":"string"},"update":{"type":"object"},"remove":{"type":"array"},"clear":{"type":"boolean"},"
|
343
|
+
\"clear\": true}\n"},"schema":{"node":{"type":"string"},"update":{"type":"object"},"remove":{"type":"array"},"clear":{"type":"boolean"},"no_replace":{"type":"boolean","aliases":["no-replace"]}}}'
|
405
344
|
http_version:
|
406
|
-
recorded_at:
|
345
|
+
recorded_at: Mon, 09 Mar 2015 19:53:44 GMT
|
407
346
|
- request:
|
408
347
|
method: post
|
409
|
-
uri: http://localhost:
|
348
|
+
uri: http://localhost:8150/api/commands/modify-node-metadata
|
410
349
|
body:
|
411
350
|
encoding: UTF-8
|
412
351
|
string: '{"node":"node1","update":{"keyᓱ123":"valueᓱ1"}}'
|
@@ -435,15 +374,15 @@ http_interactions:
|
|
435
374
|
Content-Length:
|
436
375
|
- '203'
|
437
376
|
Date:
|
438
|
-
-
|
377
|
+
- Mon, 09 Mar 2015 19:53:44 GMT
|
439
378
|
body:
|
440
379
|
encoding: US-ASCII
|
441
|
-
string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/nodes/member","id":"http://localhost:
|
380
|
+
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/2"}'
|
442
381
|
http_version:
|
443
|
-
recorded_at:
|
382
|
+
recorded_at: Mon, 09 Mar 2015 19:53:45 GMT
|
444
383
|
- request:
|
445
384
|
method: get
|
446
|
-
uri: http://localhost:
|
385
|
+
uri: http://localhost:8150/api/collections/nodes/node1
|
447
386
|
body:
|
448
387
|
encoding: US-ASCII
|
449
388
|
string: ''
|
@@ -466,22 +405,22 @@ http_interactions:
|
|
466
405
|
Content-Type:
|
467
406
|
- application/json;charset=utf-8
|
468
407
|
Content-Length:
|
469
|
-
- '
|
408
|
+
- '435'
|
470
409
|
Date:
|
471
|
-
-
|
410
|
+
- Mon, 09 Mar 2015 19:53:44 GMT
|
472
411
|
body:
|
473
412
|
encoding: ASCII-8BIT
|
474
413
|
string: !binary |-
|
475
414
|
eyJzcGVjIjoiaHR0cDovL2FwaS5wdXBwZXRsYWJzLmNvbS9yYXpvci92MS9j
|
476
415
|
b2xsZWN0aW9ucy9ub2Rlcy9tZW1iZXIiLCJpZCI6Imh0dHA6Ly9sb2NhbGhv
|
477
|
-
|
416
|
+
c3Q6ODE1MC9hcGkvY29sbGVjdGlvbnMvbm9kZXMvbm9kZTEiLCJuYW1lIjoi
|
478
417
|
bm9kZTEiLCJod19pbmZvIjp7Im1hYyI6WyJhYmNkZWYiXX0sImxvZyI6eyJp
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
418
|
+
ZCI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODE1MC9hcGkvY29sbGVjdGlvbnMvbm9k
|
419
|
+
ZXMvbm9kZTEvbG9nIiwibmFtZSI6ImxvZyIsInBhcmFtcyI6eyJsaW1pdCI6
|
420
|
+
eyJ0eXBlIjoibnVtYmVyIn0sInN0YXJ0Ijp7InR5cGUiOiJudW1iZXIifX19
|
421
|
+
LCJ0YWdzIjpbXSwibWV0YWRhdGEiOnsia2V54ZOxMTIzIjoidmFsdWXhk7Ex
|
422
|
+
In0sInN0YXRlIjp7Imluc3RhbGxlZCI6InRydWUiLCJpbnN0YWxsZWRfYXQi
|
423
|
+
OiIyMDE1LTAzLTA5VDE0OjUzOjQ0LTA1OjAwIn19
|
485
424
|
http_version:
|
486
|
-
recorded_at:
|
487
|
-
recorded_with: VCR 2.
|
425
|
+
recorded_at: Mon, 09 Mar 2015 19:53:45 GMT
|
426
|
+
recorded_with: VCR 2.5.0
|