vagrant_cloud 3.0.5 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|