当前位置: 首页 > news >正文

自动化运维工具一Ansible Roles实战

目录

一、Ansible Roles概述

1.1.roles官方的目录结构

1.2.Ansible Roles依赖关系

二、Ansible Roles案例实战

2.1.Ansible Roles NFS服务

2.2 Roles Memcached

2.3 Roles-rsync服务


一、Ansible Roles概述


之前介绍了 Playbook 的使用方法,对于批量任务的部署和操作非常方便,但是耦合度比较高,不便于模块化、层次化的复用,为了层次性、结构化地组织playbook,我们可以使用roles来更加高效地组织playbooks;roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。
 

1.1.roles官方的目录结构

roles├── test│   ├── README.md│   ├── defaults│   │   └── main.yml│   ├── files│   ├── handlers│   │   └── main.yml│   ├── meta│   │   └── main.yml│   ├── tasks│   │   └── main.yml│   ├── templates│   ├── tests│   │   ├── inventory│   │   └── test.yml│   └── vars│       └── main.yml

通过目录结构说明:

  • templates:template模块查找所需要模板文件的目录
  • tasks:定义task,role的基本元素,至少有一个名为main.yml的文件;其它的文件需要在此文件中通过include引入
  • handlers:至少有一个名为main.yml的文件;其它的文件需要在此文件中通过include引
  • vars:定义变量,至少有一个名为main.yml的文件;其它的文件需要在此文件中通过include引入
  • meta:定义当前角色的特殊设定及其依赖关系,至少有一个名为main.yml的文件,其它文件需在此文件中通过include引入
  • default:设定默认变量时使用此目录中的main.yml文件,比vars的优先级低

1.2.Ansible Roles依赖关系

roles允许您在使用role时自动引入其他 role。role依赖关系存储在role目录中meta/main.yml文件中。

例如:安装wordpress需要先确保nginx与PHP都能正常运行,此时可以在 wordpress的role中定义,依赖Nginx与PHP-fpm的roles。

