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

ansible自动化运维,(2)ansible-playbook

三种常见的数据格式:

XML:可扩展标记语言,用于数据交换和配置

JSON:对象标记法,主要用来数据交换或配置,不支持注释

YAML:不是一种标记语言,主要用来配置,大小写敏感,不支持tab

tomcat的语法格式就是xml格式,自动化脚本就是用的yaml格式。

一、特点:

playbook剧本是由一个或多个play组成的列表。

play的主要功能在于将定义的一组主机,装扮成事先通过ansible的task定义好的任务角色。task实际是调用ansilbe的一个module,将多个play组织在一个playbook中,即可以让它们联合起来,按事先编排的机制执行预定义的动作。

playbook文件采用yaml(yml)语言编写.

二、yaml语言

特性:

可读性好、和脚本语言的交互性好、使用实现语言的数据类型、有一个一致的信息模型、易于实现、可以基于流来处理、表达能力强扩展性好。

语法:

在编写时,在第一行用连续的三个"-"开始,最后用三个点...结尾。一般都省略三个点。使用#号注释。它有严格的缩进要求,不能空格和tab键混用。

三、核心组件

在一个playbook中有多个组件组成

hosts执行的远程主机列表

tasks任务集,有多个task的元素组成的列表,一个name只能包括一个task,也是组成完整代码块的最少元素。

templates模板,可替换模板文件中的变量并实现一些简单逻辑的文件。

handlers和notify结合使用,由特定条件触发的操作,满足条件执行,不满足不执行。

tags标签,指定某条任务执行,用于选择运行playbook中的部分代码。

文件以yaml后缀或yml后缀,习惯用yml。

四、playbook

可以通过yum安装的方式,需要epel源。

yum install -y epel-release.noarch

yum install -y ansible

配置文件在/etc/ansible/下。有三个文件:

[root@Node1 ansible]#:ls
ansible.cfg  hosts  roles

ansible.cfg配置文件

hosts主机

roles文件夹,角色

详细解释参考上一篇文件:Ansible自动化运维,(1)模块

在hosts中加入[web]组,有两台主机:7-2和7-3,7-1作为ansible主控端

在ansible下创建一个test.yaml文件。ping web中的两台主机。

---

- hosts: web

  remote_user: root        #默认就是root用户登录,也可以不写

  tasks:                       #任务

    - name: ping     #name就是一个描述信息。下面跟着一个执行块,ping

      ping:

检查语法:ansible-playbook --syntax-check test.yml,也可以ansible-playbook -C test.yml空跑不执行。

使用ansible-playbook执行一下测试。

格式:

格式:
- - -
hosts指定了在哪些机器上执行任务
remote_user 以谁的身份运行
tasks 任务列表,你要做哪些事情
gather_facts:no 表示不收集信息,但是使用变量时需要收集

例,创建用户:

vim add_user.yml

---

- hosts: web

  gather_facts: no


  tasks:

    - name: create user

      user:

        name: usr1

        uid: 1111

        system: yes    #系统用户

还可以写一行:user: name=usr1 uid=1111 system=yes

执行该文件:ansible-playbook add_user.yml

去远端主机查看用户文件是否创建成功了:

还可以指定shell类型,是否允许登录:shell=/sbin/nologin。是否创建家目录:create_home=no

删除用户usr1:使用state: absent

安装httpd:

剧本编写:

service是服务,开启httpd服务

执行:

name是描述信息,执行到的哪一个剧本。

验证是否安装并开启httpd:

删除httpd:

验证:发现已经被删除了httpd服务。

yum安装nginx:先安装依赖包

在主控端准备一个主配置文件nginx.conf和主页面index.html。

主配置文件是在本地yum下的epel源和nginx,把本地的nginx.conf复制到/data/下。

主页面是自己写一个。

[root@Node1 ansible]#:cat /data/index.html 
7-1

 [root@Node1 ansible]#:vim install_nginx.yml

---
- hosts: web

  tasks:
    - name: add repository
      yum_repository:                #epel源,变量
        name: epel
        description: epel yum repo
        baseurl: https://download.fedoraproject.org/pub/epel/$releasever/$basearch/
        gpgcheck: no

    - name: install nginx                #安装nginx
      yum: name=nginx state=present

    - name: config file                        #配置文件
      copy: src=/data/nginx.conf dest=/etc/nginx/nginx.conf

    - name: web page                        #主页面
      copy: src=/data/index.html dest=/usr/share/nginx/html/index.html

    - name: start nginx                        #开启nginx
      service: name=nginx state=started enabled=yes

执行这个安装文件:

[root@Node1 ansible]#:ansible-playbook install_nginx.yml

PLAY [web] *****************************************************************************************

TASK [Gathering Facts] *****************************************************************************
ok: [192.168.114.20]
ok: [192.168.114.30]

TASK [add repository] ******************************************************************************
ok: [192.168.114.30]
ok: [192.168.114.20]

TASK [install nginx] *******************************************************************************
changed: [192.168.114.20]
changed: [192.168.114.30]

