vagrant_cloud 0.4.2 → 0.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 655b657611c9e2117dfba4baf196bf3c0a6bea0f
4
- data.tar.gz: ef550822667b5fcb60b2c2b62d8bff3a21abc3f0
3
+ metadata.gz: 0aae9f88334654ff9910a7e97d01c654064a4660
4
+ data.tar.gz: 8ddcd0afd5207d258213585b899ac5b906e962bd
5
5
  SHA512:
6
- metadata.gz: 2599abbfafadf62808ff6753033c1bdd5f12e30261083cca5ecddb41312c2d6a7da6feb905e9d211aba44c9d1e1d6f32cd6c3ccba123e66a0da847e9e92c9276
7
- data.tar.gz: e23e005d8a806d6741b3ac913596ff99b557a97dd177495c9393b69edbef6f46b8c6fe63a9e0465e78b459afd65b25265ab95274d23e9ec0eee2c6130dcd5b1a
6
+ metadata.gz: 071dcd95dd7900acd92149d6ecee33be5c467d3306aa6aad118facbe6cb71b2e58b66b0482147d83e16ac32a7dedf5bf19e0066e7808f11a5988e0c9fc9ace43
7
+ data.tar.gz: 2b9a62f4de7b920e1326c46b6651270473e5417457469924acd7a8db1c7599a006504e4b8118c8339514ce3327657ac7e7b0a19ae0cb5849a0a06a21bc9b6219
data/README.md CHANGED
@@ -21,3 +21,38 @@ provider = version.ensure_provider('virtualbox', 'http://example.com/foo.box')
21
21
  version.release
22
22
  puts provider.download_url
23
23
  ```
24
+
25
+ Example CLI usage:
26
+ Create a version and provider within an existing Box, upload a file to be hosted by Vagrant/Atlas, and release the version
27
+ ```sh
28
+ vagrant_cloud create_version --username $USERNAME --token $VAGRANT_CLOUD_TOKEN --box $BOX_NAME --version $BOX_VERSION
29
+ vagrant_cloud create_provider --username $USERNAME --token $VAGRANT_CLOUD_TOKEN --box $BOX_NAME --version $BOX_VERSION
30
+ vagrant_cloud upload_file --username $USERNAME --token $VAGRANT_CLOUD_TOKEN --box $BOX_NAME --version $BOX_VERSION --provider_file_path $PACKAGE_PATH
31
+ vagrant_cloud release_version --username $USERNAME --token $VAGRANT_CLOUD_TOKEN --box $BOX_NAME --version $BOX_VERSION
32
+ ```
33
+ If you installed vagrant_cloud with bundler, then you may have to invoke using `bundle exec vagrant_cloud`
34
+
35
+ Development & Contributing
36
+ --------------------------
37
+ Pull requests are very welcome!
38
+
39
+ Install dependencies:
40
+ ```
41
+ bundle install
42
+ ```
43
+
44
+ Run the tests:
45
+ ```
46
+ bundle exec rspec
47
+ ```
48
+
49
+ Check the code syntax:
50
+ ```
51
+ bundle exec rubocop
52
+ ```
53
+
54
+ Release a new version:
55
+
56
+ 1. Bump the version in `vagrant_cloud.gemspec`, merge to master.
57
+ 2. Push a new tag to master.
58
+ 3. Release to RubyGems with `bundle exec rake release`.
data/bin/vagrant_cloud ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'vagrant_cloud'
4
+
5
+ VagrantCloud::Cli.start(ARGV)
@@ -0,0 +1,65 @@
1
+ require 'thor'
2
+
3
+ module VagrantCloud
4
+ class Cli < Thor
5
+ package_name 'VagrantCloud'
6
+
7
+ class_option :username, alias: '-u', required: true, desc: 'Vagrant Cloud username'
8
+ class_option :token, alias: '-t', required: true, desc: 'Vagrant Cloud access token'
9
+ class_option :box, alias: '-b', required: true, desc: 'name of the box'
10
+ class_option :verbose, type: :boolean
11
+
12
+ desc 'create_version', 'creates a new version within a given box'
13
+ method_option :version, alias: '-v', required: true, desc: 'version within the box'
14
+ def create_version
15
+ version = current_box.create_version(options[:version])
16
+ puts "created #{version.version} of box #{options[:box]}; current status is #{version.status}" if options[:verbose]
17
+ version
18
+ end
19
+
20
+ desc 'release_version', 'release the specified version within a given box'
21
+ method_option :version, alias: '-v', required: true, desc: 'version within the box'
22
+ def release_version
23
+ version = current_version
24
+ version.release
25
+ puts "Box #{options[:box]} / version: #{version.version}; current status is #{version.status}" if options[:verbose]
26
+ true
27
+ end
28
+
29
+ desc 'create_provider', 'creates a provider within a given box and version'
30
+ method_option :version, alias: '-v', required: true, desc: 'version within the box'
31
+ method_option :provider, alias: '-p', default: 'virtualbox', desc: 'the provider for the box; default: virtualbox'
32
+ method_option :provider_url, alias: '-pu', desc: 'URL to the file for remote hosting; do not include if you intend to upload a file subsequently'
33
+ def create_provider
34
+ provider = current_version.create_provider(options[:provider], options[:provider_url])
35
+ puts "created #{provider.data['name']} provider within version #{provider.version.version}" if options[:verbose]
36
+ provider
37
+ end
38
+
39
+ desc 'upload_file', 'upload a file for Atlas to host to an existing version and provider'
40
+ method_option :version, alias: '-v', required: true, desc: 'version within the box'
41
+ method_option :provider, alias: '-p', default: 'virtualbox', desc: 'the provider for the box; default: virtualbox'
42
+ method_option :provider_file_path, alias: '-pfp', required: true, desc: 'path to file to be uploaded for Atlast hosting'
43
+ def upload_file
44
+ get_provider(options[:provider]).upload_file(options[:provider_file_path])
45
+ end
46
+
47
+ private
48
+
49
+ def current_account
50
+ VagrantCloud::Account.new(options[:username], options[:token])
51
+ end
52
+
53
+ def current_box
54
+ current_account.get_box(options[:box])
55
+ end
56
+
57
+ def current_version
58
+ current_box.get_version(options[:version])
59
+ end
60
+
61
+ def get_provider(provider_str)
62
+ current_version.get_provider(provider_str)
63
+ end
64
+ end
65
+ end
@@ -25,17 +25,34 @@ module VagrantCloud
25
25
 
26
26
  # @return [Hash]
27
27
  def data
28
- @data ||= account.request('get', "/box/#{account.username}/#{box.name}/version/#{version.number}/provider/#{name}")
28
+ @data ||= account.request('get', provider_path)
29
29
  end
30
30
 
31
31
  # @param [String] url
32
32
  def update(url)
33
33
  params = { url: url }
34
- @data = account.request('put', "/box/#{account.username}/#{box.name}/version/#{version.number}/provider/#{name}", provider: params)
34
+ @data = account.request('put', provider_path, provider: params)
35
35
  end
36
36
 
37
37
  def delete
38
- account.request('delete', "/box/#{account.username}/#{box.name}/version/#{version.number}/provider/#{name}")
38
+ account.request('delete', provider_path)
39
+ end
40
+
41
+ # @return [String]
42
+ def upload_url
43
+ account.request('get', "#{provider_path}/upload")['upload_path']
44
+ end
45
+
46
+ # @param [String] file_path
47
+ def upload_file(file_path)
48
+ url = upload_url
49
+ payload = File.read(file_path)
50
+ RestClient::Request.execute(
51
+ method: :put,
52
+ url: url,
53
+ payload: payload,
54
+ ssl_version: 'TLSv1'
55
+ )
39
56
  end
40
57
 
41
58
  private
@@ -49,5 +66,9 @@ module VagrantCloud
49
66
  def account
50
67
  box.account
51
68
  end
69
+
70
+ def provider_path
71
+ "/box/#{account.username}/#{box.name}/version/#{version.number}/provider/#{name}"
72
+ end
52
73
  end
53
74
  end
@@ -71,8 +71,8 @@ module VagrantCloud
71
71
  # @param [String] name
72
72
  # @param [String] url
73
73
  # @return [Provider]
74
- def create_provider(name, url)
75
- params = { name: name, url: url }
74
+ def create_provider(name, url = nil)
75
+ params = { name: name, url: url }.delete_if { |_k, v| v.nil? }
76
76
  data = account.request('post', "/box/#{account.username}/#{box.name}/version/#{number}/providers", provider: params)
77
77
  get_provider(name, data)
78
78
  end
data/lib/vagrant_cloud.rb CHANGED
@@ -6,4 +6,5 @@ module VagrantCloud
6
6
  require 'vagrant_cloud/box'
7
7
  require 'vagrant_cloud/version'
8
8
  require 'vagrant_cloud/provider'
9
+ require 'vagrant_cloud/cli'
9
10
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant_cloud
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cargo Media
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-06 00:00:00.000000000 Z
11
+ date: 2017-05-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -16,14 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.7'
19
+ version: 2.0.2
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.7'
26
+ version: 2.0.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: thor
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.19.4
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.19.4
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -58,14 +72,14 @@ dependencies:
58
72
  requirements:
59
73
  - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: '1.21'
75
+ version: '3.0'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: '1.21'
82
+ version: '3.0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rubocop
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -83,15 +97,18 @@ dependencies:
83
97
  description: Minimalistic ruby client for the HashiCorp Atlas API (previously Vagrant
84
98
  Cloud API)
85
99
  email: tech@cargomedia.ch
86
- executables: []
100
+ executables:
101
+ - vagrant_cloud
87
102
  extensions: []
88
103
  extra_rdoc_files: []
89
104
  files:
90
105
  - LICENSE
91
106
  - README.md
107
+ - bin/vagrant_cloud
92
108
  - lib/vagrant_cloud.rb
93
109
  - lib/vagrant_cloud/account.rb
94
110
  - lib/vagrant_cloud/box.rb
111
+ - lib/vagrant_cloud/cli.rb
95
112
  - lib/vagrant_cloud/provider.rb
96
113
  - lib/vagrant_cloud/version.rb
97
114
  homepage: https://github.com/cargomedia/vagrant_cloud
@@ -114,7 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
114
131
  version: '0'
115
132
  requirements: []
116
133
  rubyforge_project:
117
- rubygems_version: 2.5.1
134
+ rubygems_version: 2.6.11
118
135
  signing_key:
119
136
  specification_version: 4
120
137
  summary: HashiCorp Atlas API client