def test_aks_create_scale_with_custom_nodepool_name(self, resource_group, resource_group_location, sp_name, sp_password): create_version, _ = self._get_versions(resource_group_location) # kwargs for string formatting aks_name = self.create_random_name('cliakstest', 16) self.kwargs.update({ 'resource_group': resource_group, 'name': aks_name, 'dns_name_prefix': self.create_random_name('cliaksdns', 16), 'ssh_key_value': self.generate_ssh_keys().replace('\\', '\\\\'), 'location': resource_group_location, 'service_principal': 'http://' + sp_name, 'client_secret': sp_password, 'k8s_version': create_version, 'nodepool_name': self.create_random_name('np', 12) }) # create create_cmd = 'aks create -g {resource_group} -n {name} -p {dns_name_prefix} --nodepool-name {nodepool_name} ' \ '-l {location} --service-principal {service_principal} --client-secret {client_secret} -k {k8s_version} ' \ '--ssh-key-value {ssh_key_value} --tags scenario_test -c 1' self.cmd(create_cmd, checks=[ self.exists('fqdn'), self.exists('nodeResourceGroup'), self.check('provisioningState', 'Succeeded') ]) # list self.cmd('aks list -g {resource_group}', checks=[ StringContainCheck(aks_name), StringContainCheck(resource_group) ]) # show self.cmd('aks show -g {resource_group} -n {name}', checks=[ self.check('name', '{name}'), self.check('resourceGroup', '{resource_group}'), self.check('agentPoolProfiles[0].count', 1), self.check('agentPoolProfiles[0].osType', 'Linux'), self.check('agentPoolProfiles[0].name', '{nodepool_name}'), self.check('dnsPrefix', '{dns_name_prefix}'), self.check('provisioningState', 'Succeeded'), self.check('addonProfiles', None) ]) # scale up self.cmd('aks scale -g {resource_group} -n {name} --nodepool-name {nodepool_name} --node-count 3', checks=[ self.check('agentPoolProfiles[0].count', 3) ]) # show again self.cmd('aks show -g {resource_group} -n {name}', checks=[ self.check('agentPoolProfiles[0].count', 3) ]) # delete self.cmd('aks delete -g {resource_group} -n {name} --yes', checks=[self.is_empty()]) # show again and expect failure self.cmd('aks show -g {resource_group} -n {name}', expect_failure=True)
def test_aro_show(self, resource_group): from msrestazure.tools import resource_id subscription = self.get_subscription_id() master_subnet = self.create_random_name('dev_master', 14) worker_subnet = self.create_random_name('dev_worker', 14) name = self.create_random_name('aro', 14) self.kwargs.update({ 'name': name, 'resource_group': resource_group, 'subscription': subscription, 'master_subnet': master_subnet, 'worker_subnet': worker_subnet, 'master_ip_range': '10.{}.{}.0/24'.format(randint(0, 127), randint(0, 255)), 'worker_ip_range': '10.{}.{}.0/24'.format(randint(0, 127), randint(0, 255)), 'master_subnet_resource': resource_id(subscription=subscription, resource_group=resource_group, namespace='Microsoft.Network', type='virtualNetworks', child_type_1='subnets', name='dev-vnet', child_name_1=master_subnet), 'worker_subnet_resource': resource_id(subscription=subscription, resource_group=resource_group, namespace='Microsoft.Network', type='virtualNetworks', child_type_1='subnets', name='dev-vnet', child_name_1=worker_subnet), }) self.cmd('network vnet create -g {rg} -n dev-vnet --address-prefixes 10.0.0.0/9') self.cmd('network vnet subnet create -g {rg} --vnet-name dev-vnet -n {master_subnet} --address-prefixes {master_ip_range} --service-endpoints Microsoft.ContainerRegistry') self.cmd('network vnet subnet create -g {rg} --vnet-name dev-vnet -n {worker_subnet} --address-prefixes {worker_ip_range} --service-endpoints Microsoft.ContainerRegistry') self.cmd('network vnet subnet update -g {rg} --vnet-name dev-vnet -n {master_subnet} --disable-private-link-service-network-policies true') self.cmd('aro create -g {rg} -n {name} --master-subnet {master_subnet_resource} --worker-subnet {worker_subnet_resource} --subscription {subscription} --tags test=show') self.cmd('aro show -g {rg} -n {name} --subscription {subscription}', checks=[ self.check('name', '{name}'), self.check_pattern('id', '.*{name}'), self.check('resourceGroup', '{rg}') ]) self.cmd('aro show -g {rg} -n {name} --subscription {subscription} --output table', checks=[ StringContainCheck(name), StringContainCheck(resource_group), StringContainCheck('eastus'), StringContainCheck('Succeeded'), ])
def test_aks_create_service_no_wait(self, resource_group, resource_group_location, sp_name, sp_password): # reset the count so in replay mode the random names will start with 0 self.test_resources_count = 0 create_version, upgrade_version = self._get_versions( resource_group_location) # kwargs for string formatting self.kwargs.update({ 'resource_group': resource_group, 'name': self.create_random_name('cliakstest', 16), 'dns_name_prefix': self.create_random_name('cliaksdns', 16), 'ssh_key_value': self.generate_ssh_keys().replace('\\', '\\\\'), 'location': resource_group_location, 'service_principal': _process_sp_name(sp_name), 'client_secret': sp_password, 'k8s_version': create_version, 'vm_size': 'Standard_DS2_v2' }) # create --no-wait create_cmd = 'aks create -g {resource_group} -n {name} -p {dns_name_prefix} --ssh-key-value {ssh_key_value} ' \ '-l {location} --service-principal {service_principal} --client-secret {client_secret} -k {k8s_version} ' \ '--node-vm-size {vm_size} ' \ '--tags scenario_test -c 1 --no-wait' self.cmd(create_cmd, checks=[self.is_empty()]) # wait self.cmd( 'aks wait -g {resource_group} -n {name} --created', checks=[self.is_empty()]) # show self.cmd('aks show -g {resource_group} -n {name}', checks=[ self.check('name', '{name}'), self.check('resourceGroup', '{resource_group}'), self.check('agentPoolProfiles[0].count', 1), self.check('agentPoolProfiles[0].vmSize', 'Standard_DS2_v2'), self.check('dnsPrefix', '{dns_name_prefix}'), self.check('provisioningState', 'Succeeded'), ]) # show k8s versions self.cmd('aks get-versions -l {location}', checks=[ self.exists('orchestrators[*].orchestratorVersion') ]) # show k8s versions in table format self.cmd('aks get-versions -l {location} -o table', checks=[ StringContainCheck(self.kwargs['k8s_version']) ]) # get versions for upgrade self.cmd('aks get-upgrades -g {resource_group} -n {name}', checks=[ self.exists('id'), self.check('resourceGroup', '{resource_group}'), self.check('controlPlaneProfile.kubernetesVersion', '{k8s_version}'), self.check('controlPlaneProfile.osType', 'Linux'), self.exists('controlPlaneProfile.upgrades'), self.check( 'type', 'Microsoft.ContainerService/managedClusters/upgradeprofiles') ]) # get versions for upgrade in table format self.cmd('aks get-upgrades -g {resource_group} -n {name} --output table', checks=[ StringContainCheck('Upgrades'), StringContainCheck(upgrade_version) ]) # delete self.cmd( 'aks delete -g {resource_group} -n {name} --yes', checks=[self.is_empty()]) # show again and expect failure self.cmd('aks show -g {resource_group} -n {name}', expect_failure=True)
def test_aks_nodepool_create_scale_delete(self, resource_group, resource_group_location, sp_name, sp_password): # reset the count so in replay mode the random names will start with 0 self.test_resources_count = 0 # kwargs for string formatting aks_name = self.create_random_name('cliakstest', 16) nodepool1_name = "nodepool1" nodepool2_name = "nodepool2" tags = "key1=value1" new_tags = "key2=value2" labels = "label1=value1" self.kwargs.update({ 'resource_group': resource_group, 'name': aks_name, 'dns_name_prefix': self.create_random_name('cliaksdns', 16), 'ssh_key_value': self.generate_ssh_keys().replace('\\', '\\\\'), 'location': resource_group_location, 'service_principal': _process_sp_name(sp_name), 'client_secret': sp_password, 'resource_type': 'Microsoft.ContainerService/ManagedClusters', 'tags': tags, 'new_tags': new_tags, 'labels': labels, 'nodepool1_name': nodepool1_name, 'nodepool2_name': nodepool2_name }) # create create_cmd = 'aks create --resource-group={resource_group} --name={name} --location={location} ' \ '--dns-name-prefix={dns_name_prefix} --node-count=1 --ssh-key-value={ssh_key_value} ' \ '--service-principal={service_principal} --client-secret={client_secret}' self.cmd(create_cmd, checks=[ self.exists('fqdn'), self.exists('nodeResourceGroup'), self.check('provisioningState', 'Succeeded') ]) # show self.cmd('aks show -g {resource_group} -n {name}', checks=[ self.check('type', '{resource_type}'), self.check('name', '{name}'), self.exists('nodeResourceGroup'), self.check('resourceGroup', '{resource_group}'), self.check('agentPoolProfiles[0].count', 1), self.check('agentPoolProfiles[0].osType', 'Linux'), self.check('agentPoolProfiles[0].vmSize', 'Standard_DS2_v2'), self.check('agentPoolProfiles[0].mode', 'System'), self.check('dnsPrefix', '{dns_name_prefix}'), self.exists('kubernetesVersion') ]) # get-credentials fd, temp_path = tempfile.mkstemp() self.kwargs.update({'file': temp_path}) try: self.cmd( 'aks get-credentials -g {resource_group} -n {name} --file "{file}"') self.assertGreater(os.path.getsize(temp_path), 0) finally: os.close(fd) os.remove(temp_path) # nodepool add self.cmd('aks nodepool add --resource-group={resource_group} --cluster-name={name} --name={nodepool2_name} --labels {labels} --node-count=1 --tags {tags}', checks=[ self.check('provisioningState', 'Succeeded') ]) # nodepool list self.cmd('aks nodepool list --resource-group={resource_group} --cluster-name={name}', checks=[ StringContainCheck(aks_name), StringContainCheck(resource_group), StringContainCheck(nodepool1_name), StringContainCheck(nodepool2_name), self.check('[1].tags.key1', 'value1'), self.check('[1].nodeLabels.label1', 'value1'), self.check('[1].mode', 'User') ]) # nodepool list in tabular format self.cmd('aks nodepool list --resource-group={resource_group} --cluster-name={name} -o table', checks=[ StringContainCheck(nodepool1_name), StringContainCheck(nodepool2_name) ]) # nodepool scale up self.cmd('aks nodepool scale --resource-group={resource_group} --cluster-name={name} --name={nodepool2_name} --node-count=3', checks=[ self.check('count', 3) ]) # nodepool show self.cmd('aks nodepool show --resource-group={resource_group} --cluster-name={name} --name={nodepool2_name}', checks=[ self.check('count', 3) ]) # nodepool get-upgrades self.cmd('aks nodepool get-upgrades --resource-group={resource_group} --cluster-name={name} --nodepool-name={nodepool1_name}', checks=[ StringContainCheck(aks_name), StringContainCheck(resource_group), StringContainCheck(nodepool1_name), self.check( 'type', "Microsoft.ContainerService/managedClusters/agentPools/upgradeProfiles") ]) self.cmd('aks nodepool get-upgrades --resource-group={resource_group} --cluster-name={name} --nodepool-name={nodepool2_name}', checks=[ StringContainCheck(aks_name), StringContainCheck(resource_group), StringContainCheck(nodepool2_name), self.check( 'type', "Microsoft.ContainerService/managedClusters/agentPools/upgradeProfiles") ]) # nodepool update self.cmd('aks nodepool update --resource-group={resource_group} --cluster-name={name} --name={nodepool2_name} --tags {new_tags}', checks=[ self.check('tags.key2', 'value2') ]) # #nodepool delete self.cmd( 'aks nodepool delete --resource-group={resource_group} --cluster-name={name} --name={nodepool2_name} --no-wait', checks=[self.is_empty()]) # delete self.cmd( 'aks delete -g {resource_group} -n {name} --yes --no-wait', checks=[self.is_empty()])
def test_aks_create_default_setting(self, resource_group, resource_group_location, sp_name, sp_password): # reset the count so in replay mode the random names will start with 0 self.test_resources_count = 0 # kwargs for string formatting aks_name = self.create_random_name('cliakstest', 16) self.kwargs.update({ 'resource_group': resource_group, 'name': aks_name, 'dns_name_prefix': self.create_random_name('cliaksdns', 16), 'ssh_key_value': self.generate_ssh_keys().replace('\\', '\\\\'), 'location': resource_group_location, 'service_principal': _process_sp_name(sp_name), 'client_secret': sp_password, 'resource_type': 'Microsoft.ContainerService/ManagedClusters' }) # create create_cmd = 'aks create --resource-group={resource_group} --name={name} --location={location} ' \ '--dns-name-prefix={dns_name_prefix} --node-count=1 --ssh-key-value={ssh_key_value} ' \ '--service-principal={service_principal} --client-secret={client_secret} ' \ '--no-wait' self.cmd(create_cmd, checks=[self.is_empty()]) # wait self.cmd( 'aks wait -g {resource_group} -n {name} --created', checks=[self.is_empty()]) # list self.cmd('aks list -g {resource_group}', checks=[ self.check('[0].type', '{resource_type}'), StringContainCheck(aks_name), StringContainCheck(resource_group) ]) # list in tabular format self.cmd('aks list -g {resource_group} -o table', checks=[ StringContainCheck(aks_name), StringContainCheck(resource_group) ]) # show self.cmd('aks show -g {resource_group} -n {name}', checks=[ self.check('type', '{resource_type}'), self.check('name', '{name}'), self.exists('nodeResourceGroup'), self.check('resourceGroup', '{resource_group}'), self.check('agentPoolProfiles[0].count', 1), self.check('agentPoolProfiles[0].osType', 'Linux'), self.check('agentPoolProfiles[0].vmSize', 'Standard_DS2_v2'), self.check('agentPoolProfiles[0].type', 'VirtualMachineScaleSets'), self.check('dnsPrefix', '{dns_name_prefix}'), self.exists('kubernetesVersion'), self.check('networkProfile.loadBalancerSku', 'Standard'), self.exists( 'networkProfile.loadBalancerProfile.effectiveOutboundIPs') ]) # get-credentials fd, temp_path = tempfile.mkstemp() self.kwargs.update({'file': temp_path}) try: self.cmd( 'aks get-credentials -g {resource_group} -n {name} --file "{file}"') finally: os.close(fd) os.remove(temp_path) # get-credentials to stdout self.cmd('aks get-credentials -g {resource_group} -n {name} -f -') # get-credentials without directory in path temp_path = self.create_random_name('kubeconfig', 24) + '.tmp' self.kwargs.update({'file': temp_path}) try: self.cmd( 'aks get-credentials -g {resource_group} -n {name} -f "{file}"') self.assertGreater(os.path.getsize(temp_path), 0) finally: os.remove(temp_path) # delete self.cmd( 'aks delete -g {resource_group} -n {name} --yes --no-wait', checks=[self.is_empty()])
def test_aks_create_default_service(self, resource_group, resource_group_location, sp_name, sp_password): # kwargs for string formatting aks_name = self.create_random_name('cliakstest', 16) self.kwargs.update({ 'resource_group': resource_group, 'name': aks_name, 'dns_name_prefix': self.create_random_name('cliaksdns', 16), 'ssh_key_value': self.generate_ssh_keys().replace('\\', '\\\\'), 'location': resource_group_location, 'service_principal': sp_name, 'client_secret': sp_password, 'resource_type': 'Microsoft.ContainerService/ManagedClusters' }) # create create_cmd = 'aks create --resource-group={resource_group} --name={name} --location={location} ' \ '--dns-name-prefix={dns_name_prefix} --node-count=1 --ssh-key-value={ssh_key_value} ' \ '--service-principal={service_principal} --client-secret={client_secret}' self.cmd(create_cmd, checks=[ self.exists('fqdn'), self.exists('nodeResourceGroup'), self.check('provisioningState', 'Succeeded') ]) # list self.cmd('aks list -g {resource_group}', checks=[ self.check('[0].type', '{resource_type}'), StringContainCheck(aks_name), StringContainCheck(resource_group) ]) # list in tabular format self.cmd('aks list -g {resource_group} -o table', checks=[ StringContainCheck(aks_name), StringContainCheck(resource_group) ]) # show self.cmd('aks show -g {resource_group} -n {name}', checks=[ self.check('type', '{resource_type}'), self.check('name', '{name}'), self.exists('nodeResourceGroup'), self.check('resourceGroup', '{resource_group}'), self.check('agentPoolProfiles[0].count', 1), self.check('agentPoolProfiles[0].osType', 'Linux'), self.check('agentPoolProfiles[0].vmSize', 'Standard_DS1_v2'), self.check('dnsPrefix', '{dns_name_prefix}'), self.exists('kubernetesVersion') ]) # get-credentials fd, temp_path = tempfile.mkstemp() self.kwargs.update({'file': temp_path}) try: self.cmd('aks get-credentials -g {resource_group} -n {name} --file {file}') finally: os.close(fd) os.remove(temp_path) # get-credentials to stdout self.cmd('aks get-credentials -g {resource_group} -n {name} -f -') # get-credentials without directory in path temp_path = 'kubeconfig.tmp' self.kwargs.update({'file': temp_path}) try: self.cmd('aks get-credentials -g {resource_group} -n {name} -f {file}') self.assertGreater(os.path.getsize(temp_path), 0) finally: os.remove(temp_path) # scale up self.cmd('aks scale -g {resource_group} -n {name} --node-count 3', checks=[ self.check('agentPoolProfiles[0].count', 3) ]) # show again self.cmd('aks show -g {resource_group} -n {name}', checks=[ self.check('agentPoolProfiles[0].count', 3) ]) # delete self.cmd('aks delete -g {resource_group} -n {name} --yes --no-wait', checks=[self.is_empty()])
def test_aks_create_with_upgrade(self, resource_group, resource_group_location, sp_name, sp_password): # kwargs for string formatting self.kwargs.update({ 'resource_group': resource_group, 'name': self.create_random_name('cliakstest', 16), 'dns_name_prefix': self.create_random_name('cliaksdns', 16), 'ssh_key_value': self.generate_ssh_keys().replace('\\', '\\\\'), 'location': resource_group_location, 'service_principal': sp_name, 'client_secret': sp_password, 'resource_type': 'Microsoft.ContainerService/ManagedClusters', 'k8s_version': '1.7.12' }) # show k8s versions self.cmd('aks get-versions -l {location}', checks=[ self.exists('orchestrators[*].orchestratorVersion') ]) # show k8s versions in table format self.cmd('aks get-versions -l {location} -o table', checks=[ StringContainCheck(self.kwargs['k8s_version']) ]) # create create_cmd = 'aks create -g {resource_group} -n {name} --dns-name-prefix {dns_name_prefix} ' \ '--ssh-key-value {ssh_key_value} --kubernetes-version {k8s_version} -l {location} ' \ '--service-principal {service_principal} --client-secret {client_secret} -c 1' self.cmd(create_cmd, checks=[ self.exists('fqdn'), self.check('provisioningState', 'Succeeded') ]) # show self.cmd('aks show -g {resource_group} -n {name}', checks=[ self.check('type', '{resource_type}'), self.check('name', '{name}'), self.check('resourceGroup', '{resource_group}'), self.check('agentPoolProfiles[0].count', 1), self.check('agentPoolProfiles[0].vmSize', 'Standard_DS1_v2'), self.check('dnsPrefix', '{dns_name_prefix}'), self.check('provisioningState', 'Succeeded'), self.check('kubernetesVersion', '{k8s_version}') ]) # get versions for upgrade self.cmd('aks get-upgrades -g {resource_group} -n {name}', checks=[ self.exists('id'), self.check('resourceGroup', '{resource_group}'), self.check('agentPoolProfiles[0].kubernetesVersion', '{k8s_version}'), self.check('agentPoolProfiles[0].osType', 'Linux'), self.exists('controlPlaneProfile.upgrades'), self.check('type', 'Microsoft.ContainerService/managedClusters/upgradeprofiles') ]) # get versions for upgrade in table format k8s_upgrade_version = '1.8.7' self.cmd('aks get-upgrades -g {resource_group} -n {name} --output=table', checks=[ StringContainCheck('Upgrades'), StringContainCheck(k8s_upgrade_version) ]) # upgrade self.kwargs.update({'k8s_version': k8s_upgrade_version}) self.cmd('aks upgrade -g {resource_group} -n {name} --kubernetes-version {k8s_version} --yes', checks=[ self.check('provisioningState', 'Succeeded') ]) # show again self.cmd('aks show -g {resource_group} -n {name}', checks=[ self.check('kubernetesVersion', '{k8s_version}') ]) # get versions for upgrade in table format self.cmd('aks get-upgrades -g {resource_group} -n {name} --output=table', checks=[ StringContainCheck('Upgrades'), StringContainCheck('None available') ]) # delete self.cmd('aks delete -g {resource_group} -n {name} -y', checks=[self.is_empty()])
def test_aks_create_service_no_wait(self, resource_group, resource_group_location, sp_name, sp_password): # kwargs for string formatting self.kwargs.update({ 'resource_group': resource_group, 'name': self.create_random_name('cliakstest', 16), 'dns_name_prefix': self.create_random_name('cliaksdns', 16), 'ssh_key_value': self.generate_ssh_keys().replace('\\', '\\\\'), 'location': resource_group_location, 'service_principal': sp_name, 'client_secret': sp_password, 'k8s_version': '1.8.11' }) # create --no-wait create_cmd = 'aks create -g {resource_group} -n {name} -p {dns_name_prefix} --ssh-key-value {ssh_key_value} ' \ '-l {location} --service-principal {service_principal} --client-secret {client_secret} -k {k8s_version} ' \ '--tags scenario_test -c 1 --no-wait' self.cmd(create_cmd, checks=[self.is_empty()]) # wait self.cmd('aks wait -g {resource_group} -n {name} --created', checks=[self.is_empty()]) # show self.cmd('aks show -g {resource_group} -n {name}', checks=[ self.check('name', '{name}'), self.check('resourceGroup', '{resource_group}'), self.check('agentPoolProfiles[0].count', 1), self.check('agentPoolProfiles[0].vmSize', 'Standard_DS1_v2'), self.check('dnsPrefix', '{dns_name_prefix}'), self.check('provisioningState', 'Succeeded'), self.check('addonProfiles', None) ]) # show k8s versions self.cmd('aks get-versions -l {location}', checks=[self.exists('orchestrators[*].orchestratorVersion')]) # show k8s versions in table format self.cmd('aks get-versions -l {location} -o table', checks=[StringContainCheck(self.kwargs['k8s_version'])]) # get versions for upgrade self.cmd( 'aks get-upgrades -g {resource_group} -n {name}', checks=[ self.exists('id'), self.check('resourceGroup', '{resource_group}'), self.check('agentPoolProfiles[0].kubernetesVersion', '{k8s_version}'), self.check('agentPoolProfiles[0].osType', 'Linux'), self.exists('controlPlaneProfile.upgrades'), self.check( 'type', 'Microsoft.ContainerService/managedClusters/upgradeprofiles' ) ]) # get versions for upgrade in table format k8s_upgrade_version = '1.9.6' self.cmd( 'aks get-upgrades -g {resource_group} -n {name} --output=table', checks=[ StringContainCheck('Upgrades'), StringContainCheck(k8s_upgrade_version) ]) # enable http application routing addon self.cmd( 'aks enable-addons -g {resource_group} -n {name} --addons http_application_routing', checks=[ self.check('name', '{name}'), self.check('resourceGroup', '{resource_group}'), self.check('agentPoolProfiles[0].count', 1), self.check('agentPoolProfiles[0].vmSize', 'Standard_DS1_v2'), self.check('dnsPrefix', '{dns_name_prefix}'), self.check('provisioningState', 'Succeeded'), self.check('addonProfiles.httpApplicationRouting.enabled', True) ]) # delete self.cmd('aks delete -g {resource_group} -n {name} --yes', checks=[self.is_empty()]) # show again and expect failure self.cmd('aks show -g {resource_group} -n {name}', expect_failure=True)
def test_aks_create_slb_vmss_with_outbound_ip_prefixes_then_update( self, resource_group, resource_group_location, sp_name, sp_password): # reset the count so in replay mode the random names will start with 0 self.test_resources_count = 0 # kwargs for string formatting aks_name = self.create_random_name('cliakstest', 16) ipprefix1_name = self.create_random_name('cliaksslbipp1', 20) ipprefix2_name = self.create_random_name('cliaksslbipp2', 20) self.kwargs.update({ 'resource_group': resource_group, 'name': aks_name, 'ipprefix1_name': ipprefix1_name, 'ipprefix2_name': ipprefix2_name, 'dns_name_prefix': self.create_random_name('cliaksdns', 16), 'ssh_key_value': self.generate_ssh_keys().replace('\\', '\\\\'), 'location': resource_group_location, 'service_principal': sp_name, 'client_secret': sp_password, 'resource_type': 'Microsoft.ContainerService/ManagedClusters' }) # create public ip prefix ipprefix1_id = self.cmd('az network public-ip prefix create -g {rg} -n {ipprefix1_name} --location {location} --length 29'). \ get_output_in_json().get("id") ipprefix2_id = self.cmd('az network public-ip prefix create -g {rg} -n {ipprefix2_name} --location {location} --length 29'). \ get_output_in_json().get("id") self.kwargs.update({ 'ipprefix1_id': ipprefix1_id, 'ipprefix2_id': ipprefix2_id }) # create create_cmd = 'aks create --resource-group={resource_group} --name={name} --location={location} ' \ '--dns-name-prefix={dns_name_prefix} --node-count=1 --ssh-key-value={ssh_key_value} ' \ '--service-principal={service_principal} --client-secret={client_secret} ' \ '--load-balancer-sku=standard --vm-set-type=virtualmachinescalesets --load-balancer-outbound-ip-prefixes {ipprefix1_id}' self.cmd(create_cmd, checks=[ self.exists('fqdn'), self.exists('nodeResourceGroup'), self.check('provisioningState', 'Succeeded'), StringContainCheck(ipprefix1_id) ]) # list self.cmd('aks list -g {resource_group}', checks=[ self.check('[0].type', '{resource_type}'), StringContainCheck(aks_name), StringContainCheck(resource_group) ]) # list in tabular format self.cmd('aks list -g {resource_group} -o table', checks=[ StringContainCheck(aks_name), StringContainCheck(resource_group) ]) # show self.cmd( 'aks show -g {resource_group} -n {name}', checks=[ self.check('type', '{resource_type}'), self.check('name', '{name}'), self.exists('nodeResourceGroup'), self.check('resourceGroup', '{resource_group}'), self.check('agentPoolProfiles[0].count', 1), self.check('agentPoolProfiles[0].osType', 'Linux'), self.check('agentPoolProfiles[0].vmSize', 'Standard_DS2_v2'), self.check('agentPoolProfiles[0].type', 'VirtualMachineScaleSets'), self.check('dnsPrefix', '{dns_name_prefix}'), self.exists('kubernetesVersion'), self.check('networkProfile.loadBalancerSku', 'Standard'), self.exists('networkProfile.loadBalancerProfile'), self.exists( 'networkProfile.loadBalancerProfile.outboundIpPrefixes'), self.exists( 'networkProfile.loadBalancerProfile.effectiveOutboundIps') ]) # get-credentials fd, temp_path = tempfile.mkstemp() self.kwargs.update({'file': temp_path}) try: self.cmd( 'aks get-credentials -g {resource_group} -n {name} --file {file}' ) finally: os.close(fd) os.remove(temp_path) # get-credentials to stdout self.cmd('aks get-credentials -g {resource_group} -n {name} -f -') # get-credentials without directory in path temp_path = 'kubeconfig.tmp' self.kwargs.update({'file': temp_path}) try: self.cmd( 'aks get-credentials -g {resource_group} -n {name} -f {file}') self.assertGreater(os.path.getsize(temp_path), 0) finally: os.remove(temp_path) # update outbound IP self.cmd( 'aks update -g {resource_group} -n {name} --load-balancer-outbound-ip-prefixes {ipprefix1_id},{ipprefix2_id}', checks=[ StringContainCheck(ipprefix1_id), StringContainCheck(ipprefix2_id) ]) # show again self.cmd('aks show -g {resource_group} -n {name}', checks=[ StringContainCheck(ipprefix1_id), StringContainCheck(ipprefix2_id) ]) #delete self.cmd('aks delete -g {resource_group} -n {name} --yes --no-wait', checks=[self.is_empty()])