ansible的脚本—playbook剧本

一、playbook

1、简介


Playbook 剧本是由一个或多个play组成的列表。

play的主要功能在于将预定义的一组主机,装扮成事先通过ansible中的task定义好的角色。

Task实际是调用ansible的一个module,将多个play组织在一个playbook中,即可以让它们联合起来,按事先编排的机制执行预定义的动作

Playbook 文件是采用YAML语言编写的。
 

2、playbook组成部分:

1、tasks任务:包含要在目标主机上执行的操作,使用模块定义这些操作。每个任务都是一个模块的调用。

2、variables变量:存储和传递数据,和shell脚本中的变量是一个意思,可以在playbook当中定义为全局变量,也可以在外部传参。

3、templates模版:主要用于生成配置文件。模版是包含占位符的文件。占位符由ansible在执行时转化为变量值

4、handlers处理器:当需要有变更的时候,可以执行触发器

5、roles角色:类似于docker-compose,是一种组织和封装playbook的。允许把相关的任务,变量和模版和处理器组织成一个可复用的单元

3、如何编写Playbook?

xxx.yaml/xxx.yml
--- #表示开始
- name:  #指定play的名称hosts: #指定主机清单中定义的主机组名remote_user: #指定远程主机的执行用户grather_facts: ture|fales #指定是否要收集远程主机的facts信息vars:   #自定义变量,只能在当前play有效- 变量1: 值1  #格式为key: value- 变量2: 值2tasks: #定义任务列表,默认从上往下依次执行- name: #定义任务的名称模块名: 模块参数        ignore errors: true  #忽略任务的失败- name: #可以定义多个任务模块名: 模块参数  notify: 任务名  #如以上操作后为changed的状态时,会通过notify指定的名称触发对应名称的handlers操作##条件判断##- name:模块名: 模块参数when: #定义条件表达式(== != > < >= <=),条件成立时执行此task任务,否则不执行任务##循环##- name:模块名: 模块参数={{item}}with_items: #定义循环列表##tags模块,标签## - name: 模块名: 模块参数 tags:- 标签1- 标签2handlers: - name: 任务名  #和notify中的任务名相同模块名: 模块参数#无注释版
---
- name: hosts: remote_user:grather_facts: ture|fales vars:- 变量1: 值1- 变量2: 值2tasks:- name:模块名: 模块参数        ignore errors: true- name:模块名:notify: 任务名- name:模块名:when:- name:模块名: 模块参数={{item}}with_items:handlers: - name: 任务名模块名: 模块参数

4、语句的横向/纵向写法

task任务的模块语法格式
横向格式:
模块名: 参数1=值 参数2={{变量名}} ...纵向格式:
模块名:参数1: 值参数2: "{{变量名}}"...with_items 和 vars 的语法格式
横向格式:
with_items: ["值1", "值2", "值3", ...]值为对象(键值对字段)时:
with_items:
- {key1: "值1", key2: "值2"}
- {key1: "值3", key2: "值4"}
...纵向格式:
with_items:
- 值1
- 值2
- 值3
...值为对象(键值对字段)时:
with_items:
- key1: "值1"key2: "值2"
- key1: "值3"key2: "值4"
...

二、playbook模版实例:

1、playbook模版:

ansible-playbook test1.yml
执行脚本ansible-playbook test1.yml --start-at-task='install httpd'
从指定任务模块开始执行ansible-playbook test1.yml --syntax-check
检查yml文件的语法是否正确ansible-playbook test1.yml --list-task
检查有多少tasks任务ansible-playbook test1.yml --list-hosts
检查在哪台主机生效

若要切换用户,比如从koeda切换到root用户

71行要取消注释

hosts中:

改过用户,运行时的命令

ansible-playbook test1.yml -K(大K)

-K:输入密码

若脚本中没有指定用户,可以命令指定:

ansible-playbook test1.yml -u root -k(小k)

模版实例2:

#this is second
#声明和引用变量,以及外部传参
- hosts: 192.168.10.201remote_user: rootvars:groupname: guoqiusername: wangdefutasks:- name: create groupgroup:name: "{{ groupname }}"system: yesgid: 111- name: create useruser:name: "{{ username }}"uid: 1011group: "{{ groupname }}"shell: /sbin/nologin- name: copy filecopy:content: "{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address']}}"dest: /opt/ky32.txt
#获取目标的ip地址,然后复制到目标文件

vars:groupname: koedausername: koeda
字典方式:key-value
"{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address']}}"
包含所有主机变量的字典
inventory_hostname:目标主机的主机名
ansible_default_ipv4:获取目标主机的IP地址

也可以里面不指定变量参数,外部传参:

ansible-playbook test2.yaml -e 'username=koeda groupname=koeda'

