File: test_cli_mgmt_containerregistry_task.py

package info (click to toggle)
python-azure 20201208%2Bgit-6
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 1,437,920 kB
  • sloc: python: 4,287,452; javascript: 269; makefile: 198; sh: 187; xml: 106
file content (484 lines) | stat: -rw-r--r-- 22,386 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
# coding: utf-8

#-------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for
# license information.
#--------------------------------------------------------------------------

# Current Operation Coverage:
#   Runs: 5/5
#   Tasks: 6/6
#   TaskRuns: 6/6
#   PipelineRuns: 1/4
#   ImportPipelines: 4/4
#   ExportPipelines: 4/4

import unittest

import azure.mgmt.containerregistry
from devtools_testutils import AzureMgmtTestCase, RandomNameResourceGroupPreparer

AZURE_LOCATION = 'eastus'


class MgmtRegistryTest(AzureMgmtTestCase):

    def setUp(self):
        super(MgmtRegistryTest, self).setUp()
        self.mgmt_client = self.create_mgmt_client(
            azure.mgmt.containerregistry.ContainerRegistryManagementClient,
            api_version="2019-12-01-preview"  # test the latest version
        )

    @RandomNameResourceGroupPreparer(location=AZURE_LOCATION)
    def test_pipelines(self, resource_group):

        # UNIQUE = resource_group.name[-4:]
        SUBSCRIPTION_ID = self.settings.SUBSCRIPTION_ID
        RESOURCE_GROUP = resource_group.name
        REGISTRY_NAME = "myRegistry"
        PIPELINE_RUN_NAME = "myPipelineRun"
        IMPORT_PIPELINE_NAME = "myImportPipeline"
        EXPORT_PIPELINE_NAME = "myExportPipeline"

#--------------------------------------------------------------------------
# /Registries/put/RegistryCreate[put]
#--------------------------------------------------------------------------
        BODY = {
          "location": AZURE_LOCATION,
          "tags": {
            "key": "value"
          },
          "sku": {
            "name": "Premium"  # Pipelineruns need Premium
          },
          "admin_user_enabled": False
        }
        result = self.mgmt_client.registries.begin_create(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME, registry=BODY)
        result = result.result()

#--------------------------------------------------------------------------
        # /ImportPipelines/put/ImportPipelineCreate[put]
#--------------------------------------------------------------------------
        BODY = {
          "location": AZURE_LOCATION,
          "identity": {
            "type": "SystemAssigned"
            # "user_assigned_identities": {}
          },
          "source": {
            "type": "AzureStorageBlobContainer",
            "uri": "https://accountname.blob.core.windows.net/containername",
            "key_vault_uri": "https://myvault.vault.azure.net/secrets/acrimportsas"
          },
          "options": [
            "OverwriteTags",
            "DeleteSourceBlobOnSuccess",
            "ContinueOnErrors"
          ]
        }
        result = self.mgmt_client.import_pipelines.begin_create(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME, import_pipeline_name=IMPORT_PIPELINE_NAME, import_pipeline_create_parameters=BODY)
        result = result.result()

#--------------------------------------------------------------------------
        # /ExportPipelines/put/ExportPipelineCreate[put]
#--------------------------------------------------------------------------
        BODY = {
          "location": AZURE_LOCATION,
          "identity": {
            "type": "SystemAssigned"
          },
          "target": {
            "type": "AzureStorageBlobContainer",
            "uri": "https://accountname.blob.core.windows.net/containername",
            "key_vault_uri": "https://myvault.vault.azure.net/secrets/acrexportsas"
          },
          "options": [
            "OverwriteBlobs"
          ]
        }
        result = self.mgmt_client.export_pipelines.begin_create(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME, export_pipeline_name=EXPORT_PIPELINE_NAME, export_pipeline_create_parameters=BODY)
        result = result.result()

#--------------------------------------------------------------------------
        # /PipelineRuns/put/PipelineRunCreate_Import[put]
#--------------------------------------------------------------------------
        BODY = {
          "request": {
            "pipeline_resource_id": "/subscriptions/" + SUBSCRIPTION_ID + "/resourceGroups/" + RESOURCE_GROUP + "/providers/Microsoft.ContainerRegistry/registries/" + REGISTRY_NAME + "/importPipelines/" + IMPORT_PIPELINE_NAME,
            "source": {
              "type": "AzureStorageBlob",
              "name": "myblob.tar.gz"
            },
            "catalog_digest": "sha256@"
          },
          "force_update_tag": "2020-03-04T17:23:21.9261521+00:00"
        }
        # result = self.mgmt_client.pipeline_runs.begin_create(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME, pipeline_run_name=PIPELINE_RUN_NAME, pipeline_run_create_parameters=BODY)
        # result = result.result()

