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

路径中带有bash命令的Ansible拷贝

  •  0
  • kiigass  · 技术社区  · 6 年前

    我有一个负责任的任务:

    - name: Copy files from A to B
      copy:
        src: "{{ item }}"
        dst: /usr/lib/modules/$(uname -r)/misc/
      with_items:
       - file.one
       - file.two
    

    问题是,ansible创建了一个名为/usr/lib/modules/$(uname-r)/misc/(字面意思)的目录,并将文件复制到那里,而不是替换 $(uname -r) 命令的输出。

    我要怎么做?

    2 回复  |  直到 6 年前
        1
  •  4
  •   joppich    6 年前

    默认情况下,ansible将运行其安装模块并发现有关目标系统的事实。

    你可以 access these facts like any variable

    - name: Copy files from A to B
        copy:
      src: "{{ item }}"
      dst: /usr/lib/modules/{{ ansible_kernel }}/misc/
      with_items:
       - file.one
       - file.two
    
        2
  •  1
  •   mhutter    6 年前

    添加到@joppich的答案中,如果要替换为 事实上,你可以使用 Registered Variables :

    - name: Determine kernel version
      command: uname -r
      register: r_uname
    
    - name: Copy files from A to B
      copy:
        src: "{{ item }}"
        dst: /usr/lib/modules/{{ r_uname.stdout_lines[0] }}/misc/
      with_items:
       - file.one
       - file.two