Byt*_*ger 4 ansible ansible-playbook
我有一个剧本,我用ec2
模块在aws中旋转一个实例.为了更灵活,我通过提示输入主机名.我在ec2
示例中找到了代码片段,它允许您使用新的spun up实例运行第二个playbook以进行进一步配置.
现在我想通过模块设置主机名,hostname
但我无法访问第二个playbook中的变量.
这是我的剧本的样子:
---
- 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 }}"
Run Code Online (Sandbox Code Playgroud)
致命:[已启动] =>一个或多个未定义的变量:'var_hostname'未定义
有没有办法将变量从一个剧本传递到另一个剧本?
我找到了Ansible最佳做法,将vars传递给嵌套的剧本?但不幸的是,它没有我可以使用的解决方案.
您可以将set_fact和hostvars一起使用以实现您想要的效果.
在一组主机(即localhost)上执行set_fact,并使用hostvars在不同的游戏中访问它们
{{HOSTVARS [ '本地主机'] [ "new_fact"]}}
您可以使用本地文件。
1)写
- name: write public ip
local_action:
template:
dest: /tmp/ansible_master_public_ip.txt
src: templates/public_ip.j2
Run Code Online (Sandbox Code Playgroud)
2)使用http://docs.ansible.com/ansible/playbooks_lookups.html检索
hostname: "{{ lookup('file', '/tmp/ansible_master_public_ip.txt') | trim }}"
Run Code Online (Sandbox Code Playgroud)
附言。如果您需要多个变量,则 Ini 文件查找也是一个选项。
归档时间: |
|
查看次数: |
9706 次 |
最近记录: |