chef-api 0.10.0 → 0.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eb60acbcccaaf06781a238fb0698a48492bb89a9f953d19a6fa0ba5861d26e3f
4
- data.tar.gz: d646e7a1a4d1fae8c62f8cd107df7d2ed7fd6f2c02516b1adef0ea9c07c7bbd0
3
+ metadata.gz: 46c0549e102320d5807b0489a96c6b361ae8f9c394f850379f5eff6919d51401
4
+ data.tar.gz: 0e9c8f3684fa76bb9044e97b66cc77272adfe44b4612542cc8e4ca19d7370bf0
5
5
  SHA512:
6
- metadata.gz: 9f5050adf73f8f580274b32718524e50b813bb4a70c3c4664b182f95b759cd8f20ccd3604aaad5bb32b10a6d545e3f108d3d4fad5b482c9a08a3209ead137a7c
7
- data.tar.gz: 9c73fc775086eddb194614d1a0094e84311aeb9d027df08aff68061a9498f9a2af8977486e3664f58311f3d9efe02d09a9bb11c3b889e47062e2427337bb7ec8
6
+ metadata.gz: 232b3d9f101f12d57e6a8594faa2c7e595a05052bcd331df708a8221db1168529a4c204037d1dc8e7b160cc507aa21f4854f2ec0d3fe5db7a51c7669cf860a19
7
+ data.tar.gz: 30310067ede141b9c8873d01371560ceb3f1127b3da6d6a0f96772a0f266b47b25c1dbb3a480d035f97923545e030d3132b7eb8b2a0abe959b53aeab2ed139cb
@@ -1,21 +1,21 @@
1
- require 'json'
2
- require 'logify'
3
- require 'pathname'
4
- require 'chef-api/version'
1
+ require "json"
2
+ require "logify"
3
+ require "pathname"
4
+ require_relative "chef-api/version"
5
5
 
6
6
  module ChefAPI
7
- autoload :Authentication, 'chef-api/authentication'
8
- autoload :Boolean, 'chef-api/boolean'
9
- autoload :Configurable, 'chef-api/configurable'
10
- autoload :Connection, 'chef-api/connection'
11
- autoload :Defaults, 'chef-api/defaults'
12
- autoload :Error, 'chef-api/errors'
13
- autoload :ErrorCollection, 'chef-api/error_collection'
14
- autoload :Multipart, 'chef-api/multipart'
15
- autoload :Resource, 'chef-api/resource'
16
- autoload :Schema, 'chef-api/schema'
17
- autoload :Util, 'chef-api/util'
18
- autoload :Validator, 'chef-api/validator'
7
+ autoload :Authentication, "chef-api/authentication"
8
+ autoload :Boolean, "chef-api/boolean"
9
+ autoload :Configurable, "chef-api/configurable"
10
+ autoload :Connection, "chef-api/connection"
11
+ autoload :Defaults, "chef-api/defaults"
12
+ autoload :Error, "chef-api/errors"
13
+ autoload :ErrorCollection, "chef-api/error_collection"
14
+ autoload :Multipart, "chef-api/multipart"
15
+ autoload :Resource, "chef-api/resource"
16
+ autoload :Schema, "chef-api/schema"
17
+ autoload :Util, "chef-api/util"
18
+ autoload :Validator, "chef-api/validator"
19
19
 
20
20
  #
21
21
  # @todo Document this and why it's important
@@ -54,7 +54,7 @@ module ChefAPI
54
54
  # @return [Pathname]
55
55
  #
56
56
  def root
57
- @root ||= Pathname.new(File.expand_path('../../', __FILE__))
57
+ @root ||= Pathname.new(File.expand_path("../../", __FILE__))
58
58
  end
59
59
 
60
60
  #
@@ -93,4 +93,3 @@ end
93
93
 
94
94
  # Load the initial default values
95
95
  ChefAPI.setup
96
-
@@ -1,7 +1,7 @@
1
1
  module ChefAPI
2
2
  module AclAble
3
3
  def acl_path
4
- self.resource_path + '/_acl'
4
+ resource_path + "/_acl"
5
5
  end
6
6
 
7
7
  def load_acl
@@ -14,7 +14,7 @@ module ChefAPI
14
14
 
15
15
  def acl
16
16
  unless @acl
17
- self.load_acl
17
+ load_acl
18
18
  end
19
19
  @acl
20
20
  end
@@ -22,14 +22,14 @@ module ChefAPI
22
22
  def save!
23
23
  super
24
24
  if @acl != @orig_acl_data
25
- %w(create update grant read delete).each{|action|
25
+ %w{create update grant read delete}.each { |action|
26
26
  if @acl[action] != @orig_acl_data[action]
27
- url = "#{self.acl_path}/#{action}"
28
- self.class.connection.put(url, {action => @acl[action]}.to_json)
27
+ url = "#{acl_path}/#{action}"
28
+ self.class.connection.put(url, { action => @acl[action] }.to_json)
29
29
  end
30
30
  }
31
31
  end
32
32
  end
33
33
  end
34
-
34
+
35
35
  end
@@ -1,7 +1,7 @@
1
- require 'base64'
2
- require 'digest'
3
- require 'openssl'
4
- require 'time'
1
+ require "base64"
2
+ require "digest"
3
+ require "openssl"
4
+ require "time"
5
5
 
6
6
  #
7
7
  # DEBUG steps:
@@ -17,14 +17,14 @@ module ChefAPI
17
17
  # signing the full request body instead of just the uploaded file parameter.
18
18
  SIGN_FULL_BODY = false
19
19
 
20
- SIGNATURE = 'algorithm=sha1;version=1.0;'.freeze
20
+ SIGNATURE = "algorithm=sha1;version=1.0;".freeze
21
21
 
22
22
  # Headers
23
- X_OPS_SIGN = 'X-Ops-Sign'.freeze
24
- X_OPS_USERID = 'X-Ops-Userid'.freeze
25
- X_OPS_TIMESTAMP = 'X-Ops-Timestamp'.freeze
26
- X_OPS_CONTENT_HASH = 'X-Ops-Content-Hash'.freeze
27
- X_OPS_AUTHORIZATION = 'X-Ops-Authorization'.freeze
23
+ X_OPS_SIGN = "X-Ops-Sign".freeze
24
+ X_OPS_USERID = "X-Ops-Userid".freeze
25
+ X_OPS_TIMESTAMP = "X-Ops-Timestamp".freeze
26
+ X_OPS_CONTENT_HASH = "X-Ops-Content-Hash".freeze
27
+ X_OPS_AUTHORIZATION = "X-Ops-Authorization".freeze
28
28
 
29
29
  class << self
30
30
  #
@@ -96,9 +96,9 @@ module ChefAPI
96
96
  #
97
97
  def headers
98
98
  {
99
- X_OPS_SIGN => SIGNATURE,
100
- X_OPS_USERID => @user,
101
- X_OPS_TIMESTAMP => canonical_timestamp,
99
+ X_OPS_SIGN => SIGNATURE,
100
+ X_OPS_USERID => @user,
101
+ X_OPS_TIMESTAMP => canonical_timestamp,
102
102
  X_OPS_CONTENT_HASH => content_hash,
103
103
  }.merge(signature_lines)
104
104
  end
@@ -114,7 +114,7 @@ module ChefAPI
114
114
  return @content_hash if @content_hash
115
115
 
116
116
  if SIGN_FULL_BODY
117
- @content_hash = hash(@body || '').chomp
117
+ @content_hash = hash(@body || "").chomp
118
118
  else
119
119
  if @body.is_a?(Multipart::MultiIO)
120
120
  filepart = @body.ios.find { |io| io.is_a?(Multipart::MultiIO) }
@@ -122,7 +122,7 @@ module ChefAPI
122
122
 
123
123
  @content_hash = hash(file).chomp
124
124
  else
125
- @content_hash = hash(@body || '').chomp
125
+ @content_hash = hash(@body || "").chomp
126
126
  end
127
127
  end
128
128
 
@@ -152,13 +152,13 @@ module ChefAPI
152
152
 
153
153
  if @key.nil?
154
154
  log.warn "No private key given!"
155
- raise 'No private key given!'
155
+ raise "No private key given!"
156
156
  end
157
157
 
158
158
  if @key.is_a?(OpenSSL::PKey::RSA)
159
159
  log.debug "Detected private key is an OpenSSL Ruby object"
160
160
  @canonical_key = @key
161
- elsif @key =~ /(.+)\.pem$/ || File.exists?(File.expand_path(@key))
161
+ elsif @key =~ /(.+)\.pem$/ || File.exist?(File.expand_path(@key))
162
162
  log.debug "Detected private key is the path to a file"
163
163
  contents = File.read(File.expand_path(@key))
164
164
  @canonical_key = OpenSSL::PKey::RSA.new(contents)
@@ -170,7 +170,6 @@ module ChefAPI
170
170
  @canonical_key
171
171
  end
172
172
 
173
-
174
173
  #
175
174
  # The canonical path, with duplicate and trailing slashes removed. This
176
175
  # value is then hashed.
@@ -181,7 +180,7 @@ module ChefAPI
181
180
  # @return [String]
182
181
  #
183
182
  def canonical_path
184
- @canonical_path ||= hash(@path.squeeze('/').gsub(/(\/)+$/,'')).chomp
183
+ @canonical_path ||= hash(@path.squeeze("/").gsub(%r{(/)+$}, "")).chomp
185
184
  end
186
185
 
187
186
  #
@@ -11,20 +11,20 @@ module ChefAPI
11
11
  # @return [Array<Symbol>]
12
12
  #
13
13
  def keys
14
- @keys ||= [
15
- :endpoint,
16
- :flavor,
17
- :client,
18
- :key,
19
- :proxy_address,
20
- :proxy_password,
21
- :proxy_port,
22
- :proxy_username,
23
- :ssl_pem_file,
24
- :ssl_verify,
25
- :user_agent,
26
- :read_timeout,
27
- ]
14
+ @keys ||= %i{
15
+ endpoint
16
+ flavor
17
+ client
18
+ key
19
+ proxy_address
20
+ proxy_password
21
+ proxy_port
22
+ proxy_username
23
+ ssl_pem_file
24
+ ssl_verify
25
+ user_agent
26
+ read_timeout
27
+ }
28
28
  end
29
29
  end
30
30
 
@@ -1,7 +1,7 @@
1
- require 'net/http'
2
- require 'net/https'
3
- require 'openssl'
4
- require 'uri'
1
+ require "net/http"
2
+ require "net/https"
3
+ require "openssl"
4
+ require "uri"
5
5
 
6
6
  module ChefAPI
7
7
  #
@@ -37,19 +37,19 @@ module ChefAPI
37
37
  include Logify
38
38
  include ChefAPI::Configurable
39
39
 
40
- proxy :clients, 'Resource::Client'
41
- proxy :cookbooks, 'Resource::Cookbook'
42
- proxy :data_bags, 'Resource::DataBag'
43
- proxy :data_bag_item, 'Resource::DataBagItem'
44
- proxy :environments, 'Resource::Environment'
45
- proxy :groups, 'Resource::Group'
46
- proxy :nodes, 'Resource::Node'
47
- proxy :partial_search, 'Resource::PartialSearch'
48
- proxy :principals, 'Resource::Principal'
49
- proxy :roles, 'Resource::Role'
50
- proxy :search, 'Resource::Search'
51
- proxy :users, 'Resource::User'
52
- proxy :organizations, 'Resource::Organization'
40
+ proxy :clients, "Resource::Client"
41
+ proxy :cookbooks, "Resource::Cookbook"
42
+ proxy :data_bags, "Resource::DataBag"
43
+ proxy :data_bag_item, "Resource::DataBagItem"
44
+ proxy :environments, "Resource::Environment"
45
+ proxy :groups, "Resource::Group"
46
+ proxy :nodes, "Resource::Node"
47
+ proxy :partial_search, "Resource::PartialSearch"
48
+ proxy :principals, "Resource::Principal"
49
+ proxy :roles, "Resource::Role"
50
+ proxy :search, "Resource::Search"
51
+ proxy :users, "Resource::User"
52
+ proxy :organizations, "Resource::Organization"
53
53
 
54
54
  #
55
55
  # Create a new ChefAPI Connection with the given options. Any options
@@ -75,9 +75,9 @@ module ChefAPI
75
75
  # Use any options given, but fall back to the defaults set on the module
76
76
  ChefAPI::Configurable.keys.each do |key|
77
77
  value = if options[key].nil?
78
- ChefAPI.instance_variable_get(:"@#{key}")
79
- else
80
- options[key]
78
+ ChefAPI.instance_variable_get(:"@#{key}")
79
+ else
80
+ options[key]
81
81
  end
82
82
 
83
83
  instance_variable_set(:"@#{key}", value)
@@ -202,7 +202,7 @@ module ChefAPI
202
202
  log.debug "Chef flavor: #{flavor.inspect}"
203
203
 
204
204
  # Build the URI and request object from the given information
205
- if [:delete, :get].include?(verb)
205
+ if %i{delete get}.include?(verb)
206
206
  uri = build_uri(verb, path, data)
207
207
  else
208
208
  uri = build_uri(verb, path, params)
@@ -213,7 +213,7 @@ module ChefAPI
213
213
  add_request_headers(request)
214
214
 
215
215
  # Setup PATCH/POST/PUT
216
- if [:patch, :post, :put].include?(verb)
216
+ if %i{patch post put}.include?(verb)
217
217
  if data.respond_to?(:read)
218
218
  log.info "Detected file/io presence"
219
219
  request.body_stream = data
@@ -261,7 +261,7 @@ module ChefAPI
261
261
  connection.read_timeout = read_timeout if read_timeout
262
262
 
263
263
  # Apply SSL, if applicable
264
- if uri.scheme == 'https'
264
+ if uri.scheme == "https"
265
265
  # Turn on SSL
266
266
  connection.use_ssl = true
267
267
 
@@ -295,7 +295,7 @@ module ChefAPI
295
295
 
296
296
  case response
297
297
  when Net::HTTPRedirection
298
- redirect = URI.parse(response['location']).to_s
298
+ redirect = URI.parse(response["location"]).to_s
299
299
  log.debug "Performing HTTP redirect to #{redirect}"
300
300
  request(verb, redirect, data)
301
301
  when Net::HTTPSuccess
@@ -328,14 +328,14 @@ module ChefAPI
328
328
  # @return [URI]
329
329
  #
330
330
  def build_uri(verb, path, params = {})
331
- log.info "Building URI..."
331
+ log.info "Building URI..."
332
332
 
333
333
  # Add any query string parameters
334
334
  if querystring = to_query_string(params)
335
335
  log.debug "Detected verb deserves a querystring"
336
336
  log.debug "Building querystring using #{params.inspect}"
337
337
  log.debug "Compiled querystring is #{querystring.inspect}"
338
- path = [path, querystring].compact.join('?')
338
+ path = [path, querystring].compact.join("?")
339
339
  end
340
340
 
341
341
  # Parse the URI
@@ -378,7 +378,7 @@ module ChefAPI
378
378
  def to_query_string(hash)
379
379
  hash.map do |key, value|
380
380
  "#{URI.escape(key.to_s)}=#{URI.escape(value.to_s)}"
381
- end.join('&')[/.+/]
381
+ end.join("&")[/.+/]
382
382
  end
383
383
 
384
384
  private
@@ -397,7 +397,7 @@ module ChefAPI
397
397
  def success(response)
398
398
  log.info "Parsing response as success..."
399
399
 
400
- case response['Content-Type']
400
+ case response["Content-Type"]
401
401
  when /json/
402
402
  log.debug "Detected response as JSON"
403
403
  log.debug "Parsing response body as JSON"
@@ -418,7 +418,7 @@ module ChefAPI
418
418
  def error(response)
419
419
  log.info "Parsing response as error..."
420
420
 
421
- case response['Content-Type']
421
+ case response["Content-Type"]
422
422
  when /json/
423
423
  log.debug "Detected error response as JSON"
424
424
  log.debug "Parsing error response as JSON"
@@ -459,12 +459,12 @@ module ChefAPI
459
459
  log.info "Adding request headers..."
460
460
 
461
461
  headers = {
462
- 'Accept' => 'application/json',
463
- 'Content-Type' => 'application/json',
464
- 'Connection' => 'keep-alive',
465
- 'Keep-Alive' => '30',
466
- 'User-Agent' => user_agent,
467
- 'X-Chef-Version' => '11.4.0',
462
+ "Accept" => "application/json",
463
+ "Content-Type" => "application/json",
464
+ "Connection" => "keep-alive",
465
+ "Keep-Alive" => "30",
466
+ "User-Agent" => user_agent,
467
+ "X-Chef-Version" => "11.4.0",
468
468
  }
469
469
 
470
470
  headers.each do |key, value|
@@ -491,7 +491,7 @@ module ChefAPI
491
491
  key: key,
492
492
  verb: verb,
493
493
  path: path,
494
- body: request.body || request.body_stream,
494
+ body: request.body || request.body_stream
495
495
  )
496
496
 
497
497
  authentication.headers.each do |key, value|
@@ -1,11 +1,11 @@
1
- require 'chef-api/version'
2
- require 'pathname'
3
- require 'json'
1
+ require_relative "version"
2
+ require "pathname"
3
+ require "json"
4
4
 
5
5
  module ChefAPI
6
6
  module Defaults
7
7
  # Default API endpoint
8
- ENDPOINT = 'https://api.opscode.com/'.freeze
8
+ ENDPOINT = "https://api.opscode.com/".freeze
9
9
 
10
10
  # Default User Agent header string
11
11
  USER_AGENT = "ChefAPI Ruby Gem #{ChefAPI::VERSION}".freeze
@@ -37,7 +37,7 @@ module ChefAPI
37
37
  if result = chef_api_config_path
38
38
  Pathname(result).expand_path
39
39
  else
40
- Pathname('')
40
+ Pathname("")
41
41
  end
42
42
  end
43
43
 
@@ -46,8 +46,8 @@ module ChefAPI
46
46
  #
47
47
  # @return [String, nil] Path to config file, or nil
48
48
  def chef_api_config_path
49
- ENV['CHEF_API_CONFIG'] || if ENV.key?('HOME')
50
- '~/.chef-api'
49
+ ENV["CHEF_API_CONFIG"] || if ENV.key?("HOME")
50
+ "~/.chef-api"
51
51
  else
52
52
  nil
53
53
  end
@@ -70,7 +70,7 @@ module ChefAPI
70
70
  # @return [String] (default: +https://api.opscode.com/+)
71
71
  #
72
72
  def endpoint
73
- ENV['CHEF_API_ENDPOINT'] || config['CHEF_API_ENDPOINT'] || ENDPOINT
73
+ ENV["CHEF_API_ENDPOINT"] || config["CHEF_API_ENDPOINT"] || ENDPOINT
74
74
  end
75
75
 
76
76
  #
@@ -85,12 +85,12 @@ module ChefAPI
85
85
  # @return [true, false]
86
86
  #
87
87
  def flavor
88
- if ENV['CHEF_API_FLAVOR']
89
- ENV['CHEF_API_FLAVOR'].to_sym
90
- elsif config['CHEF_API_FLAVOR']
91
- config['CHEF_API_FLAVOR']
88
+ if ENV["CHEF_API_FLAVOR"]
89
+ ENV["CHEF_API_FLAVOR"].to_sym
90
+ elsif config["CHEF_API_FLAVOR"]
91
+ config["CHEF_API_FLAVOR"]
92
92
  else
93
- endpoint.include?('/organizations') ? :enterprise : :open_source
93
+ endpoint.include?("/organizations") ? :enterprise : :open_source
94
94
  end
95
95
  end
96
96
 
@@ -100,7 +100,7 @@ module ChefAPI
100
100
  # @return [String]
101
101
  #
102
102
  def user_agent
103
- ENV['CHEF_API_USER_AGENT'] || config['CHEF_API_USER_AGENT'] || USER_AGENT
103
+ ENV["CHEF_API_USER_AGENT"] || config["CHEF_API_USER_AGENT"] || USER_AGENT
104
104
  end
105
105
 
106
106
  #
@@ -111,7 +111,7 @@ module ChefAPI
111
111
  # @return [String, nil]
112
112
  #
113
113
  def client
114
- ENV['CHEF_API_CLIENT'] || config['CHEF_API_CLIENT']
114
+ ENV["CHEF_API_CLIENT"] || config["CHEF_API_CLIENT"]
115
115
  end
116
116
 
117
117
  #
@@ -122,15 +122,16 @@ module ChefAPI
122
122
  # @return [String, nil]
123
123
  #
124
124
  def key
125
- ENV['CHEF_API_KEY'] || config['CHEF_API_KEY']
125
+ ENV["CHEF_API_KEY"] || config["CHEF_API_KEY"]
126
126
  end
127
+
127
128
  #
128
129
  # The HTTP Proxy server address as a string
129
130
  #
130
131
  # @return [String, nil]
131
132
  #
132
133
  def proxy_address
133
- ENV['CHEF_API_PROXY_ADDRESS'] || config['CHEF_API_PROXY_ADDRESS']
134
+ ENV["CHEF_API_PROXY_ADDRESS"] || config["CHEF_API_PROXY_ADDRESS"]
134
135
  end
135
136
 
136
137
  #
@@ -139,7 +140,7 @@ module ChefAPI
139
140
  # @return [String, nil]
140
141
  #
141
142
  def proxy_password
142
- ENV['CHEF_API_PROXY_PASSWORD'] || config['CHEF_API_PROXY_PASSWORD']
143
+ ENV["CHEF_API_PROXY_PASSWORD"] || config["CHEF_API_PROXY_PASSWORD"]
143
144
  end
144
145
 
145
146
  #
@@ -148,7 +149,7 @@ module ChefAPI
148
149
  # @return [String, nil]
149
150
  #
150
151
  def proxy_port
151
- ENV['CHEF_API_PROXY_PORT'] || config['CHEF_API_PROXY_PORT']
152
+ ENV["CHEF_API_PROXY_PORT"] || config["CHEF_API_PROXY_PORT"]
152
153
  end
153
154
 
154
155
  #
@@ -157,7 +158,7 @@ module ChefAPI
157
158
  # @return [String, nil]
158
159
  #
159
160
  def proxy_username
160
- ENV['CHEF_API_PROXY_USERNAME'] || config['CHEF_API_PROXY_USERNAME']
161
+ ENV["CHEF_API_PROXY_USERNAME"] || config["CHEF_API_PROXY_USERNAME"]
161
162
  end
162
163
 
163
164
  #
@@ -166,7 +167,7 @@ module ChefAPI
166
167
  # @return [String, nil]
167
168
  #
168
169
  def ssl_pem_file
169
- ENV['CHEF_API_SSL_PEM_FILE'] || config['CHEF_API_SSL_PEM_FILE']
170
+ ENV["CHEF_API_SSL_PEM_FILE"] || config["CHEF_API_SSL_PEM_FILE"]
170
171
  end
171
172
 
172
173
  #
@@ -175,10 +176,10 @@ module ChefAPI
175
176
  # @return [true, false]
176
177
  #
177
178
  def ssl_verify
178
- if ENV['CHEF_API_SSL_VERIFY'].nil? && config['CHEF_API_SSL_VERIFY'].nil?
179
+ if ENV["CHEF_API_SSL_VERIFY"].nil? && config["CHEF_API_SSL_VERIFY"].nil?
179
180
  true
180
181
  else
181
- %w[t y].include?(ENV['CHEF_API_SSL_VERIFY'].downcase[0]) || config['CHEF_API_SSL_VERIFY']
182
+ %w{t y}.include?(ENV["CHEF_API_SSL_VERIFY"].downcase[0]) || config["CHEF_API_SSL_VERIFY"]
182
183
  end
183
184
  end
184
185
 
@@ -188,7 +189,7 @@ module ChefAPI
188
189
  # @return [Integer, nil]
189
190
  #
190
191
  def read_timeout
191
- timeout_from_env = ENV['CHEF_API_READ_TIMEOUT'] || config['CHEF_API_READ_TIMEOUT']
192
+ timeout_from_env = ENV["CHEF_API_READ_TIMEOUT"] || config["CHEF_API_READ_TIMEOUT"]
192
193
 
193
194
  Integer(timeout_from_env) unless timeout_from_env.nil?
194
195
  end