Zelfstudie: Labs configureren in Azure DevTest Labs met ansible

Belangrijk

Ansible 2.8 (of hoger) is vereist om de voorbeeldplaybooks in dit artikel uit te voeren.

Met Azure DevTest Labs kunnen ontwikkelaars het maken van VM-omgevingen voor hun apps automatiseren. Deze omgevingen kunnen worden geconfigureerd voor het ontwikkelen, testen en trainen van apps.

In dit artikel leert u het volgende:

  • Een lab maken
  • Het labbeleid instellen
  • De labplanningen instellen
  • Het virtuele labnetwerk maken
  • Een artefactbron voor het lab definiëren
  • Een VIRTUELE machine maken in het lab
  • De artefactbronnen en artefacten van het lab weergeven
  • Informatie over Azure Resource Manager ophalen voor de artefactbronnen
  • De testomgeving maken
  • De labafbeelding creëren
  • Het lab verwijderen

Vereiste voorwaarden

  • Azure-abonnement: als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.

Resourcegroep aanmaken

Met het voorbeeldplaybookfragment wordt een Azure-resourcegroep gemaakt. Een resourcegroep is een logische container waarin Azure-resources worden geïmplementeerd en beheerd.

  - name: Create a resource group
    azure_rm_resourcegroup:
      name: "{{ resource_group }}"
      location: "{{ location }}"

Het lab maken

Met de volgende taak wordt het voorbeeldlab gemaakt.

- name: Create the lab
  azure_rm_devtestlab:
    resource_group: "{{ resource_group }}"
    name: "{{ lab_name }}"
    location: "{{ location }}"
    storage_type: standard
    premium_data_disks: no
  register: output_lab

Het labbeleid instellen

U kunt instellingen voor labbeleid instellen. De volgende waarden kunnen worden ingesteld:

  • user_owned_lab_vm_count is het aantal virtuele machines waarvan een gebruiker eigenaar kan zijn
  • user_owned_lab_premium_vm_count is het aantal premium-VM's waarvan een gebruiker eigenaar kan zijn
  • lab_vm_count is het maximum aantal lab-VM's
  • lab_premium_vm_count is het maximum aantal lab-premium-VM's
  • lab_vm_size is de toegestane grootte(en) van lab-VM's
  • gallery_image is de toegestane galerieafbeelding(en)
  • user_owned_lab_vm_count_in_subnet is het maximum aantal vm's van een gebruiker in een subnet
  • lab_target_cost is de streefkosten van het lab
- name: Set the lab policies
  azure_rm_devtestlabpolicy:
    resource_group: "{{ resource_group }}"
    lab_name: "{{ lab_name }}"
    policy_set_name: myDtlPolicySet
    name: myDtlPolicy
    fact_name: user_owned_lab_vm_count
    threshold: 5

De labplanningen instellen

Met de voorbeeldtaak in deze sectie wordt het labschema geconfigureerd.

In het volgende codefragment wordt de lab_vms_startup waarde gebruikt om de opstarttijd van de VIRTUELE machine op te geven. Op dezelfde manier bepaalt het instellen van de waarde de afsluittijd van de lab_vms_shutdown VM van het lab.

- name: Set the lab schedule
  azure_rm_devtestlabschedule:
    resource_group: "{{ resource_group }}"
    lab_name: "{{ lab_name }}"
    name: lab_vms_shutdown
    time: "1030"
    time_zone_id: "UTC+12"
  register: output

Het virtuele labnetwerk maken

Met deze volgende taak maakt u het virtuele standaardnetwerk van het lab.

- name: Create the lab virtual network
  azure_rm_devtestlabvirtualnetwork:
    resource_group: "{{ resource_group }}"
    lab_name: "{{ lab_name }}"
    name: "{{ vn_name }}"
    location: "{{ location }}"
    description: My lab virtual network
  register: output

Een artefactbron voor het lab definiëren

Een artefactbron is een correct gestructureerde GitHub-opslagplaats die artefactdefinitie en Azure Resource Manager-sjablonen bevat. Elk lab wordt geleverd met vooraf gedefinieerde openbare artefacten. In de volgende taken ziet u hoe u een artefactbron voor een lab maakt.

- name: Define the lab artifacts source
  azure_rm_devtestlabartifactsource:
    resource_group: "{{ resource_group }}"
    lab_name: "{{ lab_name }}"
    name: "{{ artifacts_name }}"
    uri: https://github.com/Azure/azure_preview_modules.git
    source_type: github
    folder_path: /tasks
    security_token: "{{ github_token }}"

Een VIRTUELE machine maken in het lab

Maak een VIRTUELE machine in het lab.

