运维SRE-17 自动化批量管理-ansible3

---
- hosts:alltasks:- name: 01 打开冰箱门shell: echo 01 >> /tmp/bingxiang.log- name: 02 把大象放进冰箱里shell: echo 02 >> /tmp/bingxiang.log- name: 03 关上冰箱门shell: echo 03 >> /tmp/bingxiang.log

在这里插入图片描述
在这里插入图片描述

[root@m01 /server/ans/playbook]# cat 05-nfs-server.yaml 
---
- hosts: dbtasks:- name: 01 部署nfs服务端软件yum:name: nfs-utilsstate: installed- name: 02 修改配置文件lineinfile:path: /etc/exportsline: "/data 172.16.1.0/24(rw)"state: presentbackup: yes- name: 03 创建对应的目录file:path: /data/owner: nfsnobodygroup: nfsnobodystate: directory- name: 04 启动服务rpc-bindsystemd:name: rpcbindenabled: yesstate: started- name : 05 启动服务nfssystemd:name: nfsenabled: yesstate: started
注意:如果从windows传文件记得要用doc2unix转换一下yaml文件格式!

10 Ansible-变量系列

10.1 变量分类

变量
命令行临时使用,较少用
变量文件vars_files某一个主机使用,较少使用
主机组共用的变量文件 group_vars应用范围广泛.
ansible的内置变量(facts变量)收集主机的基本信息,ip地址,主机名,系统及版本…
register变量实现命令行$()或``功能

10.2 变量详解

1)vars,var_files,group_vars

  • 剧本中定义变量
---
- hosts: allvars:dir_name: /hbinz_007file_name: hbinz007tasks:- name: 01.mkdirfile:path: "{{dir_name}}"state: directory- name: 02.touchfile:path: "{{dir_name}}/{{file_name}}"state: touch
  • 剧本比较大的时候,把变量放进一个文件中
cat vars.yml
dir_name: /hbinz_007
file_name: hbinz007cat 08.vars_files_dir.yaml
---
- hosts: allvars_files: ./vars.yamltasks:- name: 01.mkdirfile:path: "{{ dir_name }}"state: directory- name: 02.touchfile:path: "{{ dir_name}}/{{ file_name }}"state: touch 
  • 创建一个变量文件,给某个组共用
用法:需要创建一个group_vars目录.目录下面创建以主机组命名的目录.存放变量文件vars.ymlgroup_vars/ 目录lb/vars.yml  #存放lb组的变量web/vars.yml  #存放web组的变量data/vars.yml #存放xxx组的变量all/vars.yml  #所有主机共用的变量

案例01-根据不同的主机组创建对应的目录

group_vars/  目录web/vars.yaml  #存放web组的变量data/vars.yml #存放xxx组的变量all/vars.yml  #所有主机共用的变量1.在剧本文件的目录下创建group_vars目录,并且里面的目录如下:
tree group_vars/
group_vars/
├── all
│   └── vars.yml
├── data
│   └── vars.yaml
└── web└── vars.yamlhosts文件下定义的: 
[hbinz]
172.16.1.7
172.16.1.31
172.16.1.41
172.16.1.51[web]
172.16.1.7
[db]
172.16.1.51
[nfs]
172.16.1.31
[backup]
172.16.1.41[data:children]
backup
db
nfs
-------------------------------------------------
web服务器创建 /app/code/目录
dir_name: /app/code/
data服务端创建 /data/目录
dir_name: /data/cat 09.vars_group_dir.yml
---
- hosts: alltasks:- name: 根据主机创建不同的目录file:path: "{{ dir_name }}"state: directory
  • group_vars未来应用场景:使用all统一存放变量
    案例02-使用group_vars的all组定义变量
cat vars.yml 
dir_name_code: /app/code/
dir_name_data: /data/cat 09.vars_group_vars_dir.yml
- hosts: alltasks:- name: 01 {{ dir_name_code }}file:path: "{{ dir_name_code }}"state: directory- name: 02 {{ dir_name_data }}file:path: "{{ dir_name_data }}"state: directory
  • 变量基础定义小结
使用方法具体含义应用场景
变量写在剧本开头:vars:简单的较少的可以用这一种
变量写在独立文件中:vars_files:指定变量文件位置了解即可
变量写在独立文件中,按照组进行分类:group_vars/目录all/vars.yml掌握在all中创建所有主机/分组用的变量即可。
  1. ansible-facts变量
