vagrant-profitbricks 1.0.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +4 -4
  3. data/README.md +326 -174
  4. data/Rakefile +4 -2
  5. data/Vagrantfile +18 -13
  6. data/example_box/Vagrantfile +9 -0
  7. data/example_box/profitbricks.box +0 -0
  8. data/lib/vagrant-profitbricks.rb +12 -11
  9. data/lib/vagrant-profitbricks/action.rb +79 -40
  10. data/lib/vagrant-profitbricks/action/connect_profitbricks.rb +14 -12
  11. data/lib/vagrant-profitbricks/action/create_server.rb +74 -67
  12. data/lib/vagrant-profitbricks/action/delete_server.rb +33 -13
  13. data/lib/vagrant-profitbricks/action/is_created.rb +3 -1
  14. data/lib/vagrant-profitbricks/action/list_flavors.rb +5 -3
  15. data/lib/vagrant-profitbricks/action/list_images.rb +6 -4
  16. data/lib/vagrant-profitbricks/action/message_already_created.rb +4 -2
  17. data/lib/vagrant-profitbricks/action/message_not_created.rb +4 -2
  18. data/lib/vagrant-profitbricks/action/read_ssh_info.rb +10 -16
  19. data/lib/vagrant-profitbricks/action/read_state.rb +19 -12
  20. data/lib/vagrant-profitbricks/action/reboot_server.rb +45 -0
  21. data/lib/vagrant-profitbricks/action/run_init_script.rb +5 -3
  22. data/lib/vagrant-profitbricks/action/start_server.rb +50 -0
  23. data/lib/vagrant-profitbricks/action/stop_server.rb +51 -0
  24. data/lib/vagrant-profitbricks/command/datacenters.rb +34 -0
  25. data/lib/vagrant-profitbricks/command/flavors.rb +19 -6
  26. data/lib/vagrant-profitbricks/command/images.rb +21 -20
  27. data/lib/vagrant-profitbricks/command/locations.rb +34 -0
  28. data/lib/vagrant-profitbricks/command/root.rb +28 -23
  29. data/lib/vagrant-profitbricks/command/servers.rb +7 -4
  30. data/lib/vagrant-profitbricks/command/snapshots.rb +34 -0
  31. data/lib/vagrant-profitbricks/command/utils.rb +27 -0
  32. data/lib/vagrant-profitbricks/config.rb +44 -39
  33. data/lib/vagrant-profitbricks/errors.rb +14 -5
  34. data/lib/vagrant-profitbricks/plugin.rb +13 -11
  35. data/lib/vagrant-profitbricks/provider.rb +8 -6
  36. data/lib/vagrant-profitbricks/version.rb +3 -1
  37. data/locales/en.yml +28 -7
  38. data/spec/spec_helper.rb +4 -2
  39. data/spec/vagrant-profitbricks/config_spec.rb +65 -96
  40. data/vagrant-profitbricks.gemspec +17 -14
  41. metadata +42 -47
  42. data/Appraisals +0 -35
  43. data/CHANGELOG.md +0 -3
  44. data/RELEASE.md +0 -15
  45. data/bootstrap.cmd +0 -16
  46. data/features/provision.feature +0 -36
  47. data/features/steps/sdk_steps.rb +0 -13
  48. data/features/steps/server_steps.rb +0 -25
  49. data/features/support/env.rb +0 -35
  50. data/features/support/fog_mock.rb +0 -17
  51. data/features/vagrant-profitbricks.feature +0 -66
  52. data/lib/vagrant-profitbricks/action/create_image.rb +0 -53
  53. data/lib/vagrant-profitbricks/action/list_keypairs.rb +0 -20
  54. data/lib/vagrant-profitbricks/action/list_networks.rb +0 -20
  55. data/lib/vagrant-profitbricks/action/list_servers.rb +0 -21
  56. data/lib/vagrant-profitbricks/command/create_image.rb +0 -21
  57. data/lib/vagrant-profitbricks/command/keypairs.rb +0 -21
  58. data/lib/vagrant-profitbricks/command/list_images.rb +0 -21
  59. data/lib/vagrant-profitbricks/command/networks.rb +0 -21
  60. data/spec/vagrant-profitbricks/actions/list_flavors_spec.rb +0 -48
  61. data/spec/vagrant-profitbricks/actions/list_images_spec.rb +0 -48
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rubygems'
2
4
  require 'bundler/setup'
