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

文章目录

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

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

一、YAML 基本语法

1.1. 缩进

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

示例:

yaml 复制代码
# 一个简单的字典结构
person:
  name: John
  age: 30

1.2. 注释

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

示例:

yaml 复制代码
# 这是一个注释
person:
  name: John  # 人的姓名
  age: 30     # 人的年龄

1.3. 列表

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

示例:

yaml 复制代码
fruits:
  - apple
  - banana
  - orange

1.4. 字典

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

示例:

yaml 复制代码
person:
  name: John
  age: 30
  address:
    city: New York
    street: 123 Main St

二、Ansible 中 YAML 的应用

2.1. Ansible 剧本(Playbooks)

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

示例:

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 文件里定义变量,然后在剧本中引用这些变量。

示例:

yaml 复制代码
# vars.yml
web_package: apache2
yaml 复制代码
# 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 文件。

示例角色目录结构:

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

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

yaml 复制代码
- name: 安装Web服务
  apt:
    name: "{{ web_package }}"
    state: present

注意事项

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

2.4. Inventory 文件

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

yaml 复制代码
all:
  children:
    web_servers:
      hosts:
        web1.example.com:
        web2.example.com:
    db_servers:
      hosts:
        db1.example.com:

解释:

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

2.5. 数据类型

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

2.6. 引用变量

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

yaml 复制代码
- name: Print a variable
  debug:
    msg: "The value of my_variable is {{ my_variable }}"

注意事项

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

人的脆弱和坚强都超乎了自己的想象。

有时候可能脆弱的一句话就泪流满面,

有时候你发现自己咬着牙已经走过了很长的路...


相关推荐
讯捷蓝达2 小时前
戴尔R720xd服务器卡死在 “Configuring Memory...Done“,换了内存还是卡?问题根本不在内存
运维·服务器
爱和冰阔落5 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
lisw055 小时前
基于神经网络的机器人导航系统的设计与执行!
神经网络·机器人·自动化
lisanmengmeng5 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
严肃小白兔5 小时前
Cloudflare 更新 API Token 管理:从最小权限到自动化凭据安全
网络·安全·自动化
Android系统攻城狮6 小时前
Linux FFmpeg深度解析之av_write_frame调用流程与实战(三十三)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
上火的金鱼妹6 小时前
k8s生产实际问题排查(网关,数据库读写等)
运维·服务器
孙克旭_6 小时前
k8s基础组件与创建资源
运维·docker·容器·kubernetes
2601_968793146 小时前
Python Requests 轻量自动化:无需浏览器,实现真人级账号浏览模拟
开发语言·python·自动化
孙克旭_6 小时前
云原生基础之Containerd容器运行时
运维·云原生