From f0808189575e7024d0ad100dfb71b18810ec79de Mon Sep 17 00:00:00 2001 From: Jannik Schönartz Date: Sun, 14 Apr 2019 02:46:53 +0000 Subject: [server/external-backends] Add delete method for the infoblox backend & add infoblox client mappings method --- .../external-backends/backends/infoblox-backend.js | 57 ++++++++++++++++++++-- server/lib/external-backends/index.js | 2 +- 2 files changed, 54 insertions(+), 5 deletions(-) (limited to 'server/lib/external-backends') 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' } } -- cgit v1.2.3-55-g7522