GitHub

模块参考

anx 内置 6 个声明式模块,覆盖命令执行、文件分发与回收。

一览

模块说明
shell: <cmd>经远端默认 shell 执行;register 后可取 rc / stdout / stderr
copy: {src, dest, mode}上传本地文件(SFTP),按 SHA-256 幂等
template: {src, dest, mode}本地渲染 minijinja 模板后上传
file: {path, state, mode}directory(递归创建)/ absent(递归删除)/ touch
fetch: {src, dest}拉取远端文件到本地
debug: {msg}打印插值后的消息

shell

- name: 安装 nginx
  shell: apt-get install -y nginx
  become: true

命令经远端默认 shell 执行(Linux 通常是用户登录 shell,Windows OpenSSH 是 cmd/PowerShell)。shell 任务默认报告 changed,只读检查请配 changed_when: "false"

copy

- name: 上传静态文件
  copy:
    src: ./index.html
    dest: /opt/app/index.html
    mode: "0644"          # 八进制字符串;Windows 受控端请省略

按 SHA-256 做幂等检测:远端内容一致时跳过上传报告 ok; 权限不一致会修正并报告 changed

template

- name: 渲染配置
  template:
    src: ./app.conf.j2
    dest: "{{ app_root }}/app.conf"
    mode: "0644"

控制端本地用 minijinja(Jinja2 语法)渲染 src 模板后上传,变量上下文与任务相同。渲染采用 strict 模式:引用未定义变量会直接报错而不是悄悄输出空串。

file

- name: 确保发布目录存在
  file:
    path: "{{ app_root }}/releases"
    state: directory      # directory / absent / touch
    mode: "0755"
state行为
directory逐级创建目录(mkdir -p 语义),已存在则 ok
absent删除文件或递归删除目录;不存在则 ok
touch不存在则创建空文件

fetch

- name: 收集日志
  fetch:
    src: /var/log/nginx/error.log
    dest: ./logs/         # 以 / 结尾或已是目录时,存为 ./logs/<host>/<文件名>
多主机 play 中请把 dest 写成目录(以 / 结尾),让每台主机各自落到 <host>/ 子目录;否则多主机会写同一个本地文件,相互覆盖。

debug

- name: 输出
  debug:
    msg: "{{ inventory_hostname }} => {{ nginx_status.stdout }}"

本地打印插值后的消息,不连接远端、永远报告 ok。

Windows 受控端

shell 经 Windows OpenSSH 默认 shell(cmd/PowerShell)执行;copy / fetch 走 SFTP 正常工作;mode 权限位请省略;不要使用 become