Ansible常用变量【上】

devtools/2024/9/24 9:18:09/

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。


在Ansible中会用到很多的变量,Ansible常用变量包括以下几种:

1. 自定义变量——在playbook中用户自定义的变量;

2. 系统变量——用户无须自定义,Ansible会在执行playbook之前去远程主机上搜集远程节点系统信息的变量;

在模版文件中,可以直接使用上述两种变量

3. 注册变量——把任务的运行结果作为一个变量来使用;

4. 额外变量——为了使playbook更灵活,通用性更强,允许用户在执行playook时传入变量的值,这时候就需要用到“额外变量”。

1. 自定义变量

用户可以在playbook中通过vars关键字自定义变量,使用时用{{}}引用起来即可,具体的使用场景有多种。

1.1 在playbook中定义&使用变量

在playbook中,使用vars定义一个简单变量,然后在task中引用该变量即可。

举例:创建playbook文件test.yaml定义和引用自定义变量

[root@test101 ansible-test]# cat test.yaml 
---
- name: Test playbook with custom variableshosts: allgather_facts: no      #关闭Facts,不收集系统信息vars:custom_message: "Hello, SRE"   #定义变量tasks:- name: Display custom messagedebug:msg: "{{ custom_message }}"  #引用变量,注意这里冒号后面以{开头的时候,{}必须加上引号,否则执行会报错
[root@test101 ansible-test]#

执行yaml文件效果:

1.2 把变量放在单独文件中

当变量较多的时候,或变量需要在多个playbook中重复使用的时候,可以把变量放到一个单独的文件中,通过关键字“var_files”把文件中定义的变量引用到playbook中。使用变量的方法和在本文件中定义变量的使用方法相同。

举例:

1)创建变量文件

[root@test101 ansible-test]# cat vars/custom_message.yaml 
custom_message: "Hello, SRE"
[root@test101 ansible-test]# 
[root@test101 ansible-test]#

2)修改test.yaml中引用变量的方法

[root@test101 ansible-test]# cat vars/custom_message.yaml 
custom_message: "Hello, SRE"
[root@test101 ansible-test]# 
[root@test101 ansible-test]# cat test.yaml 
---
- name: Test playbook with custom variableshosts: allgather_facts: novars_files:       #引用变量文件- vars/custom_message.yaml    变量文件,这里是相对路径tasks:- name: Display custom messagedebug:msg: "{{ custom_message }}"
[root@test101 ansible-test]# 
[root@test101 ansible-test]#

执行test.yaml效果:

1.3 定义和使用复杂变量

在有些场景中,需要使用的变量不是简单的数字或者字符串,而是比较复杂的变量。比如下面的例子

举例:创建test.yaml文件定义和引用复杂变量

---
- name: Ansible playbook with variable and usagehosts: allgather_facts: novars:            #定义复杂变量user_info:Name: SREAge: 25TEL: 88888888tasks:- name: Display user informationdebug:msg: "Name: {{ user_info.Name }}, Age: {{ user_info.Age }}, TEL: {{ user_info.TEL }}"      #使用点号引用变量#msg: "Name: {{ user_info['Name'] }}, Age: {{ user_info['Age'] }}, TEL: {{ user_info['TEL'] }}"  #使用中括号引用变量

执行test.yaml效果:

2. 远程主机系统变量(Facts)

ansible会通过模块“setup”来搜集主机的系统信息,这些搜集到的信息叫做Facts。每个playbook在执行前都会默认执行setup模块,所以这些Facts信息可以直接以变量的形式使用。

查看有哪些Facts变量可以调用setup模块查看:

# ansible all -m setup -u root
或
# ansible all -m setup

2.1 引用Facts变量

系统变量可以直接引用,不需要定义,只是在引用多层变量的时候,注意一下引用的格式方法。如下面的例子:

[root@test101 ansible-test]# cat test.yaml 
---
- name: Test playbook with facts variableshosts: alltasks:- name: Display facts messagedebug:#msg: "{{ ansible_nodename }}"    #1. 引用简单的单层变量#msg: "{{ ansible_ens32.device  }}"    #2. 两种方式引用双层变量#msg: "{{ ansible_ens32['device'] }}"#msg: "{{ ansible_ens32.ipv4.address }}"    #3. 两种方式引用复杂的多层变量msg: "{{ ansible_ens32['ipv4']['address'] }}"
[root@test101 ansible-test]#

执行test.yaml效果:

2.2 关闭Facts

收集Facts信息会消耗额外的时间,如果不需要Facts信息,则可以在playbook中,通过关键字“gather_facts”来控制是否收集远程系统的信息。

如果不搜集系统信息,则facts变量就不能在该playbook中使用了。

如:关闭Facts见1.1中的例子。

未完待续...

感谢您的喜爱与分享


http://www.ppmy.cn/devtools/39959.html

相关文章

vue根据文字动态判断溢出...鼠标悬停显示el-tooltip展示

使用自定义el- tooltip 组件 定义 Tooltip是一种小型弹出框,它显示有关特定页面元素的信息,例如按钮、链接或图标。Tooltip通常以半透明的气泡形式呈现,并出现在页面元素的旁边或下方。 它可以改善用户体验,使用户更容易理解页面…

事务的基础

📝个人主页:五敷有你 🔥系列专栏:面经 ⛺️稳中求进,晒太阳 事务的基础 1)事务 事务是:一组操作的集合 ,他是不可分割的工作单位。事务会把所有操作作为一个整体一起向系统提…

XXE-lab靶场搭建

源码下载地址 https://github.com/c0ny1/xxe-lab1.php_xxe 直接放在php web页面下即可运行。 2.java_xxe java_xxe是serlvet项目,直接导入eclipse当中即可部署运行。 3.python_xxe: 安装好Flask模块python xxe.py 4.Csharp_xxe 直接导入VS中运行 phpstudy…

【实验】根据docker部署nginx并且实现https

环境准备 systemctl stop firewalld setenforce 0 安装docker #安装依赖包 yum -y install yum-utils device-mapper-persistent-data lvm2 #设置阿里云镜像 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #安装最新版…

前端 怎么让聊天列表在第一次渲染的时候自动定位到最新位置

常见的定位到聊天最新位置一般是&#xff0c;正常渲染之后&#xff0c;使用scrollIntoView或者scrollTo去处理。 今天分享另外一种方法 <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8" /><title>Demo</ti…

【图像畸变校正】

接上篇文章&#xff1a;【鱼眼&#xff0b;普通相机】相机标定 附代码&#xff1a; 方法一&#xff1a; 使用cv2.undistort """Create May 11, 2024author Wang Jiajun """import cv2 import numpy as npdef correct(img,camera_fileE:/cali…

第二证券今日投资参考:银保渠道合作限制松绑 低空旅游借势起飞

昨日&#xff0c;两市股指盘中震动上扬&#xff0c;沪指一度涨近1%续创年内新高&#xff0c;创业板指一度涨超2%。到收盘&#xff0c;沪指涨0.83%报3154.32点&#xff0c;深证成指涨1.55%报9788.07点&#xff0c;创业板指涨1.87%报1900.01点&#xff0c;科创50指数涨2.26%&…

React Native vs Flutter:2023年移动开发框架对比

React Native 和 Flutter 都是当前流行的跨平台移动应用开发框架&#xff0c;它们使开发者能够使用一套代码库开发同时运行在Android和iOS上的应用。尽管它们的目标相似&#xff0c;但这两个框架在设计理念、性能、生态系统和开发体验等方面有着明显的不同。以下是2023年React …