GitHub

Inventory 主机清单

inventory 描述受控主机、连接方式、分组与变量,默认文件名 inventory.yml(用 -i 指定其他路径)。

完整结构

inventory.yml
vars:                      # 全局变量(优先级最低)
  app_root: /opt/demo-app

hosts:
  web1:
    addr: 192.168.1.10
    user: deploy
    key_file: ~/.ssh/id_ed25519
    vars:
      role: frontend
  web2:
    addr: 192.168.1.11
    user: deploy
  db1:
    addr: 192.168.1.20
    port: 22022
    user: admin
    password: "changeme"          # 建议放在 vault 加密的文件里
    become_password: "changeme"

groups:
  web:
    hosts: [web1, web2]
    vars:
      nginx_port: 80
  db:
    hosts: [db1]

主机字段

字段说明缺省值
addr连接地址(IP 或域名)主机名本身
portSSH 端口22
user登录用户当前用户
key_file私钥路径(支持 ~ 展开)自动尝试 ssh-agent 与默认密钥
key_passphrase私钥口令
passwordSSH 密码认证
become_passwordsudo 密码(become 任务使用)无(用 sudo -n)
vars主机级变量{}

认证与主机密钥

认证按以下顺序尝试,命中即停止:password key_file → ssh-agent → ~/.ssh/id_{ed25519,ecdsa,rsa}

主机密钥按 known_hosts 校验:已知则校验、未知则自动记录(accept-new)、不匹配则拒绝连接并提示 可能存在中间人攻击。

主机选择 pattern

play 的 hosts 字段与命令行 -l/--limit 使用相同的 pattern 语法:

写法含义
all全部主机
web组内全部主机
web1单台主机
web1,db逗号分隔,主机与组可混用
pattern 匹配不到任何主机或组会直接报错退出(包括使用 -l 时 playbook 里的 hosts 拼写错误),不会静默跳过。

加密 inventory

含密码的 inventory 建议整体加密,加密后可直接被 anx run / ping / exec 使用:

anx vault encrypt inventory.yml
anx run site.yml -i inventory.yml --ask-vault-pass

详见 Vault 配置加密