Ansible--Templates 模块 Tags模块 Roles模块

2024-05-09 11:28

本文主要是介绍Ansible--Templates 模块 Tags模块 Roles模块,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一 Templates 模块

①Jinja是基于Python的模板引擎。Template类是Jinja的一个重要组件,可看作一个编译过的模

板文件,用来产生目标文本,传递Python的变量给模板去替换模板中的标记。

②在配置文件中,会有一些数据(如:ip 地址、主机名、端口、用户、页面路径等)会动态的改

变,需要使用变量来表示;

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

使用 jinjia2 模块语言来编写,结尾(后缀)一定是 j2(xxx.j2)。

实验:通过 playbook 安装 apache

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

cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2vim /opt/httpd.conf.j2
Listen {{http_port}}				#42行,修改
ServerName {{server_name}}			#95行,修改
DocumentRoot "{{root_dir}}"          #119行,修改  总控制端,可以管理被控制点

[root@11-6 opt]# vim /opt/httpd.conf.j2 

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

vim /etc/ansible/hosts  

3 编写 playbook

 vim cs_cs_apache.yaml

---
- name: install httpdhosts: allremote_user: rootvars:- package: httpd- service: httpdtasks:- name: install httpd packageyum: name={{package}} state=latest- name: copy confg filetemplate: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf     notify:- restart httpd- name: start httpd serverservice: name={{service}} enabled=true state=startedhandlers:- name: restart httpdservice: name={{service}} state=restarted

4  被管理点添加域名

5 被管理者导入文本:

6 管理者与被管理者达成共识:

 7 检测一下:

systemctl restart httpd

 

 8 另一种检测方法:

[root@11-6 opt]# vim /etc/ansible/hosts

[root@11-6 opt]# vim /opt/httpd.conf.j2 

二 tags 模块

例如:安装tomcat 必需现有jdk,就可以用这种方式部署

可以在一个playbook中为某个或某些任务定义“标签”,在执行此playbook时通过ansible-playbook

命令使用--tags选项能实现仅运行指定的tasks。

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

一个tags时,定义有always的tags都会执行。

  • 标签调用哪一个就执行哪一个
  • 如果指定的标签是always,不管指定不指定,都执行
  • 执行顺序从上往下

注:标记那个标签执行那个操作

---
- name: ceshi tagshosts: mcbweb01remote_user: roottasks:- name: copy hosts filecopy: src=/etc/hosts dest=/opt/hoststags:- JOB- name: touch filefile: path=/opt/kangkang state=touch

[root@11-6 opt]# ansible-playbook cs_webhost.yaml --tags="JOB"

检测:

 

若有always都会执行操作 

执行一下

[root@11-6 opt]# ansible-playbook cs_webhost.yaml --tags="K" 

always 

---
- name:  or tagshosts: mcbweb01remote_user: roottasks:- name: copy hosts filecopy: src=/etc/hosts dest=/opt/hoststags:- K- name: touch filefile: path=/opt/ab state=touch- always- name:  create dir     file: path=/opt/F state=directorytags:- F

 

检测一下:

三 Roles 模块

Ansible为了层次化、结构化地组织Playbook,使用了角色(roles),roles可以根据层次型结构自

动装载变量文件、task以及handlers等。简单来讲,roles就是通过分别将变量、文件、任务、模块

及处理器放置于单独的目录中,并可以便捷地include它们。roles一般用于基于主机构建服务的场

景中,但也可以用于构建守护进程等场景中。

//roles 的目录结构:
cd /etc/ansible/
tree roles/
roles/

1 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 文件,用于定义此角色的特殊设定及其依赖关系。

2 在一个 playbook 中使用 roles 的步骤:

(1)创建以 roles 命名的目录

mkdir /etc/ansible/roles/ -p    #yum装完ansible默认就有

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

mkdir /etc/ansible/group_vars/ -ptouch /etc/ansible/group_vars/all     #文件名自己定义,引用的时候注意

(3)在 roles 目录中分别创建以各角色名称命令的目录,如 httpd、mysql

mkdir /etc/ansible/roles/httpdmkdir /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.ymltouch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml

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

vim /etc/ansible/mcb.yml

---
- hosts: mcbweb01remote_user: rootroles:- httpd
- hosts: mcb02remote_user: rootroles:- mysql
~               

 (7)运行 ansible-playbook

cd /etc/ansible
ansible-playbook mcb.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

[root@11-6 opt]# tree /etc/ansible/roles/
/etc/ansible/roles/
├── httpd
│   ├── defaults
│   │   └── main.yml
│   ├── files
│   ├── handlers
│   │   └── main.yml
│   ├── meta
│   │   └── main.yml
│   ├── tasks
│   │   └── main.yml
│   ├── templates
│   └── vars
│       └── main.yml
├── mysql
│   ├── defaults
│   │   └── main.yml
│   ├── files
│   ├── handlers
│   │   └── main.yml
│   ├── meta
│   │   └── main.yml
│   ├── tasks
│   │   └── main.yml
│   ├── templates
│   └── vars
│       └── main.yml
└── php├── defaults│   └── main.yml├── files├── handlers│   └── main.yml├── meta│   └── main.yml├── tasks│   └── main.yml├── templates└── vars└── main.yml24 directories, 15 files

四 青春版的LNMP

1 编写httpd模块

写一个简单的tasks/main.yml

vim /etc/ansible/roles/httpd/tasks/main.yml

这篇关于Ansible--Templates 模块 Tags模块 Roles模块的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/973277

相关文章

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

Python模块导入的几种方法实现

《Python模块导入的几种方法实现》本文主要介绍了Python模块导入的几种方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录一、什么是模块?二、模块导入的基本方法1. 使用import整个模块2.使用from ... i

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

如何使用Ansible实现CI/CD流水线的自动化

如何使用Ansible实现CI/CD流水线的自动化 持续集成(CI)和持续交付(CD)是现代软件开发过程中的核心实践,它们帮助团队更快地交付高质量的软件。Ansible,作为一个强大的自动化工具,可以在CI/CD流水线中发挥关键作用。本文将详细介绍如何使用Ansible实现CI/CD流水线的自动化,包括设计流水线的结构、配置管理、自动化测试、部署、以及集成Ansible与CI/CD工具(如Jen

Jenkins构建Maven聚合工程,指定构建子模块

一、设置单独编译构建子模块 配置: 1、Root POM指向父pom.xml 2、Goals and options指定构建模块的参数: mvn -pl project1/project1-son -am clean package 单独构建project1-son项目以及它所依赖的其它项目。 说明: mvn clean package -pl 父级模块名/子模块名 -am参数