facts变量说明 : ansible内置变量,执行剧本,有个默认的任务(task),收集每个主机的基本信息.
# 查看 ansible facts变量内容常用fact变量
ansible_hostname               #主机名
ansible_memtotal_mb            #内存大小(总计) 单位mb 
ansible_processor_vcpus        #cpu数量
ansible_default_ipv4.address   #默认的网卡ip eth0
ansible_distribution           #系统发行版本名字CentOS Ubuntu Debian ...
ansible_processor_cores        #核心总数
ansible_date_time.date         #当前时间 年-月-日

案例01-系统巡检-获取所有机器的基础信息保存到/tmp/主机名命令文件中

步骤:
01.创建文件
02.写入内容cat 10.vars_sys_info.yml 
---
- hosts: alltasks:- name: 创建文件并写入系统基本信息lineinfile:path: /tmp/{{ ansible_hostname }}create: yesline: "主机名:{{ansible_hostname}}\nip地址:{{ansible_default_ipv4.address}}\n内存总计:{{ansible_memtotal_mb}}"
  • facts小结
    • 如果ans中使用到了一些系统的基础信息. eg: ip地址,主机名,时间.
      如果没有这种需求或通过别的方式实现这个需求,可以关闭facts功能,让剧本执行加速. 使用gather_facts: no
cat 08.vars_files_dir.yaml
---
- hosts: allgather_facts: novars_files: ./vars.yamltasks:- name: 01.mkdirfile:path: "{{ dir_name }}"state: directory- name: 02.touchfile:path: "{{ dir_name}}/{{ file_name }}"state: touch 

3)ansible-register变量
eg:创建压缩包压缩包名字包含时间.tar打包压缩,date获取时间

shell:
tar zcf /tmp/etc-`date +%F`.tgz /etc/

1)案例01-创建以主机名命名文件/opt/主机名

步骤:
01.获取主机名:hostname
02.创建文件,使用上一步结果register:变量名字 #这个变量的内容,叫json格式
register:hostname #json格式,只想要输出标准输出,stdout=standard output标准输出
hostname.stdout #获取命令的结果 `hostname`
cat 12.vars_register.yml
---
- hosts: alltasks:- name: 01.获取主机名shell: hostnameregister: hostname- name: 02.输出变量内容debug:msg: "{{hostname.stdout}}"

在这里插入图片描述

按照路径创建文件
---
- hosts: alltasks:- name: 01.获取主机名shell: hostnameregister: hostname- name: 输出变量内容debug:msg: "{{hostname.stdout}}"- name: 02.创建文件file:path: /opt/{{ hostname.stdout }}state: touch

register变量输出结果

register: hostname  
hostname.stdout  #正常输出信息
hostname.rc      #取出返回值.
hostname.stderr  #取出错误信息.

10.3变量小结

为何使用变量:
剧本,脚本使用的变量放在一个文件中,剧本开头的。
一般存放:用户名,用户组,目录,端口.....
变量
命令行临时使用,较少用
剧本文件中vars定义当前这个剧本生效,涉及多个剧本不方便
变量文件vars_files所有变量写入到文件中:key:value变量:值,在剧本中通过定义vars_files: 使用,引用变量文件路径./vars.yml每次使用需要手动在剧本加载.vars_files:./vars.yml
主机组共用的变量文件 group_vars应用范围广泛,根据主机清单里面的分组创建目录,存放vars.yml根据主机所属的主机组,自动读取group_vars/组名/vars.yml文件.一般的结构:group_vars/all/vars.yml
ansible内置变量(facts变量)收集主机的基本信息,ip地址,主机名,系统及版本…如果想提升ans执行速度可以关闭gather_facts: no
register变量(注册变量)实现命令行$()或``功能寄存器变量(注册,临时变量):把命令,模块结果,存放到reg格式变量中,通过变量.stdout取出对应值

11.Ansible-进阶-剧本调试方法

11.1概述

具体方法
debug模块
tags标签
忽略错误

11.2Debug模块

debug模块
msg相当于echo命令,配合着register一起用
案例01-调试-nfs服务端部署脚本
cat 13-debug-nfs-server.yml 
---
- hosts: dbtasks:- name: 01 部署nfs服务端软件yum:name: nfs-utilsstate: installed- name: 02 修改配置文件lineinfile:path: /etc/exportsline: "/data 172.16.1.0/24(rw)"state: presentbackup: yes- name: 03 创建对应的目录file:path: /data/owner: nfsnobodygroup: nfsnobodystate: directoryregister: file_jieguo- name: 输出,显示这个过程debug:msg: "{{ file_jieguo }}"- name: 04 启动服务rpc-bindsystemd:name: rpcbindenabled: yesstate: started- name : 05 启动服务nfssystemd:name: nfsenabled: yesstate: started

在这里插入图片描述

11.3 tags标签

