Class: LeasewebAPI

Inherits:
Object
  • Object
show all
Includes:
HTTParty
Defined in:
lib/leaseweb-rest-api.rb

Instance Method Summary collapse

Constructor Details

#initializeLeasewebAPI

Returns a new instance of LeasewebAPI.



15
16
17
18
# File 'lib/leaseweb-rest-api.rb', line 15

def initialize
  @tmpdir = '/tmp/lsw-rest-api'
  Dir.mkdir(@tmpdir) unless Dir.exist?(@tmpdir)
end

Instance Method Details

#addDedicatedServerToPrivateNetwork(id, server_id) ⇒ Object



222
223
224
225
226
# File 'lib/leaseweb-rest-api.rb', line 222

def addDedicatedServerToPrivateNetwork(id, server_id)
  opt = @options.merge!(body: { serverId: server_id }.to_json)

  self.class.post("/bareMetals/v2/privateNetworks/#{id}/servers", opt)
end

#apiKeyAuth(apikey) ⇒ Object



20
21
22
23
24
25
26
27
# File 'lib/leaseweb-rest-api.rb', line 20

def apiKeyAuth(apikey)
  @options = {
    headers: {
      'X-Lsw-Auth' => apikey,
      'Content-Type' => 'application/json'
    }
  }
end

#createDedicatedServerDhcpReservation(server_id, boot_file_name) ⇒ Object



131
132
133
134
# File 'lib/leaseweb-rest-api.rb', line 131

def createDedicatedServerDhcpReservation(server_id, boot_file_name)
  opt = @options.merge!(body: { bootFileName: boot_file_name }.to_json)
  self.class.post("/bareMetals/v2/servers/#{server_id}/leases", opt)
end

#createPrivateNetworks(name = '') ⇒ Object

TODO: check post with name



201
202
203
204
205
# File 'lib/leaseweb-rest-api.rb', line 201

def createPrivateNetworks(name = '')
  opt = @options.merge!(body: { name: name }.to_json)

  self.class.post('/bareMetals/v2/privateNetworks', opt)
end

#delete(url) ⇒ Object



60
61
62
# File 'lib/leaseweb-rest-api.rb', line 60

def delete(url)
  self.class.delete(url, @options)
end

#deletePrivateNetwork(id) ⇒ Object



218
219
220
# File 'lib/leaseweb-rest-api.rb', line 218

def deletePrivateNetwork(id)
  self.class.delete("/bareMetals/v2/privateNetworks/#{id}", @options)
end

#get(url) ⇒ Object



46
47
48
# File 'lib/leaseweb-rest-api.rb', line 46

def get(url)
  self.class.get(url, @options)
end

#get_paginated(url, key, offset = 0, limit = 50) ⇒ Object



64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/leaseweb-rest-api.rb', line 64

def get_paginated(url, key, offset = 0, limit = 50)
  data = []

  loop do
    response = self.class.get("#{url}&offset=#{offset}&limit=#{limit}", @options)
    total = response.parsed_response['_metadata']['totalCount']
    data += response.parsed_response[key]
    offset += limit

    break unless offset < total
  end

  data
end

#getControlPanel(operating_system_id, control_panel_id) ⇒ Object



245
246
247
# File 'lib/leaseweb-rest-api.rb', line 245

def getControlPanel(operating_system_id, control_panel_id)
  self.class.get("/bareMetals/v2/operatingSystems/#{operating_system_id}/controlPanels/#{control_panel_id}", @options)
end

#getControlPanels(operating_system_id) ⇒ Object



241
242
243
# File 'lib/leaseweb-rest-api.rb', line 241

def getControlPanels(operating_system_id)
  self.class.get("/bareMetals/v2/operatingSystems/#{operating_system_id}/controlPanels", @options)
end

#getDedicatedServer(server_id) ⇒ Object



118
119
120
# File 'lib/leaseweb-rest-api.rb', line 118

def getDedicatedServer(server_id)
  self.class.get("/bareMetals/v2/servers/#{server_id}", @options)
end

#getDedicatedServerBandwidthMetrics(server_id, date_from, date_to, format = 'json') ⇒ Object



264
265
266
# File 'lib/leaseweb-rest-api.rb', line 264

def getDedicatedServerBandwidthMetrics(server_id, date_from, date_to, format = 'json')
  self.class.get("/bareMetals/v2/servers/#{server_id}/metrics/bandwidth", formatRequest(date_from, date_to, 'AVG', format))
end

#getDedicatedServerByIp(ip) ⇒ Object



114
115
116
# File 'lib/leaseweb-rest-api.rb', line 114

def getDedicatedServerByIp(ip)
  self.class.get("/internal/dedicatedserverapi/v2/servers?ip=#{ip}", @options)
end

#getDedicatedServerDatatrafficMetrics(server_id, date_from, date_to, format = 'json') ⇒ Object



268
269
270
# File 'lib/leaseweb-rest-api.rb', line 268

def getDedicatedServerDatatrafficMetrics(server_id, date_from, date_to, format = 'json')
  self.class.get("/bareMetals/v2/servers/#{server_id}/metrics/datatraffic", formatRequest(date_from, date_to, 'SUM', format))
