Exemple #1
0
    def test_group_deployment_thru_uri(self, resource_group):
        self.resource_group = resource_group
        curr_dir = os.path.dirname(os.path.realpath(__file__))
        # same copy of the sample template file under current folder, but it is uri based now
        template_uri = 'https://raw.githubusercontent.com/Azure/azure-cli/master/src/' \
                       'command_modules/azure-cli-resource/azure/cli/command_modules/resource/tests/simple_deploy.json'
        parameters_file = os.path.join(
            curr_dir, 'simple_deploy_parameters.json').replace('\\', '\\\\')
        result = self.cmd(
            'group deployment create -g {} --template-uri {} --parameters @{}'.
            format(self.resource_group, template_uri, parameters_file),
            checks=[
                JCheck('properties.provisioningState', 'Succeeded'),
                JCheck('resourceGroup', self.resource_group),
            ]).get_output_in_json()

        deployment_name = result['name']
        result = self.cmd('group deployment show -g {} -n {}'.format(
            self.resource_group, deployment_name),
                          checks=JCheck('name', deployment_name))

        self.cmd('group deployment delete -g {} -n {}'.format(
            self.resource_group, deployment_name))
        self.cmd('group deployment list -g {}'.format(self.resource_group),
                 checks=NoneCheck())
Exemple #2
0
    def test_group_deployment(self, resource_group):
        curr_dir = os.path.dirname(os.path.realpath(__file__))
        template_file = os.path.join(curr_dir, 'test-template.json').replace('\\', '\\\\')
        parameters_file = os.path.join(curr_dir, 'test-params.json').replace('\\', '\\\\')
        object_file = os.path.join(curr_dir, 'test-object.json').replace('\\', '\\\\')
        deployment_name = 'azure-cli-deployment'

        subnet_id = self.cmd('network vnet create -g {} -n vnet1 --subnet-name subnet1'.format(resource_group)).get_output_in_json()['newVNet']['subnets'][0]['id']

        self.cmd('group deployment validate -g {} --template-file {} --parameters @"{}" --parameters subnetId="{}" --parameters backendAddressPools=@"{}"'.format(
            resource_group, template_file, parameters_file, subnet_id, object_file), checks=[
            JCheck('properties.provisioningState', 'Succeeded')
        ])

        self.cmd('group deployment create -g {} -n {} --template-file {} --parameters @"{}" --parameters subnetId="{}" --parameters backendAddressPools=@"{}"'.format(
            resource_group, deployment_name, template_file, parameters_file, subnet_id, object_file), checks=[
            JCheck('properties.provisioningState', 'Succeeded'),
            JCheck('resourceGroup', resource_group),
        ])
        self.cmd('network lb show -g {} -n test-lb'.format(resource_group), checks=[
            JCheck('tags', {'key': 'super=value'})
        ])

        self.cmd('group deployment list -g {}'.format(resource_group), checks=[
            JCheck('[0].name', deployment_name),
            JCheck('[0].resourceGroup', resource_group)
        ])
        self.cmd('group deployment show -g {} -n {}'.format(resource_group, deployment_name), checks=[
            JCheck('name', deployment_name),
            JCheck('resourceGroup', resource_group)
        ])
        self.cmd('group deployment operation list -g {} -n {}'.format(resource_group, deployment_name), checks=[
            JCheck('length([])', 2),
            JCheck('[0].resourceGroup', resource_group)
        ])
Exemple #3
0
    def test_resource_create_and_show(self, resource_group, resource_group_location):
        appservice_plan = 'cli_res_create_plan'
        webapp = 'clirescreateweb'

        self.cmd('resource create -g {} -n {} --resource-type Microsoft.web/serverFarms '
                 '--is-full-object --properties "{{\\"location\\":\\"{}\\",\\"sku\\":{{\\"name\\":'
                 '\\"B1\\",\\"tier\\":\\"BASIC\\"}}}}"'.format(resource_group,
                                                               appservice_plan,
                                                               resource_group_location),
                 checks=[JCheck('name', appservice_plan)])

        result = self.cmd(
            'resource create -g {} -n {} --resource-type Microsoft.web/sites --properties '
            '"{{\\"serverFarmId\\":\\"{}\\"}}"'.format(resource_group,
                                                       webapp,
                                                       appservice_plan),
            checks=[JCheck('name', webapp)]).get_output_in_json()

        app_settings_id = result['id'] + '/config/appsettings'
        self.cmd('resource create --id {} --properties "{{\\"key2\\":\\"value12\\"}}"'.format(
            app_settings_id), checks=[JCheck('properties.key2', 'value12')])

        self.cmd('resource show --id {}'.format(result['id'] + '/config/web'), checks=[
            JCheck('properties.publishingUsername', '$' + webapp)  # spot check
        ])
        self.cmd('resource show --id {} --include-response-body'.format(result['id'] + '/config/web'), checks=[
            JCheck('responseBody.properties.publishingUsername', '$' + webapp)  # spot check
        ])