一般用于调试剧本,给剧本每个task可以设置个标签
运行剧本的时候可以运行指定标签
运行剧本可以排除某些标签[root@m01 /server/ans/playbook]# cat 14-tags-nfs-server.yml 
---
- hosts: dbtasks:- name: 01 部署nfs服务端软件yum:name: nfs-utilsstate: installedtags:- install- name: 02 修改配置文件lineinfile:path: /etc/exportsline: "/data 172.16.1.0/24(rw)"state: presentbackup: yestags:- conf- conf_file- name: 03 创建对应的目录file:path: /data/owner: nfsnobodygroup: nfsnobodystate: directorytags:- conf- conf_dir- name: 04 启动服务rpc-bindsystemd:name: rpcbindenabled: yesstate: startedtags:- start_srv- name : 05 启动服务nfssystemd:name: nfsenabled: yesstate: startedtags:- start_srv

运行指定的标签
ansible-playbook -i hosts --tags conf 14-tags-nfs-server.yml
ansible-playbook -i hosts --tags conf_file,conf_dir 14-tags-nfs-server.yml
运行剧本的时候排除指定的标签.
ansible-playbook -i hosts --skip-tags install,conf_file 14-tags-nfs-server.yml

11.4忽略错误

用于运行剧本的时候,强制让某个任务(模块)运行即使出错了,也不要中断我们的剧本

cat 15-ignore-tags-nfs-server.yml 
---
- hosts: dbtasks:- name: 01 部署nfs服务端软件yum:name: nfs-utilstate: installedignore_errors: yestags:- install- name: 02 修改配置文件lineinfile:path: /etc/exportsline: "/data 172.16.1.0/24(rw)"state: presentbackup: yestags:- conf- conf_file- name: 03 创建对应的目录file:path: /data/owner: nfsnobodygroup: nfsnobodystate: directorytags:- conf- conf_dir- name: 04 启动服务rpc-bindsystemd:name: rpcbindenabled: yesstate: startedtags:- start_srv- name : 05 启动服务nfssystemd:name: nfsenabled: yesstate: startedtags:- start_srv

ansible-playbook -i hosts 15-ignore-tags-nfs-server.yml
在这里插入图片描述

11.5调试方法小结

具体方法应用场景
debug模块执行剧本的时候输出剧本的执行流程,一般配合register一起使用. 输出facts变量.自定义变量.
tags 标签给一些模块加上标签,运行剧本的时候可以运行指定标签的内容,排除指定标签.
忽略错误运行剧本的时候忽略一些模块的错误,让剧本继续运行.

12.Ansible-进阶-进阶应用

  • include
  • handler
  • when判断
  • 循环

12.1 include功能-熟悉

include文件包含.把一个任务分成多个剧本来实现,书写个总剧本文件,通过include_tasks: 引用子剧本文件.
⚠ 子剧本文件中只需要些模块部分(task部分即可)
在这里插入图片描述

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

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

相关文章

Spring Boot WebFlux:实现web(Server-Sent Events)事件异步推送

WebFlux 在Spring Boot中,Flux是一个重要的概念,它是Spring Framework 5.0以后引入的响应式编程框架WebFlux的核心组件之一。Flux是Reactor项目的一部分,它实现了Reactive Streams规范,用于处理异步、非阻塞的数据流。 与传统的…

Grounded-SAM(最强Zero-Shot视觉应用):本地部署及各个模块的全网最详细使用教程!

本篇文章主要对Grounded-SAM项目的部署以及使用进行讲解,目的是使读者可以直接参考文档去使用Grounded-SAM,而无需再去参考Github一步步自己去分析尝试(也算是我使用过程中的心得)。 对于Grounded-SAM 技术报告的paper阅读可以跳转…

介绍 CI / CD

目录 一、介绍 CI / CD 1、为什么要 CI / CD 方法简介 1、持续集成 2、持续交付 3、持续部署 2、GitLab CI / CD简介 3、GitLab CI / CD 的工作原理 4、基本CI / CD工作流程 5、首次设置 GitLab CI / CD 6、GitLab CI / CD功能集 一、介绍 CI / CD 在本文档中&#x…

echarts 实现x轴文字过长时折行展示

