vagrant-digitalocean 0.7.0 → 0.7.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,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- YWNjZTg3ZGQ4YmYyM2U3YTAxYjBkNDhiMWQxZjk1NzZkNWU4YmJiOQ==
5
- data.tar.gz: !binary |-
6
- MjUxMDgyZTdlNDg0MWQzMWQzZWIwYzJhY2ExNjcwNzk3MDQ3ZDJhNQ==
2
+ SHA1:
3
+ metadata.gz: e7541cb9c846061aa891d33310cca80a8050157d
4
+ data.tar.gz: c804eb52850ffb127932dcb5337b35abd4edf500
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- NTBhNWYwYWU0NWM0OTY3MTY4ODk5NTVjNzdiOGQ5NTUzNzBhMGVkMDQ5M2Zm
10
- ODU1OGZlNzc1ZjQ2NWNmNmM5YTU5ZmY0MWMxZDI0NjllZDM4Y2JlNzJhMDU3
11
- MGYzZDAxOWE0ZjFjMGI0MjE5ZjJiNWNhMjQxYmFmNDFkNmM2MmU=
12
- data.tar.gz: !binary |-
13
- NjAxMzlkYzVlMDdiZGY2M2Y3ZDI2YzE2YTkzMDhjNmNmNzQ4ZTJmZDM3Yjll
14
- Y2Q5YjE1YzVkNjQ2ZDg2OGFhMmYyNTYwOTc5MDZjNzY1YWU2MGI2MWE1ZTdl
15
- M2E3OWNhOTNiYWRmMzQ5MGEyZDkzODNhMThiN2Q1ZTBjOTQzNzI=
6
+ metadata.gz: ec0c1de834854d1903f0cd97900729a0d36095c92d8bfb24508f4b107a0924f7b3382ed23a8247bc31c821ba29943a8ceb27d8643936c34a09d36ff429ac246d
7
+ data.tar.gz: 905bc72a941fb5d299d372dd42914894c462c4f66de51811c83577539b6f3cef98b9e4dad8a65ea204377972136cc27d10a9edcf84f5fa96a30e9ae9ee96f8ac
data/README.md CHANGED
@@ -59,7 +59,7 @@ Vagrant.configure('2') do |config|
59
59
  override.vm.box_url = "https://github.com/smdahlen/vagrant-digitalocean/raw/master/box/digital_ocean.box"
60
60
 
61
61
  provider.token = 'YOUR TOKEN'
62
- provider.image = 'Ubuntu 14.04 x64'
62
+ provider.image = 'ubuntu-14-04-x64'
63
63
  provider.region = 'nyc2'
64
64
  provider.size = '512mb'
65
65
  end
@@ -77,14 +77,11 @@ Please note the following:
77
77
  **Supported Configuration Attributes**
78
78
 
79
79
  The following attributes are available to further configure the provider:
80
- - `provider.image` - A string representing the image to use when creating a
81
- new droplet (e.g. `Debian 6.0 x64`). The available options may
82
- be found on Digital Ocean's new droplet [form](https://cloud.digitalocean.com/droplets/new).
83
- It defaults to `Ubuntu 14.04 x64`.
84
- - `provider.region` - A string representing the region to create the new
85
- droplet in. It defaults to `nyc2`.
80
+ - `provider.image` - A string representing the image to use when creating a new droplet. It defaults to `ubuntu-14-04-x64`. List available images with the `digitalocean-list images` command.
81
+ - `provider.ipv6` - A boolean flag indicating whether to enable IPv6
82
+ - `provider.region` - A string representing the region to create the new droplet in. It defaults to `nyc2`. List available regions with the `digitalocean-list regions` command.
86
83
  - `provider.size` - A string representing the size to use when creating a
87
- new droplet (e.g. `1gb`). It defaults to `512mb`.
84
+ new droplet (e.g. `1gb`). It defaults to `512mb`. List available sizes with the `digitalocean-list sizes` command.
88
85
  - `provider.private_networking` - A boolean flag indicating whether to enable
89
86
  a private network interface (if the region supports private networking). It
90
87
  defaults to `false`.
@@ -101,34 +98,16 @@ The provider will create a new user account with the specified SSH key for
101
98
  authorization if `config.ssh.username` is set and the `provider.setup`
102
99
  attribute is `true`.
103
100
 
104
- ### provider.region slug
101
+ ### image, region and size slugs
105
102
 
106
- Each region has been specify with slug name.
107
- Current Region-slug table is:
108
-
109
- | slug | Region Name |
110
- |:---- |:----------------|
111
- | nyc1 | New York 1 |
112
- | ams1 | Amsterdam 1 |
113
- | sfo1 | San Francisco 1 |
114
- | nyc2 | New York 2 |
115
- | ams2 | Amsterdam 2 |
116
- | sgp1 | Singapore 1 |
117
- | lon1 | London 1 |
118
- | nyc3 | New York 3 |
119
-
120
- You can find latest region slug name using DigitalOcean API V2 call.
121
-
122
- - example call.
103
+ Images, regions and sizes have to be specified with the slug name. You can find the slug names with the `digitalocean-list` commands:
123
104
 
124
105
  ```
125
- curl -X GET "https://api.digitalocean.com/v2/regions" \
126
- -H "Authorization: Bearer $DIGITAL_OCEAN_TOKEN" \
127
- 2>/dev/null | jq '.regions [] | .slug,.name'
106
+ vagrant digitalocean-list images $DIGITAL_OCEAN_TOKEN
107
+ vagrant digitalocean-list regions $DIGITAL_OCEAN_TOKEN
108
+ vagrant digitalocean-list sizes $DIGITAL_OCEAN_TOKEN
128
109
  ```
129
110
 
130
- More detail: [DigitalOcean API - Regions](https://developers.digitalocean.com/#regions)
131
-
132
111
  Run
133
112
  ---
134
113
  After creating your project's `Vagrantfile` with the required configuration
@@ -19,7 +19,7 @@ module VagrantPlugins
19
19
 
20
20
  image_id = @client
21
21
  .request('/v2/images')
22
- .find_id(:images, :name => @machine.provider_config.image)
22
+ .find_id(:images, :slug => @machine.provider_config.image)
23
23
 
24
24
  # submit new droplet request
25
25
  result = @client.post('/v2/droplets', {
@@ -30,11 +30,12 @@ module VagrantPlugins
30
30
  :ssh_keys => ssh_key_id,
31
31
  :private_networking => @machine.provider_config.private_networking,
32
32
  :backups => @machine.provider_config.backups_enabled,
33
- :ipv6 => @machine.provider_config.ipv6
33
+ :ipv6 => @machine.provider_config.ipv6,
34
+ :user_data => @machine.provider_config.user_data
34
35
  })
35
36
 
36
37
  # wait for request to complete
37
- env[:ui].info I18n.t('vagrant_digital_ocean.info.creating')
38
+ env[:ui].info I18n.t('vagrant_digital_ocean.info.creating')
38
39
  @client.wait_for_event(env, result['links']['actions'].first['id'])
39
40
 
40
41
  # assign the machine id for reference in other commands
@@ -18,7 +18,7 @@ module VagrantPlugins
18
18
  # look up image id
19
19
  image_id = @client
20
20
  .request('/v2/images')
21
- .find_id(:images, :name => @machine.provider_config.image)
21
+ .find_id(:images, :slug => @machine.provider_config.image)
22
22
 
23
23
  # submit rebuild request
24
24
  result = @client.post("/v2/droplets/#{@machine.id}/actions", {
@@ -0,0 +1,89 @@
1
+ require 'optparse'
2
+ require 'vagrant-digitalocean/helpers/client'
3
+
4
+ module VagrantPlugins
5
+ module DigitalOcean
6
+ module Commands
7
+ class List < Vagrant.plugin('2', :command)
8
+ def self.synopsis
9
+ "list available images and regions from Digital Ocean"
10
+ end
11
+
12
+ def execute
13
+ @token = nil
14
+
15
+ @opts = OptionParser.new do |o|
16
+ o.banner = 'Usage: vagrant digitalocean-list [options] <images|regions|sizes> <token>'
17
+
18
+ o.on("-r", "--[no-]regions", "show the regions when listing images") do |r|
19
+ @regions = r
20
+ end
21
+ end
22
+
23
+ argv = parse_options(@opts)
24
+ @token = argv[1]
25
+
26
+ if @token.nil?
27
+ usage
28
+ return 1
29
+ end
30
+
31
+ case argv[0]
32
+ when "images"
33
+ result = query('/v2/images')
34
+ images = Array(result["images"])
35
+ if @regions
36
+ images_table = images.map do |image|
37
+ '%-50s %-30s %-50s' % ["#{image['distribution']} #{image['name']}", image['slug'], image['regions'].join(', ')]
38
+ end
39
+ @env.ui.info I18n.t('vagrant_digital_ocean.info.images_with_regions', images: images_table.sort.join("\r\n"))
40
+ else
41
+ images_table = images.map do |image|
42
+ '%-50s %-30s' % ["#{image['distribution']} #{image['name']}", image['slug']]
43
+ end
44
+ @env.ui.info I18n.t('vagrant_digital_ocean.info.images', images: images_table.sort.join("\r\n"))
45
+ end
46
+ when "regions"
47
+ result = query('/v2/regions')
48
+ regions = Array(result["regions"])
49
+ regions_table = regions.map { |region| '%-30s %-12s' % [region['name'], region['slug']] }
50
+ @env.ui.info I18n.t('vagrant_digital_ocean.info.regions', regions: regions_table.sort.join("\r\n"))
51
+ when "sizes"
52
+ result = query('/v2/sizes')
53
+ sizes = Array(result["sizes"])
54
+ sizes_table = sizes.map { |size| '%-15s %-15s %-12s' % ["#{size['memory']}MB", size['vcpus'], size['slug']] }
55
+ @env.ui.info I18n.t('vagrant_digital_ocean.info.sizes', sizes: sizes_table.sort_by{|s| s['memory']}.join("\r\n"))
56
+ else
57
+ usage
58
+ return 1
59
+ end
60
+
61
+ 0
62
+ rescue Faraday::Error::ConnectionFailed, RuntimeError => e
63
+ @env.ui.error I18n.t('vagrant_digital_ocean.info.list_error', message: e.message)
64
+ 1
65
+ end
66
+
67
+ def query(path)
68
+ connection = Faraday.new({
69
+ :url => "https://api.digitalocean.com/"
70
+ })
71
+
72
+ result = connection.get(path, per_page: 100) do |req|
73
+ req.headers['Authorization'] = "Bearer #{@token}"
74
+ end
75
+
76
+ case result.status
77
+ when 200 then JSON.parse(result.body)
78
+ when 401 then raise("unauthorized access — is the token correct?")
79
+ else raise("call returned with status #{result.status}")
80
+ end
81
+ end
82
+
83
+ def usage
84
+ @env.ui.info(@opts)
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
@@ -11,6 +11,7 @@ module VagrantPlugins
11
11
  attr_accessor :ca_path
12
12
  attr_accessor :ssh_key_name
13
13
  attr_accessor :setup
14
+ attr_accessor :user_data
14
15
 
15
16
  alias_method :setup?, :setup
16
17
 
@@ -25,11 +26,12 @@ module VagrantPlugins
25
26
  @ca_path = UNSET_VALUE
26
27
  @ssh_key_name = UNSET_VALUE
27
28
  @setup = UNSET_VALUE
29
+ @user_data = UNSET_VALUE
28
30
  end
29
31
 
30
32
  def finalize!
31
33
  @token = ENV['DO_TOKEN'] if @token == UNSET_VALUE
32
- @image = 'Ubuntu 14.04 x64' if @image == UNSET_VALUE
34
+ @image = 'ubuntu-14-04-x64' if @image == UNSET_VALUE
33
35
  @region = 'nyc2' if @region == UNSET_VALUE
34
36
  @size = '512mb' if @size == UNSET_VALUE
35
37
  @private_networking = false if @private_networking == UNSET_VALUE
@@ -38,6 +40,7 @@ module VagrantPlugins
38
40
  @ca_path = nil if @ca_path == UNSET_VALUE
39
41
  @ssh_key_name = 'Vagrant' if @ssh_key_name == UNSET_VALUE
40
42
  @setup = true if @setup == UNSET_VALUE
43
+ @user_data = nil if @user_data == UNSET_VALUE
41
44
  end
42
45
 
43
46
  def validate(machine)
@@ -21,6 +21,11 @@ module VagrantPlugins
21
21
  require_relative 'commands/rebuild'
22
22
  Commands::Rebuild
23
23
  end
24
+
25
+ command("digitalocean-list", primary: false) do
26
+ require_relative 'commands/list'
27
+ Commands::List
28
+ end
24
29
  end
25
30
  end
26
31
  end
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
2
  module DigitalOcean
3
- VERSION = '0.7.0'
3
+ VERSION = '0.7.1'
4
4
  end
5
5
  end
data/locales/en.yml CHANGED
@@ -20,6 +20,11 @@ en:
20
20
  trying_rsync_install: "Rsync not found, attempting to install with yum..."
21
21
  rsyncing: "Rsyncing folder: %{hostpath} => %{guestpath}..."
22
22
  rsync_missing: "The rsync executable was not found in the current path."
23
+ images: "Description Slug\n\n%{images}"
24
+ images_with_regions: "Description Slug Regions\n\n%{images}"
25
+ regions: "Description Slug\n\n%{regions}"
26
+ sizes: "Memory CPUs Slug\n\n%{sizes}"
27
+ list_error: 'Could not contact the Digital Ocean API: %{message}'
23
28
  config:
24
29
  token: "Token is required"
25
30
  private_key: "SSH private key path is required"
metadata CHANGED
@@ -1,55 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-digitalocean
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Bender
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-31 00:00:00.000000000 Z
11
+ date: 2014-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: 0.8.6
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
26
  version: 0.8.6
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: json
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ! '>='
31
+ - - '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ! '>='
38
+ - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: log4r
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ! '>='
45
+ - - '>='
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ! '>='
52
+ - - '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  description: Enables Vagrant to manage Digital Ocean droplets
@@ -81,6 +81,7 @@ files:
81
81
  - lib/vagrant-digitalocean/actions/setup_sudo.rb
82
82
  - lib/vagrant-digitalocean/actions/setup_user.rb
83
83
  - lib/vagrant-digitalocean/actions/sync_folders.rb
84
+ - lib/vagrant-digitalocean/commands/list.rb
84
85
  - lib/vagrant-digitalocean/commands/rebuild.rb
85
86
  - lib/vagrant-digitalocean/config.rb
86
87
  - lib/vagrant-digitalocean/errors.rb
@@ -106,17 +107,17 @@ require_paths:
106
107
  - lib
107
108
  required_ruby_version: !ruby/object:Gem::Requirement
108
109
  requirements:
109
- - - ! '>='
110
+ - - '>='
110
111
  - !ruby/object:Gem::Version
111
112
  version: '0'
112
113
  required_rubygems_version: !ruby/object:Gem::Requirement
113
114
  requirements:
114
- - - ! '>='
115
+ - - '>='
115
116
  - !ruby/object:Gem::Version
116
117
  version: '0'
117
118
  requirements: []
118
119
  rubyforge_project:
119
- rubygems_version: 2.2.2
120
+ rubygems_version: 2.0.14
120
121
  signing_key:
121
122
  specification_version: 4
122
123
  summary: Enables Vagrant to manage Digital Ocean droplets