YAML语法
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时是使用Tab键还是使用空格⼀定要达到统⼀
- 相同层级的元素必须左侧对齐即可
---
class:
- name: stu1
num: 001
- name: stu2
num: 002
- name: stu3
num: 003
...
YAML 语法校验
python -c 'import yaml,sys; print
yaml.safe_load(sys.stdin)' < demo.yml
Play 属性
- name
- hosts
- tasks
- become/become_user
- remote_user
---
- name: the first play example
hosts: webservers
remote_user: root
tasks:
- name: install nginx package
yum: name=nginx state=present
- name: copy nginx.conf to remote server
copy: src=nginx.conf
dest=/etc/nginx/nginx.conf
- name: start nginx server
systemd:
name: nginx
enabled: true
state: started
...
Playbook语法校验
ansible-playbook demo.yml --syntax-check
Ansible变量类型
全局变量
ansible all -m debug -a "msg='my key is {{key}}'" -e "key=value"
剧本变量
---
- name: play vars
hosts: all
vars:
user: hapa
home: /home/hapa
...
#当vars很多时,可通过vars_files定义
#使用变量时格式"{{user}}"
资产变量
#####主机变量#####
[webservers]
192.168.188.9 home="/home/hapa"
#####主机组变量#####
[webservers:vars]
home="/home/hapa"
Inventory 内置变量
- ansible_ssh_host
- ansible_ssh_port
- ansible_ssh_user
- …
Facts变量
由setup 模块完成,它收集了有关被管理服务器的操作系统版本服务器IP地址、主机名,磁盘的使用情况、CPU个数、内存大小等等有关被管理服务器的私有信息。
ansible all -i localhost, -c local -m setup -a "filter=*memory*"
gather_facts: no
# 关闭facts变量收集功能,默认都会收集。
注册变量
用于保存⼀个task任务的执行结果, 以便于debug时使用,通过register关键字实现。
---
- name: install a package and print the result
hosts: webservers
remote_user: root
tasks:
- name: install nginx package
yum: name=nginx state=present
register: install_result
- name: print result
debug: var=install_result
...
变量优先级
当⼀个变量同时在全局变量、剧本变量和资产变量中定义时,优先
级最高的是全局变量,其次是剧本变量,最后才是资产变量。
Ansible 任务控制
when
支持以下运算符:
==
!=
> >=
< <=
is defined
is not defined
true
false
and
or
- name: check nginx syntax
shell: /usr/sbin/nginx -t
register: nginxsyntax
- name: print nginx syntax
debug: var=nginxsyntax
- name: start nginx server
service: name=nginx state=started
when: nginxsyntax.rc == 0
循环
vars:
creatusers:
- nginx
- mysql
- www
tasks:
- name: create user
user: name="{{ item }}" state=present
with_items: "{{ createuser }}"
新版本
vars:
creatusers:
- nginx
- mysql
- www
tasks:
- name: create user
user: name="{{item}}" state=present
loop: "{{createuser}}"
Tags属性
通过Play中的tags 属性,可选择需要执行的。
ansible-playbook demo.yml -t demotags
Handlers 属性
当配置文件发生变化的时候才去触发TASK,可通过handlers属性。
tasks:
- name: update nginx config
copy: src=nginx.conf dest=/etc/nginx/
notify: reload nginx server
handlers:
- name: reload nginx server
service: name=nginx state=reloaded