ansible—playbook的template、tags、roles模块

目录

一、template

1、简介

2、template模块实例

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

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个域名验证
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

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.hqwc.cn/news/678727.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gitlab集群高可用架构拆分部署

目录 前言 负载均衡器准备 外部负载均衡器 内部负载均衡器 (可选)Consul服务 Postgresql拆分 1.准备postgresql集群 手动安装postgresql插件 2./etc/gitlab/gitlab.rb配置 3.生效配置文件 Redis拆分 1./etc/gitlab/gitlab.rb配置 2.生效配置文件 Gitaly拆分 1.…

python魔法方法是什么

魔法方法是python内置方法,不需要主动调用,存在的目的是为了给python的解释器进行调用,几乎每个魔法方法都有一个对应的内置函数,或者运算符,当我们对这个对象使用这些函数或者运算符时就会调用类中的对应魔法方法&…

分布式锁概述

什么是分布式锁 分布式锁是一种在分布式计算环境中用于同步访问共享资源的机制。它的主要目的是在一个分布式系统中,当多个进程或服务需要同时访问同一个资源时,确保任一时刻只有一个进程或服务能够执行涉及该资源的关键操作。这类似于传统单体应用中的…

【算法练级js+java】重复给定字符n次

题目 Repeats the given string n times.(复制指定的字符串n次) 期望结果 /** * Repeats the given string n times. * * repeat(‘, 3) * // > **’ * * repeat(‘abc’, 2) * // > ‘abcabc’ * * repeat(‘abc’, 0) * // > “” **/ 代码…

解决 git克隆拉取代码报SSL certificate problem错误

问题:拉取代码时报错,SSL证书问题:证书链中的自签名证书问题 解决:只需要关闭证书验证,执行下面代码即可: git config --global http.sslVerify "false" 再次拉取代码就可以了

字体设计_西文字体设计(英文字体设计)

一 西文字体设计基础知识 设计目标和历史成因 设计目标:让眼睛看着舒服的字体 那什么样的字体让眼睛看着舒服呢? 让眼睛看着舒服的字体造型其实是我们记忆里的手写体、自然造型。 所以就能理解西文字体为什么同一笔画,有的地方粗有的地方…

STC8增强型单片机开发day01

C51版本Keil环境搭建 搭建流程 环境搭建的基本流程: 从官方网站下载并安装Keil软件。选择安装的软件中的C51工具集并运行。通过从“文件”菜单中选择“项目”来创建新项目。输入项目名称并选择您正在使用的设备。通过从“项目”菜单中选择“添加文件到组”来添加…

VueReal将在Display Week上推出microLED创新技术

公司展示将microLED从晶圆转移到背板的“改变游戏规则”的平台 在2024年显示周(5月12日至16日在圣何塞举行)上,VueReal将展示其MicroSolid打印平台,并展示其在推动微LED显示器和其他微型半导体器件在智能手机显示器和AR/VR解决方案…

Sealos急速部署生产用k8s集群

最近一段时间部署k8s全部使用sealos了,整体使用感觉良好,基本没有什么坑。推荐给大家。 使用 Sealos,可以安装一个不包含任何组件的裸 Kubernetes 集群。 最大的好处是提供 99 年证书,用到我跑路是足够了。不用像之前kubeadm安装…

线性分组码

一、数学描述 1. 定义 (n, k)线性分组码,n是码长,k是信息位数,n-k是校验位数,k/n是编码速率。 2. 生成矩阵 设是维的信息矢量,是维的生成矩阵,是编码后的维码字,则 3. 系统线性分组码 如果线…

【Kubernetes集群一主二从安装教程】

文章目录 环境准备主机间做信任安装ansible工具 升级内核版本使用elrepo源升级内核查看最新版内核安装最新的内核版本设置系统默认内核设置默认内核为我们刚才升级的内核版本 初始化关闭防火墙关闭selinux关闭swap修改主机名修改hosts文件将桥接的IPv4流量传递到iptables的链配…

09 - 数据清洗案例

流程图 kettle 面板图片 操作步骤 1、订阅数据源(kafka consumer) 2、抽取字段并转换key(JSON input) 3、判断img字段是否有值,有的话进行url转base64(JavaScript 代码) // 获取输入字段的值 v…