3
5
  require 'rspec/core/rake_task'
@@ -8,7 +10,7 @@ $stdout.sync = true
8
10
  $stderr.sync = true
9
11
 
10
12
  # Change to the directory of this file.
11
- Dir.chdir(File.expand_path("../", __FILE__))
13
+ Dir.chdir(File.expand_path('../', __FILE__))
12
14
 
13
15
  # This installs the tasks that help with gem creation and
14
16
  # publishing.
@@ -18,4 +20,4 @@ Bundler::GemHelper.install_tasks
18
20
  RSpec::Core::RakeTask.new
19
21
 
20
22
  # Default task is to run the unit tests
21
- task :default => "spec"
23
+ task default: 'spec'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # -*- mode: ruby -*-
2
4
  # vi: set ft=ruby :
3
5
 
@@ -5,26 +7,29 @@
5
7
  # configures the configuration version (we support older styles for
6
8
  # backwards compatibility). Please don't change it unless you know what
7
9
  # you're doing.
8
- Vagrant.configure("2") do |config|
10
+ Vagrant.configure('2') do |config|
9
11
  # The most common configuration options are documented and commented below.
10
12
  # For a complete reference, please see the online documentation at
11
13
  # https://docs.vagrantup.com.
12
14
 
13
15
  # Every Vagrant development environment requires a box. You can search for
14
16
  # boxes at https://atlas.hashicorp.com/search.
15
- config.vm.box = 'profitbricks'
17
+ config.ssh.private_key_path = '/path/to/.ssh/id_rsa'
18
+
16
19
  config.vm.provider :profitbricks do |profitbricks|
17
- profitbricks.username = 'YOUR_PB_USERNAME'
18
- profitbricks.password = 'YOUR_PB_PASSWORD'
19
- profitbricks.profitbricks_url = 'https://api.profitbricks.com/cloudapi/v3/'
20
- profitbricks.datacenter_id = 'pb vagrant test'
20
+ profitbricks.username = ENV['PROFITBRICKS_USERNAME']
21
+ profitbricks.password = ENV['PROFITBRICKS_PASSWORD']
22
+ profitbricks.profitbricks_url = 'https://api.profitbricks.com/cloudapi/v4/'
23
+ profitbricks.datacenter_id = '19f5531c-4fb5-4657-9fee-ac6731131074'
21
24
  profitbricks.location = 'de/fkb'
22
- profitbricks.image = 'openSUSE-13.2-server-2016-11-01'
23
- profitbricks.volume_licence_type = 'LINUX'
24
- profitbricks.profitbricks_cores = '1'
25
- profitbricks.profitbricks_ram = '2048'
26
- profitbricks.image_password = 'PASSWORD'
27
- # profitbricks.volume_ssh_keys = ['YOUR_PUBLIC_SSH_KEY'] # if you want to enable SSH (Works with ProfitBricks supplied Linux images)
25
+ profitbricks.image_alias = 'ubuntu:latest'
26
+ profitbricks.cores = '4'
27
+ profitbricks.ram = '4096'
28
+ profitbricks.image_password = 'test1234'
29
+ profitbricks.public_ssh_keys = [File.read('/path/to/.ssh/id_rsa.pub')]
30
+ end
31
+
32
+ config.vm.provision 'shell' do |s|
33
+ s.inline = 'apt-get update && apt-get install -y'
28
34
  end
29
-
30
35
  end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ # -*- mode: ruby -*-
