Ansible之playbook详解和应用实例

目录

一、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 firewalldservice: name=firewalld state=stopped enabled=no- name: prepare local repocopy: src=/etc/yum.repos.d/local.repo dest=/etc/yum.repos.d/local.repo- name: mount cdrommount: src=/dev/sr0 path=/mnt fstype=iso9660 state=mounted- name: install apacheyum: name=httpd state=latest- name: prepare httpd configuration filecopy: src=/opt/httpd.conf dest=/etc/httpd/conf/httpd.conf mode=644 owner=apache group=apachenotify: "restart httpd"    #如以上操作后为changed的状态时,会通过notify指定的名称触发对应名称的handlers操作- name: start httpdservice: name=httpd state=started enabled=yeshandlers:    #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 playgather_facts: falsehosts: webserversremote_user: roottasks:- name: test connectionping:- name: disable selinuxcommand: '/usr/sbin/setenforce 0'ignore_errors: true- name: disable firewalldservice: name=firewalld state=stopped enabled=no- name: prepare nginx repocopy: src=/etc/yum.repos.d/nginx.repo dest=/etc/yum.repos.d/nginx.repo- name: add dnscopy: content="nameserver 8.8.8.8" dest=/etc/resolv.conf- name: install nginxyum: name=nginx state=latest- name: prepare nginx configuration filecopy: src=/opt/nginx.conf dest=/etc/nginx/nginx.conf mode=644 owner=nginx group=nginx- name: prepare nginx configuration.d filecopy: src=/opt/default.conf dest=/etc/nginx/conf.d/default.conf mode=644 owner=nginx group=nginxnotify: "restart nginx"- name: start nginxservice: name=nginx state=started enabled=yeshandlers:- name: restart nginxservice: 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.hqwc.cn/news/97725.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac下配置JDK环境

一、下载安装 下载地址:Java Downloads | Oracle,选择适用于Mac OS的JDK版本,点击下载即可。 下载完之后,直接安装: 安装过程非常简单,按“继续”按钮一直下一步即可。 二、配置环境变量 上一步骤&#x…

虚拟现实vr元宇宙井下危险隐患排查模拟实训稳固企业生产

数字化时代,职业教育正面临着前所未有的挑战和机遇,元宇宙的兴起,借助元宇宙平台进行钻井虚拟教学实验,基于元宇宙数字空间搭建更丰富、逼真、安全、灵活的实验环境,成为石油行业教育创新的催化剂。 一、降低实验成本 …

LinkedList(3):并发异常

1 LinkedList并发异常 package com.example.demo;import java.util.Iterator; import java.util.LinkedList;public class TestLinkedList {public static void main(String[] args) {LinkedList linkedList new LinkedList(); //双向链表linkedList.add(11);linkedList.add(…

Linux--进程概念

1.什么是程序?什么是进程?有什么区别? 程序:是静态的概念,gcc xxx.c -o pro 磁盘中生成的pro文件,叫做程序。 进程:是程序的一种与运行活动,通俗的意思是程序跑起来了,系…

OpenCV实现Photoshop曲线调整

《QT 插件化图像算法研究平台》有仿Photoshop曲线调整图像的功能,包括RGB曲线调整和HSV曲线调整。 Photoshop曲线调整原理:RGB、HSV各通道曲线,可以理解为一个值映射(值转换)函数。X轴是输入,Y轴是输出。x0…

CentOS7 Hadoop3.3.0 安装与配置

一、安装JDK 1、创建文件夹tools和training用于存放压缩包和解压使用,tools存放压缩包,training用于解压后安装jdk和hadoop的路径。 1)回到路径为 / 的位置 cd /2) 创建 tools 和 training mkdir toolsmkdir training3) 进入tools文件夹 …

SpringCloud(35):Nacos 服务发现快速入门

本小节,我们将演示如何使用Spring Cloud Alibaba Nacos Discovery为Spring cloud 应用程序与 Nacos 的无缝集成。 通过一些原生的spring cloud注解,我们可以快速来实现Spring cloud微服务的服务发现机制,并使用Nacos Server作为服务发现中心,统一管理所有微服务。 1 Spring…

运维Shell脚本小试牛刀(六): Shell中的函数|本地变量

运维Shell脚本小试牛刀(一) 运维Shell脚本小试牛刀(二) 运维Shell脚本小试牛刀(三)::$(cd $(dirname $0); pwd)命令详解 运维Shell脚本小试牛刀(四): 多层嵌套if...elif...elif....else fi_蜗牛杨哥的博客-CSDN博客 Cenos7安装小火车程序动画 运维Shell脚本小试…

本地电脑搭建Web服务器建立一个属于自己的网页该如何操作呢?

本地电脑搭建Web服务器并用cpolar发布至公网访问 文章目录 本地电脑搭建Web服务器并用cpolar发布至公网访问前言1. 首先在电脑安装PHPStudy、WordPress、cpolar2. 安装cpolar,进入Web-UI界面3. 安装wordpress4. 进入wordpress网页安装程序5. 利用cpolar建立的内网穿…

python安装wind10

一、下载: 官网:Python Releases for Windows | Python.org 二、安装 双击下载的安装程序文件。这将打开安装向导。安装界面图下方两个框的" Use admin privileges wheninstalling py. exe和” Add python. exe to PATH"都要勾选,一定要勾选!一定要勾选…

docker save docker export 区别

docker save用于导出镜像到文件,包含镜像元数据和历史信息;docker export用于将当前容器状态导出至文件,类似快照,所以不包含元数据及历史信息,体积更小,此外从容器快照导入时也可以重新指定标签和元数据信…

Re45:读论文 GPT-1 Improving Language Understanding by Generative Pre-Training

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文全名:Improving Language Understanding by Generative Pre-Training 论文下载地址:https://www.mikecaptain.com/resources/pdf/GPT-1.pdf 本文是2018年OpenAI的工作&#xff0c…