ansible剧本

优势特点:

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下寻找有没有该主机组的 变量
posted @   帅帅啊  阅读(39)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示