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

news/2024/9/18 12:07:37/ 标签: 运维, 自动化
playbook(剧本): 是ansible用于配置,部署,和管理被控节点的剧本。用于ansible操作的编排。
参考:https://docs.ansible.com/ansible/latest/user_guide/playbooks _intro.html
使用的格式为yaml格式(saltstack,elk,docker,docker-compose,kubernetes等也都会用到yaml格式)

YMAL格式

以.yaml或.yml结尾
文件的第一行以 "---"开始,表明YMAL文件的开始(可选的)
以#号开头为注释
列表中的所有成员都开始于相同的缩进级别, 并且使用一个 "- " 作为开头(一个横杠和一个空格)
一个字典是由一个简单的 键: 值 的形式组成(这个冒号后面必须 是一个空格)
注意 : 写这种文件不要使用 tab 键,都使用空格

 playbook实例

第1步: 创建一个存放playbook的目录(路径自定义)
mkdir /etc/ansible/playbook
第2步: 准备httpd配置文件,并修改成想要的配置
yum install httpd -y
#按需要修改你想要的配置(为了测试可以随意改动标记⼀下)
vim /etc/httpd/conf/httpd.conf
第3步: 写一个playbook文件(后缀为.yml或.yaml)
vim /etc/ansible/playbook/example.yaml
---
- hosts: group1remote_user: roottasks:- name: ensure apache is at the latest version yum: name=httpd,httpd-devel state=latest
- name: write the apache config file copy: src=/etc/httpd/conf/httpd.conf
dest=/etc/httpd/conf/httpd.confnotify:- restart apache
- name: ensure apache is running (and enable itat boot)service: name=httpd state=started enabled=yes
handlers:- name: restart apacheservice: name=httpd state=restarted
第4步: 执行写好的palybook
ansible-playbook /etc/ansible/playbook/example.yaml
会显示出执行的过程,并且执行的每一步都有ok,changed,failed 等标识
执行如果有错误(failed)会回滚,解决问题后,直接再执行这条命 令即可,并会把failed改为changed(幂等性)

Playbook常见语法

hosts: 用于指定要执行任务的主机,其可以是一个或多个由冒号分 隔主机组.
remote_user: 用于指定远程主机上的执行任务的用户.
- hosts: group1
  remote_user: root
tasks: 任务列表, 按顺序执行任务.
如果⼀个host执行task失败, 整个tasks都会回滚, 修正playbook 中的错误, 然后重新执行即可.
tasks:
- name: ensure apache is at the latest version
  yum: name=httpd,httpd-devel state=latest
- name: write the apache config file
  copy: src=/etc/httpd/conf/httpd.conf
dest=/etc/httpd/conf/httpd.conf
handlers: 类似task,但需要使用notify通知调⽤。
不管有多少个通知者进行了notify,等到play中的所有task执行完成之后,handlers也只会被执行一次.
handlers最佳的应用场景是用来重启服务,或者触发系统重启操作.除此以外很少用到了.
  notify:
  - restart apache
- name: ensure apache is running (and enable it at boot)
  service: name=httpd state=started enabled=yes
handlers:
  - name: restart apache
    service: name=httpd state=restarted
variables: 变量
        定义变量可以被多次方便调用
vim /etc/ansible/playbook/example2.yaml
---
 - hosts: group1
   remote_user: root
   vars:
   - user: test1
   tasks:
   - name: create user
     user: name={{user}} state=present
ansible-playbook /etc/ansible/playbook/example2.yaml

案例: playbook编排vsftpd 

1. 配置yum
2. 安装vsftpd包
3. 修改配置文件(要求拒绝匿名用户登录)
4. 启动服务并实现vsftpd服务开机自动启动
---
- hosts: group1remote_user: roottasks:- name: rm yum repositoryfile: path=/etc/yum.repos.d/ state=absent- name: 同步master上的yum源到group1copy: src=/etc/yum.repos.d dest=/etc/- name: ensure vsftpd is at the latest versionyum: name=vsftpd state=latest- name: write the apache config filecopy: src=/etc/vsftpd/vsftpd.conf
dest=/etc/vsftpd/vsftpd.confnotify:- restart vsftpd- name: ensure vsftpd is running (and enable itat boot)service: name=vsftpd state=started enabled=yeshandlers:- name: restart vsftpdservice: name=vsftpd state=restarted

