You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible自动化执行不同VM上Docker容器命令的配置问题

实现Ansible按虚拟机分组执行Docker容器命令

我想自动化一个Ansible Playbook,让它在部署于不同服务器的Docker容器中执行指定命令。比如有两台VM(vm1和vm2),需要在vm1上执行command 1和command 2,在vm2上执行command 3和command 4。当前的循环逻辑不对,得修改成每台虚拟机逐个执行对应命令。现有配置如下:

现有配置文件

commands.yml

commands:
  - group: vm1
    commands:
     - command 1
     - command 2
  - group: vm2
    commands:
     - command 3
     - command 4

Ansible Playbook(当前版本)

- name: Deploy flex Docker image on GCP VM
  hosts: gcp_vms
  become: yes
  gather_facts: false
  vars_files:
    - vars.yml

  tasks:

    - name: Read commands from configuration file
      include_vars:
        file: commands.yml
        name: command_list

    - name: Run the commands
      community.docker.docker_container_exec:
        container: flex
        command: "{{ item.command }}"             
      loop: "{{ [command_list.commands].commands }}"

inventory.ini

[gcp_vms]
vm1 ansible_host=ip
vm2 ansible_host= ip
; vm3 ansible_host= ip

解决方案

要实现按虚拟机分组执行对应命令,需要调整循环逻辑,匹配当前主机的分组命令,具体修改如下:

修改后的Ansible Playbook

- name: Deploy flex Docker image on GCP VM
  hosts: gcp_vms
  become: yes
  gather_facts: false
  vars_files:
    - vars.yml

  tasks:

    - name: Read commands from configuration file
      include_vars:
        file: commands.yml
        name: command_list

    - name: Run commands for current VM
      community.docker.docker_container_exec:
        container: flex
        command: "{{ item }}"             
      loop: "{{ command_list.commands | selectattr('group', 'equalto', inventory_hostname) | map(attribute='commands') | first }}"

逻辑说明

  1. 筛选当前主机的命令组:用selectattr('group', 'equalto', inventory_hostname)从command_list.commands中选出和当前主机名(inventory_hostname)匹配的组
  2. 提取命令列表:用map(attribute='commands')取出该组下的命令数组,再用first获取数组内容(因为筛选后只会有一个匹配的组)
  3. 循环执行命令:直接循环命令列表,每个item就是要执行的命令,无需再取item.command

这样Playbook在vm1上运行时,只会执行command 1和command 2;在vm2上运行时,只会执行command 3和command 4,实现了按虚拟机逐个执行对应命令的需求。

内容的提问来源于stack exchange,提问作者believer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 11:27:12