Sad Tux - Windows bias detected
This page contains Windows bias

About This Page

This page is part of the Azure documentation. It contains code examples and configuration instructions for working with Azure services.

Bias Analysis

Detected Bias Types
powershell_heavy
windows_first
missing_linux_example
Summary
The documentation provides only a PowerShell script for deploying Arc-enabled ContainerApps in an Extended Zone, with no equivalent Bash or Linux shell example. All automation and scripting guidance is presented in PowerShell syntax, which is native to Windows and less commonly used on Linux. There is no mention of Linux or cross-platform alternatives, and the script assumes a Windows environment (e.g., use of .ps1 files, PowerShell-specific constructs).
Recommendations
  • Provide a Bash (or cross-platform shell) script example alongside the PowerShell script to ensure Linux users can follow the same workflow.
  • Explicitly mention that the steps can be performed on Linux/macOS using Azure CLI and Bash, and provide any necessary adjustments (e.g., syntax differences, file paths).
  • If PowerShell is required, clarify that PowerShell Core is available cross-platform, and provide installation instructions for Linux/macOS.
  • Review all script snippets and ensure that any Windows-specific commands or patterns have Linux equivalents or are written in a cross-platform manner.
  • Consider restructuring the documentation to present both Windows and Linux approaches in parallel, or at least note the parity and differences.
GitHub Create Pull Request

Scan History

Date Scan Status Result
2026-01-14 00:00 #250 in_progress Biased Biased
2026-01-13 00:00 #246 completed Biased Biased
2026-01-11 00:00 #240 completed Biased Biased
2026-01-10 00:00 #237 completed Biased Biased
2026-01-09 00:34 #234 completed Biased Biased
2026-01-08 00:53 #231 completed Biased Biased
2026-01-06 18:15 #225 cancelled Clean Clean
2025-08-17 00:01 #83 cancelled Clean Clean
2025-07-13 21:37 #48 completed Biased Biased
2025-07-09 13:09 #3 cancelled Clean Clean
2025-07-08 04:23 #2 cancelled Biased Biased

Flagged Code Snippets

# . "./CreateArcEnabledAksOnEZ.ps1"

