我试图根据ansible收集的工件替换文件中的名称。用ONE lineinfile实现这一任务有一些简单的方法
就像这样,
lineinfile:
path: '/somefile.conf'
regexp: '{{ item.regexp }}'
line: '{{ item.line }}'
with_items:
- { regexp: '^DB_TYPE=', line: "DB_TYPE=mysql" } when: mysql.stat.exists
- { regexp: '^DB_TYPE=', line: "DB_TYPE=oracle" } when: oracle.stat.exists发布于 2020-04-03 19:35:19
这可以用if ... else ... if来完成
lineinfile:
path: '/somefile.conf'
regexp: '^DB_TYPE='
line: "{{ 'DB_TYPE=mysql' if mysql.stat.exists else 'DB_TYPE=oracle' if oracle.stat.exists }}"发布于 2020-04-03 17:03:43
我相信when条件与一个任务相关联,因此对于同一任务中的不同循环,您不能有不同的条件(很高兴在这里得到纠正)。
这给你留下了几个选择:
lineinfile任务,听起来您想要避免这种情况。set_fact模块。不一定更好,但注意到却很酷。第二种选择的一个例子:
- name: set database type for mysql deployment
set_fact:
_db_type: mysql
when: mysql.stat.exists
- name: set database type for oracle deployment
set_fact:
_db_type: oracle
when: oracle.stat.exists
- name: something something
lineinfile:
path: '/somefile.conf'
regexp: '^DB_TYPE='
line: "DB_TYPE={{ _db_type }}"如果有多个任务需要参考mysql或oracle (举个例子),我认为这很有帮助。
https://stackoverflow.com/questions/61016683
复制相似问题