热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ansible自动化运维详解(四)ansible中playbook的编写使用、执行命令及实例演示

本文主要分享【运维监控能够实现自动化吗】,技术文章【ansible自动化运维详解(四)ansible中playbook的编写使用、执行命令及实例演示】为【是大姚呀】投稿,如果你遇到Linux企业运维实

本文主要分享【运维监控能够实现自动化吗】,技术文章【ansible自动化运维详解(四)ansible中playbook的编写使用、执行命令及实例演示】为【是大姚呀】投稿,如果你遇到Linux企业运维实战相关问题,本文相关知识或能到你。

运维监控能够实现自动化吗

文章目录 ansible自动化运维详解(四)ansible中playbook的编写使用、执行命令及实例演示一、playbook的功能简介二、YAML语言2.1、YAML简介2.2、YAML特点2.3、YAML语法 三、playbook的核心组件四、playbook执行命令实例:安装部署FTP/vsftpd服务

ansible自动化运维详解(四)ansible中playbook的编写使用、执行命令及实例演示 一、playbook的功能简介

如之前博客中所述,ansible有以下两种管理方式:
1)Ad-Hoc命令:利用ansible命令直接完成管理,主要用于临时命令这一使用场景。
2)playbook脚本:ansible脚本,主要用于大型项目场景,需要前期的规划。

Ad-Hoc命令在之前的实验中详细介绍并大量使用过,具体可参考ansible自动化运维详解(二)等,这里我们将对playbook脚本这第二种管理方式进行详细介绍。

playbook是ansible的配置、部署、编排语言,不同于使用Ansible命令行执行方式,其功能更加强大灵活,它可以被描述为一个需要希望远程主机执行命令的方案,或者一组IT程序运行的命令集合。当对一台机器做环境初始化、服务部署的时候,往往需要做多个动作,这时使用playbook会更加合适,通过playbook我们可以一次在多台机器执行多个指令。这种预先设计的配置保持了机器的配置统一,同时也可以很简单的执行日常任务。简而言之,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的模式,可作为部署复杂应用程序的基础。

二、YAML语言 2.1、YAML简介

playbook可以理解为组织多个任务指令(task)的容器,它的实质就是一个文件,有着特定的组织格式,其采用的语法格式是YAML语言。YAML是一种可读性高,用来表达数据序列化的格式,专门用来写配置文件,比 XML 或 JSON 等其他常见数据格式更易于人类读写。

2.2、YAML特点

YAML标记语言具有:可读性好、和脚本语言交互性好、易于实现、适用于程序执行流梳理方式、可扩展性强等特点。

2.3、YAML语法

(1)所有 YAML 文件用 [---] 表示文件内容开始,次行开始书写文件内容;
(2)所有 YAML 文件用 [...] 表示文件内容结尾;
(3)YAML 文件大小写敏感,其使用缩进表示层级关系,缩进严格,缩进的空格数目不重要,只要相同层级的元素左侧对齐即可;
(4)YAML 支持的数据结构有三种:

对象键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
纯量(scalars):单个的不可再分的值,如字符串、布尔值、整数、浮点数、Null、时间、日期

YAML 文件中的 key / value 键值对可以多行书写,也可以一行书写,在一行书写用隔开,其中 value值可以是个字符串,也可以是一个list列表。

YAML列表/字典书写方式示例:
1、单行书写列表:
[Linux,C++,Java,Python] 
多行书写列表:
- Linux 
- C++ 
- Java 
- Python

2、单行书写字典(存放键值对):
- file: {
   path: /mnt/yaofile, state: touch} 
多行书写字典:
- file: 
	path: /mnt/yaofile   
	state: touch

(5)一个play需要包括name和tasks,name是命名描述,tasks是动作;
(6)同一任务命名name里,只能引用一个模块即只能有一个任务task,想要执行多个task可以添加多个任务列表(破折号-代表为一个任务列表);
(7)YAML 文件的扩展名称为ymlyaml

三、playbook的核心组件

playbook脚本文件中的三个核心组件为:

组件含义name命名描述,选择性书写,建议使用,多用于进行任务说明hosts受控主机列表tasks任务,用于选择执行部分代码 四、playbook执行命令

playbook脚本文件的执行命令为:ansible-playbook xxx.yml (可以后跟参数),执行命令时一些常用参数如下:

常用参数含义- - check 或 - C进行预执行检测- - syntax-checkcheck language,检查文件中语法有没有问题- - list-hosts列出受控主机列表hosts- - list-tags列出任务标签tag
当playbook有很多任务,而我们只想执行其中的一部分任务或一类任务时,我们可以借助 tags 对任务进行“”打标签”,在执行 playbook 时借助标签指定执行某些任务- - list-tasks列出任务列表task- - limit指定执行主机- v、- vv显示任务执行过程的详细信息(v的个数越多越详细)

实验步骤:
1、这里仍然是利用我们之前一直使用的两台rhel8.2版本的虚拟机进行演示,westos_ansible(172.25.33.100)为控制主机,westos_node1(172.25.33.200)为受控主机。在控制主机切换到用户lee,进入其用户家目录下的ansible目录,在该用户级ansible操作环境下进行实验配置,编写playbook脚本文件test.yml

ansible自动化运维详解(四)ansible中playbook的编写使用、执行命令及实例演示


test.yml文件内容如下:在所有受控主机中调试输出hello westos

ansible自动化运维详解(四)ansible中playbook的编写使用、执行命令及实例演示


执行该playbook脚本文件,引用 - - syntax-check参数检查文件中语法有没有问题,可以看到语法检查不通过,错误处被标注出来,该处缩进不正确

