具有可变路径的Ansible模块lineinfile

时间:2018-07-22 13:49:19

标签: bash ansible

我需要使用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形成变量路径?

1 个答案:

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