7 dagliga sysadmin-uppgifter att automatisera med Ansible

By rik

Ansible, en kostnadsfri och öppen källkods plattform från Red Hat, baserad på Python, är en populär lösning för konfigurationshantering och automatisering av IT-processer.

Denna mångsidiga plattform fungerar smidigt med en rad moderna operativsystem, inklusive Linux, Windows och macOS. Ansible använder ett deklarativt språk, YAML (YAML Ain’t Markup Language), för att specificera systemkonfigurationer.

Ansible, tillsammans med andra framstående plattformar för konfigurationshantering, har revolutionerat hur IT-automation bedrivs och satt nya standarder inom branschen. Konfigurationshanteringsverktyg är nu en integrerad del av DevOps verktygslåda och en oumbärlig del i livscykeln för moderna IT-processer. Detta gäller oavsett om infrastrukturen är baserad på en lokal, hybrid- eller molnmiljö. Ansible är inte bara värdefullt för DevOps-team, utan kan även automatisera många rutinmässiga uppgifter som traditionellt utförs av systemadministratörer.

En av fördelarna med Ansible är dess agentlösa arkitektur. Det krävs minimal setup för att komma igång, i princip bara SSH-åtkomst till målmaskinen samt en kompatibel version av Python, vilket ofta redan är förinstallerat som standard i de flesta moderna operativsystem. Dessutom, tack vare sin lätta konstruktion, kan Ansible användas i både nya och äldre system.

Användningsområden för Ansible

Orkestrering

Ansible är ett utmärkt verktyg för att orkestrera olika uppgifter inom systemadministration och distribution. Med hjälp av ”playbooks” kan man använda samma automatiserade processer i flera projekt. Konfigurationsdata i YAML-format gör det möjligt att lagra och versionshantera infrastrukturen i Git-repositorier eller andra stödda versionskontrollsystem.

Applikationsdistribution

Oavsett om det handlar om en enkel applikation med få rader kod eller en mer komplicerad distribution med flera lager, kan Ansible automatisera hela livscykeln för applikationsdistribution.

Säkerhet och efterlevnad

Ansible kan hjälpa till att säkerställa att dina system är skyddade enligt organisationens riktlinjer och följer gällande industristandarder. Ansible kan köras på tusentals servrar, skapa detaljerade granskningsrapporter och automatiskt åtgärda säkerhetsbrister, vilket ger administratören full kontroll över miljön.

Låt oss nu undersöka några av de vanligaste systemadministrationsuppgifterna som kan automatiseras med Ansible.

Kopiera filer mellan lokala och fjärrsystem

För en systemadministratör är det vanligt att flytta filer mellan olika kataloger. Ofta behöver konfigurationsfiler distribueras till fjärrservrar, eller filer flyttas från en fjärrplats till en annan.

Ansibles kopieringsmodul är ett kraftfullt verktyg för dessa uppgifter.

Det är en rutinuppgift för en systemadministratör att övervaka statusen på de servrar som hanteras och genomföra åtgärder enligt organisationens policyer. Ett exempel på detta är att övervaka serverns upptid. Ansible gör det enkelt att hämta och visa dessa värden. Nedan visas ett exempel på hur man kopierar en NTP-konfigurationsfil från en lokal plats till en fjärrserver med hjälp av kopieringsmodulen:

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Kopiera en ny ntp-konfigurationsfil och säkerhetskopiera originalet om de skiljer sig åt
      copy:
        src: ./ntp.conf
        dest: /etc/ntp.conf
        owner: root
        group: root
        mode: '0644'
        backup: yes

Konfigurera schemalagda uppgifter (cron-jobb)

Att skapa schemalagda jobb för att utföra rutinmässiga uppgifter är en viktig del av serverhantering. Du kan automatiskt schemalägga säkerhetskopieringar, patchning och granskningar vid specifika tidpunkter, vilket frigör tid för andra uppgifter.

Cron är ett verktyg i Linux som underlättar schemaläggning av uppgifter. Ansible kan hjälpa dig att lägga till och modifiera dessa jobb. Följande ”playbook” visar hur man enkelt kan konfigurera ett rsync-jobb som root på en eller flera servrar med Ansible:

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Skapa cron-jobb
      cron:
        name: "Ställ in rsync-jobb"
        user: root
        minute: "5"
        hour: "4"
        job: "rsync -avz /sökväg/till/mapp1 /sökväg/till/mapp2 2>&1"

Hantera diskar och filsystem

Ansible kan användas för att hantera diskar, partitionslayouter, filsystem och monteringar, inklusive /etc/fstab på Linux-servrar. Detta görs möjligt med hjälp av olika Ansible-moduler. Följande exempel visar hur man skapar en partition på en 100 GB disk, formaterar den med ext4, skapar en ny katalog för att montera partitionen och slutligen monterar den. En post i /etc/fstab skapas också för temporär eller permanent montering, beroende på modulalternativ.

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

Samla serverloggar

Att samla och lagra loggar på en central plats är viktigt för säkerhet, revision och analys. Ansible gör det enkelt att samla loggar från olika servrar och lagra dem på en definierad plats. Följande ”playbook” visar hur man gör detta:

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
  
    - name: Hitta loggar
      find:
        paths: /var/log/
        patterns: '*.log'
        recurse: yes
      register: _logs

    - name: Hämta loggar
      fetch:
        src: "{{ item.path }}"
        dest: /tmp/logs
      with_items: "{{ _logs.files }}"

Installera eller avinstallera paket och programvara

Ofta måste paket installeras på begäran av användare eller som en del av initiala serverkonfigurationer. Det kan även vara nödvändigt att ta bort paket som inte längre behövs eller som har allvarliga buggar. Ansible gör det möjligt att enkelt installera eller avinstallera paket utan att behöva logga in på varje server individuellt och köra manuella kommandon. Följande exempel visar installation och avinstallation av paket på Ubuntu- och RHEL/CentOS-baserade Linux-servrar.

---
- hosts: ubuntu
  gather_facts: no
  tasks:
    - name: Installera lsof-verktyg
      apt:
        pkg: lsof
        state: latest
      sudo: yes
    - name: Ta bort ARP Scan-verktyg
      apt:
        pkg: arp-scan
        state: absent
      sudo: yes
      
 ---
- hosts: centos
  gather_facts: no
  tasks:
    - name: Installera lsof-verktyg
      yum:
        pkg: lsof
        state: latest
      sudo: yes
    - name: Ta bort ARP Scan-verktyg
      yum:
        pkg: arp-scan
        state: absent
      sudo: yes

Hantera användare

Användare och grupper utgör grunden för hur Unix/Linux-baserade system hanterar åtkomst och behörigheter. I en stor organisation kan det vara en stor utmaning att hantera användare och grupper manuellt, trots automatisering.

Med Ansible får systemadministratören ett kraftfullt verktyg för att skapa, ändra och ta bort användare och grupper med de funktioner som stöds i operativsystemet.

Följande enkla exempel visar hur man skapar och tar bort användare och grupper med Ansible. Efter att denna ”playbook” har körts kommer målservrarna att ha gruppA och gruppB skapade med de angivna GID:na, medan användare1 tas bort om den finns. En ny användare utan skal kommer att skapas som användare2 med det angivna UID, tilldelade grupper och låst lösenord.

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

Hantera tjänster

Tjänster är processer som körs i bakgrunden och tillhandahåller specifika funktioner, till exempel sshd som möjliggör SSH-anslutningar. Med Ansible kan du hantera system- och användartjänster, till exempel starta, stoppa och starta om dem. Följande ”playbook” visar hur detta fungerar:

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Starta om ssh-demonen
      service:
        name: ssh
        state: restarted
    - name: Stoppa sssd-demonen
      service:
        name: sssd
        state: stopped
    - name: Starta httpd-demonen
      service:
        name: httpd
        state: started

I exemplet ovan kommer SSH-tjänsten att startas om, medan SSSD-tjänsten stoppas. HTTPD-demonen startas slutligen. Eftersom Ansible är idempotent kommer tjänster som redan är startade eller stoppade inte att påverkas, medan omstarter alltid ändrar tjänstens tillstånd. Det är viktigt att vara uppmärksam på tjänstens namn, eftersom olika Linux-distributioner kan använda olika namn för samma tjänst, till exempel ssh och sshd.

Sammanfattning 👨‍💻

Ansible underlättar arbetet för systemadministratörer genom att automatisera repetitiva och tidskrävande uppgifter, minska risken för mänskliga fel och frigöra värdefull tid. Dessutom möjliggör det lagring av konfigurationsdata i ett centralt kodlager som Git, vilket underlättar samarbete och granskning av all aktivitet.

För mer information om Ansible och dess omfattande uppsättning moduler, se dokumentationen.