0

説明

辞書が次のようにmydict設定されていると仮定し{ "key1": "value1" }ます。

  • dictsortAnsible のfilter ( )の結果は、mydict|dictsort別のリストを含むリストのようです。

    [
        [
            "key1",
            "value1"
        ]
    ]
    
  • ただし、Jinja2 template でこのリストの最初の要素に直接アクセス(mydict|dictsort)[0]すると、奇妙に見えるようにレンダリングされます。

    (u'key1', u'value1')
    
  • 次に、 の値でファクトを設定すると(mydict|dictsort)、通常のリストのように動作します。最初の要素にアクセスすると、次の[0]結果が得られます。

    [
        "key1",
        "value1"
    ]
    

    [0]その要素にアクセスすると、が返されますkey1

  • しかし、ファクトに の値を設定すると(mydict|dictsort)[0]、文字列のように動作します。要素にアクセスする[0]と、最初の文字、つまり が返されます(

  • 一方、たとえば(mydict|dictsort)[0][0]、サブ要素に直接アクセスすると、リストのように動作します。つまり、 を返しますkey1

質問

  • とは(u'key1', u'value1')? どのようなオブジェクトがdictsort生成されますか?

  • dictsort一貫性のある信頼できる方法で結果にアクセスするにはどうすればよいですか?


完全なプレイブック:

---
- hosts: localhost
  gather_facts: no
  connection: local
  vars:
    mydict:
      key1: value1
  tasks:   
    - name: show dict
      debug: 
        msg: "{{ mydict }}"

    - name: show mydict|dictsort
      debug: 
        msg: "{{ mydict|dictsort }}"

    - set_fact:
        mydict_dictsorted: "{{ mydict|dictsort }}"

    - name: show (mydict|dictsort)[0]
      debug:
        msg: "{{ (mydict|dictsort)[0] }}"

    - name: show mydict_dictsorted[0]
      debug:
        msg: "{{ mydict_dictsorted[0] }}"

    - name: show (mydict|dictsort|list)[0]
      debug:
        msg: "{{ (mydict|dictsort|list)[0] }}"

    - name: show (mydict_dictsorted|list)[0]
      debug:
        msg: "{{ (mydict_dictsorted|list)[0] }}"

    - set_fact:
        mydict_dictsorted_element: "{{ (mydict|dictsort)[0] }}"

    - name: mydict_dictsorted_element
      debug:
        msg: "{{ mydict_dictsorted_element }}"

    - name: mydict_dictsorted_element[0]
      debug:
        msg: "{{ mydict_dictsorted_element[0] }}"

    - name: (mydict|dictsort)[0][0]
      debug:
        msg: "{{ (mydict|dictsort)[0][0] }}"

完全なトランスクリプト:

PLAY [localhost] ********************************************************************************************

TASK [show dict] ********************************************************************************************
ok: [localhost] => {
    "msg": {
        "key1": "value1"
    }
}

TASK [show mydict|dictsort] *********************************************************************************
ok: [localhost] => {
    "msg": [
        [
            "key1",
            "value1"
        ]
    ]
}

TASK [set_fact] *********************************************************************************************
ok: [localhost]

TASK [show (mydict|dictsort)[0]] ****************************************************************************
ok: [localhost] => {
    "msg": "(u'key1', u'value1')"
}

TASK [show mydict_dictsorted[0]] ****************************************************************************
ok: [localhost] => {
    "msg": [
        "key1",
        "value1"
    ]
}

TASK [show (mydict|dictsort|list)[0]] ***********************************************************************
ok: [localhost] => {
    "msg": "(u'key1', u'value1')"
}

TASK [show (mydict_dictsorted|list)[0]] *********************************************************************
ok: [localhost] => {
    "msg": [
        "key1",
        "value1"
    ]
}

TASK [set_fact] *********************************************************************************************
ok: [localhost]

TASK [mydict_dictsorted_element] ****************************************************************************
ok: [localhost] => {
    "msg": "(u'key1', u'value1')"
}

TASK [mydict_dictsorted_element[0]] *************************************************************************
ok: [localhost] => {
    "msg": "("
}

TASK [(mydict|dictsort)[0][0]] ******************************************************************************
ok: [localhost] => {
    "msg": "key1"

copy/で値を確認しましたが、それらは's (インデントを除く)contentと同じであるため、わかりやすくするために結果を投稿します。debugdebug

4

1 に答える 1