Ansible 变量

变量概述

变量提供了便捷的方式来管理Ansible playbook的每一个项目中的动态值,比如nginx-1.6.3这个软件包的版本,在其它地方或许会反复使用,那么如果讲此值设置为变量,然后再在其他的playbook中调用,会方便许多。如此一来还方便维护,减少维护的成本。

定义变量的方式

1.通过命令行进行变量定义
2.在play文件中进行变量定义
3.通过Inventory主机信息文件中进行变量定义
4.通过vars_files定义变量
5.通过host_vars和group_vars定义变量

1.在playbook里面定义变量

方法一:

- hosts: web_group
  vars:
    packages:
      - httpd
      - mariadb-server
      - php
      - php-mysql
      - php-pdo
  tasks:       
  - name: Install httpd  mariadb php Server
    yum:
      name: ""

方法二:

- hosts: web_group
  vars:
    web_server:
      - httpd
      - nginx
    db_server:
      - mariadb-server
      - mysql
  tasks:
    - name: Install lnmp
      yum:
        name: ""

2.通过vars_files的方式定义变量

#定义变量文件
[root@m01 lnmp]# cat vars1.yml 
web_server: nginx
[root@m01 lnmp]# cat vars2.yml 
db_server: mariadb-server

#调用变量文件
[root@m01 lnmp]# vim nmp.yml 
- hosts: web_group
  vars_files:
    - ./vars1.yml
    - ./vars2.yml
  tasks:
    - name: Install nmp
      shell: mkdir /tmp/

3.在Inventory中定义变量

#定义阶段
[root@m01 lnmp]# vim /etc/ansible/hosts 
[web_group]
web01 ansible_ssh_pass='1'
web02 ansible_ssh_pass='1'

[web_group:vars]
web_server=nginx
db_server=mariadb-server

[nginx:children]
web_group

[nginx:vars]
web_server=httpd

#调用阶段
- hosts: web_group
  tasks:
    - name: Install nmp
      yum:
        name: ""

#主机定义的变量优先级高于主机组定义的变量

4.通过host_vars和group_vars定义变量

之前的几种变量定义都不是很好用,比较好用的是在Ansible项目目录下创建两个变量目录:
host_vars
group_vars
切记,目录名字一定要一致,不能做任何修改。

1)主机组定义变量方式

#定义阶段
[root@m01 lnmp]# pwd
/project/lnmp
[root@m01 lnmp]# mkdir group_vars
[root@m01 lnmp]# cat group_vars/web_group 
web_server: nginx

#调用阶段
[root@m01 lnmp]# cat nmp.yml 
- hosts: web_group
  tasks:
    - name: Install nmp
      yum:
        name: ""

2)主机定义方式

#定义阶段
[root@m01 lnmp]# mkdir host_vars
[root@m01 lnmp]# cat host_vars/web01 
web_server: httpd

#调用阶段
[root@m01 lnmp]# cat nmp.yml 
- hosts: web_group
  tasks:
    - name: Install nmp
      yum:
        name: ""
#注意:主机定义的变量优先级高于主机组定义的变量

5.命令行定义变量

#playbook配置
[root@m01 lnmp]# cat nmp.yml 
- hosts: web_group
  tasks:
    - name: Install nmp
      yum:
        name: ""

#命令行指定变量值
[root@m01 lnmp]# ansible-playbook nmp.yml -e "web_server=redis"

#远端查看安装内容
[root@web01 ~]# rpm -qa redis
redis-3.2.12-2.el7.x86_64

#命令行指定变量值可以指定多个
[root@m01 lnmp]# ansible-playbook nmp.yml -e "web_server=redis" -e "db_server=mysql"

6.优先级测试

[root@m01 ~]# vim touch_file.yml
- hosts: web_group
  vars:
    filename: vars
  vars_files:
    - ./vars1.yml
  tasks:
    - name: Touch vars File
      file:
        path: /root/
        state: directory

#定义vars_files
[root@m01 ~]# vim vars1.yml
filename: vars_files

#定义group_vars中的web_group
[root@m01 ~]# vim group_vars/web_group
filename: group_vars_web_group

#定义host_vars中的web01
[root@m01 ~]# vim host_vars/web01
[root@m01 ~]# vim host_vars/web01
filename: host_vars

#定义group_vars中的all
[root@m01 ~]# vim group_vars/all
filename: group_vars_all

#测试命令行
[root@m01 ~]# ansible-playbook touch_file.yml -e "filename=vars_command"

