Ansible-Playbook 剧本编写

目录

前言:

[一.Playbook 的结构](#一.Playbook 的结构)

[二.Ansible Playbook 示例](#二.Ansible Playbook 示例)

[三.命令行运行 Playbook](#三.命令行运行 Playbook)

四.变量与引用

[五.条件判断 when](#五.条件判断 when)

六.迭代:使用with_item或loop命令

[七.Templates 模块](#七.Templates 模块)

1.创建jinja的模板文件(.j2)

2.定义变量并在主机清单中指定

3.playbook实例

八.Tags模块

[九.Roles 模块](#九.Roles 模块)

[1.Roles 概念](#1.Roles 概念)

[2.roles 内各目录含义解释](#2.roles 内各目录含义解释)

[3.在一个 playbook 中使用 roles 的步骤:](#3.在一个 playbook 中使用 roles 的步骤:)

[3.1.创建以 roles 命名的目录:](#3.1.创建以 roles 命名的目录:)

3.2.创建全局变量目录(可选):

[3.3.在 roles 目录中分别创建以各角色名称命令的目录,如 httpd、mysql:](#3.3.在 roles 目录中分别创建以各角色名称命令的目录,如 httpd、mysql:)

3.4.在每个角色命令的目录中分别创建files、handlers、tasks、templates、meta、defaults和vars目录,用不到的目录可以创建为空目录,也可以不创建:

[3.5.在每个角色的 handlers、tasks、meta、defaults、vars 目录下创建 main.yml 文件,千万不能自定义文件名:](#3.5.在每个角色的 handlers、tasks、meta、defaults、vars 目录下创建 main.yml 文件,千万不能自定义文件名:)

[3.6.修改 site.yml 文件,针对不同主机去调用不同的角色:](#3.6.修改 site.yml 文件,针对不同主机去调用不同的角色:)

3.7.运行ansible-playbook:

4.案例

4.1.创建项目目录

4.2.编写http模块

4.3.编写mysql模块

4.4.编写php模块

4.5.编写roles模块

总结:

前言:

前面讲解了关于Ansible的基础概念和相关的命令操作,今天我将讲解关于Ansible-Playbook剧本编写的相关模块及命令。

一.Playbook****的结构

Ansible 的 Playbook 是一个包含多个 Play 的 YAML 文件,每个 Play 负责对指定的 主机组 执行一系列的任务。Playbook 通常由以下几部分组成:
Tasks :每个任务会调用一个模块来在目标主机上执行操作。
Variables :通过定义和使用变量,使 Playbook 更具灵活性和可重用性。
Templates :通过 Jinja2 模板动态生成配置文件。
Handlers :用于响应任务执行后的变更( notify 触发)。
Roles :把多个任务、变量、模板、文件、处理程序组织成模块化结构,便于复用。

二.Ansible Playbook****示例


三.命令行运行****Playbook

在运行 Playbook 时,可以使用一些常用参数来调整执行行为:

四.变量与引用

变量在 Playbook 中非常有用,它们可以通过 vars 或命令行进行定义

在命令行中,变量也可以通过'-e'参数传递

五.条件判断when

在 Ansible 中,提供的唯一一个通用的条件判断是 when 指令,当 when 指令的值为 true 时,则该任务执行,否则不执行该任务
比如:
根据主机的 IP 地址来执行任务:

或者根据主机名:

六.迭代:使用with_item或loop命令


七.Templates****模块

Jinja 是基于 Python 的模板引擎。 Template 类是 Jinja 的一个重要组件,可以看作是一个编译过的模板文件,用来产生目标文本,传递Python 的变量给模板去替换模板中的标记。
Jinja2 模板引擎在 Ansible 中用来动态生成文件。例如,在配置 Apache 时,可以使用模板文件来替换动态值。

1.创建jinja的模板文件(.j2)

2.定义变量并在主机清单中指定

3.playbook实例


八.Tags模块

Tags 允许你指定只执行某些特定任务。通过命令行传入 -- tags 参数来执行带有特定标签的任务。

使用参数tags:

九.Roles****模块

1.Roles****概念

Roles 数据中心有各种不同类型的主机。如 web 服务器、数据库服务器,基于开发环境的服务器。随着
时间的推移,具有处理所有这些情况的任务和人员的 Ansible playbook 将变得庞大而复杂。
1 )角色允许将复杂的剧本组织成独立的、更小的剧本和文件
2 )角色提供了一种从外部文件加载任务、处理程序和变量的方法
3 )角色也可关联和引用静态的文件和模板
4 )角色可以编写成满足普通用途需求,并且能被重复利用
Ansible 为了层次化、结构化地组织 Playbook ,使用了角色( roles ), roles 可以根据层次型结构自动装载变量文件、task 以及 handlers 等。简单来讲, roles 就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include 它们。 roles 一般用于基于主机构建服务的场景中,但也可以用于构建守护进程等场景中。

2.roles****内各目录含义解释

files: 用来存放由 copy 模块或 script 模块调用的文件。
templates: 用来存放 jinjia2 模板, template 模块会自动在此目录中寻找 jinjia2 模板文件。
tasks: 此目录应当包含一个 main.yml 文件,用于定义此角色的任务列表,此文件可以使用
include 包含其它的位于此目录的 task 文件。
handlers: 此目录应当包含一个 main.yml 文件,用于定义此角色中触发条件时执行的动作。
vars: 此目录应当包含一个 main.yml 文件,用于定义此角色用到的变量。
defaults: 此目录应当包含一个 main.yml 文件,用于为当前角色设定默认变量。
meta: 此目录应当包含一个 main.yml 文件,用于定义此角色的特殊设定及其依赖关系。
Roles是将 Playbook 组织成模块化的结构,使其易于管理和重用。每个 Role 都有一套预定义的目录结构:

3.在一个playbook中使用roles的步骤**:**

3.1.创建以 roles 命名的目录:

3.2.创建全局变量目录(可选):

3.3.在 roles 目录中分别创建以各角色名称命令的目录,如 httpd、mysql:

3.4.在每个角色命令的目录中分别创建files、handlers、tasks、templates、meta、defaults和vars目录,用不到的目录可以创建为空目录,也可以不创建:

3.5.在每个角色的 handlers、tasks、meta、defaults、vars 目录下创建 main.yml 文件,千万不能自定义文件名:

3.6.修改 site.yml 文件,针对不同主机去调用不同的角色:

3.7.运行ansible-playbook:

4.案例

4.1.创建项目目录

4.2.编写http模块

4.3.编写mysql模块

4.4.编写php模块

4.5.编写roles模块

总结:

今天主要讲了关于ansible-playbook剧本编写的一些相关的模块和具体编写部署流程,希望对读者们有所帮助!

相关推荐
芷栀夏14 小时前
飞牛NAS怎么部署Immich?家庭照片自动备份与远程访问教程
服务器·nginx·ansible
悠然南风11 天前
Ansible常见模块总结及LDAP Role 编写与调试
ansible
祺风挽楠20 天前
ansible编辑
网络·ansible
芳心粽伙饭20 天前
Ansible课后作业
ansible
烁34722 天前
Ansible初识
ansible
烁34722 天前
Ansible安装部署调试
ansible
烁34722 天前
Ansible命令
ansible
小义_22 天前
【Ansible】(三)基础配置与连接设置
云原生·ansible
炸炸鱼.1 个月前
Ansible 企业级实战:Playbook 与 Roles 完全指南
网络·ansible
风曦Kisaki1 个月前
# 自动化运维Day03:Ansible模块进阶(setup,debug),四种常用变量,进阶语法;Ansible Roles(角色)
运维·自动化·ansible