tnblog
首页
视频
资源
登录

Ansible Role详解

8972人阅读 2021/4/7 21:06 总访问:3664252 评论:0 收藏:0 手机
分类: Ansible

ansible

Ansible Role详解

Roles

Roles介绍


ansible自1.2版本引入的新特性,用于层次性、结构化地组织playbook。
roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。
要使用roles只需要在playbook中使用include指令即可。
简单来讲,roles就是通过分别将变量、文件、任务、模板及处理器放置于单独的目录中,
并可以便捷地include它们的一种机制。
角色一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中

特点

复杂场景:建议使用roles,代码复用度高

  • 变更指定主机或主机组
  • 如命名不规范维护和传承成本大
  • 某些功能需多个Playbook,通过includes即可实现

Roles各目录作用

官方推荐在/etc/ansible/roles/目录下创建项目。

目录 描述
/roles/project 项目名称 (然后再该项目下创建子目录)
files/ 存放由copy或script模块等调用的文件
templates/ template模块查找所需要模块文件的目录
tasks/ 定义task,role的基本元素,至少应该包含一个名为main.yml的文件;其他的文件需要在此文件中通过include进行包含
vars/ 定义变量,至少应该包含一个名为main.yml的文件;其他的文件需要在此文件中通过include进行包含
meta/ 定义当前角色的特殊设定及其依赖关系,至少应该包含一个名为main.yml的文件,其他文件需在此文件中通过include进行包含
default/ 设定默认变量时使用此目录中的main.yml文件

nginx示例


删除原有的nginx

  1. # 停止nginx服务
  2. ansible all -m service -a 'name=nginx state=stopped'
  3. # 卸载nginx应用
  4. ansible all -m yum -a 'name=nginx state=absent'
  5. # 删除nginx用户
  6. ansible all -m user -a 'name=nginx state=absent'
  7. # 删除nginx组
  8. ansible all -m group -a 'name=nginx state=absent'
  9. # 关闭httpd
  10. ansible all -m shell -a 'systemctl stop httpd'


(1) 创建nginx的group组
(2) 创建nginx的user用户
(3) 安装nginx包
(4) 添加模板文件
(5) 启动服务

  1. mkdir -p /etc/ansible/roles/nginx
  2. cd /etc/ansible/roles/nginx
  3. mkdir tasks
  4. mkdir templates
  5. cd tasks
  6. vim group.yml

创建nginx组(group.yml)

  1. - name: create group
  2. group: name=nginx gid=80

创建nginx用户(user.yml)

  1. - name: create user
  2. user: name=nginx group=nginx system=yes shell=/sbin/nologin uid=80

创建安装包文件(yum.yml)

  1. - name: install package
  2. yum: name=nginx

启动服务(start.yml)

  1. - name: start nginx service
  2. service: name=nginx state=started enabled=yes

重启服务(restart.yml)

  1. - name: restart nginx service
  2. service: name=nginx state=restarted


然后通过cd ../templates/切换到模板目录下,然后通过cp /etc/nginx/nginx.conf nginx.conf.j2复制nginx配置到当前模板页下;然后做如下修改:

  1. # 启动进程的数量按照CPU的核心+2个
  2. worker_processes {{ ansible_processor_vcpus+2 }}

然后回到task目录下定义模板

  1. cd ../tasks
  2. vim templ.yml
  1. - name: copy conf
  2. template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf

定义主要如何执行的yml(main.yml) 按照顺序执行相关的文件

  1. - include: group.yml
  2. - include: user.yml
  3. - include: yum.yml
  4. - include: templ.yml
  5. - include: start.yml

最后在调用的时,切换到roles目录下(cd /etc/ansible/roles/),创建nginx_role.yml剧本。role表示你要执行的项目名。

  1. - hosts: all
  2. remote_user: root
  3. roles:
  4. - role: nginx


检测与执行

  1. ansible-playbook -C nginx_role.yml
  2. ansible-playbook nginx_role.yml


测试端口是否开启

  1. ansible all -m shell -a 'ss -ntpl'
  2. ansible all -m shell -a 'curl 127.0.0.1'

多项目执行


当我们在roles目录下除了有nginx项目,如果还有一个httpd的项目,想同时进行执行的话。可以通过修改nginx_role.yml文件进行执行多个剧本

  1. - hosts: all
  2. remote_user: root
  3. roles:
  4. - role: nginx
  5. - role: httpd

