- ansible
- make
+- nmstate
- pip
- wget
- python development headers/libraries
### 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
#### 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
"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
--- /dev/null
+inventory-examples/ocloud-vm-okd-aio
\ No newline at end of file
--- /dev/null
+---
+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: ~
---
-ocloud_infra: baremetal
-ocloud_platform: okd
-ocloud_topology: aio
bmc_address: "192.168.12.34"
bmc_user: admin
role: master
--- /dev/null
+deployer:
+ hosts:
+ localhost:
+ ansible_connection: local
+
+http_store:
+ hosts:
+ http_store:
+
+ocloud:
+ hosts:
+ master-0-baremetal:
--- /dev/null
+---
+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: ~
--- /dev/null
+---
+# 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: ~
--- /dev/null
+ansible_host: 192.168.89.10
+http_store_dir: /opt/http_store/data
+http_port: 80
+ansible_connection: local
--- /dev/null
+---
+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"
--- /dev/null
+---
+# Encrypt with `ansible-vault encrypt vault.yml` before adding secrets
+bmc_password: ~
--- /dev/null
+---
+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"
--- /dev/null
+---
+# Encrypt with `ansible-vault encrypt vault.yml` before adding secrets
+bmc_password: ~
--- /dev/null
+---
+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"
--- /dev/null
+---
+# Encrypt with `ansible-vault encrypt vault.yml` before adding secrets
+bmc_password: ~
--- /dev/null
+deployer:
+ hosts:
+ localhost:
+ ansible_connection: local
+
+http_store:
+ hosts:
+ http_store:
+
+ocloud:
+ hosts:
+ master-0-baremetal:
+ master-1-baremetal:
+ master-2-baremetal:
---
+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: ~
--- /dev/null
+---
+# 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: ~
--- /dev/null
+---
+role: master
localhost:
ansible_connection: local
-http_store:
- hosts:
- http_store:
-
ocloud:
hosts:
master-0-vm:
--- /dev/null
+---
+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: ~
--- /dev/null
+---
+# 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: ~
--- /dev/null
+---
+role: master
--- /dev/null
+---
+role: master
--- /dev/null
+---
+role: master
--- /dev/null
+deployer:
+ hosts:
+ localhost:
+ ansible_connection: local
+
+kvm:
+ hosts:
+ localhost:
+ ansible_connection: local
+
+ocloud:
+ hosts:
+ master-0-vm:
+ master-1-vm:
+ master-2-vm:
+++ /dev/null
----
-ocloud_infra: vm
-ocloud_platform: okd
-ocloud_topology: aio
-role: master
gather_facts: false
roles:
- role: insert_dns_records
- when: setup_dns_service | bool
gather_facts: false
roles:
- role: setup_http_store
- when: setup_http_store_service | bool
\ No newline at end of file
gather_facts: false
roles:
- role: setup_ntp
- when: setup_ntp_service | bool
-
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"
- bootstrap-complete
- install-complete
listen: monitor_platform_deployment
+ run_once: true