ansible剧本

news/2024/10/21 11:49:29

优势特点:

1)实现自动化功能更加全面
2)可以更好的控制逻辑关系
3)剧本展现命令语法更直观
4)拥有持久反复执行的特性

剧本作用:

管理多个主机,完成多个任务操作

剧本编写规范:

1)使用空格:每个两个空格表示一个层级,剧本中拥有缩进关系
2)使用冒号 :指定具体参数的信息		→→	name:(空)说明信息冒号后面需要有空格信息,但是如果冒号后面没有内容,冒号后不再需要空格
3)短横线添加多个项目列表构成列表需要加上短横线,后面需要加上一个空格

模式:

	-hoststasks:
-	name

1.playbook

简介:playbook是ansible中的一个术语,它指的是用于配置管理的脚本。

1.1 YAML格式的playbook

ansible的playbook是使用YAML语法编写的,YAML是一种类似于json的文件格式,不过YAML更适合人来读写。

1.2 文件起始

YAML文件以三个减号开头用于标记文档的开始

---不过。如果往日在playbook文件开头键入三个减号,并不会影响ansible的运行

1.3 注释

注释以井号开始一直到本行结束,这与shell、Python以及ruby是一样的。

示例

This is a YAML comment

1.4 字符串

一般而言。YAML字符串不需要使用引号引起来。加上引号也是没有问题的。即便字符串中含有空格,也是不需要引号的。

this is YAML comment等价于json格式为:“this is YAML comment”

当然在ansible中有几种情况也是比较特殊的,需要对字符串使用引号。

1.5 布尔型

YAML具有内置的布尔类型,并且提供了很多种释义为true和false的字符串。在ansible playbook中使用True和False的占大多数,所以我们在“是”“否”中使用True和False就就可以。

示例

YAML中的布尔型True
等同于json格式的true

1.6 列表

YAML中的列表就好像JSON中的数组或者Python中的列表。严格的来说,在YAML中它应该被叫做序列。但为了和官方文件保持一致,我们还是成为列表。

列表使用减号“-”作为定界符

- My fair lady
- ok
- the is 等价于JSON格式为:{"My fair lady","ol","the is"
}

1.7 为什么在有的地方使用True,而其他地方又使用Yes**

如何在playbook中表示“是”和“否”这一点上ansible是非常灵活的。严格来说,模块参数(例如,update_cache=yes)的处理方式不同于playbook中其他地方的值(例如,sudo:True )。这是因为其他地方有YAML解析器来处理,所以只能说用YAML的真实性值得约定:

YAML“是”值true True TRUE yes Yes YES on On ON y YYAML“否”值false False FALSE no No NO off Off OFF n N模块参数是作为字符串传递的,因此 使用ansible的内置约定:模块参数为“真”yes on 1 true模块参数为“假”no off 0 false

应该倾向于遵从ansible官方文档的示例,向模块传递参数是使用yes和no(这是因为为了保持和模块官方文档一致),而playbook中其他地方使用了True和False

1.8 主机/主机组名称如何定义

	1)all:			清单里面的所有主机都进行管理2)主机组名称:	清单里面指定主机组中的主机进行管理3)主机名称/ip地址:清单里面指定的单个主机4)localhost		只管理自己

2.0 剧本编写

2.1 参数:

play:角色,定义的是主机信息
- hosts:all  #处理所有服务器,找到所有服务器   - (空)hosts:(空)
tasks:  #剧本所要干的事情      (空)(空)tasks:
- name:  #注释名称    (空)(空)(空)(空)-(空)name:(空)
file:       #模块名称   (空)(空)(空)(空)(空)(空)file: (空)
remote_user: root   #以什么身份管理主机 (空)(空)
{{  }}:填写变量信息
stdout_lines:标准输出,优化了下格式
vars:在剧本中定义变量
--extra-vars=EXTRA_VARS:在命令行定义变量
register:注册变量--syntax-check  进行剧本配置信息语法检查
-C:模拟剧本执行(彩排)
ignore_errors: yes   #忽略错误,剧本先整体执行,忽略部分操作错误

