我有一项微不足道的任务,即在其角色下使用新部署的VM名称填充特定的ansible库存文件。 这是我的剧本:
- hosts: 127.0.0.1
tasks:
- name: Add host to inventory file
lineinfile:
dest: "{{inv_path}}"
regexp: '^\[{{role}}\]'
insertafter: '^#\[{{role}}\]'
line: "{{new_host}}"
不是在[role]之后添加新行,而是用主机名替换字符串。我的目标是自然地插入它之后。如果没有匹配的角色,则应跳过添加新行。
如何实现这一目标?谢谢!
答案 0 :(得分:0)
[role]
正在被替换,因为regexp
参数是正则表达式,Ansible将使用line
参数查找替换。只需将该值移至insertafter
即可摆脱regexp
。
至于其他要求,您需要另外一项检查[role]
是否存在的任务。然后你的lineinfile任务将评估检查器任务的结果,以确定它是否应该运行。
- name: Check if role is in inventory file
shell: grep [{{ role }}] {{ inv_path }}
ignore_errors: True
register: check_inv
- name: Add host to inventory file
lineinfile:
dest: "{{ inv_path }}"
insertafter: '^\[{{role}}\]$'
line: "{{new_host}}"
when: check_inv.rc == 0