Skip to content

Commit

Permalink
Added "az acr" commands for Azure container registries
Browse files Browse the repository at this point in the history
1. Added commands to manage Azure container registries
(create/delete/show/list/update).
2. Integrated repository list and show-tags commands.
3. Added mgmt_acr SDK for Python.
  • Loading branch information
djyou committed Sep 16, 2016
1 parent c57095b commit e515e63
Show file tree
Hide file tree
Showing 30 changed files with 1,670 additions and 0 deletions.
128 changes: 128 additions & 0 deletions src/command_modules/azure-cli-acr/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
Microsoft Azure CLI 'acr' Command Module
==================================

Commands to manage Azure container registries
-------------
::

Group
az acr: Commands to manage Azure container registries.

Subgroups:
repository

Commands:
create : Create a container registry.
delete : Delete a container registry.
list : List container registries.
show : Get a container registry.
update : Update a container registry.

Create a container registry
-------------
::

Command
az acr create: Create a container registry.

Arguments
--location -l [Required]: Location.
--name -n [Required]: Name of container registry.
--resource-group -g [Required]: Name of resource group.
--storage-account-name -s : Name of storage account.

Examples
Create a container registry with a new storage account
az acr create -n <registry-name> -g <resource-group> -l <location>
Create a container registry with a new/existing storage account
az acr create -n <registry-name> -g <resource-group> -l <location> -s <storage-account-name>

Delete a container registry
-------------
::

Command
az acr delete: Delete a container registry.

Arguments
--name -n [Required]: Name of container registry.

List container registries
-------------
::

Command
az acr list: List container registries.

Arguments
--resource-group -g: Name of resource group.

Examples
List container registries and show result in a table
az acr list -o table
List container registries in a resource group and show result in a table
az acr list -g <resource-group> -o table

Get a container registry
-------------
::

Command
az acr show: Get a container registry.

Arguments
--name -n [Required]: Name of container registry.

Update a container registry
-------------
::

Command
az acr update: Update a container registry.

Arguments
--name -n [Required]: Name of container registry.
--tags : Multiple semicolon separated tags in 'key[=value]' format. Use "" to
clear existing tags.
Examples
Update tags of a container registry and show result in a table
az acr update -n <registry-name> --tags key1=value1;key2=value2 -o table

List repositories in a given container registry
-------------
::

Command
az acr repository list: List repositories in a given container registry.

Arguments
--login-server [Required]: The URL of a container registry login server.
--password : The password used to log into the container registry.
--username : The username used to log into the container registry.

Examples
List repositories in a given container registry under the current subscription
az acr repository list --login-server <login-server>
List repositories in a given container registry with credentials
az acr repository list --login-server <login-server> --username <username> --password
<password>

Show tags of a given repository in a given container registry
-------------
::

Command
az acr repository show-tags: Show tags of a given repository in a given container registry.

Arguments
--login-server [Required]: The URL of a container registry login server.
--repository [Required]: The repository to obtain tags from.
--password : The password used to log into the container registry.
--username : The username used to log into the container registry.

Examples
Show tags of a given repository in a given container registry under the current subscription
az acr repository show-tags --login-server <login-server> --repository <repository>
Show tags of a given repository in a given container registry with credentials
az acr repository show-tags --login-server <login-server> --repository <repository>
--username <username> --password <password>
6 changes: 6 additions & 0 deletions src/command_modules/azure-cli-acr/azure/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#---------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
#---------------------------------------------------------------------------------------------
import pkg_resources
pkg_resources.declare_namespace(__name__)
6 changes: 6 additions & 0 deletions src/command_modules/azure-cli-acr/azure/cli/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#---------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
#---------------------------------------------------------------------------------------------
import pkg_resources
pkg_resources.declare_namespace(__name__)
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#---------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
#---------------------------------------------------------------------------------------------
import pkg_resources
pkg_resources.declare_namespace(__name__)
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#---------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
#---------------------------------------------------------------------------------------------

#pylint: disable=unused-import

import azure.cli.command_modules.acr._help
import azure.cli.command_modules.acr._params
import azure.cli.command_modules.acr.custom
import azure.cli.command_modules.acr.repository
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
#---------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
#---------------------------------------------------------------------------------------------

from azure.cli.command_modules.acr.mgmt_acr.models import RegistryParameters

