# app-distributed-cloud (Prototype) This tutorial provides a step-by-step guide on containerizing DC Services using the app-distributed-cloud prototype. > **Note:** All dcmanager operations are not fully tested or operational. ## Disable Service Management Disable the dcmanager services on the platform ```bash source /etc/platform/openrc sudo sm-unmanage service dcmanager-manager sudo sm-unmanage service dcmanager-api sudo sm-unmanage service dcmanager-audit sudo sm-unmanage service dcmanager-audit-worker sudo sm-unmanage service dcmanager-orchestrator sudo sm-unmanage service dcmanager-state sudo sm-unmanage service dcorch-engine sudo sm-unmanage service dcorch-engine-worker sudo sm-unmanage service dcorch-sysinv-api-proxy sudo sm-unmanage service dcorch-patch-api-proxy sudo sm-unmanage service dcorch-identity-api-proxy sudo sm-unmanage service dcdbsync-api sudo pkill -f ^".*/bin/dcmanager.*" sudo pkill -f ^".*/bin/dcorch.*" sudo pkill -f ^".*/bin/dcdbsync.*" ``` ## Platform Setup ```bash system host-label-assign controller-0 starlingx.io/distributed-cloud=enabled system host-label-assign controller-1 starlingx.io/distributed-cloud=enabled ``` > **Note:** If you have issues with downloading the nginx image for dc-vault-nginx, assign the distributed-cloud label just for the controller-0 ## Create the namespace and root-ca secret ```bash # Create distributed-cloud namespace kubectl create namespace distributed-cloud # Create system-local-ca secret cp /etc/ssl/certs/dc-adminep-root-ca.pem /home/sysadmin/root-ca.pem kubectl -n distributed-cloud create secret generic root-ca --from-file=ca.crt=/home/sysadmin/root-ca.pem ``` ## Distributed Cloud Application Deployment (development) ```bash # Configure Docker Image # Create or download the docker image used for the dcmanager pods DOCKER_IMAGE=registry.local:9001/docker.io/starlingx/stx-distributed-cloud:master-debian-stable-latest sudo docker login registry.local:9001 sudo docker image pull sudo docker image tag ${DOCKER_IMAGE} sudo docker image push ${DOCKER_IMAGE} # Upload the prototype system application-upload /usr/local/share/applications/helm/distributed-cloud-25.09-0.tgz ``` ```bash # Set Password Variables ADMIN_KS_PASSWORD=$(keyring get CGCS admin) RABBITMQ_PASSWORD=$(keyring get amqp rabbit) DCMANAGER_DB_PASSWORD=$(keyring get dcmanager database) DCMANAGER_KS_PASSWORD=$(keyring get dcmanager services) DCORCH_DB_PASSWORD=$(keyring get dcorch database) DCORCH_KS_PASSWORD=$(keyring get dcorch services) # Create dcmanager and dcorch overrides cat<dcmanager.yaml images: tags: dcmanager: ${DOCKER_IMAGE} ks_user: ${DOCKER_IMAGE} ks_service: ${DOCKER_IMAGE} ks_endpoints: ${DOCKER_IMAGE} dcmanager_db_sync: ${DOCKER_IMAGE} db_init: ${DOCKER_IMAGE} db_drop: ${DOCKER_IMAGE} pullPolicy: Always pod: image_pull_secrets: default: - name: default-registry-key tolerations: dcmanager: enabled: true conf: dcmanager: DEFAULT: log_config_append: /etc/dcmanager/logging.conf transport_url: rabbit://guest:${RABBITMQ_PASSWORD}@controller.internal:5672 auth_strategy: keystone playbook_timeout: 3600 use_usm: False workers: 1 orch_workers: 1 state_workers: 1 audit_workers: 1 audit_worker_workers: 1 cache: auth_uri: http://controller.internal:5000/v3 admin_tenant: admin admin_username: admin admin_password: ${ADMIN_KS_PASSWORD} endpoint_cache: auth_uri: http://controller.internal:5000/v3 auth_plugin: password username: dcmanager password: ${DCMANAGER_KS_PASSWORD} project_name: services user_domain_name: Default project_domain_name: Default http_connect_timeout: 15 database: connection_recycle_time: 3600 max_pool_size: 105 max_overflow: 100 keystone_authtoken: auth_version: v3 auth_type: password dependencies: static: api: jobs: - dcmanager-ks-user - dcmanager-ks-service - dcmanager-ks-endpoints ks_endpoints: jobs: - dcmanager-ks-user - dcmanager-ks-service endpoints: cluster_domain_suffix: cluster.local oslo_db: auth: admin: username: admin-dcmanager password: ${DCMANAGER_DB_PASSWORD} dcmanager: username: admin-dcmanager password: ${DCMANAGER_DB_PASSWORD} hosts: default: postgresql host_fqdn_override: default: controller.internal port: postgresql: default: 5432 path: /dcmanager scheme: postgresql+psycopg2 oslo_messaging: auth: admin: username: guest password: ${RABBITMQ_PASSWORD} dcmanager: username: guest password: ${RABBITMQ_PASSWORD} hosts: default: rabbitmq host_fqdn_override: default: controller.internal path: / scheme: rabbit port: amqp: default: 5672 http: default: 15672 identity: name: keystone auth: admin: username: admin password: ${ADMIN_KS_PASSWORD} region_name: RegionOne project_name: admin user_domain_name: Default project_domain_name: Default dcmanager: role: admin username: dcmanager password: ${DCMANAGER_KS_PASSWORD} region_name: RegionOne project_name: services user_domain_name: Default project_domain_name: Default hosts: default: keystone-api public: keystone host_fqdn_override: default: controller.internal path: default: /v3 scheme: default: http port: api: default: 80 internal: 5000 dcmanager: name: dcmanager hosts: default: dcmanager-api public: dcmanager host_fqdn_override: default: null path: default: /v1.0 scheme: default: 'http' port: api: default: 8119 public: 80 EOF cat<dcorch.yaml images: tags: dcorch: ${DOCKER_IMAGE} ks_user: ${DOCKER_IMAGE} ks_service: ${DOCKER_IMAGE} ks_endpoints: ${DOCKER_IMAGE} dcorch_db_sync: ${DOCKER_IMAGE} db_init: ${DOCKER_IMAGE} db_drop: ${DOCKER_IMAGE} pullPolicy: Always pod: image_pull_secrets: default: - name: default-registry-key tolerations: dcorch: enabled: true replicas: dcorch_engine_worker: 1 dcorch_sysinv_api_proxy: 1 keystone_api_proxy: 1 dcorch_patch_api_proxy: 1 dcorch_usm_api_proxy: 1 conf: dcorch: DEFAULT: log_config_append: /etc/dcorch/logging.conf transport_url: rabbit://guest:${RABBITMQ_PASSWORD}@controller.internal:5672 auth_strategy: keystone playbook_timeout: 3600 use_usm: False endpoint_cache: password: ${DCMANAGER_KS_PASSWORD} database: connection_recycle_time: 3600 max_pool_size: 105 max_overflow: 100 keystone_authtoken: auth_version: v3 auth_type: password dependencies: static: api: jobs: - dcorch-ks-user - dcorch-ks-service - dcorch-ks-endpoints ks_endpoints: jobs: - dcorch-ks-user - dcorch-ks-service endpoints: cluster_domain_suffix: cluster.local oslo_db: auth: admin: username: admin-dcorch password: ${DCORCH_DB_PASSWORD} dcorch: username: admin-dcorch password: ${DCORCH_DB_PASSWORD} dcmanager: username: admin-dcmanager password: ${DCMANAGER_DB_PASSWORD} hosts: default: postgresql host_fqdn_override: default: controller.internal port: postgresql: default: 5432 path: /dcorch scheme: postgresql+psycopg2 oslo_messaging: auth: admin: username: guest password: ${RABBITMQ_PASSWORD} dcmanager: username: guest password: ${RABBITMQ_PASSWORD} hosts: default: rabbitmq host_fqdn_override: default: controller.internal path: / scheme: rabbit port: amqp: default: 5672 http: default: 15672 identity: name: keystone auth: admin: username: admin password: ${ADMIN_KS_PASSWORD} region_name: RegionOne project_name: admin user_domain_name: Default project_domain_name: Default dcorch: role: admin username: dcorch password: ${DCORCH_KS_PASSWORD} region_name: RegionOne project_name: services user_domain_name: Default project_domain_name: Default hosts: default: keystone-api public: keystone host_fqdn_override: default: controller.internal path: default: /v3 scheme: default: http port: api: default: 80 internal: 5000 dcorch: name: dcorch hosts: default: dcorch-api public: dcorch host_fqdn_override: default: null path: default: /v1.0 scheme: default: 'http' port: api: default: 8118 public: 80 EOF ``` ```bash system helm-override-update distributed-cloud dcmanager distributed-cloud --values dcmanager.yaml system helm-override-update distributed-cloud dcorch distributed-cloud --values dcorch.yaml system helm-override-show distributed-cloud dcmanager distributed-cloud system helm-override-show distributed-cloud dcorch distributed-cloud ``` ## Apply app-distributed-cloud ```bash system application-apply distributed-cloud system application-show distributed-cloud ``` ## To remove ```bash system application-remove distributed-cloud system application-delete distributed-cloud ``` ## Check dcmanager endpoints ```bash openstack endpoint list | grep dcmanager ``` ## Check if dcmanager-api endpoint works ```bash kubectl get svc dcmanager-api -n distributed-cloud kubectl get endpoints dcmanager-api -n distributed-cloud # Get Token openstack token issue curl -i http:///v1.0/subclouds -X GET -H "Content-Type: application/json" -H "Accept: application/json" -H "X-Auth-Token:${TOKEN}" ``` ## Configure dcmanager-client Edit file: /usr/lib/python3/dist-packages/dcmanagerclient/api/v1/client.py ```python _DEFAULT_DCMANAGER_URL = ( "http://dcmanager-api.distributed-cloud.svc.cluster.local:8119/v1.0" ) # delete if not dcmanager_url: to always set default dcmanager_url = _DEFAULT_DCMANAGER_URL ``` ## Check dcmanager-manager is working ```bash dcmanager subcloud-group add --name test dcmanager subcloud update --group 2 subcloud2-stx-latest ```