主机规划
主机名称 | 操作系统版本 | 内网IP | 外网IP(模拟) | 安装软件 |
---|---|---|---|---|
ansi-manager | CentOS7.5 | 172.16.1.180 | 10.0.0.180 | ansible |
ansi-haproxy01 | CentOS7.5 | 172.16.1.181 | 10.0.0.181 | |
ansi-haproxy02 | CentOS7.5 | 172.16.1.182 | 10.0.0.182 | |
ansi-web01 | CentOS7.5 | 172.16.1.183 | 10.0.0.183 | |
ansi-web02 | CentOS7.5 | 172.16.1.184 | 10.0.0.184 | |
ansi-web03 | CentOS7.5 | 172.16.1.185 | 10.0.0.185 |
添加用户账号
说明:
1、 运维人员使用的登录账号;
2、 所有的业务都放在 /app/ 下「yun用户的家目录」,避免业务数据乱放;
3、 该用户也被 ansible 使用,因为几乎所有的生产环境都是禁止 root 远程登录的(因此该 yun 用户也进行了 sudo 提权)。
1 | # 使用一个专门的用户,避免直接使用root用户 |
Ansible 配置清单Inventory
之后文章都是如下主机配置清单
1 | [yun@ansi-manager ansible_info]$ pwd |
Tests 概述
Tests 在 Jinja 中是一种评估模板表达式,并最终返回 True 或 False。Jinja 中就有自带的 Tests 清单,具体地址如下:
1 | http://docs.jinkan.org/docs/jinja2/templates.html#builtin-tests |
tests 和 filters 的主要区别在于Jinja tests 用于比较,而 filters 用于数据操作,两者在Jinja中有不同的应用。
与所有模板一样,tests 总是在 Ansible 控制机上执行,而不是在任务的目标机上,因为它们测验本地数据。
除了 Jinja2 tests 之外,Ansible还提供了一些 tests,用户也可以轻松创建自己的 tests。
测验字符串
若要将字符串与子字符串或正则表达式匹配,请使用「match」、「search」或「regex」过滤。
match:必须有开头匹配
search:子串匹配
regex:正则匹配
示例:
1 | [yun@ansi-manager ansi_tests]$ pwd |
测验版本比较
使用「version」,用于版本号比较。
「version」接受的运算符如下:
1 | <, lt, <=, le, >, gt, >=, ge, ==, =, eq, !=, <>, ne |
「version」也可以接受「strict」参数,这个参数默认值为「False」,如果设置为「True」则ansible会进行更严格的版本检查:
1 | {{ sample_version_var is version('1.0', operator='lt', strict=True) }} |
示例:
1 | # 判断 ansible_python_version 版本是否 大于等于 2.7.3 |
测验子集和超集
关键字「superset」和「subset」,用于测验一个列表是否包含或被包含于另一个列表
示例:
1 | [yun@ansi-manager ansi_tests]$ pwd |
测验列表真假
关键字「all」和「any」,用于检查列表里元素的真假,列表中所有为真或者任何一个为真。
all:一假则假
any:一真则真
1 | [yun@ansi-manager ansi_tests]$ pwd |
测验文件或目录
用于测验目录、文件、软连接、是否已存在、是相对路径还是绝对路径等等。
1 | [yun@ansi-manager ansi_tests]$ pwd |
测验任务执行结果
对任务执行结果进行测验。
1 | [yun@ansi-manager ansi_tests]$ pwd |