次の変数を使用してan-playbookコマンドを実行しました。変数を辞書キーとして使用しているときに、変数が拡張されました。
コマンド
ansible-playbook -vvv reconfig_vm.yml --extra-vars '{"disks":[{"name":"disk1","size_gb":"30","type":"thin","datastore":"nfs01"},{"name":"disk2","size_gb":"15","type":"thin","datastore":"nfs01"}}'
してから、脚本を次のように作成。
脚本コンテンツ(reconfig_vm.yml)
..(omitted)..
tasks:
- name: reconfig VM Disk
local_action:
module: vsphere_guest
..(omitted)..
vm_disk:
"{{ item.name }}":
size_gb: "{{ item.size_gb }}"
type: "{{ item.type }}"
datastore: "{{ item.datastore }}"
..(omitted)..
with_items: "{{ disks }}"
私はこの脚本を実行すると、私は結果を以下ました。
実行結果
failed: [localhost -> localhost] (item={u'size_gb': u'30', u'type': u'thin', u'name': u'disk1', u'datastore': u'nfs01'}) => {"failed": true, "invocation": {"module_name": "vsphere_guest"}, "item": {"datastore": "nfs01", "name": "disk1", "size_gb": "30", "type": "thin"}, "module_stderr": "Traceback (most recent call last):\n File *..(omitted)..* ansible_module_vsphere_guest.py\", line 793, in update_disks\n hd.UnitNumber = int(disk_id)\nValueError: invalid literal for int() with base 10: '{{ item.name }}'\n", "module_stdout": "", "msg": "MODULE FAILURE", "parsed": false}
質問
実行結果が "{{item.nameは}}" ハンドブックに私は--extraとして得た変数で置換されていないことを示し-vars。
--extra-varsを辞書キーとして展開することをお考えですか?
この問題を解決する方法はありますか?
ありがとうございます。まあ作品
コード(がを解決)コンスタンチン・スヴォーロフの答えに
おかげで、私は最終的に私がやってみたかった仕事をするコードを作成しました。
@Playbookコンテンツ(reconfig_vm.yml)
tasks:
- set_fact:
vm_disk_solo: "'{{ item.name }}':{'size_gb':'{{ item.size_gb }}','type':'{{ item.type }}','datastore':'{{ item.datastore }}'}"
with_items: "{{ vm.disks }}"
register: vm_disk_mul
- set_fact:
vm_disks: "{ {{ vm_disk_mul.results | join(',',attribute='ansible_facts.vm_disk_solo') }} }"
- name: reconfig VM Disk
local_action:
module: vsphere_guest
..(omitted)..
vm_disk: "{{ vm_disks }}"
2番目のソリューションが機能します。私の場合、「ディスク」には複数の要素があるため、以下の変更を追加します。 vm_disk_solo:「 '{{item.name}}' { 'SIZE_GB':」set_fact - ハンドブックコンテンツ(reconfig_vm.yml) ==============で '{{item.datastore}}'} " with_items:" {{vm.disks}} "{{itemize_gb}} '、' type ':' {{item.type}} '、' datastore ' 登録:vm_disk_mul - set_fact: vm_disks: "{{{vm_disk_mul。結果| – Asayu
実際には、あなたが私に言った最初の方法もうまくいきますが、 "vsphere_guest"の変更を伝播する可能性があります(この場合は、 "vsphere_guest "モジュールのインターフェイス(将来起こった場合)、私はあなたの2番目の方法を選択しました。 – Asayu