Ansible aws_rds插件构建RDS清单时如何给ansible_host追加Endpoint后缀
可行实现方案
方案1:直接通过aws_rds插件内置compose字段构造(最推荐)
aws_rds插件默认已返回endpoint(单实例访问端点)、cluster_endpoint(集群写入端点)、reader_endpoint(集群读取端点)等属性,无需额外调用接口,配合原生支持的compose配置项,可在生成资源清单时动态拼接主机变量,你可以直接修改现有inventory配置如下:
plugin: aws_rds regions: - xx-xxxx-x include_clusters: true keyed_groups: - key: tags.Environment prefix: "tag_Environment_" separator: "" # 新增以下配置动态构造ansible_host compose: # 优先取集群端点拼接后缀,单实例则取实例端点拼接,也可以按你的需求自定义拼接规则 ansible_host: >- cluster_endpoint ~ '.cluster-xxxxxxxxxx.xx-xxxx-x.rds.amazonaws.com' if cluster_endpoint is defined else endpoint ~ '.xxxxxxxxxx.xx-xxxx-x.rds.amazonaws.com'
如果你的后缀是全局固定值,也可以直接拼接主机名:
compose: ansible_host: inventory_hostname ~ '.cluster-xxxxxxxxxx.xx-xxxx-x.rds.amazonaws.com'
方案2:在group_vars中用Jinja2模板拼接
如果需要按环境分组统一配置后缀,直接在对应环境的group_vars文件(比如group_vars/tag_Environment_prod)中添加如下配置即可:
ansible_host: "{{ inventory_hostname }}.cluster-xxxxxxxxxx.xx-xxxx-x.rds.amazonaws.com"
如果不同环境的后缀不同,可以把后缀定义为分组变量单独维护:
# group_vars/tag_Environment_prod文件内容 rds_suffix: ".cluster-xxxxxxxxxx.xx-xxxx-x.rds.amazonaws.com" ansible_host: "{{ inventory_hostname }}{{ rds_suffix }}"
方案3:后处理生成的资源清单(适用于复杂自定义场景)
如果以上配置无法满足你的特殊逻辑,可以先通过ansible-inventory命令导出清单为JSON格式,再写简单的Python/Shell脚本批量修改ansible_host值后再使用。
示例导出命令:ansible-inventory -i your_rds_inventory_file.yml --list --export > rds_inventory.json
修改完成后即可通过-i rds_inventory.json调用该清单执行 playbook。
内容的提问来源于stack exchange,提问作者naeroy
相关产品推荐
相关产品推荐

