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

news2024/10/7 16:23:35

三种常见的数据格式:

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---

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

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

相关文章

3.任务的创建与删除

1.什么是任务? 任务可以理解为进程/线程,创建一个任务,就会在内存开辟一个空间。 任务通常都含有while(1)死循环 2.任务创建与删除相关的函数 3.CUBEMAX相关配置 编辑一个led1闪烁的任务

Python学习打卡:day16

day16 笔记来源于:黑马程序员python教程,8天python从入门到精通,学python看这套就够了 目录 day16116、SQL 基础和 DDLSQL的概述SQL语言的分类SQL的语法特征DDL — 库管理DDL — 表管理 117、SQL — DMLDML概述数据插入 INSERT数据删除 DEL…

flink输出中文乱码

flink输出中文乱码 (1)首先在/etc/profile.d/my_env.sh中加入下面这行数据 export LANGzh_CN.UTF-8(2)其次在flink配置文件中指定编码 [xxxhadoop102 flink-1.13.6]$ vim conf/flink-conf.yaml加入下面这行数据 env.java.opts:…

A股探底回升,跑出惊天大阳,你们知道为什么吗?

今天的A股,探底回升,让人惊呆了,你们知道是为什么吗?盘面上出现3个重要信号,一起来看看: 1、今天A股市场炸锅了,AI人工智能、国产软件、存储芯片迎来了涨停潮,惊呆了,科技…

【MySQL事务】深刻理解事务隔离以及MVCC

文章目录 什么叫事务事务的提交方式常见的事务操作方式事务的开始与回滚总结 事务的隔离设置隔离级别解释脏读解释幻读解释不可重复读为什么可重复读不能解决幻读问题?总结 数据库并发的场景MVCC隐藏列字段undo日志Read view RR和RC的本质区别总结 什么叫事务 在My…

游戏AI的创造思路-技术基础-sigmoid函数详解

在前面的机器学习和深度学习的内容中,大量出现了sigmoid函数,所以本篇为大家介绍下sigmoid函数,希望对大家理解前面的算法和后面的Transformer有所帮助 目录 3.8. sigmoid函数 3.8.1. 定义 3.8.2. 性质 3.8.3. 应用 3.8.4. 缺点 3.8.5.…

sd卡一插上就提示格式化是怎么回事?sd卡数据如何恢复?

sd卡一插上就提示格式化是怎么回事?里面的数据怎么办?下面小编总结了SD卡提示格式化的原因和对应解决办法分享给大家! SD卡好好的,为什么一插电脑上就提示需要格式化呢?当SD卡提示格式化时,可以考虑下面几类…

VS Code 配置cmake(Linux环境)

通过sudo apt install cmake在linux上安装cmake 在Vs Code中安装这两个插件 通过命令whereis cmake获取linux中cmake的路径信息 右键CMake Tools右下角齿轮标志,选择扩展设置(Extension Settings) 注意要设置的是本地,还是远程连接…

【UE5.3】笔记3-静态网格体,BSP

静态网格体组件 主要有两个属性 一个是静态网格体:对应的也就是模型,比如fbx,maya,obj等格式 一个是材质:由各种贴图、渲染设置等,比如unity里的shader BSP画刷: 打开放置Actor选项卡&#…

SpringAOP执行流程——从源码画流程图

文章目录 了解ProxyFactory入门操作添加多个Advice的执行顺序关于异常Advice关于proceed()方法指定方法才进行增强逻辑 创建代理对象的其他方式ProxyFactoryBeanBeanNameAutoProxyCreatorDefaultAdvisorAutoProxyCreator 对SpringAOP的理解TargetSourceProxyFactory选择JDK/CJL…

我对AI赋能的未来畅想

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…

C# 入门—实现 Hello, World!

目录 一、.net 平台 二、.net 都能干什么? 三、.net 两种交互模式 四、使用 VS Code 开发 C# 程序 五、实现 Hello, World! 一、.net 平台 下载 .NET(Linux、macOS 和 Windows) (microsoft.com) .NET 简介 - .NET | Microsoft Learn C# :一种编程语言,可以开…

python-docx 设置页面边距、页眉页脚高度

本文目录 前言一、docx 页面边距在哪里二、对 <w:pgMar> 的详细说明1、上边距的说明2、右边距的说明3、下边距的说明4、左边距的说明5、页眉高度的说明6、页脚高度的说明三、设置 docx 页边距、页眉页脚高度1、完整代码2、代码执行效果图四、补充一些内容1、页面边距的两…

jenkins中执行docker命令

1. 修改docker.sock文件的所属组 命令如下&#xff1a; sudo chown root:root docker.sock 2. 对这个文件赋予权限&#xff0c;供其他用户使用&#xff0c;给定权限命令如下&#xff1a; sudo chmod orw docker.sock 3. docker容器映射 这里需要两个文件&#xff1a; 一个…

PS教程29

图层蒙版 以案例来解释蒙版的作用 将这两张图片原框背景切换将图二的背景选中使用套索工具选中区域切换图一CtrlA全选CtrlC复制编辑-选择性粘贴-贴入即可贴入如果位置不对用移动工具进行调整 这就是图层蒙版 图层蒙版本质作用&#xff1a;是临时通道&#xff0c;支持黑白灰三种…

火车头采集器Discuz采集发布模块插件

火车头采集器怎么采集发布数据到Discuz系统的论坛帖子或门户文章&#xff1f; 可按照以下步骤配置&#xff1a; 1. 火车头采集器Discuz采集发布插件下载安装&#xff1a; 火车头采集器Discuz发布模块插件下载地址-CSDN 2. 在火车头采集器工具导入Discuz采集发布模块插件&am…

Java 8 新特性:Lambda表达式让你的代码焕然一新——掌握它,让编程变得轻松又高效!

前言 Java 8 是 Java 发展史上的一次重要里程碑。作为企业级开发语言&#xff0c;它在性能和功能上做了巨大的提升。这其中&#xff0c;Lambda表达式是一个关键的新特性&#xff0c;它为 Java 语言带来了函数式编程的概念。本篇文章将深入探讨Lambda表达式&#xff0c;并结合热…

【Linux】解锁并发:多线程同步技术详解与应用实践

文章目录 前言&#xff1a;1. 同步概念2. 条件变量&#xff1a;实现线程间同步的&#xff01;2.1. 条件变量是什么&#xff1f;2.2. 认识条件变量接口 3. 写一个测试代码——验证线程的同步机制4. 生产消费模型5. 生产消费模型 条件变量6. 线程池7. 可重入 VS 线程安全7.1. 概…

使用Python进行大数据处理Dask与Apache Spark的对比

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 使用Python进行大数据处理Dask与Apache Spark的对比 随着数据量的增加和数据处理需求的增长…

基于IM948(Low-cost IMU+蓝牙)模块的高精度PDR(Pedestrian Dead Reckoning)定位系统 — 可以提供模块和配套代码

一、背景与意义 行人PDR定位系统中的PDR&#xff08;Pedestrian Dead Reckoning&#xff0c;即行人航位推算&#xff09;背景意义在于其提供了一种在GPS信号不可用或不可靠的环境下&#xff0c;对行人进行精确定位和导航的解决方案。以下是关于PDR背景意义的详细描述&#xff1…