diff --git a/Dockerfile b/Dockerfile index 1bdf07cd7fd..60dc84bb84a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -68,4 +68,5 @@ WORKDIR / RUN rm -rf ./azure-cli && \ dos2unix /root/.bashrc /usr/local/bin/az +ENV AZ_INSTALLER=DOCKER CMD bash diff --git a/build_scripts/windows/scripts/az.cmd b/build_scripts/windows/scripts/az.cmd index a2b8c02cc49..9e9708908c6 100644 --- a/build_scripts/windows/scripts/az.cmd +++ b/build_scripts/windows/scripts/az.cmd @@ -4,6 +4,7 @@ :: @IF EXIST "%~dp0\..\python.exe" ( + SET AZ_INSTALLER=MSI "%~dp0\..\python.exe" -IBm azure.cli %* ) ELSE ( echo Failed to load python executable. diff --git a/scripts/release/debian/prepare.sh b/scripts/release/debian/prepare.sh index 0c4786c35b9..ab3ec5f9181 100755 --- a/scripts/release/debian/prepare.sh +++ b/scripts/release/debian/prepare.sh @@ -106,7 +106,7 @@ override_dh_install: ${TAB}mkdir -p debian/azure-cli/opt/az ${TAB}cp -a python_env/* debian/azure-cli/opt/az ${TAB}mkdir -p debian/azure-cli/usr/bin/ -${TAB}echo "\043!/usr/bin/env bash\n/opt/az/bin/python3 -Im azure.cli \"\044\100\"" > debian/azure-cli/usr/bin/az +${TAB}echo "\043!/usr/bin/env bash\nAZ_INSTALLER=DEB /opt/az/bin/python3 -Im azure.cli \"\044\100\"" > debian/azure-cli/usr/bin/az ${TAB}chmod 0755 debian/azure-cli/usr/bin/az ${TAB}mkdir -p debian/azure-cli/etc/bash_completion.d/ ${TAB}cat ${completion_script} > debian/azure-cli/etc/bash_completion.d/azure-cli diff --git a/scripts/release/homebrew/docker/formula_template.txt b/scripts/release/homebrew/docker/formula_template.txt index 4861b6a9be6..b8f254e211a 100644 --- a/scripts/release/homebrew/docker/formula_template.txt +++ b/scripts/release/homebrew/docker/formula_template.txt @@ -41,7 +41,7 @@ class AzureCli < Formula (bin/"az").write <<~EOS #!/usr/bin/env bash - #{libexec}/bin/python -m azure.cli \"$@\" + AZ_INSTALLER=HOMEBREW #{libexec}/bin/python -m azure.cli \"$@\" EOS bash_completion.install "az.completion" => "az" diff --git a/scripts/release/rpm/azure-cli.spec b/scripts/release/rpm/azure-cli.spec index 2ba6ca697e0..2bb8acbe236 100644 --- a/scripts/release/rpm/azure-cli.spec +++ b/scripts/release/rpm/azure-cli.spec @@ -48,7 +48,7 @@ for d in %{buildroot}%{cli_lib_dir}/bin/*; do perl -p -i -e "s#%{buildroot}##g" # Create executable mkdir -p %{buildroot}%{_bindir} python_version=$(ls %{buildroot}%{cli_lib_dir}/lib/ | head -n 1) -printf "#!/usr/bin/env bash\nPYTHONPATH=%{cli_lib_dir}/lib/${python_version}/site-packages /usr/bin/%{python_cmd} -sm azure.cli \"\$@\"" > %{buildroot}%{_bindir}/az +printf "#!/usr/bin/env bash\nAZ_INSTALLER=RPM PYTHONPATH=%{cli_lib_dir}/lib/${python_version}/site-packages /usr/bin/%{python_cmd} -sm azure.cli \"\$@\"" > %{buildroot}%{_bindir}/az rm %{buildroot}%{cli_lib_dir}/bin/python* %{buildroot}%{cli_lib_dir}/bin/pip* # Set up tab completion diff --git a/src/azure-cli-core/azure/cli/core/telemetry.py b/src/azure-cli-core/azure/cli/core/telemetry.py index f59c5b98d63..95d114d4004 100644 --- a/src/azure-cli-core/azure/cli/core/telemetry.py +++ b/src/azure-cli-core/azure/cli/core/telemetry.py @@ -173,6 +173,7 @@ def _get_azure_cli_properties(self): set_custom_properties(result, 'Feedback', self.feedback) set_custom_properties(result, 'ExtensionManagementDetail', self.extension_management_detail) set_custom_properties(result, 'Mode', self.mode) + set_custom_properties(result, 'Installer', os.getenv('AZ_INSTALLER')) return result diff --git a/src/azure-cli-core/azure/cli/core/tests/test_util.py b/src/azure-cli-core/azure/cli/core/tests/test_util.py index 2b6536606fa..af7efb0c8ab 100644 --- a/src/azure-cli-core/azure/cli/core/tests/test_util.py +++ b/src/azure-cli-core/azure/cli/core/tests/test_util.py @@ -213,6 +213,10 @@ def test_configured_default_setter(self): @mock.patch('azure.cli.core.__version__', '7.8.9') def test_get_az_user_agent(self): + with mock.patch.dict('os.environ', {'AZ_INSTALLER': 'PIP'}): + actual = get_az_user_agent() + self.assertEqual(actual, 'AZURECLI/7.8.9 (PIP)') + actual = get_az_user_agent() self.assertEqual(actual, 'AZURECLI/7.8.9') diff --git a/src/azure-cli-core/azure/cli/core/util.py b/src/azure-cli-core/azure/cli/core/util.py index 0aae22c4ce9..74604f747ee 100644 --- a/src/azure-cli-core/azure/cli/core/util.py +++ b/src/azure-cli-core/azure/cli/core/util.py @@ -805,6 +805,11 @@ def get_az_user_agent(): agents = ["AZURECLI/{}".format(core_version)] + _ENV_AZ_INSTALLER = 'AZ_INSTALLER' + import os + if _ENV_AZ_INSTALLER in os.environ: + agents.append('({})'.format(os.environ[_ENV_AZ_INSTALLER])) + # msrest already has this # https://github.com/Azure/msrest-for-python/blob/4cc8bc84e96036f03b34716466230fb257e27b36/msrest/pipeline/universal.py#L70 # if ENV_ADDITIONAL_USER_AGENT in os.environ: diff --git a/src/azure-cli/az b/src/azure-cli/az index 606cd4ce783..c16203ed4a9 100644 --- a/src/azure-cli/az +++ b/src/azure-cli/az @@ -13,4 +13,7 @@ else: os.environ.get('PYTHONPATH'), ]) -os.execl(sys.executable, sys.executable , '-m', 'azure.cli', *sys.argv[1:]) +if os.environ.get('AZ_INSTALLER') is None: + os.environ['AZ_INSTALLER'] = 'PIP' + +os.execl(sys.executable, sys.executable, '-m', 'azure.cli', *sys.argv[1:]) diff --git a/src/azure-cli/az.bat b/src/azure-cli/az.bat index acfd631ba71..c16942a2e42 100644 --- a/src/azure-cli/az.bat +++ b/src/azure-cli/az.bat @@ -2,6 +2,7 @@ setlocal SET PYTHONPATH=%~dp0\src;%PYTHONPATH% +SET AZ_INSTALLER=PIP IF EXIST "%~dp0\python.exe" ( "%~dp0\python.exe" -m azure.cli %* diff --git a/src/azure-cli/azure/cli/command_modules/feedback/custom.py b/src/azure-cli/azure/cli/command_modules/feedback/custom.py index 173f8885234..4383498eae0 100644 --- a/src/azure-cli/azure/cli/command_modules/feedback/custom.py +++ b/src/azure-cli/azure/cli/command_modules/feedback/custom.py @@ -92,6 +92,7 @@ ``` {platform} {python_info} +{installer} {cli_version} ``` @@ -514,6 +515,7 @@ def _build_issue_info_tup(command_log_file=None): format_dict["python_info"] = "Python {}".format(platform.python_version()) format_dict["platform"] = "{}".format(platform.platform()) format_dict["auto_gen_comment"] = _AUTO_GEN_COMMENT + format_dict["installer"] = "Installer: {}".format(os.getenv('AZ_INSTALLER') or '') pretty_url_name = _get_extension_repo_url(ext_name) if is_ext else _CLI_ISSUES_URL