Ansible学习笔记
长文警告
这篇文章是我最近看了马哥的讲解视频总结的,觉得讲的很好。如果想快速学习Ansible,从入门到最终roles的编写这篇文章应该会对你有所帮助。如果想看原视频也可以评论或私信我
目录:
- 一。基础入门
- 二。Ansible命令
- 三。Ansible常用模块
- 四。Ansible系列命令
- 五。Playbook
- 六。变量的使用
- 七。模板
- 八。roles
- 九。应用上面知识写一个综合性的小项目
一。基础入门
Ansible 配置自动化产品,无主无从架构,只需要一个控制节点,不需要代理程序,通过ssh
1.Ansible的安装
2.主机清单,就是这个hosts文件
把主机加入主机清单的方法:
主机清单中分组添加样例:
也可以使用域名或 非标准端口号
二。Ansible命令:
ansible-doc ping 查看ping模块的帮助
ansible-doc -l 列出所有命令模块
说明,我们使用ansible命令时,本质用的ssh,所以需要输入对方账号密码,每次都输太麻烦,所以要配置免密登录
配置免密登录:
1.ssh-keygen在客户机产生自己的公钥私钥(这里因为是控制节点要ssh登录node节点,所以node是ssh服务端)
2.ssh-copy-id ip 把公钥发送给ssh服务器端,需要输入其密码
3.免密登录成功
查看分组中的主机
一些语法
ansible运行原理,命令执行过程:
三。Ansible常用模块
总结了12个,可以点下方链接查看
https://blog.csdn.net/keith6785753/article/details/107898260
四。Ansible系列命令
1.ansible-galaxy
从官网下载安装角色:
2.ansible-playbook
自己写的剧本文件用.yml结尾(因为用的yaml语言)
看一个简单的palybook 第一行—是 剧本的习惯开头
使用ansible-playbook 剧本文件名 执行:
3.ansible-vault加密剧本文件
加密之后,内容密文且不能执行
解密:
其他用法:
ansible-vault view 输入口令查看加密剧本文件
ansible-vault edit 输入口令编辑加密剧本文件
ansible-vault rekey 修改口令
4.ansible-console
输入后进入交互式操作(用的不多)
all (3) 共有3台主机 [f:5]支持并发5台
也可以调用模块 进行操作:
五。Playbook
上面的单条命令也称为ad-hoc,复杂的功能的实现需要playbooks
示例: hosts:websrvs 就是一个键值对
可以使用ansible -C 检查一下剧本文件语法错误 -C check
希望如果命令执行失败仍然继续往下执行的两种方法:
限定只在分组中的某个主机执行: --limit
–list查看playbook对应的主机或任务或标签
一个playbook文件例子: 一定要注意缩进
解释如下:
handlers与notify实现触发器
这里的情况是 希望httpd的配置改变了会自动重启服务,因此创建了一个handlers触发器,在对应的操作后面(copy是修改配置文件的操作)加上notify:触发器的名字
也可以触发多个触发器
tags:加标签
可以实现只执行对应标签的动作 -t 标签名 多个标签 逗号隔开
六。变量的使用
ansible all -m setup 这个模块可以查看系统自带的变量
变量的使用:
在playbook脚本文件中直接定义变量:
在主机清单中定义变量 (优先级低于命令指定变量值):
也可以针对一组主机定义一个变量分组 (优先级低于上面针对单个主机的变量)
脚本文件使用{{}}调用变量:
还可以写一个文件专门放变量:
调用方法:
变量优先级总结:-e命令行指定 > palybook文件中指定 > 主机清单中单个 > 主机清单中分组
七.模板templates:
模板目录建议与 yml文件同级,然后在这个目录中创建模板文件
template模板只能用于playbook 不能用于单条命令
使用示例: 如果模板文件就是在templates目录下,可以直接省略路径
模板文件内容:可以使用变量设置
when的使用:这里是针对centos6,centos7各使用不同模板
使用的是系统自带的参数
循环的使用:比如要创建多个文件或装多个包 自己定义一个列表with_items 使用item调用列表中元素 with_items下的每一行就是一个item
然后如果我们想创建3个用户并且把他们分别加入3个组呢:
使用迭代嵌套子变量 :与上面类似 就是需要定义一个字典
for循环的使用:
首先在playbook中定义变量
然后需要在模板文件中使用for循环,调用变量,注意语法格式(jinja2)
执行效果图:
还可以这样定义变量
对应调用方法:
if条件判断的使用:
八。角色role:
模块化思想,把playbook中的东西(文件,变量,任务,模板等)拆分开,分门别类的存放,使用时在playbook中调用即可。适用大型环境
这些目录,文件建议放在roles目录中,playbook文件与roles目录平级
任务中需要一个main总任务,定义任务执行顺序
最终palybook文件的编写,直接调用roles即可 nginx是roles下一个角色文件夹
同时应用多个角色
在一个角色中调用其他角色的任务,写清路径即可
可以给角色加标签
执行的时候可以根据标签选择执行 使用-t 标签名
when等语句同样可用
九。在最后,使用前面的知识写一个综合性的角色
最终文件结构如下,因为篇幅太长了,具体过程看下方链接
https://blog.csdn.net/keith6785753/article/details/107898385