Skip to content

Commit 017e345

Browse files
authored
Merge branch 'main' into improve_params
2 parents 7f3154b + e413b27 commit 017e345

File tree

10 files changed

+174
-80
lines changed

10 files changed

+174
-80
lines changed

README.md

Lines changed: 120 additions & 58 deletions
Large diffs are not rendered by default.

profiles/default.yaml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
---
22
admin_domain_password: "yolobanana"
33
admin_vm_ssh_keypair_name: "my_ssh_public_key"
4-
admin_vm_ssh_key: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIACLmNpHitBkZGVbWAFxZjUATNvLjSktAKwokFIQ9Z1k [email protected]"
4+
admin_vm_ssh_key: |
5+
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIACLmNpHitBkZGVbWAFxZjUATNvLjSktAKwokFIQ9Z1k [email protected]
6+
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDyw2z/C+5YugYNXQXbeop0AcOjmWZCvcmci/vOAboO8 [email protected]
7+
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHsMKOr3TEolg4+4hny/zBe4kLcjzkm+vkc932498fVD [email protected]
8+
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILa+/eL5ZM3AWKgm1h4/EFU9hOaSKqaoldHmNeg0qG46 [email protected]
9+
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
510
admin_vm_password: "yolobanana"
611
vm_flavor: "SCS-1L-1"
712
vm_image: "Ubuntu 24.04"

profiles/smoketest.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22
admin_domain_password: "yolobanana"
33
admin_vm_ssh_key: |
44
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIACLmNpHitBkZGVbWAFxZjUATNvLjSktAKwokFIQ9Z1k [email protected]
5+
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDyw2z/C+5YugYNXQXbeop0AcOjmWZCvcmci/vOAboO8 [email protected]
6+
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHsMKOr3TEolg4+4hny/zBe4kLcjzkm+vkc932498fVD [email protected]
7+
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILa+/eL5ZM3AWKgm1h4/EFU9hOaSKqaoldHmNeg0qG46 [email protected]
8+
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
59
admin_vm_password: "yolobanana"
610
vm_flavor: "SCS-2V-4"
711
vm_image: "Ubuntu 24.04"

profiles/stresstest.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22
admin_domain_password: "yolobanana"
33
admin_vm_ssh_key: |
44
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIACLmNpHitBkZGVbWAFxZjUATNvLjSktAKwokFIQ9Z1k [email protected]
5+
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDyw2z/C+5YugYNXQXbeop0AcOjmWZCvcmci/vOAboO8 [email protected]
6+
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHsMKOr3TEolg4+4hny/zBe4kLcjzkm+vkc932498fVD [email protected]
7+
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILa+/eL5ZM3AWKgm1h4/EFU9hOaSKqaoldHmNeg0qG46 [email protected]
8+
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
59
admin_vm_password: "yolobanana"
610
vm_flavor: "SCS-2V-4"
711
vm_image: "Ubuntu 24.04"

src/openstack_workload_generator/__main__.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@
4444
help="Dump the created servers as an ansible inventory to the specified directory, "
4545
"adds a ssh proxy jump for the hosts without a floating ip")
4646

47+
parser.add_argument('--wait_for_machines', action="store_true",
48+
help="Wait for every machine to be created "
49+
"(normally the provisioning only waits for machines which use floating ips)")
50+
4751
parser.add_argument('--config', type=str,
4852
default="default.yaml",
4953
help='The config file for environment creation, define a path to the'
@@ -113,7 +117,7 @@ def establish_connection():
113117
for workload_domain in workload_domains.values():
114118
for workload_project in workload_domain.get_projects(args.create_projects):
115119
if args.create_machines:
116-
workload_project.get_and_create_machines(args.create_machines)
120+
workload_project.get_and_create_machines(args.create_machines, args.wait_for_machines)
117121
if args.ansible_inventory:
118122
workload_project.dump_inventory_hosts(args.ansible_inventory)
119123
elif args.delete_machines:

src/openstack_workload_generator/entities/domain.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,6 @@ def create_and_get_projects(self, create_projects: list[str]):
9898
self.workload_projects[project_name] = project
9999
project.close_connection()
100100

101-
def create_and_get_machines(self, machines: list[str]):
101+
def create_and_get_machines(self, machines: list[str], wait_for_machines: bool):
102102
for project in self.workload_projects.values():
103-
project.get_and_create_machines(machines)
103+
project.get_and_create_machines(machines, wait_for_machines)

src/openstack_workload_generator/entities/helpers.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import logging
33
import os
44
import sys
5-
from pprint import pformat
65
from typing import Tuple
76
import coloredlogs
87

@@ -23,6 +22,7 @@ class Config:
2322
'admin_vm_ssh_keypair_name': 'my_ssh_public_key',
2423
'project_ipv4_subnet': '192.168.200.0/24',
2524
'public_network': "public",
25+
'network_mtu': '1500',
2626
'number_of_floating_ips_per_project': "1",
2727
'vm_flavor': 'SCS-1L-1',
2828
'vm_image': 'Ubuntu 24.04',
@@ -90,15 +90,17 @@ def check_config(cls):
9090
for quota_type in ["compute_quotas", "block_storage_quotas", "network_quotas"]:
9191
if quota_type not in Config._config:
9292
continue
93-
for key_name, value in Config._config[quota_type].keys():
94-
Config.quota(key_name, quota_type, 1)
93+
for key_name in Config._config[quota_type].keys():
94+
Config.quota(key_name, quota_type, 0)
9595

9696
@staticmethod
9797
def show_effective_config():
9898
Config.check_config(Config)
9999
LOGGER.info(
100-
"The effective configuration from %s : \n>>>\n%s\n<<<" % (
101-
Config._file, pformat(Config._config, indent=2, compact=False))
100+
"The effective configuration from %s : \n>>>\n---\n%s\n<<<" % (
101+
Config._file,
102+
yaml.dump(Config._config, default_flow_style=False, width=10000),
103+
)
102104
)
103105

104106
@staticmethod
@@ -169,6 +171,10 @@ def quota(quota_name: str, quota_category: str, default_value: int) -> int:
169171
else:
170172
return default_value
171173

174+
@staticmethod
175+
def get_network_mtu():
176+
return int(Config.get("network_mtu", regex=r"\d+"))
177+
172178

173179
class DomainCache:
174180
_domains: dict[str, str] = dict()

src/openstack_workload_generator/entities/machine.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ def wait_for_delete(self):
5353
self.conn.compute.wait_for_delete(self.obj)
5454
LOGGER.warning(f"Machine {self.machine_name} in {self.obj.project_id} is deleted now")
5555

56-
def create_or_get_server(self, network: Network):
56+
def create_or_get_server(self, network: Network, wait_for_machine: bool):
5757

5858
if self.obj:
5959
LOGGER.info(
@@ -82,6 +82,8 @@ def create_or_get_server(self, network: Network):
8282
],
8383
key_name=Config.get_admin_vm_ssh_keypair_name(),
8484
)
85+
if wait_for_machine:
86+
self.wait_for_server()
8587
if self.obj:
8688
LOGGER.info(f"Created server {self.obj.name}/{self.obj.id} in {ProjectCache.ident_by_id(network.project_id)}")
8789
else:

