已经2个月了,所以你现在可能已经解决了(我希望)......
但如果你还没有,我最近开始大量使用aws_ec2 动态库存,而这正是我对如何做到这一点感到困惑的地方。
因此,举例来说,我在公共子网中有一个带有单个堡垒 ec2 的 aws vpc,在私有子网中有一个网络服务器 ec2,要访问我需要从公共堡垒跳转的私有 ec2。
我还有一个名为inventory.aws_ec2.yml 的动态库存,
---
plugin: aws_ec2
regions:
- eu-west-1
filters:
tag:Group:
- bastion
- webserver_node
instance-state-name: running
keyed_groups:
- key: tags.Group
separator: ''
hostnames:
- network-interface.association.public-ip
- network-interface.addresses.private-ip-address
您可以使用以下方法获得很好的高级输出:
ansible-inventory inventory.aws_ec2.yml --list
此输出应包括清单返回的每个主机的一堆hostvars,以及主机组及其主机的概述。可爱的东西!
✨magic variables✨ 可以使用此信息
我们知道我们想要的数据在hostvars,所以我们可以走以下路线:
project/group_vars/webserver_node.yml
---
# SSH / ProxyJump
ansible_user: username
ansible_ssh_private_key_file: ~/.ssh/aws_demo_key
ansible_ssh_common_args: '-o ProxyCommand="ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -W %h:%p -q {{ ansible_user }}@{{ hostvars[groups["bastion"][0]]["public_ip_address"] }}"'
那么当你在webserver_node主机上运行playbook时,它会正确跳转!
希望这可以帮助!我从这个Serverfault answer 中找到了我的答案