Profile urządzenia własnego
NetCrunch umożliwia tworzenie niestandardowych profili przy użyciu prostych definicji YAML umożliwiających wykonywanie poleceń za pomocą ssh lub telnet oraz przetwarzanie danych wyjściowych
Silnik zarządzania konfiguracją urządzeń w NetCrunchu został zainspirowany projektem open source Oxidized i wykorzystuje podobne koncepcje do opisu parametrów sesji i przetwarzania danych wyjściowych poleceń.
Zawiera jednak istotne różnice:
- Postanowiliśmy opisać profile urządzeń w sposób deklaratywny, więc nie jest potrzebne żadne programowanie
- Wyrażenia regularne są przetwarzane w JavaScript
Jedyną wiedzą potrzebną do opisania profilu konfiguracji urządzenia jest dobra znajomość i zrozumienie wyrażeń regularnych.
Ustaw zachęty prompt
Format zachęty jest potrzebny do rozpoznania, kiedy terminal jest gotowy do odczytania następnego polecenia i kiedy kończy się poprzedni wynik polecenia. Możesz ustawić jedno lub wiele wyrażeń zachęty.
Pojedyńcza zachęta (prompt)
prompt: "/^(\r*[\w\s.@()/:-]+[#>]\s?)$/m"
Wiele zachęt (prompt)
prompt: - /^(?:\x1b[..h)?[\w.-]+# $/m - /^\w+@\w+([-.]\w+)*>((?.+)?\s)?/m
Ustawienie komentarza
To jest prefix komentarza, który zostanie dodany do niektórych wyników poleceń, takich jak show version
comment: "# "
W powyższym przypadku zdefiniowaliśmy dwuznakowy prefix zachęty # i pojedynczą spację.
Blok przetwarzania wyjściowego
Po każdym poleceniu możemy opisać, jak przetwarzać dane wyjściowe.
lines: range: 1..-1 reject: - /^\r$/ - /time/ comment:
W powyższym przykładzie silnik:
- usunie pierwszą i ostatnią linię (zakres: 1..-1)
- pominie puste linie (reject) i te zawierające frazę time
- wykomentuje wszystkie wyniki
Przetwarzanie dla wszystkich poleceń
Zaczyna się od all:, a następnie możesz opisać blok przetwarzania dla każdego polecenia. Często usuwa się pierwszą i ostatnią linię.
all: lines: # always cut off first and last line range: 1..-1
Przetwarzanie sekretów
Możemy pobrać konfigurację taką, jaka jest lub usunąć sekrety, takie jak hasła, klucz bezpieczeństwa i inne, zastępując je jakimś tekstem.
Przetwarzanie zależy od stanu opcji podczas konfigurowania czujnika Device Config dla konkretnego węzła.
secret: /^(create snmp community) \S+/gm: "$1 <removed>" /^(create snmp group) \S+/gm: "$1 <removed>"
Definiowanie poleceń do wykonania
To proste. W bloku commands: dodaj każde polecenie i po nim opisz przetwarzanie, jeśli to konieczne.
Skomentowane dane wyjściowe polecenia
commands: show inventory: comment:
Polecenie z blokiem przetwarzania
commands: show version: lines: reject: - /([Ss]ystem [Uu]p\s?[Tt]ime|[Uu]p\s?[Tt]ime is \d)/ comment:
Polecenie regularne z pełnym wyjściem
commands: "show running-config | nomore":
Konfiguracja sesji i protokołu
Blok konfiguracyjny zaczyna się od config: Następnie blok jest opisany listą protokołów, do których się odnosi.
Telnet
Telnet jest czasami jedyną opcją dostępu do urządzenia. Wymaga ustawienia wyrażeń regularnych do wykrywania zachęty (prompt) o nazwę użytkownika i hasło.
telnet: #set prompts for interactive telnet login login: username: /Username:/ password: /Password:/
SSH
Typowe dla SSH
ssh: #terminal options pty: charsWide: 1000
Exec mode
Polecenia mogą być wykonywane w sesji interaktywnej lub w trybie exec. Aby włączyć tryb exec dodaj
ssh: exec: true
Polecenie do wykonania na początku i na końcu sesji
ssh, telnet: # commands to be executed after login afterLogin: - "no page" # Commands to execute before logout beforeLogout: - logout y n
Obsługa interaktywnych zachęt prompt
Wiele urządzeń pozwala na wyłączenie stronicowania przez wywołanie polecenia po zalogowaniu lub dodanie potoku (pipe) do polecenia, ale niektórym brakuje tej funkcji. Na taką okazję można zdefiniować wyrażenia regularne do oglądania wyjścia terminala i reakcji, którą zazwyczaj jest wysłanie jednego znaku.
Na przykład
expect: /Press any key to continue(\x1b[\??\d+(;\d+)[A-Za-z])$/m: send: " " replace: ""
W takim przypadku, jeśli pojawi się komunikat, program wyśle pojedynczą spację, a następnie usunie znak zachęty z wyjścia.