我需要使用Ansible lineinfile
模块,使其在可变路径上运行。 (这是针对Ansible 2.5.2。的)。在此示例中,文件名应取决于实际安装在远程主机上的PostgreSQL版本(而不是硬连线版本9.6):
- lineinfile:
path: /etc/postgresql/9.6/main/postgresql.conf
regexp: '^#?\s*log_connections\s*='
line: 'log_connections = on'
state: present
在bash
中,我将使用用于获取版本和路径的表达式:
/etc/postgresq/$(pg_lsclusters -h | awk '{print $1}' | head -n 1)/main/postgresql.conf
它显然不能按原样用作Ansible的path
模块的参数lineinfile
:
失败! => {“已更改”:false,“ msg”:“目标 / etc / postgresq / $(pg_lsclusters -h | awk'{print $ 1}'| head -n 1)/main/postgresql.conf不存在!“,” rc“:257}
所以我的问题是这样的:在这种用例中,如何使用Ansible形成变量路径?
答案 0 :(得分:2)
这似乎很好:
- name: Got it!
command: bash -c "pg_lsclusters -h | awk '{print $1; exit}'"
register: version
- set_fact: version='{{version.stdout}}'
- lineinfile:
path: "/etc/postgresql/{{version}}/main/postgresql.conf"
regexp: '^#?\s*log_connections\s*='
line: 'log_connections = on'
state: present