Ansible - 如何使用lineinfile模块使用三元函数?

时间:2016-09-01 02:45:11

标签: linux ansible jinja2

如果基于主机名不在该文件中,我们需要添加行。

这意味着:

  • 如果主机名为abc,则行"ABC"会转到/etc/app.conf
  • 否则行"XYZ"转到/etc/app.conf档。

对此有什么更好的方法?
我们是否使用jinja2模板或在playbook中定义逻辑?
请在两者上建议。

1 个答案:

答案 0 :(得分:4)

这真的是一个偏好问题以及您想要在输出中登录的内容。我想使用以下这么简单的任务是最简单的:

- name: Ensure line ABC is configured for host ABC
  lineinfile:
    dest: /etc/abc.conf
    line: "ABC"
  when: inventory_hostname == "abc"

- name: Ensure line XYZ is configured for hosts other than ABC
  lineinfile:
    dest: /etc/abc.conf
    line: "XYZ"
  when: inventory_hostname != "abc"

或者在一项任务中使用三元过滤器:

- lineinfile:
    dest: /etc/abc.conf
    line: "{{ ( inventory_hostname == 'abc' ) | ternary ('ABC','XYZ') }}"

如果配置文件需要更多更改,或者您希望确保配置完全符合您的要求,那么模板文件将更适合。