这几天开始RH294书籍的学习。关于linux自动化方面的知识,笔者以前做过ansible框架方面的各个模块的学习分享,可以参考。这一次针对书籍内容再次复习一些并补盲。
1、ansible定义嵌套组[group_name:children], ansible all --list-hosts列出所有host。
2、ansible.cfg配置文件的优先级为:ANSIBLE_CONFIG环境变量指定的文件,ansible命令的目录中的ansible.cfg配置文件,用户主目录中的.ansible.cfg配置文件,全局/etc/ansible/ansible.cfg,ansible默认值 。ansible仅使用最高优先级中的配置文件。ansible all --list-hosts -v列出活动的配置文件 。
3、ansible默认使用smart ssh连接类型 。 ansible-doc -l列出所有模块, ansible-doc modulename 查看模块信息 , ansible-doc -s查看示例。临时命令通过-a向模块传递参数 。-o选项以单行格式显示ansible临时命令的输出 。
4、ansible默认使用command模块,但是无法访问shell环境变量、重定向和传送等shell操作。shell模块可以执行shell操作,由受管主机上的shell进行处理。这两个都要求受管主机上安装python 。raw模块则绕过模块子系统,由远程shell运行命令 ,无法安装python的路由器等可以使用这个模块 。考虑到幂等性(自动进行更改跟踪),不建议使用这三个模块,最好先使用command 模块。
5、script模块可以在远程服务器上执行主控节点上的脚本文件,功能相对于scp+shell ,脚本执行完后再远程服务器上删除脚本文件 。
6、ansible-playbook参数-v 、-vv、-vvv、-vvv、-vvvv可以输出详细信息。ansible-playbook --syntax-check来验证yml文件语法正确 。ansible-playbook -C选项对playbook执行空运行,可以报告playbook中发生什么更改,但不会对受管主机进行任何实际的改动。
7、变量可以放在playbook开头的vars块中,可以改为使用vars_files指令,后面跟上相对于playbook位置的外部变量文件名称列表。在playbook中将变量名放置于{{ }} 中,变量用作开始第一个值的第一个元素时必须加上引号"{{ }} "。
8、主机变量和组变量也可以在ansible的hosts清单中来定义,[servers:vars]、[group_name:vars]。 这是较旧的做法,可以使用目录来填充主机和组变量 。在工作目录中创建group_vars和host_vars 两个目录,目录下的文件需要和主机和组名称匹配 。
9、清单变量可被playbook覆盖,但是都可以被命令行中传递参数给ansible或ansible-playbook来覆盖。外额变量通过-e来传递 。
10、ansible-vault create创建加密文件,可以指定vault密码文件(这个文件需要通过权限等方式加密)ansible-vault create --vault-password-file。ansible-vault view查看加密的文件,ansible-vault edit编辑加密的文件,ansible-vault encrypt加密现有文件,ansible-vault decrypt解密现有文件,ansible-vault rekey更改加密文件的密码。ansible-playbook --vault-id @prompt以交互方式提供vault密码 。
11、变量文件管理时,可以将大部分变量放在vars中,敏感变量放在vault文件中保密。
12、每个play在执行第一个任务之前会先自动运行setup模块来收集facts,可以使用debug模块来来显示。facts是以json格式显示的。{{}}来引用fact。
13、关闭facts收集将playbook中的gather_facts关键字设置为no,可以加快play速度以及减小play在受管主机上造成的负载。有些受管主机可能无法运行setup模块。
14、可以创建自定义fact,将其存储在受管主机的/etc/ansible/facts.d目录下,必须以.fact结尾,setup模块从文件中读取自定义fact,可以用于填充配置文件或者有条件的运行任务。自定义fact存储在ansible_facts.ansible_local变量中 。
15、ansible支持使用loop关键字对一组项目迭代任务,when语句时用于有条件的运行任务,可以使用and或者or作为组合条件。
16、notify语句显示的调用处理程序,大师只有在任务发生更改时changed才会触发,paly会按照handlers部分指定的顺序执行 。通知的处理程序通常在play完成后才会执行。
17、当惹任务失败时,absible会中止play的其余部分并跳过后续任务。ignore_error关键字来忽略错误 。在任务失败后可以通过force_handers: yes来控制后续任务失败后仍通知处理程序。可以在任务中使用failed_when关键字来指定表示任务已失败的条件。changed_when可以控制任务在何时报告进行了更改。
18、ansible任务块可以含有when关键字,将某一条件应用到多个任务。block定义要运行的任务,通过块,块中的任何任务失败,失败时可通过执行rescue块中的任务来恢复,always定义始终都会运行的任务。
19、在play中,hosts指定要对其运行play的受管主机。可以指定单个主机或组。支持*通配符,all也可以用通配符‘*’代替,&group1,group2同时属于两个组才匹配。
20、确定play的主机列表后,ansible将按照顺序运行每个任务。ansible可以通过配置文件中的forks指定最大连接数,但是过多可能给控制节点带来沉重负担 。如果大多数任务在受管节点上运行,并且控制节点上的负载较少,可以提高forks数量。ansible、ansible-playbook命令可以通过-f或者--forks选项临时指定 。
21、在受管主机上完成所有任务后才会通知处理程序,可能会让所有服务器中止服务,playbook中可以通过关键字serial指定批量数量,serial指定数量的受管主机运行任务后会立即通知处理程序。serial也可以指定百分比。
22、import_playbook允许将包含play列表的外部文件导入playbook ,import_tasks将任务文件静态导入playbook内的play中。include_tasks将任务文件动态导入playbook内的play中。playbook中可以用vars指定变量用于从外部文件导入的任务中 。
23、利用role来简化playbook,pre_tasks会在任何角色之前执行,也会通知处理程序。post_tasks在play的普通任务和他们的处理程序运行之后运行。
24、ansible在playbook目录中的roles子目录中查找角色,可以使用ansible-galaxy命令行管理角色role,ansible-galaxy init来创建新角色的目录结构 。ansible-galaxy search用于搜索角色。ansible-galaxy info显示与角色相关的更多信息。ansible-galaxy install从ansible galaxy下载角色并将它安装到控制节点本地。ansible-galaxy list用于列出本地找到的角色。ansible-galaxy remove删除本地角色 。
网友评论