Ansible - rulare comenzi adhoc

Postat la Sat 27 October 2018 in tutoriale

In articolul anterior am prezentat cum instalam si configuram Ansible iar acum cateva exemple de utilizare.

Comezile adhoc sunt acele comenzi pe care dorim sa le rulam ocazional cu ansible in consola, fie pentru administrare sau pentru testare.

Pentru teste am pornit un container cu Ubuntu 18.04 pe serverul LXD. Acesta implicit are userul ubuntu creat la care am adaugat cheia publica de SSH.

Cum v-am sfatuit e foarte comod sa folositi setari locale - intr-un folder - pentru proiectele cu ansible. Deci creem fisierul ansible.cfg:

[defaults]
inventory = ./hosts
remote_user = ubuntu

precum fisierul hosts cu serverele

[web]
web1 ansible_host=192.168.25.110
web2 ansible_host=192.168.25.111

Pentru testarea conectarii la servere folosim modulul ping.

> ansible all -m ping
web1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
web2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

unde mesajul SUCCESS ne indica ca conectarea la masini functioneaza precum si ca serverele administrate ruleaza.

La prima conectare la o un server administrat, Ansible preia informatii despre hardware is OS - numite si facts - care sunt disponibile ca variabile ulterior pentru generarea fisierelor de configurare cu template-uri, filtrarea comenzi functie de OS etc.

Aceste informatii pot fi vizualizate cu modulul setup care returneaza o lista impresionanta de informatii

> ansible web1 -m setup
web1 | SUCCESS => {
"ansible_facts": {
    "ansible_all_ipv4_addresses": [
        "192.168.25.110"
    ],
    "ansible_all_ipv6_addresses": [
        "fe80::216:3eff:fe85:b814"
    ],
    "ansible_apparmor": {
        "status": "enabled"
    },
    "ansible_architecture": "x86_64",
    "ansible_bios_date": "01/06/2014",
    "ansible_bios_version": "F16b",
    "ansible_cmdline": {
        "BOOT_IMAGE": "/boot/vmlinuz-4.15.0-38-generic",
        "ro": true,
        "root": "UUID=15238e11-99f5-4472-a254-762dd7798c9b"
    },
    .....
  }
}

Majoritatea modulelor din Ansible permit utilizarea de parametrii sub forma:

ansible <grup:host> -m <modul> -a "param1=val1 param2=val2"

De exemplu folosim mosulul apt pentru a instala ultima versiune de zsh:

ansible web2 --become -m apt -a "name=zsh state=present update_cache=yes"
web2 | CHANGED => {
    "cache_update_time": 1540650014,
    "cache_updated": true,
    "changed": true,
    "stderr": "",
    "stderr_lines": [],
    "stdout": "...""
}

Deoarece avem nevoie de access de root pentru instalare aplicatii pentru sudo folosim parametrul --become sau -b.

Un modul util este raw care ne permite sa rulam comenzi clasice in consola prin SSH

ansible web2 -m raw -a "df -h"
web2 | CHANGED | rc=0 >>
Filesystem                   Size  Used Avail Use% Mounted on
lxd001/containers/awx-node2  459G  445M  458G   1% /
none                         492K     0  492K   0% /dev
udev                         3.9G     0  3.9G   0% /dev/tty
tmpfs                        100K     0  100K   0% /dev/lxd
tmpfs                        100K     0  100K   0% /dev/.lxd-mounts
tmpfs                        3.9G     0  3.9G   0% /dev/shm
tmpfs                        3.9G  192K  3.9G   1% /run
tmpfs                        5.0M     0  5.0M   0% /run/lock
tmpfs                        3.9G     0  3.9G   0% /sys/fs/cgroup
tmpfs                        786M     0  786M   0% /run/user/1000
Shared connection to 192.168.25.111 closed.

In articolul urmator va voi prezenta cum se pot crea succesiuni de comenzi prin playbook-uri

Articolul face parte din seria Aplicatii pentru managementul configuratiilor