{"id":31519413,"url":"https://github.com/thc1006/onap-auto-deploy","last_synced_at":"2026-05-03T15:35:43.748Z","repository":{"id":207460102,"uuid":"559706398","full_name":"thc1006/ONAP-Auto-Deploy","owner":"thc1006","description":"Automated deployment and testing Using SMO package and ONAP Python SDK","archived":false,"fork":false,"pushed_at":"2023-11-15T22:48:30.000Z","size":9187,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-03T10:58:02.140Z","etag":null,"topics":["jenkins","kubernetes","linux","o-ran","open-source","oran","python","ubuntu","ubuntu1804"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thc1006.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2022-10-30T23:00:45.000Z","updated_at":"2024-03-08T16:24:12.000Z","dependencies_parsed_at":"2023-11-15T23:36:30.443Z","dependency_job_id":null,"html_url":"https://github.com/thc1006/ONAP-Auto-Deploy","commit_stats":null,"previous_names":["thc1006/onap-auto-deploy"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/thc1006/ONAP-Auto-Deploy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thc1006%2FONAP-Auto-Deploy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thc1006%2FONAP-Auto-Deploy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thc1006%2FONAP-Auto-Deploy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thc1006%2FONAP-Auto-Deploy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thc1006","download_url":"https://codeload.github.com/thc1006/ONAP-Auto-Deploy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thc1006%2FONAP-Auto-Deploy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32575113,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T06:36:36.687Z","status":"ssl_error","status_checked_at":"2026-05-03T06:36:09.306Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["jenkins","kubernetes","linux","o-ran","open-source","oran","python","ubuntu","ubuntu1804"],"created_at":"2025-10-03T10:57:27.764Z","updated_at":"2026-05-03T15:35:43.722Z","avatar_url":"https://github.com/thc1006.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# O-RAN ONAP-Auto-Deploy 實作版繁中\n- Automated deployment and testing Using SMO package and ONAP Python SDK\n- 簡報：https://reurl.cc/oZLy9D\n\n## SMO Package based on ONAP\nSMO package 可在 “it/dep” repository 中的 ORAN gerrit 中訪問：\nhttps://gerrit.o-ran-sc.org/r/gitweb?p=it/dep.git;a=tree;f=smo-install;h=2e4539d6c3c2e2a274d1913c89df371c956f0793;hb=HEAD \n\n它是基於 ONAP OOM repository，因為它被作為 Git Submodule。\nONAP chart 在使用時不會改變，也不會重新定義，而是透過使用 Helm 覆蓋機制進行設定。\n\nORAN chart 被主要用來定義 NON-RT RIC 的部分，其他圖表可以稍後增加。\n定義的 Test chart 包含 network simulators（DU/RU/Topology server）、jenkins 或 python SDK 測試的 helm chart。\n\nChartMuseum 用於儲存本地構建的 chart（因為目前無法遠程獲取 ONAP chart 和 ORAN chart）\n\n![image](https://user-images.githubusercontent.com/84045975/198906763-b04fb74e-300b-4b4b-a687-9dd542f521b2.png)\n\nSMO package 包含一些 scripts 來設定 Node、安裝 smo/jenkins、啟動模擬器、解除安裝等….\n這些腳本已分為 3 個不同的層，但根據您的設定，可以跳過一些腳本。\n- 第 0 層：設定 Node（microk8s、helm、chartmuseum、測試工具等…）\n- 第 1 層：構建 helm chart 並將其上傳到 ChartMuseum\n- 第 2 層：部署具有特定 flavor 的 SMO、部署 network simulators、部署 CI/CD 工具等......\n\n## Architecture\n下圖從 high level 往下描述了環境以及使用此設定部署的各種實體(entities)\n\n![image](https://user-images.githubusercontent.com/84045975/198906927-d7e07a84-4292-412a-ae1c-65f2856df330.png)\n\n###### O-RAN SMO Deployment\n# O-RAN SMO安裝\n\n\u003e SMO Based on ONAP\n\n## 安裝先決條件\n### 硬體需求\n```\nCPU: 6 Core\nRAM:16GB\nStorge:50GB\n```\n### 軟體環境需求\n測試環境 OS：Ubuntu 22.04(伺服器版)\n```\n$ docker --version\nDocker version 24.0.6\n\n$ docker-compose version\ndocker-compose version v2.20.3\ndocker-py version: 5.0.3\nCPython version: 3.10.12\nOpenSSL version: OpenSSL 3.0.2 15 Mar 2022\n\n$ git --version\ngit version 2.34.1\n```\n# 安裝前置工作\n## 安裝 git、json輕量級的模擬器和py3\n```cmd=\nsudo apt-get update \nsudo apt-get install git\nsudo apt install python3-pip\n```\n```\nsudo apt-get install jq\n```\n## clone the repository\n```\ngit clone https://gerrit.o-ran-sc.org/r/oam.git -b dawn\n```\n## 建置Docker環境\n\u003e [參照資料](https://docs.docker.com/engine/install/ubuntu/) 別擔心全部複製貼上就可以安裝了~\n\n首先先更新 apt-get\n```bash\nsudo apt-get update\n```\n安裝需要的 packages curl 之類的 喵\n```bash\nsudo apt-get install \\\n    apt-transport-https \\\n    ca-certificates \\\n    curl \\\n    gnupg-agent \\\n    software-properties-common\n```\n新增官方 Docker GPG 密鑰\n```bash\ncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n```\n新增 穩定版本的 repository\n```bash\necho \\\n  \"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \\\n  $(lsb_release -cs) stable\" | sudo tee /etc/apt/sources.list.d/docker.list \u003e /dev/null\n```\n## 安裝Docker Engine\n還是一樣先更新 Docker 相關套件\n安裝最新版本的 engine,command and container\n```bash\nsudo apt-get update;sudo apt-get install docker-ce docker-ce-cli containerd.io\n```\n\n跑跑看 Docker hello world 看看有沒有出現(第一次會需要下載)\n```bash\nsudo docker run hello-world\n```\n\n然後你可以使用其他 Docker 指令來查看你的 Image 和 Container\n\u003e 推薦閱讀：[Docker 基本指令介紹 ](https://hackmd.io/@thc1006/rku088xM5)[color=#F4B400]\n\n輸入以下指令測試安裝是否成功 (會出現你的 Docker 版本)\n```bash\ndocker --version\n```\n![](https://i.imgur.com/b5C67tt.png)\n\n### 提高權限\n將使用者加入群組，來提高權限執行 Docker，\n讓之後的安裝過程，系統才不會一直跟你靠腰你沒有權限！\n\n首先新增一個 Docker 群組\n```cmd=\nsudo groupadd docker\n```\n然後將使用者加入群組\n\n\u003e 更改下方命令列 XXXX 的部分，改成你的使用者名稱\n如：root@192.168.0.1 (root 就是你的使用者名稱)[color=#F4B400]\n```cmd=\nsudo usermod -aG docker XXXX\n```\n## 獨立安裝docker-compose\n教程：https://docs.docker.com/compose/install/standalone/\n\n* Troubleshooting\n\u003e 如果安裝遇到 Permission denied 的問題，請參閱下方連結(提高權限)：\nhttps://stackoverflow.com/questions/59265190/permission-denied-in-docker-compose-on-linux\n[color=#F4B400]\n\n驗證安裝版本\n```cmd=\ndocker compose version\n```\n# 開始安裝輕量版SMO\n\u003e 本教程以 O-RAN Release D 作為示範(穩定版本)[color=#F4B400]\n\n### 參考資料：\n* [D-Release Integration - Test Environment](https://wiki.o-ran-sc.org/display/OAM/D-Release+Integration+-+Test+Environment)\n* [O1 Simulator and lightweight ONAP based SMO deployment](https://wiki.opennetworking.org/display/COM/O1+Simulator+and+lightweight+ONAP+based+SMO+deployment)\n\n## 修改/etc/hosts\n```\ncat /etc/hosts\n```\n你會看到如下的資訊:\n```\n127.0.0.1               localhost\n127.0.1.1               \u003cyour-system\u003e\n\u003cdeloyment-system-ipv4\u003e sdnc-web \u003cyour-system\u003e\n\u003cdeloyment-system-ipv4\u003e identity \u003cyour-system\u003e\n```\n那我們要做一些修改變成像是下面那樣\n\u003e 用 nano 或是 vim 都來修改都可以[color=#F4B400]\n```\nnano /etc/hosts\n```\n```\n127.0.0.1       localhost\n127.0.1.1       oran-server\n172.17.0.1   sdnc-web  oran-server\n172.17.0.1   identity  oran-server\n```\n* \"oran-server\" 是我系統的名稱，你可以改成自己系統的名稱。\n* \"172.17.0.1\" 是我的\"deloyment-system-ipv4\"，你要改成你自己的 host IP。\n\n## 開始安裝solution\n注意 會需要按照流程進行安裝\n```cmd=\ncd oam/solution/integration\nsudo docker-compose -f smo/common/docker-compose.yml up -d\n# 等待container安裝\npython3 smo/common/identity/config.py\nsudo docker-compose -f smo/onap-policy/docker-compose.yml up -d\nsudo docker-compose -f smo/oam/docker-compose.yml up -d\nsudo docker-compose -f smo/non-rt-ric/docker-compose.yml up -d\n```\n\u003e Troubleshooting(你可能會收到 rapp pull 失敗的警告)[color=#ff0000]\t\n\n![](https://hackmd.io/_uploads/HJPlCnaph.png)\n\n這時你就輸入下列這個指令，手動 pull rapp 就解決問題了~\n```\nsudo docker pull nexus3.o-ran-sc.org:10002/o-ran-sc/nonrtric-plt-rappcatalogue:1.1.0\n```\n可能會需要等待兩分鐘，讓所有服務正常啟動~\n\n\u003e 如果你想要為 O-RU closed loop recovery usecase 建立/部署 Apex 策略，這裡有相關 Test case 的補充資料：[color=#F4B400]\n\u003e - Create/Deploy the Apex policy for O-RU closed loop recovery Use Case\n\u003e - 參考資料：https://wiki.o-ran-sc.org/pages/viewpage.action?pageId=35881325\n\n# populate data into Non-RT-RIC\n有關如何運行 Non-RT-RIC 的完整說明，可以在此頁面中找到：\nhttps: //wiki.o-ran-sc.org/display/RICNR/Release+D\n\n\u003e 將 data 安裝入 Non-RT 的原因是，由於 Non-RT RIC 的安裝是 optional，所以這邊需要手動安裝其內部 component 以進行測試和 Demo。 [color=#F4B400]\n\n安裝在 non-rt-ric/data directory 路徑底下\n```\ncd oam/solution/integration/smo/non-rt-ric/data\n```\n### Prepare Pmsdata\nScript \u003ccode class=\"code\"\u003epreparePmsData.sh\u003c/code\u003e 會向policy-agent service 傳送 http 請求，並建立對應的 policy instances。\n```\n# run the script\nbash preparePmsData.sh\n```\nOutput be like:\n```\nroot@OAM:~/test/oam/solution/integration/smo/non-rt-ric/data# bash preparePmsData.sh \nusing policy_agent port: 8091\nusing a1-sim-OSC port: 30001\nusing a1-sim-STD port: 30005\nusing protocol: http\n\n\npolicy agent status:\nhunky dory200\n\n\nric1 version:\nOSC_2.1.0200\n\n\nric2 version:\nSTD_2.0.0200\n\n\ncreate policy type 1 to ric1:\nPolicy type 1 is OK.201\n\n\ncreate policy type 2 to ric2:\nPolicy type 2 is OK.201\n\n\npolicy types from policy agent:\n{\"policytype_ids\":[]}200\npolicy types from policy agent:\n{\"policytype_ids\":[]}200\npolicy types from policy agent:\n{\"policytype_ids\":[]}200\npolicy types from policy agent:\n{\"policytype_ids\":[]}200\npolicy types from policy agent:\n{\"policytype_ids\":[]}200\npolicy types from policy agent:\n{\"policytype_ids\":[]}200\npolicy types from policy agent:\n{\"policytype_ids\":[]}200\npolicy types from policy agent:\n{\"policytype_ids\":[]}200\npolicy types from policy agent:\n{\"policytype_ids\":[]}200\npolicy types from policy agent:\n{\"policytype_ids\":[]}200\npolicy types from policy agent:\n{\"policytype_ids\":[\"1\",\"2\"]}200\n\n\ncreate service ric-registration to policy agent:\n201\n\n\ncreate policy aa8feaa88d944d919ef0e83f2172a5000 to ric1 with type 1 and service controlpanel via policy agent:\n201\n\n\npolicy numbers from ric1:\n1200\n\n\ncreate policy aa8feaa88d944d919ef0e83f2172a5100 to ric2 with type 2 and service controlpanel via policy agent:\n201\n\n\npolicy numbers from ric2:\n1200\n\n\npolicy id aa8feaa88d944d919ef0e83f2172a5000 from policy agent:\n200\n\n\npolicy id aa8feaa88d944d919ef0e83f2172a5100 from policy agent:\n200\n```\n\n### Prepare dmaapMsg\nScript \u003ccode class=\"code\"\u003eprepareDmaapMsg.sh\u003c/code\u003e 會向 dmaap message router 傳送訊息，然後 Non-RT RIC policy-agent service 從 dmaap poll messages，並建立相應的 policy instances。\n```\nbash prepareDmaapMsg.sh\n```\nOutput be like:\n```\n❯ bash prepareDmaapMsg.sh                                                                    \nusing dmaap-mr port: 3904\nusing a1-sim-OSC port: 30001\nusing a1-sim-STD port: 30003\nusing a1-sim-STD-v2 port: 30005\nusing protocol: http\n\n\ndmaap-mr topics:\n{\"topics\": [\n    {\n        \"owner\": \"\",\n        \"txenabled\": false,\n        \"topicName\": \"A1-POLICY-AGENT-WRITE\"\n    },\n    {\n        \"owner\": \"\",\n        \"txenabled\": false,\n        \"topicName\": \"POLICY-PDP-PAP\"\n    },\n    {\n        \"owner\": \"\",\n        \"txenabled\": false,\n        \"topicName\": \"POLICY-NOTIFICATION\"\n    },\n    {\n        \"owner\": \"\",\n        \"txenabled\": false,\n        \"topicName\": \"__consumer_offsets\"\n    },\n    {\n        \"owner\": \"\",\n        \"txenabled\": false,\n        \"topicName\": \"A1-POLICY-AGENT-READ\"\n    }\n]}200\n\ndmaap-mr create topic A1-POLICY-AGENT-READ:\n204\n\ndmaap-mr create topic A1-POLICY-AGENT-WRITE:\n204\n\ndmaap-mr topics:\n{\"topics\": [\n    {\n        \"owner\": \"\",\n        \"txenabled\": false,\n        \"topicName\": \"A1-POLICY-AGENT-WRITE\"\n    },\n    {\n        \"owner\": \"\",\n        \"txenabled\": false,\n        \"topicName\": \"POLICY-PDP-PAP\"\n    },\n    {\n        \"owner\": \"\",\n        \"txenabled\": false,\n        \"topicName\": \"POLICY-NOTIFICATION\"\n    },\n    {\n        \"owner\": \"\",\n        \"txenabled\": false,\n        \"topicName\": \"__consumer_offsets\"\n    },\n    {\n        \"owner\": \"\",\n        \"txenabled\": false,\n        \"topicName\": \"A1-POLICY-AGENT-READ\"\n    }\n]}200\n\nric1 version:\nOSC_2.1.0200\n\nric2 version:\nSTD_1.1.3200\n\nric3 version:\nSTD_2.0.0200\n\ncreate policy type 1 to ric1:\nThe policy type already exists and instances exists400\n\ncreate policy type 2 to ric3:\nThe policy type already exists and instances exists400\n\npolicy types from policy agent:\n[\"1\",\"2\"]200\n\n\ncreate service 1 to policy agent via dmaap_mr:\n{\n    \"serverTimeMs\": 2,\n    \"count\": 3\n}200\n\nget result from mr of previous request:\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n100   439  100   439    0     0    544      0 --:--:-- --:--:-- --:--:--   543\n[\n  \"{\\\"requestId\\\":\\\"23343221\\\",\\\"correlationId\\\":\\\"1596363458549998500\\\",\\\"originatorId\\\":\\\"849e6c6b420\\\",\\\"type\\\":\\\"response\\\",\\\"message\\\":\\\"OK\\\",\\\"timestamp\\\":\\\"2020-08-02 10:17:38.550324\\\",\\\"status\\\":\\\"201 CREATED\\\"}\",\n  \"{\\\"requestId\\\":\\\"23343221\\\",\\\"correlationId\\\":\\\"1596363458549998501\\\",\\\"originatorId\\\":\\\"849e6c6b421\\\",\\\"type\\\":\\\"response\\\",\\\"message\\\":\\\"OK\\\",\\\"timestamp\\\":\\\"2020-08-02 10:17:38.550324\\\",\\\"status\\\":\\\"201 CREATED\\\"}\"\n]\n\n\ncreate policies to ric1 \u0026 ric2 \u0026 ric3 with type1 and service1 via dmaa_mr:\n{\n    \"serverTimeMs\": 1,\n    \"count\": 5\n}200\n\nget result from mr of previous request:\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n100   215  100   215    0     0    884      0 --:--:-- --:--:-- --:--:--   884\n[\n  \"{\\\"requestId\\\":\\\"23343221\\\",\\\"correlationId\\\":\\\"1596363459196978900\\\",\\\"originatorId\\\":\\\"849e6c6b420\\\",\\\"type\\\":\\\"response\\\",\\\"message\\\":\\\"OK\\\",\\\"timestamp\\\":\\\"2020-08-02 10:17:39.197067\\\",\\\"status\\\":\\\"200 OK\\\"}\"\n]\n\n\nget policy from policy agent via dmaap_mr:\n{\n    \"serverTimeMs\": 0,\n    \"count\": 4\n}200\n\nget result from mr of previous request:\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n100   218  100   218    0     0   3694      0 --:--:-- --:--:-- --:--:--  3694\n[\n  \"{\\\"requestId\\\":\\\"23343221\\\",\\\"correlationId\\\":\\\"1596304565904621535\\\",\\\"originatorId\\\":\\\"849e6c6b420\\\",\\\"type\\\":\\\"response\\\",\\\"message\\\":\\\"\\\",\\\"timestamp\\\":\\\"2020-08-01 17:56:05.905035\\\",\\\"status\\\":\\\"201 CREATED\\\"}\"\n]\n\n\ncreate service 2 to policy agent via dmaap_mr:\n{\n    \"serverTimeMs\": 1,\n    \"count\": 3\n}200\n\nget result from mr of previous request:\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n100   218  100   218    0     0   5317      0 --:--:-- --:--:-- --:--:--  5317\n[\n  \"{\\\"requestId\\\":\\\"23343221\\\",\\\"correlationId\\\":\\\"1596304566656253556\\\",\\\"originatorId\\\":\\\"849e6c6b420\\\",\\\"type\\\":\\\"response\\\",\\\"message\\\":\\\"\\\",\\\"timestamp\\\":\\\"2020-08-01 17:56:06.656949\\\",\\\"status\\\":\\\"201 CREATED\\\"}\"\n]\n\n\ncreate policies to ric1 \u0026 ric2 \u0026 ric3 with type1 and service1 via dmaa_mr:\n{\n    \"serverTimeMs\": 0,\n    \"count\": 4\n}200\n\nget result from mr of previous request:\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n100   218  100   218    0     0   5589      0 --:--:-- --:--:-- --:--:--  5589\n[\n  \"{\\\"requestId\\\":\\\"23343221\\\",\\\"correlationId\\\":\\\"1596304566656253557\\\",\\\"originatorId\\\":\\\"849e6c6b420\\\",\\\"type\\\":\\\"response\\\",\\\"message\\\":\\\"\\\",\\\"timestamp\\\":\\\"2020-08-01 17:56:06.656949\\\",\\\"status\\\":\\\"201 CREATED\\\"}\"\n]\n\n\nget policy from policy agent via dmaap_mr:\n{\n    \"serverTimeMs\": 3,\n    \"count\": 4\n}200\n\nget result from mr of previous request:\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n100   220  100   220    0     0   4230      0 --:--:-- --:--:-- --:--:--  4230\n[\n  \"{\\\"requestId\\\":\\\"23343221\\\",\\\"correlationId\\\":\\\"1596304566656253558\\\",\\\"originatorId\\\":\\\"849e6c6b420\\\",\\\"type\\\":\\\"response\\\",\\\"message\\\":\\\"\\\",\\\"timestamp\\\":\\\"2020-08-01 17:56:06.656949\\\",\\\"status\\\":\\\"404 NOT_FOUND\\\"}\"\n]\n\n\npolicy numbers from ric1:\n4200\n\npolicy numbers from ric2:\n0200\n\npolicy numbers from ric3:\n1200\n```\n\n等待幾分鐘後再執行一次:\n```\nbash prepareDmaapMsg.sh \n```\nOutput be like:\n```                                                                     \nusing dmaap-mr port: 3904\nusing a1-sim-OSC port: 30001\nusing a1-sim-STD port: 30003\nusing a1-sim-STD-v2 port: 30005\nusing protocol: http\n\n\ndmaap-mr topics:\n{\"topics\": [\n    {\n        \"owner\": \"\",\n        \"txenabled\": false,\n        \"topicName\": \"A1-POLICY-AGENT-WRITE\"\n    },\n    {\n        \"owner\": \"\",\n        \"txenabled\": false,\n        \"topicName\": \"POLICY-PDP-PAP\"\n    },\n    {\n        \"owner\": \"\",\n        \"txenabled\": false,\n        \"topicName\": \"POLICY-NOTIFICATION\"\n    },\n    {\n        \"owner\": \"\",\n        \"txenabled\": false,\n        \"topicName\": \"__consumer_offsets\"\n    },\n    {\n        \"owner\": \"\",\n        \"txenabled\": false,\n        \"topicName\": \"A1-POLICY-AGENT-READ\"\n    }\n]}200\n\ndmaap-mr create topic A1-POLICY-AGENT-READ:\n204\n\ndmaap-mr create topic A1-POLICY-AGENT-WRITE:\n204\n\ndmaap-mr topics:\n{\"topics\": [\n    {\n        \"owner\": \"\",\n        \"txenabled\": false,\n        \"topicName\": \"A1-POLICY-AGENT-WRITE\"\n    },\n    {\n        \"owner\": \"\",\n        \"txenabled\": false,\n        \"topicName\": \"POLICY-PDP-PAP\"\n    },\n    {\n        \"owner\": \"\",\n        \"txenabled\": false,\n        \"topicName\": \"POLICY-NOTIFICATION\"\n    },\n    {\n        \"owner\": \"\",\n        \"txenabled\": false,\n        \"topicName\": \"__consumer_offsets\"\n    },\n    {\n        \"owner\": \"\",\n        \"txenabled\": false,\n        \"topicName\": \"A1-POLICY-AGENT-READ\"\n    }\n]}200\n\nric1 version:\nOSC_2.1.0200\n\nric2 version:\nSTD_1.1.3200\n\nric3 version:\nSTD_2.0.0200\n\ncreate policy type 1 to ric1:\nThe policy type already exists and instances exists400\n\ncreate policy type 2 to ric3:\nThe policy type already exists and instances exists400\n\npolicy types from policy agent:\n[\"1\",\"2\"]200\n\n\ncreate service 1 to policy agent via dmaap_mr:\n{\n    \"serverTimeMs\": 0,\n    \"count\": 3\n}200\n\nget result from mr of previous request:\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n100   220  100   220    0     0  11000      0 --:--:-- --:--:-- --:--:-- 11578\n[\n  \"{\\\"requestId\\\":\\\"23343221\\\",\\\"correlationId\\\":\\\"1596304566656253558\\\",\\\"originatorId\\\":\\\"849e6c6b420\\\",\\\"type\\\":\\\"response\\\",\\\"message\\\":\\\"\\\",\\\"timestamp\\\":\\\"2020-08-01 17:56:06.656949\\\",\\\"status\\\":\\\"404 NOT_FOUND\\\"}\"\n]\n\n\ncreate policies to ric1 \u0026 ric2 \u0026 ric3 with type1 and service1 via dmaa_mr:\n{\n    \"serverTimeMs\": 0,\n    \"count\": 5\n}200\n\nget result from mr of previous request:\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n100   677  100   677    0     0  29434      0 --:--:-- --:--:-- --:--:-- 30772\n[\n  \"{\\\"requestId\\\":\\\"23343221\\\",\\\"correlationId\\\":\\\"1596304567017739720\\\",\\\"originatorId\\\":\\\"849e6c6b420\\\",\\\"type\\\":\\\"response\\\",\\\"message\\\":\\\"{\\\\\\\"qosObjectives\\\\\\\":{\\\\\\\"priorityLevel\\\\\\\":3000},\\\\\\\"scope\\\\\\\":{\\\\\\\"qosId\\\\\\\":\\\\\\\"qos3000\\\\\\\",\\\\\\\"ueId\\\\\\\":\\\\\\\"ue3000\\\\\\\"}}\\\",\\\"timestamp\\\":\\\"2020-08-01 17:56:07.017744\\\",\\\"status\\\":\\\"200 OK\\\"}\",\n  \"{\\\"requestId\\\":\\\"23343221\\\",\\\"correlationId\\\":\\\"1596304567017739720\\\",\\\"originatorId\\\":\\\"849e6c6b420\\\",\\\"type\\\":\\\"response\\\",\\\"message\\\":\\\"{\\\\\\\"qosObjectives\\\\\\\":{\\\\\\\"priorityLevel\\\\\\\":3100},\\\\\\\"scope\\\\\\\":{\\\\\\\"qosId\\\\\\\":\\\\\\\"qos3100\\\\\\\",\\\\\\\"ueId\\\\\\\":\\\\\\\"ue3100\\\\\\\"}}\\\",\\\"timestamp\\\":\\\"2020-08-01 17:56:07.017744\\\",\\\"status\\\":\\\"200 OK\\\"}\"\n]\n\n\nget policy from policy agent via dmaap_mr:\n{\n    \"serverTimeMs\": 0,\n    \"count\": 4\n}200\n\nget result from mr of previous request:\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n100  4470  100  4470    0     0   128k      0 --:--:-- --:--:-- --:--:--  128k\n[\n  \"{\\\"requestId\\\":\\\"23343221\\\",\\\"correlationId\\\":\\\"1596304567017739720\\\",\\\"originatorId\\\":\\\"849e6c6b420\\\",\\\"type\\\":\\\"response\\\",\\\"message\\\":\\\"{\\\\\\\"qosObjectives\\\\\\\":{\\\\\\\"priorityLevel\\\\\\\":3200},\\\\\\\"scope\\\\\\\":{\\\\\\\"qosId\\\\\\\":\\\\\\\"qos3100\\\\\\\",\\\\\\\"ueId\\\\\\\":\\\\\\\"ue3100\\\\\\\"}}\\\",\\\"timestamp\\\":\\\"2020-08-01 17:56:07.017744\\\",\\\"status\\\":\\\"200 OK\\\"}\",\n  \"{\\\"requestId\\\":\\\"23343221\\\",\\\"correlationId\\\":\\\"1596304567017739720\\\",\\\"originatorId\\\":\\\"849e6c6b420\\\",\\\"type\\\":\\\"response\\\",\\\"message\\\":\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"about:blank\\\\\\\",\\\\\\\"status\\\\\\\":404,\\\\\\\"detail\\\\\\\":\\\\\\\"org.onap.ccsdk.oran.a1policymanagementservice.exceptions.EntityNotFoundException: Could not find policy: 0f7bb041e1584b1fa17e87520d70a3102\\\\\\\"}\\\",\\\"timestamp\\\":\\\"2020-08-01 17:56:07.017744\\\",\\\"status\\\":\\\"404 NOT_FOUND\\\"}\",\n  \"{\\\"requestId\\\":\\\"23343221\\\",\\\"correlationId\\\":\\\"1596363458549998500\\\",\\\"originatorId\\\":\\\"849e6c6b420\\\",\\\"type\\\":\\\"response\\\",\\\"message\\\":\\\"\\\",\\\"timestamp\\\":\\\"2020-08-02 10:17:38.550324\\\",\\\"status\\\":\\\"201 CREATED\\\"}\",\n  \"{\\\"requestId\\\":\\\"23343221\\\",\\\"correlationId\\\":\\\"1596363458549998501\\\",\\\"originatorId\\\":\\\"849e6c6b421\\\",\\\"type\\\":\\\"response\\\",\\\"message\\\":\\\"\\\",\\\"timestamp\\\":\\\"2020-08-02 10:17:38.550324\\\",\\\"status\\\":\\\"201 CREATED\\\"}\",\n  \"{\\\"requestId\\\":\\\"23343221\\\",\\\"correlationId\\\":\\\"1596363459196978900\\\",\\\"originatorId\\\":\\\"849e6c6b420\\\",\\\"type\\\":\\\"response\\\",\\\"message\\\":\\\"\\\",\\\"timestamp\\\":\\\"2020-08-02 10:17:39.197067\\\",\\\"status\\\":\\\"200 OK\\\"}\",\n  \"{\\\"requestId\\\":\\\"23343221\\\",\\\"correlationId\\\":\\\"1596304565904621535\\\",\\\"originatorId\\\":\\\"849e6c6b420\\\",\\\"type\\\":\\\"response\\\",\\\"message\\\":\\\"\\\",\\\"timestamp\\\":\\\"2020-08-01 17:56:05.905035\\\",\\\"status\\\":\\\"201 CREATED\\\"}\",\n  \"{\\\"requestId\\\":\\\"23343221\\\",\\\"correlationId\\\":\\\"1596304566656253556\\\",\\\"originatorId\\\":\\\"849e6c6b420\\\",\\\"type\\\":\\\"response\\\",\\\"message\\\":\\\"\\\",\\\"timestamp\\\":\\\"2020-08-01 17:56:06.656949\\\",\\\"status\\\":\\\"201 CREATED\\\"}\",\n  \"{\\\"requestId\\\":\\\"23343221\\\",\\\"correlationId\\\":\\\"1596304566656253557\\\",\\\"originatorId\\\":\\\"849e6c6b420\\\",\\\"type\\\":\\\"response\\\",\\\"message\\\":\\\"\\\",\\\"timestamp\\\":\\\"2020-08-01 17:56:06.656949\\\",\\\"status\\\":\\\"201 CREATED\\\"}\",\n  \"{\\\"requestId\\\":\\\"23343221\\\",\\\"correlationId\\\":\\\"1596304566656253758\\\",\\\"originatorId\\\":\\\"849e6c6b422\\\",\\\"type\\\":\\\"response\\\",\\\"message\\\":\\\"\\\",\\\"timestamp\\\":\\\"2020-08-01 17:56:06.656949\\\",\\\"status\\\":\\\"201 CREATED\\\"}\",\n  \"{\\\"requestId\\\":\\\"23343221\\\",\\\"correlationId\\\":\\\"1596304567017739720\\\",\\\"originatorId\\\":\\\"849e6c6b420\\\",\\\"type\\\":\\\"response\\\",\\\"message\\\":\\\"{\\\\\\\"policy_id\\\\\\\":\\\\\\\"0f7bb041e1584b1fa17e87520d70a3000\\\\\\\",\\\\\\\"policytype_id\\\\\\\":\\\\\\\"1\\\\\\\",\\\\\\\"ric_id\\\\\\\":\\\\\\\"ric1\\\\\\\",\\\\\\\"policy_data\\\\\\\":{\\\\\\\"qosObjectives\\\\\\\":{\\\\\\\"priorityLevel\\\\\\\":3000.0},\\\\\\\"scope\\\\\\\":{\\\\\\\"qosId\\\\\\\":\\\\\\\"qos3000\\\\\\\",\\\\\\\"ueId\\\\\\\":\\\\\\\"ue3000\\\\\\\"}},\\\\\\\"service_id\\\\\\\":\\\\\\\"service1\\\\\\\",\\\\\\\"transient\\\\\\\":false,\\\\\\\"status_notification_uri\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"timestamp\\\":\\\"2020-08-01 17:56:07.017744\\\",\\\"status\\\":\\\"200 OK\\\"}\",\n  \"{\\\"requestId\\\":\\\"23343221\\\",\\\"correlationId\\\":\\\"1596304567017739720\\\",\\\"originatorId\\\":\\\"849e6c6b420\\\",\\\"type\\\":\\\"response\\\",\\\"message\\\":\\\"{\\\\\\\"policy_id\\\\\\\":\\\\\\\"0f7bb041e1584b1fa17e87520d70a3100\\\\\\\",\\\\\\\"policytype_id\\\\\\\":\\\\\\\"1\\\\\\\",\\\\\\\"ric_id\\\\\\\":\\\\\\\"ric1\\\\\\\",\\\\\\\"policy_data\\\\\\\":{\\\\\\\"qosObjectives\\\\\\\":{\\\\\\\"priorityLevel\\\\\\\":3100.0},\\\\\\\"scope\\\\\\\":{\\\\\\\"qosId\\\\\\\":\\\\\\\"qos3100\\\\\\\",\\\\\\\"ueId\\\\\\\":\\\\\\\"ue3100\\\\\\\"}},\\\\\\\"service_id\\\\\\\":\\\\\\\"service1\\\\\\\",\\\\\\\"transient\\\\\\\":false,\\\\\\\"status_notification_uri\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"timestamp\\\":\\\"2020-08-01 17:56:07.017744\\\",\\\"status\\\":\\\"200 OK\\\"}\",\n  \"{\\\"requestId\\\":\\\"23343221\\\",\\\"correlationId\\\":\\\"1596304567017739720\\\",\\\"originatorId\\\":\\\"849e6c6b420\\\",\\\"type\\\":\\\"response\\\",\\\"message\\\":\\\"{\\\\\\\"policy_id\\\\\\\":\\\\\\\"0f7bb041e1584b1fa17e87520d70a3101\\\\\\\",\\\\\\\"policytype_id\\\\\\\":\\\\\\\"1\\\\\\\",\\\\\\\"ric_id\\\\\\\":\\\\\\\"ric1\\\\\\\",\\\\\\\"policy_data\\\\\\\":{\\\\\\\"qosObjectives\\\\\\\":{\\\\\\\"priorityLevel\\\\\\\":3200.0},\\\\\\\"scope\\\\\\\":{\\\\\\\"qosId\\\\\\\":\\\\\\\"qos3100\\\\\\\",\\\\\\\"ueId\\\\\\\":\\\\\\\"ue3100\\\\\\\"}},\\\\\\\"service_id\\\\\\\":\\\\\\\"service1\\\\\\\",\\\\\\\"transient\\\\\\\":false,\\\\\\\"status_notification_uri\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"timestamp\\\":\\\"2020-08-01 17:56:07.017744\\\",\\\"status\\\":\\\"200 OK\\\"}\",\n  \"{\\\"requestId\\\":\\\"23343221\\\",\\\"correlationId\\\":\\\"1596304567017739720\\\",\\\"originatorId\\\":\\\"849e6c6b420\\\",\\\"type\\\":\\\"response\\\",\\\"message\\\":\\\"{\\\\\\\"type\\\\\\\":\\\\\\\"about:blank\\\\\\\",\\\\\\\"status\\\\\\\":404,\\\\\\\"detail\\\\\\\":\\\\\\\"org.onap.ccsdk.oran.a1policymanagementservice.exceptions.EntityNotFoundException: Could not find policy: 0f7bb041e1584b1fa17e87520d70a3102\\\\\\\"}\\\",\\\"timestamp\\\":\\\"2020-08-01 17:56:07.017744\\\",\\\"status\\\":\\\"404 NOT_FOUND\\\"}\"\n]\n\n\ncreate service 2 to policy agent via dmaap_mr:\n{\n    \"serverTimeMs\": 17,\n    \"count\": 3\n}200\n\nget result from mr of previous request:\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n100   215  100   215    0     0   6142      0 --:--:-- --:--:-- --:--:--  6142\n[\n  \"{\\\"requestId\\\":\\\"23343221\\\",\\\"correlationId\\\":\\\"1596363458549998500\\\",\\\"originatorId\\\":\\\"849e6c6b420\\\",\\\"type\\\":\\\"response\\\",\\\"message\\\":\\\"OK\\\",\\\"timestamp\\\":\\\"2020-08-02 10:17:38.550324\\\",\\\"status\\\":\\\"200 OK\\\"}\"\n]\n\n\ncreate policies to ric1 \u0026 ric2 \u0026 ric3 with type1 and service1 via dmaa_mr:\n{\n    \"serverTimeMs\": 6,\n    \"count\": 4\n}200\n\nget result from mr of previous request:\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n100   215  100   215    0     0   3839      0 --:--:-- --:--:-- --:--:--  3839\n[\n  \"{\\\"requestId\\\":\\\"23343221\\\",\\\"correlationId\\\":\\\"1596363458549998501\\\",\\\"originatorId\\\":\\\"849e6c6b421\\\",\\\"type\\\":\\\"response\\\",\\\"message\\\":\\\"OK\\\",\\\"timestamp\\\":\\\"2020-08-02 10:17:38.550324\\\",\\\"status\\\":\\\"200 OK\\\"}\"\n]\n\n\nget policy from policy agent via dmaap_mr:\n{\n    \"serverTimeMs\": 0,\n    \"count\": 4\n}200\n\nget result from mr of previous request:\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n100   215  100   215    0     0   9772      0 --:--:-- --:--:-- --:--:--  9772\n[\n  \"{\\\"requestId\\\":\\\"23343221\\\",\\\"correlationId\\\":\\\"1596363459196978900\\\",\\\"originatorId\\\":\\\"849e6c6b420\\\",\\\"type\\\":\\\"response\\\",\\\"message\\\":\\\"OK\\\",\\\"timestamp\\\":\\\"2020-08-02 10:17:39.197067\\\",\\\"status\\\":\\\"200 OK\\\"}\"\n]\n\n\npolicy numbers from ric1:\n7200\n\npolicy numbers from ric2:\n0200\n\npolicy numbers from ric3:\n2200\n```\n\n### Prepare Ecs Data\nScript \u003ccode class=\"code\"\u003eprepareIcsData.sh\u003c/code\u003e 向 ics service 發送 http 請求，並建立相應的資料。\n\n```\n# 執行這個 bash\nbash prepareEcsData.sh\n```\nOutput be like:\n```\nroot@OAM:~/oam/solution/integration/smo/non-rt-ric/data# bash prepareEcsData.sh\nusing ecs port: 8083\nusing protocol: http\n\n\nECS status:\n{\"status\":\"hunky dory\",\"no_of_producers\":0,\"no_of_types\":0,\"no_of_jobs\":0} 200\n\nCreate EiType:\n201\n\nGet EiTypes:\n[\n  \"type1\"\n]\n200\n\n\nGet Individual EiType:\n{\n  \"info_job_data_schema\": {\n    \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n    \"title\": \"STD_Type1_1.0.0\",\n    \"description\": \"EI-Type 1\",\n    \"type\": \"object\"\n  }\n}\n200\n\n\nCreate EiProducer:\n201\n\nGet EiProducers:\n[\n  \"1\"\n]\n200\n\n\nGet Individual EiProducer:\n{\n  \"supported_info_types\": [\n    \"type1\"\n  ],\n  \"info_job_callback_url\": \"http://producer:80/callbacks/job/prod-a\",\n  \"info_producer_supervision_callback_url\": \"http://producer:80/callbacks/supervision/prod-a\"\n}\n200\n\n\nGet Individual EiProducer:\n{\n  \"operational_state\": \"ENABLED\"\n}\n200\n\n\nCreate EiJob Of A Certain Type type1:\n201\n\nGet EiJobs:\n[\n  \"job1\"\n]\n200\n\n\nGet Individual EiJob:\n{\n  \"eiTypeId\": \"type1\",\n  \"jobOwner\": \"ricsim_g3_1\",\n  \"jobDefinition\": {\n    \"jobparam1\": \"value1_job1\",\n    \"jobparam2\": \"value2_job1\",\n    \"jobparam3\": \"value3_job1\"\n  },\n  \"jobResultUri\": \"https://ricsim_g3_1:8185/datadelivery\",\n  \"jobStatusNotificationUri\": \"http://producer:80/\"\n}\n200\n```\n\n開啟瀏覽器: http://localhost:8182/ \n應該就可以看到以下的畫面\n\n\u003e 我是用 VS code SSH 連線進行開發，所以如果IDE沒有跳出轉發通知，就會需要我們手動轉發連接埠(port:8182) [color=#F4B400]\n\n![](https://hackmd.io/_uploads/S1FkHlC-T.png =70%x)\n\n![](https://hackmd.io/_uploads/r1blrgRW6.png =70%x)\n\n![](https://hackmd.io/_uploads/SJNxrl0Z6.png =70%x)\n\n\u003e 可以更改 yaml 檔來調整 Non-RT RIC 的 Policy\n\n\n## Simulated O-DU and O-RU according to O-RAN Hybrid Architecture\n```cmd=\ncd oam/solution/integration\ndocker-compose -f network/docker-compose.yml up -d\n```\n\n```cmd=\ndocker-compose -f network/docker-compose.yml restart ntsim-ng-o-du-1122\n#必須重新啟動2次 container 才可以正式被加入管理列表\ndocker-compose -f network/docker-compose.yml restart ntsim-ng-o-du-1122\n```\n```\npython3 network/config.py \n```\n```\n$ python3 network/config.py                          \n# 會跑出下列資訊\n/usr/lib/python3/dist-packages/urllib3/connectionpool.py:999: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings\n  warnings.warn(\nSet highstreet-O-RU-11222 True\n/usr/lib/python3/dist-packages/urllib3/connectionpool.py:999: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings\n  warnings.warn(\nSet highstreet-O-RU-11221 True\n/usr/lib/python3/dist-packages/urllib3/connectionpool.py:999: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings\n  warnings.warn(\nSet highstreet-O-DU-1122 True\n/usr/lib/python3/dist-packages/urllib3/connectionpool.py:999: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings\n  warnings.warn(\nSet highstreet-O-RU-11223 True\n```\n\n\u003e 如都顯示 “True” 表示通過 SDNR(SMO) 對 NETCONF server(NF)的 config成功了。\n\n## 開啟O1 Dashboard Web UI(ONAP based)\n\n瀏覽器輸入：https://\u003cyour-public-ip\u003e:8453/\n```cmd=\nusername: admin\npassword: Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U \n```\n就可以看到 SMO 的畫面了~ \n    \n![](https://hackmd.io/_uploads/rk5tnw116.png)\n\n## solution終止（請依順序輸入指令）\n```\nsudo docker-compose -f network/docker-compose.yml down\nsudo docker-compose -f smo/oam/docker-compose.yml down\nsudo docker-compose -f smo/onap-policy/docker-compose.yml down\nsudo docker-compose -f smo/non-rt-ric/docker-compose.yml down\nsudo docker-compose -f smo/common/docker-compose.yml down\n```\n## 參考資料\n* [D-Release Integration - Test Environment](https://wiki.o-ran-sc.org/display/OAM/D-Release+Integration+-+Test+Environment)\n* [O1 Simulator and lightweight ONAP based SMO deployment](https://wiki.opennetworking.org/display/COM/O1+Simulator+and+lightweight+ONAP+based+SMO+deployment)\n* [O-RAN SC Release D - Build](https://wiki.o-ran-sc.org/display/RICNR/Release+D+-+Build)\n* [Closed Loop Use Case Testing](https://wiki.o-ran-sc.org/pages/viewpage.action?pageId=35881638)\n\n### 4. Demo Recording\t\nPlan:\n- What is the SMO package \n  - smo-package1：https://wiki.o-ran-sc.org/download/attachments/47746045/.xdp_smo-package1.mp4?version=1\u0026modificationDate=1648066446155\u0026api=v2\n  - smo-package2: https://wiki.o-ran-sc.org/download/attachments/47746045/.xdp_smo-package2.mp4?version=1\u0026modificationDate=1648066105178\u0026api=v2\n  - smo-package3: https://wiki.o-ran-sc.org/download/attachments/47746045/.xdp_smo-package3.mp4?version=1\u0026modificationDate=1648066291100\u0026api=v2\n- What is ONAP Python SDK\nONAP-Python-SDK4: https://wiki.o-ran-sc.org/download/attachments/47746045/onappython-sdk.mp4?version=1\u0026modificationDate=1647618959002\u0026api=v2\n  - What is ORAN Python SDK\n  - How to execute the SMO usecase tests\n  - SMO Nomad/ephemeral CICD jenkins\n\n## 參考\nhttps://wiki.o-ran-sc.org/display/OAM/OAM+Architecture#\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthc1006%2Fonap-auto-deploy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthc1006%2Fonap-auto-deploy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthc1006%2Fonap-auto-deploy/lists"}