Ansible教程(4)变量的多种定义与使用方式

TangLu 系统运维 2023-11-02 20393 0

一、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

ansible变量1.png


红框处每个引号内的就是默认变量名,使用双花括号可以直接引用。对于一些包含多个层级的变量(比如磁盘分区会存在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




评论