Ansible的脚本-----playbook剧本【上】

目录

1.playbook剧本组成

2.playbook剧本实战演练

2.1 实战演练一:给被管理主机安装httpd服务

2.2 实战演练二:定义、引用变量

2.3 实战演练三:指定远程主机sudo切换用户

2.4 实战演练四:when条件判断

2.5 实战演练五:迭代循环

3.总结


1.playbook剧本组成

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

2.playbook剧本实战演练

示例:
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 selinuxcommand: '/sbin/setenforce 0'    #command模块和shell模块无需使用key=value格式ignore_errors: True     #如执行命令的返回值不为0,就会报错,tasks停止,可使用ignore_errors忽略失败的任务- name: disable firewalldservice: name=firewalld state=stopped    #使用 module: options 格式来定义任务,option使用key=value格式- name: install httpdyum: name=httpd state=latest- name: install configuration file for httpdcopy: src=/opt/httpd.conf dest=/etc/httpd/conf/httpd.conf    #这里需要一个事先准备好的/opt/httpd.conf文件notify: "restart httpd"    #如以上操作后为changed的状态时,会通过notify指定的名称触发对应名称的handlers操作- name: start httpd serviceservice: enabled=true name=httpd state=startedhandlers:     #handlers中定义的就是任务,此处handlers中的任务使用的是service模块- name: restart httpd    #notify和handlers中任务的名称必须一致service: name=httpd state=restarted
##Ansible在执行完某个任务之后并不会立即去执行对应的handler,而是在当前play中所有普通任务都执行完后再去执行handler,这样的好处是可以多次触发notify,但最后只执行一次对应的handler,从而避免多次重启。

2.1 实战演练一:给被管理主机安装httpd服务

在ansible服务器主机,给远程被管理主机制作安装httpd服务的剧本文件play1.yam

mkdir playbook
cd playbook/
vim play1.yaml
- name: first playgather_facts: falsehosts: dbserversremote_user: roottasks:- name: disable firewalldservice: name=firewalld state=stopped enabled=no- name: disable selinuxcommand: 'setenforce 0'ignore_errors: true- name: mount cdrommount: src=/dev/sr0 path=/mnt fstype=iso9660 state=mounted- name: install httpdyum: name=httpd state=latest- name: start httpdservice: name=httpd state=started enabled=yes

运行playbook

ansible-playbook play1.yaml
//补充参数:
-k(–ask-pass):用来交互输入ssh密码
-K(-ask-become-pass):用来交互输入sudo密码
-u:指定用户
ansible-playbook play1.yaml --syntax-check    #检查yaml文件的语法是否正确
ansible-playbook play1.yaml --list-task       #检查tasks任务
ansible-playbook play1.yaml --list-hosts      #检查生效的主机
ansible-playbook play1.yaml --start-at-task='install httpd'     #指定从某个task开始运行


被控制端验证安装情况

添加触发器

scp /etc/httpd/conf/httpd.conf 192.168.9.114:/opt/ #将httpd服务端下的httpd.conf文件复制到ansible服务器

vim /opt/httpd.conf       ansible服务器
修改42行端口为8080,以便测试
vim play1.yaml
- name: first playgather_facts: falsehosts: dbserversremote_user: roottasks:- name: disable firewalldservice: name=firewalld state=stopped enabled=no- name: disable selinuxcommand: 'setenforce 0'ignore_errors: true- name: mount cdrommount: src=/dev/sr0 path=/mnt fstype=iso9660 state=mounted- name: install httpdyum: name=httpd state=latest- name: copy config filecopy: src=/opt/httpd.conf dest=/etc/httpd/conf/notify: "reload httpd"- name: start httpdservice: name=httpd state=started enabled=yeshandlers:- name: reload httpdservice: name=httpd state=reloadedansible-playbook play1.yaml --syntax-check
ansible-playbook play1.yaml


被控制端查看端口是否同步

2.2 实战演练二:定义、引用变量

vim play2.yaml
- name: second playremote_user: roothosts: dbserversvars:- myname: scj- myclass: xy101tasks:- name: create groupgroup: name={{myclass}}- name: create useruser: name={{myname}} groups={{myclass}}ansible-playbook play2.yaml --syntax-check
ansible-playbook play2.yaml


被控制主机验证

使用facts信息做变量

vim play2.yaml- name: second playremote_user: roothosts: dbserversgather_facts: truevars:- myname: scj- myclass: xy101tasks:- name: create groupgroup: name={{myclass}}- name: create useruser: name={{myname}} groups={{myclass}}- name: copy filecopy: content={{ansible_default_ipv4}} dest=/opt/ipv4.txtansible-playbook play2.yaml


