pe-razor-client 0.14.0 → 0.15.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/NEWS.md +25 -0
  3. data/bin/razor +9 -4
  4. data/lib/razor/cli.rb +10 -0
  5. data/lib/razor/cli/document.rb +59 -0
  6. data/lib/razor/cli/format.rb +81 -20
  7. data/lib/razor/cli/navigate.rb +121 -27
  8. data/lib/razor/cli/parse.rb +83 -10
  9. data/lib/razor/cli/transforms.rb +42 -0
  10. data/lib/razor/cli/version.rb +46 -0
  11. data/lib/razor/cli/views.rb +25 -0
  12. data/lib/razor/cli/views.yaml +196 -0
  13. data/spec/cli/format_spec.rb +99 -0
  14. data/spec/cli/navigate_spec.rb +111 -2
  15. data/spec/cli/parse_spec.rb +20 -0
  16. data/spec/fixtures/vcr/Razor_CLI_Navigate/argument_formatting/should_allow_spaces.yml +966 -0
  17. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_--help_command_.yml +99 -0
  18. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_-h_command_.yml +99 -0
  19. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_command_--help_.yml +99 -0
  20. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_command_-h_.yml +99 -0
  21. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_command_help_.yml +99 -0
  22. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_help_command_.yml +99 -0
  23. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_authentication/should_preserve_that_across_navigation.yml +9 -42
  24. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_authentication/should_supply_that_to_the_API_service.yml +5 -5
  25. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_invalid_parameter/should_fail_with_bad_JSON.yml +228 -0
  26. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_invalid_parameter/should_fail_with_malformed_argument.yml +120 -0
  27. 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 +2006 -0
  28. 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 +2006 -0
  29. 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 +2006 -0
  30. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_multiple_arguments_with_same_name/combining_as_an_object/should_construct_a_json_object.yml +234 -0
  31. 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 +412 -0
  32. 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 +228 -0
  33. 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 +164 -0
  34. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_no_parameters/should_fail_with_bad_JSON.yml +36 -0
  35. data/spec/fixtures/vcr/Razor_CLI_Parse/_new/_help/should_print_a_list_of_known_endpoints.yml +5 -5
  36. data/spec/spec_helper.rb +12 -1
  37. data/spec/testing.md +16 -0
  38. data/spec/version_spec.rb +8 -0
  39. metadata +67 -60
  40. data/.gitignore +0 -7
  41. data/.yardopts +0 -2
  42. data/Gemfile +0 -35
  43. data/Gemfile.lock +0 -53
  44. data/Rakefile +0 -37
  45. data/lib/razor/cli/navigate.yaml +0 -28
  46. data/pe-razor-client.gemspec +0 -32
  47. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_a_single_item_path/.yml +0 -69
  48. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_an_invalid_path/.yml +0 -36
  49. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_no_path/.yml +0 -36
  50. data/spec/fixtures/vcr/Razor_CLI_Parse/_new/_help/.yml +0 -36
@@ -0,0 +1,99 @@
1
+ # Needed to make the client work on Ruby 1.8.7
2
+ unless Kernel.respond_to?(:require_relative)
3
+ module Kernel
4
+ def require_relative(path)
5
+ require File.join(File.dirname(caller[0]), path.to_str)
6
+ end
7
+ end
8
+ end
9
+
10
+ require "rspec/expectations"
11
+ require_relative '../spec_helper'
12
+
13
+ describe Razor::CLI::Format do
14
+ include described_class
15
+
16
+ def format(doc, args = {})
17
+ args = {:format => 'short', :args => ['something', 'else'], :query? => true, :show_command_help? => false}.merge(args)
18
+ parse = double(args)
19
+ format_document doc, parse
20
+ end
21
+
22
+ context 'additional details' do
23
+ it "tells additional details for a hash" do
24
+ doc = {'abc' => {'def' => 'ghi'}}
25
+ result = format doc
26
+ result.should =~ /Query additional details via: `razor something else \[abc\]`\z/
27
+ end
28
+ it "tells additional details for an array" do
29
+ doc = {'abc' => ['def']}
30
+ result = format doc
31
+ result.should =~ /Query additional details via: `razor something else \[abc\]`\z/
32
+ end
33
+ it "tells multiple additional details" do
34
+ doc = {'abc' => ['def'], 'ghi' => {'jkl' => 'mno'}}
35
+ result = format doc
36
+ result.should =~ /Query additional details via: `razor something else \[abc, ghi\]`\z/
37
+ end
38
+ it "tells no additional details for a string" do
39
+ doc = {'abc' => 'def'}
40
+ result = format doc
41
+ result.should_not =~ /Query additional details/
42
+ end
43
+ it "hides array spec array from additional details" do
44
+ doc = {'abc' => [], 'spec' => ['def', 'jkl']}
45
+ result = format doc
46
+ result.should =~ /Query additional details via: `razor something else \[abc\]`\z/
47
+ end
48
+ it "hides array +spec array from additional details" do
49
+ doc = {'abc' => [], '+spec' => ['def', 'jkl']}
50
+ result = format doc
51
+ result.should =~ /Query additional details via: `razor something else \[abc\]`\z/
52
+ end
53
+ it "only shows additional details for nested objects" do
54
+ doc = {'one-prop' => 'val', 'abc' => [], 'prop' => 'jkl'}
55
+ result = format doc
56
+ result.should =~ /Query additional details via: `razor something else \[abc\]`\z/
57
+ end
58
+ it "tells how to query by name" do
59
+ doc = {'items' => [{'name' => 'entirely'}, {'name' => 'bar'} ]}
60
+ result = format doc
61
+ result.should =~ /Query an entry by including its name, e.g. `razor something else entirely`\z/
62
+ end
63
+ it "hides for commands" do
64
+ doc = {'items' => [{'name' => 'entirely'}, {'name' => 'bar'} ]}
65
+ result = format doc, query?: false
66
+ result.should_not =~ /Query an entry by including its name/
67
+ end
68
+ end
69
+
70
+ context 'empty display' do
71
+ it "works right when it has nothing to display as a table" do
72
+ doc = {"spec"=>"http://api.puppetlabs.com/razor/v1/collections/policies", "items"=>[]}
73
+ result = format doc
74
+ result.should == "There are no items for this query."
75
+ end
76
+ it "works right when it has nothing to display as a list" do
77
+ doc = {"spec"=>"http://api.puppetlabs.com/razor/v1/collections/policies/member", "items"=>[]}
78
+ result = format doc
79
+ result.should == "There are no items for this query."
80
+ end
81
+ end
82
+
83
+ context 'tabular display' do
84
+ it "works right when columns do not match up" do
85
+ doc = {"spec"=>"http://api.puppetlabs.com/razor/v1/collections/nodes/log",
86
+ "items"=>[{'a' => 'b', 'c' => 'd'},
87
+ {'b' => 'c', 'e' => 'f'}]}
88
+ result = format doc
89
+ result.should == <<-OUTPUT.rstrip
90
+ +---+---+---+---+
91
+ | a | c | b | e |
92
+ +---+---+---+---+
93
+ | b | d | | |
94
+ | | | c | f |
95
+ +---+---+---+---+
96
+ OUTPUT
97
+ end
98
+ end
99
+ end
@@ -1,3 +1,4 @@
1
+ # -*- encoding: utf-8 -*-
1
2
  # Needed to make the client work on Ruby 1.8.7
2
3
  unless Kernel.respond_to?(:require_relative)