ansible自动化运维详解(四)ansible中playbook的编写使用、执行命令及实例演示


编辑test.yml文件,将debug模块处的缩进与其相同层级name的左侧对齐

ansible自动化运维详解(四)ansible中playbook的编写使用、执行命令及实例演示


再次执行上述命令,可以看到语法检查成功通过

ansible自动化运维详解(四)ansible中playbook的编写使用、执行命令及实例演示


2、执行该playbook脚本文件,引用 - - check参数对该yml文件进行预执行检测,文件可以成功执行并输出显示指定调试信息

ansible自动化运维详解(四)ansible中playbook的编写使用、执行命令及实例演示


3、执行该playbook脚本文件,引用 - - list-hosts 参数列出该yml文件中的受控主机列表,可以看到命令执行成功,所显示的受控主机列表与清单中一致

ansible自动化运维详解(四)ansible中playbook的编写使用、执行命令及实例演示


4、执行该playbook脚本文件,引用 - - list-tasks 参数列出该yml文件中的任务列表,可以看到命令执行成功,所显示的任务列表与文件中书写的一致

ansible自动化运维详解(四)ansible中playbook的编写使用、执行命令及实例演示


5、编辑清单,将控制主机也作为一台受控主机加入到原来受控主机所在的同一westos组里,接着编辑test.yml文件,将文件中受控主机列表hosts的值修改为westos,同时添加一个任务列表查看所有受控主机的域名

ansible自动化运维详解(四)ansible中playbook的编写使用、执行命令及实例演示


执行该playbook脚本文件,引用 - v 参数显示任务执行过程的详细信息,可以看到命令执行成功,任务执行过程的详细信息中显示了westos组所有主机的域名

ansible自动化运维详解(四)ansible中playbook的编写使用、执行命令及实例演示


6、执行该playbook脚本文件,引用 - - limit 参数指定只在172.25.33.100主机上执行,可以看到命令执行成功

ansible自动化运维详解(四)ansible中playbook的编写使用、执行命令及实例演示

实例:安装部署FTP/vsftpd服务

实验步骤:
1、vim设定技巧:考虑到YAML对缩进的严格要求,为了便于编写playbook文件避免手动敲空格,我们可以编辑用户级vim配置文件~/.vimrc(只针对脚本编写者自己生效)进行如下设定:

autocmd FileType yaml setlocal ai ts=2 sw=2 et
setlocal	##设定当前文件
ai			##自动退格对齐 auto indent
ts			##tab键长度为2空格 tabstop=2
sw			##缩进长度为2 shiftwidth=2
et			##把tab键变成空格 expandtab

ansible自动化运维详解(四)ansible中playbook的编写使用、执行命令及实例演示


2、在控制主机lee用户家目录下的ansible目录中编写vsftpd安装部署脚本文件install_vsftpd.yml:在westos组内的所有受控主机(172.25.33.200)中,首先调用 dnf模块指定安装FTP/vsftpd服务的最新软件包;接着调用 lineinfile模块修改vsftpd服务的配置文件来配置vsftpd服务,使用regexp参数匹配配置文件/etc/vsftpd/vsftpd.conf中的"anonymous_enable=NO",将该行替换为"anonymous_enable=YES",启动匿名用户的访问功能,当内容无匹配规则时不对文件做任何更改;修改完配置文件后调用 service模块重启vsftpd服务并设置其为开机自启动;最后调用 firewalld模块在受控主机防火墙策略中设置永久允许ftp服务,并令设置立即生效

##install_vsftpd.yml
---
- name: install vsftpd
  hosts: westos
  tasks:
  - name: install vsftpd
    dnf:
      name: vsftpd
      state: latest
  - name: configure vsftpd
    lineinfile:
      path: /etc/vsftpd/vsftpd.conf
      regexp: "anonymous_enable=NO"
      line: "anonymous_enable=YES"
      backrefs: yes
  - name: start vsftpd
    service:
      name: vsftpd
      state: restarted
      enabled: yes
  - name: configure firewalld
    firewalld:
      service: ftp
      permanent: yes
      state: enabled
      immediate: yes

ansible自动化运维详解(四)ansible中playbook的编写使用、执行命令及实例演示


3、执行该vsftpd安装部署脚本文件install_vsftpd.yml,可以看到命令执行成功

ansible自动化运维详解(四)ansible中playbook的编写使用、执行命令及实例演示


4、由于真实主机中安装有lftp(ftp协议文本浏览器),此时我们可以通过 lftp ip成功访问受控主机ftp服务的默认共享目录/var/ftp,至此使用playbook脚本在受控主机安装部署FTP/vsftpd服务成功

ansible自动化运维详解(四)ansible中playbook的编写使用、执行命令及实例演示

本文《ansible自动化运维详解(四)ansible中playbook的编写使用、执行命令及实例演示》版权归是大姚呀所有,引用ansible自动化运维详解(四)ansible中playbook的编写使用、执行命令及实例演示需遵循CC 4.0 BY-SA版权协议。


推荐阅读
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Linuxchmod目录权限命令图文详解在Linux文件系统模型中,每个文件都有一组9个权限位用来控制谁能够读写和执行该文件的内容。对于目录来说,执行位的作用是控制能否进入或者通过 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 本文介绍了在Mac上安装Xamarin并使用Windows上的VS开发iOS app的方法,包括所需的安装环境和软件,以及使用Xamarin.iOS进行开发的步骤。通过这种方法,即使没有Mac或者安装苹果系统,程序员们也能轻松开发iOS app。 ... [详细]
author-avatar
拍友2502935047
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有