Ansible - alapok és beállítás

Környezet felépítése

Az Ansible környezetünkhöz 2 virtuális gépet fogunk használni: az eddigi GNS VM mellett egy Debian VM-et használunk az Ansible scriptek futtatására. A kódot továbbra is a gazdagépen írjuk, VSCode-al, SSH tunnelen keresztül. Ennek megkönnyítése érdekében először RSA kulcspáros hitelesítést kell beállítani.

Kulcspáros hitelesítés

A gazdagépen navigáljunk el C:\Users\<NÉV>\.ssh\ útvonalhoz, majd nyissunk egy parancssort és generáljunk egy kulcspárt:

ssh-keygen

Ezt követően másoljuk át a publikus kulcsot az Ansible hostra:

scp id_rsa.pub ansible@192.168.86.200:/home/ansible/id_rsa.pub

Most az ansible hoston adjuk hozzá a publikus kulcsot az engedélyezett kulcsokhoz:

cd
cat id_rsa.pub >> .ssh/authorized_keys

A linux oldalon ezzel kész is, már csak a windowson kell szerkeszteni a C:\Users\<NÉV>\.ssh\config fájlt. Ha nincs ilyen, hozzuk létre; adjuk hozzá a következő részt:

Host ansible@192.168.86.200
    HostName 192.168.86.200
    User ansible
    IdentityFile C:\\Users\\<NÉV>\\.ssh\\id_rsa

Ezt követően a VS Code újbóli megnyitása után a bal alsó sarokban Open a remote window > Connect to Host menüben megjelenik az ansible host, csatlakozzunk rá.

Ansible telepítése

Az Ansible hoston telepítjük a szükséges csomagokat: (root felhasználóval futtatva)

apt update
apt install python3 python3-pip python3-venv

Az ansible telepítést a következő paranccsal ellenőrizhetjük:

ansible --version

SSH csatlakozás

Bizonyos Cisco eszközök nem támogatják az SSH újabb paramétereit, így ezen módosítani kell a /etc/ssh/ssh_config fájlban:

Host *
    KexAlgorithms +diffie-hellman-group14-sha1
    HostkeyAlgorithms +ssh-rsa

Indítsuk újra az ssh szolgáltatást:

service ssh restart

Projekt készítése

Készítünk egy mappát, amiben dolgozni fogunk:

cd
mkdir project1 && cd project1

A Cisco eszközök kezeléséhez szükség lesz egy ansible modulra, ami a Debian csomaglistából nem érhető el, ezért létre kell hozni egy python virtuális környezetet és oda telepíteni azt:

python3 -m venv venv

Ha ezt a VSCode-ban csináltuk, akkor ezt követően fel kellene jönnie egy kérdésnek, hogy váltson-e a program erre a környezetre; fogadjuk el. Ha később nyitjuk meg itt a VSCode-ot, akkor ellenőrizzük, hogy ez a környezet legyen érvényben.

Így már tudunk csomagokat telepíteni, tegyük is ezt meg:

pip install ansible ansible-lint ansible-pylibssh

Ping, vagyis Hello World

Tegyük fel, hogy a GNS-ben már van egy router, aminek címe 192.168.86.201, engedélyezve van rajta az SSH és létezik egy ansible/ansible felhasználó. (Az IOSv routeren alapértelmezés szerint a vty vonalakon transport input none van kiadva, ezt mindenképp változtassuk meg!)

A hálózati eszköz nyilvános kulcsát fel kell venni az ismert kulcsok közé, hogy a script futásakor ne kérdezzen rá az ssh program (mert ettől megakadna). A legegyszerűbb, ha először manuálisan csatlakozunk ssh-val a hálózati eszközre és az előbb tárgyalt kérdésnél igent válaszolunk.

Az ansible host címe továbbra is 192.168.86.200, ezt fogjuk megpingelni a routerről, ansible segítségével.

Hozzuk létre a következő két fájlt:

inventory.yml

all:
  vars:
    ansible_connection: ansible.netcommon.network_cli
    ansible_network_os: cisco.ios.ios
    ansible_user: ansible
    ansible_password: ansible
  hosts:
    r1:
      ansible_host: 192.168.86.201

1-test.yml

---
- name: Test reachability
  hosts: r1
  tasks:
    - name: Ping me
      cisco.ios.ios_ping:
        dest: "192.168.86.200"

Ezt követően adjuk ki a következő parancsot:

ansible-playbook -i inventory.yml 1-test.yml

Ha minden jól lett beállítva, a program hiba nélkül lefut.