PCEI R6 API Document
PCEI R4 API Document is located at this link.
PCEI Release 5 APIs
North Bound Interface APIs for:
- Kubernetes Edge Cluster Registration into Multi-Cluster Orchestrator (ONAP/EMCO). This API will allow to retrieve the K8S cluster config from Git and onboard it onto the orchestrator’s cluster provider registry.
- Terraform Plan Execution against target providers (Cloud, Equinix, Openstack). This API will allow to retrieve the Terraform plans from a Git repository and run them from the orchestrator’s workflow engine (CDS).
- Helm Chart Onboarding into ONAP for Service and App Registration. This API will allow to retrieve Helm charts from a Git repository and create a Service and Application definitions within the Orchestrator for a specific tenant.
- Service Instance creation and App deployment onto target Kubernetes clusters. This API will allow to create Service Instances based on the Services/Apps defined (as in point 3 above) in the orchestrator and deploy the Apps onto the target Kubernetes clusters (onboarded using point 1 above).
Kubernetes Edge Cluster Registration API
# You can refer to the below EMCO REST API link to get more details about the JSON payload # https://wiki.onap.org/display/DW/V2+API+Specification # Note:- You should update the attribute values for USER_INPUT_XXX parameters # USER_INPUT_EMCO_V2_API_URL_PREFIX : here update the amcop installed machine ip with portno(30480). # ex : http://<amcop server ip>>:30480/v2 # USER_INPUT_GIT_URL - git project url where kubconfig file exists # ex : https://gitlab.com/api/v4/projects/27142906/repository/files/edge-k8s-pcei-azure-config/raw?ref=development # USER_INPUT_GIT_DOWNLOAD_FOLDER : This shouldn't be modified. Always use "/opt/app/onap/blueprints/deploy/kubeconfig". # USER_INPUT_GIT_ACCESS_TOKEN - refer main readme file for "how to generate git access token" steps. $ vi request-payload.json { "actionIdentifiers": { "mode": "sync", "blueprintName": "emco-api-executor", "blueprintVersion": "1.0.0", "actionName": "emco-k8s-cluster-register-workflow" }, "payload": { "emco-k8s-cluster-register-workflow-request": { "emco-k8s-cluster-register-workflow-properties": { "emco-v2-api-url-prefix": "USER_INPUT_EMCO_V2_API_URL_PREFIX", "git-url": "USER_INPUT_GIT_URL", "git-access-token": "USER_INPUT_GIT_ACCESS_TOKEN", "git-download-folder": "/opt/app/onap/blueprints/deploy/kubeconfig", "emco-v2-cluster-provider-parameters": { "cluster-providers-payload": { "metadata": { "name": "USER_INPUT_NAME", "description": "USER_INPUT_DESCRIPTION", "userData1": "USER_INPUT_USERDATA1", "userData2": "USER_INPUT_USERDATA2" } } }, "emco-v2-cluster-parameters": { "cluster-providers-cluster-payload": { "metadata": { "name": "USER_INPUT_NAME", "description": "USER_INPUT_DESCRIPTION", "userData1": "USER_INPUT_USERDATA1", "userData2": "USER_INPUT_USERDATA2" } } }, "emco-v2-cluster-label-parameters": { "cluster-label-payload": { "label-name": "USER_INPUT_LABEL_NAME" } } } } }, "commonHeader": { "subRequestId": "143748f9-3cd5-4910-81c9-a4601ff2ea58", "requestId": "e5eb1f1e-3386-435d-b290-d49d8af8db4c", "originatorId": "SDNC_DG" } }
Terraform Plan Execution API
# Note that "terraform-action" attribute value should be "apply" # USER_INPUT_CDS_PY_EXEC_POD_IP : Use below command to get the CDS pyexecutor IP # kubectl get pods -n onap -o wide | grep dev-cds-py-executor | awk '{print $6}' # USER_INPUT_GIT_URL ex . "https://gitlab.com/api/v4" # USER_INPUT_GIT_ACCESS_TOKEN - refer main readme to generate the git access token. # USER_INPUT_GIT_PROJECT_ID : Git terraform project id. ex. 26901776 # USER_INPUT_GIT_BRANCH - git branch name ex. "development" # USER_INPUT_GIT_DOWNLOAD_FOLDER - Always give "/opt/app/onap/blueprints/deploy" # USER_INPUT_GIT_ARCHIVE_FILE_NAME - any tar file name ex. "terraform-plans-poc.tar.gz" # USER_INPUT_TERRAFORM_VARS_FILE_NAME - override file from git project ex. "terraform.tfvars" # USER_INPUT_TERRAFORM_PLAN_FOLDER - give correct git terraform plan folder name ex ."demo-azure-connectivity" { "commonHeader": { "originatorId": "System", "requestId": "123456", "subRequestId": "1234-12234" }, "actionIdentifiers": { "blueprintName": "terraform-plan-executor", "blueprintVersion": "1.0.0", "actionName": "remote-python", "mode": "sync" }, "payload": { "remote-python-request": { "cds-py-exec-pod-ip": "USER_INPUT_CDS_PY_EXEC_POD_IP", "git-url": "USER_INPUT_GIT_URL", "git-access-token": "USER_INPUT_GIT_ACCESS_TOKEN", "git-project-id": "USER_INPUT_GIT_PROJECT_ID", "git-branch": "USER_INPUT_GIT_BRANCH", "git-download-folder": "/opt/app/onap/blueprints/deploy", "git-archive-file-name": "USER_INPUT_GIT_ARCHIVE_FILE_NAME", "terraform-var-file-name": "USER_INPUT_TERRAFORM_VARS_FILE_NAME", "terraform-plan-folder": "USER_INPUT_TERRAFORM_PLAN_FOLDER", "terraform-variable-override": { "USER_INPUT_VAR_NAME_1": "USER_INPUT_VAR_VALUE_1", "USER_INPUT_VAR_NAME_2": "USER_INPUT_VAR_VALUE_2" }, "terraform-environment-variables": { "ARM_SUBSCRIPTION_ID": "USER_INPUT_ARM_SUBSCRIPTION_ID", "ARM_CLIENT_ID": "USER_INPUT_ARM_CLIENT_ID", "ARM_CLIENT_SECRET": "USER_INPUT_ARM_CLIENT_SECRET", "ARM_TENANT_ID": "USER_INPUT_ARM_TENANT_ID", "ARM_ACCESS_KEY": "USER_INPUT_ARM_ACCESS_KEY" }, "terraform-action": "apply", "terraform-workspace-name": "USER_INPUT_TERRAFORM_WORKSPACE_NAME" } } } { "commonHeader": { "originatorId": "System", "requestId": "123456", "subRequestId": "1234-12234" }, "actionIdentifiers": { "blueprintName": "terraform-plan-executor", "blueprintVersion": "1.0.0", "actionName": "remote-python", "mode": "sync" }, "payload": { "remote-python-request": { "cds-py-exec-pod-ip": "USER_INPUT_CDS_PY_EXEC_POD_IP", "git-url": "USER_INPUT_GIT_URL", "git-access-token": "USER_INPUT_GIT_ACCESS_TOKEN", "git-project-id": "USER_INPUT_GIT_PROJECT_ID", "git-branch": "USER_INPUT_GIT_BRANCH", "git-archive-file-name": "USER_INPUT_GIT_ARCHIVE_FILE_NAME", "git-download-folder": "USER_INPUT_GIT_DOWNLOAD_FOLDER", "terraform-plan-folder": "USER_INPUT_TERRAFORM_PLAN_FOLDER", "terraform-var-file-name": "USER_INPUT_TERRAFORM_VARS_FILE_NAME", "terraform-environment-variables": { }, "terraform-variable-override": { equinix_client_id": "USER_INPUT_EQUINIX_CLIENT_ID", "equinix_client_secret": "USER_INPUT_EQUINIX_CLIENT_SECRET", "equinix_port_name": "USER_INPUT_EQUINIX_PORT_NAME", "aws_access_key": "USER_INPUT_AWS_ACCESS_KEY", "aws_secret_key": "USER_INPUT_AWS_SECRET_KEY", "aws_region": "USER_INPUT_AWS_REGION", "aws_metro_code":"USER_INPUT_AWS_METRO_CODE", "aws_account_id":"USER_INPUT_AWS_ACCOUNT_ID" }, "terraform-action": "apply", "terraform-workspace-name": "USER_INPUT_TERRAFORM_WORKSPACE_NAME" } } } { "commonHeader": { "originatorId": "System", "requestId": "123456", "subRequestId": "1234-12234" }, "actionIdentifiers": { "blueprintName": "terraform-plan-executor", "blueprintVersion": "1.0.0", "actionName": "remote-python", "mode": "sync" }, "payload": { "remote-python-request": { "cds-py-exec-pod-ip": "USER_INPUT_CDS_PY_EXEC_POD_IP", "git-url": "USER_INPUT_GIT_URL", "git-access-token": "USER_INPUT_GIT_ACCESS_TOKEN", "git-project-id": "USER_INPUT_GIT_PROJECT_ID", "git-branch": "USER_INPUT_GIT_BRANCH", "git-archive-file-name": "USER_INPUT_GIT_ARCHIVE_FILE_NAME", "git-download-folder": "USER_INPUT_GIT_DOWNLOAD_FOLDER", "terraform-plan-folder": "USER_INPUT_TERRAFORM_PLAN_FOLDER", "terraform-var-file-name": "USER_INPUT_TERRAFORM_VARS_FILE_NAME", "terraform-environment-variables": { "OS_AUTH_URL": "USER_INPUT_OS_AUTH_URL", "OS_USERNAME": "USER_INPUT_OS_USERNAME", "OS_PASSWORD": "USER_INPUT_OS_PASSWORD", "OS_REGION_NAME": "USER_INPUT_OS_REGION_NAME", "OS_PROJECT_NAME": "USER_INPUT_OS_PROJECT_NAME", "OS_PROJECT_DOMAIN_NAME": "USER_INPUT_OS_PROJECT_DOMAIN_NAME", "OS_USER_DOMAIN_NAME": "USER_INPUT_OS_USER_DOMAIN_NAME", "OS_IDENTITY_API_VERSION": "USER_INPUT_OS_IDENTITY_API_VERSION" }, "terraform-variable-override": { "USER_INPUT_VARIABLE_NAME": "USER_INPUT_VARIABLE_VALUE" }, "terraform-action": "apply", "terraform-workspace-name": "USER_INPUT_TERRAFORM_WORKSPACE_NAME" } } }
Helm Chart Onboarding for Service and App Registration
# You can refer to the below EMCO REST API link to get more details about the JSON payload # https://wiki.onap.org/display/DW/V2+API+Specification # Note:- You should update the attribute values for USER_INPUT_XXX parameters # USER_INPUT_AMCOP_APP_API_URL : here update the amcop installed machine ip with portno(30480). # ex : http://<amcop server ip>>:30480/middleend # USER_INPUT_CDS_PY_EXEC_POD_IP : Use below command to get the CDS pyexecutor IP # kubectl get pods -n onap -o wide | grep dev-cds-py-executor | awk '{print $6}' # USER_INPUT_GIT_URL - helm chart git repo url ex. "https://gitlab.com/api/v4" # USER_INPUT_GIT_PROJECT_ID - project id ex."26902714" # USER_INPUT_GIT_BRANCH - git branch name ex. "main" # USER_INPUT_GIT_ARCHIVE_FILE_NAME - any tar file name ex. "helm-charts-poc.tar.gz" # USER_INPUT_GIT_ACCESS_TOKEN - refer main readme to generate the git access token. # USER_INPUT_PROJECT_NAME - Enter the existing amcop project name. # USER_INPUT_SERVICE_NAME - Enter the service name ex:"PCEI-AZURE-IOT-SVC" $ vi request-payload.json { "commonHeader": { "originatorId": "System", "requestId": "12345678", "subRequestId": "1234-122346" }, "actionIdentifiers": { "mode": "sync", "blueprintName": "helm-chart-processor", "blueprintVersion": "9.0.1", "actionName": "helm-chart-prepare" }, "payload": { "helm-chart-prepare-request": { "cds-py-exec-pod-ip": "USER_INPUT_CDS_PY_EXEC_POD_IP", "git-url": "USER_INPUT_GIT_URL", "git-access-token": "USER_INPUT_GIT_ACCESS_TOKEN", "git-project-id": "USER_INPUT_GIT_PROJECT_ID", "git-branch-name": "USER_INPUT_GIT_BRANCH", "git-download-folder": "/opt/app/onap/python/test001", "git-archive-file-name": "USER_INPUT_GIT_ARCHIVE_FILE_NAME", "amcop-middle-end-properties": { "create-composit-app-api-url": "USER_INPUT_AMCOP_APP_API_URL", "amcop-middle-end-username": "", "amcop-middle-end-password": "" }, "amcop-service-information": { "project-name": "USER_INPUT_PROJECT_NAME", "service-name": "USER_INPUT_SERVICE_NAME", "service-description": "USER_INPUT_SERVICE_DESCRIPTION" }, "helm-charts-info": [{ "helm-chart-folder": "USER_INPUT_HELM_CHART_FOLDER", "helm-chart-file-name": "USER_INPUT_HELM_CHART_FILE_NAME", "helm-values-yaml-override-properties": { "resources.samll.limits.cpu": "USER_INPUT_RESOURCES_SMALL_LIMITES_CPU", "service.type": "USER_INPUT_SERVICE_TYPE", "service.internalPort": "USER_INPUT_SERVICE_INTERNALPORT" } }] } } }
Service Instance creation and App deployment onto target Kubernetes clusters API
{ "actionIdentifiers": { "mode": "sync", "blueprintName": "composite-app-deploy-processor", "blueprintVersion": "1.0.0", "actionName": "simple-composite-app-deploy-workflow" }, "commonHeader": { "subRequestId": "143748f9-3cd5-4910-81c9-a4601ff2dc58", "requestId": "e5eb1f1e-3386-435d-b290-d49d8af8da4c", "originatorId": "SDNC_DG" }, "payload": { "simple-composite-app-deploy-workflow-request": { "composite-app-deploy-input-params": { "composite-application-parameters": { "service-instance-name": "USER_INPUT_TARGET_CLUSTER_NAME", "service-instance-description": "USER_INPUT_TARGET_CLUSTER_DESCRIPTION", "service-instance-version": "USER_INPUT_TARGET_CLUSTER_VERSION", "composite-app": "USER_INPUT_COMPOSITE_APP_NAME", "composite-app-version": "USER_INPUT_COMPOSITE_APP_VERSION", "composite-profile": "USER_INPUT_COMPOSITE_PROFILE" }, "application-data-parameters": [{ "app-metadata-parameters": { "app-name": "USER_INPUT_APP_NAME" }, "target-cluster-provider-parameters": [{ "cluster-provider-name": "USER_INPUT_PROVIDER_NAME", "clusters": [{ "name": "USER_INPUT_CLUSTER_NAME" }] }] }], "application-override-parameters": [{ "app-name": "USER_INPUT_APP_NAME", "values": { "USER_INPUT_VARIABLE_NAME": "USER_INPUT_VARIABLE_VALUE" } }] }, "amcop-middle-end-properties": { "deploy-intent-group-api-url": "USER_INPUT_AMCOP_APP_API_URL", "amcop-middle-end-username": "", "amcop-middle-end-password": "" }, "amcop-service-project-name": "USER_INPUT_AMCOP_SERVICE_PROJECT_NAME" } } }
PCEI R5 API Postman Collection
https://gitlab.com/akraino-pcei-onap-cds/equinix-pcei-poc/-/tree/main/postman-collections
PCEI Release 6 APIs
In Release 6 PCEI adds one more API - Ansible Execution API.
Ansible Execution API
{ "commonHeader": { "originatorId": "System", "requestId": "123456", "subRequestId": "1234-12234" }, "actionIdentifiers": { "blueprintName": "ansible-playbook-executor", "blueprintVersion": "1.0.0", "actionName": "execute-ansible-playbook", "mode": "sync" }, "payload": { "execute-ansible-playbook-request": { "implementation": { "timeout": 3000 }, "cds-py-exec-pod-ip": "USER_INPUT_PY_EXECUTOR_IP", "py-exec-grcp-timeout": "USER_INPUT_CDS_PY_EXEC_GRPC_TIMEOUT_INTGER_MILLI_SECOND", "workflow-name": "execute-ansible-playbook", "skip-input-params-keys-validation": ["ansible-cli-env-variables"], "input-params": { "ssh-key-git-repository": { "git-user": "USER_INPUT_GIT_USERNAME", "git-access-token": "USER_INPUT_GIT_ACCESS_TOKEN", "git-url": "USER_INPUT_GIT_URL", "git-branch": "USER_INPUT_GIT_BRANCH", "git-download-folder": "/opt/app/onap/blueprints", "git-project-folder": "USER_INPUT_GIT_PROJECT_FOLDER", "ssh-key-file-name": "USER_INPUT_KEY_FILE" }, "ansible-scripts-git-repository": { "git-user": "USER_INPUT_GIT_USERNAME", "git-access-token": "USER_INPUT_GIT_ACCESS_TOKEN", "git-url": "USER_INPUT_GIT_URL", "git-branch": "USER_INPUT_GIT_BRANCH", "git-download-folder": "/opt/app/onap/blueprints", "git-project-folder": "USER_INPUT_GIT_PROJECT_FOLDER", "ansible-scripts-folder": "USER_INPUT_ANSIBLE_SCRIPT_FOLDER", "ansible-main-yaml-file-name": "USER_INPUT_ANSIBLE_YAML_FILE_NAME" }, "ansible-cli-env-variables": { "target_ip": "USER_INPUT_IP_ADDRESS", "target_host_user": "USER_INPUT_LOGIN_USERNAME", "bgp_edge_address": "USER_INPUT_BGP_EDGE_ADDRESS", "localhost_kud_config_realtive_download_folder": ".kube", "git_url": "USER_INPUT_GIT_URL_WITHOUT_HTTPS", "git_branch": "USER_INPUT_GIT_BRANCH", "remote_host_relative_clone_folder": "USER_INPUT_CLONE_TARGET_DIR", "git_user": "USER_INPUT_GIT_USERNAME", "git_accesstoken": "USER_INPUT_GIT_ACCESS_TOKEN", "git_user_email": "USER_INPUT_GIT_EMAIL_ID", "customer_id": "USER_INPUT_CUSTOMER_ID" } } } } }