我已经从变量文件中创建了用户:
"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
所以我需要做的是使用变量文件将每个单独的变量添加到不同的主目录,这是一个循环。
用Google搜索(显然)但无济于事。非常感谢所有帮助! :)
答案 0 :(得分:0)
类型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。如文档中所述:
在2.5 Ansible主要使用
with_<lookup>
关键字创建循环之前,loop关键字基本上类似于with_list
。
对于Ansible版本&lt; 2.5通常的做法是:
- 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') }}"