当前位置: 首页 > 面试题库 >

从json输出中提取变量,然后使用ansible调试并注册outout

殳凯捷
2023-03-14
问题内容

嗨,我有一个问题,是在进行curl解析并注册回ansible后,要从json输出中提取变量之一

剧本:

- name: debug stdout
  debug: 
    msg: "{{ result.stdout | from_json }}"
  register: dataresult

- name: debug fact
  debug:
    msg: "{{ dataresult.data.start_time_string }}"

输出:

TASK [backup_api : debug stdout] 
***********************************************
task path: /home/ansible/cm-dha/roles/backup_api/tasks/main.yml:36
ok: [127.0.0.1] => {
   "msg": {
       "data": [
           {
            "backup_id": 40362,
            "certified": null,
            "instance_id": 148,
            "start_time": 1506985211,
            "start_time_string": "10/03/2017 03:00:11 am"
           }
       ],
      "timestamp": 1507022232
   }

}

错误:

致命的:[127.0.0.1]:失败!=> {“ failed”:true,“
msg”:“字段’args’的值无效,该值似乎包含未定义的变量。错误是:’dict object’没有属性’data’\ n \ n错误似乎出在“
/home/ansible/cm-
dha/roles/backup_api/tasks/main.yml”中:第48行第5列,但具体位置可能取决于文件中的语法问题。 \ n \
n出现问题的行似乎是:\ n \ n \ n-名称:调试事实\ n ^这里\ n“

尝试提取值start_time_string时发生错误

所以如何做可能是因为我尝试了很多事情,例如使用with_items,with_dict,模拟data []输出进行调试,甚至进行json查询,但都没有成功

所以这里有什么帮助吗?


问题答案:

不要使用debug分配事实,set_fact而是使用:

- name: debug stdout
  set_fact: 
    dataresult: "{{ result.stdout | from_json }}"

- name: debug fact
  debug:
    msg: "{{ dataresult.data[0].start_time_string }}"


 类似资料:
  • 问题内容: 我有以下两项艰巨的任务 用于获取计算机(Linux)中的接口列表并获取每个接口的总线地址。我在同一本剧本中还有另外一项任务,如下 我希望对var2的值进行迭代,然后打印总线号。 var2.results如下 我的目标是获取上述每个项目中stdout的值,例如(“ stdout”:“ 09:00.0”)。我试图给像 但这不能正确提供标准输出中的总线值。当第二个变量是and indexed

  • 我一直在挠头,不知道是否有人能给我一个指针。我将一些数据作为变量从JSON提取到PHP,当存在嵌套节点时,我可以做到这一点——如果节点是文本,而不是如果节点是数字。我使用的是json_decode,这与如何使用PHP从json中提取数据不同? 这是可以的 这不起作用 所以我的问题是,当节点是一个数字时,我如何瞄准它?谢啦

  • 我正在使用一个运行Javascript在页面上打印文本的页面源代码。这里是我所说的源代码的一个片段: 有什么建议吗?

  • 问题内容: 是否有可能使用php cli从用户那里获取输入,然后将输入转储到变量中,然后脚本继续进行。 就像c ++ 函数一样? 如果可以,那有可能吗?也许不仅是php,而且还有一些linux命令? 问题答案: 看看这个PHP手册页 http://php.net/manual/en/features.commandline.php 特别是

  • 问题内容: 我有一个合并语句,该语句应始终更新或插入单个记录。我想记住该语句在变量中的ID。看起来像这样: 现在这不起作用,因为您不能以这种方式在输出子句中设置@int。我知道我可以创建一个模板并在输出中使用 INTO @temptable 。但是由于我 知道 它始终是一条记录,因此我希望将ID包含在INT变量中。这有可能吗?还是我被迫使用表变量。我希望我只是缺少一些语法。 问题答案: 不,您必须

  • 我有这个api 这是存储在注册表中的json,媒体类型为application/json: 我想在调用api时读取json并输出它,但响应是: 原始内容是:“HTTP/1.1 200 OK主机:192.168.0.191:8280接受编码: gzip,收缩内容类型:应用程序/json;charset=UTF-8日期:周三,4月8日2020 12:00:19格林尼治标准时间传输编码:组块连接:保持A