Ansible的变量
变量必须以字母为首
变量分类
全局变量
剧本变量
资产变量
Facts变量
注册变量
全局变量
vim env.yaml
---
env_name: lyh
env_password: 1
...
[root@docker ~]# ansible all -i localhost, -m debug -a "msg='name is {{env_name}} password is {{env_password}}'" -e @env.yaml
localhost | SUCCESS => {
"msg": "name is lyh password is 1"
}
剧本变量
在play中的vars字段添加或者在vars_file指定文件
vim playbook_env.yaml
---
- name: 测试剧本变量
hosts: all
vars:
user_var: test-user
home_var: /home/test-user
tasks:
- name: 通过变量创建用户
user:
name: "{{user_var}}"
home: "{{home_var}}"
...
测试
ansible-playbook -i localhost, playbook_env.yaml -C
运行
ansible-playbook -i localhost, playbook_env.yaml
验证
tail /etc/passwd -n 1 |less
test-user:x:1003:1003::/home/test-user:/bin/bash
资产变量
系统内置变量
ansible_ssh_port #远程主机端口
ansible_ssh_host #远程主机IP/名
ansible_ssh_usr #连接用户
ansible_ssh_pass #不安全,建议使用--ask-pass或者ssh-key
ansible_sudo_pass
Facts变量
在我们运行Playbook过程中就可以看到这一项
Facts变量无需人为声明,由Ansible中的setup模块完成,包含服务器操作系统版本,ip地址,主机名,磁盘,cpu,内存等相关信息
手动收集
ansible all -i localhost, -c local -m setup
模糊匹配过滤参数
ansible all -i localhost, -c local -m setup -a "filter=*mount*"
注册变量
通过上一个task的执行结果来判断是否要执行下一个task
所在字段tasks.register
写一个注册变量相关的yaml
vim register_env.yaml
---
- name: 测试注册变量
hosts: localhost
tasks:
- name: 安装nginx
yum: name=nginx state=present
register: installed
- name: 输出安装结果
debug: var=installed
...
检查格式并执行
ansible-playbook register_env.yaml --syntax-check
ansible-playbook -i localhost, register_env.yaml -C #测试
ansible-playbook -i localhost, register_env.yaml
变量优先级
同时存在多个重复变量,优先级顺序
假如资产中的变量存在user=tomcat,Play中的变量user=mysql,执行Ansible-Playbook时又指定全局变量user=www
结果:输出变量为"user=www",如果不指定全局变量,则变量结果为"user=mysql"