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,19 @@
|
|
|
1
|
+
require 'vagrant-openstack-illuin-provider/action/abstract_action'
|
|
2
|
+
|
|
3
|
+
module VagrantPlugins
|
|
4
|
+
module Openstack
|
|
5
|
+
module Action
|
|
6
|
+
class Message < AbstractAction
|
|
7
|
+
def initialize(app, _env, message)
|
|
8
|
+
@app = app
|
|
9
|
+
@message = message
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def execute(env)
|
|
13
|
+
env[:ui].info(@message)
|
|
14
|
+
@app.call(env)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
require 'log4r'
|
|
2
|
+
|
|
3
|
+
require 'vagrant/action/builder'
|
|
4
|
+
|
|
5
|
+
require 'vagrant-openstack-illuin-provider/action/abstract_action'
|
|
6
|
+
require 'vagrant-openstack-illuin-provider/action/read_ssh_info'
|
|
7
|
+
|
|
8
|
+
module VagrantPlugins
|
|
9
|
+
module Openstack
|
|
10
|
+
module Action
|
|
11
|
+
include Vagrant::Action::Builtin
|
|
12
|
+
|
|
13
|
+
class ProvisionWrapper < AbstractAction
|
|
14
|
+
def initialize(app, env)
|
|
15
|
+
@app = app
|
|
16
|
+
@env = env
|
|
17
|
+
@logger = Log4r::Logger.new('vagrant_openstack::action::provision_wrapper')
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def execute(env)
|
|
21
|
+
@logger.info 'Run provisioning'
|
|
22
|
+
InternalProvisionWrapper.new(@app, @env).call(@env)
|
|
23
|
+
@app.call(env)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
class InternalProvisionWrapper < Vagrant::Action::Builtin::Provision
|
|
28
|
+
def initialize(app, env)
|
|
29
|
+
@logger = Log4r::Logger.new('vagrant_openstack::action::internal_provision_wrapper')
|
|
30
|
+
super app, env
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def run_provisioner(env)
|
|
34
|
+
if env[:provisioner].is_a?(Vagrant.plugin('2').manager.provisioners[:shell])
|
|
35
|
+
handle_shell_meta_args(env)
|
|
36
|
+
end
|
|
37
|
+
env[:provisioner].provision
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
private
|
|
41
|
+
|
|
42
|
+
def handle_shell_meta_args(env)
|
|
43
|
+
config = env[:provisioner].config
|
|
44
|
+
args = config.args.nil? ? [] : [config.args].flatten
|
|
45
|
+
config.args = []
|
|
46
|
+
@logger.info "Shell provisioner args: #{args}"
|
|
47
|
+
args.each do |arg|
|
|
48
|
+
if '@@ssh_ip@@'.eql? arg
|
|
49
|
+
ssh_info = VagrantPlugins::Openstack::Action.get_ssh_info(env)
|
|
50
|
+
@logger.info "Replace meta-arg #{arg} by value #{ssh_info[:host]}"
|
|
51
|
+
config.args << ssh_info[:host]
|
|
52
|
+
else
|
|
53
|
+
config.args << arg
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
require 'log4r'
|
|
2
|
+
|
|
3
|
+
require 'vagrant-openstack-illuin-provider/config_resolver'
|
|
4
|
+
require 'vagrant-openstack-illuin-provider/utils'
|
|
5
|
+
require 'vagrant-openstack-illuin-provider/action/abstract_action'
|
|
6
|
+
|
|
7
|
+
module VagrantPlugins
|
|
8
|
+
module Openstack
|
|
9
|
+
module Action
|
|
10
|
+
# This action reads the SSH info for the machine and puts it into the
|
|
11
|
+
# `:machine_ssh_info` key in the environment.
|
|
12
|
+
|
|
13
|
+
class ReadSSHInfo < AbstractAction
|
|
14
|
+
def initialize(app, _env, resolver = ConfigResolver.new, utils = Utils.new)
|
|
15
|
+
@app = app
|
|
16
|
+
@logger = Log4r::Logger.new('vagrant_openstack::action::read_ssh_info')
|
|
17
|
+
@resolver = resolver
|
|
18
|
+
@utils = utils
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def execute(env)
|
|
22
|
+
@logger.info 'Reading SSH info'
|
|
23
|
+
server_id = env[:machine].id.to_sym
|
|
24
|
+
SSHInfoHolder.instance.tap do |holder|
|
|
25
|
+
holder.synchronize do
|
|
26
|
+
holder.ssh_info[server_id] = read_ssh_info(env) if holder.ssh_info[server_id].nil?
|
|
27
|
+
env[:machine_ssh_info] = holder.ssh_info[server_id]
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
@app.call(env)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
def read_ssh_info(env)
|
|
36
|
+
config = env[:machine].provider_config
|
|
37
|
+
env[:ui].warn('SSH is disabled in the provider config. The action you are attempting is likely to fail') if config.ssh_disabled
|
|
38
|
+
hash = {
|
|
39
|
+
host: @utils.get_ip_address(env),
|
|
40
|
+
port: @resolver.resolve_ssh_port(env),
|
|
41
|
+
username: @resolver.resolve_ssh_username(env)
|
|
42
|
+
}
|
|
43
|
+
if env[:machine].config.ssh.insert_key
|
|
44
|
+
hash[:private_key_path] = "#{env[:machine].data_dir}/#{get_keypair_name(env)}" unless config.keypair_name || config.public_key_path
|
|
45
|
+
end
|
|
46
|
+
# Should work silently when https://github.com/mitchellh/vagrant/issues/4637 is fixed
|
|
47
|
+
hash[:log_level] = 'ERROR'
|
|
48
|
+
hash
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def get_keypair_name(env)
|
|
52
|
+
env[:openstack_client].nova.get_server_details(env, env[:machine].id)['key_name']
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
class SSHInfoHolder < Mutex
|
|
57
|
+
include Singleton
|
|
58
|
+
|
|
59
|
+
#
|
|
60
|
+
# Keys are machine ids
|
|
61
|
+
#
|
|
62
|
+
attr_accessor :ssh_info
|
|
63
|
+
|
|
64
|
+
def initialize
|
|
65
|
+
@ssh_info = {}
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def self.get_ssh_info(env)
|
|
70
|
+
SSHInfoHolder.instance.ssh_info[env[:machine].id.to_sym]
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'log4r'
|
|
2
|
+
|
|
3
|
+
require 'vagrant-openstack-illuin-provider/action/abstract_action'
|
|
4
|
+
|
|
5
|
+
module VagrantPlugins
|
|
6
|
+
module Openstack
|
|
7
|
+
module Action
|
|
8
|
+
# This action reads the state of the machine and puts it in the
|
|
9
|
+
# `:machine_state_id` key in the environment.
|
|
10
|
+
class ReadState < AbstractAction
|
|
11
|
+
def initialize(app, _env)
|
|
12
|
+
@app = app
|
|
13
|
+
@logger = Log4r::Logger.new('vagrant_openstack::action::read_state')
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def execute(env)
|
|
17
|
+
env[:machine_state_id] = read_state(env)
|
|
18
|
+
@app.call(env)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def read_state(env)
|
|
22
|
+
machine = env[:machine]
|
|
23
|
+
return :not_created if machine.id.nil?
|
|
24
|
+
|
|
25
|
+
# Find the machine
|
|
26
|
+
server = env[:openstack_client].nova.get_server_details(env, machine.id)
|
|
27
|
+
if server.nil? || server['status'] == 'DELETED'
|
|
28
|
+
# The machine can't be found
|
|
29
|
+
@logger.info('Machine not found or deleted, assuming it got destroyed.')
|
|
30
|
+
machine.id = nil
|
|
31
|
+
return :not_created
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
if !server['OS-EXT-STS:task_state'].nil?
|
|
35
|
+
server['OS-EXT-STS:task_state'].downcase.to_sym
|
|
36
|
+
else
|
|
37
|
+
server['status'].downcase.to_sym
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require 'vagrant-openstack-illuin-provider/action/abstract_action'
|
|
2
|
+
|
|
3
|
+
module VagrantPlugins
|
|
4
|
+
module Openstack
|
|
5
|
+
module Action
|
|
6
|
+
class Resume < AbstractAction
|
|
7
|
+
def initialize(app, _env)
|
|
8
|
+
@app = app
|
|
9
|
+
@logger = Log4r::Logger.new('vagrant_openstack::action::resume_server')
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def execute(env)
|
|
13
|
+
if env[:machine].id
|
|
14
|
+
@logger.info "Resuming suspended VM #{env[:machine].id}..."
|
|
15
|
+
env[:ui].info I18n.t('vagrant.actions.vm.resume.resuming')
|
|
16
|
+
env[:openstack_client].nova.resume_server(env, env[:machine].id)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
@app.call(env)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require 'vagrant-openstack-illuin-provider/action/abstract_action'
|
|
2
|
+
|
|
3
|
+
module VagrantPlugins
|
|
4
|
+
module Openstack
|
|
5
|
+
module Action
|
|
6
|
+
class SnapshotCleanup < AbstractAction
|
|
7
|
+
def initialize(app, _env)
|
|
8
|
+
@app = app
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def call(env)
|
|
12
|
+
nova = env[:openstack_client].nova
|
|
13
|
+
machine_snapshots = nova.list_snapshots(env, env[:machine].id)
|
|
14
|
+
|
|
15
|
+
snapshots_to_clean = machine_snapshots.select do |s|
|
|
16
|
+
s.metadata.key?('vagrant_snapshot')
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
@app.call env
|
|
20
|
+
|
|
21
|
+
unless snapshots_to_clean.empty?
|
|
22
|
+
env[:ui].info("Deleting Vagrant snapshots: #{snapshots_to_clean.map(&:name)}")
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
snapshots_to_clean.each do |s|
|
|
26
|
+
nova.delete_snapshot(env, s.id)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require 'vagrant-openstack-illuin-provider/action/abstract_action'
|
|
2
|
+
|
|
3
|
+
module VagrantPlugins
|
|
4
|
+
module Openstack
|
|
5
|
+
module Action
|
|
6
|
+
class SnapshotDelete < AbstractAction
|
|
7
|
+
def initialize(app, _env)
|
|
8
|
+
@app = app
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def call(env)
|
|
12
|
+
nova = env[:openstack_client].nova
|
|
13
|
+
machine_snapshots = nova.list_snapshots(env, env[:machine].id)
|
|
14
|
+
|
|
15
|
+
snapshot = machine_snapshots.find { |s| s.name == env[:snapshot_name] }
|
|
16
|
+
|
|
17
|
+
unless snapshot.nil?
|
|
18
|
+
env[:ui].info(I18n.t('vagrant.actions.vm.snapshot.deleting',
|
|
19
|
+
name: snapshot.name))
|
|
20
|
+
|
|
21
|
+
nova.delete_snapshot(env, snapshot.id)
|
|
22
|
+
|
|
23
|
+
env[:ui].info(I18n.t('vagrant.actions.vm.snapshot.deleted',
|
|
24
|
+
name: snapshot.name))
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
@app.call env
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require 'vagrant-openstack-illuin-provider/action/abstract_action'
|
|
2
|
+
|
|
3
|
+
module VagrantPlugins
|
|
4
|
+
module Openstack
|
|
5
|
+
module Action
|
|
6
|
+
class SnapshotList < AbstractAction
|
|
7
|
+
def initialize(app, _env)
|
|
8
|
+
@app = app
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def call(env)
|
|
12
|
+
nova = env[:openstack_client].nova
|
|
13
|
+
machine_snapshots = nova.list_snapshots(env, env[:machine].id)
|
|
14
|
+
|
|
15
|
+
env[:machine_snapshot_list] = machine_snapshots.map(&:name)
|
|
16
|
+
|
|
17
|
+
@app.call env
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'vagrant-openstack-illuin-provider/action/abstract_action'
|
|
2
|
+
|
|
3
|
+
module VagrantPlugins
|
|
4
|
+
module Openstack
|
|
5
|
+
module Action
|
|
6
|
+
class SnapshotRestore < AbstractAction
|
|
7
|
+
def initialize(app, _env)
|
|
8
|
+
@app = app
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def call(env)
|
|
12
|
+
nova = env[:openstack_client].nova
|
|
13
|
+
machine_snapshots = nova.list_snapshots(env, env[:machine].id)
|
|
14
|
+
|
|
15
|
+
snapshot = machine_snapshots.find { |s| s.name == env[:snapshot_name] }
|
|
16
|
+
|
|
17
|
+
unless snapshot.nil?
|
|
18
|
+
env[:ui].info(I18n.t('vagrant.actions.vm.snapshot.restoring',
|
|
19
|
+
name: snapshot.name))
|
|
20
|
+
|
|
21
|
+
nova.restore_snapshot(env, env[:machine].id, snapshot.id)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
@app.call env
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
require 'vagrant-openstack-illuin-provider/action/abstract_action'
|
|
2
|
+
|
|
3
|
+
module VagrantPlugins
|
|
4
|
+
module Openstack
|
|
5
|
+
module Action
|
|
6
|
+
class SnapshotSave < AbstractAction
|
|
7
|
+
def initialize(app, _env, retry_interval = 3)
|
|
8
|
+
@app = app
|
|
9
|
+
@retry_interval = retry_interval
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def call(env)
|
|
13
|
+
nova = env[:openstack_client].nova
|
|
14
|
+
config = env[:machine].provider_config
|
|
15
|
+
|
|
16
|
+
env[:ui].info(I18n.t('vagrant.actions.vm.snapshot.saving',
|
|
17
|
+
name: env[:snapshot_name]))
|
|
18
|
+
|
|
19
|
+
nova.create_snapshot(
|
|
20
|
+
env,
|
|
21
|
+
env[:machine].id, env[:snapshot_name])
|
|
22
|
+
|
|
23
|
+
image = nova.list_snapshots(env, env[:machine].id).find { |i| i.name == env[:snapshot_name] }
|
|
24
|
+
|
|
25
|
+
timeout(config.server_create_timeout, Errors::Timeout) do
|
|
26
|
+
loop do
|
|
27
|
+
image_status = nova.get_image_details(env, image.id)
|
|
28
|
+
|
|
29
|
+
break if image_status['status'] == 'ACTIVE'
|
|
30
|
+
|
|
31
|
+
unless image_status['progress'].nil?
|
|
32
|
+
env[:ui].clear_line
|
|
33
|
+
env[:ui].report_progress(image_status['progress'], 100, false)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
sleep @retry_interval
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Clear progress output.
|
|
41
|
+
env[:ui].clear_line
|
|
42
|
+
|
|
43
|
+
env[:ui].success(I18n.t('vagrant.actions.vm.snapshot.saved',
|
|
44
|
+
name: env[:snapshot_name]))
|
|
45
|
+
|
|
46
|
+
@app.call env
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require 'log4r'
|
|
2
|
+
|
|
3
|
+
require 'vagrant-openstack-illuin-provider/action/abstract_action'
|
|
4
|
+
|
|
5
|
+
module VagrantPlugins
|
|
6
|
+
module Openstack
|
|
7
|
+
module Action
|
|
8
|
+
class StartServer < AbstractAction
|
|
9
|
+
def initialize(app, _env)
|
|
10
|
+
@app = app
|
|
11
|
+
@logger = Log4r::Logger.new('vagrant_openstack::action::start_server')
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def execute(env)
|
|
15
|
+
if env[:machine].id
|
|
16
|
+
env[:ui].info(I18n.t('vagrant_openstack.starting_server'))
|
|
17
|
+
env[:openstack_client].nova.start_server(env, env[:machine].id)
|
|
18
|
+
end
|
|
19
|
+
@app.call(env)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require 'log4r'
|
|
2
|
+
|
|
3
|
+
require 'vagrant-openstack-illuin-provider/action/abstract_action'
|
|
4
|
+
|
|
5
|
+
module VagrantPlugins
|
|
6
|
+
module Openstack
|
|
7
|
+
module Action
|
|
8
|
+
class StopServer < AbstractAction
|
|
9
|
+
def initialize(app, _env)
|
|
10
|
+
@app = app
|
|
11
|
+
@logger = Log4r::Logger.new('vagrant_openstack::action::stop_server')
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def execute(env)
|
|
15
|
+
if env[:machine].id
|
|
16
|
+
@logger.info "Stopping server #{env[:machine].id}..."
|
|
17
|
+
env[:ui].info(I18n.t('vagrant_openstack.stopping_server'))
|
|
18
|
+
env[:openstack_client].nova.stop_server(env, env[:machine].id)
|
|
19
|
+
end
|
|
20
|
+
@app.call(env)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|