Ansible 上的主机中有多个容器

Ansible 上的主机中有多个容器

我编写了一个剧本,用于在主机内创建容器。我的想法是为每个主机创建多个容器。我尝试使用 host.ini 文件将主机划分为一个组,并将每个容器划分为组内的 Ansible 主机。您知道如何构造主机文件以使用变量 ansible_host 来命名用于创建它们的剧本中的容器吗?

我的主机文件:

-----

[host.machine.1]
machine.1.container-1
machine.1.container-2
machine.1.container-3

[host.machine.2]
machine.2.container-1
machine.2.container-2
machine.2.container-3

[host.machine.3]
machine.3.container-1
machine.3.container-2
machine.3.container-3

我的功能剧本:

---
- name: Create container
  hosts: host.machine.1:host.machine.2:host.machine.3
  vars:
    agent_name: "{{ container_name }}"

  tasks:
   - name: Docker pull 
     command: docker pull container.image:latest

   - name: Docker volume 
     command: docker volume create agent_{{ container_name }}

   - name: Docker run 
     command: docker run -d -it --privileged --name agent-{{ container_name }} -e AGENT_NAME="{{ container_name }}"   --network network1 --cpus=8 --memory=32g --ipc=host -e TZ=CET docker-registry/container.image:latest

谢谢

答案1

创建一个列出每个主机的容器的变量

主机变量/主机1.yml

containers:
  - name: agent1
    image: docker-registry/container.image:latest
  - name: agent2
    image: docker-registry/container.image:latest
  - name: agent3
    image: docker-registry/container.image:latest

其他主机也一样

然后,在剧本中你可以循环遍历该列表

hosts: host1,host2,host3
tasks:
  - name: Docker volume 
    command: "docker volume create agent_{{ item.name }}"
    loop: {{ containers }}
  - name: Docker run 
    command: "docker run -d -it --privileged --name agent-{{ item.name }} -e AGENT_NAME=\"{{ item.name }}\"   --network network1 --cpus=8 --memory=32g --ipc=host -e TZ=CET {{ item.image }}"
    loop: "{{ containers }}"

或者,使用适当的模块

hosts: host1,host2,host3
tasks:
  - name: Docker volume 
    docker_volume:
      name: "agent_{{ item.name }}"
    loop: {{ containers }}
  - name: Docker run 
    docker_container:
      name: "agent-{{ item.name }}"
      image: "{{ item.image }}"
      privileged: yes
      volumes:
        - "agent_{{ item.name }}"
    loop: "{{ containers }}"

相关内容