You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The OSP endpoint (endpoints/osp/osp) is a legacy 632-line Bash script that provisions OpenStack VMs for benchmark execution. It was originally built for RHOSO17 (TripleO/Director-based deployments) and is now the only Bash endpoint remaining — remotehosts and kube have both been migrated to Python using the endpoints/endpoints.py base class framework.
RHOSO18 introduces fundamental architectural changes: the control plane runs as pods on OpenShift, credentials are delivered via clouds.yaml and Kubernetes secrets rather than overcloudrc, the OpenStack CLI is accessed through an openstackclient pod, and networking is OVN-based. The current endpoint cannot operate against RHOSO18 without significant changes.
A gap analysis comparing the endpoint against production NFV automation (tenant-onevm.sh) and VM tuning automation (tune.sh) revealed 21 resource lifecycle gaps and 16 VM tuning gaps that prevent the endpoint from supporting NFV workloads (OVS-DPDK, SR-IOV, RT latency testing). Additionally, 4 pre-existing bugs cause IP discovery failures, Neutron port leaks, incorrect profiler assignments, and bootstrap errors on every run. This issue tracks the full end-to-end enhancement from Python migration through NFV-capable multi-scenario support.
Current State
Language: Bash (only remaining Bash endpoint; remotehosts and kube are Python)
Auth: Hardcoded overcloudrc-based authentication via SSH to undercloud
Add post-boot VM tuning for NFV workloads (tuned, hugepages, DPDK, IRQ affinity, CPU isolation)
Implement dependency-aware cleanup that never leaks resources
Support 5 deployment scenarios: non-NFV standard, NFV OVS-DPDK, NFV SR-IOV, RT latency, and mixed
Provide comprehensive validation, error handling, and test coverage
Resource Management Strategy
This section documents the resource management model for the OSP endpoint, based on analysis of the kube endpoint's pre-provisioned vs dynamically-created resource pattern. The OSP endpoint should follow the same architectural principle: validate pre-p
rovisioned infrastructure, create only per-run transient resources, and clean up only what was created.
Kube-to-OSP Resource Parallel
The kube endpoint establishes the pattern that all endpoints should follow. Resources fall into three categories:
Dynamically Created Resources (Created Per-Run, Cleaned Up After)
These resources are created by the OSP endpoint for each run and are always cleaned up afterward:
Tenant/overlay networks and subnets — for non-NFV scenarios (created with rickshaw-<run-id> naming)
Ports — with appropriate security, binding profile, and vNIC type per scenario
SSH keypairs — per-run (rickshaw-<run-id>-key)
VMs/Servers — with user-data bootstrap for engine setup
Security groups — per-run, with rules for SSH, roadblock, and benchmark traffic
Routers — for tenant network external access (if needed)
Floating IPs — for VM access from the controller (if needed)
Optionally Pre-Provisioned or Created (Configurable via Run-File)
These resources may either pre-exist (referenced by name/ID in the run-file) or be created per-run, controlled by the resource-mode setting:
Resource
pre-provisioned Mode
full-lifecycle Mode
Tenant networks
Referenced by name/ID, validated
Created per-run with rickshaw- prefix
Security groups
Use existing (e.g., default), validated
Create custom per-run
Flavors
Validate existence only
Validate first, create if missing (with warning)
Resource Mode Configuration
The run-file supports a resource-mode option that controls the endpoint's behavior:
pre-provisioned (default for NFV): Validate that all required resources exist; fail fast if anything is missing. Never create infrastructure resources. Only create per-run transient resources (VMs, ports, keypairs, security groups).
full-lifecycle: Create everything needed for the run, including tenant networks, subnets, and routers. Suitable for non-NFV scenarios where the endpoint manages the full stack.
This mirrors the kube endpoint's approach: the kube endpoint never creates a cluster, nodes, or NADs — it only creates the per-run namespace, pods, services, and secrets.
Subtasks
Phase 1: Python Migration & Bug Fixes
Migrate OSP endpoint from Bash to Python (endpoints/osp/osp.py) using endpoints/endpoints.py base class
Create openstack_cli.py abstraction layer for multi-auth-mode command execution
Update util/blockbreaker.py line 134 to route osp through Python endpoint path
Update rickshaw-run.py lines 847 and 1789 to handle osp as Python endpoint
Update schema/osp.json for new run-file format with backward compatibility for existing fields
Fix port show bug (line 481: queries by network name instead of port name — IP discovery broken)
Fix cleanup port deletion bug (lines 522-527: uses $vm_name/$these_networks from prior loop iteration — Neutron ports leaked)
Fix compute profiler IP assignment bug (line 340: $this_server_ip assigned to compute engines without referencing correct host)
Fix osruntime-bootstrap off-by-one bug (line 156: accesses array element at $i == $length)
Phase 2: RHOSO18 Authentication & CLI Access
Implement overcloudrc auth mode (source RC file on undercloud — backward compat with RHOSO17)
Implement clouds-yaml auth mode (direct CLI invocation with --os-cloud against clouds.yaml)
Cleanup targets only dynamically-created resources — pre-provisioned resources (provider networks, flavors, images, compute hosts, aggregates) are never deleted. This mirrors the kube endpoint's behavior: it deletes namespaces, pods, and secrets but never touches the cluster, nodes, or NADs.
Summary
The OSP endpoint (
endpoints/osp/osp) is a legacy 632-line Bash script that provisions OpenStack VMs for benchmark execution. It was originally built for RHOSO17 (TripleO/Director-based deployments) and is now the only Bash endpoint remaining —remotehostsandkubehave both been migrated to Python using theendpoints/endpoints.pybase class framework.RHOSO18 introduces fundamental architectural changes: the control plane runs as pods on OpenShift, credentials are delivered via
clouds.yamland Kubernetes secrets rather thanovercloudrc, the OpenStack CLI is accessed through anopenstackclientpod, and networking is OVN-based. The current endpoint cannot operate against RHOSO18 without significant changes.A gap analysis comparing the endpoint against production NFV automation (
tenant-onevm.sh) and VM tuning automation (tune.sh) revealed 21 resource lifecycle gaps and 16 VM tuning gaps that prevent the endpoint from supporting NFV workloads (OVS-DPDK, SR-IOV, RT latency testing). Additionally, 4 pre-existing bugs cause IP discovery failures, Neutron port leaks, incorrect profiler assignments, and bootstrap errors on every run. This issue tracks the full end-to-end enhancement from Python migration through NFV-capable multi-scenario support.Current State
remotehostsandkubeare Python)overcloudrc-based authentication via SSH to undercloud--endpoint-optsstring parsing instead of--run-file+--endpoint-indexblockbreaker.pyline 134,rickshaw-run.pylines 847 and 1789Goals
remotehosts/kubearchitectureResource Management Strategy
This section documents the resource management model for the OSP endpoint, based on analysis of the kube endpoint's pre-provisioned vs dynamically-created resource pattern. The OSP endpoint should follow the same architectural principle: validate pre-p
rovisioned infrastructure, create only per-run transient resources, and clean up only what was created.
Kube-to-OSP Resource Parallel
The kube endpoint establishes the pattern that all endpoints should follow. Resources fall into three categories:
kubectl/ocCLI availableovercloudrc/clouds.yaml/openstackclientpod)kubernetes.io/hostname)hw:properties)rickshaw-<run-id>)Pre-Provisioned Resources (Validate but Do NOT Create)
These resources must exist before the OSP endpoint runs. The endpoint validates their existence and correctness but never attempts to create them:
overcloudrc/clouds.yaml/openstackclientpod (depending on auth mode)hw:cpu_policy=dedicated,hw:mem_page_size=1GB,hw:emulator_threads_policy=shareDynamically Created Resources (Created Per-Run, Cleaned Up After)
These resources are created by the OSP endpoint for each run and are always cleaned up afterward:
rickshaw-<run-id>naming)rickshaw-<run-id>-key)Optionally Pre-Provisioned or Created (Configurable via Run-File)
These resources may either pre-exist (referenced by name/ID in the run-file) or be created per-run, controlled by the
resource-modesetting:pre-provisionedModefull-lifecycleModerickshaw-prefixdefault), validatedResource Mode Configuration
The run-file supports a
resource-modeoption that controls the endpoint's behavior:pre-provisioned(default for NFV): Validate that all required resources exist; fail fast if anything is missing. Never create infrastructure resources. Only create per-run transient resources (VMs, ports, keypairs, security groups).full-lifecycle: Create everything needed for the run, including tenant networks, subnets, and routers. Suitable for non-NFV scenarios where the endpoint manages the full stack.This mirrors the kube endpoint's approach: the kube endpoint never creates a cluster, nodes, or NADs — it only creates the per-run namespace, pods, services, and secrets.
Subtasks
Phase 1: Python Migration & Bug Fixes
endpoints/osp/osp.py) usingendpoints/endpoints.pybase classopenstack_cli.pyabstraction layer for multi-auth-mode command executionutil/blockbreaker.pyline 134 to routeospthrough Python endpoint pathrickshaw-run.pylines 847 and 1789 to handleospas Python endpointschema/osp.jsonfor new run-file format with backward compatibility for existing fields$vm_name/$these_networksfrom prior loop iteration — Neutron ports leaked)$this_server_ipassigned to compute engines without referencing correct host)osruntime-bootstrapoff-by-one bug (line 156: accesses array element at$i == $length)Phase 2: RHOSO18 Authentication & CLI Access
overcloudrcauth mode (source RC file on undercloud — backward compat with RHOSO17)clouds-yamlauth mode (direct CLI invocation with--os-cloudagainstclouds.yaml)podauth mode (oc exec -n openstack openstackclient -- openstack ...)Phase 3: Resource Lifecycle Enhancement
Pre-Provisioned Resource Validation
These subtasks validate resources that must already exist (following the kube endpoint pattern of validating pre-provisioned infrastructure):
hw:cpu_policy,hw:mem_page_size,hw:numa_nodes, etc.)activestateresource-moderun-file option:pre-provisioned(validate only) vsfull-lifecycle(create everything)Dynamic Per-Run Resource Creation
These subtasks create transient resources for the benchmark run (analogous to kube endpoint creating namespaces, pods, secrets):
--vnic-type direct,--binding-profile '{"trusted": true}')rickshaw-<run-id>naming)Optional Create-or-Validate Resources
These subtasks handle resources that may be pre-provisioned or created, depending on
resource-mode:hw:cpu_policy,hw:mem_page_size,hw:emulator_threads_policy)defaultor named group, or create custom)Phase 4: VM Tuning for NFV Workloads
tunedcpu-partitioning profile deployment and activationdpdk-devbind.py,vfio-pcimodule)performance)irqbalance,firewalld,NetworkManager)Phase 5: Cleanup & Validation Framework
Cleanup targets only dynamically-created resources — pre-provisioned resources (provider networks, flavors, images, compute hosts, aggregates) are never deleted. This mirrors the kube endpoint's behavior: it deletes namespaces, pods, and secrets but never touches the cluster, nodes, or NADs.
rickshaw-<run-id>— never delete pre-provisioned resourcesrickshaw-<run-id>prefix across all resource types)--skip-cleanupoption for debugging (retain resources for post-mortem inspection)resource-mode(only delete what was created in this run)Phase 6: Multi-Scenario Support
hw:vif_multiqueue_enabled=true, virtio multi-queue)Phase 7: Testing & Documentation
openstack_cli.py(mock all 3 auth modes)osp.jsonfieldsresource-modeoptions with examplesFiles Affected
New Files
endpoints/osp/osp.pyosp)endpoints/osp/openstack_cli.pyendpoints/osp/resource_manager.pyendpoints/osp/vm_tuner.pyendpoints/osp/scenarios.pyendpoints/osp/cleanup.pyModified Files
util/blockbreaker.py"osp"to Python endpoint case match (line 134)rickshaw-run.py"osp"to Python endpoint conditionals (lines 847, 1789)schema/osp.jsonendpoints/osruntime-bootstrapendpoints/osp/ospPotentially Affected
endpoints/endpoints.pyworkshop/controller-image.pyopenstackclientorpython-openstackclientadded to imageDependencies
python-openstackclientFabric(Python)endpoints.pybase classocCLIopenstackclientpod in RHOSO18paramikojsonschemaRelated Issues
Acceptance Criteria
overcloudrc-based auth continue to work without modificationclouds-yamlorpodauth modesbench-*subprojectpre-provisionedandfull-lifecyclemodes produce correct behavior with clear validation errors