如何从Ansible输出中提取指定的access_token值?
如何从Ansible的curl输出中提取access_token?
嘿,我来帮你解决这个问题!从你提供的Playbook和输出结果来看,curl返回的是标准JSON格式的数据,所以有两种很方便的方式可以提取出access_token的值,下面给你一步步说明:
方法一:用Ansible内置的JSON过滤器(推荐)
Ansible本身就支持处理JSON数据,不需要额外安装工具。你可以利用from_json把curl返回的字符串转换成JSON对象,再用json_query(基于JMESPath语法)提取指定字段。
修改你的Playbook里的debug任务,替换成下面的内容就行:
- name: 提取并打印access_token debug: msg: "获取到的access_token: {{ token_details.stdout | from_json | json_query('access_token') }}"
简单解释:
token_details.stdout是curl返回的原始JSON字符串from_json过滤器把字符串解析成Ansible可以处理的JSON字典json_query('access_token')则从JSON字典里直接取出access_token字段的值
方法二:用jq工具在shell命令中直接处理
如果目标机器上已经安装了jq(一款轻量的JSON处理命令行工具),你可以直接在curl命令后通过管道处理结果,这样register的变量直接就是access_token的值:
修改你的发送OAuth认证信息任务:
- name: 发送OAuth认证信息并提取access_token shell: | curl -X POST \ '{{mlp_uaa}}' \ -H 'content-type: application/x-www-form-urlencoded' \ -d 'client_id={{tenantname}}&client_secret={{tenantsecret}}' | jq -r '.access_token' register: access_token - name: 打印提取到的access_token debug: var: access_token.stdout
简单解释:
jq -r '.access_token'中的-r参数表示返回原始字符串(不带引号),直接拿到纯净的token值- 这样
access_token.stdout里就直接存储了我们需要的access_token,不需要再额外处理
两种方法都能达到目的,如果你不想依赖第三方工具,优先选方法一;如果习惯用命令行工具处理JSON,方法二更直接。
内容的提问来源于stack exchange,提问作者Foudel
相关产品推荐
相关产品推荐

