星期六, 2月 17, 2018

Ansible azure module 測試小記 - 使用 vars_prompt 建立多 VM in Azure

Ansible azure module 測試小記 - 使用 vars_prompt 建立多 VM in Azure

OS:  openSUSE Leap 42.3 in Azure

測試模組
  • azure_rm_virtualmachine

上次的文章 http://sakananote2.blogspot.tw/2018/02/ansible-azure-module.html 使用 azure_rm_virtualmachine 建立 VM in Azure

但是建立的 VM 相關設定是寫死的, 每次要建立 VM 要去修改 yml 檔案, 所以接下來就改寫上次的 azure_create_vm.yml , 使用 vars_prompt 方式來讓新增 VM 有彈性

azure_create_vm.yml 內容如下

---
# Azure VM 相關測試
# edit by sakana 2018/2/17
- name: use when conditionals and setup module
 hosts: localhost
 connection: local
#
 vars_prompt:
   - name: "resource_group"
     prompt: "Enter resource group name"
     private: no
     default: sakanatest

   - name: "admin_username"
     prompt: "Enter admin username"
     private: no
     default: sakana

   - name: "admin_password"
     prompt: "Enter admin password"
     private: yes
     
   - name: "sequence_start"
     prompt: "Enter sequence start number"
     private: no
     default: 1

   - name: "sequence_end"
     prompt: "Enter sequence end number, Max is 99"
     private: no
     default: 10

   - name: "vm_size"
     prompt: "Enter VM size"
     private: no
     default: Basic_A1

   - name: "image_offer"
     prompt: "Enter image offer"
     private: no
     default: openSUSE-Leap

   - name: "image_publisher"
     prompt: "Enter image publisher"
     private: no
     default: SUSE

   - name: "image_sku"
     prompt: "Enter image sku"
     private: no
     default: 42.3

   - name: "image_version"
     prompt: "Enter image version"
     private: no
     default: latest

 tasks:
  - name: Create Azure test VM
# 可以用 with_sequence 方式, %0x 為序號, x是16進制, 所以我用 u 10進制
# 如果是 %02x 就是 2位數, 例如 server00
# 如果只設定 server%0x , 但是超出1位數, 例如 1 to 10, 最後一個會變成 servera
# stride=2 代表間隔是 2
#      with_sequence: start=1 end=10 stride=1 format=server%02u
    with_sequence: start={{ sequence_start }} end={{ sequence_end }} stride=1 format=test%02u
    azure_rm_virtualmachine:
      resource_group: "{{ resource_group }}"
# 這邊的 "{{ item }}" 對應到上面的 with_sequence
      name: "{{ item }}"
      admin_username: "{{ admin_username }}"
      admin_password: "{{ admin_password }}"
# 這邊可以對應到已經有的儲存體
# 建立VM的時候會對應到儲存體, 如果只是實驗用, 可以對應到已經存在的儲存體
# 好處是移除的時候不用再手動移除
# 這個 storage_account 是已經建立好的, 請對應到已經存在儲存體
#       storage_account: sakanatestdiag34
# 經實驗 vm_size 是必須的
      vm_size: "{{ vm_size }}"
#
# image 相關資訊可以使用 az vm image list --output table 查詢
      image:
        offer: "{{ image_offer }}"
        publisher: "{{ image_publisher }}"
        sku: "{{ image_sku }}"
        version: "{{ image_version }}"
#


使用 ansible-playbook 指令執行 azure_create_vm.yml , 因為剛剛有設定 default 值, 所以大概就是指定建立 VM 的數量就好

$ ansible-playbook     azure_create_vm.yml

Enter resource group name [sakanatest]:
Enter admin username [sakana]:
Enter admin password:
Enter sequence start number [1]:
Enter sequence end number, Max is 99 [10]: 2
Enter VM size [Basic_A1]:
Enter image offer [openSUSE-Leap]:
Enter image publisher [SUSE]:
Enter image sku [42.3]:
Enter image version [latest]:

這樣以後建立實驗機器就方便多了

同樣方法也來改寫 azure_remove_vm.yml , 先來嘗試移除單一VM, 下次來建立移除多 VM

azure_remove_vm.yml 內容如下

---
# Azure VM 相關測試
# edit by sakan 2018/2/17
- name: use when conditionals and setup module
 hosts: localhost
 vars_prompt:
   - name: "vm_name"
     prompt: "Enter VM name your want to remove"
     private: no

 tasks:
  - name: Remove Azure test VM
    azure_rm_virtualmachine:
      resource_group: sakanatest
      name: "{{ vm_name }}"
      state: absent


今天先這樣

~ enjoy it

沒有留言: