当前位置: 首页 > news >正文

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

以下是 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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/116189.html

相关文章:

  • 网络编程—TCP/IP模型(IP协议)
  • 若依系统弹窗父子页面传参数
  • 45.跳跃游戏 II
  • 网络编程—TCP/IP模型(数据链路层了解与知识补充)
  • DApp实战篇:前端技术栈一览
  • [ Redis ] | 初识Redis
  • 【数据结构】图的存储
  • ES使用聚合aggregations实战(自用:2025.04.07更新)
  • 铰链损失函数 Hinge Loss和Keras 实现
  • leetcode-代码随想录-哈希表-赎金信
  • Qt中的多种输出方式,信号与槽的基本使用
  • 场内期权和场外期权开户有什么区别?
  • 【学习笔记】Gymnasium入门(一)
  • 大模型:大模型部署Ollama和Dify
  • Python+AI提示词用贝叶斯样条回归拟合BSF方法分析樱花花期数据模型构建迹图、森林图可视化
  • 学透Spring Boot — 016. 魔术师 - Spring MVC Conversion Service 类型转换
  • SSL证书颁发机构有哪些呢
  • Mysql——DbUtils的使用
  • 二叉树——队列bfs专题
  • Docker容器中的ubuntu apt update报错 解决办法
  • 【58】编程技巧:单片机编程命名规范
  • Oracle数据库数据编程SQL<4.3 事务的补充内容(了解)>
  • 十、C++速通秘籍—多进程
  • 牛客春招刷题训练营 算法 Java 3月27日 杨辉三角的变形 计算日期到天数转换 而后单调
  • 详细介绍一下Vue3的实现原理?
  • Codecademy—— 交互式编程学习的乐园
  • leetcode215.数组中的第k个最大元素
  • intel-xpu-backend-for-triton绕过pytorch直接调用Unified-Runtime
  • 小程序31-wxml语法-setData() 修改数据
  • RTC实时时钟M41T11M6F国产替代FRTC4111S