vagrant-cloudstack 1.3.0 → 1.4.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/.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
|