Ansible之playbook详解和应用实例

news2024/12/22 18:58:44

目录

一、playbook简介

1.什么是playbook

2.playbook组成

二、应用实例

1.使用playbook安装启用httpd服务

2.使用playbook安装启用nginx服务

三、ansible-playbook其他用法

1.检查yaml文件的语法是否正确

2.检查tasks任务

3.检查指定的主机

4.指定从某个task开始运行

四、playbook进阶语法

1.引用变量

(1)自定义变量

(2)引用setup模块信息中的变量

2.遍历值

(1)遍历变量中的值

(2)遍历指定的多个值

(3)遍历参数列表

3.条件判断

4.指定远程主机sudo切换用户

5.tags 模块        

五、Template模板

六、Roles 模块


一、playbook简介

1.什么是playbook

        Ansible Playbook 是设定自动化任务的一种蓝图,可在无需人工干预或有限干预的前提下执行复杂的 IT 操作。Ansible Playbook 对一组或一类共同构成 Ansible 清单的主机执行。

        Ansible Playbook 本质上是一些框架,是一些预先编写的代码,开发人员可以用作临时模板或起始模板。Ansible Playbook 常被用于自动化 IT 基础架构(例如,操作系统和 Kubernetes 平台)、网络、安全系统,以及开发人员角色(例如 Git)。

        Ansible Playbook 可以帮助 IT 人员进行应用、服务、服务器节点或其他设备的编程,无需花费人力去从头创建所有事物。Ansible Playbook 及其中的条件、变量和任务,都可以无限期保存、分享或重复使用。

2.playbook组成

(1)Tasks:任务,即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行
(2)Variables:变量
(3)Templates:模板
(4)Handlers:处理器,当changed状态条件满足时,(notify)触发执行的操作
(5)Roles:角色

二、应用实例

1.使用playbook安装启用httpd服务

首先编写xxx.yaml文件

---    #多个yaml文件以---开头,以表明这是一个yaml文件,可省略
- name: apache play    #定义一个play的名称,可省略
  gather_facts: false    #设置不进行facts信息收集(即setup模块收集信息),这可以加快执行速度,如果不使用其中的信息可省略
  hosts: webservers    #指定要执行任务的被管理主机组,如多个主机组用冒号:分隔
  remote_user: root    #指定被管理主机上执行任务的用户
  tasks:    #定义任务列表,任务列表中的各任务按次序逐个在hosts中指定的主机上执行
  - name: disable selinux    #自定义任务名称
    command: '/usr/sbin/setenforce 0'    键值对,键是ansible模块,值是 -a 中的内容
    ignore_errors: true    #如执行命令的返回值不为0,就会报错,tasks停止,可使用ignore_errors忽略失败的任务

  - name: disable firewalld
    service: name=firewalld state=stopped enabled=no

  - name: prepare local repo
    copy: src=/etc/yum.repos.d/local.repo dest=/etc/yum.repos.d/local.repo

  - name: mount cdrom
    mount: src=/dev/sr0 path=/mnt fstype=iso9660 state=mounted

  - name: install apache
    yum: name=httpd state=latest

  - name: prepare httpd configuration file
    copy: src=/opt/httpd.conf dest=/etc/httpd/conf/httpd.conf mode=644 owner=apache group=apache
    notify: "restart httpd"    #如以上操作后为changed的状态时,会通过notify指定的名称触发对应名称的handlers操作

  - name: start httpd
    service: name=httpd state=started enabled=yes

  handlers:    #handlers中定义的就是任务,此处handlers中的任务使用的是service模块
  - name: restart httpd    #notify和handlers中任务的名称必须一致
    service: name=httpd state=restarted

运行playbook

ansible-playbook xxx.yaml

补充参数:
        -k(–ask-pass):用来交互输入ssh密码
        -K(-ask-become-pass):用来交互输入sudo密码
        -u:指定用户

Ansible在执行完某个任务之后并不会立即去执行对应的handler,而是在当前play中所有普通任务都执行完后再去执行handler,这样的好处是可以多次触发notify,但最后只执行一次对应的handler,从而避免多次重启。 

2.使用playbook安装启用nginx服务

首先编写xxx.yaml文件

