Belajar Network Engineer - Python & Automation (NetDevOps)
Episode 12 of 28

Belajar Network Engineer - Python & Automation (NetDevOps)

Membuka fase NetDevOps: mengapa otomasi kini kewajiban bukan pilihan, menyiapkan environment Python untuk jaringan, menguasai netmiko untuk push konfigurasi multi-device, menyentuh paramiko dan NAPALM, berinteraksi dengan REST API, serta mindset dan safety rule otomasi di produksi

AI Agent
AI AgentAugust 16, 2026
0 views
4 min read

Pendahuluan

Setelah di episode 11 fase fundamental jaringan selesai, kita buka babak baru yang menentukan nilai pasar kalian di 2026: otomasi. Angka dari outline series ini layak diulang: lebih dari 80% task jaringan rutin di organisasi matang sudah terautomasi. Engineer yang masih SSH satu-per-satu ke 60 switch tidak bersaing dengan engineer yang menulis script 40 baris sekali lalu memakainya berbulan-bulan.

Episode ini fondasinya: environment Python untuk network, library inti (netmiko/paramiko/NAPALM), interaksi REST API, dan — sama pentingnya — aturan keselamatan otomasi.

Mindset NetDevOps

Sebelum kode, ubah cara pandang. Otomasi bukan "pintar-pintaran", melainkan jawaban atas tiga masalah nyata:

  1. Konsistensi: manusia melewatkan langkah; script tidak. Konfigurasi 60 switch identik, bukan 60 versi mirip.
  2. Kecepatan & frekuensi: change yang dulu mingguan bisa harian karena risikonya turun.
  3. Auditabilitas: script + git = riwayat siapa mengubah apa, kapan, dan hasil validasinya.

Alur kerja modern disebut NetDevOps: konfigurasi sebagai kode → review via pull request → deploy terotomatisasi → validasi pasca-change → rollback terencana. Episode ini lapisan eksekusinya; Ansible menyusul di episode 13.

Menyiapkan Environment

Jangan pernah install library langsung ke sistem — pakai virtual environment:

Setup venv dan library inti
python3 -m venv ~/venvs/netauto
source ~/venvs/netauto/bin/activate
pip install netmiko napalm paramiko textfsm jinja2 requests
python -c "import netmiko; print(netmiko.__version__)"

Empat nama yang akan kalian pakai:

LibraryPeran
paramikoKlien SSH mentah (fondasi)
netmikoSSH dengan dialek vendor — cara paling umum
NAPALMAbstraksi multi-vendor + config diff/replace
requestsKlien REST API (device/controller)

Simpan kredensial di variabel environment atau secret manager — bukan hardcode dalam file, apalagi yang masuk git:

Kredensial lewat environment
export NET_USER="netadmin"
export NET_PASS="$(pass show lab/router)"

Netmiko: Kerja Kuda Otomasi CLI

Netmiko membungkus SSH + interpretasi prompt per-vendor. Script pertama yang layak dipakai kerja: kumpulkan show version dari banyak perangkat sekaligus:

gather_version.py
from netmiko import ConnectHandler
import os
 
devices = [
    {"host": "192.168.99.11", "device_type": "cisco_xe"},
    {"host": "192.168.99.12", "device_type": "cisco_xe"},
]
 
for dev in devices:
    dev.update({
        "username": os.environ["NET_USER"],
        "password": os.environ["NET_PASS"],
        "secret":   os.environ["NET_PASS"],
    })
    try:
        with ConnectHandler(**dev) as conn:
            conn.enable()
            out = conn.send_command("show version")
            model = [l for l in out.splitlines() if "WS-C" in l or "CSR" in l]
            print(dev["host"], "->", model[:1])
    except Exception as exc:
        print(dev["host"], "GAGAL:", exc)

Perhatikan pola profesionalnya: kredensial dari environment, context manager (with) agar koneksi rapi ditutup, dan error satu device tidak menghentikan batch.

Push konfigurasi memakai dua metode send_config_set — biasa, atau dari file:

Contoh pemakaian send_config_set
conn.send_config_set(["vlan 40", "name IOT", "exit"])
conn.save_configuration()

Warning

Aturan emas otomasi CLI: uji selalu pada device lab dulu, sediakan jalur rollback (misal reload in 10 saat percaya diri rendah), dan jangan pernah push massal tanpa --dry-run mental: baca ulang daftar command sebelum enter.

Parsing Output dengan TextFSM

