OSI:Netconf/Oxidized
Z HelpDesk
Sestavení a spuštění
- nainstalovat docker a docker-compose
- složka obsahující docker repozitáře
/root/docker
- sestavení containerů
cd /root/docker/oxidized docker-compose build
- spustit
docker-compose up -d
Automatické spouštění
- Ve složce /root/docker/oxidized je celý projekt a proti tomu je spouštěn přes systemd service:
[Unit] Description=%i service with docker compose Requires=docker.service After=docker.service [Service] Type=oneshot RemainAfterExit=yes WorkingDirectory=/root/docker/%i ExecStart=/usr/bin/docker-compose up -d --remove-orphans ExecStop=/usr/bin/docker-compose down TimeoutStartSec=0 [Install] WantedBy=multi-user.target
- Samotný service je disabled - nespouští se po startu, ale je spuštěn timerem:
[Unit] Description=Oxidized Timer [Timer] OnCalendar=*-*-* 3:00:00 [Install] WantedBy=timers.target
- Pokud se celý server restartuje, služba se nahodí v 3:00AM a poté se periodicky v tuto hodinu stahují konfigurace, automatické emaily uvnitř containeru kps_mailing se posílají v 6:00AM.
Adresářová struktura
├── docker-compose.yml #orchestrace containerů ├── mailing_build #container pro pravidelné posílání emailů │ ├── ansi2html.sh #skript pro převod mezi barevným textem z gitu do HTML │ ├── Dockerfile #recept na sestavení containeru │ ├── mailing-crontab #nastavení cronu │ ├── mailing.sh #rozesílací skript │ └── mail-template #základní data pro mail └── oxidized_build #container obsahující oxidized ├── Dockerfile ├── email_alert.sh #skript pro rozesílání emailů, pokud dojde k selhání ├── mail-template ├── oxidized #repozitář oxidized │ ├── bin │ ├── CHANGELOG.md │ ├── Dockerfile │ ├── docs │ ├── extra │ ├── Gemfile │ ├── lib │ ├── LICENSE │ ├── oxidized.gemspec │ ├── Rakefile │ ├── README.md │ ├── spec │ └── TODO.md └── oxidized-web #repozitář oxidized-web ├── Gemfile ├── lib ├── oxidized-web.gemspec ├── Rakefile └── README.md
Lokace na serveru
- Ve složce /srv/oxidized na netconfu se nachází:
├── config #konfigurační soubor pro oxidized (konfigurace se sama změní po změně souboru) ├── crash ├── git-repos #jednotlivé repozitáře ├── logs ├── router.db #seznam všech prvků (konfigurace se sama změní po změně souboru) ├── router_test.db └── tmp
docker compose
services: oxidized: #oxidized + oxidized-web #image: oxidized/oxidized:latest - pouzivame vlastni opatchovanou verzi build: context: './oxidized_build' dockerfile: Dockerfile container_name: kps_oxidized ports: - '127.0.0.1:8888:8888/tcp' environment: TZ: "Europe/Prague" CONFIG_RELOAD_INTERVAL: 600 emails: "'simekm stan petrovic smrha avrba'" #emaily pro alerty volumes: - /srv/oxidized:/root/.config/oxidized #mapování složky s konfigurací a repozitářema mailing: #sluzba pro zasilani pravidelnych emailu build: context: './mailing_build' dockerfile: Dockerfile container_name: kps_mailing environment: TZ: "Europe/Prague" repos: "'mikrotik paman wlc fortinet asa cheb nectiny kolej switches'" #názvy repozitářů podle skupin emails: "'simekm stan petrovic smrha avrba'" #adresy pro pravidelné emaily volumes: - /srv/oxidized/git-repos:/srv:ro #mapování složky s repozitářema
Konfigurační soubor
username: aaa password: bbb model: junos #default prompt: !ruby/regexp /^([w.@-]+[#>]s?)$/ resolve_dns: true interval: 86400 use_syslog: false debug: false threads: 30 timeout: 20 retries: 3 rest: 0.0.0.0:8888/oxidized #naslouchání webového rozhraní next_adds_job: false vars: remove_secret: true #obfuskování hesel groups: {} models: {} pid: "/root/pid" crash: directory: "/root/.config/oxidized/crashes" hostnames: false stats: history_size: 10 input: default: ssh, telnet debug: false ssh: secure: false ftp: passive: true utf8_encoded: true output: default: git git: user: Oxidized email: oxidized@netconf.civ.zcu.cz repo: "/root/.config/oxidized/git-repos/default.git" source: default: csv csv: file: "/root/.config/oxidized/router.db" delimiter: !ruby/regexp /;/ map: name: 0 model: 1 group: 2 gpg: false hooks: email_alert: type: exec events: [node_fail] cmd: 'bash /root/email_alert.sh $OX_NODE_NAME $OX_NODE_IP $OX_NODE_GROUP' #volání skriptu s parametry pokud stáhování configu selže async: true