如何将ec2变量从一个主机传递到另一个主机
问题描述:
我想将我新创建的ec2实例的“private_dns_name”传递给我的一本其他主机。我曾尝试使用set_fact模块来定义变量,但没有运气!这是主机1如何将ec2变量从一个主机传递到另一个主机
- name: new EC2 instance
hosts: host1
tasks:
- name: Launch the new EC2 Instance
ec2:
aws_access_key: "{{ aws_id }}"
aws_secret_key: "{{ aws_key }}"
group_id: "{{ security_group_id }}"
instance_type: "{{ instance_type }}"
image: "{{ image }}"
key_name: "{{ ssh_keyname }}"
wait: yes
wait_timeout: 900
region: "{{ region }}"
count: 1
instance_tags:
Name: Prod-Engineering
register: ec2
- name: Register public DNS fact
set_fact: public_dns= "{{ item.private_dns_name }}"
with_items: ec2.instances
ansible剧本条目定义set_fact我使用下面的示例代码到private_dns_name抢我的其他主机2后:
- hosts: host2
become: yes
tasks:
- command: ipa host-add "{{ public_dns}}" --password=xxxxx
但我正在逐渐public_dns变量没有定义的错误,当执行我的剧本。我如何检索/将新创建的ec2实例的变量传递给其他主机/ ec2实例?
答
使用ansible magic variables访问其他主机的事实:
- hosts: host2
become: yes
tasks:
- command: ipa host-add "{{ hostvars['host1']['public_dns'] }}" --password=xxxxx
感谢康斯坦丁,但现在我得到‘'ansible.vars.hostvars.HostVars对象有没有属性’在我的剧本错误。我试图添加 –
感谢Konstantin,但现在我得到“'ansible.vars.hostvars.HostVars对象'没有属性”错误。我试着在host1下添加--debug:var = hostvars&--debug:msg =“{{hostvars}}”,但也没有运气。这里可能是什么问题?再次感谢!! –
@DeepakPrasad首先你不能在等号后面使用空格 - 使用'debug:msg =“{{hostvars}}”'。在'set_fact:public_ip = ...''public_ip中的这个空间将永远为空。但是如果你的'hostvars'没有定义,那么你的设置有些问题 - 它应该始终可用。 –