网站集群批量管理-Ansible剧本与变量

复盘内容:链接指北

查看ansible命令文档

ansible-doc -s systemd

一、剧本

何为剧本:

playbook 文件,用于长久保存并且实现批量管理,维护,部署的文件. 类似于脚本存放命令和变量

剧本yaml格式,yaml格式的文件:空格,冒号.

剧本未来我们批量管理,运维必会的内容.

ans剧本ans ad-hoc
共同点批量管理,使用模块批量管理,使用模块
区别重复调用不是很方便,不容易重复
应用建议(应用场景)部署服务,多个步骤的任务测试模块,临时性任务

案例:脚本书写格式

在这里插入图片描述

- hosts: alltasks:- name: 01 打开冰箱门shell: echo 1 >>/tmp/bingxiang.log- name: 02 把大象放入冰箱shell: echo 2 >>/tmp/bingxiang.log- name: 03 关上冰箱的门shell: echo 3 >>/tmp/bingxiang.log
#书写剧本 注意以.yml或.yamt结尾 01.show.yml
#-i 指定主机清单文件,如果不写默认调用/etc/ansible/hosts
ansible-playbook -i hosts 01.show.yml

在这里插入图片描述

执行的时候有奶牛:

可以删除软件或修改ansible.cfg配置进行关闭 #nocows =1去掉注释即可

书写Ans playbook注意事项:

  • 同一个层级的内容对齐的0
  • 不同层级的通过2个空格对齐
  • 不能使用tab键

二、剧本案例

1、案例01: 创建目录并分发文件

创建目录/server/files/etc/hosts文件并且发送过去/server/files

- hosts: alltasks:- name: 01 创建目录/server/filesfile: path=/server/files state=directory- name: 02 分发文件copy: src=/etc/hosts dest=/server/files

2、案例02:分发软件包,安装软件包,启动服务

zabbix-agent软件包(下载)—》 安装软件包—》配置(略)—》启动开机自启动

- hosts: alltakes: - name: 01 软件包下载get_url: url: https://mirrors.aliyun.com/zabbix/zabbix/6.0/rhel/7/x86_64/zabbix-agent-6.0.13-release1.el7.x86_64.rpmdest: /tmp/validate_certs: no- name: 02 安装软件包yum:name:/tmp/zabbix-agent-6.0.13-release1.el7.x86_64.rpmstate=insatlled- name: 03 配置 debug:msg: "进行配置zabbix-agent"- name: 04 启动systemd:name: zabbix-agentenabled: yesstate: started
ansible all -m shell -a 'ps -ef | grep zabbix'

不能使用-m command。在 Ansible 的命令模块中,你需要以单个字符串的形式指定要执行的命令,而不能使用管道符号 |

3、案例03:nfs服务

  • nfs服务端:在backup上部署nfs服务,共享/backup-nfs目录,all_squash,匿名用户:nfsnobody
  • nfs客户端:web挂载 /ans-upload目录挂载nfs服务端共亭的/backup-nfs(永久挂载)

写剧本必备-列出流程

服务端流程:

  • 部署nfs-utils,rpcbind
  • 修改配置文件
  • 创建共享目录并改所有者
  • 启动服务rpcbind,nfs(注意顺序)

客户端流程:

  • 安装nfs-utils2.
  • 挂载与永久挂载
- hosts: nfstasks: - name: 01 部署nfs-utils,rpcbindyum: name: nfs-utilsstate: installed- name: 02 修改配置文件lineinfile:path: /etc/exportsline: "/backup-nfs/ 10.0.0.0/24(rw)"create: true- name: 03 创建共享目录并且修改权限file: path: /backup-nfs/state: directoryowner: nfsnobodygroup: nfsnobody- name: 04-1 依次启动服务rpcsystemd: name: rpcbindenabled: yesstate: started- name: 04-2 依次启动服务nfssystemd: name: nfsenabled: yesstate: started
- hosts: webtasks: - name: 01 部署nfs-utils,rpcbindyum: name: nfs-utilsstate: installed- name: 02 永久挂载mount:src: 10.0.0.31:/backup-nfs/path: /data/fstype: nfsstate: mounted

三、Ansible中的变量

变量无处不在,在ans中大部分地方都可以定义变量.

比较常用的创建变量的地方:剧本中,类似于功能,共用的变量文件.

可以定义变量的地方说明
在剧本文件中定义比较常用。仅仅限于当前的play使用,
register变量(注册变量)ip= hostname -I,实现脚本中反引号的功能,可以获取命令结果
变量文件,根据主机清单分分组进行定义变量如果多个剧本,使用相同的变量,大型的剧本roles
inventory主机清单中定义变量未来可以用于批量修改主机使用,其他很少用了
命令号中几乎不用
facts变量一般用于获取主机基本信息:ip,主机名,系统(centos/ubuntu)如果不需要可以关闭,用于加速剧本的执行

