在同一个剧本中的角色中使用set_fact中的变量

时间:2017-11-06 14:12:32

标签: variables ansible

我坚持使用Ansible playbook中角色中的任务变量。我的剧本如下:

- hosts: server.com
  gather_facts: yes
  tasks:
    - set_fact:
        private_ip: "{{ item }}"
      with_items: "{{ ansible_all_ipv4_addresses }}"
      when: "item.startswith('10.')"
    - debug: var=private_ip
  roles:
    - role: check-server
      server_ip: 10.10.0.1
      client_ip: "{{ private_ip }}

当pleybook运行时-debug在变量private_ip中显示正确的IP,但是我无法使client_ip(来自角色块)获取private_ip内容。 client_ip始终未定义。

我可以在这里应用什么法术来使用client_ip = $ private_ip?

1 个答案:

答案 0 :(得分:1)

tasksroles应用后执行。

tasks更改为pre_tasks

此外,在循环中使用set_fact不是最佳做法。如果你得到你想要的价值,那没关系,我相信你验证了它。但您应该使用(ansible_all_ipv4_addresses | select("match", "10\..*") | list)[0]