Sette opp Ansible på Debian

Installering av Ansible, med Juniper-spesifikke tilleggsmoduler

Oppsett av Ansible på Debian

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:

# 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

Vi installerer Ansible 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:

system {

        services {

            ssh;

            netconf {

                ssh;

            }

        }

    }

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

j@debian:~/test_ansible$ cat hosts

    [test]

    node1 ip=10.0.10.1 user=netconf password=netc0nf

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

   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 }}"

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.

 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