Sette opp Ansible på Debian

Teknisk blogg

Sette opp Ansible på Debian

Installering av Ansible, med Juniper-spesifikke tilleggsmoduler

Denne artikkelen tar for seg installering av Ansible, med Juniper-spesifikke tilleggsmoduler ("ansible-junos-stdlib")), på Debian.

Vi tar, som med PyEZ-artikkelen, utgangspunkt i en helt fersk Debian "netinstall"

Installer Debian

  • Hent ned en fersk versjon av Debian (f.eks netinstall, https://www.debian.org/distrib/netinst)
  • Installer Debian

Installer Software

Kjør følgende kommandoer som root:

KODE START

    # apt-get update && apt-get upgrade

    # apt-get install python-pip ansible python-dev libxml2-dev libxslt1-dev zlib1g-dev build-essential libssl-dev libffi-dev python-setuptools

    # pip install ansible junos-eznc junos-netconify

    # ansible-galaxy install Juniper.junos

KODE SLUTT

Vi installerer Snsible via pip for å få Ansible version >= 2.0. Ansible kjører på python2, så vi trenger ikke tenke på python2 vs. python3 i dette tilfellet.

Noen av Juniper sine Ansible-moduler følger med i Ansible, mens noen må installeres via ansible-galaxy (pakkebehandler for Ansible-moduler). Både Ansible sine innebygde Junos-moduler, og Juniper sine egne Junos-moduler ("ansible-junos-stdlib") kan brukes om hverandre.

Teste funksjonalitet 

Config som må inn på Juniper-noden for å få NETCONF (og dermed PyEZ) til å kunne kommunsiere:

KODE START

    system {

        services {

            ssh;

            netconf {

                ssh;

            }

        }

    }

KODE SLUTT

Hosts-filen (ikke /etc/hosts) er en måte man kan lage et register over noder, for eksempel med tilhørende modell og tilkoblingsparametere.

KODE START

    j@debian:~/test_ansible$ cat hosts

    [test]

    node1 ip=10.0.10.1 user=netconf password=netc0nf

KODE SLUTT

Eksempel på en playbook-fil. Inneholder tre tasks; Sjekke at noden svarer på NETCONF-tilkoblinger, hente informasjon om noden og printe software-versjonen.

KODE START

    j@debian:~/test_ansible$ cat play.yaml

    ---

    - name: Get Device Facts

      hosts: test

      roles:

      - Juniper.junos

      connection: local

      gather_facts: no

 

      tasks:

      - name: Checking NETCONF connectivity

        wait_for: host={{ ip }} port=830 timeout=5

 

      - name: Retrieve information from devices running Junos OS

        junos_get_facts: 

          host={{ ip }}

          user={{ user }}

          passwd={{ password }}

        register: junos

 

      - name: version

        debug: msg="{{ junos.facts.version }}"

 

KODE SLUTT

Det kan være greit å vite at første test kun sjekker at Juniper-noden responderer på port 830 (NETCONF). Autentiseringen skjer i neste task.

Gjennomkjøring for å teste at Ansible og ansible-junos-stdlib-modulene fungerer

Vi bruker "ansible-playbook" for å utføre en playbook. Her har vi ett eksempel på gjennomkjøring av playbooken vi har definert lenger opp i artikkelen.

KODE START

    j@debian:~/test_ansible$ ansible-playbook -i hosts play.yaml

 

    PLAY [Get Device Facts] *******************************************************

 

    TASK: [Checking NETCONF connectivity] *****************************************

    ok: [node1]

 

    TASK: [Retrieve information from devices running Junos OS] ********************

    ok: [node1]

 

    TASK: [version] ***************************************************************

    ok: [node1] => {

        "msg": "15.1X49-D75.5"

    }

 

    PLAY RECAP ********************************************************************

    node1                      : ok=3    changed=0    unreachable=0    failed=0  

KODE SLUTT