news 2026/1/8 20:16:48

Ansible变量定义以及引用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ansible变量定义以及引用

文章目录

      • 变量定义规则
      • 变量的调试
      • Inventory中定义变量
        • Var定义变量
        • Var_files引入变量文件
        • 注册变量register
        • fact变量
        • lookup变量
        • 魔法变量

ansible中是支持使用变量的,进行存储整个项目中会使用到的一些值

变量定义规则

1、变量的名称必须使用字母开头

2、由字母 数字 下划线组成

3、ansible内置的关键字是不可以作为变量名

变量的调试

引用变量需要知道变量包含哪些信息,对变量做处理,使用debug模块可以进行调试变量输出

#常用的参数有msg:调试输出的信息 var:把某个变量传递给debug debug会直接打印输出,不可以和msg共用 案例###编写剧本[root@m01 http]# cat debug.yml- name: debug hosts: nfs tasks: - name: debug debug: msg:"This is debug message!"###验证[root@m01 http]# ansible-playbook debug.ymlPLAY[debug]****************************************************************************************************************************************************** TASK[Gathering Facts]******************************************************************************************************************************************** ok:[nfs]TASK[debug]****************************************************************************************************************************************************** ok:[nfs]=>{"msg":"This is debug message!"}PLAY RECAP ******************************************************************************************************************************************************** nfs:ok=2changed=0unreachable=0failed=0skipped=0rescued=0ignored=0

Inventory中定义变量

此变量的定义就是使用的ansible.cfg配置文件中的选项,在前面添加ansible_就会变成内置的变量,内置变量比ansible.cfg配置文件中更高的优先级,可以针对不同的主机定义不同的值

写在hosts的文件里面的变量每一个playbook都支持引用,单个在playbook里面的的var定义的变量只能在当前剧本使用

#配置文件中的值[defaults]# some basic default values...#inventory = /etc/ansible/hosts #自定义配置的主机文件路径#library = /usr/share/my_modules/#sudo_user = root #设置提权用户#ask_sudo_pass = True #提权用户密码#ask_pass = True #是否进行使用密码的方式#transport = smart#remote_port = 22#module_lang = C#module_set_locale = False#怎么进行定义主机和主机组的变量?写在主机的配置文件中,/etc/ansible/hosts[root@m01 http]# tail -5 /etc/ansible/hosts[test]nfs[test:vars]abc=nginx#定义的变量怎么进行引用?在写playbook的时候使用debug进行引用[root@m01 http]# ansible-playbook debug.ymlPLAY[debug]******************************************************************* TASK[Gathering Facts]********************************************************* ok:[nfs]TASK[debug]******************************************************************* ok:[nfs]=>{"msg":"nginx"}PLAY RECAP ********************************************************************* nfs:ok=2changed=0unreachable=0failed=0skipped=0rescued=0ignored=0
Var定义变量

var可以在写playbook的时候直接进行定义变量,将下面play任务中会使用到的变量提前进行定义

语法为

vars:

变量 变量
设置httpd为变量,使用playbook进行启动#写剧本[root@m01 http]# cat var.yml- name: var hosts: nfs vars: fuwu: httpd tasks: - name: start httpd systemd: name:"{{fuwu}}"state: started enabled:yes##执行剧本[root@m01 http]# ansible-playbook var.ymlPLAY[var]********************************************************************* TASK[Gathering Facts]********************************************************* ok:[nfs]TASK[start httpd]************************************************************* changed:[nfs]PLAY RECAP ********************************************************************* nfs:ok=2changed=1unreachable=0failed=0skipped=0rescued=0ignored=0
Var_files引入变量文件

当需要使用多个参数做为变量进行使用的时候,可以创建变量文件,使用var_file进行引入

