示例#1
0
    def test_keyvault_secret(self, resource_group):

        self.resource_group = resource_group
        self.keyvault_name = self.create_random_name('cli-test-kevault-', 24)
        self.location = 'westus'

        _create_keyvault(self, self.keyvault_name, self.resource_group, self.location)
        kv = self.keyvault_name
        # create a secret
        secret = self.cmd('keyvault secret set --vault-name {} -n secret1 --value ABC123'.format(kv),
                          checks=JMESPathCheck('value', 'ABC123')).get_output_in_json()
        first_kid = secret['id']
        first_version = first_kid.rsplit('/', 1)[1]

        # list secrets
        self.cmd('keyvault secret list --vault-name {}'.format(kv), checks=JMESPathCheck('length(@)', 1))

        # create a new secret version
        secret = self.cmd('keyvault secret set --vault-name {} -n secret1 --value DEF456 --tags test=foo --description "test type"'.format(kv), checks=[
            JMESPathCheck('value', 'DEF456'),
            JMESPathCheck('tags', {'file-encoding': 'utf-8', 'test': 'foo'}),
            JMESPathCheck('contentType', 'test type')
        ]).get_output_in_json()
        second_kid = secret['id']

        # list secret versions
        self.cmd('keyvault secret list-versions --vault-name {} -n secret1'.format(kv),
                 checks=JMESPathCheck('length(@)', 2))

        # show secret (latest)
        self.cmd('keyvault secret show --vault-name {} -n secret1'.format(kv),
                 checks=JMESPathCheck('id', second_kid))

        # show secret (specific version)
        self.cmd('keyvault secret show --vault-name {} -n secret1 -v {}'.format(kv, first_version),
                 checks=JMESPathCheck('id', first_kid))

        # set secret attributes
        self.cmd('keyvault secret set-attributes --vault-name {} -n secret1 --enabled false'.format(kv), checks=[
            JMESPathCheck('id', second_kid),
            JMESPathCheck('attributes.enabled', False)
        ])

        # backup and then delete secret
        bak_file = 'backup.secret'
        self.cmd('keyvault secret backup --vault-name {} -n secret1 --file {}'.format(kv, bak_file))
        self.cmd('keyvault secret delete --vault-name {} -n secret1'.format(kv))
        self.cmd('keyvault secret list --vault-name {}'.format(kv), checks=NoneCheck())

        # restore key from backup
        self.cmd('keyvault secret restore --vault-name {} --file {}'.format(kv, bak_file))
        self.cmd('keyvault secret list-versions --vault-name {} -n secret1'.format(kv),
                 checks=JMESPathCheck('length(@)', 2))
        if os.path.isfile(bak_file):
            os.remove(bak_file)

        # delete secret
        self.cmd('keyvault secret delete --vault-name {} -n secret1'.format(kv))
        self.cmd('keyvault secret list --vault-name {}'.format(kv),
                 checks=NoneCheck())

        self._test_download_secret()
    def test_sqlvm_create_and_delete(self, resource_group,
                                     resource_group_location, sqlvm1, sqlvm2,
                                     sqlvm3, storage_account):

        # test create sqlvm1 with minimal required parameters
        self.cmd('sql vm create -n {} -g {} -l {} --license-type {}'.format(
            sqlvm1, resource_group, resource_group_location, 'PAYG'),
                 checks=[
                     JMESPathCheck('name', sqlvm1),
                     JMESPathCheck('location', resource_group_location),
                     JMESPathCheck('provisioningState', "Succeeded"),
                     JMESPathCheck('sqlServerLicenseType', 'PAYG')
                 ])

        # test create sqlvm2 with AHUB changes inmediately
        self.cmd('sql vm create -n {} -g {} -l {} --license-type {}'.format(
            sqlvm2, resource_group, resource_group_location, 'AHUB'),
                 checks=[
                     JMESPathCheck('name', sqlvm2),
                     JMESPathCheck('location', resource_group_location),
                     JMESPathCheck('provisioningState', "Succeeded"),
                     JMESPathCheck('sqlServerLicenseType', 'AHUB')
                 ])

        # test create sqlvm with sql connectivity settings
        self.cmd(
            'sql vm create -n {} -g {} -l {} --license-type {} --sql-mgmt-type {} --connectivity-type {} --port {} --sql-auth-update-username {} --sql-auth-update-pwd {}'
            .format(sqlvm3, resource_group, resource_group_location, 'PAYG',
                    'Full', 'PUBLIC', 1433, 'sqladmin123',
                    'SecretPassword123'),
            checks=[
                JMESPathCheck('name', sqlvm3),
                JMESPathCheck('location', resource_group_location),
                JMESPathCheck('provisioningState', "Succeeded"),
                JMESPathCheck('sqlServerLicenseType', 'PAYG'),
                JMESPathCheck('sqlManagement', 'Full')
            ])

        # For allocation purposes, will delete the vms and re create them with different settings.
        # delete sqlvm1
        self.cmd('sql vm delete -n {} -g {} --yes'.format(
            sqlvm1, resource_group),
                 checks=NoneCheck())

        # delete sqlvm2
        self.cmd('sql vm delete -n {} -g {} --yes'.format(
            sqlvm2, resource_group),
                 checks=NoneCheck())

        # delete sqlvm3
        self.cmd('sql vm delete -n {} -g {} --yes'.format(
            sqlvm3, resource_group),
                 checks=NoneCheck())

        # test create sqlvm1 with auto patching
        self.cmd(
            'sql vm create -n {} -g {} -l {} --license-type {} --sql-mgmt-type {} --day-of-week {} --maintenance-window-duration {} --maintenance-window-start-hour {}'
            .format(sqlvm1, resource_group, resource_group_location, 'PAYG',
                    'Full', 'Monday', 60, 22),
            checks=[
                JMESPathCheck('name', sqlvm1),
                JMESPathCheck('location', resource_group_location),
                JMESPathCheck('provisioningState', "Succeeded"),
                JMESPathCheck('sqlServerLicenseType', 'PAYG'),
                JMESPathCheck('sqlManagement', 'Full')
            ])

        # test create sqlvm1 with auto backup
        self.cmd(
            'storage account update -n {} -g {} --set kind=StorageV2'.format(
                storage_account, resource_group))

        sa = self.cmd('storage account show -n {} -g {}'.format(
            storage_account, resource_group)).get_output_in_json()

        key = self.cmd('storage account keys list -n {} -g {}'.format(
            storage_account, resource_group)).get_output_in_json()

        self.cmd(
            'sql vm create -n {} -g {} -l {} --license-type {} --backup-schedule-type {} --full-backup-frequency {} --full-backup-start-hour {} --full-backup-duration {} '
            '--sa-key {} --storage-account {} --retention-period {} --log-backup-frequency {} --sql-mgmt-type {}'
            .format(sqlvm2, resource_group, resource_group_location, 'PAYG',
                    'Manual', 'Weekly', 2, 2, key[0]['value'],
                    sa['primaryEndpoints']['blob'], 30, 60, 'Full'),
            checks=[
                JMESPathCheck('name', sqlvm2),
                JMESPathCheck('location', resource_group_location),
                JMESPathCheck('provisioningState', "Succeeded"),
                JMESPathCheck('sqlServerLicenseType', 'PAYG'),
                JMESPathCheck('sqlManagement', 'Full')
            ])

        # test create sqlvm1 with R services on
        self.cmd(
            'sql vm create -n {} -g {} -l {} --license-type {} --enable-r-services {} --sql-mgmt-type {}'
            .format(sqlvm3, resource_group, resource_group_location, 'PAYG',
                    True, 'Full'),
            checks=[
                JMESPathCheck('name', sqlvm3),
                JMESPathCheck('location', resource_group_location),
                JMESPathCheck('provisioningState', "Succeeded"),
                JMESPathCheck('sqlServerLicenseType', 'PAYG'),
                JMESPathCheck('sqlManagement', 'Full')
            ])
示例#3
0
    def test_storage_blob_container_operations(self, resource_group, storage_account):
        account_info = self.get_account_info(resource_group, storage_account)
        c = self.create_container(account_info)
        proposed_lease_id = 'abcdabcd-abcd-abcd-abcd-abcdabcdabcd'
        new_lease_id = 'dcbadcba-dcba-dcba-dcba-dcbadcbadcba'
        date = '2016-04-01t12:00z'

        self.storage_cmd('storage container exists -n {}', account_info, c) \
            .assert_with_checks(JMESPathCheck('exists', True))

        self.storage_cmd('storage container set-permission -n {} --public-access blob',
                         account_info, c)
        self.storage_cmd('storage container show-permission -n {}', account_info, c) \
            .assert_with_checks(JMESPathCheck('publicAccess', 'blob'))
        self.storage_cmd('storage container set-permission -n {} --public-access off', account_info,
                         c)
        self.storage_cmd('storage container show-permission -n {}', account_info, c) \
            .assert_with_checks(JMESPathCheck('publicAccess', 'off'))

        self.storage_cmd('storage container show -n {}', account_info, c) \
            .assert_with_checks(JMESPathCheck('name', c))

        self.assertIn(c, self.storage_cmd('storage container list --query "[].name"',
                                          account_info).get_output_in_json())

        self.storage_cmd('storage container metadata update -n {} --metadata foo=bar moo=bak',
                         account_info, c)
        self.storage_cmd('storage container metadata show -n {}', account_info, c) \
            .assert_with_checks(JMESPathCheck('foo', 'bar'), JMESPathCheck('moo', 'bak'))
        self.storage_cmd('storage container metadata update -n {}', account_info, c)
        self.storage_cmd('storage container metadata show -n {}', account_info, c) \
            .assert_with_checks(NoneCheck())

        # test lease operations
        self.storage_cmd('storage container lease acquire --lease-duration 60 -c {} '
                         '--if-modified-since {} --proposed-lease-id {}', account_info, c, date,
                         proposed_lease_id)
        self.storage_cmd('storage container show --name {}', account_info, c) \
            .assert_with_checks(JMESPathCheck('properties.lease.duration', 'fixed'),
                                JMESPathCheck('properties.lease.state', 'leased'),
                                JMESPathCheck('properties.lease.status', 'locked'))
        self.storage_cmd('storage container lease change -c {} --lease-id {} '
                         '--proposed-lease-id {}', account_info, c, proposed_lease_id, new_lease_id)
        self.storage_cmd('storage container lease renew -c {} --lease-id {}',
                         account_info, c, new_lease_id)
        self.storage_cmd('storage container show -n {}', account_info, c) \
            .assert_with_checks(JMESPathCheck('properties.lease.duration', 'fixed'),
                                JMESPathCheck('properties.lease.state', 'leased'),
                                JMESPathCheck('properties.lease.status', 'locked'))
        self.storage_cmd('storage container lease break -c {} --lease-break-period 30',
                         account_info, c)
        self.storage_cmd('storage container show --name {}', account_info, c) \
            .assert_with_checks(JMESPathCheck('properties.lease.duration', None),
                                JMESPathCheck('properties.lease.state', 'breaking'),
                                JMESPathCheck('properties.lease.status', 'locked'))
        self.storage_cmd('storage container lease release -c {} --lease-id {}', account_info, c,
                         new_lease_id)
        self.storage_cmd('storage container show --name {}', account_info, c) \
            .assert_with_checks(JMESPathCheck('properties.lease.duration', None),
                                JMESPathCheck('properties.lease.state', 'available'),
                                JMESPathCheck('properties.lease.status', 'unlocked'))

        self.assertIn('sig=', self.storage_cmd('storage container generate-sas -n {}', account_info,
                                               c).output)

        # verify delete operation
        self.storage_cmd('storage container delete --name {} --fail-not-exist', account_info, c) \
            .assert_with_checks(JMESPathCheck('deleted', True))
        self.storage_cmd('storage container exists -n {}', account_info, c) \
            .assert_with_checks(JMESPathCheck('exists', False))
示例#4
0
    def _test_firewall_rule_mgmt(self, database_engine, resource_group):

        server_name = self.create_random_name(SERVER_NAME_PREFIX,
                                              SERVER_NAME_MAX_LENGTH)
        storage_size = 32
        if database_engine == 'postgres':
            version = '12'
            location = self.postgres_location
        elif database_engine == 'mysql':
            version = '5.7'
            location = self.mysql_location
        self.cmd(
            '{} flexible-server create -g {} --name {} -l {} --storage-size {} --version {}'
            .format(database_engine, resource_group, server_name, location,
                    storage_size, version))

        firewall_rule_name = 'firewall_test_rule'
        start_ip_address = '10.10.10.10'
        end_ip_address = '12.12.12.12'
        firewall_rule_checks = [
            JMESPathCheck('name', firewall_rule_name),
            JMESPathCheck('endIpAddress', end_ip_address),
            JMESPathCheck('startIpAddress', start_ip_address)
        ]

        # firewall-rule create
        self.cmd(
            '{} flexible-server firewall-rule create -g {} -s {} --name {} '
            '--start-ip-address {} --end-ip-address {} '.format(
                database_engine, resource_group, server_name,
                firewall_rule_name, start_ip_address, end_ip_address),
            checks=firewall_rule_checks)

        # firewall-rule show
        self.cmd(
            '{} flexible-server firewall-rule show -g {} -s {} --name {} '.
            format(database_engine, resource_group, server_name,
                   firewall_rule_name),
            checks=firewall_rule_checks)

        # firewall-rule update
        new_start_ip_address = '9.9.9.9'
        self.cmd(
            '{} flexible-server firewall-rule update -g {} -s {} --name {} --start-ip-address {}'
            .format(database_engine, resource_group, server_name,
                    firewall_rule_name, new_start_ip_address),
            checks=[JMESPathCheck('startIpAddress', new_start_ip_address)])

        new_end_ip_address = '13.13.13.13'
        self.cmd(
            '{} flexible-server firewall-rule update -g {} -s {} --name {} --end-ip-address {}'
            .format(database_engine, resource_group, server_name,
                    firewall_rule_name, new_end_ip_address))

        # Add second firewall-rule
        new_firewall_rule_name = 'firewall_test_rule2'
        firewall_rule_checks = [
            JMESPathCheck('name', new_firewall_rule_name),
            JMESPathCheck('endIpAddress', end_ip_address),
            JMESPathCheck('startIpAddress', start_ip_address)
        ]
        self.cmd(
            '{} flexible-server firewall-rule create -g {} -s {} --name {} '
            '--start-ip-address {} --end-ip-address {} '.format(
                database_engine, resource_group, server_name,
                new_firewall_rule_name, start_ip_address, end_ip_address),
            checks=firewall_rule_checks)

        # firewall-rule list
        self.cmd('{} flexible-server firewall-rule list -g {} -s {}'.format(
            database_engine, resource_group, server_name),
                 checks=[JMESPathCheck('length(@)', 2)])

        # firewall-rule delete
        self.cmd(
            '{} flexible-server firewall-rule delete --name {} -g {} --server {} --prompt no'
            .format(database_engine, firewall_rule_name, resource_group,
                    server_name),
            checks=NoneCheck())

        self.cmd(
            '{} flexible-server firewall-rule list -g {} --server {}'.format(
                database_engine, resource_group, server_name),
            checks=[JMESPathCheck('length(@)', 1)])

        self.cmd(
            '{} flexible-server firewall-rule delete -g {} -s {} --name {} --prompt no'
            .format(database_engine, resource_group, server_name,
                    new_firewall_rule_name))

        self.cmd('{} flexible-server firewall-rule list -g {} -s {}'.format(
            database_engine, resource_group, server_name),
                 checks=NoneCheck())
示例#5
0
    def _test_flexible_server_vnet_mgmt_supplied_subnet_id_in_different_rg(
            self, database_engine, resource_group_1, resource_group_2):
        # flexible-server create
        if self.cli_ctx.local_context.is_on:
            self.cmd('local-context off')

        if database_engine == 'postgres':
            location = self.postgres_location
        elif database_engine == 'mysql':
            location = self.mysql_location

        vnet_name = 'clitestvnet7'
        subnet_name = 'clitestsubnet7'
        address_prefix = '10.0.0.0/16'
        subnet_prefix_1 = '10.0.0.0/24'
        vnet_name_2 = 'clitestvnet8'
        subnet_name_2 = 'clitestsubnet8'

        # flexible-servers
        servers = [
            'testvnetserver7' + database_engine,
            'testvnetserver8' + database_engine
        ]

        # Case 1 : Provision a server with supplied subnetid that exists in a different RG

        # create vnet and subnet.
        vnet_result = self.cmd(
            'network vnet create -n {} -g {} -l {} --address-prefix {} --subnet-name {} --subnet-prefix {}'
            .format(vnet_name, resource_group_1, location, address_prefix,
                    subnet_name, subnet_prefix_1)).get_output_in_json()

        # create server - Delegation should be added.
        self.cmd('{} flexible-server create -g {} -n {} --subnet {}'.format(
            database_engine, resource_group_2, servers[0],
            vnet_result['newVNet']['subnets'][0]['id']))

        # Case 2 : Provision a server with supplied subnetid that has a different RG in the ID but does not exist. The vnet and subnet is then created in the RG of the server
        self.cmd('{} flexible-server create -g {} -n {} --subnet {}'.format(
            database_engine, resource_group_2, servers[1],
            '/subscriptions/{}/resourceGroups/{}/providers/Microsoft.Network/virtualNetworks/{}/subnets/{}'
            .format(self.get_subscription_id(), resource_group_1, vnet_name_2,
                    subnet_name_2)))

        # flexible-server show to validate delegation is added to both the created server
        show_result_1 = self.cmd('{} flexible-server show -g {} -n {}'.format(
            database_engine, resource_group_2,
            servers[0])).get_output_in_json()

        show_result_2 = self.cmd('{} flexible-server show -g {} -n {}'.format(
            database_engine, resource_group_2,
            servers[1])).get_output_in_json()

        self.assertEqual(
            show_result_1['delegatedSubnetArguments']['subnetArmResourceId'],
            '/subscriptions/{}/resourceGroups/{}/providers/Microsoft.Network/virtualNetworks/{}/subnets/{}'
            .format(self.get_subscription_id(), resource_group_1, vnet_name,
                    subnet_name))

        self.assertEqual(
            show_result_2['delegatedSubnetArguments']['subnetArmResourceId'],
            '/subscriptions/{}/resourceGroups/{}/providers/Microsoft.Network/virtualNetworks/{}/subnets/{}'
            .format(self.get_subscription_id(), resource_group_2, vnet_name_2,
                    'Subnet' + servers[1][6:]))

        # delete all servers
        self.cmd('{} flexible-server delete -g {} -n {} --yes'.format(
            database_engine, resource_group_2, servers[0]),
                 checks=NoneCheck())

        self.cmd('{} flexible-server delete -g {} -n {} --yes'.format(
            database_engine, resource_group_2, servers[1]),
                 checks=NoneCheck())

        time.sleep(15 * 60)

        # remove delegations from all vnets
        self.cmd(
            'network vnet subnet update -g {} --name {} --vnet-name {} --remove delegations'
            .format(resource_group_1, subnet_name, vnet_name))

        self.cmd(
            'network vnet subnet update -g {} --name {} --vnet-name {} --remove delegations'
            .format(resource_group_2, 'Subnet' + servers[1][6:], vnet_name_2))

        # remove all vnets
        self.cmd('network vnet delete -g {} -n {}'.format(
            resource_group_1, vnet_name))
        self.cmd('network vnet delete -g {} -n {}'.format(
            resource_group_2, vnet_name_2))
示例#6
0
    def _test_flexible_server_replica_mgmt(self, database_engine, resource_group):
        location = self.mysql_location
        master_server = self.create_random_name(SERVER_NAME_PREFIX, 32)
        replicas = [self.create_random_name('azuredbclirep1', SERVER_NAME_MAX_LENGTH),
                    self.create_random_name('azuredbclirep2', SERVER_NAME_MAX_LENGTH)]

        # create a server
        self.cmd('{} flexible-server create -g {} --name {} -l {} --storage-size {}'
                 .format(database_engine, resource_group, master_server, location, 256))
        result = self.cmd('{} flexible-server show -g {} --name {} '
                          .format(database_engine, resource_group, master_server),
                          checks=[JMESPathCheck('replicationRole', 'None')]).get_output_in_json()

        # test replica create
        self.cmd('{} flexible-server replica create -g {} --replica-name {} --source-server {}'
                 .format(database_engine, resource_group, replicas[0], result['id']),
                 checks=[
                     JMESPathCheck('name', replicas[0]),
                     JMESPathCheck('resourceGroup', resource_group),
                     JMESPathCheck('sku.tier', result['sku']['tier']),
                     JMESPathCheck('sku.name', result['sku']['name']),
                     JMESPathCheck('replicationRole', 'Replica'),
                     JMESPathCheck('sourceServerId', result['id']),
                     JMESPathCheck('replicaCapacity', '0')])

        # test replica list
        self.cmd('{} flexible-server replica list -g {} --name {}'
                 .format(database_engine, resource_group, master_server),
                 checks=[JMESPathCheck('length(@)', 1)])

        # test replica stop
        self.cmd('{} flexible-server replica stop-replication -g {} --name {} --yes'
                 .format(database_engine, resource_group, replicas[0]),
                 checks=[
                     JMESPathCheck('name', replicas[0]),
                     JMESPathCheck('resourceGroup', resource_group),
                     JMESPathCheck('replicationRole', 'None'),
                     JMESPathCheck('sourceServerId', ''),
                     JMESPathCheck('replicaCapacity', result['replicaCapacity'])])

        # test show server with replication info, master becomes normal server
        self.cmd('{} flexible-server show -g {} --name {}'
                 .format(database_engine, resource_group, master_server),
                 checks=[
                     JMESPathCheck('replicationRole', 'None'),
                     JMESPathCheck('sourceServerId', ''),
                     JMESPathCheck('replicaCapacity', result['replicaCapacity'])])

        # test delete master server
        self.cmd('{} flexible-server replica create -g {} --replica-name {} --source-server {}'
                 .format(database_engine, resource_group, replicas[1], result['id']),
                 checks=[
                     JMESPathCheck('name', replicas[1]),
                     JMESPathCheck('resourceGroup', resource_group),
                     JMESPathCheck('sku.name', result['sku']['name']),
                     JMESPathCheck('replicationRole', 'Replica'),
                     JMESPathCheck('sourceServerId', result['id']),
                     JMESPathCheck('replicaCapacity', '0')])

        self.cmd('{} flexible-server delete -g {} --name {} --yes'
                 .format(database_engine, resource_group, master_server), checks=NoneCheck())

        # test show server with replication info, replica was auto stopped after master server deleted
        self.cmd('{} flexible-server show -g {} --name {}'
                 .format(database_engine, resource_group, replicas[1]),
                 checks=[
                     JMESPathCheck('replicationRole', 'None'),
                     JMESPathCheck('sourceServerId', ''),
                     JMESPathCheck('replicaCapacity', result['replicaCapacity'])])

        # clean up servers
        self.cmd('{} flexible-server delete -g {} --name {} --yes'
                 .format(database_engine, resource_group, replicas[0]), checks=NoneCheck())
        self.cmd('{} flexible-server delete -g {} --name {} --yes'
                 .format(database_engine, resource_group, replicas[1]), checks=NoneCheck())
示例#7
0
    def _test_server_mgmt(self, database_engine, resource_group_1,
                          resource_group_2):
        servers = [
            self.create_random_name(SERVER_NAME_PREFIX,
                                    SERVER_NAME_MAX_LENGTH),
            self.create_random_name('azuredbclirestore',
                                    SERVER_NAME_MAX_LENGTH),
            self.create_random_name('azuredbcligeorestore',
                                    SERVER_NAME_MAX_LENGTH)
        ]
        admin_login = '******'
        admin_passwords = ['SecretPassword123', 'SecretPassword456']
        edition = 'GeneralPurpose'
        backupRetention = 10
        geoRedundantBackup = 'Enabled'
        old_cu = 2
        new_cu = 4
        family = 'Gen5'
        skuname = '{}_{}_{}'.format("GP", family, old_cu)
        loc = 'koreasouth'

        geoGeoRedundantBackup = 'Disabled'
        geoBackupRetention = 20
        geoloc = 'koreasouth'

        # test create server
        self.cmd('{} server create -g {} --name {} -l {} '
                 '--admin-user {} --admin-password {} '
                 '--sku-name {} --tags key=1 --geo-redundant-backup {} '
                 '--backup-retention {}'.format(database_engine,
                                                resource_group_1, servers[0],
                                                loc, admin_login,
                                                admin_passwords[0], skuname,
                                                geoRedundantBackup,
                                                backupRetention),
                 checks=[
                     JMESPathCheck('name', servers[0]),
                     JMESPathCheck('resourceGroup', resource_group_1),
                     JMESPathCheck('administratorLogin', admin_login),
                     JMESPathCheck('sslEnforcement', 'Enabled'),
                     JMESPathCheck('tags.key', '1'),
                     JMESPathCheck('sku.capacity', old_cu),
                     JMESPathCheck('sku.tier', edition),
                     JMESPathCheck('storageProfile.backupRetentionDays',
                                   backupRetention),
                     JMESPathCheck('storageProfile.geoRedundantBackup',
                                   geoRedundantBackup)
                 ])

        # test show server
        result = self.cmd('{} server show -g {} --name {}'
                          .format(database_engine, resource_group_1, servers[0]),
                          checks=[
                              JMESPathCheck('name', servers[0]),
                              JMESPathCheck('resourceGroup', resource_group_1),
                              JMESPathCheck('administratorLogin', admin_login),
                              JMESPathCheck('sslEnforcement', 'Enabled'),
                              JMESPathCheck('tags.key', '1'),
                              JMESPathCheck('sku.capacity', old_cu),
                              JMESPathCheck('sku.tier', edition),
                              JMESPathCheck('storageProfile.backupRetentionDays', backupRetention),
                              JMESPathCheck('storageProfile.geoRedundantBackup', geoRedundantBackup)]).get_output_in_json()  # pylint: disable=line-too-long

        # test update server
        self.cmd('{} server update -g {} --name {} --admin-password {} '
                 '--ssl-enforcement Disabled --tags key=2'.format(
                     database_engine, resource_group_1, servers[0],
                     admin_passwords[1]),
                 checks=[
                     JMESPathCheck('name', servers[0]),
                     JMESPathCheck('resourceGroup', resource_group_1),
                     JMESPathCheck('sslEnforcement', 'Disabled'),
                     JMESPathCheck('sku.tier', edition),
                     JMESPathCheck('tags.key', '2'),
                     JMESPathCheck('administratorLogin', admin_login)
                 ])

        self.cmd('{} server update -g {} --name {} --vcore {}'.format(
            database_engine, resource_group_1, servers[0], new_cu),
                 checks=[
                     JMESPathCheck('name', servers[0]),
                     JMESPathCheck('resourceGroup', resource_group_1),
                     JMESPathCheck('sku.tier', edition),
                     JMESPathCheck('sku.capacity', new_cu),
                     JMESPathCheck('administratorLogin', admin_login)
                 ])

        # test show server
        self.cmd('{} server show -g {} --name {}'.format(
            database_engine, resource_group_1, servers[0]),
                 checks=[
                     JMESPathCheck('name', servers[0]),
                     JMESPathCheck('resourceGroup', resource_group_1),
                     JMESPathCheck('sslEnforcement', 'Disabled'),
                     JMESPathCheck('sku.tier', edition),
                     JMESPathCheck('sku.capacity', new_cu),
                     JMESPathCheck('tags.key', '2'),
                     JMESPathCheck('administratorLogin', admin_login)
                 ])

        # test update server per property
        self.cmd('{} server update -g {} --name {} --vcore {}'.format(
            database_engine, resource_group_1, servers[0], old_cu),
                 checks=[
                     JMESPathCheck('name', servers[0]),
                     JMESPathCheck('resourceGroup', resource_group_1),
                     JMESPathCheck('sku.tier', edition),
                     JMESPathCheck('sku.capacity', old_cu),
                     JMESPathCheck('administratorLogin', admin_login)
                 ])

        self.cmd('{} server update -g {} --name {} --ssl-enforcement Enabled'.
                 format(database_engine, resource_group_1, servers[0]),
                 checks=[
                     JMESPathCheck('name', servers[0]),
                     JMESPathCheck('resourceGroup', resource_group_1),
                     JMESPathCheck('sslEnforcement', 'Enabled'),
                     JMESPathCheck('sku.tier', edition),
                     JMESPathCheck('administratorLogin', admin_login)
                 ])

        self.cmd('{} server update -g {} --name {} --tags key=3'.format(
            database_engine, resource_group_1, servers[0]),
                 checks=[
                     JMESPathCheck('name', servers[0]),
                     JMESPathCheck('resourceGroup', resource_group_1),
                     JMESPathCheck('sslEnforcement', 'Enabled'),
                     JMESPathCheck('tags.key', '3'),
                     JMESPathCheck('sku.tier', edition),
                     JMESPathCheck('administratorLogin', admin_login)
                 ])

        # test restore to a new server, make sure wait at least 5 min after server created.
        from time import sleep
        sleep(300)

        self.cmd('{} server restore -g {} --name {} '
                 '--source-server {} '
                 '--restore-point-in-time {}'.format(
                     database_engine, resource_group_2, servers[1],
                     result['id'],
                     datetime.utcnow().replace(tzinfo=tzutc()).isoformat()),
                 checks=[
                     JMESPathCheck('name', servers[1]),
                     JMESPathCheck('resourceGroup', resource_group_2),
                     JMESPathCheck('sku.tier', edition),
                     JMESPathCheck('administratorLogin', admin_login)
                 ])

        # test georestore server
        with self.assertRaises(CLIError) as exception:
            self.cmd(
                '{} server georestore -g {} --name {} --source-server {} -l {} '
                '--geo-redundant-backup {} --backup-retention {}'.format(
                    database_engine, resource_group_2, servers[2],
                    result['id'], geoloc, geoGeoRedundantBackup,
                    geoBackupRetention),
                checks=[
                    JMESPathCheck('name', servers[2]),
                    JMESPathCheck('resourceGroup', resource_group_2),
                    JMESPathCheck('sku.tier', edition),
                    JMESPathCheck('administratorLogin', admin_login),
                    JMESPathCheck('location', geoloc),
                    JMESPathCheck('storageProfile.backupRetentionDays',
                                  geoBackupRetention),
                    JMESPathCheck('storageProfile.geoRedundantBackup',
                                  geoGeoRedundantBackup)
                ])
        self.assertTrue(
            ' does not have the server ' in '{}'.format(exception.exception))

        # test list servers
        self.cmd('{} server list -g {}'.format(database_engine,
                                               resource_group_2),
                 checks=[JMESPathCheck('type(@)', 'array')])

        # test list servers without resource group
        self.cmd('{} server list'.format(database_engine),
                 checks=[JMESPathCheck('type(@)', 'array')])

        # test delete server
        self.cmd('{} server delete -g {} --name {} --yes'.format(
            database_engine, resource_group_1, servers[0]),
                 checks=NoneCheck())
        self.cmd('{} server delete -g {} -n {} --yes'.format(
            database_engine, resource_group_2, servers[1]),
                 checks=NoneCheck())

        # test list server should be 0
        self.cmd('{} server list -g {}'.format(database_engine,
                                               resource_group_1),
                 checks=[NoneCheck()])
        self.cmd('{} server list -g {}'.format(database_engine,
                                               resource_group_2),
                 checks=[NoneCheck()])
