Ansible: Automatisér IT-oppgaver – Få tiden tilbake!

Innføring i Ansible: Automatisering for moderne IT

Ansible, et gratis og åpen kildekode-prosjekt basert på Python fra Red Hat, er en populær plattform for å administrere konfigurasjoner og automatisere IT-prosesser.

Den opererer på tvers av flere plattformer, inkludert Linux, Windows og Mac, og støtter et deklarativt språk basert på YAML (YAML Ain’t Markup Language). Dette språket brukes til å beskrive ønsket systemkonfigurasjon.

Sammen med andre moderne verktøy for konfigurasjonsadministrasjon har Ansible endret måten IT-automatisering utføres og satt nye standarder i bransjen. Verktøy for konfigurasjonsadministrasjon er nå en integrert del av DevOps-verktøykassen og er avgjørende for enhver moderne IT-prosess. Dette gjelder uavhengig av om infrastrukturen er lokal, hybrid eller skybasert. Ansible er ikke bare nyttig for DevOps, men også for å automatisere mange rutineoppgaver som en systemadministrator utfører daglig.

En stor fordel med Ansible er at det er agentløst og enkelt å sette opp. Det krever kun SSH-tilgang til målmaskinen og en støttet versjon av Python, som som oftest allerede er installert som standard på de fleste operativsystemer. Som et lettvektsverktøy kan Ansible brukes i både eldre og innovative systemer.

Bruksområder for Ansible

Orkestrering

Ansible er et utmerket verktøy for å orkestrere systemadministrasjons- og distribusjonsoppgaver. Med «Playbooks» kan du gjenbruke samme arbeidsflyt på tvers av forskjellige prosjekter. Konfigurasjonsdata lagret i YAML-format tillater versjonskontroll av infrastrukturen din via Git eller andre støttede plattformer.

Applikasjonsimplementering

Ansible forenkler automatiseringen av hele livssyklusen for applikasjonsimplementering, uavhengig av kompleksitet – fra enkle applikasjoner til omfattende implementeringer på flere nivåer.

Sikkerhet og samsvar

Ansible bidrar til å sikre at systemene dine overholder organisasjonens retningslinjer og bransjestandarder. Det kan analysere og rette sikkerhetshull på tusenvis av servere, og gir administratoren full kontroll over miljøet.

La oss se på noen vanlige systemadministratoroppgaver som kan automatiseres med Ansible.

Kopiering av filer mellom lokale og eksterne systemer

En vanlig oppgave for en systemadministrator er å kopiere filer mellom kataloger, ofte til eksterne servere. Noen ganger er det også nødvendig å flytte filer fra en ekstern plassering til en annen.

Ansibles «copy module» gjør det mulig å automatisere disse oppgavene ved hjelp av en «playbook».

Det er også viktig for en systemadministrator å ha oversikt over statusen til administrerte servere og utføre handlinger basert på organisasjonens retningslinjer, for eksempel å overvåke servernes oppetid. Med Ansible kan du enkelt hente ut og presentere oppetidsverdier. Nedenfor er et eksempel på hvordan du kopierer en NTP-konfigurasjonsfil fra et lokalt til et eksternt system ved hjelp av «copy module»:

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Kopier ny ntp-konfigurasjonsfil og ta sikkerhetskopi av originalen hvis de er forskjellige
      copy:
        src: ./ntp.conf
        dest: /etc/ntp.conf
        owner: root
        group: root
        mode: '0644'
        backup: yes
  

Konfigurering av flere Cron-jobber

Planlegging av jobber for å utføre rutineoppgaver er en sentral del av serveradministrasjon. Du kan automatisere sikkerhetskopier, oppdateringer og revisjoner på bestemte tidspunkter, noe som frigjør tid til andre oppgaver.

Cron er et Linux-verktøy for planlegging av jobber, og Ansible kan brukes til å legge til eller endre disse. Nedenfor er et eksempel på en «playbook» som viser hvordan du enkelt kan sette opp en rsync-jobb som root på en eller flere servere ved hjelp av Ansible:

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Implementer cron-jobb
      cron:
        name: "Sett rsync-jobb"
        user: root
        minute: "5"
        hour: "4"
        job: "rsync -avz /path/to/folder1 /path/to/folder2 2>&1"
  

Administrasjon av disker og filsystemer

