vagrant-niftycloud 0.1.0.dev → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +25 -15
- data/Vagrantfile.chef.sample +33 -0
- data/lib/vagrant-niftycloud/action/connect_niftycloud.rb +4 -1
- data/lib/vagrant-niftycloud/action/resume_instance.rb +2 -0
- data/lib/vagrant-niftycloud/action/run_instance.rb +12 -7
- data/lib/vagrant-niftycloud/action/suspend_instance.rb +2 -0
- data/lib/vagrant-niftycloud/action/terminate_instance.rb +2 -0
- data/lib/vagrant-niftycloud/config.rb +18 -1
- data/lib/vagrant-niftycloud/version.rb +1 -1
- data/locales/en.yml +6 -0
- metadata +7 -3
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# Vagrant NiftyCloud Provider
|
2
2
|
|
3
|
-
|
3
|
+
`開発中!8月頭を目処に処理をブラッシュアップします`
|
4
|
+
|
5
|
+
`リージョン・ゾーン周り以外のロジックはほぼ問題ないと思います`
|
4
6
|
|
5
7
|
[Vagrant](http://www.vagrantup.com) 1.2以降のバージョンで[ニフティクラウド](http://cloud.nifty.com/)
|
6
8
|
を操作するためのprovider機能を追加するプラグインです。
|
@@ -26,16 +28,12 @@ Chef以外の動作確認は行なっていませんが、プラグインで行
|
|
26
28
|
|
27
29
|
vagrant upを実行する前に通常のVagrant使用時と同じようにboxファイルをVagrantに追加する必要があります。
|
28
30
|
|
29
|
-
自分でbox
|
31
|
+
自分でboxファイルを作成するか、こちらで用意しているboxファイルを使用して、任意の名前でダミーのboxを追加して下さい。
|
30
32
|
|
31
33
|
```
|
32
|
-
$
|
33
|
-
$ cd vagrant-niftycloud
|
34
|
-
$ bundle install
|
35
|
-
$ bundle exec rake build
|
36
|
-
$ vagrant plugin install pkg/vagrant-niftycloud-0.1.0.dev.gem
|
34
|
+
$ vagrant plugin install vagrant-niftycloud
|
37
35
|
$ vagrant box add dummy https://github.com/sakama/vagrant-niftycloud/raw/master/dummy.box
|
38
|
-
|
36
|
+
|
39
37
|
```
|
40
38
|
|
41
39
|
### OSイメージの作成
|
@@ -51,6 +49,9 @@ Vagrant自体の仕様により、以下の制約があります。
|
|
51
49
|
上記条件をクリアしたサーバイメージをプライベートイメージ等で用意する必要があります。
|
52
50
|
|
53
51
|
OSイメージ作成の手順は以下のようになります。
|
52
|
+
chef-soloやchef-clientを予めインストールしておくかどうかはケースバイケースです。
|
53
|
+
|
54
|
+
vagrant up時に[vagrant-omnibus](https://github.com/schisamo/vagrant-omnibus)を使うという手もあります。
|
54
55
|
|
55
56
|
```
|
56
57
|
## rootで実行
|
@@ -61,13 +62,17 @@ OSイメージ作成の手順は以下のようになります。
|
|
61
62
|
# su - vagrant
|
62
63
|
## vagrantユーザで実行
|
63
64
|
$ ssh-keygen -t rsa
|
65
|
+
$ cd .ssh
|
64
66
|
$ mv id_rsa.pub authorized_keys(id_rsaをローカルに保存する=接続する際のSSH秘密鍵となる)
|
65
67
|
|
66
68
|
## rootで実行
|
67
69
|
# visudo
|
68
70
|
# Defaults specificationをコメントアウト
|
69
|
-
|
71
|
+
## 最終行に以下を追加
|
70
72
|
# vagrant ALL=(ALL) NOPASSWD: ALL
|
73
|
+
|
74
|
+
## chef-soloやchef-clientをインストールしておく場合
|
75
|
+
# curl -L https://www.opscode.com/chef/install.sh | sudo bash
|
71
76
|
```
|
72
77
|
|
73
78
|
作成したイメージのimage_idをVagrantfile内で指定する必要があります。
|
@@ -77,6 +82,7 @@ image_idについては[ニフティクラウドSDK for Ruby](http://cloud.nifty
|
|
77
82
|
### Vagrantfileの作成
|
78
83
|
|
79
84
|
Vagrantfileを以下のような内容で作成します。
|
85
|
+
サンプルのVagrantfile ([Chef用](https://github.com/sakama/vagrant-niftycloud/blob/master/Vagrantfile.chef.sample)) も参考にして下さい。
|
80
86
|
|
81
87
|
Vagrantfileの`config.vm.provider`ブロックで各種パラメータを指定して下さい。
|
82
88
|
|
@@ -90,6 +96,7 @@ Vagrant.configure("2") do |config|
|
|
90
96
|
|
91
97
|
niftycloud.image_id = "26"
|
92
98
|
niftycloud.key_name = "<YOUR SSH KEY NAME>"
|
99
|
+
niftycloud.password = "<ROOT PASSWORD YOU WANT TO SET>"
|
93
100
|
override.ssh.username = "vagrant"
|
94
101
|
override.ssh.private_key_path = "PATH TO YOUR PRIVATE KEY"
|
95
102
|
end
|
@@ -102,7 +109,7 @@ end
|
|
102
109
|
|
103
110
|
```
|
104
111
|
|
105
|
-
#
|
112
|
+
# サーバ立ち上げ、provisioningの実行
|
106
113
|
$ vagrant up --provider=niftycloud
|
107
114
|
|
108
115
|
# 立ち上げたサーバへのprovisioningの実行
|
@@ -153,14 +160,16 @@ boxフォーマットには`metadata.json`が必要です。
|
|
153
160
|
以下の様なパラメータに対応しています。
|
154
161
|
|
155
162
|
|
156
|
-
* `access_key_id` - ニフティクラウドのAccessKey。[コントロールパネルから取得した値](http://cloud.nifty.com/help/status/api_key.htm)
|
163
|
+
* `access_key_id` - ニフティクラウドのAccessKey。[コントロールパネルから取得した値](http://cloud.nifty.com/help/status/api_key.htm)を指定。
|
164
|
+
* `secret_access_key` - ニフティクラウドAPI経由でアクセスするためのSecretAccessKey。[コントロールパネルから取得した値](http://cloud.nifty.com/help/status/api_key.htm)を指定して下さい。
|
165
|
+
* `instance_id` - サーバ名。指定がない場合ランダムなIDを付与。Vagrantfileを複数人で共有している場合、指定なしがいいかもしれません(同じサーバ名を持つサーバは立てられないため)
|
157
166
|
* `image_id` - サーバ立ち上げ時に指定するimage_id。ニフティクラウド公式のOSイメージでは動作しません。
|
158
167
|
* `key_name` - サーバ接続時に使用するSSHキー名。[コントロールパネルで設定した値](http://cloud.nifty.com/help/netsec/ssh_key.htm)を指定して下さい。
|
159
168
|
* `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)を指定して下さい。
|
169
|
+
* `instance_ready_timeout` - インスタンス起動実行からタイムアウトとなるまでの秒数。デフォルトは300秒。
|
170
|
+
* `instance_type` - サーバタイプ。例)"small2"。指定がない場合のデフォルト値は"mini"。
|
163
171
|
* `firewall` - Firewall名。
|
172
|
+
* `password` - rootのパスワードとして設定したい値
|
164
173
|
|
165
174
|
上記のパラメータはVagrantfile中で以下のように設定することができます。
|
166
175
|
|
@@ -191,6 +200,7 @@ Vagrant.configure("2") do |config|
|
|
191
200
|
niftycloud.zone = "east-12"
|
192
201
|
niftycloud.key_name = "vagrantkey"
|
193
202
|
niftycloud.firewall = "test"
|
203
|
+
niftycloud.password = "password"
|
194
204
|
override.ssh.username = "vagrant"
|
195
205
|
override.ssh.private_key_path = "/path/to/private_key.pem"
|
196
206
|
|
@@ -221,7 +231,7 @@ Vagrantの`config.vm.network`で設定可能なネットワーク機能につい
|
|
221
231
|
|
222
232
|
フォルダの同期についてはshell、chef、puppetといったVagrantのprovisionersを動作させるための最低限のサポートとなります。
|
223
233
|
|
224
|
-
`vagrant up`、`vagrant
|
234
|
+
`vagrant up`、`vagrant provision`コマンドが実行された場合、
|
225
235
|
このプラグインは`rsync`を使用しSSH経由でローカル→リモートサーバへの単方向同期を行います。
|
226
236
|
|
227
237
|
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# -*- mode: ruby -*-
|
2
|
+
# vi: set ft=ruby :
|
3
|
+
|
4
|
+
Vagrant.configure("2") do |config|
|
5
|
+
config.vm.box = "dummy"
|
6
|
+
|
7
|
+
config.vm.provider :niftycloud do |niftycloud, override|
|
8
|
+
niftycloud.access_key_id = ENV["NIFTY_CLOUD_ACCESS_KEY"] || "foo"
|
9
|
+
niftycloud.secret_access_key = ENV["NIFTY_CLOUD_SECRET_KEY"] || "bar"
|
10
|
+
niftycloud.image_id = "26"
|
11
|
+
niftycloud.zone= "east-12"
|
12
|
+
niftycloud.instance_type= "mini"
|
13
|
+
niftycloud.key_name = "sshkeypairname"
|
14
|
+
niftycloud.firewall = "vagrantservers"
|
15
|
+
niftycloud.password = "password"
|
16
|
+
override.ssh.username = "vagrant"
|
17
|
+
override.ssh.private_key_path = "/path/to/vagrant_private.pem"
|
18
|
+
|
19
|
+
config.vm.provision :chef_solo do |chef|
|
20
|
+
chef_root = '/path/to/chef_root'
|
21
|
+
chef.cookbooks_path = "#{chef_root}/chef-repo/cookbooks"
|
22
|
+
chef.roles_path = "#{chef_root}/chef-repo/roles"
|
23
|
+
chef.data_bags_path = "#{chef_root}/chef-repo/data_bags"
|
24
|
+
chef.json = {
|
25
|
+
:mysql => {
|
26
|
+
:server_root_password => "p@ssw0rd",
|
27
|
+
:server_repl_password => "p@ssw0rd",
|
28
|
+
:server_debian_password => "p@ssw0rd"
|
29
|
+
}
|
30
|
+
}
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -23,6 +23,7 @@ module VagrantPlugins
|
|
23
23
|
while server.instanceState.name == 'pending'
|
24
24
|
sleep 5
|
25
25
|
server = env[:niftycloud_compute].describe_instances(:instance_id => env[:machine].id).reservationSet.item.first.instancesSet.item.first
|
26
|
+
env[:ui].info(I18n.t("vagrant_niftycloud.processing"))
|
26
27
|
end
|
27
28
|
|
28
29
|
if server.instanceState.name != 'running'
|
@@ -30,6 +31,7 @@ module VagrantPlugins
|
|
30
31
|
while server.instanceState.name != 'running'
|
31
32
|
sleep 5
|
32
33
|
server = env[:niftycloud_compute].describe_instances(:instance_id => env[:machine].id).reservationSet.item.first.instancesSet.item.first
|
34
|
+
env[:ui].info(I18n.t("vagrant_niftycloud.processing"))
|
33
35
|
end
|
34
36
|
end
|
35
37
|
|
@@ -17,21 +17,18 @@ module VagrantPlugins
|
|
17
17
|
def call(env)
|
18
18
|
# Initialize metrics if they haven't been
|
19
19
|
env[:metrics] ||= {}
|
20
|
-
|
21
20
|
# Get the zone we're going to booting up in
|
22
21
|
zone = env[:machine].provider_config.zone
|
23
|
-
|
24
22
|
# Get the configs
|
25
|
-
# TODO 開発フェーズなのでinstance_idを固定にしている
|
26
|
-
# Vagrantfileで設定できるようにすべきか、その場合Vagrantfileを共有している環境では同じIDでサーバ立てるとエラーになることを考慮する
|
27
|
-
instance_id = 'test2'
|
28
23
|
zone_config = env[:machine].provider_config.get_zone_config(zone)
|
24
|
+
instance_id = zone_config.instance_id.nil? ? get_instance_id(5) : zone_config.instance_id
|
29
25
|
image_id = zone_config.image_id
|
30
26
|
zone = zone_config.zone
|
31
27
|
instance_type = zone_config.instance_type
|
32
28
|
key_name = zone_config.key_name,
|
33
29
|
firewall = zone_config.firewall,
|
34
|
-
user_data = zone_config.user_data
|
30
|
+
user_data = zone_config.user_data,
|
31
|
+
password = zone_config.password
|
35
32
|
|
36
33
|
# Launch!
|
37
34
|
env[:ui].info(I18n.t("vagrant_niftycloud.launching_instance"))
|
@@ -49,8 +46,8 @@ module VagrantPlugins
|
|
49
46
|
:instance_type => instance_type,
|
50
47
|
:image_id => image_id,
|
51
48
|
:key_name => zone_config.key_name,
|
52
|
-
:password => 'password',
|
53
49
|
:user_data => user_data,
|
50
|
+
:password => password,
|
54
51
|
:accounting_type => 2, #従量課金
|
55
52
|
:disable_api_termination => false #APIから即terminate可
|
56
53
|
}
|
@@ -91,6 +88,7 @@ module VagrantPlugins
|
|
91
88
|
count += 1
|
92
89
|
sleep 5
|
93
90
|
server = env[:niftycloud_compute].describe_instances(:instance_id => instance_id).reservationSet.item.first.instancesSet.item.first
|
91
|
+
env[:ui].info(I18n.t("vagrant_niftycloud.processing"))
|
94
92
|
if count > tries
|
95
93
|
# Delete the instance
|
96
94
|
terminate(env)
|
@@ -125,6 +123,13 @@ module VagrantPlugins
|
|
125
123
|
destroy_env[:force_confirm_destroy] = true
|
126
124
|
env[:action_runner].run(Action.action_destroy, destroy_env)
|
127
125
|
end
|
126
|
+
|
127
|
+
def get_instance_id(length)
|
128
|
+
result = "vagrant"
|
129
|
+
uid = (("a".."z").to_a + (0..9).to_a).shuffle[0..length].join
|
130
|
+
result << uid.capitalize!
|
131
|
+
result
|
132
|
+
end
|
128
133
|
end
|
129
134
|
end
|
130
135
|
end
|
@@ -23,6 +23,7 @@ module VagrantPlugins
|
|
23
23
|
while server.instanceState.name == 'pending'
|
24
24
|
sleep 5
|
25
25
|
server = env[:niftycloud_compute].describe_instances(:instance_id => env[:machine].id).reservationSet.item.first.instancesSet.item.first
|
26
|
+
env[:ui].info(I18n.t("vagrant_niftycloud.processing"))
|
26
27
|
end
|
27
28
|
|
28
29
|
if server.instanceState.name != 'stopped'
|
@@ -30,6 +31,7 @@ module VagrantPlugins
|
|
30
31
|
while server.instanceState.name != 'stopped'
|
31
32
|
sleep 5
|
32
33
|
server = env[:niftycloud_compute].describe_instances(:instance_id => env[:machine].id).reservationSet.item.first.instancesSet.item.first
|
34
|
+
env[:ui].info(I18n.t("vagrant_niftycloud.processing"))
|
33
35
|
end
|
34
36
|
end
|
35
37
|
|
@@ -23,6 +23,7 @@ module VagrantPlugins
|
|
23
23
|
while server.instanceState.name == 'pending'
|
24
24
|
sleep 5
|
25
25
|
server = env[:niftycloud_compute].describe_instances(:instance_id => env[:machine].id).reservationSet.item.first.instancesSet.item.first
|
26
|
+
env[:ui].info(I18n.t("vagrant_niftycloud.processing"))
|
26
27
|
end
|
27
28
|
|
28
29
|
attribute = env[:niftycloud_compute].describe_instance_attribute(:instance_id => env[:machine].id, :attribute => 'disableApiTermination')
|
@@ -35,6 +36,7 @@ module VagrantPlugins
|
|
35
36
|
while server.instanceState.name != 'stopped'
|
36
37
|
sleep 5
|
37
38
|
server = env[:niftycloud_compute].describe_instances(:instance_id => env[:machine].id).reservationSet.item.first.instancesSet.item.first
|
39
|
+
env[:ui].info(I18n.t("vagrant_niftycloud.processing"))
|
38
40
|
end
|
39
41
|
end
|
40
42
|
end
|
@@ -8,6 +8,11 @@ module VagrantPlugins
|
|
8
8
|
# @return [String]
|
9
9
|
attr_accessor :access_key_id
|
10
10
|
|
11
|
+
# The ID of the AMI to use.
|
12
|
+
#
|
13
|
+
# @return [String]
|
14
|
+
attr_accessor :instance_id
|
15
|
+
|
11
16
|
# The ID of the AMI to use.
|
12
17
|
#
|
13
18
|
# @return [String]
|
@@ -45,6 +50,11 @@ module VagrantPlugins
|
|
45
50
|
# @return [Array<String>]
|
46
51
|
attr_accessor :firewall
|
47
52
|
|
53
|
+
# The password string
|
54
|
+
#
|
55
|
+
# @return [String]
|
56
|
+
attr_accessor :password
|
57
|
+
|
48
58
|
# The user data string
|
49
59
|
#
|
50
60
|
# @return [String]
|
@@ -52,13 +62,15 @@ module VagrantPlugins
|
|
52
62
|
|
53
63
|
def initialize(zone_specific=false)
|
54
64
|
@access_key_id = UNSET_VALUE
|
65
|
+
@instance_id = UNSET_VALUE
|
55
66
|
@image_id = UNSET_VALUE
|
56
|
-
@zone
|
67
|
+
@zone = UNSET_VALUE
|
57
68
|
@instance_ready_timeout = UNSET_VALUE
|
58
69
|
@instance_type = UNSET_VALUE
|
59
70
|
@key_name = UNSET_VALUE
|
60
71
|
@secret_access_key = UNSET_VALUE
|
61
72
|
@firewall = UNSET_VALUE
|
73
|
+
@password = UNSET_VALUE
|
62
74
|
@user_data = UNSET_VALUE
|
63
75
|
|
64
76
|
# Internal state (prefix with __ so they aren't automatically
|
@@ -131,6 +143,8 @@ module VagrantPlugins
|
|
131
143
|
@access_key_id = ENV['NIFTY_ACCESS_KEY'] if @access_key_id == UNSET_VALUE
|
132
144
|
@secret_access_key = ENV['NIFTY_SECRET_KEY'] if @secret_access_key == UNSET_VALUE
|
133
145
|
|
146
|
+
@instance_id = nil if @instance_id == UNSET_VALUE
|
147
|
+
|
134
148
|
# AMI must be nil, since we can't default that
|
135
149
|
@image_id = nil if @image_id == UNSET_VALUE
|
136
150
|
|
@@ -148,6 +162,9 @@ module VagrantPlugins
|
|
148
162
|
# The firewall are empty by default.
|
149
163
|
@firewall = [] if @firewall == UNSET_VALUE
|
150
164
|
|
165
|
+
# The password are empty by default.
|
166
|
+
@password = [] if @password == UNSET_VALUE
|
167
|
+
|
151
168
|
# User Data is nil by default
|
152
169
|
@user_data = nil if @user_data == UNSET_VALUE
|
153
170
|
|
data/locales/en.yml
CHANGED
@@ -17,8 +17,14 @@ en:
|
|
17
17
|
Terminating the instance...
|
18
18
|
waiting_for_ready: |-
|
19
19
|
Waiting for instance to become "ready"...
|
20
|
+
processing: |-
|
21
|
+
Processing...
|
20
22
|
waiting_for_ssh: |-
|
21
23
|
Waiting for SSH to become available...
|
24
|
+
suspending: |-
|
25
|
+
Waiting for instance to become "stopped"...
|
26
|
+
resuming: |-
|
27
|
+
Waiting for instance to become "running"...
|
22
28
|
will_not_destroy: |-
|
23
29
|
The instance '%{name}' will not be destroyed, since the confirmation
|
24
30
|
was declined.
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-niftycloud
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.0
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Satoshi Akama
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-07-
|
12
|
+
date: 2013-07-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -129,6 +129,7 @@ files:
|
|
129
129
|
- README.md
|
130
130
|
- spec/vagrant-niftycloud/config_spec.rb
|
131
131
|
- vagrant-niftycloud.gemspec
|
132
|
+
- Vagrantfile.chef.sample
|
132
133
|
- .gitignore
|
133
134
|
homepage: http://www.vagrantup.com
|
134
135
|
licenses: []
|
@@ -142,6 +143,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
142
143
|
- - ! '>='
|
143
144
|
- !ruby/object:Gem::Version
|
144
145
|
version: '0'
|
146
|
+
segments:
|
147
|
+
- 0
|
148
|
+
hash: -273229777575097773
|
145
149
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
150
|
none: false
|
147
151
|
requirements:
|