前提・実現したいこと
1.ansible + ntc-templateを利用
2.cisco機器から取得した情報をntc-templateとjinja2テンプレートを利用してcsvに変換。
3.csvファイルの先頭列に、hostnameを追加して保存する。
この1と2は出来たのですが、3つめの部分が出来ず実現させたい。
「JANOG42」の資料にある情報にアレンジを加えたい。
https://www.slideshare.net/akira6592/janog42-ansible-networkautomation
P.65~P.71参照
該当のソースコード
CSVにする部分までの情報
この例では、"show int status"を利用
yaml
1--- 2- name: SHOW INT STATUS 3 hosts: ios-l2sw 4 gather_facts: no 5 become: yes 6 become_method: enable 7 vars: 8 now_date: "{{ lookup('pipe','date +%Y%m%d%H%M')}}" 9 10 tasks: 11 - name: GATHER FACT 12 ios_facts: 13 14 - name: COLLECT OUTPUT OF SHOW INT STATUS 15 cli_command: 16 command: show int status 17 register: output 18 19 - name: OUTPUT CSV FILE 20 template: 21 src: "./jinja2_templates/template_show_int_status.txt" 22 dest: "./csv-files/sh_int_status/{{ ansible_net_hostname }}_{{ now_date }}_result_sh_int_status.csv" 23 vars: 24 parsed_result: "{{ output.stdout | parse_cli_textfsm('./templates/cisco_ios_show_interfaces_status.template') }}" 25
template_show_int_status.txt
j2
1"PORT","NAME","STATUS","VLAN","DUPLEX","SPEED","TYPE" 2{% for r in parsed_result %} 3"{{ r['PORT'] }}","{{ r['NAME'] }}","{{ r['STATUS'] }}","{{ r['VLAN'] }}","{{ r['DUPLEX'] }}","{{ r['SPEED'] }}","{{ r['TYPE'] }}" 4{% endfor %}
試したこと
全くの理解不足ですが、ansible側でios_factsの情報を取得しているので、j2テンプレートに入れ込んで見ました。
が、no attribute という事でエラーとなりました。
j2
1"HOSTNAME""PORT","NAME","STATUS","VLAN","DUPLEX","SPEED","TYPE" 2{% for r in parsed_result %} 3"{{ r['ansible_net_hostname'] }}","{{ r['PORT'] }}","{{ r['NAME'] }}","{{ r['STATUS'] }}","{{ r['VLAN'] }}","{{ r['DUPLEX'] }}","{{ r['SPEED'] }}","{{ 4r['TYPE'] }}" 5{% endfor %}
エラー
fatal: [HOSTXX]: FAILED! => { "changed": false, "msg": "AnsibleUndefinedVariable: 'dict object' has no attribute 'ansible_net_hostname'"
補足情報(FW/ツールのバージョンなど)
$ ansible --version ansible 2.7.9
下記参考にさせて頂いたサイトではpythonで実現させています。これをansible処理で完結させたいです。
http://kooshin.hateblo.jp/entry/2017/12/06/223407
回答1件
あなたの回答
tips
プレビュー