This skill provides image automation capabilities for Huawei Cloud SWR (Software Repository for Container) using the hcloud CLI, including cross-region image sync and trigger-based auto-deployment.
Architecture: hcloud CLI → SWR Service API → SyncRepo/Trigger/SyncJob/SyncRegion resources
Related Skills:
huawei-cloud-swr-image-management - Image lifecycle management (namespaces, repos, tags, auth, quotas)
huawei-cloud-swr-image-governance - Image governance (permissions, retention, sharing, tags, immutable rules)
huawei-cloud-swr-enterprise-instance - Enterprise instance management
Configure auto-sync to replicate images across regions on push
Manually sync specific image tags to target regions
List available sync target regions
Check sync job execution status
Create and manage triggers for auto-deploy to CCE/CCI workloads
Enable/disable triggers and update trigger configurations
Typical Use Cases:
hcloud version to verify installationprintf "y\n" | hcloud version to accept privacy statementValid Huawei Cloud credentials (AK/SK mode)
Security Rules:
echo $HUAWEI_CLOUD_AK or echo $HUAWEI_CLOUD_SK to check credentialsHUAWEI_CLOUD_AK, HUAWEI_CLOUD_SK, HUAWEI_CLOUD_REGIONConfiguration Method (Environment Variables Only):
bash
export HUAWEI_CLOUD_AK=<your-ak>
export HUAWEI_CLOUD_SK=<your-sk>
export HUAWEI_CLOUD_REGION=cn-north-4
⚠️ Important Security Notes:
API ActionPermissionPurposeswr:sync:createCreate sync repoConfigure cross-region image syncswr:sync:deleteDelete sync repoRemove sync configurationswr:sync:listList sync reposQuery auto-sync configurationsswr:syncmanual:createManual syncTrigger manual image syncswr:syncregion:listList sync regionsQuery available sync target regionsswr:syncjob:getGet sync job statusCheck sync execution statusswr:trigger:createCreate triggerSet up auto-deploy triggerswr:trigger:listList triggersQuery trigger configurationsswr:trigger:getGet triggerView specific trigger detailsswr:trigger:updateUpdate triggerModify trigger configurationswr:trigger:deleteDelete triggerRemove trigger configuration
See IAM Permission Policies for complete policy JSON.
Permission Failure Handling:
references/iam-policies.mdSee Task: Image Sync for detailed workflows.
bash
# List available sync target regions
hcloud SWR ListSyncRegions --cli-region=cn-north-4
# Configure auto-sync for a repository to target region
hcloud SWR CreateImageSyncRepo --namespace=group-dev --repository=my-app --remoteRegionId=cn-east-3 --remoteNamespace=group-dev --override=false --syncAuto=true --cli-region=cn-north-4
# List auto-sync configurations for a repository
hcloud SWR ListImageAutoSyncReposDetails --namespace=group-dev --repository=my-app --cli-region=cn-north-4
# Delete auto-sync configuration
hcloud SWR DeleteImageSyncRepo --namespace=group-dev --repository=my-app --remoteRegionId=cn-east-3 --remoteNamespace=group-dev --cli-region=cn-north-4
Auto Sync Behavior: When syncAuto=true, every new image push to the source repository automatically triggers a sync to the target region. When syncAuto=false, sync only occurs on manual trigger.
bash
# Manually sync specific image tags to target region
hcloud SWR CreateManualImageSyncRepo --namespace=group-dev --repository=my-app --remoteRegionId=cn-east-3 --remoteNamespace=group-dev --imageTag.1=v1.0 --imageTag.2=v2.0 --override=false --cli-region=cn-north-4
⚠️ Important: --imageTag uses indexed array format, NOT plain value format:
--imageTag.1=v1.0 --imageTag.2=v2.0--imageTag=v1.0 (missing index)--imageTag=v1.0,v2.0 (comma-separated not supported)bash
# List all regions available as sync targets
hcloud SWR ListSyncRegions --cli-region=cn-north-4
Response Format (verified against actual API):
json
[
{
"regionID": "cn-north-4"
}
Returns all regions where you can sync images. Use the regionID field value as the --remoteRegionId parameter.
bash
# Check sync job status
hcloud SWR ShowSyncJob --namespace=group-dev --repository=my-app --cli-region=cn-north-4
Response format to be verified. Use --help for parameter details.
See Task: Trigger Management for detailed workflows.
bash
# Create a trigger for auto-deploy to CCE
hcloud SWR CreateTrigger --namespace=group-dev --repository=my-app --name=deploy-trigger --trigger_type=all --condition=".*" --action=update --app_type=deployments --application=my-deployment --cluster_ns=default --enable=true --trigger_mode=cce --cluster_id=<cluster-id> --cluster_name=<cluster-name> --cli-region=cn-north-4
# List all triggers for a repository
hcloud SWR ListTriggersDetails --namespace=group-dev --repository=my-app --cli-region=cn-north-4
# Show trigger details
hcloud SWR ShowTrigger --namespace=group-dev --repository=my-app --trigger=deploy-trigger --cli-region=cn-north-4
# Update a trigger (enable/disable or modify configuration)
hcloud SWR UpdateTrigger --namespace=group-dev --repository=my-app --trigger=deploy-trigger --enable=false --cli-region=cn-north-4
# Delete a trigger
hcloud SWR DeleteTrigger --namespace=group-dev --repository=my-app --trigger=deploy-trigger --cli-region=cn-north-4
Trigger Types:
all: Trigger on any image push ( condition=".*")tag: Trigger on specific tag push ( condition=tag-name)regular: Trigger on tag matching regex ( condition=regex-pattern)Trigger Modes:
cce: Deploy to CCE (Cloud Container Engine) cluster — requires --cluster_idcci: Deploy to CCI (Cloud Container Instance) — no cluster ID neededParameterRequired/OptionalDescriptionDefault--cli-regionRequiredHuawei Cloud region IDConfig value or HUAWEI_CLOUD_REGION``--namespaceContext-dependentSWR namespace (organization)N/A--repositoryContext-dependentImage repository nameN/A
ParameterRequiredDescriptionConstraints--namespaceYesSource namespaceExisting namespace name--repositoryYesSource repositoryExisting repository name--remoteRegionIdYesTarget region IDMust be from ListSyncRegions result--remoteNamespaceYesTarget namespaceNamespace name in target region--overrideNoOverwrite existing imagestrue or false (default false)--syncAutoNoAuto sync on pushtrue or false (default false)
ParameterRequiredDescriptionConstraints--namespaceYesSource namespaceExisting namespace name--repositoryYesSource repositoryExisting repository name--remoteRegionIdYesTarget region IDMust be from ListSyncRegions result--remoteNamespaceYesTarget namespaceNamespace name in target region--imageTag.[N]YesTag list (indexed array)--imageTag.1=v1.0 --imageTag.2=v2.0``--overrideNoOverwrite existing imagestrue or false (default false)
ParameterRequiredDescriptionConstraints--namespaceYesSWR namespaceExisting namespace name--repositoryYesImage repositoryExisting repository name--nameYesTrigger nameUnique within repository--trigger_typeYesTrigger typeall, tag, regular``--conditionYesMatch condition.* for all, tag name for tag, regex for regular--actionYesTrigger actionupdate``--app_typeYesApplication typedeployments or statefulsets``--applicationYesCCE/CCI application nameExisting deployment name--cluster_nsYesApplication namespaceKubernetes namespace (e.g., default)--enableYesEnable triggertrue or false``--trigger_modeNoDeploy targetcce (default) or cci``--cluster_idCCE onlyCCE cluster IDRequired for cce mode, empty for cci--cluster_nameNoCCE cluster nameOptional cluster name--containerNoTarget containerSpecific container name (default: all)
Response is a flat JSON array of region objects:
json
[
{
"regionID": "cn-north-4",
"region_name": "north-1"
}
]
Note: Returns all available sync target regions. Use region_id as --remoteRegionId.
Response format to be verified — returns list of sync repo configurations when they exist. Returns empty when no auto sync configured.
Response format to be verified — returns list of trigger objects when they exist. Returns empty when no triggers configured.
Response format to be verified. Use --namespace, --repository, --trigger (trigger name) as parameters.
Response format to be verified. Use --namespace, --repository as primary parameters.
See Verification Method for step-by-step verification.
Region NameRegion IDNorth China - Beijing 4cn-north-4North China - Beijing 1cn-north-1East China - Shanghai 1cn-east-3East China - Shanghai 2cn-east-2South China - Guangzhoucn-south-1South China - Shenzhencn-south-4Southwest China - Guiyang 1cn-southwest-2Asia Pacific - Bangkokap-southeast-2Asia Pacific - Singaporeap-southeast-1Asia Pacific - Hong Kongap-southeast-3Europe - Pariseu-west-0
syncAuto=true for production repositories to ensure images are automatically replicated to target regionsCreateManualImageSyncRepo when you only need to sync specific tags (e.g., production releases)override=true when you intentionally want to overwrite existing images in the target regionprod-deploy-trigger, staging-update-trigger)trigger_type=regular with regex for flexible matching (e.g., v\d+\.\d+\.\d+ for semver tags)enable=false) before deleting to avoid unintended deployments during cleanupListSyncRegions before creating sync configurations to verify the target region is availableDocumentDescriptionSWR Automation API Guidehcloud SWR automation API referenceIAM Permission PoliciesRequired permissions and policy JSONVerification MethodStep-by-step verificationCommon PitfallsTroubleshooting guidesTask: Image SyncAuto/manual sync workflowsTask: Trigger ManagementTrigger workflows
CreateManualImageSyncRepo invocation syncs specified tags once--imageTag.[N] uses indexed array format — NOT plain value or comma-separatedhcloud SWR <Operation> formatSee Common Pitfalls & Solutions for detailed troubleshooting guides.
Quick Reference:
PitfallSymptomQuick Fix--imageTag wrong formatManual sync failsUse indexed: --imageTag.1=v1.0Target namespace missingSync creation failsCreate namespace in target region firstInvalid remoteRegionIdSync creation failsCheck with ListSyncRegionsCCE cluster not foundTrigger creation failsVerify cluster_id with CCE consoleTrigger already exists409 ConflictUse ShowTrigger to check firstAuto-sync unwantedImages sync unexpectedlySet syncAuto=false or delete sync config