+In the context of hosting a RAN Application on INF, the O-RAN O2
+Application provides and exposes the IMS and DMS service APIs of the O2
+interface between the O-Cloud (INF) and the Service Management &
+Orchestration (SMO), in the O-RAN Architecture.
+
+The O2 interfaces enable the management of the O-Cloud (INF)
+infrastructure and the deployment life-cycle management of O-RAN
+cloudified NFs that run on O-Cloud (INF). See `O-RAN O2 General Aspects
+and Principles
+2.0 <https://orandownloadsweb.azurewebsites.net/specifications>`__, and
+`INF O2
+documentation <https://docs.o-ran-sc.org/projects/o-ran-sc-pti-o2/en/latest/>`__.
+
+The O-RAN O2 application is integrated into INF as a system application.
+The O-RAN O2 application package is saved in INF during system
+installation, but it is not applied by default.
+
+System administrators can follow the procedures below to install and
+uninstall the O-RAN O2 application.
+
+INF O2 Service Install
+======================
+
+1. Prerequisites
+----------------
+
+Configure the internal Ceph storage for the O2 application persistent
+storage, see INF Storage Configuration and Management: `Configure the
+Internal Ceph Storage
+Backend <https://docs.starlingx.io/storage/kubernetes/configure-the-internal-ceph-storage-backend.html#configure-the-internal-ceph-storage-backend>`__.
+
+Enable PVC support in ``oran-o2`` namespace, see INF Storage
+Configuration and Management: `Enable ReadWriteOnce PVC Support in
+Additional
+Namespaces <https://docs.starlingx.io/storage/kubernetes/enable-readwriteonce-pvc-support-in-additional-namespaces.html#enable-readwriteonce-pvc-support-in-additional-namespaces>`__.
+
+2. Procedure
+------------
+
+You can install O-RAN O2 application on INF from the command line.
+
+1. Locate the O2 application tarball in
+ ``/usr/local/share/applications/helm``.
+
+ For example:
+
+ ::
+
+ /usr/local/share/applications/helm/oran-o2-<version>.tgz
+
+2. Download ``admin_openrc.sh`` from the INF admin dashboard.
+
+ - Visit http://put_your_OAM_IP_here:8080/project/api_access/
+ - Click the **Download OpenStack RC File”/”OpenStack RC File**
+ button
+
+3. Copy the file to the controller host.
+
+4. Source the platform environment.
+
+ ::
+
+ $ source ./admin_openrc.sh
+ ~(keystone_admin)]$
+
+5. Upload the application.
+
+ ::
+
+ ~(keystone_admin)]$ system application-upload /usr/local/share/applications/helm/oran-o2-<version>.tgz
+
+6. Prepare the override ``yaml`` file.
+
+ 1. Create a service account for SMO application.
+
+ Create a ServiceAccount which can be used to provide SMO
+ application with minimal access permission credentials.
+
+ ::
+
+ export SMO_SERVICEACCOUNT=smo1
+
+ cat <<EOF > smo-serviceaccount.yaml
+ apiVersion: rbac.authorization.k8s.io/v1
+ kind: Role
+ metadata:
+ namespace: default
+ name: pod-reader
+ rules:
+ - apiGroups: [""] # "" indicates the core API group
+ resources: ["pods"]
+ verbs: ["get", "watch", "list"]
+ ---
+ apiVersion: v1
+ kind: ServiceAccount
+ metadata:
+ name: ${SMO_SERVICEACCOUNT}
+ namespace: default
+ ---
+ apiVersion: rbac.authorization.k8s.io/v1
+ kind: RoleBinding
+ metadata:
+ name: read-pods
+ namespace: default
+ roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: pod-reader
+ subjects:
+ - kind: ServiceAccount
+ name: ${SMO_SERVICEACCOUNT}
+ namespace: default
+ EOF
+
+ kubectl apply -f smo-serviceaccount.yaml