2、playbook的条件判断:

when 是一个比较常见的应用场景,实现满足条件即执行,不满足条件即跳过的任务

when是满足条件即执行,不满足不执行

- hosts: allremote_user: roottasks:- name: nginx whenyum: name=nginxwhen: ansible_default_ipv4.address == '20.0.0.25'- name: nginx infodebug:msg: "安装nginx"when: ansible_default_ipv4.address == '20.0.0.25'- name: httpd whenyum: name=httpdwhen: ansible_default_ipv4.address == '20.0.0.26'- name: httpd infodebug:msg: "安装httpd"when: ansible_default_ipv4.address == '20.0.0.26'

3、playbook中的循环:

四种循环方式:

with_items 最常用的

with_list 列表分组循环

with_together 列表对应的列中,以数据结合的方式循环

with_nested 相当于双层循环,第一层定义了循环的次数,第二层表示第一层中的每个元素会循环几次

ansible有多中循环格式:

with_items 循环遍历

- hosts: 20.0.0.25remote_user: rootgather_facts: falsetasks:- debug:msg: "{{ item }}"with_items: [a,b,c,d]

- hosts: 20.0.0.25remote_user: rootgather_facts: falsetasks:- debug:msg: "{{ item }}"with_items:- [a,b,c,d]- [1,2,3,4]

with_list:列表输出

- hosts: 20.0.0.25remote_user: rootgather_facts: falsetasks:- debug:msg: "{{item}}"with_list:- [a,b,c]- [1,2,3]

练习:

- hosts: 20.0.0.25remote_user: rootgather_facts: falsetasks:- name: createfile:path: "{{item}}"state: touchwith_items:- /opt/a- /opt/b- /opt/1- /opt/2

with_together:组合输出

组循环,列表中的值,一一对应打印出来

- hosts: 20.0.0.25remote_user: rootgather_facts: falsetasks:- debug:msg: "{{item}}"with_together:- [a,b,c]- [1,2,3]- [A,B]

循环嵌套:

- hosts: 20.0.0.25remote_user: rootgather_facts: falsetasks:- debug:msg: "{{item}}"with_nested:- [a,b,c]- [1,2,3]

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

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

相关文章

系列十一(面试)、如何查看JVM的参数?

一、查看JVM的参数 1.1、概述 上篇文章介绍了JVM的参数类型&#xff0c;通过jinfo可以查看JVM的默认参数&#xff0c;本章介绍另外一种查看JVM参数的方式。 1.2、 分类 JVM中提供了三种方式查看JVM的参数信息&#xff0c;这三种方式又分为两类&#xff0c;即&#xff1a;查看默…

安防监控EasyCVR平台如何通过api接口设置实时流的sei数据实现画框等操作?

国标GB28181视频监控系统EasyCVR平台采用了开放式的网络结构&#xff0c;支持高清视频的接入和传输、分发&#xff0c;能提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力&#xff0…

(PC+WAP)装修设计公司网站模板 家装公司网站源码下载

(PCWAP)装修设计公司网站模板 家装公司网站源码下载 PbootCMS内核开发的网站模板&#xff0c;该模板适用于装修设计、家装公司类等企业&#xff0c;当然其他行业也可以做&#xff0c;只需要把文字图片换成其他行业的即可&#xff1b; PCWAP&#xff0c;同一个后台&#xff0c…

贪吃蛇(一)

ncurses的使用 这是是用于改善用户交互的一个库&#xff0c;做到即时响应。 它的基本使用&#xff0c;涉及到两个函数initscr、endwin&#xff0c;涉及到键盘输入的交互&#xff0c;就需要使用到keypad函数。 基本用法 #include"curses.h" int main() {int key;in…

ubuntu推送本地仓库到coding

本教程提供在ubuntu系统下推送本地仓库到coding的指令&#xff0c;用于查阅 一、主要步骤有&#xff1a; 0.初始化仓库 git init 1.添加远程仓库 git remote add origin https://coding.git #修改自己仓库链接 &#xff08;命名仓库别名为origin&#xff09; 2.提交代码…

Ansible:模块2

1&#xff0c;command模块 一般用于执行linux的命令&#xff0c;不支持管道符和重定向。 2&#xff0c;shell模块 相当于command的升级版&#xff0c;也可以执行linux命令&#xff0c;支持管道符和重定向 3&#xff0c;cron 模块 在远程主机生成定时任务 分 时 日 月 周 m…

多级缓存:亿级流量的缓存方案

文章目录 一.多级缓存的引入二.JVM进程缓存三.Lua语法入门四.多级缓存1.OpenResty2.查询Tomcat3.Redis缓存预热4.查询Redis缓存5.Nginx本地缓存6.缓存同步 一.多级缓存的引入 传统缓存的问题 传统的缓存策略一般是请求到达Tomcat后&#xff0c;先查询Redis&#xff0c;如果未…

