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 enum import Enum
7from azure.cli.core.commands import LongRunningOperation
8from ._utils import validate_premium_registry
9
10POLICIES_NOT_SUPPORTED = 'Policies are only supported for managed registries in Premium SKU.'
11
12
13# temporary place holder enum for retention type
14class RetentionType(str, Enum):
15    UntaggedManifests = "UntaggedManifests"
16
17
18def acr_config_content_trust_show(cmd,
19                                  registry_name,
20                                  resource_group_name=None):
21    registry, _ = validate_premium_registry(
22        cmd, registry_name, resource_group_name, POLICIES_NOT_SUPPORTED)
23    policies = registry.policies
24    trust_policy = policies.trust_policy if policies else {}
25    return trust_policy
26
27
28def acr_config_content_trust_update(cmd,
29                                    client,
30                                    registry_name,
31                                    status=None,
32                                    resource_group_name=None):
33    registry, resource_group_name = validate_premium_registry(
34        cmd, registry_name, resource_group_name, POLICIES_NOT_SUPPORTED)
35
36    policies = registry.policies
37
38    if status:
39        Policy = cmd.get_models('Policy')
40        policies = policies if policies else Policy()
41        TrustPolicy = cmd.get_models('TrustPolicy')
42        policies.trust_policy = policies.trust_policy if policies.trust_policy else TrustPolicy()
43        policies.trust_policy.status = status
44
45    RegistryUpdateParameters = cmd.get_models('RegistryUpdateParameters')
46    parameters = RegistryUpdateParameters(policies=policies)
47    updated_policies = LongRunningOperation(cmd.cli_ctx)(
48        client.begin_update(resource_group_name, registry_name, parameters)
49    )
50    return updated_policies.policies.trust_policy
51
52
53def acr_config_retention_show(cmd,
54                              registry_name,
55                              resource_group_name=None):
56    registry, _ = validate_premium_registry(
57        cmd, registry_name, resource_group_name, POLICIES_NOT_SUPPORTED)
58    policies = registry.policies
59    retention_policy = policies.retention_policy if policies else None
60    return retention_policy
61
62
63def acr_config_retention_update(cmd,
64                                client,
65                                registry_name,
66                                policy_type,  # pylint: disable=unused-argument
67                                status=None,
68                                days=None,
69                                resource_group_name=None):
70    registry, resource_group_name = validate_premium_registry(
71        cmd, registry_name, resource_group_name, POLICIES_NOT_SUPPORTED)
72
73    Policy, RetentionPolicy, RegistryUpdateParameters = cmd.get_models(
74        'Policy', 'RetentionPolicy', 'RegistryUpdateParameters')
75
76    policies = registry.policies
77    if policies is None:
78        policies = Policy()
79
80    policies.retention_policy = policies.retention_policy if policies.retention_policy else RetentionPolicy()
81
82    if status:
83        policies.retention_policy.status = status
84
85    if days is not None:
86        policies.retention_policy.days = days
87
88    parameters = RegistryUpdateParameters(policies=policies)
89    updated_policies = LongRunningOperation(cmd.cli_ctx)(
90        client.begin_update(resource_group_name, registry_name, parameters)
91    )
92    return updated_policies.policies.retention_policy
93