代码之家  ›  专栏  ›  技术社区  ›  Drux

可变路径可转换模块行

  •  1
  • Drux  · 技术社区  · 6 年前

    我需要用答案 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 
    

    它显然不能作为参数逐字工作 path 到Ansible的 线条输入 模块:

    失败!=>“已更改”:false,“msg”:“目标” /etc/postgresq/$(pg_lsclusters-h_awk'print$1'head-n 1)/main/postgresql.conf不存在!“,“rc”:257_

    所以我的问题是:在这个用例中,如何用ansible形成一个变量路径?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Drux    6 年前

    这似乎很管用:

    - 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