w网站链接如何做脚注/360网站推广费用
以下是 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 Namehosts: web_servers # 目标主机组(inventory 中定义)gather_facts: false # 是否收集系统信息(如内核版本)vars: # Play 级变量app_port: 8080
2. Task 定义
tasks:- name: Install Nginxapt: # 模块名称name: nginx # 参数:包名state: latest # 参数:状态(latest/present/absent)notify: # 触发 Handler- restart nginx- name: Copy Config Filecopy: # 模块名称src: /local/path/nginx.conf # 源文件dest: /etc/nginx/nginx.conf # 目标路径
3. Handler 定义
handlers:- name: restart nginx # Handler 名称service: # 模块名称name: nginxstate: reloaded
4. 变量(Variables)
- name: Use Variableshosts: allvars:user: alice # Play 级变量tasks:- name: Create Useruser:name: "{{ user }}" # 使用变量state: present
5. 条件判断(Conditionals)
- name: Check OShosts: alltasks:- name: Install Apache on CentOSyum:name: httpdstate: latestwhen: ansible_os_family == "CentOS" # 条件判断
6. 循环(Loops)
- name: Install Packageshosts: alltasks:- name: Add multiple packagesapt:name: "{{ item }}"state: presentloop: # 循环列表- vim- git- curl
三、常用模块
1. 文件操作
- name: Ensure directory existsfile:path: /tmp/mydirstate: directorymode: '0755'
2. 软件包管理
- name: Install package (Debian/Ubuntu)apt:name: nginxstate: latest- name: Install package (RedHat/CentOS)yum:name: httpdstate: latest
3. 服务管理
- name: Start serviceservice:name: nginxstate: startedenabled: yes # 开机自启
4. 模板渲染
- name: Generate config filetemplate:src: nginx.conf.j2 # Jinja2 模板文件dest: /etc/nginx/nginx.conf
四、高级语法
1. Blocks(错误处理)
- name: Handle errorsblock: # 块内任务统一处理错误- name: Task that might failcommand: /bin/falserescue: # 失败时执行- name: Rollbackdebug:msg: "Task failed!"always: # 无论成功/失败都执行- name: Cleanupdebug:msg: "Cleanup done"
2. Tags(选择性执行)
- name: Tagged Taskshosts: alltasks:- name: Task with tagdebug:msg: "Only run with --tags debug"tags: debugansible-playbook playbook.yml --tags debug # 仅执行带 debug 标签的任务
五、完整 Playbook 示例
---
- name: Deploy Web Applicationhosts: webserversbecome: yesvars:app_port: 8080tasks:- name: Update apt cacheapt:update_cache: yes- name: Install dependenciesapt:name:- git- python3state: latest- name: Clone repositorygit:repo: https://github.com/example/repo.gitdest: /var/www/app- name: Start applicationcommand: 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