#--------------------------------------------------------------------------
        # /PipelineRuns/get/PipelineRunGet[get]
#--------------------------------------------------------------------------
        # result = self.mgmt_client.pipeline_runs.get(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME, pipeline_run_name=PIPELINE_RUN_NAME)

#--------------------------------------------------------------------------
        # /ImportPipelines/get/ImportPipelineGet[get]
#--------------------------------------------------------------------------
        result = self.mgmt_client.import_pipelines.get(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME, import_pipeline_name=IMPORT_PIPELINE_NAME)

#--------------------------------------------------------------------------
        # /ExportPipelines/get/ExportPipelineGet[get]
#--------------------------------------------------------------------------
        result = self.mgmt_client.export_pipelines.get(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME, export_pipeline_name=EXPORT_PIPELINE_NAME)

#--------------------------------------------------------------------------
        # /PipelineRuns/get/PipelineRunList[get]
#--------------------------------------------------------------------------
        result = self.mgmt_client.pipeline_runs.list(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME)

#--------------------------------------------------------------------------
        # /ImportPipelines/get/ImportPipelineList[get]
#--------------------------------------------------------------------------
        result = self.mgmt_client.import_pipelines.list(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME)

#--------------------------------------------------------------------------
        # /ExportPipelines/get/ExportPipelineList[get]
#--------------------------------------------------------------------------
        result = self.mgmt_client.export_pipelines.list(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME)

#--------------------------------------------------------------------------
        # /PipelineRuns/delete/PipelineRunDelete[delete]
#--------------------------------------------------------------------------
        # result = self.mgmt_client.pipeline_runs.begin_delete(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME, pipeline_run_name=PIPELINE_RUN_NAME)
        # result = result.result()

#--------------------------------------------------------------------------
        # /ImportPipelines/delete/ImportPipelineDelete[delete]
#--------------------------------------------------------------------------
        result = self.mgmt_client.import_pipelines.begin_delete(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME, import_pipeline_name=IMPORT_PIPELINE_NAME)
        result = result.result()

#--------------------------------------------------------------------------
        # /ExportPipelines/delete/ExportPipelineDelete[delete]
#--------------------------------------------------------------------------
        result = self.mgmt_client.export_pipelines.begin_delete(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME, export_pipeline_name=EXPORT_PIPELINE_NAME)
        result = result.result()

#--------------------------------------------------------------------------
        # /Registries/delete/RegistryDelete[delete]
#--------------------------------------------------------------------------
        result = self.mgmt_client.registries.begin_delete(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME)
        result = result.result()

    @RandomNameResourceGroupPreparer(location=AZURE_LOCATION)
    def test_task_run(self, resource_group):

        # UNIQUE = resource_group.name[-4:]
        RESOURCE_GROUP = resource_group.name
        REGISTRY_NAME = "myRegistry"
        TASK_RUN_NAME = "myTaskRun"

#--------------------------------------------------------------------------
# /Registries/put/RegistryCreate[put]
#--------------------------------------------------------------------------
        BODY = {
          "location": AZURE_LOCATION,
          "tags": {
            "key": "value"
          },
          "sku": {
            "name": "Premium"  # Taskruns need Premium
          },
          "admin_user_enabled": False
        }
        result = self.mgmt_client.registries.begin_create(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME, registry=BODY)
        result = result.result()

#--------------------------------------------------------------------------
        # /TaskRuns/put/TaskRuns_Create[put] (TODO: add to swagger)
#--------------------------------------------------------------------------
        BODY = {
          "force_update_tag": "test",
          "run_request": {
            "type": "DockerBuildRequest",
            "image_names": ["testtaskrun:v1"],
            "is_push_enabled": True,
            "no_cache": False,
            "docker_file_path": "Dockerfile",
            "platform": {
              "os": "linux",
              "architecture": "amd64"
            },
            "source_location": "https://github.com/Azure-Samples/acr-build-helloworld-node.git",
            "is_archive_enabled": True
          }
        }
        result = self.mgmt_client.task_runs.begin_create(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME, task_run_name=TASK_RUN_NAME, task_run=BODY)
        result = result.result()

#--------------------------------------------------------------------------
        # /TaskRuns/get/TaskRuns_Get[get]
#--------------------------------------------------------------------------
        result = self.mgmt_client.task_runs.get(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME, task_run_name=TASK_RUN_NAME)

        RUN_ID = result.run_result.run_id

#--------------------------------------------------------------------------
        # /Runs/get/Runs_Get[get]
#--------------------------------------------------------------------------
        result = self.mgmt_client.runs.get(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME, run_id=RUN_ID)

#--------------------------------------------------------------------------
        # /TaskRuns/get/TaskRuns_List[get]
#--------------------------------------------------------------------------
        result = self.mgmt_client.task_runs.list(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME)

#--------------------------------------------------------------------------
        # /Runs/get/Runs_List[get]
#--------------------------------------------------------------------------
        result = self.mgmt_client.runs.list(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME, top="10")

#--------------------------------------------------------------------------
        # /TaskRuns/post/TaskRuns_GetDetails[post]
#--------------------------------------------------------------------------
        result = self.mgmt_client.task_runs.get_details(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME, task_run_name=TASK_RUN_NAME)

#--------------------------------------------------------------------------
        # /Runs/post/Runs_GetLogSasUrl[post]
#--------------------------------------------------------------------------
        result = self.mgmt_client.runs.get_log_sas_url(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME, run_id=RUN_ID)

#--------------------------------------------------------------------------
        # /Runs/post/Runs_Cancel[post]
#--------------------------------------------------------------------------
        result = self.mgmt_client.runs.begin_cancel(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME, run_id=RUN_ID)
        result = result.result()

#--------------------------------------------------------------------------
        # /TaskRuns/patch/TaskRuns_Update[patch] (TODO: add to swagger)
#--------------------------------------------------------------------------
        BODY = {
          "force_update_tag": "test",
          "run_request": {
            "type": "DockerBuildRequest",
            "image_names": ["testtaskrun:v1"],
            "is_push_enabled": True,
            "no_cache": False,
            "docker_file_path": "Dockerfile",
            "platform": {
              "os": "linux",
              "architecture": "amd64"
            },
            "source_location": "https://github.com/Azure-Samples/acr-build-helloworld-node.git",
            "is_archive_enabled": True
          }
        }
        result = self.mgmt_client.task_runs.begin_update(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME, task_run_name=TASK_RUN_NAME, update_parameters=BODY)
        result = result.result()

#--------------------------------------------------------------------------
        # /Runs/post/Runs_Cancel[post]
#--------------------------------------------------------------------------
        result = self.mgmt_client.runs.begin_cancel(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME, run_id=RUN_ID)
        result = result.result()

#--------------------------------------------------------------------------
        # /TaskRuns/delete/TaskRuns_Delete[delete]
#--------------------------------------------------------------------------
        result = self.mgmt_client.task_runs.begin_delete(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME, task_run_name=TASK_RUN_NAME)
        result = result.result()

#--------------------------------------------------------------------------
        # /Runs/patch/Runs_Update[patch]
#--------------------------------------------------------------------------
        BODY = {
          "is_archive_enabled": True
        }
        result = self.mgmt_client.runs.begin_update(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME, run_id=RUN_ID, run_update_parameters=BODY)
        result = result.result()

#--------------------------------------------------------------------------
        # /Registries/delete/RegistryDelete[delete]
#--------------------------------------------------------------------------
        result = self.mgmt_client.registries.begin_delete(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME)
        result = result.result()

    @RandomNameResourceGroupPreparer(location=AZURE_LOCATION)
    def test_tasks(self, resource_group):

        SUBSCRIPTION_ID = self.settings.SUBSCRIPTION_ID
        # UNIQUE = resource_group.name[-4:]
        REGISTRY_NAME = "myRegistry"
        RESOURCE_GROUP = resource_group.name
        TASK_RUN_NAME = "myTaskRun"
        TASK_NAME = "myTask"

#--------------------------------------------------------------------------
# /Registries/put/RegistryCreate[put]
#--------------------------------------------------------------------------
        BODY = {
          "location": AZURE_LOCATION,
          "tags": {
            "key": "value"
          },
          "sku": {
            "name": "Standard"
          },
          "admin_user_enabled": True
        }
        result = self.mgmt_client.registries.begin_create(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME, registry=BODY)
        result = result.result()

#--------------------------------------------------------------------------
        # /Tasks/put/Tasks_Create[put] (TODO: add to swagger)
