vagrant-niftycloud 0.1.0.dev
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +18 -0
- data/CHANGELOG.md +1 -0
- data/Gemfile +10 -0
- data/LICENSE +8 -0
- data/README.md +256 -0
- data/Rakefile +21 -0
- data/dummy.box +0 -0
- data/example_box/README.md +13 -0
- data/example_box/metadata.json +3 -0
- data/lib/vagrant-niftycloud.rb +18 -0
- data/lib/vagrant-niftycloud/action.rb +178 -0
- data/lib/vagrant-niftycloud/action/connect_niftycloud.rb +56 -0
- data/lib/vagrant-niftycloud/action/is_created.rb +18 -0
- data/lib/vagrant-niftycloud/action/message_already_created.rb +16 -0
- data/lib/vagrant-niftycloud/action/message_not_created.rb +16 -0
- data/lib/vagrant-niftycloud/action/message_will_not_destroy.rb +16 -0
- data/lib/vagrant-niftycloud/action/read_ssh_info.rb +52 -0
- data/lib/vagrant-niftycloud/action/read_state.rb +56 -0
- data/lib/vagrant-niftycloud/action/resume_instance.rb +56 -0
- data/lib/vagrant-niftycloud/action/run_instance.rb +131 -0
- data/lib/vagrant-niftycloud/action/suspend_instance.rb +56 -0
- data/lib/vagrant-niftycloud/action/sync_folders.rb +67 -0
- data/lib/vagrant-niftycloud/action/terminate_instance.rb +61 -0
- data/lib/vagrant-niftycloud/action/timed_provision.rb +21 -0
- data/lib/vagrant-niftycloud/config.rb +210 -0
- data/lib/vagrant-niftycloud/errors.rb +35 -0
- data/lib/vagrant-niftycloud/plugin.rb +73 -0
- data/lib/vagrant-niftycloud/provider.rb +50 -0
- data/lib/vagrant-niftycloud/util/timer.rb +17 -0
- data/lib/vagrant-niftycloud/version.rb +5 -0
- data/locales/en.yml +91 -0
- data/spec/vagrant-niftycloud/config_spec.rb +154 -0
- data/vagrant-niftycloud.gemspec +57 -0
- metadata +157 -0
data/.gitignore
ADDED
data/CHANGELOG.md
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
* Initial release.
|
data/Gemfile
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
gemspec
|
4
|
+
|
5
|
+
group :development do
|
6
|
+
# We depend on Vagrant for development, but we don't add it as a
|
7
|
+
# gem dependency because we expect to be installed within the
|
8
|
+
# Vagrant environment itself using `vagrant plugin`.
|
9
|
+
#gem "vagrant", :git => "git://github.com/mitchellh/vagrant.git"
|
10
|
+
end
|
data/LICENSE
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
Copyright (c) 2013 Satoshi Akama
|
3
|
+
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
5
|
+
|
6
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
7
|
+
|
8
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,256 @@
|
|
1
|
+
# Vagrant NiftyCloud Provider
|
2
|
+
|
3
|
+
`開発中!まだ動作しません!!`
|
4
|
+
|
5
|
+
[Vagrant](http://www.vagrantup.com) 1.2以降のバージョンで[ニフティクラウド](http://cloud.nifty.com/)
|
6
|
+
を操作するためのprovider機能を追加するプラグインです。
|
7
|
+
|
8
|
+
Vagrantでニフティクラウド上のサーバインスタンスの制御や[Chef](http://www.opscode.com/chef/)や[Puppet](https://puppetlabs.com/) 等を使ったサーバのprovisioningが可能となります。
|
9
|
+
|
10
|
+
Chef以外の動作確認は行なっていませんが、プラグインで行なっているのはSSH実行可能な状態にすることとrsyncによるファイル転送だけなので、Vagrantでサポートされているものであれば動作するのではないかと思います。
|
11
|
+
|
12
|
+
**注意:** このプラグインはVagrant 1.2以降に対応しています。
|
13
|
+
|
14
|
+
## 機能
|
15
|
+
|
16
|
+
* ニフティクラウド上のサーバインスタンスの起動
|
17
|
+
* Vagrantから起動したインスタンスへのSSH
|
18
|
+
* Chef/Puppet等を使用したインスタンスのprovisioning
|
19
|
+
* `rsync`を使用したcookbook等の転送
|
20
|
+
|
21
|
+
## Quick Start
|
22
|
+
|
23
|
+
### プラグインのインストール
|
24
|
+
|
25
|
+
まずVagrant 1.2以降をインストールして下さい。
|
26
|
+
|
27
|
+
vagrant upを実行する前に通常のVagrant使用時と同じようにboxファイルをVagrantに追加する必要があります。
|
28
|
+
|
29
|
+
自分でboxファイルを作成するかこちらで用意しているboxファイルを使用して、任意の名前でダミーのboxを追加して下さい。
|
30
|
+
|
31
|
+
```
|
32
|
+
$ git clone https://github.com/sakama/vagrant-niftycloud.git
|
33
|
+
$ cd vagrant-niftycloud
|
34
|
+
$ bundle install
|
35
|
+
$ bundle exec rake build
|
36
|
+
$ vagrant plugin install pkg/vagrant-niftycloud-0.1.0.dev.gem
|
37
|
+
$ vagrant box add dummy https://github.com/sakama/vagrant-niftycloud/raw/master/dummy.box
|
38
|
+
...
|
39
|
+
```
|
40
|
+
|
41
|
+
### OSイメージの作成
|
42
|
+
|
43
|
+
Vagrant自体の仕様により、以下の制約があります。
|
44
|
+
|
45
|
+
* サーバに接続するvagrantユーザがパスワードなしでsudo実行できる必要がある (rootユーザではprovisioning実行に失敗します)
|
46
|
+
* sudoがttyなしで実行できる必要がある
|
47
|
+
* サーバに接続する際のSSH秘密鍵はパスフレーズが空で設定されている必要がある(rsyncでのファイル同期に失敗します)
|
48
|
+
|
49
|
+
以上の理由により、`ニフティクラウド公式のOSイメージでは動作しません`
|
50
|
+
|
51
|
+
上記条件をクリアしたサーバイメージをプライベートイメージ等で用意する必要があります。
|
52
|
+
|
53
|
+
OSイメージ作成の手順は以下のようになります。
|
54
|
+
|
55
|
+
```
|
56
|
+
## rootで実行
|
57
|
+
# groupadd vagrant
|
58
|
+
# useradd vagrant -g vagrant -G wheel
|
59
|
+
# passwd vagrant
|
60
|
+
|
61
|
+
# su - vagrant
|
62
|
+
## vagrantユーザで実行
|
63
|
+
$ ssh-keygen -t rsa
|
64
|
+
$ mv id_rsa.pub authorized_keys(id_rsaをローカルに保存する=接続する際のSSH秘密鍵となる)
|
65
|
+
|
66
|
+
## rootで実行
|
67
|
+
# visudo
|
68
|
+
# Defaults specificationをコメントアウト
|
69
|
+
# 最終行に以下を追加
|
70
|
+
# vagrant ALL=(ALL) NOPASSWD: ALL
|
71
|
+
```
|
72
|
+
|
73
|
+
作成したイメージのimage_idをVagrantfile内で指定する必要があります。
|
74
|
+
|
75
|
+
image_idについては[ニフティクラウドSDK for Ruby](http://cloud.nifty.com/api/sdk/#ruby)や[ニフティクラウド CLI](http://cloud.nifty.com/api/cli/) 等を使うと確認可能です。
|
76
|
+
|
77
|
+
### Vagrantfileの作成
|
78
|
+
|
79
|
+
Vagrantfileを以下のような内容で作成します。
|
80
|
+
|
81
|
+
Vagrantfileの`config.vm.provider`ブロックで各種パラメータを指定して下さい。
|
82
|
+
|
83
|
+
```
|
84
|
+
Vagrant.configure("2") do |config|
|
85
|
+
config.vm.box = "dummy"
|
86
|
+
|
87
|
+
config.vm.provider :niftycloud do |niftycloud, override|
|
88
|
+
niftycloud.access_key_id = ENV["NIFTY_CLOUD_ACCESS_KEY"] || "<Your Access Key ID>"
|
89
|
+
niftycloud.secret_access_key = ENV["NIFTY_CLOUD_SECRET_KEY"] || "<Your Secret Access Key>"
|
90
|
+
|
91
|
+
niftycloud.image_id = "26"
|
92
|
+
niftycloud.key_name = "<YOUR SSH KEY NAME>"
|
93
|
+
override.ssh.username = "vagrant"
|
94
|
+
override.ssh.private_key_path = "PATH TO YOUR PRIVATE KEY"
|
95
|
+
end
|
96
|
+
end
|
97
|
+
```
|
98
|
+
|
99
|
+
以上の手順で`vagrant up`コマンドのproviderオプションに`niftycloud`を指定できるようになります。
|
100
|
+
|
101
|
+
### コマンド
|
102
|
+
|
103
|
+
```
|
104
|
+
|
105
|
+
# サーバ立ちあげ、provisioningの実行
|
106
|
+
$ vagrant up --provider=niftycloud
|
107
|
+
|
108
|
+
# 立ち上げたサーバへのprovisioningの実行
|
109
|
+
$ vagrant provision
|
110
|
+
|
111
|
+
# サーバの一時停止
|
112
|
+
$ vagrant halt
|
113
|
+
|
114
|
+
# サーバの一時停止(haltと同じ)
|
115
|
+
$ vagrant suspend
|
116
|
+
|
117
|
+
# 停止中のサーバの起動
|
118
|
+
$ vagrant resume
|
119
|
+
|
120
|
+
# サーバの破棄
|
121
|
+
$ vagrant destroy
|
122
|
+
|
123
|
+
```
|
124
|
+
|
125
|
+
|
126
|
+
SSH接続やcookbook等を使ったサーバのprovisioningに失敗する場合、以下のような理由が考えられます。
|
127
|
+
|
128
|
+
* SSHオプションが正しくない
|
129
|
+
* SSHオプションに正しい秘密鍵が指定されていない
|
130
|
+
* SSH秘密鍵のパーミッションが正しくない
|
131
|
+
* vagrantユーザによるパスワード無しでのsudo実行が不可となっている
|
132
|
+
* sudoがttyなしで実行不可となっている
|
133
|
+
* ニフティクラウドのFirewallルールによりSSH接続が遮断されている
|
134
|
+
|
135
|
+
共通設定についてはboxファイル中に含めることもできます。
|
136
|
+
|
137
|
+
こちらで用意している"dummy"boxファイルにはデフォルトオプションは指定されていません。
|
138
|
+
|
139
|
+
|
140
|
+
## Box Format
|
141
|
+
|
142
|
+
自分でboxファイルを作成したい場合[examble_box](https://github.com/sakama/vagrant-niftycloud/tree/master/example_box)を参考にして下さい。
|
143
|
+
|
144
|
+
こちらのディレクトリにはboxの作成方法についてのドキュメントも置いてあります。
|
145
|
+
|
146
|
+
boxフォーマットには`metadata.json`が必要です。
|
147
|
+
|
148
|
+
このjsonファイル中に指定された値は`Vagrantfile` と同様に、providerとしてniftycloudを指定した場合のデフォルト値として扱われます。
|
149
|
+
|
150
|
+
|
151
|
+
## 設定
|
152
|
+
|
153
|
+
以下の様なパラメータに対応しています。
|
154
|
+
|
155
|
+
|
156
|
+
* `access_key_id` - ニフティクラウドのAccessKey。[コントロールパネルから取得した値](http://cloud.nifty.com/help/status/api_key.htm)を指定して下さい。
|
157
|
+
* `image_id` - サーバ立ち上げ時に指定するimage_id。ニフティクラウド公式のOSイメージでは動作しません。
|
158
|
+
* `key_name` - サーバ接続時に使用するSSHキー名。[コントロールパネルで設定した値](http://cloud.nifty.com/help/netsec/ssh_key.htm)を指定して下さい。
|
159
|
+
* `zone` - ニフティクラウドのゾーン。例)"east-12"
|
160
|
+
* `instance_ready_timeout` - インスタンス起動実行からタイムアウトとなるまでの秒数。デフォルトは300秒です。
|
161
|
+
* `instance_type` - サーバタイプ。例)"small2"。指定がない場合のデフォルト値は"mini"です。
|
162
|
+
* `secret_access_key` - ニフティクラウドAPI経由でアクセスするためのSecretAccessKey。[コントロールパネルから取得した値](http://cloud.nifty.com/help/status/api_key.htm)を指定して下さい。
|
163
|
+
* `firewall` - Firewall名。
|
164
|
+
|
165
|
+
上記のパラメータはVagrantfile中で以下のように設定することができます。
|
166
|
+
|
167
|
+
|
168
|
+
```
|
169
|
+
Vagrant.configure("2") do |config|
|
170
|
+
# ... other stuff
|
171
|
+
|
172
|
+
config.vm.provider :niftycloud do |niftycloud, override|
|
173
|
+
niftycloud.access_key_id = ENV["NIFTY_CLOUD_ACCESS_KEY"] || "foo"
|
174
|
+
niftycloud.secret_access_key = ENV["NIFTY_CLOUD_SECRET_KEY"] || "bar"
|
175
|
+
end
|
176
|
+
end
|
177
|
+
```
|
178
|
+
|
179
|
+
トップレベルの設定に加えて、リージョン/ゾーン特有の設定値を使用したい場合にはVagrantfile中で`zone_config`を使用することもできます。
|
180
|
+
|
181
|
+
記述は以下のようになります。
|
182
|
+
|
183
|
+
|
184
|
+
```
|
185
|
+
Vagrant.configure("2") do |config|
|
186
|
+
# ... other stuff
|
187
|
+
|
188
|
+
config.vm.provider :niftycloud do |niftycloud, override|
|
189
|
+
niftycloud.access_key_id = "foo"
|
190
|
+
niftycloud.secret_access_key = "bar"
|
191
|
+
niftycloud.zone = "east-12"
|
192
|
+
niftycloud.key_name = "vagrantkey"
|
193
|
+
niftycloud.firewall = "test"
|
194
|
+
override.ssh.username = "vagrant"
|
195
|
+
override.ssh.private_key_path = "/path/to/private_key.pem"
|
196
|
+
|
197
|
+
# シンプルな書き方
|
198
|
+
niftycloud.zone_config "east-12", :image_id => 26
|
199
|
+
|
200
|
+
# より多くの設定を上書きしたい場合
|
201
|
+
niftycloud.zone_config "east-13" do |zone|
|
202
|
+
zone.image_id = 21
|
203
|
+
zone.instance_type = small
|
204
|
+
zone.key_name = "vagrantkey2"
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
208
|
+
```
|
209
|
+
|
210
|
+
zone_configブロックでリージョン/ゾーン特有の設定を指定した場合、そのリージョン/ゾーンでサーバインスタンスを立ち上げる際にはトップレベルの設定値を上書きします。
|
211
|
+
|
212
|
+
指定していない設定項目についてはトップレベルの設定値を継承します。
|
213
|
+
|
214
|
+
|
215
|
+
## VagrantのNetwork機能への対応
|
216
|
+
|
217
|
+
|
218
|
+
Vagrantの`config.vm.network`で設定可能なネットワーク機能については、`vagrant-niftycloud`ではサポートしていません。
|
219
|
+
|
220
|
+
## フォルダの同期
|
221
|
+
|
222
|
+
フォルダの同期についてはshell、chef、puppetといったVagrantのprovisionersを動作させるための最低限のサポートとなります。
|
223
|
+
|
224
|
+
`vagrant up`、`vagrant reload`、`vagrant provision`コマンドが実行された場合、
|
225
|
+
このプラグインは`rsync`を使用しSSH経由でローカル→リモートサーバへの単方向同期を行います。
|
226
|
+
|
227
|
+
|
228
|
+
## 開発
|
229
|
+
|
230
|
+
`vagrant-niftycloud`プラグインをこのレポジトリからgit cloneした後、[Bundler](http://gembundler.com) を使用して必要なgem等のインストールを行なって下さい。
|
231
|
+
|
232
|
+
```
|
233
|
+
$ bundle
|
234
|
+
```
|
235
|
+
|
236
|
+
上記コマンド実行後、以下のコマンドにより`rake`を使用したユニットテストを実行することができます。
|
237
|
+
|
238
|
+
```
|
239
|
+
$ bundle exec rake
|
240
|
+
```
|
241
|
+
|
242
|
+
ユニットテストが通った場合、プラグインを動作させる準備が整います。
|
243
|
+
|
244
|
+
プラグインをVagrant実行環境にインストールしなくても以下の操作で実行することが可能です。
|
245
|
+
|
246
|
+
* トップレベルディレクトリに`Vagrantfile` を作成する(gitignoreしています)
|
247
|
+
* bundle execコマンドにより実行
|
248
|
+
|
249
|
+
|
250
|
+
```
|
251
|
+
$ bundle exec vagrant up --provider=niftycloud
|
252
|
+
```
|
253
|
+
|
254
|
+
## ライセンス
|
255
|
+
|
256
|
+
[vagrant-aws](https://github.com/mitchellh/vagrant-aws) をベースに NIFTY Cloud 向けに修正を加えたものです。 オリジナルに準じて MITライセンス を適用します。
|
data/Rakefile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
require 'rspec/core/rake_task'
|
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
|
+
# Install the `spec` task so that we can run tests.
|
18
|
+
RSpec::Core::RakeTask.new
|
19
|
+
|
20
|
+
# Default task is to run the unit tests
|
21
|
+
task :default => "spec"
|
data/dummy.box
ADDED
Binary file
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# Vagrant NiftyCloud 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 `niftycloud` provider.
|
5
|
+
To turn this into a box:
|
6
|
+
|
7
|
+
```
|
8
|
+
$ tar cvzf niftycloud.box ./metadata.json ./Vagrantfile
|
9
|
+
```
|
10
|
+
|
11
|
+
This box works by using Vagrant's built-in Vagrantfile merging to setup
|
12
|
+
defaults for NiftyCloud. These defaults can easily be overwritten by higher-level
|
13
|
+
Vagrantfiles (such as project root Vagrantfiles).
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require "pathname"
|
2
|
+
|
3
|
+
require "vagrant-niftycloud/plugin"
|
4
|
+
|
5
|
+
module VagrantPlugins
|
6
|
+
module NiftyCloud
|
7
|
+
lib_path = Pathname.new(File.expand_path("../vagrant-niftycloud", __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,178 @@
|
|
1
|
+
require "pathname"
|
2
|
+
|
3
|
+
require "vagrant/action/builder"
|
4
|
+
|
5
|
+
module VagrantPlugins
|
6
|
+
module NiftyCloud
|
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 Call, DestroyConfirm do |env, b2|
|
15
|
+
if env[:result]
|
16
|
+
b2.use ConfigValidate
|
17
|
+
b2.use ConnectNiftyCloud
|
18
|
+
b2.use TerminateInstance
|
19
|
+
else
|
20
|
+
b2.use MessageWillNotDestroy
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# This action is called when `vagrant provision` is called.
|
27
|
+
def self.action_provision
|
28
|
+
Vagrant::Action::Builder.new.tap do |b|
|
29
|
+
b.use ConfigValidate
|
30
|
+
b.use Call, IsCreated do |env, b2|
|
31
|
+
if !env[:result]
|
32
|
+
b2.use MessageNotCreated
|
33
|
+
next
|
34
|
+
end
|
35
|
+
|
36
|
+
b2.use Provision
|
37
|
+
b2.use SyncFolders
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# This action is called to read the SSH info of the machine. The
|
43
|
+
# resulting state is expected to be put into the `:machine_ssh_info`
|
44
|
+
# key.
|
45
|
+
def self.action_read_ssh_info
|
46
|
+
Vagrant::Action::Builder.new.tap do |b|
|
47
|
+
b.use ConfigValidate
|
48
|
+
b.use ConnectNiftyCloud
|
49
|
+
b.use ReadSSHInfo
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# This action is called to read the state of the machine. The
|
54
|
+
# resulting state is expected to be put into the `:machine_state_id`
|
55
|
+
# key.
|
56
|
+
def self.action_read_state
|
57
|
+
Vagrant::Action::Builder.new.tap do |b|
|
58
|
+
b.use ConfigValidate
|
59
|
+
b.use ConnectNiftyCloud
|
60
|
+
b.use ReadState
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# This action is called to SSH into the machine.
|
65
|
+
def self.action_ssh
|
66
|
+
Vagrant::Action::Builder.new.tap do |b|
|
67
|
+
b.use ConfigValidate
|
68
|
+
b.use Call, IsCreated do |env, b2|
|
69
|
+
if !env[:result]
|
70
|
+
b2.use MessageNotCreated
|
71
|
+
next
|
72
|
+
end
|
73
|
+
|
74
|
+
b2.use SSHExec
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def self.action_ssh_run
|
80
|
+
Vagrant::Action::Builder.new.tap do |b|
|
81
|
+
b.use ConfigValidate
|
82
|
+
b.use Call, IsCreated do |env, b2|
|
83
|
+
if !env[:result]
|
84
|
+
b2.use MessageNotCreated
|
85
|
+
next
|
86
|
+
end
|
87
|
+
|
88
|
+
b2.use SSHRun
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# This action is called to bring the box up from nothing.
|
94
|
+
def self.action_up
|
95
|
+
Vagrant::Action::Builder.new.tap do |b|
|
96
|
+
b.use HandleBoxUrl
|
97
|
+
b.use ConfigValidate
|
98
|
+
b.use ConnectNiftyCloud
|
99
|
+
b.use Call, IsCreated do |env, b2|
|
100
|
+
if env[:result]
|
101
|
+
b2.use MessageAlreadyCreated
|
102
|
+
next
|
103
|
+
end
|
104
|
+
|
105
|
+
b2.use TimedProvision
|
106
|
+
b2.use SyncFolders
|
107
|
+
b2.use RunInstance
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
# This action is called to suspend the remote machine.
|
113
|
+
def self.action_suspend
|
114
|
+
Vagrant::Action::Builder.new.tap do |b|
|
115
|
+
b.use Call, IsCreated do |env, b2|
|
116
|
+
if env[:result]
|
117
|
+
b2.use ConfigValidate
|
118
|
+
b2.use ConnectNiftyCloud
|
119
|
+
b2.use SuspendInstance
|
120
|
+
else
|
121
|
+
b2.use MessageNotCreated
|
122
|
+
next
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
# This action is called to halt the remote machine.
|
129
|
+
def self.action_halt
|
130
|
+
Vagrant::Action::Builder.new.tap do |b|
|
131
|
+
b.use Call, IsCreated do |env, b2|
|
132
|
+
if env[:result]
|
133
|
+
b2.use ConfigValidate
|
134
|
+
b2.use ConnectNiftyCloud
|
135
|
+
b2.use SuspendInstance
|
136
|
+
else
|
137
|
+
b2.use MessageNotCreated
|
138
|
+
next
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
# This action is called to resume the remote machine.
|
145
|
+
def self.action_resume
|
146
|
+
Vagrant::Action::Builder.new.tap do |b|
|
147
|
+
b.use Call, IsCreated do |env, b2|
|
148
|
+
if env[:result]
|
149
|
+
b2.use ConfigValidate
|
150
|
+
b2.use ConnectNiftyCloud
|
151
|
+
b2.use ResumeInstance
|
152
|
+
else
|
153
|
+
b2.use MessageNotCreated
|
154
|
+
next
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
# The autoload farm
|
161
|
+
action_root = Pathname.new(File.expand_path("../action", __FILE__))
|
162
|
+
autoload :ConnectNiftyCloud, action_root.join("connect_niftycloud")
|
163
|
+
autoload :IsCreated, action_root.join("is_created")
|
164
|
+
autoload :MessageAlreadyCreated, action_root.join("message_already_created")
|
165
|
+
autoload :MessageNotCreated, action_root.join("message_not_created")
|
166
|
+
autoload :MessageWillNotDestroy, action_root.join("message_will_not_destroy")
|
167
|
+
autoload :ReadSSHInfo, action_root.join("read_ssh_info")
|
168
|
+
autoload :ReadState, action_root.join("read_state")
|
169
|
+
autoload :RunInstance, action_root.join("run_instance")
|
170
|
+
autoload :SyncFolders, action_root.join("sync_folders")
|
171
|
+
autoload :TimedProvision, action_root.join("timed_provision")
|
172
|
+
autoload :TerminateInstance, action_root.join("terminate_instance")
|
173
|
+
autoload :SuspendInstance, action_root.join("suspend_instance")
|
174
|
+
autoload :HaltInstance, action_root.join("suspend_instance")
|
175
|
+
autoload :ResumeInstance, action_root.join("resume_instance")
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|