3.1、剧本中的变量

在剧本play中定义变量应用:

  1. 仅仅在当前play生效.
  2. 一般用来存放路径,用户名,ip地址,类似于之前使用的脚本.
  3. 注意引号使用.

使用变量的时候如果变量是某个选项的开头,则变量引用的时候需要加上双引号.

#dir就是变量,变量的内容:右边的内容- hosts: allvars:dir: /oldboy/lidao/upload/tasks:- name: mkdirfile:path: "{{ dir }}"state: directory

面试常问:使用变量的时候如果变量是某个选项的开头,则变量引用的时候需要加上双引号.

3.2、共用变量-变量文件

[root@m01 /server/scripts/playbook]# cat 05.vars.yml
- hosts: allvars_files: ./vars.ymltasks:- name: filefile:path: "{{ dir  }}/{{ user }}-{{ file }}"state: touch

3.3、共用变量-根据主机组使用变量

group_vars根据主机清单的分组去匹配

group_vars/lb/vars.yml #存放lb组的变量web/vars.yml #存放web组的变量data/vars.yml #存放xxx组的变量all/vars.yml #所有主机共用的变量
未来一般使用all分组即可,把所有变量存放在一起,供剧本使用
group_vars/lb/均为目录,vars.yml为文件
[root@m01 ~]# cat vars.ymluser: www
nfs_dir: /nfs_backup
web_mount_dir: /web_nfs
nfs_server: 172.16.1.41
rsync_pass: 1

3.4、facts变量

运行剧本的时候ans会收集每个主机的本信息,这些信息形成的变量叫做facts变量,

facts变量setup模块获取

#获取web主机上的setup模块变量
ansible -i /etc/ansible/hosts web -m setup
常用fact变量
ansible_hostname  #主机名
ansible_memtotal_mb #内存大小(总计) 单位mb
ansible_processor_vcpus     #cpu数量
ansible_default_ipv4.address  #默认的网卡ip eth0
ansible_distribution      #系统发行版本名字
ansible_processor_cores   #cpu核心数

3.5、register变量注册变量

本质上就是用来实现脚本中的反引号功能

用户通过命令获取的内容都存放到Register变量

- hosts: alltasks:- name: get dateshell: date +%Fregister: result- name: print result 变量内容debug:msg: |"register变量的全部内容是:{{result.stderr }}""register变量的精确的内容是:“{{result.stdout}}”

register注册变量:
变量.stdout 获取输出即可.

json形式数据.
key: value
键: 值
变量: 内容
date +%F
stdout部分是我们想要的内容.
register变量result.
result.stdout #std standard output 标准输出.

符号说明
msg:中的|表示下面的内容是多行. |也可以用于其他模块中.

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

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

相关文章

如何在Dify中安装运行pandas、numpy库(离线、在线均支持,可提供远程指导)

pandas和numpy这两个库是数据科学和数据分析中经常使用的工具包,原生的Dify无法直接使用这两个库,需要手动安装后才可以使用。本文将介绍如何在Dify中安装pandas和numpy,并在代码执行节点中运行使用pandas和numpy。 Dify的代码执行节点中的py…

Helm核心概念与常见操作介绍

在管理Kubernetes集群里的应用时,Helm能帮上大忙,它把应用的部署、升级和管理变得简单多了,有如是Kubernetes的 “应用商店”。 Helm的三个重要概念 三大概念最直接的理解:Helm 安装 charts 到 Kubernetes 集群中,每…

rkmpp 解码 精简mpi_dec_test.c例程

