Ansible常用变量【下】

2024-05-14 06:20
文章标签 变量 常用 ansible

本文主要是介绍Ansible常用变量【下】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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


前言

在上一篇文章《Ansible常用变量【上】》中,学习了Ansible常用变量的前半部分,放了个五一假,继续学习Ansible常用变量的后半部分:

1. 模版中使用变量——在模版文件中使用自定义变量和系统变量;

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

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

1. 模版中使用变量

在template模版文件中使用变量可以使用Facts系统变量,也可以使用用户自定义的变量。

1.1 在模版文件中引用系统变量

1)创建一个jinja2文件:

[root@test101 ansible-test]# cat template.vars-test.j2
my ip is: {{ ansible_host }}
my hostname is: {{ ansible_nodename }}
[root@test101 ansible-test]# 

2)创建yaml文件:

[root@test101 ansible-test]# cat test.yaml
---
- name: Example Playbook with Template(Fcts)hosts: allgather_facts: yes  #使用的系统变量,这里需要设置为yesvars:ip: "ip"hostname: "hostname"tasks:- name: description of hosttemplate:src: template.vars-test.j2dest: /tmp/host.txt
[root@test101 ansible-test]#

3)执行playbook:

ansible-playbook test.yaml

执行效果:

1.2 在模板文件中使用自定义变量

在模版文件中也可以使用自定义变量,例如:

1)创建一个j2文件:

[root@test101 ansible-test]# cat template.vars-test.j2
name: "sre"
age: "18"
other:height: "155"hobby: "work"
[root@test101 ansible-test]#

2)创建一个yaml文件:

[root@test101 ansible-test]# cat test.yaml
---
- name: Example Playbook with Templatehosts: allgather_facts: novars:name: "name"age: "age"other:height: "height"hobby: "hobby"tasks:- name: description of sretemplate:src: template.vars-test.j2dest: /tmp/sre.txt
[root@test101 ansible-test]#

3)执行文件:

ansible-playbook test.yaml

执行效果:

2. 注册变量

有些场景下会需要把执行结果注册到变量中,然后在后面的任务中可调用,这时候就需使用关键字register。

例如,创建一个yaml:

[root@test101 ansible-test]# cat test.yaml 
---
- name: Ansible playbook with registered variablehosts: allgather_facts: notasks:- name: my testshell: echo "This is SRE's test"register: my_test_output- name: echo the result of "my test"debug:msg: "The output of 'my test' was '{{ my_test_output.stdout }}.'"
[root@test101 ansible-test]#

执行命令:

ansible-playbook test.yaml

执行效果:

3. 额外变量

有时为了让playbook的使用更加灵活,更具有通用性,会允许用户在执行playbook的时候传入变量的值,这时候就需要用到“额外变量”。

3.1 无初始值自定义变量

有时候在yaml文件中只定义变量,没有默认值,等待用户执行yaml时传参。

例如,创建一个yaml文件:

[root@test101 ansible-test]# cat test.yaml 
---
- name: my custom_variable testhosts: "{{ hosts }}"  #设置第一个变量gather_facts: novars:custom_variable: "{{ custom_command_variable }}"   #设置第二个变量tasks:- name: echo variable msgdebug:msg: "{{ custom_variable }}"
[root@test101 ansible-test]#

传参执行yaml,有三种方式:

① 普通格式传参执行:

ansible-playbook test.yaml --extra-vars "hosts=all custom_command_variable='this is a test of custom variable'"

② 使用json格式传参执行:

ansible-playbook test.yaml --extra-vars "{'hosts':'all', 'custom_command_variable':'this is a test of custom variable'}"  

③ 将参数放在文件中引用传参执行:

[root@test101 ansible-test]# ll
total 8
-rw-r--r-- 1 root root 229 May 11 08:49 test.yaml
-rw-r--r-- 1 root root  85 May 11 08:57 vars-test.json   #创建参数json文件
[root@test101 ansible-test]# 
[root@test101 ansible-test]# cat vars-test.json    #文件内容
{"hosts":"all","custom_command_variable":"this is a test of custom variable"
}
[root@test101 ansible-test]# 
[root@test101 ansible-test]# ansible-playbook test.yaml --extra-vars "@vars-test.json"   #执行命令引用文件传参

执行结果:

3.2 用传参覆盖变量原有值

有些场景下定义了变量之后,会给变量设置一个初始值,这时候如果再传参进去,就会将原有的初始值覆盖掉。

例如,创建一个yaml文件:

[root@test101 ansible-test]# cat test.yaml 
---
- name: Test playbook with custom variableshosts: allgather_facts: novars:custom_message: "Hello, SRE"  #设置参数值tasks:- name: Display custom messagedebug:msg: "{{ custom_message }}"  #参数调用
[root@test101 ansible-test]#

传参执行yaml文件:

ansible-playbook test.yaml  --extra-vars "custom_message='This is a new message'

执行效果:

最后打印的不是变量的初始值,而是执行yaml时传进去的参数值。但如果在模板文件中,j2文件中的变量值优先级会高于执行命令时传的参数。

3.3 在模板文件中使用额外变量

1)创建一个jinja2文件:

[root@test101 ansible-test]# cat template.vars-test.j2 
name: {{ name }}
age: {{ age }}
other:height: {{ height }}hobby: {{ hobby }}
[root@test101 ansible-test]#

2)创建一个执行的yaml文件:

[root@test101 ansible-test]# cat test.yaml 
---
- name: Example Playbook with Templatehosts: allgather_facts: novars:name: "name"age: "age"other:height: "height"hobby: "hobby"tasks:- name: description of sretemplate:src: template.vars-test.j2dest: /tmp/sre.txt
[root@test101 ansible-test]#

3)执行yaml文件:

ansible-playbook test.yaml --extra-vars "name=sre age=18 height=155 hobby=work"

执行效果:

感谢您的喜爱与分享!

这篇关于Ansible常用变量【下】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/987983

相关文章

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

GO语言短变量声明的实现示例

《GO语言短变量声明的实现示例》在Go语言中,短变量声明是一种简洁的变量声明方式,使用:=运算符,可以自动推断变量类型,下面就来具体介绍一下如何使用,感兴趣的可以了解一下... 目录基本语法功能特点与var的区别适用场景注意事项基本语法variableName := value功能特点1、自动类型推

Java Stream流以及常用方法操作实例

《JavaStream流以及常用方法操作实例》Stream是对Java中集合的一种增强方式,使用它可以将集合的处理过程变得更加简洁、高效和易读,:本文主要介绍JavaStream流以及常用方法... 目录一、Stream流是什么?二、stream的操作2.1、stream流创建2.2、stream的使用2.

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

MySQL字符串常用函数详解

《MySQL字符串常用函数详解》本文给大家介绍MySQL字符串常用函数,本文结合实例代码给大家介绍的非常详细,对大家学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql字符串常用函数一、获取二、大小写转换三、拼接四、截取五、比较、反转、替换六、去空白、填充MySQL字符串常用函数一、

Java中Arrays类和Collections类常用方法示例详解

《Java中Arrays类和Collections类常用方法示例详解》本文总结了Java中Arrays和Collections类的常用方法,涵盖数组填充、排序、搜索、复制、列表转换等操作,帮助开发者高... 目录Arrays.fill()相关用法Arrays.toString()Arrays.sort()A