本公众号内容大多由平时操作记录,如果有错误地方欢迎留言指
在前面的内容中已经有提到过playbook的变量使用,playbook中有几个比较重要的元素,开始之前先看一下playbook的核心元素有哪些:
playbook核心元素
hosts : 执行的远程主机列表(主机组,或某个主机)
tasks: 任务列表
varniables: 变量;内置的变量(setup模块)或者自定义在playbook中调用,或者是hosts文件中定义的变量
templates: 模板;可以用内置变量的方式替换模板文件(配置文件)中的参数值,实现配置文件差异化更新
Handlers和notify组合: 由特定条件触发的操作(notify定义要做的操作),满足条件方才执行(handlers执行具体的动作),否则不执行
tags: 标签; 指定某条任务执行,用于选择运行playbook中的部分代码。 ansible 具有幂等性,因此会自动跳过没有变化的部分,即便如此,有些代码为测试其 确实没有发生变化的时间依然会非常地长。此时,如果确信其没有变化,就可 以通过tags跳过此些代码片断
playbook变量的定义方式
hosts清单中定义
playbook中定义
命令行中定义(结合剧本实现)
系统内置变量(setup模块)
定义变量文件,在playbook中引用
其中使用系统内置变量结合playbook的模板能够比较灵活地实现远程主机的差异化配置管理。也是本文重点要提的内容。关于其他的变量使用方式在上一篇文章《Ansible剧本playbook》已经提到过这里不再多说。
playbook的内置变量
Ansible的setup模块
setup模块可以获取远程主机的系统信息,包括硬件信息和系统配置信息,每一项信息都有一个相应的内置变量来引用。在使用时只要使用相应的变量既可获取到系统的信息。可以通过如下指令查看setup模块中有哪些变量:
ansible one -m setup
由于输出内容较多,或者使用 ansible one -m setup | less 分页查看
还可以过滤查看具体的变量信息:查看系统发行版
查看主机cpu个数:
setup中常用的变量
setup中有很多系统信息的变量,但是日常常用的内置变量有限,这里罗列出一些常用的变量要获取那一个变量值直接调用就好了;
setup变量的使用方式
在playbook中使用setup变量
setup中的变量可以在playbook中定义,但不能直接在配置文件中定义,如果要在配置文件中使用内置变量,需要将配置文件转换成模板templates文件,在模板文件中定义内置变量。下面做一个示列展示setup变量在playbook中的使用方式,而在template中使用setup变量的方式则在介绍template模板时融合在一起使用来介绍。
一个应用示列:在playbook中使用setup变量
检查语法:
[root@Ansible data]# ansible-playbook -C testvar.yml
执行:
查看:
template模板
template使用场景:template模板的作用与copy模块作用相似,都是把本地文件复制到远程主机,但是它能完成copy模块不能做的工作,copy模块是从本地将文件完全不变地完整复制到远程主机,而使用template可以在模板文件中引用setup模块中的很多内置变量,(或者主机清单和playbook中的变量),从而使文件内容产生差异化的变化,(copy模块复制的文件中不能使用变量),有了这个特点就可以方便地使用模板文件对远程主机的配置文件进行修改。
template模板其实也是一个模块,只能用在playbook中,template模板使用的是jinja2语言,在模板中可以使用字符串,数字,列表,元组,字典,布尔,算术运算,比较操作,逻辑运算,条件表达式等,运用非常灵活
模板的使用规范:ansible的playbook与模板文件存放路径没有严格规定,可以自己定义存放位置,但是palybook文件和模板文件尽量在同一目录,模板文件存放在一个templates的目录,该目录与playbook文件在同一级目录下即可
创建template模板
将原来的配置文件名后再加上 .j2 后缀,原来的配置文件就变成了模板文件
[root@Ansible data]# cp nginx.conf nginx.conf.j2
上面的nginx.conf.j2文件就可以在playbook中代替copy模块使用,在使用之前,可以将模板文件内容进行修改,加入灵活的setup变量实现远程主机系统的差异配置:
在template中使用setup变量
修改模板文件:vim /data/templates/nginx.conf.j2
编写playbook,在palybook中引用模板文件
测试编写的剧本:[root@Ansible data]# ansible-playbook -C inst-nginx.yml
执行剧本:
查看执行结果:
查看远程主机nginx.conf文件修改的内容:
在较新nginx版本中work_proceess 选择使用auto来代替老版本中的cpu核心数,auto参数可以自动获取主机的cpu信息,一般不用再指定,这里修改是为了演示setup变量在模板中使用的效果
领取专属 10元无门槛券
私享最新 技术干货