将变量传递到下一个播放的 Ansible playbook

Ansible playbook passing variable to next play

提问人:deb 提问时间:11/18/2022 最后编辑:Zeitounatordeb 更新时间:11/18/2022 访问量:297

问:

我在 ansible 中构建了一个 playbook,它创建了 2 组 ec2 实例。

在第二个 playbook 中,我希望第一个 playbook 向用户列出现有组,以便用户可以选择一个组。然后,在第二场重头戏中,在主机中使用此组

---
- name: playbook
  hosts: localhost
  vars_prompt:
    - name: groupvar
      prompt: "Select a group"
      private: no
  tasks:
    - name: task 1
      debug:
        msg: "{{ groupvar}}"

- name: Another play
  hosts: "{{ groupvar }}"

  # ...

我怎样才能将价值传递给这个剧本中的第二部戏?groupvar

变量 ansible 参数传递

评论


答:

1赞 Zeitounator 11/18/2022 #1

注意:确保您不是简单地重新发明 ansible-playbook 命令行的现有 --limit 选项


正如你所发现的,不要在他们被宣布的戏剧中幸存下来。在这种情况下,您必须使用 .下面是一个使用上述代码作为起点的示例:vars_promptset_fact

- name: playbook
  hosts: localhost
  vars_prompt:
    - name: groupvar
      prompt: "Select a group"
      private: no
  tasks:
    - name: task 1
      debug:
        msg: "{{ groupvar }}"

    - name: Save value in a fact for current host
      set_fact:
        groupvar: "{{ groupvar }}"

- name: Another play running on above chosen group
  # Remember we have set the fact on current host above which was localhost
  hosts: "{{ hostvars['localhost'].groupvar }}"

  # ... rest of your play.

评论

0赞 deb 11/19/2022
谢谢Zeitounator。如果在另一个 playbook 中,我创建了一些 ec2 实例并使用 add_hosts 将它们添加到 ansible 组中,那么它会在游戏中幸存下来吗?当我执行上面的代码时,
0赞 Zeitounator 11/19/2022
因此,您的问题实际上是:“我可以在其他 playbook 中处理我添加到内存中清单的组/主机吗?答案是否定的。在您的特定情况下,您希望使用动态库存。查看 docs.ansible.com/ansible/latest/collections/amazon/aws/...add_host
0赞 deb 11/20/2022
是的,我正在尝试这样做......我想我可能遗漏了一些东西,因为当我调用 ansible-inventory -i my.aws_ec2.yml --list 时,我得到 [警告]:无法解析 /home/ubuntu/my.aws_ec2.yml 作为清单源 [警告]:没有解析库存,只有隐式 localhost 可用 [警告]:提供的主机列表为空,只有 localhost 可用。请注意,隐式 localhost 与 'all' 不匹配
0赞 Zeitounator 11/20/2022
在评论中转储没有上下文的错误,您期望什么?这与您上面的问题不同,该消息清楚地表明它无法解析您的库存文件,并且没有人知道它的外观。在仔细检查和调试后,用一个最小的可重复示例提出一个新问题