parameters:
  - name: PYTHON_VER
    displayName: 'Python Version'
    type: string
    default: "3.10"
    values:
      - "2.7"
      - "3.6"
      - "3.8"
      - "3.9"
      - "3.10"
      - "3.11"
  - name: ANSIBLE_VER
    displayName: 'Ansible Version'
    type: string
    default: "2.17"
    values:
      - "2.9"
      - "2.10"
      - "2.11"
      - "2.12"
      - "2.13"
      - "2.14"
      - "2.15"
      - "2.16" # End Of Life May 2025 https://docs.ansible.com/ansible/latest/reference_appendices/release_and_maintenance.html#ansible-core-support-matrix
      - "2.17"
      - "2.18"
      - "devel"
  - name: MODULE_NAME
    displayName: 'Test Module'
    type: string
    default: 'all'
    values:
      - 'all'
      - 'sanity'
      - 'azure_rm_adapplication'
      - "azure_rm_acs"
      - "azure_rm_adgroup"
      - "azure_rm_aduser"
      - "azure_rm_afdendpoint"
      - "azure_rm_aks"
      - "azure_rm_aksagentpool"
      - "azure_rm_apimanagement"
      - "azure_rm_appgateway"
      - "azure_rm_appserviceplan"
      - "azure_rm_automationaccount"
      - "azure_rm_automationrunbook"
      - "azure_rm_autoscale"
      - "azure_rm_availabilityset"
      - "azure_rm_azurefirewall"
      - "azure_rm_apimanagementservice"
      - "azure_rm_batchaccount"
      - "azure_rm_backuppolicy"
      - "azure_rm_capacityreservationgroup"
      - "azure_rm_cdnprofile"
      - "azure_rm_containerinstance"
      - "azure_rm_containerregistry"
      - "azure_rm_containerregistrytag"
      - "azure_rm_cosmosdbaccount"
      - "azure_rm_ddosprotectionplan"
      - "azure_rm_deployment"
      - "azure_rm_diskencryptionset"
      - "azure_rm_dnsrecordset"
      - "azure_rm_dnszone"
      - "azure_rm_eventhub"
      - "azure_rm_expressroute"
      - "azure_rm_firewallpolicy"
      - "azure_rm_functionapp"
      - "azure_rm_gallery"
      - "azure_rm_hdinsightcluster"
      - "azure_rm_hostgroup"
      - "azure_rm_image"
      - "azure_rm_iothub"
      - "azure_rm_ipgroup"
      - "azure_rm_keyvault"
      - "azure_rm_keyvaultkey"
      - "azure_rm_keyvaultsecret"
      - "azure_rm_keyvaultcertificate"
      - "azure_rm_loadbalancer"
      - "azure_rm_loganalyticsworkspace"
      - "azure_rm_localnetworkgateway"
      - "azure_rm_manageddisk"
      - "azure_rm_managementgroup"
      - "azure_rm_mariadbserver"
      - "azure_rm_monitordiagnosticsetting"
      - "azure_rm_monitorlogprofile"
      - "azure_rm_multiplemanageddisks"
      - "azure_rm_mysqlserver"
      - "azure_rm_mysqlflexibleserver"
      - "azure_rm_natgateway"
      - "azure_rm_networkinterface"
      - "azure_rm_notificationhub"
      - "azure_rm_openshiftmanagedcluster"
      - "azure_rm_postgresqlserver"
      - "azure_rm_postgresqlflexibleserver"
      - "azure_rm_privatednsrecordset"
      - "azure_rm_privatednszone"
      - "azure_rm_privateendpoint"
      - "azure_rm_privateendpointdnszonegroup"
      - "azure_rm_privatelinkservice"
      - "azure_rm_privatednszonelink"
      - "azure_rm_publicipaddress"
      - "azure_rm_publicipprefix"
      - "azure_rm_proximityplacementgroup"
      - "azure_rm_rediscache"
      - "azure_rm_resource"
      - "azure_rm_resourcegroup"
      - "azure_rm_routetable"
      - "azure_rm_roleassignment"
      - "azure_rm_roledefinition"
      - "azure_rm_registrationassignment"
      - "azure_rm_registrationdefinition"
      - "azure_rm_cognitivesearch"
      - "azure_rm_securitygroup"
      - "azure_rm_servicebus"
      - "azure_rm_sqlserver"
      - "azure_rm_storageaccount"
      - "azure_rm_storageaccountmanagementpolicy"
      - "azure_rm_storageblob"
      - "azure_rm_storageshare"
      - "azure_rm_subnet"
      - "azure_rm_subscription"
      - "azure_rm_trafficmanagerprofile"
      - "azure_rm_virtualmachine"
      - "azure_rm_virtualmachineextension"
      - "azure_rm_virtualmachineimage_info"
      - "azure_rm_virtualmachinescaleset"
      - "azure_rm_virtualmachinesize_info"
      - "azure_rm_virtualnetwork"
      - "azure_rm_virtualnetworkgateway"
      - "azure_rm_virtualnetworkpeering"
      - "azure_rm_virtualnetworkgatewaynatrule"
      - "azure_rm_virtualwan"
      - "azure_rm_vpnsite"
      - "azure_rm_virtualhub"
      - "azure_rm_virtualhubconnection"
      - "azure_rm_virtualnetworkgatewayconnection"
      - "azure_rm_backupazurevm"
      - "azure_rm_recoveryservicesvault"
      - "azure_rm_vmbackuppolicy"
      - "azure_rm_webapp"
      - "azure_rm_webappvnetconnection"
      - "azure_rm_webappaccessrestriction"
      - "azure_rm_workspace"
      - "azure_rm_datafactory"
      - "azure_rm_bastionhost"
      - "azure_rm_devtestlab"
      - "azure_rm_sqlmanagedinstance"
      - "azure_rm_sqlmidatabase"
      - "azure_rm_sqlmidblongtermretentionpolicy"
      - "azure_rm_sqlmidbshorttermretentionpolicy"
      - "azure_rm_vmssnetworkinterface_info"
      - "azure_rm_sshpublickey"
      - "azure_rm_snapshot"
      - "azure_rm_networkwatcher"
      - "azure_rm_batchaccountapplication"
      - "azure_rm_batchaccountapplicationpackage"
      - "azure_rm_batchaccountpool"
      - "azure_rm_applicationfirewallpolicy"
      - "azure_rm_applicationfirewallpolicy_info"
      - "azure_rm_diskaccess"
      - "azure_rm_diskaccess_info"
      - "azure_rm_resourcehealthstates"
      - "azure_rm_afdroute"
      - "azure_rm_afdorigingroup"
      - "azure_rm_afdorigin"
      - "azure_rm_afdruleset"
      - "azure_rm_afdrules"
      - "inventory_azure"
      - "setup_azure"