3
4
  module Kernel
@@ -20,7 +21,7 @@ describe Razor::CLI::Navigate do
20
21
 
21
22
  context "with a single item path", :vcr do
22
23
  subject(:nav) {Razor::CLI::Parse.new(["tags"]).navigate}
23
- it { nav.get_document.should == []}
24
+ it { nav.get_document['items'].should == []}
24
25
 
25
26
  it do
26
27
  nav.get_document;
@@ -34,6 +35,114 @@ describe Razor::CLI::Navigate do
34
35
  it {expect{nav.get_document}.to raise_error Razor::CLI::NavigationError}
35
36
  end
36
37
 
38
+ context "with invalid parameter", :vcr do
39
+ it "should fail with bad JSON" do
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 JSON for argument 'configuration'/)
42
+ end
43
+
44
+ it "should fail with malformed argument" do
45
+ nav = Razor::CLI::Parse.new(['create-tag', '--name', 'tag_2', '--inva_lid']).navigate
46
+ expect{nav.get_document}.to raise_error(ArgumentError, /Unexpected argument --inva_lid/)
47
+ end
48
+ end
49
+
50
+ context "with no parameters", :vcr do
51
+ it "should fail with bad JSON" do
52
+ nav = Razor::CLI::Parse.new(['update-tag-rule']).navigate
53
+ expect{nav.get_document}.to raise_error(Razor::CLI::Error, /No arguments for command/)
54
+ end
55
+ end
56
+
57
+ context "with multiple arguments with same name", :vcr do
58
+ context "combining as an array" do
59
+ before(:each) do
60
+ # Prerequisites
61
+ nav = Razor::CLI::Parse.new(['create-repo', '--name', 'name', '--url', 'http://url.com/some.iso', '--task', 'noop']).navigate.get_document
62
+ nav = Razor::CLI::Parse.new(['create-broker', '--name', 'puppet', '--configuration', '{"server": "puppet.example.org", "environment": "production"}', '--broker-type', 'puppet']).navigate.get_document
63
+ nav = Razor::CLI::Parse.new(['create-tag', '--name', 'tag1', '--rule', '["=", ["fact", "processorcount"], "1"]']).navigate.get_document
64
+ nav = Razor::CLI::Parse.new(['create-tag', '--name', 'tag2', '--rule', '["=", ["fact", "processorcount"], "2"]']).navigate.get_document
65
+ end
66
+ it "should merge the arguments as an array" do
67
+ nav = Razor::CLI::Parse.new(['create-policy',
68
+ '--name', 'test', '--hostname', 'abc.com', '--root-password', 'abc',
69
+ '--task', 'noop', '--repo', 'name', '--broker', 'puppet', '--tag', 'tag1', '--tag', 'tag2']).navigate
70
+ tags = nav.get_document['tags'].to_s
71
+ tags.should =~ /tag1/
72
+ tags.should =~ /tag2/
73
+ end
74
+ it "should merge the arguments into an existing array" do
75
+ nav = Razor::CLI::Parse.new(['create-policy',
76
+ '--name', 'test', '--hostname', 'abc.com', '--root-password', 'abc',
77
+ '--task', 'noop', '--repo', 'name', '--broker', 'puppet', '--tags', '["tag1"]', '--tag', 'tag2']).navigate
78
+ tags = nav.get_document['tags'].to_s
79
+ tags.should =~ /tag1/
80
+ tags.should =~ /tag2/
81
+ end
82
+ it "should merge an array into an existing array" do
83
+ nav = Razor::CLI::Parse.new(['create-policy',
84
+ '--name', 'test', '--hostname', 'abc.com', '--root-password', 'abc',
85
+ '--task', 'noop', '--repo', 'name', '--broker', 'puppet', '--tags', '["tag1"]', '--tags', '["tag2"]']).navigate
86
+ tags = nav.get_document['tags'].to_s
87
+ tags.should =~ /tag1/
88
+ tags.should =~ /tag2/
89
+ end
90
+ end
91
+ context "combining as an object" do
92
+ it "should construct a json object" do
93
+ nav = Razor::CLI::Parse.new(['create-broker', '--name', 'broker1', '--broker-type', 'puppet',
94
+ '--configuration', 'server=puppet.example.org', '--configuration',
95
+ 'environment=production']).navigate
96
+ keys = nav.get_document['configuration'].keys
97
+ keys.should include 'server'
98
+ keys.should include 'environment'
99
+ end
100
+ it "should construct a json object with unicode", :preserve_exact_body_bytes do
101
+ doc = Razor::CLI::Parse.new(['register-node', '--installed', 'true', '--hw-info', '{"net0": "abcdef"}']).navigate.get_document
102
+ name = doc['name']
103
+ nav = Razor::CLI::Parse.new(['modify-node-metadata', '--node', name, '--update', 'keyᓱ123=valueᓱ1']).navigate
104
+ nav.get_document['metadata'].should == {'keyᓱ123' => 'valueᓱ1'}
105
+ end
106
+ it "should fail with mixed types (array then hash)" do
107
+ nav = Razor::CLI::Parse.new(['create-broker', '--name', 'broker2', '--broker-type', 'puppet',
108
+ '--configuration', '["server"]',
109
+ '--configuration', 'environment=production']).navigate
110
+ expect {nav.get_document}.to raise_error(ArgumentError, "Cannot handle mixed types for argument configuration")
111
+ end
112
+ it "should fail with mixed types (hash then array)" do
113
+ nav = Razor::CLI::Parse.new(['create-broker', '--name', 'broker3', '--broker-type', 'puppet',
114
+ '--configuration', 'environment=production',
115
+ '--configuration', '["server"]']).navigate
116
+ expect {nav.get_document}.to raise_error(ArgumentError, "Cannot handle mixed types for argument configuration")
117
+ end
118
+ end
119
+ end
120
+
121
+ context "argument formatting", :vcr do
122
+ it "should allow spaces" do
123
+ Razor::CLI::Parse.new(['create-repo', '--name', 'separate with spaces', '--url', 'http://url.com/some.iso', '--task', 'noop']).navigate.get_document
124
+ Razor::CLI::Parse.new(['create-repo', '--name="double-quote with spaces"', '--url', 'http://url.com/some.iso', '--task', 'noop']).navigate.get_document
125
+ Razor::CLI::Parse.new(['create-repo', '--name=\'single-quote with spaces\'', '--url', 'http://url.com/some.iso', '--task', 'noop']).navigate.get_document
126
+ end
127
+ end
128
+
129
+ context "for command help", :vcr do
130
+ [['command', '--help'], ['command', '-h'],
131
+ ['--help', 'command'], ['-h', 'command'],
132
+ ['help', 'command'], ['command', 'help']].
133
+ each do |scenario|
134
+ it "should provide command help for `razor #{scenario.join ' '}`" do
135
+ scenario = scenario.map { |name| name.sub('command', 'update-tag-rule') }
136
+ parse = Razor::CLI::Parse.new(scenario)
137
+ nav = parse.navigate
138
+ document = nav.get_document
139
+ document["name"].should == "update-tag-rule"
140
+ document["help"].class.should <= Hash
141
+ parse.should be_show_command_help
142
+ end
143
+ end
144
+ end
145
+
37
146
  context "with authentication", :vcr do
38
147
  AuthArg = %w[-u http://fred:dead@localhost:8080/api].freeze
39
148
 
@@ -45,7 +154,7 @@ describe Razor::CLI::Navigate do
45
154
 
46
155
  it "should preserve that across navigation" do
47
156
  nav = Razor::CLI::Parse.new(AuthArg + ['tags']).navigate
48
- nav.get_document.should == []
157
+ nav.get_document['items'].should == []
49
158
  URI.parse(nav.last_url.to_s).userinfo.should == "fred:dead"
50
159
  end
51
160
  end
@@ -25,6 +25,26 @@ describe Razor::CLI::Parse do
25
25
  it {parse("-h").show_help?.should be true}
26
26
  end
27
27
 
28
+ context "with a '-h COMMAND'" do
29
+ it {parse("-h", "create-policy").show_command_help?.should be true}
30
+ end
31
+
32
+ context "with a '--help COMMAND'" do
33
+ it {parse("--help", "create-policy").show_command_help?.should be true}
34
+ end
35
+
36
+ context "with a 'help COMMAND'" do
37
+ it {parse("help", "create-policy").show_command_help?.should be true}
38
+ end
39
+
40
+ context "with a 'help COMMAND'" do
41
+ it {parse("create-policy", "help").show_command_help?.should be true}
42
+ end
43
+
44
+ context "with a 'COMMAND var help'" do
45
+ it {parse("create-policy", "var", "help").show_command_help?.should_not be true}
46
+ end
47
+
28
48
  context "with a '-d'" do
29
49
  it {parse("-d").dump_response?.should be true}
30
50
  end
@@ -0,0 +1,966 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://localhost:8080/api
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - application/json
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Server:
22
+ - Apache-Coyote/1.1
23
+ X-Content-Type-Options:
24
+ - nosniff
25
+ Content-Type:
26
+ - application/json;charset=utf-8
27
+ Content-Length:
28
+ - '4982'
29
+ Date:
30
+ - Wed, 21 May 2014 21:40:46 GMT
31
+ body:
32
+ encoding: US-ASCII
33
+ string: '{"commands":[{"name":"add-policy-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/add-policy-tag","id":"http://localhost:8080/api/commands/add-policy-tag"},{"name":"create-broker","rel":"http://api.puppetlabs.com/razor/v1/commands/create-broker","id":"http://localhost:8080/api/commands/create-broker"},{"name":"create-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/create-policy","id":"http://localhost:8080/api/commands/create-policy"},{"name":"create-repo","rel":"http://api.puppetlabs.com/razor/v1/commands/create-repo","id":"http://localhost:8080/api/commands/create-repo"},{"name":"create-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/create-tag","id":"http://localhost:8080/api/commands/create-tag"},{"name":"create-task","rel":"http://api.puppetlabs.com/razor/v1/commands/create-task","id":"http://localhost:8080/api/commands/create-task"},{"name":"delete-broker","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-broker","id":"http://localhost:8080/api/commands/delete-broker"},{"name":"delete-node","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-node","id":"http://localhost:8080/api/commands/delete-node"},{"name":"delete-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-policy","id":"http://localhost:8080/api/commands/delete-policy"},{"name":"delete-repo","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-repo","id":"http://localhost:8080/api/commands/delete-repo"},{"name":"delete-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-tag","id":"http://localhost:8080/api/commands/delete-tag"},{"name":"disable-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/disable-policy","id":"http://localhost:8080/api/commands/disable-policy"},{"name":"enable-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/enable-policy","id":"http://localhost:8080/api/commands/enable-policy"},{"name":"modify-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/modify-node-metadata","id":"http://localhost:8080/api/commands/modify-node-metadata"},{"name":"modify-policy-max-count","rel":"http://api.puppetlabs.com/razor/v1/commands/modify-policy-max-count","id":"http://localhost:8080/api/commands/modify-policy-max-count"},{"name":"move-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/move-policy","id":"http://localhost:8080/api/commands/move-policy"},{"name":"reboot-node","rel":"http://api.puppetlabs.com/razor/v1/commands/reboot-node","id":"http://localhost:8080/api/commands/reboot-node"},{"name":"register-node","rel":"http://api.puppetlabs.com/razor/v1/commands/register-node","id":"http://localhost:8080/api/commands/register-node"},{"name":"reinstall-node","rel":"http://api.puppetlabs.com/razor/v1/commands/reinstall-node","id":"http://localhost:8080/api/commands/reinstall-node"},{"name":"remove-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/remove-node-metadata","id":"http://localhost:8080/api/commands/remove-node-metadata"},{"name":"remove-policy-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/remove-policy-tag","id":"http://localhost:8080/api/commands/remove-policy-tag"},{"name":"set-node-desired-power-state","rel":"http://api.puppetlabs.com/razor/v1/commands/set-node-desired-power-state","id":"http://localhost:8080/api/commands/set-node-desired-power-state"},{"name":"set-node-hw-info","rel":"http://api.puppetlabs.com/razor/v1/commands/set-node-hw-info","id":"http://localhost:8080/api/commands/set-node-hw-info"},{"name":"set-node-ipmi-credentials","rel":"http://api.puppetlabs.com/razor/v1/commands/set-node-ipmi-credentials","id":"http://localhost:8080/api/commands/set-node-ipmi-credentials"},{"name":"update-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/update-node-metadata","id":"http://localhost:8080/api/commands/update-node-metadata"},{"name":"update-tag-rule","rel":"http://api.puppetlabs.com/razor/v1/commands/update-tag-rule","id":"http://localhost:8080/api/commands/update-tag-rule"}],"collections":[{"name":"brokers","rel":"http://api.puppetlabs.com/razor/v1/collections/brokers","id":"http://localhost:8080/api/collections/brokers"},{"name":"repos","rel":"http://api.puppetlabs.com/razor/v1/collections/repos","id":"http://localhost:8080/api/collections/repos"},{"name":"tags","rel":"http://api.puppetlabs.com/razor/v1/collections/tags","id":"http://localhost:8080/api/collections/tags"},{"name":"policies","rel":"http://api.puppetlabs.com/razor/v1/collections/policies","id":"http://localhost:8080/api/collections/policies"},{"name":"nodes","rel":"http://api.puppetlabs.com/razor/v1/collections/nodes","id":"http://localhost:8080/api/collections/nodes"},{"name":"tasks","rel":"http://api.puppetlabs.com/razor/v1/collections/tasks","id":"http://localhost:8080/api/collections/tasks"},{"name":"commands","rel":"http://api.puppetlabs.com/razor/v1/collections/commands","id":"http://localhost:8080/api/collections/commands"}],"version":{"server":"v0.14.1-125-g591a14d-dirty"}}'
34
+ http_version:
35
+ recorded_at: Wed, 21 May 2014 21:40:46 GMT
36
+ - request:
37
+ method: get
38
+ uri: http://localhost:8080/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.14.1-125-g591a14d-dirty"'
58
+ X-Content-Type-Options:
59
+ - nosniff
60
+ Content-Type:
61
+ - application/json;charset=utf-8
62
+ Content-Length:
63
+ - '3227'
64
+ Date:
65
+ - Wed, 21 May 2014 21:40:46 GMT
66
+ body:
67
+ encoding: US-ASCII
68
+ string: '{"name":"create-repo","help":{"full":"# SYNOPSIS\nCreate a new repository,
69
+ from an ISO image or a URL\n\n# DESCRIPTION\nCreate a new repository, which
70
+ can either contain the content to install a\nnode, or simply point to an existing
71
+ online repository by URL.\n\n\n# Access Control\n\nThis command''s access
72
+ control pattern: `commands:create-repo:%{name}`\n\nWords surrounded by `%{...}`
73
+ are 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 must not be present.\n - It must be between 1 and 1000
85
+ in length.\n\n * iso-url\n - The URL of the ISO image to download and unpack
86
+ to create the\n repository. This can be an HTTP or HTTPS URL, or it can
87
+ be a\n file URL.\n \n In the later case, the file path is interpreted
88
+ as a path on the\n Razor server, rather than a path on the client. This
89
+ requires that\n you manually place the ISO image on the server before invoking
90
+ the\n command.\n - It must be of type string.\n - If present, url must
91
+ not be present.\n - It must be between 1 and 1000 in length.\n\n * task\n -
92
+ The name of the task associated with this repository. This is used to\n install
93
+ nodes that match a policy using this repository; generally it\n should match
94
+ the OS that the URL or ISO-URL attributes point to.\n - This attribute is
95
+ required\n - It must be of type string.\n\n\n\n# EXAMPLES\n Create a repository
96
+ from an ISO image, which will be downloaded and unpacked\n by the razor-server
97
+ in the background:\n \n {\n \"name\": \"fedora19\",\n \"iso-url\":
98
+ \"http://example.com/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n You
99
+ can also unpack an ISO image from a file *on the server*; this does not\n upload
100
+ the file from the client:\n {\n \"name\": \"fedora19\",\n \"iso-url\":
101
+ \"file:///tmp/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n Finally,
102
+ you can providing a `url` property when you create the repository;\n this
103
+ form is merely a pointer to a resource somehwere and nothing will be\n downloaded
104
+ 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\":
105
+ \"fedora\"\n }\n\n"},"schema":{"name":{"type":"string"},"url":{"type":"string"},"iso-url":{"type":"string"},"task":{"type":"string"}}}'
106
+ http_version:
107
+ recorded_at: Wed, 21 May 2014 21:40:46 GMT
108
+ - request:
109
+ method: get
110
+ uri: http://localhost:8080/api/commands/create-repo
111
+ body:
112
+ encoding: US-ASCII
113
+ string: ''
114
+ headers:
115
+ Accept:
116
+ - application/json
117
+ Accept-Encoding:
118
+ - gzip, deflate
119
+ User-Agent:
120
+ - Ruby
121
+ response:
122
+ status:
123
+ code: 200
124
+ message: OK
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
218
+ modified, or some other critical detail, these\nallow roles to be granted
219
+ partial access to modify the system.\n\nFor more detail on how the permission
220
+ strings are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
221
+ pattern is expanded\nand then a permission check applied to it, before the
222
+ command is authorized.\n\nThese checks only apply if security is enabled in
223
+ the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
224
+ http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * name\n -
225
+ The name of the repository.\n - This attribute is required\n - It must
226
+ be of type string.\n - It must be between 1 and 250 in length.\n\n * url\n -
227
+ The URL of the remote repository to use.\n - It must be of type string.\n -
228
+ If present, iso-url must not be present.\n - It must be between 1 and 1000
229
+ in length.\n\n * iso-url\n - The URL of the ISO image to download and unpack
230
+ to create the\n repository. This can be an HTTP or HTTPS URL, or it can
231
+ be a\n file URL.\n \n In the later case, the file path is interpreted
232
+ as a path on the\n Razor server, rather than a path on the client. This
233
+ requires that\n you manually place the ISO image on the server before invoking
234
+ the\n command.\n - It must be of type string.\n - If present, url must
235
+ not be present.\n - It must be between 1 and 1000 in length.\n\n * task\n -
236
+ The name of the task associated with this repository. This is used to\n install
237
+ nodes that match a policy using this repository; generally it\n should match
238
+ the OS that the URL or ISO-URL attributes point to.\n - This attribute is
239
+ required\n - It must be of type string.\n\n\n\n# EXAMPLES\n Create a repository
240
+ from an ISO image, which will be downloaded and unpacked\n by the razor-server
241
+ in the background:\n \n {\n \"name\": \"fedora19\",\n \"iso-url\":
242
+ \"http://example.com/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n You
243
+ 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 \"iso-url\":
245
+ \"file:///tmp/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n Finally,
246
+ you can providing a `url` property when you create the repository;\n this
247
+ form is merely a pointer to a resource somehwere and nothing will be\n downloaded
248
+ 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\n"},"schema":{"name":{"type":"string"},"url":{"type":"string"},"iso-url":{"type":"string"},"task":{"type":"string"}}}'
250
+ http_version:
251
+ recorded_at: Wed, 21 May 2014 21:40:46 GMT
252
+ - request:
253
+ method: post
254
+ uri: http://localhost:8080/api/commands/create-repo
255
+ body:
256
+ encoding: UTF-8
257
+ string: '{"name":"separate with spaces","url":"http://url.com/some.iso","task":"noop"}'
258
+ headers:
259
+ Accept:
260
+ - application/json
261
+ Accept-Encoding:
262
+ - gzip, deflate
263
+ Content-Type:
264
+ - application/json
265
+ Content-Length:
266
+ - '77'
267
+ User-Agent:
268
+ - Ruby
269
+ response:
270
+ status:
271
+ code: 202
272
+ message: Accepted
273
+ headers:
274
+ Server:
275
+ - Apache-Coyote/1.1
276
+ X-Content-Type-Options:
277
+ - nosniff
278
+ Content-Type:
279
+ - application/json;charset=utf-8
280
+ Content-Length:
281
+ - '237'
282
+ Date:
283
+ - Wed, 21 May 2014 21:40:46 GMT
284
+ body:
285
+ encoding: US-ASCII
286
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/repos/member","id":"http://localhost:8080/api/collections/repos/separate%20with%20spaces","name":"separate
287
+ with spaces","command":"http://localhost:8080/api/collections/commands/1"}'
288
+ http_version:
289
+ recorded_at: Wed, 21 May 2014 21:40:46 GMT
290
+ - request:
291
+ method: get
292
+ uri: http://localhost:8080/api/collections/repos/separate%20with%20spaces
293
+ body:
294
+ encoding: US-ASCII
295
+ string: ''
296
+ headers:
297
+ Accept:
298
+ - application/json
299
+ Accept-Encoding:
300
+ - gzip, deflate
301
+ User-Agent:
302
+ - Ruby
303
+ response:
304
+ status:
305
+ code: 200
306
+ message: OK
307
+ headers:
308
+ Server:
309
+ - Apache-Coyote/1.1
310
+ X-Content-Type-Options:
311
+ - nosniff
312
+ Content-Type:
313
+ - application/json;charset=utf-8
314
+ Content-Length:
315
+ - '371'
316
+ Date:
317
+ - Wed, 21 May 2014 21:40:46 GMT
318
+ body:
319
+ encoding: US-ASCII
320
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/repos/member","id":"http://localhost:8080/api/collections/repos/separate%20with%20spaces","name":"separate
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:8080/api/collections/tasks/noop","name":"noop"}}'
322
+ http_version:
323
+ recorded_at: Wed, 21 May 2014 21:40:46 GMT
324
+ - request:
325
+ method: get
326
+ uri: http://localhost:8080/api
327
+ body:
328
+ encoding: US-ASCII
329
+ string: ''
330
+ headers:
331
+ Accept:
332
+ - application/json
333
+ Accept-Encoding:
334
+ - gzip, deflate
335
+ User-Agent:
336
+ - Ruby
337
+ response:
338
+ status:
339
+ code: 200
340
+ message: OK
341
+ headers:
342
+ Server:
343
+ - Apache-Coyote/1.1
344
+ X-Content-Type-Options:
345
+ - nosniff
346
+ Content-Type:
347
+ - application/json;charset=utf-8
348
+ Content-Length:
349
+ - '4982'
350
+ Date:
351
+ - Wed, 21 May 2014 21:40:46 GMT
352
+ body:
353
+ encoding: US-ASCII
354
+ string: '{"commands":[{"name":"add-policy-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/add-policy-tag","id":"http://localhost:8080/api/commands/add-policy-tag"},{"name":"create-broker","rel":"http://api.puppetlabs.com/razor/v1/commands/create-broker","id":"http://localhost:8080/api/commands/create-broker"},{"name":"create-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/create-policy","id":"http://localhost:8080/api/commands/create-policy"},{"name":"create-repo","rel":"http://api.puppetlabs.com/razor/v1/commands/create-repo","id":"http://localhost:8080/api/commands/create-repo"},{"name":"create-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/create-tag","id":"http://localhost:8080/api/commands/create-tag"},{"name":"create-task","rel":"http://api.puppetlabs.com/razor/v1/commands/create-task","id":"http://localhost:8080/api/commands/create-task"},{"name":"delete-broker","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-broker","id":"http://localhost:8080/api/commands/delete-broker"},{"name":"delete-node","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-node","id":"http://localhost:8080/api/commands/delete-node"},{"name":"delete-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-policy","id":"http://localhost:8080/api/commands/delete-policy"},{"name":"delete-repo","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-repo","id":"http://localhost:8080/api/commands/delete-repo"},{"name":"delete-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-tag","id":"http://localhost:8080/api/commands/delete-tag"},{"name":"disable-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/disable-policy","id":"http://localhost:8080/api/commands/disable-policy"},{"name":"enable-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/enable-policy","id":"http://localhost:8080/api/commands/enable-policy"},{"name":"modify-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/modify-node-metadata","id":"http://localhost:8080/api/commands/modify-node-metadata"},{"name":"modify-policy-max-count","rel":"http://api.puppetlabs.com/razor/v1/commands/modify-policy-max-count","id":"http://localhost:8080/api/commands/modify-policy-max-count"},{"name":"move-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/move-policy","id":"http://localhost:8080/api/commands/move-policy"},{"name":"reboot-node","rel":"http://api.puppetlabs.com/razor/v1/commands/reboot-node","id":"http://localhost:8080/api/commands/reboot-node"},{"name":"register-node","rel":"http://api.puppetlabs.com/razor/v1/commands/register-node","id":"http://localhost:8080/api/commands/register-node"},{"name":"reinstall-node","rel":"http://api.puppetlabs.com/razor/v1/commands/reinstall-node","id":"http://localhost:8080/api/commands/reinstall-node"},{"name":"remove-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/remove-node-metadata","id":"http://localhost:8080/api/commands/remove-node-metadata"},{"name":"remove-policy-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/remove-policy-tag","id":"http://localhost:8080/api/commands/remove-policy-tag"},{"name":"set-node-desired-power-state","rel":"http://api.puppetlabs.com/razor/v1/commands/set-node-desired-power-state","id":"http://localhost:8080/api/commands/set-node-desired-power-state"},{"name":"set-node-hw-info","rel":"http://api.puppetlabs.com/razor/v1/commands/set-node-hw-info","id":"http://localhost:8080/api/commands/set-node-hw-info"},{"name":"set-node-ipmi-credentials","rel":"http://api.puppetlabs.com/razor/v1/commands/set-node-ipmi-credentials","id":"http://localhost:8080/api/commands/set-node-ipmi-credentials"},{"name":"update-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/update-node-metadata","id":"http://localhost:8080/api/commands/update-node-metadata"},{"name":"update-tag-rule","rel":"http://api.puppetlabs.com/razor/v1/commands/update-tag-rule","id":"http://localhost:8080/api/commands/update-tag-rule"}],"collections":[{"name":"brokers","rel":"http://api.puppetlabs.com/razor/v1/collections/brokers","id":"http://localhost:8080/api/collections/brokers"},{"name":"repos","rel":"http://api.puppetlabs.com/razor/v1/collections/repos","id":"http://localhost:8080/api/collections/repos"},{"name":"tags","rel":"http://api.puppetlabs.com/razor/v1/collections/tags","id":"http://localhost:8080/api/collections/tags"},{"name":"policies","rel":"http://api.puppetlabs.com/razor/v1/collections/policies","id":"http://localhost:8080/api/collections/policies"},{"name":"nodes","rel":"http://api.puppetlabs.com/razor/v1/collections/nodes","id":"http://localhost:8080/api/collections/nodes"},{"name":"tasks","rel":"http://api.puppetlabs.com/razor/v1/collections/tasks","id":"http://localhost:8080/api/collections/tasks"},{"name":"commands","rel":"http://api.puppetlabs.com/razor/v1/collections/commands","id":"http://localhost:8080/api/collections/commands"}],"version":{"server":"v0.14.1-125-g591a14d-dirty"}}'
355
+ http_version:
356
+ recorded_at: Wed, 21 May 2014 21:40:46 GMT
357
+ - request:
358
+ method: get
359
+ uri: http://localhost:8080/api/commands/create-repo
360
+ body:
361
+ encoding: US-ASCII
362
+ string: ''
363
+ headers:
364
+ Accept:
365
+ - application/json
366
+ Accept-Encoding:
367
+ - gzip, deflate
368
+ User-Agent:
369
+ - Ruby
370
+ response:
371
+ status:
372
+ code: 200
373
+ message: OK
374
+ headers:
375
+ Server:
376
+ - Apache-Coyote/1.1
377
+ Etag:
378
+ - '"server-version-v0.14.1-125-g591a14d-dirty"'
379
+ X-Content-Type-Options:
380
+ - nosniff
381
+ Content-Type:
382
+ - application/json;charset=utf-8
383
+ Content-Length:
384
+ - '3227'
385
+ Date:
386
+ - Wed, 21 May 2014 21:40:46 GMT
387
+ body:
388
+ encoding: US-ASCII
389
+ string: '{"name":"create-repo","help":{"full":"# SYNOPSIS\nCreate a new repository,
390
+ from an ISO image or a URL\n\n# DESCRIPTION\nCreate a new repository, which
391
+ can either contain the content to install a\nnode, or simply point to an existing
392
+ online repository by URL.\n\n\n# Access Control\n\nThis command''s access
393
+ control pattern: `commands:create-repo:%{name}`\n\nWords surrounded by `%{...}`
394
+ are substitutions from the input data: typically\nthe name of the object being
395
+ modified, or some other critical detail, these\nallow roles to be granted
396
+ partial access to modify the system.\n\nFor more detail on how the permission
397
+ strings are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
398
+ pattern is expanded\nand then a permission check applied to it, before the
399
+ command is authorized.\n\nThese checks only apply if security is enabled in
400
+ the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
401
+ http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * name\n -
402
+ The name of the repository.\n - This attribute is required\n - It must
403
+ be of type string.\n - It must be between 1 and 250 in length.\n\n * url\n -
404
+ The URL of the remote repository to use.\n - It must be of type string.\n -
405
+ If present, iso-url must not be present.\n - It must be between 1 and 1000
406
+ in length.\n\n * iso-url\n - The URL of the ISO image to download and unpack
407
+ to create the\n repository. This can be an HTTP or HTTPS URL, or it can
408
+ be a\n file URL.\n \n In the later case, the file path is interpreted
409
+ as a path on the\n Razor server, rather than a path on the client. This
410
+ requires that\n you manually place the ISO image on the server before invoking
411
+ the\n command.\n - It must be of type string.\n - If present, url must
412
+ not be present.\n - It must be between 1 and 1000 in length.\n\n * task\n -
413
+ The name of the task associated with this repository. This is used to\n install
414
+ nodes that match a policy using this repository; generally it\n should match
415
+ the OS that the URL or ISO-URL attributes point to.\n - This attribute is
416
+ required\n - It must be of type string.\n\n\n\n# EXAMPLES\n Create a repository
417
+ from an ISO image, which will be downloaded and unpacked\n by the razor-server
418
+ in the background:\n \n {\n \"name\": \"fedora19\",\n \"iso-url\":
419
+ \"http://example.com/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n You
420
+ can also unpack an ISO image from a file *on the server*; this does not\n upload
421
+ the file from the client:\n {\n \"name\": \"fedora19\",\n \"iso-url\":
422
+ \"file:///tmp/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n Finally,
423
+ you can providing a `url` property when you create the repository;\n this
424
+ form is merely a pointer to a resource somehwere and nothing will be\n downloaded
425
+ 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\":
426
+ \"fedora\"\n }\n\n"},"schema":{"name":{"type":"string"},"url":{"type":"string"},"iso-url":{"type":"string"},"task":{"type":"string"}}}'
427
+ http_version:
428
+ recorded_at: Wed, 21 May 2014 21:40:46 GMT
429
+ - request:
430
+ method: get
431
+ uri: http://localhost:8080/api/commands/create-repo
432
+ body:
433
+ encoding: US-ASCII
434
+ string: ''
435
+ headers:
436
+ Accept:
437
+ - application/json
438
+ Accept-Encoding:
439
+ - gzip, deflate
440
+ User-Agent:
441
+ - Ruby
442
+ response:
443
+ status:
444
+ code: 200
445
+ message: OK
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
467
+ modified, or some other critical detail, these\nallow roles to be granted
468
+ partial access to modify the system.\n\nFor more detail on how the permission
469
+ strings are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
470
+ pattern is expanded\nand then a permission check applied to it, before the
471
+ command is authorized.\n\nThese checks only apply if security is enabled in
472
+ the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
473
+ http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * name\n -
474
+ The name of the repository.\n - This attribute is required\n - It must
475
+ be of type string.\n - It must be between 1 and 250 in length.\n\n * url\n -
476
+ The URL of the remote repository to use.\n - It must be of type string.\n -
477
+ If present, iso-url must not be present.\n - It must be between 1 and 1000
478
+ in length.\n\n * iso-url\n - The URL of the ISO image to download and unpack
479
+ to create the\n repository. This can be an HTTP or HTTPS URL, or it can
480
+ be a\n file URL.\n \n In the later case, the file path is interpreted
481
+ as a path on the\n Razor server, rather than a path on the client. This
482
+ requires that\n you manually place the ISO image on the server before invoking
483
+ the\n command.\n - It must be of type string.\n - If present, url must
484
+ not be present.\n - It must be between 1 and 1000 in length.\n\n * task\n -
485
+ The name of the task associated with this repository. This is used to\n install
486
+ nodes that match a policy using this repository; generally it\n should match
487
+ the OS that the URL or ISO-URL attributes point to.\n - This attribute is
488
+ required\n - It must be of type string.\n\n\n\n# EXAMPLES\n Create a repository
489
+ from an ISO image, which will be downloaded and unpacked\n by the razor-server
490
+ in the background:\n \n {\n \"name\": \"fedora19\",\n \"iso-url\":
491
+ \"http://example.com/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n You
492
+ 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 \"iso-url\":
494
+ \"file:///tmp/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n Finally,
495
+ you can providing a `url` property when you create the repository;\n this
496
+ form is merely a pointer to a resource somehwere and nothing will be\n downloaded
497
+ 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\n"},"schema":{"name":{"type":"string"},"url":{"type":"string"},"iso-url":{"type":"string"},"task":{"type":"string"}}}'
499
+ http_version:
500
+ recorded_at: Wed, 21 May 2014 21:40:46 GMT
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
573
+ - request:
574
+ method: post
575
+ uri: http://localhost:8080/api/commands/create-repo
576
+ body:
577
+ encoding: UTF-8
578
+ string: '{"name":"double-quote with spaces\"","url":"http://url.com/some.iso","task":"noop"}'
579
+ headers:
580
+ Accept:
581
+ - application/json
582
+ Accept-Encoding:
583
+ - gzip, deflate
584
+ Content-Type:
585
+ - application/json
586
+ Content-Length:
587
+ - '83'
588
+ User-Agent:
589
+ - Ruby
590
+ response:
591
+ status:
592
+ code: 202
593
+ message: Accepted
594
+ headers:
595
+ Server:
596
+ - Apache-Coyote/1.1
597
+ X-Content-Type-Options:
598
+ - nosniff
599
+ Content-Type:
600
+ - application/json;charset=utf-8
601
+ Content-Length:
602
+ - '250'
603
+ Date:
604
+ - Wed, 21 May 2014 21:40:46 GMT
605
+ body:
606
+ encoding: US-ASCII
607
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/repos/member","id":"http://localhost:8080/api/collections/repos/double-quote%20with%20spaces%22","name":"double-quote
608
+ with spaces\"","command":"http://localhost:8080/api/collections/commands/2"}'
609
+ http_version:
610
+ recorded_at: Wed, 21 May 2014 21:40:46 GMT
611
+ - request:
612
+ method: get
613
+ uri: http://localhost:8080/api/collections/repos/double-quote%20with%20spaces%22
614
+ body:
615
+ encoding: US-ASCII
616
+ string: ''
617
+ headers:
618
+ Accept:
619
+ - application/json
620
+ Accept-Encoding:
621
+ - gzip, deflate
622
+ User-Agent:
623
+ - Ruby
624
+ response:
625
+ status:
626
+ code: 200
627
+ message: OK
628
+ headers:
629
+ Server:
630
+ - Apache-Coyote/1.1
631
+ X-Content-Type-Options:
632
+ - nosniff
633
+ Content-Type:
634
+ - application/json;charset=utf-8
635
+ Content-Length:
636
+ - '384'
637
+ Date:
638
+ - Wed, 21 May 2014 21:40:46 GMT
639
+ body:
640
+ encoding: US-ASCII
641
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/repos/member","id":"http://localhost:8080/api/collections/repos/double-quote%20with%20spaces%22","name":"double-quote
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:8080/api/collections/tasks/noop","name":"noop"}}'
643
+ http_version:
644
+ recorded_at: Wed, 21 May 2014 21:40:46 GMT
645
+ - request:
646
+ method: get
647
+ uri: http://localhost:8080/api
648
+ body:
649
+ encoding: US-ASCII
650
+ string: ''
651
+ headers:
652
+ Accept:
653
+ - application/json
654
+ Accept-Encoding:
655
+ - gzip, deflate
656
+ User-Agent:
657
+ - Ruby
658
+ response:
659
+ status:
660
+ code: 200
661
+ message: OK
662
+ headers:
663
+ Server:
664
+ - Apache-Coyote/1.1
665
+ X-Content-Type-Options:
666
+ - nosniff
667
+ Content-Type:
668
+ - application/json;charset=utf-8
669
+ Content-Length:
670
+ - '4982'
671
+ Date:
672
+ - Wed, 21 May 2014 21:40:46 GMT
673
+ body:
674
+ encoding: US-ASCII
675
+ string: '{"commands":[{"name":"add-policy-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/add-policy-tag","id":"http://localhost:8080/api/commands/add-policy-tag"},{"name":"create-broker","rel":"http://api.puppetlabs.com/razor/v1/commands/create-broker","id":"http://localhost:8080/api/commands/create-broker"},{"name":"create-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/create-policy","id":"http://localhost:8080/api/commands/create-policy"},{"name":"create-repo","rel":"http://api.puppetlabs.com/razor/v1/commands/create-repo","id":"http://localhost:8080/api/commands/create-repo"},{"name":"create-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/create-tag","id":"http://localhost:8080/api/commands/create-tag"},{"name":"create-task","rel":"http://api.puppetlabs.com/razor/v1/commands/create-task","id":"http://localhost:8080/api/commands/create-task"},{"name":"delete-broker","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-broker","id":"http://localhost:8080/api/commands/delete-broker"},{"name":"delete-node","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-node","id":"http://localhost:8080/api/commands/delete-node"},{"name":"delete-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-policy","id":"http://localhost:8080/api/commands/delete-policy"},{"name":"delete-repo","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-repo","id":"http://localhost:8080/api/commands/delete-repo"},{"name":"delete-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/delete-tag","id":"http://localhost:8080/api/commands/delete-tag"},{"name":"disable-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/disable-policy","id":"http://localhost:8080/api/commands/disable-policy"},{"name":"enable-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/enable-policy","id":"http://localhost:8080/api/commands/enable-policy"},{"name":"modify-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/modify-node-metadata","id":"http://localhost:8080/api/commands/modify-node-metadata"},{"name":"modify-policy-max-count","rel":"http://api.puppetlabs.com/razor/v1/commands/modify-policy-max-count","id":"http://localhost:8080/api/commands/modify-policy-max-count"},{"name":"move-policy","rel":"http://api.puppetlabs.com/razor/v1/commands/move-policy","id":"http://localhost:8080/api/commands/move-policy"},{"name":"reboot-node","rel":"http://api.puppetlabs.com/razor/v1/commands/reboot-node","id":"http://localhost:8080/api/commands/reboot-node"},{"name":"register-node","rel":"http://api.puppetlabs.com/razor/v1/commands/register-node","id":"http://localhost:8080/api/commands/register-node"},{"name":"reinstall-node","rel":"http://api.puppetlabs.com/razor/v1/commands/reinstall-node","id":"http://localhost:8080/api/commands/reinstall-node"},{"name":"remove-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/remove-node-metadata","id":"http://localhost:8080/api/commands/remove-node-metadata"},{"name":"remove-policy-tag","rel":"http://api.puppetlabs.com/razor/v1/commands/remove-policy-tag","id":"http://localhost:8080/api/commands/remove-policy-tag"},{"name":"set-node-desired-power-state","rel":"http://api.puppetlabs.com/razor/v1/commands/set-node-desired-power-state","id":"http://localhost:8080/api/commands/set-node-desired-power-state"},{"name":"set-node-hw-info","rel":"http://api.puppetlabs.com/razor/v1/commands/set-node-hw-info","id":"http://localhost:8080/api/commands/set-node-hw-info"},{"name":"set-node-ipmi-credentials","rel":"http://api.puppetlabs.com/razor/v1/commands/set-node-ipmi-credentials","id":"http://localhost:8080/api/commands/set-node-ipmi-credentials"},{"name":"update-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/update-node-metadata","id":"http://localhost:8080/api/commands/update-node-metadata"},{"name":"update-tag-rule","rel":"http://api.puppetlabs.com/razor/v1/commands/update-tag-rule","id":"http://localhost:8080/api/commands/update-tag-rule"}],"collections":[{"name":"brokers","rel":"http://api.puppetlabs.com/razor/v1/collections/brokers","id":"http://localhost:8080/api/collections/brokers"},{"name":"repos","rel":"http://api.puppetlabs.com/razor/v1/collections/repos","id":"http://localhost:8080/api/collections/repos"},{"name":"tags","rel":"http://api.puppetlabs.com/razor/v1/collections/tags","id":"http://localhost:8080/api/collections/tags"},{"name":"policies","rel":"http://api.puppetlabs.com/razor/v1/collections/policies","id":"http://localhost:8080/api/collections/policies"},{"name":"nodes","rel":"http://api.puppetlabs.com/razor/v1/collections/nodes","id":"http://localhost:8080/api/collections/nodes"},{"name":"tasks","rel":"http://api.puppetlabs.com/razor/v1/collections/tasks","id":"http://localhost:8080/api/collections/tasks"},{"name":"commands","rel":"http://api.puppetlabs.com/razor/v1/collections/commands","id":"http://localhost:8080/api/collections/commands"}],"version":{"server":"v0.14.1-125-g591a14d-dirty"}}'
676
+ http_version:
677
+ recorded_at: Wed, 21 May 2014 21:40:47 GMT
678
+ - request:
679
+ method: get
680
+ uri: http://localhost:8080/api/commands/create-repo
681
+ body:
682
+ encoding: US-ASCII
683
+ string: ''
684
+ headers:
685
+ Accept:
686
+ - application/json
687
+ Accept-Encoding:
688
+ - gzip, deflate
689
+ User-Agent:
690
+ - Ruby
691
+ response:
692
+ status:
693
+ code: 200
694
+ message: OK
695
+ headers:
696
+ Server:
697
+ - Apache-Coyote/1.1
698
+ Etag:
699
+ - '"server-version-v0.14.1-125-g591a14d-dirty"'
700
+ X-Content-Type-Options:
701
+ - nosniff
702
+ Content-Type:
703
+ - application/json;charset=utf-8
704
+ Content-Length:
705
+ - '3227'
706
+ Date:
707
+ - Wed, 21 May 2014 21:40:46 GMT
708
+ body:
709
+ encoding: US-ASCII
710
+ string: '{"name":"create-repo","help":{"full":"# SYNOPSIS\nCreate a new repository,
711
+ from an ISO image or a URL\n\n# DESCRIPTION\nCreate a new repository, which
712
+ can either contain the content to install a\nnode, or simply point to an existing
713
+ online repository by URL.\n\n\n# Access Control\n\nThis command''s access
714
+ control pattern: `commands:create-repo:%{name}`\n\nWords surrounded by `%{...}`
715
+ are substitutions from the input data: typically\nthe name of the object being
716
+ modified, or some other critical detail, these\nallow roles to be granted
717
+ partial access to modify the system.\n\nFor more detail on how the permission
718
+ strings are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
719
+ pattern is expanded\nand then a permission check applied to it, before the
720
+ command is authorized.\n\nThese checks only apply if security is enabled in
721
+ the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
722
+ http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * name\n -
723
+ The name of the repository.\n - This attribute is required\n - It must
724
+ be of type string.\n - It must be between 1 and 250 in length.\n\n * url\n -
725
+ The URL of the remote repository to use.\n - It must be of type string.\n -
726
+ If present, iso-url must not be present.\n - It must be between 1 and 1000
727
+ in length.\n\n * iso-url\n - The URL of the ISO image to download and unpack
728
+ to create the\n repository. This can be an HTTP or HTTPS URL, or it can
729
+ be a\n file URL.\n \n In the later case, the file path is interpreted
730
+ as a path on the\n Razor server, rather than a path on the client. This
731
+ requires that\n you manually place the ISO image on the server before invoking
732
+ the\n command.\n - It must be of type string.\n - If present, url must
733
+ not be present.\n - It must be between 1 and 1000 in length.\n\n * task\n -
734
+ The name of the task associated with this repository. This is used to\n install
735
+ nodes that match a policy using this repository; generally it\n should match
736
+ the OS that the URL or ISO-URL attributes point to.\n - This attribute is
737
+ required\n - It must be of type string.\n\n\n\n# EXAMPLES\n Create a repository
738
+ from an ISO image, which will be downloaded and unpacked\n by the razor-server
739
+ in the background:\n \n {\n \"name\": \"fedora19\",\n \"iso-url\":
740
+ \"http://example.com/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n You
741
+ can also unpack an ISO image from a file *on the server*; this does not\n upload
742
+ the file from the client:\n {\n \"name\": \"fedora19\",\n \"iso-url\":
743
+ \"file:///tmp/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n Finally,
744
+ you can providing a `url` property when you create the repository;\n this
745
+ form is merely a pointer to a resource somehwere and nothing will be\n downloaded
746
+ 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\":
747
+ \"fedora\"\n }\n\n"},"schema":{"name":{"type":"string"},"url":{"type":"string"},"iso-url":{"type":"string"},"task":{"type":"string"}}}'
748
+ http_version:
749
+ recorded_at: Wed, 21 May 2014 21:40:47 GMT
750
+ - request:
751
+ method: get
752
+ uri: http://localhost:8080/api/commands/create-repo
753
+ body:
754
+ encoding: US-ASCII
755
+ string: ''
756
+ headers:
757
+ Accept:
758
+ - application/json
759
+ Accept-Encoding:
760
+ - gzip, deflate
761
+ User-Agent:
762
+ - Ruby
763
+ response:
764
+ status:
765
+ code: 200
766
+ message: OK
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
860
+ modified, or some other critical detail, these\nallow roles to be granted
861
+ partial access to modify the system.\n\nFor more detail on how the permission
862
+ strings are structured and work, you can\nsee the [Shiro Permissions documentation][shiro]. That
863
+ pattern is expanded\nand then a permission check applied to it, before the
864
+ command is authorized.\n\nThese checks only apply if security is enabled in
865
+ the Razor configuration\nfile; on this server security is currently disabled.\n\n[shiro]:
866
+ http://shiro.apache.org/permissions.html\n\n# Attributes\n\n * name\n -
867
+ The name of the repository.\n - This attribute is required\n - It must
868
+ be of type string.\n - It must be between 1 and 250 in length.\n\n * url\n -
869
+ The URL of the remote repository to use.\n - It must be of type string.\n -
870
+ If present, iso-url must not be present.\n - It must be between 1 and 1000
871
+ in length.\n\n * iso-url\n - The URL of the ISO image to download and unpack
872
+ to create the\n repository. This can be an HTTP or HTTPS URL, or it can
873
+ be a\n file URL.\n \n In the later case, the file path is interpreted
874
+ as a path on the\n Razor server, rather than a path on the client. This
875
+ requires that\n you manually place the ISO image on the server before invoking
876
+ the\n command.\n - It must be of type string.\n - If present, url must
877
+ not be present.\n - It must be between 1 and 1000 in length.\n\n * task\n -
878
+ The name of the task associated with this repository. This is used to\n install
879
+ nodes that match a policy using this repository; generally it\n should match
880
+ the OS that the URL or ISO-URL attributes point to.\n - This attribute is
881
+ required\n - It must be of type string.\n\n\n\n# EXAMPLES\n Create a repository
882
+ from an ISO image, which will be downloaded and unpacked\n by the razor-server
883
+ in the background:\n \n {\n \"name\": \"fedora19\",\n \"iso-url\":
884
+ \"http://example.com/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n You
885
+ 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 \"iso-url\":
887
+ \"file:///tmp/Fedora-19-x86_64-DVD.iso\"\n \"task\": \"fedora\"\n }\n \n Finally,
888
+ you can providing a `url` property when you create the repository;\n this
889
+ form is merely a pointer to a resource somehwere and nothing will be\n downloaded
890
+ 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\n"},"schema":{"name":{"type":"string"},"url":{"type":"string"},"iso-url":{"type":"string"},"task":{"type":"string"}}}'
892
+ http_version:
893
+ recorded_at: Wed, 21 May 2014 21:40:47 GMT
894
+ - request:
895
+ method: post
896
+ uri: http://localhost:8080/api/commands/create-repo
897
+ body:
898
+ encoding: UTF-8
899
+ string: '{"name":"single-quote with spaces''","url":"http://url.com/some.iso","task":"noop"}'
900
+ headers:
901
+ Accept:
902
+ - application/json
903
+ Accept-Encoding:
904
+ - gzip, deflate
905
+ Content-Type:
906
+ - application/json
907
+ Content-Length:
908
+ - '82'
909
+ User-Agent:
910
+ - Ruby
911
+ response:
912
+ status:
913
+ code: 202
914
+ message: Accepted
915
+ headers:
916
+ Server:
917
+ - Apache-Coyote/1.1
918
+ X-Content-Type-Options:
919
+ - nosniff
920
+ Content-Type:
921
+ - application/json;charset=utf-8
922
+ Content-Length:
923
+ - '247'
924
+ Date:
925
+ - Wed, 21 May 2014 21:40:46 GMT
926
+ body:
927
+ encoding: US-ASCII
928
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/repos/member","id":"http://localhost:8080/api/collections/repos/single-quote%20with%20spaces''","name":"single-quote
929
+ with spaces''","command":"http://localhost:8080/api/collections/commands/3"}'
930
+ http_version:
931
+ recorded_at: Wed, 21 May 2014 21:40:47 GMT
932
+ - request:
933
+ method: get
934
+ uri: http://localhost:8080/api/collections/repos/single-quote%20with%20spaces'
935
+ body:
936
+ encoding: US-ASCII
937
+ string: ''
938
+ headers:
939
+ Accept:
940
+ - application/json
941
+ Accept-Encoding:
942
+ - gzip, deflate
943
+ User-Agent:
944
+ - Ruby
945
+ response:
946
+ status:
947
+ code: 200
948
+ message: OK
949
+ headers:
950
+ Server:
951
+ - Apache-Coyote/1.1
952
+ X-Content-Type-Options:
953
+ - nosniff
954
+ Content-Type:
955
+ - application/json;charset=utf-8
956
+ Content-Length:
957
+ - '381'
958
+ Date:
959
+ - Wed, 21 May 2014 21:40:46 GMT
960
+ body:
961
+ encoding: US-ASCII
962
+ string: '{"spec":"http://api.puppetlabs.com/razor/v1/collections/repos/member","id":"http://localhost:8080/api/collections/repos/single-quote%20with%20spaces''","name":"single-quote
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:8080/api/collections/tasks/noop","name":"noop"}}'
964
+ http_version:
965
+ recorded_at: Wed, 21 May 2014 21:40:47 GMT
966
+ recorded_with: VCR 2.5.0