vagrant-actionio 0.0.9
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.
- data/.env-example +4 -0
- data/.gitignore +17 -0
- data/.rspec +1 -0
- data/Gemfile +7 -0
- data/LICENSE +10 -0
- data/README.md +110 -0
- data/Rakefile +21 -0
- data/a.rb +1 -0
- data/actionio-dummy.box +0 -0
- data/data/cacert.pem +3895 -0
- data/example_box/README.md +13 -0
- data/example_box/metadata.json +3 -0
- data/lib/vagrant-actionio.rb +18 -0
- data/lib/vagrant-actionio/action.rb +152 -0
- data/lib/vagrant-actionio/action/connect_actionio.rb +31 -0
- data/lib/vagrant-actionio/action/is_created.rb +18 -0
- data/lib/vagrant-actionio/action/is_running.rb +18 -0
- data/lib/vagrant-actionio/action/is_stopped.rb +18 -0
- data/lib/vagrant-actionio/action/is_terminated.rb +18 -0
- data/lib/vagrant-actionio/action/message_already_created.rb +16 -0
- data/lib/vagrant-actionio/action/message_already_terminated.rb +16 -0
- data/lib/vagrant-actionio/action/message_cannot_terminate.rb +16 -0
- data/lib/vagrant-actionio/action/message_not_created.rb +16 -0
- data/lib/vagrant-actionio/action/message_not_running.rb +16 -0
- data/lib/vagrant-actionio/action/message_provisioning_not_yet_supported.rb +16 -0
- data/lib/vagrant-actionio/action/read_ssh_info.rb +53 -0
- data/lib/vagrant-actionio/action/read_state.rb +36 -0
- data/lib/vagrant-actionio/action/remove_machine_id.rb +19 -0
- data/lib/vagrant-actionio/action/run_instance.rb +94 -0
- data/lib/vagrant-actionio/action/start_instance.rb +56 -0
- data/lib/vagrant-actionio/action/stop_instance.rb +56 -0
- data/lib/vagrant-actionio/action/sync_folders.rb +57 -0
- data/lib/vagrant-actionio/action/terminate_instance.rb +57 -0
- data/lib/vagrant-actionio/action/timed_provision.rb +21 -0
- data/lib/vagrant-actionio/action/warn_networks.rb +19 -0
- data/lib/vagrant-actionio/config.rb +75 -0
- data/lib/vagrant-actionio/connection.rb +70 -0
- data/lib/vagrant-actionio/errors.rb +35 -0
- data/lib/vagrant-actionio/plugin.rb +73 -0
- data/lib/vagrant-actionio/provider.rb +50 -0
- data/lib/vagrant-actionio/util/env.rb +12 -0
- data/lib/vagrant-actionio/util/timer.rb +17 -0
- data/lib/vagrant-actionio/version.rb +5 -0
- data/locales/en.yml +121 -0
- data/spec/vagrant-actionio/action/read_ssh_info_spec.rb +58 -0
- data/spec/vagrant-actionio/action/read_state_spec.rb +46 -0
- data/spec/vagrant-actionio/action/run_instance_spec.rb +24 -0
- data/spec/vagrant-actionio/action/start_instance_spec.rb +21 -0
- data/spec/vagrant-actionio/action/stop_instance_spec.rb +21 -0
- data/spec/vagrant-actionio/action/terminate_instance_spec.rb +21 -0
- data/spec/vagrant-actionio/config_spec.rb +47 -0
- data/spec/vagrant-actionio/connection_spec.rb +105 -0
- data/vagrant-actionio.gemspec +59 -0
- metadata +2882 -0
@@ -0,0 +1,13 @@
|
|
1
|
+
# Vagrant Action.IO 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 `actionio` provider.
|
5
|
+
To turn this into a `.box` file:
|
6
|
+
|
7
|
+
```
|
8
|
+
$ tar cvzf actionio.box ./metadata.json ./Vagrantfile
|
9
|
+
```
|
10
|
+
|
11
|
+
This box works by using Vagrant's built-in Vagrantfile merging to setup
|
12
|
+
defaults for Action.IO These defaults can easily be overwritten by
|
13
|
+
higher-level Vagrantfiles (such as project root Vagrantfiles).
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
require 'vagrant-actionio/plugin'
|
4
|
+
|
5
|
+
module VagrantPlugins
|
6
|
+
module ActionIO
|
7
|
+
lib_path = Pathname.new(File.expand_path('../vagrant-actionio', __FILE__))
|
8
|
+
autoload :Action, lib_path.join('action')
|
9
|
+
autoload :Errors, lib_path.join('errors')
|
10
|
+
|
11
|
+
# This returns the path to the source of this plugin.
|
12
|
+
#
|
13
|
+
# @return [Pathname]
|
14
|
+
def self.source_root
|
15
|
+
@source_root ||= Pathname.new(File.expand_path('../../', __FILE__))
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,152 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
require 'vagrant/action/builder'
|
4
|
+
|
5
|
+
module VagrantPlugins
|
6
|
+
module ActionIO
|
7
|
+
module Action
|
8
|
+
# Include the built-in modules so we can use them as top-level things.
|
9
|
+
include Vagrant::Action::Builtin
|
10
|
+
|
11
|
+
# This action is called to terminate the remote machine.
|
12
|
+
def self.action_destroy
|
13
|
+
Vagrant::Action::Builder.new.tap do |b|
|
14
|
+
b.use ConfigValidate
|
15
|
+
b.use ConnectActionIO
|
16
|
+
b.use Call, IsTerminated do |env, b2|
|
17
|
+
if env[:result]
|
18
|
+
b2.use MessageAlreadyTerminated
|
19
|
+
b2.use RemoveMachineId
|
20
|
+
next
|
21
|
+
end
|
22
|
+
|
23
|
+
b2.use Call, IsRunning do |env, b3|
|
24
|
+
if env[:result]
|
25
|
+
b3.use StopInstance
|
26
|
+
end
|
27
|
+
|
28
|
+
b3.use Call, IsStopped do |env, b4|
|
29
|
+
if !env[:result]
|
30
|
+
b4.use MessageCannotTerminate
|
31
|
+
next
|
32
|
+
end
|
33
|
+
b4.use TerminateInstance
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# This action is called when `vagrant provision` is called.
|
41
|
+
def self.action_provision
|
42
|
+
Vagrant::Action::Builder.new.tap do |b|
|
43
|
+
b.use MessageProvisioningNotYetSupported
|
44
|
+
#b.use ConfigValidate
|
45
|
+
#b.use Call, IsCreated do |env, b2|
|
46
|
+
#if !env[:result]
|
47
|
+
#b2.use MessageNotCreated
|
48
|
+
#next
|
49
|
+
#end
|
50
|
+
|
51
|
+
#b2.use Provision
|
52
|
+
#b2.use SyncFolders
|
53
|
+
#end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# This action is called to read the SSH info of the machine. The
|
58
|
+
# resulting state is expected to be put into the `:machine_ssh_info`
|
59
|
+
# key.
|
60
|
+
def self.action_read_ssh_info
|
61
|
+
Vagrant::Action::Builder.new.tap do |b|
|
62
|
+
b.use ConfigValidate
|
63
|
+
b.use ConnectActionIO
|
64
|
+
b.use ReadSSHInfo
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# This action is called to read the state of the machine. The
|
69
|
+
# resulting state is expected to be put into the `:machine_state_id`
|
70
|
+
# key.
|
71
|
+
def self.action_read_state
|
72
|
+
Vagrant::Action::Builder.new.tap do |b|
|
73
|
+
b.use ConfigValidate
|
74
|
+
b.use ConnectActionIO
|
75
|
+
b.use ReadState
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
# This action is called to SSH into the machine.
|
80
|
+
def self.action_ssh
|
81
|
+
Vagrant::Action::Builder.new.tap do |b|
|
82
|
+
b.use ConfigValidate
|
83
|
+
b.use Call, IsCreated do |env, b2|
|
84
|
+
if !env[:result]
|
85
|
+
b2.use MessageNotCreated
|
86
|
+
next
|
87
|
+
end
|
88
|
+
|
89
|
+
b2.use Call, IsRunning do |env, b3|
|
90
|
+
if !env[:result]
|
91
|
+
b3.use MessageNotRunning
|
92
|
+
next
|
93
|
+
end
|
94
|
+
|
95
|
+
b3.use SSHExec
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
# This action is called to bring the box up from nothing.
|
102
|
+
def self.action_up
|
103
|
+
Vagrant::Action::Builder.new.tap do |b|
|
104
|
+
b.use ConfigValidate
|
105
|
+
b.use ConnectActionIO
|
106
|
+
|
107
|
+
b.use Call, IsCreated do |env, b2|
|
108
|
+
if env[:result]
|
109
|
+
b2.use MessageAlreadyCreated
|
110
|
+
b2.use Call, IsStopped do |env, b3|
|
111
|
+
if env[:result]
|
112
|
+
b3.use StartInstance
|
113
|
+
end
|
114
|
+
end
|
115
|
+
next
|
116
|
+
end
|
117
|
+
|
118
|
+
#b2.use TimedProvision
|
119
|
+
b2.use SyncFolders
|
120
|
+
b2.use WarnNetworks
|
121
|
+
b2.use RunInstance
|
122
|
+
b2.use MessageProvisioningNotYetSupported
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
# The autoload farm
|
128
|
+
action_root = Pathname.new(File.expand_path('../action', __FILE__))
|
129
|
+
autoload :ConnectActionIO, action_root.join('connect_actionio')
|
130
|
+
autoload :IsCreated, action_root.join('is_created')
|
131
|
+
autoload :IsRunning, action_root.join('is_running')
|
132
|
+
autoload :IsStopped, action_root.join('is_stopped')
|
133
|
+
autoload :IsTerminated, action_root.join('is_terminated')
|
134
|
+
autoload :MessageAlreadyCreated, action_root.join('message_already_created')
|
135
|
+
autoload :MessageAlreadyTerminated, action_root.join('message_already_terminated')
|
136
|
+
autoload :MessageCannotTerminate, action_root.join('message_cannot_terminate')
|
137
|
+
autoload :MessageNotCreated, action_root.join('message_not_created')
|
138
|
+
autoload :MessageNotRunning, action_root.join('message_not_running')
|
139
|
+
autoload :MessageProvisioningNotYetSupported, action_root.join('message_provisioning_not_yet_supported')
|
140
|
+
autoload :ReadSSHInfo, action_root.join('read_ssh_info')
|
141
|
+
autoload :ReadState, action_root.join('read_state')
|
142
|
+
autoload :RunInstance, action_root.join('run_instance')
|
143
|
+
autoload :RemoveMachineId, action_root.join('remove_machine_id')
|
144
|
+
autoload :StartInstance, action_root.join('start_instance')
|
145
|
+
autoload :StopInstance, action_root.join('stop_instance')
|
146
|
+
autoload :SyncFolders, action_root.join('sync_folders')
|
147
|
+
autoload :TerminateInstance, action_root.join("terminate_instance")
|
148
|
+
autoload :TimedProvision, action_root.join('timed_provision')
|
149
|
+
autoload :WarnNetworks, action_root.join('warn_networks')
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'log4r'
|
2
|
+
require 'vagrant-actionio/connection'
|
3
|
+
require 'vagrant-actionio/errors'
|
4
|
+
|
5
|
+
module VagrantPlugins
|
6
|
+
module ActionIO
|
7
|
+
module Action
|
8
|
+
# This action connects to ActionIO, verifies credentials work, and
|
9
|
+
# puts the ActionIO connection object into the `:actionio` key
|
10
|
+
# in the environment.
|
11
|
+
class ConnectActionIO
|
12
|
+
|
13
|
+
def initialize(app, env)
|
14
|
+
@app = app
|
15
|
+
@logger = Log4r::Logger.new('vagrant_actionio::action::connect_actionio')
|
16
|
+
end
|
17
|
+
|
18
|
+
def call(env)
|
19
|
+
connection = Connection.new(env[:machine].provider_config.access_token)
|
20
|
+
|
21
|
+
@logger.info('Verifying Access Token...')
|
22
|
+
connection.verify_access_token
|
23
|
+
|
24
|
+
env[:actionio] = connection
|
25
|
+
|
26
|
+
@app.call(env)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module ActionIO
|
3
|
+
module Action
|
4
|
+
# This can be used with "Call" built-in to check if the machine
|
5
|
+
# is created and branch in the middleware.
|
6
|
+
class IsCreated
|
7
|
+
def initialize(app, env)
|
8
|
+
@app = app
|
9
|
+
end
|
10
|
+
|
11
|
+
def call(env)
|
12
|
+
env[:result] = env[:machine].state.id != :not_created
|
13
|
+
@app.call(env)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module ActionIO
|
3
|
+
module Action
|
4
|
+
# This can be used with "Call" built-in to check if the machine
|
5
|
+
# is running and branch in the middleware.
|
6
|
+
class IsRunning
|
7
|
+
def initialize(app, env)
|
8
|
+
@app = app
|
9
|
+
end
|
10
|
+
|
11
|
+
def call(env)
|
12
|
+
env[:result] = env[:machine].state.id == :running
|
13
|
+
@app.call(env)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module ActionIO
|
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
|
+
module VagrantPlugins
|
2
|
+
module ActionIO
|
3
|
+
module Action
|
4
|
+
# This can be used with "Call" built-in to check if the machine
|
5
|
+
# is terminated and branch in the middleware.
|
6
|
+
class IsTerminated
|
7
|
+
def initialize(app, env)
|
8
|
+
@app = app
|
9
|
+
end
|
10
|
+
|
11
|
+
def call(env)
|
12
|
+
env[:result] = [:terminated, :terminating].include?(env[:machine].state.id)
|
13
|
+
@app.call(env)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module ActionIO
|
3
|
+
module Action
|
4
|
+
class MessageAlreadyCreated
|
5
|
+
def initialize(app, env)
|
6
|
+
@app = app
|
7
|
+
end
|
8
|
+
|
9
|
+
def call(env)
|
10
|
+
env[:ui].info(I18n.t('vagrant_actionio.already_created'))
|
11
|
+
@app.call(env)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module ActionIO
|
3
|
+
module Action
|
4
|
+
class MessageAlreadyTerminated
|
5
|
+
def initialize(app, env)
|
6
|
+
@app = app
|
7
|
+
end
|
8
|
+
|
9
|
+
def call(env)
|
10
|
+
env[:ui].info(I18n.t('vagrant_actionio.already_terminated'))
|
11
|
+
@app.call(env)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module ActionIO
|
3
|
+
module Action
|
4
|
+
class MessageCannotTerminate
|
5
|
+
def initialize(app, env)
|
6
|
+
@app = app
|
7
|
+
end
|
8
|
+
|
9
|
+
def call(env)
|
10
|
+
env[:ui].info(I18n.t('vagrant_actionio.cannot_terminate'))
|
11
|
+
@app.call(env)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module ActionIO
|
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_actionio.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 ActionIO
|
3
|
+
module Action
|
4
|
+
class MessageNotRunning
|
5
|
+
def initialize(app, env)
|
6
|
+
@app = app
|
7
|
+
end
|
8
|
+
|
9
|
+
def call(env)
|
10
|
+
env[:ui].info(I18n.t('vagrant_actionio.not_running'))
|
11
|
+
@app.call(env)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module ActionIO
|
3
|
+
module Action
|
4
|
+
class MessageProvisioningNotYetSupported
|
5
|
+
def initialize(app, env)
|
6
|
+
@app = app
|
7
|
+
end
|
8
|
+
|
9
|
+
def call(env)
|
10
|
+
env[:ui].info(I18n.t('vagrant_actionio.provisioning_not_yet_supported'))
|
11
|
+
@app.call(env)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require "log4r"
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module ActionIO
|
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_actionio::action::read_ssh_info")
|
12
|
+
end
|
13
|
+
|
14
|
+
def call(env)
|
15
|
+
env[:machine_ssh_info] = read_ssh_info(env[:actionio], env[:machine])
|
16
|
+
|
17
|
+
@app.call(env)
|
18
|
+
end
|
19
|
+
|
20
|
+
def read_ssh_info(actionio, machine)
|
21
|
+
return nil if machine.id.nil?
|
22
|
+
|
23
|
+
# Find the box
|
24
|
+
begin
|
25
|
+
response = actionio.request(:get, "/boxes/#{machine.id}")
|
26
|
+
rescue => e
|
27
|
+
if e.respond_to?(:response) && e.response.status == 404
|
28
|
+
# The machine can't be found
|
29
|
+
@logger.info("Box not found on Action.IO, assuming it got destroyed.")
|
30
|
+
machine.id = nil
|
31
|
+
return nil
|
32
|
+
else
|
33
|
+
raise e
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
box_info = response.parsed['box']
|
38
|
+
|
39
|
+
# Get the configuration
|
40
|
+
config = machine.provider_config
|
41
|
+
|
42
|
+
# Read the info
|
43
|
+
return {
|
44
|
+
host: box_info['host'],
|
45
|
+
port: box_info['port'].to_s,
|
46
|
+
private_key_path: config.ssh_private_key_path,
|
47
|
+
username: 'action'
|
48
|
+
}
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|