【问题标题】:Running Ansible playbooks on remote Vagrant box在远程 Vagrant box 上运行 Ansible 剧本
【发布时间】:2017-09-26 23:53:35
【问题描述】:

我有一台机器 (A),可以在各种主机上运行 Ansible playbook。这里没有安装 Vagrant。

我有另一台机器 (B),它的内存是我的 Vagrant 盒子的两倍。这里没有安装 Ansible。

我想使用 Ansible 对 Vagrant 盒子进行操作,就像对所有其他主机一样;也就是说,在 machineA 上运行 ansible-playbook,同时针对 machineB 上的虚拟化 Vagrant box。两者之间已经设置了 SSH 密钥。

这似乎是一个简单的用例,但鉴于鼓励使用 Vagrant 的内置 Ansible 配置程序,我无法在任何地方找到清楚的解释。可能吗? 也许是 SSH 隧道和端口转发技巧的某种组合?

【问题讨论】:

    标签: vagrant ansible ssh-tunnel


    【解决方案1】:

    事实证明这非常简单。 Vagrant 实际上根本不需要了解 Ansible。

    机器 A 上的 Ansible 库存:

    default ansible_host=machineB ansible_port=2222
    

    machineB 上的 Vagrantfile:

    Vagrant.configure("2") do |config|
      ...
      config.vm.network "forwarded_port", id: "ssh", guest: 22, host: 2222
      ...
    end
    

    id: "ssh" 是重要的部分,因为它会覆盖默认的 SSH 行为,即仅将 SSH 限制为来自本地主机的访客。

    $ ansible --private-key=~/.ssh/vagrant-default -u vagrant -m ping default
    default | SUCCESS => {
        "changed": false, 
        "ping": "pong"
    j }
    

    (请注意,Vagrant 私钥必须复制到 Ansible 主机并在命令行中指定)。

    【讨论】:

    • 在尝试使其正常工作时遇到了麻烦。 ansible_host 应该是 machineB 还是 machineA。同样在我的情况下,我的 vm 有一个主机名,所以我假设我会用主机名替换 'default'
    • 在库存中,ansible_host 通知 Ansible 到达目标的位置;所以它应该是 Vagrant 主机的主机名或 IP。 default 是我给我的 Vagrant 主机的 Ansible 别名(回想起来是个糟糕的名字)。端口 (2222) 决定了 Vagrant 来宾 VM 的目标。
    • 好的,谢谢。我的困惑是我在同一个盒子上运行 ansible 和目标 vm(用于测试 puproses)。所以在这种情况下 ansible_host 也是我的目标和 ansible 节点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    相关资源
    最近更新 更多