Ansible自动化运维工具---Playbook

news2024/12/25 9:01:04

Ansible自动化运维工具--playbook

    • 一、playbook
      • 1、playbook简介
      • 2、playbook应用场景
      • 3、yaml基本语法规则
      • 4、yaml支持数据结构
    • 二、Inventory中的变量
      • 1、inventor变量参数
    • 三、playbook实例
      • 1、编写httpd的playbook
      • 2、tasks列表和action
      • 3、条件测试
      • 4、迭代
      • 5、with_items模块
      • 6、template模块
      • 7、tags模块

一、playbook

playbook是剧本的意思,通过 task 调用 ansible 的模块将多个 play 组织在一 个playbook中运行。

playbook各部分组成

Tasks: 任务,即调用模块完成的某操作

Variables: 变量

emplates: 模板

Handlers: 处理器,当某条件满足时,触发执行的操作

Roles: 角色

playbook yaml语法是换行空两格,-和:后必须空一格

playbook由YMAL语言编写,YAML是一种非标记语言。是用来写配置文件的语言,非常简洁合强大

  • YAML语法和其他语言类似,也可以表达散列表、标量等数据结构

  • 结构通过空格来展示

  • 序列里配置项通过 - 来表示

  • Map里的键值用:来分隔

  • YAML的扩展名为yaml

1、playbook简介

Playbooks 是 Ansible的配置、部署、编排语言,他们可以被描述为一个需要希望远程主机执行命令的方案,或者一组IT程序运行的命令集合。

Playbooks 与 ad-hoc相比,是一种完全不同的运用ansible的方式,是非常之强大的。

简单来说,playbooks是一种简单的配置管理系统与多机器部署系统的基础,与现有的其他系统有不同之处,且非常适合于复杂应用的部署。

playbook是ansible用于配置,部署,和管理被控节点的剧本。

通过playbook的详细描述,执行其中的一系列tasks,可以让远端主机达到预期的状态。playbook就像Ansible控制器给被控节点列出的的一系列to-do-list,而被控节点必须要完成。

也可以这么理解,playbook 字面意思,即剧本,现实中由演员按照剧本表演,在Ansible中,这次由计算机进行表演,由计算机安装,部署应用,提供对外服务,以及组织计算机处理各种各样的事情。

2、playbook应用场景

(1)执行一些简单的任务,使用ad-hoc命令可以方便的解决问题,但是有时一个设施过于复杂,需要大量的操作时候,执行的ad-hoc命令是不适合的,这时最好使用playbook。

(2)就像执行shell命令与写shell脚本一样,也可以理解为批处理任务,不过playbook有自己的语法格式。

(3)使用playbook你可以方便的重用这些代码,可以移植到不同的机器上面,像函数一样,最大化的利用代码。在你使用Ansible的过程中,你也会发现,你所处理的大部分操作都是编写playbook。可以把常见的应用都编写成playbook,之后管理服务器会变得十分简单。

3、yaml基本语法规则

大小写敏感
使用缩进表示层级关系
缩进时不允许使用tab键、只允许使用空格
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

hosts定义接节点,可以是组
remote_user是你以什么身份进行登录
tasks是你的任务
become:yes表示切换用户
become_user:mysql表示切换到mysql用户,配合上一条使用
-name:为下面执行的操作起名

4、yaml支持数据结构

对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes)/ 字典(dictionary)

数组:一组按次序排列的值,又称为序列(sequence)/ 列表(list)

纯量:单个的、不可再分的值

二、Inventory中的变量

Inventory是Ansible管理主机信息的配置文件,相当于系统HOSTS文件的功能,默认存放在/etc/ansible/hosts

1、inventor变量参数

在这里插入图片描述

三、playbook实例

基本命令介绍

ansible-playbook xxx.yaml --syntax-check   			   		 #检查yaml文件的语法是否正确
ansible-playbook xxx.yaml --list-task     					 #检查tasks任务
ansible-playbook xxx.yaml --list-hosts     					 #检查生效的主机
ansible-playbook xxx.yaml --start-at-task='xxx'			     #指定从某个task开始运行
 
- hosts: webserver   #指定主机组,可以是一个或多个组
 
remote_user: root 	 #指定远程主机执行的用户名
参数说明
-k(-ask-pass)用来交互输入ssh密码
-K(-ask-become-pass)用来交互输入sudo密码
-u指定用户
-e引入变量值

1、编写httpd的playbook

[root@Ansible opt]#vim test1.yaml 

