day41 Ansible剧本的语法

news/2025/4/1 4:25:42/文章来源:https://www.cnblogs.com/yangzaikai/p/18800075

day41--ansible剧本的学习

1.剧本的主题的内容剧本就是两大部分的知识点
-ansible 模块(以及模块的参数)
-yaml语法3.工作以后
维护公司的剧本
-看剧本,看懂了,维护,修改
-修改各种的参数,文件的路径,文件的名字,服务的端口名字(就是该ansible各种的参数,参数的值)2。json的语法(网站数据的传输,数据传输最主要的形式)3.剧本的练习nfs reync nginx lsync 网站数据的共享,实时的同步。第一个阶段
ssh + shell 脚本的模式

写剧本很简单
1.先写好临时的ad-hoc命令模式部署nginx服务
yum源的配置
#我们这里直接是复制到目标的机器中ansible web -m copy -a "src=/etc/yum.repos.d/   dest=/etc/yum.repos.d/"# 查看分组的情况[root@master-61 yum.repos.d]# cat /etc/ansible/hosts | grep -vE "^#|^$"
[all:vars]
ansible_port=22999
ansible_user=root
ansible_password=123123
[web]
172.16.1.[7:9] 
[nfs]
172.16.1.31 
[backup]
172.16.1.41 1.安装软件
ansible web -m yum -a "name=nginx state=installed"自己修改配置的文件2.启动服务
ansible web -m systmd -a "name=nginx state=started"有了临时命令的语句就可以变为剧本的写法,就可以学习yaml啦。#第三个阶段
ansibLe-playbook61机器,通过执行剧本
- 初始化  nfs,rsync,nginx,lsync这个机器
- 剧本一键部署好这些服务
- 访问测试

ad-hoc命令模式

ansible中有两种模式,分别是ad-hoc模式和playbook模式ad-hoc简而言之,就是"临时命令"
- 临时的看下远程机器的内存信息
- 临时的批量分发一个配置文件
特别小的需求,临时命令就解决大需求,部署软件,这样的复杂需求,就写剧本https://docs.ansible.com/ansible/latest/user_guide/intro_adhoc.html
临时命令非常适合您很少重复的任务。例如,如果您想在圣诞节假期关闭实验室中的所有机器。Ansible ad hoc 命令使用/usr/bin/ansible命令行工具在一个或多个托管节点上自动执行单个任务。ad hoc 命令既快速又简单,但它们不可重复使用。



剧本是什么

所以说ansible-playbook所必须的yaml的语法

修改ansible的输出结果为json

json 数据的转换的格式,专有的语法可以在网络中传输发给后端 python (python的数据的类型,去解析json的数据格式,处理)也可以发给前端(js,js解析json的数据的格式,然后进行处理)运维是怎么处理json 的数据的用的是jq,(获取json数据后,提取json的数据)#1.修改ansible的配置的文件,然他的输出为一个json的数据的格式# 1.修改ansible的配置文件,让它输出的结果是一个json
[root@master-61 /opt]#vim /etc/ansible/ansible.cfg [defaults]
stdout_callback = json
bin_ansible_callbacks = Truejson的作用就是
定义了一堆 键值对的数据格式根据key就可以拿到value{ "key": "value"  } 读作字典形式可以看到,此时ansible的命令输出结果,全部变为了json的格式devops 运维开发
python都是开发工程师做的
这些json数据,就可以发给后端,去处理,再最终发给前端

yaml的学习

我们这里用安装nginx的yaml举例子

yaml 风格的语法
字典的形式1.先写好yaml
[root@master-61 ~]# cat /opt/install_nginx.yml 
---
- name: 这是一个安装nginx的剧本hosts: nfstasks:- name: 01 安装nginxyum:name: nginxstate: installed- name: 02 启动nginxsystemd:name: nginxstate: started2.可以去验证yaml语法是否正确方法1,用ansible-playbook命令
ansible-playbook  -C  install_nginx.yml 

yaml中定义hosts的信息语法

# 方式一: 定义所管理的主机的ip的地址
- hosts: 192.168.178.111tasks:动作.....# 方式二;定义所管理主机的名字
- hosts: backuptasks:动作......# 方式三:定义管理主机
- hosts: 192.168.178.111, rsync01tasks:动作...# 方式四:管理所有主机
- hosts: alltasks:动作...

关于剧本的tasks任务部分

  • tasks任务部分,就是决定用什么模块,做什么事,以及模块对应的参数的风格

字典风格的模块参数

[root@master-61 /opt]#cat install_nginx.yml 
---
- name: 这是一个安装nginx的剧本hosts: 172.16.1.7,172.16.1.8,nfstasks: - name: 01 安装nginxyum: name: nginxstate: installed- name: 02 启动nginxsystemd:name: nginxstate: started

变量风格的模块参数

[root@master-61 /opt]#cat vars_install_nginx.yml 
---
- name: 这是一个安装nginx的剧本hosts: 172.16.1.7,172.16.1.8,nfstasks: - name: 01 安装nginxyum: name=nginx state=installed - name: 02 启动nginxsystemd: name=nginx state=started- name: 03 设置nginx开机自启systemd: name=nginx enabled=yes

