- 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"
