mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-04-20 23:14:56 +02:00
105 lines
3.2 KiB
Markdown
105 lines
3.2 KiB
Markdown
# Todo
|
|
Implement
|
|
|
|
# Inventories Directory
|
|
|
|
## Purpose
|
|
|
|
The `inventories/` directory defines environment-specific inventory data for Ansible.
|
|
|
|
Each subdirectory within `inventories/` represents a dedicated persona or environment (e.g., `enterprise`, `developer`, `gamer`) and contains the necessary templates and variables to generate the final Ansible inventory and variable files.
|
|
|
|
This structure allows fully automated and reproducible inventory generation using a Python tool.
|
|
|
|
---
|
|
|
|
## Directory Structure
|
|
|
|
```
|
|
inventories/
|
|
├── <persona-name>/
|
|
│ ├── README.md # Description of the persona or environment
|
|
│ ├── inventory.yml.j2 # Jinja2 template for the dynamic inventory file
|
|
│ ├── vars.yml.j2 # Jinja2 template for generating group_vars / host_vars
|
|
│ └── config.yml # Metadata and settings for this persona (optional)
|
|
```
|
|
|
|
---
|
|
|
|
## Purpose of Each File
|
|
|
|
| File | Purpose |
|
|
|------|---------|
|
|
| `README.md` | Documentation of the persona/environment, included roles, and intended use case. |
|
|
| `inventory.yml.j2` | Jinja2 template that generates the inventory structure (hosts, groups, variables). |
|
|
| `vars.yml.j2` | Jinja2 template generating environment-specific variables (used in group_vars or host_vars). |
|
|
| `config.yml` | Optional metadata file containing settings like acquired personas, feature flags, default variables. |
|
|
|
|
---
|
|
|
|
## Recommended Workflow with Python Tool
|
|
|
|
1. The Python tool scans `inventories/<persona>` directories.
|
|
2. For each persona:
|
|
- Load `config.yml` (optional).
|
|
- Render `vars.yml.j2` → Output: `group_vars/all.yml`
|
|
- Render `inventory.yml.j2` → Output: `inventory.yml`
|
|
- Recursively acquire and merge dependent personas (defined in `config.yml`):
|
|
|
|
```yaml
|
|
# Example: inventories/enterprise/config.yml
|
|
acquire_personas:
|
|
- corporate
|
|
- administrator
|
|
- developer
|
|
```
|
|
|
|
3. Combine all output into a deployable inventory directory:
|
|
```
|
|
output/
|
|
├── enterprise/
|
|
│ ├── inventory.yml
|
|
│ └── group_vars/
|
|
│ └── all.yml
|
|
```
|
|
|
|
4. The generated inventory is ready for use:
|
|
```bash
|
|
ansible-playbook -i output/enterprise/inventory.yml site.yml
|
|
```
|
|
|
|
---
|
|
|
|
## Benefits of This Approach
|
|
|
|
- Personas remain fully modular and reusable.
|
|
- No duplication of host/group data.
|
|
- Centralized variable generation per persona.
|
|
- Automated and consistent inventory generation.
|
|
- Easy documentation per persona via `README.md`.
|
|
- Optional Feature Flags or Role Toggles in `config.yml`.
|
|
- Scalable for multi-environment setups.
|
|
|
|
---
|
|
|
|
## Example Python Features
|
|
|
|
| Feature | Description |
|
|
|---------|-------------|
|
|
| Auto Inventory Generation | Render `inventory.yml` and `vars.yml` from Jinja2 templates. |
|
|
| Recursive Persona Acquisition | Load dependent personas automatically. |
|
|
| Feature Flags | Enable/disable features via `config.yml`. |
|
|
| Variable Merging | Combine variables from all acquired personas. |
|
|
| Output Directory | Place final inventories in `output/<persona>` directory. |
|
|
|
|
---
|
|
|
|
## Example Command
|
|
|
|
```bash
|
|
python generate_inventory.py --persona enterprise --output output/
|
|
```
|
|
|
|
This will render the `enterprise` persona, recursively acquire all dependent personas, and generate a fully deployable inventory with variables.
|
|
|
|
``` |