1and1 1.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.
Files changed (290) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +2 -0
  3. data/1and1-1.0.gem +0 -0
  4. data/1and1.gemspec +20 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE +201 -0
  7. data/README.md +499 -0
  8. data/docs/reference.md +2447 -0
  9. data/examples/dvd_examples.rb +15 -0
  10. data/examples/example_app.rb +100 -0
  11. data/examples/firewall_examples.rb +137 -0
  12. data/examples/image_examples.rb +48 -0
  13. data/examples/load_balancer_examples.rb +145 -0
  14. data/examples/log_examples.rb +15 -0
  15. data/examples/monitoring_center_examples.rb +15 -0
  16. data/examples/monitoring_policy_examples.rb +343 -0
  17. data/examples/private_network_examples.rb +86 -0
  18. data/examples/public_ip_examples.rb +42 -0
  19. data/examples/role_examples.rb +113 -0
  20. data/examples/server_appliance_examples.rb +15 -0
  21. data/examples/server_examples.rb +438 -0
  22. data/examples/shared_storage_examples.rb +108 -0
  23. data/examples/usage_examples.rb +6 -0
  24. data/examples/user_examples.rb +113 -0
  25. data/examples/vpn_examples.rb +56 -0
  26. data/lib/1and1/datacenter.rb +73 -0
  27. data/lib/1and1/dvd.rb +73 -0
  28. data/lib/1and1/firewall.rb +427 -0
  29. data/lib/1and1/image.rb +231 -0
  30. data/lib/1and1/load_balancer.rb +448 -0
  31. data/lib/1and1/log.rb +77 -0
  32. data/lib/1and1/monitoring_center.rb +84 -0
  33. data/lib/1and1/monitoring_policy.rb +598 -0
  34. data/lib/1and1/oneandone.rb +57 -0
  35. data/lib/1and1/ping.rb +41 -0
  36. data/lib/1and1/ping_auth.rb +41 -0
  37. data/lib/1and1/pricing.rb +41 -0
  38. data/lib/1and1/private_network.rb +333 -0
  39. data/lib/1and1/public_ip.rb +192 -0
  40. data/lib/1and1/role.rb +381 -0
  41. data/lib/1and1/server.rb +1208 -0
  42. data/lib/1and1/server_appliance.rb +73 -0
  43. data/lib/1and1/shared_storage.rb +379 -0
  44. data/lib/1and1/usage.rb +58 -0
  45. data/lib/1and1/user.rb +374 -0
  46. data/lib/1and1/vpn.rb +249 -0
  47. data/lib/oneandone.rb +27 -0
  48. data/sphinx/Makefile +192 -0
  49. data/sphinx/_build/doctrees/dvds.doctree +0 -0
  50. data/sphinx/_build/doctrees/environment.pickle +0 -0
  51. data/sphinx/_build/doctrees/firewalls.doctree +0 -0
  52. data/sphinx/_build/doctrees/images.doctree +0 -0
  53. data/sphinx/_build/doctrees/index.doctree +0 -0
  54. data/sphinx/_build/doctrees/load_balancers.doctree +0 -0
  55. data/sphinx/_build/doctrees/logs.doctree +0 -0
  56. data/sphinx/_build/doctrees/monitoring_center.doctree +0 -0
  57. data/sphinx/_build/doctrees/monitoring_policies.doctree +0 -0
  58. data/sphinx/_build/doctrees/private_networks.doctree +0 -0
  59. data/sphinx/_build/doctrees/public_ips.doctree +0 -0
  60. data/sphinx/_build/doctrees/server_appliances.doctree +0 -0
  61. data/sphinx/_build/doctrees/servers.doctree +0 -0
  62. data/sphinx/_build/doctrees/shared_storages.doctree +0 -0
  63. data/sphinx/_build/doctrees/usages.doctree +0 -0
  64. data/sphinx/_build/doctrees/users.doctree +0 -0
  65. data/sphinx/_build/html/.buildinfo +4 -0
  66. data/sphinx/_build/html/_sources/dvds.txt +42 -0
  67. data/sphinx/_build/html/_sources/firewalls.txt +189 -0
  68. data/sphinx/_build/html/_sources/images.txt +101 -0
  69. data/sphinx/_build/html/_sources/index.txt +499 -0
  70. data/sphinx/_build/html/_sources/load_balancers.txt +231 -0
  71. data/sphinx/_build/html/_sources/logs.txt +55 -0
  72. data/sphinx/_build/html/_sources/monitoring_center.txt +55 -0
  73. data/sphinx/_build/html/_sources/monitoring_policies.txt +288 -0
  74. data/sphinx/_build/html/_sources/private_networks.txt +146 -0
  75. data/sphinx/_build/html/_sources/public_ips.txt +78 -0
  76. data/sphinx/_build/html/_sources/server_appliances.txt +42 -0
  77. data/sphinx/_build/html/_sources/servers.txt +630 -0
  78. data/sphinx/_build/html/_sources/shared_storages.txt +160 -0
  79. data/sphinx/_build/html/_sources/usages.txt +45 -0
  80. data/sphinx/_build/html/_sources/users.txt +172 -0
  81. data/sphinx/_build/html/_static/ajax-loader.gif +0 -0
  82. data/sphinx/_build/html/_static/alabaster.css +585 -0
  83. data/sphinx/_build/html/_static/basic.css +599 -0
  84. data/sphinx/_build/html/_static/comment-bright.png +0 -0
  85. data/sphinx/_build/html/_static/comment-close.png +0 -0
  86. data/sphinx/_build/html/_static/comment.png +0 -0
  87. data/sphinx/_build/html/_static/doctools.js +263 -0
  88. data/sphinx/_build/html/_static/down-pressed.png +0 -0
  89. data/sphinx/_build/html/_static/down.png +0 -0
  90. data/sphinx/_build/html/_static/file.png +0 -0
  91. data/sphinx/_build/html/_static/jquery-1.11.1.js +10308 -0
  92. data/sphinx/_build/html/_static/jquery.js +4 -0
  93. data/sphinx/_build/html/_static/minus.png +0 -0
  94. data/sphinx/_build/html/_static/plus.png +0 -0
  95. data/sphinx/_build/html/_static/pygments.css +63 -0
  96. data/sphinx/_build/html/_static/searchtools.js +651 -0
  97. data/sphinx/_build/html/_static/underscore-1.3.1.js +999 -0
  98. data/sphinx/_build/html/_static/underscore.js +31 -0
  99. data/sphinx/_build/html/_static/up-pressed.png +0 -0
  100. data/sphinx/_build/html/_static/up.png +0 -0
  101. data/sphinx/_build/html/_static/websupport.js +808 -0
  102. data/sphinx/_build/html/dvds.html +151 -0
  103. data/sphinx/_build/html/firewalls.html +397 -0
  104. data/sphinx/_build/html/genindex.html +114 -0
  105. data/sphinx/_build/html/images.html +236 -0
  106. data/sphinx/_build/html/index.html +571 -0
  107. data/sphinx/_build/html/load_balancers.html +409 -0
  108. data/sphinx/_build/html/logs.html +160 -0
  109. data/sphinx/_build/html/monitoring_center.html +160 -0
  110. data/sphinx/_build/html/monitoring_policies.html +530 -0
  111. data/sphinx/_build/html/objects.inv +0 -0
  112. data/sphinx/_build/html/private_networks.html +316 -0
  113. data/sphinx/_build/html/public_ips.html +215 -0
  114. data/sphinx/_build/html/rb-modindex.html +106 -0
  115. data/sphinx/_build/html/search.html +99 -0
  116. data/sphinx/_build/html/searchindex.js +1 -0
  117. data/sphinx/_build/html/server_appliances.html +153 -0
  118. data/sphinx/_build/html/servers.html +994 -0
  119. data/sphinx/_build/html/shared_storages.html +349 -0
  120. data/sphinx/_build/html/usages.html +140 -0
  121. data/sphinx/_build/html/users.html +363 -0
  122. data/sphinx/conf.py +287 -0
  123. data/sphinx/dvds.rst +42 -0
  124. data/sphinx/firewalls.rst +189 -0
  125. data/sphinx/images.rst +101 -0
  126. data/sphinx/index.rst +499 -0
  127. data/sphinx/load_balancers.rst +231 -0
  128. data/sphinx/logs.rst +55 -0
  129. data/sphinx/make.bat +263 -0
  130. data/sphinx/monitoring_center.rst +55 -0
  131. data/sphinx/monitoring_policies.rst +288 -0
  132. data/sphinx/private_networks.rst +146 -0
  133. data/sphinx/public_ips.rst +78 -0
  134. data/sphinx/server_appliances.rst +42 -0
  135. data/sphinx/servers.rst +630 -0
  136. data/sphinx/shared_storages.rst +160 -0
  137. data/sphinx/usages.rst +45 -0
  138. data/sphinx/users.rst +172 -0
  139. data/test/mock-api/add-firewall.json +66 -0
  140. data/test/mock-api/add-hdd.json +49 -0
  141. data/test/mock-api/add-lb.json +71 -0
  142. data/test/mock-api/add-new-ip.json +18 -0
  143. data/test/mock-api/add-pn.json +66 -0
  144. data/test/mock-api/add-port-mp.json +81 -0
  145. data/test/mock-api/add-process-mp.json +20 -0
  146. data/test/mock-api/add-rule-fp.json +33 -0
  147. data/test/mock-api/add-rule-lb.json +40 -0
  148. data/test/mock-api/add-server-ip.json +66 -0
  149. data/test/mock-api/add-server-mp.json +66 -0
  150. data/test/mock-api/assign-ip-fp.json +32 -0
  151. data/test/mock-api/assign-server-lb.json +39 -0
  152. data/test/mock-api/attach-server-pn.json +14 -0
  153. data/test/mock-api/attach-server-storage.json +24 -0
  154. data/test/mock-api/change-api-key.json +15 -0
  155. data/test/mock-api/change-password.json +5 -0
  156. data/test/mock-api/change-server-status.json +70 -0
  157. data/test/mock-api/clone-server.json +29 -0
  158. data/test/mock-api/create-fp.json +26 -0
  159. data/test/mock-api/create-image.json +30 -0
  160. data/test/mock-api/create-lb.json +33 -0
  161. data/test/mock-api/create-mp.json +81 -0
  162. data/test/mock-api/create-pn.json +11 -0
  163. data/test/mock-api/create-public-ip.json +10 -0
  164. data/test/mock-api/create-server.json +34 -0
  165. data/test/mock-api/create-snapshot.json +74 -0
  166. data/test/mock-api/create-storage.json +13 -0
  167. data/test/mock-api/create-user.json +14 -0
  168. data/test/mock-api/delete-fp.json +26 -0
  169. data/test/mock-api/delete-image.json +26 -0
  170. data/test/mock-api/delete-ip.json +15 -0
  171. data/test/mock-api/delete-lb.json +33 -0
  172. data/test/mock-api/delete-mp.json +71 -0
  173. data/test/mock-api/delete-pn.json +11 -0
  174. data/test/mock-api/delete-public-ip.json +10 -0
  175. data/test/mock-api/delete-rule-fp.json +26 -0
  176. data/test/mock-api/delete-server.json +50 -0
  177. data/test/mock-api/delete-snapshot.json +74 -0
  178. data/test/mock-api/delete-storage.json +24 -0
  179. data/test/mock-api/delete-user.json +15 -0
  180. data/test/mock-api/detach-server-lb.json +33 -0
  181. data/test/mock-api/detach-server-mp.json +65 -0
  182. data/test/mock-api/detach-server-storage.json +19 -0
  183. data/test/mock-api/edit-image.json +26 -0
  184. data/test/mock-api/eject-dvd.json +66 -0
  185. data/test/mock-api/fixed-server-flavors.json +70 -0
  186. data/test/mock-api/get-appliance.json +16 -0
  187. data/test/mock-api/get-dvd.json +9 -0
  188. data/test/mock-api/get-firewall.json +26 -0
  189. data/test/mock-api/get-fixed-server.json +17 -0
  190. data/test/mock-api/get-fp-rule.json +7 -0
  191. data/test/mock-api/get-hardware.json +13 -0
  192. data/test/mock-api/get-hdd.json +5 -0
  193. data/test/mock-api/get-image.json +26 -0
  194. data/test/mock-api/get-lb-rule.json +7 -0
  195. data/test/mock-api/get-lb-server.json +5 -0
  196. data/test/mock-api/get-load-balancer.json +33 -0
  197. data/test/mock-api/get-log.json +23 -0
  198. data/test/mock-api/get-monitoring-center.json +161 -0
  199. data/test/mock-api/get-mp-port.json +7 -0
  200. data/test/mock-api/get-mp-process.json +6 -0
  201. data/test/mock-api/get-mp-server.json +4 -0
  202. data/test/mock-api/get-mp.json +65 -0
  203. data/test/mock-api/get-pn-server.json +4 -0
  204. data/test/mock-api/get-private-network.json +20 -0
  205. data/test/mock-api/get-public-ip.json +10 -0
  206. data/test/mock-api/get-server-dvd.json +4 -0
  207. data/test/mock-api/get-server-image.json +4 -0
  208. data/test/mock-api/get-server-ip-fp.json +4 -0
  209. data/test/mock-api/get-server-ip.json +8 -0
  210. data/test/mock-api/get-server-pn.json +16 -0
  211. data/test/mock-api/get-server-status.json +4 -0
  212. data/test/mock-api/get-server-storage.json +5 -0
  213. data/test/mock-api/get-server.json +44 -0
  214. data/test/mock-api/get-storage.json +19 -0
  215. data/test/mock-api/get-usage.json +161 -0
  216. data/test/mock-api/get-user-api-key.json +3 -0
  217. data/test/mock-api/get-user-api.json +7 -0
  218. data/test/mock-api/get-user.json +15 -0
  219. data/test/mock-api/list-appliances.json +66 -0
  220. data/test/mock-api/list-credentials.json +5 -0
  221. data/test/mock-api/list-dvds.json +128 -0
  222. data/test/mock-api/list-firewalls.json +54 -0
  223. data/test/mock-api/list-fp-rules.json +16 -0
  224. data/test/mock-api/list-hdds.json +7 -0
  225. data/test/mock-api/list-images.json +54 -0
  226. data/test/mock-api/list-lb-rules.json +16 -0
  227. data/test/mock-api/list-lb-servers.json +12 -0
  228. data/test/mock-api/list-load-balancers.json +68 -0
  229. data/test/mock-api/list-logs.json +49 -0
  230. data/test/mock-api/list-monitoring-center-usages.json +90 -0
  231. data/test/mock-api/list-mp-ports.json +16 -0
  232. data/test/mock-api/list-mp-processes.json +14 -0
  233. data/test/mock-api/list-mp-servers.json +10 -0
  234. data/test/mock-api/list-mps.json +152 -0
  235. data/test/mock-api/list-pn-servers.json +10 -0
  236. data/test/mock-api/list-private-networks.json +24 -0
  237. data/test/mock-api/list-public-ips.json +44 -0
  238. data/test/mock-api/list-server-fps.json +4 -0
  239. data/test/mock-api/list-server-ips-fp.json +7 -0
  240. data/test/mock-api/list-server-ips.json +10 -0
  241. data/test/mock-api/list-server-lbs.json +6 -0
  242. data/test/mock-api/list-server-pns.json +6 -0
  243. data/test/mock-api/list-servers.json +66 -0
  244. data/test/mock-api/list-snapshots.json +7 -0
  245. data/test/mock-api/list-storages.json +47 -0
  246. data/test/mock-api/list-usages.json +144 -0
  247. data/test/mock-api/list-user-ips.json +5 -0
  248. data/test/mock-api/list-users.json +31 -0
  249. data/test/mock-api/load-dvd.json +63 -0
  250. data/test/mock-api/modify-fp.json +26 -0
  251. data/test/mock-api/modify-lb.json +33 -0
  252. data/test/mock-api/modify-mp.json +81 -0
  253. data/test/mock-api/modify-pn.json +20 -0
  254. data/test/mock-api/modify-port-mp.json +81 -0
  255. data/test/mock-api/modify-process-mp.json +73 -0
  256. data/test/mock-api/modify-public-ip.json +10 -0
  257. data/test/mock-api/modify-server-hardware.json +44 -0
  258. data/test/mock-api/modify-server-hdd.json +54 -0
  259. data/test/mock-api/modify-server.json +44 -0
  260. data/test/mock-api/modify-storage.json +19 -0
  261. data/test/mock-api/modify-user-api.json +15 -0
  262. data/test/mock-api/modify-user.json +15 -0
  263. data/test/mock-api/reinstall-image.json +52 -0
  264. data/test/mock-api/remove-firewall-policy.json +26 -0
  265. data/test/mock-api/remove-hdd.json +54 -0
  266. data/test/mock-api/remove-ip-fp.json +26 -0
  267. data/test/mock-api/remove-lb.json +66 -0
  268. data/test/mock-api/remove-pn.json +71 -0
  269. data/test/mock-api/remove-port-mp.json +73 -0
  270. data/test/mock-api/remove-process-mp.json +66 -0
  271. data/test/mock-api/remove-rule-lb.json +33 -0
  272. data/test/mock-api/remove-server-ip.json +58 -0
  273. data/test/mock-api/remove-server-pn.json +16 -0
  274. data/test/mock-api/restore-snapshot.json +55 -0
  275. data/test/mock-api/storage-servers.json +12 -0
  276. data/test/test_mock_dvd.rb +55 -0
  277. data/test/test_mock_firewall.rb +309 -0
  278. data/test/test_mock_image.rb +123 -0
  279. data/test/test_mock_load_balancer.rb +312 -0
  280. data/test/test_mock_log.rb +55 -0
  281. data/test/test_mock_monitoring_center.rb +55 -0
  282. data/test/test_mock_monitoring_policy.rb +587 -0
  283. data/test/test_mock_private_network.rb +206 -0
  284. data/test/test_mock_public_ip.rb +118 -0
  285. data/test/test_mock_server.rb +929 -0
  286. data/test/test_mock_server_appliance.rb +55 -0
  287. data/test/test_mock_shared_storage.rb +256 -0
  288. data/test/test_mock_usage.rb +34 -0
  289. data/test/test_mock_user.rb +270 -0
  290. metadata +360 -0
