didata_cloud_sdk 0.3.2 → 0.3.3
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 +4 -4
- data/.gitignore +2 -0
- data/README.md +6 -8
- data/examples/README.md +4 -0
- data/examples/list_networks.rb +14 -0
- data/examples/list_servers_in_network.rb +42 -0
- data/examples/make_servers_in_new_network.rb +88 -0
- data/examples/start_all_servers_in_network.rb +46 -0
- data/examples/util.rb +20 -0
- data/lib/ddcloud/client.rb +6 -3
- data/lib/ddcloud/connection.rb +7 -7
- data/lib/ddcloud/version.rb +1 -1
- data/lib/ddcloud.rb +14 -14
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 09bfcaf3290960d982e1ce9be7491bcad842eb37
|
4
|
+
data.tar.gz: 253cb39dd854f027b2cdddf031998dc8911a340c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ea2654971386c74802c6ce37fa38591399d50cdfdb93a4e992ff79a08dfe02eb8e52bbb2c04fdbe8e3f03b847f8bb4338c8396b4d1d1e09373318d08911f7c15
|
7
|
+
data.tar.gz: d0d71103156edfc84f510a9fb0063c23588b49675ef7217c132618504c4e7b18cf4a6fcd8f6f0fae5bfca61e9c01400a0fdac6b83d51e94f2a6187a292318960
|
data/README.md
CHANGED
@@ -6,7 +6,7 @@ Dimension Data Cloud API gem designed for easy extensibility.
|
|
6
6
|
|
7
7
|
either install as a gem via Bundler
|
8
8
|
```
|
9
|
-
gem install
|
9
|
+
gem install didata_cloud_sdk
|
10
10
|
```
|
11
11
|
|
12
12
|
__or__
|
@@ -14,19 +14,20 @@ __or__
|
|
14
14
|
clone into your project, install gems from `opsource.gemspec` and do:
|
15
15
|
|
16
16
|
```
|
17
|
-
$: << '
|
18
|
-
require '
|
17
|
+
$: << 'ddcloud/lib'
|
18
|
+
require 'ddcloud.rb'
|
19
19
|
```
|
20
20
|
|
21
21
|
### Usage
|
22
22
|
|
23
23
|
```
|
24
|
+
require "ddcloud"
|
24
25
|
api_base = "https://cloudapi.nttamerica.com/oec/0.9"
|
25
26
|
dev_org_id = 'my-super-secret-org-numbersandletters'
|
26
27
|
dev_user = 'me'
|
27
28
|
dev_password = 'very secret'
|
28
29
|
|
29
|
-
c =
|
30
|
+
c = DDcloud::Client.new(api_base, dev_org_id, dev_user, dev_password)
|
30
31
|
|
31
32
|
server = c.server.list(name: 'myfavoritevm')
|
32
33
|
pp c.server.show_with_disks(server.network_id, server.id)
|
@@ -55,13 +56,10 @@ api/vip.rb
|
|
55
56
|
|
56
57
|
See `doc` folder for API info needed for adding you own methods. `api/core.rb` is the plumbing.
|
57
58
|
|
58
|
-
See `lib/
|
59
|
+
See `lib/ddcloud/api` folder for examples how to add additional endpoints.
|
59
60
|
|
60
61
|
Inspired by https://github.com/udayakiran/opsource.
|
61
62
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
63
|
### TODO
|
66
64
|
|
67
65
|
Write some tests. Make pull requests.
|
data/examples/README.md
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
|
4
|
+
require "ddcloud"
|
5
|
+
require "pp"
|
6
|
+
require "optparse"
|
7
|
+
|
8
|
+
require "./credentials.rb"
|
9
|
+
require "./util.rb"
|
10
|
+
|
11
|
+
|
12
|
+
c = DDcloud::Client.new @credentials[:url], @credentials[:org_id], @credentials[:user], @credentials[:pass]
|
13
|
+
|
14
|
+
pp c.network.list
|
@@ -0,0 +1,42 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
|
4
|
+
require "ddcloud"
|
5
|
+
require "pp"
|
6
|
+
require "optparse"
|
7
|
+
|
8
|
+
require "./credentials.rb"
|
9
|
+
|
10
|
+
options = {}
|
11
|
+
|
12
|
+
OptionParser.new do |opts|
|
13
|
+
opts.banner = "Usage: example.rb [options]"
|
14
|
+
|
15
|
+
opts.on("-n", "--network_name name", "Name of the network") do |n|
|
16
|
+
options[:name] = n
|
17
|
+
end
|
18
|
+
opts.on_tail("-h", "--help", "Show this message") do
|
19
|
+
puts opts
|
20
|
+
exit
|
21
|
+
end
|
22
|
+
end.parse!
|
23
|
+
|
24
|
+
if not options[:name]
|
25
|
+
puts "Please specify the network name with -n"
|
26
|
+
puts "For help, use -h"
|
27
|
+
exit
|
28
|
+
end
|
29
|
+
|
30
|
+
c = DDcloud::Client.new @credentials[:url], @credentials[:org_id], @credentials[:user], @credentials[:pass]
|
31
|
+
|
32
|
+
network = c.network.show_by_name options[:name]
|
33
|
+
|
34
|
+
if not network
|
35
|
+
puts "A network with this name does not exist"
|
36
|
+
exit
|
37
|
+
end
|
38
|
+
|
39
|
+
network_id = network[:id]
|
40
|
+
|
41
|
+
pp "servers"
|
42
|
+
pp c.server.list(network_id: network_id)
|
@@ -0,0 +1,88 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
|
4
|
+
require "ddcloud"
|
5
|
+
require "pp"
|
6
|
+
require "optparse"
|
7
|
+
|
8
|
+
require "./credentials.rb"
|
9
|
+
|
10
|
+
def diff_id_hashes(h1, h2)
|
11
|
+
a1 = h1.map { |e| e[:id] }
|
12
|
+
a2 = h2.map { |e| e[:id] }
|
13
|
+
a2 - a1
|
14
|
+
end
|
15
|
+
|
16
|
+
def block_until_server_normal(c, name)
|
17
|
+
while true do
|
18
|
+
if c.server.list(name: name)[:state] == "NORMAL"
|
19
|
+
break
|
20
|
+
end
|
21
|
+
sleep 1
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def log(string)
|
26
|
+
time = DateTime.now.strftime("%H:%M")
|
27
|
+
puts "#{time} -> #{string}"
|
28
|
+
end
|
29
|
+
|
30
|
+
options = {}
|
31
|
+
|
32
|
+
OptionParser.new do |opts|
|
33
|
+
opts.banner = "Usage: example.rb [options]"
|
34
|
+
|
35
|
+
opts.on("-n", "--number NUMBER", "Number of hosts") do |n|
|
36
|
+
options[:number] = n.to_i
|
37
|
+
end
|
38
|
+
opts.on("-a", "--network_name name", "Name of the network to be created") do |n|
|
39
|
+
options[:name] = n
|
40
|
+
end
|
41
|
+
opts.on_tail("-h", "--help", "Show this message") do
|
42
|
+
puts opts
|
43
|
+
exit
|
44
|
+
end
|
45
|
+
end.parse!
|
46
|
+
|
47
|
+
if not options[:number]
|
48
|
+
puts "Please specify the number of machines to create with -n"
|
49
|
+
puts "For help, use -h"
|
50
|
+
exit
|
51
|
+
end
|
52
|
+
if not options[:name]
|
53
|
+
puts "Please specify the network name with -a"
|
54
|
+
puts "For help, use -h"
|
55
|
+
exit
|
56
|
+
end
|
57
|
+
|
58
|
+
c = DDcloud::Client.new @credentials[:url], @credentials[:org_id], @credentials[:user], @credentials[:pass]
|
59
|
+
|
60
|
+
c.network.create options[:name], "Automatically generated network"
|
61
|
+
|
62
|
+
network_id = c.network.show_by_name(options[:name])[:id]
|
63
|
+
image_id = "d4ed6d40-e2f0-11e2-84e5-180373fb68df" #default image id
|
64
|
+
|
65
|
+
|
66
|
+
before = c.server.list(network_id: network_id)
|
67
|
+
(0...options[:number]).each do |n|
|
68
|
+
c.server.create "autoserver-#{n+1}", "Automatically generated server", network_id, image_id
|
69
|
+
end
|
70
|
+
(0...options[:number]).each do |n|
|
71
|
+
block_until_server_normal c, "autoserver-#{n+1}"
|
72
|
+
log "autoserver-#{n+1} started"
|
73
|
+
end
|
74
|
+
after = c.server.list(network_id: network_id)
|
75
|
+
created_servers = diff_id_hashes(before, after)
|
76
|
+
log "Created: #{created_servers.to_s}"
|
77
|
+
|
78
|
+
#create acl rule
|
79
|
+
c.network.aclrule_create(network_id, "allow ssh", 112, true, "TCP", 22, true)
|
80
|
+
|
81
|
+
#nat the servers so we can make our changes
|
82
|
+
created_servers.each do |server|
|
83
|
+
details = after.select { |a| a["id"] == server }
|
84
|
+
details = details[0]
|
85
|
+
log details.to_s
|
86
|
+
c.network.natrule_create(network_id, details[:name], details[:private_ip])
|
87
|
+
|
88
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
|
4
|
+
require "ddcloud"
|
5
|
+
require "pp"
|
6
|
+
require "optparse"
|
7
|
+
|
8
|
+
require "./credentials.rb"
|
9
|
+
|
10
|
+
options = {}
|
11
|
+
|
12
|
+
OptionParser.new do |opts|
|
13
|
+
opts.banner = "Usage: example.rb [options]"
|
14
|
+
|
15
|
+
opts.on("-n", "--network_name name", "Name of the network") do |n|
|
16
|
+
options[:name] = n
|
17
|
+
end
|
18
|
+
opts.on_tail("-h", "--help", "Show this message") do
|
19
|
+
puts opts
|
20
|
+
exit
|
21
|
+
end
|
22
|
+
end.parse!
|
23
|
+
|
24
|
+
if not options[:name]
|
25
|
+
puts "Please specify the network name with -n"
|
26
|
+
puts "For help, use -h"
|
27
|
+
exit
|
28
|
+
end
|
29
|
+
|
30
|
+
c = DDcloud::Client.new @credentials[:url], @credentials[:org_id], @credentials[:user], @credentials[:pass]
|
31
|
+
|
32
|
+
network = c.network.show_by_name options[:name]
|
33
|
+
|
34
|
+
if not network
|
35
|
+
puts "A network with this name does not exist"
|
36
|
+
exit
|
37
|
+
end
|
38
|
+
|
39
|
+
network_id = network[:id]
|
40
|
+
|
41
|
+
servers = c.server.list(network_id: network_id)
|
42
|
+
|
43
|
+
servers.each do |server|
|
44
|
+
pp "Starting #{server[:name]}"
|
45
|
+
c.server.start(server[:id])
|
46
|
+
end
|
data/examples/util.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
|
2
|
+
def diff_id_hashes(h1, h2)
|
3
|
+
a1 = h1.map { |e| e[:id] }
|
4
|
+
a2 = h2.map { |e| e[:id] }
|
5
|
+
a2 - a1
|
6
|
+
end
|
7
|
+
|
8
|
+
def block_until_server_normal(c, name)
|
9
|
+
while true do
|
10
|
+
if c.server.list(name: name)[:state] == "NORMAL"
|
11
|
+
break
|
12
|
+
end
|
13
|
+
sleep 1
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def log(string)
|
18
|
+
time = DateTime.now.strftime("%H:%M")
|
19
|
+
puts "#{time} -> #{string}"
|
20
|
+
end
|
data/lib/ddcloud/client.rb
CHANGED
@@ -18,7 +18,7 @@ module DDcloud
|
|
18
18
|
|
19
19
|
|
20
20
|
|
21
|
-
def initialize(api_base, org_id, username, password, default_password="verysecurepassword", datacenter="EU1", colors = true, silent =
|
21
|
+
def initialize(api_base, org_id, username, password, default_password="verysecurepassword", datacenter="EU1", colors = true, silent = true)
|
22
22
|
@api_base = api_base
|
23
23
|
@org_id = org_id
|
24
24
|
@username = username
|
@@ -77,8 +77,11 @@ module DDcloud
|
|
77
77
|
end
|
78
78
|
|
79
79
|
# mode: bold, underscore, default
|
80
|
-
def
|
81
|
-
|
80
|
+
def log_error(message, color=nil, mode=nil)
|
81
|
+
log message, color, mode, true
|
82
|
+
end
|
83
|
+
def log(message, color = nil, mode = nil, error=nil)
|
84
|
+
return if (@silent && (not error))
|
82
85
|
if @colors
|
83
86
|
color = color.to_sym if color
|
84
87
|
mode = mode.to_sym if mode
|
data/lib/ddcloud/connection.rb
CHANGED
@@ -43,17 +43,17 @@ module DDcloud
|
|
43
43
|
if response.success?
|
44
44
|
log "...........success!", :yellow
|
45
45
|
elsif response.timed_out?
|
46
|
-
|
47
|
-
|
46
|
+
log_error "ERROR\n-----", :red
|
47
|
+
log_error "got a time out"
|
48
48
|
elsif response.code == 0
|
49
49
|
# Could not get an http response, something's wrong.
|
50
|
-
|
51
|
-
|
50
|
+
log_error "ERROR\n-----", :red
|
51
|
+
log_error response.return_message
|
52
52
|
else
|
53
53
|
# Received a non-successful http response.
|
54
|
-
|
55
|
-
|
56
|
-
|
54
|
+
log_error "ERROR\n-----", :red
|
55
|
+
log_error "HTTP request failed: " + response.code.to_s, :red
|
56
|
+
log_error response.body, :yellow
|
57
57
|
end
|
58
58
|
end
|
59
59
|
end
|
data/lib/ddcloud/version.rb
CHANGED
data/lib/ddcloud.rb
CHANGED
@@ -4,19 +4,19 @@ require 'typhoeus'
|
|
4
4
|
require 'xmlsimple'
|
5
5
|
require 'hashie'
|
6
6
|
|
7
|
-
require '
|
8
|
-
require '
|
7
|
+
require 'ddcloud/version.rb'
|
8
|
+
require 'ddcloud/exceptions.rb'
|
9
9
|
|
10
|
-
require '
|
11
|
-
require '
|
12
|
-
require '
|
13
|
-
require '
|
10
|
+
require 'ddcloud/connection.rb'
|
11
|
+
require 'ddcloud/params.rb'
|
12
|
+
require 'ddcloud/xml.rb'
|
13
|
+
require 'ddcloud/client.rb'
|
14
14
|
|
15
|
-
require '
|
16
|
-
require '
|
17
|
-
require '
|
18
|
-
require '
|
19
|
-
require '
|
20
|
-
require '
|
21
|
-
require '
|
22
|
-
require '
|
15
|
+
require 'ddcloud/api/core.rb'
|
16
|
+
require 'ddcloud/api/directory.rb'
|
17
|
+
require 'ddcloud/api/image.rb'
|
18
|
+
require 'ddcloud/api/network.rb'
|
19
|
+
require 'ddcloud/api/server.rb'
|
20
|
+
require 'ddcloud/api/vip.rb'
|
21
|
+
require 'ddcloud/api/account.rb'
|
22
|
+
require 'ddcloud/api/report.rb'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: didata_cloud_sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Juozas Gaigalas
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2014-12-
|
13
|
+
date: 2014-12-12 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: i18n
|
@@ -117,6 +117,12 @@ files:
|
|
117
117
|
- doc/schemas.txt
|
118
118
|
- doc/sections.txt
|
119
119
|
- doc/urls.txt
|
120
|
+
- examples/README.md
|
121
|
+
- examples/list_networks.rb
|
122
|
+
- examples/list_servers_in_network.rb
|
123
|
+
- examples/make_servers_in_new_network.rb
|
124
|
+
- examples/start_all_servers_in_network.rb
|
125
|
+
- examples/util.rb
|
120
126
|
- lib/ddcloud.rb
|
121
127
|
- lib/ddcloud/api/account.rb
|
122
128
|
- lib/ddcloud/api/core.rb
|