Ansible kan også brukes til å administrere disker, partisjonsoppsett, filsystemer og monteringer, inkludert /etc/fstab på Linux-servere. Dette gjøres mulig med ulike Ansible-moduler. Nedenfor er et eksempel som viser hvordan du oppretter en partisjon på en 100 GB disk, formaterer den med ext4, lager en ny katalog for å montere partisjonen og til slutt monterer den i den angitte katalogen. Oppføringen i /etc/fstab blir også opprettet enten for midlertidig eller permanent montering, avhengig av modulalternativene.

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Opprett en partisjon
      parted:
        device: /dev/sdb
        number: 1
        part_end: "100%"
        state: present
    - name: Formater ny partisjon
      filesystem:
        fstype: ext4
        dev: /dev/sdb1
    - name: Opprett monteringskatalog
      file:
        path: /data
        state: directory
    - name: Monter partisjon
      mount:
        path: /data
        src: /dev/sdb1
        fstype: ext4
        state: mounted
  

Samling av serverlogger

Det er ofte viktig å holde loggene på et praktisk sted for sikkerhet, revisjon og analyse. Med Ansible kan du enkelt samle logger fra ulike servere og lagre dem på en definert plassering. Nedenfor er en «playbook» for å gjøre dette:

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:

    - name: Finn logger
      find:
        paths: /var/log/
        patterns: '*.log'
        recurse: yes
      register: _logs

    - name: Hent logger
      fetch:
        src: "{{ item.path }}"
        dest: /tmp/logs
      with_items: "{{ _logs.files }}"
  

Installasjon og fjerning av pakker og programvare

Ofte må pakker installeres på forespørsel eller som en del av serveroppsett. Det kan også være nødvendig å fjerne pakker som ikke lenger er nødvendige. Ansible gjør det enkelt å installere og fjerne pakker uten å måtte logge inn på hver server og kjøre manuelle kommandoer. Nedenfor er et eksempel som viser installasjon og fjerning av en pakke hver for Ubuntu og RHEL/CentOS-baserte servere.

---
- hosts: ubuntu
  gather_facts: no
  tasks:
    - name: Installer lsof-verktøyet
      apt:
        pkg: lsof
        state: latest
      sudo: yes
    - name: Fjern ARP Scan-verktøyet
      apt:
        pkg: arp-scan
        state: absent
      sudo: yes

 ---
- hosts: centos
  gather_facts: no
  tasks:
    - name: Installer lsof-verktøyet
      yum:
        pkg: lsof
        state: latest
      sudo: yes
    - name: Fjern ARP Scan-verktøyet
      yum:
        pkg: arp-scan
        state: absent
      sudo: yes
  

Administrasjon av brukere

Brukere og grupper er grunnleggende for hvordan Unix/Linux-systemer administrerer tilgang og tillatelser. I en stor organisasjon kan det være utfordrende å administrere brukere og grupper.

Med Ansible har systemadministratoren et godt verktøy for å opprette, endre og slette brukere og grupper med alle de ulike mulighetene som operativsystemet støtter.

Nedenfor er et eksempel som viser hvordan du oppretter og sletter brukere og grupper med Ansible. Etter at denne «playbook» er kjørt, vil serverne ha gruppe A og gruppe B opprettet med de gitte GID-ene, mens bruker1 vil bli fjernet, hvis den er tilstede. En ny bruker uten skall blir opprettet som bruker2 med den gitte UID, grupper og låst passord.

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - group:
        gid: 12310
        name: groupA
        state: present
    - group:
        gid: 12311
        name: groupB
        state: present
    - user:
        name: user1
        state: absent
    - user:
        name: user2
        uid: 12427
        shell: /bin/false
        password_lock: yes
        groups: groupA, groupB
  

Administrasjon av tjenester

Tjenester er prosesser som kjører i bakgrunnen og utfører funksjoner som sshd som gir SSH-tilkobling. Med Ansible kan du administrere system- og brukertjenester, inkludert start, stopp og omstart. Nedenfor er et eksempel på en «playbook» som demonstrerer dette:

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Start ssh-demonen på nytt
      service:
        name: ssh
        state: restarted
    - name: Stopp sssd-demonen
      service:
        name: sssd
        state: stopped
    - name: Start httpd-demonen
      service:
        name: httpd
        state: started
  

I eksemplet over vil SSH-tjenesten startes på nytt, mens SSSD-tjenesten stoppes. httpd-demonen startes til slutt. Siden Ansible er idempotent, vil tjenester som allerede er startet eller stoppet ikke endres, mens omstart alltid vil endre tjenestetilstanden. Husk å sjekke tjenestenavnet, da forskjellige Linux-distribusjoner kan bruke andre navn for samme tjeneste.

Oppsummering 👨‍💻

Ansible forenkler arbeidet til en systemadministrator ved å automatisere repeterende og tidkrevende oppgaver, og redusere menneskelige feil og innsats. I tillegg muliggjør Ansible lagring av konfigurasjonsdata i et sentralt kodelager som Git, slik at flere brukere kan samarbeide og evaluere endringer.

For mer informasjon om Ansible og det omfattende settet med moduler, se dokumentasjonen.