调用第三方角色


如果在main.yml文件中,我们想调用第三方httpd项目的copyfile.yml文件,我们可以在main.yml中这样添加。

  1. - include: roles/httpd/tasks/copyfile.yml

需要注意的是:执行任务的时候第三方的角色yml如果是相对路径,那么需要改成绝对路径。

为多角色项目定义标签

  1. - hosts: all
  2. remote_user: root
  3. roles:
  4. - { role: nginx, tags: ['web','nginx'] }
  5. - { role: httpd, tags: ['web','httpd'] }
  6. - { role: app, tags: 'app' }


当我们需要执行指定的app标签时,可以通过-t的参数进行指定标签

  1. ansible-playbook -t web nginx_role.yml

在多角色项目定义条件执行


这里我们只希望CentOS7的系统安装httpd

  1. - hosts: all
  2. remote_user: root
  3. roles:
  4. - { role: nginx, tags: ['web','nginx'] }
  5. - { role: httpd, tags: ['web','httpd'] , when ansible_distribution_major_version == "7" }
  6. - { role: app, tags: 'app' }

定义handlers与vars

在nginx角色项目中,我们要定义handlers与vars的话目录应该是:/etc/ansible/roles/nginx/handlers/etc/ansible/roles/nginx/vars,在定义时请注意只能定义main.yml文件。如何调用请参考以往文章。


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

JAVA8 十大新特性详解

前言: Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级。在Java Code Geeks上已经有很多介绍Java 8新特...

HBuilder打包apk文件详解

自己写app小软件,打包成apk是非常有成就感的一件事,今天就讲一下如何利用HBuilder把app项目打包成apk,很简单。1、 在Hbu...

使用swagger创建webapi文档描述---详解

在前后端分离开发中,作为后端如何给前端提供有效直观的接口文档呢?没错,就是使用swagger 俗称“丝袜哥”教程:一、首先...

k8s详解基本对象

k8s详解基本对象[TOC] 参考yaml代码如下apiVersion: apps/v1 kind: Deployment metadata: name: k8s-demo names...

C WebApi 接口传参详解

这篇文章主要介绍了C# WebApi 接口传参详解,本篇打算通过get、post、put、delete四种请求方式分别谈谈基础类型(包括int/s...

Asp.net core webapi部署IIS过程详解,以及坑点介绍和解决坑点方法

这几天做了一个Asp.net core 3.0的webapi小练习,只有简单的增删改查,做好了以后又去对应的部署IIS,因为之前也发布过一些...

SVN与TortoiseSVN实战:文件加锁详解

本篇详解使用TortoiseSVN对文件进行加锁和解锁的技巧加锁与解锁的操作对于项目中的二进制文件,如图片、声音、动态库等不可...

Elasticsearch URL Search详解

Elasticsearch URL Search详解[TOC] 通过 URL Query 实现搜索举例: Get /movies/_search?q=2020&df=title&sort...

.NET CORE EF数据库迁移,以及迁移命令详解。code first。在不删除表的情况下保持同步

.NET CORE EF 数据库迁移需要的依赖Install-Package Microsoft.EntityFrameworkCore.SqlServer -version 3.1.1 Install-Pa...

JDBC功能类详解 3

对JDBC不熟悉的建议和JDBC入门 2篇对照看一、DriverManager1、注册驱动2、获取数据库链接二、Connection三、Statement四、R...

FreeSql使用详解

FreeSql 主要对于数据库的增删改查操作,本身不难,难的是入门,本章主要讲解对于Freesql的入门配置本章讲解所需工具:MySQ...

MySQL事务详解,事务并发冲突,事务隔离级别

[TOC]事务的概念事务:把所有的操作当中一个整体,要么全部成功,要么全部失败 一旦开启了事务所有的操作都是临时的,你可...

kubeadm init 参数详解k8s init 参数详解k8s 初始化参数详解

--apiserver-advertise-address string 设置 apiserver 绑定的 IP. --apiserver-bind-port int32 设置...

JAVA多线程系列--ForkJoinPool详解

https://blog.csdn.net/niyuelin1990/article/details/78658251https://blog.csdn.net/dhaibo1986/article/details/1087373...

Vue--Vuex 中 Modules 详解

前言  在Vue中State使用是单一状态树结构,应该的所有的状态都放在state里面,如果项目比较复杂,那state是一个很大的对...
这一世以无限游戏为使命!
排名
2
文章
657
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术