📡 [네트워크 자동화 Ep.2] 인벤토리 설계와 첫 데이터 수집 — 그 결과는 어떤 원리로 나오는가
facts와 ios_command의 차이, 그리고 “Ansible은 결국 SSH로 명령을 친다”는 본질의 이해
📋 이 글의 흐름
- 1. 14대를 전체로 확장하기 (–limit 떼기)
- 2. 그 결과는 어떤 원리로 출력됐나 — SSH의 실체
- 3. facts vs ios_command — 두 수집 방식의 차이
- 4. cliconf vs NETCONF — 데이터를 받는 두 철학
- 5. 핵심 멘탈 모델 한 줄
Ep.1에서 한 대 접속에 성공했다. 이제 전체로 확장하고, 더 중요한 질문에 답한다 — “이 결과는 대체 어떤 원리로 나온 건가?” 이 원리를 이해하면 Ansible이 마법에서 구조로 바뀐다.
1. 14대를 전체로 확장하기
--limit 옵션을 떼면 인벤토리의 14대 전체에 동시 실행된다. 1대로 길을 검증했으니 이제 전체로 간다.
ansible -i inventory.yml switches \
-m cisco.ios.ios_facts \
-e 'sw_user=admin sw_pass=P@ssw0rd!2030 sw_enable=En@bleKey'
14대가 주르륵 SUCCESS로 뜨면 “1대 → 14대”가 입증된 것이다. 일부가 실패하면 그것도 정보다 — 어느 장비가 접속 안 되는지, 계정이 다른지가 즉시 드러난다. 이 가시성은 수동 점검으로는 얻기 어렵다.
2. 그 결과는 어떤 원리로 출력됐나 — SSH의 실체
가장 중요한 이해다. 결론부터: Ansible은 별도의 마법 채널이 아니라, 당신이 손으로 show version을 칠 때 쓰던 그 SSH 접속을 자동으로 대신 한 것이다. 실제로 일어난 일을 순서대로 풀면:
즉, 당신이 본 그 깔끔한 결과는 원래 길고 지저분했던 show version 텍스트를 모듈이 받아서 가공한 것이다. 새로운 통신 프로토콜이 아니라, SSH로 명령 치고 → 받은 텍스트를 파싱한 결과다.
“SSH로 접속 → enable 입력 → show version 입력 → 나온 화면 복사 → 모델·버전·시리얼만 골라 정리 → 접속 종료”. 사람이 하면 1~2분, 모듈이 하면 1초. 14대면 사람은 14번 반복, 모듈은 동시에. 이것이 자동화의 정체다 — 당신이 하던 행위를 코드가 똑같이, 단 빠르고 반복적으로.
명령 끝에 -vvvv(verbose)를 붙이면 Ansible이 SSH로 주고받은 모든 과정이 그대로 출력된다. “아, 진짜 명령을 타이핑하는구나”를 직접 확인할 수 있다.
3. facts vs ios_command — 두 수집 방식
여기서 중요한 분기가 있다. ios_facts는 모델·버전·시리얼처럼 Ansible이 미리 파싱해주는 정형 정보만 준다. 하지만 CPU·온도·전원처럼 그 밖의 정보는 ios_command로 직접 show 명령을 쳐서 raw 출력을 받아야 한다.
| 구분 | ios_facts | ios_command |
|---|---|---|
| 성격 | 미리 정의된 정형 정보 | 임의의 show 명령 raw 출력 |
| 결과 형태 | 깔끔한 키-값(JSON) | 명령 출력 그대로(텍스트) |
| 파싱 | 자동 | 직접 해야 함 |
| 용도 | 모델·버전·인터페이스 | CPU·메모리·온도·로그 등 전부 |
- name: 점검 명령 실행
cisco.ios.ios_command:
commands:
- show clock # 현재 시각
- show processes cpu | include CPU # CPU 사용률
- show environment all # 온도/팬/전원
register: result # 결과를 result 변수에 저장
4. cliconf vs NETCONF — 데이터를 받는 두 철학
facts 결과에 "ansible_net_api": "cliconf"라고 찍혀 있었다. 이건 “CLI로 명령을 치고 텍스트를 받는다”는 뜻이다. 구형 Cisco는 이 방식이 유일하다. 하지만 현대 장비는 다른 길도 있다.
| 방식 | CLI (cliconf) | API (NETCONF/RESTCONF) |
|---|---|---|
| 데이터 | 사람이 보던 화면을 기계가 해석 | 구조화된 데이터를 직접 주고받음 |
| 안정성 | 출력 형식 바뀌면 파서가 깨짐 | 형식이 정의돼 있어 견고 |
| 대상 | 구형 포함 거의 모든 장비 | 비교적 현대 장비 |
CLI 파싱은 “사람이 보던 화면을 기계가 억지로 해석”하는 방식이라 깨지기 쉽다. 장비가 출력 형식을 살짝만 바꿔도 파서가 틀어진다. 그래서 업계는 NETCONF/RESTCONF 같은 API 기반(구조화 데이터)으로 이동 중이다. 구형 장비는 CLI뿐이지만, 차세대 장비를 들일 땐 “이 장비가 NETCONF를 지원하나”가 중요한 선택 기준이 된다.
5. 핵심 멘탈 모델 한 줄
“Ansible 네트워크 모듈 = SSH 접속 + 명령 전송 + 출력 파싱의 자동화”
이 모델 하나면, 앞으로 만날 어떤 모듈도 “이건 SSH 접속 단계냐, 명령 전송 단계냐, 파싱 단계냐”로 분해해서 볼 수 있다. 에러가 나도 어느 단계에서 막혔는지 즉시 좁혀진다. 낱개로 외울 필요가 없어진다.