---    #yaml文件以---开头,以表明这是一个yaml文件,可省略
- name: first play   #定义一个play的名称,可省略
  gather_facts: false   #设置不进行facts信息收集,这可以加快执行速度,可省略
  hosts: webservers    #指定要执行任务的被管理主机组,如多个主机组用冒号分隔
  remote_user: root   #指定被管理主机上执行任务的用户
  tasks:   #定义任务列表,任务列表中的各任务按次序逐个在hosts中指定的主机上执行
   - name: test connection  #自定义任务名称
     ping:        #使用 module: [options] 格式来定义一个任务
   - name: disable selinux   
     command: '/sbin/setenforce 0'   #command模块和shell模块无需使用key=value格式
     ignore_errors: True   #如执行命令的返回值不为0,就会报错,tasks停止,可使用ignore_errors忽略失败的任务
   - name: disable firewalld
     service: name=firewalld state=stopped enabled=no  #使用 module: options 格式来定义任务,option使用key=value格式
   - name: install httpd
     yum: name=httpd state=latest
   - name: install configuration  httpd
     copy: src=/opt/httpd.conf dest=/etc/httpd/conf/httpd.conf   #这里需要一个事先准备好的/opt/httpd.conf文件
     notify: "restart httpd"  #如以上操作后为changed的状态时,会通过notify指定的名称触发对应名称的handlers操作    
   - name: start httpd service
     service: enabled=true name=httpd state=started
  handlers:    #handlers中定义的就是任务,此处handlers中的任务使用的是service模块
   - name: restart httpd    #notify和handlers中任务的名称必须一致
     service: name=httpd state=restarted
[root@Ansible opt]#ansible-playbook test1.yaml     运行playbook

在这里插入图片描述
在这里插入图片描述

2、tasks列表和action

Play的主体部分是task列表,task列表中的各任务按次序逐个在hosts中指定的主机上执行,即在所有主机上完成第一个任务后再开始第二个任务。
在运行playbook时(从上到下执行),如果一个host执行task失败,整个tasks都会回滚,请修正playbook 中的错误,然后重新执行即可。

Task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量,模块执行时幂等的,这意味着多次执行是安全的,因为其结果一致。

每一个task必须有一个名称name,这样在运行playbook时,从其输出的任务执行信息中可以很好的辨别出是属于哪一个task的。如果没有定义name,‘action’的值将会用作输出信息中标记特定的task。

定义一个task,常见的格式:”module: options” 例如:yum: name=httpd

ansible的自带模块中,command模块和shell模块无需使用key=value格式

[root@Ansible opt]#vim error.yaml

- hosts: webservers
  remote_user: root
  tasks:
   - name: disable selinux
     command: '/sbin/setenforce 0'
     ignore_errors: True
   - name: make sure apache is running
     service: name=httpd state=started
[root@Ansible opt]#ansible-playbook error.yaml 

在这里插入图片描述
在这里插入图片描述

3、条件测试

[root@Ansible opt]#vim when.yaml

- hosts: webservers
  remote_user: root
  tasks:
  - name: "shutdown CentOS"
    command: /sbin/shutdown -h now
    when: ansible_distribution == "CentOS"
[root@Ansible opt]#ansible-playbook when.yaml

在这里插入图片描述
在这里插入图片描述

4、迭代

当有需要重复性执行的任务时,可以使用迭代机制。其使用格式为将需要迭代的内容定义为item变量引用,并通过with_items语句指明迭代的元素列表即可。

[root@Ansible opt]#vim test3.yaml 
---
- name: play1
  hosts: dbservers
  gather_facts: false
  tasks:
    - name: create directories
      file:
        path: "{{item}}"
        state: directory
      with_items:          #等同于 loop:
        - /tmp/test1
        - /tmp/test2
    - name: add users
      user: name={{item.name}} state=present groups={{item.groups}}
      with_items:
        - name: test1
          groups: wheel
        - name: test2
          groups: root
[root@Ansible opt]#ansible-playbook test3.yaml 

在这里插入图片描述
在这里插入图片描述

5、with_items模块

[root@Ansible opt]#vim test4.yaml

---
 - name: test1
   hosts: webservers
   gather_facts: false
   tasks:
    - name: create directories
      file:
        path: "{{item}}"
        state: directory
#路径调用变量item,变量值为下面的with_items的内容,一次执行一个有几个值执行几次,state为创建类型为目录
      with_items:
        - /tmp/test1
        - /tmp/test2
    - name: create file
      file:
        path: "{{item}}"
        state: touch
#路径调用变量item,变量值为下面的with_items的内容,一次执行一个有几个值执行几次,state为创建类型为文件
      with_items:
        - /tmp/test1/zz.txt
        - /tmp/test2/zt.txt
[root@Ansible opt]#ansible-playbook test4.yaml 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6、template模块

先准备一个以 .j2 为后缀的 template 模板文件,设置引用的变量,cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2

[root@Ansible opt]#vim httpd.conf.j2
Listen {{http_port}}				#42行,修改
ServerName {{server_name}}			#95行,修改
DocumentRoot "{{root_dir}}"          #119行,修改
#修改完保存退出

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
修改主机清单文件,使用主机变量定义一个变量名相同,而值不同的变量

[root@Ansible opt]#vim /etc/ansible/hosts

[webservers]
192.168.10.136 http_port=192.168.10.136:80 server_name=www.zzt.com:80 root_dir=/var/www/html
[dbservers]
192.168.10.137 http_port=192.168.10.137:80 server_name=www.zz.com:80 root_dir=/var/www/html
#修改完保存退出
[root@localhost opt]#vim /etc/hosts

192.168.10.136 www.zzt.com
192.168.10.137 www.zz.com

在这里插入图片描述
在这里插入图片描述

[root@Ansible opt]#vim httpd.yaml

---
- hosts: all
  remote_user: root
  gather_facts: false
  vars:
  - package: httpd
  - service: httpd
  tasks:
    - name: install httpd
      yum: name={{package}} state=latest
    - name: con test
      template: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
      notify:
         - restart httpd
    - name: start httpd
      service: name={{service}} state=started
  handlers:
    - name: restart httpd
      service: name={{service}} state=restarted
[root@Ansible opt]#ansible-playbook httpd.yaml 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7、tags模块

[root@Ansible opt]#vim test01.yaml

---
- hosts: webservers
  remote_user: root
  gather_facts: false
  tasks:
    - name: copy hosts
      copy: src=/etc/hosts dest=/opt/hosts
      tags:
      - tags1
    - name: touch file
      file: path=/opt/testhost state=touch
      tags:
      - always
[root@Ansible opt]#ansible-playbook test01.yaml

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

5.4.1树的存储结构 5.4.2树和森林的遍历

回忆一下树的逻辑结构: 双亲表示法(顺序存储) 如果增加一个结点M,L。毋须按照逻辑上的次序存储。 如果是删除元素: 方案一:比如说删除元素为G,设置其双亲结点为-1。 方案二: 把尾部的结点提上…

真题详解(对象)-软件设计(六十四)

真题详解(DNS)-软件设计(六十三)https://blog.csdn.net/ke1ying/article/details/130448106 TCP和UCP都提供了_____能力。 端口寻址 解析: UDP是不可靠无连接协议,没有连接管理,没有流量控制,没有重试。 面向对象…

MySQL 常用命令

#--------------------------- #----cmd命令行连接MySql--------- cd C:\Program Files\MySQL\MySQL Server 5.5\bin # 启动mysql服务器 net start mysql # 关闭mysql服务器 net stop mysql # 进入mysql命令行 mysql -h localhost -u root -p 或mysql -u root -p #---------…

推荐算法实战项目:AutoRec模型原理以及案例实战(附完整 Python 代码)

本文要介绍的AutoRec模型是由澳大利亚国立大学在2015年提出的,它将自编码器(AutoEncoder)的思想与协同过滤(Collaborative Filter)的思想结合起来,提出了一种单隐层的简单神经网络推荐模型。 可以说这个模型的提出,拉开了使用深度学习解决推…

LVS - DR 模式集群搭建

VIPRIPweb1192.168.88.136httpdweb2192.168.88.139httpdLVS192.168.88.110192.168.88.144(DIP) 省略最后的共享存储,webserver内容不一致(方便查看负载的效果),关闭防火墙,关闭se 1、配置web服务 web1和web2相同 y…

【文件描述符|重定向|缓冲区】

1 C语言文件操作的回顾 这块博主在讲解C语言时就已经做了很详细的讲解&#xff0c;这里就不详细讲了&#xff0c;直接给出代码。 写操作&#xff1a; #include<stdio.h> #include<stdlib.h> #include<errno.h> #define LOG "log.txt" …

【STM32CubeMX】外部中断

前言 本文记录下我学习STM32CubeMX时的流程&#xff0c;方便以后回忆。本章记录外部中断。 步骤 该实验步骤以&#xff0c;配置PA1为外部中断下降沿触发事件&#xff0c;在触发事件后点亮板载PC13LED灯 时钟配置和生成文件配置之类的&#xff0c;其它文章讲过了&#xff0c;这…

MySQL高级篇——性能分析工具

