vagrant-sakura 0.0.9 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +1 -0
- data/.travis.yml +30 -0
- data/CHANGELOG.md +10 -0
- data/Gemfile +2 -0
- data/README.md +86 -16
- data/Rakefile +5 -0
- data/examples/centos.md +15 -0
- data/examples/centos6.md +15 -0
- data/examples/coreos.md +15 -0
- data/examples/debian.md +15 -0
- data/examples/freebsd.md +17 -0
- data/examples/rancheros.md +17 -0
- data/examples/ubuntu.md +15 -0
- data/lib/vagrant-sakura/action/complete_archive_id.rb +38 -0
- data/lib/vagrant-sakura/action/reinstall.rb +114 -0
- data/lib/vagrant-sakura/action/run_instance.rb +18 -2
- data/lib/vagrant-sakura/action.rb +24 -0
- data/lib/vagrant-sakura/{command.rb → command_list_id.rb} +1 -1
- data/lib/vagrant-sakura/command_reinstall.rb +16 -0
- data/lib/vagrant-sakura/config.rb +121 -5
- data/lib/vagrant-sakura/driver/api.rb +3 -2
- data/lib/vagrant-sakura/os_type.rb +34 -0
- data/lib/vagrant-sakura/plugin.rb +7 -2
- data/lib/vagrant-sakura/version.rb +1 -1
- data/locales/en.yml +4 -0
- data/test/test_config.rb +180 -14
- data/test/test_usacloud_config.rb +164 -0
- metadata +18 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 8710a8b87c7c07ffeb170510c46699d89a2b24da2dbf92928c1e655cfa333d88
|
4
|
+
data.tar.gz: 5969024cdd2bc5db362b811ee69b1a3b1dd4df5d6b277909eea45122d6bebfe2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb1570c46e1d5135fe342b227e41bd91303af5d993cc43c2f490136cf2ae3806d1d47ee17206c3505eb1817df68b55c2bd46754f541cfcdbf36d4e6dee59c54a
|
7
|
+
data.tar.gz: ca48864c5e4de22d8838cd97d813c5ec1463cdf0805641fa2cb3649d6036888ccade416220d04985ec15a640c83bb0fafc74a9e1069ce9d1e68bb6ec2bcdc4d5
|
data/.gitignore
CHANGED
data/.travis.yml
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
sudo: false
|
2
|
+
language: ruby
|
3
|
+
cache: bundler
|
4
|
+
|
5
|
+
addons:
|
6
|
+
apt:
|
7
|
+
packages:
|
8
|
+
- bsdtar
|
9
|
+
rvm:
|
10
|
+
- 2.3.7
|
11
|
+
- 2.4.4
|
12
|
+
- 2.5.0
|
13
|
+
- 2.5.1
|
14
|
+
|
15
|
+
env:
|
16
|
+
global:
|
17
|
+
- NOKOGIRI_USE_SYSTEM_LIBRARIES=true
|
18
|
+
|
19
|
+
script: bundle exec rake test
|
20
|
+
|
21
|
+
deploy:
|
22
|
+
provider: rubygems
|
23
|
+
api_key:
|
24
|
+
secure: dPtjpKnaDadiUGiO/ZZG+CK0GRChirb6qbr5UawJff3X1POtU/Q7AXOfwYkMEZv55NT098jvtqPDcAA7ilqQu6Pb1YO51FnHqXk5UPqksCMcAucQX6ByL3V1X8Vliw2rbvKw8BTg9IoNotu6bDIFMDdU0Gz0iU35U9efkxIX+Rc=
|
25
|
+
on:
|
26
|
+
tags: true
|
27
|
+
|
28
|
+
notifications:
|
29
|
+
slack:
|
30
|
+
secure: d9jmDMPRbEHfKTmY+FqYNovtDTag+NNBVE2W3YYkGLp4QCGiaHSlV6rCDDmX02fUOtLgA1FrsJJpS17/3sBG6JX3aWh4wIWW8XCzrzUmItWa25J/Fj3KutbJN0pYXeEVDR8Cw0OoAZpzlgBOBbe5mcCpPhHhe3gTUaRBxqCiQII=
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## 0.1.0 (2018/09/10)
|
4
|
+
|
5
|
+
- Use usacloud config (#28)
|
6
|
+
- Use TravisCI (#29)
|
7
|
+
- Add startup script config (#31)
|
8
|
+
- Add packer filter config (#32)
|
9
|
+
- Add os_type config (#33)
|
10
|
+
- Add sakura-reinstall command (#36)
|
11
|
+
- Add enable_pw_auth config (#37)
|
12
|
+
|
3
13
|
## 0.0.9 (2018/07/13)
|
4
14
|
|
5
15
|
### General
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
# Vagrant Sakura Provider
|
2
2
|
|
3
3
|
[![Gem Version](https://badge.fury.io/rb/vagrant-sakura.png)](http://badge.fury.io/rb/vagrant-sakura)
|
4
|
-
|
4
|
+
[![Build Status](https://travis-ci.org/sacloud/vagrant-sakura.svg?branch=master)](https://travis-ci.org/sacloud/vagrant-sakura)
|
5
|
+
[![Slack](https://slack.usacloud.jp/badge.svg)](https://slack.usacloud.jp/)
|
5
6
|
|
6
7
|
この gem は [Vagrant](http://www.vagrantup.com) に
|
7
8
|
[さくらのクラウド](http://cloud.sakura.ad.jp)上のサーバを操作する
|
@@ -57,8 +58,8 @@ Vagrant.configure("2") do |config|
|
|
57
58
|
config.ssh.username = "ubuntu"
|
58
59
|
|
59
60
|
config.vm.provider :sakura do |sakura|
|
60
|
-
sakura.access_token = 'YOUR ACCESS TOKEN'
|
61
|
-
sakura.access_token_secret = 'YOUR ACCESS TOKEN SECRET'
|
61
|
+
sakura.access_token = '<YOUR ACCESS TOKEN>'
|
62
|
+
sakura.access_token_secret = '<YOUR ACCESS TOKEN SECRET>'
|
62
63
|
sakura.use_insecure_key = true
|
63
64
|
end
|
64
65
|
end
|
@@ -66,24 +67,64 @@ end
|
|
66
67
|
|
67
68
|
そして ``vagrant up --provider=sakura`` を実行してください。
|
68
69
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
70
|
+
サーバのディスクソース(OS)は ``sakura.disk_source_archive`` または``sakura.os_type``で指定します。
|
71
|
+
デフォルトでは``sakura.os_type="ubuntu"``となっています。
|
72
|
+
|
73
|
+
> 注: ディスクソースに指定するOSに応じて`config.ssh.username`を適切に指定する必要があります。
|
74
|
+
詳細は`os_type`の説明を参照してください。
|
75
|
+
|
76
|
+
## APIキーの指定
|
77
|
+
|
78
|
+
さくらのクラウド API を利用するための APIキー(トークン/シークレット/ゾーン)は 以下の3通りの方法で指定できます。
|
73
79
|
|
74
|
-
|
80
|
+
1. Vagrantfileに直接記載
|
81
|
+
2. さくらのクラウド CLI [Usacloud](https://github.com/sacloud/usacloud)の設定ファイル
|
82
|
+
3. 環境変数
|
75
83
|
|
76
|
-
|
77
|
-
``config.ssh.username`` で指定してやる必要があります。
|
84
|
+
> 複数指定されている場合はより上に記載されているものが優先されます。
|
78
85
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
86
|
+
### 1. Vagrantfileに直接記載
|
87
|
+
|
88
|
+
以下のようにVagrantfileに直接記載する方法です。
|
89
|
+
|
90
|
+
```Ruby
|
91
|
+
config.vm.provider :sakura do |sakura|
|
92
|
+
sakura.access_token = '<YOUR ACCESS TOKEN>'
|
93
|
+
sakura.access_token_secret = '<YOUR ACCESS TOKEN SECRET>'
|
94
|
+
sakura.zone_id = '< is1a / is1b / tk1a >'
|
95
|
+
|
96
|
+
# ...
|
97
|
+
end
|
98
|
+
```
|
99
|
+
|
100
|
+
### 2. さくらのクラウド CLI Usacloudの設定ファイル
|
101
|
+
|
102
|
+
[Usacloud](https://github.com/sacloud/usacloud)の設定ファイルを利用する方法です。
|
103
|
+
UsacloudにてAPIキーの設定(`usacloud config`コマンドの実行など)を行なっておけばvagrant-sakura が自動的にUsacloudの設定ファイルを読み込みます。
|
104
|
+
この機能を利用すればVagrantfileにAPIキー関連の設定を記載する必要はありません。
|
105
|
+
|
106
|
+
デフォルトでは`~/.usacloud/<current_profile>/config.json`ファイルが利用されます。
|
107
|
+
任意のUsacloud設定ファイルを利用したい場合、Vagrantfileに`config_path`を指定することで利用する設定ファイルを指定できます。
|
108
|
+
|
109
|
+
```Ruby
|
110
|
+
config.vm.provider :sakura do |sakura|
|
111
|
+
sakura.config_path = 'your/config/file.json'
|
112
|
+
# ...
|
113
|
+
end
|
114
|
+
```
|
115
|
+
|
116
|
+
### 3. 環境変数
|
117
|
+
|
118
|
+
環境変数でAPIキーを指定可能です。
|
119
|
+
Usacloudや[Packer for さくらのクラウド](https://github.com/sacloud/packer-builder-sakuracloud)、[Terraform for さくらのクラウド](https://github.com/sacloud/terraform-provider-sakuracloud)と共通の環境変数を利用できます。
|
120
|
+
|
121
|
+
- API アクセストークン: `SAKURACLOUD_ACCESS_TOKEN` または `SAKURA_ACCESS_TOKEN`
|
122
|
+
- API シークレット: `SAKURACLOUD_ACCESS_TOKEN_SECRET` または `SAKURA_ACCESS_TOKEN_SECRET`
|
123
|
+
- ゾーン: `SAKURACLOUD_ZONE`
|
83
124
|
|
84
125
|
## SSH 鍵の指定方法
|
85
126
|
|
86
|
-
vagrant-sakura では、サーバにログインするための SSH 公開鍵を 3通りの方法で
|
127
|
+
vagrant-sakura では、サーバにログインするための SSH 公開鍵を 以下の3通りの方法で
|
87
128
|
設定できます。
|
88
129
|
|
89
130
|
1. コントロールパネルで設定済みの SSH 公開鍵をリソース ID で指定する。
|
@@ -111,6 +152,18 @@ vagrant-sakura では、サーバにログインするための SSH 公開鍵を
|
|
111
152
|
|
112
153
|
|
113
154
|
## コマンド
|
155
|
+
|
156
|
+
#### OSの再インストール
|
157
|
+
|
158
|
+
`sakura-reinstall` コマンドを使って、ディスクに対しOSの再インストールを行うことができます。
|
159
|
+
|
160
|
+
```
|
161
|
+
$ vagrant sakura-reinstall
|
162
|
+
...
|
163
|
+
```
|
164
|
+
|
165
|
+
#### 各種IDの一覧表示
|
166
|
+
|
114
167
|
`sakura-list-id` コマンドを使って、`Vagrantfile` で指定するリソース ID
|
115
168
|
を調べることができます。
|
116
169
|
```
|
@@ -125,13 +178,30 @@ $ vagrant sakura-list-id
|
|
125
178
|
- ``access_token`` - さくらのクラウド API にアクセスするための API キー
|
126
179
|
- ``access_token_secret`` - API キーのシークレットトークン
|
127
180
|
- ``disk_plan`` - サーバで利用するディスクのプラン ID
|
128
|
-
- ``
|
181
|
+
- ``os_type`` - サーバで利用するディスクのベースとするアーカイブの種別 (※ `disk_source_archive`とは同時に指定できません)
|
182
|
+
指定可能な値は以下の通りです。
|
183
|
+
|
184
|
+
|指定可能な値|SSHユーザー名|Vagrantfileの例|備考|
|
185
|
+
|---|---|:---:|---|
|
186
|
+
|`ubuntu`(デフォルト)|`ubuntu`| [example](examples/ubuntu.md) | - |
|
187
|
+
|`centos`|`root`| [example](examples/centos.md) | - |
|
188
|
+
|`centos6`|`root`| [example](examples/centos6.md) | - |
|
189
|
+
|`debian`|`root`| [example](examples/debian.md) | - |
|
190
|
+
|`coreos`|`core`| [example](examples/coreos.md) | - |
|
191
|
+
|`freebsd`|`root`| [example](examples/freebsd.md) | - |
|
192
|
+
|`rancheros`|`rancher`| [example](examples/rancheros.md) | メモリ2GB以上のプランが必要 |
|
193
|
+
|
194
|
+
- ``disk_source_archive`` - サーバで利用するディスクのベースとするアーカイブのID (※`os_type`とは同時に指定できません)
|
129
195
|
- ``server_name`` - サーバ名
|
130
196
|
- ``server_plan`` - 作成するサーバのプラン ID
|
197
|
+
- ``packet_filter`` - 作成するサーバに適用するパケットフィルタ ID
|
198
|
+
- ``startup_scripts`` - 作成するサーバに適用するスタートアップスクリプト ID(リスト)
|
199
|
+
- ``enable_pw_auth`` - パスワード認証の有効化(デフォルト: `false`)
|
131
200
|
- ``tags`` - 作成するサーバ/ディスクのタグ(リスト)
|
132
201
|
- ``description`` - 作成するサーバ/ディスクの説明
|
133
202
|
- ``sshkey_id`` - サーバへのログインに利用する SSH 公開鍵のリソース ID
|
134
203
|
- ``zone_id`` - ゾーン ID (石狩第1=`is1a`, 石狩第2=`is1b`、東京第1=`tk1a`、デフォルトは`is1b`)
|
204
|
+
- ``config_path`` - APIキーが記載されたUsacloud設定ファイルのパス
|
135
205
|
|
136
206
|
## ネットワーク
|
137
207
|
``vagrant-sakura`` は ``config.vm.network`` を利用したネットワークの構築を
|
data/Rakefile
CHANGED
data/examples/centos.md
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# Vagrantfileの例(CentOS7を利用する場合)
|
2
|
+
|
3
|
+
```bash
|
4
|
+
Vagrant.configure("2") do |config|
|
5
|
+
config.vm.box = "dummy"
|
6
|
+
config.ssh.username = "root"
|
7
|
+
|
8
|
+
config.vm.provider :sakura do |sakura, override|
|
9
|
+
sakura.os_type = "centos"
|
10
|
+
|
11
|
+
sakura.public_key_path = File.expand_path("~/.ssh/id_rsa.pub")
|
12
|
+
override.ssh.private_key_path = File.expand_path("~/.ssh/id_rsa")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
```
|
data/examples/centos6.md
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# Vagrantfileの例(CentOS6を利用する場合)
|
2
|
+
|
3
|
+
```bash
|
4
|
+
Vagrant.configure("2") do |config|
|
5
|
+
config.vm.box = "dummy"
|
6
|
+
config.ssh.username = "root"
|
7
|
+
|
8
|
+
config.vm.provider :sakura do |sakura, override|
|
9
|
+
sakura.os_type = "centos6"
|
10
|
+
|
11
|
+
sakura.public_key_path = File.expand_path("~/.ssh/id_rsa.pub")
|
12
|
+
override.ssh.private_key_path = File.expand_path("~/.ssh/id_rsa")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
```
|
data/examples/coreos.md
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# Vagrantfileの例(CoreOS/ContainerLinuxを利用する場合)
|
2
|
+
|
3
|
+
```bash
|
4
|
+
Vagrant.configure("2") do |config|
|
5
|
+
config.vm.box = "dummy"
|
6
|
+
config.ssh.username = "core"
|
7
|
+
|
8
|
+
config.vm.provider :sakura do |sakura, override|
|
9
|
+
sakura.os_type = "coreos"
|
10
|
+
|
11
|
+
sakura.public_key_path = File.expand_path("~/.ssh/id_rsa.pub")
|
12
|
+
override.ssh.private_key_path = File.expand_path("~/.ssh/id_rsa")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
```
|
data/examples/debian.md
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# Vagrantfileの例(Debianを利用する場合)
|
2
|
+
|
3
|
+
```bash
|
4
|
+
Vagrant.configure("2") do |config|
|
5
|
+
config.vm.box = "dummy"
|
6
|
+
config.ssh.username = "root"
|
7
|
+
|
8
|
+
config.vm.provider :sakura do |sakura, override|
|
9
|
+
sakura.os_type = "debian"
|
10
|
+
|
11
|
+
sakura.public_key_path = File.expand_path("~/.ssh/id_rsa.pub")
|
12
|
+
override.ssh.private_key_path = File.expand_path("~/.ssh/id_rsa")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
```
|
data/examples/freebsd.md
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# Vagrantfileの例(FreeBSDを利用する場合)
|
2
|
+
|
3
|
+
```bash
|
4
|
+
Vagrant.configure("2") do |config|
|
5
|
+
config.vm.box = "dummy"
|
6
|
+
config.ssh.username = "root"
|
7
|
+
config.ssh.shell = "sh"
|
8
|
+
config.vm.synced_folder ".", "/vagrant", id: "vagrant-root", disabled: true
|
9
|
+
|
10
|
+
config.vm.provider :sakura do |sakura, override|
|
11
|
+
sakura.os_type = "freebsd"
|
12
|
+
|
13
|
+
sakura.public_key_path = File.expand_path("~/.ssh/id_rsa.pub")
|
14
|
+
override.ssh.private_key_path = File.expand_path("~/.ssh/id_rsa")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
```
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# Vagrantfileの例(RancherOSを利用する場合)
|
2
|
+
|
3
|
+
```bash
|
4
|
+
Vagrant.configure("2") do |config|
|
5
|
+
config.vm.box = "dummy"
|
6
|
+
config.ssh.username = "rancher"
|
7
|
+
config.vm.synced_folder ".", "/vagrant", id: "vagrant-root", disabled: true
|
8
|
+
|
9
|
+
config.vm.provider :sakura do |sakura, override|
|
10
|
+
sakura.os_type = "rancheros"
|
11
|
+
sakura.server_plan = 4002 # 2core/4GBメモリ プラン
|
12
|
+
|
13
|
+
sakura.public_key_path = File.expand_path("~/.ssh/id_rsa.pub")
|
14
|
+
override.ssh.private_key_path = File.expand_path("~/.ssh/id_rsa")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
```
|
data/examples/ubuntu.md
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# Vagrantfileの例(Ubuntuを利用する場合)
|
2
|
+
|
3
|
+
```bash
|
4
|
+
Vagrant.configure("2") do |config|
|
5
|
+
config.vm.box = "dummy"
|
6
|
+
config.ssh.username = "ubuntu"
|
7
|
+
|
8
|
+
config.vm.provider :sakura do |sakura, override|
|
9
|
+
sakura.os_type = "ubuntu"
|
10
|
+
|
11
|
+
sakura.public_key_path = File.expand_path("~/.ssh/id_rsa.pub")
|
12
|
+
override.ssh.private_key_path = File.expand_path("~/.ssh/id_rsa")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
```
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'log4r'
|
2
|
+
require 'vagrant-sakura/driver/api'
|
3
|
+
require "vagrant-sakura/os_type"
|
4
|
+
|
5
|
+
module VagrantPlugins
|
6
|
+
module Sakura
|
7
|
+
module Action
|
8
|
+
class CompleteArchiveId
|
9
|
+
def initialize(app, env)
|
10
|
+
@app = app
|
11
|
+
@logger = Log4r::Logger.new("vagrant_sakura::action::complete_archive_id")
|
12
|
+
end
|
13
|
+
|
14
|
+
def call(env)
|
15
|
+
config = env[:machine].provider_config
|
16
|
+
if config.disk_source_mode == :os_type
|
17
|
+
api = env[:sakura_api]
|
18
|
+
|
19
|
+
filter = VagrantPlugins::Sakura::OSType::OS_TYPE_QUERIES[config.os_type]
|
20
|
+
raise 'invalid os_type' if filter.nil?
|
21
|
+
|
22
|
+
data = {
|
23
|
+
"Filter" => filter
|
24
|
+
}
|
25
|
+
response = api.get("/archive", data)
|
26
|
+
raise "os_type `#{config.os_type}` is not found" if response.nil? || response["Archives"].nil? || response["Archives"].empty?
|
27
|
+
|
28
|
+
config.disk_source_archive = response["Archives"][0]["ID"]
|
29
|
+
else
|
30
|
+
config.os_type = ""
|
31
|
+
end
|
32
|
+
@app.call(env)
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
require 'vagrant/util/retryable'
|
2
|
+
|
3
|
+
require 'vagrant-sakura/driver/api'
|
4
|
+
#require 'vagrant-sakura/util/timer'
|
5
|
+
require 'log4r'
|
6
|
+
|
7
|
+
module VagrantPlugins
|
8
|
+
module Sakura
|
9
|
+
module Action
|
10
|
+
class Reinstall
|
11
|
+
include Vagrant::Util::Retryable
|
12
|
+
|
13
|
+
def initialize(app, env)
|
14
|
+
@app = app
|
15
|
+
@logger = Log4r::Logger.new("vagrant_sakura::action::run_instance")
|
16
|
+
end
|
17
|
+
|
18
|
+
def call(env)
|
19
|
+
disk_source_archive = env[:machine].provider_config.disk_source_archive
|
20
|
+
os_type = env[:machine].provider_config.os_type
|
21
|
+
sshkey_id = env[:machine].provider_config.sshkey_id
|
22
|
+
public_key_path = env[:machine].provider_config.public_key_path
|
23
|
+
use_insecure_key = env[:machine].provider_config.use_insecure_key
|
24
|
+
enable_pw_auth = env[:machine].provider_config.enable_pw_auth
|
25
|
+
startup_scripts = env[:machine].provider_config.startup_scripts
|
26
|
+
|
27
|
+
api = env[:sakura_api]
|
28
|
+
serverid = env[:machine].id
|
29
|
+
diskid = env[:machine].provider_config.disk_id
|
30
|
+
|
31
|
+
unless env[:machine].provider_config.disk_id
|
32
|
+
begin
|
33
|
+
response = api.get("/server/#{serverid}")
|
34
|
+
rescue Driver::NotFoundError
|
35
|
+
raise 'server not found'
|
36
|
+
end
|
37
|
+
diskid = response["Server"]["Disks"][0]["ID"]
|
38
|
+
end
|
39
|
+
|
40
|
+
env[:ui].info(I18n.t("vagrant_sakura.reinstalling_disk"))
|
41
|
+
env[:ui].info(" -- Target Disk ID: #{diskid}") if os_type
|
42
|
+
env[:ui].info(" -- Disk Source OS Type: #{os_type}") if os_type
|
43
|
+
env[:ui].info(" -- Disk Source Archive: #{disk_source_archive}")
|
44
|
+
env[:ui].info(" -- Startup Scripts: #{startup_scripts.map {|item| item["ID"]}}") unless startup_scripts.empty?
|
45
|
+
|
46
|
+
data = {
|
47
|
+
"Disk" => {
|
48
|
+
"SourceArchive" => {
|
49
|
+
"ID" => disk_source_archive
|
50
|
+
},
|
51
|
+
}
|
52
|
+
}
|
53
|
+
response = api.put("/disk/#{diskid}/install", data)
|
54
|
+
|
55
|
+
while true
|
56
|
+
response = api.get("/disk/#{diskid}")
|
57
|
+
case response["Disk"]["Availability"]
|
58
|
+
when "available"
|
59
|
+
break
|
60
|
+
when "migrating"
|
61
|
+
migrated = response["Disk"]["MigratedMB"]
|
62
|
+
size = response["Disk"]["SizeMB"]
|
63
|
+
env[:ui].info("Disk #{diskid} is migrating (#{migrated}/#{size})")
|
64
|
+
else
|
65
|
+
status = presponse["Disk"]["Availability"]
|
66
|
+
env[:ui].info("Disk #{diskid} is #{status}")
|
67
|
+
end
|
68
|
+
sleep 3
|
69
|
+
end
|
70
|
+
|
71
|
+
data = {
|
72
|
+
"UserSubnet" => {},
|
73
|
+
"Notes" => startup_scripts,
|
74
|
+
"DisablePWAuth" => !enable_pw_auth
|
75
|
+
}
|
76
|
+
if sshkey_id
|
77
|
+
data["SSHKey"] = { "ID" => sshkey_id }
|
78
|
+
elsif public_key_path
|
79
|
+
data["SSHKey"] = { "PublicKey" => File.read(public_key_path) }
|
80
|
+
elsif use_insecure_key
|
81
|
+
pubkey = Vagrant.source_root.join("keys", "vagrant.pub").read.chomp
|
82
|
+
data["SSHKey"] = { "PublicKey" => pubkey }
|
83
|
+
else
|
84
|
+
raise 'failsafe'
|
85
|
+
end
|
86
|
+
|
87
|
+
response = api.put("/disk/#{diskid}/config", data)
|
88
|
+
# Config
|
89
|
+
|
90
|
+
response = api.put("/server/#{serverid}/power")
|
91
|
+
# Power On
|
92
|
+
|
93
|
+
if !env[:interrupted]
|
94
|
+
# Wait for SSH to be ready.
|
95
|
+
env[:ui].info(I18n.t("vagrant_sakura.waiting_for_ssh"))
|
96
|
+
while true
|
97
|
+
break if env[:interrupted]
|
98
|
+
break if env[:machine].communicate.ready?
|
99
|
+
sleep 2
|
100
|
+
end
|
101
|
+
|
102
|
+
#@logger.info("Time for SSH ready: #{env[:metrics]["instance_ssh_time"]}")
|
103
|
+
|
104
|
+
# Ready and booted!
|
105
|
+
env[:ui].info(I18n.t("vagrant_sakura.ready"))
|
106
|
+
end
|
107
|
+
|
108
|
+
@app.call(env)
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|