Ansible变量

Ansible变量

变量的概述

避免重复的代码,方便维护,减少维护的成本

ansible变量定义

1.通过命令行进行变量定义
2.在play文件中进行变量定义
	- vars
	- vars_files
3.通过inventory主机信息文件中进行变量
	- host文件
	- host_vars目录
	- group_vars目录

优先级

命令行>play>inventory

命令行>vars_files(play)>vars(play)>host_vars(inventory)>group_vars(inventory)>hosts文件(inventory)

定义ansible变量位置

在play中定义变量

vars变量

# 在play中用vars定义变量
- hosts: webs
  vars:
    user_group: zh
    id: '888'
    pkg: 
      - nginx
      - php
      - mariadb-server
  tasks:
    - name: 创建{{ user_group }}组
      group:
        name: "{{ user_group }}"
        gid: "{{ id }}"

    - name: 创建{{ user_group }}用户
      user:
        name: "{{ user_group }}"
        uid: "{{ id }}"
        group: "{{ id }}"
        shell: /sbin/nologin
        create_home: False
    - name: 安装nginx php mysql
      yum:
        name: "{{ pkg }}"
        state: present

vars_files变量

- hosts: webs
  vars_files: ./zh_var.yml
  tasks:
    - name: 创建{{ user_group }}组
      group:
        name: "{{ user_group }}"
        gid: "{{ id }}"

    - name: 创建{{ user_group }}用户
      user:
        name: "{{ user_group }}"
        uid: "{{ id }}"
        group: "{{ id }}"
        shell: /sbin/nologin
        create_home: False
    - name: 安装nginx php mysql
      yum:
        name: "{{ pkg }}"
        state: present

# zh_var.yum
 user_group: zh2
id: '250'
pkg: 
  - nginx
  - php
  - mariadb-server

在inventory中定义变量

在inventory文件中定义变量(几乎不用)

[root@m01 ~]# vim /etc/ansible/hosts 
[webs:vars]
user_group=zh3
id='789'
pkg='nginx,php,mariadb-server'

host_vars

# 和yaml文件同级别下创建目录
[root@m01 ~]# mkdir host_vars
# 针对主机定义变量
[root@m01 ~]# vim host_vars/web01
user_group: web01
id: '444'
pkg: nginx,php,mysql

[root@m01 ~]# vim host_vars/web02
user_group: web01
id: '444'
pkg: nginx,php,mysql

group_vars

# 和yaml文件同级下创建目录
[root@m01 ~]# mkdir group_vars

# 针对主机定义变量
[root@m01 ~]# vim group_vars/webs
user_group: webs
id: '555'
pkg: nginx,php,mysql

变量注册

当absible的模块在运行之后,其实都会返回一些result结果,就像是执行脚本,我们有的时候需要脚本给我们一些
return返回值,我们才知道,上一步是否可以执行成功,但是...默认情况下,ansible的result并不会显示出来,所
以,我们可以把这些返回值'存储'到变量中,这样我们就能通过'调用'对应的变量名,从而获取到这些result,这种将
模块的返回值,写入到变量中的方法被称为变量注册
- hosts: webs
  tasks:
  - name: 查看nginx目录
    shell: "ls -l /etc/nginx"
    register: mmm
  - name: 获取变量的值
    debug:
      msg: "{{ mmm }}"

只需要打印详细的结果

- hosts: webs
  tasks:
  - name: 查看nginx目录
    shell: "ls -l /etc/nginx"
    register: mmm
  - name: 获取变量的值
    debug:
      msg: "{{ mmm.stdout_lines }}"

利用变量注册做判断

- hosts: webs
  tasks:
  - name: 查看nginx目录
    shell: "ls -l /etc/nginx"
    register: mmm
  - name: 获取变量的值
    debug:
      msg: "{{ mmm.stdout_lines }}"

  - name: 安装nginx和php
    shell: cd /opt && rpm -Uvh *.rpm
    when: mmm.rc != 0

facts缓存

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

facts缓存应用场景

根据主机CPU,设置nginx配置文件,cpu亲和
根据内存,配置MySQL的配置文件
根据IP地址,配置redis配置文件

缓存中,记录主机自带的变量,直接调用即可
缓存加载时间:在play执行的时候,会将变量内容放到内存中
缓存清除时间:当该play执行完所有task之后,会将内存中的变量全部删除

# 主机名
ansible_hostname // 显示第一个.之前的主机名 
ansible_fqdn // 显示完整的主机名

# 内存
ansible_memtotal_mb // 总内存 
ansible_memfree_mb // 空闲内存 
ansible_swaptotal_mb // 总虚拟内存 
ansible_swapfree_mb // 空闲虚拟内存

# cpu
ansible_processor_cores // cpu核心数

# 系统
ansible_os_family // 系统类型 RedHat Debain ansible_distribution // 系统发行版 CentOS ansible_distribution_major_version // 版本号 7 ansible_distribution_version // 详细版本号 7.6

# IP相关
ansible_dns.nameservers // DNS ansible_default_ipv4.address // eth0外网IP ansible_eth0.ipv4.address // eth0外网IP ansible_eth1.ipv4.address // eth1内网IP

# 磁盘
ansible_devices.sda.partitions.sda1.size // sda1分区的磁盘大小:/boot分区 ansible_devices.sda.partitions.sda3.size // sda3分区的磁盘大小: /分区

关闭facts缓存

- hosts: webs
  gather_facts: False   # 关闭facts缓存
  tasks:
  - name: 查看nginx目录
    shell: "ls -l /etc/nginx"
    register: mmm
  - name: 获取变量的值
    debug:
      msg: "{{ mmm.stdout_lines }}"

  - name: 安装nginx和php
    shell: cd /opt && rpm -Uvh *.rpm
    when: mmm.rc != 0
posted @   FYytfg  阅读(122)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示