knife-zcloudjp 0.1.7 → 0.2.0
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.
- checksums.yaml +6 -14
- data/.gitignore +2 -1
- data/.travis.yml +2 -4
- data/CHANGELOG.md +6 -0
- data/README.md +71 -29
- data/Rakefile +1 -5
- data/knife-zcloudjp.gemspec +6 -3
- data/lib/chef/knife/zcloudjp_base.rb +3 -6
- data/lib/chef/knife/zcloudjp_machine_create.rb +16 -28
- data/lib/chef/knife/zcloudjp_machine_list.rb +1 -9
- data/lib/chef/knife/zcloudjp_machine_start.rb +16 -50
- data/lib/chef/knife/zcloudjp_machine_stop.rb +14 -49
- data/lib/chef/knife/zcloudjp_product_list.rb +4 -6
- data/lib/knife-zcloudjp.rb +1 -1
- metadata +66 -24
checksums.yaml
CHANGED
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
metadata.gz: !binary |-
|
|
9
|
-
ZDhhOTRhM2QyMjVhOTg3YjQ5ZGJiNzg4ODYxZGVhMmE2OWJkOGFhZDhhMTIx
|
|
10
|
-
NzQ1NWZjZTVhYWYyYjMxZWYwNTA3ODg4Mzk1MDU4OTVhZTRjNjU5ZTU0NzVi
|
|
11
|
-
MWJkYTkwMzhlZDQ4N2U5N2I3NTcwYzNmMDQzOWQzM2JjOTdmMzQ=
|
|
12
|
-
data.tar.gz: !binary |-
|
|
13
|
-
ZGM3MjYyYmY1ODFjMTMzNDQyOGI2MWJlZDVlNGJkYjc0MzZlZTRiYzBhYzEz
|
|
14
|
-
M2U0YTg1MzUxZmQxMzY1NmYzZTUxZTI5YzRlMmJlNjMwOGUwYWU4NGYwNzk1
|
|
15
|
-
Y2YwMGNiNzI0OWNiMjA5M2NiYThhY2VkY2ExY2MzYTQ4ZWQyOWE=
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: e2906cbd29a2d2f0105328a6f82ee1cc46eb9b89
|
|
4
|
+
data.tar.gz: 9620762297555596cdc0d7c810a00e299cbf66ef
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 2ed63d8c94cdf6bed38bc9777ce1de81487b3ca5ce96405afe67dd7b3893e3d7ad262d0f95b18d43b45638883a65fb6ccf253edfb7ea418f01b615ac1b639785
|
|
7
|
+
data.tar.gz: 5ed24dc07fccac8ba324f2b24d039fe1540e740a275d5f4ae0ea862a7b2ff75af490121a9f877650530772e6cbc783d06a9474375831e37d470255b10a484781
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
|
@@ -4,6 +4,13 @@
|
|
|
4
4
|
|
|
5
5
|
A Knife(Opscode Chef) plugin for [Z Cloud](http://z-cloud.jp). This plugin allows you to retrieve product catalog, print the current machines and bootstrap a machine.
|
|
6
6
|
|
|
7
|
+
## F.Y.I
|
|
8
|
+
|
|
9
|
+
SmartOS Bootstrap template is here.
|
|
10
|
+
|
|
11
|
+
[higanworks/knife-bootstrap-smartos](https://github.com/higanworks/knife-bootstrap-smartos)
|
|
12
|
+
|
|
13
|
+
|
|
7
14
|
## Installation
|
|
8
15
|
|
|
9
16
|
### from Rubygems
|
|
@@ -29,35 +36,70 @@ Add the following entries to your `.chef/knife.rb`.
|
|
|
29
36
|
|
|
30
37
|
### Retrieve the product catalog that are currently available.
|
|
31
38
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
39
|
+
```
|
|
40
|
+
$ knife zcloudjp product list (options)
|
|
41
|
+
name os dataset package
|
|
42
|
+
MySQL Small 1 SmartOS sdc:sdc:mysql:1.4.1 Small_1GB
|
|
43
|
+
MySQL Medium 2 SmartOS sdc:sdc:mysql:1.4.1 Medium_2GB
|
|
44
|
+
MySQL Medium 4 SmartOS sdc:sdc:mysql:1.4.1 Medium_4GB
|
|
45
|
+
MySQL Large 1 SmartOS sdc:sdc:mysql:1.4.1 Large_8GB
|
|
46
|
+
Fedora Small 1 Fedora 14 sdc:sdc:fedora-14:1.0.1 Small_1GB
|
|
47
|
+
Fedora Medium 2 Fedora 14 sdc:sdc:fedora-14:1.0.1 Medium_2GB
|
|
48
|
+
Fedora Medium 4 Fedora 14 sdc:sdc:fedora-14:1.0.1 Medium_4GB
|
|
49
|
+
Fedora Large 8 Fedora 14 sdc:sdc:fedora-14:1.0.1 Large_8GB
|
|
50
|
+
CentOS Small 1 CentOS 5.7 sdc:jpc:centos-5.7:1.3.0 Small_1GB
|
|
51
|
+
CentOS Medium 2 CentOS 5.7 sdc:jpc:centos-5.7:1.3.0 Medium_2GB
|
|
52
|
+
CentOS Medium 4 CentOS 5.7 sdc:jpc:centos-5.7:1.3.0 Medium_4GB
|
|
53
|
+
CentOS Large 8 CentOS 5.7 sdc:jpc:centos-5.7:1.3.0 Large_8GB
|
|
54
|
+
Ubuntu Small 1 Ubuntu 10.04 sdc:sdc:ubuntu10.04:0.1.0 Small_1GB
|
|
55
|
+
Ubuntu Medium 2 Ubuntu 10.04 sdc:sdc:ubuntu10.04:0.1.0 Medium_2GB
|
|
56
|
+
Ubuntu Medium 4 Ubuntu 10.04 sdc:sdc:ubuntu10.04:0.1.0 Medium_4GB
|
|
57
|
+
Ubuntu Large 8 Ubuntu 10.04 sdc:sdc:ubuntu10.04:0.1.0 Large_8GB
|
|
58
|
+
SmartOS Plus Small 1 SmartOS sdc:sdc:standard:1.0.7 Small_1GB
|
|
59
|
+
SmartOS Plus Medium 2 SmartOS sdc:sdc:standard:1.0.7 Medium_2GB
|
|
60
|
+
SmartOS Plus Medium 4 SmartOS sdc:sdc:standard:1.0.7 Medium_4GB
|
|
61
|
+
SmartOS Plus Large 8 SmartOS sdc:sdc:standard:1.0.7 Large_8GB
|
|
62
|
+
Hadoop Small 1 SmartOS sdc:sdc:hadoop:1.0.0 Small_1GB
|
|
63
|
+
Hadoop Medium 2 SmartOS sdc:sdc:hadoop:1.0.0 Medium_2GB
|
|
64
|
+
Hadoop Medium 4 SmartOS sdc:sdc:hadoop:1.0.0 Medium_4GB
|
|
65
|
+
Hadoop Large 8 SmartOS sdc:sdc:hadoop:1.0.0 Large_8GB
|
|
66
|
+
Chef Server Small 1 SmartOS sdc:sdc:chefserver:1.0.0 Small_1GB
|
|
67
|
+
Chef Server Medium 2 SmartOS sdc:sdc:chefserver:1.0.0 Medium_2GB
|
|
68
|
+
Chef Server Medium 4 SmartOS sdc:sdc:chefserver:1.0.0 Medium_4GB
|
|
69
|
+
Chef Server Large 8 SmartOS sdc:sdc:chefserver:1.0.0 Large_8GB
|
|
70
|
+
Ubuntu Small 1 Ubuntu 12.04 sdc:jpc:ubuntu-12.04:2.4.1 Small_1GB
|
|
71
|
+
Ubuntu Medium 2 Ubuntu 12.04 sdc:jpc:ubuntu-12.04:2.4.1 Medium_2GB
|
|
72
|
+
Ubuntu Medium 4 Ubuntu 12.04 sdc:jpc:ubuntu-12.04:2.4.1 Medium_4GB
|
|
73
|
+
Ubuntu Medium 8 Ubuntu 12.04 sdc:jpc:ubuntu-12.04:2.4.1 Large_8GB
|
|
74
|
+
Debian Small 1 Debian 6.0.7 sdc:sdc:debian-6.0.7:2.4.1 Small_1GB
|
|
75
|
+
Debian Medium 2 Debian 6.0.7 sdc:sdc:debian-6.0.7:2.4.1 Medium_2GB
|
|
76
|
+
Debian Medium 4 Debian 6.0.7 sdc:sdc:debian-6.0.7:2.4.1 Medium_4GB
|
|
77
|
+
Debian Large 8 Debian 6.0.7 sdc:sdc:debian-6.0.7:2.4.1 Large_8GB
|
|
78
|
+
SmartOS Small 1 SmartOS sdc:sdc:base64:13.1.0 Small_1GB
|
|
79
|
+
SmartOS Medium 2 SmartOS sdc:sdc:base64:13.1.0 Medium_2GB
|
|
80
|
+
SmartOS Medium 4 SmartOS sdc:sdc:base64:13.1.0 Medium_4GB
|
|
81
|
+
SmartOS Large 8 SmartOS sdc:sdc:base64:13.1.0 Large_8GB
|
|
82
|
+
MongoDB Small 1 SmartOS sdc:sdc:mongodb:1.4.5 Small_1GB
|
|
83
|
+
MongoDB Medium 2 SmartOS sdc:sdc:mongodb:1.4.5 Medium_2GB
|
|
84
|
+
MongoDB Medium 4 SmartOS sdc:sdc:mongodb:1.4.5 Medium_4GB
|
|
85
|
+
MongoDB Large 8 SmartOS sdc:sdc:mongodb:1.4.5 Large_8GB
|
|
86
|
+
Node.js Small 1 SmartOS sdc:sdc:nodejs:13.1.0 Small_1GB
|
|
87
|
+
Node.js Medium 2 SmartOS sdc:sdc:nodejs:13.1.0 Medium_2GB
|
|
88
|
+
Node.js Medium 4 SmartOS sdc:sdc:nodejs:13.1.0 Medium_4GB
|
|
89
|
+
Node.js Large 8 SmartOS sdc:sdc:nodejs:13.1.0 Large_8GB
|
|
90
|
+
Percona Small 1 SmartOS sdc:sdc:percona:13.1.0 Small_1GB
|
|
91
|
+
Percona Medium 2 SmartOS sdc:sdc:percona:13.1.0 Medium_2GB
|
|
92
|
+
Percona Medium 4 SmartOS sdc:sdc:percona:13.1.0 Medium_4GB
|
|
93
|
+
Percona Large 8 SmartOS sdc:sdc:percona:13.1.0 Large_8GB
|
|
94
|
+
Riak Small 1 SmartOS sdc:sdc:riak:13.1.0 Small_1GB
|
|
95
|
+
Riak Medium 2 SmartOS sdc:sdc:riak:13.1.0 Medium_2GB
|
|
96
|
+
Riak Medium 4 SmartOS sdc:sdc:riak:13.1.0 Medium_4GB
|
|
97
|
+
Riak Large 1 SmartOS sdc:sdc:riak:13.1.0 Large_8GB
|
|
98
|
+
CentOS Small 1 CentOS 6.4 sdc:sdc:centos-6:2.4.1 Small_1GB
|
|
99
|
+
CentOS Medium 2 CentOS 6.4 sdc:sdc:centos-6:2.4.1 Medium_2GB
|
|
100
|
+
CentOS Medium 4 CentOS 6.4 sdc:sdc:centos-6:2.4.1 Medium_4GB
|
|
101
|
+
CentOS Large 8 CentOS 6.4 sdc:sdc:centos-6:2.4.1 Large_8GB
|
|
102
|
+
```
|
|
61
103
|
|
|
62
104
|
|
|
63
105
|
<pre><code>knife zcloudjp product list (options)
|
data/Rakefile
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
|
|
3
3
|
|
|
4
4
|
require 'rubygems'
|
|
5
|
+
require "bundler/gem_tasks"
|
|
5
6
|
require 'rspec/core/rake_task'
|
|
6
|
-
require 'yard'
|
|
7
7
|
|
|
8
8
|
desc "Run all specs in spec directory"
|
|
9
9
|
RSpec::Core::RakeTask.new(:spec) do |t|
|
|
@@ -11,8 +11,4 @@ RSpec::Core::RakeTask.new(:spec) do |t|
|
|
|
11
11
|
t.rspec_opts = %w[--color]
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
-
YARD::Rake::YardocTask.new do |t|
|
|
15
|
-
t.files = ['lib/**/*.rb']
|
|
16
|
-
end
|
|
17
|
-
|
|
18
14
|
task :default => [:spec]
|
data/knife-zcloudjp.gemspec
CHANGED
|
@@ -16,10 +16,13 @@ Gem::Specification.new do |s|
|
|
|
16
16
|
s.require_paths = ["lib"]
|
|
17
17
|
|
|
18
18
|
s.add_dependency "chef", ">= 0.10.10"
|
|
19
|
-
s.add_dependency "
|
|
19
|
+
s.add_dependency "zcloudjp"
|
|
20
|
+
s.add_dependency "formatador"
|
|
20
21
|
|
|
21
22
|
s.add_development_dependency("rspec", [">= 2.2.0"])
|
|
22
|
-
s.add_development_dependency("yard", [">= 0.5.8"])
|
|
23
|
-
s.add_development_dependency("fuubar", [">= 0.0.1"])
|
|
24
23
|
s.add_development_dependency("rake")
|
|
24
|
+
s.add_development_dependency("fuubar")
|
|
25
|
+
s.add_development_dependency("pry")
|
|
26
|
+
s.add_development_dependency("pry-doc")
|
|
27
|
+
s.add_development_dependency("cane")
|
|
25
28
|
end
|
|
@@ -10,9 +10,8 @@ class Chef
|
|
|
10
10
|
|
|
11
11
|
deps do
|
|
12
12
|
require 'net/ssh/multi'
|
|
13
|
-
require '
|
|
13
|
+
require 'zcloudjp'
|
|
14
14
|
require 'chef/json_compat'
|
|
15
|
-
require 'faraday'
|
|
16
15
|
end
|
|
17
16
|
|
|
18
17
|
option :zcloudjp_api_token,
|
|
@@ -31,10 +30,8 @@ class Chef
|
|
|
31
30
|
|
|
32
31
|
private
|
|
33
32
|
|
|
34
|
-
def
|
|
35
|
-
|
|
36
|
-
faraday.request :url_encoded
|
|
37
|
-
end
|
|
33
|
+
def client
|
|
34
|
+
Zcloudjp::Client.new(:api_key => Chef::Config[:knife][:zcloudjp_api_token])
|
|
38
35
|
end
|
|
39
36
|
|
|
40
37
|
def locate_config_value(key)
|
|
@@ -8,10 +8,7 @@ class Chef
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
deps do
|
|
11
|
-
require 'net/ssh/multi'
|
|
12
|
-
require 'readline'
|
|
13
11
|
require 'chef/json_compat'
|
|
14
|
-
require 'faraday'
|
|
15
12
|
require 'chef/knife/bootstrap'
|
|
16
13
|
Chef::Knife::Bootstrap.load_deps
|
|
17
14
|
end
|
|
@@ -136,27 +133,19 @@ class Chef
|
|
|
136
133
|
ui.error("You have not provided a valid dataset image value. Please note the short option for this value recently changed from '-i' to '-I'.")
|
|
137
134
|
exit 1
|
|
138
135
|
end
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
136
|
+
options = Hash.new()
|
|
137
|
+
options[:dataset] = config[:dataset]
|
|
138
|
+
options[:package] = locate_config_value(:package)
|
|
139
|
+
options[:name] = config[:chef_node_name]
|
|
140
|
+
options[:locale] = "en"
|
|
144
141
|
|
|
145
142
|
Chef::Log.debug("Create machine with parameters below")
|
|
146
|
-
Chef::Log.debug(
|
|
147
|
-
|
|
143
|
+
Chef::Log.debug(options)
|
|
144
|
+
|
|
148
145
|
|
|
149
146
|
locate_config_value(:zcloudjp_api_url)
|
|
150
|
-
connection = Faraday.new(:url => locate_config_value(:zcloudjp_api_url), :ssl => {:verify => false}, :headers => {"User-Agent" => "Knife-Zcloudjp/#{::Knife::Zcloudjp::VERSION}"})
|
|
151
|
-
|
|
152
|
-
response = connection.post do |req|
|
|
153
|
-
req.url '/machines.json'
|
|
154
|
-
req.headers['Content-Type'] = 'application/json'
|
|
155
|
-
req.headers['X-API-KEY'] = Chef::Config[:knife][:zcloudjp_api_token]
|
|
156
|
-
req.body = body.to_json
|
|
157
|
-
end
|
|
158
147
|
|
|
159
|
-
machine =
|
|
148
|
+
machine = client.machine.create(options)
|
|
160
149
|
|
|
161
150
|
msg_pair("ID", machine['id'])
|
|
162
151
|
msg_pair("ip", machine['ips'].last)
|
|
@@ -179,7 +168,6 @@ class Chef
|
|
|
179
168
|
# wait for provision the machine.
|
|
180
169
|
print(".") until verify_ssh_connection(bootstrap_ip_address) {
|
|
181
170
|
sleep @initial_sleep_delay ||= 10
|
|
182
|
-
# puts("done")
|
|
183
171
|
}
|
|
184
172
|
|
|
185
173
|
# for smartdc workaround. check twice.
|
|
@@ -192,15 +180,16 @@ class Chef
|
|
|
192
180
|
}
|
|
193
181
|
|
|
194
182
|
# add name tag for zcloud machine
|
|
183
|
+
# sdc has bug. should update manualy..
|
|
195
184
|
body = Hash.new()
|
|
196
185
|
body["value"] = config[:machine_name]
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
186
|
+
HTTParty.put(
|
|
187
|
+
"#{Chef::Config[:knife][:zcloudjp_api_url]}/machines/#{machine['id']}/name",
|
|
188
|
+
:headers => {
|
|
189
|
+
"X-API-KEY" => Chef::Config[:knife][:zcloudjp_api_token]
|
|
190
|
+
},
|
|
191
|
+
:body => body
|
|
192
|
+
)
|
|
204
193
|
|
|
205
194
|
bootstrap_node(machine, bootstrap_ip_address).run
|
|
206
195
|
end
|
|
@@ -211,7 +200,6 @@ class Chef
|
|
|
211
200
|
bootstrap.config[:run_list] = config[:run_list]
|
|
212
201
|
bootstrap.config[:first_boot_attributes] = config[:first_boot_attributes]
|
|
213
202
|
bootstrap.config[:ssh_user] = config[:ssh_user] || "root"
|
|
214
|
-
# bootstrap.config[:ssh_password] = machine.password
|
|
215
203
|
bootstrap.config[:identity_file] = config[:identity_file]
|
|
216
204
|
bootstrap.config[:host_key_verify] = config[:host_key_verify]
|
|
217
205
|
bootstrap.config[:chef_node_name] = config[:chef_node_name] || server.id
|
|
@@ -10,14 +10,6 @@ class Chef
|
|
|
10
10
|
def run
|
|
11
11
|
Chef::Log.debug("Connect to Z Cloud API #{locate_config_value(:zcloudjp_api_url)}")
|
|
12
12
|
|
|
13
|
-
connection = Faraday.new(:url => locate_config_value(:zcloudjp_api_url), :ssl => {:verify => false}, :headers => {"User-Agent" => "Knife-Zcloudjp/#{::Knife::Zcloudjp::VERSION}"})
|
|
14
|
-
|
|
15
|
-
response = connection.get do |req|
|
|
16
|
-
req.url '/machines.json'
|
|
17
|
-
req.headers['Content-Type'] = 'application/json'
|
|
18
|
-
req.headers['X-API-KEY'] = Chef::Config[:knife][:zcloudjp_api_token]
|
|
19
|
-
end
|
|
20
|
-
|
|
21
13
|
machine_list = [
|
|
22
14
|
ui.color('name', :bold),
|
|
23
15
|
ui.color('id', :bold),
|
|
@@ -27,7 +19,7 @@ class Chef
|
|
|
27
19
|
ui.color('state', :bold),
|
|
28
20
|
]
|
|
29
21
|
|
|
30
|
-
machines =
|
|
22
|
+
machines = client.machine.list
|
|
31
23
|
|
|
32
24
|
machines.map do |machine|
|
|
33
25
|
machine_list << machine["name"].to_s
|
|
@@ -8,10 +8,7 @@ class Chef
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
deps do
|
|
11
|
-
require 'net/ssh/multi'
|
|
12
|
-
require 'readline'
|
|
13
11
|
require 'chef/json_compat'
|
|
14
|
-
require 'faraday'
|
|
15
12
|
end
|
|
16
13
|
|
|
17
14
|
option :machine_uuid,
|
|
@@ -28,8 +25,8 @@ class Chef
|
|
|
28
25
|
option :timeout,
|
|
29
26
|
:short => "-t TIMEOUT_SECONDS",
|
|
30
27
|
:long => "--timeout USERNAME",
|
|
31
|
-
:description => "Set Timeout(seconds). default value is
|
|
32
|
-
:default =>
|
|
28
|
+
:description => "Set Timeout(seconds). default value is 20.",
|
|
29
|
+
:default => 20
|
|
33
30
|
|
|
34
31
|
def run
|
|
35
32
|
$stdout.sync = true
|
|
@@ -38,75 +35,44 @@ class Chef
|
|
|
38
35
|
ui.error("You have not provided a machine uuid. Please note the short option for this value is '-n'.")
|
|
39
36
|
exit 1
|
|
40
37
|
end
|
|
41
|
-
body = Hash.new()
|
|
42
38
|
|
|
43
39
|
Chef::Log.debug("Start machine.")
|
|
44
|
-
Chef::Log.debug(body)
|
|
45
|
-
|
|
46
40
|
|
|
47
|
-
locate_config_value(:zcloudjp_api_url)
|
|
48
|
-
connection = Faraday.new(:url => locate_config_value(:zcloudjp_api_url), :ssl => {:verify => false}, :headers => {"User-Agent" => "Knife-Zcloudjp/#{::Knife::Zcloudjp::VERSION}"})
|
|
49
|
-
|
|
50
|
-
def check_current_state(connection,machine_uuid)
|
|
51
|
-
response = connection.get do |req|
|
|
52
|
-
req.url "/machines/#{machine_uuid}.json"
|
|
53
|
-
req.headers['Content-Type'] = 'application/json'
|
|
54
|
-
req.headers['X-API-KEY'] = Chef::Config[:knife][:zcloudjp_api_token]
|
|
55
|
-
end
|
|
56
41
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
when 200
|
|
60
|
-
# do nothing.
|
|
61
|
-
when 404
|
|
62
|
-
ui.warn("The machine #{config[:machine_uuid]} was not found.")
|
|
63
|
-
exit
|
|
64
|
-
else
|
|
65
|
-
ui.fatal("Exit", "Unknown Error occured in API response.")
|
|
66
|
-
exit
|
|
67
|
-
end
|
|
42
|
+
locate_config_value(:zcloudjp_api_url)
|
|
43
|
+
machine = client.machine.show(:id => config[:machine_uuid])
|
|
68
44
|
|
|
69
|
-
|
|
70
|
-
|
|
45
|
+
## Exit if missing
|
|
46
|
+
if machine[:error]
|
|
47
|
+
ui.warn("The machine #{config[:machine_uuid]} was not found.")
|
|
48
|
+
exit
|
|
71
49
|
end
|
|
72
50
|
|
|
73
|
-
## Exit if already
|
|
74
|
-
if
|
|
51
|
+
## Exit if already running.
|
|
52
|
+
if machine[:state] == "running" then
|
|
75
53
|
ui.info("The machine #{config[:machine_uuid]} is already running.")
|
|
76
54
|
exit
|
|
77
55
|
end
|
|
78
56
|
|
|
79
57
|
# Start Machine
|
|
80
|
-
|
|
81
|
-
req.url "/machines/#{config[:machine_uuid]}/start.json"
|
|
82
|
-
req.headers['Content-Type'] = 'application/json'
|
|
83
|
-
req.headers['X-API-KEY'] = Chef::Config[:knife][:zcloudjp_api_token]
|
|
84
|
-
req.body = body.to_json
|
|
85
|
-
end
|
|
58
|
+
machine.start
|
|
86
59
|
|
|
87
60
|
## Wait
|
|
88
61
|
ui.info("Waiting state of machine changed to running... (Timeout: #{config[:timeout]} seconds)")
|
|
89
62
|
config[:timeout].to_i.times do |idx|
|
|
90
|
-
if
|
|
63
|
+
if machine.reload[:state] == "running" then
|
|
64
|
+
puts ''
|
|
91
65
|
break
|
|
92
|
-
elsif (idx +
|
|
66
|
+
elsif (idx + 2) == config[:timeout].to_i
|
|
93
67
|
ui.warn("Timed out. Please check later.")
|
|
94
68
|
exit 1
|
|
95
69
|
else
|
|
96
|
-
|
|
70
|
+
print '.'
|
|
71
|
+
sleep 2
|
|
97
72
|
end
|
|
98
73
|
end
|
|
99
74
|
|
|
100
75
|
## print current status
|
|
101
|
-
response = connection.get do |req|
|
|
102
|
-
req.url "/machines/#{config[:machine_uuid]}.json"
|
|
103
|
-
req.headers['Content-Type'] = 'application/json'
|
|
104
|
-
req.headers['X-API-KEY'] = Chef::Config[:knife][:zcloudjp_api_token]
|
|
105
|
-
req.body = body.to_json
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
machine = JSON.parse(response.body, :symbolized_names =>true )
|
|
109
|
-
|
|
110
76
|
msg_pair("ID", machine['id'])
|
|
111
77
|
msg_pair("ip", machine['ips'].last)
|
|
112
78
|
msg_pair("type", machine['type'])
|
|
@@ -8,10 +8,7 @@ class Chef
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
deps do
|
|
11
|
-
require 'net/ssh/multi'
|
|
12
|
-
require 'readline'
|
|
13
11
|
require 'chef/json_compat'
|
|
14
|
-
require 'faraday'
|
|
15
12
|
end
|
|
16
13
|
|
|
17
14
|
option :machine_uuid,
|
|
@@ -28,8 +25,8 @@ class Chef
|
|
|
28
25
|
option :timeout,
|
|
29
26
|
:short => "-t TIMEOUT_SECONDS",
|
|
30
27
|
:long => "--timeout USERNAME",
|
|
31
|
-
:description => "Set Timeout(seconds). default value is
|
|
32
|
-
:default =>
|
|
28
|
+
:description => "Set Timeout(seconds). default value is 20.",
|
|
29
|
+
:default => 20
|
|
33
30
|
|
|
34
31
|
def run
|
|
35
32
|
$stdout.sync = true
|
|
@@ -38,75 +35,43 @@ class Chef
|
|
|
38
35
|
ui.error("You have not provided a machine uuid. Please note the short option for this value is '-n'.")
|
|
39
36
|
exit 1
|
|
40
37
|
end
|
|
41
|
-
body = Hash.new()
|
|
42
38
|
|
|
43
39
|
Chef::Log.debug("Stop machine.")
|
|
44
|
-
Chef::Log.debug(body)
|
|
45
|
-
|
|
46
40
|
|
|
47
41
|
locate_config_value(:zcloudjp_api_url)
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
def check_current_state(connection,machine_uuid)
|
|
51
|
-
response = connection.get do |req|
|
|
52
|
-
req.url "/machines/#{machine_uuid}.json"
|
|
53
|
-
req.headers['Content-Type'] = 'application/json'
|
|
54
|
-
req.headers['X-API-KEY'] = Chef::Config[:knife][:zcloudjp_api_token]
|
|
55
|
-
end
|
|
42
|
+
machine = client.machine.show(:id => config[:machine_uuid])
|
|
56
43
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
when 404
|
|
62
|
-
ui.warn("The machine #{config[:machine_uuid]} was not found.")
|
|
63
|
-
exit
|
|
64
|
-
else
|
|
65
|
-
ui.fatal("Exit", "Unknown Error occured in API response.")
|
|
66
|
-
exit
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
machine = JSON.parse(response.body, :symbolized_names =>true )
|
|
70
|
-
machine['state']
|
|
44
|
+
## Exit if missing
|
|
45
|
+
if machine[:error]
|
|
46
|
+
ui.warn("The machine #{config[:machine_uuid]} was not found.")
|
|
47
|
+
exit
|
|
71
48
|
end
|
|
72
49
|
|
|
73
50
|
## Exit if already stopped.
|
|
74
|
-
if
|
|
51
|
+
if machine[:state] == "stopped" then
|
|
75
52
|
ui.info("The machine #{config[:machine_uuid]} already stopped.")
|
|
76
53
|
exit
|
|
77
54
|
end
|
|
78
55
|
|
|
79
56
|
# Stop Machine
|
|
80
|
-
|
|
81
|
-
req.url "/machines/#{config[:machine_uuid]}/stop.json"
|
|
82
|
-
req.headers['Content-Type'] = 'application/json'
|
|
83
|
-
req.headers['X-API-KEY'] = Chef::Config[:knife][:zcloudjp_api_token]
|
|
84
|
-
req.body = body.to_json
|
|
85
|
-
end
|
|
57
|
+
machine.stop
|
|
86
58
|
|
|
87
59
|
## Wait
|
|
88
60
|
ui.info("Waiting state of machine changed to stopped... (Timeout: #{config[:timeout]} seconds)")
|
|
89
61
|
config[:timeout].to_i.times do |idx|
|
|
90
|
-
if
|
|
62
|
+
if machine.reload[:state] == "stopped" then
|
|
63
|
+
puts ''
|
|
91
64
|
break
|
|
92
|
-
elsif (idx +
|
|
65
|
+
elsif (idx + 2) == config[:timeout].to_i
|
|
93
66
|
ui.warn("Timed out. Please check later.")
|
|
94
67
|
exit 1
|
|
95
68
|
else
|
|
96
|
-
|
|
69
|
+
print '.'
|
|
70
|
+
sleep 2
|
|
97
71
|
end
|
|
98
72
|
end
|
|
99
73
|
|
|
100
74
|
## print current status
|
|
101
|
-
response = connection.get do |req|
|
|
102
|
-
req.url "/machines/#{config[:machine_uuid]}.json"
|
|
103
|
-
req.headers['Content-Type'] = 'application/json'
|
|
104
|
-
req.headers['X-API-KEY'] = Chef::Config[:knife][:zcloudjp_api_token]
|
|
105
|
-
req.body = body.to_json
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
machine = JSON.parse(response.body, :symbolized_names =>true )
|
|
109
|
-
|
|
110
75
|
msg_pair("ID", machine['id'])
|
|
111
76
|
msg_pair("ip", machine['ips'].last)
|
|
112
77
|
msg_pair("type", machine['type'])
|
|
@@ -10,13 +10,11 @@ class Chef
|
|
|
10
10
|
|
|
11
11
|
def run
|
|
12
12
|
Chef::Log.debug("Connect to Z Cloud API #{locate_config_value(:zcloudjp_api_url)}")
|
|
13
|
-
connection = Faraday.new(:url => locate_config_value(:zcloudjp_api_url), :ssl => {:verify => false}, :headers => {"User-Agent" => "Knife-Zcloudjp/#{::Knife::Zcloudjp::VERSION}"})
|
|
14
13
|
|
|
15
|
-
response =
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
end
|
|
14
|
+
response = HTTParty.get(
|
|
15
|
+
"#{Chef::Config[:knife][:zcloudjp_api_url]}/products.json",
|
|
16
|
+
:headers => {"X-API-KEY" => Chef::Config[:knife][:zcloudjp_api_token]}
|
|
17
|
+
)
|
|
20
18
|
|
|
21
19
|
products = JSON.parse(response.body)
|
|
22
20
|
|
data/lib/knife-zcloudjp.rb
CHANGED
metadata
CHANGED
|
@@ -1,97 +1,139 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: knife-zcloudjp
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- sawanoboly
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2014-02-10 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: chef
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- -
|
|
17
|
+
- - '>='
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
19
|
version: 0.10.10
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
|
-
- -
|
|
24
|
+
- - '>='
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: 0.10.10
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
|
-
name:
|
|
28
|
+
name: zcloudjp
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- -
|
|
31
|
+
- - '>='
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
33
|
version: '0'
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
|
-
- -
|
|
38
|
+
- - '>='
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '0'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: formatador
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - '>='
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '0'
|
|
48
|
+
type: :runtime
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - '>='
|
|
39
53
|
- !ruby/object:Gem::Version
|
|
40
54
|
version: '0'
|
|
41
55
|
- !ruby/object:Gem::Dependency
|
|
42
56
|
name: rspec
|
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
|
44
58
|
requirements:
|
|
45
|
-
- -
|
|
59
|
+
- - '>='
|
|
46
60
|
- !ruby/object:Gem::Version
|
|
47
61
|
version: 2.2.0
|
|
48
62
|
type: :development
|
|
49
63
|
prerelease: false
|
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
65
|
requirements:
|
|
52
|
-
- -
|
|
66
|
+
- - '>='
|
|
53
67
|
- !ruby/object:Gem::Version
|
|
54
68
|
version: 2.2.0
|
|
55
69
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
name:
|
|
70
|
+
name: rake
|
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
|
58
72
|
requirements:
|
|
59
|
-
- -
|
|
73
|
+
- - '>='
|
|
60
74
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: 0
|
|
75
|
+
version: '0'
|
|
62
76
|
type: :development
|
|
63
77
|
prerelease: false
|
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
79
|
requirements:
|
|
66
|
-
- -
|
|
80
|
+
- - '>='
|
|
67
81
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: 0
|
|
82
|
+
version: '0'
|
|
69
83
|
- !ruby/object:Gem::Dependency
|
|
70
84
|
name: fuubar
|
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
|
72
86
|
requirements:
|
|
73
|
-
- -
|
|
87
|
+
- - '>='
|
|
74
88
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: 0
|
|
89
|
+
version: '0'
|
|
76
90
|
type: :development
|
|
77
91
|
prerelease: false
|
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
93
|
requirements:
|
|
80
|
-
- -
|
|
94
|
+
- - '>='
|
|
81
95
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: 0
|
|
96
|
+
version: '0'
|
|
83
97
|
- !ruby/object:Gem::Dependency
|
|
84
|
-
name:
|
|
98
|
+
name: pry
|
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
|
100
|
+
requirements:
|
|
101
|
+
- - '>='
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
version: '0'
|
|
104
|
+
type: :development
|
|
105
|
+
prerelease: false
|
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
+
requirements:
|
|
108
|
+
- - '>='
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: '0'
|
|
111
|
+
- !ruby/object:Gem::Dependency
|
|
112
|
+
name: pry-doc
|
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
|
114
|
+
requirements:
|
|
115
|
+
- - '>='
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: '0'
|
|
118
|
+
type: :development
|
|
119
|
+
prerelease: false
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
requirements:
|
|
122
|
+
- - '>='
|
|
123
|
+
- !ruby/object:Gem::Version
|
|
124
|
+
version: '0'
|
|
125
|
+
- !ruby/object:Gem::Dependency
|
|
126
|
+
name: cane
|
|
85
127
|
requirement: !ruby/object:Gem::Requirement
|
|
86
128
|
requirements:
|
|
87
|
-
- -
|
|
129
|
+
- - '>='
|
|
88
130
|
- !ruby/object:Gem::Version
|
|
89
131
|
version: '0'
|
|
90
132
|
type: :development
|
|
91
133
|
prerelease: false
|
|
92
134
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
135
|
requirements:
|
|
94
|
-
- -
|
|
136
|
+
- - '>='
|
|
95
137
|
- !ruby/object:Gem::Version
|
|
96
138
|
version: '0'
|
|
97
139
|
description: Knife(Opscode Chef) plugin for Z Cloud(Powered by Joyent).
|
|
@@ -132,17 +174,17 @@ require_paths:
|
|
|
132
174
|
- lib
|
|
133
175
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
134
176
|
requirements:
|
|
135
|
-
- -
|
|
177
|
+
- - '>='
|
|
136
178
|
- !ruby/object:Gem::Version
|
|
137
179
|
version: '0'
|
|
138
180
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
139
181
|
requirements:
|
|
140
|
-
- -
|
|
182
|
+
- - '>='
|
|
141
183
|
- !ruby/object:Gem::Version
|
|
142
184
|
version: '0'
|
|
143
185
|
requirements: []
|
|
144
186
|
rubyforge_project:
|
|
145
|
-
rubygems_version: 2.
|
|
187
|
+
rubygems_version: 2.1.11
|
|
146
188
|
signing_key:
|
|
147
189
|
specification_version: 4
|
|
148
190
|
summary: Knife(Opscode Chef) plugin for Z Cloud(Powered by Joyent).
|