> For the complete documentation index, see [llms.txt](https://note.onurbolatoglu.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://note.onurbolatoglu.com/ansible-advanced/adhoc-commands.md).

# Adhoc Commands

Ad-hoc komutlar, Ansible ile tek seferlik veya hızlı doğrulama, test ya da bilgi toplama işlemleri yapmak istediğinizde kullanabileceğiniz **kısa** ve **pratik** komutlardır. Playbook’lar yerine doğrudan komut satırından (CLI) bir modül çağırarak veya rasgele bir komut (`-a`) çalıştırarak hedef sistemlerde işlem yapabilirsiniz.

### 1) Ad-Hoc Komut Nedir, Neden Kullanılır?

* **Playbook’lar**: Daha uzun vadeli, tekrar kullanılabilir, sürüm kontrolüne uygun otomasyon senaryoları için idealdir.
* **Ad-Hoc Komutlar**: Hızlı testler, tek seferlik işlemler, basit doğrulamalar veya “acil” müdahaleler için mükemmeldir.
  * Örneğin *“Bütün sunuculara ping at, yanıt geliyor mu?”*
  * “Tüm makinelerdeki `/etc/hosts` dosyasını hızlıca göreyim.”
  * “Tek bir satırla disk kullanımını kontrol edeyim.”

Kısacası, *Playbook yazmaya gerek kalmadan* anında komut gönderip sonucu görebilirsiniz.

### 2) Temel Kullanım

#### (A) Basit Ping Testi

```bash
ansible -m ping all
```

* `-m ping`: “ping” modülünü (Ansible’ın dahili modülünü) kullan.
* `all`: Envanter dosyasında tanımlı *tüm* host’lara git.
* **Amaç**: SSH bağlantısı ve kimlik doğrulaması doğru mu, host’lar erişilebilir mi test etmek.

Çıktı başarılıysa şöyle görürsünüz:

```
web1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
web2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
```

**Not**: Bu ping, “ICMP” yerine Ansible modülünün SSH üzerinden gönderdiği “pong” cevabıdır.

#### (B) Arbitrary (Rasgele) Komut Çalıştırma

Mesela tüm host’larda `/etc/hosts` dosyasını görüntülemek:

```bash
ansible -a "cat /etc/hosts" all
```

* `-a`: Bir metin komutunu direkt parametre olarak ver.
* `all`: Yine tüm hostlar.
* Modül belirtmezseniz varsayılan “command” modülü devreye girer.

**Örnek Çıktı**:

```
web1 | CHANGED | rc=0 >>
127.0.0.1    localhost
...

web2 | CHANGED | rc=0 >>
127.0.0.1    localhost
...
```

Böylece aynı anda pek çok makinede basit komutları yürütebilirsiniz.

### 3) Sudo (Become) Kullanımı

Ad-hoc komutlarda da **sudo (become)** kullanabilirsiniz. Mesela paket kurulumu, servis restart gibi yönetici ayrıcalıkları gerektiren işlemleri tek satırla yapmak:

```bash
ansible -m apt -a "name=nginx state=present update_cache=yes" all --become --ask-become-pass
```

* `-m apt`: apt modülünü kullanarak paket yönetimi yap.
* `-a "..."`: Bu modüle verilmesi gereken argümanlar.
* `--become`: Bu işlemi *root* (sudo) haklarıyla yap.
* `--ask-become-pass`: Sudo parolanızı interaktif olarak gireceksiniz.

### 4) Ad-Hoc Komutları Shell Script İçine Yazma

Tek tek komutları elle girmek yerine, sıralı birkaç ad-hoc komutunuzu bir **shell scripti** haline getirebilirsiniz. Örnek `check_servers.sh`:

```bash
#!/bin/bash

echo "=== Pinging all servers ==="
ansible -m ping all

echo "=== Checking /etc/hosts on all servers ==="
ansible -a "cat /etc/hosts" all
```

1. Dosyanızın başına `#!/bin/bash` ekleyin (shebang).
2. Scripti çalıştırılabilir hale getirin:

   ```bash
   chmod +x check_servers.sh
   ```
3. Artık tek komutla tüm işlemler:

   ```bash
   ./check_servers.sh
   ```

Bu yaklaşım özellikle:

* **Çevresel değişkenler** (ENV vars) ayarlayarak,
* **Sıralı** birkaç ad-hoc komutu bir defada çalıştırarak,
* Kısa bir *otomasyon iskeleti* yaratmanıza olanak tanır.

### 5) Ad-Hoc Komut vs. Playbook

* **Ad-Hoc Komut**:
  * Hızlı test, küçük bir komut.
  * Unutmamak istiyorsanız script’e koyabilirsiniz, ancak yine de uzun vadede yönetimi zordur.
* **Playbook (YAML)**:
  * Daha kalıcı, düzenlenebilir ve denetlenebilir.
  * Geniş ölçekli otomasyon, tekrar kullanım, sürüm kontrolü için tavsiye edilir.

**Pratikte**:

* Bir şeyi hızlıca denemek için ad-hoc (örneğin “tüm makinelerde bir dosyayı sil”).
* Sık tekrar edeceğiniz veya karmaşık işlemleri playbook’a dönüştürmek genellikle en iyi yöntem.

### 6) Özet

1. **Ad-hoc komutlar**, Ansible modüllerini “tek satırlık” biçimde çağırarak çok sayıda sunucuda eş zamanlı işlemler yapmanıza olanak tanır.
2. **Basit testler** (ping), **dosya görüntüleme** veya **paket yönetimi** gibi işlerde fazlasıyla kullanışlıdır.
3. **Sudo** ve diğer Ansible özellikleri (ör. vars, tags vs.) de ad-hoc komutlarla kısmen kullanılabilir.
4. **Shell script’lerle** birkaç komutu arka arkaya çalıştırmak isterseniz, ad-hoc komutlarınızı script’e yazabilirsiniz.
5. **Playbook** hâlâ uzun vadede daha organize ve sürdürülebilir bir yaklaşım sunar, fakat ad-hoc komutlar “hemen şimdi” bir şey yapmak için idealdir.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://note.onurbolatoglu.com/ansible-advanced/adhoc-commands.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