示例#8
0
    def _test_firewall_rule_mgmt(self, database_engine, resource_group,
                                 server):

        firewall_rule_name = 'firewall_test_rule'
        start_ip_address = '10.10.10.10'
        end_ip_address = '12.12.12.12'
        firewall_rule_checks = [
            JMESPathCheck('name', firewall_rule_name),
            JMESPathCheck('endIpAddress', end_ip_address),
            JMESPathCheck('startIpAddress', start_ip_address)
        ]

        self.cmd(
            '{} flexible-server firewall-rule create -g {} --name {} --rule-name {} '
            '--start-ip-address {} --end-ip-address {} '.format(
                database_engine, resource_group, server, firewall_rule_name,
                start_ip_address, end_ip_address),
            checks=firewall_rule_checks)

        self.cmd(
            '{} flexible-server firewall-rule show -g {} --name {} --rule-name {} '
            .format(database_engine, resource_group, server,
                    firewall_rule_name),
            checks=firewall_rule_checks)

        new_start_ip_address = '9.9.9.9'
        self.cmd(
            '{} flexible-server firewall-rule update -g {} --name {} --rule-name {} --start-ip-address {}'
            .format(database_engine, resource_group, server,
                    firewall_rule_name, new_start_ip_address),
            checks=[JMESPathCheck('startIpAddress', new_start_ip_address)])

        new_end_ip_address = '13.13.13.13'
        self.cmd(
            '{} flexible-server firewall-rule update -g {} --name {} --rule-name {} --end-ip-address {}'
            .format(database_engine, resource_group, server,
                    firewall_rule_name, new_end_ip_address))

        new_firewall_rule_name = 'firewall_test_rule2'
        firewall_rule_checks = [
            JMESPathCheck('name', new_firewall_rule_name),
            JMESPathCheck('endIpAddress', end_ip_address),
            JMESPathCheck('startIpAddress', start_ip_address)
        ]
        self.cmd(
            '{} flexible-server firewall-rule create -g {} -n {} --rule-name {} '
            '--start-ip-address {} --end-ip-address {} '.format(
                database_engine, resource_group, server,
                new_firewall_rule_name, start_ip_address, end_ip_address),
            checks=firewall_rule_checks)

        self.cmd('{} flexible-server firewall-rule list -g {} -n {}'.format(
            database_engine, resource_group, server),
                 checks=[JMESPathCheck('length(@)', 2)])

        self.cmd(
            '{} flexible-server firewall-rule delete --rule-name {} -g {} --name {} --yes'
            .format(database_engine, firewall_rule_name, resource_group,
                    server),
            checks=NoneCheck())

        self.cmd(
            '{} flexible-server firewall-rule list -g {} --name {}'.format(
                database_engine, resource_group, server),
            checks=[JMESPathCheck('length(@)', 1)])

        self.cmd(
            '{} flexible-server firewall-rule delete -g {} -n {} --rule-name {} --yes'
            .format(database_engine, resource_group, server,
                    new_firewall_rule_name))

        self.cmd('{} flexible-server firewall-rule list -g {} -n {}'.format(
            database_engine, resource_group, server),
                 checks=NoneCheck())
示例#9
0
    def _test_flexible_server_mgmt(self, database_engine, resource_group):

        from knack.util import CLIError

        # flexible-server create
        # flexible-server create auto-generate, no local context
        if self.cli_ctx.local_context.is_on:
            self.cmd('local-context off')

        location = self.location
        if database_engine == 'postgres':
            version = '12'
        elif database_engine == 'mysql':
            version = '5.7'

        # flexible-server create with user input
        server_name = self.create_random_name(SERVER_NAME_PREFIX, SERVER_NAME_MAX_LENGTH)
        admin_user = '******'
        sku_name = 'Standard_D4s_v3'
        tier = 'GeneralPurpose'
        high_availability = 'Disabled'
        tag_key1 = 'key1'
        tag_value1 = 'val1'
        tags = tag_key1 + '=' + tag_value1
        storage_size = 64
        storage_size_mb = storage_size * 1024
        backup_retention = 10

        list_checks = [JMESPathCheck('name', server_name),
                       JMESPathCheck('resourceGroup', resource_group),
                       JMESPathCheck('sku.name', sku_name),
                       JMESPathCheck('sku.tier', tier),
                       JMESPathCheck('version', version),
                       JMESPathCheck('storageProfile.storageMb', storage_size_mb),
                       JMESPathCheck('storageProfile.backupRetentionDays', backup_retention),
                       JMESPathCheck('tags.' + tag_key1, tag_value1),
                       JMESPathCheck('administratorLogin', admin_user)]

        self.cmd('{} flexible-server create -g {} -n {} -l {} --admin-user {} --sku-name {} '
                 '--version {} --storage-size {} --backup-retention {} --tier {} --high-availability {} --tags {} '
                 .format(database_engine, resource_group, server_name, location, admin_user, sku_name,
                         version, storage_size, backup_retention, tier, high_availability, tags))

        # flexible-server show
        self.cmd('{} flexible-server show -g {} -n {}'.format(database_engine, resource_group, server_name), checks=list_checks)

        # flexible-server update
        # update storage profile
        storage_size = 128
        storage_size_mb = storage_size * 1024
        updated_list_checks = [JMESPathCheck('storageProfile.storageMb', storage_size_mb)]
        self.cmd('{} flexible-server update -g {} -n {}  --storage-size {}'
                 .format(database_engine, resource_group, server_name, storage_size),
                 checks=updated_list_checks)

        # flexible-server restart
        self.cmd('{} flexible-server restart -g {} -n {}'
                 .format(database_engine, resource_group, server_name), checks=NoneCheck())

        # flexible-server stop
        self.cmd('{} flexible-server stop -g {} -n {}'
                 .format(database_engine, resource_group, server_name), checks=NoneCheck())

        # flexible-server start
        self.cmd('{} flexible-server start -g {} -n {}'
                 .format(database_engine, resource_group, server_name), checks=NoneCheck())

        # flexible-server list servers
        self.cmd('{} flexible-server list -g {}'.format(database_engine, resource_group),
                 checks=[JMESPathCheck('type(@)', 'array')])

        # test delete server
        self.cmd('{} flexible-server delete -g {} -n {} --force'.format(database_engine, resource_group, server_name), checks=NoneCheck())
示例#10
0
    def test_sqlvm_mgmt(self, resource_group, resource_group_location, sqlvm,
                        storage_account):

        loc = 'westus'

        sa = self.cmd('storage account show -n {} -g {}'.format(
            storage_account, resource_group)).get_output_in_json()

        key = self.cmd('storage account keys list -n {} -g {}'.format(
            storage_account, resource_group)).get_output_in_json()

        # test create sqlvm with minimal required parameters
        sqlvm_1 = self.cmd(
            'sql vm create -n {} -g {} -l {} --license-type {}'.format(
                sqlvm, resource_group, loc, 'PAYG'),
            checks=[
                JMESPathCheck('name', sqlvm),
                JMESPathCheck('location', loc),
                JMESPathCheck('sqlServerLicenseType', 'PAYG')
            ]).get_output_in_json()

        # test list sqlvm should be 1
        self.cmd('sql vm list -g {}'.format(resource_group),
                 checks=[JMESPathCheck('length(@)', 1)])

        # test show of vm
        self.cmd('sql vm show -n {} -g {}'.format(sqlvm, resource_group),
                 checks=[
                     JMESPathCheck('name', sqlvm),
                     JMESPathCheck('location', loc),
                     JMESPathCheck('provisioningState', "Succeeded"),
                     JMESPathCheck('id', sqlvm_1['id'])
                 ])

        # Check the id of the vm is correct in show
        self.cmd('sql vm show -n {} -g {}'.format(sqlvm, resource_group),
                 checks=[
                     JMESPathCheck('name', sqlvm),
                     JMESPathCheck('id', sqlvm_1['id'])
                 ])

        # test license change
        self.cmd('sql vm update -n {} -g {} --license-type {}'.format(
            sqlvm, resource_group, 'AHUB'),
                 checks=[
                     JMESPathCheck('name', sqlvm),
                     JMESPathCheck('location', loc),
                     JMESPathCheck('provisioningState', "Succeeded"),
                     JMESPathCheck('id', sqlvm_1['id']),
                     JMESPathCheck('sqlServerLicenseType', 'AHUB')
                 ])

        # test enabling R services
        self.cmd('sql vm update -n {} -g {} --enable-r-services {}'.format(
            sqlvm, resource_group, True),
                 checks=[
                     JMESPathCheck('name', sqlvm),
                     JMESPathCheck('location', loc),
                     JMESPathCheck('provisioningState', "Succeeded"),
                     JMESPathCheck('id', sqlvm_1['id'])
                 ])

        # test autopatching enabling succeeds
        self.cmd(
            'sql vm update -n {} -g {} --day-of-week {} --maintenance-window-duration {} --maintenance-window-start-hour {}'
            .format(sqlvm, resource_group, 'Monday', 60, 22),
            checks=[
                JMESPathCheck('name', sqlvm),
                JMESPathCheck('location', loc),
                JMESPathCheck('provisioningState', "Succeeded"),
                JMESPathCheck('id', sqlvm_1['id'])
            ])

        # test autopatching disabling succeeds
        self.cmd('sql vm update -n {} -g {} --enable-auto-patching {}'.format(
            sqlvm, resource_group, False),
                 checks=[
                     JMESPathCheck('name', sqlvm),
                     JMESPathCheck('location', loc),
                     JMESPathCheck('provisioningState', "Succeeded"),
                     JMESPathCheck('id', sqlvm_1['id'])
                 ])

        # test backup enabling works
        self.cmd(
            'sql vm update -n {} -g {} --backup-schedule-type {} --full-backup-frequency {} --full-backup-start-hour {} --full-backup-duration {} '
            '--sa-key {} --storage-account {} --retention-period {} --log-backup-frequency {}'
            .format(sqlvm, resource_group, 'Manual', 'Weekly', 2, 2,
                    key[0]['value'], sa['primaryEndpoints']['blob'], 30, 60),
            checks=[
                JMESPathCheck('name', sqlvm),
                JMESPathCheck('location', loc),
                JMESPathCheck('provisioningState', "Succeeded"),
                JMESPathCheck('id', sqlvm_1['id'])
            ])

        # test delete vm
        self.cmd('sql vm delete -n {} -g {} --yes'.format(
            sqlvm, resource_group),
                 checks=NoneCheck())

        # test list sql vm should be empty
        self.cmd('sql vm list -g {}'.format(resource_group),
                 checks=[NoneCheck()])
