conoha 0.7.2 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/README.md +45 -0
- data/exe/conoha +20 -1
- data/lib/conoha.rb +71 -2
- data/lib/conoha/util.rb +5 -29
- data/lib/conoha/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 151619e4a592951d23e53b1ce1f62226107120f8
|
4
|
+
data.tar.gz: 32f638a9b154a366c300d37d80f15ecfe74e9dc9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 744f04a08ba3d8670fdbb3660a8ca5ceab22a5ff074b93225bdc70638170439fa299c1861f3c449f2dc031b70ba9c826583491d7b41caea8063f09302d4e2a80
|
7
|
+
data.tar.gz: 535a1f635648db1f8ff79a85b40ab64dc2bc4f6ef7e247869b5b4415db384d2c3063047ce4b74410718cd3d40f26f595a4b421ef4216950f033cfd44d50f8f35
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -171,6 +171,51 @@ conoharant shutdown
|
|
171
171
|
conoharant destroy
|
172
172
|
```
|
173
173
|
|
174
|
+
## Experimental feature: multiple accounts management
|
175
|
+
|
176
|
+
Edit `~/.conoha-config.json` like following:
|
177
|
+
|
178
|
+
```sh
|
179
|
+
{
|
180
|
+
"username": "gncu123456789",
|
181
|
+
"password": "your-password",
|
182
|
+
"tenant_id": "0123456789abcdef",
|
183
|
+
"public_key": "your-registered-public-key-name",
|
184
|
+
"accounts": {
|
185
|
+
"user1": {
|
186
|
+
"username": "gncu123456789",
|
187
|
+
"password": "your-password",
|
188
|
+
"tenant_id": "0123456789abcdef",
|
189
|
+
"public_key": "your-registered-public-key-name"
|
190
|
+
},
|
191
|
+
"user2": {
|
192
|
+
"username": "gncu123456790",
|
193
|
+
"password": "your-user2-password",
|
194
|
+
"tenant_id": "0123456789abcdf0",
|
195
|
+
"public_key": "your-registered-public-key-name"
|
196
|
+
}
|
197
|
+
}
|
198
|
+
}
|
199
|
+
```
|
200
|
+
|
201
|
+
```sh
|
202
|
+
conoha authenticate user1
|
203
|
+
|
204
|
+
conoha whoami
|
205
|
+
#=> user1
|
206
|
+
|
207
|
+
conoha create ubuntu g-1gb
|
208
|
+
# Create VM of user1
|
209
|
+
|
210
|
+
conoha authenticate user2
|
211
|
+
|
212
|
+
conoha whoami
|
213
|
+
#=> user2
|
214
|
+
|
215
|
+
conoha create ubuntu g-1gb
|
216
|
+
# Create VM of user2
|
217
|
+
```
|
218
|
+
|
174
219
|
## License
|
175
220
|
|
176
221
|
[MIT](LICENSE.txt)
|
data/exe/conoha
CHANGED
@@ -35,13 +35,32 @@ when 'version', '--version', '-v'
|
|
35
35
|
puts ConohaVersion::ITSELF
|
36
36
|
when 'authenticate'
|
37
37
|
begin
|
38
|
-
|
38
|
+
if ARGV.size == 0
|
39
|
+
Conoha.authenticate!
|
40
|
+
else
|
41
|
+
Conoha.authenticate_user! ARGV.first
|
42
|
+
end
|
39
43
|
rescue => e
|
44
|
+
STDERR.puts e
|
40
45
|
STDERR.puts "Failed to authenticate."
|
41
46
|
STDERR.puts "Retry after modifying \"~/.conoha-config.json\"."
|
42
47
|
exit 1
|
43
48
|
end
|
44
49
|
puts 'Succeeded!'
|
50
|
+
when 'whoami'
|
51
|
+
result = Conoha.whoami
|
52
|
+
if result.class == Fixnum
|
53
|
+
case result
|
54
|
+
when 1
|
55
|
+
puts "\"accounts\" doesn't exist in \"~/.conoha-config.json\"."
|
56
|
+
when 2
|
57
|
+
puts "\"accounts\" doesn't have \"#{Conoha.username}\"."
|
58
|
+
else
|
59
|
+
puts "fixnum else"
|
60
|
+
end
|
61
|
+
else
|
62
|
+
puts result
|
63
|
+
end
|
45
64
|
when 'vpslist'
|
46
65
|
pp Conoha.vps_list
|
47
66
|
when 'status'
|
data/lib/conoha.rb
CHANGED
@@ -26,6 +26,57 @@ class Conoha
|
|
26
26
|
save_config!
|
27
27
|
end
|
28
28
|
|
29
|
+
def self.authenticate_user!(user_id)
|
30
|
+
uri = 'https://identity.tyo1.conoha.io/v2.0/tokens'
|
31
|
+
|
32
|
+
credential = @@accounts[user_id]
|
33
|
+
if credential.nil?
|
34
|
+
raise StandardError.new "User \"#{user_id}\" doesn't exist."
|
35
|
+
end
|
36
|
+
|
37
|
+
payload = {
|
38
|
+
auth: {
|
39
|
+
passwordCredentials: {
|
40
|
+
username: credential['username'],
|
41
|
+
password: credential['password']
|
42
|
+
},
|
43
|
+
tenantId: credential['tenant_id']
|
44
|
+
}
|
45
|
+
}
|
46
|
+
res = https_post uri, payload, nil
|
47
|
+
if res.code == '401'
|
48
|
+
raise StandardError.new 'Authentication failure'
|
49
|
+
end
|
50
|
+
|
51
|
+
@@username = credential['username']
|
52
|
+
@@password = credential['password']
|
53
|
+
@@tenant_id = credential['tenant_id']
|
54
|
+
@@public_key = credential['public_key']
|
55
|
+
@@authtoken = JSON.parse(res.body)["access"]["token"]["id"]
|
56
|
+
save_config!
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.username
|
60
|
+
@@username
|
61
|
+
end
|
62
|
+
|
63
|
+
# @return [Fixnum|String]
|
64
|
+
# Fixnum:
|
65
|
+
# 1: conoha-config.json doesn't have "accounts" key
|
66
|
+
# 2: "accounts" doesn't have deafult "username"
|
67
|
+
# String: "id" of "accounts".
|
68
|
+
def self.whoami
|
69
|
+
if @@accounts.nil?
|
70
|
+
1
|
71
|
+
else
|
72
|
+
if result = @@accounts.find { |k, v| v['username'] == @@username }
|
73
|
+
result.first
|
74
|
+
else
|
75
|
+
2
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
29
80
|
def self.servers
|
30
81
|
uri = "https://compute.tyo1.conoha.io/v2/#{tenant_id}/servers"
|
31
82
|
res = https_get uri, authtoken
|
@@ -36,12 +87,16 @@ class Conoha
|
|
36
87
|
servers.map { |e| e["id"] }
|
37
88
|
end
|
38
89
|
|
90
|
+
# @raise [StandardError]
|
91
|
+
# when "os" doesn't exist in image_tag_dictionary
|
92
|
+
# when "image_tag" doesn't exist in images
|
39
93
|
def self.create(os, ram)
|
94
|
+
image_ref = image_ref_from_image_tag(image_tag_dictionary(os))
|
40
95
|
uri = "https://compute.tyo1.conoha.io/v2/#{tenant_id}/servers"
|
41
96
|
payload = {
|
42
97
|
server: {
|
43
98
|
adminPass: randstr,
|
44
|
-
imageRef:
|
99
|
+
imageRef: image_ref,
|
45
100
|
flavorRef: flavor_ref(ram),
|
46
101
|
key_name: public_key,
|
47
102
|
security_groups: [{name: 'default'}, {name: 'gncs-ipv4-all'}],
|
@@ -52,10 +107,11 @@ class Conoha
|
|
52
107
|
end
|
53
108
|
|
54
109
|
def self.rebuild(server_id, os)
|
110
|
+
image_ref_from_image_tag(image_tag_dictionary(os))
|
55
111
|
uri = "https://compute.tyo1.conoha.io/v2/#{tenant_id}/servers/#{server_id}/action"
|
56
112
|
payload = {
|
57
113
|
rebuild: {
|
58
|
-
imageRef:
|
114
|
+
imageRef: image_ref,
|
59
115
|
adminPass: randstr,
|
60
116
|
key_name: public_key
|
61
117
|
}
|
@@ -167,6 +223,7 @@ EOS
|
|
167
223
|
@@tenant_id = config["tenant_id"]
|
168
224
|
@@public_key = config["public_key"]
|
169
225
|
@@authtoken = config["authtoken"]
|
226
|
+
@@accounts = config["accounts"]
|
170
227
|
@@config_loaded = true
|
171
228
|
end
|
172
229
|
end
|
@@ -178,6 +235,7 @@ EOS
|
|
178
235
|
tenant_id: @@tenant_id,
|
179
236
|
public_key: @@public_key,
|
180
237
|
authtoken: @@authtoken,
|
238
|
+
accounts: @@accounts
|
181
239
|
})
|
182
240
|
File.open(config_file_path, 'w') do |f|
|
183
241
|
f.write s
|
@@ -196,6 +254,17 @@ EOS
|
|
196
254
|
@@public_key
|
197
255
|
end
|
198
256
|
|
257
|
+
# @return [String] server ID (UUID)
|
258
|
+
# @param [String] image_tag e.g. "vmi-centos-7-amd64"
|
259
|
+
# @raise [StandardError] when image_tag doesn't exist in images
|
260
|
+
def self.image_ref_from_image_tag(image_tag)
|
261
|
+
if image = images.find { |e| e[0] == image_tag }
|
262
|
+
image[1]
|
263
|
+
else
|
264
|
+
raise StandardError.new "Tag \"#{tag}\" doesn't exist in image list."
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
199
268
|
def self.flavor_ref(ram)
|
200
269
|
dictionary = {
|
201
270
|
'g-1gb' => '7eea7469-0d85-4f82-8050-6ae742394681',
|
data/lib/conoha/util.rb
CHANGED
@@ -61,30 +61,6 @@ def ipv4(ip_address)
|
|
61
61
|
ip_address.select { |e| e =~ /\d+\.\d+\.\d+\.\d+/ }.first
|
62
62
|
end
|
63
63
|
|
64
|
-
# @return [String] UUID of image
|
65
|
-
# @params [String] os OS name
|
66
|
-
# @raise [StandardError] When the OS name isn't contained.
|
67
|
-
def image_ref_from_os(os)
|
68
|
-
dictionary = {
|
69
|
-
'ubuntu' => '793be3e1-3c33-4ab3-9779-f4098ea90eb5', # Ubuntu 14.04 amd64
|
70
|
-
'debian' => 'c14d5dd5-debc-464c-9cc3-ada6e48f5d0c', # Debian 8 amd64
|
71
|
-
'fedora23' => 'ed6364b8-9fb2-479c-a5a8-bde9ba1101f3', # Fedora 23 amd64
|
72
|
-
'centos67' => 'cd13a8b9-6b57-467b-932e-eee5edcd8d6c', # CentOS 6.7
|
73
|
-
'centos72' => 'e141fc06-632e-42a9-9c2d-eec9201427ec', # CentOS 7.2
|
74
|
-
'arch' => 'f5e5b475-ebec-4973-99c7-bc8add5d16c4', # Arch
|
75
|
-
}
|
76
|
-
if dictionary.keys.include? os
|
77
|
-
dictionary[os]
|
78
|
-
else
|
79
|
-
raise StandardError.new <<EOS
|
80
|
-
"#{os}" doesn't exist.
|
81
|
-
Select os name from the following list:
|
82
|
-
|
83
|
-
#{dictionary.keys.join("\n")}
|
84
|
-
EOS
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
64
|
# @return [String] Image name tag
|
89
65
|
# @params [String] os OS name
|
90
66
|
# @raise [StandardError] When the OS name isn't included in the dictionary.
|
@@ -96,17 +72,17 @@ def image_tag_dictionary(os)
|
|
96
72
|
'centos67' => 'vmi-centos-6.7-amd64', # CentOS 6.7
|
97
73
|
'centos72' => 'vmi-centos-7.2-amd64', # CentOS 7.2
|
98
74
|
'arch' => 'vmi-arch-amd64', # Arch
|
75
|
+
'opensuse' => 'vmi-opensuse-42.1-amd64', # openSUSE
|
76
|
+
'openbsd' => 'vmi-openbsd-5.8-amd64', # OpenBSD
|
77
|
+
'netbsd' => 'vmi-netbsd-7.0-amd64', # NetBSD
|
78
|
+
'freebsd' => 'vmi-freebsd-10.1-x86_64', # FreeBSD
|
99
79
|
}
|
100
80
|
|
101
|
-
# 'opensuse' => 'vmi-opensuse-42.1-amd64' # openSUSE
|
102
|
-
# 'openbsd' => 'vmi-openbsd-5.8-amd64', # OpenBSD
|
103
|
-
# 'netbsd' => 'vmi-netbsd-7.0-amd64', # NetBSD
|
104
|
-
# 'freebsd' => 'vmi-freebsd-10.1-x86_64', # FreeBSD
|
105
|
-
|
106
81
|
if dictionary.keys.include? os
|
107
82
|
dictionary[os]
|
108
83
|
else
|
109
84
|
raise StandardError.new <<EOS
|
85
|
+
"#{os}" doesn't exist.
|
110
86
|
Select os name from the following list:
|
111
87
|
|
112
88
|
#{dictionary.keys.join("\n")}
|
data/lib/conoha/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: conoha
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ka
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-06-
|
11
|
+
date: 2016-06-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|