---
- name: nginx play
  gather_facts: false
  hosts: webservers
  remote_user: root
  tasks:
  - name: test connection
    ping:

  - name: disable selinux
    command: '/usr/sbin/setenforce 0'
    ignore_errors: true

  - name: disable firewalld
    service: name=firewalld state=stopped enabled=no

  - name: prepare nginx repo
    copy: src=/etc/yum.repos.d/nginx.repo dest=/etc/yum.repos.d/nginx.repo

  - name: add dns
    copy: content="nameserver 8.8.8.8" dest=/etc/resolv.conf

  - name: install nginx
    yum: name=nginx state=latest

  - name: prepare nginx configuration file
    copy: src=/opt/nginx.conf dest=/etc/nginx/nginx.conf mode=644 owner=nginx group=nginx

  - name: prepare nginx configuration.d file
    copy: src=/opt/default.conf dest=/etc/nginx/conf.d/default.conf mode=644 owner=nginx group=nginx
    notify: "restart nginx"

  - name: start nginx
    service: name=nginx state=started enabled=yes

  handlers:
  - name: restart nginx
    service: name=nginx state=restarted

运行playbook

三、ansible-playbook其他用法

1.检查yaml文件的语法是否正确

ansible-playbook xxx.yaml --syntax-check   

如果语法格式有问题会报错 

2.检查tasks任务

ansible-playbook xxx.yaml --list-task

如果任务列表中的语法格式有问题会报错 

3.检查指定的主机

ansible-playbook test1.yaml --list-hosts

4.指定从某个task开始运行

ansible-playbook xxx.yaml --start-at-task='任务名'  

四、playbook进阶语法

1.引用变量

(1)自定义变量

编写文件

运行playbook

查看结果

(2)引用setup模块信息中的变量

编写文件

运行playbook

查看结果

2.遍历值

        Ansible提供了很多种循环结构,一般都命名为with_items,作用等同于 loop 循环。

with_items:将每个列表中所有值遍历输出

with_list:将每个列表作为一个整体输出

with_together:将每个列表中对应的值混合输出,如果个数不一致,将无法混合输出的值用null值填补组合的空缺。

with_nested:将每个列表中的每个值组合输出,类似多重循环。

(1)遍历变量中的值

(2)遍历指定的多个值

指定方式,也可以是列表的格式

(3)遍历参数列表

格式也可以是 - {username: zhangsan, filename: 1.txt} 

3.条件判断

        在Ansible中,提供的唯一一个通用的条件判断是when指令,当when指令的值为true时,则该任务执行,否则不执行该任务。

        when一个比较常见的应用场景是实现跳过某个主机不执行任务或者只有满足条件的主机执行任务。

when: ansible_default_ipv4.address 条件表达式 "ip地址" 
when: inventory_hostname 条件表达式 "主机名"

4.指定远程主机sudo切换用户

当ssh不允许root用户登录时,打开普通用户sudo提权 

5.tags 模块        

        可以在一个playbook中为某个或某些任务定义“标签”,在执行此playbook时通过ansible-playbook命令使用--tags选项能实现仅运行指定的tasks。

        playbook还提供了一个特殊的tags为always。作用就是当使用always作为tags的task时,无论执行哪一个tags时,定义有always的tags都会执行。

五、Template模板

        Jinja是基于Python的模板引擎。Template类是Jinja的一个重要组件,可以看作是一个编译过的模板文件,用来产生目标文本,传递Python的变量给模板去替换模板中的标记。

以nginx为例,在服务配置文件添加变量,然后改名为后缀为.j2的模板文件

之后在ansible主机清单文件hosts中对主机指定变量值,这样就能实现执行文件实现不同的配置

编写playbook

执行playbook 

验证结果,发现两台nginx分别监听81和82,各自网页根目录也被创建了 

六、Roles 模块

        Ansible为了层次化、结构化地组织Playbook,使用了角色(roles),roles可以根据层次型结构自动装载变量文件、task以及handlers等。简单来讲,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include它们。roles一般用于基于主机构建服务的场景中,但也可以用于构建守护进程等场景中。

1.在/etc/ansible/roles下创建角色(服务名),以LNMP为例,有三个角色

 

2.在每个角色的目录下创建模块目录

roles 内各目录含义解释

● files:用来存放由 copy 模块或 script 模块调用的文件。

