相关疑难解决方法(0)

ansible json-query路径按内容选择项目

有谁知道在下面的示例JSON中可以使用什么json查询过滤器来选择Tigger的食物?JSON是大规模且相对复杂的AWS blob的简化替代.

一些背景:我很高兴发现Ansible有一个json查询过滤器.鉴于我试图从AWS JSON blob中选择一个元素,这看起来就像我需要的那样.但是我很快遇到了麻烦,因为AWS对象有标签,我需要按标签选择项目.我尝试了相当于Foods[Tags[(Key='For') & (Value='Tigger')]]和类似的选择器路径,但没有设法让它工作.使用独立的JSON-查询库如https://www.npmjs.com/package/json-query我可以使用parent属性,但是,这并不似乎是在Ansible,撇开是从核心理念的偏差JSON查询.

回避问题并使用jsonpath选择器可能会更好.jsonpath类似于json-query,是xpath的翻译.

{ "Foods" :
  [ { "Id": 456
    , "Tags":
      [ {"Key":"For", "Value":"Heffalump"}
      , {"Key":"Purpose", "Value":"Food"}
      ]
    }
  , { "Id": 678
    , "Tags":
      [ {"Key":"For", "Value":"Tigger"}
      , {"Key":"Purpose", "Value":"Food"}
      ]
    }
  , { "Id": 911
    , "Tags":
      [ {"Key":"For", "Value":"Roo"}
      , {"Key":"Purpose", "Value":"Food"}
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

非常感谢!

参考文献:

我想用json-query来标记这个问题,但是缺乏这样做的要点.

json ansible jmespath json-query

5
推荐指数
1
解决办法
2万
查看次数

Ansible - 将环境中的JSON字符串传递给shell模块

我试图在环境中传递JSON字符串.

- name: Start {{service_name}}
  shell: "<<starting springboot jar>> --server.port={{service_port}}\""
  environment:
    - SPRING_APPLICATION_JSON: '{"test-host.1":"{{test_host_1}}","test-host.2":"{{test_host_2}}"}'
Run Code Online (Sandbox Code Playgroud)

test_host_1是172.31.00.00

test_host_2是172.31.00.00

但是在spring日志中,我会在打印时获得JSON解析异常

Caused by: com.fasterxml.jackson.core.JsonParseException: Unexpected character (''' (code 39)): was expecting double-quote to start field name
 at [Source: {'test-host.1': '172.31.00.00', 'test-host.2': '172.31.00.00'}; line: 1, column: 3]
Run Code Online (Sandbox Code Playgroud)

如图所示,双引号转换为单引号!

我试图逃避双引号但没有运气.

知道为什么会这样,或者任何解决方法吗?

json ansible

4
推荐指数
2
解决办法
5196
查看次数

Ansible - 是否可以注册多个变量?

我有一个 python 脚本,它正在返回/打印两个列表。

测试文件

def getHosts():
        Pool1=[x.x.x.x, x.x.x.x]
        Pool2=[x.x.x.x, x.x.x.x]
        Print pool1,pool2
        Return pool1,pool2

getHosts()
Run Code Online (Sandbox Code Playgroud)

我的剧本看起来像:

     -task:
      name: get the hosts
      command: /test.py
      register: result
Run Code Online (Sandbox Code Playgroud)

现在,是否可以从注册变量 result 中分别取出 pool1 和 pool2 ?如果是,请给我举个例子。

任何帮助或建议将不胜感激。

ansible ansible-2.x

0
推荐指数
1
解决办法
1993
查看次数

标签 统计

ansible ×3

json ×2

ansible-2.x ×1

jmespath ×1

json-query ×1