Initial commit

This commit is contained in:
Neill Cox 2023-09-17 20:28:11 -04:00
commit f01c1d971b
4 changed files with 150 additions and 0 deletions

117
main.py Normal file
View file

@ -0,0 +1,117 @@
"""
Quick and dirty script to help setup config filers for a RHOSP AIO install
"""
import argparse
import os
import subprocess
import yaml
def parse_args():
"""Parse the command line arguments"""
parser = argparse.ArgumentParser()
parser.add_argument("-u", "--username", required=True)
parser.add_argument("-p", "--password", required=True)
parser.add_argument("-a", "--address", required=True)
parser.add_argument("-i", "--interface", default="enp1s0")
parser.add_argument("-m", "--netmask", default=24)
parser.add_argument(
"-d", "--dns", nargs="+", action="append", required=True
)
parser.add_argument("-D", "--domain", default="aio")
parser.add_argument("--using-multiple-nics", action="store_true")
parser.add_argument("-U", "--deployment-user")
parser.add_argument("--deployment-dir")
parser.add_argument("-g", "--gateway")
parser.add_argument(
"--containers-yaml-out",
default="./containers-prepare-parameters.yaml.gen",
)
parser.add_argument(
"--standalone-yaml-out", default="./standalone_parameters.yaml.gen"
)
args = parser.parse_args()
if not args.deployment_user:
args.deployment_user = os.environ.get("USER")
if not args.deployment_dir:
args.deployment_dir = os.environ.get("HOME")
if not args.using_multiple_nics and not args.gateway:
raise ValueError("Must specify a gateway when using a single nic")
return args
def get_standalone_parameters(args):
"""Build the standalone parameters as a dict ready to serialize as yaml"""
sp_dict = {
"parameter_defaults": {
"CloudName": args.address,
"CloudDomain": args.domain,
"ControlPlaneStaticRoutes": [],
"Debug": True,
"DeploymentUser": args.deployment_user,
"DnsServers": [dns[0] for dns in args.dns],
"NeutronPublicInterface": args.interface,
"NeutronDnsDomain": "localdomain",
"NeutronBridgeMappings": "datacentre:br-ctlplane",
"NeutronPhysicalBridge": "br-ctlplane",
"StandaloneEnableRoutedNetworks": False,
"StandaloneHomeDir": args.deployment_dir,
"StandaloneLocalMtu": 1500,
}
}
if not args.using_multiple_nics:
sp_dict["parameter_defaults"]["ControlPlaneStaticRoutes"] = [
{
"ip_netmask": "0.0.0.0/0",
"next_hop": args.gateway,
"default": True,
}
]
return sp_dict
def build_containers_yaml(args):
"""Build the containers yaml based on a previously generated file."""
cmd = "sudo openstack tripleo container image prepare default"
result = subprocess.check_output(cmd, shell=True, universal_newlines=True)
data = yaml.load(result, Loader=yaml.Loader)
data["parameter_defaults"]["ContainerImageRegistryCredentials"] = {
"registry.redhat.io": {args.username: args.password}
}
data["parameter_defaults"]["ContainerImageRegistryLogin"] = True
return data
def main():
"""main function"""
args = parse_args()
containers_yaml = build_containers_yaml(args)
with open(
args.containers_yaml_out, "w", encoding="utf-8"
) as containers_out:
containers_out.write(yaml.dump(containers_yaml))
print(f"containers yaml written to {args.containers_yaml_out}")
standalone_parameters = get_standalone_parameters(args)
with open(
args.standalone_yaml_out, "w", encoding="utf-8"
) as parameters_out:
parameters_out.write(yaml.dump(standalone_parameters))
print(f"standalone parameters yaml written to {args.standalone_yaml_out}")
if __name__ == "__main__":
main()