Ga naar hoofdinhoud

Met ansible vms en configuratie beheren

De User Guide gebruiken voor een basis. Eerst een inventory maken aan de hand van dit deel van de guide. Afhankelijk wat je control node is localhost of de server die je beheert als node toevoegen. Daarnaast de andere vm's in een groep zetten.

Daarna een playbook maken met behulp van dit deel, hieronder staan collections die je kan gebruiken.

Collections

ansible.builtin heeft nog veel meer plugins, bijvoorbeeld add_host, command, fail, git, group, package, pause, reboot enz. ansible.posix heeft nog meer plugins voor mount, seboolean, selinux enz. community.general heeft nog meer plugins voor bitbucket/github/gitlab, btrfs, freeipa, keycloak, selinex enz. Er zijn nog meer collections op hier te vinden, bijvoorbeeld community.docker.

Voor het draaien van playbooks kun je een ansible system account maken met alleen de rechten die het nodig heeft. Dat doe je eerst met sudo useradd -r ansible, daarna geef je met een sudoersbestand dat account de juiste rechten. Dit kan in het standaard sudoersbestand of in een apart bestand in de sudoers.d-map. Dit kan met sudo visudo -f /etc/sudoers.d/ansible. Je moet /bin/sh ook als goedgestaan command toevoegen, omdat het op ssh-nodes '/bin/sh -c '"'"'sudo -H -S -n -u root /bin/sh -c '"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-ptjdikctsejxvnxqbindqlcxnexkwtpy doet. Deze pagina geeft aan dat gebruikers in minder restictieve omgevingen ansible ALL privileges geven.

Je kan collections installeren met een requirements file, dan haalt die het automatisch op van ansible galaxy. ansible.builtin hoef je is logischerwijs al geinstalleerd, dus die hoef je niet in het requirements.yml-bestand te zetten. Je installeert het met ansible-galaxy install -r requirements.yml.

Voor de basis-configuratie op alle drie hosts kun je een yaml-bestand maken voor de dnf/rpm packages en de firewall. Daarna kun je een yaml-bestand maken om de vms te starten. Voor de firewall moet je ook de firewall-library van python downloaden. Daar is de dnf-package "python3-firewall" voor, maar met behulp van deze pagina ben ik er achter gekomen dat die is gemaakt voor python3.6. Dus je moet de package python36 downloaden ansible_python_interpreter als var in het yaml-bestand toevoegen. Dat moet ook bij het yaml-bestand om de vms te starten.

Om de syntax van playbooks te controleren kun je ansible-lint gebruiken. Dat kun je installeren met pip(x), dnf (maar dan moet je wel een subscriber zijn van het "Red Hat Ansible Automation Platform") of als GitHub Action. Dat is misschien ook om te bouwen naar een self-hosted GitLab pipeline. Voor een minder goede variant kun je ook ansible-playbook --syntax-check playbook.yml gebruiken.

Als je bij de packages playbook de "latest" state gebruikt, vind ansible-lint dat niet goed. Daarvoor moet je dit toevoegen aan .ansible-lint:

skip_list:
- '403'

.ansible-lint zet je op dezelfde plek als de playbooks.

Om te testen kun je sudo privileges zonder wachtwoord instellen, maar daarna wil je voor geheimen ansible-vault gebruiken. Dit kan aan de hand van deze beschrijving, maar dan per host een "host_vars" subdirectory. Als je dit doet kun je net zo goed alle variables die je in het "hosts"-bestand hebt gezet in de "vars" bestanden zetten. Encrypt de vault bestanden allemaal met hetzelfde wachtwoord. In het sudoers bestand nu NOPASSWORD weghalen en toestemming geven voor ALL commands. Dit aangezien ansible toestemming nodig heeft voor /bin/sh, wat in Rocky Linux 8 een link is naar bash, dus dat komt op hetzelfde neer als ALL. Hiernaar moet je playbooks draaien met ansible-playbook -i hosts --ask-vault-password playbook.yml en dat werkt het zoals eerst.

Een voorbeeld van de basisplaybooks, inventory enz. staat hieronder:

ansible/
├── .ansible-lint
├── firewall.yml
├── hosts
├── host_vars
│   ├── localhost
│   │   ├── vars
│   │   └── vault
│   ├── server
│   │   ├── vars
│   │   └── vault
│   └── workstation
│   ├── vars
│   └── vault
├── requirements.yml
├── start_vms.yml
└── verify-packages.yml