pe-razor-client 0.15.2.2 → 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.
- checksums.yaml +4 -4
- data/NEWS.md +27 -0
- data/bin/razor +27 -2
- data/lib/razor/cli.rb +11 -2
- data/lib/razor/cli/command.rb +150 -0
- data/lib/razor/cli/document.rb +8 -4
- data/lib/razor/cli/format.rb +46 -22
- data/lib/razor/cli/navigate.rb +28 -156
- data/lib/razor/cli/parse.rb +49 -7
- data/lib/razor/cli/query.rb +69 -0
- data/lib/razor/cli/table_format.rb +41 -0
- data/lib/razor/cli/transforms.rb +25 -0
- data/lib/razor/cli/version.rb +1 -1
- data/lib/razor/cli/views.yaml +53 -2
- data/spec/cli/command_spec.rb +66 -0
- data/spec/cli/format_spec.rb +95 -5
- data/spec/cli/navigate_spec.rb +50 -6
- data/spec/cli/parse_spec.rb +42 -2
- data/spec/fixtures/vcr/Razor_CLI_Navigate/argument_formatting/should_allow_in_string.yml +233 -0
- 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 +80 -111
- 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
- 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
- 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
- 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 +69 -0
- data/spec/fixtures/vcr/Razor_CLI_Navigate/with_query_parameters/should_append_start.yml +69 -0
- data/spec/fixtures/vcr/Razor_CLI_Navigate/with_query_parameters/should_not_fail_when_query_returns_details_for_one_item.yml +313 -0
- data/spec/fixtures/vcr/Razor_CLI_Navigate/with_query_parameters/should_store_query_without_query_parameters.yml +557 -0
- 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
- 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
- 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 +26 -7
data/spec/cli/navigate_spec.rb
CHANGED
@@ -38,7 +38,7 @@ describe Razor::CLI::Navigate do
|
|
38
38
|
context "with invalid parameter", :vcr do
|
39
39
|
it "should fail with bad JSON" do
|
40
40
|
nav = Razor::CLI::Parse.new(['create-broker', '--name', 'broker', '--type', 'puppet', '--configuration', 'not-json']).navigate
|
41
|
-
expect{nav.get_document}.to raise_error(ArgumentError, /Invalid
|
41
|
+
expect{nav.get_document}.to raise_error(ArgumentError, /Invalid object for argument 'configuration'/)
|
42
42
|
end
|
43
43
|
|
44
44
|
it "should fail with malformed argument" do
|
@@ -107,13 +107,13 @@ describe Razor::CLI::Navigate do
|
|
107
107
|
nav = Razor::CLI::Parse.new(['create-broker', '--name', 'broker2', '--broker-type', 'puppet',
|
108
108
|
'--configuration', '["server"]',
|
109
109
|
'--configuration', 'environment=production']).navigate
|
110
|
-
expect {nav.get_document}.to raise_error(ArgumentError, "
|
110
|
+
expect {nav.get_document}.to raise_error(ArgumentError, "Invalid object for argument 'configuration'")
|
111
111
|
end
|
112
112
|
it "should fail with mixed types (hash then array)" do
|
113
113
|
nav = Razor::CLI::Parse.new(['create-broker', '--name', 'broker3', '--broker-type', 'puppet',
|
114
114
|
'--configuration', 'environment=production',
|
115
115
|
'--configuration', '["server"]']).navigate
|
116
|
-
expect {nav.get_document}.to raise_error(ArgumentError, "
|
116
|
+
expect {nav.get_document}.to raise_error(ArgumentError, "Invalid object for argument 'configuration'")
|
117
117
|
end
|
118
118
|
end
|
119
119
|
end
|
@@ -124,6 +124,10 @@ describe Razor::CLI::Navigate do
|
|
124
124
|
Razor::CLI::Parse.new(['create-repo', '--name="double-quote with spaces"', '--url', 'http://url.com/some.iso', '--task', 'noop']).navigate.get_document
|
125
125
|
Razor::CLI::Parse.new(['create-repo', '--name=\'single-quote with spaces\'', '--url', 'http://url.com/some.iso', '--task', 'noop']).navigate.get_document
|
126
126
|
end
|
127
|
+
|
128
|
+
it "should allow '=' in string" do
|
129
|
+
Razor::CLI::Parse.new(['create-repo', '--name=\'with=equals\'', '--url', 'http://url.com/some.iso', '--task', 'noop']).navigate.get_document['name'].should =~ /with=equals/
|
130
|
+
end
|
127
131
|
end
|
128
132
|
|
129
133
|
context "for command help", :vcr do
|
@@ -144,18 +148,58 @@ describe Razor::CLI::Navigate do
|
|
144
148
|
end
|
145
149
|
|
146
150
|
context "with authentication", :vcr do
|
147
|
-
AuthArg = %w[-u http://fred:dead@localhost:
|
151
|
+
AuthArg = %w[-u http://fred:dead@localhost:8150/api].freeze
|
148
152
|
|
149
153
|
it "should supply that to the API service" do
|
150
154
|
nav = Razor::CLI::Parse.new(AuthArg).navigate
|
151
155
|
nav.get_document.should be_an_instance_of Hash
|
152
|
-
|
156
|
+
nav.last_url.user.should == 'fred'
|
157
|
+
nav.last_url.password.should == 'dead'
|
153
158
|
end
|
154
159
|
|
155
160
|
it "should preserve that across navigation" do
|
156
161
|
nav = Razor::CLI::Parse.new(AuthArg + ['tags']).navigate
|
157
162
|
nav.get_document['items'].should == []
|
158
|
-
|
163
|
+
nav.last_url.user.should == 'fred'
|
164
|
+
nav.last_url.password.should == 'dead'
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
context "with query parameters", :vcr do
|
169
|
+
it "should append limit" do
|
170
|
+
nav = Razor::CLI::Parse.new(%w[-u http://fred:dead@localhost:8150/api events --limit 1]).navigate
|
171
|
+
nav.get_document.should be_an_instance_of Hash
|
172
|
+
nav.last_url.to_s.should =~ /limit=1/
|
173
|
+
end
|
174
|
+
it "should append start" do
|
175
|
+
nav = Razor::CLI::Parse.new(%w[-u http://fred:dead@localhost:8150/api events --start 1]).navigate
|
176
|
+
nav.get_document.should be_an_instance_of Hash
|
177
|
+
nav.last_url.to_s.should =~ /start=1/
|
178
|
+
end
|
179
|
+
it "should throw an error if the query parameter is not in the API" do
|
180
|
+
nav = Razor::CLI::Parse.new(%w[-u http://fred:dead@localhost:8150/api events --not-in-api 1]).navigate
|
181
|
+
expect {nav.get_document}.to raise_error(OptionParser::InvalidOption, 'invalid option: --not-in-api')
|
182
|
+
end
|
183
|
+
it "should not fail when query returns details for one item" do
|
184
|
+
nav = Razor::CLI::Parse.new(['register-node', '--installed', 'true', '--hw-info', 'net0=78:31:c1:be:c8:00']).navigate.get_document
|
185
|
+
name = nav['name']
|
186
|
+
nav = Razor::CLI::Parse.new(['-u', 'http://fred:dead@localhost:8150/api', 'nodes', name]).navigate
|
187
|
+
nav.get_document['name'].should == name
|
188
|
+
end
|
189
|
+
it "should throw an error if the query parameter is not in the API from a single item" do
|
190
|
+
nav = Razor::CLI::Parse.new(['register-node', '--installed', 'true', '--hw-info', 'net0=78:31:c1:be:c8:00']).navigate.get_document
|
191
|
+
name = nav['name']
|
192
|
+
expect {Razor::CLI::Parse.new(['-u', 'http://fred:dead@localhost:8150/api', 'nodes', name, '--limit', '1']).
|
193
|
+
navigate.get_document}.to raise_error(OptionParser::InvalidOption, 'invalid option: --limit')
|
194
|
+
end
|
195
|
+
it "should store query without query parameters" do
|
196
|
+
name = Razor::CLI::Parse.new(['register-node', '--installed', 'true', '--hw-info', 'net0=78:31:c1:be:c8:00']).
|
197
|
+
navigate.get_document['name']
|
198
|
+
Razor::CLI::Parse.new(['register-node', '--installed', 'true', '--hw-info', 'net0=78:31:c1:be:c8:01']).
|
199
|
+
navigate.get_document
|
200
|
+
parse = Razor::CLI::Parse.new(['-u', 'http://fred:dead@localhost:8150/api', 'nodes', name, 'log', '--limit', '1'])
|
201
|
+
parse.navigate.get_document
|
202
|
+
parse.stripped_args.should == ['nodes', name, 'log']
|
159
203
|
end
|
160
204
|
end
|
161
205
|
end
|
data/spec/cli/parse_spec.rb
CHANGED
@@ -19,6 +19,7 @@ describe Razor::CLI::Parse do
|
|
19
19
|
describe "#new" do
|
20
20
|
context "with no arguments" do
|
21
21
|
it {parse.show_help?.should be true}
|
22
|
+
it {parse.verify_ssl?.should be false}
|
22
23
|
end
|
23
24
|
|
24
25
|
context "with a '-h'" do
|
@@ -53,11 +54,36 @@ describe Razor::CLI::Parse do
|
|
53
54
|
it "should use the given URL" do
|
54
55
|
url = 'http://razor.example.com:2150/path/to/api'
|
55
56
|
parse('-u',url).api_url.to_s.should == url
|
57
|
+
parse('-u',url).verify_ssl?.should == true
|
56
58
|
end
|
57
59
|
|
58
60
|
it "should terminate with an error if an invalid URL is provided" do
|
59
61
|
expect{parse('-u','not valid url')}.to raise_error(Razor::CLI::InvalidURIError)
|
60
62
|
end
|
63
|
+
|
64
|
+
it "should terminate with an error if a URL without a protocol is provided" do
|
65
|
+
expect{parse('-u','localhost:8151/api')}.to raise_error(Razor::CLI::InvalidURIError)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
context "with a '-k'" do
|
70
|
+
it {parse("-k").verify_ssl?.should be false}
|
71
|
+
end
|
72
|
+
|
73
|
+
context "with an '-a'" do
|
74
|
+
it {parse("-a").show_api_help?.should be true}
|
75
|
+
end
|
76
|
+
|
77
|
+
context "with an '--api'" do
|
78
|
+
it {parse("--api").show_api_help?.should be true}
|
79
|
+
end
|
80
|
+
|
81
|
+
context "with a '--insecure'" do
|
82
|
+
it {parse("--insecure").verify_ssl?.should be false}
|
83
|
+
end
|
84
|
+
|
85
|
+
context "with '--version'" do
|
86
|
+
it {parse("--version").show_version?.should be true}
|
61
87
|
end
|
62
88
|
|
63
89
|
context "with ENV RAZOR_API set" do
|
@@ -80,16 +106,30 @@ describe Razor::CLI::Parse do
|
|
80
106
|
end
|
81
107
|
end
|
82
108
|
|
109
|
+
context "with ENV RAZOR_CA_FILE set" do
|
110
|
+
after :each do
|
111
|
+
ENV::delete('RAZOR_CA_FILE')
|
112
|
+
end
|
113
|
+
it "should raise an error if the RAZOR_CA_FILE override is invalid" do
|
114
|
+
ENV['RAZOR_CA_FILE'] = '/does/not/exist'
|
115
|
+
expect{parse}.to raise_error(Razor::CLI::InvalidCAFileError,
|
116
|
+
"CA file '/does/not/exist' in ENV variable RAZOR_CA_FILE does not exist")
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
83
120
|
describe "#help", :vcr do
|
84
121
|
subject(:p) {parse}
|
85
122
|
it { should respond_to :help}
|
86
123
|
|
87
|
-
it { p.help
|
124
|
+
it { output, exitcode = p.help
|
125
|
+
output.should be_a String
|
126
|
+
exitcode.should == 0}
|
88
127
|
|
89
128
|
it "should print a list of known endpoints" do
|
90
129
|
p.navigate.should_receive(:collections).and_return([])
|
91
130
|
p.navigate.should_receive(:commands).and_return([])
|
92
|
-
p.help
|
131
|
+
_, exitcode = p.help
|
132
|
+
exitcode.should == 0
|
93
133
|
end
|
94
134
|
end
|
95
135
|
end
|
@@ -0,0 +1,233 @@
|
|
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:54:07 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:54:07 GMT
|
36
|
+
- request:
|
37
|
+
method: get
|
38
|
+
uri: http://localhost:8150/api/commands/create-repo
|
39
|
+
body:
|
40
|
+
encoding: US-ASCII
|
41
|
+
string: ''
|
42
|
+
headers:
|
43
|
+
Accept:
|
44
|
+
- application/json
|
45
|
+
Accept-Encoding:
|
46
|
+
- gzip, deflate
|
47
|
+
User-Agent:
|
48
|
+
- Ruby
|
49
|
+
response:
|
50
|
+
status:
|
51
|
+
code: 200
|
52
|
+
message: OK
|
53
|
+
headers:
|
54
|
+
Server:
|
55
|
+
- Apache-Coyote/1.1
|
56
|
+
Etag:
|
57
|
+
- '"server-version-v0.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
|
+
- '7794'
|
64
|
+
Date:
|
65
|
+
- Mon, 09 Mar 2015 19:54:07 GMT
|
66
|
+
body:
|
67
|
+
encoding: US-ASCII
|
68
|
+
string: '{"name":"create-repo","help":{"summary":"Create a new repository, from
|
69
|
+
an ISO image or a URL","description":"Create a new repository, which can either
|
70
|
+
contain the content to install a\nnode, or simply point to an existing online
|
71
|
+
repository by URL.","schema":"# Access Control\n\nThis command''s access control
|
72
|
+
pattern: `commands:create-repo:%{name}`\n\nWords surrounded by `%{...}` are
|
73
|
+
substitutions from the input data: typically\nthe name of the object being
|
74
|
+
modified, or some other critical detail, these\nallow roles to be granted
|
75
|
+
partial access to modify the system.\n\nFor more detail on how the permission
|
76
|
+
strings are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
|
77
|
+
pattern is expanded\nand then a permission check applied to it, before the
|
78
|
+
command is authorized.\n\nThese checks only apply if security is enabled in
|
79
|
+
the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
|
80
|
+
http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * name\n -
|
81
|
+
The name of the repository.\n - This attribute is required.\n - It must
|
82
|
+
be of type string.\n - It must be between 1 and 250 in length.\n\n * url\n -
|
83
|
+
The URL of the remote repository to use.\n - It must be of type string.\n -
|
84
|
+
If present, iso_url, no_content must not be present.\n - It must be between
|
85
|
+
1 and 1000 in length.\n\n * iso_url\n - The URL of the ISO image to download
|
86
|
+
and unpack to create the\n repository. This can be an HTTP or HTTPS URL,
|
87
|
+
or it can be a\n file URL.\n \n In the latter case, the file path
|
88
|
+
is interpreted as a path on the\n Razor server, rather than a path on
|
89
|
+
the client. This requires that\n you manually place the ISO image on
|
90
|
+
the server before invoking the\n command.\n - It must be of type string.\n -
|
91
|
+
If present, url, no_content must not be present.\n - It must be between
|
92
|
+
1 and 1000 in length.\n\n * no_content\n - For cases where extraction will
|
93
|
+
be done manually, this argument\n creates a stub directory in the repo
|
94
|
+
store where the extracted\n contents can be placed.\n - It must be of
|
95
|
+
type boolean.\n - If present, iso_url, url must not be present.\n\n * task\n -
|
96
|
+
The name of the task associated with this repository. This is used to\n install
|
97
|
+
nodes that match a policy using this repository; generally it\n should
|
98
|
+
match the OS that the URL or ISO_URL attributes point to.\n - This attribute
|
99
|
+
is required.\n - It must be of type string.\n","examples":{"api":"Create
|
100
|
+
a repository from an ISO image, which will be downloaded and unpacked\nby
|
101
|
+
the razor-server in the background:\n\n {\n \"name\": \"fedora19\",\n \"iso_url\":
|
102
|
+
\"http://example.com/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n\nYou
|
103
|
+
can also unpack an ISO image from a file *on the server*; this does not\nupload
|
104
|
+
the file from the client:\n {\n \"name\": \"fedora19\",\n \"iso_url\":
|
105
|
+
\"file:///tmp/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n\nFinally,
|
106
|
+
you can provide a `url` property when you create the repository;\nthis form
|
107
|
+
is merely a pointer to a resource somewhere and nothing will be\ndownloaded
|
108
|
+
onto the Razor server:\n\n {\n \"name\": \"fedora19\",\n \"url\": \"http://mirrors.n-ix.net/fedora/linux/releases/19/Fedora/x86_64/os/\"\n \"task\":
|
109
|
+
\"fedora\"\n }","cli":"Create a repository from an ISO image, which will
|
110
|
+
be downloaded and unpacked\nby the razor-server in the background:\n\n razor
|
111
|
+
create-repo --name fedora19 \\\n --iso-url http://example.com/Fedora-19-x86_64-DVD.iso
|
112
|
+
\\\n --task fedora\n\nYou can also unpack an ISO image from a file
|
113
|
+
*on the server*; this does not\nupload the file from the client:\n\n razor
|
114
|
+
create-repo --name fedora19 \\\n --iso-url file:///tmp/Fedora-19-x86_64-DVD.iso
|
115
|
+
\\\n --task fedora\n\nFinally, you can provide a `url` property when
|
116
|
+
you create the repository;\nthis form is merely a pointer to a resource somewhere
|
117
|
+
and nothing will be\ndownloaded onto the Razor server:\n\n razor create-repo
|
118
|
+
--name fedora19 --iso-url \\\n http://mirrors.n-ix.net/fedora/linux/releases/19/Fedora/x86_64/os/
|
119
|
+
\\\n --task fedora"},"full":"# SYNOPSIS\nCreate a new repository, from
|
120
|
+
an ISO image or a URL\n\n# DESCRIPTION\nCreate a new repository, which can
|
121
|
+
either contain the content to install a\nnode, or simply point to an existing
|
122
|
+
online repository by URL.\n# Access Control\n\nThis command''s access control
|
123
|
+
pattern: `commands:create-repo:%{name}`\n\nWords surrounded by `%{...}` are
|
124
|
+
substitutions from the input data: typically\nthe name of the object being
|
125
|
+
modified, or some other critical detail, these\nallow roles to be granted
|
126
|
+
partial access to modify the system.\n\nFor more detail on how the permission
|
127
|
+
strings are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
|
128
|
+
pattern is expanded\nand then a permission check applied to it, before the
|
129
|
+
command is authorized.\n\nThese checks only apply if security is enabled in
|
130
|
+
the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
|
131
|
+
http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * name\n -
|
132
|
+
The name of the repository.\n - This attribute is required.\n - It must
|
133
|
+
be of type string.\n - It must be between 1 and 250 in length.\n\n * url\n -
|
134
|
+
The URL of the remote repository to use.\n - It must be of type string.\n -
|
135
|
+
If present, iso_url, no_content must not be present.\n - It must be between
|
136
|
+
1 and 1000 in length.\n\n * iso_url\n - The URL of the ISO image to download
|
137
|
+
and unpack to create the\n repository. This can be an HTTP or HTTPS URL,
|
138
|
+
or it can be a\n file URL.\n \n In the latter case, the file path
|
139
|
+
is interpreted as a path on the\n Razor server, rather than a path on
|
140
|
+
the client. This requires that\n you manually place the ISO image on
|
141
|
+
the server before invoking the\n command.\n - It must be of type string.\n -
|
142
|
+
If present, url, no_content must not be present.\n - It must be between
|
143
|
+
1 and 1000 in length.\n\n * no_content\n - For cases where extraction will
|
144
|
+
be done manually, this argument\n creates a stub directory in the repo
|
145
|
+
store where the extracted\n contents can be placed.\n - It must be of
|
146
|
+
type boolean.\n - If present, iso_url, url must not be present.\n\n * task\n -
|
147
|
+
The name of the task associated with this repository. This is used to\n install
|
148
|
+
nodes that match a policy using this repository; generally it\n should
|
149
|
+
match the OS that the URL or ISO_URL attributes point to.\n - This attribute
|
150
|
+
is required.\n - It must be of type string.\n\n# EXAMPLES\n\n Create a
|
151
|
+
repository from an ISO image, which will be downloaded and unpacked\n by
|
152
|
+
the razor-server in the background:\n \n {\n \"name\": \"fedora19\",\n \"iso_url\":
|
153
|
+
\"http://example.com/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n You
|
154
|
+
can also unpack an ISO image from a file *on the server*; this does not\n upload
|
155
|
+
the file from the client:\n {\n \"name\": \"fedora19\",\n \"iso_url\":
|
156
|
+
\"file:///tmp/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n Finally,
|
157
|
+
you can provide a `url` property when you create the repository;\n this form
|
158
|
+
is merely a pointer to a resource somewhere and nothing will be\n downloaded
|
159
|
+
onto the Razor server:\n \n {\n \"name\": \"fedora19\",\n \"url\": \"http://mirrors.n-ix.net/fedora/linux/releases/19/Fedora/x86_64/os/\"\n \"task\":
|
160
|
+
\"fedora\"\n }\n"},"schema":{"name":{"type":"string"},"url":{"type":"string"},"iso_url":{"type":"string","aliases":["iso-url"]},"no_content":{"type":"boolean","aliases":["no-content"]},"task":{"type":"string"}}}'
|
161
|
+
http_version:
|
162
|
+
recorded_at: Mon, 09 Mar 2015 19:54:07 GMT
|
163
|
+
- request:
|
164
|
+
method: post
|
165
|
+
uri: http://localhost:8150/api/commands/create-repo
|
166
|
+
body:
|
167
|
+
encoding: UTF-8
|
168
|
+
string: '{"name":"''with=equals''","url":"http://url.com/some.iso","task":"noop"}'
|
169
|
+
headers:
|
170
|
+
Accept:
|
171
|
+
- application/json
|
172
|
+
Accept-Encoding:
|
173
|
+
- gzip, deflate
|
174
|
+
Content-Type:
|
175
|
+
- application/json
|
176
|
+
Content-Length:
|
177
|
+
- '70'
|
178
|
+
User-Agent:
|
179
|
+
- Ruby
|
180
|
+
response:
|
181
|
+
status:
|
182
|
+
code: 202
|
183
|
+
message: Accepted
|
184
|
+
headers:
|
185
|
+
Server:
|
186
|
+
- Apache-Coyote/1.1
|
187
|
+
X-Content-Type-Options:
|
188
|
+
- nosniff
|
189
|
+
Content-Type:
|
190
|
+
- application/json;charset=utf-8
|
191
|
+
Content-Length:
|
192
|
+
- '219'
|
193
|
+
Date:
|
194
|
+
- Mon, 09 Mar 2015 19:54:07 GMT
|
195
|
+
body:
|
196
|
+
encoding: US-ASCII
|
197
|
+
string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/repos/member","id":"http://localhost:8150/api/collections/repos/''with=equals''","name":"''with=equals''","command":"http://localhost:8150/api/collections/commands/1"}'
|
198
|
+
http_version:
|
199
|
+
recorded_at: Mon, 09 Mar 2015 19:54:07 GMT
|
200
|
+
- request:
|
201
|
+
method: get
|
202
|
+
uri: http://localhost:8150/api/collections/repos/'with=equals'
|
203
|
+
body:
|
204
|
+
encoding: US-ASCII
|
205
|
+
string: ''
|
206
|
+
headers:
|
207
|
+
Accept:
|
208
|
+
- application/json
|
209
|
+
Accept-Encoding:
|
210
|
+
- gzip, deflate
|
211
|
+
User-Agent:
|
212
|
+
- Ruby
|
213
|
+
response:
|
214
|
+
status:
|
215
|
+
code: 200
|
216
|
+
message: OK
|
217
|
+
headers:
|
218
|
+
Server:
|
219
|
+
- Apache-Coyote/1.1
|
220
|
+
X-Content-Type-Options:
|
221
|
+
- nosniff
|
222
|
+
Content-Type:
|
223
|
+
- application/json;charset=utf-8
|
224
|
+
Content-Length:
|
225
|
+
- '353'
|
226
|
+
Date:
|
227
|
+
- Mon, 09 Mar 2015 19:54:07 GMT
|
228
|
+
body:
|
229
|
+
encoding: US-ASCII
|
230
|
+
string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/repos/member","id":"http://localhost:8150/api/collections/repos/''with=equals''","name":"''with=equals''","iso_url":null,"url":"http://url.com/some.iso","task":{"spec":"http://api.puppetlabs.com/razor/v1/collections/tasks/member","id":"http://localhost:8150/api/collections/tasks/noop","name":"noop"}}'
|
231
|
+
http_version:
|
232
|
+
recorded_at: Mon, 09 Mar 2015 19:54:07 GMT
|
233
|
+
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:54:01 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:54:01 GMT
|
36
36
|
- request:
|
37
37
|
method: get
|
38
|
-
uri: http://localhost:
|
38
|
+
uri: http://localhost:8150/api/commands/create-repo
|
39
39
|
body:
|
40
40
|
encoding: US-ASCII
|
41
41
|
string: ''
|
@@ -54,23 +54,23 @@ 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
|
+
- '7794'
|
64
64
|
Date:
|
65
|
-
-
|
65
|
+
- Mon, 09 Mar 2015 19:54:01 GMT
|
66
66
|
body:
|
67
67
|
encoding: US-ASCII
|
68
|
-
string: '{"name":"create-repo","help":{"
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
68
|
+
string: '{"name":"create-repo","help":{"summary":"Create a new repository, from
|
69
|
+
an ISO image or a URL","description":"Create a new repository, which can either
|
70
|
+
contain the content to install a\nnode, or simply point to an existing online
|
71
|
+
repository by URL.","schema":"# Access Control\n\nThis command''s access control
|
72
|
+
pattern: `commands:create-repo:%{name}`\n\nWords surrounded by `%{...}` are
|
73
|
+
substitutions from the input data: typically\nthe name of the object being
|
74
74
|
modified, or some other critical detail, these\nallow roles to be granted
|
75
75
|
partial access to modify the system.\n\nFor more detail on how the permission
|
76
76
|
strings are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
|
@@ -78,143 +78,50 @@ http_interactions:
|
|
78
78
|
command is authorized.\n\nThese checks only apply if security is enabled in
|
79
79
|
the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
|
80
80
|
http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * name\n -
|
81
|
-
The name of the repository.\n - This attribute is required
|
81
|
+
The name of the repository.\n - This attribute is required.\n - It must
|
82
82
|
be of type string.\n - It must be between 1 and 250 in length.\n\n * url\n -
|
83
83
|
The URL of the remote repository to use.\n - It must be of type string.\n -
|
84
|
-
If present,
|
85
|
-
in length.\n\n *
|
86
|
-
to create the\n
|
87
|
-
be a\n
|
88
|
-
as a path on the\n
|
89
|
-
requires that\n
|
90
|
-
the\n
|
91
|
-
not be present.\n - It must be between
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
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
|
-
|
125
|
-
headers:
|
126
|
-
Server:
|
127
|
-
- Apache-Coyote/1.1
|
128
|
-
Etag:
|
129
|
-
- '"server-version-v0.14.1-125-g591a14d-dirty"'
|
130
|
-
X-Content-Type-Options:
|
131
|
-
- nosniff
|
132
|
-
Content-Type:
|
133
|
-
- application/json;charset=utf-8
|
134
|
-
Content-Length:
|
135
|
-
- '3227'
|
136
|
-
Date:
|
137
|
-
- Wed, 21 May 2014 21:40:46 GMT
|
138
|
-
body:
|
139
|
-
encoding: US-ASCII
|
140
|
-
string: '{"name":"create-repo","help":{"full":"# SYNOPSIS\nCreate a new repository,
|
141
|
-
from an ISO image or a URL\n\n# DESCRIPTION\nCreate a new repository, which
|
142
|
-
can either contain the content to install a\nnode, or simply point to an existing
|
143
|
-
online repository by URL.\n\n\n# Access Control\n\nThis command''s access
|
144
|
-
control pattern: `commands:create-repo:%{name}`\n\nWords surrounded by `%{...}`
|
145
|
-
are substitutions from the input data: typically\nthe name of the object being
|
146
|
-
modified, or some other critical detail, these\nallow roles to be granted
|
147
|
-
partial access to modify the system.\n\nFor more detail on how the permission
|
148
|
-
strings are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
|
149
|
-
pattern is expanded\nand then a permission check applied to it, before the
|
150
|
-
command is authorized.\n\nThese checks only apply if security is enabled in
|
151
|
-
the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
|
152
|
-
http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * name\n -
|
153
|
-
The name of the repository.\n - This attribute is required\n - It must
|
154
|
-
be of type string.\n - It must be between 1 and 250 in length.\n\n * url\n -
|
155
|
-
The URL of the remote repository to use.\n - It must be of type string.\n -
|
156
|
-
If present, iso-url must not be present.\n - It must be between 1 and 1000
|
157
|
-
in length.\n\n * iso-url\n - The URL of the ISO image to download and unpack
|
158
|
-
to create the\n repository. This can be an HTTP or HTTPS URL, or it can
|
159
|
-
be a\n file URL.\n \n In the later case, the file path is interpreted
|
160
|
-
as a path on the\n Razor server, rather than a path on the client. This
|
161
|
-
requires that\n you manually place the ISO image on the server before invoking
|
162
|
-
the\n command.\n - It must be of type string.\n - If present, url must
|
163
|
-
not be present.\n - It must be between 1 and 1000 in length.\n\n * task\n -
|
164
|
-
The name of the task associated with this repository. This is used to\n install
|
165
|
-
nodes that match a policy using this repository; generally it\n should match
|
166
|
-
the OS that the URL or ISO-URL attributes point to.\n - This attribute is
|
167
|
-
required\n - It must be of type string.\n\n\n\n# EXAMPLES\n Create a repository
|
168
|
-
from an ISO image, which will be downloaded and unpacked\n by the razor-server
|
169
|
-
in the background:\n \n {\n \"name\": \"fedora19\",\n \"iso-url\":
|
170
|
-
\"http://example.com/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n You
|
171
|
-
can also unpack an ISO image from a file *on the server*; this does not\n upload
|
172
|
-
the file from the client:\n {\n \"name\": \"fedora19\",\n \"iso-url\":
|
173
|
-
\"file:///tmp/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n Finally,
|
174
|
-
you can providing a `url` property when you create the repository;\n this
|
175
|
-
form is merely a pointer to a resource somehwere and nothing will be\n downloaded
|
176
|
-
onto the Razor server:\n \n {\n \"name\": \"fedora19\",\n \"url\": \"http://mirrors.n-ix.net/fedora/linux/releases/19/Fedora/x86_64/os/\"\n \"task\":
|
177
|
-
\"fedora\"\n }\n\n"},"schema":{"name":{"type":"string"},"url":{"type":"string"},"iso-url":{"type":"string"},"task":{"type":"string"}}}'
|
178
|
-
http_version:
|
179
|
-
recorded_at: Wed, 21 May 2014 21:40:46 GMT
|
180
|
-
- request:
|
181
|
-
method: get
|
182
|
-
uri: http://localhost:8080/api/commands/create-repo
|
183
|
-
body:
|
184
|
-
encoding: US-ASCII
|
185
|
-
string: ''
|
186
|
-
headers:
|
187
|
-
Accept:
|
188
|
-
- application/json
|
189
|
-
Accept-Encoding:
|
190
|
-
- gzip, deflate
|
191
|
-
User-Agent:
|
192
|
-
- Ruby
|
193
|
-
response:
|
194
|
-
status:
|
195
|
-
code: 200
|
196
|
-
message: OK
|
197
|
-
headers:
|
198
|
-
Server:
|
199
|
-
- Apache-Coyote/1.1
|
200
|
-
Etag:
|
201
|
-
- '"server-version-v0.14.1-125-g591a14d-dirty"'
|
202
|
-
X-Content-Type-Options:
|
203
|
-
- nosniff
|
204
|
-
Content-Type:
|
205
|
-
- application/json;charset=utf-8
|
206
|
-
Content-Length:
|
207
|
-
- '3227'
|
208
|
-
Date:
|
209
|
-
- Wed, 21 May 2014 21:40:46 GMT
|
210
|
-
body:
|
211
|
-
encoding: US-ASCII
|
212
|
-
string: '{"name":"create-repo","help":{"full":"# SYNOPSIS\nCreate a new repository,
|
213
|
-
from an ISO image or a URL\n\n# DESCRIPTION\nCreate a new repository, which
|
214
|
-
can either contain the content to install a\nnode, or simply point to an existing
|
215
|
-
online repository by URL.\n\n\n# Access Control\n\nThis command''s access
|
216
|
-
control pattern: `commands:create-repo:%{name}`\n\nWords surrounded by `%{...}`
|
217
|
-
are substitutions from the input data: typically\nthe name of the object being
|
84
|
+
If present, iso_url, no_content must not be present.\n - It must be between
|
85
|
+
1 and 1000 in length.\n\n * iso_url\n - The URL of the ISO image to download
|
86
|
+
and unpack to create the\n repository. This can be an HTTP or HTTPS URL,
|
87
|
+
or it can be a\n file URL.\n \n In the latter case, the file path
|
88
|
+
is interpreted as a path on the\n Razor server, rather than a path on
|
89
|
+
the client. This requires that\n you manually place the ISO image on
|
90
|
+
the server before invoking the\n command.\n - It must be of type string.\n -
|
91
|
+
If present, url, no_content must not be present.\n - It must be between
|
92
|
+
1 and 1000 in length.\n\n * no_content\n - For cases where extraction will
|
93
|
+
be done manually, this argument\n creates a stub directory in the repo
|
94
|
+
store where the extracted\n contents can be placed.\n - It must be of
|
95
|
+
type boolean.\n - If present, iso_url, url must not be present.\n\n * task\n -
|
96
|
+
The name of the task associated with this repository. This is used to\n install
|
97
|
+
nodes that match a policy using this repository; generally it\n should
|
98
|
+
match the OS that the URL or ISO_URL attributes point to.\n - This attribute
|
99
|
+
is required.\n - It must be of type string.\n","examples":{"api":"Create
|
100
|
+
a repository from an ISO image, which will be downloaded and unpacked\nby
|
101
|
+
the razor-server in the background:\n\n {\n \"name\": \"fedora19\",\n \"iso_url\":
|
102
|
+
\"http://example.com/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n\nYou
|
103
|
+
can also unpack an ISO image from a file *on the server*; this does not\nupload
|
104
|
+
the file from the client:\n {\n \"name\": \"fedora19\",\n \"iso_url\":
|
105
|
+
\"file:///tmp/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n\nFinally,
|
106
|
+
you can provide a `url` property when you create the repository;\nthis form
|
107
|
+
is merely a pointer to a resource somewhere and nothing will be\ndownloaded
|
108
|
+
onto the Razor server:\n\n {\n \"name\": \"fedora19\",\n \"url\": \"http://mirrors.n-ix.net/fedora/linux/releases/19/Fedora/x86_64/os/\"\n \"task\":
|
109
|
+
\"fedora\"\n }","cli":"Create a repository from an ISO image, which will
|
110
|
+
be downloaded and unpacked\nby the razor-server in the background:\n\n razor
|
111
|
+
create-repo --name fedora19 \\\n --iso-url http://example.com/Fedora-19-x86_64-DVD.iso
|
112
|
+
\\\n --task fedora\n\nYou can also unpack an ISO image from a file
|
113
|
+
*on the server*; this does not\nupload the file from the client:\n\n razor
|
114
|
+
create-repo --name fedora19 \\\n --iso-url file:///tmp/Fedora-19-x86_64-DVD.iso
|
115
|
+
\\\n --task fedora\n\nFinally, you can provide a `url` property when
|
116
|
+
you create the repository;\nthis form is merely a pointer to a resource somewhere
|
117
|
+
and nothing will be\ndownloaded onto the Razor server:\n\n razor create-repo
|
118
|
+
--name fedora19 --iso-url \\\n http://mirrors.n-ix.net/fedora/linux/releases/19/Fedora/x86_64/os/
|
119
|
+
\\\n --task fedora"},"full":"# SYNOPSIS\nCreate a new repository, from
|
120
|
+
an ISO image or a URL\n\n# DESCRIPTION\nCreate a new repository, which can
|
121
|
+
either contain the content to install a\nnode, or simply point to an existing
|
122
|
+
online repository by URL.\n# Access Control\n\nThis command''s access control
|
123
|
+
pattern: `commands:create-repo:%{name}`\n\nWords surrounded by `%{...}` are
|
124
|
+
substitutions from the input data: typically\nthe name of the object being
|
218
125
|
modified, or some other critical detail, these\nallow roles to be granted
|
219
126
|
partial access to modify the system.\n\nFor more detail on how the permission
|
220
127
|
strings are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
|
@@ -222,36 +129,40 @@ http_interactions:
|
|
222
129
|
command is authorized.\n\nThese checks only apply if security is enabled in
|
223
130
|
the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
|
224
131
|
http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * name\n -
|
225
|
-
The name of the repository.\n - This attribute is required
|
132
|
+
The name of the repository.\n - This attribute is required.\n - It must
|
226
133
|
be of type string.\n - It must be between 1 and 250 in length.\n\n * url\n -
|
227
134
|
The URL of the remote repository to use.\n - It must be of type string.\n -
|
228
|
-
If present,
|
229
|
-
in length.\n\n *
|
230
|
-
to create the\n
|
231
|
-
be a\n
|
232
|
-
as a path on the\n
|
233
|
-
requires that\n
|
234
|
-
the\n
|
235
|
-
not be present.\n - It must be between
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
135
|
+
If present, iso_url, no_content must not be present.\n - It must be between
|
136
|
+
1 and 1000 in length.\n\n * iso_url\n - The URL of the ISO image to download
|
137
|
+
and unpack to create the\n repository. This can be an HTTP or HTTPS URL,
|
138
|
+
or it can be a\n file URL.\n \n In the latter case, the file path
|
139
|
+
is interpreted as a path on the\n Razor server, rather than a path on
|
140
|
+
the client. This requires that\n you manually place the ISO image on
|
141
|
+
the server before invoking the\n command.\n - It must be of type string.\n -
|
142
|
+
If present, url, no_content must not be present.\n - It must be between
|
143
|
+
1 and 1000 in length.\n\n * no_content\n - For cases where extraction will
|
144
|
+
be done manually, this argument\n creates a stub directory in the repo
|
145
|
+
store where the extracted\n contents can be placed.\n - It must be of
|
146
|
+
type boolean.\n - If present, iso_url, url must not be present.\n\n * task\n -
|
147
|
+
The name of the task associated with this repository. This is used to\n install
|
148
|
+
nodes that match a policy using this repository; generally it\n should
|
149
|
+
match the OS that the URL or ISO_URL attributes point to.\n - This attribute
|
150
|
+
is required.\n - It must be of type string.\n\n# EXAMPLES\n\n Create a
|
151
|
+
repository from an ISO image, which will be downloaded and unpacked\n by
|
152
|
+
the razor-server in the background:\n \n {\n \"name\": \"fedora19\",\n \"iso_url\":
|
242
153
|
\"http://example.com/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n You
|
243
154
|
can also unpack an ISO image from a file *on the server*; this does not\n upload
|
244
|
-
the file from the client:\n {\n \"name\": \"fedora19\",\n \"
|
155
|
+
the file from the client:\n {\n \"name\": \"fedora19\",\n \"iso_url\":
|
245
156
|
\"file:///tmp/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n Finally,
|
246
|
-
you can
|
247
|
-
|
157
|
+
you can provide a `url` property when you create the repository;\n this form
|
158
|
+
is merely a pointer to a resource somewhere and nothing will be\n downloaded
|
248
159
|
onto the Razor server:\n \n {\n \"name\": \"fedora19\",\n \"url\": \"http://mirrors.n-ix.net/fedora/linux/releases/19/Fedora/x86_64/os/\"\n \"task\":
|
249
|
-
\"fedora\"\n }\n
|
160
|
+
\"fedora\"\n }\n"},"schema":{"name":{"type":"string"},"url":{"type":"string"},"iso_url":{"type":"string","aliases":["iso-url"]},"no_content":{"type":"boolean","aliases":["no-content"]},"task":{"type":"string"}}}'
|
250
161
|
http_version:
|
251
|
-
recorded_at:
|
162
|
+
recorded_at: Mon, 09 Mar 2015 19:54:01 GMT
|
252
163
|
- request:
|
253
164
|
method: post
|
254
|
-
uri: http://localhost:
|
165
|
+
uri: http://localhost:8150/api/commands/create-repo
|
255
166
|
body:
|
256
167
|
encoding: UTF-8
|
257
168
|
string: '{"name":"separate with spaces","url":"http://url.com/some.iso","task":"noop"}'
|
@@ -280,16 +191,16 @@ http_interactions:
|
|
280
191
|
Content-Length:
|
281
192
|
- '237'
|
282
193
|
Date:
|
283
|
-
-
|
194
|
+
- Mon, 09 Mar 2015 19:54:01 GMT
|
284
195
|
body:
|
285
196
|
encoding: US-ASCII
|
286
|
-
string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/repos/member","id":"http://localhost:
|
287
|
-
with spaces","command":"http://localhost:
|
197
|
+
string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/repos/member","id":"http://localhost:8150/api/collections/repos/separate%20with%20spaces","name":"separate
|
198
|
+
with spaces","command":"http://localhost:8150/api/collections/commands/1"}'
|
288
199
|
http_version:
|
289
|
-
recorded_at:
|
200
|
+
recorded_at: Mon, 09 Mar 2015 19:54:01 GMT
|
290
201
|
- request:
|
291
202
|
method: get
|
292
|
-
uri: http://localhost:
|
203
|
+
uri: http://localhost:8150/api/collections/repos/separate%20with%20spaces
|
293
204
|
body:
|
294
205
|
encoding: US-ASCII
|
295
206
|
string: ''
|
@@ -314,16 +225,16 @@ http_interactions:
|
|
314
225
|
Content-Length:
|
315
226
|
- '371'
|
316
227
|
Date:
|
317
|
-
-
|
228
|
+
- Mon, 09 Mar 2015 19:54:01 GMT
|
318
229
|
body:
|
319
230
|
encoding: US-ASCII
|
320
|
-
string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/repos/member","id":"http://localhost:
|
321
|
-
with spaces","iso_url":null,"url":"http://url.com/some.iso","task":{"spec":"http://api.puppetlabs.com/razor/v1/collections/tasks/member","id":"http://localhost:
|
231
|
+
string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/repos/member","id":"http://localhost:8150/api/collections/repos/separate%20with%20spaces","name":"separate
|
232
|
+
with spaces","iso_url":null,"url":"http://url.com/some.iso","task":{"spec":"http://api.puppetlabs.com/razor/v1/collections/tasks/member","id":"http://localhost:8150/api/collections/tasks/noop","name":"noop"}}'
|
322
233
|
http_version:
|
323
|
-
recorded_at:
|
234
|
+
recorded_at: Mon, 09 Mar 2015 19:54:01 GMT
|
324
235
|
- request:
|
325
236
|
method: get
|
326
|
-
uri: http://localhost:
|
237
|
+
uri: http://localhost:8150/api
|
327
238
|
body:
|
328
239
|
encoding: US-ASCII
|
329
240
|
string: ''
|
@@ -346,17 +257,17 @@ http_interactions:
|
|
346
257
|
Content-Type:
|
347
258
|
- application/json;charset=utf-8
|
348
259
|
Content-Length:
|
349
|
-
- '
|
260
|
+
- '5650'
|
350
261
|
Date:
|
351
|
-
-
|
262
|
+
- Mon, 09 Mar 2015 19:54:01 GMT
|
352
263
|
body:
|
353
264
|
encoding: US-ASCII
|
354
|
-
string: '{"commands":[{"name":"add-policy-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/add-policy-tag","id":"http://localhost:
|
265
|
+
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"}}'
|
355
266
|
http_version:
|
356
|
-
recorded_at:
|
267
|
+
recorded_at: Mon, 09 Mar 2015 19:54:01 GMT
|
357
268
|
- request:
|
358
269
|
method: get
|
359
|
-
uri: http://localhost:
|
270
|
+
uri: http://localhost:8150/api/commands/create-repo
|
360
271
|
body:
|
361
272
|
encoding: US-ASCII
|
362
273
|
string: ''
|
@@ -375,23 +286,23 @@ http_interactions:
|
|
375
286
|
Server:
|
376
287
|
- Apache-Coyote/1.1
|
377
288
|
Etag:
|
378
|
-
- '"server-version-v0.
|
289
|
+
- '"server-version-v0.16.1-18-gd3acc7a-dirty"'
|
379
290
|
X-Content-Type-Options:
|
380
291
|
- nosniff
|
381
292
|
Content-Type:
|
382
293
|
- application/json;charset=utf-8
|
383
294
|
Content-Length:
|
384
|
-
- '
|
295
|
+
- '7794'
|
385
296
|
Date:
|
386
|
-
-
|
297
|
+
- Mon, 09 Mar 2015 19:54:01 GMT
|
387
298
|
body:
|
388
299
|
encoding: US-ASCII
|
389
|
-
string: '{"name":"create-repo","help":{"
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
300
|
+
string: '{"name":"create-repo","help":{"summary":"Create a new repository, from
|
301
|
+
an ISO image or a URL","description":"Create a new repository, which can either
|
302
|
+
contain the content to install a\nnode, or simply point to an existing online
|
303
|
+
repository by URL.","schema":"# Access Control\n\nThis command''s access control
|
304
|
+
pattern: `commands:create-repo:%{name}`\n\nWords surrounded by `%{...}` are
|
305
|
+
substitutions from the input data: typically\nthe name of the object being
|
395
306
|
modified, or some other critical detail, these\nallow roles to be granted
|
396
307
|
partial access to modify the system.\n\nFor more detail on how the permission
|
397
308
|
strings are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
|
@@ -399,71 +310,50 @@ http_interactions:
|
|
399
310
|
command is authorized.\n\nThese checks only apply if security is enabled in
|
400
311
|
the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
|
401
312
|
http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * name\n -
|
402
|
-
The name of the repository.\n - This attribute is required
|
313
|
+
The name of the repository.\n - This attribute is required.\n - It must
|
403
314
|
be of type string.\n - It must be between 1 and 250 in length.\n\n * url\n -
|
404
315
|
The URL of the remote repository to use.\n - It must be of type string.\n -
|
405
|
-
If present,
|
406
|
-
in length.\n\n *
|
407
|
-
to create the\n
|
408
|
-
be a\n
|
409
|
-
as a path on the\n
|
410
|
-
requires that\n
|
411
|
-
the\n
|
412
|
-
not be present.\n - It must be between
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
\"
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
headers:
|
447
|
-
Server:
|
448
|
-
- Apache-Coyote/1.1
|
449
|
-
Etag:
|
450
|
-
- '"server-version-v0.14.1-125-g591a14d-dirty"'
|
451
|
-
X-Content-Type-Options:
|
452
|
-
- nosniff
|
453
|
-
Content-Type:
|
454
|
-
- application/json;charset=utf-8
|
455
|
-
Content-Length:
|
456
|
-
- '3227'
|
457
|
-
Date:
|
458
|
-
- Wed, 21 May 2014 21:40:46 GMT
|
459
|
-
body:
|
460
|
-
encoding: US-ASCII
|
461
|
-
string: '{"name":"create-repo","help":{"full":"# SYNOPSIS\nCreate a new repository,
|
462
|
-
from an ISO image or a URL\n\n# DESCRIPTION\nCreate a new repository, which
|
463
|
-
can either contain the content to install a\nnode, or simply point to an existing
|
464
|
-
online repository by URL.\n\n\n# Access Control\n\nThis command''s access
|
465
|
-
control pattern: `commands:create-repo:%{name}`\n\nWords surrounded by `%{...}`
|
466
|
-
are substitutions from the input data: typically\nthe name of the object being
|
316
|
+
If present, iso_url, no_content must not be present.\n - It must be between
|
317
|
+
1 and 1000 in length.\n\n * iso_url\n - The URL of the ISO image to download
|
318
|
+
and unpack to create the\n repository. This can be an HTTP or HTTPS URL,
|
319
|
+
or it can be a\n file URL.\n \n In the latter case, the file path
|
320
|
+
is interpreted as a path on the\n Razor server, rather than a path on
|
321
|
+
the client. This requires that\n you manually place the ISO image on
|
322
|
+
the server before invoking the\n command.\n - It must be of type string.\n -
|
323
|
+
If present, url, no_content must not be present.\n - It must be between
|
324
|
+
1 and 1000 in length.\n\n * no_content\n - For cases where extraction will
|
325
|
+
be done manually, this argument\n creates a stub directory in the repo
|
326
|
+
store where the extracted\n contents can be placed.\n - It must be of
|
327
|
+
type boolean.\n - If present, iso_url, url must not be present.\n\n * task\n -
|
328
|
+
The name of the task associated with this repository. This is used to\n install
|
329
|
+
nodes that match a policy using this repository; generally it\n should
|
330
|
+
match the OS that the URL or ISO_URL attributes point to.\n - This attribute
|
331
|
+
is required.\n - It must be of type string.\n","examples":{"api":"Create
|
332
|
+
a repository from an ISO image, which will be downloaded and unpacked\nby
|
333
|
+
the razor-server in the background:\n\n {\n \"name\": \"fedora19\",\n \"iso_url\":
|
334
|
+
\"http://example.com/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n\nYou
|
335
|
+
can also unpack an ISO image from a file *on the server*; this does not\nupload
|
336
|
+
the file from the client:\n {\n \"name\": \"fedora19\",\n \"iso_url\":
|
337
|
+
\"file:///tmp/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n\nFinally,
|
338
|
+
you can provide a `url` property when you create the repository;\nthis form
|
339
|
+
is merely a pointer to a resource somewhere and nothing will be\ndownloaded
|
340
|
+
onto the Razor server:\n\n {\n \"name\": \"fedora19\",\n \"url\": \"http://mirrors.n-ix.net/fedora/linux/releases/19/Fedora/x86_64/os/\"\n \"task\":
|
341
|
+
\"fedora\"\n }","cli":"Create a repository from an ISO image, which will
|
342
|
+
be downloaded and unpacked\nby the razor-server in the background:\n\n razor
|
343
|
+
create-repo --name fedora19 \\\n --iso-url http://example.com/Fedora-19-x86_64-DVD.iso
|
344
|
+
\\\n --task fedora\n\nYou can also unpack an ISO image from a file
|
345
|
+
*on the server*; this does not\nupload the file from the client:\n\n razor
|
346
|
+
create-repo --name fedora19 \\\n --iso-url file:///tmp/Fedora-19-x86_64-DVD.iso
|
347
|
+
\\\n --task fedora\n\nFinally, you can provide a `url` property when
|
348
|
+
you create the repository;\nthis form is merely a pointer to a resource somewhere
|
349
|
+
and nothing will be\ndownloaded onto the Razor server:\n\n razor create-repo
|
350
|
+
--name fedora19 --iso-url \\\n http://mirrors.n-ix.net/fedora/linux/releases/19/Fedora/x86_64/os/
|
351
|
+
\\\n --task fedora"},"full":"# SYNOPSIS\nCreate a new repository, from
|
352
|
+
an ISO image or a URL\n\n# DESCRIPTION\nCreate a new repository, which can
|
353
|
+
either contain the content to install a\nnode, or simply point to an existing
|
354
|
+
online repository by URL.\n# Access Control\n\nThis command''s access control
|
355
|
+
pattern: `commands:create-repo:%{name}`\n\nWords surrounded by `%{...}` are
|
356
|
+
substitutions from the input data: typically\nthe name of the object being
|
467
357
|
modified, or some other critical detail, these\nallow roles to be granted
|
468
358
|
partial access to modify the system.\n\nFor more detail on how the permission
|
469
359
|
strings are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
|
@@ -471,111 +361,43 @@ http_interactions:
|
|
471
361
|
command is authorized.\n\nThese checks only apply if security is enabled in
|
472
362
|
the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
|
473
363
|
http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * name\n -
|
474
|
-
The name of the repository.\n - This attribute is required
|
364
|
+
The name of the repository.\n - This attribute is required.\n - It must
|
475
365
|
be of type string.\n - It must be between 1 and 250 in length.\n\n * url\n -
|
476
366
|
The URL of the remote repository to use.\n - It must be of type string.\n -
|
477
|
-
If present,
|
478
|
-
in length.\n\n *
|
479
|
-
to create the\n
|
480
|
-
be a\n
|
481
|
-
as a path on the\n
|
482
|
-
requires that\n
|
483
|
-
the\n
|
484
|
-
not be present.\n - It must be between
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
367
|
+
If present, iso_url, no_content must not be present.\n - It must be between
|
368
|
+
1 and 1000 in length.\n\n * iso_url\n - The URL of the ISO image to download
|
369
|
+
and unpack to create the\n repository. This can be an HTTP or HTTPS URL,
|
370
|
+
or it can be a\n file URL.\n \n In the latter case, the file path
|
371
|
+
is interpreted as a path on the\n Razor server, rather than a path on
|
372
|
+
the client. This requires that\n you manually place the ISO image on
|
373
|
+
the server before invoking the\n command.\n - It must be of type string.\n -
|
374
|
+
If present, url, no_content must not be present.\n - It must be between
|
375
|
+
1 and 1000 in length.\n\n * no_content\n - For cases where extraction will
|
376
|
+
be done manually, this argument\n creates a stub directory in the repo
|
377
|
+
store where the extracted\n contents can be placed.\n - It must be of
|
378
|
+
type boolean.\n - If present, iso_url, url must not be present.\n\n * task\n -
|
379
|
+
The name of the task associated with this repository. This is used to\n install
|
380
|
+
nodes that match a policy using this repository; generally it\n should
|
381
|
+
match the OS that the URL or ISO_URL attributes point to.\n - This attribute
|
382
|
+
is required.\n - It must be of type string.\n\n# EXAMPLES\n\n Create a
|
383
|
+
repository from an ISO image, which will be downloaded and unpacked\n by
|
384
|
+
the razor-server in the background:\n \n {\n \"name\": \"fedora19\",\n \"iso_url\":
|
491
385
|
\"http://example.com/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n You
|
492
386
|
can also unpack an ISO image from a file *on the server*; this does not\n upload
|
493
|
-
the file from the client:\n {\n \"name\": \"fedora19\",\n \"
|
387
|
+
the file from the client:\n {\n \"name\": \"fedora19\",\n \"iso_url\":
|
494
388
|
\"file:///tmp/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n Finally,
|
495
|
-
you can
|
496
|
-
|
389
|
+
you can provide a `url` property when you create the repository;\n this form
|
390
|
+
is merely a pointer to a resource somewhere and nothing will be\n downloaded
|
497
391
|
onto the Razor server:\n \n {\n \"name\": \"fedora19\",\n \"url\": \"http://mirrors.n-ix.net/fedora/linux/releases/19/Fedora/x86_64/os/\"\n \"task\":
|
498
|
-
\"fedora\"\n }\n
|
392
|
+
\"fedora\"\n }\n"},"schema":{"name":{"type":"string"},"url":{"type":"string"},"iso_url":{"type":"string","aliases":["iso-url"]},"no_content":{"type":"boolean","aliases":["no-content"]},"task":{"type":"string"}}}'
|
499
393
|
http_version:
|
500
|
-
recorded_at:
|
501
|
-
- request:
|
502
|
-
method: get
|
503
|
-
uri: http://localhost:8080/api/commands/create-repo
|
504
|
-
body:
|
505
|
-
encoding: US-ASCII
|
506
|
-
string: ''
|
507
|
-
headers:
|
508
|
-
Accept:
|
509
|
-
- application/json
|
510
|
-
Accept-Encoding:
|
511
|
-
- gzip, deflate
|
512
|
-
User-Agent:
|
513
|
-
- Ruby
|
514
|
-
response:
|
515
|
-
status:
|
516
|
-
code: 200
|
517
|
-
message: OK
|
518
|
-
headers:
|
519
|
-
Server:
|
520
|
-
- Apache-Coyote/1.1
|
521
|
-
Etag:
|
522
|
-
- '"server-version-v0.14.1-125-g591a14d-dirty"'
|
523
|
-
X-Content-Type-Options:
|
524
|
-
- nosniff
|
525
|
-
Content-Type:
|
526
|
-
- application/json;charset=utf-8
|
527
|
-
Content-Length:
|
528
|
-
- '3227'
|
529
|
-
Date:
|
530
|
-
- Wed, 21 May 2014 21:40:46 GMT
|
531
|
-
body:
|
532
|
-
encoding: US-ASCII
|
533
|
-
string: '{"name":"create-repo","help":{"full":"# SYNOPSIS\nCreate a new repository,
|
534
|
-
from an ISO image or a URL\n\n# DESCRIPTION\nCreate a new repository, which
|
535
|
-
can either contain the content to install a\nnode, or simply point to an existing
|
536
|
-
online repository by URL.\n\n\n# Access Control\n\nThis command''s access
|
537
|
-
control pattern: `commands:create-repo:%{name}`\n\nWords surrounded by `%{...}`
|
538
|
-
are substitutions from the input data: typically\nthe name of the object being
|
539
|
-
modified, or some other critical detail, these\nallow roles to be granted
|
540
|
-
partial access to modify the system.\n\nFor more detail on how the permission
|
541
|
-
strings are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
|
542
|
-
pattern is expanded\nand then a permission check applied to it, before the
|
543
|
-
command is authorized.\n\nThese checks only apply if security is enabled in
|
544
|
-
the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
|
545
|
-
http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * name\n -
|
546
|
-
The name of the repository.\n - This attribute is required\n - It must
|
547
|
-
be of type string.\n - It must be between 1 and 250 in length.\n\n * url\n -
|
548
|
-
The URL of the remote repository to use.\n - It must be of type string.\n -
|
549
|
-
If present, iso-url must not be present.\n - It must be between 1 and 1000
|
550
|
-
in length.\n\n * iso-url\n - The URL of the ISO image to download and unpack
|
551
|
-
to create the\n repository. This can be an HTTP or HTTPS URL, or it can
|
552
|
-
be a\n file URL.\n \n In the later case, the file path is interpreted
|
553
|
-
as a path on the\n Razor server, rather than a path on the client. This
|
554
|
-
requires that\n you manually place the ISO image on the server before invoking
|
555
|
-
the\n command.\n - It must be of type string.\n - If present, url must
|
556
|
-
not be present.\n - It must be between 1 and 1000 in length.\n\n * task\n -
|
557
|
-
The name of the task associated with this repository. This is used to\n install
|
558
|
-
nodes that match a policy using this repository; generally it\n should match
|
559
|
-
the OS that the URL or ISO-URL attributes point to.\n - This attribute is
|
560
|
-
required\n - It must be of type string.\n\n\n\n# EXAMPLES\n Create a repository
|
561
|
-
from an ISO image, which will be downloaded and unpacked\n by the razor-server
|
562
|
-
in the background:\n \n {\n \"name\": \"fedora19\",\n \"iso-url\":
|
563
|
-
\"http://example.com/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n You
|
564
|
-
can also unpack an ISO image from a file *on the server*; this does not\n upload
|
565
|
-
the file from the client:\n {\n \"name\": \"fedora19\",\n \"iso-url\":
|
566
|
-
\"file:///tmp/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n Finally,
|
567
|
-
you can providing a `url` property when you create the repository;\n this
|
568
|
-
form is merely a pointer to a resource somehwere and nothing will be\n downloaded
|
569
|
-
onto the Razor server:\n \n {\n \"name\": \"fedora19\",\n \"url\": \"http://mirrors.n-ix.net/fedora/linux/releases/19/Fedora/x86_64/os/\"\n \"task\":
|
570
|
-
\"fedora\"\n }\n\n"},"schema":{"name":{"type":"string"},"url":{"type":"string"},"iso-url":{"type":"string"},"task":{"type":"string"}}}'
|
571
|
-
http_version:
|
572
|
-
recorded_at: Wed, 21 May 2014 21:40:46 GMT
|
394
|
+
recorded_at: Mon, 09 Mar 2015 19:54:01 GMT
|
573
395
|
- request:
|
574
396
|
method: post
|
575
|
-
uri: http://localhost:
|
397
|
+
uri: http://localhost:8150/api/commands/create-repo
|
576
398
|
body:
|
577
399
|
encoding: UTF-8
|
578
|
-
string: '{"name":"double-quote with spaces\"","url":"http://url.com/some.iso","task":"noop"}'
|
400
|
+
string: '{"name":"\"double-quote with spaces\"","url":"http://url.com/some.iso","task":"noop"}'
|
579
401
|
headers:
|
580
402
|
Accept:
|
581
403
|
- application/json
|
@@ -584,7 +406,7 @@ http_interactions:
|
|
584
406
|
Content-Type:
|
585
407
|
- application/json
|
586
408
|
Content-Length:
|
587
|
-
- '
|
409
|
+
- '85'
|
588
410
|
User-Agent:
|
589
411
|
- Ruby
|
590
412
|
response:
|
@@ -599,18 +421,18 @@ http_interactions:
|
|
599
421
|
Content-Type:
|
600
422
|
- application/json;charset=utf-8
|
601
423
|
Content-Length:
|
602
|
-
- '
|
424
|
+
- '255'
|
603
425
|
Date:
|
604
|
-
-
|
426
|
+
- Mon, 09 Mar 2015 19:54:01 GMT
|
605
427
|
body:
|
606
428
|
encoding: US-ASCII
|
607
|
-
string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/repos/member","id":"http://localhost:
|
608
|
-
with spaces\"","command":"http://localhost:
|
429
|
+
string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/repos/member","id":"http://localhost:8150/api/collections/repos/%22double-quote%20with%20spaces%22","name":"\"double-quote
|
430
|
+
with spaces\"","command":"http://localhost:8150/api/collections/commands/2"}'
|
609
431
|
http_version:
|
610
|
-
recorded_at:
|
432
|
+
recorded_at: Mon, 09 Mar 2015 19:54:01 GMT
|
611
433
|
- request:
|
612
434
|
method: get
|
613
|
-
uri: http://localhost:
|
435
|
+
uri: http://localhost:8150/api/collections/repos/%22double-quote%20with%20spaces%22
|
614
436
|
body:
|
615
437
|
encoding: US-ASCII
|
616
438
|
string: ''
|
@@ -633,18 +455,18 @@ http_interactions:
|
|
633
455
|
Content-Type:
|
634
456
|
- application/json;charset=utf-8
|
635
457
|
Content-Length:
|
636
|
-
- '
|
458
|
+
- '389'
|
637
459
|
Date:
|
638
|
-
-
|
460
|
+
- Mon, 09 Mar 2015 19:54:01 GMT
|
639
461
|
body:
|
640
462
|
encoding: US-ASCII
|
641
|
-
string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/repos/member","id":"http://localhost:
|
642
|
-
with spaces\"","iso_url":null,"url":"http://url.com/some.iso","task":{"spec":"http://api.puppetlabs.com/razor/v1/collections/tasks/member","id":"http://localhost:
|
463
|
+
string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/repos/member","id":"http://localhost:8150/api/collections/repos/%22double-quote%20with%20spaces%22","name":"\"double-quote
|
464
|
+
with spaces\"","iso_url":null,"url":"http://url.com/some.iso","task":{"spec":"http://api.puppetlabs.com/razor/v1/collections/tasks/member","id":"http://localhost:8150/api/collections/tasks/noop","name":"noop"}}'
|
643
465
|
http_version:
|
644
|
-
recorded_at:
|
466
|
+
recorded_at: Mon, 09 Mar 2015 19:54:01 GMT
|
645
467
|
- request:
|
646
468
|
method: get
|
647
|
-
uri: http://localhost:
|
469
|
+
uri: http://localhost:8150/api
|
648
470
|
body:
|
649
471
|
encoding: US-ASCII
|
650
472
|
string: ''
|
@@ -667,17 +489,17 @@ http_interactions:
|
|
667
489
|
Content-Type:
|
668
490
|
- application/json;charset=utf-8
|
669
491
|
Content-Length:
|
670
|
-
- '
|
492
|
+
- '5650'
|
671
493
|
Date:
|
672
|
-
-
|
494
|
+
- Mon, 09 Mar 2015 19:54:01 GMT
|
673
495
|
body:
|
674
496
|
encoding: US-ASCII
|
675
|
-
string: '{"commands":[{"name":"add-policy-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/add-policy-tag","id":"http://localhost:
|
497
|
+
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"}}'
|
676
498
|
http_version:
|
677
|
-
recorded_at:
|
499
|
+
recorded_at: Mon, 09 Mar 2015 19:54:01 GMT
|
678
500
|
- request:
|
679
501
|
method: get
|
680
|
-
uri: http://localhost:
|
502
|
+
uri: http://localhost:8150/api/commands/create-repo
|
681
503
|
body:
|
682
504
|
encoding: US-ASCII
|
683
505
|
string: ''
|
@@ -696,23 +518,23 @@ http_interactions:
|
|
696
518
|
Server:
|
697
519
|
- Apache-Coyote/1.1
|
698
520
|
Etag:
|
699
|
-
- '"server-version-v0.
|
521
|
+
- '"server-version-v0.16.1-18-gd3acc7a-dirty"'
|
700
522
|
X-Content-Type-Options:
|
701
523
|
- nosniff
|
702
524
|
Content-Type:
|
703
525
|
- application/json;charset=utf-8
|
704
526
|
Content-Length:
|
705
|
-
- '
|
527
|
+
- '7794'
|
706
528
|
Date:
|
707
|
-
-
|
529
|
+
- Mon, 09 Mar 2015 19:54:01 GMT
|
708
530
|
body:
|
709
531
|
encoding: US-ASCII
|
710
|
-
string: '{"name":"create-repo","help":{"
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
532
|
+
string: '{"name":"create-repo","help":{"summary":"Create a new repository, from
|
533
|
+
an ISO image or a URL","description":"Create a new repository, which can either
|
534
|
+
contain the content to install a\nnode, or simply point to an existing online
|
535
|
+
repository by URL.","schema":"# Access Control\n\nThis command''s access control
|
536
|
+
pattern: `commands:create-repo:%{name}`\n\nWords surrounded by `%{...}` are
|
537
|
+
substitutions from the input data: typically\nthe name of the object being
|
716
538
|
modified, or some other critical detail, these\nallow roles to be granted
|
717
539
|
partial access to modify the system.\n\nFor more detail on how the permission
|
718
540
|
strings are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
|
@@ -720,143 +542,50 @@ http_interactions:
|
|
720
542
|
command is authorized.\n\nThese checks only apply if security is enabled in
|
721
543
|
the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
|
722
544
|
http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * name\n -
|
723
|
-
The name of the repository.\n - This attribute is required
|
545
|
+
The name of the repository.\n - This attribute is required.\n - It must
|
724
546
|
be of type string.\n - It must be between 1 and 250 in length.\n\n * url\n -
|
725
547
|
The URL of the remote repository to use.\n - It must be of type string.\n -
|
726
|
-
If present,
|
727
|
-
in length.\n\n *
|
728
|
-
to create the\n
|
729
|
-
be a\n
|
730
|
-
as a path on the\n
|
731
|
-
requires that\n
|
732
|
-
the\n
|
733
|
-
not be present.\n - It must be between
|
734
|
-
|
735
|
-
|
736
|
-
|
737
|
-
|
738
|
-
|
739
|
-
|
740
|
-
|
741
|
-
|
742
|
-
|
743
|
-
|
744
|
-
|
745
|
-
|
746
|
-
|
747
|
-
\"
|
748
|
-
|
749
|
-
|
750
|
-
|
751
|
-
|
752
|
-
|
753
|
-
|
754
|
-
|
755
|
-
|
756
|
-
|
757
|
-
|
758
|
-
|
759
|
-
|
760
|
-
|
761
|
-
|
762
|
-
|
763
|
-
|
764
|
-
|
765
|
-
|
766
|
-
|
767
|
-
headers:
|
768
|
-
Server:
|
769
|
-
- Apache-Coyote/1.1
|
770
|
-
Etag:
|
771
|
-
- '"server-version-v0.14.1-125-g591a14d-dirty"'
|
772
|
-
X-Content-Type-Options:
|
773
|
-
- nosniff
|
774
|
-
Content-Type:
|
775
|
-
- application/json;charset=utf-8
|
776
|
-
Content-Length:
|
777
|
-
- '3227'
|
778
|
-
Date:
|
779
|
-
- Wed, 21 May 2014 21:40:46 GMT
|
780
|
-
body:
|
781
|
-
encoding: US-ASCII
|
782
|
-
string: '{"name":"create-repo","help":{"full":"# SYNOPSIS\nCreate a new repository,
|
783
|
-
from an ISO image or a URL\n\n# DESCRIPTION\nCreate a new repository, which
|
784
|
-
can either contain the content to install a\nnode, or simply point to an existing
|
785
|
-
online repository by URL.\n\n\n# Access Control\n\nThis command''s access
|
786
|
-
control pattern: `commands:create-repo:%{name}`\n\nWords surrounded by `%{...}`
|
787
|
-
are substitutions from the input data: typically\nthe name of the object being
|
788
|
-
modified, or some other critical detail, these\nallow roles to be granted
|
789
|
-
partial access to modify the system.\n\nFor more detail on how the permission
|
790
|
-
strings are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
|
791
|
-
pattern is expanded\nand then a permission check applied to it, before the
|
792
|
-
command is authorized.\n\nThese checks only apply if security is enabled in
|
793
|
-
the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
|
794
|
-
http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * name\n -
|
795
|
-
The name of the repository.\n - This attribute is required\n - It must
|
796
|
-
be of type string.\n - It must be between 1 and 250 in length.\n\n * url\n -
|
797
|
-
The URL of the remote repository to use.\n - It must be of type string.\n -
|
798
|
-
If present, iso-url must not be present.\n - It must be between 1 and 1000
|
799
|
-
in length.\n\n * iso-url\n - The URL of the ISO image to download and unpack
|
800
|
-
to create the\n repository. This can be an HTTP or HTTPS URL, or it can
|
801
|
-
be a\n file URL.\n \n In the later case, the file path is interpreted
|
802
|
-
as a path on the\n Razor server, rather than a path on the client. This
|
803
|
-
requires that\n you manually place the ISO image on the server before invoking
|
804
|
-
the\n command.\n - It must be of type string.\n - If present, url must
|
805
|
-
not be present.\n - It must be between 1 and 1000 in length.\n\n * task\n -
|
806
|
-
The name of the task associated with this repository. This is used to\n install
|
807
|
-
nodes that match a policy using this repository; generally it\n should match
|
808
|
-
the OS that the URL or ISO-URL attributes point to.\n - This attribute is
|
809
|
-
required\n - It must be of type string.\n\n\n\n# EXAMPLES\n Create a repository
|
810
|
-
from an ISO image, which will be downloaded and unpacked\n by the razor-server
|
811
|
-
in the background:\n \n {\n \"name\": \"fedora19\",\n \"iso-url\":
|
812
|
-
\"http://example.com/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n You
|
813
|
-
can also unpack an ISO image from a file *on the server*; this does not\n upload
|
814
|
-
the file from the client:\n {\n \"name\": \"fedora19\",\n \"iso-url\":
|
815
|
-
\"file:///tmp/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n Finally,
|
816
|
-
you can providing a `url` property when you create the repository;\n this
|
817
|
-
form is merely a pointer to a resource somehwere and nothing will be\n downloaded
|
818
|
-
onto the Razor server:\n \n {\n \"name\": \"fedora19\",\n \"url\": \"http://mirrors.n-ix.net/fedora/linux/releases/19/Fedora/x86_64/os/\"\n \"task\":
|
819
|
-
\"fedora\"\n }\n\n"},"schema":{"name":{"type":"string"},"url":{"type":"string"},"iso-url":{"type":"string"},"task":{"type":"string"}}}'
|
820
|
-
http_version:
|
821
|
-
recorded_at: Wed, 21 May 2014 21:40:47 GMT
|
822
|
-
- request:
|
823
|
-
method: get
|
824
|
-
uri: http://localhost:8080/api/commands/create-repo
|
825
|
-
body:
|
826
|
-
encoding: US-ASCII
|
827
|
-
string: ''
|
828
|
-
headers:
|
829
|
-
Accept:
|
830
|
-
- application/json
|
831
|
-
Accept-Encoding:
|
832
|
-
- gzip, deflate
|
833
|
-
User-Agent:
|
834
|
-
- Ruby
|
835
|
-
response:
|
836
|
-
status:
|
837
|
-
code: 200
|
838
|
-
message: OK
|
839
|
-
headers:
|
840
|
-
Server:
|
841
|
-
- Apache-Coyote/1.1
|
842
|
-
Etag:
|
843
|
-
- '"server-version-v0.14.1-125-g591a14d-dirty"'
|
844
|
-
X-Content-Type-Options:
|
845
|
-
- nosniff
|
846
|
-
Content-Type:
|
847
|
-
- application/json;charset=utf-8
|
848
|
-
Content-Length:
|
849
|
-
- '3227'
|
850
|
-
Date:
|
851
|
-
- Wed, 21 May 2014 21:40:46 GMT
|
852
|
-
body:
|
853
|
-
encoding: US-ASCII
|
854
|
-
string: '{"name":"create-repo","help":{"full":"# SYNOPSIS\nCreate a new repository,
|
855
|
-
from an ISO image or a URL\n\n# DESCRIPTION\nCreate a new repository, which
|
856
|
-
can either contain the content to install a\nnode, or simply point to an existing
|
857
|
-
online repository by URL.\n\n\n# Access Control\n\nThis command''s access
|
858
|
-
control pattern: `commands:create-repo:%{name}`\n\nWords surrounded by `%{...}`
|
859
|
-
are substitutions from the input data: typically\nthe name of the object being
|
548
|
+
If present, iso_url, no_content must not be present.\n - It must be between
|
549
|
+
1 and 1000 in length.\n\n * iso_url\n - The URL of the ISO image to download
|
550
|
+
and unpack to create the\n repository. This can be an HTTP or HTTPS URL,
|
551
|
+
or it can be a\n file URL.\n \n In the latter case, the file path
|
552
|
+
is interpreted as a path on the\n Razor server, rather than a path on
|
553
|
+
the client. This requires that\n you manually place the ISO image on
|
554
|
+
the server before invoking the\n command.\n - It must be of type string.\n -
|
555
|
+
If present, url, no_content must not be present.\n - It must be between
|
556
|
+
1 and 1000 in length.\n\n * no_content\n - For cases where extraction will
|
557
|
+
be done manually, this argument\n creates a stub directory in the repo
|
558
|
+
store where the extracted\n contents can be placed.\n - It must be of
|
559
|
+
type boolean.\n - If present, iso_url, url must not be present.\n\n * task\n -
|
560
|
+
The name of the task associated with this repository. This is used to\n install
|
561
|
+
nodes that match a policy using this repository; generally it\n should
|
562
|
+
match the OS that the URL or ISO_URL attributes point to.\n - This attribute
|
563
|
+
is required.\n - It must be of type string.\n","examples":{"api":"Create
|
564
|
+
a repository from an ISO image, which will be downloaded and unpacked\nby
|
565
|
+
the razor-server in the background:\n\n {\n \"name\": \"fedora19\",\n \"iso_url\":
|
566
|
+
\"http://example.com/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n\nYou
|
567
|
+
can also unpack an ISO image from a file *on the server*; this does not\nupload
|
568
|
+
the file from the client:\n {\n \"name\": \"fedora19\",\n \"iso_url\":
|
569
|
+
\"file:///tmp/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n\nFinally,
|
570
|
+
you can provide a `url` property when you create the repository;\nthis form
|
571
|
+
is merely a pointer to a resource somewhere and nothing will be\ndownloaded
|
572
|
+
onto the Razor server:\n\n {\n \"name\": \"fedora19\",\n \"url\": \"http://mirrors.n-ix.net/fedora/linux/releases/19/Fedora/x86_64/os/\"\n \"task\":
|
573
|
+
\"fedora\"\n }","cli":"Create a repository from an ISO image, which will
|
574
|
+
be downloaded and unpacked\nby the razor-server in the background:\n\n razor
|
575
|
+
create-repo --name fedora19 \\\n --iso-url http://example.com/Fedora-19-x86_64-DVD.iso
|
576
|
+
\\\n --task fedora\n\nYou can also unpack an ISO image from a file
|
577
|
+
*on the server*; this does not\nupload the file from the client:\n\n razor
|
578
|
+
create-repo --name fedora19 \\\n --iso-url file:///tmp/Fedora-19-x86_64-DVD.iso
|
579
|
+
\\\n --task fedora\n\nFinally, you can provide a `url` property when
|
580
|
+
you create the repository;\nthis form is merely a pointer to a resource somewhere
|
581
|
+
and nothing will be\ndownloaded onto the Razor server:\n\n razor create-repo
|
582
|
+
--name fedora19 --iso-url \\\n http://mirrors.n-ix.net/fedora/linux/releases/19/Fedora/x86_64/os/
|
583
|
+
\\\n --task fedora"},"full":"# SYNOPSIS\nCreate a new repository, from
|
584
|
+
an ISO image or a URL\n\n# DESCRIPTION\nCreate a new repository, which can
|
585
|
+
either contain the content to install a\nnode, or simply point to an existing
|
586
|
+
online repository by URL.\n# Access Control\n\nThis command''s access control
|
587
|
+
pattern: `commands:create-repo:%{name}`\n\nWords surrounded by `%{...}` are
|
588
|
+
substitutions from the input data: typically\nthe name of the object being
|
860
589
|
modified, or some other critical detail, these\nallow roles to be granted
|
861
590
|
partial access to modify the system.\n\nFor more detail on how the permission
|
862
591
|
strings are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
|
@@ -864,39 +593,43 @@ http_interactions:
|
|
864
593
|
command is authorized.\n\nThese checks only apply if security is enabled in
|
865
594
|
the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
|
866
595
|
http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * name\n -
|
867
|
-
The name of the repository.\n - This attribute is required
|
596
|
+
The name of the repository.\n - This attribute is required.\n - It must
|
868
597
|
be of type string.\n - It must be between 1 and 250 in length.\n\n * url\n -
|
869
598
|
The URL of the remote repository to use.\n - It must be of type string.\n -
|
870
|
-
If present,
|
871
|
-
in length.\n\n *
|
872
|
-
to create the\n
|
873
|
-
be a\n
|
874
|
-
as a path on the\n
|
875
|
-
requires that\n
|
876
|
-
the\n
|
877
|
-
not be present.\n - It must be between
|
878
|
-
|
879
|
-
|
880
|
-
|
881
|
-
|
882
|
-
|
883
|
-
|
599
|
+
If present, iso_url, no_content must not be present.\n - It must be between
|
600
|
+
1 and 1000 in length.\n\n * iso_url\n - The URL of the ISO image to download
|
601
|
+
and unpack to create the\n repository. This can be an HTTP or HTTPS URL,
|
602
|
+
or it can be a\n file URL.\n \n In the latter case, the file path
|
603
|
+
is interpreted as a path on the\n Razor server, rather than a path on
|
604
|
+
the client. This requires that\n you manually place the ISO image on
|
605
|
+
the server before invoking the\n command.\n - It must be of type string.\n -
|
606
|
+
If present, url, no_content must not be present.\n - It must be between
|
607
|
+
1 and 1000 in length.\n\n * no_content\n - For cases where extraction will
|
608
|
+
be done manually, this argument\n creates a stub directory in the repo
|
609
|
+
store where the extracted\n contents can be placed.\n - It must be of
|
610
|
+
type boolean.\n - If present, iso_url, url must not be present.\n\n * task\n -
|
611
|
+
The name of the task associated with this repository. This is used to\n install
|
612
|
+
nodes that match a policy using this repository; generally it\n should
|
613
|
+
match the OS that the URL or ISO_URL attributes point to.\n - This attribute
|
614
|
+
is required.\n - It must be of type string.\n\n# EXAMPLES\n\n Create a
|
615
|
+
repository from an ISO image, which will be downloaded and unpacked\n by
|
616
|
+
the razor-server in the background:\n \n {\n \"name\": \"fedora19\",\n \"iso_url\":
|
884
617
|
\"http://example.com/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n You
|
885
618
|
can also unpack an ISO image from a file *on the server*; this does not\n upload
|
886
|
-
the file from the client:\n {\n \"name\": \"fedora19\",\n \"
|
619
|
+
the file from the client:\n {\n \"name\": \"fedora19\",\n \"iso_url\":
|
887
620
|
\"file:///tmp/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n Finally,
|
888
|
-
you can
|
889
|
-
|
621
|
+
you can provide a `url` property when you create the repository;\n this form
|
622
|
+
is merely a pointer to a resource somewhere and nothing will be\n downloaded
|
890
623
|
onto the Razor server:\n \n {\n \"name\": \"fedora19\",\n \"url\": \"http://mirrors.n-ix.net/fedora/linux/releases/19/Fedora/x86_64/os/\"\n \"task\":
|
891
|
-
\"fedora\"\n }\n
|
624
|
+
\"fedora\"\n }\n"},"schema":{"name":{"type":"string"},"url":{"type":"string"},"iso_url":{"type":"string","aliases":["iso-url"]},"no_content":{"type":"boolean","aliases":["no-content"]},"task":{"type":"string"}}}'
|
892
625
|
http_version:
|
893
|
-
recorded_at:
|
626
|
+
recorded_at: Mon, 09 Mar 2015 19:54:01 GMT
|
894
627
|
- request:
|
895
628
|
method: post
|
896
|
-
uri: http://localhost:
|
629
|
+
uri: http://localhost:8150/api/commands/create-repo
|
897
630
|
body:
|
898
631
|
encoding: UTF-8
|
899
|
-
string: '{"name":"single-quote with spaces''","url":"http://url.com/some.iso","task":"noop"}'
|
632
|
+
string: '{"name":"''single-quote with spaces''","url":"http://url.com/some.iso","task":"noop"}'
|
900
633
|
headers:
|
901
634
|
Accept:
|
902
635
|
- application/json
|
@@ -905,7 +638,7 @@ http_interactions:
|
|
905
638
|
Content-Type:
|
906
639
|
- application/json
|
907
640
|
Content-Length:
|
908
|
-
- '
|
641
|
+
- '83'
|
909
642
|
User-Agent:
|
910
643
|
- Ruby
|
911
644
|
response:
|
@@ -920,18 +653,18 @@ http_interactions:
|
|
920
653
|
Content-Type:
|
921
654
|
- application/json;charset=utf-8
|
922
655
|
Content-Length:
|
923
|
-
- '
|
656
|
+
- '249'
|
924
657
|
Date:
|
925
|
-
-
|
658
|
+
- Mon, 09 Mar 2015 19:54:01 GMT
|
926
659
|
body:
|
927
660
|
encoding: US-ASCII
|
928
|
-
string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/repos/member","id":"http://localhost:
|
929
|
-
with spaces''","command":"http://localhost:
|
661
|
+
string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/repos/member","id":"http://localhost:8150/api/collections/repos/''single-quote%20with%20spaces''","name":"''single-quote
|
662
|
+
with spaces''","command":"http://localhost:8150/api/collections/commands/3"}'
|
930
663
|
http_version:
|
931
|
-
recorded_at:
|
664
|
+
recorded_at: Mon, 09 Mar 2015 19:54:01 GMT
|
932
665
|
- request:
|
933
666
|
method: get
|
934
|
-
uri: http://localhost:
|
667
|
+
uri: http://localhost:8150/api/collections/repos/'single-quote%20with%20spaces'
|
935
668
|
body:
|
936
669
|
encoding: US-ASCII
|
937
670
|
string: ''
|
@@ -954,13 +687,13 @@ http_interactions:
|
|
954
687
|
Content-Type:
|
955
688
|
- application/json;charset=utf-8
|
956
689
|
Content-Length:
|
957
|
-
- '
|
690
|
+
- '383'
|
958
691
|
Date:
|
959
|
-
-
|
692
|
+
- Mon, 09 Mar 2015 19:54:01 GMT
|
960
693
|
body:
|
961
694
|
encoding: US-ASCII
|
962
|
-
string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/repos/member","id":"http://localhost:
|
963
|
-
with spaces''","iso_url":null,"url":"http://url.com/some.iso","task":{"spec":"http://api.puppetlabs.com/razor/v1/collections/tasks/member","id":"http://localhost:
|
695
|
+
string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/repos/member","id":"http://localhost:8150/api/collections/repos/''single-quote%20with%20spaces''","name":"''single-quote
|
696
|
+
with spaces''","iso_url":null,"url":"http://url.com/some.iso","task":{"spec":"http://api.puppetlabs.com/razor/v1/collections/tasks/member","id":"http://localhost:8150/api/collections/tasks/noop","name":"noop"}}'
|
964
697
|
http_version:
|
965
|
-
recorded_at:
|
698
|
+
recorded_at: Mon, 09 Mar 2015 19:54:01 GMT
|
966
699
|
recorded_with: VCR 2.5.0
|