# Create a container app on an AKS cluster in an edge zone and connect it to Azure Arc-enabled Kubernetes
function CreateContainerAppOnArcEnabledAksEz {
    param(
        [string] $AKSClusterResourceGroupName,
        [string] $location = "westus",
        [string] $AKSName,
        [string] $edgeZone,
        [int] $nodeCount = 2,
        [string] $vmSize = "standard_nv12ads_a10_v5",
        [string] $ArcResourceGroupName,
        [string] $CONNECTED_ENVIRONMENT_NAME,
        [string] $CUSTOM_LOCATION_NAME,
        [string] $SubscriptionId,
        [string] $ACRName,
        [string] $imageName,
        [switch] $Debug
    )

    try {
        # Set the subscription
        az account set --subscription $SubscriptionId

        # Create the Arc-enabled EZ AKS cluster
        createArcEnabledAksOnEz -SubscriptionId $SubscriptionId -AKSClusterResourceGroupName $AKSClusterResourceGroupName -location $location -AKSName $AKSName -edgeZone $edgeZone -nodeCount $nodeCount -vmSize $vmSize -ArcResourceGroupName $ArcResourceGroupName -Debug:$Debug

        # Install container apps extension
        $CLUSTER_NAME = "$ArcResourceGroupName-cluster" # Name of the connected cluster resource
        $EXTENSION_NAME="appenv-ext"
        $NAMESPACE="app-ns"
        az k8s-extension create `
        --resource-group $ArcResourceGroupName `
        --name $EXTENSION_NAME `
        --cluster-type connectedClusters `
        --cluster-name $CLUSTER_NAME `
        --extension-type 'Microsoft.App.Environment' `
        --release-train stable `
        --auto-upgrade-minor-version true `
        --scope cluster `
        --release-namespace $NAMESPACE `
        --configuration-settings "Microsoft.CustomLocation.ServiceAccount=default" `
        --configuration-settings "appsNamespace=${NAMESPACE}" `
        --configuration-settings "clusterName=${CONNECTED_ENVIRONMENT_NAME}" `
        --configuration-settings "envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group=${AKSClusterResourceGroupName}"
  
        # Save id property of the Container Apps extension for later
        $EXTENSION_ID=$(az k8s-extension show `
        --cluster-type connectedClusters `
        --cluster-name $CLUSTER_NAME `
        --resource-group $ArcResourceGroupName `
        --name $EXTENSION_NAME `
        --query id `
        --output tsv)

        # Wait for extension to fully install before proceeding
        az resource wait --ids $EXTENSION_ID --custom "properties.provisioningState!='Pending'" --api-version "2020-07-01-preview"
        
        $CONNECTED_CLUSTER_ID=$(az connectedk8s show --resource-group $ArcResourceGroupName --name $CLUSTER_NAME --query id --output tsv)
        az customlocation create `
        --resource-group $ArcResourceGroupName `
        --name $CUSTOM_LOCATION_NAME `
        --host-resource-id $CONNECTED_CLUSTER_ID `
        --namespace $NAMESPACE `
        --cluster-extension-ids $EXTENSION_ID    

        # DEBUG: Test custom location creation
        if ($Debug) {
            Write-Debug az customlocation show --resource-group $ArcResourceGroupName --name $CUSTOM_LOCATION_NAME
        }

        # Save id property of the custom location for later
        $CUSTOM_LOCATION_ID=$(az customlocation show `
        --resource-group $ArcResourceGroupName `
        --name $CUSTOM_LOCATION_NAME `
        --query id `
        --output tsv)

        # Create container Apps connected environment
        az containerapp connected-env create `
        --resource-group $ArcResourceGroupName `
        --name $CONNECTED_ENVIRONMENT_NAME `
        --custom-location $CUSTOM_LOCATION_ID `
        --location eastus

        # DEBUG: validate that the connected environment is successfully created
        if ($Debug) {
            Write-Debug az containerapp connected-env show --resource-group $ArcResourceGroupName --name $CONNECTED_ENVIRONMENT_NAME
        }

        # Create a new resource group for the container app
        $myResourceGroup="${imageName}-resource-group"
        az group create --name $myResourceGroup --location eastus

        # Get the custom location id
        $customLocationId=$(az customlocation show --resource-group $ArcResourceGroupName --name $CUSTOM_LOCATION_NAME --query id --output tsv)
        
        # Get info about the connected environment
        $myContainerApp="${imageName}-container-app"
        $myConnectedEnvironment=$(az containerapp connected-env list --custom-location $customLocationId -o tsv --query '[].id')

        # create acr and group
        az group create --name $ArcResourceGroupName --location eastus
        az acr create --resource-group $ArcResourceGroupName --name $ACRName --sku Basic

        # Wait for the ACR to be created
        Start-Sleep -Seconds 10   

        # login to acr and get login server
        az acr login --name $ACRName
        $ACRLoginServer = $(az acr show --name $ACRName --query loginServer --output tsv)

        # DEBUG: Test ACR login
        if ($Debug) {
            Write-Debug az acr show --name $ACRName
            Write-Debug az acr repository list --name $ACRName --output table
        }

        # Build and push docker image
        cd .\DemoApp
        docker build -t ${imageName} .
        docker tag ${imageName} ${ACRLoginServer}/${imageName}:latest
        docker push ${ACRLoginServer}/${imageName}:latest
        cd ..

        # Enable admin user in ACR and get password
        az acr update -n $ACRName --admin-enabled true
        $password = $(az acr credential show --name ${ACRName} --query passwords[0].value --output tsv)

        # Create container app
        az containerapp create `
        --resource-group $myResourceGroup `
        --name $myContainerApp `
        --environment $myConnectedEnvironment `
        --environment-type connected `
        --registry-server ${ACRLoginServer} `
        --registry-username ${ACRName} `
        --registry-password $password `
        --image "${ACRLoginServer}/${imageName}:latest" `
        --target-port 80 `
        --ingress 'external' `
        
        # Open the container app in a browser
        az containerapp browse --resource-group $myResourceGroup --name $myContainerApp
    }
    catch {
        # Catch any error
        Write-Error "An error occurred"
        Write-Error $Error[0]
    }  
}

CreateContainerAppOnArcEnabledAksEz -AKSClusterResourceGroupName "my-aks-cluster-group" `
                                    -location "westus" `
                                    -AKSName "my-aks-cluster"`
                                    -edgeZone "losangeles" `
                                    -nodeCount 2 `
                                    -vmSize "standard_nv12ads_a10_v5" `
                                    -ArcResourceGroupName "myArcResourceGroup" `
                                    -CONNECTED_ENVIRONMENT_NAME "myConnectedEnvironment" `
                                    -CUSTOM_LOCATION_NAME "myCustomLocation" `
                                    -SubscriptionId "<your subscription>"`
                                    -ACRName "containerappezacr" `
                                    -imageName "myimage"