Ansible:将字典作为函数参数传递

Ansible: passing a dictionary as a function argument

我有以下构造:

        lookup(
          'template',
          'some_template.j2',
          template_vars=dict(some_dictionary_1=dict(some_dictionary_2))
        )

我想让它更具可读性(对我自己而言),所以我想将这些 = 表达式改写成类似这样的内容:

        lookup(
          'template',
          'some_template.j2',
          {
            'template_vars': {
              'some_dictionary_1': dict(some_dictionary_2)
            }
          }
        )

当然,上面的代码片段是行不通的。

谁能帮助我理解在这种情况下如何摆脱 =s?谢谢。

我认为你非常接近,区别在于 template_vars is a python keyword argument (又名“kwarg”)因此需要在 = 语法中,但其余部分是公平的游戏采用字典文字语法

- debug:
    msg: >-
        lookup(
          'template',
          'some_template.j2',
          template_vars={
              'some_dictionary_1': dict(some_dictionary_2)
            }
        )

尽管如此,如果它真的非常让您烦恼,您可以使用 python 的 ** dict unpacking syntax:

来更加偷偷摸摸
- debug:
    msg: >-
        lookup(
          'template',
          'some_template.j2',
          **{'template_vars': {
              'some_dictionary_1': dict(some_dictionary_2)
            }
          }
        )

但是为了你未来的同事,最好不要那样做:-D