vagrant-cloudstack 0.7.0 → 0.8.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: 1b01a67b4a7935d8218e0fd82422bd38dc5dc0c9
4
- data.tar.gz: bc847f6a39372eb7ab370bc811974a63c3e36af1
3
+ metadata.gz: 1bb87274b9c5ad3a39e17fb4ddefece7076ae0cb
4
+ data.tar.gz: 9b6256bec79396f96659d72d1c1650d53a6883ee
5
5
  SHA512:
6
- metadata.gz: 0b6ca31291fc783ed3abc0ef42573af04563d8b77db8f9366973e94f3186a651feddd3d8218ef459449fe5135370ff4b1519d0dd1f2db00dc06328ab5618df7c
7
- data.tar.gz: 9190c62333d247ec463b79a7b8645378e1afa23d83a62599fc8b2c6b9cee6c4a71a95e1de8bb7688ebb9b520c81bb21b3d1b5f1ee5f662bf0482c71ad41a61cc
6
+ metadata.gz: 5903a1a4b92be3dbdddf37198428fc7a647dc21d65e078d2b3f922a6154a3394785522f4acb63695cdcf7742af8e13d84fc62d684cc6bb7c2f16d952d7ea3fbb
7
+ data.tar.gz: 73831bed97569ed058aa4001e491f4e729526f671bc1157f12335884cd1ef1ded8d5c8a80f4628a6559bf116de46ab5d910c55a252395f037c670eba5d3c49d3
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # 0.8.0 (Jun 24, 2014)
2
+ * Remove unused code.
3
+ * Add support for specifying most resources by name. Where applicable there is
4
+ a matching _name config for the _id configs.
5
+ Note: in this release there were no support for the project apis in fog,
6
+ therefore there is no project_name config.
7
+
1
8
  # 0.7.0 (Jun 17, 2014)
2
9
  * Change the resolution order of how we discover the scheme to talk to the cloud.
3
10
  This is a possibly breaking change.
data/README.md CHANGED
@@ -72,6 +72,32 @@ Vagrant.configure("2") do |config|
72
72
  end
