Allow specifying MACs for network interfaces

This commit is contained in:
Neill Cox 2023-09-26 10:01:47 +10:00
parent b44b4978cd
commit 3f7eddb978
2 changed files with 45 additions and 15 deletions

View file

@ -5,6 +5,7 @@ Use virt-install to create a VM suitable for installing a RHOSP/tripleo AIO
import argparse import argparse
import pathlib import pathlib
import subprocess import subprocess
import sys
MD_PATH = "./meta-data" MD_PATH = "./meta-data"
UD_PATH = "./user-data" UD_PATH = "./user-data"
@ -32,17 +33,39 @@ def parse_args():
parser.add_argument("--name", required=True) parser.add_argument("--name", required=True)
parser.add_argument("--memory", default=16384) # , type="int") parser.add_argument("--memory", default=16384) # , type="int")
parser.add_argument("--cpus", default=4) # , type="int") parser.add_argument("--cpus", default=4) # , type="int")
parser.add_argument("--gateway", required=True) parser.add_argument("--gateway")
parser.add_argument("--cidr-1", required=True) parser.add_argument("--cidr-1")
parser.add_argument("--cidr-2", required=True) parser.add_argument("--cidr-2")
parser.add_argument("--dns", required=True) parser.add_argument("--mac-1",default="RANDOM")
parser.add_argument("--search-domain", required=True) 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("-v", "--verbose", action="store_true")
parser.add_argument("--rhn-user", required=True) parser.add_argument("--rhn-user", required=True)
parser.add_argument("--rhn-password", required=True) parser.add_argument("--rhn-password", required=True)
args = parser.parse_args() 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.public_key = args.public_key.read()
args.user_data = args.user_data.read() args.user_data = args.user_data.read()
@ -67,10 +90,21 @@ def parse_args():
return args return args
def write_user_data(user_data): def write_user_data(data):
"""Write out a temporary user data file""" """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: 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): def write_meta_data(meta_data):
@ -126,8 +160,8 @@ def virt_install_cmd(args):
--channel spicevmc \\ --channel spicevmc \\
--wait 0 \\ --wait 0 \\
--cloud-init meta-data=./meta-data,user-data=./user-data \\ --cloud-init meta-data=./meta-data,user-data=./user-data \\
--network bridge=bridge0 \\ --network bridge=bridge0,mac={args.mac_1} \\
--network bridge=bridge0 --network bridge=bridge0,mac={args.mac_2}
""" """
print("running virt-install") print("running virt-install")

View file

@ -7,11 +7,7 @@ chpasswd: {{expire: False}}
ssh_pwauth: True ssh_pwauth: True
ssh_authorized_keys: ssh_authorized_keys:
- {data.public_key} - {data.public_key}
bootcmd: {bootmd}
- "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"
runcmd: runcmd:
- "service sshd restart" - "service sshd restart"
- "subscription-manager register --username {data.rhn_user} --password '{data.rhn_password}'" - "subscription-manager register --username {data.rhn_user} --password '{data.rhn_password}'"
@ -25,7 +21,7 @@ runcmd:
- "echo '***************************************************************************'" - "echo '***************************************************************************'"
- "echo '*** ***'" - "echo '*** ***'"
- "echo '*** ***'" - "echo '*** ***'"
- "'echo *** DNF UPDATE COMPLETE - REBOOT NOW ***'" - "echo '*** DNF UPDATE COMPLETE - REBOOT NOW ***'"
- "echo '*** ***'" - "echo '*** ***'"
- "echo '*** ***'" - "echo '*** ***'"
- "echo '***************************************************************************'" - "echo '***************************************************************************'"