Exemple #4
0
    def test_group_deployment_crossrg(self, resource_group, resource_group_cross):
        curr_dir = os.path.dirname(os.path.realpath(__file__))
        template_file = os.path.join(curr_dir, 'crossrg_deploy.json').replace('\\', '\\\\')
        deployment_name = self.create_random_name('azure-cli-crossrgdeployment', 40)
        storage_account_1 = create_random_name(prefix='crossrg')
        storage_account_2 = create_random_name(prefix='crossrg')

        self.cmd(
            'group deployment validate -g {} --template-file {} --parameters CrossRg={} StorageAccountName1={} StorageAccountName2={}'.format(
                resource_group, template_file, resource_group_cross, storage_account_1, storage_account_2), checks=[
                JCheck('properties.provisioningState', 'Succeeded')
            ])
        self.cmd('group deployment create -g {} -n {} --template-file {} --parameters CrossRg={}'.format(
            resource_group, deployment_name, template_file, resource_group_cross), checks=[
            JCheck('properties.provisioningState', 'Succeeded'),
            JCheck('resourceGroup', resource_group),
        ])
        self.cmd('group deployment list -g {}'.format(resource_group), checks=[
            JCheck('[0].name', deployment_name),
            JCheck('[0].resourceGroup', resource_group)
        ])
        self.cmd('group deployment show -g {} -n {}'.format(resource_group, deployment_name), checks=[
            JCheck('name', deployment_name),
            JCheck('resourceGroup', resource_group)
        ])
        self.cmd('group deployment operation list -g {} -n {}'.format(resource_group, deployment_name), checks=[
            JCheck('length([])', 3),
            JCheck('[0].resourceGroup', resource_group)
        ])
Exemple #5
0
    def test_group_deployment_lite(self, resource_group):
        # ensures that a template that is missing "parameters" or "resources" still deploys
        curr_dir = os.path.dirname(os.path.realpath(__file__))
        template_file = os.path.join(curr_dir, 'test-template-lite.json').replace('\\', '\\\\')
        deployment_name = self.create_random_name('azure-cli-deployment', 30)

        self.cmd('group deployment create -g {} -n {} --template-file {}'.format(
            resource_group, deployment_name, template_file), checks=[
            JCheck('properties.provisioningState', 'Succeeded'),
            JCheck('resourceGroup', resource_group),
        ])
Exemple #6
0
    def test_managedapp(self, resource_group):
        location = 'westcentralus'
        appdef_name = 'testappdefname'
        appdef_display_name = 'test_appdef_123'
        appdef_description = 'test_appdef_123'
        packageUri = 'https:\/\/wud.blob.core.windows.net\/appliance\/SingleStorageAccount.zip'
        auth = '5e91139a-c94b-462e-a6ff-1ee95e8aac07:8e3af657-a8ff-443c-a75c-2fe8c4bcb635'
        lock = 'None'

        # create a managedapp definition
        create_cmd = 'managedapp definition create -n {} --package-file-uri {} --display-name {} --description {} -l {} -a {} --lock-level {} -g {}'
        managedappdef = self.cmd(
            create_cmd.format(appdef_name, packageUri, appdef_display_name,
                              appdef_description, location, auth, lock,
                              resource_group)).get_output_in_json()

        # create a managedapp
        managedapp_name = 'mymanagedapp'
        managedapp_loc = 'westcentralus'
        managedapp_kind = 'servicecatalog'
        newrg = self.create_random_name('climanagedapp', 25)
        managedrg = '/subscriptions/{}/resourceGroups/{}'.format(
            managedappdef['id'].split("/")[2], newrg)
        create_cmd = 'managedapp create -n {} -g {} -l {} --kind {} -m {} -d {}'
        app = self.cmd(create_cmd.format(managedapp_name, resource_group,
                                         managedapp_loc, managedapp_kind,
                                         managedrg, managedappdef['id']),
                       checks=[
                           JCheck('name', managedapp_name),
                           JCheck('type', 'Microsoft.Solutions/applications'),
                           JCheck('kind', 'servicecatalog'),
                           JCheck('managedResourceGroupId', managedrg)
                       ]).get_output_in_json()

        # list and show
        list_byrg_cmd = 'managedapp list -g {}'
        self.cmd(list_byrg_cmd.format(resource_group),
                 checks=[JCheck('[0].name', managedapp_name)])

        show_cmd = 'managedapp show --ids {}'
        self.cmd(show_cmd.format(app['id']),
                 checks=[
                     JCheck('name', managedapp_name),
                     JCheck('type', 'Microsoft.Solutions/applications'),
                     JCheck('kind', 'servicecatalog'),
                     JCheck('managedResourceGroupId', managedrg)
                 ])

        # delete
        self.cmd('managedapp delete -g {} -n {}'.format(
            resource_group, managedapp_name))
        self.cmd('managedapp list -g {}'.format(resource_group),
                 checks=NoneCheck())
Exemple #7
0
    def test_resource_move(self, resource_group, resource_group_dest):
        nsg1_name = self.create_random_name('nsg-move', 20)
        nsg2_name = self.create_random_name('nsg-move', 20)

        nsg1 = self.cmd('network nsg create -n {} -g {}'.format(nsg1_name, resource_group)).get_output_in_json()
        nsg2 = self.cmd('network nsg create -n {} -g {}'.format(nsg2_name, resource_group)).get_output_in_json()

        nsg1_id = nsg1['NewNSG']['id']
        nsg2_id = nsg2['NewNSG']['id']

        self.cmd('resource move --ids {} {} --destination-group {}'.format(nsg1_id, nsg2_id, resource_group_dest))

        self.cmd('network nsg show -g {} -n {}'.format(resource_group_dest, nsg1_name), checks=[
            JCheck('name', nsg1_name)])
        self.cmd('network nsg show -g {} -n {}'.format(resource_group_dest, nsg2_name), checks=[
            JCheck('name', nsg2_name)])
Exemple #8
0
 def test_show_built_in_policy(self):
     result = self.cmd(
         'policy definition list --query "[?policyType==\'BuiltIn\']|[0]"'
     ).get_output_in_json()
     policy_name = result['name']
     self.cmd('policy definition show -n ' + policy_name,
              checks=[JCheck('name', policy_name)])
Exemple #9
0
    def test_resource_group(self, resource_group):
        s = self
        rg = resource_group
        s.cmd('group delete -n {} --yes'.format(rg))
        s.cmd('group exists -n {}'.format(rg), checks=NoneCheck())

        s.cmd('group create -n {} -l westus --tag a=b c'.format(rg),
              checks=[JCheck('name', rg),
                      JCheck('tags', {
                          'a': 'b',
                          'c': ''
                      })])
        s.cmd('group exists -n {}'.format(rg), checks=BooleanCheck(True))
        s.cmd('group show -n {}'.format(rg),
              checks=[JCheck('name', rg),
                      JCheck('tags', {
                          'a': 'b',
                          'c': ''
                      })])
        s.cmd('group list --tag a=b',
              checks=[
                  JCheck('[0].name', rg),
                  JCheck('[0].tags', {
                      'a': 'b',
                      'c': ''
                  })
              ])
    def test_crossrgdeployment(self, resource_group):
        curr_dir = os.path.dirname(os.path.realpath(__file__))
        template_file = os.path.join(curr_dir, 'crossrg_deploy.json').replace(
            '\\', '\\\\')
        parameters_file = os.path.join(
            curr_dir, 'crossrg_deploy_parameters.json').replace('\\', '\\\\')
        deployment_name = 'azure-cli-crossrgdeployment'

        self.cmd(
            'group deployment validate -g {} --template-file {} --parameters @{}'
            .format(resource_group, template_file, parameters_file),
            checks=[JCheck('properties.provisioningState', 'Succeeded')])
        self.cmd(
            'group deployment create -g {} -n {} --template-file {} --parameters @{}'
            .format(resource_group, deployment_name, template_file,
                    parameters_file),
            checks=[
                JCheck('properties.provisioningState', 'Succeeded'),
                JCheck('resourceGroup', resource_group),
            ])
        self.cmd('group deployment list -g {}'.format(resource_group),
                 checks=[
                     JCheck('[0].name', deployment_name),
                     JCheck('[0].resourceGroup', resource_group)
                 ])
        self.cmd('group deployment show -g {} -n {}'.format(
            resource_group, deployment_name),
                 checks=[
                     JCheck('name', deployment_name),
                     JCheck('resourceGroup', resource_group)
                 ])
        self.cmd('group deployment operation list -g {} -n {}'.format(
            resource_group, deployment_name),
                 checks=[
                     JCheck('length([])', 3),
                     JCheck('[0].resourceGroup', resource_group)
                 ])
