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