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_managed_registry
11)
12
13
14WEBHOOKS_NOT_SUPPORTED = 'Webhooks are only supported for managed registries.'
15
16
17def acr_webhook_list(cmd, client, registry_name, resource_group_name=None):
18    _, resource_group_name = validate_managed_registry(
19        cmd, registry_name, resource_group_name, WEBHOOKS_NOT_SUPPORTED)
20    return client.list(resource_group_name, registry_name)
21
22
23def acr_webhook_create(cmd,
24                       client,
25                       webhook_name,
26                       uri,
27                       actions,
28                       registry_name,
29                       location=None,
30                       resource_group_name=None,
31                       headers=None,
32                       status='enabled',
33                       scope=None,
34                       tags=None):
35    registry, resource_group_name = validate_managed_registry(
36        cmd, registry_name, resource_group_name, WEBHOOKS_NOT_SUPPORTED)
37
38    from msrest.exceptions import ValidationError
39    try:
40        WebhookCreateParameters = cmd.get_models('WebhookCreateParameters')
41        return client.begin_create(
42            resource_group_name,
43            registry_name,
44            webhook_name,
45            WebhookCreateParameters(
46                location=location or registry.location,
47                service_uri=uri,
48                actions=actions,
49                custom_headers=headers,
50                status=status,
51                scope=scope,
52                tags=tags
53            )
54        )
55    except ValidationError as e:
56        raise CLIError(e)
57
58
59def acr_webhook_delete(cmd,
60                       client,
61                       webhook_name,
62                       registry_name,
63                       resource_group_name=None):
64    _, resource_group_name = validate_managed_registry(
65        cmd, registry_name, resource_group_name, WEBHOOKS_NOT_SUPPORTED)
66    return client.begin_delete(resource_group_name, registry_name, webhook_name)
67
68
69def acr_webhook_show(cmd,
70                     client,
71                     webhook_name,
72                     registry_name,
73                     resource_group_name=None):
74    _, resource_group_name = validate_managed_registry(
75        cmd, registry_name, resource_group_name, WEBHOOKS_NOT_SUPPORTED)
76    return client.get(resource_group_name, registry_name, webhook_name)
77
78
79def acr_webhook_update_custom(instance,
80                              uri=None,
81                              actions=None,
82                              headers=None,
83                              status=None,
84                              scope=None,
85                              tags=None):
86    if uri is not None:
87        instance.service_uri = uri
88
89    if actions is not None:
90        instance.actions = actions
91
92    if headers is not None:
93        instance.custom_headers = headers
94
95    if status is not None:
96        instance.status = status
97
98    if scope is not None:
99        instance.scope = scope
100
101    if tags is not None:
102        instance.tags = tags
103
104    return instance
105
106
107def acr_webhook_update_get(cmd):
108    """Returns an empty WebhookUpdateParameters object.
109    """
110    WebhookUpdateParameters = cmd.get_models('WebhookUpdateParameters')
111    return WebhookUpdateParameters()
112
113
114def acr_webhook_update_set(cmd,
115                           client,
116                           webhook_name,
117                           registry_name,
118                           resource_group_name=None,
119                           parameters=None):
120    resource_group_name = get_resource_group_name_by_registry_name(
121        cmd.cli_ctx, registry_name, resource_group_name)
122    return client.begin_update(resource_group_name, registry_name, webhook_name, parameters)
123
124
125def acr_webhook_get_config(cmd,
126                           client,
127                           webhook_name,
128                           registry_name,
129                           resource_group_name=None):
130    _, resource_group_name = validate_managed_registry(
131        cmd, registry_name, resource_group_name, WEBHOOKS_NOT_SUPPORTED)
132    return client.get_callback_config(resource_group_name, registry_name, webhook_name)
133
134
135def acr_webhook_list_events(cmd,
136                            client,
137                            webhook_name,
138                            registry_name,
139                            resource_group_name=None):
140    _, resource_group_name = validate_managed_registry(
141        cmd, registry_name, resource_group_name, WEBHOOKS_NOT_SUPPORTED)
142    return client.list_events(resource_group_name, registry_name, webhook_name)
143
144
145def acr_webhook_ping(cmd,
146                     client,
147                     webhook_name,
148                     registry_name,
149                     resource_group_name=None):
150    _, resource_group_name = validate_managed_registry(
151        cmd, registry_name, resource_group_name, WEBHOOKS_NOT_SUPPORTED)
152    return client.ping(resource_group_name, registry_name, webhook_name)
153