@@ -0,0 +1,73 @@
1
+ module OneAndOne
2
+
3
+
4
+ class ServerAppliance
5
+
6
+
7
+ def initialize(test: false)
8
+
9
+ # Check if hitting mock api or live api
10
+ if test
11
+ @connection = Excon.new($base_url, :mock => true)
12
+ else
13
+ @connection = Excon.new($base_url)
14
+ end
15
+
16
+ end
17
+
18
+
19
+ def list(page: nil, per_page: nil, sort: nil, q: nil, fields: nil)
20
+
21
+ # Build hash for query parameters
22
+ keyword_args = {
23
+ :page => page,
24
+ :per_page => per_page,
25
+ :sort => sort,
26
+ :q => q,
27
+ :fields => fields
28
+ }
29
+
30
+ # Clean out null query parameters
31
+ params = OneAndOne.clean_hash(keyword_args)
32
+
33
+ # Build URL
34
+ path = OneAndOne.build_url('/server_appliances')
35
+
36
+ # Perform request
37
+ response = @connection.request(:method => :get,
38
+ :path => path,
39
+ :headers => $header,
40
+ :query => params)
41
+
42
+ # Check response status
43
+ OneAndOne.check_response(response.body, response.status)
44
+
45
+ #JSON-ify the response string
46
+ JSON.parse(response.body)
47
+
48
+ end
49
+
50
+
51
+ def get(appliance_id: nil)
52
+
53
+ # Build URL
54
+ path = OneAndOne.build_url("/server_appliances/#{appliance_id}")
55
+
56
+ # Perform request
57
+ response = @connection.request(:method => :get,
58
+ :path => path,
59
+ :headers => $header)
60
+
61
+ # Check response status
62
+ OneAndOne.check_response(response.body, response.status)
63
+
64
+ #JSON-ify the response string
65
+ JSON.parse(response.body)
66
+
67
+ end
68
+
69
+
70
+ end
71
+
72
+
73
+ end
@@ -0,0 +1,379 @@
1
+ module OneAndOne
2
+
3
+
4
+ class SharedStorage
5
+
6
+
7
+ attr_accessor :id
8
+ attr_accessor :specs
9
+
10
+
11
+ def initialize(test: false)
12
+ @id = nil
13
+ @specs = nil
14
+
15
+ # Check if hitting mock api or live api
16
+ if test
17
+ @connection = Excon.new($base_url, :mock => true)
18
+ else
19
+ @connection = Excon.new($base_url)
20
+ end
21
+
22
+ end
23
+
24
+
25
+ def list(page: nil, per_page: nil, sort: nil, q: nil, fields: nil)
26
+
27
+ # Build hash for query parameters
28
+ keyword_args = {
29
+ :page => page,
30
+ :per_page => per_page,
31
+ :sort => sort,
32
+ :q => q,
33
+ :fields => fields
34
+ }
35
+
36
+ # Clean out null query parameters
37
+ params = OneAndOne.clean_hash(keyword_args)
38
+
39
+ # Build URL
40
+ path = OneAndOne.build_url('/shared_storages')
41
+
42
+ # Perform request
43
+ response = @connection.request(:method => :get,
44
+ :path => path,
45
+ :headers => $header,
46
+ :query => params)
47
+
48
+ # Check response status
49
+ OneAndOne.check_response(response.body, response.status)
50
+
51
+ #JSON-ify the response string
52
+ JSON.parse(response.body)
53
+
54
+ end
55
+
56
+
57
+ def create(name: nil, description: nil, size: nil, datacenter_id: nil)
58
+
59
+ # Build POST body
60
+ new_storage = {
61
+ 'name' => name,
62
+ 'description' => description,
63
+ 'size' => size,
64
+ 'datacenter_id' => datacenter_id
65
+ }
66
+
67
+ # Clean out null keys in POST body
68
+ body = OneAndOne.clean_hash(new_storage)
69
+
70
+ # Stringify the POST body
71
+ string_body = body.to_json
72
+
73
+ # Build URL
74
+ path = OneAndOne.build_url('/shared_storages')
75
+
76
+ # Perform request
77
+ response = @connection.request(:method => :post,
78
+ :path => path,
79
+ :headers => $header,
80
+ :body => string_body)
81
+
82
+ # Check response status
83
+ OneAndOne.check_response(response.body, response.status)
84
+
85
+ #JSON-ify the response string
86
+ json = JSON.parse(response.body)
87
+
88
+ # Save new shared storage ID to SharedStorage instance
89
+ @id = json['id']
90
+ @specs = json
91
+
92
+ # If all good, return JSON
93
+ json
94
+
95
+ end
96
+
97
+
98
+ def get(shared_storage_id: @id)
99
+
100
+ # If user passed in shared_storage ID, reassign
101
+ @id = shared_storage_id
102
+
103
+ # Build URL
104
+ path = OneAndOne.build_url("/shared_storages/#{@id}")
105
+
106
+ # Perform request
107
+ response = @connection.request(:method => :get,
108
+ :path => path,
109
+ :headers => $header)
110
+
111
+ # Check response status
112
+ OneAndOne.check_response(response.body, response.status)
113
+
114
+ #JSON-ify the response string
115
+ json = JSON.parse(response.body)
116
+
117
+ # Reload specs attribute
118
+ @specs = json
119
+
120
+ # If all good, return JSON
121
+ json
122
+
123
+ end
124
+
125
+
126
+ def modify(shared_storage_id: @id, name: nil, description: nil, size: nil)
127
+
128
+ # If user passed in shared_storage ID, reassign
129
+ @id = shared_storage_id
130
+
131
+ # Build PUT body
132
+ new_storage = {
133
+ 'name' => name,
134
+ 'description' => description,
135
+ 'size' => size,
136
+ }
137
+
138
+ # Clean out null keys in POST body
139
+ body = OneAndOne.clean_hash(new_storage)
140
+
141
+ # Stringify the POST body
142
+ string_body = body.to_json
143
+
144
+ # Build URL
145
+ path = OneAndOne.build_url("/shared_storages/#{@id}")
146
+
147
+ # Perform request
148
+ response = @connection.request(:method => :put,
149
+ :path => path,
150
+ :headers => $header,
151
+ :body => string_body)
152
+
153
+ # Check response status
154
+ OneAndOne.check_response(response.body, response.status)
155
+
156
+ #JSON-ify the response string
157
+ JSON.parse(response.body)
158
+
159
+ end
160
+
161
+
162
+ def delete(shared_storage_id: @id)
163
+
164
+ # If user passed in shared_storage ID, reassign
165
+ @id = shared_storage_id
166
+
167
+ # Build URL
168
+ path = OneAndOne.build_url("/shared_storages/#{@id}")
169
+
170
+ # Perform request
171
+ response = @connection.request(:method => :delete,
172
+ :path => path,
173
+ :headers => $header)
174
+
175
+ # Check response status
176
+ OneAndOne.check_response(response.body, response.status)
177
+
178
+ #JSON-ify the response string
179
+ JSON.parse(response.body)
180
+
181
+ end
182
+
183
+
184
+ def add_servers(shared_storage_id: @id, servers: nil)
185
+
186
+ # If user passed in shared_storage ID, reassign
187
+ @id = shared_storage_id
188
+
189
+ # Build POST body
190
+ new_servers = {
191
+ 'servers' => servers
192
+ }
193
+
194
+ # Clean out null keys in POST body
195
+ body = OneAndOne.clean_hash(new_servers)
196
+
197
+ # Stringify the POST body
198
+ string_body = body.to_json
199
+
200
+ # Build URL
201
+ path = OneAndOne.build_url("/shared_storages/#{@id}/servers")
202
+
203
+ # Perform request
204
+ response = @connection.request(:method => :post,
205
+ :path => path,
206
+ :headers => $header,
207
+ :body => string_body)
208
+
209
+ # Check response status
210
+ OneAndOne.check_response(response.body, response.status)
211
+
212
+ #JSON-ify the response string
213
+ JSON.parse(response.body)
214
+
215
+ end
216
+
217
+
218
+ def servers(shared_storage_id: @id)
219
+
220
+ # If user passed in shared_storage ID, reassign
221
+ @id = shared_storage_id
222
+
223
+ # Build URL
224
+ path = OneAndOne.build_url("/shared_storages/#{@id}/servers")
225
+
226
+ # Perform request
227
+ response = @connection.request(:method => :get,
228
+ :path => path,
229
+ :headers => $header)
230
+
231
+ # Check response status
232
+ OneAndOne.check_response(response.body, response.status)
233
+
234
+ #JSON-ify the response string
235
+ JSON.parse(response.body)
236
+
237
+ end
238
+
239
+
240
+ def server(shared_storage_id: @id, server_id: nil)
241
+
242
+ # If user passed in shared_storage ID, reassign
243
+ @id = shared_storage_id
244
+
245
+ # Build URL
246
+ path = OneAndOne.build_url("/shared_storages/#{@id}/servers/#{server_id}")
247
+
248
+ # Perform request
249
+ response = @connection.request(:method => :get,
250
+ :path => path,
251
+ :headers => $header)
252
+
253
+ # Check response status
254
+ OneAndOne.check_response(response.body, response.status)
255
+
256
+ #JSON-ify the response string
257
+ JSON.parse(response.body)
258
+
259
+ end
260
+
261
+
262
+ def remove_server(shared_storage_id: @id, server_id: nil)
263
+
264
+ # If user passed in shared_storage ID, reassign
265
+ @id = shared_storage_id
266
+
267
+ # Build URL
268
+ path = OneAndOne.build_url("/shared_storages/#{@id}/servers/#{server_id}")
269
+
270
+ # Perform request
271
+ response = @connection.request(:method => :delete,
272
+ :path => path,
273
+ :headers => $header)
274
+
275
+ # Check response status
276
+ OneAndOne.check_response(response.body, response.status)
277
+
278
+ #JSON-ify the response string
279
+ JSON.parse(response.body)
280
+
281
+ end
282
+
283
+
284
+ def access
285
+
286
+ # Build URL
287
+ path = OneAndOne.build_url('/shared_storages/access')
288
+
289
+ # Perform request
290
+ response = @connection.request(:method => :get,
291
+ :path => path,
292
+ :headers => $header)
293
+
294
+ # Check response status
295
+ OneAndOne.check_response(response.body, response.status)
296
+
297
+ #JSON-ify the response string
298
+ JSON.parse(response.body)
299
+
300
+ end
301
+
302
+
303
+ def change_password(password: nil)
304
+
305
+ # Build PUT body
306
+ new_password = {
307
+ 'password' => password
308
+ }
309
+
310
+ # Clean out null keys in PUT body
311
+ body = OneAndOne.clean_hash(new_password)
312
+
313
+ # Stringify the PUT body
314
+ string_body = body.to_json
315
+
316
+ # Build URL
317
+ path = OneAndOne.build_url('/shared_storages/access')
318
+
319
+ # Perform request
320
+ response = @connection.request(:method => :put,
321
+ :path => path,
322
+ :headers => $header,
323
+ :body => string_body)
324
+
325
+ # Check response status
326
+ OneAndOne.check_response(response.body, response.status)
327
+
328
+ #JSON-ify the response string
329
+ JSON.parse(response.body)
330
+
331
+ end
332
+
333
+
334
+ def reload
335
+
336
+ # This reload fx is just a wrapper for the get fx
337
+ get
338
+
339
+ end
340
+
341
+
342
+ def wait_for(timeout: 25, interval: 5)
343
+
344
+ # Capture start time
345
+ start = Time.now
346
+
347
+ # Poll shared storage and check initial state
348
+ initial_response = get
349
+ shared_storage_state = initial_response['state']
350
+
351
+ # Keep polling the shared storage's state until good
352
+ until $good_states.include? shared_storage_state
353
+
354
+ # Wait 5 seconds before polling again
355
+ sleep interval
356
+
357
+ # Check shared storage state again
358
+ current_response = get
359
+ shared_storage_state = current_response['state']
360
+
361
+ # Calculate current duration and check for timeout
362
+ duration = (Time.now - start) / 60
363
+ if duration > timeout
364
+ puts "The operation timed out after #{timeout} minutes.\n"
365
+ return
366
+ end
367
+
368
+ end
369
+
370
+ # Return Duration
371
+ {:duration => duration}
372
+
373
+ end
374
+
375
+
376
+ end
377
+
378
+
379
+ end