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

Ansible自动化运维实战--yaml的使用和配置(7/8)

文章目录

    • 一、YAML 基本语法
      • 1.1. 缩进
      • 1.2. 注释
      • 1.3. 列表
      • 1.4. 字典
    • 二、Ansible 中 YAML 的应用
      • 2.1. Ansible 剧本(Playbooks)
      • 2.2. 变量定义
      • 2.3. 角色(Roles)
      • 2.4. Inventory 文件
      • 2.5. 数据类型
      • 2.6. 引用变量

在 Ansible 里,YAML(YAML Ain’t Markup Language)是一种常用的数据序列化格式,主要用来编写 Ansible 的剧本(playbooks)、角色(roles)和变量文件。下面为你详细讲解 Ansible 中 YAML 的相关知识。

一、YAML 基本语法

1.1. 缩进

YAML 依靠缩进来表示数据的层次结构,通常采用空格进行缩进,而不能使用制表符。缩进的空格数量并不固定,但同层级的元素必须保持相同的缩进量。
示例:

# 一个简单的字典结构
person:
  name: John
  age: 30

1.2. 注释

在 YAML 里,使用#来添加注释,#之后同一行的内容都会被视作注释。
示例:

# 这是一个注释
person:
  name: John  # 人的姓名
  age: 30     # 人的年龄

1.3. 列表

列表以-开头,后面跟列表元素,每个元素占一行。
示例:

fruits:
  - apple
  - banana
  - orange

1.4. 字典

字典由键值对构成,键和值之间用冒号:分隔。
示例:

person:
  name: John
  age: 30
  address:
    city: New York
    street: 123 Main St

二、Ansible 中 YAML 的应用

2.1. Ansible 剧本(Playbooks)

Ansible 剧本是用 YAML 编写的,用于定义一系列要在远程主机上执行的任务。
示例:

---
- name: 安装并启动Apache服务
  hosts: web_servers  # 指定目标主机组
  become: yes  # 使用root权限执行任务
  tasks:
    - name: 安装Apache
      apt:
        name: apache2
        state: present  # 确保Apache已安装
    - name: 启动Apache服务
      service:
        name: apache2
        state: started  # 确保Apache服务已启动

解释:

  • – -:YAML 文件的起始标志。
  • name:剧本或任务的描述信息。
  • hosts:指定要执行任务的目标主机组。
  • become:表示使用 root 权限执行任务。
  • tasks:包含一系列要执行的任务。
  • apt 和 service:Ansible 的模块,分别用于管理软件包和服务。

2.2. 变量定义

在 Ansible 中,可以在 YAML 文件里定义变量,然后在剧本中引用这些变量。
示例:

# vars.yml
web_package: apache2
# playbook.yml
---
- name: 安装Web服务
  hosts: web_servers
  become: yes
  vars_files:
    - vars.yml  # 引入变量文件
  tasks:
    - name: 安装Web服务
      apt:
        name: "{{ web_package }}"  # 引用变量
        state: present

解释:

  • vars_files:用于引入包含变量定义的 YAML 文件。
  • {{ web_package }}:使用双花括号引用变量。

2.3. 角色(Roles)

Ansible 角色是组织和复用剧本的一种方式,角色的文件结构和配置通常也使用 YAML 文件。
示例角色目录结构:

roles/
  └── web_server/
      ├── tasks/
      │   └── main.yml  # 角色的主要任务
      ├── handlers/
      │   └── main.yml  # 角色的处理程序
      ├── vars/
      │   └── main.yml  # 角色的变量
      └── defaults/
          └── main.yml  # 角色的默认变量

roles/web_server/tasks/main.yml 示例:

- name: 安装Web服务
  apt:
    name: "{{ web_package }}"
    state: present

注意事项

  • YAML 对大小写敏感,所以要保证键和值的大小写一致。
  • 编写 YAML 文件时,要注意缩进的正确性,否则会导致解析错误。
  • 在引用变量时,使用双花括号 {{ }} 来包裹变量名。

2.4. Inventory 文件

Inventory 文件定义了 Ansible 管理的主机和主机组,也能用 YAML 格式编写。

all:
  children:
    web_servers:
      hosts:
        web1.example.com:
        web2.example.com:
    db_servers:
      hosts:
        db1.example.com:

解释:

  • all:表示所有主机的顶级组。
  • children:定义子组。
  • hosts:列出属于该组的主机。

2.5. 数据类型

  • 字符串:可不用引号,若包含特殊字符则需引号。
string1: Hello, World!
string2: "Hello, 'World'!"
  • 数字:直接写数字,整数或浮点数都行。
integer: 42
float: 3.14
  • 布尔值:用true或false表示。
is_active: true
  • 列表:用短横线加空格开头表示列表元素。
fruits:
  - apple
  - banana
  - orange
  • 字典:键值对集合。
person:
  name: John
  age: 30
  city: New York

2.6. 引用变量

在 Ansible 的 YAML 文件里,可通过{{ variable_name }}引用变量。

- name: Print a variable
  debug:
    msg: "The value of my_variable is {{ my_variable }}"

注意事项

  • 语法检查:可使用ansible-playbook --syntax-check playbook.yml命令检查 Playbook 的语法。
  • 引号使用:当值包含特殊字符(如冒号、空格等)时,要用引号,避免解析错误。

在这里插入图片描述


人的脆弱和坚强都超乎了自己的想象。
有时候可能脆弱的一句话就泪流满面,
有时候你发现自己咬着牙已经走过了很长的路…



http://www.kler.cn/a/520842.html

相关文章:

  • 【Redis】缓存+分布式锁
  • 【YOLOv11改进- 主干网络】YOLOv11+MobileNetV3(2019): 更快,更精准;
  • 2. Java-MarkDown文件解析-工具类
  • Verilog中if语句和case语句综合出的电路区别
  • 开源音乐管理软件Melody
  • 【Python实现机器遗忘算法】复现2020年顶会CVPR算法Selective Forgetting
  • 企业知识管理平台的对比分析与优化策略探讨
  • 蓝桥杯模拟算法:蛇形方阵
  • cloc下载和使用
  • C#新语法
  • ES filter和post_filter的区别
  • IDEA全局搜索Ctrl+Shift+F失效
  • vim的特殊模式-可视化模式
  • 超市数字化落地:RWA + 智能体赋能实体零售数字化
  • 2025美赛MCM数学建模A题:《石头台阶的“记忆”:如何用数学揭开历史的足迹》(全网最全思路+模型)
  • Ubuntu Server 安装 XFCE4桌面
  • leetcode152-乘积最大的子数组
  • Forsaken喜欢数论(线性筛)
  • H266/VVC 量化编码中量化矩阵 QM 技术
  • 是否参加26年冬奥会?30岁羽生结弦:没有重返赛场打算
  • 小A的回文串
  • 无耳科技 Solon v3.0.7 发布(2025农历新年版)
  • ChatGPT从数据分析到内容写作建议相关的46个提示词分享!
  • 【S32K3 RTD LLD篇7】K344中心对齐PWM中心点触发ADC BCTU采样
  • 2025MCM美国大学生数学建模竞赛B题-可持续旅游管理思路详解+建模论文+源代码
  • C# 拖入文件 只能拖入txt文件