Ansible剧本playbook之--------Templates 模块、roles角色详细解读

2024-05-09 07:36

本文主要是介绍Ansible剧本playbook之--------Templates 模块、roles角色详细解读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、Templates 模块

1.1准备模板文件并设置引用的变量

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

1.3编写 playbook 

1.4ansible主机远程查看修改参数

1.5验证

二、tags 模块

always应用

三、Roles 模块

3.1roles 的目录结构

3.2roles 内各目录含义解释

3.2.1files

3.2.2templates

3.2.3tasks

3.2.4handlers

3.2.5vars

3.2.6defaults

3.2.7meta

3.3在一个 playbook 中使用 roles 的步骤

3.4Roles模块举例——LAMP

3.4.1创建相应的目录和目录中的main.yml文件

3.4.2编写httpd模块

3.4.2.1编写yml文件

3.4.2.2定义变量

3.4.3编写mysql模块

3.4.3.1编写yml文件

3.4.3.2定义变量 ​编辑

3.4.4编写php模块

3.4.4.1编写yml文件

3.4.4.2定义变量

3.4.5编写roles示例并启动

3.4.6验证查看服务状态

四、使用Playbook编译安装nginx


一、Templates 模块

  • Jinja是基于Python的模板引擎。
  • Template类是Jinja的一个重要组件,可以看作是一个编译过的模板文件,用来产生目标文本,传递Python的变量给模板去替换模板中的标记。
  • 一定要以.j2 为后缀的 template 模板文件

templates是ansible的一个模块,其功能是根据模板文件动态生成配置文件,templates文件必须存放于templates目录下,且命名为".j2"结尾,yaml/yml文件需要和templates目录平级,这样我们在yml文件中调用模板的时候,就不需要写模板文件的路径,否则需要描述模板文件的路径,因为template模块会自动去找templates目录下的模板文件

环境准备

服务器类型IP地址需要安装的组件
Ansible管理服务器192.168.246.7Ansible
被管理客户端192.168.246.8———
被管理客户端192.168.246.10———

1.1准备模板文件并设置引用的变量

先准备一个以 .j2 为后缀的 template 模板文件,设置引用的变量

1.先准备一个以 .j2 为后缀的 template 模板文件,设置引用的变量yum install httpd -y
cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2   拷贝模板
#注意ansible本身要安装httpd,其他2台被控制的不能安装httpdvim /opt/httpd.conf.j2Listen {{http_port}}                  #42行,修改
ServerName {{server_name}}            #95行,修改
DocumentRoot "{{root_dir}}"           #119行,修改
#修改template配置文件模块的端口和主机名、根目录为变量

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

[web-z1]
192.168.246.8  http_port=192.168.246.8:80 server_name=www.kgc.com:80 root_dir=/etc/httpd/htdocs[web-z2]
192.168.246.10  http_port=192.168.246.10:8081 server_name=www.benet.com:8081 root_dir=/etc/httpd/htdocs

vim /etc/hosts   #主机添加hosts
192.168.246.8 zz2 www.kgc.com
192.168.246.10 zz3 www.benet.com

1.3编写 playbook 

---
- hosts: allremote_user: rootvars:- package: httpd- service: httpdtasks:- name: install httpd packageyum: name={{package}} state=latest- name: copy configure filetemplate: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.confnotify:- restart httpd- name: create root dirfile: path=/etc/httpd/htdocs state=directory- name: start httpd serverservice: name={{service}} enabled=true state=startedhandlers:- name: restart httpdservice: name={{service}} state=restarted

1.4ansible主机远程查看修改参数

ansible all -m shell -a 'cat /etc/httpd/conf/httpd.conf| grep -i "Servername"'
ansible all -m shell -a 'cat /etc/httpd/conf/httpd.conf| grep -i "Listen"'
ansible all -m shell -a 'cat /etc/httpd/conf/httpd.conf| grep -i "DocumentRoot"'

