Ansible YAML 基础语法与关键词 的详细指南

发布于:2025-04-07 ⋅ 阅读:(25) ⋅ 点赞:(0)

以下是 Ansible YAML 基础语法与关键词 的详细指南,帮助你快速掌握 Playbook 编写规范和核心概念:



一、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



网站公告

今日签到

点亮在社区的每一天
去签到