被控制节点验证

指定子字段名称查看具体内容,获取子字段内容,使用.

vim play2.yaml
- name: second playremote_user: roothosts: dbserversgather_facts: truevars:- myname: scj- myclass: xy101tasks:- name: create groupgroup: name={{myclass}}- name: create useruser: name={{myname}} groups={{myclass}}- name: copy filecopy: content={{ansible_default_ipv4.network}} dest=/opt/ipv4.txtansible-playbook play2.yaml


被控制节点验证

运行时指定变量

ansible-playbook play2.yaml -e 'myname=zhuxiang'    #在命令行里定义变量


2.3 实战演练三:指定远程主机sudo切换用户

vim /etc/sudoers       #被控制节点为用户授权并设置密码
zhuxiang ALL=(ALL) ALLecho 123456 | passwd --stdin zhuxiang


vim play2.yaml
- name: second playremote_user: zhuxiangbecome: yes                              #2.6版本以后的参数,之前是sudo,意思为切换用户运行become_user: root                        #指定sudo用户为roothosts: dbserversgather_facts: truevars:- myname: wangwang- myclass: xy102tasks:- name: create groupgroup: name={{myclass}}- name: create useruser: name={{myname}} groups={{myclass}}- name: copy filecopy: content={{ansible_default_ipv4.network}} dest=/opt/ipv4.txtansible-playbook play2.yaml -k -K
-k(–ask-pass):用来交互输入ssh密码
-K(-ask-become-pass):用来交互输入sudo密码

被控制节点验证

2.4 实战演练四:when条件判断

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

vim play3.yaml
- name: third playremote_user: roothosts: webserversgather_facts: truetasks:- name: copy scj.sh to 9.111copy: src=/opt/scj.sh dest=/optwhen: ansible_default_ipv4.address == "192.168.9.111"- name: run sjc.sh on 9.113script: '/opt/scj.sh scj tangjun'when: inventory_hostname != "192.168.9.111"

192.168.9.111节点

192.168.9.113节点

2.5 实战演练五:迭代循环

vim play4.yaml
- name: four playremote_user: roothosts: dbserversgather_facts: notasks:- debug: msg="{{item}}"with_items:- a- b- cansible-playbook  play4.yaml


迭代创建用户

vim play4.yaml- name: four playremote_user: roothosts: dbserversgather_facts: notasks:- name: create usersuser: name={{item}} groups=xy101with_items:- zhang- san- liansible-playbook  play4.yaml


被控制节点验证

vim /etc/group
vim /etc/passwd
#可根据两条命令查看是否创建成功

创建多个用户并加入不同组

vim play4.yaml
- name: four playremote_user: roothosts: dbserversgather_facts: novars:- mygroups: ["xy1", "xy2", "xy3"]tasks:- name: create groupsgroup: name={{item}}with_items: "{{mygroups}}"- name: create usersuser: name={{item.myname}} groups={{item.myclass}}with_items:- myname: simyclass: xy1- myname: wangmyclass: xy2- myname: wumyclass: xy3
ansible-playbook play4.yaml


被控制节点验证

vim /etc/group
vim /etc/passwd
#可根据两条命令查看是否创建成功

3.总结

playbook剧本的格式


