vagrant_cloud 3.0.5 → 3.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4573b763dfa1cbdfb1070d7b9f5ba9db24f56145ea7ce94cc65ff64748d39bad
4
- data.tar.gz: 3695499ffb77f98444b8435ae48a36a2ac09041c9ffe1fb07ca1447b7eadb179
3
+ metadata.gz: 06ac337d41c05fa0ab3f4dba19eb4b48369b7b21e87adea9beaf22c24d7a06ec
4
+ data.tar.gz: 20c9e7e4c6c6a045a34a5509e05e626a159069d76993d3f70bdf2f333a219083
5
5
  SHA512:
6
- metadata.gz: 305dd27dcda8c280620e52d0675aff2a6c3252d0b49a06cd23633aae306a8b1d12e9d1b25da8f2c71b9a2898797201dc60ef6f6a4fb8cdf8d5306e4b40cdd945
7
- data.tar.gz: 8e02785ca219228988b0c77fd07ca06a149c259a263eda3aa70e19f5d9dfa2350af01f7727007c39defe8b392c7809fa0ab339def0113d2acd3dea206b11115c
6
+ metadata.gz: 0c4fd65d40092ff9161d5330afda571efc2d852b23aedf7f8327d803eb2e096792999ebb3f69dd3cbce4663d5c6b79db121531737258084e18c634f626d25d35
7
+ data.tar.gz: 69eb59e4a61257533baf2707b998b29a6f88f8b37a4c54f6dea8daca3f19e0c93d479d68ae42a277f1ee3c972622625b380fbd7f5db9bfd8e212a583fa706118
@@ -75,7 +75,7 @@ module VagrantCloud
75
75
  #
76
76
  # @return [self]
77
77
  def validate_token
78
- client.request(path: "authenticate")
78
+ client.authentication_token_validate
79
79
  self
80
80
  end
81
81
 
@@ -104,7 +104,7 @@ module VagrantCloud
104
104
 
105
105
  def setup!
106
106
  if client.access_token
107
- r = client.request(path: "authenticate")
107
+ r = client.authentication_token_validate
108
108
  @username = r.dig(:user, :username)
109
109
  end
110
110
  end
@@ -14,9 +14,9 @@ module VagrantCloud
14
14
  attr_required :name
15
15
  attr_optional :hosted, :created_at, :updated_at,
16
16
  :checksum, :checksum_type, :original_url, :download_url,
17
- :url
17
+ :url, :architecture, :default_architecture
18
18
 
19
- attr_mutable :url, :checksum, :checksum_type
19
+ attr_mutable :url, :checksum, :checksum_type, :architecture, :default_architecture
20
20
 
21
21
  def initialize(version:, **opts)
22
22
  if !version.is_a?(Version)
@@ -35,7 +35,8 @@ module VagrantCloud
35
35
  username: version.box.username,
36
36
  name: version.box.name,
37
37
  version: version.version,
38
- provider: name
38
+ provider: name,
39
+ architecture: architecture
39
40
  )
40
41
  pv = version.providers.dup
41
42
  pv.delete(self)
@@ -87,7 +88,8 @@ module VagrantCloud
87
88
  username: version.box.username,
88
89
  name: version.box.name,
89
90
  version: version.version,
90
- provider: name
91
+ provider: name,
92
+ architecture: architecture,
91
93
  }
92
94
  if direct
93
95
  r = version.box.organization.account.client.box_version_provider_upload_direct(**req_args)
@@ -161,9 +163,17 @@ module VagrantCloud
161
163
  provider: name,
162
164
  checksum: checksum,
163
165
  checksum_type: checksum_type,
166
+ architecture: architecture,
167
+ default_architecture: default_architecture,
164
168
  url: url
165
169
  }
166
170
  if exist?
171
+ # If the provider already exists, use the original architecture
172
+ # value for locating the existing record and use the current
173
+ # architecture for the new_architecture value so it can be updated
174
+ # properly
175
+ req_args[:architecture] = data[:architecture]
176
+ req_args[:new_architecture] = architecture
167
177
  result = version.box.organization.account.client.box_version_provider_update(**req_args)
168
178
  else
169
179
  result = version.box.organization.account.client.box_version_provider_create(**req_args)
@@ -90,12 +90,19 @@ module VagrantCloud
90
90
  #
91
91
  # @param [String] pname Name of provider
92
92
  # @return [Provider]
93
- def add_provider(pname)
94
- if providers.any? { |p| p.name == pname }
93
+ def add_provider(pname, architecture=nil)
94
+ if providers.any? { |p|
95
+ p.name == pname &&
96
+ (architecture.nil? || p.architecture == architecture)
97
+ }
95
98
  raise Error::BoxError::VersionProviderExistsError,