4
+ # vi: set ft=ruby :
5
+
6
+ Vagrant.configure('2') do |config|
7
+ config.vm.provider :profitbricks do |pb|
8
+ end
9
+ end
@@ -1,23 +1,25 @@
1
- require "pathname"
2
- require "vagrant-profitbricks/plugin"
1
+ # frozen_string_literal: true
2
+
3
+ require 'pathname'
4
+ require 'vagrant-profitbricks/plugin'
3
5
 
4
6
  module VagrantPlugins
5
7
  module ProfitBricks
6
- lib_path = Pathname.new(File.expand_path("../vagrant-profitbricks", __FILE__))
7
- autoload :Action, lib_path.join("action")
8
- autoload :Errors, lib_path.join("errors")
8
+ lib_path = Pathname.new(File.expand_path('../vagrant-profitbricks', __FILE__))
9
+ autoload :Action, lib_path.join('action')
10
+ autoload :Errors, lib_path.join('errors')
9
11
 
10
12
  # This returns the path to the source of this plugin.
11
13
  #
12
14
  # @return [Pathname]
13
15
  def self.source_root
14
- @source_root ||= Pathname.new(File.expand_path("../../", __FILE__))
16
+ @source_root ||= Pathname.new(File.expand_path('../../', __FILE__))
15
17
  end
16
18
 
17
19
  # This initializes the i18n load path so that the plugin-specific
18
20
  # translations work.
19
21
  def self.init_i18n
20
- I18n.load_path << File.expand_path("locales/en.yml", source_root)
22
+ I18n.load_path << File.expand_path('locales/en.yml', source_root)
21
23
  I18n.reload!
22
24
  end
23
25
 
@@ -27,7 +29,7 @@ module VagrantPlugins
27
29
  # Initialize logging
28
30
  level = nil
29
31
  begin
30
- level = Log4r.const_get(ENV["VAGRANT_LOG"].upcase)
32
+ level = Log4r.const_get(ENV['VAGRANT_LOG'].upcase)
31
33
  rescue NameError
32
34
  # This means that the logging constant wasn't found,
33
35
  # which is fine. We just keep `level` as `nil`. But
@@ -38,15 +40,14 @@ module VagrantPlugins
38
40
  # Some constants, such as "true" resolve to booleans, so the
39
41
  # above error checking doesn't catch it. This will check to make
40
42
  # sure that the log level is an integer, as Log4r requires.
41
- level = nil if !level.is_a?(Integer)
43
+ level = nil unless level.is_a?(Integer)
42
44
 
43
45
  # Set the logging level on all "vagrant" namespaced
44
46
  # logs as long as we have a valid level.
45
47
  if level
46
- logger = Log4r::Logger.new("vagrant_profitbricks")
48
+ logger = Log4r::Logger.new('vagrant_profitbricks')
47
49
  logger.outputters = Log4r::Outputter.stderr
48
50
  logger.level = level
49
- logger = nil
50
51
  end
51
52
  end
52
53
  end
@@ -1,6 +1,8 @@
1
- require "pathname"
1
+ # frozen_string_literal: true
2
2
 
3
- require "vagrant/action/builder"
3
+ require 'pathname'
4
+
5
+ require 'vagrant/action/builder'
4
6
 
5
7
  module VagrantPlugins
6
8
  module ProfitBricks
@@ -9,28 +11,30 @@ module VagrantPlugins
9
11
  include Vagrant::Action::Builtin
10
12
 
11
13
  # The autoload farm
