Ansible多个regexp在状态为
我试图根据ansible收集的工件替换文件中的名称。 使用ONEAnsible多个regexp在状态为,ansible,jinja2,Ansible,Jinja2,我试图根据ansible收集的工件替换文件中的名称。 使用ONElineinfle 像这样的, lineinfile: path: '/somefile.conf' regexp: '{{ item.regexp }}' line: '{{ item.line }}' with_items: - { regexp: '^DB_TYPE=', line: "DB_TYPE=mysql" } when: mysql.stat.exists - { rege
lineinfle
像这样的,
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
我相信当条件与一个任务相关联时,
,因此在同一个任务中不同的循环不能有不同的条件(很高兴在这里得到纠正)
这给您留下了两个选择:
将此任务拆分为多个lineinfle
任务,这听起来似乎是您想要避免的
利用模块。不一定更好,但要知道这很酷
第二个选项的示例:
- 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(例如),我发现这很有用。如果。。。其他的如果
lineinfile:
path: '/somefile.conf'
regexp: '^DB_TYPE='
line: "{{ 'DB_TYPE=mysql' if mysql.stat.exists else 'DB_TYPE=oracle' if oracle.stat.exists }}"
如何在此循环中定义变量。例如,我想输入IP地址,但无法退出循环。这里有一个例子:'LyfIf:Posith:/OfField.CONF'ReExp::iPiAdDr==行:{MyQual.STAT..MyQual.STAT..ObjavyLtSt..ObjyType = {{ANSILUBYALLIPIPv4}地址}‘如果Oracle .Stist.Ent}},“如果您只考虑IP地址列表中的第一个IP,则<代码>行<代码>将是<代码>行:{{'IP_ADDR=127.0.0.1'如果mysql.stat.exists其他IP_ADDR='~ansible'u all_ipv4_地址[0]如果oracle.stat.exists}}“Great-answer@franklinsijo。如何实现相同的结果,但使用混合变量+文本。类似于:lineinfile:path:'/somefile.conf'regexp:'^URL='行:“{'URL=127.0.0.1'如果mysql.stat.exists其他'URL=http://{{ansible\u all\u ipv4\u addresses}}/test'如果oracle.stat.exists}}“这是与上面类似的连接,
'URL=http://'~ansible\u all\u ipv4\u addresses[0]~'/test'