【问题标题】:Use of hosts in ansible_ssh_common_argsansible_ssh_common_args 中主机的使用
【发布时间】:2022-10-06 00:39:29
【问题描述】:

我正在使用 aws_ec2.yml 查询 AWS 并创建我的库存。我已经按如下方式设置了清单文件的 vars 部分,以允许使用堡垒主机:

[dev:vars]
ansible_ssh_common_args=\"-o ProxyCommand=\\\"ssh -q username@1.2.3.4 -o IdentityFile=~/.ssh/keyfile -o Port=22 -W %h:%p\\\"\"
ansible_ssh_private_key_file=~/.ssh/keyfile
ansible_user=username

我想知道是否可以用来自aws_ec2.yml 本身的变量/主机名替换ansible_ssh_common_args 中的1.2.3.4,特别是另一个主机可以说tag_Name_dev_bastion。是否可以在 common_args 本身的清单文件中使用变量/主机名?

    标签: ssh ansible ansible-inventory


    【解决方案1】:

    已经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 中找到了我的答案

    【讨论】:

      猜你喜欢
      • 2020-12-16
      • 2020-09-01
      • 2016-12-03
      • 1970-01-01
      • 2017-05-01
      • 2017-09-08
      • 1970-01-01
      • 1970-01-01
      • 2015-04-12
      相关资源
      最近更新 更多