12
- action_root = Pathname.new(File.expand_path("../action", __FILE__))
13
- autoload :ConnectProfitBricks, action_root.join("connect_profitbricks")
14
- autoload :CreateServer, action_root.join("create_server")
15
- autoload :DeleteServer, action_root.join("delete_server")
16
- autoload :IsCreated, action_root.join("is_created")
17
- autoload :MessageAlreadyCreated, action_root.join("message_already_created")
18
- autoload :MessageNotCreated, action_root.join("message_not_created")
19
- autoload :ReadSSHInfo, action_root.join("read_ssh_info")
20
- autoload :ReadState, action_root.join("read_state")
21
- autoload :RunInitScript, action_root.join("run_init_script")
22
- autoload :CreateImage, action_root.join("create_image")
23
- autoload :ListImages, action_root.join("list_images")
24
- autoload :ListFlavors, action_root.join("list_flavors")
25
- autoload :ListInterfaces, action_root.join("list_networks")
26
- autoload :ListServers, action_root.join("list_servers")
14
+ action_root = Pathname.new(File.expand_path('../action', __FILE__))
15
+ autoload :ConnectProfitBricks, action_root.join('connect_profitbricks')
16
+ autoload :CreateServer, action_root.join('create_server')
17
+ autoload :DeleteServer, action_root.join('delete_server')
18
+ autoload :IsCreated, action_root.join('is_created')
19
+ autoload :MessageAlreadyCreated, action_root.join('message_already_created')
20
+ autoload :MessageNotCreated, action_root.join('message_not_created')
21
+ autoload :ReadSSHInfo, action_root.join('read_ssh_info')
22
+ autoload :ReadState, action_root.join('read_state')
23
+ autoload :RunInitScript, action_root.join('run_init_script')
24
+ autoload :CreateImage, action_root.join('create_image')
25
+ autoload :Stop, action_root.join('stop_server')
26
+ autoload :ListFlavors, action_root.join('list_flavors')
27
+ autoload :Start, action_root.join('start_server')
28
+ autoload :ListServers, action_root.join('list_servers')
29
+ autoload :Reboot, action_root.join('reboot_server')
30
+ autoload :ListImages, action_root.join('list_images')
27
31
 
28
32
  # This action is called to destroy the remote machine.
29
33
  def self.action_destroy
30
34
  Vagrant::Action::Builder.new.tap do |b|
31
35
  b.use ConfigValidate
32
36
  b.use Call, IsCreated do |env, b1|
33
- if !env[:result]
37
+ unless env[:result]
34
38
  b1.use MessageNotCreated
35
39
  next
36
40
  end
@@ -41,7 +45,7 @@ module VagrantPlugins
41
45
  b2.use DeleteServer
42
46
  b2.use ProvisionerCleanup if defined?(ProvisionerCleanup)
43
47
  else
44
- b2.use Message, I18n.t("vagrant_profitbricks.will_not_destroy")
48
+ b2.use Message, I18n.t('vagrant_profitbricks.will_not_destroy')
45
49
  next
46
50
  end
47
51
  end
@@ -49,18 +53,35 @@ module VagrantPlugins
49
53
  end
50
54
  end
51
55
 
56
+ def self.action_reload
57
+ Vagrant::Action::Builder.new.tap do |b|
58
+ b.use ConfigValidate
59
+ b.use ConnectProfitBricks
60
+ b.use Call, GetState do |env, b1|
61
+ case env[:machine_state]
62
+ when :active
63
+ b1.use Reload
64
+ b1.use Provision
65
+ when :off
66
+ env[:ui].info I18n.t('vagrant_profitbricks.states.long_off')
67
+ when :not_created
68
+ env[:ui].info I18n.t('vagrant_profitbricks.not_created')
69
+ end
70
+ end
71
+ end
72
+ end
73
+
52
74
  # This action is called when `vagrant provision` is called.
53
75
  def self.action_provision
54
76
  Vagrant::Action::Builder.new.tap do |b|
55
77
  b.use ConfigValidate
56
78
  b.use Call, IsCreated do |env, b2|
57
- if !env[:result]
79
+ unless env[:result]
58
80
  b2.use MessageNotCreated
59
81
  next
60
82
  end
61
83
 
62
84
  b2.use Provision
63
- b2.use SyncedFolders
64
85
  end
65
86
  end
66
87
  end
@@ -91,7 +112,7 @@ module VagrantPlugins
91
112
  Vagrant::Action::Builder.new.tap do |b|
92
113
  b.use ConfigValidate
93
114
  b.use Call, IsCreated do |env, b2|
94
- if !env[:result]
115
+ unless env[:result]
95
116
  b2.use MessageNotCreated
96
117
  next
97
118
  end
