didata_cloud_sdk 0.3.1
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 +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>
|