我有一个剧本,我用ec2
模块在aws中旋转一个实例。为了更灵活,我通过提示输入主机名。我在ec2
示例中找到了代码片段,它允许您使用新的spun up实例运行第二个playbook以进行进一步配置。
现在我想通过模块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 }}"
致命:[已启动] =>一个或多个未定义的变量:'var_hostname'未定义
有没有办法将变量从一个剧本传递到另一个剧本?
我找到了DDP,但遗憾的是它没有我可以使用的解决方案。
答案 0 :(得分:6)
您可以一起使用set_fact和hostvars来实现您的目标。
在一组主机(即localhost)上执行set_fact,并使用hostvars在不同的游戏中访问它们
{{HOSTVARS ['本地主机'] [" new_fact"]}}
答案 1 :(得分:3)
您可以使用本地文件。
1)写
- name: write public ip
local_action:
template:
dest: /tmp/ansible_master_public_ip.txt
src: templates/public_ip.j2
2)使用http://docs.ansible.com/ansible/playbooks_lookups.html
进行检索hostname: "{{ lookup('file', '/tmp/ansible_master_public_ip.txt') | trim }}"
PS。如果您需要多个变量,Ini文件查找也是一个选项。