Ansible 자작 모듈로 NW 기기에서 Traceroute
11795 단어 시스코automation네트워크tracerouteAnsible
소개
여러분 Ansible의 네트워크 모듈을 사용하고 있습니까?
네트워크의 통신 테스트를 자동화하는데 있어서, ping만이 아니고, traceroute도 할 수 있으면 좋다-라고 생각하는 것이 있겠지요?
그런 당신을 위해 Cisco IOS 용 ios_traceroute 모듈을 만들었습니다! (무리 화살)
사용법
공식 리포지토리에는 병합되지 않으므로 사용하려면 다음 작업이 필요합니다.
(Red Hat 씨, 풀리크 나왔으니까 통과해 )
공식 리포지토리에는 병합되지 않으므로 사용하려면 다음 작업이 필요합니다.
(Red Hat 씨, 풀리크 나왔으니까 통과해 )
GitHub 리포지토리 ansible_ios_traceroute_module 복제 또는 다운로드.
자작 모듈을 Ansible이 인식할 수 있도록 Best Practices > Directory Layout에 따라
library
디렉토리를 작성해, 바로 아래에 취득한 Python 모듈(ios_traceroute.py)을 포함. ansible.cfg
파일에 library
디렉토리의 경로를 추가. ansible.cfg
[defaults]
library = /home/centos/ansible/library
※
ansible.cfg
의 저장처는 ansible --version
커맨드의 config file
로 확인 가능합니다.[centos@localhost ~]$ ansible --version
ansible 2.9.0
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/centos/ansible/library']
ansible python module location = /usr/lib/python3.6/site-packages/ansible
executable location = /usr/bin/ansible
python version = 3.6.7 (default, Dec 5 2018, 15:02:05) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
Playbook
Playbook 샘플
거친 흐름은 다음과 같습니다.
ios_traceroute
모듈에서 NW 기기 자신의 주소(192.168.100.201)에서 172.16.1.100으로 traceroute를 실시. debug
모듈에서 출력 결과를 표시합니다. assert
모듈에서 7번째 홉에 특정 IP 주소(172.30.100.1)를 통과하는지 확인. playbook1_traceroute.yml
---
- hosts: cisco
gather_facts: no
connection: network_cli
tasks:
- name: execute traceroute
ios_traceroute:
dest: 172.16.1.100
probe: 4
source: 192.168.100.201
ttl_min: 1
ttl_max: 20
register: result_traceroute
- name: debug traceroute
debug:
msg: "{{ result_traceroute }}"
- name: check if the traceroute results always include specific transit ip address in hop 7
assert:
that:
- result_traceroute.hop['7'] == ['172.30.100.1']
사용 가능한 옵션
ios_traceroute
모듈 내에서 사용 가능한 옵션은 다음과 같습니다.이 중
dest
만 필수 항목입니다. 다른 항목은 지정하지 않으면 각 IOS 장비의 기본값이 사용됩니다. probe:
description:
- 各ホップで送信するパケットの数
type: int
dest:
description:
- 宛先IPアドレスもしくはホスト名(NW機器で名前解決できる必要あり)
type: str
required: true
source:
description:
- 送信元IPアドレス
type: str
udp:
description:
- UDPパケットのポート番号
type: int
ttl_min:
description:
- 最小TTL値(ttl_minとttl_maxはセットで指定する必要あり)
type: int
ttl_max:
description:
- 最大TTL値
type: int
vrf:
description:
- 転送に使用するVRF
type: str
실행 결과
※글로벌 IP 주소를 포함하고 있기 때문에, Netconan 라고 하는 툴을 사용해 데타라메인 주소로 변환하고 있습니다.
TASK [debug traceroute]의 commands
에서 실제로 실행한 명령, output
로 가공전의 출력 결과, hop
로 홉수와 IP 주소만 추출한 결과를 확인할 수 있습니다.
마지막 TASK에서, 7홉째로 상정 IP주소를 경유하는 것을 확인할 수 있어 「All assertions passed」가 되어 있습니다.
PLAY [cisco] ************************************************************************************************************
TASK [execute traceroute] ***********************************************************************************************
ok: [test3]
TASK [debug traceroute] *************************************************************************************************
ok: [test3] => {
"msg": {
"changed": false,
"commands": [
"traceroute 172.174.88.165 source 192.168.173.198 probe 4 ttl 1 20"
],
"failed": false,
"hop": {
"1": [
"192.168.173.43"
],
"10": [
"108.224.66.109",
"108.224.66.161",
"108.224.66.172"
],
"11": [
"108.254.165.36",
"172.159.216.191"
],
"12": [
"215.123.152.64",
"74.246.135.251",
"222.152.243.188"
],
"13": [
"108.224.67.238",
"108.224.67.103"
],
"14": [
"108.224.80.18",
"108.224.80.23"
],
"15": [
"172.174.88.165"
],
"2": [],
"3": [
"172.30.231.192"
],
"4": [
"126.244.74.242"
],
"5": [
"18.232.93.6",
"18.232.93.1"
],
"6": [
"18.235.248.200",
"18.235.248.207"
],
"7": [
"68.32.20.116"
],
"8": [],
"9": [
"74.246.135.176",
"108.224.82.72",
"108.224.82.242"
]
},
"output": [
"Type escape sequence to abort.",
"Tracing the route to 172.174.88.165",
"VRF info: (vrf in name/id, vrf out name/id)",
" 1 192.168.173.43 186 msec 16 msec 13 msec 11 msec",
" 2 * * * * ",
" 3 172.30.231.192 51 msec 55 msec 44 msec 62 msec",
" 4 126.244.74.242 54 msec 79 msec 39 msec 59 msec",
" 5 18.232.93.6 43 msec",
" 18.232.93.1 63 msec",
" 18.232.93.6 60 msec",
" 18.232.93.1 64 msec",
" 6 18.235.248.200 56 msec 80 msec 53 msec",
" 18.235.248.207 62 msec",
" 7 68.32.20.116 61 msec 55 msec 59 msec 39 msec",
" 8 * * * * ",
" 9 108.224.82.72 57 msec",
" 74.246.135.176 39 msec",
" 108.224.82.242 60 msec 61 msec",
" 10 108.224.66.161 62 msec",
" 108.224.66.109 70 msec",
" 108.224.66.172 72 msec",
" 108.224.66.161 54 msec",
" 11 108.254.165.36 [MPLS: Label 27008 Exp 4] 70 msec",
" 172.159.216.191 [MPLS: Label 178553 Exp 4] 57 msec",
" 108.254.165.36 [MPLS: Label 25624 Exp 4] 71 msec 56 msec",
" 12 74.246.135.251 79 msec",
" 222.152.243.188 77 msec",
" 74.246.135.251 60 msec",
" 215.123.152.64 53 msec",
" 13 108.224.67.238 58 msec 62 msec",
" 108.224.67.103 70 msec 68 msec",
" 14 108.224.80.23 58 msec",
" 108.224.80.18 59 msec",
" 108.224.80.23 70 msec 70 msec",
" 15 172.174.88.165 77 msec 60 msec 61 msec 63 msec"
]
}
}
TASK [check if the traceroute results (dict) always include specific transit ip address in hop 7] ***********************
ok: [test3] => {
"changed": false,
"msg": "All assertions passed"
}
PLAY RECAP **************************************************************************************************************
test3 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
마지막으로
이 모듈은 표준 traceroute 명령을 사용하여 한 줄에 옵션을 지정합니다.
여러 라우터, 스위치로 테스트를 하고 있지만 이전 버전에서는 명령이 지원되지 않고 시작될 수 있습니다. 그때 포기해줘 w
풀릭이 다니면 톤을 타고 다른 OS의 모듈도 만들어 보려고합니다!
Reference
이 문제에 관하여(Ansible 자작 모듈로 NW 기기에서 Traceroute), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kitara/items/be06704807bf03d57d48
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
PLAY [cisco] ************************************************************************************************************
TASK [execute traceroute] ***********************************************************************************************
ok: [test3]
TASK [debug traceroute] *************************************************************************************************
ok: [test3] => {
"msg": {
"changed": false,
"commands": [
"traceroute 172.174.88.165 source 192.168.173.198 probe 4 ttl 1 20"
],
"failed": false,
"hop": {
"1": [
"192.168.173.43"
],
"10": [
"108.224.66.109",
"108.224.66.161",
"108.224.66.172"
],
"11": [
"108.254.165.36",
"172.159.216.191"
],
"12": [
"215.123.152.64",
"74.246.135.251",
"222.152.243.188"
],
"13": [
"108.224.67.238",
"108.224.67.103"
],
"14": [
"108.224.80.18",
"108.224.80.23"
],
"15": [
"172.174.88.165"
],
"2": [],
"3": [
"172.30.231.192"
],
"4": [
"126.244.74.242"
],
"5": [
"18.232.93.6",
"18.232.93.1"
],
"6": [
"18.235.248.200",
"18.235.248.207"
],
"7": [
"68.32.20.116"
],
"8": [],
"9": [
"74.246.135.176",
"108.224.82.72",
"108.224.82.242"
]
},
"output": [
"Type escape sequence to abort.",
"Tracing the route to 172.174.88.165",
"VRF info: (vrf in name/id, vrf out name/id)",
" 1 192.168.173.43 186 msec 16 msec 13 msec 11 msec",
" 2 * * * * ",
" 3 172.30.231.192 51 msec 55 msec 44 msec 62 msec",
" 4 126.244.74.242 54 msec 79 msec 39 msec 59 msec",
" 5 18.232.93.6 43 msec",
" 18.232.93.1 63 msec",
" 18.232.93.6 60 msec",
" 18.232.93.1 64 msec",
" 6 18.235.248.200 56 msec 80 msec 53 msec",
" 18.235.248.207 62 msec",
" 7 68.32.20.116 61 msec 55 msec 59 msec 39 msec",
" 8 * * * * ",
" 9 108.224.82.72 57 msec",
" 74.246.135.176 39 msec",
" 108.224.82.242 60 msec 61 msec",
" 10 108.224.66.161 62 msec",
" 108.224.66.109 70 msec",
" 108.224.66.172 72 msec",
" 108.224.66.161 54 msec",
" 11 108.254.165.36 [MPLS: Label 27008 Exp 4] 70 msec",
" 172.159.216.191 [MPLS: Label 178553 Exp 4] 57 msec",
" 108.254.165.36 [MPLS: Label 25624 Exp 4] 71 msec 56 msec",
" 12 74.246.135.251 79 msec",
" 222.152.243.188 77 msec",
" 74.246.135.251 60 msec",
" 215.123.152.64 53 msec",
" 13 108.224.67.238 58 msec 62 msec",
" 108.224.67.103 70 msec 68 msec",
" 14 108.224.80.23 58 msec",
" 108.224.80.18 59 msec",
" 108.224.80.23 70 msec 70 msec",
" 15 172.174.88.165 77 msec 60 msec 61 msec 63 msec"
]
}
}
TASK [check if the traceroute results (dict) always include specific transit ip address in hop 7] ***********************
ok: [test3] => {
"changed": false,
"msg": "All assertions passed"
}
PLAY RECAP **************************************************************************************************************
test3 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
이 모듈은 표준 traceroute 명령을 사용하여 한 줄에 옵션을 지정합니다.
여러 라우터, 스위치로 테스트를 하고 있지만 이전 버전에서는 명령이 지원되지 않고 시작될 수 있습니다. 그때 포기해줘 w
풀릭이 다니면 톤을 타고 다른 OS의 모듈도 만들어 보려고합니다!
Reference
이 문제에 관하여(Ansible 자작 모듈로 NW 기기에서 Traceroute), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kitara/items/be06704807bf03d57d48텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)