• 欢迎访问显哥博客,本网站纯属学习技术,绝无商业用途,欢迎小伙伴们共同学习!研究技术!QQ:52249909 加我QQ
  • 世界75亿人,这么小的概率,能认识你,是我一生的幸运,不妨加个QQ接触一下:52249909 加我QQ

Ansible自动化企业实战——ansible变量

Ansible lixian 2年前 (2020-03-30) 323次浏览 0个评论 扫描二维码
文章目录[隐藏]

一、变量概述

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

二、定义变量的方式

1.通过命令行进行变量定义

[root@m01 base]# cat mkdir.yml 
- hosts: nfs_client
  tasks:
    - name: Create Backup DIR
      file:
        path: /tmp/{{ web_server }}
        state: directory

#命令行指定变量的值
[root@m01 base]# ansible-playbook mkdir.yml -e "web_server=commond"

#远端查看文件
[root@m01 base]# ansible 'all' -m shell -a 'ls /tmp/'

#指定多个变量
[root@m01 base]# cat mkdir.yml 
- hosts: nfs_client
  tasks:
    - name: Create Backup DIR
      file:
        path: /tmp/{{ web_server }}
        state: directory

    - name: Create db Dir
      file:
        path: /tmp/{{ db_server }}
        state: directory

[root@m01 base]# ansible-playbook mkdir.yml -e "web_server=commond" -e "db_server=mysql"

2.在play文件中进行变量定义

- name: ensure a list of packages installed
  yum:
    name: "{{ packages }}"
  vars:
    packages:
      - httpd
      - httpd-tools

3.通过Inventory主机信息文件中进行变量定义

配置主机清单

[root@m01 ~]# vim /etc/ansible/hosts
[web_group]
web01 ansible_ssh_pass='1'
web02 ansible_ssh_pass='1'
web03 ansible_ssh_pass='1'

[db_group]
db01 ansible_ssh_pass='1'
db02 ansible_ssh_pass='1'

[web_group:vars]
web_server=nginx

[nfs_client:children]
db_group
web_group

[nfs_client:vars]
web_server=http

调用变量

[root@m01 base]# vim mkdir.yml 
- hosts: nfs_client
  tasks:
    - name: Create Backup DIR
      file:
        path: /tmp/{{ web_server }}
        state: directory

查看创建目录

[root@m01 base]# ansible 'all' -m shell -a 'ls /tmp/'

注意:
主机组定义的变量优先级比整合组调用的变量优先级高
先读取整合组的变量,后读取组的变量,则组的变量将覆盖整合组的变量

4.通过vars_files定义变量

- hosts: web03
  vars_files:
    - /project/base/vars1.yml
    - ./vars2.yml
  tasks:
    - name: Install WEB Server
      yum:
        name: "{{ web_server }}"
        state: present

    - name: Install DB Server
      yum:
        name: "{{ db_server }}"
        state: present

5.通过host_vars和group_vars定义变量

#创建主机变量的目录,不能改名字
[root@m01 base]# mkdir host_vars

#目录下的名字要与主机清单里面主机名相同
[root@m01 base]# vim host_vars/db01

#调用变量
[root@m01 base]# vim mkdir.yml 
- hosts: nfs_client
  tasks:
    - name: Create Backup DIR
      file:
        path: /tmp/{{ web_server }}
        state: directory

三、变量注册

当absible的模块在运行之后,其实都会返回一些result结果,就像是执行脚本,我们有的时候需要脚本给我们一些return返回值,我们才知道,上一步是否可以执行成功,但是…默认情况下,ansible的result并不会显示出来,所以,我们可以把这些返回值’存储’到变量中,这样我们就能通过’调用’对应的变量名,从而获取到这些result,这种将模块的返回值,写入到变量中的方法被称为变量注册

变量注册配置

[root@m01 ~]# vim status.yml 
- hosts: web01
  tasks:
    - name: Install Httpd Server
      yum:
        name: httpd

    - name: Check httpd Status
      shell: systemctl is-active httpd
      ignore_errors: yes
      register: check_httpd

    - name: Http Restart
      systemd:
        name: httpd
        state: restarted
      when: check_httpd.rc == 0

    - name: Http Start
      systemd:
        name: httpd
        state: started
      when: check_httpd.rc != 0

四、facts缓存

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

setup模块获取的信息都是因为 facts缓存

1.facts使用场景

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

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

2.关闭facts

#如果使用ansible内置变量的话,不能关闭facts缓存
[root@m01 base]# vim mkdir.yml 
- hosts: nfs_client
  #gather_facts: false
  tasks:
    - name: Create Backup DIR
      file:
        path: /opt/{{ ansible_fqdn }}
        state: directory
        
#如果不使用ansible内置变量的话,关闭facts会提高ansible管理其他机器的速度
[root@m01 base]# vim mkdir.yml 
- hosts: nfs_client
  gather_facts: false
  tasks:
    - name: Create Backup DIR
      file:
        path: /opt/{{ web_server }}
        state: directory

3.一般配置

[root@m01 base]# vim redis.conf 
bind {{ ansible_default_ipv4['address'] }}

[root@m01 base]# cat conf.yml 
- hosts: all
  tasks:
    - name: Config Redis Conf
      template:
        src: ./redis.conf
        dest: /tmp/

#远端查看
[root@web01 tmp]# cat redis.conf 
bind 10.0.0.7

本站博主 , 版权所有丨如未注明 , 均为原创
转载请注明原文链接:Ansible自动化企业实战——ansible变量
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到