#--------------------------------------------------------------------------
        BODY = {
          "location": AZURE_LOCATION,
        #   "identity": {
        #     "type": "SystemAssigned"
        #   },
          "tags": {
            "testkey": "value"
          },
          "status": "Enabled",
          "platform": {
            "os": "Linux",
            "architecture": "amd64"
          },
          "agent_configuration": {
            "cpu": "2"
          },
          "step": {
            "type": "Docker",
            "context_path": "https://github.com/SteveLasker/node-helloworld",
            "image_names": [
                "testtask:v1"
            ],
            "docker_file_path": "DockerFile",
            # "image_names": [
            #   "azurerest:testtag"
            # ],
            # "docker_file_path": "src/DockerFile",
            # "context_path": "src",
            "is_push_enabled": True,
            "no_cache": False,
            # "arguments": [
            #   {
            #     "name": "mytestargument",
            #     "value": "mytestvalue",
            #     "is_secret": False
            #   },
            #   {
            #     "name": "mysecrettestargument",
            #     "value": "mysecrettestvalue",
            #     "is_secret": True
            #   }
            # ]
          },
          "trigger": {
            "base_image_trigger": {
              "name": "myBaseImageTrigger",
              "base_image_trigger_type": "Runtime",
              "update_trigger_payload_type": "Default",
              "status": "Enabled"
            }
            # "timer_triggers": [
            #   {
            #     "name": "myTimerTrigger",
            #     "schedule": "30 9 * * 1-5"
            #   }
            # ],
            # "source_triggers": [
            #   {
            #     "name": "mySourceTrigger",
            #     "source_repository": {
            #       "source_control_type": "Github",
            #       "repository_url": "https://github.com/Azure/azure-rest-api-specs",
            #       "branch": "master",
            #       "source_control_auth_properties": {
            #         "token_type": "PAT",
            #         "token": "xxxxx"
            #       }
            #     },
            #     "source_trigger_events": [
            #       "commit"
            #     ]
            #   }
            # ],
            # "base_image_trigger": {
            #   "name": "myBaseImageTrigger",
            #   "base_image_trigger_type": "Runtime",
            #   "update_trigger_endpoint": "https://user:pass@mycicd.webhook.com?token=foo",
            #   "update_trigger_payload_type": "Token"
            # }
          }
        }
        result = self.mgmt_client.tasks.begin_create(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME, task_name=TASK_NAME, task_create_parameters=BODY)
        result = result.result()

#--------------------------------------------------------------------------
        # /Tasks/get/Tasks_Get[get]
#--------------------------------------------------------------------------
        result = self.mgmt_client.tasks.get(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME, task_name=TASK_NAME)

#--------------------------------------------------------------------------
        # /Tasks/get/Tasks_List[get]
#--------------------------------------------------------------------------
        result = self.mgmt_client.tasks.list(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME)

#--------------------------------------------------------------------------
        # /Tasks/post/Tasks_GetDetails[post]
#--------------------------------------------------------------------------
        result = self.mgmt_client.tasks.get_details(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME, task_name=TASK_NAME)

#--------------------------------------------------------------------------
        # /Tasks/patch/Tasks_Update[patch] (TODO: add to swagger)
#--------------------------------------------------------------------------
        BODY = {
          "location": AZURE_LOCATION,
          "tags": {
            "testkey": "value"
          },
          "status": "Enabled",
          "platform": {
            "os": "Linux",
            "architecture": "amd64"
          },
          "agent_configuration": {
            "cpu": "2"
          },
          "step": {
            "type": "Docker",
            "context_path": "https://github.com/SteveLasker/node-helloworld",
            "image_names": [
                "testtask:v1"
            ],
            "docker_file_path": "DockerFile",
            "is_push_enabled": True,
            "no_cache": False,
          },
          "trigger": {
            "base_image_trigger": {
              "name": "myBaseImageTrigger",
              "base_image_trigger_type": "Runtime",
              "update_trigger_payload_type": "Default",
              "status": "Enabled"
            }
          }
        }
        result = self.mgmt_client.tasks.begin_update(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME, task_name=TASK_NAME, task_update_parameters=BODY)
        result = result.result()

#--------------------------------------------------------------------------
# /Tasks/delete/Tasks_Delete[delete]
#--------------------------------------------------------------------------
        result = self.mgmt_client.tasks.begin_delete(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME, task_name=TASK_NAME)
        result = result.result()

#--------------------------------------------------------------------------
        # /Registries/delete/RegistryDelete[delete]
#--------------------------------------------------------------------------
        result = self.mgmt_client.registries.begin_delete(resource_group_name=RESOURCE_GROUP, registry_name=REGISTRY_NAME)
        result = result.result()