YAML特点
YAML 文件以 # 为注释符
YAML 文件以 .yml或者.yaml 结尾
YAML 文件以 --- 开始 , 以 ... 结束,但开始和结束标志都是可选的
基本语法
大小写敏感
使用缩进表示层级关系
缩进时是使用Tab键还是使用空格- -定要达到统- ,建议使用空格。
相同层级的元素必须左侧对齐即可
YAML 支持的数据结构有三种
字符串:
列表:
字典:
混合结构
验证YAML语法
Play 常用属性
一个完整的剧本
执行和校验Playbook
如何对Playbook进行语法校验?
下面校验的方法,只能校验PlayBook是否正确,而不能校验YAMl文件是否语法正确。
ansible-playbook -i hosts myPlaybook.yml --syntax-check
也可以使用python来检查
python -c 'import yaml,sys;print yaml.safe_load(sys.stdin)' < myPlaybook.ym
执行Playbook
ansible-playbook -i hosts myPlaybook.yml
如何单步跟从调试PlayBook
//执行Task中的任务,需要手动确认是否往下执行
ansible-playbook -i hosts myPlaybook.yml --step
测试运行PlayBook
//会执行完整个PLayBook,但是所有Task中的行为都不会在远程服务器上执行,所有执行都是模拟行为。
ansible-playbook myplaybook.yml -C
//-C为大写字母C
Ansible任务控制
Ansible条件判断
场景nginx启动逻辑欠缺考虑
Nginx语法校验
- name: check nginx syntax
shell: /usr/sbin/nginx -t
可以使用Ansible中的注册变量。
获取Task任务结果
- name: check nginx syntax
shell: /usr/sbin/nginx -t
register: nginxsyntax
通过debug模块,打印出来的返回结果。
when条件判断
语法:
with_items循环
在PlayBook中使用with items 去实现循环控制,且循环时的中间变量(上面shell循环中的$i变量)只能是关键字item,而不能随意自定义
Jinja2 模板
Jinja2是基于python书写的模板引擎。
jinja2 必知必会
1、jinja2文件以.j2为后缀,也可以不写后缀。
2、jinja2中存在 三种定界符
注释:{{# #}}
变量引用:{{ var }}
逻辑表达:{% %}
3、jinja2 逻辑控制
条件表达
{% if %}
...
...
{% endif %}
案例:
循环控制:
案例:
注意: