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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!