def main(): foreman = Foreman( conf["foreman_api_url"], conf["foreman_username"], conf["foreman_password"], ) all_hosts = foreman.get_all_hosts() blacklist = re.compile("|".join( [re.escape(word) for word in conf["exclude_hosts"].split("|")])) hosts = {} for host, properties in all_hosts.items(): if not blacklist.search(host): mgmt_host = foreman.get_idrac_host_with_details(host) if mgmt_host: properties["host_ip"] = properties["ip"] properties["host_mac"] = properties["mac"] properties["ip"] = mgmt_host["ip"] properties["mac"] = mgmt_host["mac"] consolidate_ipmi_data(host, "macaddr", properties["host_mac"]) consolidate_ipmi_data(host, "oobmacaddr", mgmt_host["mac"]) svctag_file = os.path.join(conf["data_dir"], "ipmi", host, "svctag") svctag = "" if os.path.exists(svctag_file): with open(svctag_file) as _file: svctag = _file.read() properties["svctag"] = svctag.strip() hosts[host] = properties _full_path = os.path.join(conf["wp_wiki_git_repo_path"], "main.md") if not os.path.exists(conf["wp_wiki_git_repo_path"]): pathlib.Path(conf["wp_wiki_git_repo_path"]).mkdir(parents=True, exist_ok=True) with open(_full_path, "w") as _f: _f.seek(0) for rack in conf["racks"].split(): if rack_has_hosts(rack, hosts): _f.write(render_header(rack)) for host, properties in hosts.items(): if rack in host: _f.write(render_row(host, properties)) _f.write("\n") _f.truncate()
def main(): foreman = Foreman( conf["foreman_api_url"], conf["foreman_username"], conf["foreman_password"] ) lines = [] all_hosts = foreman.get_all_hosts() blacklist = re.compile("|".join([re.escape(word) for word in conf["exclude_hosts"].split("|")])) broken_hosts = foreman.get_broken_hosts() domain_broken_hosts = { host: properties for host, properties in broken_hosts.items() if conf["domain"] in host } mgmt_hosts = {} for host, properties in all_hosts.items(): if not blacklist.search(host): mgmt_host = foreman.get_idrac_host_with_details(host) if mgmt_host: properties["host_ip"] = all_hosts.get(host, {"ip": None})["ip"] properties["host_mac"] = all_hosts.get(host, {"mac": None})["mac"] properties["ip"] = mgmt_host["ip"] properties["mac"] = mgmt_host["mac"] mgmt_hosts[mgmt_host["name"]] = properties lines.append("### **SUMMARY**\n") _summary = print_summary() lines.extend(_summary) details_header = ["\n", "### **DETAILS**\n", "\n"] lines.extend(details_header) summary_response = requests.get(os.path.join(API_URL, "summary")) _cloud_summary = [] if summary_response.status_code == 200: _cloud_summary = summary_response.json() for cloud in [cloud for cloud in _cloud_summary if cloud["count"] > 0]: name = cloud["name"] owner = cloud["owner"] lines.append("### <a name=%s></a>\n" % name.strip()) lines.append("### **%s : %s (%s) -- %s**\n\n" % (name.strip(), cloud["count"], cloud["description"], owner)) lines.extend(print_header()) _cloud_obj = Cloud.objects(name=name).first() _hosts = Host.objects(cloud=_cloud_obj) for host in _hosts: lines.extend(add_row(host)) lines.append("\n") lines.extend(print_unmanaged(mgmt_hosts, domain_broken_hosts)) lines.extend(print_faulty(domain_broken_hosts)) _full_path = os.path.join(conf["wp_wiki_git_repo_path"], "assignments.md") if not os.path.exists(conf["wp_wiki_git_repo_path"]): pathlib.Path(conf["wp_wiki_git_repo_path"]).mkdir(parents=True, exist_ok=True) with open(_full_path, "w+") as _f: _f.seek(0) for cloud in lines: _line = cloud if cloud else "" _f.write(_line) _f.truncate()