vagrant_cloud 3.0.5 → 3.1.0
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 +4 -4
- data/lib/vagrant_cloud/account.rb +2 -2
- data/lib/vagrant_cloud/box/provider.rb +14 -4
- data/lib/vagrant_cloud/box/version.rb +11 -4
- data/lib/vagrant_cloud/client.rb +105 -36
- data/lib/vagrant_cloud/search.rb +2 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4768031887b3a27585e8cf55091810654545e2aee475d7e2b2dbff927e8c7d6f
|
4
|
+
data.tar.gz: 480e6a69c2eac82185ff3cd9d90a30f00cd26e4a7d45c548ed2ba2785ecef96d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7343ea8f89e7e4ecb8f9f2e0f1f5478a37382e3c4de44bb61ec40fcebd18b5e65f302365cfa02aead507d28883a3ab561bf3af949f77418e46366043ee7eddea
|
7
|
+
data.tar.gz: 50b74d2dcf7f8671afa67bfec5d0fdeebdf40b51206a48f53a35f21b63f65674e1859bcdcaeb2f9d79e940870df50c75b4e6fc9b412b86b1c028bcac9c9f2bcd
|
@@ -75,7 +75,7 @@ module VagrantCloud
|
|
75
75
|
#
|
76
76
|
# @return [self]
|
77
77
|
def validate_token
|
78
|
-
client.
|
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.
|
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|
|
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(
|
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
|
data/lib/vagrant_cloud/client.rb
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
module VagrantCloud
|
2
2
|
class Client
|
3
3
|
include Logger
|
4
|
-
#
|
5
|
-
|
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 =
|
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 == 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,10 +97,19 @@ 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)
|
100
|
+
def request(path:, method: :get, params: {}, api_version: 2)
|
101
|
+
if path_base.nil? || !path.start_with?(path_base)
|
102
|
+
if !path_base.nil?
|
103
|
+
start_path = path_base
|
104
|
+
elsif api_version == 1
|
105
|
+
start_path = API_V1_PATH
|
106
|
+
elsif api_version == 2
|
107
|
+
start_path = API_V2_PATH
|
108
|
+
else
|
109
|
+
raise "Unsupported API version provided"
|
110
|
+
end
|
95
111
|
# Build the full path for the request and clean it
|
96
|
-
path = [
|
112
|
+
path = [start_path, path].compact.join("/").gsub(/\/{2,}/, "/")
|
97
113
|
end
|
98
114
|
method = method.to_s.downcase.to_sym
|
99
115
|
|
@@ -151,15 +167,17 @@ module VagrantCloud
|
|
151
167
|
# Submit a search on Vagrant Cloud
|
152
168
|
#
|
153
169
|
# @param [String] query Search query
|
170
|
+
# @param [String] architecture Limit results to only this architecture
|
154
171
|
# @param [String] provider Limit results to only this provider
|
155
172
|
# @param [String] sort Field to sort results ("downloads", "created", or "updated")
|
156
173
|
# @param [String] order Order to return sorted result ("desc" or "asc")
|
157
174
|
# @param [Integer] limit Number of results to return
|
158
175
|
# @param [Integer] page Page number of results to return
|
159
176
|
# @return [Hash]
|
160
|
-
def search(query: Data::Nil, provider: Data::Nil, sort: Data::Nil, order: Data::Nil, limit: Data::Nil, page: Data::Nil)
|
177
|
+
def search(query: Data::Nil, architecture: Data::Nil, provider: Data::Nil, sort: Data::Nil, order: Data::Nil, limit: Data::Nil, page: Data::Nil)
|
161
178
|
params = {
|
162
179
|
q: query,
|
180
|
+
architecture: architecture,
|
163
181
|
provider: provider,
|
164
182
|
sort: sort,
|
165
183
|
order: order,
|
@@ -189,14 +207,14 @@ module VagrantCloud
|
|
189
207
|
code: code
|
190
208
|
}
|
191
209
|
}
|
192
|
-
request(method: :post, path: "authenticate", params: params)
|
210
|
+
request(method: :post, path: "authenticate", params: params, api_version: 1)
|
193
211
|
end
|
194
212
|
|
195
213
|
# Delete the token currently in use
|
196
214
|
#
|
197
215
|
# @return [Hash] empty
|
198
216
|
def authentication_token_delete
|
199
|
-
request(method: :delete, path: "authenticate")
|
217
|
+
request(method: :delete, path: "authenticate", api_version: 1)
|
200
218
|
end
|
201
219
|
|
202
220
|
# Request a 2FA code is sent
|
@@ -217,7 +235,7 @@ module VagrantCloud
|
|
217
235
|
}
|
218
236
|
}
|
219
237
|
|
220
|
-
request(method: :post, path: "two-factor/request-code", params: params)
|
238
|
+
request(method: :post, path: "two-factor/request-code", params: params, api_version: 1)
|
221
239
|
end
|
222
240
|
|
223
241
|
# Validate the current token
|
@@ -367,9 +385,14 @@ module VagrantCloud
|
|
367
385
|
# @param [String] name Box name
|
368
386
|
# @param [String] version Box version
|
369
387
|
# @param [String] provider Provider name
|
388
|
+
# @param [String] architecture Architecture name
|
370
389
|
# @return [Hash] box version provider information
|
371
|
-
def box_version_provider_get(username:, name:, version:, provider:)
|
372
|
-
|
390
|
+
def box_version_provider_get(username:, name:, version:, provider:, architecture: nil)
|
391
|
+
req_path = ["/box", username, name, "version", version,
|
392
|
+
"provider", provider, architecture].compact.join("/")
|
393
|
+
api_version = architecture.nil? ? 1 : 2
|
394
|
+
|
395
|
+
request(method: :get, path: req_path, api_version: api_version)
|
373
396
|
end
|
374
397
|
|
375
398
|
# Create a new box version provider
|
@@ -378,17 +401,35 @@ module VagrantCloud
|
|
378
401
|
# @param [String] name Box name
|
379
402
|
# @param [String] version Box version
|
380
403
|
# @param [String] provider Provider name
|
404
|
+
# @param [String] architecture Architecture name
|
405
|
+
# @param [Boolean] default_architecture Flag architecture as default in named provider group
|
381
406
|
# @param [String] url Remote URL for box download
|
382
407
|
# @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
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
408
|
+
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)
|
409
|
+
provider_params = {
|
410
|
+
name: provider,
|
411
|
+
url: url,
|
412
|
+
checksum: checksum,
|
413
|
+
checksum_type: checksum_type
|
414
|
+
}
|
415
|
+
if architecture.nil?
|
416
|
+
api_version = 1
|
417
|
+
else
|
418
|
+
api_version = 2
|
419
|
+
provider_params.merge!(
|
420
|
+
architecture: architecture,
|
421
|
+
default_architecture: default_architecture
|
422
|
+
)
|
423
|
+
end
|
424
|
+
|
425
|
+
request(
|
426
|
+
method: :post,
|
427
|
+
path: "/box/#{username}/#{name}/version/#{version}/providers",
|
428
|
+
params: {
|
429
|
+
provider: provider_params
|
430
|
+
},
|
431
|
+
api_version: api_version
|
432
|
+
)
|
392
433
|
end
|
393
434
|
|
394
435
|
# Update an existing box version provider
|
@@ -397,18 +438,31 @@ module VagrantCloud
|
|
397
438
|
# @param [String] name Box name
|
398
439
|
# @param [String] version Box version
|
399
440
|
# @param [String] provider Provider name
|
441
|
+
# @param [String] architecture Current architecture name
|
442
|
+
# @param [String] new_architecture New architecture name to apply
|
400
443
|
# @param [String] url Remote URL for box download
|
401
444
|
# @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
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
checksum_type: checksum_type
|
409
|
-
}
|
445
|
+
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)
|
446
|
+
provider_params = {
|
447
|
+
name: provider,
|
448
|
+
url: url,
|
449
|
+
checksum: checksum,
|
450
|
+
checksum_type: checksum_type
|
410
451
|
}
|
411
|
-
|
452
|
+
if architecture.nil?
|
453
|
+
api_version = 1
|
454
|
+
else
|
455
|
+
api_version = 2
|
456
|
+
provider_params.merge!(
|
457
|
+
architecture: new_architecture,
|
458
|
+
default_architecture: default_architecture
|
459
|
+
)
|
460
|
+
end
|
461
|
+
|
462
|
+
req_path = ["/box", username, name, "version", version,
|
463
|
+
"provider", provider, architecture].compact.join("/")
|
464
|
+
|
465
|
+
request(method: :put, path: req_path, params: {provider: provider_params}, api_version: api_version)
|
412
466
|
end
|
413
467
|
|
414
468
|
# Delete an existing box version provider
|
@@ -417,9 +471,14 @@ module VagrantCloud
|
|
417
471
|
# @param [String] name Box name
|
418
472
|
# @param [String] version Box version
|
419
473
|
# @param [String] provider Provider name
|
474
|
+
# @param [String] architecture Architecture name
|
420
475
|
# @return [Hash] box version provider information
|
421
|
-
def box_version_provider_delete(username:, name:, version:, provider:)
|
422
|
-
|
476
|
+
def box_version_provider_delete(username:, name:, version:, provider:, architecture: nil)
|
477
|
+
req_path = ["/box", username, name, "version", version,
|
478
|
+
"provider", provider, architecture].compact.join("/")
|
479
|
+
api_version = architecture.nil? ? 1 : 2
|
480
|
+
|
481
|
+
request(method: :delete, path: req_path, api_version: api_version)
|
423
482
|
end
|
424
483
|
|
425
484
|
# Upload a box asset for an existing box version provider
|
@@ -428,9 +487,14 @@ module VagrantCloud
|
|
428
487
|
# @param [String] name Box name
|
429
488
|
# @param [String] version Box version
|
430
489
|
# @param [String] provider Provider name
|
490
|
+
# @param [String] architecture Architecture name
|
431
491
|
# @return [Hash] box version provider upload information (contains upload_path entry)
|
432
|
-
def box_version_provider_upload(username:, name:, version:, provider:)
|
433
|
-
|
492
|
+
def box_version_provider_upload(username:, name:, version:, provider:, architecture: nil)
|
493
|
+
req_path = ["/box", username, name, "version", version,
|
494
|
+
"provider", provider, architecture, "upload"].compact.join("/")
|
495
|
+
api_version = architecture.nil? ? 1 : 2
|
496
|
+
|
497
|
+
request(method: :get, path: req_path, api_version: api_version)
|
434
498
|
end
|
435
499
|
|
436
500
|
# Upload a box asset directly to the backend storage for an existing box version provider
|
@@ -439,9 +503,14 @@ module VagrantCloud
|
|
439
503
|
# @param [String] name Box name
|
440
504
|
# @param [String] version Box version
|
441
505
|
# @param [String] provider Provider name
|
506
|
+
# @param [String] architecture Architecture name
|
442
507
|
# @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
|
-
|
508
|
+
def box_version_provider_upload_direct(username:, name:, version:, provider:, architecture: nil)
|
509
|
+
req_path = ["/box", username, name, "version", version,
|
510
|
+
"provider", provider, architecture, "upload/direct"].compact.join("/")
|
511
|
+
api_version = architecture.nil? ? 1 : 2
|
512
|
+
|
513
|
+
request(method: :get, path: req_path, api_version: api_version)
|
445
514
|
end
|
446
515
|
|
447
516
|
protected
|
data/lib/vagrant_cloud/search.rb
CHANGED
@@ -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
|
4
|
+
version: 3.1.0
|
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:
|
12
|
+
date: 2023-09-25 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.
|
145
|
+
rubygems_version: 3.3.26
|
146
146
|
signing_key:
|
147
147
|
specification_version: 4
|
148
148
|
summary: Vagrant Cloud API Library
|