vagrant-cloudstack 1.3.0 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +18 -19
- data/.ruby-version +1 -1
- data/.travis.yml +19 -19
- data/CHANGELOG.md +179 -171
- data/Docker/.dockerignore +2 -0
- data/Docker/Dockerfile +51 -0
- data/Docker/Dockerfile.chefdk_0_17 +49 -0
- data/Docker/Dockerfile.latest_dependencies +49 -0
- data/Docker/README.md +67 -0
- data/Docker/vac.ps1 +29 -0
- data/Docker/vac.sh +30 -0
- data/Gemfile +20 -20
- data/LICENSE +8 -8
- data/README.md +416 -416
- data/Rakefile +106 -99
- data/bootstrap.key +27 -0
- data/build_rpm.sh +7 -7
- data/functional-tests/basic/Vagrantfile.basic_networking +45 -45
- data/functional-tests/basic/basic_spec.rb +21 -21
- data/functional-tests/networking/Vagrantfile.advanced_networking +119 -102
- data/functional-tests/networking/networking_spec.rb +14 -0
- data/functional-tests/rsync/Vagrantfile.advanced_networking +39 -56
- data/functional-tests/rsync/rsync_spec.rb +9 -9
- data/functional-tests/vmlifecycle/Vagrantfile.advanced_networking +66 -82
- data/functional-tests/vmlifecycle/vmlifecycle_spec.rb +13 -13
- data/lib/vagrant-cloudstack/action/connect_cloudstack.rb +47 -47
- data/lib/vagrant-cloudstack/action/is_created.rb +18 -18
- data/lib/vagrant-cloudstack/action/is_stopped.rb +18 -18
- data/lib/vagrant-cloudstack/action/message_already_created.rb +16 -16
- data/lib/vagrant-cloudstack/action/message_not_created.rb +16 -16
- data/lib/vagrant-cloudstack/action/message_will_not_destroy.rb +16 -16
- data/lib/vagrant-cloudstack/action/read_rdp_info.rb +76 -76
- data/lib/vagrant-cloudstack/action/read_ssh_info.rb +104 -87
- data/lib/vagrant-cloudstack/action/read_state.rb +38 -38
- data/lib/vagrant-cloudstack/action/read_winrm_info.rb +103 -103
- data/lib/vagrant-cloudstack/action/run_instance.rb +798 -703
- data/lib/vagrant-cloudstack/action/start_instance.rb +81 -81
- data/lib/vagrant-cloudstack/action/stop_instance.rb +28 -28
- data/lib/vagrant-cloudstack/action/terminate_instance.rb +269 -224
- data/lib/vagrant-cloudstack/action/timed_provision.rb +21 -21
- data/lib/vagrant-cloudstack/action/wait_for_state.rb +41 -41
- data/lib/vagrant-cloudstack/action/warn_networks.rb +19 -19
- data/lib/vagrant-cloudstack/action.rb +210 -210
- data/lib/vagrant-cloudstack/capabilities/rdp.rb +12 -12
- data/lib/vagrant-cloudstack/capabilities/winrm.rb +12 -12
- data/lib/vagrant-cloudstack/config.rb +566 -548
- data/lib/vagrant-cloudstack/errors.rb +27 -27
- data/lib/vagrant-cloudstack/exceptions/exceptions.rb +10 -10
- data/lib/vagrant-cloudstack/model/cloudstack_resource.rb +51 -33
- data/lib/vagrant-cloudstack/plugin.rb +82 -82
- data/lib/vagrant-cloudstack/provider.rb +58 -58
- data/lib/vagrant-cloudstack/service/cloudstack_resource_service.rb +64 -58
- data/lib/vagrant-cloudstack/util/timer.rb +17 -17
- data/lib/vagrant-cloudstack/version.rb +5 -5
- data/lib/vagrant-cloudstack.rb +17 -17
- data/locales/en.yml +131 -123
- data/spec/spec_helper.rb +8 -6
- data/spec/vagrant-cloudstack/action/read_ssh_info_spec.rb +80 -0
- data/spec/vagrant-cloudstack/config_spec.rb +355 -355
- data/spec/vagrant-cloudstack/model/cloudstack_resource_spec.rb +95 -73
- data/spec/vagrant-cloudstack/service/cloudstack_resource_service_spec.rb +43 -43
- data/spec/vagrant-cloudstack/support/be_a_resource.rb +6 -0
- data/vagrant-cloudstack.gemspec +59 -59
- data/vagrant-cloudstack.spec +42 -42
- metadata +14 -7
- data/dummy.box +0 -0
- data/example_box/README.md +0 -13
- data/example_box/metadata.json +0 -3
- data/functional-tests/networking/rsync_spec.rb +0 -12
@@ -1,17 +1,17 @@
|
|
1
|
-
module VagrantPlugins
|
2
|
-
module Cloudstack
|
3
|
-
module Util
|
4
|
-
class Timer
|
5
|
-
# A basic utility method that times the execution of the given
|
6
|
-
# block and returns it.
|
7
|
-
def self.time
|
8
|
-
start_time = Time.now.to_f
|
9
|
-
yield
|
10
|
-
end_time = Time.now.to_f
|
11
|
-
|
12
|
-
end_time - start_time
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
1
|
+
module VagrantPlugins
|
2
|
+
module Cloudstack
|
3
|
+
module Util
|
4
|
+
class Timer
|
5
|
+
# A basic utility method that times the execution of the given
|
6
|
+
# block and returns it.
|
7
|
+
def self.time
|
8
|
+
start_time = Time.now.to_f
|
9
|
+
yield
|
10
|
+
end_time = Time.now.to_f
|
11
|
+
|
12
|
+
end_time - start_time
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
module VagrantPlugins
|
2
|
-
module Cloudstack
|
3
|
-
VERSION = '1.
|
4
|
-
end
|
5
|
-
end
|
1
|
+
module VagrantPlugins
|
2
|
+
module Cloudstack
|
3
|
+
VERSION = '1.4.0'
|
4
|
+
end
|
5
|
+
end
|
data/lib/vagrant-cloudstack.rb
CHANGED
@@ -1,17 +1,17 @@
|
|
1
|
-
require "pathname"
|
2
|
-
require "vagrant-cloudstack/plugin"
|
3
|
-
|
4
|
-
module VagrantPlugins
|
5
|
-
module Cloudstack
|
6
|
-
lib_path = Pathname.new(File.expand_path("../vagrant-cloudstack", __FILE__))
|
7
|
-
autoload :Action, lib_path.join("action")
|
8
|
-
autoload :Errors, lib_path.join("errors")
|
9
|
-
|
10
|
-
# This returns the path to the source of this plugin.
|
11
|
-
#
|
12
|
-
# @return [Pathname]
|
13
|
-
def self.source_root
|
14
|
-
@source_root ||= Pathname.new(File.expand_path("../../", __FILE__))
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
1
|
+
require "pathname"
|
2
|
+
require "vagrant-cloudstack/plugin"
|
3
|
+
|
4
|
+
module VagrantPlugins
|
5
|
+
module Cloudstack
|
6
|
+
lib_path = Pathname.new(File.expand_path("../vagrant-cloudstack", __FILE__))
|
7
|
+
autoload :Action, lib_path.join("action")
|
8
|
+
autoload :Errors, lib_path.join("errors")
|
9
|
+
|
10
|
+
# This returns the path to the source of this plugin.
|
11
|
+
#
|
12
|
+
# @return [Pathname]
|
13
|
+
def self.source_root
|
14
|
+
@source_root ||= Pathname.new(File.expand_path("../../", __FILE__))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/locales/en.yml
CHANGED
@@ -1,123 +1,131 @@
|
|
1
|
-
en:
|
2
|
-
vagrant_cloudstack:
|
3
|
-
already_status: |-
|
4
|
-
The machine is already %{status}.
|
5
|
-
basic_network: |-
|
6
|
-
Network name or id defined but zone %{zone_name} is of network type 'Basic'
|
7
|
-
Network name or id will be ignored
|
8
|
-
launching_instance: |-
|
9
|
-
Launching an instance with the following settings...
|
10
|
-
launch_no_keypair_no_sshkey: |-
|
11
|
-
No keypair or ssh_key specified to launch your instance with.
|
12
|
-
Generating a temporary keypair for this instance...
|
13
|
-
launch_vpc_warning: |-
|
14
|
-
Warning! You're launching this instance into a VPC without an
|
15
|
-
elastic IP. Please verify you're properly connected to a VPN so
|
16
|
-
you can access this machine, otherwise Vagrant will not be able
|
17
|
-
to SSH into it.
|
18
|
-
not_created: |-
|
19
|
-
Instance is not created. Please run `vagrant up` first.
|
20
|
-
ready: |-
|
21
|
-
Machine is booted and ready for use!
|
22
|
-
rsync_not_found_warning: |-
|
23
|
-
Warning! Folder sync disabled because the rsync binary is missing.
|
24
|
-
Make sure rsync is installed and the binary can be found in the PATH.
|
25
|
-
rsync_folder: |-
|
26
|
-
Rsyncing folder: %{hostpath} => %{guestpath}
|
27
|
-
security_groups_disabled: |-
|
28
|
-
Security groups defined but not supported in the zone %{zone_name}
|
29
|
-
Defined security groups will be ignored
|
30
|
-
ssh_key_pair_creating: |-
|
31
|
-
Creating an SSH keypair in CloudStack...
|
32
|
-
ssh_key_pair_removing: |-
|
33
|
-
Deleting the SSH keypair in CloudStack...
|
34
|
-
ssh_key_pair_no_success_removing: |-
|
35
|
-
Removing SSH keypair returned unsuccesful (keypair name: %{name})
|
36
|
-
starting: |-
|
37
|
-
Starting the instance...
|
38
|
-
stopping: |-
|
39
|
-
Stopping the instance...
|
40
|
-
terminating: |-
|
41
|
-
Terminating the instance...
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
Waiting for
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
Deleting
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
1
|
+
en:
|
2
|
+
vagrant_cloudstack:
|
3
|
+
already_status: |-
|
4
|
+
The machine is already %{status}.
|
5
|
+
basic_network: |-
|
6
|
+
Network name or id defined but zone %{zone_name} is of network type 'Basic'
|
7
|
+
Network name or id will be ignored
|
8
|
+
launching_instance: |-
|
9
|
+
Launching an instance with the following settings...
|
10
|
+
launch_no_keypair_no_sshkey: |-
|
11
|
+
No keypair or ssh_key specified to launch your instance with.
|
12
|
+
Generating a temporary keypair for this instance...
|
13
|
+
launch_vpc_warning: |-
|
14
|
+
Warning! You're launching this instance into a VPC without an
|
15
|
+
elastic IP. Please verify you're properly connected to a VPN so
|
16
|
+
you can access this machine, otherwise Vagrant will not be able
|
17
|
+
to SSH into it.
|
18
|
+
not_created: |-
|
19
|
+
Instance is not created. Please run `vagrant up` first.
|
20
|
+
ready: |-
|
21
|
+
Machine is booted and ready for use!
|
22
|
+
rsync_not_found_warning: |-
|
23
|
+
Warning! Folder sync disabled because the rsync binary is missing.
|
24
|
+
Make sure rsync is installed and the binary can be found in the PATH.
|
25
|
+
rsync_folder: |-
|
26
|
+
Rsyncing folder: %{hostpath} => %{guestpath}
|
27
|
+
security_groups_disabled: |-
|
28
|
+
Security groups defined but not supported in the zone %{zone_name}
|
29
|
+
Defined security groups will be ignored
|
30
|
+
ssh_key_pair_creating: |-
|
31
|
+
Creating an SSH keypair in CloudStack...
|
32
|
+
ssh_key_pair_removing: |-
|
33
|
+
Deleting the SSH keypair in CloudStack...
|
34
|
+
ssh_key_pair_no_success_removing: |-
|
35
|
+
Removing SSH keypair returned unsuccesful (keypair name: %{name})
|
36
|
+
starting: |-
|
37
|
+
Starting the instance...
|
38
|
+
stopping: |-
|
39
|
+
Stopping the instance...
|
40
|
+
terminating: |-
|
41
|
+
Terminating the instance...
|
42
|
+
terminateinstance_done: |-
|
43
|
+
Done removing resources
|
44
|
+
waiting_for_ready: |-
|
45
|
+
Waiting for instance to become "ready"...
|
46
|
+
waiting_for_communicator: |-
|
47
|
+
Waiting for %{communicator} to become available...
|
48
|
+
enabling_static_nat: |-
|
49
|
+
Enabling Static NAT for this instance ...
|
50
|
+
disabling_static_nat: |-
|
51
|
+
Disabling Static NAT ...
|
52
|
+
creating_port_forwarding_rule: |-
|
53
|
+
Creating a port forwarding rule for this instance ...
|
54
|
+
deleting_port_forwarding_rule: |-
|
55
|
+
Deleting the port forwarding rule ...
|
56
|
+
deleting_volumes: |-
|
57
|
+
Deleting additional volumes ...
|
58
|
+
delete_volume_failed: |-
|
59
|
+
-- Failed to delete volume: %{volume_id}
|
60
|
+
detach_volume_failed: |-
|
61
|
+
-- Failed to detach volume: %{message}
|
62
|
+
creating_firewall_rule: |-
|
63
|
+
Creating a firewall rule ...
|
64
|
+
deleting_firewall_rule: |-
|
65
|
+
Deleting the firewall rule ...
|
66
|
+
warn_networks: |-
|
67
|
+
Warning! The Cloudstack provider doesn't support any of the Vagrant
|
68
|
+
high-level network configurations (`config.vm.network`). They
|
69
|
+
will be silently ignored.
|
70
|
+
will_not_destroy: |-
|
71
|
+
The instance '%{name}' will not be destroyed, since the confirmation
|
72
|
+
was declined.
|
73
|
+
no_instance_found : |-
|
74
|
+
No instance found, already destroyed?
|
75
|
+
|
76
|
+
config:
|
77
|
+
api_key_required: |-
|
78
|
+
An access key ID must be specified via "api_key"
|
79
|
+
template_id_required: |-
|
80
|
+
A template_id must be configured via "template_id"
|
81
|
+
secret_key_missing: |-
|
82
|
+
The specified secret key for Cloudstack could not be found
|
83
|
+
|
84
|
+
errors:
|
85
|
+
fog_error: |-
|
86
|
+
There was an error talking to Cloudstack. The error message is shown
|
87
|
+
below:
|
88
|
+
|
89
|
+
%{message}
|
90
|
+
instance_ready_timeout: |-
|
91
|
+
The instance never became "ready" in Cloudstack. The timeout currently
|
92
|
+
set waiting for the instance to become ready is %{timeout} seconds.
|
93
|
+
Please verify that the machine properly boots. If you need more time
|
94
|
+
set the `instance_ready_timeout` configuration on the Cloudstack provider.
|
95
|
+
rsync_error: |-
|
96
|
+
There was an error when attemping to rsync a share folder.
|
97
|
+
Please inspect the error message below for more info.
|
98
|
+
|
99
|
+
Host path: %{hostpath}
|
100
|
+
Guest path: %{guestpath}
|
101
|
+
Error: %{stderr}
|
102
|
+
user_data_error: |-
|
103
|
+
The base64 encoded user data length (%{userdataLength}) is greater than 2048.
|
104
|
+
|
105
|
+
states:
|
106
|
+
short_not_created: |-
|
107
|
+
not created
|
108
|
+
long_not_created: |-
|
109
|
+
The instance is not created. Run `vagrant up` to create it.
|
110
|
+
|
111
|
+
short_starting: |-
|
112
|
+
starting
|
113
|
+
long_starting: |-
|
114
|
+
The instance is starting.
|
115
|
+
|
116
|
+
short_stopped: |-
|
117
|
+
stopped
|
118
|
+
long_stopped: |-
|
119
|
+
The instance is stopped. Run `vagrant up` to start it.
|
120
|
+
|
121
|
+
short_stopping: |-
|
122
|
+
stopping
|
123
|
+
long_stopping: |-
|
124
|
+
The instance is stopping. Wait until is completely stopped to
|
125
|
+
run `vagrant up` and start it.
|
126
|
+
|
127
|
+
short_running: |-
|
128
|
+
running
|
129
|
+
long_running: |-
|
130
|
+
The instance is running. To stop this machine, you can run
|
131
|
+
`vagrant halt`. To destroy the machine, you can run `vagrant destroy`.
|
data/spec/spec_helper.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
require 'simplecov'
|
2
|
-
require 'coveralls'
|
3
|
-
require 'rspec/its'
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
require 'simplecov'
|
2
|
+
require 'coveralls'
|
3
|
+
require 'rspec/its'
|
4
|
+
|
5
|
+
Dir["#{__dir__}/vagrant-cloudstack/support/**/*.rb"].each { |f| require f }
|
6
|
+
|
7
|
+
SimpleCov.start
|
8
|
+
Coveralls.wear!
|
@@ -0,0 +1,80 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'vagrant-cloudstack/action/read_ssh_info'
|
3
|
+
require 'vagrant-cloudstack/config'
|
4
|
+
|
5
|
+
describe VagrantPlugins::Cloudstack::Action::ReadSSHInfo do
|
6
|
+
let(:action) { VagrantPlugins::Cloudstack::Action::ReadSSHInfo.new(nil, nil) }
|
7
|
+
|
8
|
+
describe "#fetch_nic_ip_address" do
|
9
|
+
subject { action.fetch_nic_ip_address(nics, domain_config) }
|
10
|
+
|
11
|
+
let(:nics) do
|
12
|
+
[
|
13
|
+
{ "networkid" => "networkid1", "networkname" => "networkname1", "ipaddress" => "127.0.0.1" },
|
14
|
+
{ "networkid" => "networkid2", "networkname" => "networkname2", "ipaddress" => "127.0.0.2" },
|
15
|
+
{ "networkid" => "networkid3", "networkname" => "networkname3", "ipaddress" => "127.0.0.3" },
|
16
|
+
]
|
17
|
+
end
|
18
|
+
|
19
|
+
let(:ssh_network_id) { Vagrant::Plugin::V2::Config::UNSET_VALUE }
|
20
|
+
let(:ssh_network_name) { Vagrant::Plugin::V2::Config::UNSET_VALUE }
|
21
|
+
|
22
|
+
let(:domain_config) do
|
23
|
+
config = VagrantPlugins::Cloudstack::Config.new
|
24
|
+
config.domain_config :cloudstack do |cloudstack|
|
25
|
+
cloudstack.ssh_network_id = ssh_network_id
|
26
|
+
cloudstack.ssh_network_name = ssh_network_name
|
27
|
+
end
|
28
|
+
config.finalize!
|
29
|
+
config.get_domain_config(:cloudstack)
|
30
|
+
end
|
31
|
+
|
32
|
+
context "without neither ssh_network_id and ssh_network_name" do
|
33
|
+
it { should eq "127.0.0.1" }
|
34
|
+
end
|
35
|
+
|
36
|
+
context "with ssh_network_id" do
|
37
|
+
context "when exists in nics" do
|
38
|
+
let(:ssh_network_id) { "networkid2" }
|
39
|
+
|
40
|
+
it { should eq "127.0.0.2" }
|
41
|
+
end
|
42
|
+
|
43
|
+
context "when not exists in nics" do
|
44
|
+
let(:ssh_network_id) { "unknown" }
|
45
|
+
|
46
|
+
it { should eq "127.0.0.1" }
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context "with ssh_network_id" do
|
51
|
+
context "when exists in nics" do
|
52
|
+
let(:ssh_network_name) { "networkname3" }
|
53
|
+
|
54
|
+
it { should eq "127.0.0.3" }
|
55
|
+
end
|
56
|
+
|
57
|
+
context "when not exists in nics" do
|
58
|
+
let(:ssh_network_name) { "unknown" }
|
59
|
+
|
60
|
+
it { should eq "127.0.0.1" }
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
context "with both ssh_network_id and ssh_network_name" do
|
65
|
+
context "when exists in nics" do
|
66
|
+
let(:ssh_network_id) { "networkid2" }
|
67
|
+
let(:ssh_network_name) { "networkname3" }
|
68
|
+
|
69
|
+
it { should eq "127.0.0.2" }
|
70
|
+
end
|
71
|
+
|
72
|
+
context "when not exists in nics" do
|
73
|
+
let(:ssh_network_id) { "unknown" }
|
74
|
+
let(:ssh_network_name) { "unknown" }
|
75
|
+
|
76
|
+
it { should eq "127.0.0.1" }
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -1,355 +1,355 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "vagrant-cloudstack/config"
|
3
|
-
|
4
|
-
describe VagrantPlugins::Cloudstack::Config do
|
5
|
-
let(:instance) { described_class.new }
|
6
|
-
|
7
|
-
# Ensure tests are not affected by Cloudstack credential environment variables
|
8
|
-
before :each do
|
9
|
-
ENV.stub(:[] => nil)
|
10
|
-
end
|
11
|
-
|
12
|
-
describe "defaults" do
|
13
|
-
subject do
|
14
|
-
instance.tap do |o|
|
15
|
-
o.finalize!
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
its("host") { should be_nil }
|
20
|
-
its("path") { should be_nil }
|
21
|
-
its("port") { should be_nil }
|
22
|
-
its("scheme") { should be_nil }
|
23
|
-
its("api_key") { should be_nil }
|
24
|
-
its("secret_key") { should be_nil }
|
25
|
-
its("instance_ready_timeout") { should == 120 }
|
26
|
-
its("domain_id") { should be_nil }
|
27
|
-
its("network_id") { should be_nil }
|
28
|
-
its("project_id") { should be_nil }
|
29
|
-
its("service_offering_id") { should be_nil }
|
30
|
-
its("disk_offering_id") { should be_nil }
|
31
|
-
its("template_id") { should be_nil }
|
32
|
-
its("zone_id") { should be_nil }
|
33
|
-
its("keypair") { should be_nil }
|
34
|
-
its("static_nat") { should == [] }
|
35
|
-
its("pf_ip_address_id") { should be_nil }
|
36
|
-
its("pf_ip_address") { should be_nil }
|
37
|
-
its("pf_public_port") { should be_nil }
|
38
|
-
its("pf_public_rdp_port") { should be_nil }
|
39
|
-
its("pf_private_rdp_port") { should == 3389 }
|
40
|
-
its("pf_public_port_randomrange") { should == {:start=>49160, :end=>49200} }
|
41
|
-
its("pf_private_port") { should be_nil }
|
42
|
-
its("pf_open_firewall") { should == true }
|
43
|
-
its("pf_trusted_networks") { should be_nil }
|
44
|
-
its("port_forwarding_rules") { should == [] }
|
45
|
-
its("firewall_rules") { should == [] }
|
46
|
-
its("security_group_ids") { should == [] }
|
47
|
-
its("display_name") { should be_nil }
|
48
|
-
its("group") { should be_nil }
|
49
|
-
its("security_group_names") { should == [] }
|
50
|
-
its("security_groups") { should == [] }
|
51
|
-
its("user_data") { should be_nil }
|
52
|
-
its("ssh_key") { should be_nil }
|
53
|
-
its("ssh_user") { should be_nil }
|
54
|
-
its("vm_user") { should be_nil }
|
55
|
-
its("vm_password") { should be_nil }
|
56
|
-
its("private_ip_address") { should be_nil }
|
57
|
-
its("expunge_on_destroy") { should == false }
|
58
|
-
end
|
59
|
-
|
60
|
-
describe "getting credentials from environment" do
|
61
|
-
context "without CloudStack credential environment variables" do
|
62
|
-
subject do
|
63
|
-
instance.tap do |o|
|
64
|
-
o.finalize!
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
its("api_key") { should be_nil }
|
69
|
-
its("secret_key") { should be_nil }
|
70
|
-
end
|
71
|
-
|
72
|
-
context "with CloudStack credential variables" do
|
73
|
-
before :each do
|
74
|
-
ENV.stub(:[]).with("CLOUDSTACK_API_KEY").and_return("api_key")
|
75
|
-
ENV.stub(:[]).with("CLOUDSTACK_SECRET_KEY").and_return("secret_key")
|
76
|
-
end
|
77
|
-
|
78
|
-
subject do
|
79
|
-
instance.tap do |o|
|
80
|
-
o.finalize!
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
its("api_key") { should == "api_key" }
|
85
|
-
its("secret_key") { should == "secret_key" }
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
describe "overriding defaults" do
|
90
|
-
# I typically don't meta-program in tests, but this is a very
|
91
|
-
# simple boilerplate test, so I cut corners here. It just sets
|
92
|
-
# each of these attributes to "foo" in isolation, and reads the value
|
93
|
-
# and asserts the proper result comes back out.
|
94
|
-
[:api_key, :template_id, :zone_id, :instance_ready_timeout,
|
95
|
-
:service_offering_id, :disk_offering_id, :api_key,
|
96
|
-
:secret_key, :network_id, :user_data].each do |attribute|
|
97
|
-
|
98
|
-
it "should not default #{attribute} if overridden" do
|
99
|
-
instance.send("#{attribute}=".to_sym, "foo")
|
100
|
-
instance.finalize!
|
101
|
-
instance.send(attribute).should == "foo"
|
102
|
-
end
|
103
|
-
|
104
|
-
end
|
105
|
-
|
106
|
-
it 'should not default pf_open_firewall if overridden' do
|
107
|
-
instance.pf_open_firewall = false
|
108
|
-
instance.finalize!
|
109
|
-
|
110
|
-
instance.pf_open_firewall.should == false
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
describe "getting credentials from environment" do
|
115
|
-
context "without Cloudstack credential environment variables" do
|
116
|
-
subject do
|
117
|
-
instance.tap do |o|
|
118
|
-
o.finalize!
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
its("api_key") { should be_nil }
|
123
|
-
its("secret_key") { should be_nil }
|
124
|
-
end
|
125
|
-
|
126
|
-
end
|
127
|
-
|
128
|
-
describe "domain config" do
|
129
|
-
let(:config_host) { "foo" }
|
130
|
-
let(:config_path) { "foo" }
|
131
|
-
let(:config_port) { "foo" }
|
132
|
-
let(:config_scheme) { "foo" }
|
133
|
-
let(:config_api_key) { "foo" }
|
134
|
-
let(:config_secret_key) { "foo" }
|
135
|
-
let(:config_instance_ready_timeout) { 11111 }
|
136
|
-
let(:config_domain_id) { "foo" }
|
137
|
-
let(:config_network_id) { "foo" }
|
138
|
-
let(:config_project_id) { "foo" }
|
139
|
-
let(:config_service_offering_id) { "foo" }
|
140
|
-
let(:config_disk_offering_id) { "foo" }
|
141
|
-
let(:config_template_id) { "foo" }
|
142
|
-
let(:config_zone_id) { "foo" }
|
143
|
-
let(:config_keypair) { "foo" }
|
144
|
-
let(:config_static_nat) { [{:foo => "bar"}, {:bar => "foo"}] }
|
145
|
-
let(:config_pf_ip_address_id) { "foo" }
|
146
|
-
let(:config_pf_ip_address) { "foo" }
|
147
|
-
let(:config_pf_public_port_randomrange) { {:start=>1, :end=>9} }
|
148
|
-
let(:config_pf_public_port) { "foo" }
|
149
|
-
let(:config_pf_public_rdp_port) { "foo" }
|
150
|
-
let(:config_pf_private_rdp_port) { "foo" }
|
151
|
-
let(:config_pf_private_port) { "foo" }
|
152
|
-
let(:config_pf_open_firewall) { false }
|
153
|
-
let(:config_pf_trusted_networks) { ["foo", "bar"] }
|
154
|
-
let(:config_port_forwarding_rules) { [{:foo => "bar"}, {:bar => "foo"}] }
|
155
|
-
let(:config_firewall_rules) { [{:foo => "bar"}, {:bar => "foo"}] }
|
156
|
-
let(:config_security_group_ids) { ["foo", "bar"] }
|
157
|
-
let(:config_display_name) { "foo" }
|
158
|
-
let(:config_group) { "foo" }
|
159
|
-
let(:config_security_group_names) { ["foo", "bar"] }
|
160
|
-
let(:config_security_groups) { [{:foo => "bar"}, {:bar => "foo"}] }
|
161
|
-
let(:config_ssh_key) { "./foo.pem" }
|
162
|
-
let(:config_ssh_user) { "foo" }
|
163
|
-
let(:config_vm_user) { "foo" }
|
164
|
-
let(:config_vm_password) { "foo" }
|
165
|
-
let(:config_private_ip_address) { "foo" }
|
166
|
-
let(:config_expunge_on_destroy) { "foo" }
|
167
|
-
|
168
|
-
def set_test_values(instance)
|
169
|
-
instance.host = config_host
|
170
|
-
instance.path = config_path
|
171
|
-
instance.port = config_port
|
172
|
-
instance.scheme = config_scheme
|
173
|
-
instance.api_key = config_api_key
|
174
|
-
instance.secret_key = config_secret_key
|
175
|
-
instance.instance_ready_timeout = config_instance_ready_timeout
|
176
|
-
instance.domain_id = config_domain_id
|
177
|
-
instance.network_id = config_network_id
|
178
|
-
instance.project_id = config_project_id
|
179
|
-
instance.service_offering_id = config_service_offering_id
|
180
|
-
instance.disk_offering_id = config_disk_offering_id
|
181
|
-
instance.template_id = config_template_id
|
182
|
-
instance.zone_id = config_zone_id
|
183
|
-
instance.keypair = config_keypair
|
184
|
-
instance.static_nat = config_static_nat
|
185
|
-
instance.pf_ip_address_id = config_pf_ip_address_id
|
186
|
-
instance.pf_public_port_randomrange = config_pf_public_port_randomrange
|
187
|
-
instance.pf_ip_address = config_pf_ip_address
|
188
|
-
instance.pf_public_port = config_pf_public_port
|
189
|
-
instance.pf_public_rdp_port = config_pf_public_rdp_port
|
190
|
-
instance.pf_private_rdp_port = config_pf_private_rdp_port
|
191
|
-
instance.pf_private_port = config_pf_private_port
|
192
|
-
instance.pf_open_firewall = config_pf_open_firewall
|
193
|
-
instance.pf_trusted_networks = config_pf_trusted_networks
|
194
|
-
instance.port_forwarding_rules = config_port_forwarding_rules
|
195
|
-
instance.firewall_rules = config_firewall_rules
|
196
|
-
instance.security_group_ids = config_security_group_ids
|
197
|
-
instance.display_name = config_display_name
|
198
|
-
instance.group = config_group
|
199
|
-
instance.security_group_names = config_security_group_names
|
200
|
-
instance.security_groups = config_security_groups
|
201
|
-
instance.ssh_key = config_ssh_key
|
202
|
-
instance.ssh_user = config_ssh_user
|
203
|
-
instance.vm_user = config_vm_user
|
204
|
-
instance.vm_password = config_vm_password
|
205
|
-
instance.private_ip_address = config_private_ip_address
|
206
|
-
instance.expunge_on_destroy = config_expunge_on_destroy
|
207
|
-
end
|
208
|
-
|
209
|
-
it "should raise an exception if not finalized" do
|
210
|
-
expect { instance.get_domain_config("default") }.
|
211
|
-
to raise_error
|
212
|
-
end
|
213
|
-
|
214
|
-
context "with no specific config set" do
|
215
|
-
subject do
|
216
|
-
# Set the values on the top-level object
|
217
|
-
set_test_values(instance)
|
218
|
-
|
219
|
-
# Finalize so we can get the domain config
|
220
|
-
instance.finalize!
|
221
|
-
|
222
|
-
# Get a lower level domain
|
223
|
-
instance.get_domain_config("default")
|
224
|
-
end
|
225
|
-
|
226
|
-
its("host") { should == config_host }
|
227
|
-
its("path") { should == config_path }
|
228
|
-
its("port") { should == config_port }
|
229
|
-
its("scheme") { should == config_scheme }
|
230
|
-
its("api_key") { should == config_api_key }
|
231
|
-
its("secret_key") { should == config_secret_key }
|
232
|
-
its("instance_ready_timeout") { should == config_instance_ready_timeout }
|
233
|
-
its("domain_id") { should == config_domain_id }
|
234
|
-
its("network_id") { should == config_network_id }
|
235
|
-
its("project_id") { should == config_project_id }
|
236
|
-
its("service_offering_id") { should == config_service_offering_id }
|
237
|
-
its("disk_offering_id") { should == config_disk_offering_id }
|
238
|
-
its("template_id") { should == config_template_id }
|
239
|
-
its("zone_id") { should == config_zone_id }
|
240
|
-
its("keypair") { should == config_keypair }
|
241
|
-
its("static_nat") { should == config_static_nat }
|
242
|
-
its("pf_ip_address_id") { should == config_pf_ip_address_id }
|
243
|
-
its("pf_ip_address") { should == config_pf_ip_address }
|
244
|
-
its("pf_public_port") { should == config_pf_public_port }
|
245
|
-
its("pf_public_rdp_port") { should == config_pf_public_rdp_port }
|
246
|
-
its("pf_private_rdp_port") { should == config_pf_private_rdp_port }
|
247
|
-
its("pf_public_port_randomrange") { should == config_pf_public_port_randomrange}
|
248
|
-
its("pf_private_port") { should == config_pf_private_port }
|
249
|
-
its("pf_trusted_networks") { should == config_pf_trusted_networks}
|
250
|
-
its("pf_open_firewall") { should == config_pf_open_firewall }
|
251
|
-
its("port_forwarding_rules") { should == config_port_forwarding_rules }
|
252
|
-
its("firewall_rules") { should == config_firewall_rules }
|
253
|
-
its("security_group_ids") { should == config_security_group_ids }
|
254
|
-
its("display_name") { should == config_display_name }
|
255
|
-
its("group") { should == config_group }
|
256
|
-
its("security_group_names") { should == config_security_group_names }
|
257
|
-
its("security_groups") { should == config_security_groups }
|
258
|
-
its("ssh_key") { should == config_ssh_key }
|
259
|
-
its("ssh_user") { should == config_ssh_user }
|
260
|
-
its("vm_user") { should == config_vm_user }
|
261
|
-
its("vm_password") { should == config_vm_password }
|
262
|
-
its("private_ip_address") { should == config_private_ip_address }
|
263
|
-
its("expunge_on_destroy") { should == config_expunge_on_destroy }
|
264
|
-
end
|
265
|
-
|
266
|
-
context "with a specific config set" do
|
267
|
-
let(:domain_name) { "hashi-domain" }
|
268
|
-
|
269
|
-
subject do
|
270
|
-
# Set the values on a specific domain
|
271
|
-
instance.domain_config domain_name do |config|
|
272
|
-
set_test_values(config)
|
273
|
-
end
|
274
|
-
|
275
|
-
# Finalize so we can get the domain config
|
276
|
-
instance.finalize!
|
277
|
-
|
278
|
-
# Get the domain
|
279
|
-
instance.get_domain_config(domain_name)
|
280
|
-
end
|
281
|
-
|
282
|
-
its("host") { should == config_host }
|
283
|
-
its("path") { should == config_path }
|
284
|
-
its("port") { should == config_port }
|
285
|
-
its("scheme") { should == config_scheme }
|
286
|
-
its("api_key") { should == config_api_key }
|
287
|
-
its("secret_key") { should == config_secret_key }
|
288
|
-
its("instance_ready_timeout") { should == config_instance_ready_timeout }
|
289
|
-
its("domain_id") { should == config_domain_id }
|
290
|
-
its("network_id") { should == config_network_id }
|
291
|
-
its("project_id") { should == config_project_id }
|
292
|
-
its("service_offering_id") { should == config_service_offering_id }
|
293
|
-
its("disk_offering_id") { should == config_disk_offering_id }
|
294
|
-
its("template_id") { should == config_template_id }
|
295
|
-
its("zone_id") { should == config_zone_id }
|
296
|
-
its("keypair") { should == config_keypair }
|
297
|
-
its("static_nat") { should == config_static_nat }
|
298
|
-
its("pf_ip_address_id") { should == config_pf_ip_address_id }
|
299
|
-
its("pf_ip_address") { should == config_pf_ip_address }
|
300
|
-
its("pf_public_port") { should == config_pf_public_port }
|
301
|
-
its("pf_public_rdp_port") { should == config_pf_public_rdp_port }
|
302
|
-
its("pf_private_rdp_port") { should == config_pf_private_rdp_port }
|
303
|
-
its("pf_public_port_randomrange") { should == config_pf_public_port_randomrange}
|
304
|
-
its("pf_private_port") { should == config_pf_private_port }
|
305
|
-
its("pf_open_firewall") { should == config_pf_open_firewall }
|
306
|
-
its("pf_trusted_networks") { should == config_pf_trusted_networks}
|
307
|
-
its("port_forwarding_rules") { should == config_port_forwarding_rules }
|
308
|
-
its("firewall_rules") { should == config_firewall_rules }
|
309
|
-
its("security_group_ids") { should == config_security_group_ids }
|
310
|
-
its("display_name") { should == config_display_name }
|
311
|
-
its("group") { should == config_group }
|
312
|
-
its("security_group_names") { should == config_security_group_names }
|
313
|
-
its("security_groups") { should == config_security_groups }
|
314
|
-
its("ssh_key") { should == config_ssh_key }
|
315
|
-
its("ssh_user") { should == config_ssh_user }
|
316
|
-
its("vm_user") { should == config_vm_user }
|
317
|
-
its("vm_password") { should == config_vm_password }
|
318
|
-
its("private_ip_address") { should == config_private_ip_address }
|
319
|
-
its("expunge_on_destroy") { should == config_expunge_on_destroy }
|
320
|
-
end
|
321
|
-
|
322
|
-
describe "inheritance of parent config" do
|
323
|
-
let(:domain_name) { "hashi-domain" }
|
324
|
-
|
325
|
-
subject do
|
326
|
-
# Set the values on a specific domain
|
327
|
-
instance.domain_config domain_name do |config|
|
328
|
-
config.template_id = "child"
|
329
|
-
end
|
330
|
-
|
331
|
-
# Set some top-level values
|
332
|
-
instance.api_key = "parent"
|
333
|
-
instance.template_id = "parent"
|
334
|
-
|
335
|
-
# Finalize and get the domain
|
336
|
-
instance.finalize!
|
337
|
-
instance.get_domain_config(domain_name)
|
338
|
-
end
|
339
|
-
|
340
|
-
its("api_key") { should == "parent" }
|
341
|
-
its("template_id") { should == "child" }
|
342
|
-
end
|
343
|
-
|
344
|
-
describe "shortcut configuration" do
|
345
|
-
subject do
|
346
|
-
# Use the shortcut configuration to set some values
|
347
|
-
instance.domain_config "Domain1", :template_id => "child"
|
348
|
-
instance.finalize!
|
349
|
-
instance.get_domain_config("Domain1")
|
350
|
-
end
|
351
|
-
|
352
|
-
its("template_id") { should == "child" }
|
353
|
-
end
|
354
|
-
end
|
355
|
-
end
|
1
|
+
require "spec_helper"
|
2
|
+
require "vagrant-cloudstack/config"
|
3
|
+
|
4
|
+
describe VagrantPlugins::Cloudstack::Config do
|
5
|
+
let(:instance) { described_class.new }
|
6
|
+
|
7
|
+
# Ensure tests are not affected by Cloudstack credential environment variables
|
8
|
+
before :each do
|
9
|
+
ENV.stub(:[] => nil)
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "defaults" do
|
13
|
+
subject do
|
14
|
+
instance.tap do |o|
|
15
|
+
o.finalize!
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
its("host") { should be_nil }
|
20
|
+
its("path") { should be_nil }
|
21
|
+
its("port") { should be_nil }
|
22
|
+
its("scheme") { should be_nil }
|
23
|
+
its("api_key") { should be_nil }
|
24
|
+
its("secret_key") { should be_nil }
|
25
|
+
its("instance_ready_timeout") { should == 120 }
|
26
|
+
its("domain_id") { should be_nil }
|
27
|
+
its("network_id") { should be_nil }
|
28
|
+
its("project_id") { should be_nil }
|
29
|
+
its("service_offering_id") { should be_nil }
|
30
|
+
its("disk_offering_id") { should be_nil }
|
31
|
+
its("template_id") { should be_nil }
|
32
|
+
its("zone_id") { should be_nil }
|
33
|
+
its("keypair") { should be_nil }
|
34
|
+
its("static_nat") { should == [] }
|
35
|
+
its("pf_ip_address_id") { should be_nil }
|
36
|
+
its("pf_ip_address") { should be_nil }
|
37
|
+
its("pf_public_port") { should be_nil }
|
38
|
+
its("pf_public_rdp_port") { should be_nil }
|
39
|
+
its("pf_private_rdp_port") { should == 3389 }
|
40
|
+
its("pf_public_port_randomrange") { should == {:start=>49160, :end=>49200} }
|
41
|
+
its("pf_private_port") { should be_nil }
|
42
|
+
its("pf_open_firewall") { should == true }
|
43
|
+
its("pf_trusted_networks") { should be_nil }
|
44
|
+
its("port_forwarding_rules") { should == [] }
|
45
|
+
its("firewall_rules") { should == [] }
|
46
|
+
its("security_group_ids") { should == [] }
|
47
|
+
its("display_name") { should be_nil }
|
48
|
+
its("group") { should be_nil }
|
49
|
+
its("security_group_names") { should == [] }
|
50
|
+
its("security_groups") { should == [] }
|
51
|
+
its("user_data") { should be_nil }
|
52
|
+
its("ssh_key") { should be_nil }
|
53
|
+
its("ssh_user") { should be_nil }
|
54
|
+
its("vm_user") { should be_nil }
|
55
|
+
its("vm_password") { should be_nil }
|
56
|
+
its("private_ip_address") { should be_nil }
|
57
|
+
its("expunge_on_destroy") { should == false }
|
58
|
+
end
|
59
|
+
|
60
|
+
describe "getting credentials from environment" do
|
61
|
+
context "without CloudStack credential environment variables" do
|
62
|
+
subject do
|
63
|
+
instance.tap do |o|
|
64
|
+
o.finalize!
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
its("api_key") { should be_nil }
|
69
|
+
its("secret_key") { should be_nil }
|
70
|
+
end
|
71
|
+
|
72
|
+
context "with CloudStack credential variables" do
|
73
|
+
before :each do
|
74
|
+
ENV.stub(:[]).with("CLOUDSTACK_API_KEY").and_return("api_key")
|
75
|
+
ENV.stub(:[]).with("CLOUDSTACK_SECRET_KEY").and_return("secret_key")
|
76
|
+
end
|
77
|
+
|
78
|
+
subject do
|
79
|
+
instance.tap do |o|
|
80
|
+
o.finalize!
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
its("api_key") { should == "api_key" }
|
85
|
+
its("secret_key") { should == "secret_key" }
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe "overriding defaults" do
|
90
|
+
# I typically don't meta-program in tests, but this is a very
|
91
|
+
# simple boilerplate test, so I cut corners here. It just sets
|
92
|
+
# each of these attributes to "foo" in isolation, and reads the value
|
93
|
+
# and asserts the proper result comes back out.
|
94
|
+
[:api_key, :template_id, :zone_id, :instance_ready_timeout,
|
95
|
+
:service_offering_id, :disk_offering_id, :api_key,
|
96
|
+
:secret_key, :network_id, :user_data].each do |attribute|
|
97
|
+
|
98
|
+
it "should not default #{attribute} if overridden" do
|
99
|
+
instance.send("#{attribute}=".to_sym, "foo")
|
100
|
+
instance.finalize!
|
101
|
+
instance.send(attribute).should == "foo"
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'should not default pf_open_firewall if overridden' do
|
107
|
+
instance.pf_open_firewall = false
|
108
|
+
instance.finalize!
|
109
|
+
|
110
|
+
instance.pf_open_firewall.should == false
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
describe "getting credentials from environment" do
|
115
|
+
context "without Cloudstack credential environment variables" do
|
116
|
+
subject do
|
117
|
+
instance.tap do |o|
|
118
|
+
o.finalize!
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
its("api_key") { should be_nil }
|
123
|
+
its("secret_key") { should be_nil }
|
124
|
+
end
|
125
|
+
|
126
|
+
end
|
127
|
+
|
128
|
+
describe "domain config" do
|
129
|
+
let(:config_host) { "foo" }
|
130
|
+
let(:config_path) { "foo" }
|
131
|
+
let(:config_port) { "foo" }
|
132
|
+
let(:config_scheme) { "foo" }
|
133
|
+
let(:config_api_key) { "foo" }
|
134
|
+
let(:config_secret_key) { "foo" }
|
135
|
+
let(:config_instance_ready_timeout) { 11111 }
|
136
|
+
let(:config_domain_id) { "foo" }
|
137
|
+
let(:config_network_id) { "foo" }
|
138
|
+
let(:config_project_id) { "foo" }
|
139
|
+
let(:config_service_offering_id) { "foo" }
|
140
|
+
let(:config_disk_offering_id) { "foo" }
|
141
|
+
let(:config_template_id) { "foo" }
|
142
|
+
let(:config_zone_id) { "foo" }
|
143
|
+
let(:config_keypair) { "foo" }
|
144
|
+
let(:config_static_nat) { [{:foo => "bar"}, {:bar => "foo"}] }
|
145
|
+
let(:config_pf_ip_address_id) { "foo" }
|
146
|
+
let(:config_pf_ip_address) { "foo" }
|
147
|
+
let(:config_pf_public_port_randomrange) { {:start=>1, :end=>9} }
|
148
|
+
let(:config_pf_public_port) { "foo" }
|
149
|
+
let(:config_pf_public_rdp_port) { "foo" }
|
150
|
+
let(:config_pf_private_rdp_port) { "foo" }
|
151
|
+
let(:config_pf_private_port) { "foo" }
|
152
|
+
let(:config_pf_open_firewall) { false }
|
153
|
+
let(:config_pf_trusted_networks) { ["foo", "bar"] }
|
154
|
+
let(:config_port_forwarding_rules) { [{:foo => "bar"}, {:bar => "foo"}] }
|
155
|
+
let(:config_firewall_rules) { [{:foo => "bar"}, {:bar => "foo"}] }
|
156
|
+
let(:config_security_group_ids) { ["foo", "bar"] }
|
157
|
+
let(:config_display_name) { "foo" }
|
158
|
+
let(:config_group) { "foo" }
|
159
|
+
let(:config_security_group_names) { ["foo", "bar"] }
|
160
|
+
let(:config_security_groups) { [{:foo => "bar"}, {:bar => "foo"}] }
|
161
|
+
let(:config_ssh_key) { "./foo.pem" }
|
162
|
+
let(:config_ssh_user) { "foo" }
|
163
|
+
let(:config_vm_user) { "foo" }
|
164
|
+
let(:config_vm_password) { "foo" }
|
165
|
+
let(:config_private_ip_address) { "foo" }
|
166
|
+
let(:config_expunge_on_destroy) { "foo" }
|
167
|
+
|
168
|
+
def set_test_values(instance)
|
169
|
+
instance.host = config_host
|
170
|
+
instance.path = config_path
|
171
|
+
instance.port = config_port
|
172
|
+
instance.scheme = config_scheme
|
173
|
+
instance.api_key = config_api_key
|
174
|
+
instance.secret_key = config_secret_key
|
175
|
+
instance.instance_ready_timeout = config_instance_ready_timeout
|
176
|
+
instance.domain_id = config_domain_id
|
177
|
+
instance.network_id = config_network_id
|
178
|
+
instance.project_id = config_project_id
|
179
|
+
instance.service_offering_id = config_service_offering_id
|
180
|
+
instance.disk_offering_id = config_disk_offering_id
|
181
|
+
instance.template_id = config_template_id
|
182
|
+
instance.zone_id = config_zone_id
|
183
|
+
instance.keypair = config_keypair
|
184
|
+
instance.static_nat = config_static_nat
|
185
|
+
instance.pf_ip_address_id = config_pf_ip_address_id
|
186
|
+
instance.pf_public_port_randomrange = config_pf_public_port_randomrange
|
187
|
+
instance.pf_ip_address = config_pf_ip_address
|
188
|
+
instance.pf_public_port = config_pf_public_port
|
189
|
+
instance.pf_public_rdp_port = config_pf_public_rdp_port
|
190
|
+
instance.pf_private_rdp_port = config_pf_private_rdp_port
|
191
|
+
instance.pf_private_port = config_pf_private_port
|
192
|
+
instance.pf_open_firewall = config_pf_open_firewall
|
193
|
+
instance.pf_trusted_networks = config_pf_trusted_networks
|
194
|
+
instance.port_forwarding_rules = config_port_forwarding_rules
|
195
|
+
instance.firewall_rules = config_firewall_rules
|
196
|
+
instance.security_group_ids = config_security_group_ids
|
197
|
+
instance.display_name = config_display_name
|
198
|
+
instance.group = config_group
|
199
|
+
instance.security_group_names = config_security_group_names
|
200
|
+
instance.security_groups = config_security_groups
|
201
|
+
instance.ssh_key = config_ssh_key
|
202
|
+
instance.ssh_user = config_ssh_user
|
203
|
+
instance.vm_user = config_vm_user
|
204
|
+
instance.vm_password = config_vm_password
|
205
|
+
instance.private_ip_address = config_private_ip_address
|
206
|
+
instance.expunge_on_destroy = config_expunge_on_destroy
|
207
|
+
end
|
208
|
+
|
209
|
+
it "should raise an exception if not finalized" do
|
210
|
+
expect { instance.get_domain_config("default") }.
|
211
|
+
to raise_error
|
212
|
+
end
|
213
|
+
|
214
|
+
context "with no specific config set" do
|
215
|
+
subject do
|
216
|
+
# Set the values on the top-level object
|
217
|
+
set_test_values(instance)
|
218
|
+
|
219
|
+
# Finalize so we can get the domain config
|
220
|
+
instance.finalize!
|
221
|
+
|
222
|
+
# Get a lower level domain
|
223
|
+
instance.get_domain_config("default")
|
224
|
+
end
|
225
|
+
|
226
|
+
its("host") { should == config_host }
|
227
|
+
its("path") { should == config_path }
|
228
|
+
its("port") { should == config_port }
|
229
|
+
its("scheme") { should == config_scheme }
|
230
|
+
its("api_key") { should == config_api_key }
|
231
|
+
its("secret_key") { should == config_secret_key }
|
232
|
+
its("instance_ready_timeout") { should == config_instance_ready_timeout }
|
233
|
+
its("domain_id") { should == config_domain_id }
|
234
|
+
its("network_id") { should == config_network_id }
|
235
|
+
its("project_id") { should == config_project_id }
|
236
|
+
its("service_offering_id") { should == config_service_offering_id }
|
237
|
+
its("disk_offering_id") { should == config_disk_offering_id }
|
238
|
+
its("template_id") { should == config_template_id }
|
239
|
+
its("zone_id") { should == config_zone_id }
|
240
|
+
its("keypair") { should == config_keypair }
|
241
|
+
its("static_nat") { should == config_static_nat }
|
242
|
+
its("pf_ip_address_id") { should == config_pf_ip_address_id }
|
243
|
+
its("pf_ip_address") { should == config_pf_ip_address }
|
244
|
+
its("pf_public_port") { should == config_pf_public_port }
|
245
|
+
its("pf_public_rdp_port") { should == config_pf_public_rdp_port }
|
246
|
+
its("pf_private_rdp_port") { should == config_pf_private_rdp_port }
|
247
|
+
its("pf_public_port_randomrange") { should == config_pf_public_port_randomrange}
|
248
|
+
its("pf_private_port") { should == config_pf_private_port }
|
249
|
+
its("pf_trusted_networks") { should == config_pf_trusted_networks}
|
250
|
+
its("pf_open_firewall") { should == config_pf_open_firewall }
|
251
|
+
its("port_forwarding_rules") { should == config_port_forwarding_rules }
|
252
|
+
its("firewall_rules") { should == config_firewall_rules }
|
253
|
+
its("security_group_ids") { should == config_security_group_ids }
|
254
|
+
its("display_name") { should == config_display_name }
|
255
|
+
its("group") { should == config_group }
|
256
|
+
its("security_group_names") { should == config_security_group_names }
|
257
|
+
its("security_groups") { should == config_security_groups }
|
258
|
+
its("ssh_key") { should == config_ssh_key }
|
259
|
+
its("ssh_user") { should == config_ssh_user }
|
260
|
+
its("vm_user") { should == config_vm_user }
|
261
|
+
its("vm_password") { should == config_vm_password }
|
262
|
+
its("private_ip_address") { should == config_private_ip_address }
|
263
|
+
its("expunge_on_destroy") { should == config_expunge_on_destroy }
|
264
|
+
end
|
265
|
+
|
266
|
+
context "with a specific config set" do
|
267
|
+
let(:domain_name) { "hashi-domain" }
|
268
|
+
|
269
|
+
subject do
|
270
|
+
# Set the values on a specific domain
|
271
|
+
instance.domain_config domain_name do |config|
|
272
|
+
set_test_values(config)
|
273
|
+
end
|
274
|
+
|
275
|
+
# Finalize so we can get the domain config
|
276
|
+
instance.finalize!
|
277
|
+
|
278
|
+
# Get the domain
|
279
|
+
instance.get_domain_config(domain_name)
|
280
|
+
end
|
281
|
+
|
282
|
+
its("host") { should == config_host }
|
283
|
+
its("path") { should == config_path }
|
284
|
+
its("port") { should == config_port }
|
285
|
+
its("scheme") { should == config_scheme }
|
286
|
+
its("api_key") { should == config_api_key }
|
287
|
+
its("secret_key") { should == config_secret_key }
|
288
|
+
its("instance_ready_timeout") { should == config_instance_ready_timeout }
|
289
|
+
its("domain_id") { should == config_domain_id }
|
290
|
+
its("network_id") { should == config_network_id }
|
291
|
+
its("project_id") { should == config_project_id }
|
292
|
+
its("service_offering_id") { should == config_service_offering_id }
|
293
|
+
its("disk_offering_id") { should == config_disk_offering_id }
|
294
|
+
its("template_id") { should == config_template_id }
|
295
|
+
its("zone_id") { should == config_zone_id }
|
296
|
+
its("keypair") { should == config_keypair }
|
297
|
+
its("static_nat") { should == config_static_nat }
|
298
|
+
its("pf_ip_address_id") { should == config_pf_ip_address_id }
|
299
|
+
its("pf_ip_address") { should == config_pf_ip_address }
|
300
|
+
its("pf_public_port") { should == config_pf_public_port }
|
301
|
+
its("pf_public_rdp_port") { should == config_pf_public_rdp_port }
|
302
|
+
its("pf_private_rdp_port") { should == config_pf_private_rdp_port }
|
303
|
+
its("pf_public_port_randomrange") { should == config_pf_public_port_randomrange}
|
304
|
+
its("pf_private_port") { should == config_pf_private_port }
|
305
|
+
its("pf_open_firewall") { should == config_pf_open_firewall }
|
306
|
+
its("pf_trusted_networks") { should == config_pf_trusted_networks}
|
307
|
+
its("port_forwarding_rules") { should == config_port_forwarding_rules }
|
308
|
+
its("firewall_rules") { should == config_firewall_rules }
|
309
|
+
its("security_group_ids") { should == config_security_group_ids }
|
310
|
+
its("display_name") { should == config_display_name }
|
311
|
+
its("group") { should == config_group }
|
312
|
+
its("security_group_names") { should == config_security_group_names }
|
313
|
+
its("security_groups") { should == config_security_groups }
|
314
|
+
its("ssh_key") { should == config_ssh_key }
|
315
|
+
its("ssh_user") { should == config_ssh_user }
|
316
|
+
its("vm_user") { should == config_vm_user }
|
317
|
+
its("vm_password") { should == config_vm_password }
|
318
|
+
its("private_ip_address") { should == config_private_ip_address }
|
319
|
+
its("expunge_on_destroy") { should == config_expunge_on_destroy }
|
320
|
+
end
|
321
|
+
|
322
|
+
describe "inheritance of parent config" do
|
323
|
+
let(:domain_name) { "hashi-domain" }
|
324
|
+
|
325
|
+
subject do
|
326
|
+
# Set the values on a specific domain
|
327
|
+
instance.domain_config domain_name do |config|
|
328
|
+
config.template_id = "child"
|
329
|
+
end
|
330
|
+
|
331
|
+
# Set some top-level values
|
332
|
+
instance.api_key = "parent"
|
333
|
+
instance.template_id = "parent"
|
334
|
+
|
335
|
+
# Finalize and get the domain
|
336
|
+
instance.finalize!
|
337
|
+
instance.get_domain_config(domain_name)
|
338
|
+
end
|
339
|
+
|
340
|
+
its("api_key") { should == "parent" }
|
341
|
+
its("template_id") { should == "child" }
|
342
|
+
end
|
343
|
+
|
344
|
+
describe "shortcut configuration" do
|
345
|
+
subject do
|
346
|
+
# Use the shortcut configuration to set some values
|
347
|
+
instance.domain_config "Domain1", :template_id => "child"
|
348
|
+
instance.finalize!
|
349
|
+
instance.get_domain_config("Domain1")
|
350
|
+
end
|
351
|
+
|
352
|
+
its("template_id") { should == "child" }
|
353
|
+
end
|
354
|
+
end
|
355
|
+
end
|