vagrant-vrealize 0.0.4

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.
Files changed (37) hide show
  1. checksums.yaml +7 -0
  2. data/CONTRIBUTING.md +16 -0
  3. data/LICENSE +55 -0
  4. data/README.md +132 -0
  5. data/Rakefile +29 -0
  6. data/example_box/README.md +13 -0
  7. data/example_box/Vagrantfile +7 -0
  8. data/example_box/metadata.json +3 -0
  9. data/example_box/mkbox.sh +3 -0
  10. data/example_box/vrealize.box +0 -0
  11. data/lib/vagrant-vrealize/action/connect_vrealize.rb +65 -0
  12. data/lib/vagrant-vrealize/action/is_created.rb +35 -0
  13. data/lib/vagrant-vrealize/action/is_stopped.rb +18 -0
  14. data/lib/vagrant-vrealize/action/message_already_created.rb +18 -0
  15. data/lib/vagrant-vrealize/action/message_not_created.rb +16 -0
  16. data/lib/vagrant-vrealize/action/message_will_not_destroy.rb +16 -0
  17. data/lib/vagrant-vrealize/action/read_ssh_info.rb +28 -0
  18. data/lib/vagrant-vrealize/action/read_state.rb +28 -0
  19. data/lib/vagrant-vrealize/action/run_instance.rb +111 -0
  20. data/lib/vagrant-vrealize/action/start_instance.rb +25 -0
  21. data/lib/vagrant-vrealize/action/stop_instance.rb +19 -0
  22. data/lib/vagrant-vrealize/action/terminate_instance.rb +23 -0
  23. data/lib/vagrant-vrealize/action/timed_provision.rb +21 -0
  24. data/lib/vagrant-vrealize/action/wait_for_state.rb +25 -0
  25. data/lib/vagrant-vrealize/action/warn_networks.rb +19 -0
  26. data/lib/vagrant-vrealize/action.rb +191 -0
  27. data/lib/vagrant-vrealize/config.rb +138 -0
  28. data/lib/vagrant-vrealize/errors.rb +32 -0
  29. data/lib/vagrant-vrealize/extra-entries.rb +46 -0
  30. data/lib/vagrant-vrealize/plugin.rb +73 -0
  31. data/lib/vagrant-vrealize/provider.rb +52 -0
  32. data/lib/vagrant-vrealize/util/timer.rb +17 -0
  33. data/lib/vagrant-vrealize/version.rb +5 -0
  34. data/lib/vagrant-vrealize/vra_client.rb +140 -0
  35. data/lib/vagrant-vrealize.rb +19 -0
  36. data/locales/en.yml +148 -0
  37. metadata +106 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ad1b04231e2f9e5bef5be02d82619f23c1e58e92
