ãã㯠Ansible Advent Calendar 2017 ã®18æ¥ç®ã®è¨äºã§ãã
â ãããããã¨
Ansible ã§ Cisco IOS ããè¤æ°ã®IPã¢ãã¬ã¹ã«å¯¾ãã¦pingãå®è¡ãããã®çµæãCSVãã¡ã¤ã«ã«åºåãã¾ããæ¬è¨äºã§ã¯ãå©ç¨ãã ios_ping
ã¢ã¸ã¥ã¼ã«ã®èª¬æã¨ã Playbookã®ãµã³ãã«ããç´¹ä»ãã¾ãã
â ios_ping ã¢ã¸ã¥ã¼ã«ã®èª¬æ
ios_ping
ã¯Cisco IOS ã®æ©å¨ãã ping ãå®è¡ãã¦ããã¹çãRTTå¤ãªã© ãã¼ã¹ ãã¦è¿ãã¦ãããã¢ã¸ã¥ã¼ã«ã§ããAnsible 2.4 ã§è¿½å ããã¾ãããï¼æ¬è¨äºã¯ Ansible 2.4.2 ãåæã¨ãã¦ãã¾ãï¼
åè: ios_ping ã¢ã¸ã¥ã¼ã«å ¬å¼ããã¥ã¡ã³ã
æä½æ¥ã«ããã³ãã³ãçµæã¨ããã¼ã¹ãã¦åå¾ã§ããæ
å ±ã®é¢ä¿ã¯ä»¥ä¸ã®éãã§ãã
主ãªãªãã·ã§ã³
ios_ping
ã¢ã¸ã¥ã¼ã«åºæã®ãªãã·ã§ã³ã¯ä»¥ä¸ã®éãã§ãã
ãªãã·ã§ã³å | å¿ é /ä»»æ | ããã©ã«ã | 説æ | 対å¿IOSã³ãã³ãæ¸å¼ | è¦ç¹æ¨©(*1) |
---|---|---|---|---|---|
dest | å¿ é | ping ãå®è¡ããç¸æå ã®IPã¢ãã¬ã¹ããã¹ãåã§ãã | ping [dest] | è¦ç¹æ¨© | |
count | ä»»æ | 5 | ping ãå®è¡ããåæ°ã§ããæ¬ãªãã·ã§ã³ã¨ãIOSã®pingã³ãã³ãã®ã¿ã¤ã ã¢ã¦ãï¼ç§ã®ç°å¢ã§ã¯2ç§ï¼ãèæ
®ããios_ping ã¢ã¸ã¥ã¼ã«ã®ã¿ã¹ã¯ã¨ãã¦ã®ã¿ã¤ã ã¢ã¦ã( timeout ãªãã·ã§ã³: ããã©ã«ã10ç§) ãè¨å®ããå¿
è¦ãããã¾ãã |
ping [dest] repeat [count] | è¦ç¹æ¨© |
source | ä»»æ | éä¿¡å ã®æå®ã§ãã | ping [dest] source [source] | è¦ç¹æ¨© | |
state | ä»»æ | present | æ³å®ããpingçµæã®æå®ã§ãã æ³å®çµæãæåãªã present ã失æãªã absent ãæå®ãã¾ããæåã失æã®åºæºã¯å
¬å¼ããã¥ã¡ã³ãã«è¨è¼ããã¦ãã¾ããããios_ping.pyã®ã³ã¼ããè¦ãã¨ããã¹çã100%æªæºâæåãããã¹çã100%â失æãã¨ãããã¨ãåããã¾ãã |
è¦ç¹æ¨© | |
vrf | ä»»æ | default | å©ç¨ããVRFã®æå®ã§ãã | ping vrf [vrf] [dest] | è¦ç¹æ¨© |
è¦ç¹æ¨©(*1)
ã¨æ¸ããã¦ãããªãã·ã§ã³ãå©ç¨ããã«ã¯ãIOSã¸ãã°ã¤ã³ããã¦ã¼ã¶ã¼ã«ç¹æ¨©ãå¿ è¦ã§ããæåå®è¡ã¨åãäºæ ã§ãã- èªè¨¼ç³»ã®ãªãã·ã§ã³ã§ãã
provider
ç㯠ä»ã®ios_command
çã®ã¢ã¸ã¥ã¼ã«ã¨å ±éã§ãã - å ¨ãªãã·ã§ã³ã¯ ios_ping ã¢ã¸ã¥ã¼ã«å ¬å¼ããã¥ã¡ã³ã ãåç §ãã¦ä¸ããã
â pingçµæãCSVåºåããããã®Playbookãªã©
ã»Playbook
Playbook æ¬ä½ã§ãã
--- - hosts: ios # ã¤ã³ãã³ããªãã¡ã¤ã«ã«ã¦10.0.0.1ãå®ç¾©æ¸ã¿ gather_facts: no connection: local tasks: - name: ping ios_ping: dest: "{{ item }}" count: 5 # default provider: "{{ cli }}" with_items: - 192.168.1.1 - 192.168.1.2 - 192.168.1.3 - 192.168.1.4 - 192.168.1.5 - 192.168.1.6 - 192.168.1.7 - 192.168.1.8 - 192.168.1.9 - 192.168.1.10 ignore_errors: yes register: result - name: output csv file template: src: ./template_ping_result.txt dest: "./ping_from_{{ inventory_hostname }}_result.csv" vars: cli: host: "{{ inventory_hostname }}" timeout: 15 # (5 * 2) + margin username: testuser password: testpassword authorize: yes auth_pass: testpassword
Playbook ã®è£è¶³èª¬æ
with_items
ãå©ç¨ãã¦ãè¤æ°ã®å®å ã¸ã®pingçµæãåå¾ããããã«ãã¦ãã¾ããå¿ è¦ã«å¿ãã¦ãã©ã¡ã¼ã¿åãã¦ä¸ããããstate
ãªãã·ã§ã³ã¯çç¥ãã¦ãããããæåï¼ãã¹ç100%æªæºï¼ãæ³å®ãã¦ãã¾ããããpingã失æããå ´åã¯ãplaybookä¸ã®ã¿ã¹ã¯ã¨ãã¦failed
æ±ãã«ãªãã¾ãã- ä»åã¯æ³å®å¤ã®
state
ã«ãªã£ãå ´åã®æåã確èªãã¤ã¤ãã¿ã¹ã¯ãç¶è¡ãããã£ããããå°ã ä¹±æ´ã§ããignore_errors: yes
ãæå®ãã¦ãã¾ãã count: 5
ï¼ããã©ã«ãã¨åãï¼ã«ãã¦ãããããIOSå´ã®pingã³ãã³ã仿§ã®ã¿ã¤ã ã¢ã¦ã2ç§ãèæ ®ããã¨ããã¹ç100%ã®å®å ç¸æã®å ´åpingãå®äºã«10ç§ãããã¾ããã¿ã¹ã¯ã¨ãã¦ã®timeuout
ãªãã·ã§ã³ã®ããã©ã«ãã10ç§ã®ãããpingãå®äºããåã«ã¿ã¹ã¯ã¨ãã¦ã¿ã¤ã ã¢ã¦ããã¦ãã¾ãããã®åé¡ã®å¯¾çã¨ãã¦ãcount
ãªãã·ã§ã³ à pingã³ãã³ãã¿ã¤ã ã¢ã¦ã = 10ç§ãã«ããã«ä½è£ãå ãã¦ãios_ping
ã¢ã¸ã¥ã¼ã«ã®timeout
ãªãã·ã§ã³ã15
ã¨ãã¦ãã¾ãã
ã»ãã³ãã¬ã¼ã
pingçµæãCSVãã¡ã¤ã«ã«æ´å½¢ããããããã®ãã³ãã¬ã¼ãã§ããããããã«ã¹ã¿ãã¤ãºã§ãã¾ãã
"dest","packet_loss","packets_rx","packets_tx","rtt_avg","rtt_max","rtt_min","msg" {% for r in result['results'] %} "{{r['item'] }}","{{ r['packet_loss'] }}",{{ r['packets_rx'] }},{{ r['packets_tx'] }},{{ r['rtt']['avg'] }},{{ r['rtt']['max']}},{{ r['rtt']['min'] }},"{{ r['msg'] | default('') }}" {% endfor %}
ãã³ãã¬ã¼ãã®è£è¶³èª¬æ
- Playbook ä¸ã§ 夿°
results
ã¨ãã¦åå¾ããè¤æ°ã®pingçµæãã1å®å ãã¨ã«ã«ã¼ããã¦ãã¾ãã msg
ã¯æ³å®å¤ã®stete
ã®æã®ã¿è¿ã£ã¦ããå¤ã§ãããã®ãããæ³å®éãã®state
ã®å ´åã«msg
ãåºåãããã¨ããã¨ã¨ã©ã¼ã«ãªã£ã¦ãã¾ãã¾ããã¨ã©ã¼å¯¾çã¨ãã¦ãdefault
ãã£ã«ã¿ã¼ãå©ç¨ãã¦ãè¿ã£ã¦ããªãã£ãå ´åã«ç©ºæåã«ãªãããã«ãã¦ãã¾ãã
â å®è¡ãã®1ï¼å ¨OKï¼
ãã¹ã¦ã®å®å
ã®pingçµæãæ³å®éãã® state
ã®å ´åã§ãã
ã»playbookã®å®è¡
[vagrant@centos7 vagrant]$ ansible-playbook -i hosts ping.yml PLAY [ios] ********************************************************************* TASK [ping] ******************************************************************** ok: [10.0.0.1] => (item=192.168.1.1) ok: [10.0.0.1] => (item=192.168.1.2) ok: [10.0.0.1] => (item=192.168.1.3) ok: [10.0.0.1] => (item=192.168.1.4) ok: [10.0.0.1] => (item=192.168.1.5) ok: [10.0.0.1] => (item=192.168.1.6) ok: [10.0.0.1] => (item=192.168.1.7) ok: [10.0.0.1] => (item=192.168.1.8) ok: [10.0.0.1] => (item=192.168.1.9) ok: [10.0.0.1] => (item=192.168.1.10) TASK [output csv file] ********************************************************* changed: [10.0.0.1] PLAY RECAP ********************************************************************* 10.0.0.1 : ok=2 changed=1 unreachable=0 failed=0
ã»CSVåºåçµæ
[vagrant@centos7 vagrant]$ cat ping_from_10.0.0.1_result.csv "dest","packet_loss","packets_rx","packets_tx","rtt_avg","rtt_max","rtt_min","msg" "192.168.1.1","0%",5,5,2,9,1,"" "192.168.1.2","0%",5,5,2,9,1,"" "192.168.1.3","0%",5,5,8,9,8,"" "192.168.1.4","0%",5,5,7,9,1,"" "192.168.1.5","0%",5,5,6,9,1,"" "192.168.1.6","0%",5,5,8,9,8,"" "192.168.1.7","0%",5,5,8,9,8,"" "192.168.1.8","0%",5,5,7,9,1,"" "192.168.1.9","0%",5,5,7,9,1,"" "192.168.1.10","0%",5,5,8,9,8,""
â å®è¡ãã®2ï¼ä¸é¨NGï¼
ä¸é¨å®å
ã®pingçµæãæ³å®å¤ã® state
ã®å ´åã§ãã
ã»Playbookå®è¡
[vagrant@centos7 vagrant]$ ansible-playbook -i hosts ping.yml PLAY [ios] ********************************************************************* TASK [ping] ******************************************************************** ok: [10.0.0.1] => (item=192.168.1.1) failed: [10.0.0.1] (item=192.168.1.2) => {"changed": false, "commands": ["ping 192.168.1.99 repeat 5"], "item": "192.168.1.99", "msg": "Ping failed unexpectedly", "packet_loss": "100%", "packets_rx": 0, "packets_tx": 5, "rtt": {"avg": null, "max": null, "min": null}} ok: [10.0.0.1] => (item=192.168.1.3) ok: [10.0.0.1] => (item=192.168.1.4) ok: [10.0.0.1] => (item=192.168.1.5) ok: [10.0.0.1] => (item=192.168.1.6) ok: [10.0.0.1] => (item=192.168.1.7) ok: [10.0.0.1] => (item=192.168.1.8) ok: [10.0.0.1] => (item=192.168.1.9) ok: [10.0.0.1] => (item=192.168.1.10) ...ignoring TASK [temp] ******************************************************************** changed: [10.0.0.1] PLAY RECAP ********************************************************************* 10.0.0.1 : ok=2 changed=1 unreachable=0 failed=0
æ³å®å¤ã ã£ãå®å
ã«å¯¾ããpingã®ã¿ã¹ã¯ã¯ failed
ã«ãªãã¾ãã
ã»CSVåºåçµæ
以ä¸ã®éããçéãåããæ³å®ã ã£ãå®å
ã«å¯¾ãã¦ããã¹ç100%ã ã£ãå ´åã¯ãmsg
ã Ping failed unexpectedly
ã¨ãªãã¾ãã
[vagrant@centos7 vagrant]$ cat ping_from_10.0.0.1_result.csv "dest","packet_loss","packets_rx","packets_tx","rtt_avg","rtt_max","rtt_min","msg" "192.168.1.1","0%",5,5,2,9,1,"" "192.168.1.2",â100%",0,5,,,,"Ping failed unexpectedly" "192.168.1.3","0%",5,5,8,9,8,"" "192.168.1.4","0%",5,5,7,9,1,"" "192.168.1.5","0%",5,5,6,9,1,"" "192.168.1.6","0%",5,5,8,9,8,"" "192.168.1.7","0%",5,5,8,9,8,"" "192.168.1.8","0%",5,5,7,9,1,"" "192.168.1.9","0%",5,5,7,9,1,"" "192.168.1.10","0%",5,5,8,9,8,""
ãªããçéãåããªãæ³å®ã ã£ãå®å
ã«å¯¾ãã¦ããã¹ç100%æªæº ã®å ´åã¯ãmsg
ã Ping succeeded unexpectedly
ã¨ãªãã¾ãã
â ã¾ã¨ã
Ansible ã® ios_ping
ã¢ã¸ã¥ã¼ã«ã¨ template
ã¢ã¸ã¥ã¼ã«å©ç¨ãã¦ãCisco IOS ããã® ping çµæã CSV åºåãã¦ã¿ã¾ããã
count
㨠timeout
ã®é¢ä¿ãããä½ããã£ã¦æå/失æã¨ãããããããããã¤ã³ãã§ãã
ã¾ããä»åã¯pingå®è¡ãã¹ã1å°ã«ã¤ã1ã¤ã®CSVãã¡ã¤ã«ãçæãã¾ããããä½ãæ¹æ¬¡ç¬¬ã§ã¯1ã¤ã®ãã¡ã¤ã«ã«ã¾ã¨ãããã¨ãå¯è½ãã¨æãã¾ãã
ãããä»åã®ãããªå
容ããããå ´åã«ãæ¬è¨äºãåèã«ãªãã°å¹¸ãã§ãã