@@ -105,7 +126,7 @@ module VagrantPlugins
105
126
  Vagrant::Action::Builder.new.tap do |b|
106
127
  b.use ConfigValidate
107
128
  b.use Call, IsCreated do |env, b2|
108
- if !env[:result]
129
+ unless env[:result]
109
130
  b2.use MessageNotCreated
110
131
  next
111
132
  end
@@ -119,46 +140,64 @@ module VagrantPlugins
119
140
  Vagrant::Action::Builder.new.tap do |b|
120
141
  b.use ConfigValidate
121
142
  b.use ConnectProfitBricks
122
- b.use Call, IsCreated do |env, b2|
143
+ b.use Call, ReadState do |env, b2|
123
144
  if env[:result]
124
145
  b2.use MessageAlreadyCreated
125
146
  next
126
147
  end
127
-
128
- b2.use Provision
129
- b2.use CreateServer
148
+ case env[:machine_state_id]
149
+ when :not_created
150
+ b2.use CreateServer
151
+ b2.use Provision
152
+ when :off
153
+ b2.use Start
154
+ b2.use Provision
155
+ end
130
156
  end
131
157
  end
132
158
  end
133
159
 
134
- # Extended actions
135
- def self.action_list_images
160
+ def self.action_halt
136
161
  Vagrant::Action::Builder.new.tap do |b|
137
- # b.use ConfigValidate # is this per machine?
138
- b.use ConnectProfitBricks
139
- b.use ListImages
162
+ b.use Call, IsCreated do |env, b1|
163
+ unless env[:result]
164
+ b1.use MessageNotCreated
165
+ next
166
+ end
167
+
168
+ b1.use ConfigValidate
169
+ b1.use ConnectProfitBricks
170
+ b1.use Stop
171
+ end
140
172
  end
141
173
  end
142
174
 
143
- def self.action_list_flavors
175
+ def self.action_reload
144
176
  Vagrant::Action::Builder.new.tap do |b|
145
- # b.use ConfigValidate # is this per machine?
146
- b.use ConnectProfitBricks
147
- b.use ListFlavors
177
+ b.use Call, IsCreated do |env, b1|
178
+ unless env[:result]
179
+ b1.use MessageNotCreated
180
+ next
181
+ end
182
+ b1.use ConfigValidate
183
+ b1.use ConnectProfitBricks
184
+ b1.use Reboot
185
+ end
148
186
  end
149
187
  end
150
188
 
151
- def self.action_list_networks
189
+ def self.action_list_flavors
152
190
  Vagrant::Action::Builder.new.tap do |b|
191
+ b.use ConfigValidate
153
192
  b.use ConnectProfitBricks
154
- b.use ListInterfaces
193
+ b.use ListFlavors
155
194
  end
156
195
  end
157
196
 
158
- def self.action_list_servers
197
+ def self.action_list_images
159
198
  Vagrant::Action::Builder.new.tap do |b|
160
199
  b.use ConnectProfitBricks
161
- b.use ListServers
200
+ b.use ListImages
162
201
  end
163
202
  end
164
203
  end
@@ -1,35 +1,37 @@
1
- require "fog/profitbricks"
2
- require "log4r"
1
+ # frozen_string_literal: true
2
+
3
+ require 'fog/profitbricks'
4
+ require 'log4r'
3
5
 
4
6
  module VagrantPlugins
5
7
  module ProfitBricks
6
8
  module Action
7
9
  # This action connects to ProfitBricks and verifies that the credentials work
8
10
  class ConnectProfitBricks
9
- def initialize(app, env)
11
+ def initialize(app, _env)
10
12
  @app = app
11
- @logger = Log4r::Logger.new("vagrant_profitbricks::action::connect_profitbricks")
13
+ @logger = Log4r::Logger.new('vagrant_profitbricks::action::connect_profitbricks')
12
14
  end
13
15
 
14
16
  def call(env)
15
17
  # Get the configs
16
- config = env[:machine].provider_config
17
- password = config.password
18
+ config = env[:machine].provider_config
19
+ password = config.password
18
20
  username = config.username
