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

Ansible lineinfile模块批量禁用Nginx上游后端服务器时替换不生效的问题求助

Ansible lineinfile模块批量禁用Nginx上游后端服务器时替换不生效的问题求助

大家好,我现在遇到一个Ansible部署时的棘手问题,想请教下各位大佬。

我用Ansible部署应用时设置了serial: 4,每次同时处理4台应用服务器。部署前的预任务是要把这4台服务器在Nginx的upstream配置里禁用掉(给对应行加注释),但现在执行下来只有一台被成功禁用,完全达不到预期效果。

先给大家看下我的相关配置:

Inventory 配置

[nginx_api]
api1 ansible_host=x.x.y.1   LAN=10.x.y.1
api2 ansible_host=x.x.y.2   LAN=10.x.y.2
api3 ansible_host=x.x.y.3   LAN=10.x.y.3
api4 ansible_host=x.x.y.4   LAN=10.x.y.4

[app]
app1 ansible_host=x.x.x.1   LAN=10.x.x.1
app2 ansible_host=x.x.x.2   LAN=10.x.x.2
app3 ansible_host=x.x.x.3   LAN=10.x.x.3
app4 ansible_host=x.x.x.4   LAN=10.x.x.4
app5 ansible_host=x.x.x.5   LAN=10.x.x.5
...

Playbook 代码

- name: Deploy
  hosts: '{{ list_hosts }}'
  serial: 4
  pre_tasks:
    - name: Disable server in nginx upstream
      lineinfile:
        path: /etc/nginx/conf.d/upstream.conf
        regexp: '^        server {{ LAN }}:5001;'
        line: '        #server {{ LAN }}:5001;'
      delegate_to: "{{ item }}"
      with_items: "{{groups['nginx_api']}}"

Nginx Upstream 配置变化

执行前的上游配置:

upstream app {
  least_conn;
  server 10.x.x.1:5001;
  server 10.x.x.2:5001;
  server 10.x.x.3:5001;
  server 10.x.x.4:5001;
  server 10.x.x.5:5001;
  ...
}

执行后的实际结果(仅1台被注释):

upstream app {
  least_conn;
  server 10.x.x.1:5001;
  #server 10.x.x.2:5001;
  server 10.x.x.3:5001;
  server 10.x.x.4:5001;
  server 10.x.x.5:5001;
  ...
}

我预期的结果是同时注释掉4台目标应用服务器:

upstream app {
  least_conn;
  #server 10.x.x.1:5001;
  #server 10.x.x.2:5001;
  #server 10.x.x.3:5001;
  #server 10.x.x.4:5001;
  server 10.x.x.5:5001;
  ...
}

我自己猜测是因为serial:4让4台应用服务器同时执行这个预任务,每个任务都会去Nginx服务器上修改同一个upstream文件,多个进程同时读写文件导致了冲突,最后只有一个修改能成功生效。

想请教下,有没有办法既能保持serial:4的设置,又能让这4个禁用操作依次在Nginx服务器上执行,而不是并发?这样每个注释操作都能正确生效。

备注:内容来源于stack exchange,提问作者artful

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 12:20:28