yaml支持的数据类型

yaml这个语法中,只有三个的数据的形式

  • 字典类型,特点就是 key : value形式
  • 列表形式,特点是 通过 短横线定义
  • 纯变量形式
数据类型
YAML 支持以下几种数据类型:对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)纯量(scalars):单个的、不可再分的值我们都以python的数据类型来称呼yaml中支持的数据类型

yaml中字典

key : value类型字典键值对使用冒号结构表示 key: value,冒号后面要加一个空格。支持字典嵌套

yaml中列表

python[ 1,2,3,"汉字","你好"  ,["我是嵌套的列表,第一个元素"]  ]shell中也支持列表,(数组)
以 - 短横线开头,表示构成一个列表在python中列表形式为 [1,2,3,'a','b','老王'],非常强大shell也支持列表(数组),表示形式为,功能比较单一
[root@yuchao-tx-server ~]#students=("于超" "老王" "狗蛋")
[root@yuchao-tx-server ~]#
[root@yuchao-tx-server ~]#set|grep students
students=([0]="于超" [1]="老王" [2]="狗蛋")[root@yuchao-tx-server ~]#echo ${students[0]}
于超
[root@yuchao-tx-server ~]#echo ${students[1]}
老王
[root@yuchao-tx-server ~]#echo ${students[2]}
狗蛋

yaml中纯变量

表示单纯的变量,支持数据类型有

  • 字符串
  • 布尔值
  • 整数
  • 浮点数
  • Null
  • 时间
  • 日期

练习

写一个安装nfs的playbook,遵循yaml语法

1.安装nfs服务2.创建nfs配置文件3.启动nfs服务4.

编写如下的yaml语法

记住,yaml就三个属性列表  -字典  "name":  "我是值"字典
"students": "我是学生""students": - 陈亮亮罗兴林加强纯变量

现在有一个json的数据格式如下

如下示例,分别用到了 字典,列表,纯变量

[{"老师":"于超","男同学": [陈亮亮,李文杰,王仁刚],"女同学": [冯靖涵]}
]手写,转变为yaml格式

yaml支持的数据类型

字典"key": "value"    ,转化为json类型去看,{ "key":value }纯变量的形式列表的形式一个短横线  -   ,转变为json类型看效果 就是  [   ]

纠错(关于yaml的短横线定义列表)

短横线用于定义列表多个短横线,同一个缩进下的元素,表示一个列表中的多个元素
- xxx
- ooo
- ddd
- ccc"xxx", "ooo","ddd","ccc"
识别为,同一个列表下的多个元素一个短横线,同一个缩进下的元素,表示是一个整体,大字符串- xxxooodddccc其实处理的数据是 "xxx ooo ddd ccc"

拿yaml转json测试,查看效果

https://www.bejson.com/json/json2yaml/
具体的yaml将如下的ad-hoc转为yaml格式# 1,先写ad-hoc命令模式
#2.对比理解转为yamlansible  web   -m  file -a "path=/etc/foo.conf     owner=foo    group=foo     mode=0644"  # 写name字段,是表示定义剧本的注释,这一次任务的名称
# 写成字典风格的 模块参数
# 同一个缩进下,表示是一个整体,是一个大字符串- name: 修改文件的属性file:path: /etc/foo.confowner: foogroup: foomode: 0644

还要学习什么呢

1.yaml语法2.写ansible-playbook(安装nginx的剧本)3.json的命令4.jq命令5.json和yaml语法的转换6.一键部署nfs resync lsync nginx 的剧本

下面是json的语法

json 语法是javascript 对象表示语法的子集数据在名称/值对中数据由都好进行分割大号{} 保存的子集中括号 【】 保存列表,列表可以包含多个对象

json的值可以是:

- 数字(整数或浮点数)

  • 字符串(在双引号中)
  • 逻辑值(true| false)
  • 数组 (在中括号中)
  • 对象 (在大括号中)
  • null

json的语法的实例

{"students":null,"age":18,"male":true,"手机号":[152100000000,16800000000],"你快乐吗":"我很快乐"
}

学习如何提取json的数据

根据key ,提取value#1.前端通过js代码的提取#2.后端,通过python代码进行提取#3.运维,通过jq命令进行提取。

jq命令的学习

1. 安装jq命令
yum install jq -y2.简单json数据提取[root@master-61 ~]#echo   '{"name":"德玛西亚","price":6888}'   | jq  提取名字的值,价格
必须使用jq命令的过滤器,如下的语法语法是 通过 . 提取,比如 jq '.name,.price'[root@master-61 ~]#echo   '{"name":"德玛西亚","price":6888}'   | jq  '.name'
"德玛西亚"
[root@master-61 ~]#
[root@master-61 ~]#
[root@master-61 ~]#echo   '{"name":"德玛西亚","price":6888}'   | jq  '.price'
6888
[root@master-61 ~]#
[root@master-61 ~]#
[root@master-61 ~]#echo   '{"name":"德玛西亚","price":6888}'   | jq  '.price,.name'
6888
"德玛西亚"3.数据再多一点
[root@master-61 ~]#echo   '{"name":"德玛西亚","price":6888,"hero_logo":"https://www.tukuppt.com/muban/zanyjwnk.html"}'   | jq '.price,.hero_logo,.name'
6888
"https://www.tukuppt.com/muban/zanyjwnk.html"
"德玛西亚"4.串行执行,提取复杂的json数据,数据可能会有列表嵌套

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

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

