命令规则
- 变量的名字由字母、下划线和数字组成,必须以字母开头
- 保留关键字不能作为变量名称
add, append, as_integer_ratio, bit_length, capitalize, center, clear,
conjugate, copy, count, decode, denominator, difference,
difference_update, discard, encode, endswith, expandtabs,
extend, find, format, fromhex, fromkeys, get, has_key, hex,
imag, index, insert, intersection, intersection_update, isalnum,
isalpha, isdecimal, isdigit, isdisjoint, is_integer, islower,
isnumeric, isspace, issubset, issuperset, istitle, isupper,
items, iteritems, iterkeys, itervalues, join, keys, ljust, lower,
lstrip, numerator, partition, pop, popitem, real, remove,
replace, reverse, rfind, rindex, rjust, rpartition, rsplit, rstrip,
setdefault, sort, split, splitlines, startswith, strip, swapcase,
symmetric_difference, symmetric_difference_update, title,
translate, union, update, upper, values, viewitems, viewkeys,
viewvalues, zfill
变量类型
根据作用范围大概分为这几种变量:
变量优先级:全局变量 > 剧本变量 > 资产变量
1、全局变量
通过执行playbook时指定,使用-e
指定
1、可以在命令行定义
ansible all -i localhost, -m debug -a "msg='my key is {{ key }}'" -e "key=value"
2、也可以通过引入文件定义
# cat a.json
{"key":"value","type":"school"}
# ansible all -i localhost, -m debug -a "msg='key is {{ key }}, type is {{ type }}'" -e @a.json
2、剧本变量
此种变量在playbook中指定
1、通过PLAY 属性 vars 定义
---
- name: test play vars
hosts: all
vars:
user: jflin
home: /home/lilei
2、通过PLAY 属性 vars_files 定义
将变量单独拿出来形成一个.yml文件,再在playbook中进行指定,放在当前playbook同级目录下的vars文件夹中
---
- name: test play vars
hosts: all
vars_files:
- vars/users.yml
如何在playbook中使用变量?
使用 “{{ 变量名 }}” 来使用变量,当不加双引号时,name: {{ user }} 是一个字典的开始,会导致ansible解析有误
---
- name: test play vars
hosts: all
vars:
user: jflin
home: /home/lilei
tasks:
- name: create the user {{ user }}
user:
name: "{{ user }}"
home: "{{ home }}"
3、资产变量
此种变量对应了我们资产中的主机,在资产文件中进行定义
主机变量:
此种变量只针对特点的主机有效
[web_servers]
172.18.0.3 user=jflin
172.18.0.4
主机组变量:
此种变量针对该主机组的所有主机有效
[web_servers]
172.18.0.3 user=jflin
172.18.0.4
[web_servers:vars]
home="/home/jflin"
优先级?
当主机变量与主机组变量重复时,主机变量优先级较高
4、Inventory 内置变量
此种变量是ansible内置的变量
ansible_ssh_host
将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.
ansible_ssh_port
ssh端口号.如果不是默认的端口号,通过此变量设置.
ansible_ssh_user
默认的 ssh 用户名
ansible_ssh_pass
ssh 密码(这种方式并不安全,官方强烈建议使用 --ask-pass 或 SSH 密钥)
ansible_sudo_pass
sudo 密码(这种方式并不安全,官方强烈建议使用 --ask-sudo-pass)
ansible_sudo_exe (new in version 1.8)
sudo 命令路径(适用于1.8及以上版本)
ansible_ssh_private_key_file
ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况.
ansible_python_interpreter
目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如 /usr/local/bin/python3
hostvars
查看ansible的信息,包括ansible版本、主机清单等
5、Facts变量
Facts变量不需要我们人为去声明变量名及赋值。
它收集了有关被管理服务器的操作系统的版本、服务器的IP地址、主机名,磁盘的使用情况、CPU个数、内存大小等等有关被管理服务器的私有信息。
在每次PlayBook运行的时候都会发现在PlayBook执行前都会有一个Gathering Facts的过程。这个过程就是收集被管理服务器的Facts信息过程。
ansible all -c local -m setup