存储:windows 10 硬盘盒 新盘 SSD分区

1.准备好绿联2.5英寸 2.准备好 SSD 磁盘 3.接入硬盘和盒子 4.win10 电脑 win x 然后选择磁盘管理 &#xff08;磁盘管理 K&#xff09; 5.它会提示需要初始化的一个新的磁盘&#xff0c;确定初始化 6.添加卷 7.命名盘符 8.检测是否识别到盘符 9.end

【学习笔记】部署yolov8到安卓手机

一、环境配置和源码安装 首先你需要配置好pytorch环境&#xff0c;本文不再详细阐述&#xff0c;若未配置好环境&#xff0c;可以参考我的另一篇博客&#xff1a;https://blog.csdn.net/liujiahao123987/article/details/128743017 yolov8的安装可参考&#xff1a;https://blog…

【C语言 | 内存管理】野指针、静态区、堆、栈、常见的内存错误及对策

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

【MATLAB源码-第101期】基于matlab的蝙蝠优化算BA)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 蝙蝠算法&#xff08;BA&#xff09;是一种基于群体智能的优化算法&#xff0c;灵感来源于蝙蝠捕食时的回声定位行为。这种算法模拟蝙蝠使用回声定位来探测猎物、避开障碍物的能力。在蝙蝠算法中&#xff0c;每只虚拟蝙蝠代表…

软件测试实现Finddler的手机抓包过程

Fiddler的手机抓包过程 1、启动Fiddler 打开菜单栏中的 Tools > Fiddler Options&#xff0c;打开“Fiddler Options”对话框&#xff1a; 2、在Fiddler Options”对话框 切换到“Connections”选项卡&#xff0c;然后勾选“Allow romote computers to connect”后面的复选…

UE5 C++(七)— UObject、UGameInstance实例化

文章目录 UObject实例化创建一个MyObject类在Default Pawn Class 中实现MyObject中参数调用 UGameInstance实例化创建GameInstance UObject实例化 创建一个MyObject类 在Default Pawn Class 中实现 注意&#xff1a;要实现运行时调用可在这里提前配置&#xff0c;具体参考之前…

(数据结构)单链表的插入删除

代码实现 #include<stdio.h> #include<stdlib.h> typedef struct LNode {int data;struct LNode* next; }LNode, * LinkList; //创建头结点 LNode* InitList(LinkList L) {L (LNode*)malloc(sizeof(LNode));if (L NULL){printf("申请头结点失败\n");…

公共字段自动填充——后端

场景&#xff1a;当处理一些请求时&#xff0c;会重复的对数据库的某些字段进行赋值&#xff08;如&#xff1a;在插入和更新某个物品时&#xff0c;需要更新该物品的更新时间和更新者的信息&#xff09;&#xff0c;这样会导致代码冗余。 如&#xff1a; 思路&#xff1a; 自…

【经典LeetCode算法题目专栏分类】【第2期】组合与排列问题系列

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 组合总和1 class So…

脉冲水表计量方法有哪些?

随着社会的发展和人们对资源的需求不断增长&#xff0c;水资源的有效利用显得尤为重要。而水表作为测量家庭和工业用水的关键设备&#xff0c;其准确性和稳定性对于水资源管理至关重要。本文将重点介绍水表脉冲数计量方法&#xff0c;以帮助读者更好地理解和应用水资源。 一、机…

vue3项目引入电子签名(可横屏竖屏)

实现效果&#xff1a;&#xff08;左边横屏&#xff0c;右边竖屏&#xff09; 前言&#xff1a;【使用开源项目smooth-signature 实现签名的功能。Gitee 地址是 &#xff1a;GitHub - linjc/smooth-signature: H5带笔锋手写签名&#xff0c;支持PC端和移动端&#xff0c;任何前…

【超图】SuperMap iClient3D for WebGL/WebGPU ——地形影像

作者&#xff1a;taco 号外&#xff01;号外&#xff01;开新坑了&#xff01;开新坑了&#xff01;对于一个代码小白来讲&#xff0c;设置可能是刚接触开发的人&#xff08;还没接触准备接触&#xff09;的人来说。对于读代码或是在对产品的使用上会存在许许多多的疑惑。接下来…

Ansible(一)

Ansible: 远程操作主机功能&#xff1a; 自动化运维&#xff08;playbook剧本YAML&#xff09; 是基于Python开发的配置管理应用部署攻具&#xff0c;在自动化运维当中&#xff0c;现在是异军突起 Ansible能批量配置&#xff0c;部署&#xff0c;管理上千台主机&#xff0c…