变量说明:

image.png

变量的定义:

1.在inventory中定义变量

内置变量

  1. ansible_ssh_port 指定被控端的ssh端口号
  2. ansible_ssh_host 指定被控端的ip地址
  3. node1 username=alice
  4. node2 ansible_ssh_port=22 ansible_ssh_host=192.168.1.1
  5. [web]
  6. node2 ansible_ssh_port=22 ansible_ssh_host=192.168.1.1
  7. node3 username=bob
  8. [web:vars]
  9. username=natasha

2.在playbook中

#通过vars_files关键字引入变量

  1. #通过vars关键字引入变量
  2. users:
  3. bjones:
  4. first_name: Bob
  5. last_name: Jones
  6. home_dirs: /users/bjones
  7. acook:
  8. first_name: Anne
  9. last_name: Cook
  10. home_dirs: /users/acook
  11. { "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.yml

    3. 在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部分重点

  1. login 变量名,其值为一个字典


changed:ansible基于此来判断是否发生了状态改变
cmd:被调用的命令
failed:是否运行失败
delta:任务执行的时间
rc:返回值,0代表正常,非0代表异常
stderr:错误结果输出,输出值是一个字符串
stderr_lines:错误结果输出,输出值是一个列表
stdout:正确结果输出,输出值是一个字符串
stdout_lines:正确结果输出,输出值是一个列表,可以对列表循环取值