Support for multi-node OKD O-Cloud clusters 58/14558/2
authorChris Wheeler <chwheele@redhat.com>
Thu, 12 Jun 2025 23:47:37 +0000 (23:47 +0000)
committerChris Wheeler <chwheele@redhat.com>
Mon, 16 Jun 2025 21:49:42 +0000 (21:49 +0000)
- Modified automation to support deployment of multi-node clusters
- Defined multiple inventory examples to clarify the requirements for
  various deployment infrastructures and topologies
- Removed extraneous variables from playbooks
- Updated README.md

Change-Id: Ieba79b131be86fd0215fa9089fdf1d3e137edfe6
Signed-Off-By: Chris Wheeler <chwheele@redhat.com>
Issue-ID: INF-489

34 files changed:
okd/README.md
okd/inventory [new symlink]
okd/inventory-examples/ocloud-baremetal-okd-aio/group_vars/all/vars.yml [new file with mode: 0644]
okd/inventory-examples/ocloud-baremetal-okd-aio/group_vars/all/vault.yml [moved from okd/inventory/group_vars/all/vault.yml with 100% similarity]
okd/inventory-examples/ocloud-baremetal-okd-aio/host_vars/http_store/vars.yml [moved from okd/inventory/host_vars/http_store/vars.yml with 100% similarity]
okd/inventory-examples/ocloud-baremetal-okd-aio/host_vars/master-0-baremetal/vars.yml [moved from okd/inventory/host_vars/master-0-baremetal/vars.yml with 88% similarity]
okd/inventory-examples/ocloud-baremetal-okd-aio/host_vars/master-0-baremetal/vault.yml [moved from okd/inventory/host_vars/master-0-baremetal/vault.yml with 100% similarity]
okd/inventory-examples/ocloud-baremetal-okd-aio/hosts.yml [new file with mode: 0644]
okd/inventory-examples/ocloud-baremetal-okd-multinode/group_vars/all/vars.yml [new file with mode: 0644]
okd/inventory-examples/ocloud-baremetal-okd-multinode/group_vars/all/vault.yml [new file with mode: 0644]
okd/inventory-examples/ocloud-baremetal-okd-multinode/host_vars/http_store/vars.yml [new file with mode: 0644]
okd/inventory-examples/ocloud-baremetal-okd-multinode/host_vars/master-0-baremetal/vars.yml [new file with mode: 0644]
okd/inventory-examples/ocloud-baremetal-okd-multinode/host_vars/master-0-baremetal/vault.yml [new file with mode: 0644]
okd/inventory-examples/ocloud-baremetal-okd-multinode/host_vars/master-1-baremetal/vars.yml [new file with mode: 0644]
okd/inventory-examples/ocloud-baremetal-okd-multinode/host_vars/master-1-baremetal/vault.yml [new file with mode: 0644]
okd/inventory-examples/ocloud-baremetal-okd-multinode/host_vars/master-2-baremetal/vars.yml [new file with mode: 0644]
okd/inventory-examples/ocloud-baremetal-okd-multinode/host_vars/master-2-baremetal/vault.yml [new file with mode: 0644]
okd/inventory-examples/ocloud-baremetal-okd-multinode/hosts.yml [new file with mode: 0644]
okd/inventory-examples/ocloud-vm-okd-aio/group_vars/all/vars.yml [moved from okd/inventory/group_vars/all/vars.yml with 58% similarity]
okd/inventory-examples/ocloud-vm-okd-aio/group_vars/all/vault.yml [new file with mode: 0644]
okd/inventory-examples/ocloud-vm-okd-aio/host_vars/master-0-vm/vars.yml [new file with mode: 0644]
okd/inventory-examples/ocloud-vm-okd-aio/hosts.yml [moved from okd/inventory/hosts.yml with 81% similarity]
okd/inventory-examples/ocloud-vm-okd-multinode/group_vars/all/vars.yml [new file with mode: 0644]
okd/inventory-examples/ocloud-vm-okd-multinode/group_vars/all/vault.yml [new file with mode: 0644]
okd/inventory-examples/ocloud-vm-okd-multinode/host_vars/master-0-vm/vars.yml [new file with mode: 0644]
okd/inventory-examples/ocloud-vm-okd-multinode/host_vars/master-1-vm/vars.yml [new file with mode: 0644]
okd/inventory-examples/ocloud-vm-okd-multinode/host_vars/master-2-vm/vars.yml [new file with mode: 0644]
okd/inventory-examples/ocloud-vm-okd-multinode/hosts.yml [new file with mode: 0644]
okd/inventory/host_vars/master-0-vm/vars.yml [deleted file]
okd/playbooks/deploy_dns.yml
okd/playbooks/deploy_http_store.yml
okd/playbooks/deploy_ntp.yml
okd/roles/ocloud/tasks/main.yml
okd/roles/ocloud_platform_okd/handlers/main.yml

