説明
辞書が次のようにmydict
設定されていると仮定し{ "key1": "value1" }
ます。
dictsort
Ansible の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
と同じであるため、わかりやすくするために結果を投稿します。debug
debug