运维SRE-18 自动化批量管理-ansible4

news2024/9/22 22:31:32

12.2handles

  • handles触发器(条件),满足条件后再做什么事情
  • 应用场景:想表示:配置文件变化,再重启服务
    配置handlers之前,每次运行剧本都会重启nfs,无论配置文件是否变化。
[root@m01 /server/ans/playbook]# cat 17-handler-nfs-server.yml 
---
- hosts: db
  tasks:
    - name : 01.分发配置
      copy:
        src: ./exports
        dest: /etc/exports
        backup: yes

    - name : 05 启动服务nfs
      systemd:
        name: nfs
        enabled: yes
        state: restarted
不管exports配置有无修改,都会执行05启动nfs服务
配置了handerles,只有服务配置文件变化了再重启服务。
[root@m01 /server/ans/playbook]# cat 17-handler-nfs-server.yml 
---
- hosts: db
  tasks:
    - name : 01.分发配置
      copy:
        src: ./exports
        dest: /etc/exports
        backup: yes
      notify:
        - restart nfs   #与下面handlers的name一样
  handlers:
    - name: restart nfs
      systemd:
        name: nfs
        enabled: yes
        state: restarted

12.3 when(判断)

when是ansible中的判断语句(条件语句)
实现对于某个模块在满足或不满足xxxxx条件下再执行
给web服务器或lb服务器,配置nginx的yum源

when: ( ansible_distribution == 'Ubuntu') #如果系统的发行版本是Ubuntu则运行模块ansible_distribution的ansible-facts变量

when: ( ansible_hostname is match("web|lb") ) #主机名包含web或lb,配置nginx源

when: ( ansible_hostname is not match("web|lb") ) 

cat nginx.repo 
[nginx]
baseurl = http://nginx.org/packages/centos/$releasever/$basearch/
enabled = 1
gpgcheck = 0
name = nginx stable repo

cat 18-when-fenfa-nginx-yum.yml 
---
- hosts: all
  tasks:
    - name: 配置lb或者web的nginx yum源
      copy:
        src: ./nginx.repo
        dest: /etc/yum.repos.d/nginx.repo
        backup: yes
      when: ( ansible_hostname is match("web|lb") )

12.4 循环

批量启动,重启服务
案例01-批量重启服务:crond,nfs,rpcbind

cat 19-item-restart-service.yml 
---
- hosts: nfs
  gather_facts: no
  tasks:
    - name: restart 多个服务
      systemd:
        name: "{{ item }}"
        state: restarted
      with_items:
        - crond
        - rpcbind
        - nfs

案例02-循环添加用户并指定uid

  • ansible中2个或多个变量的循环语句格式.
用户名uid
hbinz12307
zhangsan12380
cat 20-item-duo-var-useradd.yml 
---
- hosts: all
  tasks:
    - name: 批量添加用户
      user:
        name: "{{ item.name }}"
        uid: "{{ item.uid }}"
        state: present
      with_items:
        - { name: "hbinz" , uid: "12307" }
        - { name: "zhangsan" , uid: "12308" }

循环小结:

with_items:实现循环,变量名字item,多个变量循环了解即可
注:这里的with_items可以替换成loops

12.5 Jinja2模板

经常使用在配置文件中,让配置文件中包含变量
copy模块没有解析变量
template模块传输的时候解析配置文件变量(ansible),配置文件格式改为exports.j2
cat 21-jinja-fenfa-conf.yml
---
- hosts: nfs
  tasks:
    - name: 分发nfs配置文件,加主机名
      template:
        src: ./exports.j2
        dest: /etc/exports
ansible-playbook -i hosts 21-jinja-fenfa-conf.yml

nfs01的exports:
[root@nfs01 ~]# cat /etc/exports
# nfs01 nfs配置文件
/data 172.16.1.0/24(rw,all_squash)

  • 使用jinja2模板要求
    • 配置文件必须要以.2结尾(ansible)
    • 分发文件的时候,使用template模块,用法与copy一致

在这里插入图片描述

案例02-jinja2循环

批量共享目录/data /backup /nfsdata
cat exports.j2
# {{ ansible_hostname}} nfs配置文件
{% for name in ["/data","/backup","/nfsdata"] %}
{{name}} 172.16.1.0/24(rw,all_squash)
{% endfor %}

