diff --git a/knowledge base/azure/bicep.md b/knowledge base/azure/bicep.md new file mode 100644 index 0000000..73d6b8f --- /dev/null +++ b/knowledge base/azure/bicep.md @@ -0,0 +1,99 @@ +# Bicep + +Domain-specific language (DSL) for Infrastructure as Code, using declarative syntax to deploy Azure resources in a consistent manner. + +See [bicep]'s page for more information. + +The Azure CLI can use a command group (`az bicep …`) to integrate with the `bicep` utility. + +## Table of contents + +1. [TL:DR](#tldr) +1. [Utility management](#utility-management) + 1. [Installation](#installation) + 1. [Upgrade](#upgrade) +1. [Further readings](#further-readings) +1. [Sources](#sources) + +## TL:DR + +```sh +# Install the `bicep` utility. +# Includes the utility inside the local Azure CLI installation's path. +az bicep install +az bicep install -v 'v0.2.212' -t 'linux-arm64' + +# The CLI defaults to the included installation. +# External instances of the `bicep` utility *can* be used *if* the CLI is +# configured to do so. +brew install azure/bicep/bicep && \ +az config set bicep.use_binary_from_path=True + +# Upgrade `bicep` from the CLI. +az bicep upgrade +az bicep upgrade -t 'linux-x64' + +# Validate a bicep template to create a Deployment Group. +# Leverages the `bicep` utility. +az deployment group validate \ + -n 'deployment_group_name' -g 'resource_group_name' \ + -f 'template.bicep' -p 'parameter1=value' parameter2="value" +``` + +## Utility management + +### Installation + +The simplest way to install the `bicep` utility is to use the CLI: + +```sh +az bicep install +az bicep install -v 'v0.2.212' -t 'linux-arm64' +``` + +When doing so, the CLI downloads the utility inside its path. + +When using a proxy (like in companies forcing connections through it), the certificate check might fail.
+If this is the case, or when needed, `bicep` **can** be installed externally and used by the CLI, **if** the CLI is configured to use it with the following setting: + +```sh +az config set bicep.use_binary_from_path=True +``` + +### Upgrade + +Bicep will by default check for upgrades when run.
+To avoid this, the CLI needs to be configured to as follows: + +```sh +az config set bicep.version_check=False +``` + +When `bicep` is installed through the CLI, it can be updated from it too: + +```sh +az bicep upgrade +az bicep upgrade -t 'linux-x64' +``` + +## Further readings + +- [What is Bicep?] +- The [`az bicep` command reference][az bicep] +- The [Azure CLI] + +## Sources + +All the references in the [further readings] section, plus the following: + + +[az bicep]: https://learn.microsoft.com/en-us/cli/azure/bicep +[what is bicep?]: https://learn.microsoft.com/en-us/azure/azure-resource-manager/bicep/overview + + +[further readings]: #further-readings + + +[azure cli]: cli.md + + diff --git a/knowledge base/azure/cli.md b/knowledge base/azure/cli.md index f0726b8..41ad797 100644 --- a/knowledge base/azure/cli.md +++ b/knowledge base/azure/cli.md @@ -6,10 +6,8 @@ Queries (`az … --query …`) use the [JMESPath] query language for JSON. 1. [TL;DR](#tldr) 1. [Installation](#installation) +1. [Extensions](#extensions) 1. [Pipelines](#pipelines) -1. [Bicep](#bicep) - 1. [Bicep installation](#bicep-installation) - 1. [Bicep upgrade](#bicep-upgrade) 1. [APIs](#apis) 1. [Further readings](#further-readings) 1. [Sources](#sources) @@ -181,40 +179,6 @@ az postgres flexible-server list-skus --location 'westeurope' -o 'table' az monitor log-analytics workspace list --query '[].name' \ --resource-group 'resource_group_name' -# Login to Azure DevOps with a PAT. -az devops login --organization 'https://dev.azure.com/organization_name' - -# List DevOps' Service Endpoints. -az devops service-endpoint list \ - --organization 'https://dev.azure.com/organization_name' --project 'project' -az rest -m 'get' \ - -u 'https://dev.azure.com/organization_name/project_name/_apis/serviceendpoint/endpoints' \ - --url-parameters 'api-version=7.1-preview.4' \ - --headers Authorization='Bearer ey…pw' - -# Get the ID of a Service Endpoint from its name. -az devops service-endpoint list -o 'tsv' \ - --organization 'https://dev.azure.com/organization_name' --project 'project' \ - --query "[?name=='service_endpoint_name'].id" - -# Get the name of a Service Endpoint from its id. -az devops service-endpoint list -o 'tsv' \ - --organization 'https://dev.azure.com/organization_name' --project 'project' \ - --query "[?id=='service_endpoint_id'].name" - -# Filter out users whose Principal Name starts for X and access Y. -az devops user list --org 'https://dev.azure.com/organizationName' \ - --query " - items[? - startsWith(user.principalName, 'yourNameHere') && - \! contains(accessLevel.licenseDisplayName, 'Test plans') - ].user.displayName" - -# Get Teams' information. -az devops team show \ - --org 'https://dev.azure.com/organizationName' --project 'project' \ - --team 'display_name' - # Get the names of all the Pipelines the current user has access to. az pipelines list --organization 'organization_id_or_name' az pipelines list --detect 'true' --query '[].name' -o 'tsv' @@ -252,22 +216,22 @@ az provider show -o 'tsv' --namespace 'Microsoft.ContainerService' \ # Disable a Resource Provider. az provider unregister -n 'Microsoft.Confluent' -# Install the `bicep` utility. -# Includes the utility inside the local Azure CLI installation's path. -az bicep install -az bicep install -v 'v0.2.212' -t 'linux-arm64' +# List available CLI extensions. +az extension list-available --output 'table' -# The CLI defaults to the included installation. -# External instances of the `bicep` utility *can* be used *if* the CLI is -# configured to do so. -brew install azure/bicep/bicep && \ -az config set bicep.use_binary_from_path=True +# Add extensions to the CLI. +az extension add --name 'extension_name' +az extension add --source 'url__or__local_path' -# Upgrade `bicep` from the CLI. -az bicep upgrade -az bicep upgrade -t 'linux-x64' +# Update extensions. +az extension update --name 'extension_name' +az extension add --source 'updated__url__or__local_path' + +# Remove installed extensions. +az extension remove --name 'extension_name' # Validate a bicep template to create a Deployment Group. +# Leverages the `bicep` utility. az deployment group validate \ -n 'deployment_group_name' -g 'resource_group_name' \ -f 'template.bicep' -p 'parameter1=value' parameter2="value" @@ -474,54 +438,43 @@ asdf plugin add 'azure-cli' && asdf install 'azure-cli' '2.43.0' docker run -it -v "${HOME}/.ssh:/root/.ssh" 'mcr.microsoft.com/azure-cli' ``` +## Extensions + +The Azure CLI can load _extensions_, practically Python wheels that aren't shipped as part of the CLI itself but run as CLI commands.
+You could create your own CLI interface. + +```sh +# List available CLI extensions. +az extension list-available --output 'table' + +# Add extensions to the CLI. +az extension add --name 'extension_name' +az extension add --source 'url__or__local_path' + +# Update extensions. +az extension update --name 'extension_name' +az extension add --source 'updated__url__or__local_path' + +# Remove installed extensions. +az extension remove --name 'extension_name' +``` + +When you run a command for an extension which is not currently installed, CLI recognizes it and tries to automatically install the extension. This feature is called _dynamic install_, and is enabled by default since version 2.12.0. + +```sh +# Configure if and how to use the 'dynamic install' feature. +az config set 'extension.use_dynamic_install=yes_prompt' +az config set 'extension.use_dynamic_install=yes_without_prompt' +az config set 'extension.use_dynamic_install=no' +az config set 'extension.run_after_dynamic_install=no' +``` + ## Pipelines Give the `--organization` parameter, or use `--detect true` if running the command from a git repository to have it guessed automatically. `--detect` already defaults to `true`. -## Bicep - -Domain-specific language (DSL) for Infrastructure as Code, using declarative syntax to deploy Azure resources in a consistent manner. - -See [bicep]'s page for more information. - -The Azure CLI can use a command group (`az bicep …`) to integrate with the `bicep` utility. - -### Bicep installation - -The simplest way to install the `bicep` utility is to use the CLI: - -```sh -az bicep install -az bicep install -v 'v0.2.212' -t 'linux-arm64' -``` - -When doing so, the CLI downloads the utility inside its path. - -When using a proxy (like in companies forcing connections through it), the certificate check might fail.
-If this is the case, or when needed, `bicep` **can** be installed externally and used by the CLI, **if** the CLI is configured to use it with the following setting: - -```sh -az config set bicep.use_binary_from_path=True -``` - -### Bicep upgrade - -Bicep will by default check for upgrades when run.
-To avoid this, the CLI needs to be configured to as follows: - -```sh -az config set bicep.version_check=False -``` - -When `bicep` is installed through the CLI, it can be updated from it too: - -```sh -az bicep upgrade -az bicep upgrade -t 'linux-x64' -``` - ## APIs One can directly call the APIs with the `rest` command: @@ -560,7 +513,9 @@ az rest \ ## Further readings - [PAT APIs] -- [az command reference][az reference] +- The [`az` command reference][az reference] +- The [`az bicep` command group][az bicep] +- [Devops CLI extension] ## Sources @@ -570,15 +525,13 @@ az rest \ - [How to manage Azure subscriptions with the Azure CLI] - [Authenticate with an Azure container registry] - [Remove a member] -- [az aks reference] +- [`az aks` command reference][az aks reference] - [Create and manage Azure Pipelines from the command line] [authenticate with an azure container registry]: https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication?tabs=azure-cli [az aks reference]: https://learn.microsoft.com/en-us/cli/azure/aks -[az bicep]: https://learn.microsoft.com/en-us/cli/azure/bicep [az reference]: https://learn.microsoft.com/en-us/cli/azure/reference-index -[bicep]: https://learn.microsoft.com/en-us/azure/azure-resource-manager/bicep/overview [get started with azure cli]: https://learn.microsoft.com/en-us/cli/azure/get-started-with-azure-cli [how to manage azure subscriptions with the azure cli]: https://learn.microsoft.com/en-us/cli/azure/manage-azure-subscriptions-azure-cli [install azure cli on macos]: https://learn.microsoft.com/en-us/cli/azure/install-azure-cli-macos @@ -587,7 +540,9 @@ az rest \ [sign in with azure cli]: https://learn.microsoft.com/en-us/cli/azure/authenticate-azure-cli -[jmespath]: jmespath.md +[az bicep]: bicep.md#tldr +[devops cli extension]: devops.md#tldr +[jmespath]: ../jmespath.md [create and manage azure pipelines from the command line]: https://devblogs.microsoft.com/devops/create-and-manage-azure-pipelines-from-the-command-line/ diff --git a/knowledge base/azure/devops.md b/knowledge base/azure/devops.md index ed027fc..2cfd01a 100644 --- a/knowledge base/azure/devops.md +++ b/knowledge base/azure/devops.md @@ -2,12 +2,52 @@ ## Table of contents +1. [TL;DR](#tldr) 1. [Pipelines](#pipelines) 1. [Predefined variables](#predefined-variables) 1. [Loops](#loops) +1. [Azure CLI extension](#azure-cli-extension) 1. [Further readings](#further-readings) 1. [Sources](#sources) +## TL;DR + +```sh +# Login to Azure DevOps with a PAT. +az devops login --organization 'https://dev.azure.com/organization_name' + +# List DevOps' Service Endpoints. +az devops service-endpoint list \ + --organization 'https://dev.azure.com/organization_name' --project 'project' +az rest -m 'get' \ + -u 'https://dev.azure.com/organization_name/project_name/_apis/serviceendpoint/endpoints' \ + --url-parameters 'api-version=7.1-preview.4' \ + --headers Authorization='Bearer ey…pw' + +# Get the ID of a Service Endpoint from its name. +az devops service-endpoint list -o 'tsv' \ + --organization 'https://dev.azure.com/organization_name' --project 'project' \ + --query "[?name=='service_endpoint_name'].id" + +# Get the name of a Service Endpoint from its id. +az devops service-endpoint list -o 'tsv' \ + --organization 'https://dev.azure.com/organization_name' --project 'project' \ + --query "[?id=='service_endpoint_id'].name" + +# Filter out users whose Principal Name starts for X and access Y. +az devops user list --org 'https://dev.azure.com/organizationName' \ + --query " + items[? + startsWith(user.principalName, 'yourNameHere') && + \! contains(accessLevel.licenseDisplayName, 'Test plans') + ].user.displayName" + +# Get Teams' information. +az devops team show \ + --org 'https://dev.azure.com/organizationName' --project 'project' \ + --team 'display_name' +``` + ## Pipelines ### Predefined variables @@ -36,11 +76,17 @@ steps: - script: echo ${{ fruit.fruitName}} ${{ fruitColor }} ``` +## Azure CLI extension + +Devops offers the [`az devops`][az devops] extension to the Azure CLI.
+The extension will automatically install itself the first time you run an `az devops` command. + ## Further readings - [Expressions] - [Use predefined variables] - [Azure CLI] +- [`az devops`][az devops] ## Sources @@ -51,6 +97,7 @@ All the references in the [further readings] section, plus the following: [expressions]: https://learn.microsoft.com/en-us/azure/devops/pipelines/process/expressions [use predefined variables]: https://learn.microsoft.com/en-us/azure/devops/pipelines/build/variables +[az devops]: https://learn.microsoft.com/en-us/cli/azure/devops?view=azure-cli-latest [further readings]: #further-readings