使用lineinfile填充ansible库存文件

时间:2017-08-14 14:50:40

标签: ansible ansible-inventory

我有一项微不足道的任务,即在其角色下使用新部署的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]之后添加新行,而是用主机名替换字符串。我的目标是自然地插入它之后。如果没有匹配的角色,则应跳过添加新行。

如何实现这一目标?谢谢!

1 个答案:

答案 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