razor-client 1.7.0 → 1.8.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/NEWS.md +12 -0
  2. data/bin/razor +19 -23
  3. data/lib/razor/cli/command.rb +3 -3
  4. data/lib/razor/cli/navigate.rb +55 -1
  5. data/lib/razor/cli/parse.rb +15 -11
  6. data/lib/razor/cli/version.rb +1 -1
  7. data/spec/cli/command_spec.rb +10 -1
  8. data/spec/cli/navigate_spec.rb +52 -4
  9. data/spec/cli/parse_spec.rb +1 -2
  10. data/spec/fixtures/sample_api +1 -0
  11. data/spec/fixtures/vcr/Razor_CLI_Navigate/accept-language_header/should_allow_other_accept-language_headers.yml +10 -8
  12. data/spec/fixtures/vcr/Razor_CLI_Navigate/accept-language_header/should_set_the_accept-language_header.yml +10 -8
  13. data/spec/fixtures/vcr/Razor_CLI_Navigate/argument_formatting/should_allow_in_string.yml +110 -91
  14. data/spec/fixtures/vcr/Razor_CLI_Navigate/argument_formatting/should_allow_single-dash_with_single_character_flag.yml +71 -51
  15. data/spec/fixtures/vcr/Razor_CLI_Navigate/argument_formatting/should_allow_spaces.yml +328 -271
  16. data/spec/fixtures/vcr/Razor_CLI_Navigate/argument_formatting/should_not_allow_double-dash_with_single_character_flag.yml +52 -40
  17. data/spec/fixtures/vcr/Razor_CLI_Navigate/argument_formatting/should_not_allow_single-dash_with_multiple_character_flag.yml +49 -37
  18. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_--help_command_.yml +53 -135
  19. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_-h_command_.yml +53 -135
  20. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_command_--help_.yml +53 -135
  21. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_command_-h_.yml +53 -135
  22. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_command_help_.yml +53 -135
  23. data/spec/fixtures/vcr/Razor_CLI_Navigate/for_command_help/should_provide_command_help_for_razor_help_command_.yml +53 -135
  24. data/spec/fixtures/vcr/Razor_CLI_Navigate/positional_arguments/should_allow_the_use_of_positional_arguments.yml +229 -163
  25. data/spec/fixtures/vcr/Razor_CLI_Navigate/positional_arguments/should_fail_with_too_many_positional_arguments.yml +49 -37
  26. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_authentication/should_preserve_that_across_navigation.yml +25 -13
  27. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_authentication/should_supply_that_to_the_API_service.yml +14 -8
  28. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_invalid_parameter/should_fail_with_bad_JSON.yml +52 -40
  29. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_invalid_parameter/should_fail_with_malformed_argument.yml +105 -90
  30. 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 +549 -446
  31. 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 +549 -446
  32. 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 +549 -446
  33. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_multiple_arguments_with_same_name/combining_as_an_object/should_construct_a_json_object.yml +71 -51
  34. 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 +144 -100
  35. 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 +52 -40
  36. 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 +52 -40
  37. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_no_parameters/should_fail_with_bad_JSON.yml +54 -43
  38. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_query_parameters/should_append_limit.yml +25 -13
  39. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_query_parameters/should_append_start.yml +25 -13
  40. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_query_parameters/should_not_fail_when_query_returns_details_for_one_item.yml +78 -44
  41. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_query_parameters/should_store_query_without_query_parameters.yml +130 -74
  42. data/spec/fixtures/vcr/Razor_CLI_Navigate/with_query_parameters/should_throw_an_error_if_the_query_parameter_is_not_in_the_API.yml +14 -8
  43. 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 +66 -38
  44. data/spec/fixtures/vcr/Razor_CLI_Parse/_new/_help/should_print_a_list_of_known_endpoints.yml +12 -8
  45. data/spec/spec_helper.rb +4 -1
  46. data/spec/testing.md +25 -1
  47. metadata +73 -71
data/NEWS.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Razor Client Release Notes
2
2
 
3
+ ## 1.8.1 - 2018-04-23
4
+
5
+ * IMPROVEMENT: The default API URL now attempts to use TLS on localhost port
6
+ 8151 before falling back to non-TLS on 8150.
7
+ * BUGFIX: Removed extra output that was being added.
8
+
9
+ ## 1.8.0
10
+
11
+ * IMPROVEMENT: Now allowing underscores to be mixed into argument lists,
12
+ e.g. `razor create-broker --name test --broker_type noop`
13
+ * BUGFIX: Fixed extra output that was being added.
14
+
3
15
  ## 1.7.0 - 2018-01-17
4
16
 
5
17
  * NEW: Removed support for Ruby < 2.0
data/bin/razor CHANGED
@@ -14,26 +14,6 @@ def die(message = nil)
14
14
  exit 1
15
15
  end
16
16
 
17
- begin
18
- parse = Razor::CLI::Parse.new(ARGV)
19
- rescue Razor::CLI::InvalidURIError => e
20
- die e.message
21
- rescue OptionParser::InvalidOption => e
22
- die _("%{error}\nTry 'razor --help' for more information") % {error: e.message}
23
- end
24
-
25
- if parse.show_version?
26
- version, exit_code = parse.version
27
- puts version
28
- exit exit_code
29
- end
30
-
31
- if parse.show_help? and not parse.show_command_help?
32
- output, exitcode = parse.help
33
- puts output
34
- exit exitcode
35
- end
36
-
37
17
  def unexpected_error(e)
38
18
  die _(<<-ERROR) % {backtrace: e.backtrace.take(10).join("\n"), error: e}
39
19
  An unexpected error has occurred.
@@ -50,12 +30,29 @@ https://tickets.puppetlabs.com/browse/RAZOR
50
30
  end
51
31
 
52
32
  begin
53
- document = parse.navigate.get_document
54
- p document
33
+ parse = Razor::CLI::Parse.new(ARGV)
34
+
35
+ navigate = parse.navigate
36
+
37
+ if parse.show_version?
38
+ version, exit_code = parse.version
39
+ puts version
40
+ exit exit_code
41
+ end
42
+
43
+ if parse.show_help? and not parse.show_command_help?
44
+ output, exitcode = parse.help
45
+ puts output
46
+ exit exitcode
47
+ end
48
+
49
+ document = navigate.get_document
55
50
  url = parse.navigate.last_url
56
51
  result = format_document document, parse
57
52
  # TRANSLATORS: This is a template for all results that the client outputs.
58
53
  puts _("From %{url}:\n\n%{result}\n\n") % {url: url, result: result}
54
+ rescue Razor::CLI::InvalidURIError => e
55
+ die e.message
59
56
  rescue RestClient::Unauthorized
60
57
  puts _(<<-UNAUTH) % {url: url}
61
58
  Error: Credentials are required to connect to the server at %{url}"
@@ -75,7 +72,6 @@ rescue RestClient::SSLCertificateNotVerified
75
72
  rescue RestClient::Exception => e
76
73
  r = e.response
77
74
  unexpected_error(e) if r.nil?
78
- p r.methods
79
75
  request_type = r.args[:method].to_s.upcase
80
76
  url = r.args[:url]
81
77
  puts _("Error from doing %{request_type} %{url}") % {request_type: request_type, url: url}
@@ -30,15 +30,15 @@ class Razor::CLI::Command
30
30
  pos_index = 0
31
31
  until @segments.empty?
32
32
  argument = @segments.shift
33
- if argument =~ /\A--([a-z-]{2,})(=(.+))?\Z/ or
33
+ if argument =~ /\A--([a-z][a-z_-]+)(=(.+))?\Z/ or
34
34
  argument =~ /\A-([a-z])(=(.+))?\Z/
35
35
  # `--arg=value`/`--arg value`
36
36
  # `-a=value`/`-a value`
37
37
  arg_name, value = [$1, $3]
38
- value = @segments.shift if value.nil? && @segments[0] !~ /^--/
38
+ value = @segments.shift if value.nil? && @segments[0] !~ /^-/
39
39
  arg_name = self.class.resolve_alias(arg_name, @cmd_schema)
40
40
  body[arg_name] = self.class.convert_arg(arg_name, value, body[arg_name], @cmd_schema)
41
- elsif argument =~ /\A-([a-z-]{2,})(=(.+))?\Z/ and
41
+ elsif argument =~ /\A-([a-z][a-z_-]+)(=(.+))?\Z/ and
42
42
  @cmd_schema[self.class.resolve_alias($1, @cmd_schema)]
43
43
  # Short form, should be long; offer suggestion
44
44
  raise ArgumentError, _("Unexpected argument %{argument} (did you mean %{suggestion}?)") % {argument: argument, suggestion: "--#{$1}"}
@@ -5,14 +5,47 @@ require 'forwardable'
5
5
 
6
6
  module Razor::CLI
7
7
  class Navigate
8
+ RAZOR_HTTPS_API = "https://localhost:8151/api"
9
+ RAZOR_HTTP_API = "http://localhost:8150/api"
8
10
  extend Forwardable
9
11
 
10
12
  def initialize(parse, segments)
11
13
  @parse = parse
12
14
  @segments = segments||[]
15
+ set_api_url!(parse)
13
16
  @doc = entrypoint
14
17
  @doc_resource = create_resource parse.api_url, {:accept => :json,
15
- :accept_language => accept_language}
18
+ :accept_language => accept_language}
19
+ end
20
+
21
+ # This returns an array of two elements:
22
+ # - The URL that, if neither the `-u` argument nor the
23
+ # RAZOR_API environment variable are set, will be used.
24
+ # - The source from which the URL was found, `:https` or `:http`.
25
+ def default_api
26
+ if https_api_exists?
27
+ [RAZOR_HTTPS_API, :https]
28
+ else
29
+ [RAZOR_HTTP_API, :http]
30
+ end
31
+ end
32
+
33
+ # The order of API selection works as follows:
34
+ # - Use `-u` argument if defined (done elsewhere)
35
+ # - Use "RAZOR_API" environment variable if defined
36
+ # - Check PE's https://localhost:8151/api via `HEAD` HTTP method
37
+ # - Use FOSS' http://localhost:8150/api
38
+ # This receives an argument determining whether to be verbose about
39
+ # requests made.
40
+ def set_api_url!(parse)
41
+ if !!parse.api_url
42
+ parse.api_url.to_s
43
+ elsif ENV["RAZOR_API"]
44
+ parse.parse_and_set_api_url(ENV['RAZOR_API'], :env)
45
+ else
46
+ url, source = default_api
47
+ parse.parse_and_set_api_url(url, source)
48
+ end
16
49
  end
17
50
 
18
51
  attr_accessor :doc_resource
@@ -112,6 +145,13 @@ module Razor::CLI
112
145
  @accept_language ||= GettextSetup.candidate_locales
113
146
  end
114
147
 
148
+ def head(url, headers={})
149
+ resource = create_resource(url, headers)
150
+ response = resource.head
151
+ print "HEAD #{url.to_s}\n#{response.body}\n\n" if @parse.dump_response?
152
+ response
153
+ end
154
+
115
155
  def get(url, headers={})
116
156
  resource = create_resource(url, headers)
117
157
  response = resource.get
@@ -153,6 +193,20 @@ module Razor::CLI
153
193
  end
154
194
 
155
195
  private
196
+ def https_api_exists?
197
+ # No need to verify SSL on localhost, cert won't match.
198
+ old_verify_ssl = @parse.verify_ssl?
199
+ @parse.verify_ssl = false
200
+ begin
201
+ url = RAZOR_HTTPS_API
202
+ head(URI.parse(url))
203
+ rescue Errno::ENOENT, Errno::ECONNREFUSED
204
+ false
205
+ ensure
206
+ print "HEAD #{url.to_s}\n\n" if @parse.dump_response?
207
+ @parse.verify_ssl = old_verify_ssl
208
+ end
209
+ end
156
210
 
157
211
  def create_resource(url, headers)
158
212
  @doc_resource = RestClient::Resource.new(url.to_s,
@@ -16,7 +16,6 @@ module Razor::CLI
16
16
 
17
17
  class Parse
18
18
  extend Forwardable
19
- DEFAULT_RAZOR_API = "http://localhost:8150/api"
20
19
 
21
20
  def_delegator 'navigate', 'query?'
22
21
 
@@ -39,7 +38,9 @@ module Razor::CLI
39
38
  opts.on "-u", "--url URL",
40
39
  _("The full Razor API URL, can also be set\n" + " "*37 +
41
40
  "with the RAZOR_API environment variable\n" + " "*37 +
42
- "(default %{default_api})") % {default_api: DEFAULT_RAZOR_API} do |url|
41
+ "(default %{https_api} or \n" + " "*37 +
42
+ "%{http_api})") % {http_api: Razor::CLI::Navigate::RAZOR_HTTP_API,
43
+ https_api: Razor::CLI::Navigate::RAZOR_HTTPS_API} do |url|
43
44
  parse_and_set_api_url(url, :opts)
44
45
  end
45
46
 
@@ -147,6 +148,10 @@ ERR
147
148
  !!@dump
148
149
  end
149
150
 
151
+ def verify_ssl=(arg)
152
+ @verify_ssl = arg
153
+ end
154
+
150
155
  def verify_ssl?
151
156
  !!@verify_ssl
152
157
  end
@@ -158,12 +163,13 @@ ERR
158
163
  LINUX_PEM_FILE = '/etc/puppetlabs/puppet/ssl/certs/ca.pem'
159
164
  WIN_PEM_FILE = 'C:\ProgramData\PuppetLabs\puppet\etc\ssl\certs\ca.pem'
160
165
  def initialize(args)
161
- parse_and_set_api_url(ENV["RAZOR_API"] || DEFAULT_RAZOR_API, :env)
162
166
  @args = args.dup
163
167
  # To be populated externally.
164
168
  @stripped_args = []
165
169
  @format = 'short'
166
170
  @verify_ssl = true
171
+ @args = get_optparse.order(@args)
172
+ parse_and_set_api_url(ENV["RAZOR_API"], :env) if ENV["RAZOR_API"] && !@api_url
167
173
  env_pem_file = ENV['RAZOR_CA_FILE']
168
174
  # If this is set, it should actually exist.
169
175
  if env_pem_file && !File.exists?(env_pem_file)
@@ -176,13 +182,6 @@ ERR
176
182
  break
177
183
  end
178
184
  end
179
- @args = get_optparse.order(@args)
180
-
181
- # Localhost won't match the server's certificate; no verification required.
182
- # This needs to happen after get_optparse so `-k` and `-u` can take effect.
183
- if @api_url.hostname == 'localhost'
184
- @verify_ssl = false
185
- end
186
185
 
187
186
  @args = set_help_vars(@args)
188
187
  if @args == ['version'] or @show_version
@@ -219,13 +218,18 @@ ERR
219
218
  @navigate ||=Navigate.new(self, @navigation)
220
219
  end
221
220
 
222
- private
223
221
  def parse_and_set_api_url(url, source)
224
222
  begin
225
223
  unless url.start_with?('http:') or url.start_with?('https:')
226
224
  raise Razor::CLI::InvalidURIError.new(url, source)
227
225
  end
228
226
  @api_url = URI.parse(url)
227
+
228
+ # Localhost won't match the server's certificate; no verification required.
229
+ # This needs to happen after get_optparse so `-k` and `-u` can take effect.
230
+ if @api_url.hostname == 'localhost'
231
+ @verify_ssl = false
232
+ end
229
233
  rescue URI::InvalidURIError => e
230
234
  raise Razor::CLI::InvalidURIError.new(url, source)
231
235
  end
@@ -18,7 +18,7 @@ module Razor
18
18
  #
19
19
  # The next line is the one that our packaging tools modify, so please make
20
20
  # sure that any change to it is discussed and agreed first.
21
- version = '1.7.0'
21
+ version = '1.8.1'
22
22
 
23
23
  if version == "DEVELOPMENT"
24
24
  root = File.expand_path("../../..", File.dirname(__FILE__))
@@ -71,7 +71,6 @@ describe Razor::CLI::Command do
71
71
  c.extract_command
72
72
  end
73
73
  context "flag length" do
74
-
75
74
  it "fails with a single dash for long flags" do
76
75
  expect{extract({'schema' => {'name' => {'type' => 'array'}}}, ['-name', 'abc'])}.
77
76
  to raise_error(ArgumentError, 'Unexpected argument -name (did you mean --name?)')
@@ -97,6 +96,16 @@ describe Razor::CLI::Command do
97
96
  end
98
97
  end
99
98
 
99
+ it "handles all reasonable characters" do
100
+ def generate_arg
101
+ prng = Random.new
102
+ [*'a'..'z'].shuffle(random: prng).first +
103
+ [*'a'..'z', '-', '_'].shuffle(random:prng).join
104
+ end
105
+ arg = generate_arg
106
+ extract({'schema' => {arg => {'type' => 'array'}}}, ["--#{arg}", 'abc'])[arg].should == ['abc']
107
+ end
108
+
100
109
  context "positional arguments" do
101
110
  let(:schema) do
102
111
  {'schema' => {'n' => {'position' => 1},
@@ -24,7 +24,7 @@ describe Razor::CLI::Navigate do
24
24
  it { nav.get_document['items'].should == []}
25
25
 
26
26
  it do
27
- nav.get_document;
27
+ nav.get_document
28
28
  nav.last_url.to_s.should =~ %r{/api/collections/tags$}
29
29
  end
30
30
  end
@@ -42,8 +42,8 @@ describe Razor::CLI::Navigate do
42
42
  end
43
43
 
44
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/)
45
+ nav = Razor::CLI::Parse.new(['create-tag', 'tag_2', 'rule', '--inva^lid']).navigate
46
+ expect{nav.get_document}.to raise_error(ArgumentError, /Unexpected argument --inva\^lid/)
47
47
  end
48
48
  end
49
49
 
@@ -54,6 +54,52 @@ describe Razor::CLI::Navigate do
54
54
  end
55
55
  end
56
56
 
57
+ context "finds the right API", :vcr do
58
+ def stub_results(real_url)
59
+ api_fixtures_path = File::join(File::dirname(__FILE__), '..', 'fixtures', 'sample_api')
60
+ sample_api = File.read(api_fixtures_path)
61
+ stub_const('Razor::CLI::Navigate::RAZOR_HTTPS_API', 'https://bad-https:8151/api')
62
+ stub_const('Razor::CLI::Navigate::RAZOR_HTTP_API', 'http://bad-http:8150/api')
63
+ ::WebMock.stub_request(:get, real_url).to_return(body: sample_api, headers: {"Content-Type" => 'application/json'})
64
+ ::WebMock.stub_request(:head, real_url)
65
+ end
66
+ let(:cli_string) do
67
+ %w[--version].freeze
68
+ end
69
+ it "chooses the -u argument first" do
70
+ url = 'http://u-argument:8000'
71
+ stub_results(url)
72
+ cli_string = %W[-u #{url} --version].freeze
73
+ nav = Razor::CLI::Parse.new(cli_string).navigate
74
+ nav.last_url.to_s.should == url
75
+ end
76
+ it "chooses the ENV variable second" do
77
+ url = 'http://env-variable:8000'
78
+ stub_results(url)
79
+ ENV::store('RAZOR_API', url)
80
+ nav = Razor::CLI::Parse.new(cli_string).navigate
81
+ nav.last_url.to_s.should == url
82
+ end
83
+ it "chooses the HTTPS URL third" do
84
+ url = 'http://https-url:8000'
85
+ stub_results(url)
86
+ stub_const('Razor::CLI::Navigate::RAZOR_HTTPS_API', url)
87
+ nav = Razor::CLI::Parse.new(cli_string).navigate
88
+ nav.last_url.to_s.should == url
89
+ end
90
+ it "chooses the HTTP URL last" do
91
+ url = 'http://http-url:8000'
92
+ refused = 'http://refused:404/api'
93
+ stub_results(url)
94
+ # PRIORITY still needs to be refused
95
+ stub_const('Razor::CLI::Navigate::RAZOR_HTTPS_API', refused)
96
+ ::WebMock.stub_request(:head, refused).to_raise(Errno::ECONNREFUSED)
97
+ stub_const('Razor::CLI::Navigate::RAZOR_HTTP_API', url)
98
+ nav = Razor::CLI::Parse.new(cli_string).navigate
99
+ nav.last_url.to_s.should == url
100
+ end
101
+ end
102
+
57
103
  context "with multiple arguments with same name", :vcr do
58
104
  context "combining as an array" do
59
105
  before(:each) do
@@ -238,7 +284,9 @@ describe Razor::CLI::Navigate do
238
284
  nav.accept_language.should == GettextSetup.candidate_locales
239
285
  end
240
286
  it "should allow other accept-language headers" do
241
- ENV['LANG'] = 'de_DE'
287
+ # This will be set on the client's machine. We're not concerned with how
288
+ # the Locale library figures this out.
289
+ Locale.set_current('de_DE')
242
290
  locales = GettextSetup.candidate_locales
243
291
  locales.should == 'de_DE,de,en'
244
292
  nav = Razor::CLI::Parse.new(['create-broker', '--name=other-broker', '--broker-type', 'puppet-pe', '-c', 'server=abc.com']).navigate
@@ -16,10 +16,9 @@ describe Razor::CLI::Parse do
16
16
  Razor::CLI::Parse.new(args)
17
17
  end
18
18
 
19
- describe "#new" do
19
+ describe "#new", :vcr 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}
23
22
  end
24
23
 
25
24
  context "with a '-h'" do
@@ -0,0 +1 @@
1
+ {"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":"run-hook","rel":"http://api.puppetlabs.com/razor/v1/commands/run-hook","id":"http://localhost:8150/api/commands/run-hook"},{"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-broker-configuration","rel":"http://api.puppetlabs.com/razor/v1/commands/update-broker-configuration","id":"http://localhost:8150/api/commands/update-broker-configuration"},{"name":"update-hook-configuration","rel":"http://api.puppetlabs.com/razor/v1/commands/update-hook-configuration","id":"http://localhost:8150/api/commands/update-hook-configuration"},{"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-policy-broker","rel":"http://api.puppetlabs.com/razor/v1/commands/update-policy-broker","id":"http://localhost:8150/api/commands/update-policy-broker"},{"name":"update-policy-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/update-policy-node-metadata","id":"http://localhost:8150/api/commands/update-policy-node-metadata"},{"name":"update-policy-repo","rel":"http://api.puppetlabs.com/razor/v1/commands/update-policy-repo","id":"http://localhost:8150/api/commands/update-policy-repo"},{"name":"update-policy-task","rel":"http://api.puppetlabs.com/razor/v1/commands/update-policy-task","id":"http://localhost:8150/api/commands/update-policy-task"},{"name":"update-repo-task","rel":"http://api.puppetlabs.com/razor/v1/commands/update-repo-task","id":"http://localhost:8150/api/commands/update-repo-task"},{"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"},{"name":"config","rel":"http://api.puppetlabs.com/razor/v1/collections/config","id":"http://localhost:8150/api/collections/config"}],"version":{"server":"not-a-real-version"}}
@@ -11,10 +11,12 @@ http_interactions:
11
11
  - application/json
