diff --git a/openstack_workload_generator b/openstack_workload_generator index 7354904..91b1c0d 100755 --- a/openstack_workload_generator +++ b/openstack_workload_generator @@ -7,27 +7,29 @@ modification_time(){ python3 -c "import os; print(int(os.path.getmtime('$1')))" } +export OWG_VIRTUAL_ENV="${OWG_VIRTUAL_ENV:-${rundir}/venv}" + create_env(){ set -e - rm -rf "${rundir}/venv" - python3 -m venv "${rundir}/venv" - source "${rundir}/venv/bin/activate" + rm -rf "${OWG_VIRTUAL_ENV}" + python3 -m venv "${OWG_VIRTUAL_ENV}" + source "${OWG_VIRTUAL_ENV}/bin/activate" pip install -r "${rundir}/requirements.txt" - touch -r "${rundir}/requirements.txt" "${rundir}/venv/bin/activate" + touch -r "${rundir}/requirements.txt" "${OWG_VIRTUAL_ENV}/bin/activate" set +e } -if ! [ -d "${rundir}/venv" ] ;then - echo "Creating venv: ${rundir}/venv" >&2 +if ! [ -d "${OWG_VIRTUAL_ENV}" ] ;then + echo "Creating venv: ${OWG_VIRTUAL_ENV}" >&2 echo create_env -elif [[ "$(modification_time "${rundir}/requirements.txt")" -gt "$(modification_time "${rundir}/venv/bin/activate")" ]];then - echo "Recreating venv: ${rundir}/venv" >&2 +elif [[ "$(modification_time "${rundir}/requirements.txt")" -gt "$(modification_time "${OWG_VIRTUAL_ENV}/bin/activate")" ]];then + echo "Recreating venv: ${OWG_VIRTUAL_ENV}" >&2 echo create_env else - source "${rundir}/venv/bin/activate" + source "${OWG_VIRTUAL_ENV}/bin/activate" fi @@ -36,4 +38,4 @@ if [ "$1" = "deps" ];then fi export PYTHONPATH="$rundir/src/" -exec "${rundir}/venv/bin/python" -m openstack_workload_generator "$@" +exec "${OWG_VIRTUAL_ENV}/bin/python" -m openstack_workload_generator "$@" diff --git a/profiles/loadbalancertest.yaml b/profiles/loadbalancertest.yaml new file mode 100644 index 0000000..fa2eafa --- /dev/null +++ b/profiles/loadbalancertest.yaml @@ -0,0 +1,28 @@ +--- +admin_domain_password: "yolobanana" +admin_vm_ssh_key: | + ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIACLmNpHitBkZGVbWAFxZjUATNvLjSktAKwokFIQ9Z1k schoechlin@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 Minimal" +vm_volume_size_gb: 10 +project_ipv4_subnet: "192.168.200.0/24" +compute_quotas: + cores: 1000 + instances: 200 + ram: 512000 +block_storage_quotas: + volumes: 100 + gigabytes: 5000 +network_quotas: + security_groups: 100 +cloud_init_extra_script: | + #!/bin/bash + set -x + apt-get update + apt-get install apache2 -y + sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config + sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication yes/' /etc/ssh/sshd_config + echo "yolobanana"|passwd root --stdin + systemctl restart ssh diff --git a/src/openstack_workload_generator/entities/project.py b/src/openstack_workload_generator/entities/project.py index b0ae498..4aa6a42 100644 --- a/src/openstack_workload_generator/entities/project.py +++ b/src/openstack_workload_generator/entities/project.py @@ -123,17 +123,27 @@ def get_machines(self, machines: list[str]) -> list[WorkloadGeneratorMachine]: result.append(self.workload_machines[machine]) return result - def get_role_id_by_name(self, role_name) -> str: + def get_role_id_by_name(self, role_name: str, required: bool = True) -> str | None: for role in self._admin_conn.identity.roles(): if role.name == role_name: return role.id - raise RuntimeError(f"No such role {role_name}") + if required: + raise RuntimeError(f"No such role {role_name}") + else: + return None + + def assign_role_to_user_for_project(self, role_name: str, required=True): + role_id = self.get_role_id_by_name(role_name, required=required) + if role_id is None and not required: + LOGGER.info( + f"No such role {role_name} not assigning it to {ProjectCache.ident_by_id(self.obj.id)}" + ) + return - def assign_role_to_user_for_project(self, role_name: str): self._admin_conn.identity.assign_project_role_to_user( user=self.user.obj.id, project=self.obj.id, - role=self.get_role_id_by_name(role_name), + role=role_id ) LOGGER.info( f"Assigned {role_name} to {self.user.obj.id} for {ProjectCache.ident_by_id(self.obj.id)}"