# Collection Grundgerüst erstellen

Um eine Collection zu erstellen nimmt man ein Verzeichnis für alle Seine Collections.  
zum Beispiel, diese Verzeichnis. Wenn nicht besteht dann anlegen.

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

Nun kann mittels ansible Galxay Befehl eine collection angelegt werden  
Der Aufbau einer Collection ist immer der benutzername.collectionname  
Wir nennen unsere Collection mal general  
also der Befehl lautet:

```shell
ansible-galaxy collection init immohacker.general
```

  
Hier mit wird dann folgende Verzeichnisstruktur erstellt:

```shell
~/mein-ansible/project1/collections/immohacker/general/
```

Die Verzeichnisstruktur sieht dann so aus:

```shell
.
├── docs
├── galaxy.yml
├── plugins
│   └── README.md
├── README.md
└── roles

```

in der galaxy.yml kommen die Daten und die Versionsnummern rein.  
bei jeder Änderung an der Collection muss die Versionsnummer in der Datei erhöht werden.  
Diese Datei dient

Die wichtigsten Punkte in der Datei sind:

```shell
namespace: name des darunter liegenden spaces. Ich nehme immer den namen vom github Konto in diesem Fall immohacker
name : name der collection z.b general
version:
authors : Unser Name
Description : Beschreibung der Collection, also was macht diese.

```

dependencies: die Collections wovon diese Collection abhängig sein könnte.  
Allerdings sollte man es so bauen, das eine Colelction autark und nicht von anderen Collections abhängig ist.  
ansonsten wenn es geht die Abhängigkeiten mit in die Collection einbauen, Nachteil die Abhängigkeiten werden dann halt nur nicht mehr automatisch gepflegt, diese muss man dann jedes mal selbst aktualisieren.  
Aber falls nicht anders geht, hier ein Beispiel für Abhängikeiten  
Beispiel

```
dependencies:
    #größer oder gleich 1.0.0
    "other_namespace.collection1": ">=1.0.0" 
    #größer oder gleich 2.0.0 und kleiner als 3.0.0
    "other_namespace.collection2": ">=2.0.0,<3.0.0"
    "anderson55.my_collection": "*"    # note: "*" selects the highest version available
```

  
repository: Git url wenn vorhanden, meistens ja.   
 Zumindest wenn man veröffentlichen will, sonst natürlich nicht. Dann leer lassen.  
documentation: url zur Docu  
homepage: wenn nicht vorhanden leer lassen  
issues: githab issue tracker, wenn nicht vorhanden auch hier leer lassen.  
  
Im rootverzeichnis kann optional noch eine  
<span class="css-truncate css-truncate-target d-block width-fit">requirements.txt  
erstellt werden.  
In dieser werden alle Modul und Pluginsabhängikeiten eintragen, falls die Collection welche hat.  
Beispiel Aufbau:  
</span>

```shell
# Module deps, useful for editor intellisense, etc.
ansible-core==2.13.1
requests==2.28.1
proxmoxer==1.3.1

# Linting & Formatting
ansible-lint==6.3.0
pylint==2.14.4
autopep8==1.6.0
pre-commit==2.19.0

# Testing
tox==3.25.1

# Utility packages needed for scripts
pyyaml==6.0.0
packaging==21.3
```

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