Ansible教程(5)playbook的变量定义与调用
一、Ansible变量的作用
在Ansible中支持设置主机变量、组变量,变量支持嵌套使用,定义好了的变量可以在playbook中引用。由于Ansible是在每个主机上单独运行命令,所以不同的主机去调用同样的变量,也可以取到不同的值得,这样进行一些配置就更灵活合理
二、Ansible变量定义与调用
方法1:在/etc/ansible/hosts文件中定义变量
# 定义变量 vim /etc/ansible/hosts [apache] 192.168.1.36 webdir=/opt/test #定义单个主机的变量 192.168.1.33 [apache:vars] #定义整个组的统一变量 webdir=/web/test [nginx] 192.168.1.3[1:2] [nginx:vars] webdir=/opt/web # playbook调用变量 cat variables.yml --- - hosts: all remote_user: root tasks: - name: create webdir file: name={{ webdir }} state=directory #引用变量 # 执行playbook [root@ansible PlayBook]# ansible-playbook variables.yml
方法2:在playbook中定义和调用变量
cat apache.yml - hosts: webservers remote_user: root vars: #开始声明变量 - package: httpd #变量名与变量值 - service: httpd tasks: - name: install apache yum: name={{ package }} state=latest #要引用的变量用"{{ }}"囊括 - name: install configure file for httpd copy: src=/root/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf - name: start httpd service service: enabled=true name={{ service }} state=started
方法3:使用ansible-playbook -e选项定义变量,命令行变量优先级高于配置文件中的变量
cat app.yml --- - hosts: all remote_user: root tasks: - name: install httpd yum: name="{{ package }}" #配置文件声明需要引用的变量名 ansible-playbook -e 'package=httpd' app.yml #通过-e给变量赋值,在app.yml文件全局生效
方法4:调用setup模块获取变量
setup模块主要用于获取主机信息并保存在变量中,如IPv4、IPv6、MAC地址、磁盘分区等。该模块获取到的变量是可以直接调用的,无需定义
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
方法5:使用独立的YAML文件定义变量
为了方便管理将所有的变量统一放在一个独立的变量YAML文件中,laybook文件直接引用文件调用变量即可
# 定义存放变量的文件 cat var.yml var1: vsftpd var2: httpd # 编写playbook cat variables.yml --- - hosts: all remote_user: root vars_files: #引用变量文件 - ./var.yml #指定变量文件的path(这里可以是绝对路径,也可以是相对路径) tasks: - name: install package yum: name={{ var1 }} #引用变量 - name: create file file: name=/tmp/{{ var2 }}.log state=touch #引用变量 # 执行playbook [root@ansible PlayBook]# ansible-playbook variables.yml
版权声明:如无特殊标注,文章均为本站原创,转载时请以链接形式注明文章出处。
评论