From b0a1351702dd576ed56391da164d507f4ec8bb16 Mon Sep 17 00:00:00 2001 From: jamepark4 Date: Fri, 15 Nov 2024 11:01:53 -0500 Subject: [PATCH] Redefine uni05epsilon to deploy with 3 cells --- automation/vars/uni05epsilon.yaml | 38 +++++ .../nodeset2/kustomization.yaml | 48 +++++++ .../nodeset2/resources/ceph-extra-mounts.yaml | 17 +++ .../nodeset2/resources/ceph-secret.yaml | 10 ++ .../resources/cinder-volume-nfs-secrets.yaml | 13 ++ .../cinder-volume-ontap-secrets.yaml | 13 ++ .../resources/nova-custom-config.yaml | 13 ++ .../resources/nova-custom-service.yaml | 29 ++++ dt/uni05epsilon/kustomization.yaml | 60 ++++++++ .../control-plane/nncp/values.yaml | 4 + .../control-plane/service-values.yaml | 23 +++ .../deployment/kustomization.yaml | 9 ++ .../edpm-pre-ceph/nodeset/values.yaml | 17 --- .../nodeset2/deployment/kustomization.yaml | 33 +++++ .../nodeset2/deployment/values.yaml | 21 +++ .../nodeset2/edpm-pre-ceph/kustomization.yaml | 18 +++ .../nodeset2/edpm-pre-ceph/values.yaml | 136 ++++++++++++++++++ .../uni05epsilon/nodeset2/kustomization.yaml | 26 ++++ examples/dt/uni05epsilon/nodeset2/values.yaml | 32 +++++ 19 files changed, 543 insertions(+), 17 deletions(-) create mode 100644 dt/uni05epsilon/edpm-post-ceph/nodeset2/kustomization.yaml create mode 100644 dt/uni05epsilon/edpm-post-ceph/nodeset2/resources/ceph-extra-mounts.yaml create mode 100644 dt/uni05epsilon/edpm-post-ceph/nodeset2/resources/ceph-secret.yaml create mode 100644 dt/uni05epsilon/edpm-post-ceph/nodeset2/resources/cinder-volume-nfs-secrets.yaml create mode 100644 dt/uni05epsilon/edpm-post-ceph/nodeset2/resources/cinder-volume-ontap-secrets.yaml create mode 100644 dt/uni05epsilon/edpm-post-ceph/nodeset2/resources/nova-custom-config.yaml create mode 100644 dt/uni05epsilon/edpm-post-ceph/nodeset2/resources/nova-custom-service.yaml create mode 100644 examples/dt/uni05epsilon/nodeset2/deployment/kustomization.yaml create mode 100644 examples/dt/uni05epsilon/nodeset2/deployment/values.yaml create mode 100644 examples/dt/uni05epsilon/nodeset2/edpm-pre-ceph/kustomization.yaml create mode 100644 examples/dt/uni05epsilon/nodeset2/edpm-pre-ceph/values.yaml create mode 100644 examples/dt/uni05epsilon/nodeset2/kustomization.yaml create mode 100644 examples/dt/uni05epsilon/nodeset2/values.yaml diff --git a/automation/vars/uni05epsilon.yaml b/automation/vars/uni05epsilon.yaml index b5c297f70..c0aecfd9d 100644 --- a/automation/vars/uni05epsilon.yaml +++ b/automation/vars/uni05epsilon.yaml @@ -40,6 +40,18 @@ vas: src_file: values.yaml build_output: nodeset-pre-ceph.yaml + - path: examples/dt/uni05epsilon/nodeset2/edpm-pre-ceph + wait_conditions: + - >- + oc -n openstack wait osdpns + openstack-edpm-2 + --for condition=SetupReady + --timeout=10m + values: + - name: edpm-nodeset-values + src_file: values.yaml + build_output: nodeset2-pre-ceph.yaml + - path: examples/dt/uni05epsilon/edpm-pre-ceph/deployment wait_conditions: - >- @@ -71,6 +83,20 @@ vas: src_file: values.yaml build_output: nodeset-post-ceph.yaml + - path: examples/dt/uni05epsilon/nodeset2 + wait_conditions: + - >- + oc -n openstack wait osdpns + openstack-edpm + --for condition=SetupReady + --timeout=10m + values: + - name: service-values + src_file: service-values.yaml + - name: edpm-nodeset-values-post-ceph + src_file: values.yaml + build_output: nodeset-post-ceph.yaml + - path: examples/dt/uni05epsilon/deployment wait_conditions: - >- @@ -82,3 +108,15 @@ vas: - name: edpm-deployment-values-post-ceph src_file: values.yaml build_output: deployment-post-ceph.yaml + + - path: examples/dt/uni05epsilon/nodeset2/deployment + wait_conditions: + - >- + oc -n openstack wait osdpd + edpm-deployment-post-ceph-2 + --for condition=Ready + --timeout=40m + values: + - name: edpm-deployment-values-post-ceph + src_file: values.yaml + build_output: deployment-post-ceph.yaml diff --git a/dt/uni05epsilon/edpm-post-ceph/nodeset2/kustomization.yaml b/dt/uni05epsilon/edpm-post-ceph/nodeset2/kustomization.yaml new file mode 100644 index 000000000..8d0e90717 --- /dev/null +++ b/dt/uni05epsilon/edpm-post-ceph/nodeset2/kustomization.yaml @@ -0,0 +1,48 @@ +--- +apiVersion: kustomize.config.k8s.io/v1alpha1 +kind: Component + +transformers: + - |- + apiVersion: builtin + kind: NamespaceTransformer + metadata: + name: _ignored_ + namespace: openstack + setRoleBindingSubjects: none + unsetOnly: true + fieldSpecs: + - path: metadata/name + kind: Namespace + create: true + +components: + - ../../../../lib/dataplane/nodeset + +patches: + - target: + kind: OpenStackDataPlaneNodeSet + name: .* + path: resources/ceph-extra-mounts.yaml + +resources: + - resources/nova-custom-config.yaml + - resources/nova-custom-service.yaml + +replacements: + # + # Dataplane services override + # + # (overrides /lib/dataplane which is using edpm-nodeset-values ConfigMap) + # + - source: + kind: ConfigMap + name: edpm-nodeset-values-post-ceph + fieldPath: data.nodeset.services + targets: + - select: + kind: OpenStackDataPlaneNodeSet + fieldPaths: + - spec.services + options: + create: true diff --git a/dt/uni05epsilon/edpm-post-ceph/nodeset2/resources/ceph-extra-mounts.yaml b/dt/uni05epsilon/edpm-post-ceph/nodeset2/resources/ceph-extra-mounts.yaml new file mode 100644 index 000000000..e814b3e8d --- /dev/null +++ b/dt/uni05epsilon/edpm-post-ceph/nodeset2/resources/ceph-extra-mounts.yaml @@ -0,0 +1,17 @@ +--- +apiVersion: dataplane.openstack.org/v1beta1 +kind: OpenStackDataPlaneNodeSet +metadata: + name: openstack-edpm +spec: + nodeTemplate: + extraMounts: + - extraVolType: Ceph + mounts: + - mountPath: /etc/ceph + name: ceph + readOnly: true + volumes: + - name: ceph + secret: + secretName: ceph-conf-files diff --git a/dt/uni05epsilon/edpm-post-ceph/nodeset2/resources/ceph-secret.yaml b/dt/uni05epsilon/edpm-post-ceph/nodeset2/resources/ceph-secret.yaml new file mode 100644 index 000000000..ecd2c3833 --- /dev/null +++ b/dt/uni05epsilon/edpm-post-ceph/nodeset2/resources/ceph-secret.yaml @@ -0,0 +1,10 @@ +--- +apiVersion: v1 +kind: Secret +type: Opaque +metadata: + name: ceph-conf-files + namespace: openstack +data: + ceph.client.openstack.keyring: _replaced_ + ceph.conf: _replaced_ diff --git a/dt/uni05epsilon/edpm-post-ceph/nodeset2/resources/cinder-volume-nfs-secrets.yaml b/dt/uni05epsilon/edpm-post-ceph/nodeset2/resources/cinder-volume-nfs-secrets.yaml new file mode 100644 index 000000000..9465beb6a --- /dev/null +++ b/dt/uni05epsilon/edpm-post-ceph/nodeset2/resources/cinder-volume-nfs-secrets.yaml @@ -0,0 +1,13 @@ +--- +# Define the "cinder-volume-nfs-secrets" Secret that contains sensitive +# information pertaining to the [nfs] backend. +apiVersion: v1 +kind: Secret +metadata: + labels: + service: cinder + component: cinder-volume + name: cinder-volume-nfs-secrets +type: Opaque +stringData: + cinder-volume-nfs-secrets: _replaced_ diff --git a/dt/uni05epsilon/edpm-post-ceph/nodeset2/resources/cinder-volume-ontap-secrets.yaml b/dt/uni05epsilon/edpm-post-ceph/nodeset2/resources/cinder-volume-ontap-secrets.yaml new file mode 100644 index 000000000..c69864d9a --- /dev/null +++ b/dt/uni05epsilon/edpm-post-ceph/nodeset2/resources/cinder-volume-ontap-secrets.yaml @@ -0,0 +1,13 @@ +--- +# Define the "cinder-volume-ontap-secrets" Secret that contains sensitive +# information pertaining to the [ontap] backend. +apiVersion: v1 +kind: Secret +metadata: + labels: + service: cinder + component: cinder-volume + name: cinder-volume-ontap-secrets +type: Opaque +stringData: + cinder-volume-ontap-secrets: _replaced_ diff --git a/dt/uni05epsilon/edpm-post-ceph/nodeset2/resources/nova-custom-config.yaml b/dt/uni05epsilon/edpm-post-ceph/nodeset2/resources/nova-custom-config.yaml new file mode 100644 index 000000000..6ecd721ab --- /dev/null +++ b/dt/uni05epsilon/edpm-post-ceph/nodeset2/resources/nova-custom-config.yaml @@ -0,0 +1,13 @@ +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: nova-custom-config +data: + 25-nova-custom.conf: | + [DEFAULT] + # Override our defaults in this dt to get coverage for metadata-api based + # cloud-init scenarios + force_config_drive = False + 55-nova-extra.conf: | + # Additional overrides that can be set in environment-specific cases diff --git a/dt/uni05epsilon/edpm-post-ceph/nodeset2/resources/nova-custom-service.yaml b/dt/uni05epsilon/edpm-post-ceph/nodeset2/resources/nova-custom-service.yaml new file mode 100644 index 000000000..427fc1bea --- /dev/null +++ b/dt/uni05epsilon/edpm-post-ceph/nodeset2/resources/nova-custom-service.yaml @@ -0,0 +1,29 @@ +--- +apiVersion: dataplane.openstack.org/v1beta1 +kind: OpenStackDataPlaneService +metadata: + name: nova-custom +spec: + label: dataplane-deployment-nova-custom + dataSources: + - configMapRef: + name: nova-custom-config + - secretRef: + name: nova-cell1-compute-config + - secretRef: + name: nova-migration-ssh-key + playbook: osp.edpm.nova + caCerts: combined-ca-bundle + tlsCerts: + default: + contents: + - dnsnames + - ips + networks: + - ctlplane + issuer: osp-rootca-issuer-internal + edpmRoleServiceName: nova + edpmServiceType: nova + containerImageFields: + - NovaComputeImage + - EdpmIscsidImage diff --git a/dt/uni05epsilon/kustomization.yaml b/dt/uni05epsilon/kustomization.yaml index 6cee2fe25..8b952eec6 100644 --- a/dt/uni05epsilon/kustomization.yaml +++ b/dt/uni05epsilon/kustomization.yaml @@ -54,6 +54,66 @@ replacements: fieldPaths: - spec.networks.[name=storagemgmt].dnsDomain + - source: + kind: ConfigMap + name: service-values + fieldPath: data.galera.templates.openstack-cell2 + targets: + - select: + kind: OpenStackControlPlane + fieldPaths: + - spec.galera.templates.openstack-cell2 + options: + create: true + + - source: + kind: ConfigMap + name: network-values + fieldPath: data.rabbitmq-cell2.endpoint_annotations + targets: + - select: + kind: OpenStackControlPlane + fieldPaths: + - spec.rabbitmq.templates.rabbitmq-cell2.override.service.metadata.annotations + options: + create: true + + - source: + kind: ConfigMap + name: service-values + fieldPath: data.rabbitmq.templates.rabbitmq-cell2.replicas + targets: + - select: + kind: OpenStackControlPlane + fieldPaths: + - spec.rabbitmq.templates.rabbitmq-cell2.replicas + options: + create: true + + - source: + kind: ConfigMap + name: network-values + fieldPath: data.lbServiceType + targets: + - select: + kind: OpenStackControlPlane + fieldPaths: + - spec.rabbitmq.templates.rabbitmq-cell2.override.service.spec.type + options: + create: true + + - source: + kind: ConfigMap + name: service-values + fieldPath: data.nova.template.cellTemplates.cell2 + targets: + - select: + kind: OpenStackControlPlane + fieldPaths: + - spec.nova.template.cellTemplates.cell2 + options: + create: true + - source: kind: ConfigMap name: network-values diff --git a/examples/dt/uni05epsilon/control-plane/nncp/values.yaml b/examples/dt/uni05epsilon/control-plane/nncp/values.yaml index d01f82a7f..8ed071bf7 100644 --- a/examples/dt/uni05epsilon/control-plane/nncp/values.yaml +++ b/examples/dt/uni05epsilon/control-plane/nncp/values.yaml @@ -226,6 +226,10 @@ data: endpoint_annotations: metallb.universe.tf/address-pool: internalapi metallb.universe.tf/loadBalancerIPs: 172.17.0.86 + rabbitmq-cell2: + endpoint_annotations: + metallb.universe.tf/address-pool: internalapi + metallb.universe.tf/loadBalancerIPs: 172.17.0.87 lbServiceType: LoadBalancer storageClass: local-storage diff --git a/examples/dt/uni05epsilon/control-plane/service-values.yaml b/examples/dt/uni05epsilon/control-plane/service-values.yaml index 64eda27e3..ea1118f0e 100644 --- a/examples/dt/uni05epsilon/control-plane/service-values.yaml +++ b/examples/dt/uni05epsilon/control-plane/service-values.yaml @@ -9,3 +9,26 @@ metadata: data: preserveJobs: false + + galera: + templates: + openstack-cell2: + storageRequest: 5G + secret: osp-secret + replicas: 3 + + nova: + template: + cellTemplates: + cell2: + cellDatabaseAccount: nova-cell2 + cellDatabaseInstance: openstack-cell2 + cellMessageBusInstance: rabbitmq-cell2 + conductorServiceTemplate: + replicas: 1 + hasAPIAccess: true + + rabbitmq: + templates: + rabbitmq-cell2: + replicas: 3 diff --git a/examples/dt/uni05epsilon/edpm-pre-ceph/deployment/kustomization.yaml b/examples/dt/uni05epsilon/edpm-pre-ceph/deployment/kustomization.yaml index 552695b3e..1783c1158 100644 --- a/examples/dt/uni05epsilon/edpm-pre-ceph/deployment/kustomization.yaml +++ b/examples/dt/uni05epsilon/edpm-pre-ceph/deployment/kustomization.yaml @@ -8,6 +8,15 @@ components: resources: - values.yaml +patches: + - target: + kind: OpenStackDataPlaneDeployment + name: edpm-deployment-pre-ceph + patch: | + - op: add + path: /spec/nodeSets/- + value: openstack-edpm-2 + replacements: - source: kind: ConfigMap diff --git a/examples/dt/uni05epsilon/edpm-pre-ceph/nodeset/values.yaml b/examples/dt/uni05epsilon/edpm-pre-ceph/nodeset/values.yaml index 00b638d22..ef6624a2e 100644 --- a/examples/dt/uni05epsilon/edpm-pre-ceph/nodeset/values.yaml +++ b/examples/dt/uni05epsilon/edpm-pre-ceph/nodeset/values.yaml @@ -134,23 +134,6 @@ data: - name: tenant subnetName: subnet1 - edpm-compute-2: - ansible: - ansibleHost: 192.168.122.102 - hostName: edpm-compute-2 - networks: - - defaultRoute: true - fixedIP: 192.168.122.102 - name: ctlplane - subnetName: subnet1 - - name: internalapi - subnetName: subnet1 - - name: storage - subnetName: subnet1 - - name: storagemgmt - subnetName: subnet1 - - name: tenant - subnetName: subnet1 # The nova-custom service is omitted since it is not yet # defined. It will be defined and set after Ceph is deployed. # See deployment servicesOverride for effective services list. diff --git a/examples/dt/uni05epsilon/nodeset2/deployment/kustomization.yaml b/examples/dt/uni05epsilon/nodeset2/deployment/kustomization.yaml new file mode 100644 index 000000000..b9bccf818 --- /dev/null +++ b/examples/dt/uni05epsilon/nodeset2/deployment/kustomization.yaml @@ -0,0 +1,33 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +components: + - ../../../../../dt/uni05epsilon/edpm-post-ceph/deployment + +resources: + - values.yaml + +replacements: + - source: + kind: ConfigMap + name: edpm-deployment-values-post-ceph + fieldPath: data.servicesOverride + targets: + - select: + kind: OpenStackDataPlaneDeployment + fieldPaths: + - spec.servicesOverride + options: + create: true + - source: + kind: ConfigMap + name: edpm-deployment-values-post-ceph + fieldPath: data.deployment.spec.nodeSets + targets: + - select: + kind: OpenStackDataPlaneDeployment + fieldPaths: + - spec.nodeSets + options: + create: true diff --git a/examples/dt/uni05epsilon/nodeset2/deployment/values.yaml b/examples/dt/uni05epsilon/nodeset2/deployment/values.yaml new file mode 100644 index 000000000..df398e3dd --- /dev/null +++ b/examples/dt/uni05epsilon/nodeset2/deployment/values.yaml @@ -0,0 +1,21 @@ +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: edpm-deployment-values-post-ceph + annotations: + config.kubernetes.io/local-config: "true" + +data: + deployment: + name: edpm-deployment-post-ceph-2 + spec: + nodeSets: + - openstack-edpm-2 + servicesOverride: + - install-certs + - ceph-client + - ovn + - neutron-metadata + - libvirt + - nova-custom-cell2 diff --git a/examples/dt/uni05epsilon/nodeset2/edpm-pre-ceph/kustomization.yaml b/examples/dt/uni05epsilon/nodeset2/edpm-pre-ceph/kustomization.yaml new file mode 100644 index 000000000..7f0dd1a23 --- /dev/null +++ b/examples/dt/uni05epsilon/nodeset2/edpm-pre-ceph/kustomization.yaml @@ -0,0 +1,18 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +components: + - ../../../../../dt/uni05epsilon/edpm-pre-ceph/nodeset + +resources: + - values.yaml + +patches: + - target: + kind: OpenStackDataPlaneNodeSet + name: openstack-edpm + patch: |- + - op: replace + path: /metadata/name + value: openstack-edpm-2 diff --git a/examples/dt/uni05epsilon/nodeset2/edpm-pre-ceph/values.yaml b/examples/dt/uni05epsilon/nodeset2/edpm-pre-ceph/values.yaml new file mode 100644 index 000000000..c0e3189eb --- /dev/null +++ b/examples/dt/uni05epsilon/nodeset2/edpm-pre-ceph/values.yaml @@ -0,0 +1,136 @@ +--- +apiVersion: v1 +kind: ConfigMap + +metadata: + name: edpm-nodeset-values + annotations: + config.kubernetes.io/local-config: "true" + +data: + ssh_keys: + authorized: _replaced_ + private: _replaced_ + public: _replaced_ + + nova: + migration: + ssh_keys: + private: _replaced_ + public: _replaced_ + + nodeset: + ansible: + ansibleUser: cloud-admin + ansiblePort: 22 + ansibleVars: + timesync_ntp_servers: + - hostname: pool.ntp.org + edpm_network_config_hide_sensitive_logs: false + edpm_network_config_template: | + --- + {% set mtu_list = [ctlplane_mtu] %} + {% for network in nodeset_networks %} + {{ mtu_list.append(lookup('vars', networks_lower[network] ~ '_mtu')) }} + {%- endfor %} + {% set min_viable_mtu = mtu_list | max %} + network_config: + - type: ovs_bridge + name: {{ neutron_physical_bridge_name }} + mtu: {{ min_viable_mtu }} + use_dhcp: false + dns_servers: {{ ctlplane_dns_nameservers }} + domain: {{ dns_search_domains }} + addresses: + - ip_netmask: {{ ctlplane_ip }}/{{ ctlplane_cidr }} + routes: {{ ctlplane_host_routes }} + members: + - type: interface + name: nic2 + mtu: {{ min_viable_mtu }} + # force the MAC address of the bridge to this interface + primary: true + {% for network in nodeset_networks %} + - type: vlan + mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }} + vlan_id: {{ lookup('vars', networks_lower[network] ~ '_vlan_id') }} + addresses: + - ip_netmask: >- + {{ + lookup('vars', networks_lower[network] ~ '_ip') + }}/{{ + lookup('vars', networks_lower[network] ~ '_cidr') + }} + routes: {{ lookup('vars', networks_lower[network] ~ '_host_routes') }} + {% endfor %} + neutron_physical_bridge_name: br-ex + neutron_public_interface_name: eth0 + + edpm_nodes_validation_validate_controllers_icmp: false + edpm_nodes_validation_validate_gateway_icmp: false + edpm_selinux_mode: enforcing + edpm_sshd_configure_firewall: true + edpm_sshd_allowed_ranges: + - 192.168.122.0/24 + enable_debug: false + gather_facts: false + edpm_ceph_hci_pre_enabled_services: + - ceph_mon + - ceph_mgr + - ceph_osd + storage_mtu: 1500 + storage_mgmt_mtu: 1500 + storage_mgmt_vlan_id: 23 + storage_mgmt_cidr: "24" + storage_mgmt_host_routes: [] + + networks: + - defaultRoute: true + name: ctlplane + subnetName: subnet1 + - name: internalapi + subnetName: subnet1 + - name: storage + subnetName: subnet1 + - name: tenant + subnetName: subnet1 + - name: storagemgmt + subnetName: subnet1 + + nodes: + edpm-compute-2: + ansible: + ansibleHost: 192.168.122.102 + hostName: edpm-compute-2 + networks: + - defaultRoute: true + fixedIP: 192.168.122.102 + name: ctlplane + subnetName: subnet1 + - name: internalapi + subnetName: subnet1 + - name: storage + subnetName: subnet1 + - name: storagemgmt + subnetName: subnet1 + - name: tenant + subnetName: subnet1 + # The nova-custom service is omitted since it is not yet + # defined. It will be defined and set after Ceph is deployed. + # See deployment servicesOverride for effective services list. + services: + - bootstrap + - download-cache + - configure-network + - validate-network + - install-os + - ceph-hci-pre + - configure-os + - ssh-known-hosts + - run-os + - reboot-os + - install-certs + - ceph-client + - ovn + - neutron-metadata + - libvirt diff --git a/examples/dt/uni05epsilon/nodeset2/kustomization.yaml b/examples/dt/uni05epsilon/nodeset2/kustomization.yaml new file mode 100644 index 000000000..9ae968f10 --- /dev/null +++ b/examples/dt/uni05epsilon/nodeset2/kustomization.yaml @@ -0,0 +1,26 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +components: + - ../../../../dt/uni05epsilon/edpm-post-ceph/nodeset2 + +resources: + - edpm-pre-ceph/values.yaml + - values.yaml + + +patches: + - target: + kind: OpenStackDataPlaneService + name: nova-custom + patch: |- + - op: replace + path: /metadata/name + value: nova-custom-cell2 + - op: replace + path: /spec/label + value: nova-custom-cell2 + - op: replace + path: /spec/dataSources/1/secretRef/name + value: nova-cell2-compute-config diff --git a/examples/dt/uni05epsilon/nodeset2/values.yaml b/examples/dt/uni05epsilon/nodeset2/values.yaml new file mode 100644 index 000000000..a889a5861 --- /dev/null +++ b/examples/dt/uni05epsilon/nodeset2/values.yaml @@ -0,0 +1,32 @@ +--- +apiVersion: v1 +kind: ConfigMap + +metadata: + name: edpm-nodeset-values-post-ceph + annotations: + config.kubernetes.io/local-config: "true" + +data: + ceph: + conf: _replaced_ + keyring: _replaced_ + + nodeset: + services: + - bootstrap + - download-cache + - configure-network + - validate-network + - install-os + - ceph-hci-pre + - configure-os + - ssh-known-hosts + - run-os + - reboot-os + - install-certs + - ceph-client + - ovn + - neutron-metadata + - libvirt + - nova-custom-cell2