[root@devops ~]# cat /root/roles/wordpress/meta/main.yml
---
dependencies:- { role: nginx }- { role: [php-fpm }

此时 wordpress 的role 会先执行 nginx的role、然后执行php-fpm的role,最后执行wordpress本身的role。


二、Ansible Roles案例实战


2.1.Ansible Roles NFS服务

[root@hdp101 roles]# cat  nfs/tasks/install.yml
- name: Install NFS-utils Serveryum: name=nfs-utils state=present[root@hdp101 roles]# cat  nfs/tasks/config.yml
- name: Configuration NFS-utils Servertemplate: src=./export.j2  dest=/etc/exports owner=root group=root mode=0644notify: Restart NFS Server[root@hdp101 roles]# cat  nfs/tasks/start.yml
- name: Start NFS Serverservice: name=nfs state=started enabled=yes[root@hdp101 roles]# cat  nfs/templates/export.j2
{{ nfs_dir }} 192.168.30.102(rw,all_squash,anonuid=666,anongid=666)
[root@hdp101 roles]#
[root@hdp101 roles]# cat group_vars/web01
nfs_dir: /data
[root@hdp101 roles]#
[root@hdp101 roles]# cat nfs-roles.yml
- hosts: web01roles:# nfs 就是刚才创建的目录- nfs
[root@hdp101 roles]#

NFS 文件夹目录树结构:

运行: 

2.2 Roles Memcached

如下配置启动memcache:

[root@hdp101 roles]# cat memcached/tasks/install.yml 
- name: Installed memcached Serveryum: name=memcached state=present
[root@hdp101 roles]# cat memcached/tasks/config.yml 
- name: Copy memcached server configurationtemplate: src=memcached.j2 dest=/root/sysMemConfignotify: Restart memcached server
[root@hdp101 roles]# cat memcached/tasks/start.yml 
- name: start memcached serverservice: name=memcached state=started enabled=yes
[root@hdp101 roles]# cat  memcached/handlers/main.yml 
- name: Restart memcached serverservice: name=memcached state=restarted
[root@hdp101 roles]# 
[root@hdp101 roles]# cat memcached/tasks/main.yml 
- include_tasks: install.yml
- include_tasks: config.yml
- include_tasks: start.yml
[root@hdp101 roles]# 
[root@hdp101 roles]# cat memcached/templates/memcached.j2 
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="{{ ansible_memtotal_mb //2 }}"
OPTIONS=""

memecached 目录树结构

运行一下:

看看设置的内存大小

2.3 Roles-rsync服务

rsync 可以理解为 remote sync(远程同步),但它不仅可以远程同步数据(类似于 scp 命令),还可以本地同步数据(类似于 cp 命令)。不同于 cp 或 scp 的一点是,使用 rsync 命令备份数据时,不会直接覆盖以前的数据(如果数据已经存在),而是先判断已经存在的数据和新数据的差异,只有数据不同时才会把不相同的部分覆盖。

[root@hdp101 roles]# cat  rsync/tasks/main.yml 
- name: Install rsync serveryum: name=rsync state=present- name: Configuration rsync servertemplate: src={{ item.src }} dest={{ item.dest }} mode={{ item.mode }}with_items:- { src: 'rsyncd.conf.j2', dest: '/etc/rsyncd.conf', mode: '0644' }- { src: 'rsyncd.passwd.j2', dest: '/etc/rsyncd.passwd', mode: '0600' }notify: Restart rsync server- name: Start rsync serverservice: name=rsyncd state=started enabled=yes
[root@hdp101 roles]# cat  rsync/handlers/main.yml 
- name: Restart rsync serverservice: name=rsyncd state=restarted [root@hdp101 roles]# cat  rsync/templates/rsyncd.conf.j2 
gid = www
port = 873
fake super = yes
user chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = true
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
##################################[backup]
path = /backup[data]
path = /data
[root@hdp101 roles]# cat  rsync/templates/rsyncd.passwd.j2 
rsync_backup:123456

运行: 

查看配置文件同步的结果

http://www.lryc.cn/news/63720.html

相关文章:

  • json 中有递归parentId节点转 c#实体类时如何处理
  • 给大家介绍几个手机冷门但好用的小技巧
  • 2.3 定点乘法运算
  • C++每日一练:打家劫室(详解动态规划法)
  • Wireshark使用
  • 这才是 SpringBoot 统一登录鉴权、异常处理、数据格式 的正确姿势
  • Java面试题总结 | Java面试题总结6-MYSQL模块(持续更新)
  • Linux命令集(Linux文件管理命令--mv指令篇)
  • 不一样的 Git 之间 | GitLab vs GitHub vs Gitee vs GitCode
  • 海尔牵头IEEE P2786国际标准通过Sponsor投票并连任工作组主席
  • 倾斜摄影超大场景的三维模型的顶层合并的纹理压缩与抽稀处理技术分析
  • linux命令之iostat详解
  • 【C++】程序员必备知识:认识类与对象
  • python基础实战5-python基本结构
  • 移动端异构运算技术 - GPU OpenCL 编程(基础篇)
  • QString类方法和变量简介(全)
  • 中移链控制台对接4A平台功能验证介绍
  • 必知的Facebook广告兴趣定位技巧,更准确地找到目标受众
  • 【MySQL】慢查询+SQL语句优化 (内容源自ChatGPT)
  • HashMap底层源码解析及红黑树分析
  • 科技云报道:一路狂飙的ChatGPT,是时候被监管了
  • 第四十四章 管理镜像 - 传入日记传输率
  • 加密解密学习笔记
  • Spring 属性填充源码分析(简单实用版)
  • 【机器学习分支】重要性采样(Importance sampling)学习笔记
  • 三角回文数+123
  • JAVA常用的异步处理方法总结
  • GitLab统计代码量
  • Linux TCP MIB统计汇总
  • 记录 docker linux部署jar