Exemple #11
0
    def test_resource_scenario(self, resource_group):
        from azure_devtools.scenario_tests import LargeResponseBodyProcessor
        large_resp_body = next((r for r in self.recording_processors if isinstance(r, LargeResponseBodyProcessor)), None)
        if large_resp_body:
            large_resp_body._max_response_body = 4096

        vnet_name = self.create_random_name('cli-test-vnet', 30)
        subnet_name = self.create_random_name('cli-test-subnet', 30)
        vnet_type = 'Microsoft.Network/virtualNetworks'

        self.cmd('network vnet create -g {} -n {} --subnet-name {} --tags cli-test=test'.format(
            resource_group, vnet_name, subnet_name))

        self.cmd('resource list', checks=JCheck("length([?name=='{}'])".format(vnet_name), 1))
        self.cmd('resource list -l southcentralus',
                 checks=JCheck("length([?location == 'southcentralus']) == length(@)", True))
        self.cmd('resource list --resource-type {}'.format(vnet_type),
                 checks=JCheck("length([?name=='{}'])".format(vnet_name), 1))
        self.cmd('resource list --name {}'.format(vnet_name),
                 checks=JCheck("length([?name=='{}'])".format(vnet_name), 1))
        self.cmd('resource list --tag cli-test', checks=JCheck("length([?name=='{}'])".format(vnet_name), 1))
        self.cmd('resource list --tag cli-test=test', checks=JCheck("length([?name=='{}'])".format(vnet_name), 1))

        # check for simple resource with tag
        self.cmd('resource show -n {} -g {} --resource-type {}'.format(vnet_name, resource_group, vnet_type), checks=[
            JCheck('name', vnet_name),
            JCheck('location', 'southcentralus'),
            JCheck('resourceGroup', resource_group),
            JCheck('tags', {'cli-test': 'test'})])

        # check for child resource
        self.cmd(
            'resource show -n {} -g {} --namespace Microsoft.Network --parent virtualNetworks/{}'
            ' --resource-type subnets'.format(subnet_name, resource_group, vnet_name), checks=[
                JCheck('name', subnet_name),
                JCheck('resourceGroup', resource_group)])

        # clear tag and verify
        self.cmd('resource tag -n {} -g {} --resource-type {} --tags'.format(vnet_name, resource_group, vnet_type))
        self.cmd('resource show -n {} -g {} --resource-type {}'
                 .format(vnet_name, resource_group, vnet_type), checks=JCheck('tags', {}))

        # delete resource and verify
        self.cmd('resource delete -n {} -g {} --resource-type {}'.format(vnet_name, resource_group, vnet_type))
        time.sleep(10)
        self.cmd('resource list', checks=JCheck("length([?name=='{}'])".format(vnet_name), 0))
Exemple #12
0
    def test_managedappdef_inline(self, resource_group):
        location = 'eastus2euap'
        appdef_name = self.create_random_name('testappdefname', 20)
        appdef_display_name = self.create_random_name('test_appdef', 20)
        appdef_description = 'test_appdef_123'
        auth = '5e91139a-c94b-462e-a6ff-1ee95e8aac07:8e3af657-a8ff-443c-a75c-2fe8c4bcb635'
        lock = 'None'
        curr_dir = os.path.dirname(os.path.realpath(__file__))
        createUiDef_file = os.path.join(curr_dir, 'sample_create_ui_definition.json').replace('\\', '\\\\')
        mainTemplate_file = os.path.join(curr_dir, 'sample_main_template.json').replace('\\', '\\\\')

        # create a managedapp definition with inline params for create-ui-definition and main-template
        create_cmd = 'managedapp definition create -n {} --create-ui-definition @"{}" --main-template @"{}" --display-name {} --description {} -l {} -a {} --lock-level {} -g {}'
        appdef = self.cmd(
            create_cmd.format(appdef_name, createUiDef_file, mainTemplate_file, appdef_display_name, appdef_description,
                              location, auth, lock, resource_group), checks=[
                JCheck('name', appdef_name),
                JCheck('displayName', appdef_display_name),
                JCheck('description', appdef_description),
                JCheck('authorizations[0].principalId', '5e91139a-c94b-462e-a6ff-1ee95e8aac07'),
                JCheck('authorizations[0].roleDefinitionId', '8e3af657-a8ff-443c-a75c-2fe8c4bcb635'),
                JCheck('artifacts[0].name', 'ApplicationResourceTemplate'),
                JCheck('artifacts[0].type', 'Template'),
                JCheck('artifacts[1].name', 'CreateUiDefinition'),
                JCheck('artifacts[1].type', 'Custom')
            ]).get_output_in_json()

        # list and show it
        list_cmd = 'managedapp definition list -g {}'
        self.cmd(list_cmd.format(resource_group), checks=[
            JCheck('[0].name', appdef_name)
        ])

        show_cmd = 'managedapp definition show --ids {}'
        self.cmd(show_cmd.format(appdef['id']), checks=[
            JCheck('name', appdef_name),
            JCheck('displayName', appdef_display_name),
            JCheck('description', appdef_description),
            JCheck('authorizations[0].principalId', '5e91139a-c94b-462e-a6ff-1ee95e8aac07'),
            JCheck('authorizations[0].roleDefinitionId', '8e3af657-a8ff-443c-a75c-2fe8c4bcb635'),
            JCheck('artifacts[0].name', 'ApplicationResourceTemplate'),
            JCheck('artifacts[0].type', 'Template'),
            JCheck('artifacts[1].name', 'CreateUiDefinition'),
            JCheck('artifacts[1].type', 'Custom')
        ])

        # delete
        self.cmd('managedapp definition delete -g {} -n {}'.format(resource_group, appdef_name))
        self.cmd('managedapp definition list -g {}'.format(resource_group), checks=NoneCheck())