#测试所有
[root@m01 ~]# ansible-playbook touch_file.yml

命令行 > vars_file > plybook里面配置的vars > host_vars > group_vars > 主机清单里host的变量 > 主机清单里group的变量

7.变量注册

#注册变量
[root@m01 lnmp]# vim lnmp.yml 
- hosts: web_group
  tasks:
    - name: Get ip
      file:
        path: /tmp/
        state: directory
      register: abc

    - name: Get result
      debug:
        msg: ""

#调用自己定义的变量
[root@m01 ~]# vim register.yml
- hosts: web_group
  tasks:
    - name: Test Register Vars
      shell: "ls -l /"
      register: list_dir

    - name: Return Result
      debug:
        msg: ""


#只输出自己想要的内容
[root@m01 ~]# vim register.yml
- hosts: web_group
  tasks:
    - name: Test Register Vars
      shell: "ls -l /"
      register: list_dir

    - name: Return Result
      debug:
        msg: ""

#debug模块常用参数
msg:            #调试输出的消息
var:            #将某个任务执行的输出作为变量传递给debug模块,debug会直接将其打印输出
verbosity:      #debug的级别(默认是0级,全部显示)

8.层级定义变量

#编辑变量文件
[root@m01 ~]# vim vars_file.yml
lamp:
  framework:
    web_package: httpd
    db_package: mariadb-server
    php_package: php

lnmp:
  framework:
    web_package: nginx
    db_package: mysql
    php_package: php

lnmt:
  framework:
    web_package: nginx
    db_package: mysql
    java_package: tomcat

#编辑playbook文件
[root@m01 ~]# vim test.yml
- hosts: web_group
  vars_files: ./vars_file.yml
  tasks:
    - name: Install LAMP httpd
      yum:
        name: ""

    - name: Install LAMP mariadb-server
      yum:
        name: ""

    - name: Install LAMP php
      yum:
        name: ""

#官方推荐写法
[root@m01 ~]# vim test.yml
- hosts: web_group
  vars_files: ./vars_file.yml
  tasks:
    - name: Install LAMP httpd
      yum:
        name: ""

    - name: Install LAMP mariadb-server
      yum:
        name: ""

    - name: Install LAMP php
      yum:
        name: ""

facts缓存

Ansible facts是在被管理主机上通过Ansible自动采集发现的变量。facts包含每台特定的主机信息。比如:被控端的主机名、IP地址、系统版本、CPU数量、内存状态、磁盘状态等等。

facts使用场景

1.通过facts缓存检查CPU,来生成对应的nginx配置文件
2.通过facts缓存检查主机名,生成不同的zabbix配置文件
3.通过facts缓存检索物理机的内存大小来生成不通的mysql配置文件

综上所述的Ansible facts类似于saltstack中的grains对于做自动化的小伙伴是非常有用滴。

1.配置方法

#编辑
[root@m01 lnmp]# cat mysql.js 
buffer size: NaN

[root@m01 lnmp]# vim conf.yml 
- hosts: web_group
  tasks:
    - name: config mysql conf
      template:
        src: ./mysql.js
        dest: /tmp/mysql.conf

#执行
[root@m01 ~]# ansible-playbook facts.yml

#远端查看
[root@web01 tmp]# cat mysql.conf 
buffer size: 486

2.关闭facts

#当不使用环境内置变量的时候可以将facts缓存关闭
- hosts: web_group
  gather_facts: no
  tasks:
    - name: config mysql conf
      template:
        src: ./1.js
        dest: /tmp/mysql.conf

#当使用环境内置变量的时候不能将facts缓存关闭
- hosts: web_group
  #gather_facts: no
  tasks:
    - name: config mysql conf
      template:
        src: ./1.js
        dest: /tmp/mysql.conf

3.推送redis配置文件,使用变量配置成服务器ip

#配置一个配置文件 使用变量
[root@m01 lnmp]# vim redis.conf
bind 

#推送文件至远端服务器,变量会变成主机ip
[root@m01 lnmp]# vim redis.yml 
- hosts: web_group
  tasks:
    - name: Config redis conf
      template:
        src: ./redis.conf
        dest: /tmp

#执行剧本
[root@m01 lnmp]# ansible-playbook redis.yml

#远端查看redis配置文件
[root@web01 tmp]# vim redis.conf
bind 172.16.1.7
Copyright © 高程程 all right reserved,powered by Gitbook修订于: 2021-05-18 21:14:35

results matching ""

    No results matching ""