1、Ansible环境变量优先级

1、执行play-book时 -e指定的ansible-playbook site.yml --tags=test -e test=test-e  

2、register 注册的环境变量

3、role下的 vars文件夹下的环境变量

4、hosts资产下设置的环境变量

5、group/all 下的all

6、 site.yml入口文件的vars 配置的环境变量

7、 role下的default的 环境变量

我的测试环境条件目录如下


[root@ansible ansible]# pwd
/etc/ansible
[root@ansible ansible]# cat site.yml 
- name: install compute nodes roles
  hosts: compute
  vars:
  roles:
     - { role: commen,tags: commen }
     - { role: nova, tags: nova }
     - { role: neutron, tags: neutron }
     - { role: cinder, tags: cinder }
     - { role: test, tags: test }
     
 
[root@ansible ansible]# cd roles/test/
[root@ansible test]# pwd
/etc/ansible/roles/test
[root@ansible test]# ls
defaults  files  tasks  templates  vars
[root@ansible test]#
[root@ansible test]# cd tasks/

[root@ansible tasks]# cat main.yml 
---
- name: update time
  shell: date -R
#  register: test
- name: print test 
  debug: msg="{{ test }}"

2、变量调用hosts里面的变量,比如group/all 配置文件调用hosts 下 的变量。

cat /etc/ansible/hosts
[controller]
192.168.64.132  mgmt=192.168.64.132   pub_nic=ens37  br_ex_addr=192.168.64.130 tunnel_ip=192.168.64.132  ansible_python_interpreter="/root/venv/bin/python"

cat group_vars/all 
### neutron ####
neutron_mysql_password: admin
neutron_pass: admin
metadata_proxy_shared_secret: admin
controller_mgmt_ip: hostvars[groups['controller'][0]]['mgmt']    # 此处要和hosts下面的mgmt的ip用一个变量,此时可以用hostvars[groups['controller'][0]]['mgmt']来代替。

3、通过变量来确定是否要执行这个动作。

  比如我们通过group/all下的变量来确定要不要安装 l3服务

[root@bogon ansible]# grep install_l3 group_vars/all 
install_l3: True #当着为True时 代表执行,若不想执行,则为False
查看playbook
[root@bogon tasks]# cat main.yml 
---
- name: install l3
  yum: name=router  state=latest
  when: install_l3
[root@bogon tasks]#

4、wait_for  模块
wait_for:  
    host: "{{ inventory_hostname }}" #'{{ (ansible_ssh_host|default(ansible_host))|default(inventory_hostname) }}'
    port: "{{ item }}"
  with_items:
      - 5000
      - 35357

通过上面的变量的判断就可以,选择安装或者不安装。很方便!