● templates:用来存放 jinjia2 模板,template 模块会自动在此目录中寻找 jinjia2 模板文件。

● tasks:此目录应当包含一个 main.yml 文件,用于定义此角色的任务列表,此文件可以使用 include 包含其它的位于此目录的 task 文件。

● handlers:此目录应当包含一个 main.yml 文件,用于定义此角色中触发条件时执行的动作。

● vars:此目录应当包含一个 main.yml 文件,用于定义此角色用到的变量。

● defaults:此目录应当包含一个 main.yml 文件,用于为当前角色设定默认变量。

● meta:此目录应当包含一个 main.yml 文件,用于定义此角色的特殊设定及其依赖关系。

3.在每个角色的 handlers、tasks、meta、defaults、vars 目录下创建 main.yml 文件(文件名固定,内容可以为空)

4.编辑yml文件去引用这些roles执行剧本

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

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

相关文章

红队学习隧道必须了解的知识

端口映射和端口转发 端口映射 端口映射就是将外网的主机的一个端口映射到内网主机的一个端口,提供相应的服务。当用户访问外网IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上 端口转发 端口转发就是将发往外网指定端口的通信完全转发给…

windows下安装hbase

windows下安转hbase 安装流程 解压提供的压缩包 该压缩包是经过我修改后的,已经创建data、tmp、zookeeper目录和替换相关配置文件,目的是简化安装流程 压缩包 https://share.weiyun.com/SLTS9woO 环境变量配置 在系统变量中添加HBASE_HOME环境变量&…

Java ConcurrentHashMap 高并发安全实现原理解析

三、C13Map的字段定义 C13Map的字段定义 //最大容量 private static final int MAXIMUM_CAPACITY 1 << 30; //默认初始容量 private static final int DEFAULT_CAPACITY 16; //数组的最大容量,防止抛出OOM static final int MAX_ARRAY_SIZE Integer.MAX_VALUE -…

使用pyautogui进行PC用户界面自动化测试

目录 1.pyautogui简介及安装 2.pyautogui常见用法 2.1返回所用显示器的分辨率 2.2键盘输入函数 2.3常用函数typewrite() 2.4键盘事件 2.5函数hotkey() 2.6保存屏幕截图 3.常见用法代码汇总 1.pyautogui简介及安装 Pyautogui是一个纯Python的图形化自动化工具&#x…

代码审计-4 代码执行漏洞

代码执行漏洞 代码执行漏洞利用 ZZZPHP1.6 远程代码执行漏洞分析 漏洞点函数 此处如果能控制$ifstr就可以进行闭合&#xff0c;执行恶意代码 parserIfLabel函数将传入的参数进行正则匹配&#xff0c;当匹配通过时继续往下走 下面并没有对恶意代码内容进行过滤 跟踪parserIfLab…

游戏开发37课 狙击枪 视野问题

首先说一下视野的思路&#xff1a;我们可视化的视野全部都是以扇形显示的&#xff0c;同时为了后期的方便调整我们的视野和距离都必须是动态的。那么我们是不是可以使用度数来控制视野范围&#xff0c;那么我们就需要画出一个扇形。那么我们可以先画出来一个圆 然后在这个圆上面…

Linux安装 vmware workstation

官网下载地址 vmware workstation&#xff1a; Download VMware Workstation Pro 也可以下载提供的安装包。 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;au74 一、Ubuntu 安装 安装构建依赖项&#xff0c;打开您的系统终端并运行以下命令&#xff1a; s…

Linux操作系统中的yum命令

Linux操作系统中的yum命令是大家经常会用到的命令&#xff0c;有着非常重要的作用&#xff0c;但很多朋友依然不太清楚yum命令作用是什么&#xff1f;yum命令有哪些语法和常用命令&#xff1f;接下来我们一起来看看详细的内容介绍。 yum命令全称为Yellow dog Updater, Modified…

ChatGPT生成量化交易策略,真好玩

OK&#xff0c;还有没有更好玩的对 量化策略开发&#xff0c;高质量社群&#xff0c;交易思路分享等相关内容 『正文』 ˇ 最近比较火的OpenAI-ChatGPT&#xff0c;太有意思了。尝试让它写了几个策略&#xff0c;您别说&#xff0c;还真是有模有样。我们来看看吧。 模型一&a…

哈希(开散列、闭散列)-位图-布隆过滤器-哈希切分

