ansible02-ansible变量的定义与引用
playbook中变量的定义规则
变量名只能由数字、字母、下划线组成,且只能由字母开头
变量的来源
(1) setup模块中的所有变量都可以直接调用
(2) 在/etc/ansible/hosts中定义
- 普通变量:主机组中主机单独定义,优先级高于公共变量
- 公共变量:也称组变量,针对主机组中所有主机定义统一变量
(3) 通过命令行指定变量,优先级最高
ansible-palybook -e varname=value
(4) 在playbook中定义
vars:
- var1: value1
- var2: value2
(5) 在独立的变量yaml文件中定义
(6) 在role中定义
facts组件是⽤来收集被管理节点信息的,使⽤setup模块可以获取这些信息
变量的优先级
-e > playbook > 主机清单普通变量 > 主机清单公共变量
setup模块中的变量
使用filter过滤主机名
ansible host10 -m setup # 列出主机变量
ansible host10 -m setup -a 'filter=ansible_hostname'
ansible host10 -m setup -a 'filter=*address*'
普通变量示例
在清单文件中定义普通变量
cat /etc/ansible/hosts
[webserver]
192.168.1.1 http_port=81
192.168.1.2 http_port=82
在playbook中引用普通变量
cat hostname.yml
- hosts: webserver
remote_user: root
tasks:
- name: set hostname
hostname: name=www{{ http_port }}.host.com
公共变量示例
在清单文件中定义公共变量
cat /etc/ansible/hosts
[webserver:vars]
nodename=www
domainname=host.com
在playbook中引用公共变量
cat hostname.yml
- hosts: webserver
remote_user: root
tasks:
- name: set hostname
hostname: name={{ nodename }}{{ http_port }}.{{ domainname }}
命令行指定变量名
首先在playbook中引用变量
cat app.yml
- hosts: host10
remote_user: root
tasks:
- name: install app
yum: name={{ appname }}
- name: start service
service: name={{ appname }} state=started enabled=yes
运行playbook时指定引用的变量的值
ansible-playbook -e 'appname=httpd' app.yml
同时指定多个变量
ansible-playbook -e 'appname1=httpd appname2=vsftpd' aplication.yml
在playbook中定义变量
cat app.yml
- hosts: host10
remote_user: root
vars:
- appname1: httpd
- appname2: vsftpd
tasks:
- name: install app1
yum: name={{ appname1 }}
- name: install app2
yum: name={{ appname2 }}
在独立的变量yaml文件中定义
没有特殊的格式要求,直接指定变量和变量值
cat vars.yml
var1: httpd
var2: vsftpd
引用变量
cat testvars.yml
- hosts: hoso10
remote_user: root
vars_files:
- vars.yml # vars_files: vars.yml 这种写法是错误的
tasks:
- name: hello
shell: echo {{ var1 }}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步