7 dagliga sysadmin-uppgifter att automatisera med Ansible

Ansible, ett gratis Python-baserat projekt med öppen källkod av Red Hat, är en populär plattform för konfigurationshantering och IT-automatisering.

Det är flera plattformar och kan fungera med de flesta moderna operativsystem, inklusive Linux, Windows och Mac. Den stöder ett deklarativt språk skrivet i YAML eller YAML Ain’t Markup Language för att beskriva systemkonfiguration.

Ansible har tillsammans med andra moderna plattformar för konfigurationshantering revolutionerat IT-automation och industristandarder. Konfigurationshanteringsverktyg har blivit en del av DevOps verktygsuppsättning och är en oskiljaktig del av alla moderna IT-processers livscykel. Detta är tillämpligt för alla moderna infrastrukturmiljöer, oavsett om de är byggda på en lokal, hybrid- eller molnmiljö. Inte bara för DevOps, utan Ansible kan också hjälpa till att automatisera många dagliga uppgifter som görs av en systemadministratör.

En av fördelarna med att använda Ansible är att den är agentfri och inte behöver mycket för att komma igång förutom SSH-åtkomst till målmaskinen och den version av Python som stöds, som redan är installerad som standard på de flesta moderna operativsystem. Eftersom det är ett lättviktsverktyg kan det också distribueras och användas med ett arv från innovativa system.

Användningar av Ansible

Orkestrering

Ansible är ett valfritt verktyg för orkestrering av olika systemadministrations- och distributionsuppgifter. Playbooks tillåter användning av samma orkestreringsarbetsflöden över olika projekt och YAML-baserad konfigurationsdata tillåter lagring och versionshantering av din infrastruktur på Git repository eller någon versionskontrollplattform som stöds.

Applikationsdistribution

Oavsett om det är en enkel kodapplikation med några rader eller en tung distribution med flera nivåer, gör Ansible det möjligt att automatisera livscykeln för end-to-end-applikationsdistribution.

Säkerhet och efterlevnad

Ansible kan också hjälpa till att säkerställa att dina system är säkrade enligt din organisations riktlinjer och överensstämmer med industristandarder. Det kan köras över tusentals servrar, generera en revision och åtgärda dessa säkerhetshål, vilket ger administratören fullständig kontroll över miljön.

Låt oss nu titta på några av de vanliga Sysadmin-uppgifterna som du kan automatisera med Ansible.

Kopiera filer från ett lokalt eller fjärrsystem

Som systemadministratör är det vanligt att kopiera filer från en katalog till en annan. Konfigurationsfiler måste ofta kopieras till fjärrservrar, eller ibland måste vi flytta filer från en fjärrplats till en annan.

Ansible kopieringsmodul kan hjälpa dig att göra dessa uppgifter i en spelbok.

Det är en rutinuppgift för en systemadministratör att känna till statusen för hanterade servrar och utföra fördefinierade åtgärder enligt organisationens policyer. En sådan uppgift är att känna till serverns drifttid. Med Ansible kan vi enkelt hämta upptidsvärden och skriva ut dem tillsammans. Ett exempel på att kopiera ntp-konfiguration från lokal till en fjärrserver med kopieringsmodul visas nedan:

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Copy a new ntp configuration file and back up the original, if it differs
      copy:
        src: ./ntp.conf
        dest: /etc/ntp.conf
        owner: root
        group: root
        mode: '0644'
        backup: yes

Konfigurera ytterligare cron-jobb

Att ställa in schemalagda jobb för att utföra rutinuppgifter är en del av att hantera vilken server som helst. Du kan schemalägga automatiska säkerhetskopieringar, patchning, granskning, etc., under vissa tider på dagen eller månaden automatiskt och lämna produktiv tid för din användning.

cron är ett sådant verktyg i Linux som stöder schemaläggning, och Ansible kan hjälpa dig att lägga till eller ändra dessa jobb. Som ett exempel visar spelboken nedan hur du enkelt kan ställa in ett rsync-jobb som root på några eller alla dina servrar med Ansible.

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Deploy cron job
      cron:
        name: "Set rsync job"
        user: root
        minute: "5"
        hour: "4"
        job: "rsync -avz /path/to/folder1 /path/to/folder1 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. Different Ansible-modul gör detta möjligt. Här är ett exempel som skapar en partition på en 100 GB disk, formaterar den med ext4 filsystem skapar en ny katalog för att montera partitionen och slutligen monterar den på en given katalog. En post i /etc/fstab skapas också genom temporär eller permanent montering beroende på modulalternativ.

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Create a partition
      parted:
        device: /dev/sdb
        number: 1
        part_end: "100%"
        state: present
    - name: Format new partition
      filesystem:
        fstype: ext4
        dev: /dev/sdb1
    - name: Create mount directory
      file:
        path: /data
        state: directory
    - name: Mount partition
      mount:
        path: /data
        src: /dev/sdb1
        fstype: ext4
        state: mounted

Samla serverloggar

Att förvara loggar på en bekväm plats är ibland avgörande för säkerhet, revision och analys. Ansible tillåter insamling av loggar från olika servrar i din företagsmiljö och håller dem på din definierade plats enkelt. Här är spelboken för att uppnå detta:

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

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

Installera eller ta bort paket och programvara

Paket måste ofta installeras på användarförfrågningar eller som en del av initiala serverbyggen. Vi kan också behöva ta bort vissa paket som inte längre behövs eller har några kritiska buggar etc. Ansible låter dig enkelt installera eller ta bort paket utan att behöva gå till varje server och köra manuella kommandon. Här är ett exempel som visar installation och borttagning av ett paket vardera för Ubuntu och RHEL/CentOS-baserade Linux-servrar.

---
- hosts: ubuntu
  gather_facts: no
  tasks:
    - name: Install lsof utility
      apt:
        pkg: lsof
        state: latest
      sudo: yes
    - name: Remove ARP Scan utility
      apt:
        pkg: arp-scan
        state: absent
      sudo: yes
      
 ---
- hosts: centos
  gather_facts: no
  tasks:
    - name: Install lsof utility
      yum:
        pkg: lsof
        state: latest
      sudo: yes
    - name: Remove ARP Scan utility
      yum:
        pkg: arp-scan
        state: absent
      sudo: yes

Hantera användare

Användare och grupper utgör den grundläggande strukturen kring vilken 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 trots automatisering för att stödja miljön.

Med Ansible har systemadministratören ett utmärkt verktyg för att skapa, ändra och ta bort användare och grupper med alla olika möjligheter som stöds i OS.

Här är ett enkelt exempel som visar skapandet och raderingen av användare och grupper med Ansible. Efter att den här spelboken har körts kommer målservrar att ha gruppA och gruppB skapade med givna GID:n medan användare1 kommer att tas bort, om det finns. En ny användare utan skal kommer att skapas som användare2 med givet 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 processdemoner som körs i bakgrunden och tjänar vissa tjänster som sshd som tillhandahåller SSH-anslutning etc. Med Ansible kan du hantera system- och användartjänster, som att starta, stoppa och starta om dem. Här är ett exempel på spelbok för att visa det:

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Restart ssh daemon
      service:
        name: ssh
        state: restarted
    - name: Restart sssd daemon
      service:
        name: sssd
        state: stopped
    - name: Restart httpd daemon
      service:
        name: httpd
        state: started

I exemplet ovan kommer SSH-tjänsten att startas om medan SSSD-tjänsten stoppas nästa gång. httpd-demonen startas mot slutet. Eftersom Ansible är idempotent, kommer alla tjänster som redan har startat eller stoppas inte att ändras medan omstart alltid ändrar tjänstens tillstånd. Kom ihåg att kontrollera tjänstens namn eftersom olika Linux-distributioner använder andra namn även för samma tjänst som ssh och sshd.

Sammanfattning 👨‍💻

Ansible gör livet för en systemadministratör enkelt genom att låta dig utföra upprepade och tidskrävande uppgifter på ett automatiserat sätt och minska mänskliga fel och ansträngning. Vidare kommer det att möjliggöra lagring av konfigurationsdata i ett centralt kodlager som Git, vilket gör att flera användare kan samarbeta och granska varje aktivitet.

För att läsa mer om Ansible och dess omfattande uppsättning moduler, se dess dokumentation.