Ansible中vars(变量)定义

article/2025/11/9 16:27:33

1、变量使用的原因

playbook的编写是使用yml的语法,虽然该语法规则较为简单,但是,同其他语法相同该语法也有变量、循环等机制的使用。变量的使用就是为了提高我们所写剧本的复用性(当某个参数更改时,直接更改变量的赋值,无需更改剧本中的每一处),从而提高工作效率。

2、变量定义的范围及优先级

2.1 变量的范围:

      1、 全局范围: 在名两行设置的ansible的变量值

      2、 playbook范围:在playbook和相关文件中设置的变量

      3、 主机范围: 由清单、事实手机或注册的任务,在相应的主机中生效

                   主机变量分为:

                         2.1.3.1  主机变量,应用于特定主机

                         2.1.3.2  组变量,应用于一个主机组或者一组主机组中的所有主机

2.2 变量的优先级:

      在定义多级别变量下,变量范围窄的‘窄的’优先级高于 ‘广泛’的,其中主机变量优先于组变量;playbook范围下的优先级最高。

3、变量的定义方式

3.1 变量的命名方式

       变量在定义时可含有:数字、字母、下换线,但数字下划线不能开头;

3.2  常见方式的定义

#playbook中直接定义
- name: var testhosts: webvars:user: studenthome: /home/student#在文件中定义,写入playbook中
- name: file's varvars_files:         ## 变量写入文件即可- users.yml

 3.3 主机变量的定义:

#定义主机变量
[servera]
servera.linux.com  ansible_user_var=student     ##直接跟在主机后,以字典的方式定义
#定义主机组变量
[serverb]
serverb.linux.com
serverb.redhat.com[serverb:vars]               ##先定义主机组,在写组的同时添加变量标识
user=student                 ##在该组标识下以字典方式定义

在定义主机组时,也可以嵌套的方式定义

#编写主机组
[group1]
group1.linux.com[group2]
group2.example.com[group:children]
group1
group2#嵌套变量定义
[group:vars]   ##用var进行标识
user=studen    ##以字典方式定义

在定义变量组时,我们会发下上述方法的定义会使inventory清单变得混乱,所以现在常采用的放法是以文件的方式进行定义,然后直接调用(该变量清单需要和inventory清单在同一级别,且名称需要相互匹配),主机变量清单的名称为:host_vars ;主机组变量清单的名称为: group_vars/groupname:

#主机变量结构
[root@contral var]# tree .
.
├── ansible.cfg
├── group_var     ##主机组变量
│   └── servers
├── host_var      ##主机变量
├── inventory

3.4 以数组的方式进行定义:

---
- name: iteration testhosts: allvars:             ###以数组的方式进行定义users:lilei:firstname: leilastname: lihomedir: /home/lilei

上述变量的定义均以字典的方式进行定义的,关键字:值 (关键字为变量名称,值为变量所附的值)

4、变量的调用

 4.1 常规调用

#定义变量  
vars:user: student
#任务中的调用tasks:- name: Create user {{ user }}debug: msg="The var is {{ user }}"

 4.2 数组方式时的调用

#伪代码,只展示数组方式的调用
--...  tasks:- name: debugdebug: msg="This var is {{ users['lilei'] }}"  ##以递归的方式进行调用
#      debug: msg= "This var is {{ users.lilei }}"    ##以字典的方式调用...    

【注】当代码是以变量开头时,必须以 “{{}}”格式调用。

5、整体模块练习

配置Apache服务的默认发布页

  1 ---2 - name: Installed Apache3   hosts: all4   vars:                            ###变量编写5     web_pkg: httpd6     firewall_pkg: firewalld7     web_service: httpd8     firewall_service: firewalld9     python_pkg: python10     rule: http11   tasks:                             ##执行任务12     - name: Required packages are installed13       yum:                           ##安装对应的软件包14         name:15           - "{{ web_pkg }}"16           - "{{ firewall_pkg }}"17           - "{{ python_pkg }}"18         state: latest19     - name: The {{ web_pkg }} service is start       ##开启网络服务20       service:21         name: "{{ web_pkg }}"22         state: started23         enabled: true24     - name: The {{firewall_pkg }} service is start    ##开启火墙服务25       service:26         name: "{{ firewall_pkg }}"27         state: started28         enabled: true29     - name: Web content is in place        ##修改注默认发布页30       copy:31         content: "HELLOW LINUX!!!"         ##输入内容32         dest: /var/www/html/index.html     ##目的地33     - name: The firewall port for {{ rule }} ##配置火墙服务34       firewalld:35         service: "{{ rule }}"36         permanent: true37         immediate: true38         state: enabled39 - name: Veritfy the Apache service        ##当前主机检测40   hosts: localhost41   become: false42   tasks:43     - name: Ensre the web service44       uri:45         url: http://servera.linux.com46         status_code: 20047 48 ...

 结果:登录servera 查看目录文件

运行结果

 


http://chatgpt.dhexx.cn/article/2T58Jla2.shtml

相关文章

vue3解决no-unused-vars报错

