diff --git a/src/openstack_workload_generator/__main__.py b/src/openstack_workload_generator/__main__.py index 8c9d870..a5e4621 100644 --- a/src/openstack_workload_generator/__main__.py +++ b/src/openstack_workload_generator/__main__.py @@ -170,7 +170,7 @@ def establish_connection(): ) if args.ansible_inventory: workload_project.dump_inventory_hosts(args.ansible_inventory) - if args.clouds_yaml: + if args.generate_clouds_yaml: clouds_yaml_data[ f"{workload_domain.domain_name}-{workload_project.project_name}" ] = workload_project.get_clouds_yaml_data() @@ -179,10 +179,11 @@ def establish_connection(): args.delete_machines ): machine_obj.delete_machine() - if args.generate_clouds_yaml: - LOGGER.info(f"Creating a a clouds yaml : {args.generate_clouds_yaml}") + if args.generate_clouds_yaml: + LOGGER.info(f"Creating a clouds yaml : {args.generate_clouds_yaml}") 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) diff --git a/src/openstack_workload_generator/entities/project.py b/src/openstack_workload_generator/entities/project.py index 4aa6a42..af18101 100644 --- a/src/openstack_workload_generator/entities/project.py +++ b/src/openstack_workload_generator/entities/project.py @@ -236,7 +236,7 @@ def create_and_get_project(self) -> Project: self.adapt_quota() self.assign_role_to_user_for_project("manager") - self.assign_role_to_user_for_project("load-balancer_member") + self.assign_role_to_user_for_project("load-balancer_member", required=False) self.assign_role_to_user_for_project("member") self.workload_network = WorkloadGeneratorNetwork( diff --git a/src/openstack_workload_generator/entities/user.py b/src/openstack_workload_generator/entities/user.py index 6e45aec..8aff9bd 100644 --- a/src/openstack_workload_generator/entities/user.py +++ b/src/openstack_workload_generator/entities/user.py @@ -20,9 +20,16 @@ def __init__(self, conn: Connection, user_name: str, domain: Domain): user_name, query={"domain_id": self.domain.id} ) - def assign_role_to_user(self, role_name: str): + def assign_role_to_user(self, role_name: str, mandatory: bool = True): + + role_id = self.get_role_id_by_name(role_name, mandatory) + + if role_id is None: + LOGGER.warning(f"Role '{role_name}' not found, not assigning it") + return + self.conn.identity.assign_project_role_to_user( - self.obj.id, self.domain.id, self.get_role_id_by_name(role_name) + self.obj.id, self.domain.id, role_id ) LOGGER.info( f"Assigned role '{role_name}' to user '{self.obj.name}' in {DomainCache.ident_by_id(self.domain.id)}" @@ -55,8 +62,11 @@ def delete_user(self): LOGGER.warning(f"Deleted user: {self.obj.name} / {self.obj.id}") self.obj = None - def get_role_id_by_name(self, role_name) -> str: + def get_role_id_by_name(self, role_name, mandatory: bool = True) -> str | None: for role in self.conn.identity.roles(): if role.name == role_name: return role.id - raise RuntimeError(f"No such role {role_name}") + if mandatory: + raise RuntimeError(f"No such role {role_name}") + else: + return None