96
- "Provider #{pname} already exists for box #{box.tag} version #{version}"
99
+ "Provider #{pname} already exists for box #{box.tag} version #{version} (#{architecture})"
97
100
  end
98
- pv = Provider.new(version: self, name: pname)
101
+ pv = Provider.new(
102
+ version: self,
103
+ name: pname,
104
+ )
105
+ pv.architecture = architecture if architecture
99
106
  clean(data: {providers: providers + [pv]})
100
107
  pv
101
108
  end
@@ -1,8 +1,12 @@
1
1
  module VagrantCloud
2
2
  class Client
3
3
  include Logger
4
- # Base Vagrant Cloud API URL
5
- DEFAULT_URL = 'https://vagrantcloud.com/api/v1'.freeze
4
+ # Path to the v1 API
5
+ API_V1_PATH = "/api/v1".freeze
6
+ # Path to the v2 API
7
+ API_V2_PATH = "/api/v2".freeze
8
+ # Default host URL
9
+ API_DEFAULT_URL = "https://vagrantcloud.com".freeze
6
10
  # Valid methods that can be retried
7
11
  IDEMPOTENT_METHODS = [:get, :head].freeze
8
12
  # Number or allowed retries
@@ -41,10 +45,13 @@ module VagrantCloud
41
45
  # @param [Instrumentor::Core] instrumentor Instrumentor to use
42
46
  # @return [Client]
43
47
  def initialize(access_token: nil, url_base: nil, retry_count: nil, retry_interval: nil, instrumentor: nil)
44
- url_base = DEFAULT_URL if url_base.nil?
48
+ url_base = API_DEFAULT_URL if url_base.nil?
45
49
  remote_url = URI.parse(url_base)
46
50
  @url_base = "#{remote_url.scheme}://#{remote_url.host}"
47
51
  @path_base = remote_url.path
52
+ if @path_base.empty? || @path_base == API_V1_PATH || @path_base == API_V2_PATH
53
+ @path_base = nil
54
+ end
48
55
  @access_token = access_token.dup.freeze if access_token
49
56
  if !@access_token && ENV["VAGRANT_CLOUD_TOKEN"]
50
57
  @access_token = ENV["VAGRANT_CLOUD_TOKEN"].dup.freeze
@@ -90,11 +97,29 @@ module VagrantCloud
90
97
  # @param [String, URI] path Path of request
91
98
  # @param [Hash] params Parameters to send with request
92
99
  # @return [Hash]
93
- def request(path:, method: :get, params: {})
94
- if !path.start_with?(path_base)
95
- # Build the full path for the request and clean it
96
- path = [path_base, path].compact.join("/").gsub(/\/{2,}/, "/")
100
+ def request(path:, method: :get, params: {}, api_version: 2)
101
+ # Apply any path modifications that are required
102
+ catch(:done) do
103
+ # If a base path is defined, and the provided path
104
+ # is already properly prefixed with it, do nothing.
105
+ throw :done if !path_base.nil? && path.start_with?(path_base)
106
+
107
+ # If the path does not include an API version
108
+ # prefix, add it now.
109
+ if !path.start_with?(API_V1_PATH) && !path.start_with?(API_V2_PATH)
110
+ case api_version
111
+ when 1
112
+ start_path = API_V1_PATH
113
+ when 2
114
+ start_path = API_V2_PATH
115
+ else
116
+ raise ArgumentError, "Unsupported API version provided"
117
+ end
118
+ end
119
+
120
+ path = [path_base, start_path, path].compact.join("/").gsub(/\/{2,}/, "/")
97
121
  end
122
+
98
123
  method = method.to_s.downcase.to_sym
99
124
 
100
125
  # Build base request parameters
@@ -151,15 +176,17 @@ module VagrantCloud
151
176
  # Submit a search on Vagrant Cloud
152
177
  #
153
178
  # @param [String] query Search query
179
+ # @param [String] architecture Limit results to only this architecture
154
180
  # @param [String] provider Limit results to only this provider
155
181
  # @param [String] sort Field to sort results ("downloads", "created", or "updated")
156
182
  # @param [String] order Order to return sorted result ("desc" or "asc")
157
183
  # @param [Integer] limit Number of results to return
158
184
  # @param [Integer] page Page number of results to return
159
185
  # @return [Hash]
160
- def search(query: Data::Nil, provider: Data::Nil, sort: Data::Nil, order: Data::Nil, limit: Data::Nil, page: Data::Nil)
186
+ def search(query: Data::Nil, architecture: Data::Nil, provider: Data::Nil, sort: Data::Nil, order: Data::Nil, limit: Data::Nil, page: Data::Nil)
161
187
  params = {
162
188
  q: query,
189
+ architecture: architecture,
163
190
  provider: provider,
164
191
  sort: sort,
165
192
  order: order,
@@ -189,14 +216,14 @@ module VagrantCloud
189
216
  code: code
190
217
  }
191
218
  }
192
- request(method: :post, path: "authenticate", params: params)
219
+ request(method: :post, path: "authenticate", params: params, api_version: 1)
193
220
  end
194
221
 
195
222
  # Delete the token currently in use
196
223
  #
197
224
  # @return [Hash] empty
198
225
  def authentication_token_delete
199
- request(method: :delete, path: "authenticate")
226
+ request(method: :delete, path: "authenticate", api_version: 1)
200
227
  end
201
228
 
202
229
  # Request a 2FA code is sent
@@ -217,7 +244,7 @@ module VagrantCloud
217
244
  }
218
245
  }
219
246
 
220
- request(method: :post, path: "two-factor/request-code", params: params)
247
+ request(method: :post, path: "two-factor/request-code", params: params, api_version: 1)
221
248
  end
222
249
 
223
250
  # Validate the current token
@@ -367,9 +394,14 @@ module VagrantCloud
367
394
  # @param [String] name Box name
368
395
  # @param [String] version Box version
369
396
  # @param [String] provider Provider name
397
+ # @param [String] architecture Architecture name
370
398
  # @return [Hash] box version provider information
371
- def box_version_provider_get(username:, name:, version:, provider:)
372
- request(method: :get, path: "/box/#{username}/#{name}/version/#{version}/provider/#{provider}")
399
+ def box_version_provider_get(username:, name:, version:, provider:, architecture: nil)
400
+ req_path = ["/box", username, name, "version", version,
401
+ "provider", provider, architecture].compact.join("/")
402
+ api_version = architecture.nil? ? 1 : 2
403
+
404
+ request(method: :get, path: req_path, api_version: api_version)
373
405
  end
374
406
 
375
407
  # Create a new box version provider
@@ -378,17 +410,35 @@ module VagrantCloud
378
410
  # @param [String] name Box name
379
411
  # @param [String] version Box version
380
412
  # @param [String] provider Provider name
413
+ # @param [String] architecture Architecture name
414
+ # @param [Boolean] default_architecture Flag architecture as default in named provider group
381
415
  # @param [String] url Remote URL for box download
382
416
  # @return [Hash] box version provider information
383
- def box_version_provider_create(username:, name:, version:, provider:, url: Data::Nil, checksum: Data::Nil, checksum_type: Data::Nil)
384
- request(method: :post, path: "/box/#{username}/#{name}/version/#{version}/providers", params: {
385
- provider: {
386
- name: provider,
387
- url: url,
388
- checksum: checksum,
389
- checksum_type: checksum_type
390
- }
391
- })
417
+ def box_version_provider_create(username:, name:, version:, provider:, architecture: nil, default_architecture: Data::Nil, url: Data::Nil, checksum: Data::Nil, checksum_type: Data::Nil)
418
+ provider_params = {
419
+ name: provider,
420
+ url: url,
421
+ checksum: checksum,
422
+ checksum_type: checksum_type
423
+ }
424
+ if architecture.nil?
425
+ api_version = 1
426
+ else
427
+ api_version = 2
428
+ provider_params.merge!(
429
+ architecture: architecture,
430
+ default_architecture: default_architecture
431
+ )
432
+ end
433
+
434
+ request(
435
+ method: :post,
436
+ path: "/box/#{username}/#{name}/version/#{version}/providers",
437
+ params: {
438
+ provider: provider_params
439
+ },
440
+ api_version: api_version
441
+ )
392
442
  end
393
443
 
394
444
  # Update an existing box version provider
@@ -397,18 +447,31 @@ module VagrantCloud
397
447
  # @param [String] name Box name
398
448
  # @param [String] version Box version
399
449
  # @param [String] provider Provider name
450
+ # @param [String] architecture Current architecture name
451
+ # @param [String] new_architecture New architecture name to apply
400
452
  # @param [String] url Remote URL for box download
401
453
  # @return [Hash] box version provider information
402
- def box_version_provider_update(username:, name:, version:, provider:, url: Data::Nil, checksum: Data::Nil, checksum_type: Data::Nil)
403
- params = {
404
- provider: {
405
- name: provider,
406
- url: url,
407
- checksum: checksum,
408
- checksum_type: checksum_type
409
- }
454
+ def box_version_provider_update(username:, name:, version:, provider:, architecture: nil, new_architecture: Data::Nil, default_architecture: Data::Nil, url: Data::Nil, checksum: Data::Nil, checksum_type: Data::Nil)
455
+ provider_params = {
456
+ name: provider,
457
+ url: url,
458
+ checksum: checksum,
459
+ checksum_type: checksum_type
410
460
  }
411
- request(method: :put, path: "/box/#{username}/#{name}/version/#{version}/provider/#{provider}", params: params)
461
+ if architecture.nil?
462
+ api_version = 1
463
+ else
464
+ api_version = 2
465
+ provider_params.merge!(
466
+ architecture: new_architecture,
467
+ default_architecture: default_architecture
468
+ )
469
+ end
470
+
471
+ req_path = ["/box", username, name, "version", version,
472
+ "provider", provider, architecture].compact.join("/")
473
+
474
+ request(method: :put, path: req_path, params: {provider: provider_params}, api_version: api_version)
412
475
  end
413
476
 
414
477
  # Delete an existing box version provider
@@ -417,9 +480,14 @@ module VagrantCloud
417
480
  # @param [String] name Box name
418
481
  # @param [String] version Box version
419
482
  # @param [String] provider Provider name
483
+ # @param [String] architecture Architecture name
420
484
  # @return [Hash] box version provider information
421
- def box_version_provider_delete(username:, name:, version:, provider:)
422
- request(method: :delete, path: "/box/#{username}/#{name}/version/#{version}/provider/#{provider}")
485
+ def box_version_provider_delete(username:, name:, version:, provider:, architecture: nil)
486
+ req_path = ["/box", username, name, "version", version,
487
+ "provider", provider, architecture].compact.join("/")
488
+ api_version = architecture.nil? ? 1 : 2
489
+
490
+ request(method: :delete, path: req_path, api_version: api_version)
423
491
  end
424
492
 
425
493
  # Upload a box asset for an existing box version provider
@@ -428,9 +496,14 @@ module VagrantCloud
428
496
  # @param [String] name Box name
429
497
  # @param [String] version Box version
430
498
  # @param [String] provider Provider name
499
+ # @param [String] architecture Architecture name
431
500
  # @return [Hash] box version provider upload information (contains upload_path entry)
432
- def box_version_provider_upload(username:, name:, version:, provider:)
433
- request(method: :get, path: "/box/#{username}/#{name}/version/#{version}/provider/#{provider}/upload")
501
+ def box_version_provider_upload(username:, name:, version:, provider:, architecture: nil)
502
+ req_path = ["/box", username, name, "version", version,
503
+ "provider", provider, architecture, "upload"].compact.join("/")
504
+ api_version = architecture.nil? ? 1 : 2
505
+
506
+ request(method: :get, path: req_path, api_version: api_version)
434
507
  end
435
508
 
436
509
  # Upload a box asset directly to the backend storage for an existing box version provider
@@ -439,9 +512,14 @@ module VagrantCloud
439
512
  # @param [String] name Box name
440
513
  # @param [String] version Box version
441
514
  # @param [String] provider Provider name
515
+ # @param [String] architecture Architecture name
442
516
  # @return [Hash] box version provider upload information (contains upload_path and callback entries)
443
- def box_version_provider_upload_direct(username:, name:, version:, provider:)
444
- request(method: :get, path: "/box/#{username}/#{name}/version/#{version}/provider/#{provider}/upload/direct")
517
+ def box_version_provider_upload_direct(username:, name:, version:, provider:, architecture: nil)
518
+ req_path = ["/box", username, name, "version", version,
519
+ "provider", provider, architecture, "upload/direct"].compact.join("/")
520
+ api_version = architecture.nil? ? 1 : 2
521
+
522
+ request(method: :get, path: req_path, api_version: api_version)
445
523
  end
446
524
 
447
525
  protected
@@ -43,10 +43,11 @@ module VagrantCloud
43
43
  # @param [String] limit
44
44
  # @param [String] page
45
45
  # @return [Response::Search]
46
- def search(query: Data::Nil, provider: Data::Nil, sort: Data::Nil, order: Data::Nil, limit: Data::Nil, page: Data::Nil)
46
+ def search(query: Data::Nil, architecture: Data::Nil, provider: Data::Nil, sort: Data::Nil, order: Data::Nil, limit: Data::Nil, page: Data::Nil)
47
47
  @lock.synchronize do
48
48
  @params = {
49
49
  query: query,
50
+ architecture: architecture,
50
51
  provider: provider,
51
52
  sort: sort,
52
53
  order: order,
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant_cloud
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.5
4
+ version: 3.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - HashiCorp
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-07-22 00:00:00.000000000 Z
12
+ date: 2024-01-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: excon
@@ -142,7 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
142
142
  - !ruby/object:Gem::Version
143
143
  version: '0'
144
144
  requirements: []
145
- rubygems_version: 3.2.22
145
+ rubygems_version: 3.3.26
146
146
  signing_key:
147
147
  specification_version: 4
148
148
  summary: Vagrant Cloud API Library