以下是 Ansible YAML 基础语法与关键词 的详细指南,帮助你快速掌握 Playbook 编写规范和核心概念:
目录
- 一、Ansible Playbook 基础结构
- 1. YAML 文件基础
- 二、核心关键词
- 1. Play 定义
- 2. Task 定义
- 3. Handler 定义
- 4. 变量(Variables)
- 5. 条件判断(Conditionals)
- 6. 循环(Loops)
- 三、常用模块
- 1. 文件操作
- 2. 软件包管理
- 3. 服务管理
- 4. 模板渲染
- 四、高级语法
- 1. Blocks(错误处理)
- 2. Tags(选择性执行)
- 五、完整 Playbook 示例
- 六、运行 Playbook
- 七、常见错误与调试
- 1. 缩进错误
- 2. 模块参数错误
- 3. 调试模式
一、Ansible Playbook 基础结构
1. YAML 文件基础
---
# 最顶层的 --- 表示 YAML 文档开始
- name: Example Playbook # Play 名称
hosts: all # 目标主机(inventory 中定义)
become: yes # 是否提升权限(sudo)
tasks: # 任务列表
- name: Task 1 # 任务名称
debug: # 模块名称
msg: "Hello World" # 模块参数
二、核心关键词
1. Play 定义
- name: Play Name
hosts: web_servers # 目标主机组(inventory 中定义)
gather_facts: false # 是否收集系统信息(如内核版本)
vars: # Play 级变量
app_port: 8080
2. Task 定义
tasks:
- name: Install Nginx
apt: # 模块名称
name: nginx # 参数:包名
state: latest # 参数:状态(latest/present/absent)
notify: # 触发 Handler
- restart nginx
- name: Copy Config File
copy: # 模块名称
src: /local/path/nginx.conf # 源文件
dest: /etc/nginx/nginx.conf # 目标路径
3. Handler 定义
handlers:
- name: restart nginx # Handler 名称
service: # 模块名称
name: nginx
state: reloaded
4. 变量(Variables)
- name: Use Variables
hosts: all
vars:
user: alice # Play 级变量
tasks:
- name: Create User
user:
name: "{{ user }}" # 使用变量
state: present
5. 条件判断(Conditionals)
- name: Check OS
hosts: all
tasks:
- name: Install Apache on CentOS
yum:
name: httpd
state: latest
when: ansible_os_family == "CentOS" # 条件判断
6. 循环(Loops)
- name: Install Packages
hosts: all
tasks:
- name: Add multiple packages
apt:
name: "{{ item }}"
state: present
loop: # 循环列表
- vim
- git
- curl
三、常用模块
1. 文件操作
- name: Ensure directory exists
file:
path: /tmp/mydir
state: directory
mode: '0755'
2. 软件包管理
- name: Install package (Debian/Ubuntu)
apt:
name: nginx
state: latest
- name: Install package (RedHat/CentOS)
yum:
name: httpd
state: latest
3. 服务管理
- name: Start service
service:
name: nginx
state: started
enabled: yes # 开机自启
4. 模板渲染
- name: Generate config file
template:
src: nginx.conf.j2 # Jinja2 模板文件
dest: /etc/nginx/nginx.conf
四、高级语法
1. Blocks(错误处理)
- name: Handle errors
block: # 块内任务统一处理错误
- name: Task that might fail
command: /bin/false
rescue: # 失败时执行
- name: Rollback
debug:
msg: "Task failed!"
always: # 无论成功/失败都执行
- name: Cleanup
debug:
msg: "Cleanup done"
2. Tags(选择性执行)
- name: Tagged Tasks
hosts: all
tasks:
- name: Task with tag
debug:
msg: "Only run with --tags debug"
tags: debug
ansible-playbook playbook.yml --tags debug # 仅执行带 debug 标签的任务
五、完整 Playbook 示例
---
- name: Deploy Web Application
hosts: webservers
become: yes
vars:
app_port: 8080
tasks:
- name: Update apt cache
apt:
update_cache: yes
- name: Install dependencies
apt:
name:
- git
- python3
state: latest
- name: Clone repository
git:
repo: https://github.com/example/repo.git
dest: /var/www/app
- name: Start application
command: nohup python3 app.py --port {{ app_port }} &
六、运行 Playbook
ansible-playbook -i inventory.ini playbook.yml
• -i inventory.ini
:指定主机清单文件。
• --limit
:限制执行的主机范围(如 --limit web_servers
)。
• --check
:模拟执行(dry-run)。
• --tags
:仅执行带特定标签的任务。
七、常见错误与调试
1. 缩进错误
• 错误提示:syntax error: unexpected end of file
• 解决:确保 YAML 缩进使用 2 空格(不可用 Tab)。
2. 模块参数错误
• 错误提示:missing required arguments: name
• 解决:检查模块参数是否完整(参考官方文档)。
3. 调试模式
ansible-playbook playbook.yml -vvv # 增加详细输出(最多 3 个 v)
通过掌握这些基础语法和关键词,你可以快速编写 Ansible Playbook 实现自动化运维! 🚀
官方文档参考:Ansible Documentation