7 ежедневни задачи на Sysadmin за автоматизиране с Ansible

Ansible, безплатен проект с отворен код, базиран на Python от Red Hat, е популярна платформа за управление на конфигурацията и ИТ автоматизация.

Той е мултиплатформен и може да работи с повечето съвременни операционни системи, включително Linux, Windows и Mac. Той поддържа декларативен език, написан на YAML или YAML Ain’t Markup Language, за описание на системната конфигурация.

Ansible, заедно с други модерни платформи за управление на конфигурацията, направи революция в ИТ автоматизацията и индустриалните стандарти. Инструментите за управление на конфигурацията станаха част от набора от инструменти DevOps и са неделима част от жизнения цикъл на всеки модерен ИТ процес. Това е приложимо за всяка модерна инфраструктурна среда, независимо дали е изградена върху локална, хибридна или облачна среда. Не само за DevOps, но и Ansible може да помогне за автоматизирането на много ежедневни задачи, извършвани от системен администратор.

Едно от предимствата на използването на Ansible е, че е без агенти и не се нуждае от много, за да започнете, освен SSH достъп до целевата машина и поддържаната версия на Python, която вече е инсталирана по подразбиране на повечето съвременни операционни системи. Също така, тъй като това е лек инструмент, той може да бъде разгърнат и използван с наследство към иновативни системи.

Използване на Ansible

Оркестрация

Ansible е предпочитан инструмент за организиране на различни задачи за системно администриране и внедряване. Playbooks позволяват използването на едни и същи работни потоци за оркестрация в различни проекти, а базираните на YAML конфигурационни данни позволяват съхраняване и създаване на версии на вашата инфраструктура в Git хранилище или всяка поддържана платформа за контрол на версиите.

Внедряване на приложение

Независимо дали става дума за просто приложение с код от няколко реда или многостепенно внедряване с тежка тежест, Ansible прави възможно автоматизирането на жизнения цикъл на внедряване на приложението от край до край.

Сигурност и съответствие

Ansible може също така да ви помогне да гарантирате, че вашите системи са защитени според указанията на вашата организация и в съответствие с индустриалните стандарти. Може да работи на хиляди сървъри, да генерира одит и да коригира тези дупки в сигурността, като дава на администратора пълен контрол върху средата.

  Защо вашият лаптоп Samsung не се включва?

Нека сега да разгледаме някои от обичайните Sysadmin Tasks, които можете да автоматизирате с Ansible.

Копирайте файлове от локална или отдалечена система

Като системен администратор е обичайно да копирате файлове от една директория в друга. Конфигурационните файлове често трябва да бъдат копирани на отдалечени сървъри или понякога трябва да преместим файлове от едно отдалечено местоположение на друго.

Модулът за копиране на Ansible може да ви помогне да изпълните тези задачи в наръчник.

За системния администратор е рутинна задача да знае състоянието на управляваните сървъри и да изпълнява предварително дефинирани действия според политиките на организацията. Една такава задача е да знаете времето за работа на сървъра. С Ansible можем лесно да извлечем стойности за време на работа и да ги отпечатаме заедно. Пример за копиране на ntp конфигурация от локален на отдалечен сървър с помощта на модул за копиране е показан по-долу:

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

Конфигурирайте допълнителни cron задачи

Настройването на планирани задачи за изпълнение на рутинни задачи е част от управлението на всеки сървър. Можете да планирате автоматично архивиране, корекция, одит и т.н. през определени часове от деня или месеца автоматично и оставяйки продуктивно време за ваша употреба.

cron е един такъв инструмент в Linux, който поддържа планиране и Ansible може да ви помогне да добавите или промените тези задачи. Като пример, книгата по-долу демонстрира как можете лесно да зададете задача rsync като root на някои или всичките си сървъри с помощта на 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"

Управление на дискове и файлови системи

Ansible може да се използва за управление на дискове, оформление на дялове, файлови системи и монтирания, включително /etc/fstab на Linux сървъри. Различен модул Ansible прави това възможно. Ето пример, който създава дял на 100GB диск, форматира го с файлова система ext4, създава нова директория за монтиране на дяла и накрая го монтира в дадена директория. Запис в /etc/fstab също се създава чрез временно или постоянно монтиране в зависимост от опциите на модула.

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

Съберете регистрационни файлове на сървъра

Поддържането на регистрационни файлове на удобно място понякога е от съществено значение за сигурността, одита и анализа. Ansible позволява събирането на регистрационни файлове от различни сървъри във вашата корпоративна среда и ги съхранява лесно на определено от вас място. Ето книгата за постигане на това:

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

Инсталирайте или премахнете пакети и софтуер

Често се изисква пакетите да бъдат инсталирани по заявка на потребител или като част от първоначалните компилации на сървъра. Може също така да се наложи да премахнем определени пакети, които вече не са необходими или имат някои критични грешки и т.н. Ansible ви позволява лесно да инсталирате или премахвате пакети, без да се налага да посещавате всеки сървър и да изпълнявате ръчни команди. Ето пример, демонстриращ инсталирането и премахването на по един пакет за Ubuntu и базирани на RHEL/CentOS Linux сървъри.

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

Управление на потребители

Потребителите и групите формират основната структура, около която базираните на Unix/Linux системи управляват достъпа и разрешенията. В една голяма организация управлението на потребители и групи може да бъде голямо предизвикателство въпреки автоматизацията за поддържане на средата.

  11 най-добри решения за архивиране на данни за среден до корпоративен бизнес

С Ansible системният администратор разполага с отличен инструмент за създаване, модифициране и изтриване на потребители и групи с всички различни възможности, поддържани в операционната система.

Ето един прост пример, който показва създаването и изтриването на потребители и групи с помощта на Ansible. След като тази книга се изпълни, целевите сървъри ще имат група A и група B, създадени с дадени GID, докато user1 ще бъде премахнат, ако присъства. Нов потребител без обвивка ще бъде създаден като потребител2 с даден UID, присвоени групи и заключена парола.

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

Управление на услуги

Услугите са демони на процеси, които работят във фонов режим и обслужват някаква услуга като sshd, осигуряваща SSH свързаност и т.н. Използвайки Ansible, можете да управлявате системни и потребителски услуги, като стартиране, спиране и рестартиране. Ето примерна книга за игра, за да демонстрирате това:

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

В горния пример услугата SSH ще бъде рестартирана, докато следва спиране на услугата SSSD. httpd демонът се стартира към края. Тъй като Ansible е идемпотентен, всяка услуга, която вече е стартирана или спряна, няма да бъде променена, докато рестартирането винаги променя състоянието на услугата. Не забравяйте да проверите името на услугата, тъй като различните Linux дистрибуции използват други имена дори за същата услуга като ssh и sshd.

  Как да изключите фенерчето на iPhone

Резюме 👨‍💻

Ansible улеснява живота на системния администратор, като ви позволява да изпълнявате повтарящи се и отнемащи време задачи по автоматизиран начин и намалявайки човешките грешки и усилия. Освен това, това ще даде възможност за съхранение на конфигурационни данни в централно хранилище на код като Git, позволявайки на множество потребители да си сътрудничат и да преглеждат всяка дейност.

За да прочетете повече за Ansible и неговия обширен набор от модули, вижте неговия документация.