模块参考
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。