Exemple #13
0
    def test_managedappdef(self, resource_group):
        location = 'eastus2euap'
        appdef_name = self.create_random_name('testappdefname', 20)
        appdef_display_name = self.create_random_name('test_appdef', 20)
        appdef_description = 'test_appdef_123'
        packageUri = 'https:\/\/testclinew.blob.core.windows.net\/files\/vivekMAD.zip'
        auth = '5e91139a-c94b-462e-a6ff-1ee95e8aac07:8e3af657-a8ff-443c-a75c-2fe8c4bcb635'
        lock = 'None'

        # create a managedapp definition
        create_cmd = 'managedapp definition create -n {} --package-file-uri {} --display-name {} --description {} -l {} -a {} --lock-level {} -g {}'
        appdef = self.cmd(
            create_cmd.format(appdef_name, packageUri, appdef_display_name, appdef_description, location, auth, lock,
                              resource_group), checks=[
                JCheck('name', appdef_name),
                JCheck('displayName', appdef_display_name),
                JCheck('description', appdef_description),
                JCheck('authorizations[0].principalId', '5e91139a-c94b-462e-a6ff-1ee95e8aac07'),
                JCheck('authorizations[0].roleDefinitionId', '8e3af657-a8ff-443c-a75c-2fe8c4bcb635'),
                JCheck('artifacts[0].name', 'ApplicationResourceTemplate'),
                JCheck('artifacts[0].type', 'Template'),
                JCheck('artifacts[1].name', 'CreateUiDefinition'),
                JCheck('artifacts[1].type', 'Custom')
            ]).get_output_in_json()

        # list and show it
        list_cmd = 'managedapp definition list -g {}'
        self.cmd(list_cmd.format(resource_group), checks=[
            JCheck('[0].name', appdef_name)
        ])

        show_cmd = 'managedapp definition show --ids {}'
        self.cmd(show_cmd.format(appdef['id']), checks=[
            JCheck('name', appdef_name),
            JCheck('displayName', appdef_display_name),
            JCheck('description', appdef_description),
            JCheck('authorizations[0].principalId', '5e91139a-c94b-462e-a6ff-1ee95e8aac07'),
            JCheck('authorizations[0].roleDefinitionId', '8e3af657-a8ff-443c-a75c-2fe8c4bcb635'),
            JCheck('artifacts[0].name', 'ApplicationResourceTemplate'),
            JCheck('artifacts[0].type', 'Template'),
            JCheck('artifacts[1].name', 'CreateUiDefinition'),
            JCheck('artifacts[1].type', 'Custom')
        ])

        # delete
        self.cmd('managedapp definition delete -g {} -n {}'.format(resource_group, appdef_name))
        self.cmd('managedapp definition list -g {}'.format(resource_group), checks=NoneCheck())