19
-
20
21
  params = {
21
- :provider => 'ProfitBricks',
22
- :profitbricks_password => password,
23
- :profitbricks_username => username
22
+ provider: 'ProfitBricks',
23
+ profitbricks_password: password,
24
+ profitbricks_username: username,
25
+ profitbricks_user_agent: I18n.t('vagrant_profitbricks.version')
24
26
  }
25
27
 
26
28
  if config.profitbricks_url
27
- @logger.info("Connecting to ProfitBricks profitbricks_url...")
29
+ @logger.info('Connecting to ProfitBricks Cloud API...')
28
30
  params[:profitbricks_url] = config.profitbricks_url
29
31
  end
30
32
 
31
33
  env[:profitbricks_compute] = Fog::Compute.new params
32
- @logger.info("env[:profitbricks_compute]: " + env[:profitbricks_compute].to_s)
34
+ @logger.info('env[:profitbricks_compute]: ' + env[:profitbricks_compute].to_s)
33
35
 
34
36
  @app.call(env)
35
37
  end
@@ -1,5 +1,7 @@
1
- require "fog/profitbricks"
2
- require "log4r"
1
+ # frozen_string_literal: true
2
+
3
+ require 'fog/profitbricks'
4
+ require 'log4r'
3
5
 
4
6
  require 'vagrant/util/retryable'
5
7
 
@@ -13,10 +15,11 @@ module VagrantPlugins
13
15
  def initialize(app, env)
14
16
  @app = app
15
17
  @compute = env[:profitbricks_compute]
16
- @logger = Log4r::Logger.new("vagrant_profitbricks::action::create_server")
18
+ @logger = Log4r::Logger.new('vagrant_profitbricks::action::create_server')
17
19
  end
18
20
 
19
21
  def call(env)
22
+ uuid_regex = /^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/
20
23
  # Get the ProfitBricks configs
21
24
  config = env[:machine].provider_config
22
25
  machine_config = env[:machine].config
@@ -27,52 +30,53 @@ module VagrantPlugins
27
30
  end
28
31
 
29
32
  # Figure out the Data Center ID,
30
- datacenter = find_matching(@compute.datacenters, config.datacenter_id)
31
- # in case datacenter is not found try to create new one.
32
- # New datacenter is created if provided with name that is not regex or id
33
- if config.datacenter_id && !datacenter && !config.datacenter_id.is_a?(Regexp) && (config.datacenter_id =~ /[a-fA-F0-9]{8}(-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}/).nil?
34
- env[:ui].info(I18n.t("vagrant_profitbricks.creating_datacenter", :name => config.datacenter_id, :location => config.location))
35
- datacenter = @compute.datacenters.create(:name => config.datacenter_id, :location => config.location)
36
-
33
+ if config.datacenter_id.match uuid_regex
34
+ datacenter = find_matching(@compute.datacenters, config.datacenter_id)
35
+ else
36
+ raise Errors::NoDatacenterID
37
37
  end
38
- raise Errors::NoMatchingDatacenter if !datacenter
39
38
 
40
39
  # Find the flavor
41
40
  if config.flavor
42
- env[:ui].info(I18n.t("vagrant_profitbricks.finding_flavor"))
41
+ env[:ui].info(I18n.t('vagrant_profitbricks.finding_flavor'))
43
42
  flavor = find_matching(@compute.flavors, config.flavor)
44
- raise Errors::NoMatchingFlavor if !flavor
43
+ raise Errors::NoMatchingFlavor unless flavor
45
44
  end
46
45
 
47
- # Find the image
48
- env[:ui].info(I18n.t("vagrant_profitbricks.finding_image"))
49
- env[:ui].info(I18n.t("config.image: #{config.image}"))
50
- env[:ui].info(I18n.t("datacenter.location: #{datacenter.location}"))
51
- images = @compute.images.all
52
- image = find_matching_image(images, config.image, datacenter.location)
46
+ if !config.image && !config.image_alias
47
+ raise Errors::ImageOrLicenceTypeMustBeProvided
48
+ end
53
49
 