示例#11
0
    def test_keyvault_mgmt(self, resource_group):

        self.keyvault_names = [
            self.create_random_name('cli-keyvault-', 24),
            self.create_random_name('cli-keyvault-', 24),
            self.create_random_name('cli-keyvault-', 24),
            self.create_random_name('cli-keyvault-', 24)
        ]

        rg = resource_group
        kv = self.keyvault_names[0]
        loc = 'westus'

        # test create keyvault with default access policy set
        keyvault = self.cmd('keyvault create -g {} -n {} -l {}'.format(rg, kv, loc), checks=[
            JMESPathCheck('name', kv),
            JMESPathCheck('location', loc),
            JMESPathCheck('resourceGroup', rg),
            JMESPathCheck('type(properties.accessPolicies)', 'array'),
            JMESPathCheck('length(properties.accessPolicies)', 1),
            JMESPathCheck('properties.sku.name', 'standard')
        ]).get_output_in_json()
        policy_id = keyvault['properties']['accessPolicies'][0]['objectId']
        self.cmd('keyvault show -n {}'.format(kv), checks=[
            JMESPathCheck('name', kv),
            JMESPathCheck('location', loc),
            JMESPathCheck('resourceGroup', rg),
            JMESPathCheck('type(properties.accessPolicies)', 'array'),
            JMESPathCheck('length(properties.accessPolicies)', 1),
        ])
        self.cmd('keyvault list -g {}'.format(rg), checks=[
            JMESPathCheck('type(@)', 'array'),
            JMESPathCheck('length(@)', 1),
            JMESPathCheck('[0].name', kv),
            JMESPathCheck('[0].location', loc),
            JMESPathCheck('[0].resourceGroup', rg),
        ])
        # test updating keyvault sku name
        self.cmd('keyvault update -g {} -n {} --set properties.sku.name=premium'.format(rg, kv), checks=[
            JMESPathCheck('name', kv),
            JMESPathCheck('properties.sku.name', 'premium'),
        ])
        # test policy set/delete
        self.cmd('keyvault set-policy -g {} -n {} --object-id {} --certificate-permissions get list'.format(rg, kv, policy_id),
                 checks=JMESPathCheck('length(properties.accessPolicies[0].permissions.certificates)', 2))
        self.cmd('keyvault delete-policy -g {} -n {} --object-id {}'.format(rg, kv, policy_id), checks=[
            JMESPathCheck('type(properties.accessPolicies)', 'array'),
            JMESPathCheck('length(properties.accessPolicies)', 0)
        ])

        # test keyvault delete
        self.cmd('keyvault delete -n {}'.format(kv))
        self.cmd('keyvault list -g {}'.format(rg), checks=NoneCheck())

        # test create keyvault further
        self.cmd('keyvault create -g {} -n {} -l {} --no-self-perms'.format(rg, self.keyvault_names[1], loc), checks=[
            JMESPathCheck('type(properties.accessPolicies)', 'array'),
            JMESPathCheck('length(properties.accessPolicies)', 0)
        ])
        self.cmd('keyvault create -g {} -n {} -l {} --enabled-for-deployment true --enabled-for-disk-encryption true --enabled-for-template-deployment true'.format(rg, self.keyvault_names[2], loc), checks=[
            JMESPathCheck('properties.enabledForDeployment', True),
            JMESPathCheck('properties.enabledForDiskEncryption', True),
            JMESPathCheck('properties.enabledForTemplateDeployment', True)
        ])
        self.cmd('keyvault create -g {} -n {} -l {} --sku premium'.format(rg, self.keyvault_names[3], loc), checks=[
            JMESPathCheck('properties.sku.name', 'premium')
        ])
示例#12
0
    def test_keyvault_certificate(self, resource_group):

        self.resource_group = resource_group
        self.keyvault_name = self.create_random_name('cli-test-keyvault-', 24)
        self.location = 'westus'

        self._test_keyvault_certificate_get_default_policy()

        _create_keyvault(self, self.keyvault_name, self.resource_group, self.location)

        kv = self.keyvault_name

        self._test_certificate_download()
        policy_path = os.path.join(TEST_DIR, 'policy.json')
        policy2_path = os.path.join(TEST_DIR, 'policy2.json')

        # create a certificate
        self.cmd('keyvault certificate create --vault-name {} -n cert1 -p @"{}"'.format(kv, policy_path),
                 checks=JMESPathCheck('status', 'completed'))

        # list certificates
        self.cmd('keyvault certificate list --vault-name {}'.format(kv),
                 checks=JMESPathCheck('length(@)', 1))

        # create a new certificate version
        self.cmd('keyvault certificate create --vault-name {} -n cert1 -p @"{}"'.format(kv, policy2_path), checks=[
            JMESPathCheck('status', 'completed'),
        ])

        # list certificate versions
        ver_list = self.cmd('keyvault certificate list-versions --vault-name {} -n cert1'.format(kv),
                            checks=JMESPathCheck('length(@)', 2)).get_output_in_json()

        ver_list = sorted(ver_list, key=lambda x: x['attributes']['created'])
        versions = [x['id'] for x in ver_list]

        # show certificate (latest)
        self.cmd('keyvault certificate show --vault-name {} -n cert1'.format(kv), checks=[
            JMESPathCheck('id', versions[1]),
            JMESPathCheck('policy.x509CertificateProperties.validityInMonths', 50)
        ])

        # show certificate (specific version)
        cert_version = versions[0].rsplit('/', 1)[1]
        self.cmd('keyvault certificate show --vault-name {} -n cert1 -v {}'.format(kv, cert_version),
                 checks=JMESPathCheck('id', versions[0]))

        # update certificate attributes
        self.cmd('keyvault certificate set-attributes --vault-name {} -n cert1 --enabled false -p @"{}"'.format(kv, policy_path), checks=[
            JMESPathCheck('id', versions[1]),
            JMESPathCheck('attributes.enabled', False),
            JMESPathCheck('policy.x509CertificateProperties.validityInMonths', 60)
        ])

        self._test_keyvault_certificate_contacts()
        self._test_keyvault_certificate_issuers()
        self._test_keyvault_pending_certificate()

        # delete certificate
        self.cmd('keyvault certificate delete --vault-name {} -n cert1'.format(kv))
        self.cmd('keyvault certificate list --vault-name {}'.format(kv),
                 checks=NoneCheck())

        # test certificate import
        pem_encrypted_file = os.path.join(TEST_DIR, 'import_pem_encrypted_pwd_1234.pem')
        pem_encrypted_password = '******'
        pem_plain_file = os.path.join(TEST_DIR, 'import_pem_plain.pem')
        pem_policy_path = os.path.join(TEST_DIR, 'policy_import_pem.json')
        self.cmd('keyvault certificate import --vault-name {} -n pem-cert1 --file "{}" -p @"{}"'.format(kv, pem_plain_file, pem_policy_path))
        self.cmd('keyvault certificate import --vault-name {} -n pem-cert2 --file "{}" --password {} -p @"{}"'.format(kv, pem_encrypted_file, pem_encrypted_password, pem_policy_path))

        pfx_plain_file = os.path.join(TEST_DIR, 'import_pfx.pfx')
        pfx_policy_path = os.path.join(TEST_DIR, 'policy_import_pfx.json')
        self.cmd('keyvault certificate import --vault-name {} -n pfx-cert --file "{}" -p @"{}"'.format(kv, pfx_plain_file, pfx_policy_path))
示例#13
0
    def _test_keyvault_certificate_issuers(self):
        kv = self.keyvault_name
        self.cmd('keyvault certificate issuer create --vault-name {} --issuer-name issuer1 --provider Test'.format(kv), checks=[
            JMESPathCheck('provider', 'Test'),
            JMESPathCheck('attributes.enabled', True)
        ])
        self.cmd('keyvault certificate issuer show --vault-name {} --issuer-name issuer1'.format(kv), checks=[
            JMESPathCheck('provider', 'Test'),
            JMESPathCheck('attributes.enabled', True)
        ])
        self.cmd('keyvault certificate issuer update --vault-name {} --issuer-name issuer1 --organization-id TestOrg --account-id test_account'.format(kv), checks=[
            JMESPathCheck('provider', 'Test'),
            JMESPathCheck('attributes.enabled', True),
            JMESPathCheck('organizationDetails.id', 'TestOrg'),
            JMESPathCheck('credentials.accountId', 'test_account')
        ])
        with self.assertRaises(CLIError):
            self.cmd('keyvault certificate issuer update --vault-name {} --issuer-name notexist --organization-id TestOrg --account-id test_account'.format(kv))
        self.cmd('keyvault certificate issuer update --vault-name {} --issuer-name issuer1 --account-id ""'.format(kv), checks=[
            JMESPathCheck('provider', 'Test'),
            JMESPathCheck('attributes.enabled', True),
            JMESPathCheck('organizationDetails.id', 'TestOrg'),
            JMESPathCheck('credentials.accountId', None)
        ])
        self.cmd('keyvault certificate issuer list --vault-name {}'.format(kv),
                 checks=JMESPathCheck('length(@)', 1))

        # test admin commands
        self.cmd('keyvault certificate issuer admin add --vault-name {} --issuer-name issuer1 --email [email protected] --first-name Test --last-name Admin --phone 123-456-7890'.format(kv), checks=[
            JMESPathCheck('emailAddress', '*****@*****.**'),
            JMESPathCheck('firstName', 'Test'),
            JMESPathCheck('lastName', 'Admin'),
            JMESPathCheck('phone', '123-456-7890'),
        ])
        with self.assertRaises(CLIError):
            self.cmd(
                'keyvault certificate issuer admin add --vault-name {} --issuer-name issuer1 --email [email protected]'.format(kv))
        self.cmd('keyvault certificate issuer admin add --vault-name {} --issuer-name issuer1 --email [email protected]'.format(kv), checks=[
            JMESPathCheck('emailAddress', '*****@*****.**'),
            JMESPathCheck('firstName', None),
            JMESPathCheck('lastName', None),
            JMESPathCheck('phone', None),
        ])
        self.cmd('keyvault certificate issuer admin list --vault-name {} --issuer-name issuer1'.format(kv),
                 checks=JMESPathCheck('length(@)', 2))
        self.cmd('keyvault certificate issuer admin delete --vault-name {} --issuer-name issuer1 --email [email protected]'.format(kv))
        self.cmd('keyvault certificate issuer admin list --vault-name {} --issuer-name issuer1'.format(kv),
                 checks=JMESPathCheck('length(@)', 1))

        self.cmd('keyvault certificate issuer delete --vault-name {} --issuer-name issuer1'.format(kv))
        self.cmd('keyvault certificate issuer list --vault-name {}'.format(kv), checks=NoneCheck())
    def test_sqlvm_update_license_and_sku(self, resource_group,
                                          resource_group_location, sqlvm1):

        # test create sqlvm with sql license type and sku type.
        self.cmd(
            'sql vm create -n {} -g {} -l {} --image-sku {} --license-type {}'.
            format(sqlvm1, resource_group, resource_group_location,
                   'Enterprise', 'AHUB'),
            checks=[
                JMESPathCheck('name', sqlvm1),
                JMESPathCheck('location', resource_group_location),
                JMESPathCheck('provisioningState', "Succeeded"),
                JMESPathCheck('sqlServerLicenseType', 'AHUB'),
                JMESPathCheck('sqlImageSku', 'Enterprise'),
            ])

        # test sku change with license change.
        self.cmd('sql vm update -n {} -g {} --image-sku {} --license-type {}'.
                 format(sqlvm1, resource_group, 'Enterprise', 'PAYG'),
                 checks=[
                     JMESPathCheck('name', sqlvm1),
                     JMESPathCheck('location', resource_group_location),
                     JMESPathCheck('provisioningState', "Succeeded"),
                     JMESPathCheck('sqlImageSku', 'Enterprise'),
                     JMESPathCheck('sqlServerLicenseType', 'PAYG')
                 ])

        # delete sqlvm
        self.cmd('sql vm delete -n {} -g {} --yes'.format(
            sqlvm1, resource_group),
                 checks=NoneCheck())

        # test create sqlvm with sql license type PAYG and sku type.
        self.cmd(
            'sql vm create -n {} -g {} -l {} --image-sku {} --license-type {}'.
            format(sqlvm1, resource_group, resource_group_location,
                   'Enterprise', 'PAYG'),
            checks=[
                JMESPathCheck('name', sqlvm1),
                JMESPathCheck('location', resource_group_location),
                JMESPathCheck('provisioningState', "Succeeded"),
                JMESPathCheck('sqlServerLicenseType', 'PAYG'),
                JMESPathCheck('sqlImageSku', 'Enterprise'),
            ])

        # test sku change without license change.
        self.cmd('sql vm update -n {} -g {} --image-sku {}'.format(
            sqlvm1, resource_group, 'Enterprise'),
                 checks=[
                     JMESPathCheck('name', sqlvm1),
                     JMESPathCheck('location', resource_group_location),
                     JMESPathCheck('provisioningState', "Succeeded"),
                     JMESPathCheck('sqlImageSku', 'Enterprise'),
                     JMESPathCheck('sqlServerLicenseType', 'PAYG')
                 ])

        # test sku change with license change.
        self.cmd('sql vm update -n {} -g {} --image-sku {} --license-type {}'.
                 format(sqlvm1, resource_group, 'Enterprise', 'AHUB'),
                 checks=[
                     JMESPathCheck('name', sqlvm1),
                     JMESPathCheck('location', resource_group_location),
                     JMESPathCheck('provisioningState', "Succeeded"),
                     JMESPathCheck('sqlImageSku', 'Enterprise'),
                     JMESPathCheck('sqlServerLicenseType', 'AHUB')
                 ])

        # test license change for DR only.
        self.cmd('sql vm update -n {} -g {} --license-type {}'.format(
            sqlvm1, resource_group, 'DR'),
                 checks=[
                     JMESPathCheck('name', sqlvm1),
                     JMESPathCheck('location', resource_group_location),
                     JMESPathCheck('provisioningState', "Succeeded"),
                     JMESPathCheck('sqlImageSku', 'Enterprise'),
                     JMESPathCheck('sqlServerLicenseType', 'DR')
                 ])

        # delete sqlvm
        self.cmd('sql vm delete -n {} -g {} --yes'.format(
            sqlvm1, resource_group),
                 checks=NoneCheck())

        # test create sqlvm with sql license type DR.
        self.cmd('sql vm create -n {} -g {} -l {} --license-type {}'.format(
            sqlvm1, resource_group, resource_group_location, 'DR'),
                 checks=[
                     JMESPathCheck('name', sqlvm1),
                     JMESPathCheck('location', resource_group_location),
                     JMESPathCheck('provisioningState', "Succeeded"),
                     JMESPathCheck('sqlServerLicenseType', 'DR'),
                 ])