Exemple #14
0
    def test_resource_policyset(self, resource_group):
        policy_name = self.create_random_name('azure-cli-test-policy', 30)
        policy_display_name = self.create_random_name('test_policy', 20)
        policy_description = 'desc_for_test_policy_123'
        policyset_name = self.create_random_name('azure-cli-test-policyset', 30)
        policyset_display_name = self.create_random_name('test_policyset', 20)
        policyset_description = 'desc_for_test_policyset_123'
        curr_dir = os.path.dirname(os.path.realpath(__file__))
        rules_file = os.path.join(curr_dir, 'sample_policy_rule.json').replace('\\', '\\\\')
        policyset_file = os.path.join(curr_dir, 'sample_policy_set.json').replace('\\', '\\\\')
        params_def_file = os.path.join(curr_dir, 'sample_policy_param_def.json').replace('\\', '\\\\')

        # create a policy
        policycreatecmd = 'policy definition create -n {} --rules {} --params {} --display-name {} --description {}'
        policy = self.cmd(policycreatecmd.format(policy_name, rules_file, params_def_file, policy_display_name,
                                                 policy_description)).get_output_in_json()

        # create a policy set
        policyset = get_file_json(policyset_file)
        policyset[0]['policyDefinitionId'] = policy['id']
        with open(os.path.join(curr_dir, 'sample_policy_set.json'), 'w') as outfile:
            json.dump(policyset, outfile)
        self.cmd('policy set-definition create -n {} --definitions @"{}" --display-name {} --description {}'.format(
            policyset_name, policyset_file, policyset_display_name, policyset_description),
            checks=[JCheck('name', policyset_name),
                    JCheck('displayName', policyset_display_name),
                    JCheck('description', policyset_description)])

        # update it
        new_policyset_description = policy_description + '_new'
        self.cmd(
            'policy set-definition update -n {} --description {}'.format(policyset_name, new_policyset_description),
            checks=JCheck('description', new_policyset_description))

        # list and show it
        self.cmd('policy set-definition list', checks=JMESPathCheck("length([?name=='{}'])".format(policyset_name), 1))
        self.cmd('policy set-definition show -n {}'.format(policyset_name),
                 checks=[JCheck('name', policyset_name),
                         JCheck('displayName', policyset_display_name)])

        # create a policy assignment on a resource group
        policy_assignment_name = self.create_random_name('azurecli-test-policy-assignment', 40)
        policy_assignment_display_name = self.create_random_name('test_assignment', 20)
        self.cmd('policy assignment create -d {} -n {} --display-name {} -g {}'.format(
            policyset_name, policy_assignment_name, policy_assignment_display_name, resource_group),
            checks=[JCheck('name', policy_assignment_name),
                    JCheck('displayName', policy_assignment_display_name),
                    JCheck('sku.name', 'A0'),
                    JCheck('sku.tier', 'Free')])

        # delete the assignment
        self.cmd('policy assignment delete -n {} -g {}'.format(policy_assignment_name, resource_group))
        self.cmd('policy assignment list --disable-scope-strict-match')

        # delete the policy set
        self.cmd('policy set-definition delete -n {}'.format(policyset_name))
        time.sleep(10)  # ensure the policy is gone when run live.
        self.cmd('policy set-definition list', checks=JCheck("length([?name=='{}'])".format(policyset_name), 0))
