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 }}" #这里引用变量,实际输出内容就是nginx
4、在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.yml
5、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)所有。如需引用本站内容,请注明来源及作者。
评论