如何将ec2变量从一个主机传递到另一个主机

如何将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 
+0

感谢康斯坦丁,但现在我得到‘'ansible.vars.hostvars.HostVars对象有没有属性’在我的剧本错误。我试图添加 –

+0

感谢Konstantin,但现在我得到“'ansible.vars.hostvars.HostVars对象'没有属性”错误。我试着在host1下添加--debug:var = hostvars&--debug:msg =“{{hostvars}}”,但也没有运气。这里可能是什么问题?再次感谢!! –

+0

@DeepakPrasad首先你不能在等号后面使用空格 - 使用'debug:msg =“{{hostvars}}”'。在'set_fact:public_ip = ...''public_ip中的这个空间将永远为空。但是如果你的'hostvars'没有定义,那么你的设置有些问题 - 它应该始终可用。 –