Ansible常用命令、模块

  • A+

一、核心命令行工具

1. ansible:单机执行命令

用于在单个或多个远程主机上执行临时命令,格式为:

ansible <主机组> -m <模块> -a <参数> [其他选项]
  • 常用选项
    • -i <inventory>:指定主机清单文件(默认/etc/ansible/hosts)。
    • -u <用户名>:指定远程登录用户名。
    • -k:提示输入 SSH 密码。
    • -K:提示输入 sudo 密码。
    • -m <模块名>:指定使用的模块(默认command模块)。
    • -a <参数>:模块参数。
    • -v:显示详细输出(-vvv 更详细)。

示例

# 在 web 主机组中执行 df -h 命令
ansible web -m command -a "df -h"

# 在远程主机上创建目录(使用 file 模块)
ansible app_servers -m file -a "path=/data state=directory mode=0755"

2. ansible-playbook:执行 playbook 剧本

用于批量执行预定义的自动化任务(剧本以 YAML 格式编写):

ansible-playbook <剧本文件> [选项]
  • 常用选项
    • -i <inventory>:指定主机清单。
    • -f <forks>:设置并发数(默认 5)。
    • --syntax-check:检查剧本语法。
    • --list-hosts:列出要执行的主机。
    • --step:分步执行,每步确认。
    • -t <标签>:只执行指定标签的任务。

示例

# 执行部署应用的剧本
ansible-playbook deploy_app.yml

# 检查剧本语法
ansible-playbook --syntax-check site.yml

3. ansible-inventory:查看主机清单

用于查看或导出主机清单信息:

ansible-inventory [选项]
  • 常用选项
    • -i <inventory>:指定清单文件。
    • --list:以 JSON 格式列出所有主机组和主机。
    • --host <主机名>:显示指定主机的详细信息。

示例

# 查看默认清单的 JSON 格式
ansible-inventory --list

# 查看主机 web01 的变量
ansible-inventory --host web01

4. ansible-vault:加密管理

用于加密剧本中的敏感信息(如密码):

ansible-vault [操作] <文件>
  • 常用操作
    • create:创建加密文件。
    • edit:编辑加密文件。
    • view:查看加密文件内容。
    • rekey:修改加密密码。

示例

# 加密剧本文件
ansible-vault encrypt deploy.yml

# 查看加密文件(需输入密码)
ansible-vault view secrets.yml

二、常用模块(-m参数)

1. 命令执行模块

command:执行命令(不支持 shell 语法,如$VAR、管道)

ansible all -m command -a "ls /tmp"

shell:执行 shell 命令(支持 shell 语法)

ansible db_servers -m shell -a "df -h | grep /data"

script:在远程主机执行本地脚本

ansible web -m script -a "/scripts/setup.sh"

2. 文件管理模块

file:管理文件或目录(创建、删除、权限等)

ansible app -m file -a "path=/config/app.conf state=file mode=0644 owner=app group=app"

copy:复制文件到远程主机

ansible web -m copy -a "src=/local/config.conf dest=/etc/app.conf mode=0644"

template:渲染模板文件(支持 Jinja2 变量)

ansible web -m template -a "src=app.conf.j2 dest=/etc/app.conf"

3. 软件包管理模块

yum/apt:安装、卸载软件包(根据系统选择)

ansible centos_servers -m yum -a "name=httpd state=installed"
ansible ubuntu_servers -m apt -a "name=nginx state=latest"

pip:管理 Python 包

ansible all -m pip -a "name=ansible state=latest"

4. 服务管理模块

service/systemd:管理系统服务

ansible web -m service -a "name=httpd state=started enabled=yes"
ansible all -m systemd -a "name=docker state=restarted"

5. 用户与权限模块

user:管理用户账户

ansible all -m user -a "name=deployer state=present shell=/bin/bash"

group:管理用户组

ansible all -m group -a "name=developers state=present"

三、实用技巧与扩展命令

1. 批量文件传输:ansible-pull

ansible-playbook相反,ansible-pull允许远程主机主动从 Git 等仓库拉取剧本并执行:

# 在远程主机执行本地仓库的剧本
ansible-pull -U git://github.com/playbooks/site.git site.yml

2. 查看命令历史:ansible-doc

用于查看模块文档和示例:

# 查看 file 模块的详细说明
ansible-doc file

# 查看所有模块列表
ansible-doc -l

3. 动态主机发现:ansible-galaxy

用于管理 Ansible 角色(roles)和集合(collections):

# 安装社区角色
ansible-galaxy install geerlingguy.apache

# 列出已安装的角色
ansible-galaxy list

四、常用命令组合示例

检查远程主机连通性

ansible all -m ping

批量部署应用代码

ansible-playbook -i /etc/ansible/hosts deploy.yml

在特定主机组中执行命令

ansible web_servers -m shell -a "free -h"

带变量执行剧本

ansible-playbook deploy.yml -e "app_version=1.2.3 env=prod"
Ansible常用命令、模块
xxx