變數不存在

  1. 下載變數格式檔 report1.orig。
    ceuser@deyu:~/ansible_pb$ wget http://dy.csie.cyut.edu.tw/materials/report1.orig
    
  2. 查看需要列出報告 report1.orig 的變數。
    ceuser@deyu:~/ansible_pb$ cat report1.orig
    # Variables report
    HOST=inventoryhostname
    BIOS=BIOS_version
    VDA_SIZE=disk_vda_size
    VDC_SIZE=disk_vdc_size
    OS=os_family
    
  3. 撰寫 report1.yml 腳本,因為 kvm12 沒有 vdc 硬碟,ansible_devices.vdc.size 不會有定義,執行腳本會報錯無法完成。所以 value 設定使用 var|default('NONE'),當變數 var 不在在時,value 設定成預設值 'NONE',其他變數也都設定預設值 'NONE'。
    ceuser@deyu:~/ansible_pb$ vi report1.yml 
    ceuser@deyu:~/ansible_pb$ cat report1.yml 
    ---
    - name: Report variables
      hosts: test
      tasks:
      - ansible.builtin.copy:
          src: report1.orig
          dest: /root/report1.txt
    
      - ansible.builtin.lineinfile:
          path: /root/report1.txt
          regexp: "^{{item.key}}="
          line: "{{item.key}}={{item.value}}"
        loop:
          - { key: "HOST", value: "{{inventory_hostname | default('NONE')}}" }
          - { key: "BIOS", value: "{{ansible_bios_version | default('NONE')}}" }
          - { key: "VDA_SIZE", value: "{{ansible_devices.vda.size | default('NONE')}}" }
          - { key: "VDC_SIZE", value: "{{ansible_devices.vdc.size | default('NONE')}}" }
          - { key: "OS", value: "{{ansible_os_family | default('NONE')}}" }
    
  4. ansible-playbook 執行腳本 report1.yml。
    ceuser@deyu:~/ansible_pb$ ansible-playbook report1.yml 
    
    PLAY [Report variables] ********************************************************
    
    TASK [Gathering Facts] *********************************************************
    ok: [kvm12]
    
    TASK [ansible.builtin.copy] ****************************************************
    changed: [kvm12]
    
    TASK [ansible.builtin.lineinfile] **********************************************
    changed: [kvm12] => (item={'key': 'HOST', 'value': 'kvm12'})
    changed: [kvm12] => (item={'key': 'BIOS', 'value': '1.16.3-7.el10.alma.1'})
    changed: [kvm12] => (item={'key': 'VDA_SIZE', 'value': '6.00 GB'})
    changed: [kvm12] => (item={'key': 'VDC_SIZE', 'value': 'NONE'})
    changed: [kvm12] => (item={'key': 'OS', 'value': 'RedHat'})
    
    PLAY RECAP *********************************************************************
    kvm12 : ok=3 changed=2  unreachable=0  failed=0  skipped=0  rescued=0  ignored=0
    
  5. ansible 使用 shell 模組查看主機 test 的 /root/report1.txt,內容確實已改成變數查詢結果,且 VDC_SIZE=NONE。
    ceuser@deyu:~/ansible_pb$ ansible test -m shell -a "cat /root/report1.txt"
    kvm12 | CHANGED | rc=0 >>
    # Variables report
    HOST=kvm12
    BIOS=1.16.3-7.el10.alma.1
    VDA_SIZE=6.00 GB
    VDC_SIZE=NONE
    OS=RedHat