| #!/usr/bin/env python3 |
| |
| # SPDX-FileCopyrightText: © 2021 Open Networking Foundation <support@opennetworking.org> |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| # pxeconfig.py |
| # Given a yaml config file (same as ansible inventory for a site), create a |
| # YAML file consumable by ansible that has input for the pxeboot role, for creating |
| # preseed files for servers |
| |
| from __future__ import absolute_import |
| |
| import nbhelper |
| |
| from ruamel import yaml |
| |
| # main function that calls other functions |
| if __name__ == "__main__": |
| |
| # this is passed to argparse, key is option name, rest is kwargs |
| extra_args = { |
| "domain_extension": { |
| "default": "aetherproject.net", |
| "nargs": "?", |
| "type": ascii, |
| "help": "Domain extension (optional, default: aetherproject.net)", |
| }, |
| } |
| |
| args = nbhelper.initialize(extra_args) |
| tenant = nbhelper.NBTenant() |
| |
| yaml_out = {} |
| pxeboot_hosts = [] |
| |
| prefixes = nbhelper.NBPrefix.all_prefixes() |
| devices = nbhelper.NBDevice.all_objects() |
| |
| for dev_id, device in devices.items(): |
| |
| # only pxeboot for servers |
| if device.data["device_role"]["slug"] == "server": |
| |
| pxe_dev = {} |
| pxe_dev["serial"] = device.data["serial"] |
| pxe_dev["hostname"] = device.data["name"] |
| pxe_dev["domain"] = args.domain_extension |
| pxe_dev["mac_address"] = device.primary_iface()["mac_address"].lower() |
| |
| pxeboot_hosts.append(pxe_dev) |
| |
| # yaml_out["devices"] = devices |
| yaml_out["pxeboot_hosts"] = pxeboot_hosts |
| |
| print(yaml.safe_dump(yaml_out, indent=2)) |