1# --------------------------------------------------------------------------------------------
2# Copyright (c) Microsoft Corporation. All rights reserved.
3# Licensed under the MIT License. See License.txt in the project root for license information.
4# --------------------------------------------------------------------------------------------
5
6from azure.cli.core.util import CLIError
7
8from ._utils import (
9    get_resource_group_name_by_registry_name,
10    validate_premium_registry
11)
12
13
14REPLICATIONS_NOT_SUPPORTED = 'Replications are only supported for managed registries in Premium SKU.'
15
16
17def acr_replication_list(cmd, client, registry_name, resource_group_name=None):
18    _, resource_group_name = validate_premium_registry(
19        cmd, registry_name, resource_group_name, REPLICATIONS_NOT_SUPPORTED)
20    return client.list(resource_group_name, registry_name)
21
22
23def acr_replication_create(cmd,
24                           client,
25                           location,
26                           registry_name,
27                           resource_group_name=None,
28                           replication_name=None,
29                           tags=None):
30    registry, resource_group_name = validate_premium_registry(
31        cmd, registry_name, resource_group_name, REPLICATIONS_NOT_SUPPORTED)
32
33    normalized_location = "".join(location.split()).lower()
34    if registry.location == normalized_location:
35        raise CLIError('Replication could not be created in the same location as the registry.')
36
37    from msrest.exceptions import ValidationError
38    try:
39        return client.create(
40            resource_group_name=resource_group_name,
41            registry_name=registry_name,
42            replication_name=replication_name or normalized_location,
43            location=location,
44            tags=tags
45        )
46    except ValidationError as e:
47        raise CLIError(e)
48
49
50def acr_replication_delete(cmd,
51                           client,
52                           replication_name,
53                           registry_name,
54                           resource_group_name=None):
55    _, resource_group_name = validate_premium_registry(
56        cmd, registry_name, resource_group_name, REPLICATIONS_NOT_SUPPORTED)
57    return client.delete(resource_group_name, registry_name, replication_name)
58
59
60def acr_replication_show(cmd,
61                         client,
62                         replication_name,
63                         registry_name,
64                         resource_group_name=None):
65    _, resource_group_name = validate_premium_registry(
66        cmd, registry_name, resource_group_name, REPLICATIONS_NOT_SUPPORTED)
67    return client.get(resource_group_name, registry_name, replication_name)
68
69
70def acr_replication_update_custom(instance, tags=None):
71    if tags is not None:
72        instance.tags = tags
73    return instance
74
75
76def acr_replication_update_get(cmd):
77    """Returns an empty ReplicationUpdateParameters object.
78    """
79    ReplicationUpdateParameters = cmd.get_models('ReplicationUpdateParameters')
80    return ReplicationUpdateParameters()
81
82
83def acr_replication_update_set(cmd,
84                               client,
85                               replication_name,
86                               registry_name,
87                               resource_group_name=None,
88                               parameters=None):
89    resource_group_name = get_resource_group_name_by_registry_name(
90        cmd.cli_ctx, registry_name, resource_group_name)
91    return client.update(
92        resource_group_name=resource_group_name,
93        registry_name=registry_name,
94        replication_name=replication_name,
95        tags=parameters.tags)
96