Установка факта из json с дефисами

#json #ansible

Вопрос:

У меня есть json, исходящий из такого API, как этот —

 {
    "Clusters": {
        "cluster_name": "cluster1",
        "desired_configs": {
            "ams-env": {
                "tag": "15646576543547354",
                "version": 2
            },
            "ams-grafana-env": {
                "tag": "156765743275788",
                "version": 2
            },
            "ams-grafana-ini": {
                "tag": "987657435754385457",
                "version": 2
            }
        }
    }
}
 

И мне нужно разобрать его с помощью ansible. Проблема в том, что переменная, которая будет передана, — это часть с дефисами.

Я могу напечатать имя тега debug: var , но я не могу превратить его в факт, и я также не могу заставить его печатать, когда я использую debug: msg

Это игра — я хотел бы взять «тег» для того config_name , что передается во время выполнения, и создать новый var, который будет передан в более поздние задачи

 - name: Parsing Json
  hosts: localhost
  connection: local
  tags: setup_infra

  vars:
    - config_name: ams-env

  tasks:

  - name: access fact
    set_fact:
      access_auths: "{{ lookup('file', 'ambari.json') | from_json }}"

  - name: This works
    debug:
      var: access_auths.Clusters.desired_configs['{{ config_name }}'].tag

  - name: This does not work
    set_fact:
      new_config: "{{ access_auths.Clusters.desired_configs['{{ config_name }}'].tag }}"

  - name: Debug 0.3
    debug:
      var: new_config
 

Заранее спасибо за любую помощь

Ответ №1:

Эта проблема возникает из-за вложенности {{ разделителей jinja. config_name Установленный вами параметр var уже является текстом "ams-env" , поэтому нам также не нужно его снова цитировать.

Следующие задачи должны работать:

     - debug:
        msg: "tag is {{ access_auths['Clusters']['desired_configs'][config_name]['tag'] }}"

    - set_fact:
        new_config: "{{ access_auths['Clusters']['desired_configs'][config_name]['tag'] }}"
 

Комментарии:

1. Я знал, что это будет просто, но я просто не мог найти правильный синтаксис — большое спасибо за вашу помощь