通过 ansible 在 LXD 容器内运行任务

通过 ansible 在 LXD 容器内运行任务

尝试找出让 ansible 在容器内发挥其魔力的最佳方法。考虑过在每个容器中使用 ssh,但那取决于服务器。或者我必须通过代理,这似乎比必要的工作要多。再说一遍,我已经在创建容器、删除容器等了……我说的是使用 ansible 在容器内运行命令,而不是通过 lxc exec containername bash 来运行,我现在可以这样做。有人能找出最好的方法吗?

答案1

取自https://docs.ansible.com/ansible/latest/collections/community/general/lxc_container_module.html#examples

您可以尝试以下操作:

- name: Run a complex command within a "running" container
  community.general.lxc_container:
    name: test-container-started
    container_command: |
      apt-get update
      apt-get install -y curl wget vim apache2
      echo 'hello world.' | tee /opt/started
      if [[ -f "/opt/started" ]]; then
          echo 'hello world.' | tee /opt/found-started
      fi

答案2

community.general.lxc_container肯定已被弃用并且不支持 lxd,因为它指向 bin/lxc-create 硬编码,它不能只运行命令,也许命令只能在创建期间运行。

但仍然是 Ansible 中创建、停止和启动容器的唯一工作工具。

没有修复或者调整为lxd是有原因的。

还有另一种更简单的方法,请参阅这个官方 lxd 演示LXD 和 Ansible。简而言之,它基于连接类型从“ssh”更改为“lxd”。远程连接时需要额外的预配置。

#ansible.cfg
[defaults]
inventory = hosts.yml

#hosts.yml
all:
  vars:
    ansible_connection: lxd
    ansible_user: root
    ansible_become: no
  children:
    local:
      vars:
        ansible_lxd_remote: local
        ansible_lxd_project: demo
      hosts:
        c1:
        v1:
    yyy:
      vars:
        ansible_lxd_remote: tuxedo
      hosts:
        lxc-tuxedo-1:
    xxx:
      vars:
        ansible_connection: ssh
        ansible_user: ada
      hosts:
        alu-rpi:  

#demo.yml
- name: Setup apache
  hosts: all
  tasks:
    - name: install the apache package
      apt:
        name: apache2
        state: present

    - name: Make sure apache is running
      systemd:
        name: apache2.service
        state: started

# bash
ansible-playbook demo.yml -l yyy # lxd container via lxd connection
ansible-playbook demo.yml -l xxx # rasberry pi via ssh

相关内容