示例#15
0
    def _test_firewall_mgmt(self, resource_group, server, database_engine):
        rg = resource_group
        firewall_rule_1 = 'rule1'
        start_ip_address_1 = '0.0.0.0'
        end_ip_address_1 = '255.255.255.255'
        firewall_rule_2 = 'rule2'
        start_ip_address_2 = '123.123.123.123'
        end_ip_address_2 = '123.123.123.124'

        # test firewall-rule create
        self.cmd('{} server firewall-rule create -n {} -g {} -s {} '
                 '--start-ip-address {} --end-ip-address {}'.format(
                     database_engine, firewall_rule_1, rg, server,
                     start_ip_address_1, end_ip_address_1),
                 checks=[
                     JMESPathCheck('name', firewall_rule_1),
                     JMESPathCheck('resourceGroup', rg),
                     JMESPathCheck('startIpAddress', start_ip_address_1),
                     JMESPathCheck('endIpAddress', end_ip_address_1)
                 ])

        # test firewall-rule show
        self.cmd(
            '{} server firewall-rule show --name {} -g {} --server {}'.format(
                database_engine, firewall_rule_1, rg, server),
            checks=[
                JMESPathCheck('name', firewall_rule_1),
                JMESPathCheck('resourceGroup', rg),
                JMESPathCheck('startIpAddress', start_ip_address_1),
                JMESPathCheck('endIpAddress', end_ip_address_1)
            ])

        # test firewall-rule update
        self.cmd('{} server firewall-rule update -n {} -g {} -s {} '
                 '--start-ip-address {} --end-ip-address {}'.format(
                     database_engine, firewall_rule_1, rg, server,
                     start_ip_address_2, end_ip_address_2),
                 checks=[
                     JMESPathCheck('name', firewall_rule_1),
                     JMESPathCheck('resourceGroup', rg),
                     JMESPathCheck('startIpAddress', start_ip_address_2),
                     JMESPathCheck('endIpAddress', end_ip_address_2)
                 ])

        self.cmd('{} server firewall-rule update --name {} -g {} --server {} '
                 '--start-ip-address {}'.format(database_engine,
                                                firewall_rule_1, rg, server,
                                                start_ip_address_1),
                 checks=[
                     JMESPathCheck('name', firewall_rule_1),
                     JMESPathCheck('resourceGroup', rg),
                     JMESPathCheck('startIpAddress', start_ip_address_1),
                     JMESPathCheck('endIpAddress', end_ip_address_2)
                 ])

        self.cmd('{} server firewall-rule update -n {} -g {} -s {} '
                 '--end-ip-address {}'.format(database_engine, firewall_rule_1,
                                              rg, server, end_ip_address_1),
                 checks=[
                     JMESPathCheck('name', firewall_rule_1),
                     JMESPathCheck('resourceGroup', rg),
                     JMESPathCheck('startIpAddress', start_ip_address_1),
                     JMESPathCheck('endIpAddress', end_ip_address_1)
                 ])

        # test firewall-rule create another rule
        self.cmd('{} server firewall-rule create --name {} -g {} --server {} '
                 '--start-ip-address {} --end-ip-address {}'.format(
                     database_engine, firewall_rule_2, rg, server,
                     start_ip_address_2, end_ip_address_2),
                 checks=[
                     JMESPathCheck('name', firewall_rule_2),
                     JMESPathCheck('resourceGroup', rg),
                     JMESPathCheck('startIpAddress', start_ip_address_2),
                     JMESPathCheck('endIpAddress', end_ip_address_2)
                 ])

        # test firewall-rule list
        self.cmd('{} server firewall-rule list -g {} -s {}'.format(
            database_engine, rg, server),
                 checks=[JMESPathCheck('length(@)', 2)])

        self.cmd(
            '{} server firewall-rule delete --name {} -g {} --server {} --yes'.
            format(database_engine, firewall_rule_1, rg, server),
            checks=NoneCheck())
        self.cmd('{} server firewall-rule list -g {} --server {}'.format(
            database_engine, rg, server),
                 checks=[JMESPathCheck('length(@)', 1)])
        self.cmd(
            '{} server firewall-rule delete -n {} -g {} -s {} --yes'.format(
                database_engine, firewall_rule_2, rg, server),
            checks=NoneCheck())
        self.cmd('{} server firewall-rule list -g {} --server {}'.format(
            database_engine, rg, server),
                 checks=[NoneCheck()])
    def test_sqlvm_group_mgmt(self, resource_group, resource_group_location,
                              storage_account1, storage_account2):

        name = 'sqlvmgroup'
        image_offer = 'SQL2017-WS2016'
        image_sku = 'Enterprise'
        domain = 'domain.com'
        operator_acc = 'myvmadmin'
        sql_service_acc = 'sqlservice'

        sa_1 = self.cmd('storage account show -n {} -g {}'.format(
            storage_account1, resource_group)).get_output_in_json()

        key_1 = self.cmd('storage account keys list -n {} -g {}'.format(
            storage_account1, resource_group)).get_output_in_json()

        sa_2 = self.cmd('storage account show -n {} -g {}'.format(
            storage_account2, resource_group)).get_output_in_json()

        key_2 = self.cmd('storage account keys list -n {} -g {}'.format(
            storage_account2, resource_group)).get_output_in_json()

        # create sql vm group
        sqlvmgroup = self.cmd(
            'sql vm group create -n {} -g {} -l {} -i {} -s {} -f {} -p {} -k {} -e {} -u {}'
            .format(name, resource_group, resource_group_location, image_offer,
                    image_sku, domain, operator_acc, key_1[0]['value'],
                    sql_service_acc, sa_1['primaryEndpoints']['blob']),
            checks=[
                JMESPathCheck('name', name),
                JMESPathCheck('location', resource_group_location),
                JMESPathCheck('provisioningState', "Succeeded")
            ]).get_output_in_json()

        # test list sqlvm should be 1
        self.cmd('sql vm group list -g {}'.format(resource_group),
                 checks=[JMESPathCheck('length(@)', 1)])

        # test show of the group
        self.cmd('sql vm group show -n {} -g {}'.format(name, resource_group),
                 checks=[
                     JMESPathCheck('name', name),
                     JMESPathCheck('location', resource_group_location),
                     JMESPathCheck('provisioningState', "Succeeded"),
                     JMESPathCheck('sqlImageOffer', image_offer),
                     JMESPathCheck('sqlImageSku', image_sku),
                     JMESPathCheck('id', sqlvmgroup['id'])
                 ])

        # Change the storage account url and key
        self.cmd('sql vm group update -n {} -g {} -u {} -k {}'.format(
            name, resource_group, sa_2['primaryEndpoints']['blob'],
            key_2[0]['value']),
                 checks=[
                     JMESPathCheck('name', name),
                     JMESPathCheck('location', resource_group_location),
                     JMESPathCheck('wsfcDomainProfile.storageAccountUrl',
                                   sa_2['primaryEndpoints']['blob'])
                 ])

        # change the domain
        self.cmd('sql vm group update -n {} -g {} -f {} -k {}'.format(
            name, resource_group, 'my' + domain, key_2[0]['value']),
                 checks=[
                     JMESPathCheck('name', name),
                     JMESPathCheck('location', resource_group_location),
                     JMESPathCheck('wsfcDomainProfile.domainFqdn',
                                   'my' + domain)
                 ])

        # change the operator account
        self.cmd('sql vm group update -n {} -g {} -p {} -k {}'.format(
            name, resource_group, 'my' + operator_acc, key_2[0]['value']),
                 checks=[
                     JMESPathCheck('name', name),
                     JMESPathCheck('location', resource_group_location),
                     JMESPathCheck('wsfcDomainProfile.clusterOperatorAccount',
                                   'my' + operator_acc)
                 ])

        # test delete vm
        self.cmd('sql vm group delete -n {} -g {} --yes'.format(
            name, resource_group),
                 checks=NoneCheck())

        # test list sql vm should be empty
        self.cmd('sql vm group list -g {}'.format(resource_group),
                 checks=[NoneCheck()])
示例#17
0
    def _test_server_mgmt(self, database_engine, resource_group_1,
                          resource_group_2):
        servers = [
            self.create_random_name(SERVER_NAME_PREFIX,
                                    SERVER_NAME_MAX_LENGTH),
            self.create_random_name('azuredbclirestore',
                                    SERVER_NAME_MAX_LENGTH)
        ]
        admin_login = '******'
        admin_passwords = ['SecretPassword123', 'SecretPassword456']
        edition = 'Basic'
        old_cu = 100
        new_cu = 50

        rg = resource_group_1
        loc = 'westeurope'

        # test create server
        self.cmd(
            '{} server create -g {} --name {} -l {} '
            '--admin-user {} --admin-password {} '
            '--performance-tier {} --compute-units {} --tags key=1'.format(
                database_engine, rg, servers[0], loc, admin_login,
                admin_passwords[0], edition, old_cu),
            checks=[
                JMESPathCheck('name', servers[0]),
                JMESPathCheck('resourceGroup', rg),
                JMESPathCheck('administratorLogin', admin_login),
                JMESPathCheck('sslEnforcement', 'Enabled'),
                JMESPathCheck('tags.key', '1'),
                JMESPathCheck('sku.capacity', old_cu),
                JMESPathCheck('sku.tier', edition)
            ])

        # test show server
        result = self.cmd('{} server show -g {} --name {}'.format(
            database_engine, rg, servers[0]),
                          checks=[
                              JMESPathCheck('name', servers[0]),
                              JMESPathCheck('administratorLogin', admin_login),
                              JMESPathCheck('sku.capacity', 100),
                              JMESPathCheck('resourceGroup', rg)
                          ]).get_output_in_json()

        # test update server
        self.cmd('{} server update -g {} --name {} --admin-password {} '
                 '--ssl-enforcement Disabled --tags key=2'.format(
                     database_engine, rg, servers[0], admin_passwords[1]),
                 checks=[
                     JMESPathCheck('name', servers[0]),
                     JMESPathCheck('resourceGroup', rg),
                     JMESPathCheck('sslEnforcement', 'Disabled'),
                     JMESPathCheck('sku.tier', edition),
                     JMESPathCheck('tags.key', '2'),
                     JMESPathCheck('administratorLogin', admin_login)
                 ])

        self.cmd('{} server update -g {} --name {} --compute-units {}'.format(
            database_engine, rg, servers[0], new_cu),
                 checks=[
                     JMESPathCheck('name', servers[0]),
                     JMESPathCheck('resourceGroup', rg),
                     JMESPathCheck('sku.tier', edition),
                     JMESPathCheck('sku.capacity', new_cu),
                     JMESPathCheck('administratorLogin', admin_login)
                 ])

        # test show server
        self.cmd('{} server show -g {} --name {}'.format(
            database_engine, rg, servers[0]),
                 checks=[
                     JMESPathCheck('name', servers[0]),
                     JMESPathCheck('resourceGroup', rg),
                     JMESPathCheck('sslEnforcement', 'Disabled'),
                     JMESPathCheck('sku.tier', edition),
                     JMESPathCheck('sku.capacity', new_cu),
                     JMESPathCheck('tags.key', '2'),
                     JMESPathCheck('administratorLogin', admin_login)
                 ])

        # test update server per property
        self.cmd('{} server update -g {} --name {} --compute-units {}'.format(
            database_engine, rg, servers[0], old_cu),
                 checks=[
                     JMESPathCheck('name', servers[0]),
                     JMESPathCheck('resourceGroup', rg),
                     JMESPathCheck('sku.tier', edition),
                     JMESPathCheck('sku.capacity', old_cu),
                     JMESPathCheck('administratorLogin', admin_login)
                 ])

        self.cmd('{} server update -g {} --name {} --ssl-enforcement Enabled'.
                 format(database_engine, rg, servers[0]),
                 checks=[
                     JMESPathCheck('name', servers[0]),
                     JMESPathCheck('resourceGroup', rg),
                     JMESPathCheck('sslEnforcement', 'Enabled'),
                     JMESPathCheck('sku.tier', edition),
                     JMESPathCheck('administratorLogin', admin_login)
                 ])

        self.cmd('{} server update -g {} --name {} --tags key=3'.format(
            database_engine, rg, servers[0]),
                 checks=[
                     JMESPathCheck('name', servers[0]),
                     JMESPathCheck('resourceGroup', rg),
                     JMESPathCheck('sslEnforcement', 'Enabled'),
                     JMESPathCheck('tags.key', '3'),
                     JMESPathCheck('sku.tier', edition),
                     JMESPathCheck('administratorLogin', admin_login)
                 ])

        # test restore to a new server, make sure wait at least 5 min after server created.
        from time import sleep
        sleep(300)

        self.cmd('{} server restore -g {} --name {} '
                 '--source-server {} '
                 '--restore-point-in-time {}'.format(
                     database_engine, resource_group_2, servers[1],
                     result['id'],
                     datetime.utcnow().replace(tzinfo=tzutc()).isoformat()),
                 checks=[
                     JMESPathCheck('name', servers[1]),
                     JMESPathCheck('resourceGroup', resource_group_2),
                     JMESPathCheck('sku.tier', edition),
                     JMESPathCheck('administratorLogin', admin_login)
                 ])

        # test list servers
        self.cmd('{} server list -g {}'.format(database_engine,
                                               resource_group_2),
                 checks=[JMESPathCheck('type(@)', 'array')])

        # test list servers without resource group
        self.cmd('{} server list'.format(database_engine),
                 checks=[JMESPathCheck('type(@)', 'array')])

        # test delete server
        self.cmd('{} server delete -g {} --name {} --yes'.format(
            database_engine, rg, servers[0]),
                 checks=NoneCheck())
        self.cmd('{} server delete -g {} -n {} --yes'.format(
            database_engine, resource_group_2, servers[1]),
                 checks=NoneCheck())

        # test list server should be 0
        self.cmd('{} server list -g {}'.format(database_engine, rg),
                 checks=[NoneCheck()])
