当前位置: 首页 > news >正文

Ansible的变量(vars,register,set_fact)

环境

  • 控制节点:Ubuntu 22.04
  • Ansible 2.10.8
  • 管理节点:CentOS 8

概述

  • vars :Ansible关键字,用在play、role、block、task上
  • register :Ansible关键字,用在task上。注意它是一个返回值,可能需要用到其stdout
  • set_fact :即 ansible.builtin.set_fact ,是Ansible的module

创建文件 test1.yml 如下:

---
- hosts: alltasks:- name: task1vars:var1: "aaa"debug:msg: "var1 = {{ var1 }}"- name: task2block:- name: part1shell: echo "bbb"register: var2- name: part2debug:msg: "var2 = {{ var2.stdout }}"- name: task3block:- name: part1set_fact:var3: "ccc"- name: part2debug:msg: "var3 = {{ var3 }}"

运行结果如下:

➜  temp1113 ansible-playbook test1.ymlPLAY [all] *****************************************************************************************TASK [Gathering Facts] *****************************************************************************
ok: [192.168.1.55]TASK [task1] ***************************************************************************************
ok: [192.168.1.55] => {"msg": "var1 = aaa"
}TASK [part1] ***************************************************************************************
changed: [192.168.1.55]TASK [part2] ***************************************************************************************
ok: [192.168.1.55] => {"msg": "var2 = bbb"
}TASK [part1] ***************************************************************************************
ok: [192.168.1.55]TASK [part2] ***************************************************************************************
ok: [192.168.1.55] => {"msg": "var3 = ccc"
}PLAY RECAP *****************************************************************************************
192.168.1.55               : ok=6    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

可见,三者都可以当作变量来使用。

注意: set_fact 定义的变量,并没有真正出现在 ansible_facts 中,只是效果相同。想要验证的话,可以打印出 ansible_facts

      debug:#msg: "{{ ansible_facts['hostname'] }}" # 只打印某一项msg: "{{ ansible_facts }}"

区别

作用域

vars 定义的变量,只在当前作用域有效( vars 可应用于play、role、block、task)。

registerset_fact 定义的变量,在之后的task和play,仍然有效。

创建文件 test2.yml ,在 test1.yml 基础上追加一个task:

    - name: task4debug:msg: "var2 = {{ var2.stdout }}, var1 = {{ var3 }}"

运行结果如下:

......
TASK [task4] ***************************************************************************************
ok: [192.168.1.55] => {"msg": "var2 = bbb, var1 = ccc"
}
......

创建文件 test3.yml ,在 test2.yml 基础上追加一个play:

- hosts: alltasks:- name: task5debug:msg: "var2 = {{ var2.stdout }}, var1 = {{ var3 }}"

运行结果如下:

......
PLAY [all] *****************************************************************************************TASK [Gathering Facts] *****************************************************************************
ok: [192.168.1.55]TASK [task5] ***************************************************************************************
ok: [192.168.1.55] => {"msg": "var2 = bbb, var1 = ccc"
}
......

可见, registerset_fact 所定义的变量,在之后的task和play仍然有效。

参考

  • https://docs.ansible.com/ansible/latest/reference_appendices/playbooks_keywords.html#playbook-keywords
  • https://docs.ansible.com/ansible/latest/collections/ansible/builtin/set_fact_module.html

相关文章:

  • pandas读写json的知识点
  • docker/ nvidia-docker
  • Postman小白安装和注册入门教程
  • HCIP---OSPF思维导图
  • 内存管理
  • 基于ubuntu22.04手动安装openstack——2023.2版本(最新版)的问题汇总
  • Redis 和 Mysql 如何保证数据一致性
  • 假冒 Skype 应用程序网络钓鱼分析
  • C语言--每日五道选择题--Day6
  • WPF ToggleButton 主题切换动画按钮
  • TensorRT安装部署指南(Windows10)
  • 采集Prestashop独立站采集Prestashop独立站
  • 【数据结构】树与二叉树(十一):二叉树的层次遍历(算法LevelOrder)
  • S7-1200PLC和SMART PLC开放式以太网通信(UDP双向通信)
  • 多个微信快速同步发圈
  • 2019.2.20 c++ 知识梳理
  • CSS3 变换
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • Docker下部署自己的LNMP工作环境
  • js操作时间(持续更新)
  • leetcode386. Lexicographical Numbers
  • Python - 闭包Closure
  • Quartz初级教程
  • vue 配置sass、scss全局变量
  • vue--为什么data属性必须是一个函数
  • 安卓应用性能调试和优化经验分享
  • 动态规划入门(以爬楼梯为例)
  • 关于extract.autodesk.io的一些说明
  • 检测对象或数组
  • 使用parted解决大于2T的磁盘分区
  • 协程
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 积累各种好的链接
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​​​​​​​​​​​​​​Γ函数
  • ​学习一下,什么是预包装食品?​
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • (20050108)又读《平凡的世界》
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (待修改)PyG安装步骤
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (转)EXC_BREAKPOINT僵尸错误
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .net中生成excel后调整宽度
  • .pop ----remove 删除
  • 。Net下Windows服务程序开发疑惑
  • @font-face 用字体画图标
  • [28期] lamp兄弟连28期学员手册,请大家务必看一下
  • [3300万人的聊天室] 作为产品的上游公司该如何?
  • [AIGC] Java 和 Kotlin 的区别