vim XXX.yaml   XXX.yml
- name:                        #设置play的名称(一个playbook文件里可以有多个play)hosts:                       #设置执行此play的远程主机组,多个组用 : 分隔remote_user:                 #设置在远程主机执行此play的用户名,默认为rootbecome: yes                  #设置是否需要在远程主机sudo切换执行任务become_user: root            #设置sudo切换的用户,一般为rootgather_facts: true|false     #设置是否收集facts信息,默认为truevars:                        #设置此play中使用的自定义变量- 变量1: 值1- 变量2: 值2tasks:                       #设置此play的任务列表- name:                         #定义任务的名称模块名: 模块参数              #定义此任务要使用的模块和参数(键值对格式 key=value)- name:           模块名: 模块参数ignore_errors: true           #忽略此任务可能的失败(如果不忽略,则任务失败会导致中断后续任务的执行)- name:           模块名: 模块参数when: 条件表达式              #条件表达式成立则执行此任务,不成立则不执行此任务- name:           模块名: 模块参数={{item}}     #循环遍历with_items:                   #定义循环的取值列表- name:           模块名: 模块参数notify: '任务名'              #定义此任务执行状态为changed时要触发的handler任务handlers:                    #设置notify触发的任务- name: 任务名模块名: 模块参数playbook运行命令
ansible-playbook XXX.yaml -u <远程用户> -k--become-user <sudo切换的用户> -K--syntax-check--list-task--list-hosts--start-at-task="任务名"-e "变量=值"模块参数的格式
横向格式:模块名: 参数1=值  参数2={{变量名}}  ....纵向格式:模块名: 参数1: 值参数2: "{{变量名}}"....vars 和 with_items 的格式
#值为纯量类型时:
tasks:
- name:模块名: 参数1={{item}}with_items:- 值1                                 #纵向格式:- 值2....tasks:
- name:模块名: 参数1={{item}}with_items: ["值1", "值2", ....]     #横向格式#先使用vars定义循环取值列表,再用with_items引用vars的变量
vars:
- 变量1:- 值1                                #纵向格式- 值2....
- 变量2: ["值1", "值2", ....]          #横向格式tasks:
- name:模块名: 参数1={{item}}with_items: "{{变量1}}"         #使用with_items引用vars的变量
- name:模块名: 参数1={{item}}with_items: "{{变量2}}"#当值为对象类型(键值对)时:
tasks:
- name:模块名: 参数1={{item.key1}}  参数2={{item.key2}}with_items: - key1: 值1                    #纵向格式key2: 值2- key1: 值3key2: 值4....with_items:- {key1: 值1, key2: 值2}      #横向格式- {key1: 值3, key2: 值4}....vars:
- 变量1: - key1: 值1                    #纵向格式key2: 值2- key1: 值3key2: 值4....
- 变量2:- {key1: 值1, key2: 值2}      #横向格式- {key1: 值3, key2: 值4}....
tasks:
- name:模块名: 参数1={{item.key1}}  参数2={{item.key2}}with_items: "{{变量1}}"	

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

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

相关文章

ElasticSearch(六)— 全文检索

一、match系列查询 前面讲到的query中的查询&#xff0c;都是精准查询。可以理解成跟在关系型数据库中的查询类似。match系列的查询&#xff0c;是全文检索的查询。会通过分词进行评分&#xff0c;匹配&#xff0c;再返回搜索结果。 1.1 match 查询 "query": {&qu…

.Net Core 微服务之Consul(三)-KV存储分布式锁

引言: 集合上两期.Net Core 微服务之Consul(一)(.Net Core 微服务之Consul(一)-CSDN博客) 。.Net Core 微服务之Consul(二)-集群搭建)(.Net Core 微服务之Consul(二)-集群搭建-CSDN博客) 目录 一. Consul KV 存储 1. KV 存储介绍 1.1 数据模型 1.2 一致性和…

Centos安装、迁移gitlab

Centos安装迁移gitlab 一、下载安装二、配置rb修改&#xff0c;起服务。三、访问web&#xff0c;个人偏好设置。四、数据迁移1、查看当前GitLab版本2、备份旧服务器的文件3、将上述备份文件拷贝到新服务器同一目录下&#xff0c;恢复GitLab4、停止新gitlab数据连接服务5、恢复备…

Docker、containerd、CRI-O 和 runc 之间的区别

容器与 Docker 这个名称并不紧密相关。你可以使用其他工具来运行容器 您可以使用 Docker 或一堆非Docker 的其他工具来运行容器。docker只是众多选项之一&#xff0c;Docker&#xff08;公司&#xff09;在生态系统中创建了一些很棒的工具&#xff0c;但不是全部。 容器方面有…

47.简易电压表的设计与验证(2)

&#xff08;1&#xff09;Verilog 代码&#xff1a; module adc_collect(input clk ,input reset_n ,input [7:0] adc_data ,output clk_adc );wire clk_adc_a ;…

大文件分片上传(前端TS实现)

大文件分片上传 内容 一般情况下&#xff0c;前端上传文件就是new FormData,然后把文件 append 进去&#xff0c;然后post发送给后端就完事了&#xff0c;但是文件越大&#xff0c;上传的文件也就越长&#xff0c;如果在上传过程中&#xff0c;突然网络故障&#xff0c;又或者…

【Linux操作系统】:进程间通信

目录 进程间通信介绍 1、进程间通信的概念 2、进程间通信的目的 3、进程间通信的本质 4、进程间通信的分类 管道 匿名管道 匿名管道的原理 pipe函数 创建匿名管道 管道的四种情况和五种特性 命名管道 使用命令创建命名管道 创建一个命名管道 命名管道的打开规则 …

【ROS2】高级:安全-理解安全密钥库