end

#getDedicatedServerDhcpReservation(server_id) ⇒ Object



126
127
128
129
# File 'lib/leaseweb-rest-api.rb', line 126

def getDedicatedServerDhcpReservation(server_id)
  result = self.class.get("/bareMetals/v2/servers/#{server_id}/leases", @options)
  result['leases'].pop
end

#getDedicatedServerHardware(server_id) ⇒ Object



122
123
124
# File 'lib/leaseweb-rest-api.rb', line 122

def getDedicatedServerHardware(server_id)
  self.class.get("/bareMetals/v2/servers/#{server_id}/hardwareInfo", @options)
end

#getDedicatedServers(result = nil) ⇒ Object



95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/leaseweb-rest-api.rb', line 95

def getDedicatedServers(result = nil)
  partialSize = (result && result['servers'] && result['servers'].size) || 0
  partialResult = self.class.get("/bareMetals/v2/servers?offset=#{partialSize}&limit=50", @options)

  return partialResult if partialResult['errorMessage']

  if result.nil?
    result = partialResult
  else
    result['servers'] += partialResult['servers']
    result['_metadata']['offset'] = 0
    result['_metadata']['limit'] = partialResult['_metadata']['totalCount']
  end

  return getDedicatedServers(result) if result['servers'].size < partialResult['_metadata']['totalCount']

  result
end

#getIp(ip) ⇒ Object



254
255
256
# File 'lib/leaseweb-rest-api.rb', line 254

def getIp(ip)
  self.class.get("/ipMgmt/v2/ips/#{ip}", @options)
end

#getIpsObject

IPs



250
251
252
# File 'lib/leaseweb-rest-api.rb', line 250

def getIps
  self.class.get('/ipMgmt/v2/ips', @options)
end

#getOauthToken(client_id, client_secret) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/leaseweb-rest-api.rb', line 29

def getOauthToken(client_id, client_secret)
  access_token = validate_token(client_id)

  if access_token == false
    response = self.class.post('https://auth.leaseweb.com/token', basic_auth: { username: client_id, password: client_secret }, body: { grant_type: 'client_credentials' })
    access_token = response.parsed_response['access_token']
    cache_token(client_id, access_token, response.parsed_response['expires_in'])
  end

  @options = {
    headers: {
      'Authorization' => "Bearer #{access_token}",
      'Content-Type' => 'application/json'
    }
  }
end

#getOperatingSystem(operating_system_id) ⇒ Object



237
238
239
# File 'lib/leaseweb-rest-api.rb', line 237

def getOperatingSystem(operating_system_id)
  self.class.get("/bareMetals/v2/operatingSystems/#{operating_system_id}", @options)
end

#getOperatingSystemsObject

Operating Systems



233
234
235
# File 'lib/leaseweb-rest-api.rb', line 233

def getOperatingSystems
  self.class.get('/bareMetals/v2/operatingSystems', @options)
end

#getPrivateNetwork(id) ⇒ Object



207
208
209
# File 'lib/leaseweb-rest-api.rb', line 207

def getPrivateNetwork(id)
  self.class.get("/bareMetals/v2/privateNetworks/#{id}", @options)
end

#getPrivateNetworksObject

Private Networks



196
197
198
# File 'lib/leaseweb-rest-api.rb', line 196

def getPrivateNetworks
  self.class.get('/bareMetals/v2/privateNetworks', @options)
end

#getVirtualServer(server_id) ⇒ Object



175
176
177
# File 'lib/leaseweb-rest-api.rb', line 175

def getVirtualServer(server_id)
  self.class.get("/cloud/v2/virtualServers/#{server_id}", @options)
end

#getVirtualServerControlPanelCredentials(server_id) ⇒ Object



179
180
181
# File 'lib/leaseweb-rest-api.rb', line 179

def getVirtualServerControlPanelCredentials(server_id)
  self.class.get("/cloud/v2/virtualServers/#{server_id}/credentials/CONTROL_PANEL", @options)
end

#getVirtualServerControlPanelCredentialsForUser(server_id, username) ⇒ Object



183
184
185
# File 'lib/leaseweb-rest-api.rb', line 183

def getVirtualServerControlPanelCredentialsForUser(server_id, username)
  self.class.get("/cloud/v2/virtualServers/#{server_id}/credentials/CONTROL_PANEL/#{username}", @options)
end

#getVirtualServerOsCredentials(server_id) ⇒ Object



187
188
189
# File 'lib/leaseweb-rest-api.rb', line 187

def getVirtualServerOsCredentials(server_id)
  self.class.get("/cloud/v2/virtualServers/#{server_id}/credentials/OPERATING_SYSTEM", @options)
end

#getVirtualServerOsCredentialsForUser(server_id, username) ⇒ Object



191
192
193
# File 'lib/leaseweb-rest-api.rb', line 191

def getVirtualServerOsCredentialsForUser(server_id, username)
  self.class.get("/cloud/v2/virtualServers/#{server_id}/credentials/OPERATING_SYSTEM/#{username}", @options)
