mirror of
https://github.com/xcat2/confluent.git
synced 2024-11-25 19:10:10 +00:00
1a10b5d747
In a confluent2lxca scenario, it is highly probably that confluent's attribute is not viable for LXCA usage (link local address). Give the current configuration the opportunity to replace the confluent reference with the current IPv4 of the host.
77 lines
3.0 KiB
Python
77 lines
3.0 KiB
Python
#!/usr/bin/env python
|
|
import csv
|
|
import optparse
|
|
import signal
|
|
import sys
|
|
import os
|
|
try:
|
|
signal.signal(signal.SIGPIPE, signal.SIG_DFL)
|
|
except AttributeError:
|
|
pass
|
|
|
|
path = os.path.dirname(os.path.realpath(__file__))
|
|
path = os.path.realpath(os.path.join(path, '..', 'lib', 'python'))
|
|
if path.startswith('/opt'):
|
|
sys.path.append(path)
|
|
|
|
import confluent.client as client
|
|
import confluent.sortutil as sortutil
|
|
|
|
headers = '# Type,Serial Number,Current IP,Current username,Current password,New password,Recovery password,Switch enable password,New IPv4,IPv4 Subnet mask,IPv4 Default gateway,IPv4 DNS1,IPv4 DNS2,New IPv6,IPv6 Prefix,IPv6 Default gateway,IPv6 DNS1,IPv6 DNS2,Domain,Host name,Display name,Rack,Lowest Rack Unit,Height,Force,Stored credentials ID,Managed authentication,Group Name'.split(',')
|
|
|
|
def lookupdata(data, key):
|
|
ret = data.get(key, {}).get('value', '')
|
|
if ret is None:
|
|
ret = ''
|
|
return ret
|
|
|
|
def main():
|
|
argparser = optparse.OptionParser(
|
|
usage='''\n %prog noderange -o bulkimport.csv
|
|
\n ''')
|
|
argparser.add_option('-o', '--output',
|
|
help='File to write for bulk import into xClarity Administrator')
|
|
(options, args) = argparser.parse_args()
|
|
try:
|
|
noderange = args[0]
|
|
except IndexError:
|
|
argparser.print_help()
|
|
sys.exit(1)
|
|
if not options.output:
|
|
sys.stderr.write('Output file must be specified by -o\n')
|
|
sys.exit(1)
|
|
if 'XCCUSER' not in os.environ or 'XCCPASS' not in os.environ:
|
|
sys.stderr.write('Must specify XCCUSER and XCCPASS in environment variables\n')
|
|
sys.exit(1)
|
|
xccuser = os.environ['XCCUSER']
|
|
xccpass = os.environ['XCCPASS']
|
|
sess = client.Command()
|
|
databynode = {}
|
|
for res in sess.read('/noderange/{0}/attributes/all'.format(noderange)):
|
|
for node in res.get('databynode', {}):
|
|
if node not in databynode:
|
|
databynode[node] = {}
|
|
databynode[node].update(res['databynode'][node])
|
|
for res in sess.read(
|
|
'/noderange/{0}/configuration/management_controller/net_interfaces/management'.format(
|
|
noderange)):
|
|
for node in res.get('databynode', {}):
|
|
currip = res['databynode'][node].get('ipv4_address', {}).get(
|
|
'value', '')
|
|
if currip:
|
|
databynode[node]['hardwaremanagement.manager'] = {
|
|
'value': currip.split('/', 1)[0]}
|
|
with open(options.output, 'w') as importfile:
|
|
bulkimport = csv.writer(importfile)
|
|
bulkimport.writerow(headers)
|
|
for node in sortutil.natural_sort(databynode):
|
|
data = databynode[node]
|
|
row = ['server', lookupdata(data, 'id.serial'), lookupdata(data, 'hardwaremanagement.manager'), xccuser, xccpass, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', node, lookupdata(data, 'location.rack'), lookupdata(data, 'location.u'), '', '', '','', '']
|
|
bulkimport.writerow(row)
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|