Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package azure-cli-core for openSUSE:Factory checked in at 2024-05-22 21:33:09 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/azure-cli-core (Old) and /work/SRC/openSUSE:Factory/.azure-cli-core.new.1880 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "azure-cli-core" Wed May 22 21:33:09 2024 rev:68 rq:1175821 version:2.61.0 Changes: -------- --- /work/SRC/openSUSE:Factory/azure-cli-core/azure-cli-core.changes 2024-05-07 18:04:16.892422007 +0200 +++ /work/SRC/openSUSE:Factory/.azure-cli-core.new.1880/azure-cli-core.changes 2024-05-22 21:33:33.092337226 +0200 @@ -1,0 +2,11 @@ +Wed May 22 10:11:07 UTC 2024 - John Paul Adrian Glaubitz <adrian.glaub...@suse.com> + +- New upstream release + + Version 2.61.0 + + For detailed information about changes see the + HISTORY.rst file provided with this package +- Add azure-cli namespace directory in %files section +- Remove deletion of azure-cli namespace files +- Update Requires from setup.py + +------------------------------------------------------------------- Old: ---- azure_cli_core-2.60.0.tar.gz New: ---- azure_cli_core-2.61.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ azure-cli-core.spec ++++++ --- /var/tmp/diff_new_pack.ovP9yX/_old 2024-05-22 21:33:33.888366341 +0200 +++ /var/tmp/diff_new_pack.ovP9yX/_new 2024-05-22 21:33:33.888366341 +0200 @@ -24,7 +24,7 @@ %global _sitelibdir %{%{pythons}_sitelib} Name: azure-cli-core -Version: 2.60.0 +Version: 2.61.0 Release: 0 Summary: Microsoft Azure CLI Core Module License: MIT @@ -37,12 +37,11 @@ BuildRequires: %{pythons}-pip BuildRequires: %{pythons}-setuptools BuildRequires: %{pythons}-wheel -BuildRequires: azure-cli-nspkg BuildRequires: fdupes BuildRequires: python-rpm-macros Requires: %{pythons}-PyJWT >= 2.1.0 Requires: %{pythons}-argcomplete < 4.0 -Requires: %{pythons}-argcomplete >= 3.1.1 +Requires: %{pythons}-argcomplete >= 3.3.0 Requires: %{pythons}-azure-mgmt-core < 2.0.0 Requires: %{pythons}-azure-mgmt-core >= 1.2.0 Requires: %{pythons}-azure-nspkg >= 3.0.0 @@ -69,7 +68,6 @@ Requires: %{pythons}-requests < 3.0.0 Requires: %{pythons}-requests >= 2.25.1 Requires: %{pythons}-wheel >= 0.30.0 -Requires: azure-cli-nspkg Requires: azure-cli-telemetry >= 1.1.0 Conflicts: azure-cli < 2.0.0 @@ -88,15 +86,12 @@ %install %pyproject_install %fdupes %{buildroot}%{_sitelibdir} -rm -rf %{buildroot}%{_sitelibdir}/azure/cli/__init__.* -rm -rf %{buildroot}%{_sitelibdir}/azure/cli/__pycache__ -rm -rf %{buildroot}%{_sitelibdir}/azure/__init__.* -rm -rf %{buildroot}%{_sitelibdir}/azure/__pycache__ %files %defattr(-,root,root,-) %doc HISTORY.rst README.rst %license LICENSE.txt +%dir %{_sitelibdir}/azure/cli %{_sitelibdir}/azure/cli/core %{_sitelibdir}/azure_cli_core-*.dist-info ++++++ azure_cli_core-2.60.0.tar.gz -> azure_cli_core-2.61.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure_cli_core-2.60.0/HISTORY.rst new/azure_cli_core-2.61.0/HISTORY.rst --- old/azure_cli_core-2.60.0/HISTORY.rst 2024-04-24 06:14:31.000000000 +0200 +++ new/azure_cli_core-2.61.0/HISTORY.rst 2024-05-16 05:48:31.000000000 +0200 @@ -3,6 +3,14 @@ Release History =============== +2.61.0 +++++++ +* Resolve CVE-2024-34064 (#28895) +* [BREAKING CHANGE] `az login`: Use WAM as the default authentication method on Windows. For more details, see https://go.microsoft.com/fwlink/?linkid=2271136 (#28841) +* `aaz`: Support extended values in `AAZArgEnum` (#28850) +* Add `tenantDefaultDomain` and `tenantDisplayName` properties to login contexts (shown by `az account list`) (#28910) +* Prompt for interactive authentication for all silent authentication failures (#28966) + 2.60.0 ++++++ * Fix #28737: Fix token cache for service principal authentication (#28747) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure_cli_core-2.60.0/PKG-INFO new/azure_cli_core-2.61.0/PKG-INFO --- old/azure_cli_core-2.60.0/PKG-INFO 2024-04-24 06:15:06.462829600 +0200 +++ new/azure_cli_core-2.61.0/PKG-INFO 2024-05-16 05:49:07.551462000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: azure-cli-core -Version: 2.60.0 +Version: 2.61.0 Summary: Microsoft Azure Command-Line Tools Core Module Home-page: https://github.com/Azure/azure-cli Author: Microsoft Corporation @@ -18,7 +18,7 @@ Classifier: License :: OSI Approved :: MIT License Requires-Python: >=3.8.0 License-File: LICENSE.txt -Requires-Dist: argcomplete~=3.1.1 +Requires-Dist: argcomplete~=3.3.0 Requires-Dist: azure-cli-telemetry==1.1.0.* Requires-Dist: azure-mgmt-core<2,>=1.2.0 Requires-Dist: cryptography diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure_cli_core-2.60.0/azure/cli/core/__init__.py new/azure_cli_core-2.61.0/azure/cli/core/__init__.py --- old/azure_cli_core-2.60.0/azure/cli/core/__init__.py 2024-04-24 06:14:31.000000000 +0200 +++ new/azure_cli_core-2.61.0/azure/cli/core/__init__.py 2024-05-16 05:48:31.000000000 +0200 @@ -4,7 +4,7 @@ # -------------------------------------------------------------------------------------------- # pylint: disable=line-too-long -__version__ = "2.60.0" +__version__ = "2.61.0" import os import sys diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure_cli_core-2.60.0/azure/cli/core/_profile.py new/azure_cli_core-2.61.0/azure/cli/core/_profile.py --- old/azure_cli_core-2.60.0/azure/cli/core/_profile.py 2024-04-24 06:14:31.000000000 +0200 +++ new/azure_cli_core-2.61.0/azure/cli/core/_profile.py 2024-05-16 05:48:31.000000000 +0200 @@ -24,10 +24,17 @@ _IS_DEFAULT_SUBSCRIPTION = 'isDefault' _SUBSCRIPTION_ID = 'id' _SUBSCRIPTION_NAME = 'name' + # Tenant of the token which is used to list the subscription _TENANT_ID = 'tenantId' -# Home tenant of the subscription, which maps to tenantId in 'Subscriptions - List REST API' -# https://docs.microsoft.com/en-us/rest/api/resources/subscriptions/list + +# More information on the token tenant. Maps to properties in 'Tenants - List' REST API +# https://learn.microsoft.com/en-us/rest/api/resources/tenants/list +_TENANT_DEFAULT_DOMAIN = 'tenantDefaultDomain' # defaultDomain +_TENANT_DISPLAY_NAME = 'tenantDisplayName' # displayName + +# Home tenant of the subscription. Maps to tenantId in 'Subscriptions - List' REST API +# https://learn.microsoft.com/en-us/rest/api/resources/subscriptions/list _HOME_TENANT_ID = 'homeTenantId' _MANAGED_BY_TENANTS = 'managedByTenants' _USER_ENTITY = 'user' @@ -91,18 +98,28 @@ return os.environ.get('MSI_ENDPOINT') -def _attach_token_tenant(subscription, tenant): - """Attach the token tenant ID to the subscription as tenant_id, so that CLI knows which token should be used +def _attach_token_tenant(subscription, tenant, tenant_id_description=None): + """Attach the token tenant information to the subscription. CLI uses tenant_id to know which token should be used to access the subscription. This function supports multiple APIs: - - v2016_06_01's Subscription doesn't have tenant_id - - v2019_11_01's Subscription has tenant_id representing the home tenant ID. It will mapped to home_tenant_id + - v2016_06_01: Subscription doesn't have tenant_id + - v2022_12_01: + - Subscription has tenant_id representing the home tenant ID, mapped to home_tenant_id + - TenantIdDescription has default_domain, mapped to tenant_default_domain + - TenantIdDescription has display_name, mapped to tenant_display_name """ if hasattr(subscription, "tenant_id"): setattr(subscription, 'home_tenant_id', subscription.tenant_id) setattr(subscription, 'tenant_id', tenant) + # Attach tenant_default_domain, if available + if tenant_id_description and hasattr(tenant_id_description, "default_domain"): + setattr(subscription, 'tenant_default_domain', tenant_id_description.default_domain) + # Attach display_name, if available + if tenant_id_description and hasattr(tenant_id_description, "display_name"): + setattr(subscription, 'tenant_display_name', tenant_id_description.display_name) + # pylint: disable=too-many-lines,too-many-instance-attributes,unused-argument class Profile: @@ -133,6 +150,7 @@ use_device_code=False, allow_no_subscriptions=False, use_cert_sn_issuer=None, + show_progress=False, **kwargs): """ For service principal, `password` is a dict returned by ServicePrincipalAuth.build_credential @@ -159,6 +177,11 @@ identity.login_with_service_principal(username, password, scopes=scopes) # We have finished login. Let's find all subscriptions. + if show_progress: + message = ('Retrieving subscriptions for the selection...' if tenant else + 'Retrieving tenants and subscriptions for the selection...') + print(f"\n{message}") + if user_identity: username = user_identity['username'] @@ -732,9 +755,10 @@ # pylint: disable=too-many-statements all_subscriptions = [] empty_tenants = [] - mfa_tenants = [] + interaction_required_tenants = [] client = self._create_subscription_client(credential) + # https://learn.microsoft.com/en-us/rest/api/resources/tenants/list tenants = client.tenants.list() for t in tenants: @@ -756,17 +780,16 @@ specific_tenant_credential = identity.get_user_credential(username) try: - subscriptions = self.find_using_specific_tenant(tenant_id, specific_tenant_credential) + + subscriptions = self.find_using_specific_tenant(tenant_id, specific_tenant_credential, + tenant_id_description=t) except AuthenticationError as ex: - # because user creds went through the 'common' tenant, the error here must be - # tenant specific, like the account was disabled. For such errors, we will continue - # with other tenants. - msg = ex.error_msg - if 'AADSTS50076' in msg: - # The tenant requires MFA and can't be accessed with home tenant's refresh token - mfa_tenants.append(t) - else: - logger.warning("Failed to authenticate %s due to error '%s'", t.tenant_id_name, ex) + # because user creds went through the 'organizations' tenant, the error here must be + # tenant specific, like the account was disabled, being blocked by MFA. For such errors, + # we continue with other tenants. + # As we don't check AADSTS error code, show the original error message for user's reference. + logger.warning("Authentication failed against tenant %s: %s", t.tenant_id_name, ex) + interaction_required_tenants.append(t) continue if not subscriptions: @@ -790,24 +813,29 @@ # Show warning for empty tenants if empty_tenants: logger.warning("The following tenants don't contain accessible subscriptions. " - "Use 'az login --allow-no-subscriptions' to have tenant level access.") + "Use `az login --allow-no-subscriptions` to have tenant level access.") for t in empty_tenants: logger.warning("%s", t.tenant_id_name) - # Show warning for MFA tenants - if mfa_tenants: - logger.warning("The following tenants require Multi-Factor Authentication (MFA). " - "Use 'az login --tenant TENANT_ID' to explicitly login to a tenant.") - for t in mfa_tenants: + # Show warning for InteractionRequired tenants + if interaction_required_tenants: + logger.warning("If you need to access subscriptions in the following tenants, please use " + "`az login --tenant TENANT_ID`.") + for t in interaction_required_tenants: logger.warning("%s", t.tenant_id_name) return all_subscriptions - def find_using_specific_tenant(self, tenant, credential): + def find_using_specific_tenant(self, tenant, credential, tenant_id_description=None): + """List subscriptions that can be accessed from a specific tenant. + If called from find_using_common_tenant, tenant_id_description is TenantIdDescription retrieved from + 'Tenants - List' REST API. If directly called, tenant_id_description is None. + """ client = self._create_subscription_client(credential) + # https://learn.microsoft.com/en-us/rest/api/resources/subscriptions/list subscriptions = client.subscriptions.list() all_subscriptions = [] for s in subscriptions: - _attach_token_tenant(s, tenant) + _attach_token_tenant(s, tenant, tenant_id_description=tenant_id_description) all_subscriptions.append(s) self.tenants.append(tenant) return all_subscriptions @@ -840,6 +868,11 @@ """ if hasattr(s, 'home_tenant_id'): s_dict[_HOME_TENANT_ID] = s.home_tenant_id + if hasattr(s, 'tenant_default_domain'): + s_dict[_TENANT_DEFAULT_DOMAIN] = s.tenant_default_domain + if hasattr(s, 'tenant_display_name'): + s_dict[_TENANT_DISPLAY_NAME] = s.tenant_display_name + if hasattr(s, 'managed_by_tenants'): if s.managed_by_tenants is None: s_dict[_MANAGED_BY_TENANTS] = None @@ -856,8 +889,8 @@ # EXPERIMENTAL: Use core.use_msal_http_cache=False to turn off MSAL HTTP cache. use_msal_http_cache = cli_ctx.config.getboolean('core', 'use_msal_http_cache', fallback=True) - # PREVIEW: On Windows, use core.enable_broker_on_windows=true to use broker (WAM) for authentication. - enable_broker_on_windows = cli_ctx.config.getboolean('core', 'enable_broker_on_windows', fallback=False) + # On Windows, use core.enable_broker_on_windows=false to disable broker (WAM) for authentication. + enable_broker_on_windows = cli_ctx.config.getboolean('core', 'enable_broker_on_windows', fallback=True) from .telemetry import set_broker_info set_broker_info(enable_broker_on_windows) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure_cli_core-2.60.0/azure/cli/core/aaz/_arg.py new/azure_cli_core-2.61.0/azure/cli/core/aaz/_arg.py --- old/azure_cli_core-2.60.0/azure/cli/core/aaz/_arg.py 2024-04-24 06:14:31.000000000 +0200 +++ new/azure_cli_core-2.61.0/azure/cli/core/aaz/_arg.py 2024-05-16 05:48:31.000000000 +0200 @@ -10,6 +10,7 @@ from knack.preview import PreviewItem from knack.experimental import ExperimentalItem from knack.util import status_tag_messages +from knack.log import get_logger from ._arg_action import AAZSimpleTypeArgAction, AAZObjectArgAction, AAZDictArgAction, AAZFreeFormDictArgAction, \ AAZListArgAction, AAZGenericUpdateAction, AAZGenericUpdateForceStringAction @@ -26,6 +27,8 @@ # pylint: disable=redefined-builtin, protected-access, too-few-public-methods, too-many-instance-attributes +logger = get_logger(__name__) + class AAZArgumentsSchema(AAZObjectType): """ Arguments' schema should be defined as fields of it """ @@ -44,8 +47,9 @@ class AAZArgEnum: """Argument enum properties""" - def __init__(self, items, case_sensitive=False): + def __init__(self, items, case_sensitive=False, support_extension=False): self._case_sensitive = case_sensitive + self.support_extension = support_extension self.items = items def to_choices(self): @@ -70,6 +74,19 @@ if isinstance(self.items, dict): return self.items[key] raise NotImplementedError() + if self.support_extension: + # support extension value which is not in choices + if isinstance(self.items, dict): + values = list(self.items.values()) + elif isinstance(self.items, (list, tuple, set)): + values = list(self.items) + try: + data_type = type(values[0]) + value = data_type(data) + logger.warning("Use extended value `%s` outside choices {self.to_choices()}.", str(value)) + return value + except (ValueError, IndexError): + pass raise azclierror.InvalidArgumentValueError( f"unrecognized value '{data}' from choices '{self.to_choices()}' ") @@ -205,14 +222,26 @@ class AAZSimpleTypeArg(AAZBaseArg, AAZSimpleType): """Argument accept simple value""" - def __init__(self, enum=None, enum_case_sensitive=False, **kwargs): + def __init__(self, enum=None, enum_case_sensitive=False, enum_support_extension=False, **kwargs): super().__init__(**kwargs) - self.enum = AAZArgEnum(enum, case_sensitive=enum_case_sensitive) if enum else None + self.enum = AAZArgEnum( + enum, case_sensitive=enum_case_sensitive, support_extension=enum_support_extension + ) if enum else None def to_cmd_arg(self, name, **kwargs): arg = super().to_cmd_arg(name, **kwargs) if self.enum: - arg.choices = self.enum.to_choices() # convert it's enum value into choices in arg + choices = self.enum.to_choices() + if self.enum.support_extension: + # Display the allowed values in help only without verifying the user input in argparse + short_summary = arg.type.settings.get('help', None) or '' + if short_summary: + short_summary += ' ' + short_summary += 'Allowed values: {}.'.format(', '.join(sorted([str(x) for x in choices]))) + arg.help = short_summary + else: + # this will verify the user input in argparse + arg.choices = choices # convert it's enum value into choices in arg return arg def _build_cmd_action(self): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure_cli_core-2.60.0/azure/cli/core/auth/landing_pages/success.html new/azure_cli_core-2.61.0/azure/cli/core/auth/landing_pages/success.html --- old/azure_cli_core-2.60.0/azure/cli/core/auth/landing_pages/success.html 2024-04-24 06:14:31.000000000 +0200 +++ new/azure_cli_core-2.61.0/azure/cli/core/auth/landing_pages/success.html 2024-05-16 05:48:31.000000000 +0200 @@ -21,13 +21,5 @@ <body> <h3>You have logged into Microsoft Azure!</h3> <p>You can close this window, or we will redirect you to the <a href="https://docs.microsoft.com/cli/azure/">Azure CLI documentation</a> in 1 minute.</p> - <h3>Announcements</h3> - <p>[Windows only] Azure CLI is collecting feedback on using the <a href="https://learn.microsoft.com/windows/uwp/security/web-account-manager">Web Account Manager</a> (WAM) broker for the login experience.</p> - <p>You may opt-in to use WAM by running the following commands:</p> - <code> - az config set core.enable_broker_on_windows=true<br> - az account clear<br> - az login - </code> </body> </html> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure_cli_core-2.60.0/azure/cli/core/extension/operations.py new/azure_cli_core-2.61.0/azure/cli/core/extension/operations.py --- old/azure_cli_core-2.60.0/azure/cli/core/extension/operations.py 2024-04-24 06:14:31.000000000 +0200 +++ new/azure_cli_core-2.61.0/azure/cli/core/extension/operations.py 2024-05-16 05:48:31.000000000 +0200 @@ -308,7 +308,7 @@ version=None, cli_ctx=None, upgrade=None, allow_preview=None): if allow_preview is None: logger.warning("Default enabled including preview versions for extension installation now. " - "Disabled in May 2024. " + "Disabled in future release. " "Use '--allow-preview true' to enable it specifically if needed. " "Use '--allow-preview false' to install stable version only. ") allow_preview = True @@ -407,7 +407,7 @@ def update_extension(cmd=None, extension_name=None, index_url=None, pip_extra_index_urls=None, pip_proxy=None, allow_preview=None, cli_ctx=None, version=None, download_url=None, ext_sha256=None): if allow_preview is None: logger.warning("Default enabled including preview versions for extension installation now. " - "Disabled in May 2024. " + "Disabled in future release. " "Use '--allow-preview true' to enable it specifically if needed. " "Use '--allow-preview false' to install stable version only. ") allow_preview = True diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure_cli_core-2.60.0/azure/cli/core/mock.py new/azure_cli_core-2.61.0/azure/cli/core/mock.py --- old/azure_cli_core-2.60.0/azure/cli/core/mock.py 2024-04-24 06:14:31.000000000 +0200 +++ new/azure_cli_core-2.61.0/azure/cli/core/mock.py 2024-05-16 05:48:31.000000000 +0200 @@ -32,17 +32,23 @@ self.env_patch = patch.dict(os.environ, {'AZURE_CONFIG_DIR': config_dir}) self.env_patch.start() + # Always copy command index to avoid initializing it again + files_to_copy = ['commandIndex.json'] # In recording mode, copy login credentials from global config dir to the dummy config dir if os.getenv(ENV_VAR_TEST_LIVE, '').lower() == 'true': - if os.path.exists(GLOBAL_CONFIG_DIR): - ensure_dir(config_dir) - import shutil - for file in ['azureProfile.json', 'msal_token_cache.bin', 'clouds.config', 'msal_token_cache.json', - 'service_principal_entries.json']: - try: - shutil.copy(os.path.join(GLOBAL_CONFIG_DIR, file), config_dir) - except FileNotFoundError: - pass + files_to_copy.extend([ + 'azureProfile.json', 'clouds.config', + 'msal_token_cache.bin', 'msal_token_cache.json', + 'service_principal_entries.bin', 'service_principal_entries.json' + ]) + + ensure_dir(config_dir) + import shutil + for file in files_to_copy: + try: + shutil.copy(os.path.join(GLOBAL_CONFIG_DIR, file), config_dir) + except FileNotFoundError: + pass super(DummyCli, self).__init__( cli_name='az', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure_cli_core-2.60.0/azure/cli/core/profiles/_shared.py new/azure_cli_core-2.61.0/azure/cli/core/profiles/_shared.py --- old/azure_cli_core-2.60.0/azure/cli/core/profiles/_shared.py 2024-04-24 06:14:31.000000000 +0200 +++ new/azure_cli_core-2.61.0/azure/cli/core/profiles/_shared.py 2024-05-16 05:48:31.000000000 +0200 @@ -156,7 +156,7 @@ 'latest': { ResourceType.MGMT_STORAGE: '2023-01-01', ResourceType.MGMT_NETWORK: '2022-01-01', - ResourceType.MGMT_COMPUTE: SDKProfile('2023-09-01', { + ResourceType.MGMT_COMPUTE: SDKProfile('2024-03-01', { 'resource_skus': '2019-04-01', 'disks': '2023-04-02', 'disk_encryption_sets': '2022-03-02', @@ -168,7 +168,7 @@ 'gallery_applications': '2021-07-01', 'gallery_application_versions': '2022-01-03', 'shared_galleries': '2022-01-03', - 'virtual_machine_scale_sets': '2023-09-01', + 'virtual_machine_scale_sets': '2024-03-01', }), ResourceType.MGMT_RESOURCE_FEATURES: '2021-07-01', ResourceType.MGMT_RESOURCE_LINKS: '2016-09-01', @@ -177,10 +177,10 @@ 'policy_exemptions': '2020-07-01-preview' }), ResourceType.MGMT_RESOURCE_RESOURCES: '2022-09-01', - ResourceType.MGMT_RESOURCE_SUBSCRIPTIONS: '2019-11-01', + ResourceType.MGMT_RESOURCE_SUBSCRIPTIONS: '2022-12-01', ResourceType.MGMT_RESOURCE_DEPLOYMENTSCRIPTS: '2020-10-01', ResourceType.MGMT_RESOURCE_TEMPLATESPECS: '2021-05-01', - ResourceType.MGMT_RESOURCE_DEPLOYMENTSTACKS: '2022-08-01-preview', + ResourceType.MGMT_RESOURCE_DEPLOYMENTSTACKS: '2024-03-01', ResourceType.MGMT_RESOURCE_PRIVATELINKS: '2020-05-01', ResourceType.MGMT_RESOURCE_MANAGEDAPPLICATIONS: '2019-07-01', ResourceType.MGMT_NETWORK_DNS: '2018-05-01', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure_cli_core-2.60.0/azure/cli/core/style.py new/azure_cli_core-2.61.0/azure/cli/core/style.py --- old/azure_cli_core-2.60.0/azure/cli/core/style.py 2024-04-24 06:14:31.000000000 +0200 +++ new/azure_cli_core-2.61.0/azure/cli/core/style.py 2024-05-16 05:48:31.000000000 +0200 @@ -30,6 +30,7 @@ class Style(str, Enum): PRIMARY = "primary" SECONDARY = "secondary" + HIGHLIGHT = "highlight" IMPORTANT = "important" ACTION = "action" # name TBD HYPERLINK = "hyperlink" @@ -65,6 +66,7 @@ THEME_DARK = { Style.PRIMARY: DEFAULT, Style.SECONDARY: '\x1b[90m', # Bright Foreground Black + Style.HIGHLIGHT: '\x1b[96m', # Bright Foreground Cyan Style.IMPORTANT: '\x1b[95m', # Bright Foreground Magenta Style.ACTION: '\x1b[94m', # Bright Foreground Blue Style.HYPERLINK: '\x1b[96m', # Bright Foreground Cyan @@ -77,6 +79,7 @@ THEME_LIGHT = { Style.PRIMARY: DEFAULT, Style.SECONDARY: '\x1b[90m', # Bright Foreground Black + Style.HIGHLIGHT: '\x1b[36m', # Foreground Cyan Style.IMPORTANT: '\x1b[35m', # Foreground Magenta Style.ACTION: '\x1b[34m', # Foreground Blue Style.HYPERLINK: '\x1b[36m', # Foreground Cyan @@ -90,6 +93,7 @@ THEME_CLOUD_SHELL = { Style.PRIMARY: _rgb_hex('#ffffff'), Style.SECONDARY: _rgb_hex('#bcbcbc'), + Style.HIGHLIGHT: _rgb_hex('#72d7d8'), # Same as Style.HYPERLINK, for now Style.IMPORTANT: _rgb_hex('#f887ff'), Style.ACTION: _rgb_hex('#6cb0ff'), Style.HYPERLINK: _rgb_hex('#72d7d8'), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure_cli_core-2.60.0/azure/cli/core/telemetry.py new/azure_cli_core-2.61.0/azure/cli/core/telemetry.py --- old/azure_cli_core-2.60.0/azure/cli/core/telemetry.py 2024-04-24 06:14:31.000000000 +0200 +++ new/azure_cli_core-2.61.0/azure/cli/core/telemetry.py 2024-05-16 05:48:31.000000000 +0200 @@ -70,11 +70,13 @@ self.suppress_new_event = False self.poll_start_time = None self.poll_end_time = None - self.enable_broker_on_windows = None - self.msal_telemetry = None self.secrets_detected = None self.secret_keys = None self.user_agent = None + # authentication-related + self.enable_broker_on_windows = None + self.msal_telemetry = None + self.login_experience_v2 = None def add_event(self, name, properties): for key in self.instrumentation_key: @@ -222,11 +224,13 @@ set_custom_properties(result, 'ShowSurveyMessage', str(self.show_survey_message)) set_custom_properties(result, 'RegionInput', self.region_input) set_custom_properties(result, 'RegionIdentified', self.region_identified) - set_custom_properties(result, 'EnableBrokerOnWindows', str(self.enable_broker_on_windows)) - set_custom_properties(result, 'MsalTelemetry', self.msal_telemetry) set_custom_properties(result, 'SecretsWarning', _get_secrets_warning_config()) set_custom_properties(result, 'SecretsDetected', str(self.secrets_detected)) set_custom_properties(result, 'SecretKeys', ','.join(self.secret_keys or [])) + # authentication-related + set_custom_properties(result, 'EnableBrokerOnWindows', str(self.enable_broker_on_windows)) + set_custom_properties(result, 'MsalTelemetry', self.msal_telemetry) + set_custom_properties(result, 'LoginExperienceV2', str(self.login_experience_v2)) return result @@ -476,6 +480,11 @@ @decorators.suppress_all_exceptions() +def set_login_experience_v2(login_experience_v2): + _session.login_experience_v2 = login_experience_v2 + + +@decorators.suppress_all_exceptions() def set_user_agent(user_agent): if user_agent: _session.user_agent = user_agent diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure_cli_core-2.60.0/azure_cli_core.egg-info/PKG-INFO new/azure_cli_core-2.61.0/azure_cli_core.egg-info/PKG-INFO --- old/azure_cli_core-2.60.0/azure_cli_core.egg-info/PKG-INFO 2024-04-24 06:15:06.000000000 +0200 +++ new/azure_cli_core-2.61.0/azure_cli_core.egg-info/PKG-INFO 2024-05-16 05:49:07.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: azure-cli-core -Version: 2.60.0 +Version: 2.61.0 Summary: Microsoft Azure Command-Line Tools Core Module Home-page: https://github.com/Azure/azure-cli Author: Microsoft Corporation @@ -18,7 +18,7 @@ Classifier: License :: OSI Approved :: MIT License Requires-Python: >=3.8.0 License-File: LICENSE.txt -Requires-Dist: argcomplete~=3.1.1 +Requires-Dist: argcomplete~=3.3.0 Requires-Dist: azure-cli-telemetry==1.1.0.* Requires-Dist: azure-mgmt-core<2,>=1.2.0 Requires-Dist: cryptography diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure_cli_core-2.60.0/azure_cli_core.egg-info/requires.txt new/azure_cli_core-2.61.0/azure_cli_core.egg-info/requires.txt --- old/azure_cli_core-2.60.0/azure_cli_core.egg-info/requires.txt 2024-04-24 06:15:06.000000000 +0200 +++ new/azure_cli_core-2.61.0/azure_cli_core.egg-info/requires.txt 2024-05-16 05:49:07.000000000 +0200 @@ -1,4 +1,4 @@ -argcomplete~=3.1.1 +argcomplete~=3.3.0 azure-cli-telemetry==1.1.0.* azure-mgmt-core<2,>=1.2.0 cryptography diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure_cli_core-2.60.0/setup.py new/azure_cli_core-2.61.0/setup.py --- old/azure_cli_core-2.60.0/setup.py 2024-04-24 06:14:31.000000000 +0200 +++ new/azure_cli_core-2.61.0/setup.py 2024-05-16 05:48:31.000000000 +0200 @@ -8,7 +8,7 @@ from codecs import open from setuptools import setup, find_packages -VERSION = "2.60.0" +VERSION = "2.61.0" # If we have source, validate that our version numbers match # This should prevent uploading releases with mismatched versions. @@ -43,7 +43,7 @@ ] DEPENDENCIES = [ - 'argcomplete~=3.1.1', + 'argcomplete~=3.3.0', 'azure-cli-telemetry==1.1.0.*', 'azure-mgmt-core>=1.2.0,<2', 'cryptography',