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

标签 variables ansible

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

- 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 (来自角色 block )来获取 private_ip 内容。 client_ip 始终未定义。

我可以在这里应用什么魔法来拥有 client_ip=$private_ip 吗?

最佳答案

任务在应用角色后执行。

tasks更改为pre_tasks


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

关于variables - 在同一剧本中的角色中使用 set_fact 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47138880/

相关文章:

django - 检测 Django 模板中未设置的变量

java - 如何扫描文件以搜索值

variables - Ansible:在循环中生成变量

python - 从模块获取单个变量和单个函数而不执行模块?

lambda 中使用的 Java 8 流变量应该是最终的或有效的最终

macos - if 中的 zsh 变量赋值

ansible - 如何在ansible的主机文件中指定用户名

ansible - 如何检查文件是否存在于ansible windows中?

ansible - 是否可以在任务中为角色定义变量?

linux - 使用 Ansible 下载 hadoop-3.2.2.tar.gz 文件后出现校验和错误