vagrant-openstack-illuin-provider 0.12.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 +7 -0
- data/.gitignore +22 -0
- data/.rubocop.yml +40 -0
- data/CHANGELOG.md +282 -0
- data/Gemfile +18 -0
- data/RELEASE.md +15 -0
- data/Rakefile +25 -0
- data/Vagrantfile +20 -0
- data/dummy.box +0 -0
- data/example_box/README.md +13 -0
- data/example_box/metadata.json +3 -0
- data/functional_tests/Vagrantfile +58 -0
- data/functional_tests/keys/vagrant-openstack +27 -0
- data/functional_tests/keys/vagrant-openstack.pub +1 -0
- data/functional_tests/run_tests.sh +142 -0
- data/lib/vagrant-openstack-illuin-provider.rb +29 -0
- data/lib/vagrant-openstack-illuin-provider/action.rb +344 -0
- data/lib/vagrant-openstack-illuin-provider/action/abstract_action.rb +22 -0
- data/lib/vagrant-openstack-illuin-provider/action/connect_openstack.rb +60 -0
- data/lib/vagrant-openstack-illuin-provider/action/create_server.rb +187 -0
- data/lib/vagrant-openstack-illuin-provider/action/create_stack.rb +76 -0
- data/lib/vagrant-openstack-illuin-provider/action/delete_server.rb +53 -0
- data/lib/vagrant-openstack-illuin-provider/action/delete_stack.rb +73 -0
- data/lib/vagrant-openstack-illuin-provider/action/message.rb +19 -0
- data/lib/vagrant-openstack-illuin-provider/action/provision.rb +60 -0
- data/lib/vagrant-openstack-illuin-provider/action/read_ssh_info.rb +74 -0
- data/lib/vagrant-openstack-illuin-provider/action/read_state.rb +43 -0
- data/lib/vagrant-openstack-illuin-provider/action/resume.rb +24 -0
- data/lib/vagrant-openstack-illuin-provider/action/snapshot_cleanup.rb +32 -0
- data/lib/vagrant-openstack-illuin-provider/action/snapshot_delete.rb +32 -0
- data/lib/vagrant-openstack-illuin-provider/action/snapshot_list.rb +22 -0
- data/lib/vagrant-openstack-illuin-provider/action/snapshot_restore.rb +29 -0
- data/lib/vagrant-openstack-illuin-provider/action/snapshot_save.rb +51 -0
- data/lib/vagrant-openstack-illuin-provider/action/start_server.rb +24 -0
- data/lib/vagrant-openstack-illuin-provider/action/stop_server.rb +25 -0
- data/lib/vagrant-openstack-illuin-provider/action/suspend.rb +24 -0
- data/lib/vagrant-openstack-illuin-provider/action/sync_folders.rb +138 -0
- data/lib/vagrant-openstack-illuin-provider/action/wait_active.rb +33 -0
- data/lib/vagrant-openstack-illuin-provider/action/wait_stop.rb +33 -0
- data/lib/vagrant-openstack-illuin-provider/cap/snapshot_list.rb +15 -0
- data/lib/vagrant-openstack-illuin-provider/catalog/openstack_catalog.rb +90 -0
- data/lib/vagrant-openstack-illuin-provider/client/cinder.rb +39 -0
- data/lib/vagrant-openstack-illuin-provider/client/domain.rb +163 -0
- data/lib/vagrant-openstack-illuin-provider/client/glance.rb +65 -0
- data/lib/vagrant-openstack-illuin-provider/client/heat.rb +49 -0
- data/lib/vagrant-openstack-illuin-provider/client/http_utils.rb +116 -0
- data/lib/vagrant-openstack-illuin-provider/client/keystone.rb +128 -0
- data/lib/vagrant-openstack-illuin-provider/client/neutron.rb +48 -0
- data/lib/vagrant-openstack-illuin-provider/client/nova.rb +303 -0
- data/lib/vagrant-openstack-illuin-provider/client/openstack.rb +59 -0
- data/lib/vagrant-openstack-illuin-provider/client/request_logger.rb +23 -0
- data/lib/vagrant-openstack-illuin-provider/client/rest_utils.rb +28 -0
- data/lib/vagrant-openstack-illuin-provider/command/abstract_command.rb +51 -0
- data/lib/vagrant-openstack-illuin-provider/command/flavor_list.rb +24 -0
- data/lib/vagrant-openstack-illuin-provider/command/floatingip_list.rb +32 -0
- data/lib/vagrant-openstack-illuin-provider/command/image_list.rb +29 -0
- data/lib/vagrant-openstack-illuin-provider/command/main.rb +52 -0
- data/lib/vagrant-openstack-illuin-provider/command/network_list.rb +25 -0
- data/lib/vagrant-openstack-illuin-provider/command/openstack_command.rb +16 -0
- data/lib/vagrant-openstack-illuin-provider/command/reset.rb +20 -0
- data/lib/vagrant-openstack-illuin-provider/command/subnet_list.rb +22 -0
- data/lib/vagrant-openstack-illuin-provider/command/utils.rb +22 -0
- data/lib/vagrant-openstack-illuin-provider/command/volume_list.rb +25 -0
- data/lib/vagrant-openstack-illuin-provider/config.rb +505 -0
- data/lib/vagrant-openstack-illuin-provider/config/http.rb +39 -0
- data/lib/vagrant-openstack-illuin-provider/config_resolver.rb +334 -0
- data/lib/vagrant-openstack-illuin-provider/errors.rb +187 -0
- data/lib/vagrant-openstack-illuin-provider/logging.rb +39 -0
- data/lib/vagrant-openstack-illuin-provider/plugin.rb +58 -0
- data/lib/vagrant-openstack-illuin-provider/provider.rb +50 -0
- data/lib/vagrant-openstack-illuin-provider/utils.rb +81 -0
- data/lib/vagrant-openstack-illuin-provider/version.rb +15 -0
- data/lib/vagrant-openstack-illuin-provider/version_checker.rb +76 -0
- data/locales/en.yml +412 -0
- data/spec/vagrant-openstack-illuin-provider/action/connect_openstack_spec.rb +770 -0
- data/spec/vagrant-openstack-illuin-provider/action/create_server_spec.rb +260 -0
- data/spec/vagrant-openstack-illuin-provider/action/create_stack_spec.rb +99 -0
- data/spec/vagrant-openstack-illuin-provider/action/delete_server_spec.rb +89 -0
- data/spec/vagrant-openstack-illuin-provider/action/delete_stack_spec.rb +63 -0
- data/spec/vagrant-openstack-illuin-provider/action/message_spec.rb +33 -0
- data/spec/vagrant-openstack-illuin-provider/action/provision_spec.rb +97 -0
- data/spec/vagrant-openstack-illuin-provider/action/read_ssh_info_spec.rb +202 -0
- data/spec/vagrant-openstack-illuin-provider/action/read_state_spec.rb +81 -0
- data/spec/vagrant-openstack-illuin-provider/action/resume_server_spec.rb +49 -0
- data/spec/vagrant-openstack-illuin-provider/action/start_server_spec.rb +49 -0
- data/spec/vagrant-openstack-illuin-provider/action/stop_server_spec.rb +49 -0
- data/spec/vagrant-openstack-illuin-provider/action/suspend_server_spec.rb +49 -0
- data/spec/vagrant-openstack-illuin-provider/action/sync_folders_spec.rb +155 -0
- data/spec/vagrant-openstack-illuin-provider/action/wait_active_spec.rb +53 -0
- data/spec/vagrant-openstack-illuin-provider/action/wait_stop_spec.rb +53 -0
- data/spec/vagrant-openstack-illuin-provider/action_spec.rb +120 -0
- data/spec/vagrant-openstack-illuin-provider/client/cinder_spec.rb +129 -0
- data/spec/vagrant-openstack-illuin-provider/client/glance_spec.rb +145 -0
- data/spec/vagrant-openstack-illuin-provider/client/heat_spec.rb +130 -0
- data/spec/vagrant-openstack-illuin-provider/client/keystone_spec.rb +226 -0
- data/spec/vagrant-openstack-illuin-provider/client/neutron_spec.rb +173 -0
- data/spec/vagrant-openstack-illuin-provider/client/nova_spec.rb +760 -0
- data/spec/vagrant-openstack-illuin-provider/client/utils_spec.rb +176 -0
- data/spec/vagrant-openstack-illuin-provider/command/flavor_list_spec.rb +43 -0
- data/spec/vagrant-openstack-illuin-provider/command/floatingip_list_spec.rb +74 -0
- data/spec/vagrant-openstack-illuin-provider/command/image_list_spec.rb +95 -0
- data/spec/vagrant-openstack-illuin-provider/command/network_list_spec.rb +65 -0
- data/spec/vagrant-openstack-illuin-provider/command/reset_spec.rb +24 -0
- data/spec/vagrant-openstack-illuin-provider/command/subnet_list_spec.rb +45 -0
- data/spec/vagrant-openstack-illuin-provider/command/volume_list_spec.rb +40 -0
- data/spec/vagrant-openstack-illuin-provider/config_resolver_spec.rb +879 -0
- data/spec/vagrant-openstack-illuin-provider/config_spec.rb +416 -0
- data/spec/vagrant-openstack-illuin-provider/e2e_spec.rb.save +27 -0
- data/spec/vagrant-openstack-illuin-provider/provider_spec.rb +13 -0
- data/spec/vagrant-openstack-illuin-provider/spec_helper.rb +37 -0
- data/spec/vagrant-openstack-illuin-provider/utils_spec.rb +197 -0
- data/spec/vagrant-openstack-illuin-provider/version_checker_spec.rb +39 -0
- data/stackrc +25 -0
- data/vagrant-openstack-illuin-provider.gemspec +35 -0
- metadata +379 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'vagrant-openstack-illuin-provider/spec_helper'
|
|
2
|
+
|
|
3
|
+
describe VagrantPlugins::Openstack::Action::Message do
|
|
4
|
+
let(:ui) do
|
|
5
|
+
double('ui').tap do |ui|
|
|
6
|
+
ui.stub(:info).with(anything)
|
|
7
|
+
ui.stub(:error).with(anything)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
let(:env) do
|
|
12
|
+
{}.tap do |env|
|
|
13
|
+
env[:ui] = ui
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
let(:app) do
|
|
18
|
+
double('app').tap do |app|
|
|
19
|
+
app.stub(:call).with(anything)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe 'call' do
|
|
24
|
+
context 'when message is given' do
|
|
25
|
+
it 'print out the message' do
|
|
26
|
+
expect(ui).to receive(:info).with('Message to show')
|
|
27
|
+
expect(app).to receive(:call)
|
|
28
|
+
@action = Message.new(app, nil, 'Message to show')
|
|
29
|
+
@action.call(env)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
require 'vagrant-openstack-illuin-provider/spec_helper'
|
|
2
|
+
|
|
3
|
+
#
|
|
4
|
+
# Stubing all the interactions using the real
|
|
5
|
+
# provisioner classes is somehow complicated...
|
|
6
|
+
#
|
|
7
|
+
class FakeProvisioner
|
|
8
|
+
def provision
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
class FakeShellProvisioner < FakeProvisioner
|
|
13
|
+
attr_accessor :config
|
|
14
|
+
|
|
15
|
+
def initialize(config)
|
|
16
|
+
@config = config
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
describe VagrantPlugins::Openstack::Action::ProvisionWrapper do
|
|
21
|
+
let(:app) do
|
|
22
|
+
double
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
let(:internal_provision_wrapper) do
|
|
26
|
+
double
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
before :each do
|
|
30
|
+
# Stub lookup for provisioners and return a hash containing the test mock.
|
|
31
|
+
allow(Vagrant.plugin('2').manager).to receive(:provisioners).and_return(shell: FakeShellProvisioner)
|
|
32
|
+
@action = ProvisionWrapper.new(app, nil)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
describe 'execute' do
|
|
36
|
+
it 'call InternalProvisionWrapper and conitnue the middleware chain' do
|
|
37
|
+
expect(internal_provision_wrapper).to receive(:call)
|
|
38
|
+
InternalProvisionWrapper.stub(:new) { internal_provision_wrapper }
|
|
39
|
+
app.stub(:call) {}
|
|
40
|
+
@action.execute nil
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
describe VagrantPlugins::Openstack::Action::InternalProvisionWrapper do
|
|
46
|
+
let(:env) do
|
|
47
|
+
{}
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
before :each do
|
|
51
|
+
# Stub lookup for provisioners and return a hash containing the test mock.
|
|
52
|
+
allow(Vagrant.plugin('2').manager).to receive(:provisioners).and_return(shell: FakeShellProvisioner)
|
|
53
|
+
@action = InternalProvisionWrapper.new(nil, env)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
describe 'run_provisioner' do
|
|
57
|
+
context 'when running a shell provisioner' do
|
|
58
|
+
context 'without meta-arg' do
|
|
59
|
+
it 'does not change the provisioner config' do
|
|
60
|
+
env[:provisioner] = FakeShellProvisioner.new(OpenStruct.new.tap do |c|
|
|
61
|
+
c.args = %w(arg1 arg2)
|
|
62
|
+
end)
|
|
63
|
+
|
|
64
|
+
expect(env[:provisioner]).to receive(:provision)
|
|
65
|
+
expect(@action).to receive(:handle_shell_meta_args)
|
|
66
|
+
|
|
67
|
+
@action.run_provisioner(env)
|
|
68
|
+
expect(env[:provisioner].config.args).to eq(%w(arg1 arg2))
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
context 'with @@ssh_ip@@ meta-arg' do
|
|
73
|
+
it 'replace the meta-args in the provisioner config' do
|
|
74
|
+
env[:provisioner] = FakeShellProvisioner.new(OpenStruct.new.tap do |c|
|
|
75
|
+
c.args = ['arg1', '@@ssh_ip@@', 'arg3']
|
|
76
|
+
end)
|
|
77
|
+
|
|
78
|
+
VagrantPlugins::Openstack::Action.stub(:get_ssh_info).and_return host: '192.168.0.1'
|
|
79
|
+
expect(env[:provisioner]).to receive(:provision)
|
|
80
|
+
|
|
81
|
+
@action.run_provisioner(env)
|
|
82
|
+
expect(env[:provisioner].config.args).to eq(%w(arg1 192.168.0.1 arg3))
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
context 'when running a provisioner other that the shell provisioner' do
|
|
88
|
+
it 'does not call handle_shell_meta_args' do
|
|
89
|
+
env[:provisioner] = FakeProvisioner.new
|
|
90
|
+
expect(@action).should_not_receive(:handle_shell_meta_args)
|
|
91
|
+
expect(env[:provisioner]).to receive(:provision)
|
|
92
|
+
|
|
93
|
+
@action.run_provisioner(env)
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
require 'vagrant-openstack-illuin-provider/spec_helper'
|
|
2
|
+
|
|
3
|
+
include VagrantPlugins::Openstack::Action
|
|
4
|
+
include VagrantPlugins::Openstack::HttpUtils
|
|
5
|
+
include VagrantPlugins::Openstack::Domain
|
|
6
|
+
|
|
7
|
+
describe VagrantPlugins::Openstack::Action::ReadSSHInfo do
|
|
8
|
+
let(:config) do
|
|
9
|
+
double('config').tap do |config|
|
|
10
|
+
config.stub(:openstack_auth_url) { 'http://keystoneAuthV2' }
|
|
11
|
+
config.stub(:openstack_compute_url) { nil }
|
|
12
|
+
config.stub(:openstack_network_url) { nil }
|
|
13
|
+
config.stub(:tenant_name) { 'testTenant' }
|
|
14
|
+
config.stub(:username) { 'username' }
|
|
15
|
+
config.stub(:password) { 'password' }
|
|
16
|
+
config.stub(:ssh_username) { 'test_username' }
|
|
17
|
+
config.stub(:floating_ip) { nil }
|
|
18
|
+
config.stub(:floating_ip_pool) { nil }
|
|
19
|
+
config.stub(:keypair_name) { nil }
|
|
20
|
+
config.stub(:public_key_path) { nil }
|
|
21
|
+
config.stub(:ssh_disabled) { false }
|
|
22
|
+
config.stub(:ip_version) { nil }
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
let(:nova) do
|
|
27
|
+
double('nova').tap do |nova|
|
|
28
|
+
nova.stub(:get_server_details).with(env, '1234') do
|
|
29
|
+
{
|
|
30
|
+
'addresses' => {
|
|
31
|
+
'net' => [
|
|
32
|
+
{
|
|
33
|
+
'addr' => '80.80.80.80',
|
|
34
|
+
'OS-EXT-IPS:type' => 'floating'
|
|
35
|
+
}
|
|
36
|
+
]
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
let(:ssh_config) do
|
|
44
|
+
double('ssh_config').tap do |config|
|
|
45
|
+
config.stub(:username) { 'sshuser' }
|
|
46
|
+
config.stub(:port) { nil }
|
|
47
|
+
config.stub(:insert_key) { true }
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
let(:machine_config) do
|
|
52
|
+
double('machine_config').tap do |config|
|
|
53
|
+
config.stub(:ssh) { ssh_config }
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
let(:env) do
|
|
58
|
+
{}.tap do |env|
|
|
59
|
+
env[:ui] = double('ui')
|
|
60
|
+
env[:ui].stub(:info).with(anything)
|
|
61
|
+
env[:machine] = double('machine')
|
|
62
|
+
env[:machine].stub(:provider_config) { config }
|
|
63
|
+
env[:machine].stub(:config) { machine_config }
|
|
64
|
+
env[:machine].stub(:id) { '1234' }
|
|
65
|
+
env[:machine].stub(:data_dir) { '/data/dir' }
|
|
66
|
+
env[:openstack_client] = double('openstack_client')
|
|
67
|
+
env[:openstack_client].stub(:neutron) { neutron }
|
|
68
|
+
env[:openstack_client].stub(:nova) { nova }
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
let(:app) do
|
|
73
|
+
double('app').tap do |app|
|
|
74
|
+
app.stub(:call).with(anything)
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
before :each do
|
|
79
|
+
ReadSSHInfo.send(:public, *ReadSSHInfo.private_instance_methods)
|
|
80
|
+
@action = ReadSSHInfo.new(app, env)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
describe 'call' do
|
|
84
|
+
context 'when called three times' do
|
|
85
|
+
it 'read ssh info only once' do
|
|
86
|
+
config.stub(:keypair_name) { 'my_keypair' }
|
|
87
|
+
@action.stub(:read_ssh_info) { { host: '', port: '', username: '' } }
|
|
88
|
+
expect(@action).to receive(:read_ssh_info).exactly(1).times
|
|
89
|
+
expect(app).to receive(:call)
|
|
90
|
+
(1..3).each { @action.call(env) }
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
describe 'read_ssh_info' do
|
|
96
|
+
context 'with deprecated ssh_username specified' do
|
|
97
|
+
context 'with ssh.username specified' do
|
|
98
|
+
it 'returns ssh.username' do
|
|
99
|
+
ssh_config.stub(:username) { 'sshuser' }
|
|
100
|
+
config.stub(:ssh_username) { 'test_username' }
|
|
101
|
+
config.stub(:floating_ip) { '80.80.80.80' }
|
|
102
|
+
config.stub(:keypair_name) { 'my_keypair' }
|
|
103
|
+
@action.read_ssh_info(env).should eq(host: '80.80.80.80', port: 22, username: 'sshuser', log_level: 'ERROR')
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
context 'without ssh.username specified' do
|
|
107
|
+
it 'returns ssh.username' do
|
|
108
|
+
ssh_config.stub(:username) { nil }
|
|
109
|
+
config.stub(:ssh_username) { 'test_username' }
|
|
110
|
+
config.stub(:floating_ip) { '80.80.80.80' }
|
|
111
|
+
config.stub(:keypair_name) { 'my_keypair' }
|
|
112
|
+
@action.read_ssh_info(env).should eq(host: '80.80.80.80', port: 22, username: 'test_username', log_level: 'ERROR')
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
context 'with ssh.port overriden' do
|
|
118
|
+
it 'returns ssh.port' do
|
|
119
|
+
ssh_config.stub(:port) { 33 }
|
|
120
|
+
config.stub(:floating_ip) { '80.80.80.80' }
|
|
121
|
+
config.stub(:keypair_name) { 'my_keypair' }
|
|
122
|
+
@action.read_ssh_info(env).should eq(host: '80.80.80.80', port: 33, username: 'sshuser', log_level: 'ERROR')
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
context 'with config.floating_ip specified' do
|
|
127
|
+
context 'with keypair_name specified' do
|
|
128
|
+
it 'returns the specified floating ip' do
|
|
129
|
+
config.stub(:floating_ip) { '80.80.80.80' }
|
|
130
|
+
config.stub(:keypair_name) { 'my_keypair' }
|
|
131
|
+
@action.read_ssh_info(env).should eq(host: '80.80.80.80', port: 22, username: 'sshuser', log_level: 'ERROR')
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
context 'with public_key_path specified' do
|
|
136
|
+
it 'returns the specified floating ip' do
|
|
137
|
+
config.stub(:floating_ip) { '80.80.80.80' }
|
|
138
|
+
config.stub(:keypair_name) { nil }
|
|
139
|
+
config.stub(:public_key_path) { '/public/key/path' }
|
|
140
|
+
@action.read_ssh_info(env).should eq(host: '80.80.80.80', port: 22, username: 'sshuser', log_level: 'ERROR')
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
context 'with neither keypair_name nor public_key_path specified' do
|
|
145
|
+
it 'returns the specified floating ip ' do
|
|
146
|
+
config.stub(:floating_ip) { '80.80.80.80' }
|
|
147
|
+
config.stub(:keypair_name) { nil }
|
|
148
|
+
config.stub(:public_key_path) { nil }
|
|
149
|
+
nova.stub(:get_server_details) do
|
|
150
|
+
{
|
|
151
|
+
'key_name' => 'my_keypair_name',
|
|
152
|
+
'addresses' => {
|
|
153
|
+
'net' => [
|
|
154
|
+
{
|
|
155
|
+
'addr' => '80.80.80.80',
|
|
156
|
+
'OS-EXT-IPS:type' => 'floating'
|
|
157
|
+
}
|
|
158
|
+
]
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
end
|
|
162
|
+
expect(nova).to receive(:get_server_details).with(env, '1234')
|
|
163
|
+
@action.read_ssh_info(env).should eq(
|
|
164
|
+
host: '80.80.80.80',
|
|
165
|
+
port: 22,
|
|
166
|
+
username: 'sshuser',
|
|
167
|
+
private_key_path: '/data/dir/my_keypair_name',
|
|
168
|
+
log_level: 'ERROR')
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
context 'with neither keypair_name nor public_key_path specified and ssh.insert_key is false' do
|
|
173
|
+
it 'does not return private_key_path' do
|
|
174
|
+
ssh_config.stub(:insert_key) { false }
|
|
175
|
+
config.stub(:floating_ip) { '80.80.80.80' }
|
|
176
|
+
config.stub(:keypair_name) { nil }
|
|
177
|
+
config.stub(:public_key_path) { nil }
|
|
178
|
+
@action.read_ssh_info(env).should eq(host: '80.80.80.80', port: 22, username: 'sshuser', log_level: 'ERROR')
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
context 'without config.floating_ip specified' do
|
|
184
|
+
it 'return the a floating_ip found by querying server details' do
|
|
185
|
+
nova.stub(:get_server_details).with(env, '1234') do
|
|
186
|
+
{
|
|
187
|
+
'addresses' => {
|
|
188
|
+
'toto' => [{
|
|
189
|
+
'addr' => '13.13.13.13'
|
|
190
|
+
}, {
|
|
191
|
+
'addr' => '12.12.12.12',
|
|
192
|
+
'OS-EXT-IPS:type' => 'floating'
|
|
193
|
+
}]
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
end
|
|
197
|
+
config.stub(:keypair_name) { 'my_keypair' }
|
|
198
|
+
@action.read_ssh_info(env).should eq(host: '12.12.12.12', port: 22, username: 'sshuser', log_level: 'ERROR')
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
require 'vagrant-openstack-illuin-provider/spec_helper'
|
|
2
|
+
|
|
3
|
+
describe VagrantPlugins::Openstack::Action::ReadState do
|
|
4
|
+
let(:nova) do
|
|
5
|
+
double('nova')
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
let(:env) do
|
|
9
|
+
{}.tap do |env|
|
|
10
|
+
env[:ui] = double('ui').tap do |ui|
|
|
11
|
+
ui.stub(:info).with(anything)
|
|
12
|
+
ui.stub(:error).with(anything)
|
|
13
|
+
end
|
|
14
|
+
env[:openstack_client] = double('openstack_client').tap do |os|
|
|
15
|
+
os.stub(:nova) { nova }
|
|
16
|
+
end
|
|
17
|
+
env[:machine] = OpenStruct.new
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
let(:app) do
|
|
22
|
+
double('app').tap do |app|
|
|
23
|
+
app.stub(:call).with(anything)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe 'call' do
|
|
28
|
+
context 'when server id is present' do
|
|
29
|
+
it 'set the state to the vm_state returned by nova' do
|
|
30
|
+
env[:machine].id = 'server_id'
|
|
31
|
+
nova.stub(:get_server_details).and_return('status' => 'ACTIVE')
|
|
32
|
+
|
|
33
|
+
expect(nova).to receive(:get_server_details).with(env, 'server_id')
|
|
34
|
+
expect(app).to receive(:call)
|
|
35
|
+
|
|
36
|
+
@action = ReadState.new(app, nil)
|
|
37
|
+
@action.call(env)
|
|
38
|
+
|
|
39
|
+
expect(env[:machine_state_id]).to eq(:active)
|
|
40
|
+
end
|
|
41
|
+
it 'set the state to the task_state returned by nova extension' do
|
|
42
|
+
env[:machine].id = 'server_id'
|
|
43
|
+
nova.stub(:get_server_details).and_return('OS-EXT-STS:task_state' => 'SUSPENDING')
|
|
44
|
+
|
|
45
|
+
expect(nova).to receive(:get_server_details).with(env, 'server_id')
|
|
46
|
+
expect(app).to receive(:call)
|
|
47
|
+
|
|
48
|
+
@action = ReadState.new(app, nil)
|
|
49
|
+
@action.call(env)
|
|
50
|
+
|
|
51
|
+
expect(env[:machine_state_id]).to eq(:suspending)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
context 'when server id is not present' do
|
|
55
|
+
it 'set the state to :not_created' do
|
|
56
|
+
env[:machine].id = nil
|
|
57
|
+
expect(nova).to_not receive(:get_server_details)
|
|
58
|
+
expect(app).to receive(:call)
|
|
59
|
+
|
|
60
|
+
@action = ReadState.new(app, nil)
|
|
61
|
+
@action.call(env)
|
|
62
|
+
|
|
63
|
+
expect(env[:machine_state_id]).to eq(:not_created)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
context 'when server cannot be found' do
|
|
67
|
+
it 'set the state to :not_created' do
|
|
68
|
+
env[:machine].id = 'server_id'
|
|
69
|
+
nova.stub(:get_server_details).and_return(nil)
|
|
70
|
+
|
|
71
|
+
expect(nova).to receive(:get_server_details).with(env, 'server_id')
|
|
72
|
+
expect(app).to receive(:call)
|
|
73
|
+
|
|
74
|
+
@action = ReadState.new(app, nil)
|
|
75
|
+
@action.call(env)
|
|
76
|
+
|
|
77
|
+
expect(env[:machine_state_id]).to eq(:not_created)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require 'vagrant-openstack-illuin-provider/spec_helper'
|
|
2
|
+
|
|
3
|
+
describe VagrantPlugins::Openstack::Action::Resume do
|
|
4
|
+
let(:nova) do
|
|
5
|
+
double('nova').tap do |nova|
|
|
6
|
+
nova.stub(:resume_server)
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
let(:env) do
|
|
11
|
+
{}.tap do |env|
|
|
12
|
+
env[:ui] = double('ui').tap do |ui|
|
|
13
|
+
ui.stub(:info).with(anything)
|
|
14
|
+
ui.stub(:error).with(anything)
|
|
15
|
+
end
|
|
16
|
+
env[:openstack_client] = double('openstack_client').tap do |os|
|
|
17
|
+
os.stub(:nova) { nova }
|
|
18
|
+
end
|
|
19
|
+
env[:machine] = OpenStruct.new
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
let(:app) do
|
|
24
|
+
double('app').tap do |app|
|
|
25
|
+
app.stub(:call).with(anything)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
describe 'call' do
|
|
30
|
+
context 'when server id is present' do
|
|
31
|
+
it 'starts the server' do
|
|
32
|
+
env[:machine].id = 'server_id'
|
|
33
|
+
expect(nova).to receive(:resume_server).with(env, 'server_id')
|
|
34
|
+
expect(app).to receive(:call)
|
|
35
|
+
@action = Resume.new(app, nil)
|
|
36
|
+
@action.call(env)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
context 'when server id is not present' do
|
|
40
|
+
it 'does nothing' do
|
|
41
|
+
env[:machine].id = nil
|
|
42
|
+
expect(nova).to_not receive(:resume_server)
|
|
43
|
+
expect(app).to receive(:call)
|
|
44
|
+
@action = Resume.new(app, nil)
|
|
45
|
+
@action.call(env)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|