简单剧本格式

PS:就是不断的堆积模块信息,但是一般需要加上注释 ,一个name信息下面只能写一个任务内容

2.2 剧本执行过程

1)先对剧本语法进行检查
ansible-playbook  --syntax-check test01.yml
2)先对剧本进行模拟执行第一步:定义主机信息第二部:收集主机信息第三部:执行具体任务第四部:执行结果
3)真实执行剧本
4)进行检查确认

3. ansible-playbook定义变量的方法

意义:重复信息设置变量方便调用调整

定义变量的方法说明:

1)在ansible程序剧本中进行定义 (次优先)

	vars:file_name: file_var.txt

2)利用执行参数赋值变量 (最优先)

  --extra-vars=EXTRA_VARS=file_name=oldboy.txt
#格式
ansible-playbook --extra-vars=file_name=file_ext.txt test03.yml
#简写格式
ansible-playbook -e  file_name=file_ext.txt test03.yml

3)在ansible程序主机清单中定义 (最后执行)

			  [server:vars]					file_name=oldboy.txt[oldboy:vars]file_name=file_host.txt

4)采用注册方式定义变量

		#register
目的:让我们执行剧本的时候输出一些信息- hosts: oldboytasks:- name: bianliangshell: hostname    shell:执行命令register: aaa    将shell命令的结果,注册授权变量aaa- name: infodebug: msg={{ aaa.stdout_lines }} 利用debug模块,命令 msg,调用变量将变			量显示出来,stdout_lines:标准输出,优化了下格式

4. 实现剧本的循环功能

4.1 定义:

完成多件相同任务可以循环  with_items

示例

循环下载软件
- name: Installed Pkgyum:name: ['wget','tree','lrzsz']   #8个空格state: present
循环创建用户
user: name={{ item.name }} groups={{ item.groups }} state=presentwith_items:- { name: 'gou1', groups: 'bin' }- { nam e: 'gou2', groups: 'root' } 
将信息放在文件里进行循环shell: echo {{ item }} >>/oldboy.txt  with_items:- gou1- gou2

5. 利用标签功能,只执行剧本中指定任务

5.1 定义:

剧本完成多个任务可以灵活的执行   tags
tags:t?    ?(任何数)

示例

#指定执行那个标签的任务ansible-playbook  --tags=t3,t1,t2 test07.yml #跳过指定的标签任务ansible-playbook --skip-tags=t3 -t t1

5.2 定义方式

1)一对一定义:一个任务对应一个标签
2)一对多定义:一个任务对应多个标签
3)多对一定义:多个任务对应一个标签

6. 忽略错误

定义:
先整体执行剧本内容,忽略部分操作错误
ignore_errors: yes

7. 触发器 handlers

handlers:触发器,剧本完成什么操作就触发相应操作

** notify: rsync restart 监控模块里的内容是否发生变化**

  handlers:- name: rsync restartservice: name=rsyncd.service state=restarted

8. ansible将多个剧本进行整合的方法:动态汇总

8.1 方法一:汇总剧本信息

- hosts: allremore_user: roottasks:
- include_tasks: test08.yml
- include_tasks: test07.yml
剧本中不可以存在重复的变量,
需要在执行的剧本重新编写

8.2 方法二:

ansible-playbook  summary02.yml- include: test07.yml- include: test08.yml

8.3方法三:

ansible-playbook  summary03.yml  (入口文件-puppet)- import_playbook: test07.yml- import_playbook: test08.yml

9. ansible剧本编写错误排除思路

第一个历程: 检查剧本的语法格式
第二个历程: 对剧本错误task进行标记a 排除标记的操作, 检查是否还有其他问题b 重新执行标记任务
第三个历程: 利用模块方式执行操作单独对一个远程主机进行测试操作
第四个历程: 将模块中的操作在远程主机上直接运行将模块中的操作转换成命令, 在远程主机测试setenforce 0 无法反复
第五个历程: 将一些不是很验证问题,进行忽略

