在最后一次出现JSON键值的字符后删除字符

时间:2019-01-02 22:26:11

标签: ansible yaml json-query

我正在尝试使用ansible剧本自动化部署并调用lambda函数。为了获得lambda函数的信息,我编写了一个json查询。但是在这里,我只需要arn(arn:aws:lambda:us-west-2:1234567890:function:dev-Hello-World),但是Ansible脚本会生成带有版本号的arn(arn:aws:lambda:us-west- 2:1234567890:function:dev-Hello-World:50)。我使用set_fact和json查询来获取arn。但是,我想最后删除版本号和冒号。

我尝试使用正则表达式并替换以删除字符串。我是JSON和编程新手。

- name: Get the Hello-world arn
  set_fact:
    populate_arn: "{{ Hello-World | json_query('results[0].configuration.function_arn')}}"

- debug:
    var: populate_arn

预期结果:arn:aws:lambda:us-west-2:1234567890:function:dev-Hello-World

实际结果:arn:aws:lambda:us-west-2:1234567890:function:dev-Hello-World:50

1 个答案:

答案 0 :(得分:0)

首先,从the Lambda API documentation可以看出,ARN是该函数的正确,稳定的标识符。如果删除:50限定词,则将得到:$LATEST的任何内容,它们绝对会产生错误的结果

也就是说,json_query的输出只是一个字符串,因此您可以使用regex_replace继续您的jinja2管道以剥离限定符:

- set_fact:
    populate_arn: "{{ Hello-World | json_query('results[0].configuration.function_arn') | regex_replace(':[^:]+$', '') }}"