Ansible:我需要使用循环中的变量,并独立使用每个变量

时间:2018-05-09 09:21:00

标签: centos ansible centos7

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

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

"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搜索(显然)但无济于事。非常感谢所有帮助! :)

1 个答案:

答案 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') }}"