vue3解决no-unused-vars 前言添加配置 前言 在上一节,针对 vue3配置了ESLint,此时,App.vue 和 HelloWorld.vue 报了一个 no-unused-vars 的错误。 添加配置 vue3 是尤大写的,参考下尤大的配置:.eslintrc.js {no-u…

Jmeter内置变量vars和props

在使用jmeter作接口测试时,有些参数并不是明文直接传递的,须编码或加密后传输。此时可以使用BeanShell取样器、BeanShell前置和后置处理器等对参数进行加工处理。 vars和props都是jmeter的内置变量,不必先定义,可以直接使用 二者…

Jmeter 的 vars 和 props 用法

Jmeter 的 JSR223 控件是 代替 BeanShell 的新一代脚本控件,支持多种脚本语言,尤其是其中的 Groovy,更是重点推荐使用的脚本语言,本文研究其中的 vars 和 props 两种对象的用法。 props 和 vars 主要有两点区别: vars…

optistruct中的DRESP2响应设置

1.先编写自己的函数公式 函数名后面的括号中要有式中包含的变量 2.定义响应,类型选择为function,dequation选择刚才设置的函数 点击edit,输入函数表达式中变量对应的响应个数,并分别选择对应哪个响应 返回,点击cr…

结构优化设计with OPtiStruct

上手OptiStruct做结构优化设计,借助该软件强大的优化运算功能,已经成为行业的主流结构优化工具。因此,决定整理一下简要的操作步骤,以备后继之需。 我目前使用的是Hyper13.0版本。 首先是通过hypermesh进行网格划分,其…

大学生方程式赛车借助Altair OptiStruct 实现轻量化和燃料效率提升

项目介绍 每年一届的大学生方程式汽车大赛由英国机械工程师学会 (IMechE) 在英国一级方程式银石赛道举办。来自世界 38 个国家/地区的 178 支报名队伍将在 2014年展开激烈的角逐。想要获得胜利,各队需要展现出他们在技术、工程、设计和制造方面的高超技艺。他们还要…

Hypermesh案例学习笔记

根据我要自学网Hypermesh2017教程,1-10~1-13课程学习笔记 面板介绍 直接放教程里的图了 模型静力分析 模型导入与简化 尽量使用板壳单元,因此抽取模型中面: 点一下模型,点extract就可以得到中面的部件集 为了使网格均匀&am…

HyperMesh有限元分析报错集锦

1. 用hypermesh中的OptiStruct来进行有限元静力学分析,出现一个错误,错误代号61 Error 61: No elements found in input data 解决办法:如果你已经设置好材料、属性,并且为单元赋予了属性,定义了载荷步,在…

hyperstudy联合matlab,在Hyperworks中使用HyperStudy进行多学科优化研究 | 坐倚北风

本文介绍使用Hyperworks中的HyperStudy进行多学科尺寸优化的方法。所使用模型为Hyperworks帮助文档tutorials\hst\HS-4210中的plate1. tpl和plate2. tpl。这两个模型均为使用Optistruct求解器创建的平板有限元分析模型。 该模型由三个部件组成,设计变量为该三个部件对应的板壳…

hypermesh分析流程

对于CAE初学者来说,hypermesh是一个很适合的工具,既可以作为其他分析软件的输入,自带的求解器也能取得很精确的结果,本文是作者的一些实用心得,全是干货。学习一个软件时,软件的操作可以慢慢摸索&#xff0…

Cuda编程-04 计算单元结构

Tesla架构计算单元 如下图,为Tesla架构芯片构造图: 其中需要重点关注的部件为:流多处理器(Stream Multiprocessor,SM),流处理器(Streaming Processor,SP)。在该GPU中,最核心的执行单元为SP&…

【有限元分析】焊缝疲劳分析-热点应力插值法-hypermesh+ncode

一、焊缝疲劳分析整体流程: (对于需要调整壁厚的模型,可以通过导入已经修改后的模型,通过project命令将网格拉伸至surf即可,相比重新画简单) 1、建立CDB模型,验算极限强度 2、建立六个自由度…

python计算复合材料层合板ABD刚度矩阵、预测层合板强度

鄙人不才,在学校的时候没有学python,复合材料力学也是一知半解,后来工作的时候遇到了需要计算复合材料层合板ABD刚度矩阵的内容,然后恰好在学习python,于是花时间编写了下预测这方面的内容,然后后期还编写了…

基于Hypermesh、Nastran、Abaqus、LS_Dyna和Femfat的电池包仿真分析

基于Hypermesh、Nastran、Abaqus、LS_Dyna和Femfat的电池包仿真分析 动力电池作为新能源车动力系统的重要组成部分,电池包作为电池的支撑载体,起到保护电池组正常工作的作用,其结构安全性不容忽视。 本套课程采用Hypermesh、Optistruct、Nastran、Abaqus、LS_Dyna和Femfat软件对…

连续体结构拓扑优化方法介绍

连续体结构拓扑优化方法介绍 材料的有效利用一直是人类追求的目标,也是许多研究领域不变的话题,并伴随着结构优化理论和方法的产生而发展。早期结构优化主要是针对尺寸的优化问题,设计域形状是固定的。后来随着结构优化问题的提出&#xff0…

HyperWorks2021软件安装教程

下载软件 https://www.xsoftnet.com/share/a0004MWyQAg9r.html产品介绍: HyperWorks一款功能强大的开放式架构仿真软件。拥有先进的技术以及高性能、高效和创新的产品,为用户提供了设计、仿真和制造等服务。支持电磁分析设计、材料建模制造、多物理场分…

基于ABAQUS和Optistruct汽车结构惯性释放分析详解

导读:惯性释放是允许对完全无约束的结构进行静力分析。通常我们做线性静力分析需要保证结构没有刚**移,否则求解器没有办法计算。但是很多分析,例如飞机在飞行时,轮船在航行(物体整体具有加速度)时&#xf…

那些干到40岁的程序员都去哪儿了?

最近和不少30多岁的程序员朋友们聊天,发现大家普遍非常焦虑。 原因主要有几点,一是担心未来能不能继续保持现有收入,害怕40岁之后薪资会不会下降,甚至失业。二是大家普遍有房贷或者车贷,这本身也是一种精神压力。三是…

编程15年40岁程序员的我终于在压力下被迫转行了

本人今年40岁多了,中山大学计算机小硕,已经从事it工作15年多,最后一次工作是2017年,创业,互联网教育方向,2020年失败关闭公司。 创业失败后,在家沉淀了几个月,然后决定再次找工作。…

走出焦虑!40岁大龄码农该何去何从?

这篇文章,给大家聊聊 Java 工程师的职业发展规划的一些思考,同时也给不少 20 多岁、30 多岁,但是对自己的职业未来很迷茫的同学一些建议。 笔者希望通过此文,帮大家梳理一下程序员的职业发展方向,让大家知道自己从 20 …