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剧本编写的一些相关的模块和具体编写部署流程,希望对读者们有所帮助!

相关推荐
hanyi_qwe13 小时前
Ansible-Playbook 剧本编写
ansible
原神启动116 小时前
Ansible(三)—— 使用Ansible自动化部署LNMP环境
android·自动化·ansible
可爱又迷人的反派角色“yang”20 小时前
ansible剧本编写(三)
linux·网络·云计算·ansible
叽里咕噜怪2 天前
Ansible Playbook 从入门到精通:零基础玩转自动化部署与配置管理
网络·自动化·ansible
lin张2 天前
Ansible学习总结:从基础命令到Playbook实战
网络·学习·ansible
可爱又迷人的反派角色“yang”2 天前
ansible基本命令与剧本编写(二)
linux·运维·ansible
m0_485614672 天前
ansible基础命令
ansible
叫致寒吧2 天前
自动化运维工具 Ansible
运维·自动化·ansible
m0_488777652 天前
Ansible基础概念及相关命令
ansible·模块·自动化运维工具