.. This work is licensed under a Creative Commons Attribution 4.0 International License. .. SPDX-License-Identifier: CC-BY-4.0 .. Copyright (C) 2021 Wind River Systems, Inc. O-Cloud O2 Service User Guide ============================= This guide will introduce the process that make O2 interface work with SMO. - Assume you have an O-Cloud O2 environment - Discover O-Cloud inventory - O-Cloud auto discovery After you installed the O-Cloud service, it will automatically discover the INF through the parameters that you give from the “*o2service-override.yaml*” Below command can get the O-Cloud information .. code:: shell curl -X 'GET' \ 'http://:30205/o2ims_infrastructureInventory/v1/' \ -H 'accept: application/json' - Resource pool One O-Cloud have one resource pool, all the resources that belong to this O-Cloud will be organized into this resource pool Get the resource pool information through this interface .. code:: shell curl -X 'GET' \ 'http://:30205/o2ims_infrastructureInventory/v1/resourcePools' \ -H 'accept: application/json' - Resource type Resource type defined what type is the specified resource, like a physical machine, memory, or CPU Show all resource type .. code:: shell curl -X 'GET' \ 'http://:30205/o2ims_infrastructureInventory/v1/resourceTypes' \ -H 'accept: application/json' - Resource Get the list of all resources, the value of *resourcePoolId* from the result of resource pool interface .. code:: shell curl -X 'GET' \ "http://:30205/o2ims_infrastructureInventory/v1/resourcePools/${resourcePoolId}/resources" \ -H 'accept: application/json' Get detail of one resource .. code:: shell curl -X 'GET' \ "http://:30205/o2ims_infrastructureInventory/v1/resourcePools/${resourcePoolId}/resources/${resourceId}" \ -H 'accept: application/json' - Deployment manager services endpoint The Deployment Manager Service (DMS) that related to this IMS information you can use below API to check .. code:: shell curl -X 'GET' \ 'http://:30205/o2ims_infrastructureInventory/v1/deploymentManagers' \ -H 'accept: application/json' - Subscribe to the O-Cloud resource change notification Assume you have a SMO, and the SMO have an API can be receive callback request - Create subscription in O-Cloud IMS .. code:: bash curl -X 'POST' \ 'http://:30205/o2ims_infrastructureInventory/v1/subscriptions' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -d '{ "callback": "http://SMO/address/to/callback", "consumerSubscriptionId": "", "filter": "" }' - Handle resource change notification When the SMO callback API get the notification that the resource of O-Cloud changing, use the URL to get the latest resource information to update its database - Orchestrate CNF in helm chart On this sample, we prepare a firewall chart to test the orchestration. We need to do some preparation to make the helm repo work and include our firewall chart inside of the repository. Get the DMS Id in the O-Cloud, and set it into bash environment .. code:: bash curl --location --request GET 'http://:30205/o2ims_infrastructureInventory/v1/deploymentManagers' export dmsId=`curl --location --request GET 'http://:30205/o2ims_infrastructureInventory/v1/deploymentManagers' 2>/dev/null | jq .[].deploymentManagerId | xargs echo` Using helm to deploy a chartmuseum to the INF .. code:: bash helm pull chartmuseum/chartmuseum # download chartmuseum-3.4.0.tgz to local tar zxvf chartmuseum-3.4.0.tgz cat <chartmuseum-override.yaml env: open: DISABLE_API: false service: type: NodePort nodePort: 30330 EOF helm install chartmuseumrepo chartmuseum/chartmuseum -f chartmuseum-override.yaml kubectl get pods Kubectl get services Update the helm repo and add the chartmusem into the repository .. code:: bash helm repo add o2imsrepo http://${NODE_IP}:30330 helm repo update Download the firewall chart and push it into the repository .. code:: bash git clone https://github.com/biny993/firewall-host-netdevice.git tar -zcvf firewall-host-netdevice-1.0.0.tgz firewall-host-netdevice/ helm push firewall-host-netdevice-1.0.0.tgz o2imsrepo helm repo update helm search repo firewall - Create NfDeploymentDescriptor .. code:: bash curl --location --request POST "http://:30205/o2dms/${dmsId}/O2dms_DeploymentLifecycle/NfDeploymentDescriptor" \ --header 'Content-Type: application/json' \ --data-raw '{ "name": "cfwdesc1", "description": "demo nf deployment descriptor", "artifactRepoUrl": "http://${NODE_IP}:30330", "artifactName": "firewall-host-netdevice", "inputParams": "{\n \"image\": {\n \"repository\": \"ubuntu\",\n \"tag\": 18.04,\n \"pullPolicy\": \"IfNotPresent\"\n },\n \"resources\": {\n \"cpu\": 2,\n \"memory\": \"2Gi\",\n \"hugepage\": \"256Mi\",\n \"unprotectedNetPortVpg\": \"veth11\",\n \"unprotectedNetPortVfw\": \"veth12\",\n \"unprotectedNetCidr\": \"10.10.1.0/24\",\n \"unprotectedNetGwIp\": \"10.10.1.1\",\n \"protectedNetPortVfw\": \"veth21\",\n \"protectedNetPortVsn\": \"veth22\",\n \"protectedNetCidr\": \"10.10.2.0/24\",\n \"protectedNetGwIp\": \"10.10.2.1\",\n \"vfwPrivateIp0\": \"10.10.1.1\",\n \"vfwPrivateIp1\": \"10.10.2.1\",\n \"vpgPrivateIp0\": \"10.10.1.2\",\n \"vsnPrivateIp0\": \"10.10.2.2\"\n }\n}", "outputParams": "{\"output1\": 100}" }' curl --location --request GET "http://:30205/o2dms/${dmsId}/O2dms_DeploymentLifecycle/NfDeploymentDescriptor" - Create NfDeployment When you have an descriptor of deployment, you can create a NfDeployment, it will trigger an event inside of the IMS/DMS, and use the K8S API to create a real pod of the firewall sample .. code:: bash curl --location --request POST "http://:30205/o2dms/${dmsId}/O2dms_DeploymentLifecycle/NfDeployment" \ --header 'Content-Type: application/json' \ --data-raw '{ "name": "cfw100", "description": "demo nf deployment", "descriptorId": "", "parentDeploymentId": "" }' curl --location --request GET "http://:30205/o2dms/${dmsId}/O2dms_DeploymentLifecycle/NfDeployment" - Check pods of the firewall sample .. code:: bash kubectl get pods - Delete the deployment we just created .. code:: shell export NfDeploymentId=`curl --location --request GET 'http://:30205/o2dms/${dmsId}/O2dms_DeploymentLifecycle/NfDeployment' 2>/dev/null | jq .[].id | xargs echo` curl --location --request DELETE "http://:30205/o2dms/${dmsId}/O2dms_DeploymentLifecycle/NfDeployment/${NfDeploymentId}"