pe-razor-client 0.15.2.2 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|