trigger: none

pr:
  - dev

pool:
  name: pool-ubuntu-2004

jobs:
  - job: CreateResourceGroups
    steps:
      - bash: |
          echo "##vso[task.setvariable variable=resource_group;isOutput=true]ansibletest-$(uuidgen)"
          echo "##vso[task.setvariable variable=resource_group_secondary;isOutput=true]ansibletest2-$(uuidgen)"
          echo "##vso[task.setvariable variable=resource_group_third;isOutput=true]ansibletest3-$(uuidgen)"
          echo "##vso[task.setvariable variable=resource_group_datalake;isOutput=true]ansibletest-$(uuidgen)"

        name: setvar
      - bash: |
          echo "Generate test resource group $(setvar.resource_group), $(setvar.resource_group_secondary), $(setvar.resoruce_group_third), $(setvar.resource_group_datalake)"
      - task: AzureCLI@2
        inputs:
          azureSubscription: '$(SUBSCRIPTION_FULL_NAME)'
          scriptType: 'bash'
          scriptLocation: 'inlineScript'
          inlineScript: |
              az group create -l eastus -n $(setvar.resource_group)
              az group create -l eastus -n $(setvar.resource_group_secondary)
              az group create -l westus2 -n $(setvar.resource_group_third)
              az group create -l eastus2 -n $(setvar.resource_group_datalake)

  - job: RunTests
    dependsOn: CreateResourceGroups
    timeoutInMinutes: 180
    variables:
      TEST_RESOURCE_GROUP: $[ dependencies.CreateResourceGroups.outputs['setvar.resource_group'] ]
      TEST_RESOURCE_GROUP_SECONDARY: $[ dependencies.CreateResourceGroups.outputs['setvar.resource_group_secondary'] ]
      TEST_RESOURCE_GROUP_THIRD: $[ dependencies.CreateResourceGroups.outputs['setvar.resource_group_third'] ]
      TEST_RESOURCE_GROUP_DATALAKE: $[ dependencies.CreateResourceGroups.outputs['setvar.resource_group_datalake'] ]
    strategy:
      matrix:
        "Python${{ parameters.PYTHON_VER }}_sanity":
          python.version: '${{ parameters.PYTHON_VER }}'
          test.key: 'sanity'
        "Python${{ parameters.PYTHON_VER }}_1":
          python.version: '${{ parameters.PYTHON_VER }}'
          test.key: '1'
        "Python${{ parameters.PYTHON_VER }}_2":
          python.version: '${{ parameters.PYTHON_VER }}'
          test.key: '2'
        "Python${{ parameters.PYTHON_VER }}_3":
          python.version: '${{ parameters.PYTHON_VER }}'
          test.key: '3'
        "Python${{ parameters.PYTHON_VER }}_4":
          python.version: '${{ parameters.PYTHON_VER }}'
          test.key: '4'
        "Python${{ parameters.PYTHON_VER }}_5":
          python.version: '${{ parameters.PYTHON_VER }}'
          test.key: '5'
        "Python${{ parameters.PYTHON_VER }}_6":
          python.version: '${{ parameters.PYTHON_VER }}'
          test.key: '6'
        "Python${{ parameters.PYTHON_VER }}_7":
          python.version: '${{ parameters.PYTHON_VER }}'
          test.key: '7'
        "Python${{ parameters.PYTHON_VER }}_9":
          python.version: '${{ parameters.PYTHON_VER }}'
          test.key: '9'
        "Python${{ parameters.PYTHON_VER }}_10":
          python.version: '${{ parameters.PYTHON_VER }}'
          test.key: '10'
        "Python${{ parameters.PYTHON_VER }}_11":
          python.version: '${{ parameters.PYTHON_VER }}'
          test.key: '11'
        "Python${{ parameters.PYTHON_VER }}_12":
          python.version: '${{ parameters.PYTHON_VER }}'
          test.key: '12'
        "Python${{ parameters.PYTHON_VER }}_13":
          python.version: '${{ parameters.PYTHON_VER }}'
          test.key: '13'
        "Python${{ parameters.PYTHON_VER }}_14":
          python.version: '${{ parameters.PYTHON_VER }}'
          test.key: '14'
        "Python${{ parameters.PYTHON_VER }}_15":
          python.version: '${{ parameters.PYTHON_VER }}'
          test.key: '15'

    steps:
      - task: UsePythonVersion@0
        displayName: 'Use Python $(python.version)'
        inputs:
          versionSpec: '$(python.version)'

      - script: tests/utils/ado/ado.sh $(test.key) ${{ parameters.PYTHON_VER }} ${{ parameters.ANSIBLE_VER }} ${{ parameters.MODULE_NAME }}
        env:
          SHIPPABLE_BUILD_DIR: $(Build.Repository.LocalPath)
          AZURE_CLIENT_ID: $(AZURE_CLIENT_ID)
          AZURE_SECRET: $(AZURE_SECRET)
          AZURE_SUBSCRIPTION_ID: $(AZURE_SUBSCRIPTION_ID)
          AZURE_SUBSCRIPTION_SEC_ID: $(AZURE_SUBSCRIPTION_SEC_ID)
          AZURE_TENANT: $(AZURE_TENANT)
          AZURE_PRINCIPAL_ID: $(AZURE_PRINCIPAL_ID)
          AZURE_MANAGED_BY_TENANT_ID: $(AZURE_MANAGED_BY_TENANT_ID)
          AZURE_ROLE_DEFINITION_ID: $(AZURE_ROLE_DEFINITION_ID)
          RESOURCE_GROUP: $(TEST_RESOURCE_GROUP)
          RESOURCE_GROUP_SECONDARY: $(TEST_RESOURCE_GROUP_SECONDARY)
          RESOURCE_GROUP_THIRD: $(TEST_RESOURCE_GROUP_THIRD)
          RESOURCE_GROUP_DATALAKE: $(TEST_RESOURCE_GROUP_DATALAKE)
        displayName: 'Running Tests'

  - job: CleanupResourceGroups
    dependsOn:
      - CreateResourceGroups
      - RunTests
    condition: always()
    variables:
      TEST_RESOURCE_GROUP: $[ dependencies.CreateResourceGroups.outputs['setvar.resource_group'] ]
      TEST_RESOURCE_GROUP_SECONDARY: $[ dependencies.CreateResourceGroups.outputs['setvar.resource_group_secondary'] ]
      TEST_RESOURCE_GROUP_THIRD: $[ dependencies.CreateResourceGroups.outputs['setvar.resource_group_third'] ]
      TEST_RESOURCE_GROUP_DATALAKE: $[ dependencies.CreateResourceGroups.outputs['setvar.resource_group_datalake'] ]
    steps:
      - task: AzureCLI@2
        inputs:
          azureSubscription: '$(SUBSCRIPTION_FULL_NAME)'
          scriptType: 'bash'
          scriptLocation: 'inlineScript'
          inlineScript: |
              az group delete -n $(TEST_RESOURCE_GROUP) --yes --no-wait
              az group delete -n $(TEST_RESOURCE_GROUP_SECONDARY) --yes --no-wait
              az group delete -n $(TEST_RESOURCE_GROUP_THIRD) --yes --no-wait
              az group delete -n $(TEST_RESOURCE_GROUP_DATALAKE) --yes --no-wait
