> ## 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.

# Pengenalan Ansible (Dasar)

> Mengenal Ansible sebagai alat automasi & konfigurasi server: konsep Agentless, inventaris (Inventory), modul esensial, dan perbandingannya dengan skrip bash manual.

## Apa itu Ansible?

**Ansible** adalah platform otomatisasi TI sumber terbuka (*open-source IT automation engine*) yang dikembangkan oleh Red Hat. Ansible digunakan untuk:

* **Manajemen Konfigurasi (*Configuration Management*):** Mengatur setting OS, user, dan file config di ratusan server sekaligus secara konsisten.
* **Penyebaran Aplikasi (*Application Deployment*):** Mengotomatisasi instalasi dependensi, kloning repositori Git, dan menjalankan layanan.
* **Orkestrasi Tugas (*Task Orchestration*):** Menjalankan pembaruan sistem operasi (*patching*) terjadwal secara bertahap.

***

## Mengapa Ansible Sangat Populer? (Konsep Agentless)

Alat automasi terdahulu (seperti Puppet atau Chef) mengharuskan kita menginstal aplikasi agen (*agent software*) di setiap server target sebelum bisa diatur.

**Ansible revolusioner karena bersifat Agentless:**

1. **Tidak Butuh Agen Tambahan:** Server target (managed nodes) tidak perlu diinstal software apapun selain Python dan layanan standar **OpenSSH**.
2. **Koneksi Lewat SSH:** Komputer pengendali (*Control Node*) cukup terhubung ke server target melalui protokol SSH standar.
3. **Bahasa YAML Sederhana:** Alur konfigurasi ditulis menggunakan bahasa YAML yang sangat mudah dibaca oleh manusia (*human-readable*).
4. **Idempoten (*Idempotency*):** Jika sebuah tugas sudah selesai dilakukan di server, Ansible tidak akan mengulang pekerjaan tersebut jika dijalankan kembali (menghindari efek samping tak diinginkan).

***

## Arsitektur Ansible

```mermaid theme={null}
flowchart LR
    subgraph ControlNode["Control Node (Laptop / Server Admin)"]
        Playbook["Playbook (.yml)"]
        Inventory["Inventory (hosts.ini)"]
        Engine["Ansible Engine"]
    end

    subgraph ManagedNodes["Target Servers (Managed Nodes)"]
        Srv1["Web Server 1 (Ubuntu)\n(SSH + Python)"]
        Srv2["Web Server 2 (Debian)\n(SSH + Python)"]
        Srv3["Database Server (CentOS)\n(SSH + Python)"]
    end

    Playbook --> Engine
    Inventory --> Engine
    Engine -->|SSH Tunnel| Srv1
    Engine -->|SSH Tunnel| Srv2
    Engine -->|SSH Tunnel| Srv3
```

* **Control Node:** Komputer tempat kamu menginstal Ansible dan menjalankan perintah. (Bisa laptop Linux/macOS atau server CI/CD).
* **Managed Nodes:** Kumpulan server target yang dikendalikan oleh Ansible.
* **Inventory:** Berkas daftar alamat IP atau hostname dari server-server target yang dikelompokkan ke dalam grup (*grouping*).
* **Modules:** Unit kode kecil bawaan Ansible untuk melakukan tugas tertentu (misal: `apt` untuk install paket, `copy` untuk salin file, `systemd` untuk kelola service).

***

## Instalasi Ansible di Control Node

Ansible hanya perlu diinstal di komputer pengendali:

```bash theme={null}
# Di Ubuntu / Debian
sudo apt update
sudo apt install -y ansible

# Menggunakan Python Pip (Semua OS)
pip3 install ansible

# Memeriksa instalasi
ansible --version
```

***

## Menyiapkan Berkas Inventaris (`inventory.ini`)

Buat berkas bernama `hosts.ini` untuk mendata server-server target:

```ini theme={null}
[webservers]
192.168.1.50 ansible_user=ubuntu
192.168.1.51 ansible_user=ubuntu

[dbservers]
192.168.1.60 ansible_user=ubuntu

[all:vars]
ansible_ssh_private_key_file=~/.ssh/id_rsa
ansible_python_interpreter=/usr/bin/python3
```

### Menguji Koneksi (Ad-Hoc Ping)

Jalankan perintah pengujian pertama untuk memastikan semua server dapat dijangkau:

```bash theme={null}
ansible -i hosts.ini all -m ping
```

*Jika sukses, Ansible akan mengembalikan respons JSON berwarna hijau bertuliskan `"ping": "pong"`.*


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