vagrant-cloudstack 0.7.0 → 0.8.0

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