TASK [config file] *********************************************************************************
changed: [192.168.114.20]
changed: [192.168.114.30]

TASK [web page] ************************************************************************************
changed: [192.168.114.20]
changed: [192.168.114.30]

TASK [start nginx] *********************************************************************************
changed: [192.168.114.30]
changed: [192.168.114.20]

PLAY RECAP *****************************************************************************************
192.168.114.20             : ok=6    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.114.30             : ok=6    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

执行成功:发现已启动:

使用主控端访问测试:

tags标签:

如果当某个name没有执行成功,可以在name下加入tags: page,在执行的时候可以单独执行这个name块。

例如,上面的yum安装nginx中,最后启动的那一步写错了,改回来之后,只需要执行那一个角色就好了,这时只要加入tags: page

....

    - name: start nginx                        #开启nginx

       tags: page
      service: name=nginx state=started enabled=yes

在运行的时候指定page:ansible-playbook -t page install_nginx.yml

notify和handlers:

notify监控,handlers执行,notify监控任务,如果改变了,就执行handlers,handlers是与tasks同级别的,缩进相同。

拿上面nginx举例:我们拿复制主页那一步举例:在copy下添加一个notify

    - name: web page                        #主页面
      copy: src=/data/index.html dest=/usr/share/nginx/html/index.html

      notify:

        - restart nginx


  handlers:

    - name: restart nginx

      service: name=nginx state=restarted

解释:由于copy具有幂等性,如果copy发生改变,也就是index.html文件发生改变,就会执行notify,- restart nginx要与handlers中的 - name: restart nginx一样。

验证:

先修改两个远端服务器的一个端口:添加一个端口8080

vim /etc/nginx/nginx.conf

此时,如果主控端不修改index.hmtl文件。是不会执行notify的。再标注一个tags:用于执行特定的任务。如图:

如果copy有改变,就会被notify监控到,进而执行handlers。重启nginx服务,就会多了个8080端口。

我们先修改index.html文件:追加的方式:echo "7-11" >> /data/index.html

执行该文件,指定特定的任务加-t

可以发现,成功执行,执行的是page块,重启了nginx。

测试是否开启了8080端口:

---end---

相关文章:

ansible自动化运维,(2)ansible-playbook

三种常见的数据格式: XML:可扩展标记语言,用于数据交换和配置 JSON:对象标记法,主要用来数据交换或配置,不支持注释 YAML:不是一种标记语言,主要用来配置,大小写敏感&…...

一分钟学习数据安全—自主管理身份SSI分布式标识DID介绍

SSI标准化的两大支柱,一个是VC,之前简单介绍过,另一个就是DID。基本层次上,DID就是一种新型的全局唯一标识符,跟浏览器的URL没有什么不同。深层次上,DID是互联网分布式数字身份和PKI新层级的原子构件。 一…...

[单master节点k8s部署]11.服务service

service service是一个固定接入层,客户端 可以访问service的ip和端口,访问到service关联的后端pod,这个service工作依赖于dns服务(coredns) 每一个k8s节点上都有一个组件叫做kube-proxy,始终监视着apiser…...

ES6面试题——箭头函数和普通函数有什么区别

