首页 文章

Ansible根据事实设置变量值

提问于
浏览
3

我想做一个ansible任务,将一些文件复制到客户端 . 将复制哪个文件由客户端体系结构(x86或i386)决定 . 没有代码重复的最佳方法是什么?

我的意思是,如果我只使用一个任务就会很棒:

name: copy file
copy: src={{ src }} dest={{ dest }}

有些操纵 .

3 回答

  • 0

    您可以使用Jinja2 if expressions

    vars:
      src: "{{ 'file_amd64.tar.gz' if ansible_architecture == 'x86_64' else 'file_i386.tar.gz' }}"
    tasks:
      - name: copy file
        copy: src={{ src }} dest={{ dest }}
    
  • 1

    您可以将系统特定设置存储在以体系结构命名的vars文件中 .

    在您的角色中,您将拥有一个包含内容的文件 x86.yml

    ...
    
    copySrc: fileA
    copyDest: /some/path/A
    
    ---
    

    对于 i386.yml 也一样:

    ...
    
    copySrc: fileB
    copyDest: /some/path/B
    
    ---
    

    然后使用系统事实 ansible_architecture 包含正确的文件:

    - include_vars: "{{ ansible_architecture }}.yml"
    
    - name: Copy file
      copy:
        src={{ copySrc }}
        dest={{ copyDest }}
    
  • 3

    我最终这样做了:我在 files 目录中有2个目录: x86_64i386 . 每个包含 my_file (带有相关内容) .

    我的角色包含以下任务:

    name: copy file
    copy: src={{ ansible_architecture }}/my_file dest={{ dest }}
    

相关问题