Ansible中vars(变量)定义

2023-11-13

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 test
  hosts: web
  vars:
    user: student
    home: /home/student

#在文件中定义,写入playbook中
- name: file's var
  vars_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 test
  hosts: all
  vars:             ###以数组的方式进行定义
    users:
     lilei:
        firstname: lei
         lastname: li
         homedir: /home/lilei

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

4、变量的调用

 4.1 常规调用

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

 4.2 数组方式时的调用

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

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

5、整体模块练习

配置Apache服务的默认发布页

  1 ---
  2 - name: Installed Apache
  3   hosts: all
  4   vars:                            ###变量编写
  5     web_pkg: httpd
  6     firewall_pkg: firewalld
  7     web_service: httpd
  8     firewall_service: firewalld
  9     python_pkg: python
 10     rule: http
 11   tasks:                             ##执行任务
 12     - name: Required packages are installed
 13       yum:                           ##安装对应的软件包
 14         name:
 15           - "{{ web_pkg }}"
 16           - "{{ firewall_pkg }}"
 17           - "{{ python_pkg }}"
 18         state: latest
 19     - name: The {{ web_pkg }} service is start       ##开启网络服务
 20       service:
 21         name: "{{ web_pkg }}"
 22         state: started
 23         enabled: true
 24     - name: The {{firewall_pkg }} service is start    ##开启火墙服务
 25       service:
 26         name: "{{ firewall_pkg }}"
 27         state: started
 28         enabled: true
 29     - 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: true
 37         immediate: true
 38         state: enabled
 39 - name: Veritfy the Apache service        ##当前主机检测
 40   hosts: localhost
 41   become: false
 42   tasks:
 43     - name: Ensre the web service
 44       uri:
 45         url: http://servera.linux.com
 46         status_code: 200
 47 
 48 ...

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

