变量说明:
###变量优先级ansible -e var=value > playbook中定义的变量 > 主机组中定义的变量 > 公共组中变量
1.ansible setup facts远程主机的所有变量可直接调用
2.在/etc/ansible/hosts中定义
普通变量:主机组(/etc/hosts)中主机单独定义,优先级高于公共变量,如下所示port为变量直接赋值,
[a]
192.168.168.1 port=2000
192.168.168.2 port=3000
公共(组)变量:针对主机组中所有主机定义统一变量,设置如下
[a:vars]
nodename_common=helo
domainname=oleh
==========分隔符 hn.yml=============
ansible-playbook hn.yml
---
- hosts: a
remoteuser: root
tasks:
- name: set hostname
hostname: {{nodename}}.{{port}}.{{domainname}}
=============================
3.通过命令行指定变量,优先级最高
ansible-playbook -e varname=value
4.在playbook中定义
vars:
- var1: value1
- var2: value2
5.在role中定义
法1:声明变量,当执行ansible-playbook命令时,给变量赋值
下面playbook中{{ package }}为变量,该剧本作用是安装包并启动,调用方式如下
ansible-playbook -e 'package=vsftpd' install.yml
================分隔符 install.yml================
---
- hosts: a
remote_user: root
tasks:
- name: install package
yum: name={{ package }}
- name: service
service: name={{ package }} enabled=yes state=started
法2:在playbook中声明并赋值变量
直接在yml脚本中用vars声明并赋值变量
ansible-playbook ins.yml
=============分隔符 ins.yml===========
---
- hosts: a
remote_user: root
vars:
- package1: httpd
- package2: vsftpd
tasks:
- name: install package
yum: name={{ package }}
- name: service
service: name={{ package }} enabled=yes state=started
法3:创建一个包含变量的文件vars.yml,然后在playbook中调用
===========变量文件 /root/vars.yml=============
vars1: httpd
vars2: net-tools
===========playbook ins.yml=============
---
- hosts: a
remote_user: root
vars_files:
- vars.yml
tasks:
- name: yum1
yum: name={{vars1}}
- name: yum2
yum: name={{vars2}}