Curs 5 - Automatizarea Configurației cu Ansible

Acest curs explorează utilizarea Ansible pentru gestionarea și automatizarea configurațiilor serverelor și infrastructurii.

1. Ce este Ansible?

Ansible este un instrument open-source pentru automatizarea infrastructurii, folosind fișiere YAML pentru definirea configurațiilor.

2. Instalarea Ansible

Ansible se poate instala pe Linux sau macOS cu:

sudo apt update && sudo apt install ansible -y

Pe macOS se poate instala cu Homebrew:

brew install ansible

3. Configurarea Ansible

Inventarul Ansible conține lista serverelor gestionate. Exemplu de fișier `hosts`:

[web]
server1 ansible_host=192.168.1.10 ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/id_rsa

Comandă pentru verificarea conectivității:

ansible all -m ping -i hosts

4. Playbooks în Ansible

Playbooks sunt fișiere YAML care definesc sarcini automatizate pentru unul sau mai multe servere.

Exemplu de playbook `setup-webserver.yml`:

- hosts: web
  become: yes
  tasks:
    - name: Instalare Nginx
      apt:
        name: nginx
        state: present
    - name: Pornire Nginx
      service:
        name: nginx
        state: started

Rularea unui playbook:

ansible-playbook -i hosts setup-webserver.yml

5. Module Ansible

Ansible folosește module pentru a interacționa cu sistemele gestionate.

Exemple de module frecvent utilizate:

- `ping`: Testează conectivitatea - `apt`: Instalează pachete pe Debian/Ubuntu - `yum`: Instalează pachete pe RHEL/CentOS - `copy`: Copiază fișiere pe server - `template`: Creează fișiere din template-uri Jinja2

Exemplu de utilizare a modulului `copy` într-un playbook:

- hosts: web
  tasks:
    - name: Copiere fișier de configurare
      copy:
        src: config/nginx.conf
        dest: /etc/nginx/nginx.conf
        owner: root
        group: root
        mode: 0644

6. Gestionarea AWS cu Ansible

Ansible poate gestiona resurse AWS folosind modulul `ec2_instance`.

Exemplu de playbook pentru lansarea unei instanțe EC2:

- hosts: localhost
  tasks:
    - name: Creare instanță EC2
      amazon.aws.ec2_instance:
        name: "Ansible-Managed-EC2"
        key_name: "my-aws-key"
        instance_type: "t2.micro"
        security_groups: ["default"]
        image_id: "ami-0c55b159cbfafe1f0"
        region: "us-east-1"
        count: 1

Pentru utilizarea AWS cu Ansible, instalează dependențele necesare:

pip install boto3 botocore

7. Crearea unui Playbook Complex

Exemplu de playbook complet care instalează Docker și rulează un container Nginx:

- hosts: web
  become: yes
  tasks:
    - name: Instalare Docker
      apt:
        name: docker.io
        state: present
    - name: Pornire Docker
      service:
        name: docker
        state: started
    - name: Rulare container Nginx
      docker_container:
        name: webserver
        image: nginx
        ports:
          - "80:80"

Resurse suplimentare: