diff --git a/profiles/default.yaml b/profiles/default.yaml index 43dfd8b..89a9bc0 100644 --- a/profiles/default.yaml +++ b/profiles/default.yaml @@ -3,12 +3,9 @@ admin_domain_password: "yolobanana" admin_vm_ssh_keypair_name: "my_ssh_public_key" admin_vm_ssh_key: | ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIACLmNpHitBkZGVbWAFxZjUATNvLjSktAKwokFIQ9Z1k schoechlin@osb-alliance.com - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDyw2z/C+5YugYNXQXbeop0AcOjmWZCvcmci/vOAboO8 schoone@osb-alliance.com - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHsMKOr3TEolg4+4hny/zBe4kLcjzkm+vkc932498fVD kipke@osb-alliance.com - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILa+/eL5ZM3AWKgm1h4/EFU9hOaSKqaoldHmNeg0qG46 kipke@osb-alliance.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC2wE2xiuO+i3qmDvu8kCCKX7U7H1diOICbWmR2UrKIxqWgcfWMQsT3WclotJKuVJuKIWyFD6ZNwwLuvC3RxVSqhCiWjqxg3jzJBj7/C1O3IYyLGTUl/x7Cky530lf/aj4wrwt3Ketk/4QNwgget2nCvOy0S2NDCJ3rL6oIUjdJekvRrFf9IbWeX8fqYYCoh1cYJWto1XYPnhMDAB/lqtjN1ssurLSKoJg/bUT7q/KkIvvA/BOR2NMqS0aGx+bKhdkeB22V/t75Ct8ymoCYk9+MTC9i/QX20Fi7835/W7Gl18J8NiO9ebaWyYbsxZ5klWXQa5EiLLBDZ82OR88G+0FjXp1Z3VG6FcpdYpW7sxrT21HEvWOnQACZCdlzwyBJ31id/LjDRhJU6BmZm0Sa9EOJNL8XVOUUzuoa0XL1mIVTsmLpUwqLSfw6Ditb+q4afFi0iYMe3JKOt+JmftvBgeQCjNUsCzk+Ny2j6dZKv2aeF5LOQZGRM3HzG39Gkir3q1zdWmCl4lc3QQBfr5ZcdAp+wQMFSgJAudKffO9kdDVNoyjgih7rD3E+JjJdhY9//WQEEBm2vfEqm7qqEQUAELd0JBCivJmOhUVH0rGbTrnkTBtLR4Au40W5aYaNQJ7+U3hTRrvpycSC1pUU3Wq3OXJd2FRDgKQJljQcpBw4V9j8GQ== Operator admin_vm_password: "yolobanana" vm_flavor: "SCS-1L-1" -vm_image: "Ubuntu 24.04" +vm_image: "Ubuntu 24.04 Minimal" vm_volume_size_gb: 10 project_ipv4_subnet: "192.168.200.0/24" diff --git a/profiles/health-mon.yaml b/profiles/health-mon.yaml index ec4ffe3..e0e11f3 100644 --- a/profiles/health-mon.yaml +++ b/profiles/health-mon.yaml @@ -3,13 +3,10 @@ admin_domain_password: "yolobanana" admin_vm_ssh_keypair_name: "my_ssh_public_key" admin_vm_ssh_key: | ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIACLmNpHitBkZGVbWAFxZjUATNvLjSktAKwokFIQ9Z1k schoechlin@osb-alliance.com - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDyw2z/C+5YugYNXQXbeop0AcOjmWZCvcmci/vOAboO8 schoone@osb-alliance.com - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHsMKOr3TEolg4+4hny/zBe4kLcjzkm+vkc932498fVD kipke@osb-alliance.com - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILa+/eL5ZM3AWKgm1h4/EFU9hOaSKqaoldHmNeg0qG46 kipke@osb-alliance.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC2wE2xiuO+i3qmDvu8kCCKX7U7H1diOICbWmR2UrKIxqWgcfWMQsT3WclotJKuVJuKIWyFD6ZNwwLuvC3RxVSqhCiWjqxg3jzJBj7/C1O3IYyLGTUl/x7Cky530lf/aj4wrwt3Ketk/4QNwgget2nCvOy0S2NDCJ3rL6oIUjdJekvRrFf9IbWeX8fqYYCoh1cYJWto1XYPnhMDAB/lqtjN1ssurLSKoJg/bUT7q/KkIvvA/BOR2NMqS0aGx+bKhdkeB22V/t75Ct8ymoCYk9+MTC9i/QX20Fi7835/W7Gl18J8NiO9ebaWyYbsxZ5klWXQa5EiLLBDZ82OR88G+0FjXp1Z3VG6FcpdYpW7sxrT21HEvWOnQACZCdlzwyBJ31id/LjDRhJU6BmZm0Sa9EOJNL8XVOUUzuoa0XL1mIVTsmLpUwqLSfw6Ditb+q4afFi0iYMe3JKOt+JmftvBgeQCjNUsCzk+Ny2j6dZKv2aeF5LOQZGRM3HzG39Gkir3q1zdWmCl4lc3QQBfr5ZcdAp+wQMFSgJAudKffO9kdDVNoyjgih7rD3E+JjJdhY9//WQEEBm2vfEqm7qqEQUAELd0JBCivJmOhUVH0rGbTrnkTBtLR4Au40W5aYaNQJ7+U3hTRrvpycSC1pUU3Wq3OXJd2FRDgKQJljQcpBw4V9j8GQ== Operator admin_vm_password: "yolobanana" vm_flavor: "SCS-1L-1" -vm_image: "Ubuntu 24.04" +vm_image: "Ubuntu 24.04 Minimal" vm_volume_size_gb: 10 project_ipv4_subnet: "192.168.200.0/24" compute_quotas: diff --git a/profiles/smoketest.yaml b/profiles/smoketest.yaml index 57a2d2b..bed5685 100644 --- a/profiles/smoketest.yaml +++ b/profiles/smoketest.yaml @@ -2,13 +2,10 @@ admin_domain_password: "yolobanana" admin_vm_ssh_key: | ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIACLmNpHitBkZGVbWAFxZjUATNvLjSktAKwokFIQ9Z1k schoechlin@osb-alliance.com - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDyw2z/C+5YugYNXQXbeop0AcOjmWZCvcmci/vOAboO8 schoone@osb-alliance.com - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHsMKOr3TEolg4+4hny/zBe4kLcjzkm+vkc932498fVD kipke@osb-alliance.com - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILa+/eL5ZM3AWKgm1h4/EFU9hOaSKqaoldHmNeg0qG46 kipke@osb-alliance.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC2wE2xiuO+i3qmDvu8kCCKX7U7H1diOICbWmR2UrKIxqWgcfWMQsT3WclotJKuVJuKIWyFD6ZNwwLuvC3RxVSqhCiWjqxg3jzJBj7/C1O3IYyLGTUl/x7Cky530lf/aj4wrwt3Ketk/4QNwgget2nCvOy0S2NDCJ3rL6oIUjdJekvRrFf9IbWeX8fqYYCoh1cYJWto1XYPnhMDAB/lqtjN1ssurLSKoJg/bUT7q/KkIvvA/BOR2NMqS0aGx+bKhdkeB22V/t75Ct8ymoCYk9+MTC9i/QX20Fi7835/W7Gl18J8NiO9ebaWyYbsxZ5klWXQa5EiLLBDZ82OR88G+0FjXp1Z3VG6FcpdYpW7sxrT21HEvWOnQACZCdlzwyBJ31id/LjDRhJU6BmZm0Sa9EOJNL8XVOUUzuoa0XL1mIVTsmLpUwqLSfw6Ditb+q4afFi0iYMe3JKOt+JmftvBgeQCjNUsCzk+Ny2j6dZKv2aeF5LOQZGRM3HzG39Gkir3q1zdWmCl4lc3QQBfr5ZcdAp+wQMFSgJAudKffO9kdDVNoyjgih7rD3E+JjJdhY9//WQEEBm2vfEqm7qqEQUAELd0JBCivJmOhUVH0rGbTrnkTBtLR4Au40W5aYaNQJ7+U3hTRrvpycSC1pUU3Wq3OXJd2FRDgKQJljQcpBw4V9j8GQ== Operator admin_vm_password: "yolobanana" vm_flavor: "SCS-2V-4" -vm_image: "Ubuntu 24.04" +vm_image: "Ubuntu 24.04 Minimal" vm_volume_size_gb: 10 project_ipv4_subnet: "192.168.200.0/24" compute_quotas: diff --git a/profiles/stresstest.yaml b/profiles/stresstest.yaml index da06a4a..577fc06 100644 --- a/profiles/stresstest.yaml +++ b/profiles/stresstest.yaml @@ -2,13 +2,10 @@ admin_domain_password: "yolobanana" admin_vm_ssh_key: | ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIACLmNpHitBkZGVbWAFxZjUATNvLjSktAKwokFIQ9Z1k schoechlin@osb-alliance.com - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDyw2z/C+5YugYNXQXbeop0AcOjmWZCvcmci/vOAboO8 schoone@osb-alliance.com - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHsMKOr3TEolg4+4hny/zBe4kLcjzkm+vkc932498fVD kipke@osb-alliance.com - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILa+/eL5ZM3AWKgm1h4/EFU9hOaSKqaoldHmNeg0qG46 kipke@osb-alliance.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC2wE2xiuO+i3qmDvu8kCCKX7U7H1diOICbWmR2UrKIxqWgcfWMQsT3WclotJKuVJuKIWyFD6ZNwwLuvC3RxVSqhCiWjqxg3jzJBj7/C1O3IYyLGTUl/x7Cky530lf/aj4wrwt3Ketk/4QNwgget2nCvOy0S2NDCJ3rL6oIUjdJekvRrFf9IbWeX8fqYYCoh1cYJWto1XYPnhMDAB/lqtjN1ssurLSKoJg/bUT7q/KkIvvA/BOR2NMqS0aGx+bKhdkeB22V/t75Ct8ymoCYk9+MTC9i/QX20Fi7835/W7Gl18J8NiO9ebaWyYbsxZ5klWXQa5EiLLBDZ82OR88G+0FjXp1Z3VG6FcpdYpW7sxrT21HEvWOnQACZCdlzwyBJ31id/LjDRhJU6BmZm0Sa9EOJNL8XVOUUzuoa0XL1mIVTsmLpUwqLSfw6Ditb+q4afFi0iYMe3JKOt+JmftvBgeQCjNUsCzk+Ny2j6dZKv2aeF5LOQZGRM3HzG39Gkir3q1zdWmCl4lc3QQBfr5ZcdAp+wQMFSgJAudKffO9kdDVNoyjgih7rD3E+JjJdhY9//WQEEBm2vfEqm7qqEQUAELd0JBCivJmOhUVH0rGbTrnkTBtLR4Au40W5aYaNQJ7+U3hTRrvpycSC1pUU3Wq3OXJd2FRDgKQJljQcpBw4V9j8GQ== Operator admin_vm_password: "yolobanana" vm_flavor: "SCS-2V-4" -vm_image: "Ubuntu 24.04" +vm_image: "Ubuntu 24.04 Minimal" vm_volume_size_gb: 10 project_ipv4_subnet: "192.168.200.0/24" compute_quotas: diff --git a/src/openstack_workload_generator/__main__.py b/src/openstack_workload_generator/__main__.py index 4dfea66..8c9d870 100644 --- a/src/openstack_workload_generator/__main__.py +++ b/src/openstack_workload_generator/__main__.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 - +import shutil import sys import os import argparse @@ -12,7 +12,8 @@ from openstack.config import loader from .entities import WorkloadGeneratorDomain -from .entities.helpers import setup_logging, cloud_checker, item_checker, Config +from .entities.helpers import setup_logging, cloud_checker, item_checker, Config, iso_timestamp, deep_merge_dict + LOGGER = logging.getLogger() @@ -180,10 +181,26 @@ def establish_connection(): machine_obj.delete_machine() if args.generate_clouds_yaml: LOGGER.info(f"Creating a a clouds yaml : {args.generate_clouds_yaml}") - clouds_yaml_data = {"clouds": clouds_yaml_data} + + clouds_yaml_data_new = {"clouds": clouds_yaml_data} + if os.path.exists(args.generate_clouds_yaml): + with open(args.generate_clouds_yaml, "r") as file: + existing_data = yaml.safe_load(file) + backup_file = f"{args.generate_clouds_yaml}_{iso_timestamp()}" + logging.warning( + f"File {args.generate_clouds_yaml}, making an backup to {backup_file} and adding the new values" + ) + shutil.copy2( + args.generate_clouds_yaml, + f"{args.generate_clouds_yaml}_{iso_timestamp()}", + ) + clouds_yaml_data_new = deep_merge_dict( + existing_data, clouds_yaml_data_new + ) + with open(args.generate_clouds_yaml, "w") as file: yaml.dump( - clouds_yaml_data, + clouds_yaml_data_new, file, default_flow_style=False, explicit_start=True, diff --git a/src/openstack_workload_generator/entities/helpers.py b/src/openstack_workload_generator/entities/helpers.py index e576e9e..6fd4671 100644 --- a/src/openstack_workload_generator/entities/helpers.py +++ b/src/openstack_workload_generator/entities/helpers.py @@ -2,7 +2,8 @@ import logging import os import sys -from typing import Tuple +from datetime import datetime +from typing import Tuple, Any import coloredlogs import re @@ -250,3 +251,17 @@ def item_checker(value: str) -> str: if not re.fullmatch(r"[a-zA-Z0-9]+[a-zA-Z0-9\-]*[a-zA-Z0-9]+", value): raise argparse.ArgumentTypeError("specify a valid name for an item") return value + + +def iso_timestamp() -> str: + return datetime.now().strftime("%Y-%m-%d_%H-%M-%S") + + +def deep_merge_dict(d1: dict, d2: dict) -> dict[str, Any]: + result = d1.copy() + for key, value in d2.items(): + if key in result and isinstance(result[key], dict) and isinstance(value, dict): + result[key] = deep_merge_dict(result[key], value) + else: + result[key] = value + return result diff --git a/src/openstack_workload_generator/entities/machine.py b/src/openstack_workload_generator/entities/machine.py index 7c17d3d..ae6e449 100644 --- a/src/openstack_workload_generator/entities/machine.py +++ b/src/openstack_workload_generator/entities/machine.py @@ -1,5 +1,6 @@ import base64 import logging +import sys from openstack.compute.v2.server import Server from openstack.connection import Connection @@ -41,13 +42,15 @@ def get_image_id_by_name(self, image_name): for image in self.conn.image.images(): if image.name == image_name: return image.id - return None + logging.fatal(f"Image {image_name} not found") + sys.exit(2) def get_flavor_id_by_name(self, flavor_name): for flavor in self.conn.compute.flavors(): if flavor.name == flavor_name: return flavor.id - return None + logging.fatal(f"Flavor {flavor_name} not found") + sys.exit(2) def delete_machine(self): LOGGER.warning(