From 3f7eddb9782b4dffefdb8b11348b4c9a2203e444 Mon Sep 17 00:00:00 2001 From: Neill Cox Date: Tue, 26 Sep 2023 10:01:47 +1000 Subject: [PATCH] Allow specifying MACs for network interfaces --- src/tripleo_aio_helpers/create_aio_vm.py | 52 ++++++++++++++++++++---- src/virt-install/user-data.tpl | 8 +--- 2 files changed, 45 insertions(+), 15 deletions(-) diff --git a/src/tripleo_aio_helpers/create_aio_vm.py b/src/tripleo_aio_helpers/create_aio_vm.py index 1dd4ba8..6039231 100644 --- a/src/tripleo_aio_helpers/create_aio_vm.py +++ b/src/tripleo_aio_helpers/create_aio_vm.py @@ -5,6 +5,7 @@ Use virt-install to create a VM suitable for installing a RHOSP/tripleo AIO import argparse import pathlib import subprocess +import sys MD_PATH = "./meta-data" UD_PATH = "./user-data" @@ -32,17 +33,39 @@ def parse_args(): parser.add_argument("--name", required=True) parser.add_argument("--memory", default=16384) # , type="int") parser.add_argument("--cpus", default=4) # , type="int") - parser.add_argument("--gateway", required=True) - parser.add_argument("--cidr-1", required=True) - parser.add_argument("--cidr-2", required=True) - parser.add_argument("--dns", required=True) - parser.add_argument("--search-domain", required=True) + 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("--search-domain") parser.add_argument("-v", "--verbose", action="store_true") parser.add_argument("--rhn-user", required=True) parser.add_argument("--rhn-password", required=True) args = parser.parse_args() + if (args.cidr_1 or args.cidr_2) and not (args.cidr_1 and args.cidr_2): + print("You must specify two addresses if you specify any addresses") + sys.exit(1) + + if args.cidr_1 and not args.gateway: + print("You must specify a gateway if you specify any addresses") + sys.exit(1) + + if args.cidr_1 and not args.search_domain: + print("You must specify a search domain if you specify any addresses") + sys.exit(1) + + if args.cidr_1 and not args.dns: + 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) + args.public_key = args.public_key.read() args.user_data = args.user_data.read() @@ -67,10 +90,21 @@ def parse_args(): return args -def write_user_data(user_data): +def write_user_data(data): """Write out a temporary user data file""" + + data.boot_cmd="" + if data.cidr_1: + data.boot_cmd = ( + "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' + ' - "nmcli networking off"\n' + ' - "nmcli networking on"\n' + ) + with open(UD_PATH, "w", encoding="utf-8") as user_data_file: - user_data_file.write(user_data) + user_data_file.write(data) def write_meta_data(meta_data): @@ -126,8 +160,8 @@ def virt_install_cmd(args): --channel spicevmc \\ --wait 0 \\ --cloud-init meta-data=./meta-data,user-data=./user-data \\ - --network bridge=bridge0 \\ - --network bridge=bridge0 + --network bridge=bridge0,mac={args.mac_1} \\ + --network bridge=bridge0,mac={args.mac_2} """ print("running virt-install") diff --git a/src/virt-install/user-data.tpl b/src/virt-install/user-data.tpl index 383293e..c6d7211 100644 --- a/src/virt-install/user-data.tpl +++ b/src/virt-install/user-data.tpl @@ -7,11 +7,7 @@ chpasswd: {{expire: False}} ssh_pwauth: True ssh_authorized_keys: - {data.public_key} -bootcmd: - - "nmcli con modify 'System eth0' ipv4.address {data.cidr_1} ipv4.method static ipv4.gateway {data.gateway} ipv4.dns {data.dns}" - - "nmcli con modify 'Wired connection 1' ipv4.address {data.cidr_2} ipv4.method static ipv4.gateway {data.gateway} ipv4.dns {data.dns}" - - "nmcli networking off" - - "nmcli networking on" +{bootmd} runcmd: - "service sshd restart" - "subscription-manager register --username {data.rhn_user} --password '{data.rhn_password}'" @@ -25,7 +21,7 @@ runcmd: - "echo '***************************************************************************'" - "echo '*** ***'" - "echo '*** ***'" - - "'echo *** DNF UPDATE COMPLETE - REBOOT NOW ***'" + - "echo '*** DNF UPDATE COMPLETE - REBOOT NOW ***'" - "echo '*** ***'" - "echo '*** ***'" - "echo '***************************************************************************'"