提问人:deb 提问时间:11/18/2022 最后编辑:Zeitounatordeb 更新时间:11/18/2022 访问量:297
将变量传递到下一个播放的 Ansible playbook
Ansible playbook passing variable to next play
问:
我在 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
答:
1赞
Zeitounator
11/18/2022
#1
注意:确保您不是简单地重新发明 ansible-playbook
命令行的现有 --limit
选项
正如你所发现的,不要在他们被宣布的戏剧中幸存下来。在这种情况下,您必须使用 .下面是一个使用上述代码作为起点的示例:vars_prompt
set_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
在评论中转储没有上下文的错误,您期望什么?这与您上面的问题不同,该消息清楚地表明它无法解析您的库存文件,并且没有人知道它的外观。在仔细检查和调试后,用一个最小的可重复示例提出一个新问题
评论