import os from ansible import constants from collections import namedtuple from ansible.parsing.dataloader import DataLoader from ansible.playbook.play import Play from ansible.executor.task_queue_manager import TaskQueueManager from ansible.executor.playbook_executor import PlaybookExecutor from ansible.plugins.callback import CallbackBase from ansible.inventory.manager import InventoryManager from ansible.vars.manager import VariableManager from ansible.inventory.host import Host, Group from cmdb.settings import BASE_DIR from cmdb.settings import SSH_PRIVATE_KEY_FILE, SSH_USER
from asset.models import PhysicalHostInfo, NetworkInfo, MemoryInfo, HardDiskInfo from datetime import datetime import hashlib
elif task_name == 'mem': mem_info = [] result = result._result.get('stdout').split('\n\n') for i in result: ifnot i.startswith('Handle'): continue tmp = i.split('\n\t') mem_dict = {} for j in tmp: if':'notin j: continue else: k,v = j.split(':') mem_dict[k.strip()] = v.strip() mem_info.append(mem_dict)
if self.sn == self.sn_new: obj, status = PhysicalHostInfo.objects.get_or_create(sn=self.sn) else: obj, status = PhysicalHostInfo.objects.get_or_create(sn=self.sn_new) sn_list = [] for i in mem_info: if i.has_key('Size') and i.get('Size').endswith('MB'): size = i.get('Size', 'Unknown') slot = i.get('Locator', 'Unknown') interface = i.get('Type', 'Unknown') speed = i.get('Speed', 'Unknown') manufacturer = i.get('Manufacturer', 'Unknown') sn = i.get('Serial Number', None) ifnot sn or sn == 'None': h = hashlib.md5() h.update(obj.sn+slot) sn = h.hexdigest() sn_list.append(sn) voltage = i.get('Configured Voltage', 'Unknown')
mem_ins, status = MemoryInfo.objects.get_or_create(sn=sn) mem_ins.sn = sn mem_ins.size = size mem_ins.slot = slot mem_ins.interface = interface mem_ins.speed = speed mem_ins.manufacturer = manufacturer mem_ins.voltage = voltage mem_ins.host = obj mem_ins.save() mem_ins = MemoryInfo.objects.filter(host_id=obj.id).exclude(sn__in=sn_list) if mem_ins: mem_ins.delete() elif task_name == 'hd': if self.sn == self.sn_new: obj, status = PhysicalHostInfo.objects.get_or_create(sn=self.sn) else: obj, status = PhysicalHostInfo.objects.get_or_create(sn=self.sn_new) result = result._result.get('stdout') import re
defget_model_result(self): self.results_raw = {'success':{}, 'failed':{}, 'unreachable':{}} for host, result in self.callback.host_ok.items(): hostvisiable = host.replace('.','_') self.results_raw['success'][hostvisiable] = result._result
for host, result in self.callback.host_failed.items(): hostvisiable = host.replace('.','_') self.results_raw['failed'][hostvisiable] = result._result
for host, result in self.callback.host_unreachable.items(): hostvisiable = host.replace('.','_') self.results_raw['unreachable'][hostvisiable]= result._result
defget_playbook_result(self): self.results_raw = {'skipped':{}, 'failed':{}, 'ok':{},"status":{},'unreachable':{},"changed":{}} for host, result in self.callback.task_ok.items(): self.results_raw['ok'][host] = result
for host, result in self.callback.task_failed.items(): self.results_raw['failed'][host] = result
for host, result in self.callback.task_status.items(): self.results_raw['status'][host] = result
# for host, result in self.callback.task_changed.items(): # self.results_raw['changed'][host] = result
for host, result in self.callback.task_skipped.items(): self.results_raw['skipped'][host] = result
for host, result in self.callback.task_unreachable.items(): self.results_raw['unreachable'][host] = result return self.results_raw