Tutorial: Configuración de laboratorios en Azure DevTest Labs mediante Ansible

Importante

Se requiere Ansible 2.8 (o posterior) para ejecutar los cuadernos de estrategias de ejemplo de este artículo.

Azure DevTest Labs permite a los desarrolladores automatizar la creación de entornos de máquina virtual para sus aplicaciones. Estos entornos se pueden configurar para el desarrollo, las pruebas y el entrenamiento de aplicaciones.

En este artículo aprenderá a:

  • Creación de un laboratorio
  • Establecimiento de las directivas de laboratorio
  • Establecimiento de las programaciones de laboratorio
  • Creación de la red virtual del laboratorio
  • Defina una fuente de artefactos para el laboratorio
  • Creación de una máquina virtual en el laboratorio
  • Lista de las fuentes de artefactos y artefactos del laboratorio
  • Obtención de información de Azure Resource Manager para los orígenes de artefactos
  • Creación del entorno de laboratorio
  • Creación de la imagen de laboratorio
  • Eliminación del laboratorio

Prerrequisitos

  • Suscripción de Azure: si no tiene una suscripción de Azure, cree una cuenta gratuita antes de comenzar.

Creación de un grupo de recursos

El fragmento de código del playbook de ejemplo crea un grupo de recursos de Azure. Un grupo de recursos es un contenedor lógico en el que se implementan y se administran los recursos de Azure.

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

Creación del laboratorio

La siguiente tarea crea el laboratorio de muestra.

- 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

Establecimiento de las directivas de laboratorio

Puede configurar las directivas de laboratorio. Se pueden establecer los siguientes valores:

  • user_owned_lab_vm_count es el número de máquinas virtuales que un usuario puede poseer.
  • user_owned_lab_premium_vm_count es el número de máquinas virtuales premium que un usuario puede poseer.
  • lab_vm_count es el número máximo de máquinas virtuales de laboratorio.
  • lab_premium_vm_count es el número máximo de máquinas virtuales premium de laboratorio
  • lab_vm_size es el tamaño permitido de las máquinas virtuales del laboratorio.
  • gallery_image son las imágenes permitidas de la galería.
  • user_owned_lab_vm_count_in_subnet es el número máximo de máquinas virtuales del usuario en una subred.
  • lab_target_cost es el costo objetivo del laboratorio.
- 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

Establecimiento de las programaciones de laboratorio

La tarea de ejemplo de esta sección configura la programación del laboratorio.

En el siguiente fragmento de código, el lab_vms_startup valor se usa para especificar el tiempo de inicio de la máquina virtual. Del mismo modo, al establecer el lab_vms_shutdown valor se establece el tiempo de apagado de la máquina virtual del laboratorio.

- 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

Creación de la red virtual del laboratorio

Esta tarea siguiente crea la red virtual de laboratorio predeterminada.

- 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

Definición de un origen de artefacto para el laboratorio

Un origen de artefactos es un repositorio de GitHub estructurado correctamente que contiene la definición de artefactos y las plantillas de Azure Resource Manager. Cada laboratorio incluye artefactos públicos predefinidos. Las siguientes tareas muestran cómo crear una fuente de artefacto para un laboratorio.

- 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 }}"

Creación de una máquina virtual en el laboratorio

Cree una máquina virtual en el laboratorio.

- 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"

Enumeración de los orígenes y artefactos del laboratorio

Para enumerar todos los orígenes de artefactos predeterminados y personalizados del laboratorio, use la siguiente tarea:

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

En la tarea siguiente se enumeran todos los artefactos:

- 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

Obtención de información de Azure Resource Manager para los orígenes de artefactos

Para enumerar todas las plantillas de Azure Resource Manager en public environment repository, el repositorio predefinido con plantillas:

- 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

Y la siguiente tarea recupera los detalles de una plantilla específica de Azure Resource Manager del repositorio:

- 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

Creación del entorno de laboratorio

La siguiente tarea crea el entorno de laboratorio basado en una de las plantillas del repositorio de entorno público.

- 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

Creación de la imagen de laboratorio

La siguiente tarea crea una imagen a partir de una máquina virtual. La imagen permite crear máquinas virtuales idénticas.

- 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

Eliminación del laboratorio

Para eliminar el laboratorio, use la siguiente tarea:

- 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

Consigue la guía de ejemplo

Hay dos maneras de obtener el cuaderno de estrategias de ejemplo completo:

---
- 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

Ejecución del cuaderno de estrategias

En esta sección, ejecute el cuaderno de estrategias para probar varias características que se muestran en este artículo.

Antes de ejecutar el cuaderno de estrategias, realice los siguientes cambios:

  • En la vars sección, reemplace el {{ resource_group_name }} marcador de posición por el nombre del grupo de recursos.
  • Almacene el token de GitHub como una variable de entorno denominada GITHUB_ACCESS_TOKEN.

Ejecutar el playbook utilizando ansible-playbook

ansible-playbook devtestlab-create.yml

Limpieza de recursos

  1. Guarde el código siguiente como delete_rg.yml.

    ---
    - hosts: localhost
      tasks:
        - name: Deleting resource group - "{{ name }}"
          azure_rm_resourcegroup:
            name: "{{ name }}"
            state: absent
          register: rg
        - debug:
            var: rg
    
  2. Ejecute el cuaderno de estrategias mediante el comando ansible-playbook . Reemplace el marcador de posición por el nombre del grupo de recursos que se va a eliminar. Se eliminarán todos los recursos del grupo de recursos.

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

    Puntos clave:

    • Debido a la variable register y la sección debug del manual de operaciones, los resultados se muestran cuando finaliza el comando.

Pasos siguientes