示例#18
0
    def _test_flexible_server_vnet_mgmt_supplied_vname_and_subnetname(
            self, database_engine, resource_group, virtual_network):

        # flexible-server create
        if self.cli_ctx.local_context.is_on:
            self.cmd('local-context off')

        vnet_name_2 = 'clitestvnet6'

        # flexible-servers
        servers = [
            'testvnetserver5' + database_engine,
            'testvnetserver6' + database_engine
        ]

        # Case 1 : Provision a server with supplied Vname and subnet name that exists.

        # create vnet and subnet. When vnet name is supplied, the subnet created will be given the default name.
        subnet_id = self.cmd(
            'network vnet subnet show -g {rg} -n default --vnet-name {vnet}'
        ).get_output_in_json()['id']
        # create server - Delegation should be added.
        self.cmd(
            '{} flexible-server create -g {} -n {} --vnet {} --subnet default'.
            format(database_engine, resource_group, servers[0],
                   virtual_network))

        # Case 2 : Provision a server with a supplied Vname and subnet name that does not exist.
        self.cmd('{} flexible-server create -g {} -n {} --vnet {}'.format(
            database_engine, resource_group, servers[1], vnet_name_2))

        # flexible-server show to validate delegation is added to both the created server
        show_result_1 = self.cmd('{} flexible-server show -g {} -n {}'.format(
            database_engine, resource_group, servers[0])).get_output_in_json()

        show_result_2 = self.cmd('{} flexible-server show -g {} -n {}'.format(
            database_engine, resource_group, servers[1])).get_output_in_json()

        self.assertEqual(
            show_result_1['delegatedSubnetArguments']['subnetArmResourceId'],
            subnet_id)

        self.assertEqual(
            show_result_2['delegatedSubnetArguments']['subnetArmResourceId'],
            '/subscriptions/{}/resourceGroups/{}/providers/Microsoft.Network/virtualNetworks/{}/subnets/{}'
            .format(self.get_subscription_id(), resource_group, vnet_name_2,
                    'Subnet' + servers[1][6:]))

        # delete all servers
        self.cmd('{} flexible-server delete -g {} -n {} --yes'.format(
            database_engine, resource_group, servers[0]),
                 checks=NoneCheck())

        self.cmd('{} flexible-server delete -g {} -n {} --yes'.format(
            database_engine, resource_group, servers[1]),
                 checks=NoneCheck())

        time.sleep(15 * 60)

        self.cmd(
            'network vnet subnet update -g {} --name {} --vnet-name {} --remove delegations'
            .format(resource_group, 'Subnet' + servers[1][6:], vnet_name_2))

        # remove all vnets
        self.cmd('network vnet delete -g {} -n {}'.format(
            resource_group, vnet_name_2))
示例#19
0
    def validate_file_scenario(self, account_info, share):
        source_file = self.create_temp_file(128, full_random=False)
        dest_file = self.create_temp_file(1)
        filename = "sample_file.bin"

        self.storage_cmd(
            'storage file upload --share-name {} --source "{}" -p {}',
            account_info, share, source_file, filename)
        self.storage_cmd('storage file exists -s {} -p {}', account_info, share, filename) \
            .assert_with_checks(JMESPathCheck('exists', True))

        if os.path.isfile(dest_file):
            os.remove(dest_file)

        self.storage_cmd(
            'storage file download --share-name {} -p "{}" --dest "{}"',
            account_info, share, filename, dest_file)

        self.assertTrue(os.path.isfile(dest_file))
        self.assertEqual(os.stat(dest_file).st_size, 128 * 1024)

        # test resize command
        self.storage_cmd(
            'storage file resize --share-name {} -p "{}" --size 1234',
            account_info, share, filename)
        self.storage_cmd('storage file show -s {} -p "{}"', account_info, share, filename) \
            .assert_with_checks(JMESPathCheck('properties.contentLength', 1234))

        # test ability to set and reset metadata
        self.storage_cmd(
            'storage file metadata update --share-name {} -p "{}" --metadata a=b c=d',
            account_info, share, filename)
        self.storage_cmd('storage file metadata show -s {} -p "{}"', account_info, share,
                         filename) \
            .assert_with_checks(JMESPathCheck('a', 'b'), JMESPathCheck('c', 'd'))
        self.storage_cmd(
            'storage file metadata update --share-name {} -p "{}"',
            account_info, share, filename)
        self.storage_cmd('storage file metadata show -s {} -p "{}"', account_info, share,
                         filename) \
            .assert_with_checks(NoneCheck())

        file_url = 'https://{}.file.core.windows.net/{}/{}'.format(
            account_info[0], share, filename)
        self.storage_cmd('storage file url -s {} -p "{}"', account_info, share, filename) \
            .assert_with_checks(StringCheck(file_url))

        self.assertIn(
            filename,
            self.storage_cmd('storage file list -s {} --query "[].name"',
                             account_info, share).get_output_in_json())

        self.storage_cmd('storage file generate-sas -s {} -p {}', account_info, share, filename) \
            .assert_with_checks(StringContainCheck('sig='))

        self.storage_cmd(
            'storage file update -s {} -p {} --content-type "test/type"',
            account_info, share, filename)
        self.storage_cmd('storage file show -s {} -p {}', account_info, share,
                         filename) \
            .assert_with_checks(JMESPathCheck('properties.contentSettings.contentType',
                                              'test/type'))

        self.storage_cmd('storage file delete --share-name {} -p "{}"',
                         account_info, share, filename)
        self.storage_cmd('storage file exists --share-name {} -p "{}"',
                         account_info, share, filename) \
            .assert_with_checks(JMESPathCheck('exists', False))
示例#20
0
    def test_storage_queue_general_scenario(self, resource_group,
                                            storage_account):
        account_key = self.get_account_key(resource_group, storage_account)

        self.set_env('AZURE_STORAGE_ACCOUNT', storage_account)
        self.set_env('AZURE_STORAGE_KEY', account_key)

        queue = self.create_random_name('queue', 24)

        self.cmd(
            'storage queue create -n {} --fail-on-exist --metadata a=b c=d'.
            format(queue),
            checks=JMESPathCheck('created', True))
        self.cmd('storage queue exists -n {}'.format(queue),
                 checks=JMESPathCheck('exists', True))

        res = self.cmd('storage queue list').get_output_in_json()
        self.assertIn(queue, [x['name'] for x in res],
                      'The newly created queue is not listed.')

        sas = self.cmd(
            'storage queue generate-sas -n {} --permissions r'.format(
                queue)).output
        self.assertIn('sig', sas,
                      'The sig segment is not in the sas {}'.format(sas))

        self.cmd('storage queue metadata show -n {}'.format(queue),
                 checks=[JMESPathCheck('a', 'b'),
                         JMESPathCheck('c', 'd')])

        self.cmd(
            'storage queue metadata update -n {} --metadata e=f g=h'.format(
                queue))
        self.cmd('storage queue metadata show -n {}'.format(queue),
                 checks=[JMESPathCheck('e', 'f'),
                         JMESPathCheck('g', 'h')])

        # Queue message operation
        self.cmd(
            'storage message put -q {} --content "test message"'.format(queue))
        self.cmd('storage message peek -q {}'.format(queue),
                 checks=JMESPathCheck('[0].content', 'test message'))

        first_message = self.cmd('storage message get -q {}'.format(queue),
                                 checks=JMESPathCheck(
                                     'length(@)', 1)).get_output_in_json()[0]

        self.cmd(
            'storage message update -q {} --id {} --pop-receipt {} --visibility-timeout 1 '
            '--content "new message!"'.format(queue, first_message['id'],
                                              first_message['popReceipt']))

        time.sleep(2)  # ensures message should be back in queue

        self.cmd('storage message peek -q {}'.format(queue),
                 checks=JMESPathCheck('[0].content', 'new message!'))
        self.cmd('storage message put -q {} --content "second message"'.format(
            queue))
        self.cmd('storage message put -q {} --content "third message"'.format(
            queue))
        self.cmd('storage message peek -q {} --num-messages 32'.format(queue),
                 checks=JMESPathCheck('length(@)', 3))

        third_message = self.cmd(
            'storage message get -q {}'.format(queue)).get_output_in_json()[0]

        self.cmd(
            'storage message delete -q {} --id {} --pop-receipt {}'.format(
                queue, third_message['id'], third_message['popReceipt']))
        self.cmd('storage message peek -q {} --num-messages 32'.format(queue),
                 checks=JMESPathCheck('length(@)', 2))

        self.cmd('storage message clear -q {}'.format(queue))
        self.cmd('storage message peek -q {} --num-messages 32'.format(queue),
                 checks=NoneCheck())

        # verify delete operation
        self.cmd('storage queue delete -n {} --fail-not-exist'.format(queue),
                 checks=JMESPathCheck('deleted', True))
        self.cmd('storage queue exists -n {}'.format(queue),
                 checks=JMESPathCheck('exists', False))

        # check status of the queue
        queue_status = self.cmd('storage queue stats').get_output_in_json()
        self.assertIn(queue_status['geoReplication']['status'],
                      ('live', 'unavailable'))
示例#21
0
    def test_storage_queue_general_scenario(self, resource_group,
                                            storage_account):
        account_key = self.get_account_key(resource_group, storage_account)

        self.set_env('AZURE_STORAGE_ACCOUNT', storage_account)
        self.set_env('AZURE_STORAGE_KEY', account_key)

        queue = self.create_random_name('queue', 24)

        self.cmd(
            'storage queue create -n {} --fail-on-exist --metadata a=b c=d'.
            format(queue),
            checks=JMESPathCheck('created', True))
        self.cmd('storage queue exists -n {}'.format(queue),
                 checks=JMESPathCheck('exists', True))

        res = self.cmd('storage queue list').get_output_in_json()
        self.assertIn(queue, [x['name'] for x in res],
                      'The newly created queue is not listed.')

        sas = self.cmd(
            'storage queue generate-sas -n {} --permissions r'.format(
                queue)).output
        self.assertIn('sig', sas,
                      'The sig segment is not in the sas {}'.format(sas))

        self.cmd('storage queue metadata show -n {}'.format(queue),
                 checks=[JMESPathCheck('a', 'b'),
                         JMESPathCheck('c', 'd')])

        self.cmd(
            'storage queue metadata update -n {} --metadata e=f g=h'.format(
                queue))
        self.cmd('storage queue metadata show -n {}'.format(queue),
                 checks=[JMESPathCheck('e', 'f'),
                         JMESPathCheck('g', 'h')])

        # Queue ACL policy
        self.cmd('storage queue policy list -q {}'.format(queue),
                 checks=NoneCheck())

        start_time = '2016-01-01T00:00Z'
        expiry = '2016-05-01T00:00Z'
        policy = self.create_random_name('policy', 16)
        self.cmd(
            'storage queue policy create -q {} -n {} --permission raup --start {} --expiry {}'
            .format(queue, policy, start_time, expiry))

        acl = self.cmd('storage queue policy list -q {}'.format(
            queue)).get_output_in_json()
        self.assertIn(policy, acl)
        self.assertEqual(1, len(acl))

        self.cmd('storage queue policy show -q {} -n {}'.format(queue, policy),
                 checks=[
                     JMESPathCheck('start', '2016-01-01T00:00:00+00:00'),
                     JMESPathCheck('expiry', '2016-05-01T00:00:00+00:00'),
                     JMESPathCheck('permission', 'rpau')
                 ])

        self.cmd(
            'storage queue policy update -q {} -n {} --permission ra'.format(
                queue, policy))
        self.cmd('storage queue policy show -q {} -n {}'.format(queue, policy),
                 checks=JMESPathCheck('permission', 'ra'))

        self.cmd('storage queue policy delete -q {} -n {}'.format(
            queue, policy))
        self.cmd('storage queue policy list -q {}'.format(queue),
                 checks=NoneCheck())

        # Queue message operation
        self.cmd(
            'storage message put -q {} --content "test message"'.format(queue))
        self.cmd('storage message peek -q {}'.format(queue),
                 checks=JMESPathCheck('[0].content', 'test message'))

        first_message = self.cmd('storage message get -q {}'.format(queue),
                                 checks=JMESPathCheck(
                                     'length(@)', 1)).get_output_in_json()[0]

        self.cmd(
            'storage message update -q {} --id {} --pop-receipt {} --visibility-timeout 1 '
            '--content "new message!"'.format(queue, first_message['id'],
                                              first_message['popReceipt']))

        time.sleep(2)  # ensures message should be back in queue

        self.cmd('storage message peek -q {}'.format(queue),
                 checks=JMESPathCheck('[0].content', 'new message!'))
        self.cmd('storage message put -q {} --content "second message"'.format(
            queue))
        self.cmd('storage message put -q {} --content "third message"'.format(
            queue))
        self.cmd('storage message peek -q {} --num-messages 32'.format(queue),
                 checks=JMESPathCheck('length(@)', 3))

        third_message = self.cmd(
            'storage message get -q {}'.format(queue)).get_output_in_json()[0]

        self.cmd(
            'storage message delete -q {} --id {} --pop-receipt {}'.format(
                queue, third_message['id'], third_message['popReceipt']))
        self.cmd('storage message peek -q {} --num-messages 32'.format(queue),
                 checks=JMESPathCheck('length(@)', 2))

        self.cmd('storage message clear -q {}'.format(queue))
        self.cmd('storage message peek -q {} --num-messages 32'.format(queue),
                 checks=NoneCheck())

        # verify delete operation
        self.cmd('storage queue delete -n {} --fail-not-exist'.format(queue),
                 checks=JMESPathCheck('deleted', True))
        self.cmd('storage queue exists -n {}'.format(queue),
                 checks=JMESPathCheck('exists', False))
