变量说明:
变量的定义:
1.在inventory中定义变量
内置变量
ansible_ssh_port 指定被控端的ssh端口号ansible_ssh_host 指定被控端的ip地址node1 username=alicenode2 ansible_ssh_port=22 ansible_ssh_host=192.168.1.1[web]node2 ansible_ssh_port=22 ansible_ssh_host=192.168.1.1node3 username=bob[web:vars]username=natasha
2.在playbook中
#通过vars_files关键字引入变量
#通过vars关键字引入变量users:bjones:first_name: Boblast_name: Joneshome_dirs: /users/bjonesacook:first_name: Annelast_name: Cookhome_dirs: /users/acook{ "users": {"bjones":{"first_name": "Bob","last_name": "Jones" ,"home_dirs": "/users/bjones"} ,"acook": {"first_name": "Anne", "last_name": "Cook", "home_dirs": "/users/acook"} } }
#通过vars_files关键字引入变量
文件
- hosts: node3
vars_files:
- userinfo.yml
- passinfo.yml3. 在host_vars和group_vars中定义变量
[admin@ansible ansible]$ cat host_vars/node1
username: marry
[admin@ansible ansible]$ cat group_vars/web
username: zhangsan
[admin@ansible ansible]$ tree
.
├── ansible.cfg
├── group_vars
│ └── web #组名
├── host_vars
│ └── node1 #主机名
├── inventory
├── debug.yml
4. 也可以在命令行中定义变量
ansible-playbook -e username=lisi debug.yml
ansible-playbook -e “{username: lisi, homeinfo: /home/user1}” debug.yml变量取值的方式
name: “{{ users.bjones.first_name }}”
home: “{{ users.bjones.home_dirs }}”
name: “{{ users.acook.first_name }}”
home: “{{ users.acook.home_dirs }}”
name: “{{ users[‘bjones’][‘first_name’] }}”
home: “{{ users[‘bjones’][‘home_dirs’] }}”
[]中括号内不加引号表示变量,加引号就是字符串
name: “{{ users[username][‘first_name’] }}”
home: “{{ users[username][‘home_dirs’] }}”
定义变量
username: bjones
users.0.first_name
“{{ users[0][‘first_name’] }}”
users:
-first_name: Bob
last_name: Jones
home_dirs: /users/bjones
- first_name: Anne
last_name: Cook
home_dirs: /users/acook
bob怎么取值
{ users: [{first_name: Bob,last_name: Jones ,home_dirs: /users/bjones },{first_name: Anne,last_name: Cook,home_dirs: /users/acook }] }
变量优先级
inventory ———> group_vars —-> host_vars ——> playbook (vars,vars_files) ——-> cmdline 命令行中定义变量(优先级最高)
注册变量
在有些时候,可能需要将某一条任务执行的结果保存下来,以便在接下的任务中调用或者做些判断。可以通过register关键字来实现将某一任务结果保存为一个变量。
- hosts: node1
tasks:
- name: exec shell command
shell: ls /root
register: result
- name: debug registry var
debug:
msg: “{{ result }}”
- name: debug
debug:
msg: “anaconda-ks.cfg is exist”
when: “‘anaconda-ks.cfg’ in result.stdout_lines”
debug部分重点
login: 变量名,其值为一个字典
changed:ansible基于此来判断是否发生了状态改变
cmd:被调用的命令
failed:是否运行失败
delta:任务执行的时间
rc:返回值,0代表正常,非0代表异常
stderr:错误结果输出,输出值是一个字符串
stderr_lines:错误结果输出,输出值是一个列表
stdout:正确结果输出,输出值是一个字符串
stdout_lines:正确结果输出,输出值是一个列表,可以对列表循环取值
