如何从ansible注册变量的stdout中检索值?

如何从ansible注册变量的stdout中检索值?,ansible,jinja2,Ansible,Jinja2,我的ansible游戏之一是使用shell模块创建vault令牌。该命令返回一些我希望在下一个游戏中使用的值。 我在vault_输出参数中注册了命令输出。这里我从该变量获取标准输出 "vault_output.stdout": { "auth": { "accessor": "XXXXXXXXXXXXXXXXXXX", "client_token": "abcdefghijkl", "entity_i

我的ansible游戏之一是使用shell模块创建vault令牌。该命令返回一些我希望在下一个游戏中使用的值。 我在vault_输出参数中注册了命令输出。这里我从该变量获取标准输出

    "vault_output.stdout": {
        "auth": {
            "accessor": "XXXXXXXXXXXXXXXXXXX",
            "client_token": "abcdefghijkl",
            "entity_id": "XXXXXXXXXXXXXXXXXXX",
            "lease_duration": 600,
            "metadata": {
                "username": "vault"
            },
            "policies": [
                "default",

            ],
            "renewable": true,
            "token_policies": [
                "default",

            ]
        },
        "data": {},
        "lease_duration": 0,
        "lease_id": "",
        "renewable": false,
        "request_id": "3470a160-3ed5-ceaa-f57b-4f3d74f6a269",
        "warnings": null,
        "wrap_info": null
    }
}
我希望获得客户_代币的价值,该代币应为abcdefghijkl。有人能帮我得到那个值吗?它可以在下一场比赛中使用

我尝试过使用vault\u output.stdout[num]、vault\u output.stdout\u行、vault\u output.stdout.auth、vault\u output.stdout。['auth']但没有成功

预期结果:
“客户端令牌”:“abcdefghijkl”

调试:var=vault\u output.stdout的输出实际上有点误导。变量不包含dict对象Ansible can索引。您需要首先使用来自_json的
过滤器对其进行解析:

    - set_fact:
        result: "{{ vault_output.stdout | from_json }}"

    - debug:
        var: result.auth.client_token

终于找到了答案

- set_fact:
    result: "{{ (vault_output.stdout | from_json).auth.client_token }}"

- debug: 
    var: result

结果:9fa7fdd6-c8da-ac8c-b5d8-df18b17eb3f0

请尝试
vault\u输出.stdout['auth']['client\u token']
。这不起作用:(
vault\u输出.stdout['auth']['client\u token']:”变量没有定义!
我不知道为什么,但是注册一个
shell
任务的结果,并没有给我像你一样的json。你有一些特殊的字段,比如
auth
data
lease\u duration
等等,它们似乎不是来自shell模块。如果你能添加导致这个注册输出的代码,也许会help@MilindDhoke;如果您看到“变量未定义!”则说明您的代码有问题。请仔细检查语法或发布代码。@ilias sp`-name:Generating Vault Auth Token shell:| curl-sSfL--request post--data“{\”password\:\“{ansible\u ssh\u pass}}\”\:{{Vault\u server\u port}/v1/auth/ldap/login/{ansible\u ssh\u user}register:vault\u output`这个解决方案也不走运。我在结果变量中得到了标准输出,但在调用result.auth.client\u令牌时,ansible错误作为未定义的变量输出。结果变量的赋值如下:``ok:[xyz.com]=>{“result”:{u'lease_id':u'',u'warning':无,u'wrap_info':无,u'auth':{u'token_policies':[u'default',u'sec-development'],u'entity_id':u'a31cbee0-aee2-f021-b908-42191dffc8f4',u'lease_-duration':600,u'policies':[u'default',',u'sec-development'],u'client_token':u'eda50b75-529b-ecb9-9180-1beb1ea13f97',u'accessor':u'9191b082-c5f6-55c0-a759-c84be285ffe7',u'renewable':True,u'request_id':u'40f65b3f-cc17-f090-444e-2a9dfab158af',u'data':{},u'renewable':False}}}` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `“未定义变量!”:“ansible.utils.unsafe\u proxy.AnsibleUnsafeText对象”没有属性“client\u token”