end

#getVirtualServers(result = nil) ⇒ Object



156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
# File 'lib/leaseweb-rest-api.rb', line 156

def getVirtualServers(result = nil)
  partialSize = (result && result['virtualServers'] && result['virtualServers'].size) || 0
  partialResult = self.class.get("/cloud/v2/virtualServers?offset=#{partialSize}&limit=50", @options)

  return partialResult if partialResult['errorMessage']

  if result.nil?
    result = partialResult
  else
    result['virtualServers'] += partialResult['virtualServers']
    result['_metadata']['offset'] = 0
    result['_metadata']['limit'] = partialResult['_metadata']['totalCount']
  end

  return getVirtualServers(result) if result['virtualServers'].size < partialResult['_metadata']['totalCount']

  result
end

#launchRescueModeDedicatedServer(server_id, rescue_image_id, ssh_key) ⇒ Object



87
88
89
90
91
92
93
# File 'lib/leaseweb-rest-api.rb', line 87

def launchRescueModeDedicatedServer(server_id, rescue_image_id, ssh_key)
  self.class.post("/bareMetals/v2/servers/#{server_id}/cancelActiveJob", @options)

  opt = @options.merge!(body: { rescueImageId: rescue_image_id, sshKeys: ssh_key, powerCycle: true }.to_json)

  self.class.post("/bareMetals/v2/servers/#{server_id}/rescueMode", opt)
end

#post(url, body) ⇒ Object



50
51
52
53
# File 'lib/leaseweb-rest-api.rb', line 50

def post(url, body)
  opt = @options.merge!(body: body)
  self.class.post(url, opt)
end

#powerOffVirtualServer(server_id) ⇒ Object



144
145
146
# File 'lib/leaseweb-rest-api.rb', line 144

def powerOffVirtualServer(server_id)
  self.class.post("/cloud/v2/virtualServers/#{server_id}/powerOff", @options)
end

#powerOnDedicatedServer(server_id) ⇒ Object



83
84
85
# File 'lib/leaseweb-rest-api.rb', line 83

def powerOnDedicatedServer(server_id)
  self.class.post("/bareMetals/v2/servers/#{server_id}/powerOn", @options)
end

#powerOnVirtualServer(server_id) ⇒ Object



140
141
142
# File 'lib/leaseweb-rest-api.rb', line 140

def powerOnVirtualServer(server_id)
  self.class.post("/cloud/v2/virtualServers/#{server_id}/powerOn", @options)
end

#put(url, body) ⇒ Object



55
56
57
58
# File 'lib/leaseweb-rest-api.rb', line 55

def put(url, body)
  opt = @options.merge!(body: body)
  self.class.put(url, opt)
end

#rebootDedicatedServer(server_id) ⇒ Object



79
80
81
# File 'lib/leaseweb-rest-api.rb', line 79

def rebootDedicatedServer(server_id)
  self.class.post("/bareMetals/v2/servers/#{server_id}/powerCycle", @options)
end

#rebootVirtualServer(server_id) ⇒ Object



148
149
150
# File 'lib/leaseweb-rest-api.rb', line 148

def rebootVirtualServer(server_id)
  self.class.post("/cloud/v2/virtualServers/#{server_id}/reboot", @options)
end

#reinstallVirtualServer(server_id) ⇒ Object



152
153
154
# File 'lib/leaseweb-rest-api.rb', line 152

def reinstallVirtualServer(server_id)
  self.class.post("/cloud/v2/virtualServers/#{server_id}/reinstall", @options)
end

#removeDedicatedServerDhcpReservation(server_id) ⇒ Object



136
137
138
# File 'lib/leaseweb-rest-api.rb', line 136

def removeDedicatedServerDhcpReservation(server_id)
  self.class.delete("/bareMetals/v2/servers/#{server_id}/leases", @options)
end

#removeDedicatedServerFromPrivateNetwork(id, server_id) ⇒ Object



228
229
230
# File 'lib/leaseweb-rest-api.rb', line 228

def removeDedicatedServerFromPrivateNetwork(id, server_id)
  self.class.delete("/bareMetals/v2/privateNetworks/#{id}/servers/#{server_id}", @options)
end

#updateIp(ip, reverse_lookup = '', null_routed = 0) ⇒ Object



258
259
260
261
262
# File 'lib/leaseweb-rest-api.rb', line 258

def updateIp(ip, reverse_lookup = '', null_routed = 0)
  opt = @options.merge!(body: { reverseLookup: reverse_lookup, nullRouted: null_routed }.to_json)

  self.class.put("/ipMgmt/v2/ips/#{ip}", opt)
end

#updatePrivateNetwork(id, name = '') ⇒ Object

TODO: Check with Jeroen if it works



212
213
214
215
216
# File 'lib/leaseweb-rest-api.rb', line 212

def updatePrivateNetwork(id, name = '')
  opt = @options.merge!(body: { name: name }.to_json)

  self.class.put("/bareMetals/v2/privateNetworks/#{id}", opt)
end