Ansible setup

  Ansible

Omdat ik bezig ben met cursus ansible probeer ik mijn eigen test machines ook met ansible te onderhouden. ik heb hier voor een machine in gericht als ansible server. met het idee om hier eventueel later nog met tower op te kunnen spelen/testen. de ansible machine is een standaard ubuntu server op dit moment 18.04.5 LTS versie. ik maak gebruik van de ansible repo van Redhat die kan je vinden op de ansible website maar als je net als ik Ubuntu gebruikt kan je het volgende doen om de laatste versie te installeren.

$ sudo apt update
$ sudo apt install software-properties-common
$ sudo apt-add-repository --yes --update ppa:ansible/ansible
$ sudo apt install ansible

Om geen gebruik te maken van de default config van ansible heb ik de /etc/ansible/ansible.cfg een copy gemaakt in de home dir van de user. en tevens een lege host file neer gezet.

$ cp /etc/ansible/ansible.cfg ~/.ansible.cfg
$ touch ~/.ansible_hosts

deze .ansible.cfg heb ik aangepast naar mijn eigen wensen de belangrijkste zijn inventory. die verwijst naar inventory = ~/.ansible_hosts en ik maak gebruik van een aparte ansible user op de remote machines dit hoef je niet te doen maar ik gebruik hem voor eventueel hardening en voor toekomstige zaken. Als je nu de ansible versie opvraagt zal je in de output zien dat er gebruik gemaakt word de ansible.cfg in je home dir.

$ ansible --version
ansible 2.9.14
  config file = /home/localuser/.ansible.cfg
  configured module search path = [u'/home/localuser/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.17 (default, Jul 20 2020, 15:37:01) [GCC 7.5.0]

we gaan nu de ansible_host file vullen in mijn voorbeeld heb ik er 3 machines in staan de ansible server, en 1 Ubuntu machine en een Redhat machine. zoals de beschrijving aangeeft in de orginele file comments kan een host in meerdere groepen staan.

$ cat ~/.ansible_hosts
#   - Comments begin with the '#' character
#   - Blank lines are ignored
#   - Groups of hosts are delimited by [header] elements
#   - You can enter hostnames or ip addresses
#   - A hostname/ip can be a member of multiple groups

[server]
antares

[redhat]
kelvin

[ubuntu]
antares
lovell

[client]
kelvin
lovell

Omdat ansible gebruik maakt van ssh connecties moeten we op alle host de user aanmaken die je hebt gebruikt in de .ansible.cfg en omdat ik niet de hele tijd het password van die host wil in tikken moeten we ook de ssh pub key van de user van waar je ansible commando’s uitvoert naar de doel host copieren, dat hoeft dus niet de zelfde user. het is ook handig als je de user op de doel hosts toevoegd aan de sudoers file zodat je straks ook eenvoudige taken kan uitvoeren onder root.
hier onder de ping output van deze basis config. voor het voorbeeld heb ik de host kelvin nog geen user aangemaakt.

$ ansible all -m ping
kelvin | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: ansible@kelvin: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).", 
    "unreachable": true
}
antares | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
lovell | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    }, 
    "changed": false, 
    "ping": "pong"
}

Tussen de ansible output kunnen DEPRECATION WARNING zitten ik heb ze in bovenstaande voorbeeld weg gelaten voor de leesbaarheid. als je ze ook nog wilt zien kan je deprecation_warnings=False in je ansible.cfg plaatsen.