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

# Modul Esensial & Troubleshooting Ansible

> Eksplorasi modul-modul penting Ansible (file, user, git, cron, lineinfile, docker_container), teknik debugging, dan flags eksekusi.

Kekuatan utama Ansible terletak pada **Modul Bawaan (*Built-in Modules*)**. Modul adalah pustaka kode teruji yang menangani eksekusi perintah ke OS dengan menjamin sifat **idempoten** (hanya melakukan perubahan jika kondisi aktual belum sesuai).

***

## Modul-Modul Populer yang Wajib Dikuasai

Berikut modul yang paling sering digunakan dalam otomasi administrasi sistem harian:

### 1. Modul Manajemen User & Hak Akses (`ansible.builtin.user`)

Membuat pengguna sistem, grup, dan memasang SSH Public Key secara otomatis:

```yaml theme={null}
- name: Buat user deployer dengan akses sudo
  user:
    name: deployer
    groups: sudo
    append: yes
    shell: /bin/bash

- name: Pasang SSH public key untuk deployer
  authorized_key:
    user: deployer
    state: present
    key: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG..."
```

### 2. Modul Manajemen File & Direktori (`ansible.builtin.file`)

Mengatur permission, kepemilikan (*owner*), atau membuat symbolic link:

```yaml theme={null}
- name: Pastikan direktori aplikasi ada dengan permission yang benar
  file:
    path: /opt/myapp/data
    state: directory
    owner: deployer
    group: deployer
    mode: '0755'
```

### 3. Modul Manipulasi Baris Konfigurasi (`ansible.builtin.lineinfile`)

Mengubah satu baris pengaturan spesifik di dalam file config (misal menonaktifkan login SSH root):

```yaml theme={null}
- name: Matikan password authentication pada SSH server
  lineinfile:
    path: /etc/ssh/sshd_config
    regexp: '^#?PasswordAuthentication'
    line: 'PasswordAuthentication no'
    state: present
  notify: Restart SSH Service
```

### 4. Modul Git (`ansible.builtin.git`)

Menarik kode program terbaru langsung dari repositori Git di server target:

```yaml theme={null}
- name: Kloning repositori kode produksi
  git:
    repo: 'https://github.com/company/web-backend.git'
    dest: /var/www/myapp
    version: main
    force: yes
```

### 5. Modul Kontainer Docker (`community.docker.docker_container`)

Menjalankan kontainer Docker langsung melalui Ansible:

```yaml theme={null}
- name: Jalankan kontainer Redis cache
  community.docker.docker_container:
    name: redis-cache
    image: redis:alpine
    state: started
    restart_policy: always
    ports:
      - "6379:6379"
```

***

## Teknik Debugging & Troubleshooting Playbook

Ketika playbook yang kamu jalankan mengalami kegagalan (*failed*), jangan panik. Gunakan teknik berikut untuk mencari akar penyebabnya:

### 1. Menampilkan Nilai Variabel (`debug`)

```yaml theme={null}
- name: Tampilkan fakta IP address server target
  debug:
    msg: "Alamat IP privat server ini adalah {{ ansible_default_ipv4.address }}"
```

### 2. Menyimpan Hasil Eksekusi ke Variabel (`register`)

```yaml theme={null}
- name: Jalankan perintah shell khusus
  command: docker ps
  register: docker_output

- name: Cetak output perintah docker tadi ke terminal
  debug:
    var: docker_output.stdout_lines
```

### 3. Flag Verbose Terminal (`-v`, `-vvv`)

Semakin banyak huruf `v`, semakin mendalam detail log SSH dan koneksi yang ditampilkan:

```bash theme={null}
# Level verbose standar
ansible-playbook -i hosts.ini site.yml -v

# Level connection debug (melihat perintah SSH mentah yang dikirim)
ansible-playbook -i hosts.ini site.yml -vvv
```

### 4. Menjalankan Task Tertentu Saja Menggunakan Tags (`--tags`)

Jika playbook-mu sangat panjang (berisi 50 tasks) dan kamu hanya ingin mengeksekusi task konfigurasi Nginx tanpa mengulang instalasi yang lain:

```yaml theme={null}
- name: Konfigurasi Virtual Host Nginx
  template:
    src: vhost.j2
    dest: /etc/nginx/sites-available/default
  tags: [nginx-config]
```

Jalankan di terminal:

```bash theme={null}
ansible-playbook -i hosts.ini site.yml --tags "nginx-config"
```


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