diff --git a/iso/empanadas/empanadas/common.py b/iso/empanadas/empanadas/common.py index b466843..7982f34 100644 --- a/iso/empanadas/empanadas/common.py +++ b/iso/empanadas/empanadas/common.py @@ -1,17 +1,17 @@ # All imports are here +import glob +import hashlib +import logging import os import platform import time -import glob -import rpm -import yaml -import logging -import hashlib - - from collections import defaultdict from typing import Tuple +import rpm +import yaml + + # An implementation from the Fabric python library class AttributeDict(defaultdict): def __init__(self): @@ -26,29 +26,31 @@ class AttributeDict(defaultdict): def __setattr__(self, key, value): self[key] = value + # These are a bunch of colors we may use in terminal output class Color: - RED = '\033[91m' - GREEN = '\033[92m' - PURPLE = '\033[95m' - CYAN = '\033[96m' - DARKCYAN = '\033[36m' - BLUE = '\033[94m' - YELLOW = '\033[93m' - UNDERLINE = '\033[4m' - BOLD = '\033[1m' - END = '\033[0m' - INFO = '[' + BOLD + GREEN + 'INFO' + END + '] ' - WARN = '[' + BOLD + YELLOW + 'WARN' + END + '] ' - FAIL = '[' + BOLD + RED + 'FAIL' + END + '] ' - STAT = '[' + BOLD + CYAN + 'STAT' + END + '] ' + RED = "\033[91m" + GREEN = "\033[92m" + PURPLE = "\033[95m" + CYAN = "\033[96m" + DARKCYAN = "\033[36m" + BLUE = "\033[94m" + YELLOW = "\033[93m" + UNDERLINE = "\033[4m" + BOLD = "\033[1m" + END = "\033[0m" + INFO = "[" + BOLD + GREEN + "INFO" + END + "] " + WARN = "[" + BOLD + YELLOW + "WARN" + END + "] " + FAIL = "[" + BOLD + RED + "FAIL" + END + "] " + STAT = "[" + BOLD + CYAN + "STAT" + END + "] " + # vars and additional checks rldict = AttributeDict() sigdict = AttributeDict() config = { - "rlmacro": rpm.expandMacro('%rhel'), - "dist": 'el' + rpm.expandMacro('%rhel'), + "rlmacro": rpm.expandMacro("%rhel"), + "dist": "el" + rpm.expandMacro("%rhel"), "arch": platform.machine(), "date_stamp": time.strftime("%Y%m%d.%H%M%S", time.localtime()), "compose_root": "/mnt/compose", @@ -66,28 +68,29 @@ config = { "aarch64": "arm64", "ppc64le": "ppc64le", "s390x": "s390x", - "i686": "386" + "i686": "386", }, "aws_region": "us-east-2", "bucket": "resf-empanadas", - "bucket_url": "https://resf-empanadas.s3.us-east-2.amazonaws.com" + "bucket_url": "https://resf-empanadas.s3.us-east-2.amazonaws.com", } # Importing the config from yaml import importlib_resources + _rootdir = importlib_resources.files("empanadas") for conf in glob.iglob(f"{_rootdir}/configs/*.yaml"): - with open(conf, 'r', encoding="utf-8") as file: + with open(conf, "r", encoding="utf-8") as file: rldict.update(yaml.safe_load(file)) # Import all SIG configs from yaml for conf in glob.iglob(f"{_rootdir}/sig/*.yaml"): - with open(conf, 'r', encoding="utf-8") as file: + with open(conf, "r", encoding="utf-8") as file: sigdict.update(yaml.safe_load(file)) # The system needs to be a RHEL-like system. It cannot be Fedora or SuSE. -#if "%rhel" in config['rlmacro']: +# if "%rhel" in config['rlmacro']: # raise SystemExit(Color.BOLD + 'This is not a RHEL-like system.' + Color.END # + '\n\nPlease verify you are running on a RHEL-like system that is ' # 'not Fedora nor SuSE. This means that the %rhel macro will be ' @@ -96,22 +99,25 @@ for conf in glob.iglob(f"{_rootdir}/sig/*.yaml"): # These will be set in their respective var files -#REVISION = rlvars['revision'] + '-' + rlvars['rclvl'] -#rlvars = rldict[rlver] -#rlvars = rldict[rlmacro] -#COMPOSE_ISO_WORKDIR = COMPOSE_ROOT + "work/" + arch + "/" + date_stamp +# REVISION = rlvars['revision'] + '-' + rlvars['rclvl'] +# rlvars = rldict[rlver] +# rlvars = rldict[rlmacro] +# COMPOSE_ISO_WORKDIR = COMPOSE_ROOT + "work/" + arch + "/" + date_stamp ALLOWED_TYPE_VARIANTS = { - "Azure": ["Base", "LVM"], - "Container": ["Base", "Minimal", "UBI", "WSL"], - "EC2": ["Base", "LVM"], - "GenericCloud": ["Base", "LVM"], - "Vagrant": ["Libvirt", "Vbox", "VMware"], - "OCP": ["Base"], - "RPI": None, + "Azure": ["Base", "LVM"], + "Container": ["Base", "Minimal", "UBI", "WSL"], + "EC2": ["Base", "LVM"], + "GenericCloud": ["Base", "LVM"], + "Vagrant": ["Libvirt", "Vbox", "VMware"], + "OCP": ["Base"], + "RPI": None, + "GenericArm": ["Minimal"], } -def valid_type_variant(_type: str, variant: str="") -> bool: + + +def valid_type_variant(_type: str, variant: str = "") -> bool: if _type not in ALLOWED_TYPE_VARIANTS: raise Exception(f"Type is invalid: ({_type}, {variant})") if ALLOWED_TYPE_VARIANTS[_type] == None: @@ -120,11 +126,18 @@ def valid_type_variant(_type: str, variant: str="") -> bool: return True if variant not in ALLOWED_TYPE_VARIANTS[_type]: if variant and variant.capitalize() in ALLOWED_TYPE_VARIANTS[_type]: - raise Exception(f"Capitalization mismatch. Found: ({_type}, {variant}). Expected: ({_type}, {variant.capitalize()})") - raise Exception(f"Type/Variant Combination is not allowed: ({_type}, {variant})") + raise Exception( + f"Capitalization mismatch. Found: ({_type}, {variant}). Expected: ({_type}, {variant.capitalize()})" + ) + raise Exception( + f"Type/Variant Combination is not allowed: ({_type}, {variant})" + ) return True + from attrs import define, field + + @define(kw_only=True) class Architecture: name: str = field() diff --git a/iso/empanadas/empanadas/scripts/build_image.py b/iso/empanadas/empanadas/scripts/build_image.py index 339488f..58a311c 100644 --- a/iso/empanadas/empanadas/scripts/build_image.py +++ b/iso/empanadas/empanadas/scripts/build_image.py @@ -133,7 +133,7 @@ class ImageBuild: ["cp", lambda: f"{STORAGE_DIR}/{self.target_uuid}.body", f"{self.outdir}/{self.outname}.raw"], ["xz", f"{self.outdir}/{self.outname}.raw"] ] - if self.image_type in ["GenericCloud", "OCP"]: + if self.image_type in ["GenericCloud", "OCP", "GenericArm"]: self.stage_commands = [ ["qemu-img", "convert", "-c", "-f", "raw", "-O", "qcow2", lambda: f"{STORAGE_DIR}/{self.target_uuid}.body", f"{self.outdir}/{self.outname}.qcow2"] ] @@ -244,7 +244,7 @@ class ImageBuild: args = [] if self.image_type in ["Container"]: args = ["--parameter", "offline_icicle", "true"] - if self.image_type in ["GenericCloud", "EC2", "Vagrant", "Azure", "OCP", "RPI"]: + if self.image_type in ["GenericCloud", "EC2", "Vagrant", "Azure", "OCP", "RPI", "GenericArm"]: args = ["--parameter", "generate_icicle", "false"] return args