playbook编排多个hosts任务

---        # ---代表开始(可选项,不写也可以)
- hosts: 10.1.1.12
remote_user: root
tasks:
- name: 创建/test1/⽬录
file: path=/test1/ state=directory
# 这⾥不能⽤---分隔,会报语法错误
- hosts: 10.1.1.13
remote_user: root
tasks:
- name: 创建/test2/⽬录
file: path=/test2/ state=directory
...        # ...代表结束(可选项,不写也可以)
案例: 编排nfs搭建与客户端挂载

 1, 在master上准备nfs配置文件

vim /etc/exports
/share *(ro)
2, 编写yaml编排文件
vim /etc/ansible/playbook/nfs.yml
---
- hosts: 10.1.1.12remote_user: roottasks:- name: 安装nfs服务相关软件包yum: name=nfs-utils,rpcbind,setup state=latest- name: 创建共享⽬录file: path=/share/ state=directory- name: 同步nfs配置⽂件shell: src=/etc/exports dest=/etc/exportsnotify: restart nfs- name: 启动rpcbind服务,并设置为开机⾃启动service: name=rpcbind state=started enabled=on- name: 启动nfs服务,并设置为开机⾃启动service: name=nfs state=started enabled=onhandlers:- name: restart nfsservice: name=nfs state=restarted- hosts: 10.1.1.13remote_user: roottasks:- name: 安装nfs客户端软件包yum: name=nfs-utils state=latest- name: 挂载nfs服务器的共享shell: mount 10.1.1.12:/share /mnt
3, 执行playbook
ansible-playbook /etc/ansible/playbook/nfs.yaml


http://www.ppmy.cn/news/1515115.html

相关文章

Linux(面试篇)

目录 什么是Linux 什么是Linux内核? Linux的基本组件是什么? Bash和Dos之间基本区别是什么? 什么是Root账户 什么是Bash? 什么时CLI? Linux的目录结构时怎样的? 什么是硬链接和软链接? 什么叫CC攻击&#…

动漫二次元漂亮的网站导航HTML5源码

二次元漂亮网站导航HTML源码,页面中还调用了很多外站的图片等链接需自行更换。 动漫二次元漂亮的网站导航HTML5源码

简易版营业厅宽带系统

TOC ssm018简易版营业厅宽带系统jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管…

数据结构day01(数据结构、算法基础知识)

目录 【1】数据结构基础知识 1》什么是数据结构 2》数据 3》逻辑结构 1>线性关系 2>层次关系 3>网状关系 4》存储结构 1>顺序存储 2>链式存储 3>索引存储结构 4>散列存储 5》操作 【2】算法基础知识 1> 什么是算法 2> 算法设计 3> 算…

五、Centos7-安装Jenkins--吃灰去吧