#创建变量文件,变量定义的格式均是使用冒号键值对进行出现的,键值对之间可以进行嵌套组成大字典[root@m01 http]# cat user_vars.ymlusers: bjones: first_name: Bob last_name: Jones home_dirs: /users/bjones acook: first_name: Anne last_name: Cook home_dirs: /users/acook 编写playbook进行引用1、我要获取到bjones的lastname和acook的first_name#编写剧本 ###注意使用debug参数的msg进行输出内容,msg只能出现一次,不然也只会执行最后一个msg的内容,可以使用,写多参数[root@m01 http]# cat var.yml- name: var hosts: nfs vars_files: - /http/user_vars.yml tasks: - name: debug debug: msg:"{{users.bjones.last_name}},{{users.acook.first_name}}"##验证[root@m01 http]# ansible-playbook var.ymlPLAY[var]********************************************************************* TASK[Gathering Facts]********************************************************* ok:[nfs]TASK[debug]******************************************************************* ok:[nfs]=>{"msg":"Jones,Anne"}PLAY RECAP ********************************************************************* nfs:ok=2changed=0unreachable=0failed=0skipped=0rescued=0ignored=0
注册变量register

注册变量是 Ansible 中的<font style="color:rgba(0, 0, 0, 0.85);">register</font>关键字,它的核心作用是:把一个任务的完整执行结果(包括输出内容、返回码、执行状态等)保存到一个自定义的变量中,供后续的任务调用和判断使用

#案例,查看磁盘空间并且使用debug模块将数据调用出来[root@m01 http]# cat register.yml- name: register hosts: nfs tasks: - name: shell shell: cmd:df-Th register: cipan - name: debug debug: msg:"{{cipan}}"
fact变量

fact是内置变量,不需要定义,直接调用即可,模块setup,可以进行获取远程主机的相关信息,并且可以将信息作为变量进行调用,setup模块依赖的方法就是fact,返回的数据是JSON格式

setup模块是怎么进行调用的1、查看所有的fact信息[root@m01 http]# ansible nfs -m setup #显示的所有关键字段都是可以进行直接调用的变量2、查看网卡信息 ansible nfs -m setup -a'filter=ansible_ens33'3、查看主机内存信息[root@m01 http]# ansible nfs -m setup -a 'filter=ansible_*_mb'nfs|SUCCESS=>{"ansible_facts":{"ansible_memfree_mb":1209,"ansible_memory_mb":{"nocache":{"free":1660,"used":320},"real":{"free":1209,"total":1980,"used":771},"swap":{"cached":0,"free":2047,"total":2047,"used":0}},"ansible_memtotal_mb":1980,"ansible_swapfree_mb":2047,"ansible_swaptotal_mb":2047,"discovered_interpreter_python":"/usr/bin/python"},"changed":false}4、将查到的setup变量保存在test.txt文件方便查询[root@m01 http]# ansible nfs -m setup > /tmp/test.txt5、开启或者关闭fact 语法 - hosts:test gather_facts:false#关闭,默认是开启的tasks: - name:testsetup6、进行自定义fact 除了ansible的内置变量之外还支持进行为某主机定制fact,配置文件写在/etc/ansible/facts.d/目录下 文件是ini或者json格式ansible会自动识别, ini格式的fact文件。定义的语法如下[general]package=httpdservice=httpd state=started 创建好文件之后需要把这个fact文推送到对应被控端,因为这个是在本地定义的1、编写剧本,把fact文件使用copy模块复制过去 copy src:fact文件路径 dest:/etc/ansible/facts.d 【没有这个目录就先创建】2、执行剧本\完成fact推送3、查看是否设置成功 ansible 主机 -m setup -a ‘filter=ansible_local’ general即为变量 在playbook里面进行调用是使用.连接不同的层级,找到对应的变量,例如 ansible_local.custom.general.package ansible_local是必须要写的,因为定义的是本地变量 custom 是定义的fact的文件名字 general.package 文件里面定义的变量层级 找到自己想要的变量7、使用set_fact 模块定义新的变量 是直接在编写的playbook中进行定义,可以把不同的变量组合起来 案例: 编写playbook[root@m01 http]# cat set.yml- name:setvar hosts: nfs tasks: - name:setset_fact: version:"{{ ansible_distribution }}-{{ansible_distribution_version }}"- name: debug debug: msg:"{{ version }}"#执行具备[root@m01 http]# ansible-playbook set.ymlPLAY[set var]***************************************************************** TASK[Gathering Facts]********************************************************* ok:[nfs]TASK[set]********************************************************************* ok:[nfs]TASK[debug]******************************************************************* ok:[nfs]=>{"msg":"CentOS-7.7"}PLAY RECAP ********************************************************************* nfs:ok=3changed=0unreachable=0failed=0skipped=0rescued=0ignored=0
lookup变量

