vagrant_cloud 3.0.5 → 3.1.1

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: 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