summaryrefslogtreecommitdiffstats
path: root/server/lib/external-backends
diff options
context:
space:
mode:
authorJannik Schönartz2019-04-14 04:46:53 +0200
committerJannik Schönartz2019-04-14 04:46:53 +0200
commitf0808189575e7024d0ad100dfb71b18810ec79de (patch)
tree723346534123ff462c4d5d1bbdf5f25546adc6b5 /server/lib/external-backends
parenteslint fixes (diff)
downloadbas-f0808189575e7024d0ad100dfb71b18810ec79de.tar.gz
bas-f0808189575e7024d0ad100dfb71b18810ec79de.tar.xz
bas-f0808189575e7024d0ad100dfb71b18810ec79de.zip
[server/external-backends] Add delete method for the infoblox backend & add infoblox client mappings method
Diffstat (limited to 'server/lib/external-backends')
-rw-r--r--server/lib/external-backends/backends/infoblox-backend.js57
-rw-r--r--server/lib/external-backends/index.js2
2 files changed, 54 insertions, 5 deletions
diff --git a/server/lib/external-backends/backends/infoblox-backend.js b/server/lib/external-backends/backends/infoblox-backend.js
index 6076217..2671491 100644
--- a/server/lib/external-backends/backends/infoblox-backend.js
+++ b/server/lib/external-backends/backends/infoblox-backend.js
@@ -132,7 +132,7 @@ class InfobloxBackend extends ExternalBackends {
return { error: 'ERROR_INFOBLOX', msg: createHost.text }
} else {
if (!name) return { ip: createHost.result.ipv4addr }
- else return { host: createHost.result.ipv4addrs[0].host, ip: createHost.result.ipv4addrs[0].ipv4addr }
+ else return { host: createHost.result.ipv4addrs[0].host, ip: createHost.result.ipv4addrs[0].ipv4addr, id: createHost.result._ref }
}
}
@@ -140,6 +140,41 @@ class InfobloxBackend extends ExternalBackends {
return true
}
+ async deleteObjects (credentials, objectIds) {
+ const c = this.mapCredentials(credentials)
+
+ const ipam = new Infoblox({
+ ip: c.url,
+ apiVersion: c.version
+ })
+ const login = await ipam.login(c.username, c.password)
+ if (!login) return { error: 'LOGIN_FAILED' }
+
+ for (let index in objectIds) {
+ const ref = objectIds[index]
+ await ipam.delete(ref)
+ }
+ }
+
+ async getObjects (credentials) {
+ const c = this.mapCredentials(credentials)
+
+ const ipam = new Infoblox({
+ ip: c.url,
+ apiVersion: c.version
+ })
+ const login = await ipam.login(c.username, c.password)
+ if (!login) return { error: 'LOGIN_FAILED' }
+
+ let result = []
+ const records = JSON.parse(await ipam.list('record:host?zone=lp.privat'))
+ for (let index in records) {
+ const record = records[index]
+ result.push({ id: record._ref, mac: record.ipv4addrs[0].mac, ip: record.ipv4addrs[0].ipv4addr })
+ }
+ return result
+ }
+
// ############################################################################
// ####################### helper/optional functions #########################
// Helper function, to map the array of credential objects into a single js object.
@@ -170,33 +205,47 @@ class InfobloxBackend extends ExternalBackends {
// Get network from ip
result['getNetworkFromIp'] = JSON.parse(await ipam.getNetworkFromIp('10.21.9.78'))
// Get host
- // result["getHost.78"] = JSON.parse(await ipam.getHost('10.21.9.78'))
+ result['getHost.78'] = JSON.parse(await ipam.getHost('10.21.9.78'))
// result["getHost.219"] = JSON.parse(await ipam.getHost('10.21.9.219'))
+ result['getHost.12'] = JSON.parse(await ipam.getHost('10.21.9.12'))
+
// Get ips from subnet
// result["getIpsFromSubnet"] = JSON.parse(await ipam.getIpsFromSubnet('10.21.9.0/24'))
+
// List records
// result["list"] = JSON.parse(await ipam.list('record:host'))
+
// Get Domain
result['getDomain'] = await ipam.getDomain()
+
// Get next ip
// result["getNextIp.1"] = await ipam.getNext(result["getNetworkFromIp"][0]._ref, 1)
+
// Get next 20 ips
// result["getNextIp.20"] = await ipam.getNext(result["getNetworkFromIp"][0]._ref, 20)
// Create Host
// result['createHost'] = await ipam.create('record:host?_return_fields%2B=ipv4addrs&_return_as_object=1', {'name': 'wapiTest2.lp.privat', 'ipv4addrs': [{'ipv4addr': '10.21.9.218', 'mac': 'aa:bb:cc:11:22:21'}]})
+
/*
result['create'] = await ipam.create('record:host?_return_fields%2B=ipv4addrs&_return_as_object=1', {
'name': 'test.lp.privat',
'ipv4addrs': [
{
- 'ipv4addr': 'func:nextavailableip:' + result['getNetworkFromIp'][0].network,
+ //'ipv4addr': 'func:nextavailableip:' + result['getNetworkFromIp'][0].network,
+ 'ipv4addr': '10.21.9.206',
'mac': 'aa:bb:cc:11:22:21'
}
]
})
- result['create']
*/
+
+ // Delete stuff
+ // result["getHost.173"] = JSON.parse(await ipam.getHost('10.21.9.173'))
+ // result["deleteHost.173"] = JSON.parse(await ipam.delete(result["getHost.173"][0]._ref))
+ // result["deleteHost.206"] = JSON.parse(await ipam.delete('record:host/ZG5zLmhvc3QkLl9kZWZhdWx0LnByaXZhdC5scC50ZXN0:test.lp.privat/default'))
+
+ result['allrecords'] = JSON.parse(await ipam.list('record:host?zone=lp.privat'))
return result
}
}
diff --git a/server/lib/external-backends/index.js b/server/lib/external-backends/index.js
index 8dcae5a..9716b36 100644
--- a/server/lib/external-backends/index.js
+++ b/server/lib/external-backends/index.js
@@ -69,7 +69,7 @@ class ExternalBackends {
*
* Returns a list of all objects in the backend.
*/
- async getObjects (credendtials) {
+ async getObjects (credentials) {
return { error: 'NOT_IMPLEMENTED_EXCEPTION', message: 'The provided backend does not have a getObjects method' }
}