diff --git a/src/tripleo_aio_helpers/create_aio_vm.py b/src/tripleo_aio_helpers/create_aio_vm.py index 98ac977..47bf8c7 100644 --- a/src/tripleo_aio_helpers/create_aio_vm.py +++ b/src/tripleo_aio_helpers/create_aio_vm.py @@ -14,6 +14,8 @@ ND_PATH = "./network-config" def parse_args(): """Parse the command line arguments""" + # pylint: disable=too-many-statements + template_path = pathlib.Path(__file__).parent.parent / "virt-install" parser = argparse.ArgumentParser() parser.add_argument("--password", required=True) @@ -21,12 +23,10 @@ def parse_args(): parser.add_argument("--local-hostname", required=True) parser.add_argument("--user-data", default=template_path / "user-data.tpl") parser.add_argument("--meta-data", default=template_path / "meta-data.tpl") - parser.add_argument( - "--network-data", default=template_path / "network-config.tpl" - ) + parser.add_argument("--network-data", default=template_path / "network-config.tpl") parser.add_argument("--instance-id", required=True, help="Hostname for the new VM") parser.add_argument("--output-image", required=True) - parser.add_argument("--image-size", default="100G") + parser.add_argument("--image-size", default="800G") parser.add_argument("--input-image", required=True) parser.add_argument("--os-variant", required=True) parser.add_argument("--name", required=True) @@ -35,9 +35,11 @@ def parse_args(): parser.add_argument("--gateway") parser.add_argument("--cidr-1") parser.add_argument("--cidr-2") - parser.add_argument("--mac-1",default="RANDOM") - parser.add_argument("--mac-2",default="RANDOM") - parser.add_argument("--dns",) + parser.add_argument("--mac-1", default="RANDOM") + parser.add_argument("--mac-2", default="RANDOM") + parser.add_argument( + "--dns", + ) parser.add_argument("--search-domain") parser.add_argument("-v", "--verbose", action="store_true") parser.add_argument("--rhn-user", required=True) @@ -61,22 +63,27 @@ def parse_args(): print("You must specify a DNS server if you specify any addresses") sys.exit(1) - if not (args.cidr_1 or args.cidr_2) and (args.dns or args.gateway or args.search_domain): - print("There's no point specifying DNS, gateway or search_domain if yoou don't specify addresses") - sys.exit(1) + # if not (args.cidr_1 or args.cidr_2) and ( + # args.dns or args.gateway or args.search_domain + # ): + # print( + # "There's no point specifying DNS, gateway or search_domain if you" + # " don't specify addresses" + # ) + # sys.exit(1) args.public_key = args.public_key.read() - with open(args.user_data) as user_data: + with open(args.user_data, encoding="utf-8") as user_data: args.user_data = user_data.read() generate_boot_cmd(args) args.user_data = args.user_data.format(data=args) - with open(args.meta_data) as meta_data: + with open(args.meta_data, encoding="utf-8") as meta_data: args.meta_data = meta_data.read() args.meta_data = args.meta_data.format(data=args) - with open(args.network_data) as network_data: + with open(args.network_data, encoding="utf-8") as network_data: args.network_data = network_data.read() args.network_data = args.network_data.format(data=args) @@ -92,17 +99,24 @@ def parse_args(): return args + def generate_boot_cmd(data): - data.bootcmd="" + """Generate the bootcmd section of the user-data""" + data.bootcmd = "" if data.cidr_1: data.bootcmd = ( "bootcmd:\n" - f' - "nmcli con modify \'System eth0\' ipv4.address {data.cidr_1} ipv4.method static ipv4.gateway {data.gateway} ipv4.dns {data.dns}"\n' - f' - "nmcli con modify \'Wired connection 1\' ipv4.address {data.cidr_2} ipv4.method static ipv4.gateway {data.gateway} ipv4.dns {data.dns}"\n' + f" - \"nmcli con modify 'System eth0' ipv4.address {data.cidr_1}" + f" ipv4.method static ipv4.gateway {data.gateway} " + f'ipv4.dns {data.dns}"\n' + " - \"nmcli con modify 'Wired connection 1' ipv4.address " + f"{data.cidr_2} ipv4.method static ipv4.gateway {data.gateway} " + f'ipv4.dns {data.dns}"\n' ' - "nmcli networking off"\n' ' - "nmcli networking on"\n' ) + def write_user_data(data): """Write out a temporary user data file""" @@ -124,7 +138,7 @@ def write_network_data(network_data): def create_image(args): """ - Create a new image file bashed on the input image, resized to the + Create a new image file bashed on the input image, resized to the specified size. """ @@ -132,7 +146,7 @@ def create_image(args): cmd = ( "qemu-img create -f qcow2 -o preallocation=metadata " f"{args.output_image} {args.image_size}" - ) + ) result = subprocess.check_output(cmd, shell=True, universal_newlines=True) if args.verbose: @@ -148,6 +162,7 @@ def create_image(args): print("Image resized") + def virt_install_cmd(args): """Build and execute the virt-install command""" cmd = f""" @@ -190,16 +205,14 @@ def delete_user_data(): def install_packages(args): """Install the packages needed for virt-install to work""" cmd = ( - "sudo dnf install -y virt-install virt-viewer qemu-img " + "sudo dnf install -y virt-install virt-viewer qemu-img " "libguestfs.x86_64" ) print("installing needed packages...") if args.verbose: - print( - subprocess.check_output(cmd, shell=True, universal_newlines=True) - ) + print(subprocess.check_output(cmd, shell=True, universal_newlines=True)) def main():