54
- # Figure out the name for the server
55
- server_name = config.server_name || env[:machine].name
50
+ if config.image
51
+ images = @compute.images.all
52
+ image = find_matching_image(images, config.image, datacenter.location)
53
+ end
56
54
 
55
+ if config.image_alias
56
+ # Figure out the name for the server
57
+ server_name = config.server_name || env[:machine].name
58
+ end
57
59
  # Prepare volume values
58
- vol_name = server_name.to_s + "_volume" if server_name
59
- vol_size = config.profitbricks_volume_size ? config.profitbricks_volume_size : 5
60
- vol_image = image.id if image
60
+ vol_name = server_name.to_s + '_volume' if server_name
61
+
62
+ vol_size = config.volume_size ? config.volume_size : 5
61
63
  vol_type = config.volume_type
62
64
  vol_licence_type = config.volume_licence_type if config.volume_licence_type
63
- vol_ssh_keys = config.volume_ssh_keys if config.volume_ssh_keys
65
+ vol_ssh_keys = config.public_ssh_keys if config.public_ssh_keys
64
66
  vol_availability_zone = config.volume_availability_zone
65
67
  vol_image_password = config.image_password if config.image_password
66
68
 
67
69
  volume = {
68
- :name => vol_name,
69
- :size => vol_size,
70
- :type => vol_type,
71
- :availability_zone => vol_availability_zone
70
+ name: vol_name,
71
+ size: vol_size,
72
+ type: vol_type,
73
+ availability_zone: vol_availability_zone
72
74
  }
73
75
 
74
- if vol_image
75
- volume[:image] = vol_image
76
+ if image
77
+ volume[:image] = image.id
78
+ elsif config.image_alias
79
+ volume[:image_alias] = config.image_alias
76
80
  elsif vol_licence_type
77
81
  volume[:licence_type] = vol_licence_type
78
82
  else
@@ -87,32 +91,36 @@ module VagrantPlugins
87
91
  raise Errors::ImageOrLicenceTypeMustBeProvided
88
92
  end
89
93
 
90
-
91
-
92
94
  # create LAN if it does not exist, and create a NIC on that LAN
93
95
  lan_id = config.lan_id
94
- lan = @compute.lans.get(datacenter.id, config.lan_id)
96
+ begin
97
+ lan = @compute.lans.get(datacenter.id, config.lan_id)
98
+ rescue Excon::Error::NotFound
99
+ raise Errors::NoLan
100
+ end
95
101
 
96
102
  if !lan || lan.id.end_with?('/lans')
97
- lan_name = server_name.to_s + "_lan" if server_name
98
- lan = @compute.lans.create(:datacenter_id => datacenter.id, :name => lan_name, :public => true)
103
+ lan_name = server_name.to_s + '_lan' if server_name
104
+ lan = @compute.lans.create(datacenter_id: datacenter.id, name: lan_name, public: true)
99
105
  lan_id = lan.id
100
106
  end
101
107
 
102
- nic_name = server_name.to_s + "_nic" if server_name
108
+ nic_name = server_name.to_s + '_nic' if server_name
103
109
  nic = {
104
- :name => nic_name,
105
- :lan => lan_id,
106
- :dhcp => true,
107
- :nat => config.nat
110
+ name: nic_name,
111
+ lan: lan_id,
112
+ dhcp: true,
113
+ nat: config.nat
108
114
  }
109
115
 
110
116
  # Output the settings we're going to use to the user
111
- env[:ui].info(I18n.t("vagrant_profitbricks.launching_server"))
117
+ env[:ui].info(I18n.t('vagrant_profitbricks.launching_server'))
112
118
  env[:ui].info(" -- Data Center ID: #{datacenter.id}")
119
+ env[:ui].info(" -- Location: #{datacenter.location}")
113
120
  env[:ui].info(" -- Name: #{server_name}")
114
121
  env[:ui].info(" -- Volume Name: #{vol_name}")
