资料来源:https://docs.ansible.com/ansible/latest/user_guide/
Inventory清单文件
在/etc/ansible/ansible.cfg中,默认inventory= /etc/ansible/hosts。该文件用于定义将要管理的主机(组)。
1.定义清单主机变量
在对应主机后面,提供key=value 形式语句,可以向不同主机传递不同变量值。格式如下:
[webserver]
172.16.1.10 ansible_ssh_user=root inventory_host_var="Host_vars"
172.16.1.20 ansible_ssh_user=root
2.定义清单组变量
组变量,可以向该组内所有主机传递相同变量,可与主机变量同时被定义。格式如下:
[webserver:vars]
inventory_group_var="var_value"
3.ansible-playbook命令传入变量
cat var.json - {"key": "json"} cat var.yaml - key: yaml -e "name=duanyifei" # 传入系统facts变量 --extra-vars=EXTRA_VARS- -e "@var.json" / "@var.yaml" # 传入外部文件变量
playbook文件
定义变量
hosts: <hostname or groupname>
vars: #playbook中定义变量的关键字
playbook_var: var_value
vars_files: #使用变量文件
- filename.yml
tasks:
- name: Copy Jinja2 file to remote host
template: src=/home/aheahe/var_tu.j2 dest=/root/var.conf
变量循环
tasks:
- name: <Step_Name>
<parent_tag>:
<tag>: "{{item_name}}" # item_name可直接是item变量,也可以是item变量的属性值
with_items: "{{item_values}}" # item_values是item变量的值列表,通过item变量和with_items关键字实现循环
# 或者
<parent_tag>: <tag>={{item_name}}
with_items: [ val1, val2, ..., valN ]
Setup系统变量
1.创建并查看系统变量文件/etc/ansible/facts.d/
root@qa95 ansible]# cat facts.d/local.fact
[general]
abc=aihe
def="Local facts"
2.验证系统变量是否生效
ansible <hostname> -m setup -a "filter=ansible_local"
3.系统变量生效后可以在template/playbook中使用
{{ ansible_local.local.general.abc}}
架构
角色:roles
以特定的层级目录结构进行组织的tasks、variables、handlers、templates、files等;
role_name/
files/:存储由copy或script等模块调用的文件;
tasks/:此目录中至少应该有一个名为main.yml的文件,用于定义各task;其它的文件需要由main.yml进行“包含”调用;
handlers/:此目录中至少应该有一个名为main.yml的文件,用于定义各handler;其它的文件需要由main.yml进行“包含”调用;
vars/:此目录中至少应该有一个名为main.yml的文件,用于定义各variable;其它的文件需要由main.yml进行“包含”调用;
templates/:存储由template模块调用的模板文本;
meta/:此目录中至少应该有一个名为main.yml的文件,定义当前角色的特殊设定及其依赖关系;其它的文件需要由main.yml进行“包含”调用;
default/:此目录中至少应该有一个名为main.yml的文件,用于设定默认变量;