grep  -i  不区分大小写

1.5验证

查看httpd服务状态

查看域名访问效果

如果想在浏览器检测,在真机修改/etc/hosts文件


二、tags 模块

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

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

---
- name: ceshi tagshosts: web-z1remote_user: roottasks:- name: copy hosts filecopy: src=/etc/hosts dest=/opt/hoststags:- nihao- name: touch filefile: path=/opt/anhui state=touch

可以看到当指定标签tags就执行到标签为止

always应用

---
- name: ceshi tagshosts: web-z1remote_user: roottasks:- name: copy hosts filecopy: src=/etc/hosts dest=/opt/hoststags:- nihao- name: touch filefile: path=/opt/anhui state=touchtags:- always

查看添加了always之后,再指定标签执行,无论执行哪一个tags时,定义有always的tags都会执行。


三、Roles 模块

Ansible为了层次化、结构化地组织Playbook,使用了角色(roles),roles可以根据层次型结构自动装载变量文件、task以及handlers等。简单来讲,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include它们roles一般用于基于主机构建服务的场景中,但也可以用于构建守护进程等场景中。

3.1roles 的目录结构

要创建才会有这些目录哦(如下图),不然是没有的哦

cd /etc/ansible/tree roles/roles/
├── web/
│   ├── files/
│   ├── templates/
│   ├── tasks/
│   ├── handlers/
│   ├── vars/
│   ├── defaults/
│   └── meta/
└── db/├── files/├── templates/├── tasks/├── handlers/├── vars/├── defaults/└── meta/

3.2roles 内各目录含义解释

3.2.1files

用来存放由 copy 模块或 script 模块调用的文件。

3.2.2templates

用来存放 jinjia2 模板,template 模块会自动在此目录中寻找 jinjia2 模板文件。

3.2.3tasks

此目录应当包含一个main.yml 文件,用于定义此角色的任务列表,此文件可以使用 include 包含其它的位于此目录的 task 文件。

3.2.4handlers

此目录应当包含一个 main.yml 文件,用于定义此角色中触发条件时执行的动作。

3.2.5vars

此目录应当包含一个 main.yml 文件,用于定义此角色用到的变量。

3.2.6defaults

此目录应当包含一个 main.yml 文件,用于为当前角色设定默认变量。

3.2.7meta

此目录应当包含一个 main.yml 文件,用于定义此角色的特殊设定及其依赖关系。

3.3在一个 playbook 中使用 roles 的步骤

(1)创建以 roles 命名的目录
mkdir /etc/ansible/roles/ -p    #yum装完默认就有(2)创建全局变量目录(可选)
mkdir /etc/ansible/group_vars/ -p
touch /etc/ansible/group_vars/all     #文件名自己定义,引用的时候注意(3)在 roles 目录中分别创建以各角色名称命令的目录,如 httpd、mysql
mkdir /etc/ansible/roles/httpd
mkdir /etc/ansible/roles/mysql(4)在每个角色命令的目录中分别创建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}(5)在每个角色的 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(6)修改 site.yml 文件,针对不同主机去调用不同的角色·2
vim /etc/ansible/site.yml·
---
- hosts: webserversremote_user: rootroles:- httpd
- hosts: dbserversremoteroles:- mysql(7)运行 ansible-playbook
cd /etc/ansible
ansible-playbook site.yml

3.4Roles模块举例——LAMP

在Linux上面安装apache(httpd)、mysql和php服务

3.4.1创建相应的目录和目录中的main.yml文件

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

3.4.2编写httpd模块

3.4.2.1编写yml文件

写一个简单的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

3.4.2.2定义变量

定义变量:可以定义在全局变量中,也可以定义在roles角色变量中,一般定义在角色变量中

vim /etc/ansible/roles/httpd/vars/main.ymlpkg: httpd
svc: httpd

3.4.3编写mysql模块

3.4.3.1编写yml文件
vim /etc/ansible/roles/mysql/tasks/main.yml---
- name: install mysqlyum: name={{pkg}} state=latest
- name: start mysqlservice: enabled=true name={{svc}} state=started

3.4.3.2定义变量
 
vim /etc/ansible/roles/mysql/vars/main.yml
pkg:- mariadb- mariadb-server
svc: mariadb

3.4.4编写php模块

3.4.4.1编写yml文件
vim /etc/ansible/roles/php/tasks/main.yml
- name: install phpyum: name={{pkg}} state=latest
- name: start php-fpmservice: enabled=true name={{svc}} state=started

3.4.4.2定义变量
vim /etc/ansible/roles/php/vars/main.yml
pkg:- php- php-fpm
svc: php-fpm

3.4.5编写roles示例并启动

vim /etc/ansible/site.yml
---
- hosts: allremote_user: rootroles:- httpd- mysql- phpcd /etc/ansible
ansible-playbook site.yml

3.4.6验证查看服务状态

查看apache状态(httpd)

查看数据库状态

查看php服务状态

四、使用Playbook编译安装nginx

准备nginx安装包与安装脚本文件

[root@zz1 opt]#ls
nginx-1.18.0.tar.gz  nginx.sh
[root@zz1 opt]#chmod +x nginx.sh
#给脚本文件添加执行权限

查看脚本内容

#/bin/bash
systemctl  start  nginx  >>/dev/null
if [ $? -eq 0 ];then 
echo  "nginx服务已安装"
else
useradd -M -s /sbin/nologin nginx
cd  /opt
wget http://nginx.org/download/nginx-1.18.0.tar.gz >>/dev/null
echo "正在安装,请耐心等待"
tar xf   nginx-1.18.0.tar.gz
cd  /opt/nginx-1.18.0
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl  openssl-devel  &>>/dev/null
./configure --prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module
make -j `lscpu|sed -n '4p'|awk '{print $2}'`&>>/dev/null
make  install  &>>/dev/null
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
cat >  /usr/lib/systemd/system/nginx.service  <<EOF
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -1 $MAINPID
ExecStop=/bin/kill -3 $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
chown -R nginx.nginx  /usr/local/nginx
systemctl  daemon-reload  &>>/dev/null
systemctl  enable --now nginx
echo  "nginx服务已开启"
fi

编写playbook脚本

unarchive模块可以把安装包拷贝到远程主机,并在拷贝过程中自动解压

---
- name: install nginxhosts: allremote_user: roottasks:- name: firewalld stopservice: name=firewalld  state=stopped- name: packageunarchive:  copy=yes src=/opt/nginx-1.18.0.tar.gz dest=/opt owner=root group=root- name: Execute scriptscript: /opt/nginx.sh

nginx服务安装好了,查看nginx服务状态

开启nginx服务

这篇关于Ansible剧本playbook之--------Templates 模块、roles角色详细解读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/972780

相关文章

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

Spring boot整合dubbo+zookeeper的详细过程

《Springboot整合dubbo+zookeeper的详细过程》本文讲解SpringBoot整合Dubbo与Zookeeper实现API、Provider、Consumer模式,包含依赖配置、... 目录Spring boot整合dubbo+zookeeper1.创建父工程2.父工程引入依赖3.创建ap

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Python设置Cookie永不超时的详细指南

《Python设置Cookie永不超时的详细指南》Cookie是一种存储在用户浏览器中的小型数据片段,用于记录用户的登录状态、偏好设置等信息,下面小编就来和大家详细讲讲Python如何设置Cookie... 目录一、Cookie的作用与重要性二、Cookie过期的原因三、实现Cookie永不超时的方法(一)

解读GC日志中的各项指标用法

《解读GC日志中的各项指标用法》:本文主要介绍GC日志中的各项指标用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基础 GC 日志格式(以 G1 为例)1. Minor GC 日志2. Full GC 日志二、关键指标解析1. GC 类型与触发原因2. 堆