--------------------------------------------------
[root@nfs01 ~]# cat /etc/exports
# nfs01 nfs配置文件
/data 172.16.1.0/24(rw,all_squash)
/backup 172.16.1.0/24(rw,all_squash)
/nfsdata 172.16.1.0/24(rw,all_squash)

核心掌握:

  • 配置文件xxxx.j2+template模块
  • jinja2配置文件支持ans变量.

12.6 Roles

  • roles:规范剧本相关的目录.本质规定的几个专用的目录
    按照初级方式写剧本
  1. 剧本nfs服务端
---
- hosts: nfs
  tasks:
    - name: 01.部署nfs服务端软件
      yum:
        name: nfs-utils
        state: installed
        
    - name: 02.修改配置文件
      template:
        src: ./exports.j2
        dest: /etc/exports
        backup: yes
      notify: 
        - 04.启动服务-rpcbind-nfs服务
    
    - name: 03.创建对应的目录和,权限
      file:
        path: /data/
        owner: nfsnobody
        group: nfsnobody
        state: directory
        
  handlers:
    - name: 04.启动服务-rpcbind-nfs服务
      systemd:
        name: "{{ item }}"
        enabled: yes
        state: restarted
      with_items:
        - rpcbind
        - nfs

a)roles结构
在这里插入图片描述

b)环境准备及部署流程

  • 1.先书写或拆分剧本中tasks的内容
  • 2.根据剧本,分类存放配置文件,模板文件(j2)
  • 3.根据剧本,配置handlers的main.yaml文件
  • 4.书写剧本入口.与nfs-server目录同级
mkdir -p roles
cd roles
mkdir -p nfs-server/{files,templates,tasks,handlers}
[root@m01 /server/ans/playbook/roles]# tree -F
.
└── nfs-server/
    ├── files/
    ├── handlers/
    ├── tasks/
    └── templates/

c)先书写拆分或拆分剧本中tasks的内容.

[root@m01 /server/ans/playbook/roles]# cat nfs-server/tasks/main.yml 
- name: 01.部署nfs服务端软件
    yum:
      name: nfs-utils
      state: installed
      
- name: 02.修改配置文件
   template:
     src: ./exports.j2
     dest: /etc/exports
     backup: yes
   notify: 
     - 04.启动服务-rpcbind-nfs服务
    
- name: 03.创建对应的目录和,权限
  file:
    path: /data/
    owner: nfsnobody
    group: nfsnobody
    state: directory

d)根据剧本,分类存放配置文件,模板文件(j2)

[root@m01 /server/ans/playbook/roles]# cat nfs-server/templates/exports.j2 
# {{ ansible_hostname}} nfs配置文件
/data/ 172.16.1.0/24(rw,all_squash)
[root@m01 /server/ans/playbook/roles]# tree -F
.
└── nfs-server/
    ├── files/
    ├── handlers/
    ├── tasks/
    │   └── main.yml
    └── templates/
        └── exports.j2

5 directories, 2 files

e)根据剧本,配置handlers的main.yml文件

[root@m01 /server/ans/playbook/roles]# cat nfs-server/handlers/main.yml 
- name: 04.启动服务-rpcbind-nfs服务
  systemd:
    name: "{{ item }}"
    enabled: yes
    state: restarted
  with_items:
    - rpcbind
    - nfs
[root@m01 /server/ans/playbook/roles]# tree -F
.
└── nfs-server/
    ├── files/
    ├── handlers/
    │   └── main.yml
    ├── tasks/
    │   └── main.yml
    └── templates/
        └── exports.j2

f)书写入口剧本,与nfs-server目录同级

[root@m01 /server/ans/playbook/roles]# cat top.yml 
---
- hosts: nfs
  roles:
    - role: nfs-server  #与目录名字一致,ans才能找到下个入口
[root@m01 /server/ans/playbook/roles]# tree -F
.
├── nfs-server/
│   ├── files/
│   ├── handlers/
│   │   └── main.yml
│   ├── tasks/
│   │   └── main.yml
│   └── templates/
│       └── exports.j2
└── top.yml

g)roles执行流程

  • 1.ansible-playbook -i host top.yml
  • 2.读取top.yml内容获取roles信息
  • 3.根据顺序先执行第1个role—>nfs-server
  • 4.执行nfs-server,找nfs-server对应的目录
  • 5.执行里面的tasks下面的main.yml
  • 6.执行mian.yml的时候,遇到copy/template模块则找对应的目录copy(files),template(templates),找对应的文件
  • 7.执行main.yml的时候,遇到notify,则会找handlers下面的main.yml的内容,进行匹配和执行。

12.7 Galaxy-了解

官方roles集合

ansible-galaxy install geerlingguy.nginx

12.8 ansible-vault-了解

加密文件

ansible-vault encrypt hosts   #加密配置文件,设置密码
ansible --ask-vault-pass -i hosts all -m ping #使用ansible命令或ansible-playbook命令需要加上 --ask-vault-pass

13.Ansible-进阶-优化

/etc/ansible/ansible.cfg

inventory = /etc/ansible/hosts  #指定的默认的主机清单. 未来可以修改为 ./hosts 就可以不用加上-i
forks = 50 #并发数量. 可以增加这个数量获取更快批量管理效率.
sudo_user = root  #配置下被管理端具有sudo权限的用户,并且修改/etc/sudoers 注释掉requiretty
host_key_checking = False  #默认是True 连接新的主机要进行验证. 建议关闭,加速.
log_path = /var/log/ansible.log   #默认没有开启.
ssh_args = -C -o ControlMaster=auto -o 
ControlPersist=6d  #连接的保持时间. 6d 10d
pipelining = True #加速,加速连接合并不必要的连接. 要求:不能使用sudo,如果使用则不能开启.

14.总结Ansblie

主机清单
模块
剧本

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端项目如何准确预估个人工时

补充 看来很多小伙伴对这个问题感兴趣,大家不要忽视了压工时这个事。 领导为什么会压工时? 使他的KPI更好看不清楚做这个东西实际要多长时间因为第2点的原因,他也无法去争取合理时间部分人看着下属加班,有种大权在握&#xff0…

题目 1226: 方砖问题

题目描述: 用边长小于N的正方形方砖(注意,不要求所有的方砖大小相同,请看样例说明)不重叠地铺满N*N的正方形房间,最少要几块方砖。 解题思路: 1.n是偶数时,都可以用4块边长为n/2的方砖填满;例…

2024/2/22

P8680 [蓝桥杯 2019 省 B] 特别数的和 题目描述 小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 00),在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共28 个,他们的和是574。 请问,在…

SCI一区 | Matlab实现GAF-PCNN-MSA格拉姆角场和双通道PCNN融合注意力机制的多特征分类预测

SCI一区 | Matlab实现GAF-PCNN-MSA格拉姆角场和双通道PCNN融合注意力机制的多特征分类预测 目录 SCI一区 | Matlab实现GAF-PCNN-MSA格拉姆角场和双通道PCNN融合注意力机制的多特征分类预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 1.【SCI一区级】Matlab实…

以 All-in-One 模式安装 KubeSphere时避坑

环境 ubuntu 18.04 准备 安装服务插件 socat 必须 可选但建议 conntrack 必须 可选但建议 ebtables 可选但建议 可选但建议 ipset 可选但建议 可选但建议 命令 sudo apt-get install socat安装docker 建议自行安装,不用KubeSphere 自带的 处理服务器配置 1…

RISC-V架构——CLINT中断控制器初始化(直接模式、向量模式)

1、前言 CLINT(Core-Local Interruptor)翻译过来是核本地中断控制器,是比较简单的中断控制器,通常和PLIC(Platform-Level Interrupt COntroller)搭配使用使用CLINT涉及的MTVEC、MCAUSE寄存器,CLIC控制器也同样会使用&…

python(23)——while循环

前言 在Python中,while 循环用于重复执行一段代码块,只要指定的条件保持为真(True)。一旦条件变为假(False),循环就会终止。while 循环通常用于在不知道循环将执行多少次的情况下进行迭代。 w…

【快速搞定Webpack5】修改输出文件目录及自动清理上次打包文件(五)

介绍 默认情况下webpack打包后,我们的图片和js等文件都会被打包到dist目录下,文件多了混淆在一起一方面不利于文件的查找和管理,另外一方面看上去也不美观。 所以今天我们学习的内容就是控制输出后的文件进入不同的目录。 一、配置 新增4…