Exemple #15
0
    def test_resource_policy(self, resource_group):
        policy_name = self.create_random_name('azure-cli-test-policy', 30)
        policy_display_name = self.create_random_name('test_policy', 20)
        policy_description = 'desc_for_test_policy_123'
        curr_dir = os.path.dirname(os.path.realpath(__file__))
        rules_file = os.path.join(curr_dir, 'sample_policy_rule.json').replace('\\', '\\\\')
        params_def_file = os.path.join(curr_dir, 'sample_policy_param_def.json').replace('\\', '\\\\')
        params_file = os.path.join(curr_dir, 'sample_policy_param.json').replace('\\', '\\\\')
        mode = 'Indexed'

        # create a policy
        self.cmd(
            'policy definition create -n {} --rules {} --params {} --display-name {} --description {} --mode {}'.format(
                policy_name, rules_file, params_def_file, policy_display_name, policy_description, mode),
            checks=[
                JCheck('name', policy_name),
                JCheck('displayName', policy_display_name),
                JCheck('description', policy_description),
                JCheck('mode', mode)
            ]
        )

        # update it
        new_policy_description = policy_description + '_new'
        self.cmd('policy definition update -n {} --description {}'.format(policy_name, new_policy_description),
                 checks=JCheck('description', new_policy_description))

        # list and show it
        self.cmd('policy definition list', checks=JMESPathCheck("length([?name=='{}'])".format(policy_name), 1))
        self.cmd('policy definition show -n {}'.format(policy_name), checks=[
            JCheck('name', policy_name),
            JCheck('displayName', policy_display_name)
        ])

        # create a policy assignment on a resource group
        policy_assignment_name = self.create_random_name('azurecli-test-policy-assignment', 40)
        policy_assignment_display_name = self.create_random_name('test_assignment', 20)
        self.cmd('policy assignment create --policy {} -n {} --display-name {} -g {} --params {}'.format(
            policy_name, policy_assignment_name, policy_assignment_display_name, resource_group, params_file),
            checks=[JCheck('name', policy_assignment_name),
                    JCheck('displayName', policy_assignment_display_name),
                    JCheck('sku.name', 'A0'),
                    JCheck('sku.tier', 'Free')])

        # create a policy assignment with not scopes and standard sku
        get_cmd = 'group show -n {}'
        rg = self.cmd(get_cmd.format(resource_group)).get_output_in_json()
        vnet_name = self.create_random_name('azurecli-test-policy-vnet', 40)
        subnet_name = self.create_random_name('azurecli-test-policy-subnet', 40)
        vnetcreatecmd = 'network vnet create -g {} -n {} --subnet-name {}'
        self.cmd(vnetcreatecmd.format(resource_group, vnet_name, subnet_name))
        notscope = '/subscriptions/{}/resourceGroups/{}/providers/Microsoft.Network/virtualNetworks'.format(
            rg['id'].split("/")[2], resource_group)
        self.cmd(
            'policy assignment create --policy {} -n {} --display-name {} -g {} --not-scopes {} --params {} --sku {}'.format(
                policy_name, policy_assignment_name, policy_assignment_display_name, resource_group, notscope,
                params_file, 'standard'),
            checks=[JCheck('name', policy_assignment_name),
                    JCheck('displayName', policy_assignment_display_name),
                    JCheck('sku.name', 'A1'),
                    JCheck('sku.tier', 'Standard'),
                    JCheck('notScopes[0]', notscope)])

        # create a policy assignment using a built in policy definition name
        policy_assignment_name2 = self.create_random_name('azurecli-test-policy-assignment2', 40)
        built_in_policy = self.cmd(
            'policy definition list --query "[?policyType==\'BuiltIn\']|[0]"').get_output_in_json()
        self.cmd('policy assignment create --policy {} -n {} --display-name {} -g {}'.format(
            built_in_policy['name'], policy_assignment_name2, policy_assignment_display_name, resource_group),
            checks=[JCheck('name', policy_assignment_name2),
                    JCheck('displayName', policy_assignment_display_name)])
        self.cmd('policy assignment delete -n {} -g {}'.format(policy_assignment_name2, resource_group))

        # listing at subscription level won't find the assignment made at a resource group
        import jmespath
        try:
            self.cmd('policy assignment list', checks=JCheck("length([?name=='{}'])".format(policy_assignment_name), 0))
        except jmespath.exceptions.JMESPathTypeError:  # ok if query fails on None result
            pass

        # but enable --show-all works
        self.cmd('policy assignment list --disable-scope-strict-match',
                 checks=JCheck("length([?name=='{}'])".format(policy_assignment_name), 1))

        # delete the assignment
        self.cmd('policy assignment delete -n {} -g {}'.format(policy_assignment_name, resource_group))
        self.cmd('policy assignment list --disable-scope-strict-match')

        # delete the policy
        self.cmd('policy definition delete -n {}'.format(policy_name))
        time.sleep(10)  # ensure the policy is gone when run live.
        self.cmd('policy definition list', checks=JCheck("length([?name=='{}'])".format(policy_name), 0))