克隆了一个base的虚拟机,用来安装Jenkins 2023年11月,Jenkins不支持centos7了。我们只是学习用,先看看吧。 ( 另一个人用别的操作系统安装的jenkins,可以参考 版权声明:本文为博主原创文章,…

卓越测试工程师必备:团队协作的艺术

引言 在快速发展的软件行业,团队协作已成为推动项目成功的关键因素之一。作为测试工程师,不仅需要具备扎实的技术基础,还需要具备出色的团队协作能力。本文将探讨团队协作的重要性,并分享一些培养这方面能力的方法。 一、团队协作的重要性 1. 提升效率 在团队中,成员可以…

16.C基础_内存管理

内存分区 1、整体框图 内存分为代码区、全局区、栈区、堆区。代码区和全局区在代码编译完之后就已经确定,栈区和堆区是在程序运行时进行开辟和释放的。整体内存分区框图如下: 对于一个进程,它一共有4G的空间,其中0~3G为上述的4个…

CSS有趣知识

4.圆角边框 在CSS3中,新增了圆角边框样式,这样我们的盒子就可以变圆角了。 border-radius 属性用于设置元素的外边框圆角。 语法: border-radius:length; radius 半径(圆的半径)原理:(椭圆)与边框的交集形成圆角效果 1.参数值可以…

springboot功能模块之POI操作Excel

一、前言 文件的导入导出: 这个功能主要就是帮助我们的用户能够快速的将数据导入到数据库中,不用在自己手动的一条一条的将数据新增到我们的数据库中.同时又能够方便我们能够将数据导出之后打印出来给领导们查看.不用非得带着电脑这里那里的跑.非常实用的功能. 文件的导入导…

Appium学习

一、基础配置 import unittest from appium import webdriver from appium.options.android import UiAutomator2Options from appium.webdriver.common.appiumby import AppiumBy from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support …

SpringBoot集成kafka接收对象消息

SpringBoot集成kafka接收对象消息 1、生产者2、消费者3、工具类4、消息实体对象5、配置文件6、启动类7、测试类8、测试结果 1、生产者 package com.power.producer;import com.power.model.User; import com.power.util.JSONUtils; import org.springframework.kafka.core.Kaf…

YOLOv10:实时端到端目标检测

摘要 https://arxiv.org/pdf/2405.14458 近年来,YOLO系列模型因其在计算成本与检测性能之间的有效平衡,在实时目标检测领域占据了主导地位。研究人员在YOLO的架构设计、优化目标、数据增强策略等方面进行了探索,并取得了显著进展。然而&…

2408gui,学习gui的经验

// 对话 主标 DIALOGEX 0, 0, 100,100 STYLE DS_SHELLFONT|DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "动作" FONT 12, "MS Sans Serif" BEGIN//ICON 翻译标,IDC_STATIC,0,0,20,20DEFPUSHBUTTON "开始",开…

CommandLineRunner和ApplicationRunner

文章目录 前言一、两者的区别二、CommandLineRunner接口示例三、ApplicationRunner接口示例 前言 在 Spring Boot 中,ApplicationRunner 和 CommandLineRunner 接口可以在应用启动后执行一些初始化操作或者运行一些脚本。 若想在项目启动之后立即执行某一段代码&am…

Hadoop入门基础(二):Hadoop集群安装与部署详解(超详细教程)

一、环境准备 1. 集群规划 首先,需要为集群中的每台机器设置角色和网络配置。在此示例中,我们使用三台机器: 角色主机名IP地址NameNodemaster192.168.1.101DataNode1slave1192.168.1.102DataNode2slave2192.168.1.103 2. 软件要求 操作系…

wxml与标准的html的异同?

WXML(WeiXin Markup Language)与标准的HTML(HyperText Markup Language)在构建前端界面时,既有相似之处,也存在显著的差异。以下是对两者异同点的详细分析: 相似之处 标签结构: 两…

Linux 命令集合

1. linux 系统版本 1.1 linux系统的分类 linux系统,主要分Debian系和RedHat系,还有其它自由的发布版本。 1、Debian系主要有Debian,Ubuntu,Mint等及其衍生版本; 2、RedHat系主要有RedHat,Fedora&#xf…

20240823给飞凌OK3588-C的核心板刷Ubuntu22.04并成功启动

20240823给飞凌OK3588-C的核心板刷Ubuntu22.04并成功启动 2024/8/23 20:37 给飞凌OK3588-C的核心板刷Ubuntu22.04,不管是预编译的,还是你自己直接编译的IMG固件。 放心,都会卡死在这里的!^_ [BEGIN] 2024/8/23 20:10:55 DDR V1.12…

【面试最常考算法】哈希表专题

题号标题题解标签难度0001两数之和Python数组、哈希表简单0041缺失的第一个正数Python数组、哈希表困难0128最长连续序列Python并查集、数组、哈希表中等0136只出现一次的数字Python位运算、数组简单0242有效的字母异位词Python哈希表、字符串、排序简单0442数组中重复的数据数…

ArcGIS Pro基础:如何将数据和引用地图样式一起打包分享

如上所示,有2个矢量图斑,一个是耕地地块,另一个是范围图斑,如果我们需要把此工程的所有数据以及引用地图一起分享给别人,就可以使用【打包工程】这个工具。 如上所示,在【地理处理】下输入【打包工程】&am…