导航&#xff1a; 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线设计模式牛客面试题 目录 1. 数据库服务器的优化步骤 2. 查看系统性能参数 2.1 SHOW STATUS LIKE 参数 2.2 查看SQL的查询成本 3. 定位执行慢的 SQL&am…

【Java虚拟机】JVM垃圾回收机制和常见回收算法原理

1.垃圾回收机制 &#xff08;1&#xff09;什么是垃圾回收机制&#xff08;Garbage Collection&#xff0c; 简称GC) 指自动管理动态分配的内存空间的机制&#xff0c;自动回收不再使用的内存&#xff0c;以避免内存泄漏和内存溢出的问题最早是在1960年代提出的&#xff0c;程…

20230501-win10-制作U盘启动盘-firpe

20230501-win10-制作U盘启动盘-firpe 一、软件环境 zh-cn_windows_10_consumer_editions_version_22h2_updated_march_2023_x64_dvd_1e27e10b.isofirpe 1.8.2标签&#xff1a;firpe win10分栏&#xff1a;WINDOWS 二、硬件环境 8G或以上的U盘一个FX86笔记本一台 三、官方下…

2。硬件基础知识

介绍嵌入式软件开发所需要了解的硬件基础知识&#xff0c;与软件相结合学习 一 电阻 阻值&#xff1a;直标法&#xff0c;或色标法&#xff08;碳膜电阻上的横线&#xff09; 类型&#xff1a;线性&#xff0c;非线性&#xff08;压敏电阻、热敏电阻&#xff09; 基本参数&a…

HQL - 查询首次下单后第二天连续下单的用户比率

水善利万物而不争&#xff0c;处众人之所恶&#xff0c;故几于道&#x1f4a6; 题目&#xff1a; 从订单信息表(order_info)中查询首次下单后第二天仍然下单的用户占所有下单用户的比例&#xff0c;结果保留一位小数&#xff0c;使用百分数显示&#xff0c; 解题&#xff1a; …

STL常用梳理——STRING

容器——string篇 STL简介String常见接口函数深度了解String构造函数拷贝构造赋值重载析构函数运算符重载查找 STL简介 STL(Standard Template Library,标准模板库)&#xff0c;是惠普实验室开发的一系列软件的统 称。现在主要出现在 c中&#xff0c;但是在引入 c之前该技术已…

Day959.架构现代化模式 -遗留系统现代化实战

架构现代化的新城区模式 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于架构现代化的新城区模式的内容。 前面的四个现代化并不是层层递进的关系&#xff0c;而是既可以同时进行&#xff0c;也可以颠倒顺序。 比如&#xff0c;既可以先重构代码&#xff0c;再拆分…

在外远程NAS群晖Drive - 群晖Drive挂载电脑磁盘同步备份【无需公网IP】

文章目录 前言1.群晖Synology Drive套件的安装1.1 安装Synology Drive套件1.2 设置Synology Drive套件1.3 局域网内电脑测试和使用 2.使用cpolar远程访问内网Synology Drive2.1 Cpolar云端设置2.2 Cpolar本地设置2.3 测试和使用 3. 结语 转发自CSDN远程穿透的文章&#xff1a;【…

DAY07_常用API下

1&#xff1a;String 1.1 String(构造方法) String类&#xff0c;它涉及到两个案例&#xff1a;用户登录和聊天室。 先来看用户登录案例&#xff1a;需要输入用户名和密码&#xff0c;和已知的用户名和密码进行比较&#xff0c;涉及到比较的方法&#xff0c; 一般来说&…

【Springboot+Vue+MP+ElementUI+axios项目实战记录】

写在最前&#xff1a;仅用于记录项目中遇到的问题&#xff0c;并不一定解决 1、 想要实现&#xff0c;点击配置自动跳转页面 2、 虽然使用了push追加了url&#xff0c;但是在跳转下一个&#xff0c;比如 配置跳转到用户会因为之前的url是http://localhost:8080/admin/pagetw…

【SpringBoot】MyBatisPlus代码生成器

项目准备 数据库 MySql 5.7 新建数据库votedb&#xff0c;新建两个测试表user、vote_theme user表 vote_theme表 建表代码如下 -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS user; CREATE TABLE…

muduo 网络库数据流分析

最近自己实现了一个 Tiny_WebServer 服务器&#xff0c;是一个半同步半反应堆的模式&#xff0c;具体可以看我 github 上面的描述。但是春招实习二面被面试官表示项目太简单了&#xff0c;疯狂被怼分布式、集群等知识&#xff0c;故想进一步重构项目&#xff0c;无奈我实现的 T…