使用 Ansible 的无 SSH LXC 容器

Ste*_*ras 1 lxc ansible

我是 ansible 的新手,我正在尝试在一些 lxc 容器上使用 ansible。我的问题是我不想在我的容器上安装 ssh。所以

我试过的:

我尝试使用这个连接插件,但它似乎不适
用于 ansible 2。在了解 chifflier 连接插件不起作用后,我尝试使用openstack 中的连接插件。

经过一些失败的尝试后,我深入研究了代码,并且我明白该插件没有我正在与之交谈的主机是一个容器的信息。(因为代码从未达到这一点

我当前的设置:{Ansbile 主机}---|ssh|---{vm}--|ansible 连接插件|---{container1}

我的 ansible.cfg:

[defaults]
connection_plugins = /home/jkarr/ansible-test/connection_plugins/ssh
inventory = inventory
Run Code Online (Sandbox Code Playgroud)

我的库存:

[hosts]
vm ansible_host=192.168.28.12

[containers]
mailserver physical_host=vm container_name=mailserver
Run Code Online (Sandbox Code Playgroud)

我的组变量:

ansible_host: "{{ physical_hostname }}"
ansible_ssh_extra_args: "{{ container_name }}"
ansible_user: containeruser
container_name: "{{ inventory_hostname }}"
physical_hostname: "{{ hostvars[physical_host]['ansible_host'] }}"
Run Code Online (Sandbox Code Playgroud)

我的测试手册:

- name: Test Playbook
  hosts: containers
  gather_facts: true
  tasks:
    - name: testfile
      copy:
        content: "Test"
        dest: /tmp/test
Run Code Online (Sandbox Code Playgroud)

输出是:

fatal: [mailserver]: UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname mailserver: No address associated with hostname\r\n", 
    "unreachable": true
}
Run Code Online (Sandbox Code Playgroud)

Ansible 版本为:2.3.1.0

那么我做错了什么?有小费吗?提前致谢!

更新 1:
根据eric 的回答,我现在正在使用这个连接插件。我更新了我的库存,它看起来像:

[hosts]
vm ansible_host=192.168.28.12

[containers]
mailserver physical_host=vm ansible_connection=lxc 
Run Code Online (Sandbox Code Playgroud)

运行我的剧本后,我采取了:

<192.168.28.12> THIS IS A LOCAL LXC DIR
fatal: [mailserver]: FAILED! => {
    "failed": true, 
    "msg": "192.168.28.12 is not running"
}
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为 192.168.28.12 是虚拟机,而容器称为邮件服务器。我还验证了容器正在运行。

还有为什么它说 192.168.28.12 是本地 lxc 目录?

更新 2:

我从剧本中删除了我的 group_vars、我的 ansible.cfg 和连接插件,我收到了这个错误:

<mailserver> THIS IS A LOCAL LXC DIR
fatal: [mailserver]: FAILED! => {
    "failed": true, 
    "msg": "mailserver is not running"
}
Run Code Online (Sandbox Code Playgroud)

Eri*_*ire 6

你应该看看这个lxc connection plugin。它可能适合您的需求。

编辑: lxc连接插件实际上是 Ansible 的一部分。

只需添加ansible_connection=lxc您的库存或组变量。