目标&#xff1a;探索位于 ROS 2 安全密钥库中的文件。 教程级别&#xff1a;高级 时间&#xff1a;15 分钟 内容 背景安全工件位置 公钥材料 私钥材料域治理政策 安全飞地 参加测验&#xff01; 背景 在继续之前&#xff0c;请确保您已完成设置安全教程。 sros2 包可以用来创…

Qt自定义下拉列表-可为选项设置标题、可禁用选项

在Qt中,ComboBox&#xff08;组合框&#xff09;是一种常用的用户界面控件,它提供了一个下拉列表,允许用户从预定义的选项中选择一个。在项目开发中&#xff0c;如果简单的QComboBox无法满足需求&#xff0c;可以通过自定义QComboBox来实现更复杂的功能。本文介绍一个自定义的下…

Python研究生毕业设计,数据挖掘、情感分析、机器学习

最近在学校毕业了&#xff0c;其中有很多毕业论文使用到的代码&#xff0c;如数据挖掘、情感分析、机器学习、数据预测处理、划分数据集和测试集&#xff0c;绘制分类任务&#xff0c;词汇表示&#xff1a;使用TF-IDF向量化器&#xff0c;线性回归、多元线性回归、SVR回归模型&…

一文入门SpringSecurity 5

目录 提示 Apache Shiro和Spring Security 认证和授权 RBAC Demo 环境 Controller 引入Spring Security 初探Security原理 认证授权图示​编辑 图中涉及的类和接口 流程总结 提示 Spring Security源码的接口名和方法名都很长&#xff0c;看源码的时候要见名知意&am…

grafana对接zabbix数据展示

目录 1、初始化、安装grafana 2、浏览器访问 3、安装zabbix 4、zabbix数据对接grafana 5、如何导入模板&#xff1f; ① 设置键值 ② 在zabbix web端完成自定义监控项 ③ garafana里添加nginx上面的的三个监控项 6、如何自定义监控项&#xff1f; 以下实验沿用上一篇z…

二、原型模式

文章目录 1 基本介绍2 实现方式深浅拷贝目标2.1 使用 Object 的 clone() 方法2.1.1 代码2.1.2 特性2.1.3 实现深拷贝 2.2 在 clone() 方法中使用序列化2.2.1 代码 2.2.2 特性 3 实现的要点4 Spring 中的原型模式5 原型模式的类图及角色5.1 类图5.1.1 不限制语言5.1.2 在 Java 中…

免费【2024】springboot 趵突泉景区的智慧导游小程序

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

开发桌面程序-Electron入门

Electron是什么 来自官网的介绍 Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发 经验。 总…

普中51单片机:DS1302时钟芯片讲解与应用(十)

文章目录 引言基本特性什么是RAM&#xff1f;什么是涓流充电&#xff1f; 电路图和引脚说明通信协议以及工作流程寄存器控制寄存器日历/时钟寄存器 DS1302读写时序代码演示——数码管显示时分秒 引言 DS1302 是一款广泛使用的实时时钟 (RTC) 芯片&#xff0c;具有低功耗、内置…

本地部署VMware ESXi服务实现无公网IP远程访问管理服务器

文章目录 前言1. 下载安装ESXi2. 安装Cpolar工具3. 配置ESXi公网地址4. 远程访问ESXi5. 固定ESXi公网地址 前言 在虚拟化技术日益成熟的今天&#xff0c;VMware ESXi以其卓越的性能和稳定性&#xff0c;成为了众多企业构建虚拟化环境的首选。然而&#xff0c;随着远程办公和跨…

《昇思25天学习打卡营第19天|基于MobileNetv2的垃圾分类》

基于MobileNetv2的垃圾分类 本文档主要介绍垃圾分类代码开发的方法。通过读取本地图像数据作为输入&#xff0c;对图像中的垃圾物体进行检测&#xff0c;并且将检测结果图片保存到文件中。 1、实验目的 了解熟悉垃圾分类应用代码的编写&#xff08;Python语言&#xff09;&a…

机器学习 | 回归算法原理——多项式回归

Hi&#xff0c;大家好&#xff0c;我是半亩花海。接着上次的最速下降法&#xff08;梯度下降法&#xff09;继续更新《白话机器学习的数学》这本书的学习笔记&#xff0c;在此分享多项式回归这一回归算法原理。本章的回归算法原理基于《基于广告费预测点击量》项目&#xff0c;…

html+css+js前端作业 王者荣耀官网5个页面带js

htmlcssjs前端作业 王者荣耀官网5个页面带js 下载地址 https://download.csdn.net/download/qq_42431718/89574989 目录1 目录2 目录3 项目视频 王者荣耀5个页面&#xff08;带js&#xff09; 页面1 页面2 页面3 页面4 页面5