> ## Documentation Index
> Fetch the complete documentation index at: https://docs.skanesgalab.my.id/llms.txt
> Use this file to discover all available pages before exploring further.

# Manajemen Inventaris & Variabel Ansible

> Mendalami format inventaris (INI vs YAML), pengelompokan host (grouping), host vars vs group vars, dan dynamic inventory cloud.

## Mengapa Manajemen Inventaris Sangat Penting?

Dalam lingkungan produksi nyata, kamu tidak hanya mengelola 1 atau 2 server. Kamu mungkin mengelola puluhan server web, database primer dan sekunder, load balancer, serta server monitoring yang tersebar di berbagai lingkungan (*Development, Staging, Production*).

**Inventory** adalah peta jalan bagi Ansible. Tanpa inventaris yang terorganisir dengan baik, kamu berisiko salah menjalankan skrip konfigurasi database ke server web, atau mengeksekusi patch pengujian ke server produksi!

***

## Format Inventaris: INI vs YAML

Ansible mendukung format file `.ini` dan `.yaml`. Format YAML semakin populer karena lebih mudah dipadukan dengan struktur data yang bersarang (*nested*).

### 1. Format INI Tradisional (`hosts.ini`)

```ini theme={null}
# Grup Web Servers
[web]
web1.example.com ansible_host=192.168.1.10
web2.example.com ansible_host=192.168.1.11

# Grup Database Servers
[db]
db1.example.com ansible_host=192.168.1.20

# Membuat Grup dari Grup Lain (Children)
[production:children]
web
db

# Variabel khusus untuk grup web
[web:vars]
http_port=80
max_clients=200
```

### 2. Format YAML Modern (`hosts.yml`)

```yaml theme={null}
all:
  children:
    web:
      hosts:
        web1.example.com:
          ansible_host: 192.168.1.10
        web2.example.com:
          ansible_host: 192.168.1.11
      vars:
        http_port: 80
        max_clients: 200
    db:
      hosts:
        db1.example.com:
          ansible_host: 192.168.1.20
```

***

## Praktik Terbaik: Pemisahan `group_vars` dan `host_vars`

Menaruh variabel langsung di dalam berkas inventaris membuat file menjadi kotor dan sulit dibaca. Standar industri enterprise menggunakan struktur direktori khusus:

```text theme={null}
project-ansible/
├── inventory.ini
├── group_vars/
│   ├── all.yml         # Variabel yang berlaku untuk SEMUA server (misal NTP, DNS)
│   ├── web.yml         # Variabel khusus untuk grup [web]
│   └── db.yml          # Variabel khusus untuk grup [db]
└── host_vars/
    └── web1.example.com.yml  # Variabel spesifik HANYA untuk web1
```

### Contoh Isi `group_vars/web.yml`:

```yaml theme={null}
nginx_worker_processes: auto
app_port: 3000
enable_ssl: true
```

Ansible secara otomatis membaca direktori `group_vars` dan `host_vars` yang sejajar dengan file inventaris tanpa perlu dideklarasikan manual di playbook!

***

## Pengenalan Dynamic Inventory (AWS / Cloud)

Bagaimana jika di cloud server kamu sering hidup dan mati secara dinamis (*Autoscaling*) sehingga IP address-nya selalu berubah?

Menulis IP secara manual (*Static Inventory*) sudah tidak relevan. Ansible menyediakan fitur **Dynamic Inventory Plugin** (misal `aws_ec2` plugin) yang secara otomatis meminta daftar IP aktif langsung ke API AWS berdasarkan *Tag* server:

Contoh konfigurasi `aws_ec2.yml`:

```yaml theme={null}
plugin: aws_ec2
regions:
  - ap-southeast-1
keyed_groups:
  - key: tags.Environment
    separator: ""
  - key: tags.Role
    separator: ""
```

*Dengan skrip ini, ketika ada server baru dengan tag `Role: web` dinyalakan di AWS, server tersebut otomatis masuk ke dalam antrean eksekusi Ansible tanpa kamu harus mengedit file inventaris sama sekali.*


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.