如何在Ansible Automation Platform工作流中添加/更新清单主机?
解决方案
1. 结合API调用与meta: refresh_inventory刷新清单
如果通过AAP API在同一个剧本内更新了清单,必须在API调用后立即执行meta: refresh_inventory,强制Ansible重新加载清单数据,这样后续play就能识别到新添加的主机。示例任务:
- name: 通过AAP API将EC2主机加入目标清单 uri: url: "{{ aap_api_url }}/api/v2/hosts/" method: POST headers: Authorization: "Bearer {{ aap_api_token }}" body_format: json body: name: "{{ ec2_instance_name }}" inventory: "{{ target_inventory_id }}" variables: ansible_host: "{{ ec2_instance_public_ip }}" - name: 刷新清单使变更生效 meta: refresh_inventory
完成后,后续play即可直接指定新主机作为目标。
2. add_host+临时组实现同剧本跨play共享
若无需修改持久化清单,仅需在当前剧本内存中跨play共享主机,需将add_host添加的主机归入明确的临时组,后续play直接以该组为目标。示例:
- name: 创建EC2实例并获取IP amazon.aws.ec2_instance: # EC2创建参数(实例类型、镜像ID等) register: ec2_result - name: 将新主机加入临时组 add_host: name: "{{ ec2_result.instances[0].public_ip_address }}" groups: temp_ec2_hosts ansible_host: "{{ ec2_result.instances[0].public_ip_address }}" ansible_user: ec2-user # 根据EC2镜像调整远程用户 # 后续play直接针对临时组执行 - name: 配置新EC2主机 hosts: temp_ec2_hosts tasks: - name: 验证主机连通性 ping:
注意:该方式仅适用于同一个剧本内的多个play,工作流中跨独立剧本的步骤无法共享临时组数据。
3. AAP工作流添加"清单同步"步骤
若工作流拆分为多个独立剧本(创建EC2的剧本+配置剧本),可在两个剧本步骤之间添加**"清单同步"**操作(选择目标清单执行同步)。第一个剧本通过API更新清单后,清单同步步骤会让AAP重新加载清单,确保第二个剧本能识别到新主机。
关键注意事项
add_host仅作用于当前剧本的内存空间,跨剧本的工作流步骤必须依赖持久化清单+刷新/同步操作。- 你之前遇到的
no host matched问题,大概率是后续play的hosts字段未指向add_host添加的主机名或临时组。 - Ansible默认在剧本启动时仅加载一次清单,中途更新清单后必须通过
meta: refresh_inventory手动触发刷新,否则后续play无法读取到变更。
内容的提问来源于stack exchange,提问作者jeremywat
相关产品推荐
相关产品推荐