代码如下: this.options {color: ["#0075FF", "#00E2C4", "#FCA884", "#FFCB11"],grid: {top: "25%",bottom: "6%",right: "8%",left: "8%",containLabel: true,},legend: {top…

springboot751社区维修平台

springboot751社区维修平台 获取源码——》公主号:计算机专业毕设大全

TikTok账号注册指南:TikTok的注册方式有哪些?

随着全球数字化浪潮的加速,TikTok已成为跨越文化和国界的社交媒体巨头。对于寻找跨境电商机会的卖家来说,一个有效的TikTok账号都是打开通往成功之门的钥匙。本文将为大家详细介绍TikTok账号的注册方式,并提供一些实用的技巧,帮助…

018—pandas 生成笛卡尔积排列组合合并多列字符串数据

思路: 本需求需要将给定的几列数据,生成一个排列组合形式的数据列,利用到 Pandas 多层索引生成的笛卡尔积的方法。 二、使用步骤 1.引入库 代码如下(示例): import pandas as pd2.读入数据 代码如下&…

【动态规划】【回文】【字符串】1147. 段式回文

作者推荐 【广度优先搜索】【网格】【割点】【 推荐】1263. 推箱子 本文涉及知识点 动态规划汇总 LeetCode1147段式回文 你会得到一个字符串 text 。你应该把它分成 k 个子字符串 (subtext1, subtext2,…, subtextk) ,要求满足: subtext…

LeetCode104.二叉树的最大深度

题目 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 输入:root [3,9,20,null,null,15,7] 输出:3思路 计算二叉树的最大深度通常可以使用 递归 来实现。我们可以从根…

第九节HarmonyOS 常用基础组件26-Radio

1、描述 单选框,提供相应的用户交互选择项。 2、接口 Radio(options:{value:string, group:string}) 3、参数 参数名 参数类型 必填 描述 value string 是 当前单选框的值。 group string 是 当前单选框的所属组名称,相同group的Radio只能…

C语言-指针初学速成

1.指针是什么 C语言指针是一种特殊的变量,用于存储内存地址。它可以指向其他变量或者其他数据结构,通过指针可以直接访问或修改存储在指定地址的值。指针可以帮助我们在程序中动态地分配和释放内存,以及进行复杂的数据操作。在C语言中&#…

【算法分析与设计】1的个数

📝个人主页:五敷有你 🔥系列专栏:算法分析与设计 ⛺️稳中求进,晒太阳 题目 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位…

钧达股份:光伏跨界新贵只身赴港股,光伏“秩序重塑”?

2月21日,钧达股份终是在“千呼万唤”之中披露最新业绩快报。 快报显示,钧达股份预计2023年经调整后营业收入183.97亿元,同比增长58.65%,归母净利润8.32亿元,同比增长16.00%。 其中,由于Q4完整计提了9.5GW…

洛谷 【算法1-2】排序

【算法1-2】排序 - 题单 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 鄙人不才,刷洛谷,迎蓝桥,【算法1-2】排序 已刷,现将 AC 代码献上,望有助于各位 P1271 选举学生会 【深基9.例1】选举学生会 - 洛谷 题目 解答…

概率密度函数(PDF)与神经网络中的激活函数

原创:项道德(daode3056,daode1212) 在量子力学中,许多现象都是统计的结果,基本上用的是正态分布,然而,从本质上思考,应该还存在低阶的分布,标准的正态分布是它的极限,这样一来,或许在…

《论文阅读》通过识别对话中的情绪原因来提高共情回复的产生 EMNLP 2021

《论文阅读》通过识别对话中的情绪原因来提高共情回复的产生 EMNLP 2021 前言简介方法实现Emotion ReasonerResponse Generator实验结果示例总结前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手工敲击键盘~ 今天为大家带来的是《Improv…

备战蓝桥杯—— 双指针技巧巧答链表1

对于单链表相关的问题,双指针技巧是一种非常广泛且有效的解决方法。以下是一些常见问题以及使用双指针技巧解决: 合并两个有序链表: 使用两个指针分别指向两个链表的头部,逐一比较节点的值,将较小的节点链接到结果链表…

【ECharts】调用接口获取后端数据的四种方法

使用eacharts做大屏,需要使用后端数据,下面的方法是自己试过有效的,有什么不对的,望各位大佬指点。 目录 方法一:在mounted中使用定时器调用eacharts方法(定时器可以获取到data中的数据) 方法…

图解李白的“朋友圈”

《长安三万里》作为2023年票房第一的国漫电影,以安史之乱为背景,从诗人高适的视角铺设了一幅绚丽的历史长卷,细细讲述“诗仙”李白跌宕起伏的一生,以及大唐盛世一路荣耀幻灭的唏嘘。同时,在这部动画电影中出现了多位大…

CP04大语言模型ChatGLM3-6B特性代码解读(2)

CP04大语言模型ChatGLM3-6B特性代码解读(2) 文章目录 CP04大语言模型ChatGLM3-6B特性代码解读(2)构建对话demo_chat.py定义client对象与LLM进行对话 构建工具调用demo_tool.py定义client对象定义工具调用提示词定义main&#xff0…