Wer größere Aufgaben in Ansible umsetzt, wird früher oder später an den Punkt kommen, seine eigene Ansible-Rolle zu schreiben. Hier kann das ansible-galaxy-Kommando helfen:
$ ansible-galaxy init my-role - my-role was created successfully
Neben Handlern, Variablen und Metadaten wird auch ein Test-Task erstellt – mit diesem kann die Rolle bequem auf einen Host angewendet werden:
$ cat my-role/tests/test.yml --- - hosts: localhost remote_user: root roles: - my-role
Dieser Task lässt sich komfortabel mit Vagrant verknüpfen, um ein bereitgestelltes System zu konfigurieren:
config.vm.provision "ansible_local" do |ansible| ansible.install_mode = "default" ansible.playbook = "my-role/tests/test.yml" end
Wird nun Vagrant ausgeführt, ist es sehr wahrscheinlich, dass Ansible keine passenden Hosts findet:
$ vagrant up ... PLAY [localhost] *************************************************************** skipping: no hosts matched PLAY RECAP *********************************************************************
Abhilfe schafft hier das ersetzen von localhost durch all im Test-Task:
$ sed -i "s/localhost/all/g" my-role/tests/test.yml
Anschließend funktioniert die Konfiguration:
$ vagrant up --provision ... PLAY [all] ********************************************************************* TASK [Gathering Facts] ********************************************************* ok: [default] ... PLAY RECAP ********************************************************************* default : ok=10 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0