相关文章

Windows系统迁移用户目录

Windows系统随着使用时间的延长,系统盘空间占用会越来越大,对于一些硬盘空间有限的主机而言,C盘空间剩余就越来越少,稍不注意可以可能就被占满了,导致系统都无法启动。正好我自己的笔记本电脑也遇到了同样的问题,因此就想把C:\Users目录迁移到其他分区中。 在实践中,使用…

iphone---苹果手机传输文件

使用手机,拍了一些照片和剪辑了一些视频,但是总感觉将手机里面的图片及视频传到电脑里面和麻烦,今天试了一下用U盘传,效率还可以,但是其中也遇到了一些问题,就在这里记录下: 传输方法:插入U盘,选择图片或文件,点击【分享】选择【存储到“文件”】点击【左上角浏览】…

Python+硅基流动API实现小说转有声读物

一、注册硅基流动账号获取文本转语音api 1.注册登录硅基流动注册、登录硅基流动查看apikey查看赠送的免费额度点击文档中心2.查看文本转语音api查看文本转语音api查看api使用指南查看文本转语音api的python调用方法二、python实现文本转语音功能 1.python调用api实现文本转语音…

蓝绿部署深度解析:从理论到实践的全方位学习指南

一、蓝绿部署的基本概念 (一)定义 蓝绿部署是一种软件发布策略,通过设置两个相同的环境(“蓝色”和“绿色”),最大限度地减少停机并降低与部署新版本应用程序相关的风险。 (二)工作原理 蓝绿部署的核心思想是将应用程序的部署过程分为两个阶段:测试阶段和生产阶段。在…

Elasticsearch 高级

Elasticsearch 高级建议阅读顺序:Elasticsearch 入门 Elasticsearch 搜索 Elasticsearch 搜索高级 Elasticsearch高级(本文)1. nested 类型 1.1 介绍 Elasticsearch 中的 nested 类型允许你在文档内存储复杂的数据结构,比如一个用户可能有多个地址,或者一个博客文章可能有…

mysql日志写马

mysql日志写马 条件 1.全局变量general_log为ON。 mysql有两个全局变量:general_log指的是日志保存状态,值为ON/OFF,general_log_file指的是日志的保存路径。 只有当general_log为ON时,日志才会被记录进去,所以我们要先打开这个全局变量,使用命令查看全局变量状态‘ show…

滚动部署学习指南:从理论到实践,掌握关键技术和流程

一、滚动部署概述 (一)定义 滚动部署是一种逐步更新应用实例的策略,通过逐批次替换旧版本实例来完成版本升级,以减少服务中断时间并降低更新风险。 (二)应用场景 滚动部署适用于需要高可用性和低风险的软件更新场景,例如 Web 应用程序更新、移动应用后端服务更新以及云原…

ctfshow-web入门-爆破(web21-web28)

web21 打开后要求登录附件是一个密码字典使用bp抓包,将抓到的东西进行base64解码发现是admin:密码的键值对添加payload,padload类型为自定义迭代器,位置1为admin:位置2为导入的字典添加base64编码和取消url编码然后开始攻击,发现长度和其他不同的包,查看响应,发现flagweb…

灰度发布学习大纲:从理论到实践,掌握关键技术和流程

一、灰度发布概述 1. 定义与别名灰度发布:一种渐进式的软件发布策略,也被称为金丝雀发布(Canary Release)。 目的:通过逐步向用户群体推送更新,降低新版本引入的潜在风险,提升用户体验,实现不停机的热迁移。2. 灰度发布的优势降低风险:逐步验证新版本的稳定性。 快速反…

代码随心录第三天|Leecode 203.移除链表元素 707.设计链表 206.反转链表

1、Leecode 203.移除链表元素 题目链接:https://leetcode.cn/problems/remove-linked-list-elements/description/ 题目描述:解题思路:移除操作就是让节点next指针直接指向下下一个节点,因为单链表的特殊性,只能指向下一个节点,所以头节点需要单独考虑,这种方法是直接使…

【THM】Linux Privilege Escalation

Linux Privilege Escalation/Linux 权限提升 什么是权限提升 “权限提升”是什么意思? 权限提升通常涉及从较低权限的帐户到较高权限的帐户。 从技术上讲,它是利用操作系统或应用程序中的漏洞、设计缺陷或配置疏忽来获得对通常限制用户访问的资源的未经授权的访问。 权限提升…

kettle从入门到精通 第九十三课 ETL之kettle kettle 调用web service接口5种方法,一文彻底搞懂

场景:群里有小伙伴向我求助如何调用web service接口,趁着周末时间,给兄弟们搞demo。 1、本次使用的web service服务接口地址是http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?op=getSupportCityDataset, 此接口根据用户输入的城市名称可获取城市下属单位,如下图所示…