EDA 自动化运维:Ansible + Python 批量管理 EDA 主机

EDA 环境几十台主机,逐台 SSH 是灾难:装个依赖要登三十台机器,改个配置要确认三十次,漏一台就是隐患。自动化就是把重复操作写成代码,一次写好,到处运行。这篇讲 Ansible + Python 在 EDA 运维里的实际用法。

一、Ansible 入门:三样东西

Ansible 不需要在被管主机上装 agent,靠 SSH 就行,对 EDA 这种“别动我生产机”的环境很友好。就三样东西:inventory(主机清单,按组分,比如仿真组、license 组、存储组)、playbook(要干什么,用 YAML 写)、ad-hoc 命令(临时查一次)。

# 临时命令:看所有仿真主机的时间和磁盘
ansible simfarm -m shell -a "date; df -h /eda | tail -1"

# 看某台主机缺不缺库
ansible simfarm -m shell -a "ldconfig -p | grep libnsl || echo MISSING"

二、批量装环境:playbook 实战

# eda-base.yml:新主机一键打底
- hosts: simfarm
  become: yes
  tasks:
    - name: 装 EDA 依赖库
      yum:
        name:
          - libXScrnSaver
          - libnsl
          - libX11
        state: present

    - name: 发 modulefile
      copy:
        src: files/modules/
        dest: /eda/modules/
        owner: edaops
        mode: "0644"

    - name: 配 NTP
      service:
        name: chronyd
        state: started
        enabled: yes

新主机上线就是一条命令:ansible-playbook eda-base.yml。装完立刻跑验证 playbook,确认依赖、modulefile、NTP 都到位,再交出去。主机配置从“人肉操作”变成“代码执行”,结果可重复、可审计。

三、批量巡检:每天自动跑

巡检脚本化之后,定时任务每天跑一遍:磁盘、内存、关键进程、license daemon、时间同步,任何一项异常就告警。巡检结果写进日志,出了问题先翻巡检记录,多数故障在爆发前就有征兆。

# 巡检 playbook 每天凌晨跑,结果汇总到运维邮箱
ansible-playbook check-eda.yml --extra-vars "report_to=ops@example.com"

# 只看异常的主机
ansible simfarm -m shell -a "systemctl is-active lmgrd || echo DOWN" \
  | grep -B1 DOWN

四、Python 胶水:把工具串起来

Ansible 管“在每台机器上做什么”,Python 管“把各处数据拼成结论”。最常见的三件套:解析 lmstat 算 license 占用率,解析 bqueues 算队列积压,解析回归日志算通过率。拼成日报,超阈值就发告警。

# 每日巡检汇总(示意):license 占用 + 队列积压
import subprocess

def license_usage():
    out = subprocess.check_output(
        ["lmstat", "-a", "-c", "27000@lic-server"], text=True)
    worst = ("", 0.0)
    for line in out.splitlines():
        if "licenses in use" in line:
            parts = line.split()
            used = int(parts[parts.index("of") + 3])
            total = int(parts[parts.index("of") + 1])
            if total and used / total > worst[1]:
                worst = (line.split()[2], used / total)
    return worst

feature, ratio = license_usage()
print(f"最紧张的 license:{feature},占用率 {ratio:.0%}")
if ratio > 0.85:
    print("需要告警:占用率超过 85%")

五、规范:自动化本身也要管起来

  • playbook 进 git:改动可审计、可回滚,谁改了什么一目了然。
  • 变更先 dry-run:ansible-playbook --check 先看会改什么,确认了再真正执行。
  • 敏感信息走 vault:密码和密钥别写进 playbook,用 Ansible Vault 或者系统保险库。
  • 分批执行:先在一台机器上跑,通过了再全量,别一次改三十台。

自动化的目标不是少干活,是把活干得一样。同一份 playbook,今天跑和下个月跑,结果应该一模一样——这才是运维的确定性。

发表回复

后才能评论