from ._constants import RESOURCE_TYPE
from ._factory import get_arm_service_client

from azure.cli.command_modules.acr.mgmt_acr import VERSION

def arm_get_registries_in_subscription():
'''Returns the list of container registries in the current subscription.
'''
client = get_arm_service_client()
filter_str = "resourceType eq '{}'".format(RESOURCE_TYPE)
result = list(client.resources.list(filter=filter_str))

return [RegistryParameters(item.id, item.name, item.location, item.tags) for item in result]

def arm_get_registries_in_resource_group(resource_group_name):
'''Returns the list of container registries in the resource group.
:param str resource_group_name: The name of resource group
'''
client = get_arm_service_client()
filter_str = "resourceType eq '{}'".format(RESOURCE_TYPE)
result = list(client.resource_groups.list_resources(resource_group_name, filter=filter_str))

return [RegistryParameters(item.id, item.name, item.location, item.tags) for item in result]

def arm_get_registry_by_name(registry_name):
'''Returns the container registry that matches the registry name.
:param str registry_name: The name of container registry
'''
registries = arm_get_registries_in_subscription()
elements = [item for item in registries if item.name.lower() == registry_name.lower()]

if len(elements) == 0:
return None
elif len(elements) == 1:
return elements[0]
else:
raise ValueError('More than one container registries are found with name: ' + registry_name)

def arm_deploy_template(resource_group_name, registry_name, location, storage_account_name):
'''Deploys ARM template to create a container registry.
:param str resource_group_name: The name of resource group
:param str registry_name: The name of container registry
:param str location: The name of location
:param str storage_account_name: The name of storage account
'''
from azure.mgmt.resource.resources.models import DeploymentProperties
from azure.cli.core._util import get_file_json
import os

file_path = os.path.join(os.path.dirname(__file__), 'template.json')
template = get_file_json(file_path)
parameters = _parameters(registry_name, location, storage_account_name)
properties = DeploymentProperties(template=template, parameters=parameters, mode='incremental')

client = get_arm_service_client()
deployment_name = 'Deployment.' + registry_name

return client.deployments.create_or_update(resource_group_name, deployment_name, properties)

def _parameters(registry_name, location, storage_account_name):
'''Returns a dict of deployment parameters.
:param str registry_name: The name of container registry
:param str location: The name of location
:param str storage_account_name: The name of storage account
'''
parameters = {
'registryName': {'value': registry_name},
'registryLocation': {'value': location},
'registryApiVersion': {'value': VERSION},
'storageAccountName': {'value': storage_account_name},
'storageAccountLocation': {'value': 'westus'},
'storageAccountApiVersion': {'value': '2015-05-01-preview'}
}
return parameters
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#---------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
#---------------------------------------------------------------------------------------------

RESOURCE_TYPE = 'Microsoft.ContainerRegistry/registries'
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#---------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
#---------------------------------------------------------------------------------------------

from azure.cli.core._profile import Profile
from azure.cli.core._config import az_config
from azure.mgmt.resource.resources import ResourceManagementClient
from azure.storage._constants import SERVICE_HOST_BASE

from azure.cli.core.commands.client_factory import (
configure_common_settings,
get_mgmt_service_client
)

from azure.cli.command_modules.acr.mgmt_acr import (
ContainerRegistry,
ContainerRegistryConfiguration,
VERSION
)

import azure.cli.core._logging as _logging
logger = _logging.get_az_logger(__name__)

def get_arm_service_client():
'''Returns the client for managing ARM resources.
'''
return get_mgmt_service_client(ResourceManagementClient)

def get_registry_service_client():
'''Returns the client for managing container registries.
'''
profile = Profile()
credentials, subscription_id, _ = profile.get_login_credentials()

customized_api_version = az_config.get('acr', 'apiversion', None)
if customized_api_version:
logger.warning('Customized api-version is used: ' + customized_api_version)

api_version = customized_api_version or VERSION

config = ContainerRegistryConfiguration(subscription_id, api_version, credentials)
client = ContainerRegistry(config)

configure_common_settings(client)

return client.registries

def get_storage_end_point_suffix():
'''Returns storage account end point suffix.
'''
return SERVICE_HOST_BASE
Loading

0 comments on commit e515e63

Please sign in to comment.