1. this指向问题 <script> let obj {a: function () {console.log(this); // 打印出&#xff1a;{a: ƒ, b: ƒ}},b: () > {console.log(this); // 打印出Window {window: Window, self: Window,...}}, }; obj.a(); obj.b(); </script> 箭头函数中的this是在箭…...

WordPress中文网址导航栏主题风格模版HaoWa

模板介绍 WordPress响应式网站中文网址导航栏主题风格模版HaoWa1.3.1源码 HaoWA主题风格除行为主体导航栏目录外&#xff0c;对主题风格需要的小控制模块都开展了敞开式的HTML在线编辑器方式的作用配备&#xff0c;另外预埋出默认设置的编码构造&#xff0c;便捷大伙儿在目前…...

ThreadPoolExecutor基于ctl变量的声明周期管理

个人博客 ThreadPoolExecutor基于ctl变量的声明周期管理 | iwts’s blog 总集 想要完整了解下ThreadPoolExecutor&#xff1f;可以参考&#xff1a; 基于源码详解ThreadPoolExecutor实现原理 | iwts’s blog ctl字段的应用 线程池内部使用一个变量ctl维护两个值&#xff…...

运维锅总详解Prometheus

本文尝试从Prometheus简介、架构、各重要组件详解、relable_configs最佳实践、性能能优化及常见高可用解决方案等方面对Prometheus进行详细阐述。希望对您有所帮助&#xff01; 一、Prometheus简介 Prometheus 是一个开源的系统监控和报警工具&#xff0c;最初由 SoundCloud …...

深入解析Tomcat:Java Web服务器(上)

深入解析Tomcat&#xff1a;Java Web服务器&#xff08;上&#xff09; Apache Tomcat是一个开源的Java Web服务器和Servlet容器&#xff0c;用于运行Java Servlets和JavaServer Pages (JSP)。Tomcat在Java Web应用开发中扮演着重要角色。本文将详细介绍Tomcat的基本概念、安装…...

【第9章】MyBatis-Plus持久层接口之SimpleQuery

文章目录 前言一、使用步骤1.引入 SimpleQuery 工具类2.使用 SimpleQuery 进行查询 二、使用提示三、功能详解1. keyMap1.1 方法签名1.2 参数说明1.3 使用示例1.4 使用提示 2. map2.1 方法签名2.2 参数说明2.3 使用示例2.4 使用提示 3. group3.1 方法签名3.2 参数说明3.3 使用示…...

一文带你了解乐观锁和悲观锁的本质区别!

文章目录 悲观锁是什么&#xff1f;乐观锁是什么&#xff1f;如何实现乐观锁&#xff1f;什么是CAS应用局限性ABA问题是什么&#xff1f; 悲观锁是什么&#xff1f; 悲观锁它总是假设最坏的情况&#xff0c;它会认为共享资源在每次被访问的时候就会出现线程安全问题&#xff0…...

Android Studio环境搭建(4.03)和报错解决记录

1.本地SDK包导入 安装好IDE以及下好SDK包后&#xff0c;先不要管IDE的引导配置&#xff0c;直接新建一个新工程&#xff0c;进到开发界面。 SDK路径配置&#xff1a;File---->>Other Settings---->>Default Project Structure 拷贝你SDK解压的路径来这&#xff0c;…...

基于协同过滤的电影推荐与大数据分析的可视化系统

基于协同过滤的电影推荐与大数据分析的可视化系统 在大数据时代&#xff0c;数据分析和可视化是从大量数据中提取有价值信息的关键步骤。本文将介绍如何使用Python进行数据爬取&#xff0c;Hive进行数据分析&#xff0c;ECharts进行数据可视化&#xff0c;以及基于协同过滤算法…...

修复vcruntime140.dll方法分享

修复vcruntime140.dll方法分享 最近在破解typora的时候出现了缺失vcruntime140.dll文件的报错导致软件启动失败。所以找了一番资料发现都不是很方便的处理&#xff0c;甚至有的dll处理工具还需要花钱&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff0c;我本来就是为…...

PostgreSQL的系统视图pg_stat_wal_receiver

PostgreSQL的系统视图pg_stat_wal_receiver 在 PostgreSQL 中&#xff0c;pg_stat_wal_receiver 视图提供了关于 WAL&#xff08;Write-Ahead Logging&#xff09;接收进程的统计信息。WAL 接收器是 PostgreSQL 集群中流复制的一部分&#xff0c;它在从节点中工作&#xff0c;…...

Qt之Pdb生成及Dump崩溃文件生成与调试(含注释和源码)

文章目录 一、Pdb生成及Dump文件使用示例图1.Pdb文件生成2.Dump文件调试3.参数不全Pdb生成的Dump文件调试 二、个人理解1.生成Pdb文件的方式2.Dump文件不生产的情况 三、源码Pro文件mian.cppMainWindowUi文件 总结 一、Pdb生成及Dump文件使用示例图 1.Pdb文件生成 下图先通过…...

视频号视频怎么保存到手机,视频号视频怎么保存到手机相册里,苹果手机电脑都可以用

随着数字媒体的蓬勃发展&#xff0c;视频已成为我们日常生活中不可或缺的一部分。视频号作为众多视频分享平台中的一员&#xff0c;吸引了大量用户上传和分享各类精彩视频。然而&#xff0c;有时我们可能希望将视频号上的视频下载下来,以下将详细介绍如何将视频号的视频。 方法…...

Softmax函数的作用

Softmax 函数主要用于多类别分类问题&#xff0c;它将输入的数值转换为概率分布。 具体来说&#xff0c;对于给定的输入向量 x [x_1, x_2,..., x_n] &#xff0c;Softmax 函数的输出为 y [y_1, y_2,..., y_n] &#xff0c;其中&#xff1a; 这样&#xff0c;Softmax 函数的输…...

cesium 添加 Echarts 图层(空气质量点图)

cesium 添加 Echarts 图层(下面附有源码) 1、实现思路 1、在scene上面新增一个canvas画布 2、通坐标转换,将经纬度坐标转为屏幕坐标来实现 3、将ecarts 中每个series数组中元素都加 coordinateSystem: ‘cesiumEcharts’ 2、示例代码 <!DOCTYPE html> <html lan…...

Python技术笔记汇总(含语法、工具库、数科、爬虫等)

对Python学习方法及入门、语法、数据处理、数据可视化、空间地理信息、爬虫、自动化办公和数据科学的相关内容可以归纳如下&#xff1a; 一、Python学习方法 分解自己的学习目标&#xff1a;可以将学习目标分基础知识&#xff0c;进阶知识&#xff0c;高级应用&#xff0c;实…...

Nacos-注册中心

一、注册中心的交互流程 注册中心通常有两个角色: 服务提供者(生产者)&#xff1a;对外提供服务的微服务应用。它会把自身的服务地址注册到注册中心&#xff0c;以供消费者发现和调用。服务调用者(消费者)&#xff1a;调用其他微服务的应用程序。它会向注册中心订阅自己需要的服…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...