index 7087bc9..0916566 100644 (file)
@@ -24,6 +24,7 @@ Several packages are required by Ansible modules or deployment scripts that are
 
 - ansible
 - make
+- nmstate
 - pip
 - wget
 - python development headers/libraries
@@ -101,17 +102,18 @@ is being used (see okd/inventory/host_vars/http_store/ for example):
 
 ### General
 
-Update inventory/hosts.yml to specify the deployment target host(s) under the 'ocloud' group. The sample
-inventory can be used without modification to deploy to a VM host. For bare metal deployment, populate
-the 'ocloud' group with the hostname(s) of the baremetal server(s) and create a directory for each
-host under inventory/host_vars/ containing required variables as defined under [Infrastructure / Bare Metal](#infrastructure--bare-metal)
-below.
+Customize one of the inventories under the 'inventory-examples' directory to match the desired infrastructure
+and deployment topology for your cluster. The 'ocloud' host group determines the hosts that will comprise
+the cluster. The 'ocloud-vm-okd-aio' sample inventory can be used without modification to deploy to a single-node,
+VM-based cluster. For bare metal deployment, populate the 'ocloud' group with the hostname(s) of the baremetal
+server(s) and create a directory for each host under host_vars/ containing required variables as defined under
+[Infrastructure / Bare Metal](#infrastructure--bare-metal) below.
 
 #### Optional
 The following variables can be set to override deployment defaults:
 - ocloud_infra [default="vm"]: infrastructure target (supported values: "vm", "baremetal")
 - ocloud_platform [default="okd"]: platform target
-- ocloud_topology [default="aio"]: O-Cloud cluster topology
+- ocloud_topology [default="aio"]: O-Cloud cluster topology (supported values: "aio", "multinode")
 - ocloud_cluster_name [default="ocloud-{{ ocloud_infra }}-{{ ocloud_platform }}-{{ ocloud_topology }}"]: O-Cloud cluster name
 - ocloud_domain_name [default="example.com"]: O-Cloud domain name
 - ocloud_net_cidr [default="192.168.123.0/24"]: O-Cloud machine network CIDR
@@ -160,8 +162,10 @@ The following Ansible variables must be defined in group_vars/all.yml:
 #### Optional
 Optionally, the following variables can be set to override default settings:
 
-- ocloud_platform_okd_release [default=4.14.0-0.okd-2024-01-26-175629]: OKD release, as defined in [OKD releases](https://github.com/okd-project/okd/releases)
+- ocloud_platform_okd_release [default=4.19.0-okd-scos.0]: OKD release, as defined in [OKD releases](https://github.com/okd-project/okd/releases)
 - ocloud_platform_okd_pull_secret [default=None]: pull secret for use with non-public image registries
+- ocloud_platform_okd_api_vips [default=None]: list of virtual IPs to use for OKD API access (required if deploying a multi-node cluster)
+- ocloud_platform_okd_ingress_vips [default=None]: list of virtual IPs to use for ingress (required if deploying a multi-node cluster)
 
 # Installation
 
@@ -414,12 +418,40 @@ $ curl -H "Authorization: Bearer $TOKEN" -k https://o2ims.apps.ocloud-baremetal-
   "extensions": {
   }
 ```
+
+## ORAN O2 IMS Compliance
+
+A playbook is provided to automate execution of O2 IMS compliance tests from the [it/test](https://gerrit.o-ran-sc.org/r/q/project:it/test) repo. The following extra variables must be provided:
+
+- ocloud_kubeconfig: path of the kubeconfig for the cluster hosting the O2 API server
+- ocloud_compliance_resource_type: name of a resource type associated with the target O-Cloud
+- ocloud_compliance_resource_desc_substring: substring of a resource description associated with the target O-Cloud
+
+For example:
+
+```
+ansible-playbook -i inventory playbooks/ocloud_compliance.yml -e ocloud_kubeconfig=$KUBECONFIG -e ocloud_compliance_resource_type=pserver -e ocloud_compliance_resource_desc_substring=pserver
+```
+
+## Sample Workload Deployment
+
+A playbook is provided to deploy a sample workload to the O-Cloud. The following extra variables must be provided:
+
+- ocloud_workloads: comma-delimited list of workloads to deploy
+- ocloud_dms_host: hostname of the O2 API server providing the DMS interface
+- ocloud_dms_deployment_mgr_id: deployment manager ID where the sample workload(s) will be deployed
+- ocloud_kubeconfig: path of the kubeconfig for the cluster hosting the O2 API server
+
+For example:
+```
+ansible-playbook -i inventory playbooks/ocloud_workload.yml -e ocloud_dms_host=o2ims.apps.ocloud-vm-okd-aio.example.com -e ocloud_dms_deployment_mgr_id=local-cluster -e ocloud_workloads=oaicucp -e ocloud_kubeconfig=$KUBECONFIG
+```
+
 # Troubleshooting
 
 ## OKD
 
-Refer to [Troubleshooting installation issues](https://docs.okd.io/4.14/installing/installing-troubleshooting.html) for information
-on diagnosing OKD deployment failures.
+Refer to [Troubleshooting installation issues](https://docs.okd.io/latest/installing/validation_and_troubleshooting/installing-troubleshooting.html) for information on diagnosing OKD deployment failures.
 
 # Cleanup
 
diff --git a/okd/inventory b/okd/inventory
new file mode 120000 (symlink)
index 0000000..ce8f6cc
--- /dev/null
@@ -0,0 +1 @@
+inventory-examples/ocloud-vm-okd-aio
\ No newline at end of file
diff --git a/okd/inventory-examples/ocloud-baremetal-okd-aio/group_vars/all/vars.yml b/okd/inventory-examples/ocloud-baremetal-okd-aio/group_vars/all/vars.yml
new file mode 100644 (file)
index 0000000..9a55fad
--- /dev/null
@@ -0,0 +1,12 @@
+---
+ocloud_infra: baremetal
+ocloud_platform: okd
+ocloud_topology: aio
+ocloud_platform_okd_ssh_pubkey: ~
+ocloud_cluster_name: "ocloud-baremetal-okd-aio"
+ocloud_domain_name: "example.com"
+ocloud_dns_servers: ["192.168.45.11"]
+ocloud_ntp_servers: ["192.168.45.11"]
+ocloud_net_cidr: "192.168.45.0/24"
+# Uncomment to override default release from ocloud_platform_okd role:
+#ocloud_platform_okd_release: ~
diff --git a/okd/inventory-examples/ocloud-baremetal-okd-aio/hosts.yml b/okd/inventory-examples/ocloud-baremetal-okd-aio/hosts.yml
new file mode 100644 (file)
index 0000000..ba50947
--- /dev/null
@@ -0,0 +1,12 @@
+deployer:
+  hosts:
+    localhost:
+      ansible_connection: local
+
+http_store:
+  hosts:
+    http_store:
+
+ocloud:
+  hosts:
+    master-0-baremetal:
diff --git a/okd/inventory-examples/ocloud-baremetal-okd-multinode/group_vars/all/vars.yml b/okd/inventory-examples/ocloud-baremetal-okd-multinode/group_vars/all/vars.yml
new file mode 100644 (file)
index 0000000..29da237
--- /dev/null
@@ -0,0 +1,14 @@
+---
+ocloud_infra: baremetal
+ocloud_platform: okd
+ocloud_topology: multinode
+ocloud_platform_okd_ssh_pubkey: ~
+ocloud_cluster_name: "ocloud-baremetal-okd-multinode"
+ocloud_domain_name: "example.com"
+ocloud_dns_servers: ["192.168.45.11"]
+ocloud_ntp_servers: ["192.168.45.11"]
+ocloud_net_cidr: "192.168.45.0/24"
+ocloud_platform_okd_api_vips: ["192.168.45.123"]
+ocloud_platform_okd_ingress_vips: ["192.168.45.124"]
+# Uncomment to override default release from ocloud_platform_okd role:
+#ocloud_platform_okd_release: ~
diff --git a/okd/inventory-examples/ocloud-baremetal-okd-multinode/group_vars/all/vault.yml b/okd/inventory-examples/ocloud-baremetal-okd-multinode/group_vars/all/vault.yml
new file mode 100644 (file)
index 0000000..51458e0
--- /dev/null
@@ -0,0 +1,4 @@
+---
+# Encrypt with `ansible-vault encrypt vault.yml` before adding secrets
+# Uncomment to override default pull secret from ocloud_platform_okd role:
+#ocloud_platform_okd_pull_secret: ~
diff --git a/okd/inventory-examples/ocloud-baremetal-okd-multinode/host_vars/http_store/vars.yml b/okd/inventory-examples/ocloud-baremetal-okd-multinode/host_vars/http_store/vars.yml
new file mode 100644 (file)
index 0000000..79eb11a
--- /dev/null
@@ -0,0 +1,4 @@
+ansible_host: 192.168.89.10
+http_store_dir: /opt/http_store/data
+http_port: 80
+ansible_connection: local
diff --git a/okd/inventory-examples/ocloud-baremetal-okd-multinode/host_vars/master-0-baremetal/vars.yml b/okd/inventory-examples/ocloud-baremetal-okd-multinode/host_vars/master-0-baremetal/vars.yml
new file mode 100644 (file)
index 0000000..19eccbc
--- /dev/null
@@ -0,0 +1,23 @@
+---
+bmc_address: "192.168.12.34"
+bmc_user: admin
+role: master
+installation_disk_path: "/dev/disk/by-path/pci-0000:c3:00.0-nvme-1"
+mac_addresses:
+  ens1f0: "12:34:56:78:9A:BC"
+network_config:
+  interfaces:
+    - name: ens1f0
+      type: ethernet
+      state: up
+      ipv4:
+        enabled: true
+        dhcp: false
+        address:
+        - ip: "192.168.45.67"
+          prefix-length: "24"
+  routes:
+    config:
+    - destination: 0.0.0.0/0
+      next-hop-address: "192.168.45.1"
+      next-hop-interface: "ens1f0"
diff --git a/okd/inventory-examples/ocloud-baremetal-okd-multinode/host_vars/master-0-baremetal/vault.yml b/okd/inventory-examples/ocloud-baremetal-okd-multinode/host_vars/master-0-baremetal/vault.yml
new file mode 100644 (file)
index 0000000..ac228b2
--- /dev/null
@@ -0,0 +1,3 @@
+---
+# Encrypt with `ansible-vault encrypt vault.yml` before adding secrets
+bmc_password: ~
diff --git a/okd/inventory-examples/ocloud-baremetal-okd-multinode/host_vars/master-1-baremetal/vars.yml b/okd/inventory-examples/ocloud-baremetal-okd-multinode/host_vars/master-1-baremetal/vars.yml
new file mode 100644 (file)
index 0000000..45da3e2
--- /dev/null
@@ -0,0 +1,23 @@
+---
+bmc_address: "192.168.12.35"
+bmc_user: admin
+role: master
+installation_disk_path: "/dev/disk/by-path/pci-0000:c3:00.0-nvme-1"
+mac_addresses:
+  ens1f0: "12:34:56:78:9A:CD"
+network_config:
+  interfaces:
+    - name: ens1f0
+      type: ethernet
+      state: up
+      ipv4:
+        enabled: true
+        dhcp: false
+        address:
+        - ip: "192.168.45.68"
+          prefix-length: "24"
+  routes:
+    config:
+    - destination: 0.0.0.0/0
+      next-hop-address: "192.168.45.1"
+      next-hop-interface: "ens1f0"
diff --git a/okd/inventory-examples/ocloud-baremetal-okd-multinode/host_vars/master-1-baremetal/vault.yml b/okd/inventory-examples/ocloud-baremetal-okd-multinode/host_vars/master-1-baremetal/vault.yml
new file mode 100644 (file)
index 0000000..ac228b2
--- /dev/null
@@ -0,0 +1,3 @@
+---
+# Encrypt with `ansible-vault encrypt vault.yml` before adding secrets
+bmc_password: ~
diff --git a/okd/inventory-examples/ocloud-baremetal-okd-multinode/host_vars/master-2-baremetal/vars.yml b/okd/inventory-examples/ocloud-baremetal-okd-multinode/host_vars/master-2-baremetal/vars.yml
new file mode 100644 (file)
index 0000000..3e0f695
--- /dev/null
@@ -0,0 +1,23 @@
+---
+bmc_address: "192.168.12.36"
+bmc_user: admin
+role: master
+installation_disk_path: "/dev/disk/by-path/pci-0000:c3:00.0-nvme-1"
+mac_addresses:
+  ens1f0: "12:34:56:78:9A:DE"
+network_config:
+  interfaces:
+    - name: ens1f0
+      type: ethernet
+      state: up
+      ipv4:
+        enabled: true
+        dhcp: false
+        address:
+        - ip: "192.168.45.69"
+          prefix-length: "24"
+  routes:
+    config:
+    - destination: 0.0.0.0/0
+      next-hop-address: "192.168.45.1"
+      next-hop-interface: "ens1f0"
diff --git a/okd/inventory-examples/ocloud-baremetal-okd-multinode/host_vars/master-2-baremetal/vault.yml b/okd/inventory-examples/ocloud-baremetal-okd-multinode/host_vars/master-2-baremetal/vault.yml
new file mode 100644 (file)
index 0000000..ac228b2
--- /dev/null
@@ -0,0 +1,3 @@
+---
+# Encrypt with `ansible-vault encrypt vault.yml` before adding secrets
+bmc_password: ~
diff --git a/okd/inventory-examples/ocloud-baremetal-okd-multinode/hosts.yml b/okd/inventory-examples/ocloud-baremetal-okd-multinode/hosts.yml
new file mode 100644 (file)
index 0000000..677053c
--- /dev/null
@@ -0,0 +1,14 @@
+deployer:
+  hosts:
+    localhost:
+      ansible_connection: local
+
+http_store:
+  hosts:
+    http_store:
+
+ocloud:
+  hosts:
+    master-0-baremetal:
+    master-1-baremetal:
+    master-2-baremetal:
@@ -1,4 +1,8 @@
 ---
+ocloud_infra: vm
+ocloud_platform: okd
+ocloud_topology: aio
 ocloud_platform_okd_ssh_pubkey: ~
+ocloud_cluster_name: "ocloud-vm-okd-aio"
 # Uncomment to override default release from ocloud_platform_okd role:
 #ocloud_platform_okd_release: ~
diff --git a/okd/inventory-examples/ocloud-vm-okd-aio/group_vars/all/vault.yml b/okd/inventory-examples/ocloud-vm-okd-aio/group_vars/all/vault.yml
new file mode 100644 (file)
index 0000000..51458e0
--- /dev/null
@@ -0,0 +1,4 @@
+---
+# Encrypt with `ansible-vault encrypt vault.yml` before adding secrets
+# Uncomment to override default pull secret from ocloud_platform_okd role:
+#ocloud_platform_okd_pull_secret: ~
diff --git a/okd/inventory-examples/ocloud-vm-okd-aio/host_vars/master-0-vm/vars.yml b/okd/inventory-examples/ocloud-vm-okd-aio/host_vars/master-0-vm/vars.yml
new file mode 100644 (file)
index 0000000..e83d249
--- /dev/null
@@ -0,0 +1,2 @@
+---
+role: master
similarity index 81%
rename from okd/inventory/hosts.yml
rename to okd/inventory-examples/ocloud-vm-okd-aio/hosts.yml
index 41c456e..d2a0c92 100644 (file)
@@ -8,10 +8,6 @@ kvm:
     localhost:
       ansible_connection: local
 
-http_store:
-  hosts:
-    http_store:
-
 ocloud:
   hosts:
     master-0-vm:
diff --git a/okd/inventory-examples/ocloud-vm-okd-multinode/group_vars/all/vars.yml b/okd/inventory-examples/ocloud-vm-okd-multinode/group_vars/all/vars.yml
new file mode 100644 (file)
index 0000000..84e3d4c
--- /dev/null
@@ -0,0 +1,10 @@
+---
+ocloud_infra: vm
+ocloud_platform: okd
+ocloud_topology: multinode
+ocloud_platform_okd_ssh_pubkey: ~
+ocloud_cluster_name: "ocloud-vm-okd-multinode"
+ocloud_platform_okd_api_vips: ["192.168.123.100"]
+ocloud_platform_okd_ingress_vips: ["192.168.123.101"]
+# Uncomment to override default release from ocloud_platform_okd role:
+#ocloud_platform_okd_release: ~
diff --git a/okd/inventory-examples/ocloud-vm-okd-multinode/group_vars/all/vault.yml b/okd/inventory-examples/ocloud-vm-okd-multinode/group_vars/all/vault.yml
new file mode 100644 (file)
index 0000000..51458e0
--- /dev/null
@@ -0,0 +1,4 @@
+---
+# Encrypt with `ansible-vault encrypt vault.yml` before adding secrets
+# Uncomment to override default pull secret from ocloud_platform_okd role:
+#ocloud_platform_okd_pull_secret: ~
diff --git a/okd/inventory-examples/ocloud-vm-okd-multinode/host_vars/master-0-vm/vars.yml b/okd/inventory-examples/ocloud-vm-okd-multinode/host_vars/master-0-vm/vars.yml
new file mode 100644 (file)
index 0000000..e83d249
--- /dev/null
@@ -0,0 +1,2 @@
+---
+role: master
diff --git a/okd/inventory-examples/ocloud-vm-okd-multinode/host_vars/master-1-vm/vars.yml b/okd/inventory-examples/ocloud-vm-okd-multinode/host_vars/master-1-vm/vars.yml
new file mode 100644 (file)
index 0000000..e83d249
--- /dev/null
@@ -0,0 +1,2 @@
+---
+role: master
diff --git a/okd/inventory-examples/ocloud-vm-okd-multinode/host_vars/master-2-vm/vars.yml b/okd/inventory-examples/ocloud-vm-okd-multinode/host_vars/master-2-vm/vars.yml
new file mode 100644 (file)
index 0000000..e83d249
--- /dev/null
@@ -0,0 +1,2 @@
+---
+role: master
diff --git a/okd/inventory-examples/ocloud-vm-okd-multinode/hosts.yml b/okd/inventory-examples/ocloud-vm-okd-multinode/hosts.yml
new file mode 100644 (file)
index 0000000..63d036a
--- /dev/null
@@ -0,0 +1,15 @@
+deployer:
+  hosts:
+    localhost:
+      ansible_connection: local
+
+kvm:
+  hosts:
+    localhost:
+      ansible_connection: local
+
+ocloud:
+  hosts:
+    master-0-vm:
+    master-1-vm:
+    master-2-vm:
diff --git a/okd/inventory/host_vars/master-0-vm/vars.yml b/okd/inventory/host_vars/master-0-vm/vars.yml
deleted file mode 100644 (file)
index 917fee1..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
----
-ocloud_infra: vm
-ocloud_platform: okd
-ocloud_topology: aio
-role: master
index c73fae5..7d97f64 100644 (file)
@@ -4,4 +4,3 @@
   gather_facts: false
   roles:
     - role: insert_dns_records
-      when: setup_dns_service | bool
index 9be8e77..856f052 100644 (file)
@@ -4,4 +4,3 @@
   gather_facts: false
   roles:
     - role: setup_http_store
-      when: setup_http_store_service | bool
\ No newline at end of file
index b418499..fc3a845 100644 (file)
@@ -4,5 +4,3 @@
   gather_facts: false
   roles:
     - role: setup_ntp
-      when: setup_ntp_service | bool
-
index c52293e..7eb1199 100644 (file)
@@ -3,6 +3,7 @@
   ansible.builtin.import_role:
     name: "ocloud_platform_okd"
   delegate_to: "{{ groups['deployer'][0] }}"
+  run_once: true
   when: ocloud_platform == "okd"
 
 - name: Include infra role - {{ ocloud_infra }}
   ansible.builtin.import_role:
     name: "ocloud_platform_stolostron"
   delegate_to: "{{ groups['deployer'][0] }}"
+  run_once: true
   when: ocloud_platform == "okd"
 
 - name: Include platform role - SiteConfig
   ansible.builtin.import_role:
     name: "ocloud_platform_siteconfig"
   delegate_to: "{{ groups['deployer'][0] }}"
+  run_once: true
   when: ocloud_platform == "okd"
 
 - name: Include platform role - ClusterGroupUpgrades
   ansible.builtin.import_role:
     name: "ocloud_platform_cgu"
   delegate_to: "{{ groups['deployer'][0] }}"
+  run_once: true
   when: ocloud_platform == "okd"
 
 - name: Include platform role - MultiClusterObservability
   ansible.builtin.import_role:
     name: "ocloud_platform_mco"
   delegate_to: "{{ groups['deployer'][0] }}"
+  run_once: true
   when: ocloud_platform == "okd"
 
 - name: Include platform role - oran-o2ims
   ansible.builtin.import_role:
     name: "ocloud_platform_o2ims"
   delegate_to: "{{ groups['deployer'][0] }}"
+  run_once: true
   when: ocloud_platform == "okd"
index 9f830a3..ac61e2f 100644 (file)
@@ -8,3 +8,4 @@
     - bootstrap-complete
     - install-complete
   listen: monitor_platform_deployment
+  run_once: true