leaseweb-rest-api 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/readme.md ADDED
@@ -0,0 +1,111 @@
1
+ leaseweb-rest-api
2
+ =====================
3
+
4
+ Rubygem to talk to Leaseweb's API
5
+
6
+ ## Installation
7
+
8
+ Add this line to your application's Gemfile:
9
+
10
+ ```ruby
11
+ gem 'leaseweb-rest-api'
12
+ ```
13
+
14
+ And then execute:
15
+
16
+ ```
17
+ $ bundle
18
+ ```
19
+
20
+ Or install it yourself:
21
+
22
+ ```
23
+ $ gem install leaseweb-rest-api
24
+ ```
25
+
26
+ ## Generating a public/private keypair
27
+
28
+ Make sure you add a strong password to your SSH key!
29
+
30
+ ```
31
+ ssh-keygen -t rsa -b 4096 -C "test@example.com" -f id_rsa
32
+ openssl rsa -in id_rsa -pubout > id_rsa.pub.pem
33
+ rm id_rsa.pub
34
+ ```
35
+
36
+ Copy the content of id_rsa.pub.pem to the 'Public RSA Key'-field your [SSC API page](https://secure.leaseweb.nl/en/sscApi). Click 'Show API key' for your API key. Keep your id_rsa file private.
37
+
38
+ ## Usage
39
+
40
+ Start by creating a new instance of the `LeasewebAPI` class, and passing your api key, private key and private key password.
41
+
42
+ ```ruby
43
+ api_key = 'e12b534e-3bf6-4208-89e6-e43798b3c30f'
44
+ privateKeyFile = './id_rsa'
45
+ password = 'my_super_strong_s3cr3t_passw0rd'
46
+ api = LeasewebAPI.new(api_key, privateKeyFile, password)
47
+ ```
48
+
49
+ All return values are the direct JSON responses from Leaseweb converted into a Hash.
50
+
51
+ See: [documentation](http://developer.leaseweb.com/document/api-documentation/)
52
+
53
+ ### Managing servers
54
+
55
+ List my baremetal servers:
56
+
57
+ ```
58
+ servers = api.getBareMetals()
59
+ ```
60
+
61
+ List all operating systems:
62
+
63
+ ```
64
+ api.getOperatingSystems
65
+ ```
66
+
67
+ Install a server:
68
+
69
+ ```ruby
70
+ params = []
71
+ params << { "type" => "ext2", "size" => 500, "mountpoint" => "/boot" }
72
+ params << { "type" => "swap", "size" => 4096 }
73
+ params << { "type" => "ext4", "size" => 2048, "mountpoint" => "/tmp" }
74
+ params << { "type" => "ext4", "size" => "*", "mountpoint" => "/" }
75
+
76
+ hdd = { "disk" => "/dev/sda", "params" => params, "bootable" => 0 }
77
+
78
+ puts api.installServer(serverid, osid, hdd)
79
+ ```
80
+
81
+ Check the status of the install:
82
+
83
+ ```
84
+ puts api.getInstallationStatus(bareMetalId)
85
+ ```
86
+
87
+ Reboot a server:
88
+
89
+ ```
90
+ puts api.postReboot(bareMetalId)
91
+ ```
92
+
93
+ Set iPXE lease:
94
+
95
+ ```
96
+ puts api.setLease(bareMetalId, 'http://pxe.example.com/boot.ipxe')
97
+ ```
98
+
99
+ List all my domains:
100
+
101
+ ```
102
+ puts api.getDomains
103
+ ```
104
+
105
+ ## Contribute
106
+
107
+ 1. Fork it
108
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
109
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
110
+ 4. Push to the branch (`git push origin my-new-feature`)
111
+ 5. Create new Pull Request
@@ -0,0 +1,643 @@
1
+ require 'spec_helper'
2
+ require_relative '../../lib/leaseweb-rest-api'
3
+
4
+ describe LeasewebAPI do
5
+ let(:apikey) { 'e17b534d-3af6-4208-89e6-e43798b3c30f' }
6
+ let(:privateKey) { '/Users/a.vermeer/Documents/leaseweb-rest-api/id_rsa' }
7
+ let(:password) { 'cdcHRt+,zVuZWtV2a7PkixZTn' }
8
+ let(:request_headers) do
9
+ { 'X-Lsw-Auth' => apikey }
10
+ end
11
+
12
+ subject { LeasewebAPI.new(apikey, privateKey, password) }
13
+
14
+ describe '#getDomains' do
15
+ let(:response) { "{}" }
16
+
17
+ it 'returns a list of all the domains assigned to the account' do
18
+ stub_request(:get, "https://api.leaseweb.com/v1/domains").
19
+ with(:headers => request_headers).
20
+ to_return(:status => 200, :body => response, :headers => {})
21
+
22
+ subject.getDomains
23
+ end
24
+ end
25
+
26
+ describe '#getDomain' do
27
+ let(:response) { "{}" }
28
+
29
+ it 'returns a representation of a domain resource' do
30
+ stub_request(:get, "https://api.leaseweb.com/v1/domains/example.com").
31
+ with(:headers => request_headers).
32
+ to_return(:status => 200, :body => response, :headers => {})
33
+
34
+ subject.getDomain('example.com')
35
+ end
36
+ end
37
+
38
+ describe '#updateDomain' do
39
+ let(:response) { "{}" }
40
+
41
+ it 'updates a domain' do
42
+ body = 'ttl=86400'
43
+
44
+ stub_request(:put, "https://api.leaseweb.com/v1/domains/example.com").
45
+ with(:headers => request_headers, :body => body).
46
+ to_return(:status => 200, :body => response, :headers => {})
47
+
48
+ subject.updateDomain('example.com', 86400)
49
+ end
50
+ end
51
+
52
+ describe '#getDNSRecords' do
53
+ let(:response) { "{}" }
54
+
55
+ it 'returns a representation of a specific dnsRecords of a domain' do
56
+ stub_request(:get, "https://api.leaseweb.com/v1/domains/example.com/dnsRecords").
57
+ with(:headers => request_headers).
58
+ to_return(:status => 200, :body => response, :headers => {})
59
+
60
+ subject.getDNSRecords('example.com')
61
+ end
62
+ end
63
+
64
+ describe '#createDNSRecords' do
65
+ let(:response) { "{}" }
66
+
67
+ it 'creates a new dns record' do
68
+ body = 'host=example.com&content=123.123.123.123&type=MX&priority=10'
69
+
70
+ stub_request(:post, "https://api.leaseweb.com/v1/domains/example.com/dnsRecords").
71
+ with(:headers => request_headers, :body => body).
72
+ to_return(:status => 200, :body => response, :headers => {})
73
+
74
+ subject.createDNSRecords('example.com', 'example.com', '123.123.123.123', 'MX', 10)
75
+ end
76
+ end
77
+
78
+ describe '#getDNSRecord' do
79
+ let(:response) { "{}" }
80
+
81
+ it 'returns a representation of a specific dnsRecord of a domain' do
82
+ stub_request(:get, "https://api.leaseweb.com/v1/domains/example.com/dnsRecords/123").
83
+ with(:headers => request_headers).
84
+ to_return(:status => 200, :body => response, :headers => {})
85
+
86
+ subject.getDNSRecord('example.com', 123)
87
+ end
88
+ end
89
+
90
+ describe '#updateDNSRecord' do
91
+ let(:response) { "{}" }
92
+
93
+ it 'updates a dns record' do
94
+ body = 'id=123&host=example.com&content=10.10.10.10&type=MX&priority=20'
95
+
96
+ stub_request(:put, "https://api.leaseweb.com/v1/domains/example.com/dnsRecords/123").
97
+ with(:headers => request_headers, :body => body).
98
+ to_return(:status => 200, :body => response, :headers => {})
99
+
100
+ subject.updateDNSRecord('example.com', '123', 'example.com', '10.10.10.10', 'MX', '20')
101
+ end
102
+ end
103
+
104
+ describe '#deleteDNSRecord' do
105
+ let(:response) { "{}" }
106
+
107
+ it 'deletes a dns record for a domain' do
108
+ stub_request(:delete, "https://api.leaseweb.com/v1/domains/example.com/dnsRecords/123").
109
+ with(:headers => request_headers).
110
+ to_return(:status => 200, :body => response, :headers => {})
111
+
112
+ subject.deleteDNSRecord('example.com', '123')
113
+ end
114
+ end
115
+
116
+ describe '#getRescueImages' do
117
+ let(:response) do
118
+ "{\"rescueImages\":[{\"rescueImage\":{\"id\":121,\"name\":\"FreeBSD Rescue 2.1 (amd64)\"}},{\"rescueImage\":{\"id\":122,\"name\":\"FreeBSD Rescue 2.1 (x86)\"}},{\"rescueImage\":{\"id\":137,\"name\":\"Rescue 2.1 (amd64)\"}},{\"rescueImage\":{\"id\":138,\"name\":\"Rescue 2.1 (x86)\"}}]}"
119
+ end
120
+
121
+ it 'returns all your available rescue images' do
122
+ stub_request(:get, "https://api.leaseweb.com/v1/rescueImages").
123
+ with(:headers => request_headers).
124
+ to_return(:status => 200, :body => response, :headers => {})
125
+
126
+ subject.getRescueImages
127
+ end
128
+ end
129
+
130
+ describe '#getBareMetals' do
131
+ let(:response) do
132
+ "{\"bareMetals\":[{\"bareMetal\":{\"reference\":null,\"bareMetalId\":\"114916\",\"serverName\":\"LSPG003\",\"serverType\":\"Bare Metal\"}},{\"bareMetal\":{\"reference\":null,\"bareMetalId\":\"198969\",\"serverName\":\"LSPG001\",\"serverType\":\"Bare Metal\"}},{\"bareMetal\":{\"reference\":null,\"bareMetalId\":\"198970\",\"serverName\":\"LSPG002\",\"serverType\":\"Bare Metal\"}}]}"
133
+ end
134
+
135
+ it 'returns the id of all your Bare Metal servers' do
136
+ stub_request(:get, "https://api.leaseweb.com/v1/bareMetals").
137
+ with(:headers => request_headers).
138
+ to_return(:status => 200, :body => response, :headers => {})
139
+
140
+ subject.getBareMetals
141
+ end
142
+ end
143
+
144
+ describe '#getBareMetal' do
145
+ let(:response) do
146
+ "{\"bareMetal\":{\"reference\":null,\"location\":{\"site\":\"SFO-12\",\"cabinet\":\"0209\",\"rackspace\":\"-\",\"combinationLock\":\"-\"},\"server\":{\"ram\":\"16GB\",\"kvm\":\"No\",\"serverType\":\"Preinstalled SFO12.300.0209 DL120 G7\",\"processorType\":\"Intel Quad-Core Xeon E3-1230\",\"processorSpeed\":\"3200 Mhz\",\"numberOfCpus\":1,\"numberOfCores\":4,\"hardDisks\":\" 2x1TB \",\"hardwareRaid\":\"No\"},\"network\":{\"dataPack\":\"Connectivity - see other packs\",\"ipsFreeOfCharge\":\"1\",\"ipsAssigned\":1,\"excessIpsPrice\":\"0.00\",\"dataPackExcess\":{\"type\":\"\",\"value\":\"0.00\",\"unit\":\"\"},\"macAddresses\":{\"mac\":[\"C8:CB:B8:C5:17:0C\",\"C8:CB:B8:C5:17:0D\"]}},\"extras\":{\"extra\":{\"service\":\"Private network: 100Mbps\"}},\"bareMetalId\":\"114916\",\"serverName\":\"LSPG003\",\"serverType\":\"Bare Metal\",\"serverHostingPack\":{\"reference\":null,\"bareMetalId\":\"114916\",\"serverName\":\"LSPG003\",\"serverType\":\"Bare Metal\",\"startDate\":\"Jul 1, 2012\",\"endDate\":\"\",\"contractTerm\":\"3 month(s)\"},\"serverSpecifications\":[],\"serviceLevelAgreement\":{\"sla\":\"Basic - 24x7x24\"},\"datacenterAccessCards\":{\"accessCards\":[\"0\",[]]}}}"
147
+ end
148
+
149
+ it 'returns the data of your Bare Metal server' do
150
+ stub_request(:get, "https://api.leaseweb.com/v1/bareMetals/114916").
151
+ with(:headers => request_headers).
152
+ to_return(:status => 200, :body => response, :headers => {})
153
+
154
+ subject.getBareMetal(114916)
155
+ end
156
+ end
157
+
158
+ describe '#updateBareMetal' do
159
+ let(:response) { "{}" }
160
+
161
+ it 'updates a bareMetal' do
162
+ body = 'reference=test'
163
+
164
+ stub_request(:put, "https://api.leaseweb.com/v1/bareMetals/114916").
165
+ with(:headers => request_headers, :body => body).
166
+ to_return(:status => 200, :body => response, :headers => {})
167
+
168
+ subject.updateBareMetal(114916, 'test')
169
+ end
170
+ end
171
+
172
+ describe '#getSwitchPort' do
173
+ let(:response) do
174
+ "{\"switchPort\":{\"status\":\"open\",\"serverId\":\"114916\",\"serverName\":\"LSPG003\",\"switchNode\":1}}"
175
+ end
176
+
177
+ it 'returns the switchport status of your Bare Metal server' do
178
+ stub_request(:get, "https://api.leaseweb.com/v1/bareMetals/114916/switchPort").
179
+ with(:headers => request_headers).
180
+ to_return(:status => 200, :body => response, :headers => {})
181
+
182
+ subject.getSwitchPort(114916)
183
+ end
184
+ end
185
+
186
+ describe '#postSwitchPortOpen' do
187
+ let(:response) { "{}" }
188
+
189
+ it 'opens the switch port of your Bare Metal server' do
190
+ stub_request(:post, "https://api.leaseweb.com/v1/bareMetals/114916/switchPort/open").
191
+ with(:headers => request_headers).
192
+ to_return(:status => 200, :body => response, :headers => {})
193
+
194
+ subject.postSwitchPortOpen(114916)
195
+ end
196
+ end
197
+
198
+ describe '#postSwitchPortClose' do
199
+ let(:response) { "{}" }
200
+
201
+ it 'closes the switch port of your Bare Metal server' do
202
+ stub_request(:post, "https://api.leaseweb.com/v1/bareMetals/114916/switchPort/close").
203
+ with(:headers => request_headers).
204
+ to_return(:status => 200, :body => response, :headers => {})
205
+
206
+ subject.postSwitchPortClose(114916)
207
+ end
208
+ end
209
+
210
+ describe '#getPowerStatus' do
211
+ let(:response) do
212
+ "{\"powerStatus\":{\"status\":\"on\",\"serverId\":\"114916\",\"serverName\":\"LSPG003\"}}"
213
+ end
214
+
215
+ it 'returns the power status of your Bare Metal server' do
216
+ stub_request(:get, "https://api.leaseweb.com/v1/bareMetals/114916/powerStatus").
217
+ with(:headers => request_headers).
218
+ to_return(:status => 200, :body => response, :headers => {})
219
+
220
+ subject.getPowerStatus(114916)
221
+ end
222
+ end
223
+
224
+ describe '#getIPs' do
225
+ let(:response) do
226
+ "{\"ips\":[{\"ip\":{\"ip\":\"209.58.131.10\",\"reverseLookup\":\"\",\"ipDetails\":{\"gateway\":\"209.58.131.62\",\"mask\":\"255.255.255.192\"},\"nullRouted\":false,\"billingInformation\":{\"price\":\"0.00\",\"startDate\":\"Jun 1, 2015\",\"endDate\":null},\"serverId\":\"114916\",\"serverType\":\"Bare Metal\",\"serverName\":\"LSPG003\"}}]}"
227
+ end
228
+
229
+ it 'returns the ips of your Bare Metal server' do
230
+ stub_request(:get, "https://api.leaseweb.com/v1/bareMetals/114916/ips").
231
+ with(:headers => request_headers).
232
+ to_return(:status => 200, :body => response, :headers => {})
233
+
234
+ subject.getIPs(114916)
235
+ end
236
+ end
237
+
238
+ describe '#getIP' do
239
+ let(:response) do
240
+ "{\"ip\":{\"ip\":\"209.58.131.10\",\"reverseLookup\":\"\",\"ipDetails\":{\"gateway\":\"209.58.131.62\",\"mask\":\"255.255.255.192\"},\"nullRouted\":false,\"billingInformation\":{\"price\":\"0.00\",\"startDate\":\"Jun 1, 2015\",\"endDate\":null},\"serverId\":\"114916\",\"serverType\":\"Bare Metal\",\"serverName\":\"LSPG003\"}}"
241
+ end
242
+
243
+ it 'returns information about the ip of your Bare Metal server' do
244
+ stub_request(:get, "https://api.leaseweb.com/v1/bareMetals/114916/ips/209.58.131.10").
245
+ with(:headers => request_headers).
246
+ to_return(:status => 200, :body => response, :headers => {})
247
+
248
+ subject.getIP(114916, "209.58.131.10")
249
+ end
250
+ end
251
+
252
+ describe '#updateIP' do
253
+ let(:response) { "{}" }
254
+
255
+ it 'updates information of the ip of your Bare Metal server' do
256
+ stub_request(:put, "https://api.leaseweb.com/v1/bareMetals/114916/ips/209.58.131.10").
257
+ with(:headers => request_headers).
258
+ to_return(:status => 200, :body => response, :headers => {})
259
+
260
+ subject.updateIP(114916, "209.58.131.10", 'modified-by-api.leaseweb.com', 1)
261
+ end
262
+ end
263
+
264
+ describe '#getNetworkUsage' do
265
+ let(:response) do
266
+ "{\"bandwidth\":{\"measurement\":{\"node\":{\"in\":\"-\",\"out\":\"-\",\"total\":\"10.91 Kbps\"},\"total\":\"10.91 Kbps\",\"average\":\"10.91 Kbps\"},\"overusage\":\"0 bps\",\"serverId\":114916,\"serverName\":\"LSPG003\",\"interval\":{\"from\":\"09-05-2015\",\"to\":\"08-06-2015\"},\"monthlyThreshold\":\"0 Mbps\"},\"dataTraffic\":{\"measurement\":{\"node\":{\"in\":\"3.5 GB\",\"out\":\"523.81 MB\",\"total\":\"4.02 GB\"},\"total\":\"4.02 GB\"},\"overusage\":\"0 B\",\"serverId\":114916,\"serverName\":\"LSPG003\",\"interval\":{\"from\":\"09-05-2015\",\"to\":\"08-06-2015\"},\"monthlyThreshold\":\"0 GB\"}}"
267
+ end
268
+
269
+ it 'returns network usage details of a bareMetal server' do
270
+ stub_request(:get, "https://api.leaseweb.com/v1/bareMetals/114916/networkUsage").
271
+ with(:headers => request_headers).
272
+ to_return(:status => 200, :body => response, :headers => {})
273
+
274
+ subject.getNetworkUsage(114916)
275
+ end
276
+ end
277
+
278
+ describe '#getNetworkUsageBandWidth' do
279
+ let(:response) do
280
+ "{\"bandwidth\":{\"measurement\":{\"node\":{\"in\":\"-\",\"out\":\"-\",\"total\":\"10.91 Kbps\"},\"total\":\"10.91 Kbps\",\"average\":\"10.91 Kbps\"},\"overusage\":\"0 bps\",\"serverId\":114916,\"serverName\":\"LSPG003\",\"interval\":{\"from\":\"09-05-2015\",\"to\":\"08-06-2015\"},\"monthlyThreshold\":\"0 Mbps\"},\"dataTraffic\":{\"measurement\":{\"node\":{\"in\":\"3.5 GB\",\"out\":\"523.81 MB\",\"total\":\"4.02 GB\"},\"total\":\"4.02 GB\"},\"overusage\":\"0 B\",\"serverId\":114916,\"serverName\":\"LSPG003\",\"interval\":{\"from\":\"09-05-2015\",\"to\":\"08-06-2015\"},\"monthlyThreshold\":\"0 GB\"}}"
281
+ end
282
+
283
+ it 'returns network usage details of a bareMetal server' do
284
+ stub_request(:get, "https://api.leaseweb.com/v1/bareMetals/114916/networkUsage/bandWidth?dateFrom=06-04-2015&dateTo=06-05-2015").
285
+ with(:headers => request_headers).
286
+ to_return(:status => 200, :body => response, :headers => {})
287
+
288
+ subject.getNetworkUsageBandWidth(114916, '06-04-2015', '06-05-2015', 'json')
289
+ end
290
+ end
291
+
292
+ describe '#getNetworkUsageDataTraffic' do
293
+ let(:response) do
294
+ "{\"dataTraffic\":{\"measurement\":{\"node\":{\"in\":\"370.71 MB\",\"out\":\"98.07 MB\",\"total\":\"468.78 MB\"},\"total\":\"468.78 MB\"},\"overusage\":\"0 B\",\"serverId\":198969,\"serverName\":\"LSPG001\",\"interval\":{\"from\":\"06-04-2015\",\"to\":\"06-05-2015\"},\"monthlyThreshold\":\"0 GB\"}}"
295
+ end
296
+
297
+ it 'returns network usage details of a bareMetal server' do
298
+ stub_request(:get, "https://api.leaseweb.com/v1/bareMetals/114916/networkUsage/dataTraffic?dateFrom=06-04-2015&dateTo=06-05-2015").
299
+ with(:headers => request_headers).
300
+ to_return(:status => 200, :body => response, :headers => {})
301
+
302
+ subject.getNetworkUsageDataTraffic(114916, '06-04-2015', '06-05-2015', 'json')
303
+ end
304
+ end
305
+
306
+ describe '#postReboot' do
307
+ let(:response) { "{}" }
308
+
309
+ it 'performs a reboot of the server' do
310
+ stub_request(:post, "https://api.leaseweb.com/v1/bareMetals/114916/reboot").
311
+ with(:headers => request_headers).
312
+ to_return(:status => 200, :body => response, :headers => {})
313
+
314
+ subject.postReboot(114916)
315
+ end
316
+ end
317
+
318
+ describe '#installServer' do
319
+ let(:response) { "{}" }
320
+
321
+ it 'performs a re-installation of the server' do
322
+ body = 'osId=1899'
323
+
324
+ stub_request(:post, "https://api.leaseweb.com/v1/bareMetals/114916/install").
325
+ with(:headers => request_headers, :body => body).
326
+ to_return(:status => 200, :body => response, :headers => {})
327
+
328
+ subject.installServer(114916, 1899)
329
+ end
330
+ end
331
+
332
+ describe '#postResqueMode' do
333
+ let(:response) { "{}" }
334
+
335
+ it 'Launches the rescue mode for this bare metal server' do
336
+ body = 'osId=121'
337
+
338
+ stub_request(:post, "https://api.leaseweb.com/v1/bareMetals/114916/rescueMode").
339
+ with(:headers => request_headers, :body => body).
340
+ to_return(:status => 200, :body => response, :headers => {})
341
+
342
+ subject.postResqueMode(114916, 121)
343
+ end
344
+ end
345
+
346
+ describe '#getRootPassword' do
347
+ let(:response) do
348
+ "{\"dataTraffic\":{\"measurement\":{\"node\":{\"in\":\"370.71 MB\",\"out\":\"98.07 MB\",\"total\":\"468.78 MB\"},\"total\":\"468.78 MB\"},\"overusage\":\"0 B\",\"serverId\":198969,\"serverName\":\"LSPG001\",\"interval\":{\"from\":\"06-04-2015\",\"to\":\"06-05-2015\"},\"monthlyThreshold\":\"0 GB\"}}"
349
+ end
350
+
351
+ it 'returns the root password of the server' do
352
+ stub_request(:get, "https://api.leaseweb.com/v1/bareMetals/114916/rootPassword").
353
+ with(:headers => request_headers).
354
+ to_return(:status => 200, :body => response, :headers => {})
355
+
356
+ subject.getRootPassword(114916, 'json')
357
+ end
358
+ end
359
+
360
+ describe '#getInstallationStatus' do
361
+ let(:response) do
362
+ "{\"installationStatus\":{\"code\":1000,\"description\":\"Installing\",\"serverPackId\":\"114916\",\"serverName\":\"LSPG003\"}}"
363
+ end
364
+
365
+ it 'returns the installation status of the server' do
366
+ stub_request(:get, "https://api.leaseweb.com/v1/bareMetals/114916/installationStatus").
367
+ with(:headers => request_headers).
368
+ to_return(:status => 200, :body => response, :headers => {})
369
+
370
+ subject.getInstallationStatus(114916)
371
+ end
372
+ end
373
+
374
+ describe '#getLeases' do
375
+ let(:response) do
376
+ "{\"_metadata\":{\"totalCount\":1,\"limit\":10,\"offset\":0},\"leases\":[{\"ip\":\"209.58.131.10\",\"pop\":\"SFO-12\",\"mac\":\"C8:CB:B8:C5:17:0C\",\"scope\":\"209.58.131.0\",\"options\":[{\"name\":\"Bootfile Name\",\"optionId\":\"67\",\"policyName\":null,\"type\":\"String\",\"userClass\":\"\",\"value\":\"undionly.kpxe\",\"vendorClass\":\"\"},{\"name\":\"DNS Servers\",\"optionId\":\"6\",\"policyName\":null,\"type\":\"IPv4Address\",\"userClass\":\"\",\"value\":\"209.58.128.22,209.58.135.185\",\"vendorClass\":\"\"},{\"name\":\"Boot Server Host Name\",\"optionId\":\"66\",\"policyName\":null,\"type\":\"String\",\"userClass\":\"\",\"value\":\"209.58.128.13\",\"vendorClass\":\"\"},{\"name\":\"Bootfile Name\",\"optionId\":\"67\",\"policyName\":null,\"type\":\"String\",\"userClass\":\"gPXE\",\"value\":\"http:\\/\\/95.211.51.8\\/server\\/getPxeConfig\\/serverId\\/58898\\/key\\/86504289080a3a914ac53912ea55336f\",\"vendorClass\":\"\"}]}]}"
377
+ end
378
+
379
+ it 'returns a list of DHCP Leases for every MAC Address for a given bare metal' do
380
+ stub_request(:get, "https://api.leaseweb.com/v1/bareMetals/114916/leases").
381
+ with(:headers => request_headers).
382
+ to_return(:status => 200, :body => response, :headers => {})
383
+
384
+ subject.getLeases(114916)
385
+ end
386
+ end
387
+
388
+ describe '#setLease' do
389
+ let(:response) { "{}" }
390
+
391
+ it 'Creates a new DHCP lease' do
392
+ stub_request(:post, "https://api.leaseweb.com/v1/bareMetals/114916/leases").
393
+ with(:headers => request_headers).
394
+ to_return(:status => 200, :body => response, :headers => {})
395
+
396
+ subject.setLease(114916, "http://example.com/boot.ipxe")
397
+ end
398
+ end
399
+
400
+ describe '#getLease' do
401
+ let(:response) do
402
+ "{\"ip\":\"209.58.131.10\",\"pop\":\"SFO-12\",\"mac\":\"C8:CB:B8:C5:17:0C\",\"scope\":\"209.58.131.0\",\"options\":[{\"name\":\"Bootfile Name\",\"optionId\":\"67\",\"policyName\":null,\"type\":\"String\",\"userClass\":\"\",\"value\":\"undionly.kpxe\",\"vendorClass\":\"\"},{\"name\":\"DNS Servers\",\"optionId\":\"6\",\"policyName\":null,\"type\":\"IPv4Address\",\"userClass\":\"\",\"value\":\"209.58.128.22,209.58.135.185\",\"vendorClass\":\"\"},{\"name\":\"Boot Server Host Name\",\"optionId\":\"66\",\"policyName\":null,\"type\":\"String\",\"userClass\":\"\",\"value\":\"209.58.128.13\",\"vendorClass\":\"\"},{\"name\":\"Bootfile Name\",\"optionId\":\"67\",\"policyName\":null,\"type\":\"String\",\"userClass\":\"gPXE\",\"value\":\"http:\\/\\/95.211.51.8\\/server\\/getPxeConfig\\/serverId\\/58898\\/key\\/86504289080a3a914ac53912ea55336f\",\"vendorClass\":\"\"}]}"
403
+ end
404
+
405
+ it 'returns a DHCP Lease for every MAC Address for a bare metal with specific MAC address' do
406
+ stub_request(:get, "https://api.leaseweb.com/v1/bareMetals/114916/leases/C8:CB:B8:C5:17:0C").
407
+ with(:headers => request_headers).
408
+ to_return(:status => 200, :body => response, :headers => {})
409
+
410
+ subject.getLease(114916, "C8:CB:B8:C5:17:0C")
411
+ end
412
+ end
413
+
414
+ describe '#deleteLease' do
415
+ let(:response) { "{}" }
416
+
417
+ it 'deletes a DHCP lease for a specific mac address' do
418
+ stub_request(:delete, "https://api.leaseweb.com/v1/bareMetals/114916/leases/C8:CB:B8:C5:17:0C").
419
+ with(:headers => request_headers).
420
+ to_return(:status => 200, :body => response, :headers => {})
421
+
422
+ subject.deleteLease(114916, "C8:CB:B8:C5:17:0C")
423
+ end
424
+ end
425
+
426
+ describe '#getPrivateNetworks' do
427
+ let(:response) do
428
+ "{\"meta\":{\"first_page\":1,\"last_page\":1,\"previous_page\":null,\"current_page\":1,\"next_page\":null,\"total_results\":1,\"results_per_page\":50},\"results\":[{\"id\":157,\"name\":\"\"}]}"
429
+ end
430
+
431
+ it 'returns a list of all your privatenetworks' do
432
+ stub_request(:get, "https://api.leaseweb.com/v1/privateNetworks").
433
+ with(:headers => request_headers).
434
+ to_return(:status => 200, :body => response, :headers => {})
435
+
436
+ subject.getPrivateNetworks
437
+ end
438
+ end
439
+
440
+ describe '#createPrivateNetworks' do
441
+ let(:response) { "{}" }
442
+
443
+ it 'Creates a new private network' do
444
+ stub_request(:post, "https://api.leaseweb.com/v1/privateNetworks").
445
+ with(:headers => request_headers).
446
+ to_return(:status => 200, :body => response, :headers => {})
447
+
448
+ subject.createPrivateNetworks
449
+ end
450
+ end
451
+
452
+ describe '#getPrivateNetworks' do
453
+ let(:response) do
454
+ "{\"meta\":{\"first_page\":1,\"last_page\":1,\"previous_page\":null,\"current_page\":1,\"next_page\":null,\"total_results\":1,\"results_per_page\":50},\"results\":[{\"id\":157,\"name\":\"\"}]}"
455
+ end
456
+
457
+ it 'returns a list of all your privatenetworks' do
458
+ stub_request(:get, "https://api.leaseweb.com/v1/privateNetworks").
459
+ with(:headers => request_headers).
460
+ to_return(:status => 200, :body => response, :headers => {})
461
+
462
+ subject.getPrivateNetworks
463
+ end
464
+ end
465
+
466
+ describe '#getPrivateNetwork' do
467
+ let(:response) do
468
+ "{\"id\":157,\"name\":\"\",\"bareMetals\":[{\"id\":198969,\"status\":\"CONFIGURED\",\"dataCenter\":\"SFO-12\",\"CIDR\":\"10.29.0.32\\/27\",\"broadcast\":\"10.29.0.63\",\"gateway\":\"10.29.0.62\",\"netmask\":\"255.255.255.224\",\"portSpeed\":100},{\"id\":198970,\"status\":\"CONFIGURED\",\"dataCenter\":\"SFO-12\",\"CIDR\":\"10.29.0.32\\/27\",\"broadcast\":\"10.29.0.63\",\"gateway\":\"10.29.0.62\",\"netmask\":\"255.255.255.224\",\"portSpeed\":100},{\"id\":114916,\"status\":\"CONFIGURED\",\"dataCenter\":\"SFO-12\",\"CIDR\":\"10.29.0.32\\/27\",\"broadcast\":\"10.29.0.63\",\"gateway\":\"10.29.0.62\",\"netmask\":\"255.255.255.224\",\"portSpeed\":100}]}"
469
+ end
470
+
471
+ it 'returns information about your private network and servers' do
472
+ stub_request(:get, "https://api.leaseweb.com/v1/privateNetworks/157").
473
+ with(:headers => request_headers).
474
+ to_return(:status => 200, :body => response, :headers => {})
475
+
476
+ subject.getPrivateNetwork(157)
477
+ end
478
+ end
479
+
480
+ describe '#updatePrivateNetwork' do
481
+ let(:response) { "{}" }
482
+
483
+ it 'updates the name of your private network' do
484
+ body = 'name=test'
485
+
486
+ stub_request(:put, "https://api.leaseweb.com/v1/privateNetworks/157").
487
+ with(:headers => request_headers, :body => body).
488
+ to_return(:status => 200, :body => response, :headers => {})
489
+
490
+ subject.updatePrivateNetwork(157, 'test')
491
+ end
492
+ end
493
+
494
+ describe '#deletePrivateNetwork' do
495
+ let(:response) { "{}" }
496
+
497
+ it 'deletes a private network' do
498
+ stub_request(:delete, "https://api.leaseweb.com/v1/privateNetworks/157").
499
+ with(:headers => request_headers).
500
+ to_return(:status => 200, :body => response, :headers => {})
501
+
502
+ subject.deletePrivateNetwork(157)
503
+ end
504
+ end
505
+
506
+ describe '#createPrivateNetworks' do
507
+ let(:response) { "{}" }
508
+
509
+ it 'add a server to your private network' do
510
+ body = 'bareMetalId=114916'
511
+
512
+ stub_request(:post, "https://api.leaseweb.com/v1/privateNetworks/157/bareMetals").
513
+ with(:headers => request_headers, :body => body).
514
+ to_return(:status => 200, :body => response, :headers => {})
515
+
516
+ subject.createPrivateNetworksBareMetals(157, 114916)
517
+ end
518
+ end
519
+
520
+ describe '#deletePrivateNetworksBareMetals' do
521
+ let(:response) { "{}" }
522
+
523
+ it 'delete server from your private network' do
524
+ stub_request(:delete, "https://api.leaseweb.com/v1/privateNetworks/157/bareMetals/114916").
525
+ with(:headers => request_headers).
526
+ to_return(:status => 200, :body => response, :headers => {})
527
+
528
+ subject.deletePrivateNetworksBareMetals(157, 114916)
529
+ end
530
+ end
531
+
532
+ describe '#getOperatingSystems' do
533
+ let(:response) do
534
+ "{\"operatingSystems\":[{\"operatingSystem\":{\"id\":664,\"name\":\"CentOS 5 (i386)\"}},{\"operatingSystem\":{\"id\":665,\"name\":\"CentOS 5 (x86_64)\"}},{\"operatingSystem\":{\"id\":867,\"name\":\"CentOS 6 (i386)\"}},{\"operatingSystem\":{\"id\":868,\"name\":\"CentOS 6 (x86_64)\"}},{\"operatingSystem\":{\"id\":1899,\"name\":\"CentOS 7 (x86_64)\"}},{\"operatingSystem\":{\"id\":921,\"name\":\"CloudLinux 6.4 (i386)\"}},{\"operatingSystem\":{\"id\":920,\"name\":\"CloudLinux 6.4 (x86_64)\"}},{\"operatingSystem\":{\"id\":532,\"name\":\"Debian 6.0 (amd64)\"}},{\"operatingSystem\":{\"id\":531,\"name\":\"Debian 6.0 (x86)\"}},{\"operatingSystem\":{\"id\":1566,\"name\":\"Debian 7.0 (x86)\"}},{\"operatingSystem\":{\"id\":1567,\"name\":\"Debian 7.0 (x86_64)\"}},{\"operatingSystem\":{\"id\":2142,\"name\":\"Debian 8.0 (x86_64)\"}},{\"operatingSystem\":{\"id\":873,\"name\":\"ESXi 5.0 (x86_64)\"}},{\"operatingSystem\":{\"id\":1039,\"name\":\"ESXi 5.1 (x86_64)\"}},{\"operatingSystem\":{\"id\":1864,\"name\":\"ESXi 5.5 (x86_64)\"}},{\"operatingSystem\":{\"id\":2143,\"name\":\"ESXi 6.0 (x86_64)\"}},{\"operatingSystem\":{\"id\":1953,\"name\":\"FreeBSD 10.1 (amd64)\"}},{\"operatingSystem\":{\"id\":1901,\"name\":\"FreeBSD 10.1 (i386)\"}},{\"operatingSystem\":{\"id\":764,\"name\":\"FreeBSD 8.4 (amd64)\"}},{\"operatingSystem\":{\"id\":765,\"name\":\"FreeBSD 8.4 (x86)\"}},{\"operatingSystem\":{\"id\":927,\"name\":\"FreeBSD 9.3 (amd64)\"}},{\"operatingSystem\":{\"id\":926,\"name\":\"FreeBSD 9.3 (i386)\"}},{\"operatingSystem\":{\"id\":946,\"name\":\"Ubuntu 12.04 (amd64)\"}},{\"operatingSystem\":{\"id\":945,\"name\":\"Ubuntu 12.04 (x86)\"}},{\"operatingSystem\":{\"id\":1789,\"name\":\"Ubuntu 14.04 (amd64)\"}},{\"operatingSystem\":{\"id\":1790,\"name\":\"Ubuntu 14.04 (x86)\"}},{\"operatingSystem\":{\"id\":672,\"name\":\"Windows 2008 R2 Enterprise (x64)\"}},{\"operatingSystem\":{\"id\":175,\"name\":\"Windows 2008 R2 Standard (x64)\"}},{\"operatingSystem\":{\"id\":539,\"name\":\"Windows 2008 R2 Standard (2 CPU) (x64)\"}},{\"operatingSystem\":{\"id\":165,\"name\":\"Windows 2008 R2 Web (x64)\"}},{\"operatingSystem\":{\"id\":538,\"name\":\"Windows 2008 R2 Web (2 CPU) (x64)\"}},{\"operatingSystem\":{\"id\":1610,\"name\":\"Windows Server 2012 Datacenter (1 CPU) (x64)\"}},{\"operatingSystem\":{\"id\":1611,\"name\":\"Windows Server 2012 Datacenter (2 CPU) (x64)\"}},{\"operatingSystem\":{\"id\":2002,\"name\":\"Windows Server 2012 R2 Datacenter (1 CPU) (x64)\"}},{\"operatingSystem\":{\"id\":2003,\"name\":\"Windows Server 2012 R2 Datacenter (2 CPU) (x64)\"}},{\"operatingSystem\":{\"id\":2000,\"name\":\"Windows Server 2012 R2 Standard (1 CPU) (x64)\"}},{\"operatingSystem\":{\"id\":2001,\"name\":\"Windows Server 2012 R2 Standard (2 CPU) (x64)\"}},{\"operatingSystem\":{\"id\":1603,\"name\":\"Windows Server 2012 Standard (1 CPU) (x64)\"}},{\"operatingSystem\":{\"id\":1604,\"name\":\"Windows Server 2012 Standard (2 CPU) (x64)\"}}]}"
535
+ end
536
+
537
+ it 'returns the list of available operatingSystems for installation' do
538
+ stub_request(:get, "https://api.leaseweb.com/v1/operatingSystems").
539
+ with(:headers => request_headers).
540
+ to_return(:status => 200, :body => response, :headers => {})
541
+
542
+ subject.getOperatingSystems
543
+ end
544
+ end
545
+
546
+ describe '#getOperatingSystem' do
547
+ let(:response) do
548
+ "{\"operatingSystem\":{\"id\":1899,\"name\":\"CentOS 7 (x86_64)\"}}"
549
+ end
550
+
551
+ it 'returns the details of an operating system for installation' do
552
+ stub_request(:get, "https://api.leaseweb.com/v1/operatingSystems/1899").
553
+ with(:headers => request_headers).
554
+ to_return(:status => 200, :body => response, :headers => {})
555
+
556
+ subject.getOperatingSystem(1899)
557
+ end
558
+ end
559
+
560
+ describe '#getControlPanels' do
561
+ let(:response) do
562
+ "{\"controlPanels\":[{\"controlPanel\":{\"id\":1868,\"name\":\"Plesk 12 (10 Domains Linux)\"}},{\"controlPanel\":{\"id\":1875,\"name\":\"Plesk 12 (30 Domains Linux)\"}},{\"controlPanel\":{\"id\":1878,\"name\":\"Plesk 12 (Unlimited Domains Linux)\"}}]}"
563
+ end
564
+
565
+ it 'returns the details of an operating system for installation' do
566
+ stub_request(:get, "https://api.leaseweb.com/v1/operatingSystems/1899/controlPanels").
567
+ with(:headers => request_headers).
568
+ to_return(:status => 200, :body => response, :headers => {})
569
+
570
+ subject.getControlPanels(1899)
571
+ end
572
+ end
573
+
574
+ describe '#getControlPanel' do
575
+ let(:response) do
576
+ "{\"controlPanel\":{\"id\":1868,\"name\":\"Plesk 12 (10 Domains Linux)\"}}"
577
+ end
578
+
579
+ it 'returns the details of available control panels for installation on a particular operating system' do
580
+ stub_request(:get, "https://api.leaseweb.com/v1/operatingSystems/1899/controlPanels/1868").
581
+ with(:headers => request_headers).
582
+ to_return(:status => 200, :body => response, :headers => {})
583
+
584
+ subject.getControlPanel(1899, 1868)
585
+ end
586
+ end
587
+
588
+ describe '#getPartitionSchema' do
589
+ let(:response) do
590
+ "{\"partitionSchema\":{\"limit\":7,\"disks\":{\"disk\":[\"\\/dev\\/sda\",\"\\/dev\\/hda\",\"\\/dev\\/cciss\\/c0d0\"]},\"suggestion\":{\"disk\":\"\\/dev\\/sda\",\"bootable\":0,\"hdd\":{\"partition\":[{\"index\":0,\"size\":\"500\",\"type\":\"ext2\",\"mountpoint\":\"\\/boot\"},{\"index\":1,\"size\":\"4096\",\"type\":\"swap\",\"mountpoint\":\"\"},{\"index\":2,\"size\":\"2048\",\"type\":\"ext4\",\"mountpoint\":\"\\/tmp\"},{\"index\":3,\"size\":\"*\",\"type\":\"ext4\",\"mountpoint\":\"\\/\"}]}},\"filesystemTypes\":{\"type\":[\"ext2\",\"ext3\",\"ext4\",\"xfs\",\"swap\"]}}}"
591
+ end
592
+
593
+ it 'returns the list of available partition schema\'s for installation' do
594
+ stub_request(:get, "https://api.leaseweb.com/v1/operatingSystems/1899/partitionSchema?serverPackId=114916").
595
+ with(:headers => request_headers).
596
+ to_return(:status => 200, :body => response, :headers => {})
597
+
598
+ subject.getPartitionSchema(1899, 114916)
599
+ end
600
+ end
601
+
602
+ describe '#getIps' do
603
+ let(:response) do
604
+ "{\"ips\":[{\"ip\":{\"ip\":\"209.58.131.10\",\"reverseLookup\":\"\",\"ipDetails\":{\"gateway\":\"209.58.131.62\",\"mask\":\"255.255.255.192\"},\"nullRouted\":false,\"billingInformation\":{\"price\":\"0.00\",\"startDate\":\"Jun 1, 2015\",\"endDate\":null},\"serverId\":\"114916\",\"serverType\":\"Bare Metal\",\"serverName\":\"LSPG003\"}},{\"ip\":{\"ip\":\"209.58.128.85\",\"reverseLookup\":\"\",\"ipDetails\":{\"gateway\":\"209.58.128.126\",\"mask\":\"255.255.255.192\"},\"nullRouted\":false,\"billingInformation\":{\"price\":\"0.00\",\"startDate\":\"Mar 1, 2015\",\"endDate\":null},\"serverId\":\"198969\",\"serverType\":\"Bare Metal\",\"serverName\":\"LSPG001\"}},{\"ip\":{\"ip\":\"209.58.128.148\",\"reverseLookup\":\"\",\"ipDetails\":{\"gateway\":\"209.58.128.190\",\"mask\":\"255.255.255.192\"},\"nullRouted\":false,\"billingInformation\":{\"price\":\"0.00\",\"startDate\":\"Mar 1, 2015\",\"endDate\":null},\"serverId\":\"198970\",\"serverType\":\"Bare Metal\",\"serverName\":\"LSPG002\"}}]}"
605
+ end
606
+
607
+ it 'returns all IPs associated to the account' do
608
+ stub_request(:get, "https://api.leaseweb.com/v1/ips").
609
+ with(:headers => request_headers).
610
+ to_return(:status => 200, :body => response, :headers => {})
611
+
612
+ subject.getIps
613
+ end
614
+ end
615
+
616
+ describe '#getIps' do
617
+ let(:response) do
618
+ "{\"ip\":{\"ip\":\"209.58.131.10\",\"reverseLookup\":\"\",\"ipDetails\":{\"gateway\":\"209.58.131.62\",\"mask\":\"255.255.255.192\"},\"nullRouted\":false,\"billingInformation\":{\"price\":\"0.00\",\"startDate\":\"Jun 1, 2015\",\"endDate\":null},\"serverId\":\"114916\",\"serverType\":\"Bare Metal\",\"serverName\":\"LSPG003\"}}"
619
+ end
620
+
621
+ it 'returns information about the IP' do
622
+ stub_request(:get, "https://api.leaseweb.com/v1/ips/209.58.131.10").
623
+ with(:headers => request_headers).
624
+ to_return(:status => 200, :body => response, :headers => {})
625
+
626
+ subject.getIp('209.58.131.10')
627
+ end
628
+ end
629
+
630
+ describe '#updateIp' do
631
+ let(:response) { "{}" }
632
+
633
+ it 'Updates information about the IP' do
634
+ body = 'reverseLookup=modified-by-api.leaseweb.com&nullRouted=1'
635
+
636
+ stub_request(:put, "https://api.leaseweb.com/v1/ips/209.58.131.10").
637
+ with(:headers => request_headers, :body => body).
638
+ to_return(:status => 200, :body => response, :headers => {})
639
+
640
+ subject.updateIp('209.58.131.10', 'modified-by-api.leaseweb.com', 1)
641
+ end
642
+ end
643
+ end