73
73
  ```
74
74
 
75
+ Or with names instead of ids:
76
+
77
+ ```
78
+ Vagrant.configure("2") do |config|
79
+ config.vm.box = "dummy"
80
+
81
+ config.vm.provider :cloudstack do |cloudstack, override|
82
+ cloudstack.host = "cloudstack.local"
83
+ cloudstack.path = "/client/api"
84
+ cloudstack.port = "8080"
85
+ cloudstack.scheme = "http"
86
+ cloudstack.api_key = "AAAAAAAAAAAAAAAAAAA"
87
+ cloudstack.secret_key = "AAAAAAAAAAAAAAAAAAA"
88
+
89
+ cloudstack.template_name = "GENERIC-Awesome-Linux"
90
+ cloudstack.service_offering_name = "THE-BESTEST"
91
+ cloudstack.network_name = "WOW-SUCH-FAST-OFFERING"
92
+ cloudstack.zone_name = "District-9"
93
+ # Sadly there is currently no support for the project api in fog.
94
+ cloudstack.project_id = "AAAAAAAAAAAAAAAAAAA"
95
+ cloudstack.network_type = "Advanced" # or "Basic"
96
+ end
97
+ end
98
+ ```
99
+
100
+
75
101
  Note that normally a lot of this boilerplate is encoded within the box
76
102
  file, but the box file used for the quick start, the "dummy" box, has
77
103
  no preconfigured defaults.
@@ -96,7 +122,11 @@ provider-specific configuration for this provider.
96
122
 
97
123
  ## Configuration
98
124
 
99
- This provider exposes quite a few provider-specific configuration options:
125
+ This provider exposes quite a few provider-specific configuration options. Most of the settings
126
+ have both an id and a name setting and you can chose to use either (i.e network_id or network_name).
127
+ This gives the possibility to use the easier to remember name instead of the UUID,
128
+ this will also enable you to upgrade the different settings in your cloud without having
129
+ to update UUIDs in your Vagrantfile. If both are specified, the id parameter takes precedence.
100
130
 
101
131
  * `host` - Cloudstack api host
102
132
  * `path` - Cloudstack api path
@@ -108,11 +138,15 @@ This provider exposes quite a few provider-specific configuration options:
108
138
  to become "ready" in Cloudstack. Defaults to 120 seconds.
109
139
  * `domain_id` - Domain id to launch the instance into
110
140
  * `network_id` - Network uuid that the instance should use
141
+ * `network_name` - Network name that the instance should use
111
142
  * `network_type` - CloudStack Network Type(default: Advanced)
112
143
  * `project_id` - Project uuid that the instance should belong to
113
144
  * `service_offering_id`- Service offering uuid to use for the instance
145
+ * `service_offering_name`- Service offering name to use for the instance
114
146
  * `template_id` - Template uuid to use for the instance
147
+ * `template_name` - Template name to use for the instance
115
148
  * `zone_id` - Zone uuid to launch the instance into
149
+ * `zone_name` - Zone uuid to launch the instance into
116
150
  * `keypair` - SSH keypair name
117
151
  * `pf_ip_address_id` - IP address ID for port forwarding rule
118
152
  * `pf_public_port` - Public port for port forwarding rule
data/build_rpm.sh CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/bin/bash
2
- VERSION=0.7.0
2
+ VERSION=0.8.0
3
3
  mkdir -p /tmp/vagrant-cloudstack-build_rpm.$$/vagrant-cloudstack-$VERSION
4
4
  cp -r . /tmp/vagrant-cloudstack-build_rpm.$$/vagrant-cloudstack-$VERSION/
5
5
  tar -C /tmp/vagrant-cloudstack-build_rpm.$$/ -czf ~/rpmbuild/SOURCES/vagrant-cloudstack-$VERSION.tar.gz vagrant-cloudstack-$VERSION
@@ -1,5 +1,5 @@
1
1
  require "log4r"
2
- require 'pp' # XXX FIXME REMOVE WHEN NOT NEEDED
2
+ require 'pp' # XXX FIXME REMOVE WHEN NOT NEEDED
3
3
 
4
4
  require 'vagrant/util/retryable'
5
5
 
@@ -19,30 +19,62 @@ module VagrantPlugins
19
19
 
20
20
  def call(env)
21
21
  # Initialize metrics if they haven't been
22
- env[:metrics] ||= {}
22
+ env[:metrics] ||= {}
23
23
 
24
24
  # Get the domain we're going to booting up in
25
- domain = env[:machine].provider_config.domain_id
25
+ domain = env[:machine].provider_config.domain_id
26
26
 
27
27
  # Get the configs
28
- domain_config = env[:machine].provider_config.get_domain_config(domain)
29
- zone_id = domain_config.zone_id
30
- network_id = domain_config.network_id
31
- network_type = domain_config.network_type
32
- project_id = domain_config.project_id
33
- service_offering_id = domain_config.service_offering_id
34
- template_id = domain_config.template_id
35
- keypair = domain_config.keypair
36
- pf_ip_address_id = domain_config.pf_ip_address_id
37
- pf_public_port = domain_config.pf_public_port
38
- pf_private_port = domain_config.pf_private_port
39
- security_group_ids = domain_config.security_group_ids
40
- display_name = domain_config.display_name
41
- group = domain_config.group
42
- security_group_ids = domain_config.security_group_ids
43
- security_group_names = domain_config.security_group_names
44
- security_groups = domain_config.security_groups
45
- user_data = domain_config.user_data
28
+ domain_config = env[:machine].provider_config.get_domain_config(domain)
29
+ zone_id = domain_config.zone_id
30
+ zone_name = domain_config.zone_name
31
+ network_id = domain_config.network_id
32
+ network_name = domain_config.network_name
33
+ network_type = domain_config.network_type
34
+ #TODO: Fog currently does not support the project apis, when that is fixed we should add that here too.
35
+ project_id = domain_config.project_id
36
+ service_offering_id = domain_config.service_offering_id
37
+ service_offering_name = domain_config.service_offering_name
38
+ template_id = domain_config.template_id
39
+ template_name = domain_config.template_name
40
+ keypair = domain_config.keypair
41
+ pf_ip_address_id = domain_config.pf_ip_address_id
42
+ pf_public_port = domain_config.pf_public_port
43
+ pf_private_port = domain_config.pf_private_port
44
+ display_name = domain_config.display_name
45
+ group = domain_config.group
46
+ security_group_ids = domain_config.security_group_ids
47
+ security_group_names = domain_config.security_group_names
48
+ security_groups = domain_config.security_groups
49
+ user_data = domain_config.user_data
50
+
51
+ # If for some reason the user have specified both network_name and network_id, take the id since that is
52
+ # more specific than the name. But always try to fetch the name of the network to present to the user.
53
+ if network_id.nil? and network_name
54
+ network_id = name_to_id(env, network_name, "network")
55
+ elsif network_id
56
+ network_name = id_to_name(env, network_id, "network")
57
+ end
58
+
59
+ if zone_id.nil? and zone_name
60
+ zone_id = name_to_id(env, zone_name, "zone", {'available' => true})
61
+ elsif zone_id
62
+ zone_name = id_to_name(env, zone_id, "zone", {'available' => true})
63
+ end
64
+
65
+ if service_offering_id.nil? and service_offering_name
66
+ service_offering_id = name_to_id(env, service_offering_name, "service_offering")
67
+ elsif service_offering_id
68
+ service_offering_name = id_to_name(env, service_offering_id, "service_offering")
69
+ end
70
+
71
+ if template_id.nil? and template_name
72
+ template_id = name_to_id(env, template_name, "template", {'zoneid' => zone_id,
73
+ 'templatefilter' => 'executable'})
74
+ elsif template_id
75
+ template_name = id_to_name(env, template_id, "template", {'zoneid' => zone_id,
76
+ 'templatefilter' => 'executable'})
77
+ end
46
78
 
47
79
  # If there is no keypair then warn the user
48
80
  if !keypair
@@ -80,11 +112,11 @@ module VagrantPlugins
80
112
  env[:ui].info(I18n.t("vagrant_cloudstack.launching_instance"))
81
113
  env[:ui].info(" -- Display Name: #{display_name}")
82
114
  env[:ui].info(" -- Group: #{group}") if group
83
- env[:ui].info(" -- Service offering UUID: #{service_offering_id}")
84
- env[:ui].info(" -- Template UUID: #{template_id}")
115
+ env[:ui].info(" -- Service offering: #{service_offering_name} (#{service_offering_id})")
116
+ env[:ui].info(" -- Template: #{template_name} (#{template_id})")
85
117
  env[:ui].info(" -- Project UUID: #{project_id}") if project_id != nil
86
- env[:ui].info(" -- Zone UUID: #{zone_id}")
87
- env[:ui].info(" -- Network UUID: #{network_id}") if network_id
118
+ env[:ui].info(" -- Zone: #{zone_name} (#{zone_id})")
119
+ env[:ui].info(" -- Network: #{network_name} (#{network_id})") if !network_id.nil? or !network_name.nil?
88
120
  env[:ui].info(" -- Keypair: #{keypair}") if keypair
89
121
  env[:ui].info(" -- User Data: Yes") if user_data
90
122
  if !security_group_ids.nil?
@@ -98,7 +130,7 @@ module VagrantPlugins
98
130
  security_group_names.each do |security_group_name|
99
131
  env[:ui].info(" -- Security Group Name: #{security_group_name}")
100
132
  # since we can't access Security Groups by name, we grab the ID and add it to the security_group_ids
101
- sg = env[:cloudstack_compute].list_security_groups["listsecuritygroupsresponse"]["securitygroup"].select{|sgrp| sgrp["name"] == security_group_name }
133
+ sg = env[:cloudstack_compute].list_security_groups["listsecuritygroupsresponse"]["securitygroup"].select { |sgrp| sgrp["name"] == security_group_name }
102
134
  security_group_ids.push(sg[0]["id"])
103
135
  end
104
136
  end
@@ -109,13 +141,13 @@ module VagrantPlugins
109
141
  # Creating the security group and retrieving it's ID
110
142
  sgid = nil
111
143
  begin
112
- sgid = env[:cloudstack_compute].create_security_group(:name => sg[:name],
144
+ sgid = env[:cloudstack_compute].create_security_group(:name => sg[:name],
113
145
  :description => sg[:description])["createsecuritygroupresponse"]["securitygroup"]["id"]
114
146
  env[:ui].info(" -- Security Group #{sg[:name]} created with ID: #{sgid}")
115
147
  rescue Exception => e
116
148
  if e.message =~ /already exis/
117
- existingGroup = env[:cloudstack_compute].list_security_groups["listsecuritygroupsresponse"]["securitygroup"].select {|secgrp| secgrp["name"] == sg[:name] }
118
- sgid = existingGroup[0]["id"]
149
+ existingGroup = env[:cloudstack_compute].list_security_groups["listsecuritygroupsresponse"]["securitygroup"].select { |secgrp| secgrp["name"] == sg[:name] }
150
+ sgid = existingGroup[0]["id"]
119
151
  env[:ui].info(" -- Security Group #{sg[:name]} found with ID: #{sgid}")
120
152
  end
121
153
  end
@@ -124,20 +156,20 @@ module VagrantPlugins
124
156
  # so we add the rules... Does it really matter if they already exist ? CLoudstack seems to take care of that!
125
157
  sg[:rules].each do |rule|
126
158
  case rule[:type]
127
- when "ingress"
128
- env[:cloudstack_compute].authorize_security_group_ingress(:securityGroupId => sgid,
129
- :protocol => rule[:protocol],
130
- :startport => rule[:startport],
131
- :endport => rule[:endport],
132
- :cidrlist => rule[:cidrlist])
133
- env[:ui].info(" --- Ingress Rule added: #{rule[:protocol]} from #{rule[:startport]} to #{rule[:endport]} (#{rule[:cidrlist]})")
134
- when "egress"
135
- env[:cloudstack_compute].authorize_security_group_egress(:securityGroupId => sgid,
136
- :protocol => rule[:protocol],
137
- :startport => rule[:startport],
138
- :endport => rule[:endport],
139
- :cidrlist => rule[:cidrlist])
140
- env[:ui].info(" --- Egress Rule added: #{rule[:protocol]} from #{rule[:startport]} to #{rule[:endport]} (#{rule[:cidrlist]})")
159
+ when "ingress"
160
+ env[:cloudstack_compute].authorize_security_group_ingress(:securityGroupId => sgid,
161
+ :protocol => rule[:protocol],
162
+ :startport => rule[:startport],
163
+ :endport => rule[:endport],
164
+ :cidrlist => rule[:cidrlist])
165
+ env[:ui].info(" --- Ingress Rule added: #{rule[:protocol]} from #{rule[:startport]} to #{rule[:endport]} (#{rule[:cidrlist]})")
166
+ when "egress"
167
+ env[:cloudstack_compute].authorize_security_group_egress(:securityGroupId => sgid,
168
+ :protocol => rule[:protocol],
169
+ :startport => rule[:startport],
170
+ :endport => rule[:endport],
171
+ :cidrlist => rule[:cidrlist])
172
+ env[:ui].info(" --- Egress Rule added: #{rule[:protocol]} from #{rule[:startport]} to #{rule[:endport]} (#{rule[:cidrlist]})")
141
173
  end
142
174
  end
143
175
 
@@ -154,34 +186,34 @@ module VagrantPlugins
154
186
 
155
187
  begin
156
188
  case network_type
157
- when "Advanced"
158
- options = {
159
- :display_name => display_name,
160
- :group => group,
161
- :zone_id => zone_id,
162
- :flavor_id => service_offering_id,
163
- :image_id => template_id,
164
- :network_ids => [network_id]
165
- }
166
- when "Basic"
167
- options = {
168
- :display_name => display_name,
169
- :group => group,
170
- :zone_id => zone_id,
171
- :flavor_id => service_offering_id,
172
- :image_id => template_id,
173
- :security_group_ids => security_group_ids
174
- }
189
+ when "Advanced"
190
+ options = {
191
+ :display_name => display_name,
192
+ :group => group,
193
+ :zone_id => zone_id,
194
+ :flavor_id => service_offering_id,
195
+ :image_id => template_id,
196
+ :network_ids => [network_id]
197
+ }
198
+ when "Basic"
199
+ options = {
200
+ :display_name => display_name,
201
+ :group => group,
202
+ :zone_id => zone_id,
203
+ :flavor_id => service_offering_id,
204
+ :image_id => template_id,
205
+ :security_group_ids => security_group_ids
206
+ }
175
207
  end
176
208
 
177
209
  options['project_id'] = project_id if project_id != nil
178
- options['key_name'] = keypair if keypair != nil
210
+ options['key_name'] = keypair if keypair != nil
179
211
 
180
212
  if user_data != nil
181
213
  options['user_data'] = Base64.encode64(user_data)
182
214
  if options['user_data'].length > 2048
183
215
  raise Errors::UserdataError,
184
- :userdataLength => options['user_data'].length
216
+ :userdataLength => options['user_data'].length
185
217
  end
186
218
  end
187
219
 
@@ -192,7 +224,7 @@ module VagrantPlugins
192
224
  # XXX FIXME vpc?
193
225
  if e.message =~ /subnet ID/
194
226
  raise Errors::FogError,
195
- :message => "Subnet ID not found: #{network_id}"
227
+ :message => "Subnet ID not found: #{network_id}"
196
228
  end
197
229
 
198
230
  raise
@@ -203,7 +235,7 @@ module VagrantPlugins
203
235
  # Immediately save the ID since it is created at this point.
204
236
  # XXX FIXME does cloudstack+fog return the job id rather than
205
237
  # server id?
206
- env[:machine].id = server.id
238
+ env[:machine].id = server.id
207
239
 
208
240
  # Wait for the instance to be ready first
209
241
  env[:metrics]["instance_ready_time"] = Util::Timer.time do
@@ -224,7 +256,7 @@ module VagrantPlugins
224
256
 
225
257
  # Notify the user
226
258
  raise Errors::InstanceReadyTimeout,
227
- timeout: domain_config.instance_ready_timeout
259
+ timeout: domain_config.instance_ready_timeout
228
260
  end
229
261
  end
230
262
 
@@ -291,12 +323,12 @@ module VagrantPlugins
291
323
  env[:ui].info(" -- Private port: #{pf_private_port}")
292
324
 
293
325
  options = {
294
- :ipaddressid => pf_ip_address_id,
295
- :publicport => pf_public_port,
296
- :privateport => pf_private_port,
297
- :protocol => "tcp",
298
- :virtualmachineid => env[:machine].id,
299
- :openfirewall => "true"
326
+ :ipaddressid => pf_ip_address_id,
327
+ :publicport => pf_public_port,
328
+ :privateport => pf_private_port,
329
+ :protocol => "tcp",
330
+ :virtualmachineid => env[:machine].id,
331
+ :openfirewall => "true"
300
332
  }
301
333
 
302
334
  begin
@@ -304,7 +336,7 @@ module VagrantPlugins
304
336
  while true
305
337
  response = env[:cloudstack_compute].query_async_job_result({:jobid => job_id})
306
338
  if response["queryasyncjobresultresponse"]["jobstatus"] != 0
307
- port_forwarding_rule = response["queryasyncjobresultresponse"]["jobresult"]["portforwardingrule"]
339
+ port_forwarding_rule = response["queryasyncjobresultresponse"]["jobresult"]["portforwardingrule"]
308
340
  break
309
341
  else
310
342
  sleep 2
@@ -324,10 +356,32 @@ module VagrantPlugins
324
356
  def terminate(env)
325
357
  destroy_env = env.dup
326
358
  destroy_env.delete(:interrupted)
327
- destroy_env[:config_validate] = false
359
+ destroy_env[:config_validate] = false
328
360
  destroy_env[:force_confirm_destroy] = true
329
361
  env[:action_runner].run(Action.action_destroy, destroy_env)
330
362
  end
363
+
364
+ private
365
+
366
+ def translate_from_to(env, resource_type, options)
367
+ pluralised_type = "#{resource_type}s"
368
+ full_response = env[:cloudstack_compute].send("list_#{pluralised_type}".to_sym, options)
369
+ full_response["list#{pluralised_type.tr('_','')}response"][resource_type.tr('_','')]
370
+ end
371
+
372
+ def name_to_id(env, resource_name, resource_type, options={})
373
+ env[:ui].info("Fetching UUID for #{resource_type} named '#{resource_name}'")
374
+ full_response = translate_from_to(env, resource_type, options)
375
+ result = full_response.find { |type| type["name"] == resource_name }
376
+ result['id']
377
+ end
378
+
379
+ def id_to_name(env, resource_id, resource_type, options={})
380
+ env[:ui].info("Fetching name for #{resource_type} with UUID '#{resource_id}'")
381
+ options.merge({'id' => resource_id})
382
+ full_response = translate_from_to(env, resource_type, options)
383
+ full_response[0]['name']
384
+ end
331
385
  end
332
386
  end
333
387
  end
@@ -48,6 +48,11 @@ module VagrantPlugins
48
48
  # @return [String]
49
49
  attr_accessor :network_id
50
50
 
51
+ # Network name that the instance should use
52
+ #
53
+ # @return [String]
54
+ attr_accessor :network_name
55
+
51
56
  # Network Type
52
57
  #
53
58
  # @return [String]
@@ -63,17 +68,33 @@ module VagrantPlugins
63
68
  # @return [String]
64
69
  attr_accessor :service_offering_id
65
70
 
71
+ # Service offering name to use for the instance
72
+ #
73
+ # @return [String]
74
+ attr_accessor :service_offering_name
75
+
66
76
  # Template uuid to use for the instance
67
77
  #
68
78
  # @return [String]
69
79
  attr_accessor :template_id
70
80
 
81
+ # Template name to use for the instance
82
+ #
83
+ # @return [String]
84
+ attr_accessor :template_name
85
+
71
86
  # Zone uuid to launch the instance into. If nil, it will
72
87
  # launch in default project.
73
88
  #
74
89
  # @return [String]
75
90
  attr_accessor :zone_id
76
91
 
92
+ # Zone name to launch the instance into. If nil, it will
93
+ # launch in default project.
94
+ #
95
+ # @return [String]
96
+ attr_accessor :zone_name
97
+
77
98
  # The name of the keypair to use.
78
99
  #
79
100
  # @return [String]
@@ -139,11 +160,15 @@ module VagrantPlugins
139
160
  @instance_ready_timeout = UNSET_VALUE
140
161
  @domain_id = UNSET_VALUE
141
162
  @network_id = UNSET_VALUE
163
+ @network_name = UNSET_VALUE
142
164
  @network_type = UNSET_VALUE
143
165
  @project_id = UNSET_VALUE
144
166
  @service_offering_id = UNSET_VALUE
167
+ @service_offering_name = UNSET_VALUE
145
168
  @template_id = UNSET_VALUE
169
+ @template_name = UNSET_VALUE
146
170
  @zone_id = UNSET_VALUE
171
+ @zone_name = UNSET_VALUE
147
172
  @keypair = UNSET_VALUE
148
173
  @pf_ip_address_id = UNSET_VALUE
149
174
  @pf_public_port = UNSET_VALUE
@@ -252,6 +277,9 @@ module VagrantPlugins
252
277
  # Network uuid must be nil, since we can't default that
253
278
  @network_id = nil if @network_id == UNSET_VALUE
254
279
 
280
+ # Network uuid must be nil, since we can't default that
281
+ @network_name = nil if @network_name == UNSET_VALUE
282
+
255
283
  # NetworkType is 'Advanced' by default
256
284
  @network_type = "Advanced" if @network_type == UNSET_VALUE
257
285
 
@@ -261,12 +289,21 @@ module VagrantPlugins
261
289
  # Service offering uuid must be nil, since we can't default that
262
290
  @service_offering_id = nil if @service_offering_id == UNSET_VALUE
263
291
 
292
+ # Service offering name must be nil, since we can't default that
293
+ @service_offering_name = nil if @service_offering_name == UNSET_VALUE
294
+
264
295
  # Template uuid must be nil, since we can't default that
265
296
  @template_id = nil if @template_id == UNSET_VALUE
266
297
 
298
+ # Template name must be nil, since we can't default that
299
+ @template_name = nil if @template_name == UNSET_VALUE
300
+
267
301
  # Zone uuid must be nil, since we can't default that
268
302
  @zone_id = nil if @zone_id == UNSET_VALUE
269
303
 
304
+ # Zone uuid must be nil, since we can't default that
305
+ @zone_name = nil if @zone_name == UNSET_VALUE
306
+
270
307
  # Keypair defaults to nil
271
308
  @keypair = nil if @keypair == UNSET_VALUE
272
309
 
@@ -336,8 +373,6 @@ module VagrantPlugins
336
373
  errors << I18n.t("vagrant_cloudstack.config.secret_key_required") if \
337
374
  config.secret_access_key.nil?
338
375
  end
339
-
340
- errors << I18n.t("vagrant_cloudstack.config.ami_required") if config.ami.nil?
341
376
  end
342
377
 
343
378
  { "Cloudstack Provider" => errors }
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
2
  module Cloudstack
3
- VERSION = "0.7.0"
3
+ VERSION = "0.8.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-cloudstack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mitchell Hashimoto
@@ -18,7 +18,7 @@ authors:
18
18
  autorequire:
19
19
  bindir: bin
20
20
  cert_chain: []
21
- date: 2014-06-17 00:00:00.000000000 Z
21
+ date: 2014-06-24 00:00:00.000000000 Z
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
24
24
  name: fog