rkmpp 解码流程(除 MPP_VIDEO_CodingMJPEG 之外) 源码 输入h264码流 输出nv12文件 /** Copyright 2015 Rockchip Electronics Co. LTD** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file exce…

用一个实际例子快速理解MCP应用的工作步骤

已经有很多的文章介绍MCP server,MCP Client工作原理,这里不做太多介绍。但是很多介绍都只是侧重介绍概念,实际的工作原理理解起来对初学者还是不太友好。本文以一个智能旅游咨询系统为例,详细说明在利用 Model Context Protocol&…

【LeetCode 题解】数据库:1321.餐馆营业额变化增长

一、问题描述 本题给定了一个名为 Customer 的表,记录了餐馆顾客的交易数据,包括顾客 ID、姓名、访问日期和消费金额。作为餐馆老板,我们的任务是分析营业额的变化增长情况,具体来说,就是计算以 7 天(某日…

【Python】读取xlsb或xlsx的单一或连续单元格工具类

代码主要来自Kimi.ai,有修改。 优先使用工作表序号索引工作表,序号从1开始。 运行需要先安装openpyxl和pyxlsb两个第三方库。 import openpyxl from openpyxl.utils import range_boundaries from pyxlsb import open_workbook as open_xlsbclass Exc…

【蓝桥杯】动态规划:背包问题

这篇文章主要记录动态规划方面的学习。 动态规划的核心思想: 把大问题分解成小问题,记住小问题的解,避免重复计算。 动态规划(DP)的三大特点: ①最优子结构:大问题的最优解可以由小问题的最优解推导出来 ②重叠子问题:在求解过程中会反复遇到相同的小问题 ③无后效…

华为数字芯片机考2025合集1已校正

单选 1.以下低功耗措施中,哪种不是降低电路翻转率的方法? A.在不进行算术运算的时候,使这些模块的输入保持不变,不让新的操作数进来 B.采用Gray 码或One‐hot 码作为状态机编码 C.减少电路中的glitch D.重新安排“if‐else”表达…

React 列表渲染

开发环境:Reacttsantd 你可能经常需要通过 JavaScript 的数组方法 来操作数组中的数据,从而将一个数据集渲染成多个相似的组件。在这篇文章中,你将学会如何在 React 中使用 filter() 筛选需要渲染的组件和使用 map() 把数组转换成组件数组。 …

力扣刷题DAY11(动态规划-线性DP)

一、最长上升子序列 300. 最长递增子序列 &#xff08;一&#xff09;初版代码 class Solution { public:int lengthOfLIS(vector<int>& nums) {int n nums.size();vector<int> f(n 1, 1); //初始化为1&#xff0c;因为每个数至少可以作为一个单独的序列in…

DFS--

数字的全排列 #include <bits/stdc.h> using namespace std;//最大的排列数目 const int N10; int n; //存储排列的路径 int path[N]; //标记数字是否已经被使用 bool st[N];void dfs(int u){//到达递归边界&#xff0c;输出一个排列if(un){//输出循环for(int i0; i<…

栈与队列及其基础应用

一.栈 1.栈的定义 栈是一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。其结构可以参考羽毛…

openEuler-22.03-LTS-SP3 编译安装 Greenplum-db 6.20.0

openEuler-22.03-LTS-SP3 编译安装 Greenplum-db 6.20.0 1、配置 yum 华为源2、安装依赖3、源码安装 openssl 1.0.1u3.1、openssl 1.1.1 降级到 openssl 1.0.1 4、源码安装 python 2.75、使用 pip3 安装 Python 相关依赖6、编译安装 Greenplum-db 6.20.06.1、修改配置6.2、基于…

机器学习02——概要

一、简介 机器学习是一门在没有明确编程的情况下让计算机学习的科学。 监督学习是有目标的&#xff0c;输入数据对应明确的输出&#xff1b;无监督学习则是“探索”型的&#xff0c;模型的目标是从数据中发现潜在的模式或结构&#xff0c;而不需要预先知道标签。 二、机器学…

swift-08-属性、汇编分析inout本质

一、Swift中跟实例相关的属性可以分为2大类 1.1 存储属性&#xff08; Stored Property&#xff09; 类似于成员变量这个概念 存储在实例的内存中 结构体、类可以定义存储属性 枚举不可以定义存储属性&#xff08;因为枚举只存储关联值和case&#xff09; 1.2 计算属性&am…

【HarmonyOS Next之旅】DevEco Studio使用指南(十二)

目录 1 -> Code Linter代码检查 2 -> 配置代码检查规则 3 -> 查看/处理代码检查结果 1 -> Code Linter代码检查 Code Linter针对ArkTS/TS代码进行最佳实践/编程规范方面的检查。 可根据扫描结果中告警提示手工修复代码缺陷&#xff0c;或者执行一键式自动修复…

前端vue项目打包成桌面端exe应用

主要 使用 Electron将 vue项目打包为 exe 1.首先下载Electron git clone https://github.com/electron/electron-quick-start cd electron-quick-start npm install安装完依赖之后 npm start运行成功 注意&#xff1a;如果你的项目使用了VueRouter&#xff0c;那么切记&…

基于springcloud的“微服务架构的巡游出租管理平台”的设计与实现(源码+数据库+文档+PPT)

基于springcloud的“微服务架构的巡游出租管理平台”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;springcloud 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体结构图 E-R实体关系图…

新一代达梦官方管理工具SQLark:可视化建表操作指南

在数据库管理工作中&#xff0c;新建表是一项基础且频繁的操作。SQLark 的可视化建表功能为我们提供了一种高效、便捷且丝滑流畅的建表新体验。一起来了解下吧。 SQLark 官方下载链接&#xff1a;www.sqlark.com 新建表作为常见的功能&#xff0c;相比其他管理工具&#xff0c;…

Scala相关知识学习总结6

1、集合计算高级函数说明 - 过滤&#xff1a;遍历集合&#xff0c;提取满足特定条件的元素组成新集合。 - 转化/映射&#xff08;map&#xff09;&#xff1a;将集合里的每个元素应用到指定函数进行转换。 - 扁平化&#xff1a;文档未详细阐述其具体含义和操作。 - 扁平化映射&…