10 综合架构批量管理(roles角色)

概念:将剧本中的角色和任务进行拆分,让批量管理更加灵活
角色文件编写应用:可以应用在大规模环境中应用

10. 1 编写角色剧本信息:

将原有剧本中所有信息进行拆分细化
细化之后需要创建不同的目录进行管理不同的数据信息

10.2 目录结构

site.yml:任务服务目录:定义角色名称合并文件目录- hosts: backup   #主机信息remote_user: root  #以什么身份运行roles:				#需要的动作  handlers:任务触发目录:用于存放文件 ;至少应该包含一个名为main.yml的文件,其他的文件需要在此文件中通过include进行包含tasks:任务文件目录:具体信息任务存放main.yml 用于存放整合的目录- include_tasks: directory.yml- include_tasks: directory01.ymltemplates:任务模板目录:模板文件存放 ;查找所需要模块文件的目录vars:任务变量目录:具体变量文件存放 ;定义的是变量,至少应该包含一个名为main.yml的文件,其他的文件需要在此文件中通过include进行包含;files:任务文件目录:用于存放原文件配置文件 ;存放copy或script模块等调用的文件

批量创建所需要的目录

mkdir {nfs,rsync,web,sersync}/{vars,tasks,templates,handlers,files}/

10.3 角色设置变量的方法

1)在相应角色信息vars目录中的main.yml中定义变量信息 (最先执行)

		nfs: oldboy123   (以这种形式书写在文件中)

2)在相应的roles目录(角色目录)中创建group_vars:作为变量目录 (次优先)

	vim all  (会跟/etc/ansible/hosts文件进行匹配)使用hosts模块进行定义文件名称backup: woaini  (变量名称):(变量内容)

10.4 执行过程ansible-playbook site.yml

  1)先加载site文件2)加载目录文件(tasks)下的main.yml文件3)如果main.yml文件中有变量会先到vars中寻找变量4)如果vars中没有变量,就回到roles目录下寻找group_vars下寻找有没有该主机组的  	 变量

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

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

相关文章

宝塔面板如何进行反向代理的配置

反向代理在网络架构中充当重要角色,帮助改善网站性能、安全性并提供额外的配置选项。在宝塔面板中实施反向代理配置,涉及的步骤包括:1. 安装并启动必要的软件;2. 配置代理规则以指向目标服务器;3. 优化性能和安全性设置;4. 对配置进行测试验证。在操作中,我们将详细探讨…

Linux模块

ansible-doc -l:查看ansible系统的模块 ansible-doc 加模块名 :具体查看那个模块 ansible-doc -s 加模块名 :具体查看那个模块 ansible重要常用模块命令模块:command shell script文件模块:file copy安装模块:yum服务模块:service定时模块:cron挂载模块:mount…

Python中的深拷贝与浅拷贝

目录1. 可变对象和不可变对象2. 用=赋值的问题3. copy模块登场4. 重新认识列表对象5. 浅拷贝,深拷贝浅拷贝(copy.copy())一维列表的浅拷贝深拷贝(copy.deepcopy())浅拷贝,深拷贝,直接赋值的区别 1. 可变对象和不可变对象 在 Python 中,数据类型可以分为两大类:可变对象和…

015 时间==事件修饰符

例如prevent对click进行修饰,阻止点击后跳转链接的默认行为其他一些较常用的

小学班级海报

这张图片是一张庆祝国际劳动节的海报,充满了节日的喜庆与对劳动者的崇高敬意。 海报的背景以红色为主色调,象征着热情与活力,营造出一种积极向上的氛围。在海报中央,一个巨大的红色数字“5”与“劳动节”的字样相结合,形成了鲜明的视觉焦点,让人一眼就能感受到节日的主题…