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 的语法。
  • 引号使用:当值包含特殊字符(如冒号、空格等)时,要用引号,避免解析错误。

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

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

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


相关推荐
yuxb7327 分钟前
Ansible 学习笔记:变量事实管理、任务控制与文件部署
linux·运维·笔记
中草药z40 分钟前
【自动化测试】Selenium详解-WebUI自动化测试
前端·功能测试·selenium·自动化·html·web·测试
岚天start1 小时前
Linux sar命令详细使用指南
linux·运维·服务器·负载·sar·磁盘io·sysstat
遇见火星1 小时前
Jenkins全链路教程——Jenkins调用Maven构建项目
运维·jenkins·maven
wanhengidc5 小时前
当云手机出现卡顿怎么办?
运维·服务器·安全·智能手机
双翌视觉7 小时前
机器视觉的磁芯定位贴合应用
数码相机·自动化·机器视觉
寻道模式10 小时前
【运维心得】三步10分钟拆装笔记本键盘
运维·计算机外设·笔记本
焄塰11 小时前
Ansible 管理变量和事实
学习·centos·ansible
炫友呀11 小时前
Centos 更新/修改宝塔版本
linux·运维·centos
闻道且行之11 小时前
嵌入式|VNC实现开发板远程Debian桌面
运维·debian·嵌入式