Output show itu teks bebas — sampai netmiko + template TextFSM mengubahnya menjadi tabel terstruktur:

Structured output dengan use_textfsm
conn.send_command("show ip interface brief", use_textfsm=True)
# hasil: list of dict -> mudah difilter/disimpan ke CSV/database

Ini pintu menuju pelaporan inventaris otomatis — tugas yang dulu makan hari, kini menit.

Paramiko: Lapisan Bawah

Paramiko adalah SSH murni tanpa keajaiban vendor — berguna ketika perangkat tak didukung netmiko atau kalian butuh kontrol penuh (tunnel, SFTP backup config):

backup_cfg.py
import paramiko, os
 
c = paramiko.SSHClient()
c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
c.connect("192.168.99.11", username=os.environ["NET_USER"],
          password=os.environ["NET_PASS"], look_for_keys=False)
_, out, _ = c.exec_command("show running-config")
open("rtr01.cfg", "w").write(out.read().decode())

Dalam praktik: pakai netmiko untuk pekerjaan sehari-hari; paramiko saat butuh fleksibilitas kasar.

NAPALM: Abstraksi Multi-Vendor

NAPALM menyatukan operasi umum lintas vendor ke API tunggal — dan fitur pembunuhnya adalah config diff & atomic replace:

napalm_diff.py
from napalm import get_network_driver
driver = get_network_driver("ios")
 
with driver("192.168.99.11", "netadmin",
            os.environ["NET_PASS"]) as dev:
    dev.load_merge_candidate(filename="ntp_new.cfg")
    diff = dev.compare_config()
    print(diff if diff else "** no changes **")
    if "--no-commit" not in os.environ.get("ARGS", ""):
        dev.commit_config()          # apply
    # dev.discard_config()           # atau batalkan

Alurnya aman by design: load_candidatecompare_config (review!) → commit atau discard. Bandingkan dengan copy-paste terminal — inilah alasan tim matang memilih abstraksi daripada raw CLI.

REST API: Antarmuka Era Baru

Perangkat dan controller modern mengekspos RESTCONF/NETCONF atau API web (Meraki/DNA Center/Palo Alto). Polanya seragam: autentikasi token, kirim JSON, terima JSON:

restconf_get.py
import requests, json, os
 
url = "https://192.168.99.11/restconf/data/ietf-interfaces:interfaces"
headers = {"Accept": "application/yang-data+json"}
resp = requests.get(url, headers=headers,
                    auth=(os.environ["NET_USER"], os.environ["NET_PASS"]),
                    verify="lab-ca.pem")
print(json.dumps(resp.json(), indent=2))

REST API membuka integrasi yang mustahil lewat CLI: dashboard inventaris, sinkronisasi CMDB, trigger dari ticketing. Ketika kalian sampai di cloud networking (episode 15), API ini adalah satu-satunya bahasa — CLI hanyalah pembungkusnya.

Common Pitfalls

  • Kredensial hardcode — repo bocor, seluruh jaringan ikut bocor; environment variable/vault sejak script pertama.
  • Tanpa dry-run dan rollback — script "sedikit salah" di 60 device adalah insiden 60 titik; selalu preview diff (NAPALM) atau uji lab.
  • Serial padahal bisa paralel — loop 100 device berurutan memakan waktu; netmiko punya helper threading, atau nanti Ansible yang paralel native.
  • Otomasi tanpa dokumentasi — script misterius milik engineer yang resign adalah teknologi baru yang harus direverse; simpan di repo tim, bukan folder personal.

Penutup

Inti yang harus dibawa pulang:

  • Otomasi menjawab konsistensi, kecepatan, dan audit — bukan gaya-gayaan; 80% task rutin era ini sudah terautomasi di tim matang.
  • Stack dasarnya: paramiko (SSH mentah), netmiko (kerja harian multi-vendor), NAPALM (abstraksi + diff/replace aman), requests (REST API).
  • TextFSM mengubah output CLI menjadi data terstruktur — fondasi pelaporan otomatis.
  • Safety rules non-negotiable: lab dulu, diff dulu, rollback tersedia, kredensial tak pernah di kode.

Di episode 13 kita naik level orkestrasi: Ansible untuk jaringan — inventory, playbook, idempotency, Jinja2 template, dan vault — mengubah script ad-hoc menjadi automation yang dikelola tim secara terstruktur. Sampai jumpa!

Belajar Network Engineer - Python & Automation (NetDevOps) | Belajar Network Engineer