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 +4 -4
- data/CHANGELOG.md +7 -0
- data/README.md +35 -1
- data/build_rpm.sh +1 -1
- data/lib/vagrant-cloudstack/action/run_instance.rb +128 -74
- data/lib/vagrant-cloudstack/config.rb +37 -2
- data/lib/vagrant-cloudstack/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1bb87274b9c5ad3a39e17fb4ddefece7076ae0cb
|
4
|
+
data.tar.gz: 9b6256bec79396f96659d72d1c1650d53a6883ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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'
|
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
|
25
|
+
domain = env[:machine].provider_config.domain_id
|
26
26
|
|
27
27
|
# Get the configs
|
28
|
-
domain_config
|
29
|
-
zone_id
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
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
|
84
|
-
env[:ui].info(" -- Template
|
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
|
87
|
-
env[:ui].info(" -- Network
|
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
|
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
|
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
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
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
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
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']
|
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
|
-
|
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
|
-
|
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
|
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
|
-
|
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
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
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 =
|
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]
|
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 }
|
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.
|
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-
|
21
|
+
date: 2014-06-24 00:00:00.000000000 Z
|
22
22
|
dependencies:
|
23
23
|
- !ruby/object:Gem::Dependency
|
24
24
|
name: fog
|