src/openstack_workload_generator/entities/network.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,9 @@ def create_and_get_network_setup(self) -> Network:
8383
return network
8484

8585
def create_and_get_router(self, subnet: Subnet) -> Router | None:
86-
public_network = self.conn.network.find_network('public')
86+
public_network = self.conn.network.find_network(Config.get_public_network())
8787
if not public_network:
88-
LOGGER.error("There is no 'public' network")
88+
LOGGER.error(f"There is no '{Config.get_public_network()}' network, not adding floating ips")
8989
return None
9090

9191
if self.obj_router:
@@ -115,7 +115,7 @@ def create_and_get_network(self) -> Network:
115115
self.obj_network = self.conn.network.create_network(
116116
name=self.network_name,
117117
project_id=self.project.id,
118-
mtu=1342
118+
mtu=Config.get_network_mtu(),
119119
)
120120
if not self.obj_network:
121121
raise RuntimeError(f"Unable to create network {self.network_name}")

src/openstack_workload_generator/entities/project.py

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ def delete_project(self):
215215
self._admin_conn.network.delete_security_group(sg.id)
216216
##########################################################################################
217217

218-
def get_and_create_machines(self, machines: list[str]):
218+
def get_and_create_machines(self, machines: list[str], wait_for_machines: bool):
219219
if "none" in machines:
220220
LOGGER.warning("Not creating a virtual machine, because 'none' was in the list")
221221
self.close_connection()
@@ -231,7 +231,7 @@ def get_and_create_machines(self, machines: list[str]):
231231
if self.workload_network is None or self.workload_network.obj_network is None:
232232
raise RuntimeError("No Workload network object")
233233

234-
machine.create_or_get_server(self.workload_network.obj_network)
234+
machine.create_or_get_server(self.workload_network.obj_network, wait_for_machines)
235235

236236
if machine.floating_ip:
237237
self.ssh_proxy_jump = machine.floating_ip
@@ -251,21 +251,28 @@ def dump_inventory_hosts(self, directory_location: str):
251251
raise RuntimeError(f"Invalid reference to server for {workload_machine.machine_name}")
252252

253253
workload_machine.update_assigned_ips()
254-
data = {
255-
"id": workload_machine.obj.id,
256-
"status": workload_machine.obj.status,
257-
"hypervisor": workload_machine.obj['OS-EXT-SRV-ATTR:hypervisor_hostname'],
254+
255+
if not workload_machine.internal_ip:
256+
raise RuntimeError(f"Unable to get associated ip address for {workload_machine.machine_name}")
257+
258+
data: dict[str, str | dict[str, str]] = {
259+
"openstack": {
260+
"machine_id": workload_machine.obj.id,
261+
"machine_status": workload_machine.obj.status,
262+
"hypervisor": workload_machine.obj['OS-EXT-SRV-ATTR:hypervisor_hostname'],
263+
"domain": self.domain.name,
264+
"project": workload_machine.project.name,
265+
},
258266
"hostname": workload_machine.machine_name,
259-
"project": workload_machine.project.name,
260-
"domain": self.domain.name,
261267
"ansible_host": workload_machine.floating_ip or workload_machine.internal_ip,
262268
"internal_ip": workload_machine.internal_ip,
263269
}
264270

265271
if self.ssh_proxy_jump and not workload_machine.floating_ip:
266272
data["ansible_ssh_common_args"] = f"-o ProxyJump={self.ssh_proxy_jump} "
267273

268-
base_dir = f"{directory_location}/{data['domain']}-{data['project']}-{data['hostname']}"
274+
base_dir = f"{directory_location}/{self.domain.name}-{workload_machine.project.name}-{workload_machine.machine_name}"
275+
269276
filename = f'{base_dir}/data.yml'
270277
os.makedirs(base_dir, exist_ok=True)
271278
with open(filename, 'w') as file:

0 commit comments

Comments
 (0)