运维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://www.hqwc.cn/news/488371.html

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

相关文章

(响应数据)学习SpringMVC的第三天

响应数据 一 . 传统同步业务数据响应 1.1 请求资源转发与请求资源重定向的区别 请求资源转发时,froward:可不写 二 . 前后端分离异步方式 回写json格式的字符串 1 用RestController代替Controller与 ResponseBody 2 . 直接返回user对象实体 , 即可向 前端ajax 返回json字…

Linux下“一切皆文件”

“Linux下一切皆文件” Linux 下一切皆文件这个说法是指 Linux 系统中的一种设计理念,即将所有设备、资源和进程等抽象为文件或文件夹的形式。这种设计理念的好处在于统一了对待不同类型资源的方式,提供了统一的接口和工具来进行管理和操作。 Linux 下…

漫漫数学之旅033

文章目录 经典格言数学习题古今评注名人小传 - 托马斯赫胥黎 经典格言 如果只有一点知识是危险的,那么知识足够丰富而不危险的人又在哪里呢?——托马斯赫胥黎(Thomas Huxley) 托马斯赫胥黎这位智慧的先知曾经用一种妙趣横生的方式…

22款奔驰C260L升级小柏林音响 无损音质效果

奔驰新款C级号称奔驰轿车的小“S”,在配置方面上肯定也不能低的,提了一台低配的车型,通过后期升级加装件配置提升更高档次,打造独一无二的奔驰C级,此次来安排一套小柏林之声音响,效果怎么样,我们…

12 个顶级音频转换器软件(免费)

当涉及不受支持的音乐文件时,音频文件转换器软件总是会派上用场。当您希望缩小大量大型音乐文件的大小以节省设备存储空间时,它也很有帮助。您在寻找传输音频的软件吗?好吧,请仔细选择音频转换器,因为最好的音乐转换器…

什么是IP地址,IP地址详解

在互联网的世界中,每一台连接的设备都需要一个独特的标识,这就是IP地址。IP地址,全称为“Internet Protocol Address”,即互联网协议地址,它是网络中进行数据传输的基础。下面,我们将对IP地址进行详细的解析…

电路设计(28)——交通灯控制器的multisim仿真

1.功能设定 南北、东西两道的红灯时间、绿灯时间均为24S,数码管显示倒计时。在绿灯的最后5S内,黄灯闪烁。有夜间模式:按下按键进入夜间模式。在夜间模式下,数码管显示计数最大值,两个方向的黄灯不停闪烁。 2.电路设计 …

CentOS 7 定时任务 + Shell 脚本自动备份 MySQL 数据库(一次 Halo 建站数据库丢失的教训)

文章目录 前置条件创建备份脚本设置 Cron 任务测试备份脚本备份安全和维护一键恢复自动清除备份文件常见问题总结 TIP: 原文链接阅读体验更佳:CentOS 7 自动备份 MySQL 数据库 最近抽空简单搭了一个博客,目前内容较少,后续陆续发…

第四十三回 锦豹子小径逢戴宗 病关索长街遇石秀-Python XML解析和Base64编解码

李云和李逵打了五七个回合,不分胜负,被朱富劝说也上了梁山。李云号人称青眼虎,朱富绰号庙笑面虎,宋江说李逵杀了四虎,梁山添了两个活虎,值得庆贺。 吴用对将领们进行了调配,朱富重掌山东酒店&a…

数据结构之平衡二叉搜索树

什么是平衡二叉树 AVL是一种自平衡二叉搜索树(self-balancing binary search tree)的数据结构,它的名称来源于其发明者G.M. Adelson-Velsky和E.M. Landis。AVL树通过在每次插入或删除节点时进行旋转操作,来确保树的高度始终保持在…

C语言——实用调试技巧——第1篇——(第22篇)

坚持就是胜利 文章目录 一、什么是bug?二、调试是什么?有多重要?三、debug 和 release 的介绍?1、2、3、 四、windows环境调试介绍1、调试环境的准备2、学会快捷键F5 或者 Fn F5条件断点 Ctrl F5F9 或者 Fn F9F10 或者 Fn F10F11 或者 F…

C语言读取 ini 配置文件,修改/添加键值对

C语言读取 ini 配置文件,修改/添加键值对 C语言读取 ini 配置文件,对section中的键值对进行修改/添加,如果section不存在,则在末尾将新的section/key/value 添加进去。 一、了解什么是INI文件? ini 文件是Initializ…