didata_cloud_sdk 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/Gemfile +4 -0
- data/README.md +63 -0
- data/doc/Cloud-REST-API-v09-121313.pdf +0 -0
- data/doc/deprecated_sections.txt +21 -0
- data/doc/doc.txt +11201 -0
- data/doc/pagination-and-filtering.txt +24 -0
- data/doc/schemas.txt +10 -0
- data/doc/sections.txt +101 -0
- data/doc/urls.txt +101 -0
- data/lib/opsource/api/account.rb +13 -0
- data/lib/opsource/api/core.rb +127 -0
- data/lib/opsource/api/directory.rb +8 -0
- data/lib/opsource/api/image.rb +24 -0
- data/lib/opsource/api/network.rb +65 -0
- data/lib/opsource/api/report.rb +24 -0
- data/lib/opsource/api/server.rb +185 -0
- data/lib/opsource/api/vip.rb +125 -0
- data/lib/opsource/client.rb +91 -0
- data/lib/opsource/connection.rb +60 -0
- data/lib/opsource/exceptions.rb +14 -0
- data/lib/opsource/params.rb +62 -0
- data/lib/opsource/version.rb +22 -0
- data/lib/opsource/xml.rb +53 -0
- data/lib/opsource.rb +22 -0
- data/opsource.gemspec +27 -0
- metadata +157 -0
@@ -0,0 +1,24 @@
|
|
1
|
+
Request
|
2
|
+
-------
|
3
|
+
'pageSize=50'
|
4
|
+
'pageNumber=3' If the value supplied exceeds the number of pages for the request, the last page will be returned.
|
5
|
+
'orderBy=location,created.DESCENDING' Means “sort first by location ascending, then by created descending”.
|
6
|
+
|
7
|
+
Response
|
8
|
+
--------
|
9
|
+
totalCount
|
10
|
+
pageCount
|
11
|
+
pageNumber
|
12
|
+
pageSize
|
13
|
+
|
14
|
+
Filtering
|
15
|
+
---------
|
16
|
+
<fieldName>[.comparativeOperator]=<value>
|
17
|
+
'&location=NA1' location equals NA1
|
18
|
+
'&location=NA1&location=NA2' location “NA1” or in location “NA2”.
|
19
|
+
|
20
|
+
|
21
|
+
client.page_size = 10
|
22
|
+
client.page_number = 1
|
23
|
+
client.order_by = 'location,created.DESCENDING'
|
24
|
+
client.filter = {location: %w(NA1 NA2)}
|
data/doc/schemas.txt
ADDED
data/doc/sections.txt
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
2.1. Get My Account Details
|
2
|
+
2.2. Add Sub-Administrator Account
|
3
|
+
2.3. Update Administrator Account
|
4
|
+
2.4. Delete Sub-Administrator Account
|
5
|
+
2.5. List Accounts
|
6
|
+
2.6. List Data Centers With Parameters
|
7
|
+
2.7. List Multi-Geography Data Centers With Key
|
8
|
+
2.8. List Software Labels
|
9
|
+
3.1. List OS Server Images
|
10
|
+
3.2. List OS Server Images with Software Labels in Location
|
11
|
+
3.3. List Deployed Customer Images
|
12
|
+
3.4. List Deployed Customer Images with Software Labels in Location
|
13
|
+
3.5. List Pending Deployment Customer Images
|
14
|
+
3.6. List Pending Deployment Customer Images in Location
|
15
|
+
3.7. Does Image Name Exist?
|
16
|
+
3.8. Get Server Image
|
17
|
+
3.9. Delete Customer Server Image
|
18
|
+
3.10. Modify Customer Server Image
|
19
|
+
3.11. Clean Failed Customer Image
|
20
|
+
4.1. List OVF Packages
|
21
|
+
4.2. Import Customer Image
|
22
|
+
4.3. List Customer Image Imports in Progress
|
23
|
+
4.4. Export Customer Image
|
24
|
+
4.5. List Customer Image Exports in Progress
|
25
|
+
4.6. List Customer Image Export History
|
26
|
+
4.7. Copy Customer Image to Data Center
|
27
|
+
4.8. List Customer Image Copying in Progress
|
28
|
+
4.9. Copy OVF Package from Remote Geo
|
29
|
+
4.10. List Remote OVF Package Copying in Progress
|
30
|
+
4.11. List Remote OVF Package Copy History
|
31
|
+
5.1. List Servers (With Parameters)
|
32
|
+
5.2. Clean Failed Server Deployment
|
33
|
+
5.3. Deploy Server
|
34
|
+
5.4. Delete Server
|
35
|
+
5.5. Modify Server
|
36
|
+
5.6. Start Server
|
37
|
+
5.7. Shutdown Server (Graceful Stop)
|
38
|
+
5.8. Power Off Server
|
39
|
+
5.9. Reboot Server
|
40
|
+
5.10. Reset Server
|
41
|
+
5.11. Update VMware Tools
|
42
|
+
5.12. Add Storage to Server
|
43
|
+
5.13. Remove Storage from Server
|
44
|
+
5.14. Change Server Disk Speed
|
45
|
+
5.15. Clone Server to Create Customer Image
|
46
|
+
5.16. Create Server Anti-Affinity Rule
|
47
|
+
5.17. List Server Anti-Affinity Rules
|
48
|
+
5.18. Delete Server Anti-Affinity Rule
|
49
|
+
6.1. List Networks
|
50
|
+
6.2. List Networks with Location
|
51
|
+
6.3. List Networks in Location
|
52
|
+
6.4. Get Network Details
|
53
|
+
6.5. Create Network
|
54
|
+
6.6. Create Network with Location
|
55
|
+
6.7. Delete Network
|
56
|
+
6.8. Modify Network
|
57
|
+
6.9. List Deployed Servers on Network with Disks
|
58
|
+
6.10. List Pending Deployment Servers on Network with Disks
|
59
|
+
6.11. List ACL Rules
|
60
|
+
6.12. Create ACL Rule
|
61
|
+
6.13. List NAT Rules
|
62
|
+
6.14. Create NAT rule
|
63
|
+
6.15. Delete NAT rule
|
64
|
+
6.16. Get Network Configuration
|
65
|
+
6.17. Get Network Configuration with Location
|
66
|
+
6.18. Reserve Public IP Block with Size
|
67
|
+
6.19. Release Public IP Block
|
68
|
+
6.20. Set Server to VIP connectivity for Public IP Block
|
69
|
+
6.21. Multicast
|
70
|
+
7.1. List Real Servers
|
71
|
+
7.2. Create Real Server
|
72
|
+
7.3. Delete Real Server
|
73
|
+
7.4. Modify Real Server
|
74
|
+
7.5. List Probes
|
75
|
+
7.6. Create Probe
|
76
|
+
7.7. Modify Probe
|
77
|
+
7.8. Delete Probe
|
78
|
+
7.9. List Server Farms
|
79
|
+
7.10. Get Server Farm Details
|
80
|
+
7.11. Create Server Farm
|
81
|
+
7.12. Delete Server Farm
|
82
|
+
7.13. Add Real Server to Server Farm
|
83
|
+
7.14. Remove Real Server from Server Farm
|
84
|
+
7.15. Add Probe to Server Farm
|
85
|
+
7.16. Remove Probe from Server Farm
|
86
|
+
7.17. Modify Server Farm Predictor
|
87
|
+
7.18. List Persistence Profiles
|
88
|
+
7.19. Create Persistence Profile
|
89
|
+
7.20. Delete Persistence Profile
|
90
|
+
7.21. List VIPs
|
91
|
+
7.22. Create VIP
|
92
|
+
7.23. Delete VIP
|
93
|
+
7.24. Modify VIP
|
94
|
+
8.1. Create Files Account
|
95
|
+
8.2. List Files Accounts
|
96
|
+
8.3. Delete Files Account
|
97
|
+
8.4. Modify Files Account
|
98
|
+
9.1. Summary Usage Report
|
99
|
+
9.2. Detailed Usage Report
|
100
|
+
9.3. Software Units Report
|
101
|
+
9.4. Audit Log Report
|
data/doc/urls.txt
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
/base/image
|
2
|
+
/base/image/deployedWithSoftwareLabels/{location-id}
|
3
|
+
/base/image/{location-id}
|
4
|
+
/image-provider/image/db
|
5
|
+
/image-provider/image/web
|
6
|
+
/myaccount
|
7
|
+
/partner/image
|
8
|
+
/{org-id}/
|
9
|
+
/{org-id}/account
|
10
|
+
/{org-id}/account/{userName}
|
11
|
+
/{org-id}/account/{username}?delete
|
12
|
+
/{org-id}/antiAffinityRule
|
13
|
+
/{org-id}/antiAffinityRule/{ruleid}?delete
|
14
|
+
/{org-id}/antiAffinityRule?
|
15
|
+
/{org-id}/auditlog?startDate=YYYYMM-DD&endDate=YYYY-MM-DD
|
16
|
+
/{org-id}/copyCustomerImage
|
17
|
+
/{org-id}/datacenter
|
18
|
+
/{org-id}/datacenterWithDiskSpeed?
|
19
|
+
/{org-id}/datacenterWithLimits
|
20
|
+
/{org-id}/geo
|
21
|
+
/{org-id}/image List Customer Server Images [DEPRECATED]
|
22
|
+
/{org-id}/image/deployed
|
23
|
+
/{org-id}/image/deployed/{locationid}
|
24
|
+
/{org-id}/image/deployedWithSoftwareLabels/{location-id}
|
25
|
+
/{org-id}/image/nameExists
|
26
|
+
/{org-id}/image/pendingDeploy
|
27
|
+
/{org-id}/image/pendingDeploy/{location-id}
|
28
|
+
/{org-id}/image/{image-id}
|
29
|
+
/{org-id}/image/{image-id}?clean
|
30
|
+
/{org-id}/image/{image-id}?delete
|
31
|
+
/{org-id}/imageExport
|
32
|
+
/{org-id}/imageExportHistory?count=n
|
33
|
+
/{org-id}/imageImport
|
34
|
+
/{org-id}/multigeo
|
35
|
+
/{org-id}/network
|
36
|
+
/{org-id}/network/{net-id}
|
37
|
+
/{org-id}/network/{net-id}/aclrule
|
38
|
+
/{org-id}/network/{net-id}/natrule
|
39
|
+
/{org-id}/network/{netid}/aclrule/{acl-id}?delete
|
40
|
+
/{org-id}/network/{netid}/publicip?reserveNew
|
41
|
+
/{org-id}/network/{network-id}
|
42
|
+
/{org-id}/network/{network-id}/vip
|
43
|
+
/{org-id}/network/{networkid}/aclrule
|
44
|
+
/{org-id}/network/{networkid}/config
|
45
|
+
/{org-id}/network/{networkid}/natrule/{natrule-id}?delete
|
46
|
+
/{org-id}/network/{networkid}/persistenceProfile
|
47
|
+
/{org-id}/network/{networkid}/persistenceProfile/{persistence-profile-id}?delete
|
48
|
+
/{org-id}/network/{networkid}/probe
|
49
|
+
/{org-id}/network/{networkid}/probe/{probe-id}
|
50
|
+
/{org-id}/network/{networkid}/probe/{probe-id}?delete
|
51
|
+
/{org-id}/network/{networkid}/publicip/{ipblock-id}
|
52
|
+
/{org-id}/network/{networkid}/publicip/{ipblock-id}?release
|
53
|
+
/{org-id}/network/{networkid}/publicip?reserveNewWithSize
|
54
|
+
/{org-id}/network/{networkid}/realServer
|
55
|
+
/{org-id}/network/{networkid}/realServer/{rserver-id}
|
56
|
+
/{org-id}/network/{networkid}/realServer/{rserver-id}?delete
|
57
|
+
/{org-id}/network/{networkid}/server
|
58
|
+
/{org-id}/network/{networkid}/server/deployed
|
59
|
+
/{org-id}/network/{networkid}/server/deployedWithDisks
|
60
|
+
/{org-id}/network/{networkid}/server/deployedWithSoftwareLabels
|
61
|
+
/{org-id}/network/{networkid}/server/deployedWithStatus
|
62
|
+
/{org-id}/network/{networkid}/server/pendingDeploy
|
63
|
+
/{org-id}/network/{networkid}/server/pendingDeployWithDisks
|
64
|
+
/{org-id}/network/{networkid}/serverFarm
|
65
|
+
/{org-id}/network/{networkid}/serverFarm/{server-farm-id}
|
66
|
+
/{org-id}/network/{networkid}/serverFarm/{server-farm-id}/addProbe
|
67
|
+
/{org-id}/network/{networkid}/serverFarm/{server-farm-id}/addRealServer
|
68
|
+
/{org-id}/network/{networkid}/serverFarm/{server-farm-id}/removeProbe
|
69
|
+
/{org-id}/network/{networkid}/serverFarm/{server-farm-id}/removeRealServer
|
70
|
+
/{org-id}/network/{networkid}/serverFarm/{server-farm-id}?delete
|
71
|
+
/{org-id}/network/{networkid}/vip/{vip-id}
|
72
|
+
/{org-id}/network/{networkid}/vip/{vip-id}?delete
|
73
|
+
/{org-id}/network/{networkid}?delete
|
74
|
+
/{org-id}/networkWithLocation
|
75
|
+
/{org-id}/networkWithLocation/{locationid}
|
76
|
+
/{org-id}/networkWithLocation/{networkid}/config
|
77
|
+
/{org-id}/ovfPackage
|
78
|
+
/{org-id}/remoteOvfPackageCopy
|
79
|
+
/{org-id}/remoteOvfPackageCopyHistory?
|
80
|
+
/{org-id}/server
|
81
|
+
/{org-id}/server/deployed
|
82
|
+
/{org-id}/server/pendingDeploy
|
83
|
+
/{org-id}/server/{server-id}
|
84
|
+
/{org-id}/server/{server-id}?clean
|
85
|
+
/{org-id}/server/{server-id}?delete
|
86
|
+
/{org-id}/server/{server-id}?reboot
|
87
|
+
/{org-id}/server/{server-id}?reset
|
88
|
+
/{org-id}/server/{server-id}?start
|
89
|
+
/{org-id}/server/{server-id}?stop
|
90
|
+
/{org-id}/server/{serverid}/disk/{disk-id}/changeSpeed
|
91
|
+
/{org-id}/server/{serverid}/disk/{disk-id}?delete
|
92
|
+
/{org-id}/server/{serverid}?addLocalStorage&amount=10
|
93
|
+
/{org-id}/server/{serverid}?poweroff
|
94
|
+
/{org-id}/server/{serverid}?restart
|
95
|
+
/{org-id}/server/{serverid}?shutdown
|
96
|
+
/{org-id}/server/{serverid}?updateVMwareTools
|
97
|
+
/{org-id}/serverWithState
|
98
|
+
/{org-id}/softwarelabel
|
99
|
+
/{org-id}/storageAccount
|
100
|
+
/{org-id}/storageAccount/<filesaccount-username>
|
101
|
+
/{org-id}/storageAccount/<filesaccount-username>?delete
|
@@ -0,0 +1,127 @@
|
|
1
|
+
module Opsource::API
|
2
|
+
class Core
|
3
|
+
attr_reader :client
|
4
|
+
def initialize(client)
|
5
|
+
@client = client
|
6
|
+
end
|
7
|
+
|
8
|
+
|
9
|
+
### client methods
|
10
|
+
|
11
|
+
def log(*args)
|
12
|
+
@client.log(*args)
|
13
|
+
end
|
14
|
+
|
15
|
+
def org_id
|
16
|
+
@client.org_id
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
### request options
|
21
|
+
|
22
|
+
def endpoint(e)
|
23
|
+
@endpoint = e
|
24
|
+
end
|
25
|
+
|
26
|
+
def org_endpoint(e)
|
27
|
+
endpoint("/#{org_id}" + e)
|
28
|
+
end
|
29
|
+
|
30
|
+
def query_params(q)
|
31
|
+
@query_params = q
|
32
|
+
end
|
33
|
+
|
34
|
+
def xml_params(x)
|
35
|
+
@xml_params = x
|
36
|
+
end
|
37
|
+
|
38
|
+
def simple_params(x)
|
39
|
+
@simple_params = x
|
40
|
+
end
|
41
|
+
|
42
|
+
### perform request
|
43
|
+
|
44
|
+
def get
|
45
|
+
perform :get
|
46
|
+
end
|
47
|
+
|
48
|
+
def post
|
49
|
+
perform :post
|
50
|
+
end
|
51
|
+
|
52
|
+
def get_simple
|
53
|
+
perform :get, true
|
54
|
+
end
|
55
|
+
|
56
|
+
def post_simple
|
57
|
+
perform :post, true
|
58
|
+
end
|
59
|
+
|
60
|
+
#do not parse response if simple
|
61
|
+
#if simple, post body is also simple...
|
62
|
+
def perform(method, simple=false)
|
63
|
+
if simple
|
64
|
+
request = @client.build_request(method, @endpoint, request_query_string, request_simple_body, false)
|
65
|
+
else
|
66
|
+
request = @client.build_request(method, @endpoint, request_query_string, request_xml_body)
|
67
|
+
end
|
68
|
+
response = @client.perform_request(request)
|
69
|
+
|
70
|
+
@client.log_response(request, response)
|
71
|
+
|
72
|
+
# return parsed object if it's good
|
73
|
+
if response.success?
|
74
|
+
if simple
|
75
|
+
result = response.body
|
76
|
+
else
|
77
|
+
result = @client.parse_response_xml_body(response.body)
|
78
|
+
if result['total_count']
|
79
|
+
log "#{result['total_count']} total", :yellow, :bold
|
80
|
+
result.delete('page_size')
|
81
|
+
result.delete('total_count')
|
82
|
+
result.delete('page_count')
|
83
|
+
result.delete('page_number')
|
84
|
+
end
|
85
|
+
# unwind some arrays of elements
|
86
|
+
result.values.count == 1 ? result.values.first : result
|
87
|
+
end
|
88
|
+
else
|
89
|
+
{}
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def single(results)
|
94
|
+
if results.is_a? Array
|
95
|
+
results.first
|
96
|
+
else
|
97
|
+
results
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
|
102
|
+
### build request
|
103
|
+
|
104
|
+
def request_query_string
|
105
|
+
fparams = @client.filter_params || {}
|
106
|
+
qparams = @query_params || {}
|
107
|
+
params = fparams.merge(qparams)
|
108
|
+
@client.url_query(params) if params.present?
|
109
|
+
end
|
110
|
+
|
111
|
+
def request_xml_body
|
112
|
+
return if @xml_params.blank?
|
113
|
+
schema = @xml_params.delete(:schema)
|
114
|
+
tag = @xml_params.delete(:tag)
|
115
|
+
|
116
|
+
body = @client.build_request_xml_body(schema, tag, @xml_params)
|
117
|
+
log(body, :green)
|
118
|
+
body
|
119
|
+
end
|
120
|
+
def request_simple_body
|
121
|
+
return if @simple_params.blank?
|
122
|
+
body = @client.build_request_simple_body(@simple_params)
|
123
|
+
log(body, :green)
|
124
|
+
body
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Opsource::API
|
2
|
+
class Image < Core
|
3
|
+
def server_list
|
4
|
+
endpoint '/base/image'
|
5
|
+
get
|
6
|
+
end
|
7
|
+
|
8
|
+
def deployed_list(options = {})
|
9
|
+
endpoint "/#{org_id}/image/deployed"
|
10
|
+
query_params options
|
11
|
+
get
|
12
|
+
end
|
13
|
+
|
14
|
+
def show_by_name(name, options = {})
|
15
|
+
options[:name] = name
|
16
|
+
single(deployed_list(options))
|
17
|
+
end
|
18
|
+
|
19
|
+
def show(image_id)
|
20
|
+
endpoint "/#{org_id}/image/#{image_id}"
|
21
|
+
get
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module Opsource::API
|
2
|
+
class Network < Core
|
3
|
+
def list
|
4
|
+
org_endpoint '/network'
|
5
|
+
get
|
6
|
+
end
|
7
|
+
|
8
|
+
def create(name, description="", datacenter=@client.datacenter)
|
9
|
+
org_endpoint "/networkWithLocation"
|
10
|
+
xml_params(schema: "network", tag: "NewNetworkWithLocation", name: name, description: description, location: datacenter)
|
11
|
+
post
|
12
|
+
end
|
13
|
+
|
14
|
+
def list_with_location
|
15
|
+
org_endpoint "/networkWithLocation"
|
16
|
+
get
|
17
|
+
end
|
18
|
+
|
19
|
+
def list_in_location(location_id)
|
20
|
+
org_endpoint "/networkWithLocation/#{location_id}"
|
21
|
+
get
|
22
|
+
end
|
23
|
+
|
24
|
+
def show(network_id)
|
25
|
+
list_with_location.find {|n| n.id == network_id}
|
26
|
+
end
|
27
|
+
|
28
|
+
def show_by_name(name)
|
29
|
+
list_with_location.find {|n| n.name == name}
|
30
|
+
end
|
31
|
+
|
32
|
+
def natrule_list(network_id)
|
33
|
+
org_endpoint "/network/#{network_id}/natrule"
|
34
|
+
get
|
35
|
+
end
|
36
|
+
|
37
|
+
# name = "10.147.15.11", source_ip = "10.147.15.11"
|
38
|
+
def natrule_create(network_id, name, source_ip)
|
39
|
+
org_endpoint "/network/#{network_id}/natrule"
|
40
|
+
xml_params(schema: "network", tag: "NatRule", name: name, source_ip: source_ip)
|
41
|
+
post
|
42
|
+
end
|
43
|
+
|
44
|
+
def natrule_delete(network_id, natrule_id)
|
45
|
+
org_endpoint "/network/#{network_id}/natrule/#{natrule_id}?delete"
|
46
|
+
get
|
47
|
+
end
|
48
|
+
|
49
|
+
def aclrule_list(network_id)
|
50
|
+
org_endpoint "/network/#{network_id}/aclrule"
|
51
|
+
get
|
52
|
+
end
|
53
|
+
|
54
|
+
def aclrule_delete(network_id, aclrule_id)
|
55
|
+
org_endpoint "/network/#{network_id}/aclrule/#{aclrule_id}?delete"
|
56
|
+
get
|
57
|
+
end
|
58
|
+
|
59
|
+
def aclrule_create(network_id, name, position, inbound, protocol, port, allow)
|
60
|
+
org_endpoint "/network/#{network_id}/aclrule"
|
61
|
+
xml_params(schema: "network", tag: "AclRule", name: name, position: position, action: (allow ? "PERMIT" : "DENY"), protocol: protocol, source_ip_range: {}, destination_ip_range: {}, port_range: {type: "EQUAL_TO", port1: port}, type: (inbound ? "OUTSIDE_ACL" : "INSIDE_ACL"))
|
62
|
+
post
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Opsource::API
|
2
|
+
class Report < Core
|
3
|
+
def auditlog(start_date, end_date)
|
4
|
+
start = start_date.strftime("%Y-%m-%d")
|
5
|
+
stop = end_date.strftime("%Y-%m-%d")
|
6
|
+
org_endpoint "/auditlog?startDate=#{start}&endDate=#{stop}"
|
7
|
+
get_simple
|
8
|
+
end
|
9
|
+
|
10
|
+
def summary_usage(start_date, end_date)
|
11
|
+
start = start_date.strftime("%Y-%m-%d")
|
12
|
+
stop = end_date.strftime("%Y-%m-%d")
|
13
|
+
org_endpoint "/report/usage?startDate=#{start}&endDate=#{stop}"
|
14
|
+
get_simple
|
15
|
+
end
|
16
|
+
|
17
|
+
def detailed_usage(start_date, end_date)
|
18
|
+
start = start_date.strftime("%Y-%m-%d")
|
19
|
+
stop = end_date.strftime("%Y-%m-%d")
|
20
|
+
org_endpoint "/report/usageDetailed?startDate=#{start}&endDate=#{stop}"
|
21
|
+
get_simple
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,185 @@
|
|
1
|
+
module Opsource::API
|
2
|
+
class Server < Core
|
3
|
+
|
4
|
+
# id
|
5
|
+
# location
|
6
|
+
# networkId
|
7
|
+
# sourceImageId
|
8
|
+
# deployed boolean
|
9
|
+
# name -- Matched against names of servers
|
10
|
+
# created.MIN=20120901T00:00:00Z
|
11
|
+
# created.MAX=20120901T00:00:00Z
|
12
|
+
# state
|
13
|
+
# "NORMAL",
|
14
|
+
# "PENDING_ADD",
|
15
|
+
# "PENDING_CHANGE",
|
16
|
+
# "PENDING_DELETE",
|
17
|
+
# "FAILED_ADD",
|
18
|
+
# "FAILED_DELETE",
|
19
|
+
# "PENDING_CLEAN" and
|
20
|
+
# "REQUIRES_SUPPORT".
|
21
|
+
# order_by: started, operatingSystemId, state and all other
|
22
|
+
def list(options = {})
|
23
|
+
org_endpoint "/serverWithState"
|
24
|
+
query_params options
|
25
|
+
get
|
26
|
+
end
|
27
|
+
|
28
|
+
def list_deployed_with_disks(network_id, options = {})
|
29
|
+
org_endpoint "/network/#{network_id}/server/deployedWithDisks"
|
30
|
+
query_params options
|
31
|
+
get
|
32
|
+
end
|
33
|
+
|
34
|
+
def show(server_id, options = {})
|
35
|
+
options[:id] = server_id
|
36
|
+
single(list(options))
|
37
|
+
end
|
38
|
+
|
39
|
+
def show_by_name(name, options = {})
|
40
|
+
options[:name] = name
|
41
|
+
single(list(options))
|
42
|
+
end
|
43
|
+
|
44
|
+
def show_by_ip(ip, options = {})
|
45
|
+
options[:private_ip] = ip
|
46
|
+
single(list(options))
|
47
|
+
end
|
48
|
+
|
49
|
+
def show_with_disks(network_id, server_id, options = {})
|
50
|
+
list_deployed_with_disks(network_id, options).find {|s| s.id == server_id}
|
51
|
+
end
|
52
|
+
|
53
|
+
def create(name, description, network_id, image_id, administrator_password=@client.default_password)
|
54
|
+
org_endpoint "/server"
|
55
|
+
xml_params(
|
56
|
+
tag: "Server",
|
57
|
+
schema: "server",
|
58
|
+
name: name,
|
59
|
+
description: description,
|
60
|
+
vlan_resource_path: "/oec/#{org_id}/network/#{network_id}",
|
61
|
+
image_resource_path: "/oec/base/image/#{image_id}",
|
62
|
+
is_started: 'true',
|
63
|
+
administrator_password: administrator_password
|
64
|
+
)
|
65
|
+
post
|
66
|
+
end
|
67
|
+
|
68
|
+
def delete(server_id)
|
69
|
+
org_endpoint "/server/#{server_id}?delete"
|
70
|
+
get
|
71
|
+
end
|
72
|
+
|
73
|
+
# memory in MB, ust be multiple of 1024
|
74
|
+
def modify(server_id, name = nil, description = nil, cpu_count = nil, memory = nil)
|
75
|
+
query_params(
|
76
|
+
name: name,
|
77
|
+
description: description,
|
78
|
+
cpu_count: cpu_count,
|
79
|
+
memory: memory
|
80
|
+
)
|
81
|
+
org_endpoint "/server/#{server_id}"
|
82
|
+
post
|
83
|
+
end
|
84
|
+
|
85
|
+
def start(server_id)
|
86
|
+
org_endpoint "/server/#{server_id}?start"
|
87
|
+
get
|
88
|
+
end
|
89
|
+
|
90
|
+
def shutdown(server_id)
|
91
|
+
org_endpoint "/server/#{server_id}?shutdown"
|
92
|
+
get
|
93
|
+
end
|
94
|
+
|
95
|
+
def poweroff(server_id)
|
96
|
+
org_endpoint "/server/#{server_id}?poweroff"
|
97
|
+
get
|
98
|
+
end
|
99
|
+
|
100
|
+
def reboot(server_id)
|
101
|
+
org_endpoint "/server/#{server_id}?reboot"
|
102
|
+
get
|
103
|
+
end
|
104
|
+
|
105
|
+
def reset(server_id)
|
106
|
+
org_endpoint "/server/#{server_id}?reset"
|
107
|
+
get
|
108
|
+
end
|
109
|
+
|
110
|
+
# amount is # of GBs
|
111
|
+
def add_storage(server_id, amount)
|
112
|
+
org_endpoint "/server/#{server_id}?addLocalStorage"
|
113
|
+
query_params(amount: amount)
|
114
|
+
get
|
115
|
+
end
|
116
|
+
|
117
|
+
def remove_storage(server_id, disk_id)
|
118
|
+
org_endpoint "/server/#{server_id}/disk/#{disk_id}?delete"
|
119
|
+
get
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
#### ServersWithState
|
126
|
+
# <ServersWithState
|
127
|
+
# xmlns="http://oec.api.opsource.net/schemas/server"
|
128
|
+
# totalCount="320"
|
129
|
+
# pageCount="250"
|
130
|
+
# pageNumber="1"
|
131
|
+
# pageSize="250">
|
132
|
+
# <!--Zero or more repetitions:-->
|
133
|
+
# <serverWithState id="c325fe04-7711-4968-962e-c88784eb2" location="NA1">
|
134
|
+
# <name>Production LAMP Server</name>
|
135
|
+
# <!--Optional:-->
|
136
|
+
# <description>Main web application server.</description>
|
137
|
+
# <operatingSystem id="REDHAT564" displayName="REDHAT5/64" type="UNIX"/>
|
138
|
+
# <cpuCount>2</cpuCount>
|
139
|
+
# <memoryMb>4096</memoryMb>
|
140
|
+
# <!-- one or more repetitions:-->
|
141
|
+
# <disk id="x445fe05-7113-4988-9d2e-cbjt78eb2" scsiId="0" sizeGb="50"
|
142
|
+
# speed="STANDARD" state="NORMAL"/>
|
143
|
+
# <disk id="ef49974c-87d0-400f-aa32-ee43559fdb1b" scsiId="1" sizeGb="150"
|
144
|
+
# speed="STANDARD" state="NORMAL"/>
|
145
|
+
# <!--Zero or more repetitions:-->
|
146
|
+
# <softwareLabel>REDHAT5ES64</softwareLabel>
|
147
|
+
# <!--Optional:-->
|
148
|
+
# <sourceImageId>5a18d6f0-eaca-11e1-8340-d93da27669ab</sourceImageId>
|
149
|
+
# <networkId>xb632974c-87d0-400faa32-hb43559flk765</networkId>
|
150
|
+
# © 2013 Dimension Data Cloud Solutions
|
151
|
+
# 69
|
152
|
+
# <machineName>10-157-3-125</machineName>
|
153
|
+
# <privateIp>10.157.3.125</privateIp>
|
154
|
+
# <!--Optional:-->
|
155
|
+
# <publicIp>206.80.63.208</publicIp>
|
156
|
+
# <created>2012-07-02T10:43:31.000Z</created>
|
157
|
+
# <isStarted>false</isStarted>
|
158
|
+
# <isDeployed>true</isDeployed>
|
159
|
+
# <state>PENDING_CHANGE</state>
|
160
|
+
# <!--Zero or more repetitions:-->
|
161
|
+
# <machineStatus name="vmwareToolsRunningStatus">
|
162
|
+
# <value>RUNNING</value>
|
163
|
+
# </machineStatus>
|
164
|
+
# <!--Optional:-->
|
165
|
+
# <status>
|
166
|
+
# <action>START_SERVER</action>
|
167
|
+
# <requestTime>2012-09-26T08:36:28</requestTime>
|
168
|
+
# <userName>btaylor</userName>
|
169
|
+
# <!--Optional:-->
|
170
|
+
# <numberOfSteps>3</numberOfSteps>
|
171
|
+
# <!--Optional:-->
|
172
|
+
# <updateTime>2012-09-26T08:37:28</updateTime>
|
173
|
+
# <!--Optional:-->
|
174
|
+
# <step>
|
175
|
+
# <name>Waiting for operation</name>
|
176
|
+
# <number>3</number>
|
177
|
+
# <!--Optional:-->
|
178
|
+
# <percentComplete>3</percentComplete>
|
179
|
+
# </step>
|
180
|
+
# <!--Optional: (present only if the last operation failed and left
|
181
|
+
# the server in a locked state) -->
|
182
|
+
# <failureReason>Message Value</failureReason>
|
183
|
+
# </status>
|
184
|
+
# </serverWithState>
|
185
|
+
# </ServersWithState>
|