# Role Grundgerüst erstellen

Um eine Rolle zu erstellen muss man in seinem Projekt Verzeichnis wenn nicht schon vorhanden ein Verzeichnis roles erstellen.  
zum Beispiel, diese Verzeichnis. Wenn nicht besteht dann anlegen.

```shell
mkdir ~/mein-ansible/project1/roles/
#in das Verzeichnis rein gehen.
cd ~/mein-ansible/project1/roles/
```

Nun kann mittels ansible Galxay Befehl eine Rolle angelegt werden  
Der Aufbau einer Rolle ist immer der benutzername.rolenname  
Wir nennen unsere Rolle mal ansibe-role-test oder ansible-roletest wie ihr möchtet  
also der Befehl lautet:

```shell
ansible-galaxy init immohacker.ansible-role-test
```

  
Hier mit wird dann folgende Verzeichnisstruktur erstellt:

```shell
~/mein-ansible/project1/roles/immohacker.ansible-test-role
```

Die Verzeichnisstruktur sieht dann so aus:

```shell
.
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── README.md
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml


```

in der /meta/main.ymll kommen die Daten und die Versionsnummern rein. Diese Datei muss auch vorhanden sein, wenn die rolle mit Ansible Galaxy zur verfügung gestellt werden soll. Siehe [Repo in ansible Galaxy hinzufügen](https://wiki.hacker-net.de/books/ansible/page/repo-in-ansible-galaxy-hinzufugen "Repo in ansible Galaxy hinzufügen")  
bei jeder Änderung an der Rolle muss die Versionsnummer in der Datei erhöht werden.  
Diese Datei dient

Die wichtigsten Punkte in der Datei sind:

```shell
authors : Unser Name
Description : Beschreibung der Rolle, also was macht diese.
company : Deine Firma ist optional
#Eine liste von Platformen gibt es hier: https://galaxy.ansible.com/api/v1/platforms/
platforms:
 - name: Debian
   versions:
   - stretch
   - buster
   - bullseye
   - all

#Die midestversion von ansible
min_ansible_version: "2.1"

#Unterwelchen suchbegriffen die Rolle gefunden werde soll, die Tags
galaxy_tags: ['etstbegriff1','testbegriff2','testbegriff3','testbegriff4']

dependencies: 
  - role: stefanhacker.ansible_extract_iso
    tags: [never]
    
  Das Tag never bedeutet lade die Rolle für die abhängigkeit runter, führe diese aber nicht aus
  Rollen die als abbhänngigkeit eingetragen werden, werden standard mäßig auch gleich nach dem download ausgeführt.
  unter Umständen ist dies aber nicht gewüscht, weil custom parameter übergeben werden müssen.

```

Das wars auch schon. Schon kann darin gearbeitet werden.  
Möchte man das ganze noch in ein Git Repo syncen dann siehe Abschnitt :   
[Ansible Role zu Github hinzufügen](https://wiki.hacker-net.de/books/ansible/page/ansible-role-zu-github-hinzufugen "Ansible Role zu  Github hinzufügen")