jor*_*ite 6 ansible ansible-playbook ansible-2.x
如果文件在特定子网中有接口,我想将文件的一个版本复制到服务器,或者如果在该子网中没有接口,则将文件的一个版本复制到服务器。下面是一个工作,但我认为不是最佳解决方案。我希望有一种更好的方法可以满足以下条件...
工作版本...
- name: copy file version 1 to server
copy:
src: files/myfile.vs1
dest: /etc/myfile
when: (ansible_eth0.network == "192.168.0.0") or
(ansible_eth1.network == "192.168.0.0") or
(ansible_eth2.network == "192.168.0.0")
...
- name: copy file version 2 to server
copy:
src: files/myfile.vs2
dest: /etc/myfile
when: (ansible_eth0.network != "192.168.0.0") and
(ansible_eth1.network != "192.168.0.0") and
(ansible_eth2.network != "192.168.0.0")
...
Run Code Online (Sandbox Code Playgroud)
一些 jinja2 忍者技巧,你在这里:
- copy:
src: >-
{{ (
ansible_interfaces |
map('regex_replace','^','ansible_') |
map('extract',hostvars[inventory_hostname]) |
selectattr('ipv4','defined') |
selectattr('ipv4.network','equalto','192.168.0.0') |
list |
count > 0
) | ternary('files/myfile.vs1','files/myfile.vs2')
}}
dest: /etc/myfile
Run Code Online (Sandbox Code Playgroud)
解释:
ansible_interfacesansible_为 (ansible_eth0等)hostvarsipv4已定义的接口ipv4.network等于的接口192.168.0.0files/myfile.vs1files/myfile.vs2否则返回PS>-用于定义多行字符串并去除任何换行符,否则src将设置为files/myfile.vs2\n.
| 归档时间: |
|
| 查看次数: |
2969 次 |
| 最近记录: |