【问题标题】:Ansible: I need to use a variable that is in a loop, and use each variable independentlyAnsible:我需要使用一个循环中的变量,并独立使用每个变量
【发布时间】:2018-10-19 08:38:42
【问题描述】:

如果可能,需要一些帮助...

我已经从一个变量文件创建了用户:

"Users": 
 - user1
 - user2
 - user3

我需要将文件移动到每个用户的主目录。我不希望这样做,因为这意味着为每个用户写一行:

- name: Copy Playbooks
  copy:
    src: /etc/ansible/playbooks/file.yml
    dest: /home/user1/playbooks

像下面这样操作意味着 ansible 正在尝试添加到 {{ "user1" "user2" "user3" }}

的主目录
- name: Copy Playbooks
  copy:
    src: /etc/ansible/playbooks/hands_on_ansible/hands_on_files/mount_nfs.yml
    dest: /home/{{ variable.get('Users') }}/playbooks

所以我需要做的是使用变量文件将每个单独的变量添加到不同的主目录,这是一个循环。

谷歌搜索(显然)但无济于事。非常感谢所有帮助! :)

【问题讨论】:

    标签: centos ansible centos7


    【解决方案1】:

    Users 类型是列表,它包含 3 个项目,您可以在 related Ansible documentation 中找到有关 YAML 数据结构的信息。

    基本上,您需要遍历列表中的项目并为每个项目应用您的游戏Copy Playbooks。这是一个循环,你可以这样做:

    - name: Copy Playbooks
      copy:
        src: /etc/ansible/playbooks/hands_on_ansible/hands_on_files/mount_nfs.yml
        dest: "/home/{{item}}/playbooks"
      loop: "{{ variable.get('Users') }}"
    

    更准确的 ansible 循环描述可以在 in the documentation 找到。


    编辑:上述解决方案适用于 Ansible >= 2.5。如文档中所述:

    Ansible 2.5 之前主要使用with_<lookup> 关键字来创建循环,loop 关键字基本类似于with_list

    对于

    - name: Copy Playbooks
      copy:
        src: /etc/ansible/playbooks/hands_on_ansible/hands_on_files/mount_nfs.yml
        dest: "/home/{{item}}/playbooks"
      with_items: "{{ variable.get('Users') }}"
    

    【讨论】:

    • 谢谢@HugoShaka!很大的帮助。工作了一个款待。祝你有美好的一天。
    猜你喜欢
    • 2015-01-02
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 2021-11-19
    • 2019-08-09
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多