运行结果

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ansible中vars(变量)定义 的相关文章

  • 如何获取 linux 实用程序 tail 的源代码?

    这个命令确实非常有用 但是我可以在哪里获取源代码以查看内部发生的情况 thanks tail 实用程序是 Linux 上 coreutils 的一部分 源压缩包 ftp ftp gnu org gnu coreutils coreutils
  • 如何用X11复制到剪贴板?

    使用 OS X 上的框架 我可以使用以下命令将 PNG 复制到粘贴板 在 C 中 显然我可以将 NSPasteboard 与 Cocoa 一起使用 include
  • 如何在我的 AWS EC2 实例上安装特定字体?

    我有一个在 AWS EC2 Amazon Linux Elastic Beanstalk 实例上运行的 Python 应用程序 该实例需要某些特定字体才能生成输出 并且想知道如何在部署或实例启动过程中安装它们 我的代码在本地计算机 OS X
  • 构建 makefile 依赖/继承树

    如果我解释得不好或者问了一些明显的问题 我很抱歉 但我是 Linux 内核的新手 而且有点深入 我们有一个嵌入式 Linux 系统 它附带一个 文档非常糟糕的 SDK 其中包含数百个文件夹stuff 大多数文件夹包含rules make m
  • 为什么在 Linux 上字符串文字的内存地址与其他字符串文字的内存地址如此不同?

    我注意到字符串文字在内存中的地址与其他常量和变量 Linux 操作系统 非常不同 它们有许多前导零 未打印 Example const char h Hi int i 1 printf p n void h printf p n void
  • 如何不断刷新屏幕并实时更新[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想在linux上写一个C程序 不断刷新屏幕并实时更新 例如类似于top终端中的命令 谁能指出我正确的方向 为了保持它跨终端类型的可移
  • 在Linux中断上下文中运行用户线程

    我正在编写一些定制的应用程序 并允许更改 Linux 内核中的中断处理程序代码 我有一个用户线程正在等待中断发生 如果发生中断 那么我要做的第一件事就是执行该用户线程 有什么办法让它发挥作用吗 Thanks 创建一个字符设备 这就是内核所做
  • 如何以编程方式从Linux中的进程名称获取进程ID

    在我的项目中 我们使用 ACE 自适应通信环境 中间件来编写可在 Windows 和 Linux 上运行的独立于操作系统的代码 要求是从进程名称中获取进程 ID 由于 ACE 不支持这一点 因此我们必须使用特定于平台的宏来分离 Window
  • 每个进程每个线程的时间量

    我有一个关于 Windows 和 Linux 中进程和线程的时间量子的问题 我知道操作系统通常为每个线程提供固定的时间量 我知道时间量根据前台或后台线程而变化 也可能根据进程的优先级而变化 每个进程有固定的时间量吗 例如 如果操作系统为每个
  • Linux shell 脚本:十六进制数字到二进制字符串

    我正在 shell 脚本中寻找一些简单的方法来将十六进制数字转换为 0 和 1 字符的序列 Example 5F gt 01011111 是否有任何命令或简单的方法来完成它 或者我应该为其编写一些开关 echo ibase 16 obase
  • 从 TypeScript 运行任何 Linux 终端命令?

    有没有办法直接从 TypeScript 类中执行 Linux 终端命令 这个想法是做类似的事情 let myTerminal new LinuxTerminal let terminalResult myTerminal run sudo
  • Docker:处理 tar 文件时出错(退出状态 1):设置枢轴目录时出错:不是目录

    我是 Docker 新手 不知道是什么原因导致此错误或如何诊断它 任何有关此问题的具体帮助或有关首先检查何处以诊断此类问题的提示将不胜感激 我的 Dockerfile FROM java 8 Install maven RUN apt ge
  • 设置 Apache POI 的路径

    我想创建 Excel 文件并使用 java 程序在该文件中写入数据 That is here http www techbrainwave com p 554我在 java 文件所在的位置提取了 Apache POI 并将该路径包含在路径变
  • arm-linux-gnueabi 编译器选项

    我在用 ARM Linux gnueabi gcc在 Linux 中为 ARM 处理器编译 C 程序 但是 我不确定它编译的默认 ARM 模式是什么 例如 对于 C 代码 test c unsigned int main return 0x
  • 在 Linux 上的 Python 中使用受密码保护的 Excel 工作表

    问题很简单 我每周都会收到一堆受密码保护的 Excel 文件 我必须解析它们并使用 Python 将某些部分写入新文件 我得到了文件的密码 当在 Windows 上完成此操作时 处理起来很简单 我只需导入 win32com 并使用 clie
  • ansible 重新启动 2.1.1.0 失败

    我一直在尝试创建一个非常简单的 Ansible 剧本 它将重新启动服务器并等待它回来 我过去在 Ansible 1 9 上有一个可以运行的 但我最近升级到 2 1 1 0 并且失败了 我正在重新启动的主机名为 idm IP 为 192 16
  • 为什么我收到“无法进行二进制日志记录”的信息。在我的 MySQL 服务器上?

    当我今天启动 MySQL 服务器并尝试使用以下命令进行一些更改时用于 MySQL 的 Toad http www quest com toad for mysql 我收到此消息 MySQL 数据库错误 无法进行二进制日志记录 消息 交易级别
  • 从 PL/SQL 调用 shell 脚本,但 shell 以 grid 用户而非 oracle 身份执行

    我正在尝试使用 Runtime getRuntime exec 从 Oracle 数据库内部执行 shell 脚本 在 Red Hat 5 5 上运行的 Oracle 11 2 0 4 EE CREATE OR REPLACE proced
  • Bash 解析和 shell 扩展

    我对 bash 解析输入和执行扩展的方式感到困惑 对于输入来说 hello world 作为 bash 中的参数传递给显示其输入内容的脚本 我不太确定 Bash 如何解析它 Example var hello world displaywh
  • 无法加载 JavaHL 库。- linux/eclipse

    在尝试安装 Subversion 插件时 当 Eclipse 启动时出现此错误 Failed to load JavaHL Library These are the errors that were encountered no libs

随机推荐

  • 【目标检测】各种方法中比较难理解的地方

    1 评价指标mAP 全网最清楚的解释 强推 原文链接 http blog sina com cn s blog 9db078090102whzw html 理解的关键点在于每一次的precision和recall计算都是在top X的基础上
  • VMware虚拟机装win7教程

    VMware虚拟机装win7教程 前言 一 VMware虚拟机装win7 二 装Vmware Tools 1 初步装好win7后 要装Vmware Tools 2 搞不定的接着往下看 也是本人遇到的问题 总结 前言 昨晚想要在win10系统
  • 初识RecyclerView

    使用之前 implementation com android support recyclerview v7 26 1 0 添加v7的依赖 不然Recyclerview不给用 1 Xml布局 此处布局文件有两个 一个是整体的父布局文件 代
  • 利用Python实现几种常见排序算法

    一 排序算法概览 插入排序 直接插入排序 二分法插入排序 选择排序 直接选择排序 堆排序 交换排序 冒泡排序 快速排序 归并排序 二 代码实现 1 直接插入排序 最简单直接的一种方式 序列在排序中可分为左边已排序部分和右边未排序部分 每次从
  • 拷贝构造函数与深拷贝和浅拷贝

    拷贝构造函数是一种特殊的构造函数 函数的名称必须和类名称一致 它必须的一个参数是本类型的一个引用变量 作用就是用来复制对象 在使用这个对象的实例来初始化这个对象的一个新的实例 类中可以存在多个拷贝构造函数 拷贝构造函数的调用时机 当函数的参
  • Java中的代理(一)

    一 概念 代理 Proxy 是一种设计模式 提供了对目标对象另外的访问方式 即通过代理对象访问目标对象 这样做的好处是 可以在目标对象实现的基础上 增强额外的功能操作 即扩展目标对象的功能 重要的编程思想 不要随意去修改别人已经写好的代码或
  • Java中成员变量、局部变量、全局变量、静态变量存在位置及初始化

    根据定义变量位置的不同 可以将变量分为成员变量和局部变量 成员变量是 定义在一个类的变量 类中方法外 局部变量是定义在一个方法内的变量 方法中 成员变量分为 静态属性 随类的存在而存在 是在类加载的初始化 非静态属性 随实例的属性存在而存在
  • vsnprintf用法解析

    int vsnprintf char s size t n const char format va list arg 描述 将格式化数据从可变参数列表写入大小缓冲区 如果在printf上使用格式 则使用相同的文本组成字符串 但使用由arg
  • 深度解析转置卷积,理解转置卷积的原理

    参考文章 转置卷积 Transposed Convolution 太阳花的小绿豆的博客 CSDN博客 转置卷积 抽丝剥茧 带你理解转置卷积 反卷积 史丹利复合田的博客 CSDN博客 逆卷积和转置卷积 参考视频 转置卷积 transposed
  • 【Unity3D】回合制游戏

    回合制游戏一直在游戏史 至少是在中国的游戏历史上扮演很重要的角色 从仙剑到梦幻 这类游戏深受玩家喜爱 那么在Unity3D中怎么实现呢 下面用一个比较简单Unity3D的一对一回合制游戏来说明这个问题 其实也不难 关键是理清各个处理关系 如
  • Bootstarp学习教程(12) 导航组件

    导航 Bootstrap中可用的导航有相似的标记 用基类 nav开头 这是相似的部分 改变修饰类可以改变样式 标签页 注意 nav tabs类需要 nav基类
  • Mathematica学习笔记

    Mathematica学习笔记 mathematica 使用总结 1 基础知识 1 从1开始编号输入 Line 1 2 函数的另一种表达形式 1 2 3 4 5 6 7 8 MatrixForm 3 跳出死循环 如不小心进入死循环 可以采用
  • 软件设计师---数据库

    数据库 出题形式 概念数据模型 概念数据模型定义 概念数据模型常用术语 结构数据模型 关系模型 真题 三级模式结构 真题 两级映像 真题 关系模型的基本术语 关系 关系模式等 五个码 键 完整性约束 关系模式的定义 关系模式的组成 关系数据
  • 基于Android+OpenCV+CNN+Keras的智能手语数字实时翻译——深度学习算法应用(含Python、ipynb工程源码)+数据集(三)

    目录 前言 总体设计 系统整体结构图 系统流程图 运行环境 模块实现 1 数据预处理 2 数据增强 3 模型构建 4 模型训练及保存 1 模型训练 2 模型保存 5 模型评估 相关其它博客 工程源代码下载 其它资料下载 前言 本项目依赖于K
  • 简单洗牌(打乱52个随机生成的数字)

    代码如下 include
  • 操作系统学习(六)进程的基本知识

    一 程序和进程 程序 1 指令序列 2 程序段存放指令序列 数据段存放程序运行中的产生的数据 例如定义的变量 进程 1 程序的一次动态执行 进程的动态性 完成程序的并发执行 2 进程实体 进程映像 3 进程是进程实体的运行过程 是系统进行资
  • 基于卷积神经网络的脱机手写签名识别(Pytorch,Opencv,CNN)

    文章目录 前言 resnet18模型结构 resnet18实现代码 数据集 训练模型 项目结构 前言 最近做了一个手写签名识别的项目 即判断签名的真伪 使用的深度学习框架为Pytorch Opencv等等 数据集中共包含17个人的签名 使用
  • Double保留指定小数位数的五种方法

    方法一 方法一 public void test1 double d 0 3456789 BigDecimal bd new BigDecimal d double test1 bd setScale 2 BigDecimal ROUND
  • hyperledger fabric各版本更新内容

    fabric各版本文档 fabric各版本更新内容 fabric 最新版本 fabric2 5更新内容 fabric2 4更新内容 fabric2 3更新内容 fabric2 2更新内容 fabric2 1更新内容 fabric2 0更新内
  • Ansible中vars(变量)定义

    1 变量使用的原因 playbook的编写是使用yml的语法 虽然该语法规则较为简单 但是 同其他语法相同该语法也有变量 循环等机制的使用 变量的使用就是为了提高我们所写剧本的复用性 当某个参数更改时 直接更改变量的赋值 无需更改剧本中的每