12
12
  Accept-Encoding:
13
13
  - gzip, deflate
14
+ User-Agent:
15
+ - rest-client/2.0.2 (darwin x86_64) jruby/9.1.5.0 (2.3.1p0)
14
16
  Accept-Language:
15
17
  - de_DE,de,en
16
- User-Agent:
17
- - Ruby
18
+ Host:
19
+ - localhost:8150
18
20
  response:
19
21
  status:
20
22
  code: 200
@@ -27,12 +29,12 @@ http_interactions:
27
29
  Content-Type:
28
30
  - application/json
29
31
  Content-Length:
30
- - '7116'
32
+ - '7110'
31
33
  Date:
32
- - Wed, 18 Jan 2017 18:16:48 GMT
34
+ - Mon, 23 Apr 2018 19:49:49 GMT
33
35
  body:
34
- encoding: US-ASCII
35
- 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":"run-hook","rel":"http://api.puppetlabs.com/razor/v1/commands/run-hook","id":"http://localhost:8150/api/commands/run-hook"},{"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-broker-configuration","rel":"http://api.puppetlabs.com/razor/v1/commands/update-broker-configuration","id":"http://localhost:8150/api/commands/update-broker-configuration"},{"name":"update-hook-configuration","rel":"http://api.puppetlabs.com/razor/v1/commands/update-hook-configuration","id":"http://localhost:8150/api/commands/update-hook-configuration"},{"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-policy-broker","rel":"http://api.puppetlabs.com/razor/v1/commands/update-policy-broker","id":"http://localhost:8150/api/commands/update-policy-broker"},{"name":"update-policy-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/update-policy-node-metadata","id":"http://localhost:8150/api/commands/update-policy-node-metadata"},{"name":"update-policy-repo","rel":"http://api.puppetlabs.com/razor/v1/commands/update-policy-repo","id":"http://localhost:8150/api/commands/update-policy-repo"},{"name":"update-policy-task","rel":"http://api.puppetlabs.com/razor/v1/commands/update-policy-task","id":"http://localhost:8150/api/commands/update-policy-task"},{"name":"update-repo-task","rel":"http://api.puppetlabs.com/razor/v1/commands/update-repo-task","id":"http://localhost:8150/api/commands/update-repo-task"},{"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"},{"name":"config","rel":"http://api.puppetlabs.com/razor/v1/collections/config","id":"http://localhost:8150/api/collections/config"}],"version":{"server":"v1.5.0-11-g89cc831"}}'
36
+ encoding: UTF-8
37
+ 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":"run-hook","rel":"http://api.puppetlabs.com/razor/v1/commands/run-hook","id":"http://localhost:8150/api/commands/run-hook"},{"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-broker-configuration","rel":"http://api.puppetlabs.com/razor/v1/commands/update-broker-configuration","id":"http://localhost:8150/api/commands/update-broker-configuration"},{"name":"update-hook-configuration","rel":"http://api.puppetlabs.com/razor/v1/commands/update-hook-configuration","id":"http://localhost:8150/api/commands/update-hook-configuration"},{"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-policy-broker","rel":"http://api.puppetlabs.com/razor/v1/commands/update-policy-broker","id":"http://localhost:8150/api/commands/update-policy-broker"},{"name":"update-policy-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/update-policy-node-metadata","id":"http://localhost:8150/api/commands/update-policy-node-metadata"},{"name":"update-policy-repo","rel":"http://api.puppetlabs.com/razor/v1/commands/update-policy-repo","id":"http://localhost:8150/api/commands/update-policy-repo"},{"name":"update-policy-task","rel":"http://api.puppetlabs.com/razor/v1/commands/update-policy-task","id":"http://localhost:8150/api/commands/update-policy-task"},{"name":"update-repo-task","rel":"http://api.puppetlabs.com/razor/v1/commands/update-repo-task","id":"http://localhost:8150/api/commands/update-repo-task"},{"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"},{"name":"config","rel":"http://api.puppetlabs.com/razor/v1/collections/config","id":"http://localhost:8150/api/collections/config"}],"version":{"server":"v1.8.0-dirty"}}'
36
38
  http_version:
37
- recorded_at: Wed, 18 Jan 2017 18:16:48 GMT
38
- recorded_with: VCR 2.5.0
39
+ recorded_at: Mon, 23 Apr 2018 19:49:49 GMT
40
+ recorded_with: VCR 4.0.0
@@ -11,10 +11,12 @@ http_interactions:
11
11
  - application/json
12
12
  Accept-Encoding:
13
13
  - gzip, deflate
14
+ User-Agent:
15
+ - rest-client/2.0.2 (darwin x86_64) jruby/9.1.5.0 (2.3.1p0)
14
16
  Accept-Language:
15
17
  - en_US,en
16
- User-Agent:
17
- - Ruby
18
+ Host:
19
+ - localhost:8150
18
20
  response:
19
21
  status:
20
22
  code: 200
@@ -27,12 +29,12 @@ http_interactions:
27
29
  Content-Type:
28
30
  - application/json
29
31
  Content-Length:
30
- - '7116'
32
+ - '7110'
31
33
  Date:
32
- - Wed, 18 Jan 2017 18:16:43 GMT
34
+ - Mon, 23 Apr 2018 19:49:43 GMT
33
35
  body:
34
- encoding: US-ASCII
35
- 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":"run-hook","rel":"http://api.puppetlabs.com/razor/v1/commands/run-hook","id":"http://localhost:8150/api/commands/run-hook"},{"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-broker-configuration","rel":"http://api.puppetlabs.com/razor/v1/commands/update-broker-configuration","id":"http://localhost:8150/api/commands/update-broker-configuration"},{"name":"update-hook-configuration","rel":"http://api.puppetlabs.com/razor/v1/commands/update-hook-configuration","id":"http://localhost:8150/api/commands/update-hook-configuration"},{"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-policy-broker","rel":"http://api.puppetlabs.com/razor/v1/commands/update-policy-broker","id":"http://localhost:8150/api/commands/update-policy-broker"},{"name":"update-policy-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/update-policy-node-metadata","id":"http://localhost:8150/api/commands/update-policy-node-metadata"},{"name":"update-policy-repo","rel":"http://api.puppetlabs.com/razor/v1/commands/update-policy-repo","id":"http://localhost:8150/api/commands/update-policy-repo"},{"name":"update-policy-task","rel":"http://api.puppetlabs.com/razor/v1/commands/update-policy-task","id":"http://localhost:8150/api/commands/update-policy-task"},{"name":"update-repo-task","rel":"http://api.puppetlabs.com/razor/v1/commands/update-repo-task","id":"http://localhost:8150/api/commands/update-repo-task"},{"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"},{"name":"config","rel":"http://api.puppetlabs.com/razor/v1/collections/config","id":"http://localhost:8150/api/collections/config"}],"version":{"server":"v1.5.0-11-g89cc831"}}'
36
+ encoding: UTF-8
37
+ 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":"run-hook","rel":"http://api.puppetlabs.com/razor/v1/commands/run-hook","id":"http://localhost:8150/api/commands/run-hook"},{"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-broker-configuration","rel":"http://api.puppetlabs.com/razor/v1/commands/update-broker-configuration","id":"http://localhost:8150/api/commands/update-broker-configuration"},{"name":"update-hook-configuration","rel":"http://api.puppetlabs.com/razor/v1/commands/update-hook-configuration","id":"http://localhost:8150/api/commands/update-hook-configuration"},{"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-policy-broker","rel":"http://api.puppetlabs.com/razor/v1/commands/update-policy-broker","id":"http://localhost:8150/api/commands/update-policy-broker"},{"name":"update-policy-node-metadata","rel":"http://api.puppetlabs.com/razor/v1/commands/update-policy-node-metadata","id":"http://localhost:8150/api/commands/update-policy-node-metadata"},{"name":"update-policy-repo","rel":"http://api.puppetlabs.com/razor/v1/commands/update-policy-repo","id":"http://localhost:8150/api/commands/update-policy-repo"},{"name":"update-policy-task","rel":"http://api.puppetlabs.com/razor/v1/commands/update-policy-task","id":"http://localhost:8150/api/commands/update-policy-task"},{"name":"update-repo-task","rel":"http://api.puppetlabs.com/razor/v1/commands/update-repo-task","id":"http://localhost:8150/api/commands/update-repo-task"},{"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"},{"name":"config","rel":"http://api.puppetlabs.com/razor/v1/collections/config","id":"http://localhost:8150/api/collections/config"}],"version":{"server":"v1.8.0-dirty"}}'
36
38
  http_version:
37
- recorded_at: Wed, 18 Jan 2017 18:16:43 GMT
38
- recorded_with: VCR 2.5.0
39
+ recorded_at: Mon, 23 Apr 2018 19:49:43 GMT
40
+ recorded_with: VCR 4.0.0