Ansible中的变量定义以及变量的优先级详解

本文详细介绍了Ansible中变量的命名规则、分类及优先级,包括全局、play、主机级别的变量。同时,讲解了如何在playbook中直接定义变量,通过文件、清单、目录、命令等多种方式设定变量,还涵盖了数组变量、注册变量、事实变量和魔法变量的使用技巧。


前言

一、变量的优先级以及命名

1. 变量命名

只能包含数字,下划线,字母
只能用下划线或字母开头

2. 变量分类

全局:
从命令行或配置文件中设定的
paly:
在play和相关结构中设定的
主机:
由清单,事实收集或注册的任务

3. 变量的优先级

变量优先级设定: 狭窄范围有限与广域范围
extra vars (-e 选项指定的变量)最高
inventory 主机清单中定义的变量(ansible_ssh_user等)
play剧本中vars、vars_files定义的变量
系统的facts变量
角色定义的默认变量 最低

二、变量设定和使用方式

1.在playbook中直接定义变量

  1 ---
  2 - name: for 91-93 httpd.server install and start
  3   hosts: server
  4   tags: httpd server start and firealld add + port 8080/tcp
  5   vars:
  6     NAME: westos
  7   tasks:
  8     - debug:
  9         msg: '{{NAME}}'

在这里插入图片描述

2.文件中定义变量

  1 ---
  2 - name: demo
  3   hosts: server
  4   vars_files: /root/.ansible/group_vars/server.yml
  5   tasks:
  6     - debug:
  7         msg: '{{NAME}}'

在这里插入图片描述
变量文件内容

1 ---
2 vars: westoslinux

3.清单定义变量

清单内容

[westos:vars]
NAME:westoslinux
  1 ---
  2 - name: demo
  3   hosts: westos
  4   tasks:
  5     - debug:
  6         msg: '{{NAME}}'

在这里插入图片描述

4.目录设定变量

mkdir groups_vars
vim groups_vars/server
  1 ---
  2 NAME: westoslinux
  1 ---
  2 - name: demo
  3   hosts: server
  4   vars_files:
  5     - ./group_vars/server.yml
  6   tasks:
  7     - debug:
  8         msg: '{{NAME}}'

5. 命令设定变量

将原有Playbook中的变量覆盖掉,使其自行使用新的变量

ansible-playbook 2.yml -e 'NAME=hellow'

在这里插入图片描述

6.数组变量使用和设定

  1 ---
  2 - name: demo
  3   hosts: server
  4   vars_files:
  5     ./1.yml
  6   tasks:
  7     - debug:
  8         msg: "{{USER['westos']['gid']}}"

变量文件

  1 ---
  2 USER:
  3   linux:
  4     uid: westos
  5     gid: 1000
  6   westos:
  7     uid: 0
  8     gid: root

在这里插入图片描述在这里插入图片描述在这里插入图片描述

7.注册变量

  1 ---
  2 - name: demo
  3   hosts: server
  4   tasks:
  5     - shell:
  6         cmd: date
  7       register: westos
  8     - debug:
  9         var: westos['stdout_lines']

在这里插入图片描述

8.事实变量

  1 ---
  2 - name: demo
  3   hosts: server
  4   gather_facts: no						#开启不会进行采集信息的步骤
  5   tasks:
  6     - debug:
  7         var: ansible_memtotal_mb

facts组件是Ansible用于采集被管理机器设备信息的一个功能,采集的机器设备信息主要包含IP地址,操作系统,以太网设备,mac 地址,时间/日期相关数据,硬件信息等。
在这里插入图片描述在这里插入图片描述在这里插入图片描述

9.魔法变量使用方式

也叫做ansible的内置变量

ansible server -m debug -a "msg='{{inventory_dir}}'"					#清单目录位置
ansible server -m debug -a "msg='{{inventory_file}}'"					#清单位置
ansible server -m debug -a "msg='{{inventory_hostname}}'"				#获取主机的名称
ansible server -m debug -a "msg='{{inventory_hostname_short}}'"			#获取主机的简短名称
ansible server -m debug -a "msg='{{playbook_dir}}'"						#playbook存储目录
ansible server -m debug -a "msg='{{hostvars}}'"							#主机的信息
ansible server -m debug -a "msg='{{groups}}'"							#列出清单中所有的组和主机
ansible server -m debug -a "msg='{{group_names}}'"						#当前受管主机所在组

总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值