示例#22
0
    def _test_flexible_server_mgmt(self, database_engine, resource_group):

        if self.cli_ctx.local_context.is_on:
            self.cmd('local-context off')

        if database_engine == 'postgres':
            tier = 'GeneralPurpose'
            sku_name = 'Standard_D2s_v3'
            version = '12'
            storage_size = 128
            location = self.postgres_location
        elif database_engine == 'mysql':
            tier = 'Burstable'
            sku_name = 'Standard_B1ms'
            storage_size = 10
            version = '5.7'
            location = self.mysql_location

        # flexible-server create with user input
        server_name = self.create_random_name(SERVER_NAME_PREFIX, SERVER_NAME_MAX_LENGTH)
        storage_size_mb = storage_size * 1024
        backup_retention = 7

        list_checks = [JMESPathCheck('name', server_name),
                       JMESPathCheck('resourceGroup', resource_group),
                       JMESPathCheck('sku.name', sku_name),
                       JMESPathCheck('sku.tier', tier),
                       JMESPathCheck('version', version),
                       JMESPathCheck('storageProfile.storageMb', storage_size_mb),
                       JMESPathCheck('storageProfile.backupRetentionDays', backup_retention)]

        self.cmd('{} flexible-server create -g {} -n {} -l {}'
                 .format(database_engine, resource_group, server_name, location))
        current_time = datetime.utcnow()

        if database_engine == 'postgres':
            self.cmd('postgres flexible-server create -g {} -l {} --tier Burstable --sku-name Standard_B1ms'
                     .format(resource_group, location))
            self.cmd('postgres flexible-server create -g {} -l {} --tier MemoryOptimized --sku-name Standard_E2s_v3'
                     .format(resource_group, location))
        elif database_engine == 'mysql':
            self.cmd('mysql flexible-server create -g {} -l {} --tier GeneralPurpose --sku-name Standard_D2ds_v4'
                     .format(resource_group, location))
            self.cmd('mysql flexible-server create -g {} -l {} --tier MemoryOptimized --sku-name Standard_E2ds_v4'
                     .format(resource_group, location))

        self.cmd('{} flexible-server show -g {} -n {}'
                 .format(database_engine, resource_group, server_name), checks=list_checks).get_output_in_json()

        self.cmd('{} flexible-server update -g {} -n {} --storage-size 256'
                 .format(database_engine, resource_group, server_name),
                 checks=[JMESPathCheck('storageProfile.storageMb', 256 * 1024)])

        self.cmd('{} flexible-server update -g {} -n {} --backup-retention {}'
                 .format(database_engine, resource_group, server_name, backup_retention + 10),
                 checks=[JMESPathCheck('storageProfile.backupRetentionDays', backup_retention + 10)])

        if database_engine == 'postgres':
            tier = 'Burstable'
            sku_name = 'Standard_B1ms'
        elif database_engine == 'mysql':
            tier = 'GeneralPurpose'
            sku_name = 'Standard_D2ds_v4'

        self.cmd('{} flexible-server update -g {} -n {} --tier {} --sku-name {}'
                 .format(database_engine, resource_group, server_name, tier, sku_name),
                 checks=[JMESPathCheck('sku.tier', tier),
                         JMESPathCheck('sku.name', sku_name)])

        if database_engine == 'postgres':
            self.cmd('{} flexible-server update -g {} -n {} --maintenance-window Mon:1:30'
                     .format(database_engine, resource_group, server_name),
                     checks=[JMESPathCheck('maintenanceWindow.dayOfWeek', 1),
                             JMESPathCheck('maintenanceWindow.startHour', 1),
                             JMESPathCheck('maintenanceWindow.startMinute', 30)])

        self.cmd('{} flexible-server update -g {} -n {} --tags key=3'
                 .format(database_engine, resource_group, server_name),
                 checks=[JMESPathCheck('tags.key', '3')])

        restore_server_name = 'restore-' + server_name
        restore_time = (current_time + timedelta(minutes=10)).replace(tzinfo=tzutc()).isoformat()
        self.cmd('{} flexible-server restore -g {} --name {} --source-server {} --restore-time {}'
                 .format(database_engine, resource_group, restore_server_name, server_name, restore_time),
                 checks=[JMESPathCheck('name', restore_server_name),
                         JMESPathCheck('resourceGroup', resource_group)])

        self.cmd('{} flexible-server restart -g {} -n {}'
                 .format(database_engine, resource_group, server_name), checks=NoneCheck())

        self.cmd('{} flexible-server stop -g {} -n {}'
                 .format(database_engine, resource_group, server_name), checks=NoneCheck())

        self.cmd('{} flexible-server start -g {} -n {}'
                 .format(database_engine, resource_group, server_name), checks=NoneCheck())

        self.cmd('{} flexible-server list -g {}'.format(database_engine, resource_group),
                 checks=[JMESPathCheck('type(@)', 'array')])

        connection_string = self.cmd('{} flexible-server show-connection-string -s {}'
                                     .format(database_engine, server_name)).get_output_in_json()

        self.assertIn('jdbc', connection_string['connectionStrings'])
        self.assertIn('node.js', connection_string['connectionStrings'])
        self.assertIn('php', connection_string['connectionStrings'])
        self.assertIn('python', connection_string['connectionStrings'])

        self.cmd('{} flexible-server list-skus -l {}'.format(database_engine, location),
                 checks=[JMESPathCheck('type(@)', 'array')])

        self.cmd('{} flexible-server delete -g {} -n {} --yes'.format(database_engine, resource_group, server_name), checks=NoneCheck())
示例#23
0
    def test_portal(self, resource_group):

        self.kwargs.update({
            'testDashboard':
            self.create_random_name(prefix='cli_test_dashboards'[:9],
                                    length=24)
        })

        self.cmd(
            'az portal dashboard create '
            '--location "eastus" '
            '--input- "src/portal/azext_portal/tests/latest/properties.json" '
            '--tags aKey=aValue anotherKey=anotherValue '
            '--name "{testDashboard}" '
            '--resource-group "{rg}"',
            checks=[
                JMESPathCheck('name', self.kwargs.get('testDashboard', ''))
            ])

        self.cmd(
            'az portal dashboard show '
            '--name "{testDashboard}" '
            '--resource-group "{rg}"',
            checks=[
                JMESPathCheck('name', self.kwargs.get('testDashboard', '')),
                JMESPathCheck('resourceGroup', self.kwargs.get('rg', '')),
                JMESPathCheck(
                    'tags',
                    '{\'aKey\': \'aValue\', \'anotherKey\': \'anotherValue\'}'
                ),
                JMESPathCheck(
                    'lenses',
                    '{\'0\': {\'metadata\': None, \'order\': 0, \'parts\': '
                    '{\'0\': {\'metadata\': {\'inputs\': [], \'settings\': {}, \'type\': '
                    '\'Extension/HubsExtension/PartType/ClockPart\'}, \'position\': {\'colSpan\': 2, '
                    '\'metadata\': None, \'rowSpan\': 2, \'x\': 6, \'y\': 2}}}}}'
                ),
                JMESPathCheck(
                    'metadata', '{\'model\': {\'timeRange\': {\'type\': '
                    '\'MsPortalFx.Composition.Configuration.ValueTypes.TimeRange\', \'value\': '
                    '{\'relative\': {\'duration\': 24, \'timeUnit\': 1}}}}}')
            ])

        self.cmd(
            'az portal dashboard list '
            '--resource-group "{rg}"',
            checks=[
                JMESPathCheckExists('[?name==\'{}\']'.format(
                    self.kwargs.get('testDashboard', '')))
            ])

        self.cmd(
            'az portal dashboard list '
            '--resource-group=',
            checks=[
                JMESPathCheckExists('[?name==\'{}\']'.format(
                    self.kwargs.get('testDashboard', '')))
            ])

        self.cmd(
            'az portal dashboard update '
            '--input-path "src/portal/azext_portal/tests/latest/properties-update.json" '
            '--name "{testDashboard}" '
            '--resource-group "{rg}"',
            checks=[
                JMESPathCheck('name', self.kwargs.get('testDashboard', '')),
                JMESPathCheck('resourceGroup', self.kwargs.get('rg', '')),
                JMESPathCheck(
                    'tags',
                    '{\'aKey\': \'aValue\', \'anotherKey\': \'anotherValue\'}'
                ),
                JMESPathCheck(
                    'lenses',
                    '{\'0\': {\'metadata\': None, \'order\': 0, \'parts\': '
                    '{\'0\': {\'metadata\': {\'inputs\': [], \'settings\': {}, \'type\': '
                    '\'Extension/HubsExtension/PartType/ClockPart\'}, \'position\': {\'colSpan\': 2, '
                    '\'metadata\': None, \'rowSpan\': 2, \'x\': 6, \'y\': 2}}}}}'
                ),
                JMESPathCheck(
                    'metadata', '{\'model\': {\'timeRange\': {\'type\': '
                    '\'MsPortalFx.Composition.Configuration.ValueTypes.TimeRange\', \'value\': '
                    '{\'relative\': {\'duration\': 12, \'timeUnit\': 1}}}}}')
            ])

        self.cmd(
            'az portal dashboard delete '
            '--name "{testDashboard}" '
            '--resource-group "{rg}" '
            '--y',
            checks=[])

        self.cmd('az portal dashboard list '
                 '--resource-group "{rg}"',
                 checks=[NoneCheck()])

        self.cmd(
            'az portal dashboard import '
            '--input-path "src/portal/azext_portal/tests/latest/dashboard.json" '
            '--name "{testDashboard}" '
            '--resource-group "{rg}"',
            checks=[
                JMESPathCheck('name', '7c0464ec-b1cd-4a98-a4a5-1ebe2d980260'),
                JMESPathCheck('resourceGroup', self.kwargs.get('rg', '')),
                JMESPathCheck('location', 'eastus'),
                JMESPathCheck('type', 'Microsoft.Portal/dashboards'),
                JMESPathCheck('tags',
                              '{\'hidden-title\': \'test dashboard\'}'),
                JMESPathCheck(
                    'lenses',
                    '{\'0\': {\'metadata\': None, \'order\': 0, \'parts\': '
                    '{\'0\': {\'metadata\': {\'inputs\': [{\'isOptional\': True, \'name\': '
                    '\'resourceType\', \'value\': \'Microsoft.Resources/subscriptions/resourcegroups\'},'
                    ' {\'isOptional\': True, \'name\': \'filter\'}, {\'isOptional\': True, \'name\':'
                    ' \'scope\'}, {\'isOptional\': True, \'name\': \'kind\'}], \'type\': '
                    '\'Extension/HubsExtension/PartType/BrowseResourceGroupPinnedPart\'}, \'position\': '
                    '{\'colSpan\': 6, \'metadata\': None, \'rowSpan\': 4, \'x\': 0, \'y\': 0}}}}}'
                ),
                JMESPathCheck(
                    'metadata', '{\'model\': {\'timeRange\': {\'type\': '
                    '\'MsPortalFx.Composition.Configuration.ValueTypes.TimeRange\', \'value\': '
                    '{\'relative\': {\'duration\': 24, \'timeUnit\': 1}}}}}')
            ])