- name: Create a VM within the lab
  azure_rm_devtestlabvirtualmachine:
    resource_group: "{{ resource_group }}"
    lab_name: "{{ lab_name }}"
    name: "{{ vm_name }}"
    notes: Virtual machine notes, just something....
    os_type: linux
    vm_size: Standard_A2_v2
    user_name: dtladmin
    password: ZSasfovobocu$$21!
    lab_subnet:
      virtual_network_name: "{{ vn_name }}"
      name: "{{ vn_name }}Subnet"
    disallow_public_ip_address: no
    image:
      offer: UbuntuServer
      publisher: Canonical
      sku: 16.04-LTS
      os_type: Linux
      version: latest
    artifacts:
      - source_name: "{{ artifacts_name }}"
        source_path: "/Artifacts/linux-install-mongodb"
    allow_claim: no
    expiration_date: "2029-02-22T01:49:12.117974Z"

De artefactbronnen en artefacten van het lab weergeven

Als u alle standaard- en aangepaste artefactbronnen in het lab wilt weergeven, gebruikt u de volgende taak:

- name: List the artifact sources
  azure_rm_devtestlabartifactsource_facts:
    resource_group: "{{ resource_group }}"
    lab_name: "{{ lab_name }}"
  register: output
- debug:
    var: output

De volgende taak bevat alle artefacten:

- name: List the artifact facts
  azure_rm_devtestlabartifact_facts:
    resource_group: "{{ resource_group }}"
    lab_name: "{{ lab_name }}"
    artifact_source_name: public repo
  register: output
- debug:
    var: output

Informatie over Azure Resource Manager ophalen voor de artefactbronnen

Als u alle Azure Resource Manager-sjablonen in public environment repositoryde vooraf gedefinieerde opslagplaats met sjablonen wilt weergeven:

- name: List the Azure Resource Manager template facts
  azure_rm_devtestlabartifactsource_facts:
    resource_group: "{{ resource_group }}"
    lab_name: "{{ lab_name }}"
  register: output
- debug:
    var: output

En met de volgende taak worden details opgehaald van een specifieke Azure Resource Manager-sjabloon uit de opslagplaats:

- name: Get Azure Resource Manager template facts
  azure_rm_devtestlabarmtemplate_facts:
    resource_group: "{{ resource_group }}"
    lab_name: "{{ lab_name }}"
    artifact_source_name: "public environment repo"
    name: ServiceFabric-LabCluster
  register: output
- debug:
    var: output

De testomgeving maken

Met de volgende taak maakt u de testomgeving op basis van een van de sjablonen uit de opslagplaats voor openbare omgevingen.

- name: Create the lab environment
      azure_rm_devtestlabenvironment:
        resource_group: "{{ resource_group }}"
        lab_name: "{{ lab_name }}"
        user_name: "@me"
        name: myEnvironment
        location: eastus
        deployment_template: "{{ output_lab.id }}/artifactSources/public environment repo/armTemplates/WebApp"
      register: output

De labafbeelding creëren

Met de volgende taak maakt u een image van een virtuele machine. Het image stelt je in staat om identieke VM's te maken.

- name: Create the lab image
  azure_rm_devtestlabcustomimage:
    resource_group: "{{ resource_group }}"
    lab_name: "{{ lab_name }}"
    name: myImage
    source_vm: "{{ output_vm.virtualmachines[0]['name'] }}"
    linux_os_state: non_deprovisioned

Het lab verwijderen

Gebruik de volgende taak om het lab te verwijderen:

- name: Delete the lab
  azure_rm_devtestlab:
    resource_group: "{{ resource_group }}"
    name: "{{ lab_name }}"
    state: absent
  register: output
- name: Assert the change was correctly reported
  assert:
    that:
      - output.changed

Het voorbeeldplaybook ophalen

Er zijn twee manieren om het volledige voorbeeldplaybook op te halen:

  • Download het playbook en sla het op in devtestlab-create.yml.
  • Maak een nieuw bestand met de naam devtestlab-create.yml en kopieer de volgende inhoud naar het bestand:
---
- hosts: localhost
  #roles:
  #  - azure.azure_preview_modules
  vars:
    resource_group: "{{ resource_group_name }}"
    lab_name: myLab
    vn_name: myLabVirtualNetwork
    vm_name: myLabVm
    artifacts_name: myArtifacts
    github_token: "{{ lookup('env','GITHUB_ACCESS_TOKEN') }}"
    location: eastus
  tasks:
    - name: Create a resource group
      azure_rm_resourcegroup:
        name: "{{ resource_group }}"
        location: "{{ location }}"

    - name: Create the lab
      azure_rm_devtestlab:
        resource_group: "{{ resource_group }}"
        name: "{{ lab_name }}"
        location: eastus
        storage_type: standard
        premium_data_disks: no
      register: output_lab

    - name: Set the lab policies
      azure_rm_devtestlabpolicy:
        resource_group: "{{ resource_group }}"
        lab_name: "{{ lab_name }}"
        policy_set_name: myDtlPolicySet
        name: myDtlPolicy
        fact_name: user_owned_lab_vm_count
        threshold: 5

    - name: Set the lab schedule
      azure_rm_devtestlabschedule:
        resource_group: "{{ resource_group }}"
        lab_name: "{{ lab_name }}"
        name: lab_vms_shutdown
        time: "1030"
        time_zone_id: "UTC+12"
      register: output

    - name: Create the lab virtual network
      azure_rm_devtestlabvirtualnetwork:
        resource_group: "{{ resource_group }}"
        lab_name: "{{ lab_name }}"
        name: "{{ vn_name }}"
        location: eastus
        description: My lab virtual network
      register: output

    - name: Define the lab artifacts source
      azure_rm_devtestlabartifactsource:
        resource_group: "{{ resource_group }}"
        lab_name: "{{ lab_name }}"
        name: "{{ artifacts_name }}"
        uri: https://github.com/Azure/azure_preview_modules.git
        source_type: github
        folder_path: /tasks
        security_token: "{{ github_token }}"

    - name:
      set_fact:
        artifact_source:
          - source_name: "{{ artifacts_name }}"
            source_path: "/Artifacts/linux-install-mongodb"
      when: "github_token | length > 0"

    - name:
      set_fact:
        artifact_source: null
      when: "github_token | length == 0"

    - name: Create a VM within the lab
      azure_rm_devtestlabvirtualmachine:
        resource_group: "{{ resource_group }}"
        lab_name: "{{ lab_name }}"
        name: "{{ vm_name }}"
        notes: Virtual machine notes, just something....
        os_type: linux
        vm_size: Standard_A2_v2
        user_name: dtladmin
        password: ZSasfovobocu$$21!
        lab_subnet:
          virtual_network_name: "{{ vn_name }}"
          name: "{{ vn_name }}Subnet"
        disallow_public_ip_address: no
        image:
          offer: UbuntuServer
          publisher: Canonical
          sku: 16.04-LTS
          os_type: Linux
          version: latest
        artifacts:
          - source_name: "{{ artifacts_name }}"
            source_path: "/Artifacts/linux-install-mongodb"
        allow_claim: no
        expiration_date: "2029-02-22T01:49:12.117974Z"

    - name: List the artifact sources
      azure_rm_devtestlabartifactsource_facts:
        resource_group: "{{ resource_group }}"
        lab_name: "{{ lab_name }}"
      register: output
    - debug:
        var: output

    - name: List the artifact facts
      azure_rm_devtestlabartifact_facts:
        resource_group: "{{ resource_group }}"
        lab_name: "{{ lab_name }}"
        artifact_source_name: public repo
      register: output
    - debug:
        var: output

    - name: List the Azure Resource Manager template facts
      azure_rm_devtestlabarmtemplate_facts:
        resource_group: "{{ resource_group }}"
        lab_name: "{{ lab_name }}"
        artifact_source_name: "public environment repo"
      register: output
    - debug:
        var: output

    - name: Get Azure Resource Manager template facts
      azure_rm_devtestlabarmtemplate_facts:
        resource_group: "{{ resource_group }}"
        lab_name: "{{ lab_name }}"
        artifact_source_name: "public environment repo"
        name: ServiceFabric-LabCluster
      register: output
    - debug:
        var: output

    - name: Create the lab environment
      azure_rm_devtestlabenvironment:
        resource_group: "{{ resource_group }}"
        lab_name: "{{ lab_name }}"
        user_name: "@me"
        name: myEnvironment
        location: eastus
        deployment_template: "{{ output_lab.id }}/artifactSources/public environment repo/armTemplates/WebApp"

    - name: Create the lab image
      azure_rm_devtestlabcustomimage:
        resource_group: "{{ resource_group }}"
        lab_name: "{{ lab_name }}"
        name: myImage
        source_vm: "{{ vm_name }}"
        linux_os_state: non_deprovisioned

    - name: Delete the lab
      azure_rm_devtestlab:
        resource_group: "{{ resource_group }}"
        name: "{{ lab_name }}"
        state: absent

Het draaiboek uitvoeren

Voer in deze sectie het playbook uit om verschillende functies te testen die in dit artikel worden weergegeven.

Voordat u het playbook uitvoert, moet u de volgende wijzigingen aanbrengen:

  • Vervang in de vars sectie de {{ resource_group_name }} tijdelijke aanduiding door de naam van uw resourcegroep.
  • Sla het GitHub-token op als een omgevingsvariabele met de naam GITHUB_ACCESS_TOKEN.

Het playbook uitvoeren met ansible-playbook

ansible-playbook devtestlab-create.yml

De hulpbronnen opschonen

  1. Sla de volgende code op als delete_rg.yml.

    ---
    - hosts: localhost
      tasks:
        - name: Deleting resource group - "{{ name }}"
          azure_rm_resourcegroup:
            name: "{{ name }}"
            state: absent
          register: rg
        - debug:
            var: rg
    
  2. Voer het playbook uit met behulp van de ansible-playbook-opdracht . Vervang de tijdelijke aanduiding door de naam van de resourcegroep die u wilt verwijderen. Alle resources in de resourcegroep worden verwijderd.

    ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"
    

    Belangrijkste punten:

    • Vanwege de register variabele en debug sectie van het playbook worden de resultaten weergegeven wanneer de opdracht is voltooid.

Volgende stappen