在需要将文本文件或.csv文件和直接获取某些命令的输出作为变量的时候,就需要使用lookup插件进行读取配置数据,注意lookup获取的变量是来自主控的

#使用lookup生成变量的方法语法: 定义的变量名字:“{{lookup(‘使用哪种方式','获取的参数') }}” 1、file 使用file可以从文本文件中进行获取数据,在task或者jinja2的模块里面进行引用 #获取ssh公钥并且生成变量案例 - hosts: nfs set_fact: key_conntent:"{{lookup('file','/root/.ssh/id_rsa_pub')}}" - name: debug: msg: “{{keycontent}}” 2、pipe 使用pipe可以直接调用外部命令,并且将命令执行的结果打印为标准输出 set_fact: time: "{{lookup('pipe','date+%Y%M%d%H%M%S')}}" 3、env 获取主机上某个环境变量 #获取被控端的jar环境变量 - name:jar debug: msg: "{{lookup('env','JAVA_HOME')}}"
魔法变量

ansible默认会进行提供一下内置的变量实现一些特定的功能

1、hostvar 获取指定主机的变量,例如想获取对应
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/4 4:23:12

Postcat终极指南:5分钟快速上手的开源API工具

Postcat终极指南&#xff1a;5分钟快速上手的开源API工具 【免费下载链接】postcat Postcat 是一个可扩展的 API 工具平台。集合基础的 API 管理和测试功能&#xff0c;并且可以通过插件简化你的 API 开发工作&#xff0c;让你可以更快更好地创建 API。An extensible API tool.…

作者头像 李华
网站建设 2026/1/5 20:27:32

桌面宠物终极选择:BongoCat与Bongo-Cat-Mver的5分钟快速对比指南

桌面宠物终极选择&#xff1a;BongoCat与Bongo-Cat-Mver的5分钟快速对比指南 【免费下载链接】BongoCat 让呆萌可爱的 Bongo Cat 陪伴你的键盘敲击与鼠标操作&#xff0c;每一次输入都充满趣味与活力&#xff01; 项目地址: https://gitcode.com/gh_mirrors/bong/BongoCat …

作者头像 李华
网站建设 2026/1/3 15:39:54

3种方法彻底解决QtScrcpy投屏画质模糊问题

3种方法彻底解决QtScrcpy投屏画质模糊问题 【免费下载链接】QtScrcpy Android实时投屏软件&#xff0c;此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScrcpy 还在为手机投屏时文…

作者头像 李华
网站建设 2026/1/4 9:29:49

MFC网络地址控件(Net Address Control)完全指南

一、控件概述 MFC网络地址控件(Net Address Control)是Windows Vista及更高版本中引入的专用控件,用于输入和验证网络地址。该控件继承自CEdit类,外观与普通编辑框相似,但提供了强大的网络地址验证功能,支持IPv4、IPv6地址以及主机名的输入和格式验证。 核心特性: 支持…

作者头像 李华
网站建设 2026/1/7 12:20:55

测试用例设计:边界值分析实战

在软件测试领域&#xff0c;边界值分析&#xff08;Boundary Value Analysis&#xff09;作为最经典的黑盒测试方法之一&#xff0c;始终保持着极高的实用价值。统计表明&#xff0c;超过70%的软件缺陷集中在输入域的边界区域&#xff0c;这使得边界值分析成为每个测试人员必须…

作者头像 李华
网站建设 2026/1/6 12:43:59

如何快速掌握Nanonets-OCR2:智能文档转换的完整实践指南

如何快速掌握Nanonets-OCR2&#xff1a;智能文档转换的完整实践指南 【免费下载链接】Nanonets-OCR2-1.5B-exp 项目地址: https://ai.gitcode.com/hf_mirrors/nanonets/Nanonets-OCR2-1.5B-exp 在数字化工作日益普及的今天&#xff0c;Nanonets-OCR2作为一款开源智能OC…

作者头像 李华