我有一个基于解析的参数创建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中动态地执行它。