115
122
  env[:ui].info(" -- Image: #{image.name}") if image
123
+ env[:ui].info(" -- Image: #{config.image_alias}") if config.image_alias
116
124
 
117
125
  server_cores = nil
118
126
  server_ram = nil
@@ -121,31 +129,30 @@ module VagrantPlugins
121
129
  env[:ui].info(" -- Flavor: #{flavor.name}")
122
130
  server_cores = flavor.cores
123
131
  server_ram = flavor.ram
124
- elsif config.profitbricks_ram && config.profitbricks_cores
125
- env[:ui].info(" -- Server cores: #{config.profitbricks_cores}")
126
- env[:ui].info(" -- Server ram: #{config.profitbricks_ram } MB")
127
- server_cores = config.profitbricks_cores
128
- server_ram = config.profitbricks_ram
132
+ elsif config.ram && config.cores
133
+ env[:ui].info(" -- Server cores: #{config.cores}")
134
+ env[:ui].info(" -- Server ram: #{config.ram} MB")
135
+ server_cores = config.cores
136
+ server_ram = config.ram
129
137
  else
130
138
  raise Errors::NoMatchingFlavor
131
139
  end
132
140
 
133
141
  # Create the server
134
- env[:ui].info(I18n.t("vagrant_profitbricks.creating_server"))
135
- server = @compute.servers.create(:datacenter_id => datacenter.id,
136
- :name => server_name,
137
- :cores => server_cores,
138
- :ram => server_ram,
139
- :cpu_family => config.cpu_family,
140
- :volumes => [volume],
141
- :nics => [nic]
142
- )
142
+ env[:ui].info(I18n.t('vagrant_profitbricks.creating_server'))
143
+ server = @compute.servers.create(datacenter_id: datacenter.id,
144
+ name: server_name,
145
+ cores: server_cores,
146
+ ram: server_ram,
147
+ cpu_family: config.cpu_family,
148
+ volumes: [volume],
149
+ nics: [nic])
143
150
  server.wait_for { ready? }
144
151
 
145
152
  # Store the ID right away so we can track it
146
153
  env[:machine].id = server.id
147
154
 
148
- env[:ui].info(I18n.t("vagrant_profitbricks.ready"))
155
+ env[:ui].info(I18n.t('vagrant_profitbricks.ready'))
149
156
  @app.call(env)
150
157
  end
151
158
 
@@ -158,8 +165,8 @@ module VagrantPlugins
158
165
  def find_matching(collection, name)
159
166
  item = collection.find do |single|
160
167
  single.id == name ||
161
- single.name == name ||
162
- (name.is_a?(Regexp) && name =~ single.name)
168
+ single.name == name ||
169
+ (name.is_a?(Regexp) && name =~ single.name)
163
170
  end
164
171
 
165
172
  item
@@ -170,21 +177,21 @@ module VagrantPlugins
170
177
  # `name`. Or, if `name` is a regexp, a partial match is chosen
171
178
  # as well.
172
179
  def find_matching_image(collection, name, location)
173
- location = location ? location : 'us/las'
174
- item = collection.find do |image|
175
- image.location == location &&
176
- image.image_type == 'HDD' &&
177
- (image.name == name || image.id == name ||
178
- (name.is_a?(Regexp) && image.name =~ name))
180
+ location ||= 'us/las'
181
+ item = collection.find do |image|
182
+ image.location == location &&
183
+ image.image_type == 'HDD' &&
184
+ (image.name == name || image.id == name ||
185
+ (name.is_a?(Regexp) && image.name =~ name))
179
186
  end
180
-
187
+
181
188
  item
182
189
  end
183
190
 
184
191
  # Ported from Vagrant::UI, but scoped to the machine's UI
185
192
  def report_server_progress(machine, progress)
186
193
  machine.ui.clear_line
187
- line = "Progress: #{progress}"
194
+ line = "Progress: #{progress}"
188
195
 
189
196
  machine.ui.info(line, new_line: false)
190
197
  end