Tutorial: Mengonfigurasi lab di Azure DevTest Labs menggunakan Ansible

Penting

Ansible 2.8 (atau yang lebih baru) diperlukan untuk menjalankan contoh playbook dalam artikel ini.

Azure DevTest Labs memungkinkan pengembang mengotomatiskan pembuatan lingkungan VM untuk aplikasi mereka. Lingkungan ini dapat dikonfigurasi untuk pengembangan, pengujian, dan pelatihan aplikasi.

Dalam artikel ini, Anda akan mempelajari cara:

  • Membuat laboratorium
  • Mengatur kebijakan lab
  • Mengatur jadwal lab
  • Membuat jaringan virtual lab
  • Menentukan sumber artefak untuk lab
  • Membuat VM di dalam lab
  • Daftarkan sumber artefak dan artefak lab.
  • Mendapatkan informasi Azure Resource Manager untuk sumber artefak
  • Membuat lingkungan lab
  • Membuat gambar lab
  • Menghapus lab

Prasyarat

  • Langganan Azure: Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum memulai.
  • Perwakilan layanan Azure: Buat perwakilan layanan, catat nilai berikut: appId, displayName, kata sandi, dan penyewa.

Buat grup sumber daya

Cuplikan contoh playbook membuat kelompok sumber daya Azure. Grup sumber daya adalah kontainer logis tempat sumber daya Azure disebarkan dan dikelola.

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

Membuat laboratorium

Tugas berikutnya membuat lab sampel.

- 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

Mengatur kebijakan lab

Anda dapat menyiapkan pengaturan kebijakan lab. Nilai berikut dapat diatur:

  • user_owned_lab_vm_count adalah jumlah VM yang dapat dimiliki pengguna
  • user_owned_lab_premium_vm_count adalah jumlah VM premium yang dapat dimiliki pengguna
  • lab_vm_count adalah jumlah maksimum VM lab
  • lab_premium_vm_count adalah jumlah maksimum VM premium laboratorium
  • lab_vm_size adalah ukuran VM lab yang diizinkan
  • gallery_image adalah gambar-gambar galeri yang diizinkan
  • user_owned_lab_vm_count_in_subnet adalah jumlah maksimum VM pengguna dalam subnet
  • lab_target_cost akan merupakan biaya target dari laboratorium
- 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

Mengatur jadwal lab

Tugas sampel di bagian ini mengonfigurasi jadwal lab.

Dalam cuplikan kode berikut, lab_vms_startup nilai digunakan untuk menentukan waktu mulai VM. Demikian juga, mengatur nilai lab_vms_shutdown menetapkan waktu penutupan VM laboratorium.

- 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

Membuat jaringan virtual lab

Tugas berikut ini membuat jaringan virtual lab default.

- 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

Menentukan sumber artefak untuk lab

Sumber artefak adalah repositori GitHub terstruktur dengan benar yang berisi definisi artefak dan templat Azure Resource Manager. Setiap lab dilengkapi dengan artefak publik yang telah ditentukan sebelumnya. Tugas berikut menunjukkan kepada Anda cara membuat sumber artefak untuk lab.

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

Membuat VM di dalam lab

Buat VM di dalam 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"

Daftar sumber dan artefak laboratorium

Untuk mencantumkan semua sumber artefak default dan kustom di lab, gunakan tugas berikut:

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

Tugas berikut mencantumkan semua artefak:

- 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

Mendapatkan informasi Azure Resource Manager untuk sumber artefak

Untuk mencantumkan semua templat Azure Resource Manager di public environment repository, repositori dengan templat yang telah ditentukan sebelumnya:

- 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

Dan tugas berikut mengambil detail templat Azure Resource Manager tertentu dari repositori:

- 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

Membuat lingkungan lab

Tugas berikut membuat lingkungan lab berdasarkan salah satu templat dari repositori lingkungan publik.

- 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

Membuat gambar lab

Tugas berikut membuat gambar dari VM. Gambar memungkinkan Anda membuat VM yang identik.

- 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

Menghapus lab

Untuk menghapus lab, gunakan tugas berikut:

- 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

Dapatkan buku panduan sampel

Ada dua cara untuk mendapatkan playbook contoh lengkap:

  • Unduh buku panduan dan simpan ke devtestlab-create.yml.
  • Buat file baru bernama devtestlab-create.yml dan salin konten berikut ke dalamnya:
---
- 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

Jalankan buku panduan

Di bagian ini, jalankan playbook untuk menguji berbagai fitur yang ditunjukkan dalam artikel ini.

Sebelum menjalankan playbook, buat perubahan berikut:

  • Di bagian vars, ganti placeholder {{ resource_group_name }} dengan nama grup sumber daya Anda.
  • Simpan token GitHub sebagai variabel lingkungan bernama GITHUB_ACCESS_TOKEN.

Jalankan playbook menggunakan ansible-playbook

ansible-playbook devtestlab-create.yml

Membersihkan sumber daya

  1. Simpan kode berikut sebagai delete_rg.yml.

    ---
    - hosts: localhost
      tasks:
        - name: Deleting resource group - "{{ name }}"
          azure_rm_resourcegroup:
            name: "{{ name }}"
            state: absent
          register: rg
        - debug:
            var: rg
    
  2. Jalankan playbook menggunakan perintah ansible-playbook . Ganti placeholder dengan nama grup sumber daya yang akan dihapus. Semua sumber daya dalam grup sumber daya akan dihapus.

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

    Poin utama:

    • register Karena variabel dan debug bagian dari playbook, hasilnya ditampilkan saat perintah selesai.

Langkah selanjutnya