文章目录1、哈希概念2、哈希表/散列表&#xff08;1&#xff09;哈希函数的设计&#xff1a;&#xff08;2&#xff09;&#xff08;最常用&#xff09;除留余数法&#xff1a;&#xff08;3&#xff09;如何解决哈希冲突&#xff1f;更加合理的设计哈希函数闭散列&#xff08;…

Java多线程之线程同步机制(锁,线程池等等)

Java多线程之线程同步机制一、概念1、并发2、起因3、缺点二、三大不安全案例1、样例一&#xff08;模拟买票场景&#xff09;2、样例二&#xff08;模拟取钱场景&#xff09;3、样例三&#xff08;模拟集合&#xff09;三、同步方法及同步块1、同步方法2、同步块四、JUC安全类型…

java多线程这一篇就差不多了

java多线程这一篇就差不多了 什么是多线程&#xff1f; 一般被问你对多线程了解多少的时候&#xff0c;你可能不仅仅只需要知道线程怎么创建&#xff0c;你可能需要了解线程的几种创建方式&#xff0c;线程的生命周期&#xff0c;线程池相关&#xff0c;并发安全&#xff0c;…

ADSP-21489的图形化编程详解(4:左右声道音量调节和多通道的输入输出详解)

左右声道音量调节 在直通的前提下&#xff0c;我们加入一个调音量的算法模块&#xff0c;来实现调节输出音量大小的功能。首先拖出来一个音量调节算法模块&#xff1a; 我们这里都是双通道&#xff0c;所以需要对这个音量调节模块进行配置&#xff1a; 连好程序&#xff0c;下…

acwing基础课——Dijkstra

由数据范围反推算法复杂度以及算法内容 - AcWing 常用代码模板3——搜索与图论 - AcWing 基本思想&#xff1a; 迪杰斯特拉&#xff08;dijkstra&#xff09;算法是单源最短路径问题的求解方法,它是一个按路径长度递增的次序产生最短路径的算法。单源最短路径就在给出一个固定…

Sqoop数据导出第2关:HDFS数据导出至Mysql内

为了完成本关任务,你需要掌握: 1、数据库( MySQL )建表。 2、HDFS 数据导出至 MySQL 中。 数据库( MySQL )建表 因为这边 Sqoop 不能够帮关系型数据库创建表,所以需要我们自己来创建表。 用命令进入 MySQL 客户端。 mysql -uroot -p123123 -h127.0.0.1 创建数据库…

备忘录模式(Memento)

参考&#xff1a; [备忘录设计模式 (refactoringguru.cn)](https://refactoringguru.cn/design-patterns/mediator) 文章目录一、什么是备忘录模式&#xff1f;二、实现三、优缺点优点缺点四、适用环境一、什么是备忘录模式&#xff1f; 在软件构建过程中&#xff0c;某些对象…

3.ORM实践

文章目录3.1 介绍Spring Data JPAJPA&#xff08;Java Persistence API&#xff09;标准HibernateSpring DataSpring Data JPA引入依赖3.2 定义JPA的实体对象常用JPA注解实体主键映射关系常用lombok注解3.3 SpringBucks线上咖啡馆实战项目&#xff08;1&#xff09;项目目标&am…

如何利用Java爬取网站数据?

1.Jsoup介绍 - 官网文档&#xff1a;https://jsoup.org - Jsoup 是一款Java 的HTML解析器&#xff0c;可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API&#xff0c;可通过DOM&#xff0c;CSS以及类似于jQuery的操作方法来取出和操作数据。 2. Jsoup快速入门…

TCP--三次握手和四次挥手

原文网址&#xff1a;TCP--三次握手和四次挥手_IT利刃出鞘的博客-CSDN博客 简介 本文介绍TCP的三次握手和四次挥手。即&#xff1a;TCP建立连接和断开连接的过程。 三次握手 流程图 主机 A为客户端&#xff0c;主机B为服务端。 第一次握手 A 发送同步报文段&#xff08;SYN…

小程序初始创建

1. 注册小程序账号 官网&#xff1a; https://mp.weixin.qq.com/wxopen/waregister?actionstep1 2. 下载小程序 官网&#xff1a; https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 百度网盘&#xff08;非最新版&#xff09; https://pan.baidu…