Öğretici: Ansible kullanarak Azure DevTest Labs'de laboratuvarları yapılandırma

Önemli

Bu makaledeki örnek playbook'ları çalıştırmak için Ansible 2.8 (veya üzeri) gereklidir.

Azure DevTest Labs, geliştiricilerin uygulamaları için VM ortamları oluşturmayı otomatikleştirmesine olanak tanır. Bu ortamlar uygulama geliştirme, test etme ve eğitim için yapılandırılabilir.

Bu makalede şunları öğreneceksiniz:

  • Laboratuvar oluşturma
  • Laboratuvar ilkelerini ayarlama
  • Laboratuvar zamanlamalarını ayarlama
  • Laboratuvar sanal ağını oluşturma
  • Laboratuvar için bir artefakt kaynağı tanımlayın
  • Laboratuvarda VM oluşturma
  • Laboratuvarın eser kaynaklarını ve eserlerini listele
  • Yapıt kaynakları için Azure Resource Manager bilgilerini alma
  • Laboratuvar ortamını oluşturma
  • Laboratuvar görüntüsünü oluşturma
  • Laboratuvarı silme

Önkoşullar

  • Azure aboneliği: Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Kaynak grubu oluştur

Örnek playbook kod parçacığı bir Azure kaynak grubu oluşturur. Kaynak grubu, Azure kaynaklarının dağıtıldığı ve yönetildiği mantıksal bir kapsayıcıdır.

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

Laboratuvarı oluşturma

Sonraki görev örnek laboratuvarı oluşturur.

- 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

Laboratuvar ilkelerini ayarlama

Laboratuvar ilkesi ayarlarını yapabilirsiniz. Aşağıdaki değerler ayarlanabilir:

  • user_owned_lab_vm_count kullanıcının sahip olabileceği VM sayısıdır
  • user_owned_lab_premium_vm_count kullanıcının sahip olabileceği premium VM sayısıdır
  • lab_vm_count laboratuvar VM'lerinin maksimum sayısıdır
  • lab_premium_vm_count laboratuvar premium VM'lerinin maksimum sayısıdır
  • lab_vm_size izin verilen laboratuvar VM'lerinin boyutlarıdır
  • gallery_image izin verilen galeri resimleridir
  • user_owned_lab_vm_count_in_subnet bir alt ağdaki kullanıcı VM'lerinin maksimum sayısıdır
  • lab_target_cost laboratuvarın hedef maliyetidir
- 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

Laboratuvar zamanlamalarını ayarlama

Bu bölümdeki örnek görev, laboratuvar zamanlamasını yapılandırıyor.

Aşağıdaki kod parçacığında lab_vms_startup , değeri VM başlangıç zamanını belirtmek için kullanılır. Benzer şekilde, değerin lab_vms_shutdown ayarlanması laboratuvar VM kapatma süresini belirler.

- 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

Laboratuvar sanal ağını oluşturma

Aşağıdaki görev varsayılan laboratuvar sanal ağını oluşturur.

- 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

Laboratuvar için bir ürün kaynağı tanımlayın

Yapıt kaynağı, yapıt tanımını ve Azure Resource Manager şablonlarını içeren düzgün yapılandırılmış bir GitHub deposudur. Her laboratuvar önceden tanımlanmış genel artefaktlarla birlikte gelir. Aşağıdaki görevler, laboratuvar için yapıt kaynağının nasıl oluşturulacağını gösterir.

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

Laboratuvarda VM oluşturma

Laboratuvarda bir VM oluşturun.

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

Laboratuvarın artefakt kaynaklarını ve artefaktlarını listeleyin

Laboratuvardaki tüm varsayılan ve özel yapıt kaynaklarını listelemek için aşağıdaki görevi kullanın:

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

Aşağıdaki görev tüm yapıtları listeler:

- 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

Yapıt kaynakları için Azure Resource Manager bilgilerini alma

içindeki public environment repository, önceden tanımlanmış ve şablonları içeren depodaki tüm Azure Resource Manager şablonlarını listelemek için:

- 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

Aşağıdaki görev de depodan belirli bir Azure Resource Manager şablonunun ayrıntılarını alır:

- 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

Laboratuvar ortamını oluşturma

Aşağıdaki görev, ortak ortam deposundaki şablonlardan birini temel alarak laboratuvar ortamını oluşturur.

- 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

Laboratuvar görüntüsünü oluşturma

Aşağıdaki görev bir VM'den görüntü oluşturur. Görüntü, aynı VM'leri oluşturmanıza olanak tanır.

- 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

Laboratuvarı silme

Laboratuvarı silmek için aşağıdaki görevi kullanın:

- 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

Örnek senaryo kitabını edinin

Örnek playbook'un tamamını almanın iki yolu vardır:

  • Playbook'u indirin ve devtestlab-create.yml'e kaydedin.
  • adlı devtestlab-create.yml yeni bir dosya oluşturun ve aşağıdaki içeriği bu dosyaya kopyalayın:
---
- 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

Playbook'u çalıştır

Bu bölümde, bu makalede gösterilen çeşitli özellikleri test etmek için playbook'u çalıştırın.

Playbook'u çalıştırmadan önce aşağıdaki değişiklikleri yapın:

  • vars bölümünde yer tutucuyu {{ resource_group_name }} kaynak grubunuzun adıyla değiştirin.
  • GitHub belirtecini adlı GITHUB_ACCESS_TOKENbir ortam değişkeni olarak depolayın.

Ansible-playbook kullanarak playbook'u çalıştırın

ansible-playbook devtestlab-create.yml

Kaynakları temizle

  1. Aşağıdaki kodu olarak delete_rg.ymlkaydedin.

    ---
    - hosts: localhost
      tasks:
        - name: Deleting resource group - "{{ name }}"
          azure_rm_resourcegroup:
            name: "{{ name }}"
            state: absent
          register: rg
        - debug:
            var: rg
    
  2. ansible-playbook komutunu kullanarak playbook'u çalıştırın. Yer tutucuyu silinecek kaynak grubunun adıyla değiştirin. Kaynak grubundaki tüm kaynaklar silinir.

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

    Önemli noktalar:

    • Playbook'un register değişkeni ve debug bölümü nedeniyle, komut tamamlandığında sonuçlar görüntülenir.

Sonraki Adımlar