我有一个剧本,我正在使用 ec2 模块在 aws 中启动一个实例。为了更灵活,我通过提示输入主机名。我在 ec2 示例中找到了代码片段,它允许您使用新启动的实例运行第二个剧本以进行进一步配置。

现在我想通过模块 hostname 设置主机名,但我无法访问第二个剧本中的变量。

这是我的剧本的样子:

---
- hosts: localhost
  ...

  vars_prompt:
    - name: var_hostname
      prompt: "Please enter the hostname"
      private: no

  tasks:

    - name: Spin up instance
      local_action:
        module: ec2
        ...
      register: ec2

    - name: Add new instance to host group
      add_host: hostname={{ item.public_ip }} groupname=launched
      with_items: ec2.instances

- hosts: launched
  ...

  tasks:

    - name: Set hostname
      hostname: name="{{ var_hostname }}"



有没有办法将变量从一个剧本传递到另一个剧本?

我找到了 Ansible best practice for passing vars to nested playbooks? 但不幸的是它没有我可以使用的解决方案。

最佳答案

您可以一起使用 set_fact 和 hostvars 来实现您想要的。

在一组主机(即本地主机)上执行 set_fact,并使用 hostvars 在不同的游戏中访问它们

关于ansible - 在嵌套剧本之间传递变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31708736/

10-12 23:43