我有一個基於解析的參數創建libvirt guest的ansible playbook。我試圖用一個額外的參數來擴展劇本,這將允許我將guest虛擬機操作系統附加到specidied虛擬網絡並分配寫入文件的自定義mac地址。Ansible - 複雜的循環與條件和寄存器標準輸出
的劇本應該被調用是這樣的:
ansible-playbook -e "CPU=2 MEMORY=1024 VM_STORAGE=/tmp/zz VM_NAME=desktop5 VM_NETWORK=bridge,Isolated2" vm.yml
的最後一個步驟之一,我不得不創建網卡,並使用這些定義在一個文件中的格式如下特定MAC地址:
#NAT#52:54:00:aa:aa:01#desktop1
#bridge#52:54:00:aa:bb:01#desktop1
#Isolated1#52:54:00:aa:cc:01#desktop1
#Isolated2#52:54:00:aa:dd:01#desktop1
如何根據指定的額外參數-e VM_NETWORK使用恰當的劇本功能來連接網絡接口,並確定MAC地址。
到目前爲止,我想出了以下內容:
- name: Setting up network
shell: "/bin/grep -e {{ vm_name }} {{ mac_file }} | grep -e {{ item }} | awk -F\"#\" '{print $3}'"
register: vm_mac
command: "/usr/bin/virsh attach-interface --domain {{ vm_name }} --type bridge --source 'bridge0' --model virtio --mac {{ vm_mac }} --config"
when: item == "bridge"
with_items:
- "{{ VM_NETWORK.split(',') }}"
,但問題是我不能有指揮和外殼動作一個任務? 我應該通過調用一個shell腳本來獲取mac地址,然後在命令中使用它嗎?
目前我有一個bash腳本執行virsh命令以附加或分離接口,但我想知道是否有辦法在ansible中動態地執行它。