You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 04:45:06