diff --git a/automation/vars/nova05epsilon.yaml b/automation/vars/nova05epsilon.yaml new file mode 100644 index 000000000..3055c193b --- /dev/null +++ b/automation/vars/nova05epsilon.yaml @@ -0,0 +1,94 @@ +--- +vas: + nova05epsilon: + stages: + - path: examples/dt/nova/nova05epsilon/networking/nncp + wait_conditions: + - >- + oc -n openstack wait nncp + -l osp/nncm-config-type=standard + --for jsonpath='{.status.conditions[0].reason}'=SuccessfullyConfigured + --timeout=60s + values: + - name: network-values + src_file: values.yaml + build_output: nncp.yaml + + - path: examples/dt/nova/nova05epsilon/networking + wait_conditions: + - >- + oc -n metallb-system wait pod + -l app=metallb -l component=speaker + --for condition=Ready + --timeout=5m + values: + - name: network-values + src_file: nncp/values.yaml + build_output: network.yaml + + - path: examples/dt/nova/nova05epsilon + wait_conditions: + - >- + oc -n openstack wait osctlplane controlplane --for condition=Ready + --timeout=600s + values: + - name: network-values + src_file: networking/nncp/values.yaml + - name: service-values + src_file: service-values.yaml + build_output: control-plane.yaml + + - path: examples/dt/nova/nova05epsilon/edpm/nodeset + wait_conditions: + - >- + oc -n openstack wait + osdpns openstack-edpm --for condition=SetupReady + --timeout=60m + values: + - name: edpm-nodeset-values + src_file: values.yaml + build_output: nodeset.yaml + + - path: examples/dt/nova/nova05epsilon/edpm/deployment + wait_conditions: + - >- + oc -n openstack wait + osdpd edpm-deployment --for condition=Ready + --timeout=90m + values: + - name: edpm-deployment-values + src_file: values.yaml + build_output: deployment.yaml + + - path: examples/dt/nova/nova05epsilon/edpm-post-driver/deployment + wait_conditions: + - >- + oc -n openstack wait + osdpd edpm-deployment-post-driver --for condition=Ready + --timeout=20m + values: + - name: edpm-deployment-post-driver + src_file: values.yaml + build_output: post-driver-deployment.yaml + + - path: examples/dt/nova/nova05epsilon/edpm-deploy-provider/dataplaneservice + wait_conditions: + - >- + oc -n default wait + ns openstack --for jsonpath='{.status.phase}'=Active + --timeout=5m + values: + - name: edpm-provider-values + src_file: values.yaml + build_output: provider-dataplaneservice.yaml + + - path: examples/dt/nova/nova05epsilon/edpm-deploy-provider/deployment + wait_conditions: + - >- + oc -n openstack wait + osdpd edpm-deployment-provider --for condition=Ready + --timeout=20m + values: + - name: edpm-deploy-provider-values + src_file: values.yaml + build_output: provider-deployment.yaml diff --git a/dt/nova/nova05epsilon/README.md b/dt/nova/nova05epsilon/README.md new file mode 100644 index 000000000..1971b0986 --- /dev/null +++ b/dt/nova/nova05epsilon/README.md @@ -0,0 +1,12 @@ +# Deployed Topology - Nova/nova05epsilon + +If you are looking for information on how to deploy the nova05epsilon based DT, then +please see the +[README](../../../examples/dt/nova/nova05epsilon/README.md) in the examples +directory. + +This directory ,`dt/nova/nova05epsilon/`, exists so that the +[kustomization.yaml](../../../examples/dt/nova/nova05epsilon/edpm/nodeset/kustomization.yaml) +in the examples directory of nova05epsilon topology, reference it by path as a +component. It's contents are likely uninteresting unless you want to understand +how kustomize was implemented in this repository. diff --git a/dt/nova/nova05epsilon/edpm-deploy-provider/deployment/kustomization.yaml b/dt/nova/nova05epsilon/edpm-deploy-provider/deployment/kustomization.yaml new file mode 100644 index 000000000..35ccc4852 --- /dev/null +++ b/dt/nova/nova05epsilon/edpm-deploy-provider/deployment/kustomization.yaml @@ -0,0 +1,21 @@ +--- +apiVersion: kustomize.config.k8s.io/v1alpha1 +kind: Component + +transformers: + # Set namespace to OpenStack on all namespaced objects without a namespace + - |- + apiVersion: builtin + kind: NamespaceTransformer + metadata: + name: _ignored_ + namespace: openstack + setRoleBindingSubjects: none + unsetOnly: true + fieldSpecs: + - path: metadata/name + kind: Namespace + create: true + +components: + - ../../../../../lib/dataplane/deployment diff --git a/dt/nova/nova05epsilon/edpm-deploy-provider/nodeset/kustomization.yaml b/dt/nova/nova05epsilon/edpm-deploy-provider/nodeset/kustomization.yaml new file mode 100644 index 000000000..80d028f12 --- /dev/null +++ b/dt/nova/nova05epsilon/edpm-deploy-provider/nodeset/kustomization.yaml @@ -0,0 +1,36 @@ +--- +apiVersion: kustomize.config.k8s.io/v1alpha1 +kind: Component + +transformers: + # Set namespace to OpenStack on all namespaced objects without a namespace + - |- + apiVersion: builtin + kind: NamespaceTransformer + metadata: + name: _ignored_ + namespace: openstack + setRoleBindingSubjects: none + unsetOnly: true + fieldSpecs: + - path: metadata/name + kind: Namespace + create: true + +resources: + - nova_provider.yaml + +replacements: + # Nova provider yaml configuration + - source: + kind: ConfigMap + name: edpm-provider-values + fieldPath: data.nova.compute.provider + targets: + - select: + kind: ConfigMap + name: compute-provider + fieldPaths: + - data.provider\.yaml + options: + create: true diff --git a/dt/nova/nova05epsilon/edpm-deploy-provider/nodeset/nova_provider.yaml b/dt/nova/nova05epsilon/edpm-deploy-provider/nodeset/nova_provider.yaml new file mode 100644 index 000000000..621a1e61e --- /dev/null +++ b/dt/nova/nova05epsilon/edpm-deploy-provider/nodeset/nova_provider.yaml @@ -0,0 +1,36 @@ +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: compute-provider +data: + provider.yaml: _replaced_ +--- +apiVersion: dataplane.openstack.org/v1beta1 +kind: OpenStackDataPlaneService +metadata: + name: compute-provider +spec: + label: dataplane-deployment-compute-provider + edpmServiceType: nova + dataSources: + - configMapRef: + name: compute-provider + - configMapRef: + name: cpu-pinning-nova + - configMapRef: + name: gpu-nova + - secretRef: + name: nova-cell1-compute-config + - secretRef: + name: nova-migration-ssh-key + playbook: osp.edpm.nova + tlsCerts: + default: + contents: + - dnsnames + - ips + networks: + - ctlplane + issuer: osp-rootca-issuer-internal + caCerts: combined-ca-bundle diff --git a/dt/nova/nova05epsilon/edpm-post-driver/deployment/kustomization.yaml b/dt/nova/nova05epsilon/edpm-post-driver/deployment/kustomization.yaml new file mode 100644 index 000000000..35ccc4852 --- /dev/null +++ b/dt/nova/nova05epsilon/edpm-post-driver/deployment/kustomization.yaml @@ -0,0 +1,21 @@ +--- +apiVersion: kustomize.config.k8s.io/v1alpha1 +kind: Component + +transformers: + # Set namespace to OpenStack on all namespaced objects without a namespace + - |- + apiVersion: builtin + kind: NamespaceTransformer + metadata: + name: _ignored_ + namespace: openstack + setRoleBindingSubjects: none + unsetOnly: true + fieldSpecs: + - path: metadata/name + kind: Namespace + create: true + +components: + - ../../../../../lib/dataplane/deployment diff --git a/dt/nova/nova05epsilon/edpm/deployment/kustomization.yaml b/dt/nova/nova05epsilon/edpm/deployment/kustomization.yaml new file mode 100644 index 000000000..35ccc4852 --- /dev/null +++ b/dt/nova/nova05epsilon/edpm/deployment/kustomization.yaml @@ -0,0 +1,21 @@ +--- +apiVersion: kustomize.config.k8s.io/v1alpha1 +kind: Component + +transformers: + # Set namespace to OpenStack on all namespaced objects without a namespace + - |- + apiVersion: builtin + kind: NamespaceTransformer + metadata: + name: _ignored_ + namespace: openstack + setRoleBindingSubjects: none + unsetOnly: true + fieldSpecs: + - path: metadata/name + kind: Namespace + create: true + +components: + - ../../../../../lib/dataplane/deployment diff --git a/dt/nova/nova05epsilon/edpm/nodeset/baremetalset-password-secret.yaml b/dt/nova/nova05epsilon/edpm/nodeset/baremetalset-password-secret.yaml new file mode 100644 index 000000000..41daad38d --- /dev/null +++ b/dt/nova/nova05epsilon/edpm/nodeset/baremetalset-password-secret.yaml @@ -0,0 +1,9 @@ +--- +apiVersion: v1 +data: + NodeRootPassword: _replaced_ +kind: Secret +metadata: + name: baremetalset-password-secret + namespace: openstack +type: Opaque diff --git a/dt/nova/nova05epsilon/edpm/nodeset/kustomization.yaml b/dt/nova/nova05epsilon/edpm/nodeset/kustomization.yaml new file mode 100644 index 000000000..cedd93759 --- /dev/null +++ b/dt/nova/nova05epsilon/edpm/nodeset/kustomization.yaml @@ -0,0 +1,91 @@ +--- +apiVersion: kustomize.config.k8s.io/v1alpha1 +kind: Component + +transformers: + # Set namespace to OpenStack on all namespaced objects without a namespace + - |- + 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 + +resources: + - baremetalset-password-secret.yaml + - nova_gpu.yaml + +replacements: + - source: + kind: ConfigMap + name: edpm-nodeset-values + fieldPath: data.root_password + targets: + - select: + kind: Secret + name: baremetalset-password-secret + fieldPaths: + - data.NodeRootPassword + options: + create: true + + # Nova compute CPU pinning customization + - source: + kind: ConfigMap + name: edpm-nodeset-values + fieldPath: data.nova.compute.conf + targets: + - select: + kind: ConfigMap + name: cpu-pinning-nova + fieldPaths: + - data.25-cpu-pinning-nova\.conf + options: + create: true + # Nova compute PCI passthrough customization + - source: + kind: ConfigMap + name: edpm-nodeset-values + fieldPath: data.nova.pci.conf + targets: + - select: + kind: ConfigMap + name: gpu-nova + fieldPaths: + - data.03-gpu-nova\.conf + options: + create: true + - source: + kind: ConfigMap + name: edpm-nodeset-values + fieldPath: data.preProvisioned + targets: + - select: + kind: OpenStackDataPlaneNodeSet + name: openstack-edpm + fieldPaths: + - spec.preProvisioned + options: + create: true + - source: + kind: ConfigMap + name: edpm-nodeset-values + fieldPath: data.baremetalSetTemplate + targets: + - select: + kind: OpenStackDataPlaneNodeSet + name: openstack-edpm + fieldPaths: + - spec.baremetalSetTemplate + options: + create: true + diff --git a/dt/nova/nova05epsilon/edpm/nodeset/nova_gpu.yaml b/dt/nova/nova05epsilon/edpm/nodeset/nova_gpu.yaml new file mode 100644 index 000000000..8a9ab3620 --- /dev/null +++ b/dt/nova/nova05epsilon/edpm/nodeset/nova_gpu.yaml @@ -0,0 +1,93 @@ +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: cpu-pinning-nova +data: + 25-cpu-pinning-nova.conf: _replaced_ +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: gpu-nova +data: + 03-gpu-nova.conf: _replaced_ +--- +apiVersion: dataplane.openstack.org/v1beta1 +kind: OpenStackDataPlaneService +metadata: + name: nova-custom-gpu +spec: + label: dataplane-deployment-nova-custom-gpu + edpmServiceType: nova + dataSources: + - configMapRef: + name: cpu-pinning-nova + - configMapRef: + name: gpu-nova + - secretRef: + name: nova-cell1-compute-config + - secretRef: + name: nova-migration-ssh-key + playbook: osp.edpm.nova + tlsCerts: + default: + contents: + - dnsnames + - ips + networks: + - ctlplane + issuer: osp-rootca-issuer-internal + caCerts: combined-ca-bundle +--- +apiVersion: dataplane.openstack.org/v1beta1 +kind: OpenStackDataPlaneService +metadata: + name: vfio-pci-bind + namespace: openstack +spec: + playbookContents: | + - name: Bind vfio-pci to devices + hosts: all + tasks: + - name: Blacklist nouveau and nvidia + become: true + ansible.builtin.copy: + dest: "/etc/modprobe.d/blacklist-nvidia.conf" + mode: "0644" + content: |- + blacklist nouveau + blacklist nvidia + options nouveau modeset=0 + force: false + register: _blacklist_nvidia + + - name: Ensure vfio and vfio-pci modules are loaded at boot + become: true + ansible.builtin.copy: + dest: /etc/modules-load.d/vfio.conf + mode: "0644" + content: | + vfio + vfio-pci + force: false + register: _load_vfio + + - name: Check if grub2-mkconfig has --update-bls-cmdline option + ansible.builtin.shell: + cmd: grub2-mkconfig --help | grep '\-\-update-bls-cmdline' + ignore_errors: true + register: check_update_bls_cmdline + changed_when: false + + - name: Regenerate initramfs + become: true + ansible.builtin.command: "{{ item }}" + loop: + - 'dracut --force' + - >- + grub2-mkconfig -o /boot/grub2/grub.cfg + {{ '--update-bls-cmdline' + if check_update_bls_cmdline.rc == 0 + else '' }} + when: (_blacklist_nvidia.changed or _load_vfio.changed) diff --git a/dt/nova/nova05epsilon/kustomization.yaml b/dt/nova/nova05epsilon/kustomization.yaml new file mode 100644 index 000000000..931f8afd8 --- /dev/null +++ b/dt/nova/nova05epsilon/kustomization.yaml @@ -0,0 +1,124 @@ +--- +apiVersion: kustomize.config.k8s.io/v1alpha1 +kind: Component + +transformers: + # Set namespace to OpenStack on all namespaced objects without a namespace + - |- + apiVersion: builtin + kind: NamespaceTransformer + metadata: + name: _ignored_ + namespace: openstack + setRoleBindingSubjects: none + unsetOnly: true + fieldSpecs: + - path: metadata/name + kind: Namespace + create: true + +components: + - ../../../lib/control-plane + +replacements: + # Control plane customization + - source: + kind: ConfigMap + name: service-values + fieldPath: data.neutron.customServiceConfig + targets: + - select: + kind: OpenStackControlPlane + fieldPaths: + - spec.neutron.template.customServiceConfig + options: + create: true + # OVN control plane SRIOV customization + - source: + kind: ConfigMap + name: service-values + fieldPath: data.ovn.ovnController.nicMappings + targets: + - select: + kind: OpenStackControlPlane + fieldPaths: + - spec.ovn.template.ovnController.nicMappings + options: + create: true + - source: + kind: ConfigMap + name: service-values + fieldPath: data.glance.customServiceConfig + targets: + - select: + kind: OpenStackControlPlane + fieldPaths: + - spec.glance.template.customServiceConfig + options: + create: true + - source: + kind: ConfigMap + name: service-values + fieldPath: data.glance.default.replicas + targets: + - select: + kind: OpenStackControlPlane + fieldPaths: + - spec.glance.template.glanceAPIs.default.replicas + options: + create: true + - source: + kind: ConfigMap + name: service-values + fieldPath: data.swift.enabled + targets: + - select: + kind: OpenStackControlPlane + fieldPaths: + - spec.swift.enabled + options: + create: true + - source: + kind: ConfigMap + name: service-values + fieldPath: data.nova.apiServiceTemplate.customServiceConfig + targets: + - select: + kind: OpenStackControlPlane + fieldPaths: + - spec.nova.template.apiServiceTemplate.customServiceConfig + options: + create: true + - source: + kind: ConfigMap + name: service-values + fieldPath: data.nova.cell0.conductorServiceTemplate.customServiceConfig + targets: + - select: + kind: OpenStackControlPlane + fieldPaths: + - spec.nova.template.cellTemplates.cell0.conductorServiceTemplate.customServiceConfig + options: + create: true + - source: + kind: ConfigMap + name: service-values + fieldPath: data.nova.cell1.conductorServiceTemplate.customServiceConfig + targets: + - select: + kind: OpenStackControlPlane + fieldPaths: + - spec.nova.template.cellTemplates.cell1.conductorServiceTemplate.customServiceConfig + options: + create: true + - source: + kind: ConfigMap + name: service-values + fieldPath: data.nova.schedulerServiceTemplate.customServiceConfig + targets: + - select: + kind: OpenStackControlPlane + fieldPaths: + - spec.nova.template.schedulerServiceTemplate.customServiceConfig + options: + create: true diff --git a/dt/nova/nova05epsilon/namespace.yaml b/dt/nova/nova05epsilon/namespace.yaml new file mode 100644 index 000000000..60a6e8c42 --- /dev/null +++ b/dt/nova/nova05epsilon/namespace.yaml @@ -0,0 +1,12 @@ +--- +apiVersion: builtin +kind: NamespaceTransformer +metadata: + name: _ignored_ + namespace: openstack +setRoleBindingSubjects: none +unsetOnly: true +fieldSpecs: + - path: metadata/name + kind: Namespace + create: true diff --git a/dt/nova/nova05epsilon/networking/kustomization.yaml b/dt/nova/nova05epsilon/networking/kustomization.yaml new file mode 100644 index 000000000..9265b54e7 --- /dev/null +++ b/dt/nova/nova05epsilon/networking/kustomization.yaml @@ -0,0 +1,23 @@ +--- +apiVersion: kustomize.config.k8s.io/v1alpha1 +kind: Component + +transformers: + # Set namespace to OpenStack on all namespaced objects without a namespace + - |- + apiVersion: builtin + kind: NamespaceTransformer + metadata: + name: _ignored_ + namespace: openstack + setRoleBindingSubjects: none + unsetOnly: true + fieldSpecs: + - path: metadata/name + kind: Namespace + create: true + +components: + - ../../../../lib/networking/metallb + - ../../../../lib/networking/netconfig + - ../../../../lib/networking/nad diff --git a/examples/dt/nova/nova05epsilon/.gitignore b/examples/dt/nova/nova05epsilon/.gitignore new file mode 100644 index 000000000..3df8f53be --- /dev/null +++ b/examples/dt/nova/nova05epsilon/.gitignore @@ -0,0 +1 @@ +control-plane.yaml diff --git a/examples/dt/nova/nova05epsilon/README.md b/examples/dt/nova/nova05epsilon/README.md new file mode 100644 index 000000000..bfc178fda --- /dev/null +++ b/examples/dt/nova/nova05epsilon/README.md @@ -0,0 +1,213 @@ +# Deployed Topology - Nova/Nova02Beta + +This deployment takes advantage of multiple nodesets to allow for mixed GPU +environment consisting of vGPUs via MDevs and SR-IOV. This DT also allows for +the support of SR-IOV Nics, PCI in placement, and mixed CPU pinning +configurations. + + +## Purpose + +This allows for testing heterogeneous dataplanes via different nodeset +configurations. These nodesets have different OpenstackDataplaneServices (OSDPS) +for the respective GPU hardware and also allows users to create different PCPU +pinning schemes. + +## Environment + +### Nodes + +| Role | Machine Type | Count | +| ----------------- | ------------ | ----- | +| Compact OpenShift | vm | 3 | +| OpenStack Compute | vm | 2 | + + +### Networks + +| Name | Type | Interface | CIDR | +| ------------ | -------- | --------- | --------------- | +| Provisioning | untagged | nic1 | 172.22.0.0/24 | +| Machine | untagged | nic2 | 192.168.32.0/20 | +| RH OSP | trunk | nic3 | | + + +#### VLAN networks in RH OSP + +| Name | Type | CIDR | +| ----------- | ----------- | ----------------- | +| ctlplane | untagged | 192.168.122.0/24 | +| internalapi | VLAN tagged | 172.17.0.0/24 | +| octavia | VLAN tagged | 172.23.0.0/24 | +| storage | VLAN tagged | 172.18.0.0/24 | +| storagemgmt | VLAN tagged | 172.20.0.0/24 | +| tenant | VLAN tagged | 172.19.0.0/24 | + + +### Services, enabled features and configurations + +| Service | configuration | Lock-in coverage? | +| ---------------- | ----------------------- | ------------------ | +| Barbican | (default) | Must have | +| Cinder | LVM/iSCSI/lioadm | Must have | +| Cinder Backup | Swift | Must have | +| Glance | Swift | Must have | +| Swift | (default) | Must have | +| Horizon | N/A | Must have | +| Neutron | Geneve (OVN) | Must have | +| Swift | (default) | Must have | + +#### Support services + +The following table lists services which are not the main focus of the testing +(which may be covered by additional scenarios), but are required for the DT +to work properly and can be deployed with any/default configuration. + +| Service | Reason | +| ---------------- |--------------------------- | +| Keystone | needed by all services | + + +### Additional configuration + +- Always-on, default services and features: TLSe + +#### Nova + +Enable PCI in placement and create an alias for the PCI device the operator +wishes to passthrough to the guest. + +```YAML +--- +kind: OpenStackControlPlane +spec: + nova: + apiServiceTemplate: + customServiceConfig: | + [pci] + alias = { "vendor_id":"8086", "product_id":"154d", "device_type":"type-PCI", "name":"a1" } + [filter_scheduler] + pci_in_placement = True + cell0: + conductorServiceTemplate: + customServiceConfig: | + [filter_scheduler] + pci_in_placement = True + cell1: + conductorServiceTemplate: + customServiceConfig: | + [filter_scheduler] + pci_in_placement = True + schedulerServiceTemplate: + customServiceConfig: | + [filter_scheduler] + pci_in_placement = True +``` + +#### OSDPNS + +Create two custom OSDPS for each nodeset, both are responsible for installing +GPU services with one allowing for MDevs and the other using SR-IOV. + +```YAML +apiVersion: dataplane.openstack.org/v1beta1 +kind: OpenStackDataPlaneNodeSet +metadata: + name: openstack-edpm + namespace: openstack +spec: + services: + - bootstrap + - download-cache + - configure-network + - validate-network + - install-os + - configure-os + - ssh-known-hosts + - run-os + - reboot-os + - install-certs + - libvirt + - ovn + - neutron-ovn + - nova-custom-sriov + - neutron-sriov + - neutron-metadata + - install-nvidia-mdev +--- +apiVersion: dataplane.openstack.org/v1beta1 +kind: OpenStackDataPlaneNodeSet +metadata: + name: openstack-edpm-2 + namespace: openstack +spec: + services: + - bootstrap + - download-cache + - configure-network + - validate-network + - install-os + - configure-os + - ssh-known-hosts + - run-os + - reboot-os + - install-certs + - libvirt + - ovn + - neutron-ovn + - nova-custom-sriov + - neutron-sriov + - neutron-metadata + - install-nvidia-sriov + +``` + +#### Provider.yaml via ConfigMap + +Create a ConfigMap that maps the resource providers with vGPU resources to +their respective traits. + +```YAML +apiVersion: v1 +kind: ConfigMap +metadata: + name: edpm-provider-values + annotations: + config.kubernetes.io/local-config: "true" +data: + nova: + compute: + provider: | + meta: + schema_version: "1.0" + providers: + - identification: + name: edpm-compute-0.ctlplane.example.com_pci_0000_04_00_0 + traits: + additional: + - CUSTOM_NVIDIA_229 + - identification: + name: edpm-compute-0.ctlplane.example.com_pci_0000_82_00_0 + traits: + additional: + - CUSTOM_NVIDIA_228 + - identification: + name: edpm-compute-1.ctlplane.example.com_pci_0000_04_00_0 + traits: + additional: + - CUSTOM_NVIDIA_229 + - identification: + name: edpm-compute-1.ctlplane.example.com_pci_0000_82_00_0 + traits: + additional: + - CUSTOM_NVIDIA_228 + +``` + +## Stages +All stages must be executed in the order listed below. Everything is required +unless otherwise indicated. + +1. [Install the OpenStack K8S operators and their dependencies](../../../common/) +2. [Configuring networking and deploy the OpenStack control plane](control-plane.md) +3. [Configure and deploy dataplane, finalize GPU installation, and create provider.yaml](dataplane.md) \ No newline at end of file diff --git a/examples/dt/nova/nova05epsilon/control-plane.md b/examples/dt/nova/nova05epsilon/control-plane.md new file mode 100644 index 000000000..c7a215ae3 --- /dev/null +++ b/examples/dt/nova/nova05epsilon/control-plane.md @@ -0,0 +1,80 @@ +# Configuring networking and deploy the OpenStack control plane + +## Assumptions + +- A storage class called `local-storage` should already exist. + +## Initialize + +Switch to the "openstack" namespace +``` +oc project openstack +``` +Change to the nova/nova05epsilon/networking directory +``` +cd architecture/examples/dt/nova/nova05epsilon/networking/ +``` +Edit the [nncp/values.yaml](networking/nncp/values.yaml) +``` +vi nncp/values.yaml +``` + +## Apply node network configuration + +Generate the node network configuration +``` +kustomize build nncp > nncp.yaml +``` +Apply the NNCP CRs +``` +oc apply -f nncp.yaml +``` +Wait for NNCPs to be available +``` +oc wait nncp -l osp/nncm-config-type=standard --for jsonpath='{.status.conditions[0].reason}'=SuccessfullyConfigured --timeout=300s +``` + +## Create NAD's, IPAddressPool, and NetConfig + +Generate Network attachment definitions, IPAddressPools and remaining +networking CRs. Note that the associated values for these resources are also +defined in [nncp/values.yaml](networking/nncp/values.yaml) +``` +kustomize build > network.yaml +``` +Apply the CRs +``` +oc apply -f network.yaml +``` + +Wait for networking resources to be available +``` +oc -n metallb-system wait pod -l app=metallb -l component=speaker --for condition=Ready --timeout=5m +``` + +## Create control-plane configuration + +Change to the architecture/examples/dt/nova/nova05epsilon directory +``` +cd architecture/examples/dt/nova/nova05epsilon +``` +Edit the [service-values.yaml](service-values.yaml) files to suit your +environment. +``` +vi service-values.yaml +``` + +## Apply control-plane configuration + +Generate the control-plane and networking CRs. +``` +kustomize build > control-plane.yaml +``` +Apply the CRs +``` +oc apply -f control-plane.yaml +``` +Wait for control plane to be available +``` +oc wait osctlplane controlplane --for condition=Ready --timeout=600s +``` \ No newline at end of file diff --git a/examples/dt/nova/nova05epsilon/dataplane.md b/examples/dt/nova/nova05epsilon/dataplane.md new file mode 100644 index 000000000..4121748b3 --- /dev/null +++ b/examples/dt/nova/nova05epsilon/dataplane.md @@ -0,0 +1,120 @@ +# Configuring and deploying the dataplane + +## Assumptions + +- The [control plane](control-plane.md) has been created and successfully deployed + +## Initialize + +Switch to the "openstack" namespace +``` +oc project openstack +``` +Change to the nova/nova05epsilon/edpm directory +``` +cd architecture/examples/dt/nova/nova05epsilon/edpm/ +``` +Edit the [nodeset/values.yaml](edpm/nodeset/values.yaml) and +[deployment/values.yaml](edpm/deployment/values.yaml) files to suit +your environment. +``` +vi nodeset/values.yaml +vi deployment/values.yaml +``` +Generate the dataplane nodeset CR. +``` +kustomize build nodeset > dataplane-nodeset.yaml +``` +Generate the dataplane deployment CR. +``` +kustomize build deployment > dataplane-deployment.yaml +``` + +## Apply Initial CRs +Create the nodeset CR +``` +oc apply -f dataplane-nodeset.yaml +``` +Wait for dataplane nodeset setup to finish +``` +oc wait osdpns openstack-edpm --for condition=SetupReady --timeout=600s +``` +Start the deployment +``` +oc apply -f dataplane-deployment.yaml +``` +Wait for dataplane deployment to finish +``` +oc -n openstack wait osdpd edpm-deployment --for condition=Ready --timeout=90m +``` + +## Generate yamls necessary to finialize Nvidia GPU installation +After the Nvidia drivers have been installed on the EDPM nodes, the computes need +to be rebooted in order to finalize the GPU installation. Below explains the +necessary steps to apply a reboot on the necessary nodesets. + +Change to the nova/nova05epsilon/edpm-post-driver directory +``` +cd architecture/examples/dt/nova/nova05epsilon/edpm-post-driver/ +``` +Edit the [deployment/values.yaml](edpm-post-driver/deployment/values.yaml) files to suit +your environment. +``` +vi deployment/values.yaml +``` +Generate the dataplane deployment CR. +``` +kustomize build deployment > dataplane-post-driver-deployment.yaml +``` + +## Create CRs to finalize GPU installation +Start the deployment +``` +oc apply -f dataplane-post-driver-deployment.yaml +``` +Wait for dataplane deployment to finish +``` +oc wait osdpd edpm-deployment-post-driver --for condition=Ready --timeout=20m +``` + +## Create Provider.yaml +Change to the nova/nova05epsilon/edpm-deploy-provider directory +``` +cd architecture/examples/dt/nova/nova05epsilon/edpm-deploy-provider/ +``` +Edit the [dataplaneservice/values.yaml](edpm-deploy-provider/dataplaneservice/values.yaml) files to suit +your environment. +``` +vi dataplaneservice/values.yaml +``` +Edit the [deployment/values.yaml](edpm-deploy-provider/deployment/values.yaml) files to suit +your environment. +``` +vi deployment/values.yaml +``` +Generate the dataplane service CR that will provide the provider.yaml. +``` +kustomize build dataplaneservice > dataplane-provider-service.yaml +``` +Generate the deployment that will leverage the dataplane service CR. +``` +kustomize build deployment > dataplane-provider-deployment.yaml +``` + +## Create CRs for the provider.yaml +Create the OSPDS for the provider.yaml +``` +oc apply -f dataplane-provider-service.yaml +``` +Wait for dataplane service to finish +``` +oc -n default wait ns openstack --for jsonpath='{.status.phase}'=Active --timeout=5m +``` +Start the deployment +``` +oc apply -f dataplane-provider-deployment.yaml +``` +Wait for dataplane deployment to finish +``` +oc wait osdpd edpm-deployment-provider --for condition=Ready --timeout=20m +``` \ No newline at end of file diff --git a/examples/dt/nova/nova05epsilon/edpm-post-driver/deployment/kustomization.yaml b/examples/dt/nova/nova05epsilon/edpm-post-driver/deployment/kustomization.yaml new file mode 100644 index 000000000..4618aa6ed --- /dev/null +++ b/examples/dt/nova/nova05epsilon/edpm-post-driver/deployment/kustomization.yaml @@ -0,0 +1,47 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +components: + - ../../../../../../dt/nova/nova05epsilon/edpm-post-driver/deployment + # - https://github.com/openstack-k8s-operators/architecture/dt/nova/nova05epsilon/edpm-post-driver/deployment?ref=main + ## It's possible to replace ../../../../../../dt/nova/nova05epsilon/edpm-post-driver/deployment/ with a git checkout URL as per: + ## https://github.com/kubernetes-sigs/kustomize/blob/master/examples/remoteBuild.md + +resources: + - values.yaml + +replacements: + - source: + kind: ConfigMap + name: edpm-nodeset-post-driver-values + fieldPath: data.servicesOverride + targets: + - select: + kind: OpenStackDataPlaneDeployment + fieldPaths: + - spec.servicesOverride + options: + create: true + - source: + kind: ConfigMap + name: edpm-nodeset-post-driver-values + fieldPath: data.ansibleExtraVars + targets: + - select: + kind: OpenStackDataPlaneDeployment + fieldPaths: + - spec.ansibleExtraVars + options: + create: true + - source: + kind: ConfigMap + name: edpm-nodeset-post-driver-values + fieldPath: data.deployment.name + targets: + - select: + kind: OpenStackDataPlaneDeployment + fieldPaths: + - metadata.name + options: + create: true diff --git a/examples/dt/nova/nova05epsilon/edpm-post-driver/deployment/values.yaml b/examples/dt/nova/nova05epsilon/edpm-post-driver/deployment/values.yaml new file mode 100644 index 000000000..2121f2dd6 --- /dev/null +++ b/examples/dt/nova/nova05epsilon/edpm-post-driver/deployment/values.yaml @@ -0,0 +1,16 @@ +--- +apiVersion: v1 +kind: ConfigMap + +metadata: + name: edpm-nodeset-post-driver-values + annotations: + config.kubernetes.io/local-config: "true" + +data: + deployment: + name: edpm-deployment-post-driver + servicesOverride: + - reboot-os + ansibleExtraVars: + edpm_reboot_strategy: force \ No newline at end of file diff --git a/examples/dt/nova/nova05epsilon/edpm/.gitignore b/examples/dt/nova/nova05epsilon/edpm/.gitignore new file mode 100644 index 000000000..835442d0a --- /dev/null +++ b/examples/dt/nova/nova05epsilon/edpm/.gitignore @@ -0,0 +1,2 @@ +dataplane-deployment.yaml +dataplane-nodeset.yaml \ No newline at end of file diff --git a/examples/dt/nova/nova05epsilon/edpm/deployment/.gitignore b/examples/dt/nova/nova05epsilon/edpm/deployment/.gitignore new file mode 100644 index 000000000..56387c5df --- /dev/null +++ b/examples/dt/nova/nova05epsilon/edpm/deployment/.gitignore @@ -0,0 +1 @@ +dataplane-deployment.yaml \ No newline at end of file diff --git a/examples/dt/nova/nova05epsilon/edpm/deployment/kustomization.yaml b/examples/dt/nova/nova05epsilon/edpm/deployment/kustomization.yaml new file mode 100644 index 000000000..0129c9905 --- /dev/null +++ b/examples/dt/nova/nova05epsilon/edpm/deployment/kustomization.yaml @@ -0,0 +1,13 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +components: + - ../../../../../../dt/nova/nova05epsilon/edpm/deployment + # - https://github.com/openstack-k8s-operators/architecture/dt/nova/nova05epsilon/edpm/deployment?ref=main + ## It's possible to replace ../../../../../../dt/nova/nova05epsilon/edpm/deployment/ with a git checkout URL as per: + ## https://github.com/kubernetes-sigs/kustomize/blob/master/examples/remoteBuild.md + +resources: + - values.yaml + diff --git a/examples/dt/nova/nova05epsilon/edpm/deployment/values.yaml b/examples/dt/nova/nova05epsilon/edpm/deployment/values.yaml new file mode 100644 index 000000000..7f371b2cc --- /dev/null +++ b/examples/dt/nova/nova05epsilon/edpm/deployment/values.yaml @@ -0,0 +1,10 @@ +# yamllint disable rule:line-length +# local-config: referenced, but not emitted by kustomize +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: edpm-deployment-values + annotations: + config.kubernetes.io/local-config: "true" +data: {} diff --git a/examples/dt/nova/nova05epsilon/edpm/nodeset/.gitignore b/examples/dt/nova/nova05epsilon/edpm/nodeset/.gitignore new file mode 100644 index 000000000..721008e8b --- /dev/null +++ b/examples/dt/nova/nova05epsilon/edpm/nodeset/.gitignore @@ -0,0 +1 @@ +dataplane-nodeset.yaml \ No newline at end of file diff --git a/examples/dt/nova/nova05epsilon/edpm/nodeset/kustomization.yaml b/examples/dt/nova/nova05epsilon/edpm/nodeset/kustomization.yaml new file mode 100644 index 000000000..06bec48b6 --- /dev/null +++ b/examples/dt/nova/nova05epsilon/edpm/nodeset/kustomization.yaml @@ -0,0 +1,12 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +components: + - ../../../../../../dt/nova/nova05epsilon/edpm/nodeset/ + # - https://github.com/openstack-k8s-operators/architecture/dt/nova/nova05epsilon/edpm/nodeset?ref=main + ## It's possible to replace ../../../../../../dt/nova/nova05epsilon/edpm/nodeset/ with a git checkout URL as per: + ## https://github.com/kubernetes-sigs/kustomize/blob/master/examples/remoteBuild.md + +resources: + - values.yaml diff --git a/examples/dt/nova/nova05epsilon/edpm/nodeset/values.yaml b/examples/dt/nova/nova05epsilon/edpm/nodeset/values.yaml new file mode 100644 index 000000000..754d064d9 --- /dev/null +++ b/examples/dt/nova/nova05epsilon/edpm/nodeset/values.yaml @@ -0,0 +1,161 @@ +# yamllint disable rule:line-length +# local-config: referenced, but not emitted by kustomize +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: edpm-nodeset-values + annotations: + config.kubernetes.io/local-config: "true" +data: + root_password: cmVkaGF0Cg== + preProvisioned: false + baremetalSetTemplate: + ctlplaneInterface: eno2 # CHANGEME + cloudUserName: cloud-admin + provisioningInterface: enp1s0 # CHANGEME + bmhLabelSelector: + app: openstack # CHANGEME + passwordSecret: + name: baremetalset-password-secret + namespace: openstack + ssh_keys: + # Authorized keys that will have access to the dataplane computes via SSH + authorized: CHANGEME + # The private key that will have access to the dataplane computes via SSH + private: CHANGEME2 + # The public key that will have access to the dataplane computes via SSH + public: CHANGEME3 + nodeset: + ansible: + ansibleUser: cloud-admin + ansiblePort: 22 + ansibleVars: + # CHANGEME -- see https://access.redhat.com/solutions/253273 + # edpm_bootstrap_command: | + # subscription-manager register --username --password + # podman login -u -p registry.redhat.io + timesync_ntp_servers: + - hostname: pool.ntp.org + # CPU pinning settings + edpm_kernel_args: "default_hugepagesz=1GB hugepagesz=1G hugepages=16 intel_iommu=on iommu=pt" + edpm_tuned_profile: "cpu-partitioning-powersave" + edpm_tuned_isolated_cores: "4-23,28-47" + # edpm_network_config + # These vars are edpm_network_config role vars + edpm_network_config_hide_sensitive_logs: false + edpm_network_config_os_net_config_mappings: + edpm-compute-0: + nic2: 6c:fe:54:3f:8a:02 # CHANGEME + nic3: 6c:fe:54:3f:8a:03 # CHANGEME + edpm-compute-1: + nic2: 6b:fe:54:3f:8a:02 # CHANGEME + nic3: 6b:fe:54:3f:8a:03 # CHANGEME + 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 %} + - type: sriov_pf + name: nic3 + numvfs: 10 + use_dhcp: false + promisc: true + + # These vars are for the network config templates themselves and are + # considered EDPM network defaults. + neutron_physical_bridge_name: br-ex + neutron_public_interface_name: eth0 + # edpm_nodes_validation + edpm_nodes_validation_validate_controllers_icmp: false + edpm_nodes_validation_validate_gateway_icmp: false + dns_search_domains: [] + gather_facts: false + # edpm firewall, change the allowed CIDR if needed + edpm_sshd_configure_firewall: true + edpm_sshd_allowed_ranges: + - 192.168.122.0/24 + # SRIOV settings + edpm_neutron_sriov_agent_SRIOV_NIC_physical_device_mappings: 'sriov-phy4:eno4' + networks: + - defaultRoute: true + name: ctlplane + subnetName: subnet1 + - name: internalapi + subnetName: subnet1 + - name: storage + subnetName: subnet1 + - name: tenant + subnetName: subnet1 + nodes: + edpm-compute-0: + hostName: edpm-compute-0 + edpm-compute-1: + hostName: edpm-compute-1 + services: + - bootstrap + - download-cache + - configure-network + - validate-network + - install-os + - configure-os + - ssh-known-hosts + - run-os + - reboot-os + - install-certs + - libvirt + - ovn + - neutron-ovn + - nova-custom-gpu + - neutron-metadata + - vfio-pci-bind + - telemetry + nova: + compute: + conf: | + # CHANGEME + [DEFAULT] + reserved_host_memory_mb = 4096 + reserved_huge_pages = node:0,size:4,count:524160 + reserved_huge_pages = node:1,size:4,count:524160 + [compute] + cpu_shared_set = 0-3,24-27 + cpu_dedicated_set = 8-23,32-47 + migration: + ssh_keys: + private: CHANGEME4 + public: CHANGEME5 + pci: + conf: | + # CHANGEME + [pci] + device_spec = {"vendor_id":"10de", "product_id":"20f1", "address": "CHANGEME"} + alias = { "vendor_id":"10de", "product_id":"20f1", "device_type":"type-PCI", "name":"nvidia_a2" } + report_in_placement = True diff --git a/examples/dt/nova/nova05epsilon/kustomization.yaml b/examples/dt/nova/nova05epsilon/kustomization.yaml new file mode 100644 index 000000000..84bf618eb --- /dev/null +++ b/examples/dt/nova/nova05epsilon/kustomization.yaml @@ -0,0 +1,13 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +components: + - ../../../../dt/nova/nova05epsilon/ + # - https://github.com/openstack-k8s-operators/architecture/dt/nova/nova05epsilon?ref=main + ## It's possible to replace ../../../../dt/nova/nova05epsilon with a git checkout URL as per: + ## https://github.com/kubernetes-sigs/kustomize/blob/master/examples/remoteBuild.md + +resources: + - networking/nncp/values.yaml + - service-values.yaml diff --git a/examples/dt/nova/nova05epsilon/networking/kustomization.yaml b/examples/dt/nova/nova05epsilon/networking/kustomization.yaml new file mode 100644 index 000000000..7cee3bdd4 --- /dev/null +++ b/examples/dt/nova/nova05epsilon/networking/kustomization.yaml @@ -0,0 +1,9 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +components: + - ../../../../../dt/nova/nova05epsilon/networking/ + +resources: + - nncp/values.yaml diff --git a/examples/dt/nova/nova05epsilon/networking/nncp/kustomization.yaml b/examples/dt/nova/nova05epsilon/networking/nncp/kustomization.yaml new file mode 100644 index 000000000..5bded973f --- /dev/null +++ b/examples/dt/nova/nova05epsilon/networking/nncp/kustomization.yaml @@ -0,0 +1,24 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +transformers: + # Set namespace to OpenStack on all namespaced objects without a namespace + - |- + apiVersion: builtin + kind: NamespaceTransformer + metadata: + name: _ignored_ + namespace: openstack + setRoleBindingSubjects: none + unsetOnly: true + fieldSpecs: + - path: metadata/name + kind: Namespace + create: true + +components: + - ../../../../../../lib/nncp + +resources: + - values.yaml diff --git a/examples/dt/nova/nova05epsilon/networking/nncp/values.yaml b/examples/dt/nova/nova05epsilon/networking/nncp/values.yaml new file mode 100644 index 000000000..94ff59cf1 --- /dev/null +++ b/examples/dt/nova/nova05epsilon/networking/nncp/values.yaml @@ -0,0 +1,199 @@ +# local-config: referenced, but not emitted by kustomize +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: network-values + annotations: + config.kubernetes.io/local-config: "true" +data: + # nodes + node_0: + name: ostest-master-0 + internalapi_ip: 172.17.0.5 + tenant_ip: 172.19.0.5 + ctlplane_ip: 192.168.122.10 + storage_ip: 172.18.0.5 + node_1: + name: ostest-master-1 + internalapi_ip: 172.17.0.6 + tenant_ip: 172.19.0.6 + ctlplane_ip: 192.168.122.11 + storage_ip: 172.18.0.6 + node_2: + name: ostest-master-2 + internalapi_ip: 172.17.0.7 + tenant_ip: 172.19.0.7 + ctlplane_ip: 192.168.122.12 + storage_ip: 172.18.0.7 + + # networks + ctlplane: + dnsDomain: ctlplane.example.com + subnets: + - allocationRanges: + - end: 192.168.122.120 + start: 192.168.122.100 + - end: 192.168.122.200 + start: 192.168.122.150 + cidr: 192.168.122.0/24 + gateway: 192.168.122.1 + name: subnet1 + prefix-length: 24 + iface: enp7s0 + mtu: 1500 + lb_addresses: + - 192.168.122.80-192.168.122.90 + endpoint_annotations: + metallb.universe.tf/address-pool: ctlplane + metallb.universe.tf/allow-shared-ip: ctlplane + metallb.universe.tf/loadBalancerIPs: 192.168.122.80 + net-attach-def: | + { + "cniVersion": "0.3.1", + "name": "ctlplane", + "type": "macvlan", + "master": "ospbr", + "ipam": { + "type": "whereabouts", + "range": "192.168.122.0/24", + "range_start": "192.168.122.30", + "range_end": "192.168.122.70" + } + } + internalapi: + dnsDomain: internalapi.example.com + subnets: + - allocationRanges: + - end: 172.17.0.250 + start: 172.17.0.100 + cidr: 172.17.0.0/24 + name: subnet1 + vlan: 20 + mtu: 1500 + prefix-length: 24 + iface: internalapi + vlan: 20 + base_iface: enp7s0 + lb_addresses: + - 172.17.0.80-172.17.0.90 + endpoint_annotations: + metallb.universe.tf/address-pool: internalapi + metallb.universe.tf/allow-shared-ip: internalapi + metallb.universe.tf/loadBalancerIPs: 172.17.0.80 + net-attach-def: | + { + "cniVersion": "0.3.1", + "name": "internalapi", + "type": "macvlan", + "master": "internalapi", + "ipam": { + "type": "whereabouts", + "range": "172.17.0.0/24", + "range_start": "172.17.0.30", + "range_end": "172.17.0.70" + } + } + storage: + dnsDomain: storage.example.com + subnets: + - allocationRanges: + - end: 172.18.0.250 + start: 172.18.0.100 + cidr: 172.18.0.0/24 + name: subnet1 + vlan: 21 + mtu: 1500 + prefix-length: 24 + iface: storage + vlan: 21 + base_iface: enp7s0 + lb_addresses: + - 172.18.0.80-172.18.0.90 + net-attach-def: | + { + "cniVersion": "0.3.1", + "name": "storage", + "type": "macvlan", + "master": "storage", + "ipam": { + "type": "whereabouts", + "range": "172.18.0.0/24", + "range_start": "172.18.0.30", + "range_end": "172.18.0.70" + } + } + tenant: + dnsDomain: tenant.example.com + subnets: + - allocationRanges: + - end: 172.19.0.250 + start: 172.19.0.100 + cidr: 172.19.0.0/24 + name: subnet1 + vlan: 22 + mtu: 1500 + prefix-length: 24 + iface: tenant + vlan: 22 + base_iface: enp7s0 + lb_addresses: + - 172.19.0.80-172.19.0.90 + net-attach-def: | + { + "cniVersion": "0.3.1", + "name": "tenant", + "type": "macvlan", + "master": "tenant", + "ipam": { + "type": "whereabouts", + "range": "172.19.0.0/24", + "range_start": "172.19.0.30", + "range_end": "172.19.0.70" + } + } + external: + dnsDomain: external.example.com + subnets: + - allocationRanges: + - end: 10.0.0.250 + start: 10.0.0.100 + cidr: 10.0.0.0/24 + gateway: 10.0.0.1 + name: subnet1 + mtu: 1500 + datacentre: + net-attach-def: | + { + "cniVersion": "0.3.1", + "name": "datacentre", + "type": "bridge", + "bridge": "ospbr", + "ipam": {} + } + + dns-resolver: + config: + server: + - 192.168.122.1 + search: [] + options: + - key: server + values: + - 192.168.122.1 + + routes: + config: [] + + rabbitmq: + endpoint_annotations: + metallb.universe.tf/address-pool: internalapi + metallb.universe.tf/loadBalancerIPs: 172.17.0.85 + rabbitmq-cell1: + endpoint_annotations: + metallb.universe.tf/address-pool: internalapi + metallb.universe.tf/loadBalancerIPs: 172.17.0.86 + + lbServiceType: LoadBalancer + storageClass: local-storage + bridgeName: ospbr diff --git a/examples/dt/nova/nova05epsilon/service-values.yaml b/examples/dt/nova/nova05epsilon/service-values.yaml new file mode 100644 index 000000000..d03168f97 --- /dev/null +++ b/examples/dt/nova/nova05epsilon/service-values.yaml @@ -0,0 +1,58 @@ +# local-config: referenced, but not emitted by kustomize +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: service-values + annotations: + config.kubernetes.io/local-config: "true" +data: + preserveJobs: false + neutron: + customServiceConfig: | + [ml2] + mechanism_drivers = ovn,sriovnicswitch + [ml2_type_vlan] + network_vlan_ranges = sriov-phy4 + ovn: + ovnController: + nicMappings: + datacentre: ospbr + glance: + customServiceConfig: | + [DEFAULT] + enabled_backends = default_backend:swift + [glance_store] + default_backend = default_backend + [default_backend] + swift_store_create_container_on_put = True + swift_store_auth_version = 3 + swift_store_auth_address = {{ .KeystoneInternalURL }} + swift_store_endpoint_type = internalURL + swift_store_user = service:glance + swift_store_key = {{ .ServicePassword }} + default: + replicas: 1 + swift: + enabled: true + nova: + apiServiceTemplate: + customServiceConfig: | + [pci] + alias = { "vendor_id":"10de", "product_id":"20f1", "device_type":"type-PCI", "name":"nvidia_a2" } + [filter_scheduler] + pci_in_placement = True + cell0: + conductorServiceTemplate: + customServiceConfig: | + [filter_scheduler] + pci_in_placement = True + cell1: + conductorServiceTemplate: + customServiceConfig: | + [filter_scheduler] + pci_in_placement = True + schedulerServiceTemplate: + customServiceConfig: | + [filter_scheduler] + pci_in_placement = True diff --git a/zuul.d/projects.yaml b/zuul.d/projects.yaml index e545029fe..ca3d1b5c9 100644 --- a/zuul.d/projects.yaml +++ b/zuul.d/projects.yaml @@ -16,6 +16,7 @@ - rhoso-architecture-validate-nova-three-cells - rhoso-architecture-validate-nova01alpha - rhoso-architecture-validate-nova02beta + - rhoso-architecture-validate-nova05epsilon - rhoso-architecture-validate-nvidia-mdev - rhoso-architecture-validate-osasinfra - rhoso-architecture-validate-osasinfra-ipv6 diff --git a/zuul.d/validations.yaml b/zuul.d/validations.yaml index ce48a082d..d04e53483 100644 --- a/zuul.d/validations.yaml +++ b/zuul.d/validations.yaml @@ -207,6 +207,21 @@ parent: rhoso-architecture-base-job vars: cifmw_architecture_scenario: nova02beta +- job: + files: + - examples/dt/nova/nova05epsilon + - examples/dt/nova/nova05epsilon/edpm-deploy-provider/dataplaneservice + - examples/dt/nova/nova05epsilon/edpm-deploy-provider/deployment + - examples/dt/nova/nova05epsilon/edpm-post-driver/deployment + - examples/dt/nova/nova05epsilon/edpm/deployment + - examples/dt/nova/nova05epsilon/edpm/nodeset + - examples/dt/nova/nova05epsilon/networking + - examples/dt/nova/nova05epsilon/networking/nncp + - lib + name: rhoso-architecture-validate-nova05epsilon + parent: rhoso-architecture-base-job + vars: + cifmw_architecture_scenario: nova05epsilon - job: files: - examples/va/nvidia-mdev/control-plane