Exemple #16
0
    def test_resource_policy(self, resource_group):
        policy_name = self.create_random_name('azure-cli-test-policy', 30)
        policy_display_name = self.create_random_name('test_policy', 20)
        policy_description = 'desc_for_test_policy_123'
        curr_dir = os.path.dirname(os.path.realpath(__file__))
        rules_file = os.path.join(curr_dir, 'sample_policy_rule.json').replace(
            '\\', '\\\\')
        params_def_file = os.path.join(curr_dir,
                                       'sample_policy_param_def.json').replace(
                                           '\\', '\\\\')
        params_file = os.path.join(curr_dir,
                                   'sample_policy_param.json').replace(
                                       '\\', '\\\\')

        # create a policy
        self.cmd(
            'policy definition create -n {} --rules {} --params {} --display-name {} --description {}'
            .format(policy_name, rules_file, params_def_file,
                    policy_display_name, policy_description),
            checks=[
                JCheck('name', policy_name),
                JCheck('displayName', policy_display_name),
                JCheck('description', policy_description)
            ])

        # update it
        new_policy_description = policy_description + '_new'
        self.cmd('policy definition update -n {} --description {}'.format(
            policy_name, new_policy_description),
                 checks=JCheck('description', new_policy_description))

        # list and show it
        self.cmd('policy definition list',
                 checks=JMESPathCheck(
                     "length([?name=='{}'])".format(policy_name), 1))
        self.cmd('policy definition show -n {}'.format(policy_name),
                 checks=[
                     JCheck('name', policy_name),
                     JCheck('displayName', policy_display_name)
                 ])

        # create a policy assignment on a resource group
        policy_assignment_name = self.create_random_name(
            'azurecli-test-policy-assignment', 40)
        policy_assignment_display_name = self.create_random_name(
            'test_assignment', 20)
        self.cmd(
            'policy assignment create --policy {} -n {} --display-name {} -g {} --params {}'
            .format(policy_name, policy_assignment_name,
                    policy_assignment_display_name, resource_group,
                    params_file),
            checks=[
                JCheck('name', policy_assignment_name),
                JCheck('displayName', policy_assignment_display_name)
            ])

        # listing at subscription level won't find the assignment made at a resource group
        import jmespath
        try:
            self.cmd(
                'policy assignment list',
                checks=JCheck(
                    "length([?name=='{}'])".format(policy_assignment_name), 0))
        except jmespath.exceptions.JMESPathTypeError:  # ok if query fails on None result
            pass

        # but enable --show-all works
        self.cmd('policy assignment list --disable-scope-strict-match',
                 checks=JCheck(
                     "length([?name=='{}'])".format(policy_assignment_name),
                     1))

        # delete the assignment
        self.cmd('policy assignment delete -n {} -g {}'.format(
            policy_assignment_name, resource_group))
        self.cmd('policy assignment list --disable-scope-strict-match')

        # delete the policy
        self.cmd('policy definition delete -n {}'.format(policy_name))
        time.sleep(10)  # ensure the policy is gone when run live.
        self.cmd('policy definition list',
                 checks=JCheck("length([?name=='{}'])".format(policy_name), 0))
Exemple #17
0
    def test_resource_scenario(self, resource_group):
        vnet_name = self.create_random_name('cli-test-vnet', 30)
        subnet_name = self.create_random_name('cli-test-subnet', 30)
        vnet_type = 'Microsoft.Network/virtualNetworks'

        self.cmd('network vnet create -g {} -n {} --subnet-name {} --tags cli-test=test'.format(
            resource_group, vnet_name, subnet_name))

        self.cmd('resource list', checks=JCheck("length([?name=='{}'])".format(vnet_name), 1))
        self.cmd('resource list -l southcentralus',
                 checks=JCheck("length([?location == 'southcentralus']) == length(@)", True))
        self.cmd('resource list --resource-type {}'.format(vnet_type),
                 checks=JCheck("length([?name=='{}'])".format(vnet_name), 1))
        self.cmd('resource list --name {}'.format(vnet_name),
                 checks=JCheck("length([?name=='{}'])".format(vnet_name), 1))
        self.cmd('resource list --tag cli-test', checks=JCheck("length([?name=='{}'])".format(vnet_name), 1))
        self.cmd('resource list --tag cli-test=test', checks=JCheck("length([?name=='{}'])".format(vnet_name), 1))

        # check for simple resource with tag
        self.cmd('resource show -n {} -g {} --resource-type {}'.format(vnet_name, resource_group, vnet_type), checks=[
            JCheck('name', vnet_name),
            JCheck('location', 'southcentralus'),
            JCheck('resourceGroup', resource_group),
            JCheck('tags', {'cli-test': 'test'})])

        # check for child resource
        self.cmd(
            'resource show -n {} -g {} --namespace Microsoft.Network --parent virtualNetworks/{}'
            ' --resource-type subnets'.format(subnet_name, resource_group, vnet_name), checks=[
                JCheck('name', subnet_name),
                JCheck('resourceGroup', resource_group)])

        # clear tag and verify
        self.cmd('resource tag -n {} -g {} --resource-type {} --tags'.format(vnet_name, resource_group, vnet_type))
        self.cmd('resource show -n {} -g {} --resource-type {}'
                 .format(vnet_name, resource_group, vnet_type), checks=JCheck('tags', {}))

        # delete resource and verify
        self.cmd('resource delete -n {} -g {} --resource-type {}'.format(vnet_name, resource_group, vnet_type))
        self.cmd('resource list', checks=JCheck("length([?name=='{}'])".format(vnet_name), 0))