Ansible教程(4)变量的多种定义与使用方式
一、Ansible变量的作用
Ansible可以通过变量对被控端主机参数进行个性化配置,这样就可以灵活地为不同的主机配置不同的参数。通常是在Playbook中引用定义好的变量,这些变量有多种定义方式
二、Ansible变量定义与调用方式
1、通过命令行直接传递变量,变量优先级最高
cat app.yml
- hosts: all
remote_user: root
tasks:
- name: install nginx
yum: name="{{ package }}" #配置文件声明需要引用的变量名
ansible-playbook -e 'package=nginx' app.yml #通过-e给变量赋值,在app.yml文件全局生效2、通过vars参数定义变量,优先级第三
- hosts: webservers
vars:
- web_package: httpd #声明变量web_package
- ftp_package: vsftpd
tasks:
- name: test variables
debug:
msg:
- "{{ web_package }}" #这里引用变量,实际输出内容就是httpd
- "{{ ftp_package }}"3、通过vars_files参数定义变量,优先级第二
#创建公共变量文件
cat var.yml
web_package: nginx
#playbook引用变量文件
cat test_playbook.yml
- hosts: webservers
vars_files:
- ./var.yml #变量统一定义在了var.yml文件中,这里直接引用
tasks:
- name: test variables
debug:
msg:
- "{{ web_package }}" #这里引用变量,实际输出内容就是nginx4、在Inventory中定义变量,优先级最低
vim /etc/ansible/hosts
#为每个主机定义变量
[mysql]
192.168.1.36 datadir=/data1
192.168.1.33 datadir=/data2
#为组内主机统一定义变量,:vars为固定写法
[nginx:vars]
port=88
# playbook调用变量
cat variables.yml
- hosts: all
tasks:
- name: output variables
debug:
msg:
- "{{ datadir }} {{ port }} "
# 执行playbook
ansible-playbook variables.yml5、Ansible facts变量
facts变量用于采集被控端的各种状态信息,包含主机名、IP、磁盘等。常用于为不同配置的主机分配合理的资源,比如根据每台服务器的CPU数来配置Nginx的线程数。这些状态信息被存放在了固定的变量中,通过setup模块可以查看到这些变量和值。如果明确不需要通过setup模块来获取远程主机facts信息,可以使用这个选项,能提升一定的性能
ansible webserver -m setup
红框处每个引号内的就是默认变量名,使用双花括号可以直接引用。对于一些包含多个层级的变量(比如磁盘分区会存在sda、sdb、sdc...),可以通过从上级书写的形式,比如{{ansible_devices.sda.partitions.sda.size}}
- hosts: webservers
remote_user: root
tasks:
- name: copy file
copy: content='{{ ansible_default_ipv4.address }}' dest=/tmp/vars.ans版权声明:本文章版权归数据库运维网(www.ywdba.cn)所有。如需引用本站内容,请注明来源及作者。







评论