ansible—playbook的template、tags、roles模块

server/2024/10/18 18:22:25/

目录

一、template

1、简介

2、template模块实例

ansible%E4%B8%8A%E8%A6%81%E5%85%88%E5%AE%89%E8%A3%85httpd-toc" style="margin-left:120px;">1.先准备一个以.j2结尾的template模板文件,设置引用的变量,ansible上要先安装httpd

2、修改主机清单文件,使用主机变量定义一个变量名相同而值不同的变量

3、主机添加hosts

4、编写playbook文件

二、tags模块

1、概念

2、实例

1、主机1的配置文件

2、主机2的配置文件

三、roles模块

1、概念

2、roles的目录结构

3、roles内各个目录的含义

4、在playbook中使用roles的步骤

①创建以roles命名的目录

②创建全局变量目录(可选)

③在roles目录中分别创建以各角色名称命令的目录,如httpd,mysql等

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

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

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

ansible-playbook-toc" style="margin-left:120px;">⑦运行ansible-playbook

5、roles实现lnmp搭建

①创建httpd,mysql,和php三个所需要的文件

②编写httpd模块

③编写mysql模块

④编写php模块

⑤编写roles


一、template

1、简介

ansible的template模块,可以将带有参数的配置文件传递到目标地址,可以对文件进行属组属主的修改以及备份。

template是一种创建配置文件的工具,在配置文件中,会有一些数据等会动态的变化,如IP地址,主机名,端口,用户,页面路径等。

template模块就是将变量和动态文件结合起来,最终生成一个配置文件(你需要动态改变)

jinja是基于python的模板引擎。template是jinja的一个重要的组件,可以看作是一个编译过的模板文件,用来产生目标文本,传递python的变量给模板去替换模板中的标记。

注意:文件配置使用jinja2模板语言来编写,结尾一定要是j2(xxx.j2)

2、template模块实例

1.先准备一个以 .j2 为后缀的 template 模板文件,设置引用的变量
cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2
#注意ansible本身要安装httpd,其他2台被控制的不能安装httpd
vim /opt/httpd.conf.j2
Listen {{http_port}}				#42行,修改
ServerName {{server_name}}			#95行,修改
DocumentRoot "{{root_dir}}"          #119行,修改
#修改template配置文件模块的端口和主机名、根目录为变量
2.修改主机清单文件,使用主机变量定义一个变量名相同,而值不同的变量
vim /etc/ansible/hosts
[webservers1]
192.168.170.113 http_port=192.168.170.113:80 server_name=www.rmh.com:80 root_dir=/var/www/html
[webservers2]
192.168.170.114 http_port=192.168.170.114:80 server_name=www.kfc.com:80 root_dir=/var/www/html
3.主机添加hosts
vim /etc/hosts
192.168.170.113 www.rmh.com
192.168.170.114 www.kfc.com
4.编写playbook文件
vim httpd.yaml
---
- hosts: allremote_user: rootgather_facts: falsevars:- package: httpd- service: httpdtasks:- name: install httpdyum: name={{package}} state=latest- name: con testtemplate: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
#配置文件模板拷贝到httpd的子配置文件中notify:- restart httpd- name: start httpdservice: name={{service}} state=startedhandlers:- name: restart httpdservice: name={{service}} state=restarted
5.最后在ansible上curl访问2个域名验证
ansible%E4%B8%8A%E8%A6%81%E5%85%88%E5%AE%89%E8%A3%85httpd">1.先准备一个以.j2结尾的template模板文件,设置引用的变量,ansible上要先安装httpd

2、修改主机清单文件,使用主机变量定义一个变量名相同而值不同的变量

3、主机添加hosts

4、编写playbook文件

二、tags模块

1、概念

当你写了一个很长的playbook,其中有很多的任务,很多时候在使用的时候只是想执行一部分任务,或者只是想执行一类任务,这时可以借助tags模块为任务进行做标签,任务存在标签之后,在执行playbook时可以利用标签来决定执行哪些任务或者不执行哪些任务。

可以在一个playbook中为某个任务定义“标签”,在执行此playbook时通过ansible-playbook命令使用--tags选项来实现仅运行指定的tasks。

playbook还提供一个特殊的tags为always。作用就是当使用always当tags的task时,无论执行哪一个tags,定义中有always的tags都会执行。

2、实例

---
- hosts: webremote_user: rootgather_facts: falsetasks:- name: copy hostscopy: src=/etc/hosts dest=/opt/hoststags:- tags1
#自定义标签名,可以在执行yaml文件时使用 --tag="tags1"只执行此任务,always标签任务除外- name: touch filefile: path=/opt/testhost state=touchtags:- always
#always标签,无论执行那个标签都会将此标签的任务内容执行

分别在两个主机上测试文件创建的情况

1、主机1的配置文件

主机1因为有always所以两个标签都执行

2、主机2的配置文件

此时webb中因为没有always所以只执行指向的tags

三、roles模块

1、概念

简单的说,roles就是通过分别将变量、文件、任务、模块以及处理器放置于单独的目录中,并可以便捷的include他们的一种机制。角色一般用于基于主机构建服务的场景中,但是也可以用于构建守护进程等场景中。

2、roles的目录结构

3、roles内各个目录的含义

files用来存放copy模块或script模块调用的文件
templates用来存放jinjia2模板,template模块会自动在此目录中寻找jinjia2模板文件
tasks此目录应当包含一个main.yml文件,用于定义此角色的任务列表,此文件可以使用include包含其它的位于此目录的task文件
handlers此目录应当包含一个main.yml文件,用于定义此角色中触发条件时执行的动作
vars此目录应当包含一个main.yml文件,用于定义此角色用到的变量
defailts此目录应当包含一个main.yml文件,用于为当前角色设定默认变量
meta此目录应当包含一个main.yml文件,用于定义此角色的特殊设及其依赖关系

4、在playbook中使用roles的步骤

①创建以roles命名的目录
mkdir /etc/ansible/roles/ -p    #yum装完默认就有
②创建全局变量目录(可选)
mkdir /etc/ansible/group_vars/ -p
touch /etc/ansible/group_vars/all     #文件名自己定义,引用的时候注意
③在roles目录中分别创建以各角色名称命令的目录,如httpd,mysql等
mkdir /etc/ansible/group_vars/ -p 
touch /etc/ansible/group_vars/all #文件名自己定义,引用的时候注意
④在每个角色命令的目录中分别创建files、handlers、tasks、templates、meta、defaults和vars目录,用不到的目录可以创建为空目录,也可以不创建。
mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta}
mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta}
⑤在每个角色的handlers,tasks,meta,defaults,vars目录下创建main.yml文件,千万不能自定义文件名。
touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml
⑥修改site.yml文件,针对不同主机去调用不同的角色
vim /etc/ansible/site.yml
---
- hosts: webremote_user: rootroles:- httpd
- hosts: webbremote_user: rootroles:- mysql
ansible-playbook">⑦运行ansible-playbook

cd /etc/ansible/

ansible-playbook site.yml

5、roles实现lnmp搭建

①创建httpd,mysql,和php三个所需要的文件
mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta} -p
mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta} -p
mkdir /etc/ansible/roles/php/{files,templates,tasks,handlers,vars,defaults,meta} -ptouch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/php/{defaults,vars,tasks,meta,handlers}/main.yml
②编写httpd模块
写一个简单的tasks/main.yml
vim /etc/ansible/roles/httpd/tasks/main.yml
- name: install apacheyum: name={{pkg}} state=latest
- name: start apacheservice: enabled=true name={{svc}} state=started//定义变量:可以定义在全局变量中,也可以定义在roles角色变量中,一般定义在角色变量中
vim /etc/ansible/roles/httpd/vars/main.yml
pkg: httpd
svc: httpd
③编写mysql模块
vim /etc/ansible/roles/mysql/tasks/main.yml
- name: install mysqlyum: name={{pkg}} state=latest
- name: start mysqlservice: enabled=true name={{svc}} state=startedvim /etc/ansible/roles/mysql/vars/main.yml
pkg:- mariadb- mariadb-server
svc: mariadb
④编写php模块
vim /etc/ansible/roles/php/tasks/main.yml
- name: install phpyum: name={{pkg}} state=latest
- name: start php-fpmservice: enabled=true name={{svc}} state=startedvim /etc/ansible/roles/php/vars/main.yml
pkg:- php- php-fpm
svc: php-fpm
⑤编写roles
vim /etc/ansible/site.yml
---
- hosts: webserversremote_user: rootroles:- httpd- mysql- phpcd /etc/ansible
ansible-playbook site.yml

http://www.ppmy.cn/server/38495.html

相关文章

Flutter笔记:Widgets Easier组件库(11)- 使用提示吐丝(Tip Toasts)

Flutter笔记 Widgets Easier组件库(11)使用提示吐丝 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this …

ARP欺骗使局域网内设备断网

一、实验准备 kali系统:可使用虚拟机软件模拟 kali虚拟机镜像链接:https://www.kali.org/get-kali/#kali-virtual-machines 注意虚拟机网络适配器采用桥接模式 局域网内存在指定断网的设备 二、实验步骤 打开kali系统命令行:ctrlaltt可快…

修改el-checkbox样式

一定要在最外层; //未选中框/deep/ .el-checkbox__inner{border-color: #0862a3;}//选中框/deep/ .el-checkbox__input.is-checked .el-checkbox__inner{background-color: #0862a3;border-color: #0862a3;}//未选中框时右侧文字/deep/ .el-checkbox__label{}//选中…

洛谷 P4148:简单题 ← KD-Tree模板题

【题目来源】https://www.luogu.com.cn/problem/P4148【题目描述】 你有一个 NN 的棋盘,每个格子内有一个整数,初始时的时候全部为 0,现在需要维护两种操作: ● 1 x y A → 1≤x,y≤N,A 是正整数。将格子 (x,y) 里的数…

【C语言】static关键字用法

目录 一、static修饰局部变量 二、static修饰全局变量 三、static修饰函数 一、static修饰局部变量 首先我们来看两段代码: 代码1&#xff08;不加static&#xff09; #include <stdio.h> void test() {int i 0;i;printf("%d ", i); } int main() {int i…

视频封面一键提取:从指定时长中轻松获取您想要的帧图片

在数字媒体时代&#xff0c;视频已成为人们获取信息、娱乐和沟通的主要形式之一。而一个好的视频封面&#xff0c;往往能够吸引观众的眼球&#xff0c;增加视频的点击率和观看量。然而&#xff0c;对于很多视频创作者和编辑者来说&#xff0c;如何从视频中快速、准确地提取出合…

浅谈C++ overload(重载) override(覆盖) overwrite(重写)

目录 1. 名词辨析2 含义解析1 overload重载2 override覆盖3 overwrite重写 3 区别4 代码示例 1. 名词辨析 关于这3个名词的中文翻译&#xff1a; overload翻译为重载&#xff0c;基本是没有歧义的&#xff1b;override和overwrite的翻译&#xff0c;我在参考了cppreference中…

数据库——实验10 数据库的安全性

1. 安全认证模式 SQL Server有两种身份认证模式&#xff1a;Windows 认证模式和混合认证模式(即 Windows 身份验证和 SQL Server 身份验证)。 (1)仅 Windows 认证模式&#xff1a;这是 SQL Server 2005 的默认身份验证模式&#xff0c;适用于所有登录者均为 Windows 200…