对象池模式-Object Pool Pattern

原文地址:https://jaune162.blog/design-pattern/object-pool-pattern/ 原文中可下载高清SVG矢量类图 引言 对象池模式(Object Pool Pattern)是一种创建一组可重用对象的设计模式。它通过维护一个预分配的对象集合,避免了频繁地创建和销毁对象所带来的性能开销。在需要使用…

力扣145 二叉树的后序遍历 Java版本

文章目录 题目描述递归解法代码 非递归解法思路代码 题目描述 给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[3,2,1] 示例 2: 输入:root [] 输出…

指针笔试题(C语言进阶)

目录 前言 1、案例一 1.1 答案 1.2 解析 2、案例二 2.1 答案 2.2 解析 3、案例三 3.1 答案 3.2 解析 4、案例四 4.1 答案 4.2 解析 5、案例五 5.1 答案 5.2 解析 总结 前言 “纸上得来终觉浅,绝知此事要躬行”。本篇通过对指针实际案例的分析&…

【Spring】SpringBoot 创建和使用

目 录 一.什么是Spring Boot?为什么要学Spring Boot?二.Spring Boot 优点三.Spring Boot 项目创建3.1 使用 Idea 创建3.2 网页版创建注意事项:包路径错误小结:约定大于配置 一.什么是Spring Boot?为什么要学Spring Boo…

算法沉淀——穷举、暴搜、深搜、回溯、剪枝综合练习二(leetcode真题剖析)

算法沉淀——穷举、暴搜、深搜、回溯、剪枝综合练习二 01.括号生成02.组合03.目标和04.组合总和 01.括号生成 题目链接:https://leetcode.cn/problems/generate-parentheses/ 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有…

【JS逆向学习】同花顺(q.10jqka)补环境

逆向目标 目标网址:https://q.10jqka.com.cn/ 目标接口: https://q.10jqka.com.cn/index/index/board/all/field/zdf/order/desc/page/3/ajax/1/ 目标参数:cookie 逆向过程 老规矩,先分析网络请求,发现是 cookie 加…

MySQL 8.0.36 WorkBench安装

一、下载安装包 百度网盘链接:点击此处下载安装文件 提取码:hhwz 二、安装,跟着图片来 选择Custom,然后点Next 顺着左边框每一项的加号打开到每一个项的最底层,点击选中最底层的项目,再点击传过去右边的绿色箭头&a…

光伏智慧化运维系统:实现一站式光伏服务前沿探索

随着全球能源结构的转型,光伏发电已成为绿色能源的重要组成部分。然而,光伏企业的运营和管理却面临着诸多挑战,如方案设计慢、运行状况难以实时掌握、收资效率低等。为解决这些问题,光伏智慧化运维系统应运而生,以其一…

2024牛客(4)K题

登录—专业IT笔试面试备考平台_牛客网 using i64 long long; using ll long long; constexpr ll M 1e9 7; template<class Info> struct SegmentTree {int n;std::vector<Info> info;SegmentTree() : n(0) {}SegmentTree(int n_, Info v_ Info()) {init(n_, …

学习笔记-Git

Git 问题一描述解决方法注意事项 问题一 描述 在commit和push的时候因为网络太慢了中途强行关闭了进程&#xff0c;而push的内容因为文件过大导致无法正常push 按照原本的流程在push的时候会提示失败&#xff0c;并且需要在解决了大文件之后重新push 而因为中途中断了&#x…

GitHubApp大集结!GSYGithubAppFlutter带你飞越编程世界!

GitHubApp大集结&#xff01;GSYGithubAppFlutter带你飞越编程世界&#xff01; GSYGithubAppFlutter是一个功能丰富、跨平台的开源GitHub客户端应用程序&#xff0c;基于Flutter框架开发。该项目属于GSYGithubApp系列&#xff0c;目前已经拥有Flutter、Weex、ReactNative和Ko…

Microsoft PowerToys:自定义 Windows 的实用程序

Microsoft PowerToys&#xff1a;自定义 Windows 的实用程序 Microsoft PowerToys 是一组实用程序&#xff0c;供高级用户调整和简化其 Windows 体验以提高工作效率。 微软官方地址为&#xff1a;https://learn.microsoft.com/en-us/windows/powertoys/&#xff0c;其github源…