首页 > 其他分享 >ansible剧本

ansible剧本

时间:2024-10-21 11:44:26浏览次数:1  
标签:name YAML ansible playbook 剧本 yml

优势特点:

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

剧本作用:

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

剧本编写规范:

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

模式:

	-hosts
      tasks:
-	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 Y

YAML“否”值
	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: oldboy
   tasks:
 - name: bianliang
   shell: hostname    shell:执行命令
   register: aaa    将shell命令的结果,注册授权变量aaa

    - name: info
      debug: msg={{ aaa.stdout_lines }} 利用debug模块,命令 msg,调用变量将变			量显示出来,stdout_lines:标准输出,优化了下格式

4. 实现剧本的循环功能

4.1 定义:

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

示例

循环下载软件
- name: Installed Pkg
      yum:
        name: ['wget','tree','lrzsz']   #8个空格
        state: present
循环创建用户
user: name={{ item.name }} groups={{ item.groups }} state=present
      with_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 restart
      service: name=rsyncd.service state=restarted

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

8.1 方法一:汇总剧本信息

- hosts: all
  remore_user: root
  tasks:
- 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.yml

templates:任务模板目录:模板文件存放 ;查找所需要模块文件的目录

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下寻找有没有该主机组的  	 变量

标签:name,YAML,ansible,playbook,剧本,yml
From: https://www.cnblogs.com/megshuai/p/18489140

相关文章

  • ansible
    ansible批量管理自动化1)概念作用 更加快捷方便 可以进行批量管理 重复性操作2)核心重点 ansible的hosts文件如何编写(3种场景) ansible的模块作用 ansible的剧本编写规范3)实现更好的管理多台主机,剧本编写更加合理 a、引入了剧本编写的多个扩展功能 b、引入了角色概念......
  • Ansible操作MySQL常用的几个模块
    1. mysql_user模块mysql_user模块用来添加,删除用户以及设置用户权限创建MySQL数据库的用户与口令(非root@localhost用户),直接通过playbooks中的案例来说明吧。-name:创建MySQL数据库用户--user_testmysql_user:#-----登陆数据库login_host:"localhost"......
  • Java毕业设计-基于SSM框架的剧本杀预约系统项目实战(附源码+论文)
    大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。......
  • ansible
    1.Ansible概述自动化运维:批量管理,批量分发,批量执行,维护...Ansible是python写的. 批量管理工具说明Ansible无客户端,基于ssh进行管理与维护Saltstack需要安装客户端,基于ssh进行管理,与ansible.terraformtf批量管理基础设施(批量创建100台公......
  • 革新电影剧本写作:使用OpenAI ChatGPT的AI写故事
    ChatGPT是由OpenAI开发的人工智慧语言模型,基于深度学习技术。通过对大量文本数据的训练,ChatGPT能够生成类似自然语言模式和结构的输出。不仅限于语言翻译或问答,这项技术还通过理解故事基本原则(如情节、角色、场景和对话)使您能够为影片创作逼真的剧本。在它的帮助下,使用AI写电......
  • 基于nodejs+vue基于SpingBoot的剧本杀管理系统[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着娱乐方式的多样化,剧本杀作为一种新兴的社交娱乐形式,近年来在年轻人中迅速流行。它融合了角色扮演、推理和解谜等元素,为玩家提供了沉浸式的体验。然而,随......
  • 如何使用 Ansible 管理多阶段环境
    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。介绍Ansible是一个强大的配置管理系统,用于在不同环境中设置和管理基础设施和应用程序。虽然Ansible提供了易于阅读的语法、灵活的工作流程和强大的工具,但在管理大量主机......
  • Ansible 中的 Role
    Rolerole(角色)用来实现代码的组织管理功能,将实现各种不同功能的playook文件,变量文件,模板文件,handlers文件根据约定,分别放置在不同的目录,分门别类的管理起来,使其看起来更像一个项目,其主要用来解决多文件之间的相互包含,引用,组合等问题,将各个功能模块进行拆分,使其原子化,......
  • 剧本杀小程序:提升玩家游戏体验,带动经济效益
    剧本杀作为一个新兴游戏方式,能够满足年轻人的社交需求,让大众体验到不太一样的人生,在角色中进行演绎。这种独特的游戏模式吸引了众多的年轻玩家,由此,剧本杀行业进入了爆发期。如今,在科技的不断创新下,线上剧本杀迎来了发展机遇,利用各种技术,为玩家带来更加新鲜、有趣的剧本杀体验。同时......
  • ansible中为什么不都是用shell模块写task,而是创建出一个一个的模块
    ansible的shell模块的功能非常强大,它甚至可以代替ansible的所有模块,比如像unarchive命令,在shell中可以分解为。通过scp命令传送包到远程,再通过tar命令对文件进行解压,再比如user模块可以直接在shell模块中调用useradd命令和usermod命令进行用户的管理,那么为什么还会有其他模......