> 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/variable-scope.md).

# Variable Scope

Ansible değişken modeli, bir değişkenin hangi parçalar tarafından görülebildiğini (yani “scope” veya kapsamını) belirler. Değişkenlerin nerede tanımlandıkları, o değişkenin hangi Ansible görevlerinde ve hangi hedef sunucularda kullanılabileceğini etkiler. Ansible’da üç temel kapsam (scope) vardır:

1. **Host Kapsamı**
2. **Play Kapsamı**
3. **Global Kapsam**

### 1. Host Scope

#### Tanım

“Host scope”, belirli bir host (sunucu) için tanımlanmış değişkenlerin yalnızca o host içerisinde erişilebilir olduğu anlamına gelir. Başka bir deyişle, bir değişken belirli bir makineye atandıysa, o değişkeni playbook içerisinde yalnızca o makineye görev gönderildiğinde kullanabilirsiniz.

#### Örnek

Bir envanter (inventory) dosyası düşünelim:

```ini
web1 ansible_host=172.20.1.100
web2 ansible_host=172.20.1.101 dns_server=10.5.5.4
web3 ansible_host=172.20.1.102
```

Burada `dns_server` değişkeni **yalnızca** `web2` host’u için tanımlanmıştır. Eğer bir playbook yazıp bütün host’lara `dns_server` değerini bastırmak istersek:

```yaml
---
- name: Print DNS Server
  hosts: all
  tasks:
    - debug:
        msg: "{{ dns_server }}"
```

Çıktıda, `web2` için `dns_server` değeri görüntülenirken diğer host’lar için “VARIABLE IS NOT DEFINED!” hatası görünür. Çünkü host kapsamındaki bir değişken, tanımlı olmadığı diğer host’larda erişilebilir değildir.

### 2. Play Scope

#### Tanım

“Play scope”, bir değişkenin tanımlandığı play içinde geçerli olması demektir. Eğer bir play’de değişken tanımlarsanız, o değişken yalnızca o play’de kullanılabilir. Bir sonraki play’e otomatik olarak **taşınmaz**.

#### Örnek

Aşağıdaki playbook’ta birinci play’de `ntp_server` değişkeni tanımlanmış, ikinci play’de ise tanımlanmamıştır:

```
---
- name: Play1
  hosts: web1
  vars:
    ntp_server: 10.1.1.1
  tasks:
    - debug:
        var: ntp_server


- name: Play2
  hosts: web1
  tasks:
    - debug:
        var: ntp_server
```

Çalıştırdığımızda Ansible:

* **Play1** içerisinde `ntp_server` değişkenini başarıyla basacak (çünkü orada tanımlı).
* **Play2** içerisinde, aynı değişkeni bulamayacak ve “VARIABLE IS NOT DEFINED!” diyecek.

Bu örnek, play’lerin birbirinden bağımsız kapsamları olduğunu gösterir. Eğer bir değişkeni iki farklı play’de de kullanmak istiyorsak, her iki play’de de tanımlamalıyız (ya da global yapmalıyız).

### 3. Global Scope (Genel Kapsam)

#### Tanım

Global değişkenler, playbook’un **tüm** kısımlarında ve hatta tüm play’ler boyunca geçerlidir. Örneğin, komut satırından ekstra değişken (**--extra-vars**) olarak geçtiğiniz değerler global kapsamda değerlendirilir.

#### Örnek

Playbook’u şu şekilde çalıştırdığınızı düşünelim:

```
ansible-playbook playbook.yml --extra-vars "ntp_server=10.1.1.1"
```

Bu durumda `ntp_server` değişkeni, hangi play olursa olsun otomatikman tanımlıdır. Böylece bütün play’leriniz bu değere erişebilir.

```
---
- name: Play1
  hosts: web1
  tasks:
    - debug:
        var: ntp_server

- name: Play2
  hosts: web1
  tasks:
    - debug:
        var: ntp_server
```

Çıktıda, her iki play’de de `ntp_server` değeri rahatlıkla basılır.

Özetle:

* **Host scope**: Değişken yalnızca tanımlandığı host’ta geçerli.
* **Play scope**: Değişken yalnızca tanımlandığı play’de geçerli.
* **Global scope**: Tüm play’ler ve host’lar için geçerli.


---

# 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/variable-scope.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.