4
+ data.tar.gz: 6ff3de905eba3c5c8cb89faecf8adad6e16d4590
5
+ SHA512:
6
+ metadata.gz: cb6148f910dd75743a66f56dfcfb1c30dcb619a23392974b21b5c739a80acb3c73832d2e5d91a061a403f0e65456d02da23af5cee3acd060242f4f892a425113
7
+ data.tar.gz: 3e270ef65ac5aabf2592ea3cdf84c7c346db9a5c122010bab161cead76254c9908a2b3e825c043df6faa82765774a84f138eb12f07e87a02fa7504ff26d02f50
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,16 @@
1
+ # How To Contribute
2
+
3
+ We want your patches! `vagrant-vrealize` isn't done yet, and anything
4
+ you've got to contribute will be gratefully received.
5
+
6
+ If there's something you want to add:
7
+
8
+ 1. Make a local branch, give it a meaningful name
9
+ 2. Make your change
10
+ 3. Push the branch to github
11
+ 4. Make a pull request to `master`.
12
+ 5. It'll be reviewed, QA'd, and hopefully merged.
13
+
14
+ If you're contributing a complete feature or a bug-fix, this will
15
+ probably trigger a version bump and a release of the gem, but I'll
16
+ take care of that.
data/LICENSE ADDED
@@ -0,0 +1,55 @@
1
+ Copyright (c) 2016 Sky UK Ltd
2
+ Copyright (c) 2014 Mitchell Hashimoto
3
+ All rights reserved.
4
+
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions are
7
+ met:
8
+
9
+ 1. Redistributions of source code must retain the above copyright
10
+ notice, this list of conditions and the following disclaimer.
11
+
12
+ 2. Redistributions in binary form must reproduce the above copyright
13
+ notice, this list of conditions and the following disclaimer in the
14
+ documentation and/or other materials provided with the distribution.
15
+
16
+ 3. Neither the name of the copyright holder nor the names of its
17
+ contributors may be used to endorse or promote products derived from
18
+ this software without specific prior written permission.
19
+
20
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
+ HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+
32
+ This is a derived work, based upon
33
+ https://github.com/mitchellh/vagrant-aws, which was conveyed under the
34
+ following license:
35
+
36
+ The MIT License (MIT)
37
+
38
+ Permission is hereby granted, free of charge, to any person obtaining
39
+ a copy of this software and associated documentation files (the
40
+ "Software"), to deal in the Software without restriction, including
41
+ without limitation the rights to use, copy, modify, merge, publish,
42
+ distribute, sublicense, and/or sell copies of the Software, and to
43
+ permit persons to whom the Software is furnished to do so, subject to
44
+ the following conditions:
45
+
46
+ The above copyright notice and this permission notice shall be
47
+ included in all copies or substantial portions of the Software.
48
+
49
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
50
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
51
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
52
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
53
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
54
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
55
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,132 @@
1
+ # Vagrant VRealize Provider
2
+
3
+ This is a [Vagrant](http://www.vagrantup.com) 1.2+ plugin that adds a VDC
4
+ provider to Vagrant, allowing Vagrant to control and provision machines in
5
+ VRealize.
6
+
7
+ **NOTE:** This plugin requires Vagrant 1.2+,
8
+
9
+ **NOTE MORE:** This plugin is a work in progress. The basics work, but it's
10
+ not as fully-featured as the `vagrant-aws` plugin it's largely based on.
11
+
12
+ ## What works
13
+
14
+ * Boot VRealize instances.
15
+ * SSH into the instances.
16
+ * Provision the instances with any built-in Vagrant provisioner.
17
+ * Minimal synced folder support via `rsync`.
18
+
19
+ ## Usage
20
+
21
+ Install using standard Vagrant 1.1+ plugin installation methods. After
22
+ installing, `vagrant up` and specify the `vrealize` provider. An
23
+ example is shown below.
24
+
25
+ ```
26
+ $ vagrant plugin install vagrant-vrealize
27
+ ...
28
+ $ vagrant up --provider=vrealize
29
+ ...
30
+ ```
31
+
32
+ Of course, prior to doing this, you'll need to obtain a
33
+ VRealize-compatible box file for Vagrant.
34
+
35
+ ## Quick Start
36
+
37
+ After installing the plugin (instructions above), the quickest way to get
38
+ started is to actually use the dummy VRealize box and specify all the details
39
+ manually within a `config.vm.provider` block. So first, build the box:
40
+
41
+ ```
42
+ $ rake box
43
+ $ vagrant box add --provider vrealize example_box/vrealize.box
44
+ ```
45
+
46
+ And then make a Vagrantfile that looks like the following, filling in
47
+ your information where necessary.
48
+
49
+ ```
50
+ Vagrant.configure("2") do |config|
51
+ config.vm.box = "vrealize"
52
+
53
+ config.vm.provider :vrealize do |vrealize, override|
54
+ # Note: you'll need to make sure your environment variables
55
+ # are set up correctly for this bit...
56
+ vrealize.vra_username = ENV['USER']
57
+ vrealize.vra_password = ENV['PASSWORD']
58
+ vrealize.vra_tenant = ENV['VRA_TENANT']
59
+ vrealize.vra_base_url = ENV['VRA_BASE_URL']
60
+
61
+ # From here on are configuration settings for the specific VM
62
+ # we're creating
63
+
64
+ vrealize.requested_for = ENV['VRA_AD_USER']
65
+
66
+ vrealize.subtenant_id = SOME_GUID
67
+ vrealize.catalog_item_id = SOME_CATALOG_ID
68
+
69
+ vrealize.add_entries do |extras|
70
+ # This isn't actually needed, it's just here to show how to set custom
71
+ # request data
72
+ extras.string('provider-Vrm.DataCenter.Location', '')
73
+ end
74
+
75
+
76
+ override.ssh.username = "root"
77
+ override.ssh.password = SOMETHING_SENSIBLE_HERE
78
+ end
79
+ end
80
+ ```
81
+
82
+ And then run `vagrant up --provider=vrealize`.
83
+
84
+ ## Networks
85
+
86
+ Networking features in the form of `config.vm.network` are not
87
+ supported with `vagrant-vrealize`, currently. If any of these are
88
+ specified, Vagrant will emit a warning, but will otherwise boot
89
+ the VRealize machine.
90
+
91
+ ## Synced Folders
92
+
93
+ There is minimal support for synced folders. Upon `vagrant up`,
94
+ `vagrant reload`, and `vagrant provision`, the Vrealize provider will
95
+ use `rsync` (if available) to uni-directionally sync the folder to the
96
+ remote machine over SSH.
97
+
98
+ See [Vagrant Synced folders: rsync](https://docs.vagrantup.com/v2/synced-folders/rsync.html)
99
+
100
+
101
+ ## Development
102
+
103
+ To work on the `vagrant-vrealize` plugin, clone this repository out, and use
104
+ [Bundler](http://gembundler.com) to get the dependencies:
105
+
106
+ ```
107
+ $ bundle
108
+ ```
109
+
110
+ If those install, you're ready to start developing the plugin. You can test
111
+ the plugin without installing it into your Vagrant environment by just
112
+ creating a `Vagrantfile` in the top level of this directory (it is gitignored)
113
+ and add the following line to your `Vagrantfile`
114
+
115
+ ```ruby
116
+ Vagrant.require_plugin "vagrant-vrealize"
117
+ ```
118
+ Use bundler to execute Vagrant:
119
+ ```
120
+ $ bundle exec vagrant up --provider=vrealize
121
+ ```
122
+
123
+ ## And Finally
124
+
125
+ This plugin is an unfinished work-in-progress. It (and large parts of
126
+ this document) are based on Mitchell Hashimoto's `vagrant-aws` plugin,
127
+ which can be found here: https://github.com/mitchellh/vagrant-aws.
128
+
129
+ ## Author
130
+
131
+ Alex Young <Alexander.Young@sky.uk>
132
+ Please get in touch, raise issues, make pull requests, if you're trying to use this and running into problems.
data/Rakefile ADDED
@@ -0,0 +1,29 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'rake/testtask'
4
+
5
+ # Immediately sync all stdout so that tools like buildbot can
6
+ # immediately load in the output.
7
+ $stdout.sync = true
8
+ $stderr.sync = true
9
+
10
+ # Change to the directory of this file.
11
+ Dir.chdir(File.expand_path("../", __FILE__))
12
+
13
+ # This installs the tasks that help with gem creation and
14
+ # publishing.
15
+ Bundler::GemHelper.install_tasks
16
+
17
+ task :console do
18
+ require 'irb'
19
+ require 'irb/completion'
20
+ require 'vagrant-vrealize'
21
+ ARGV.clear
22
+ IRB.start
23
+ end
24
+
25
+ desc "Rebuild the boxfile."
26
+ task :box do
27
+ sh "cd example_box && bash ./mkbox.sh"
28
+ puts "Created example_box/vrealize.box"
29
+ end
@@ -0,0 +1,13 @@
1
+ # Vagrant AWS Example Box
2
+
3
+ Vagrant providers each require a custom provider-specific box format.
4
+ This folder shows the example contents of a box for the `aws` provider.
5
+ To turn this into a box:
6
+
7
+ ```
8
+ $ tar cvzf aws.box ./metadata.json ./Vagrantfile
9
+ ```
10
+
11
+ This box works by using Vagrant's built-in Vagrantfile merging to setup
12
+ defaults for AWS. These defaults can easily be overwritten by higher-level
13
+ Vagrantfiles (such as project root Vagrantfiles).
@@ -0,0 +1,7 @@
1
+ # -*- mode: ruby -*-
2
+ # vi: set ft=ruby :
3
+
4
+ Vagrant.configure("2") do |config|
5
+ config.vm.provider :vrealize do |vrealize|
6
+ end
7
+ end
@@ -0,0 +1,3 @@
1
+ {
2
+ "provider": "vrealize"
3
+ }
@@ -0,0 +1,3 @@
1
+ #!/bin/bash
2
+
3
+ tar cvzf vrealize.box ./metadata.json ./Vagrantfile
Binary file
@@ -0,0 +1,65 @@
1
+ require "log4r"
2
+ require 'vra'
3
+
4
+ require 'vagrant-vrealize/vra_client'
5
+
6
+ module VagrantPlugins
7
+ module Vrealize
8
+ module Action
9
+
10
+ # This action connects to VRealize, and sticks a :vra object
11
+ # into the environment.
12
+ class ConnectVrealize
13
+ def initialize(app, env)
14
+ @app = app
15
+ @logger = Log4r::Logger.new("vagrant_vrealize::action::connect_vrealize")
16
+ end
17
+
18
+
19
+ def call(env)
20
+ vra = client(env)
21
+
22
+ log_connecting(env)
23
+ authorized = (vra.authorize!; true) rescue false
24
+
25
+ if authorized
26
+ store(env, vra)
27
+ else
28
+ env[:ui].warn("Authorisation failed")
29
+ end
30
+ @app.call(env)
31
+ end
32
+
33
+
34
+ protected
35
+
36
+ def client(env)
37
+ vra_conf = vra_conf(env)
38
+ VraClient.build(username: vra_conf.vra_username,
39
+ password: vra_conf.vra_password,
40
+ tenant: vra_conf.vra_tenant,
41
+ base_url: vra_conf.vra_base_url,
42
+ verify_ssl: true)
43
+ end
44
+
45
+
46
+ def vra_conf(env)
47
+ env[:machine].provider_config
48
+ end
49
+
50
+
51
+ def store(env, client)
52
+ env[:vra] = client
53
+ end
54
+
55
+
56
+ def log_connecting(env)
57
+ @logger.info("Connecting to #{env[:machine].provider_config.vra_base_url}")
58
+ end
59
+
60
+ end # class ConnectVrealize
61
+
62
+
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,35 @@
1
+ module VagrantPlugins
2
+ module Vrealize
3
+ module Action
4
+
5
+ # This can be used with "Call" built-in to check if the machine
6
+ # is created and branch in the middleware.
7
+ class IsCreated
8
+
9
+ def initialize(app, env)
10
+ @app = app
11
+ end
12
+
13
+ NotCreatedStatuses = %i{
14
+ not_created
15
+ DELETED
16
+ }
17
+
18
+ def call(env)
19
+ env[:result] = created?(env[:machine])
20
+ @app.call(env)
21
+ end
22
+
23
+ private
24
+ def created?(machine)
25
+ !NotCreatedStatuses.include?(machine.state.id)
26
+ end
27
+
28
+
29
+
30
+ end # class IsCreated
31
+
32
+
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,18 @@
1
+ module VagrantPlugins
2
+ module Vrealize
3
+ module Action
4
+ # This can be used with "Call" built-in to check if the machine
5
+ # is stopped and branch in the middleware.
6
+ class IsStopped
7
+ def initialize(app, env)
8
+ @app = app
9
+ end
10
+
11
+ def call(env)
12
+ env[:result] = env[:machine].state.id == :stopped
13
+ @app.call(env)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ require 'i18n'
2
+
3
+ module VagrantPlugins
4
+ module Vrealize
5
+ module Action
6
+ class MessageAlreadyCreated
7
+ def initialize(app, env)
8
+ @app = app
9
+ end
10
+
11
+ def call(env)
12
+ env[:ui].info(I18n.t("vagrant_vrealize.already_status", status: "created"))
13
+ @app.call(env)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,16 @@
1
+ module VagrantPlugins
2
+ module Vrealize
3
+ module Action
4
+ class MessageNotCreated
5
+ def initialize(app, env)
6
+ @app = app
7
+ end
8
+
9
+ def call(env)
10
+ env[:ui].info(I18n.t("vagrant_vrealize.not_created"))
11
+ @app.call(env)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module VagrantPlugins
2
+ module Vrealize
3
+ module Action
4
+ class MessageWillNotDestroy
5
+ def initialize(app, env)
6
+ @app = app
7
+ end
8
+
9
+ def call(env)
10
+ env[:ui].info(I18n.t("vagrant_vrealize.will_not_destroy", name: env[:machine].name))
11
+ @app.call(env)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,28 @@
1
+ require "log4r"
2
+
3
+ module VagrantPlugins
4
+ module Vrealize
5
+ module Action
6
+ # This action reads the SSH info for the machine and puts it into the
7
+ # `:machine_ssh_info` key in the environment.
8
+ class ReadSSHInfo
9
+ def initialize(app, env)
10
+ @app = app
11
+ @logger = Log4r::Logger.new("vagrant_vrealize::action::read_ssh_info")
12
+ end
13
+
14
+ def call(env)
15
+ env[:machine_ssh_info] = read_ssh_info(env[:vra], env[:machine])
16
+
17
+ @app.call(env)
18
+ end
19
+
20
+ def read_ssh_info(vra, machine)
21
+ if machine.id
22
+ vra.ssh_info(machine.id)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ require "log4r"
2
+
3
+ module VagrantPlugins
4
+ module Vrealize
5
+ module Action
6
+ # This action reads the state of the machine and puts it in the
7
+ # `:machine_state_id` key in the environment.
8
+ class ReadState
9
+ def initialize(app, env)
10
+ @app = app
11
+ @logger = Log4r::Logger.new("vagrant_vrealize::action::read_state")
12
+ end
13
+
14
+ def call(env)
15
+ env[:machine_state_id] = read_state(env[:vra],env[:machine])
16
+ end
17
+
18
+ def read_state(vra, machine)
19
+ return :not_created if machine.id.nil?
20
+
21
+ resource = vra.resources.by_id(machine.id)
22
+
23
+ return resource.status.to_sym
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,111 @@
1
+ require "log4r"
2
+ require 'json'
3
+
4
+ require 'vagrant/util/retryable'
5
+
6
+ require 'vagrant-vrealize/util/timer'
7
+
8
+ module VagrantPlugins
9
+ module Vrealize
10
+ module Action
11
+ # This runs the configured instance.
12
+ class RunInstance
13
+ include Vagrant::Util::Retryable
14
+
15
+ def initialize(app, env)
16
+ @app = app
17
+ @logger = Log4r::Logger.new("vagrant_vrealize::action::run_instance")
18
+ end
19
+
20
+ # There are more literal types than this, but we don't support them yet
21
+
22
+ def create_resource(env)
23
+ env[:ui].info("Creating machine")
24
+
25
+ config = env[:machine].provider_config
26
+ vra = env[:vra]
27
+
28
+ EntitledItemsCollection.fetch(env[:vra])
29
+ .find_by_id(config.catalog_item_id)
30
+ .request(cpus: config.cpus,
31
+ memory: config.memory,
32
+ requested_for: config.requested_for,
33
+ subtenant_id: config.subtenant_id,
34
+ lease_days: config.lease_days) { |req|
35
+ config.extra_entries.types.each do |type|
36
+ config.extra_entries.of_type(type).each do |k,v|
37
+ req.set_parameter(k, type, v)
38
+ end
39
+ end
40
+ }
41
+ .join
42
+ .machine
43
+ end
44
+
45
+ def wait_for_ssh(env)
46
+ if !env[:interrupted]
47
+ env[:metrics]["instance_ssh_time"] = Util::Timer.time do
48
+ # Wait for SSH to be ready.
49
+ env[:ui].info(I18n.t("vagrant_vrealize.waiting_for_ssh"))
50
+ network_ready_retries = 0
51
+ network_ready_retries_max = 10
52
+ loop do
53
+ # If we're interrupted then just back out
54
+ break if env[:interrupted]
55
+ begin
56
+ break if env[:machine].communicate.ready?
57
+ rescue => e
58
+ if network_ready_retries < network_ready_retries_max then
59
+ network_ready_retries += 1
60
+ @logger.warn(I18n.t("vagrant_vrealize.waiting_for_ssh, retrying"))
61
+ else
62
+ raise e
63
+ end
64
+ end
65
+ sleep 2
66
+ end
67
+ end
68
+ end
69
+ end
70
+
71
+ def save_ip_address(env, resource)
72
+ env[:machine].data_dir.join('elastic_ip').open("w+") do |f|
73
+ f.write({:public_ip => resource.ip_addresses.first}.to_json)
74
+ end
75
+ end
76
+
77
+ def call(env)
78
+ vra = env[:vra] or fail "No VRA client instance!"
79
+
80
+ # Initialize metrics if they haven't been
81
+ env[:metrics] ||= {}
82
+
83
+ created_resource = create_resource(env)
84
+ env[:machine].id = created_resource.id
85
+ save_ip_address(env, created_resource)
86
+ wait_for_ssh(env)
87
+ terminate(env) if env[:interrupted]
88
+
89
+ @app.call(env)
90
+ end
91
+
92
+ def recover(env)
93
+ return if env["vagrant.error"].is_a?(Vagrant::Errors::VagrantError)
94
+
95
+ if env[:machine].provider.state.id != :not_created
96
+ # Undo the import
97
+ terminate(env)
98
+ end
99
+ end
100
+
101
+ def terminate(env)
102
+ destroy_env = env.dup
103
+ destroy_env.delete(:interrupted)
104
+ destroy_env[:config_validate] = false
105
+ destroy_env[:force_confirm_destroy] = true
106
+ env[:action_runner].run(Action.action_destroy, destroy_env)
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,25 @@
1
+ require "log4r"
2
+
3
+ require 'vagrant/util/retryable'
4
+
5
+ require 'vagrant-vrealize/util/timer'
6
+
7
+ module VagrantPlugins
8
+ module Vrealize
9
+ module Action
10
+ # This starts a stopped instance.
11
+ class StartInstance
12
+ include Vagrant::Util::Retryable
13
+
14
+ def initialize(app, env)
15
+ @app = app
16
+ @logger = Log4r::Logger.new("vagrant_vrealize::action::start_instance")
17
+ end
18
+
19
+ def call(env)
20
+ fail NotImplementedError
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,19 @@
1
+ require "log4r"
2
+
3
+ module VagrantPlugins
4
+ module Vrealize
5
+ module Action
6
+ # This stops the running instance.
7
+ class StopInstance
8
+ def initialize(app, env)
9
+ @app = app
10
+ @logger = Log4r::Logger.new("vagrant_vrealize::action::stop_instance")
11
+ end
12
+
13
+ def call(env)
14
+ fail NotImplementedError
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end