示例#24
0
    def _verify_access_control_list(self, account_info, service_type,
                                    container_name):
        container_id_parameter = '--{}-name {}'.format(service_type,
                                                       container_name)
        self.storage_cmd(
            'storage {} policy list {}', account_info, service_type,
            container_id_parameter).assert_with_checks(NoneCheck())
        self.storage_cmd('storage {} policy create {} -n test1 --permission l',
                         account_info, service_type, container_id_parameter)
        self.storage_cmd(
            'storage {} policy create {} -n test2 --start 2016-01-01T00:00Z',
            account_info, service_type, container_id_parameter)
        self.storage_cmd(
            'storage {} policy create {} -n test3 --expiry 2018-01-01T00:00Z',
            account_info, service_type, container_id_parameter)
        self.storage_cmd(
            'storage {} policy create {} -n test4 --permission rwdl '
            '--start 2016-01-01T00:00Z --expiry 2016-05-01T00:00Z',
            account_info, service_type, container_id_parameter)

        acl = self.storage_cmd(
            'storage {} policy list {}', account_info, service_type,
            container_id_parameter).get_output_in_json().keys()

        self.assertSetEqual(set(acl), set(['test1', 'test2', 'test3',
                                           'test4']))

        self.storage_cmd('storage {} policy show {} -n test1', account_info,
                         service_type,
                         container_id_parameter).assert_with_checks(
                             JMESPathCheck('permission', 'l'))
        self.storage_cmd('storage {} policy show {} -n test2', account_info,
                         service_type,
                         container_id_parameter).assert_with_checks(
                             JMESPathCheck('start',
                                           '2016-01-01T00:00:00+00:00'))
        self.storage_cmd('storage {} policy show {} -n test3', account_info,
                         service_type,
                         container_id_parameter).assert_with_checks(
                             JMESPathCheck('expiry',
                                           '2018-01-01T00:00:00+00:00'))
        self.storage_cmd('storage {} policy show {} -n test4', account_info,
                         service_type,
                         container_id_parameter).assert_with_checks(
                             JMESPathCheck('start',
                                           '2016-01-01T00:00:00+00:00'),
                             JMESPathCheck('expiry',
                                           '2016-05-01T00:00:00+00:00'),
                             JMESPathCheck('permission', 'rwdl'))
        self.storage_cmd('storage {} policy update {} -n test1 --permission r',
                         account_info, service_type, container_id_parameter)
        self.storage_cmd('storage {} policy show {} -n test1', account_info,
                         service_type,
                         container_id_parameter).assert_with_checks(
                             JMESPathCheck('permission', 'r'))
        self.storage_cmd('storage {} policy delete {} -n test1', account_info,
                         service_type, container_id_parameter)

        acl = self.storage_cmd(
            'storage {} policy list {}', account_info, service_type,
            container_id_parameter).get_output_in_json().keys()

        self.assertSequenceEqual(set(acl), set(['test2', 'test3', 'test4']))
    def test_sqlvm_mgmt(self, resource_group, resource_group_location, sqlvm,
                        storage_account):

        loc = 'westus'
        self.cmd(
            'storage account update -n {} -g {} --set kind=StorageV2'.format(
                storage_account, resource_group))

        sa = self.cmd('storage account show -n {} -g {}'.format(
            storage_account, resource_group)).get_output_in_json()

        key = self.cmd('storage account keys list -n {} -g {}'.format(
            storage_account, resource_group)).get_output_in_json()

        # Assert customer cannot create a SQL vm with no agent and do not provide offer and sku
        with self.assertRaisesRegexp(
                CLIError,
                "usage error: --sql-mgmt-type NoAgent --image-sku NAME --image-offer NAME"
        ):
            self.cmd(
                'sql vm create -n {} -g {} -l {} --license-type {} --sql-mgmt-type {}'
                .format(sqlvm, resource_group, loc, 'PAYG', 'NoAgent'))

        # test create sqlvm with minimal required parameters
        sqlvm_1 = self.cmd(
            'sql vm create -n {} -g {} -l {} --license-type {}'.format(
                sqlvm, resource_group, loc, 'PAYG'),
            checks=[
                JMESPathCheck('name', sqlvm),
                JMESPathCheck('location', loc),
                JMESPathCheck('sqlServerLicenseType', 'PAYG'),
                JMESPathCheck('sqlManagement', 'LightWeight')
            ]).get_output_in_json()

        # test list sqlvm should be 1
        self.cmd('sql vm list -g {}'.format(resource_group),
                 checks=[JMESPathCheck('length(@)', 1)])

        # test show of vm
        self.cmd('sql vm show -n {} -g {}'.format(sqlvm, resource_group),
                 checks=[
                     JMESPathCheck('name', sqlvm),
                     JMESPathCheck('location', loc),
                     JMESPathCheck('provisioningState', "Succeeded"),
                     JMESPathCheck('id', sqlvm_1['id'])
                 ])

        # Check the id of the vm is correct in show
        self.cmd('sql vm show -n {} -g {}'.format(sqlvm, resource_group),
                 checks=[
                     JMESPathCheck('name', sqlvm),
                     JMESPathCheck('id', sqlvm_1['id'])
                 ])

        # test update sqlvm with management mode to make sure it updates to full.
        self.cmd('sql vm update -n {} -g {} --sql-mgmt-type {} --yes'.format(
            sqlvm, resource_group, 'Full'),
                 checks=[
                     JMESPathCheck('name', sqlvm),
                     JMESPathCheck('location', loc),
                     JMESPathCheck('sqlManagement', 'Full')
                 ]).get_output_in_json()

        # test expand parameter: * - all settings exist
        expand_all = self.cmd('sql vm show -n {} -g {} --expand {}'.format(
            sqlvm, resource_group, '*')).get_output_in_json()
        assert 'autoBackupSettings' in expand_all
        assert 'autoPatchingSettings' in expand_all
        assert 'keyVaultCredentialSettings' in expand_all
        assert 'serverConfigurationsManagementSettings' in expand_all

        # test expand parameter: single value - only specified setting exists
        expand_one = self.cmd('sql vm show -n {} -g {} --expand {}'.format(
            sqlvm, resource_group, 'AutoBackupSettings')).get_output_in_json()
        assert 'autoBackupSettings' in expand_one
        assert 'autoPatchingSettings' not in expand_one
        assert 'keyVaultCredentialSettings' not in expand_one
        assert 'serverConfigurationsManagementSettings' not in expand_one

        # test expand parameter: comma-separated values - all specificed settings exist
        expand_comma = self.cmd('sql vm show -n {} -g {} --expand {}'.format(
            sqlvm, resource_group,
            'AutoPatchingSettings AutoBackupSettings')).get_output_in_json()
        assert 'autoBackupSettings' in expand_comma
        assert 'autoPatchingSettings' in expand_comma
        assert 'keyVaultCredentialSettings' not in expand_comma
        assert 'serverConfigurationsManagementSettings' not in expand_comma

        # test expand parameter: comma-separated values with * - all settings exist
        expand_comma_all = self.cmd(
            'sql vm show -n {} -g {} --expand {}'.format(
                sqlvm, resource_group,
                'AutoPatchingSettings * AutoBackupSettings')
        ).get_output_in_json()
        assert 'autoBackupSettings' in expand_comma_all
        assert 'autoPatchingSettings' in expand_comma_all
        assert 'keyVaultCredentialSettings' in expand_comma_all
        assert 'serverConfigurationsManagementSettings' in expand_comma_all

        # test license change
        self.cmd('sql vm update -n {} -g {} --license-type {}'.format(
            sqlvm, resource_group, 'AHUB'),
                 checks=[
                     JMESPathCheck('name', sqlvm),
                     JMESPathCheck('location', loc),
                     JMESPathCheck('provisioningState', "Succeeded"),
                     JMESPathCheck('id', sqlvm_1['id']),
                     JMESPathCheck('sqlServerLicenseType', 'AHUB')
                 ])

        # test enabling R services
        self.cmd('sql vm update -n {} -g {} --enable-r-services {}'.format(
            sqlvm, resource_group, True),
                 checks=[
                     JMESPathCheck('name', sqlvm),
                     JMESPathCheck('location', loc),
                     JMESPathCheck('provisioningState', "Succeeded"),
                     JMESPathCheck('id', sqlvm_1['id'])
                 ])

        # test autopatching enabling succeeds
        self.cmd(
            'sql vm update -n {} -g {} --day-of-week {} --maintenance-window-duration {} --maintenance-window-start-hour {}'
            .format(sqlvm, resource_group, 'Monday', 60, 22),
            checks=[
                JMESPathCheck('name', sqlvm),
                JMESPathCheck('location', loc),
                JMESPathCheck('provisioningState', "Succeeded"),
                JMESPathCheck('id', sqlvm_1['id'])
            ])

        # test autopatching disabling succeeds
        self.cmd('sql vm update -n {} -g {} --enable-auto-patching {}'.format(
            sqlvm, resource_group, False),
                 checks=[
                     JMESPathCheck('name', sqlvm),
                     JMESPathCheck('location', loc),
                     JMESPathCheck('provisioningState', "Succeeded"),
                     JMESPathCheck('id', sqlvm_1['id'])
                 ])

        # test backup enabling works
        self.cmd(
            'sql vm update -n {} -g {} --backup-schedule-type {} --full-backup-frequency {} --full-backup-start-hour {} --full-backup-duration {} '
            '--sa-key {} --storage-account {} --retention-period {} --log-backup-frequency {}'
            .format(sqlvm, resource_group, 'Manual', 'Weekly', 2, 2,
                    key[0]['value'], sa['primaryEndpoints']['blob'], 30, 60),
            checks=[
                JMESPathCheck('name', sqlvm),
                JMESPathCheck('location', loc),
                JMESPathCheck('provisioningState', "Succeeded"),
                JMESPathCheck('id', sqlvm_1['id'])
            ])

        # test delete vm
        self.cmd('sql vm delete -n {} -g {} --yes'.format(
            sqlvm, resource_group),
                 checks=NoneCheck())

        # test list sql vm should be empty
        self.cmd('sql vm list -g {}'.format(resource_group),
                 checks=[NoneCheck()])
示例#26
0
    def _test_mgmt_validator(self, database_engine, resource_group):

        RANDOM_VARIABLE_MAX_LENGTH = 30
        if database_engine == 'postgres':
            location = self.postgres_location
        elif database_engine == 'mysql':
            location = self.mysql_location
        invalid_version = self.create_random_name('version',
                                                  RANDOM_VARIABLE_MAX_LENGTH)
        invalid_sku_name = self.create_random_name('sku_name',
                                                   RANDOM_VARIABLE_MAX_LENGTH)
        invalid_tier = self.create_random_name('tier',
                                               RANDOM_VARIABLE_MAX_LENGTH)
        valid_tier = 'GeneralPurpose'
        invalid_backup_retention = 1

        # Create
        self.cmd('{} flexible-server create -g {} -l {} --tier {}'.format(
            database_engine, resource_group, location, invalid_tier),
                 expect_failure=True)

        self.cmd('{} flexible-server create -g {} -l {} --version {}'.format(
            database_engine, resource_group, location, invalid_version),
                 expect_failure=True)

        self.cmd(
            '{} flexible-server create -g {} -l {} --tier {} --sku-name {}'.
            format(database_engine, resource_group, location, valid_tier,
                   invalid_sku_name),
            expect_failure=True)

        self.cmd('{} flexible-server create -g {} -l {} --backup-retention {}'.
                 format(database_engine, resource_group, location,
                        invalid_backup_retention),
                 expect_failure=True)

        if database_engine == 'postgres':
            invalid_storage_size = 60
        elif database_engine == 'mysql':
            invalid_storage_size = 999999
        self.cmd(
            '{} flexible-server create -g {} -l {} --storage-size {}'.format(
                database_engine, resource_group, location,
                invalid_storage_size),
            expect_failure=True)

        server_name = self.create_random_name(SERVER_NAME_PREFIX,
                                              RANDOM_VARIABLE_MAX_LENGTH)
        if database_engine == 'postgres':
            tier = 'MemoryOptimized'
            version = 12
            sku_name = 'Standard_E2s_v3'
            storage_size = 64
        elif database_engine == 'mysql':
            tier = 'GeneralPurpose'
            version = 5.7
            sku_name = 'Standard_D2ds_v4'
            storage_size = 20
        storage_size_mb = storage_size * 1024
        backup_retention = 10

        list_checks = [
            JMESPathCheck('name', server_name),
            JMESPathCheck('resourceGroup', resource_group),
            JMESPathCheck('sku.name', sku_name),
            JMESPathCheck('sku.tier', tier),
            JMESPathCheck('version', version),
            JMESPathCheck('storageProfile.storageMb', storage_size_mb),
            JMESPathCheck('storageProfile.backupRetentionDays',
                          backup_retention)
        ]

        self.cmd(
            '{} flexible-server create -g {} -n {} -l {} --tier {} --version {} --sku-name {} --storage-size {} --backup-retention {}'
            .format(database_engine, resource_group, server_name, location,
                    tier, version, sku_name, storage_size, backup_retention))
        self.cmd('{} flexible-server show -g {} -n {}'.format(
            database_engine, resource_group, server_name),
                 checks=list_checks)

        # Update
        invalid_storage_size_small = storage_size - 1
        self.cmd('{} flexible-server update -g {} -n {} --tier {}'.format(
            database_engine, resource_group, server_name, invalid_tier),
                 expect_failure=True)

        self.cmd(
            '{} flexible-server update -g {} -n {} --tier {} --sku-name {}'.
            format(database_engine, resource_group, server_name, valid_tier,
                   invalid_sku_name),
            expect_failure=True)

        self.cmd(
            '{} flexible-server update -g {} -n {} --storage-size {}'.format(
                database_engine, resource_group, server_name,
                invalid_storage_size_small),
            expect_failure=True)

        self.cmd('{} flexible-server update -g {} -n {} --backup-retention {}'.
                 format(database_engine, resource_group, server_name,
                        invalid_backup_retention),
                 expect_failure=True)

        self.cmd('{} flexible-server delete -g {} -n {} --force'.format(
            database_engine, resource_group, server_name),
                 checks=NoneCheck())
示例#27
0
    def test_keyvault_key(self, resource_group):

        self.resource_group = resource_group
        kv = self.create_random_name('cli-test-keyvault-', 24)
        self.location = 'westus'

        _create_keyvault(self, kv, self.resource_group, self.location)

        # create a key
        key = self.cmd('keyvault key create --vault-name {} -n key1 -p software'.format(kv),
                       checks=JMESPathCheck('attributes.enabled', True)).get_output_in_json()
        first_kid = key['key']['kid']
        first_version = first_kid.rsplit('/', 1)[1]

        # list keys
        self.cmd('keyvault key list --vault-name {}'.format(kv),
                 checks=JMESPathCheck('length(@)', 1))

        # create a new key version
        key = self.cmd('keyvault key create --vault-name {} -n key1 -p software --disabled --ops encrypt decrypt --tags test=foo'.format(kv), checks=[
            JMESPathCheck('attributes.enabled', False),
            JMESPathCheck('length(key.keyOps)', 2),
            JMESPathCheck('tags', {'test': 'foo'})
        ]).get_output_in_json()
        second_kid = key['key']['kid']
        # list key versions
        self.cmd('keyvault key list-versions --vault-name {} -n key1'.format(kv),
                 checks=JMESPathCheck('length(@)', 2))

        # show key (latest)
        self.cmd('keyvault key show --vault-name {} -n key1'.format(kv),
                 checks=JMESPathCheck('key.kid', second_kid))

        # show key (specific version)
        self.cmd('keyvault key show --vault-name {} -n key1 -v {}'.format(kv, first_version),
                 checks=JMESPathCheck('key.kid', first_kid))

        # set key attributes
        self.cmd('keyvault key set-attributes --vault-name {} -n key1 --enabled true'.format(kv), checks=[
            JMESPathCheck('key.kid', second_kid),
            JMESPathCheck('attributes.enabled', True)
        ])

        # backup and then delete key
        key_file = 'backup.key'
        self.cmd('keyvault key backup --vault-name {} -n key1 --file {}'.format(kv, key_file))
        self.cmd('keyvault key delete --vault-name {} -n key1'.format(kv))
        self.cmd('keyvault key list --vault-name {}'.format(kv),
                 checks=NoneCheck())

        # restore key from backup
        self.cmd('keyvault key restore --vault-name {} --file {}'.format(kv, key_file))
        self.cmd('keyvault key list-versions --vault-name {} -n key1'.format(kv),
                 checks=JMESPathCheck('length(@)', 2))
        if os.path.isfile(key_file):
            os.remove(key_file)

        # import PEM
        key_enc_file = os.path.join(TEST_DIR, 'mydomain.test.encrypted.pem')
        key_enc_password = '******'
        key_plain_file = os.path.join(TEST_DIR, 'mydomain.test.pem')
        self.cmd('keyvault key import --vault-name {} -n import-key-plain --pem-file "{}" -p software'.format(kv, key_plain_file))
        self.cmd('keyvault key import --vault-name {} -n import-key-encrypted --pem-file "{}" --pem-password {} -p hsm'.format(kv, key_enc_file, key_enc_password))