Ansible 如何设置debug模块var参数提取register中的EC2 public_ip
从Ansible注册返回值中提取EC2公网IP的方法
debug模块var参数填写
顺着调试输出结构逐层定位字段路径即可:
- 根层级是任务注册时定义的变量
start_AWS - 下钻一层找到实例列表字段
instances,该字段为数组结构 - 当前返回结果中数组仅包含1台实例,用索引
[0]定位第一台实例对象 - 从实例对象中直接取
public_ip字段即为目标值
因此debug模块的var参数无需做额外表达式转换,直接填全路径即可:start_AWS.instances[0].public_ip
对应的任务示例:
- name: 打印提取到的EC2公网IP ansible.builtin.debug: var: start_AWS.instances[0].public_ip
执行后即可直接输出目标值3.21.228.186。
将提取结果作为后续任务输入的方式
- 不需要额外做赋值中转,后续任意任务里直接通过Jinja语法引用上述路径,就能拿到公网IP值:
{{ start_AWS.instances[0].public_ip }} - 如果后续任务需要多次调用这个IP,可以提前用
set_fact转成短变量,减少重复代码:
- name: 固化公网IP为全局复用变量 ansible.builtin.set_fact: ec2_access_ip: "{{ start_AWS.instances[0].public_ip }}" # 后续任务直接引用ec2_access_ip即可 - name: 校验EC2实例SSH端口连通性 ansible.builtin.wait_for: host: "{{ ec2_access_ip }}" port: 22 timeout: 300
注意:
instances是数组结构,如果单次启动多台EC2实例,仅需调整索引序号(从0开始计数),就能获取对应实例的公网IP。
内容的提问来源于stack exchange,提问作者Srivi
相关产品推荐
相关产品推荐

