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

相关文章

Java 接口定义变量的示例代码

《Java接口定义变量的示例代码》文章介绍了Java接口中的变量和方法,接口中的变量必须是publicstaticfinal的,用于定义常量,而方法默认是publicabstract的,必须由实现类... 在 Java 中,接口是一种抽象类型,用于定义类必须实现的方法。接口可以包含常量和方法,但不能包含实例

Java实现字符串大小写转换的常用方法

《Java实现字符串大小写转换的常用方法》在Java中,字符串大小写转换是文本处理的核心操作之一,Java提供了多种灵活的方式来实现大小写转换,适用于不同场景和需求,本文将全面解析大小写转换的各种方法... 目录前言核心转换方法1.String类的基础方法2. 考虑区域设置的转换3. 字符级别的转换高级转换

Python使用Matplotlib和Seaborn绘制常用图表的技巧

《Python使用Matplotlib和Seaborn绘制常用图表的技巧》Python作为数据科学领域的明星语言,拥有强大且丰富的可视化库,其中最著名的莫过于Matplotlib和Seaborn,本篇... 目录1. 引言:数据可视化的力量2. 前置知识与环境准备2.1. 必备知识2.2. 安装所需库2.3

MyBatis配置文件中最常用的设置

《MyBatis配置文件中最常用的设置》文章主要介绍了MyBatis配置的优化方法,包括引用外部的properties配置文件、配置外置以实现环境解耦、配置文件中最常用的6个核心设置以及三种常用的Ma... 目录MyBATis配置优化mybatis的配置中引用外部的propertis配置文件⚠️ 注意事项X

一文详解Java常用包有哪些

《一文详解Java常用包有哪些》包是Java语言提供的一种确保类名唯一性的机制,是类的一种组织和管理方式、是一组功能相似或相关的类或接口的集合,:本文主要介绍Java常用包有哪些的相关资料,需要的... 目录Java.langjava.utiljava.netjava.iojava.testjava.sql

Springmvc常用的注解代码示例

《Springmvc常用的注解代码示例》本文介绍了SpringMVC中常用的控制器和请求映射注解,包括@Controller、@RequestMapping等,以及请求参数绑定注解,如@Request... 目录一、控制器与请求映射注解二、请求参数绑定注解三、其他常用注解(扩展)四、注解使用注意事项一、控制

Nginx内置变量应用场景分析

《Nginx内置变量应用场景分析》Nginx内置变量速查表,涵盖请求URI、客户端信息、服务器信息、文件路径、响应与性能等类别,这篇文章给大家介绍Nginx内置变量应用场景分析,感兴趣的朋友跟随小编一... 目录1. Nginx 内置变量速查表2. 核心变量详解与应用场景3. 实际应用举例4. 注意事项Ng

前端Visual Studio Code安装配置教程之下载、汉化、常用组件及基本操作

《前端VisualStudioCode安装配置教程之下载、汉化、常用组件及基本操作》VisualStudioCode是微软推出的一个强大的代码编辑器,功能强大,操作简单便捷,还有着良好的用户界面,... 目录一、Visual Studio Code下载二、汉化三、常用组件1、Auto Rename Tag2

C# 空值处理运算符??、?. 及其它常用符号

《C#空值处理运算符??、?.及其它常用符号》本文主要介绍了C#空值处理运算符??、?.及其它常用符号,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录一、核心运算符:直接解决空值问题1.??空合并运算符2.?.空条件运算符二、辅助运算符:扩展空值处理

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc