|
43 | 43 | import colorama # pylint: disable=import-error |
44 | 44 | from tabulate import tabulate # pylint: disable=import-error |
45 | 45 | from azure.cli.core.api import get_config_dir |
| 46 | +from azure.cli.core.azclierror import ManualInterrupt, InvalidArgumentValueError, UnclassifiedUserFault, CLIInternalError, FileOperationError, ClientRequestError, DeploymentError, ValidationError, ArgumentUsageError, MutuallyExclusiveArgumentError, RequiredArgumentMissingError, ResourceNotFoundError |
46 | 47 | from azure.cli.core.commands.client_factory import get_mgmt_service_client, get_subscription_id |
47 | 48 | from azure.cli.core.keys import is_valid_ssh_rsa_public_key |
48 | 49 | from azure.cli.core.util import get_file_json, in_cloud_console, shell_safe_json_parse, truncate_text, sdk_no_wait |
@@ -1010,6 +1011,7 @@ def aks_create(cmd, # pylint: disable=too-many-locals,too-many-statements,to |
1010 | 1011 | private_dns_zone=None, |
1011 | 1012 | enable_managed_identity=True, |
1012 | 1013 | fqdn_subdomain=None, |
| 1014 | + enable_public_fqdn=False, |
1013 | 1015 | api_server_authorized_ip_ranges=None, |
1014 | 1016 | aks_custom_headers=None, |
1015 | 1017 | appgw_name=None, |
@@ -1398,30 +1400,33 @@ def aks_create(cmd, # pylint: disable=too-many-locals,too-many-statements,to |
1398 | 1400 | mc.node_resource_group = node_resource_group |
1399 | 1401 |
|
1400 | 1402 | use_custom_private_dns_zone = False |
| 1403 | + if not enable_private_cluster and enable_public_fqdn: |
| 1404 | + raise ArgumentUsageError("--enable-public-fqdn should only be used with --enable-private-cluster") |
1401 | 1405 | if enable_private_cluster: |
1402 | 1406 | if load_balancer_sku.lower() != "standard": |
1403 | | - raise CLIError( |
| 1407 | + raise ArgumentUsageError( |
1404 | 1408 | "Please use standard load balancer for private cluster") |
1405 | 1409 | mc.api_server_access_profile = ManagedClusterAPIServerAccessProfile( |
1406 | 1410 | enable_private_cluster=True |
1407 | 1411 | ) |
| 1412 | + if enable_public_fqdn: |
| 1413 | + mc.api_server_access_profile.enable_private_cluster_public_fqdn = True |
1408 | 1414 |
|
1409 | 1415 | if private_dns_zone: |
1410 | 1416 | if not enable_private_cluster: |
1411 | | - raise CLIError( |
| 1417 | + raise ArgumentUsageError( |
1412 | 1418 | "Invalid private dns zone for public cluster. It should always be empty for public cluster") |
1413 | 1419 | mc.api_server_access_profile.private_dns_zone = private_dns_zone |
1414 | 1420 | from msrestazure.tools import is_valid_resource_id |
1415 | 1421 | if private_dns_zone.lower() != CONST_PRIVATE_DNS_ZONE_SYSTEM and private_dns_zone.lower() != CONST_PRIVATE_DNS_ZONE_NONE: |
1416 | 1422 | if is_valid_resource_id(private_dns_zone): |
1417 | 1423 | use_custom_private_dns_zone = True |
1418 | 1424 | else: |
1419 | | - raise CLIError(private_dns_zone + |
1420 | | - " is not a valid Azure resource ID.") |
| 1425 | + raise ResourceNotFoundError(private_dns_zone + " is not a valid Azure resource ID.") |
1421 | 1426 |
|
1422 | 1427 | if fqdn_subdomain: |
1423 | 1428 | if not use_custom_private_dns_zone: |
1424 | | - raise CLIError( |
| 1429 | + raise ArgumentUsageError( |
1425 | 1430 | "--fqdn-subdomain should only be used for private cluster with custom private dns zone") |
1426 | 1431 | mc.fqdn_subdomain = fqdn_subdomain |
1427 | 1432 |
|
@@ -1501,6 +1506,8 @@ def aks_update(cmd, # pylint: disable=too-many-statements,too-many-branches, |
1501 | 1506 | disable_secret_rotation=False, |
1502 | 1507 | disable_local_accounts=False, |
1503 | 1508 | enable_local_accounts=False, |
| 1509 | + enable_public_fqdn=False, |
| 1510 | + disable_public_fqdn=False, |
1504 | 1511 | yes=False, |
1505 | 1512 | tags=None, |
1506 | 1513 | windows_admin_password=None, |
@@ -1540,7 +1547,9 @@ def aks_update(cmd, # pylint: disable=too-many-statements,too-many-branches, |
1540 | 1547 | not tags and \ |
1541 | 1548 | not windows_admin_password and \ |
1542 | 1549 | not enable_local_accounts and \ |
1543 | | - not disable_local_accounts: |
| 1550 | + not disable_local_accounts and \ |
| 1551 | + not enable_public_fqdn and \ |
| 1552 | + not disable_public_fqdn: |
1544 | 1553 | raise CLIError('Please specify "--enable-cluster-autoscaler" or ' |
1545 | 1554 | '"--disable-cluster-autoscaler" or ' |
1546 | 1555 | '"--update-cluster-autoscaler" or ' |
@@ -1571,7 +1580,9 @@ def aks_update(cmd, # pylint: disable=too-many-statements,too-many-branches, |
1571 | 1580 | '"--enable-azure-rbac" or ' |
1572 | 1581 | '"--disable-azure-rbac" or ' |
1573 | 1582 | '"--enable-local-accounts" or ' |
1574 | | - '"--disable-local-accounts"') |
| 1583 | + '"--disable-local-accounts" or ' |
| 1584 | + '"--enable-public-fqdn" or ' |
| 1585 | + '"--disable-public-fqdn"') |
1575 | 1586 | instance = client.get(resource_group_name, name) |
1576 | 1587 |
|
1577 | 1588 | if update_autoscaler and len(instance.agent_pool_profiles) > 1: |
@@ -1740,6 +1751,21 @@ def aks_update(cmd, # pylint: disable=too-many-statements,too-many-branches, |
1740 | 1751 | if disable_ahub: |
1741 | 1752 | instance.windows_profile.license_type = 'None' |
1742 | 1753 |
|
| 1754 | + if enable_public_fqdn and disable_public_fqdn: |
| 1755 | + raise MutuallyExclusiveArgumentError( |
| 1756 | + 'Cannot specify "--enable-public-fqdn" and "--disable-public-fqdn" at the same time') |
| 1757 | + is_private_cluster = instance.api_server_access_profile is not None and instance.api_server_access_profile.enable_private_cluster |
| 1758 | + if enable_public_fqdn: |
| 1759 | + if not is_private_cluster: |
| 1760 | + raise ArgumentUsageError('--enable-public-fqdn can only be used for private cluster') |
| 1761 | + instance.api_server_access_profile.enable_private_cluster_public_fqdn = True |
| 1762 | + if disable_public_fqdn: |
| 1763 | + if not is_private_cluster: |
| 1764 | + raise ArgumentUsageError('--disable-public-fqdn can only be used for private cluster') |
| 1765 | + if instance.api_server_access_profile.private_dns_zone.lower() == CONST_PRIVATE_DNS_ZONE_NONE: |
| 1766 | + raise ArgumentUsageError('--disable-public-fqdn cannot be applied for none mode private dns zone cluster') |
| 1767 | + instance.api_server_access_profile.enable_private_cluster_public_fqdn = False |
| 1768 | + |
1743 | 1769 | if instance.auto_upgrade_profile is None: |
1744 | 1770 | instance.auto_upgrade_profile = ManagedClusterAutoUpgradeProfile() |
1745 | 1771 |
|
@@ -1891,18 +1917,22 @@ def aks_get_credentials(cmd, # pylint: disable=unused-argument |
1891 | 1917 | path=os.path.join(os.path.expanduser( |
1892 | 1918 | '~'), '.kube', 'config'), |
1893 | 1919 | overwrite_existing=False, |
1894 | | - context_name=None): |
| 1920 | + context_name=None, |
| 1921 | + public_fqdn=False): |
1895 | 1922 | credentialResults = None |
| 1923 | + serverType = None |
| 1924 | + if public_fqdn: |
| 1925 | + serverType = 'public' |
1896 | 1926 | if admin: |
1897 | 1927 | credentialResults = client.list_cluster_admin_credentials( |
1898 | | - resource_group_name, name) |
| 1928 | + resource_group_name, name, serverType) |
1899 | 1929 | else: |
1900 | 1930 | if user.lower() == 'clusteruser': |
1901 | 1931 | credentialResults = client.list_cluster_user_credentials( |
1902 | | - resource_group_name, name) |
| 1932 | + resource_group_name, name, serverType) |
1903 | 1933 | elif user.lower() == 'clustermonitoringuser': |
1904 | 1934 | credentialResults = client.list_cluster_monitoring_user_credentials( |
1905 | | - resource_group_name, name) |
| 1935 | + resource_group_name, name, serverType) |
1906 | 1936 | else: |
1907 | 1937 | raise CLIError("The user is invalid.") |
1908 | 1938 | if not credentialResults: |
|
0 commit comments