Ansible replace modülünün bazı temel özellikleri şunlardır:
- İdempotens: Değişikliğin yalnızca gerekli olması halinde yapılmasını sağlar.
- Esneklik: Gelişmiş metin eşleştirme için düzenli ifadeleri destekler.
- Basitlik: Kullanımı kolay, basit parametrelerle.
Bu eğitimde, dosyalardaki dizeleri ve satırları değiştirmek için Ansible replace modülünün nasıl kullanılacağını inceleyeceğiz.
Temel Sözdizimi
Replace modülünün temel sözdizimine bir bakalım:
- name: Replace a string in a file
ansible.builtin.replace:
path: /path/to/file
regexp: 'old_string'
replace: 'new_string'
Bu Ansible kılavuzu, /path/to/file konumunda bulunan bir dosyada belirli bir dize olan old_string’i arar ve bunu yeni bir dize olan \new_string ile değiştirir. Bu dize değiştirme işlemini gerçekleştirmek için Ansible’ın yerleşik kitaplığındaki replace modülünü kullanır. Görev, belirtilen dosyadaki old_string’in her örneğinin new_string ile değiştirilmesini sağlar.
Basit Bir Dizgeyi Değiştirme
localhost’u 127.0.0.1 ile değiştirmeniz gereken bir yapılandırma dosyanız olduğunu varsayalım. Bunu şu şekilde yapabilirsiniz:
Aşağıdaki içerikle bir playbook oluşturun:
---
- name: Replace localhost with 127.0.0.1
hosts: all
tasks:
- name: Replace localhost with 127.0.0.1
ansible.builtin.replace:
path: /etc/example.conf
regexp: 'localhost'
replace: '127.0.0.1'
Açıklama:
path: Değiştirilecek dosyayı belirtir.regexp: Aranacak desen (bu durumda localhost).replace: (127.0.0.1) yerine konulacak yeni değer.
Şimdi yukarıdaki playbooku çalıştırın.
ansible-playbook replace_string.yml
Ansible, yapılan değişikliklerin bir özetini görüntüler. Localhost bulunup değiştirilirse, görevin değiştiğini gösterir.
PLAY [Replace localhost with 127.0.0.1] ****************************************
TASK [Gathering Facts] *********************************************************
ok: [hostname]
TASK [Replace localhost with 127.0.0.1] ****************************************
changed: [hostname]
PLAY RECAP *********************************************************************
hostname : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Belirli Bir Satırı Değiştirme
Bir yapılandırma dosyasındaki port numarasını 8080’den 9090’a güncellemeniz gerektiğini düşünün.
Bir playbook oluşturalım ve aşağıdaki içeriği ekleyelim:
---
- name: Replace port number in configuration file
hosts: all
tasks:
- name: Replace port 8080 with 9090
ansible.builtin.replace:
path: /etc/example.conf
regexp: '^port=8080'
replace: 'port=9090'
Açıklama:
regexp: ^port=8080 deseni yalnızca port=8080 ile başlayan satırlarla eşleşmemizi sağlar.
Şimdi yukarıdaki playbooku çalıştırın.
ansible-playbook replace_port.yml
Ansible port numarasını güncelleyecek ve görevin değiştiğini belirtecektir.
PLAY [Replace port number in configuration file] *******************************
TASK [Gathering Facts] *********************************************************
ok: [hostname]
TASK [Replace port 8080 with 9090] *********************************************
changed: [hostname]
PLAY RECAP *********************************************************************
hostname : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Gelişmiş Değiştirmeler için Düzenli İfadelerin Kullanımı
Dosyadaki konumundan bağımsız olarak, 1.0 sürümünün herhangi bir örneğini 2.0 sürümüyle değiştirmeniz gerektiğini varsayalım.
Aşağıdaki içerikle bir playbook oluşturun:
---
- name: Replace version number using regex
hosts: all
tasks:
- name: Replace version 1.0 with version 2.0
ansible.builtin.replace:
path: /etc/example.conf
regexp: 'version\s+1\.0'
replace: 'version 2.0'
Açıklama:
regexp: version\s+1\.0 deseni, aralarında herhangi bir boşluk bulunan versiyon 1.0 ile eşleşir.
Şimdi playbooku çalıştırın.
ansible-playbook replace_version.yml
Ansible, 1.0 sürümünün tüm örneklerini 2.0 sürümüyle değiştirecek.
PLAY [Replace version number using regex] **************************************
TASK [Gathering Facts] *********************************************************
ok: [hostname]
TASK [Replace version 1.0 with version 2.0] ************************************
changed: [hostname]
PLAY RECAP *********************************************************************
hostname : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Bir Dizeyi Yedeklemeyle Değiştirme
Bazen değişiklik yapmadan önce orijinal dosyanın korunduğundan emin olmak istersiniz. Örneğin, değiştirilecek dize zaten mevcutsa, değişiklik yapmadan önce orijinal dosyanın korunduğundan emin olmak için yedekleme parametresini kullanabilirsiniz.
- name: Replace with backup
ansible.builtin.replace:
path: /etc/example.conf
regexp: 'old_string'
replace: 'new_string'
backup: yes
Şimdi yukarıdaki playbooku çalıştırın.
ansible-playbook idempotency_backup.yml
Aşağıdaki çıktıyı göreceksiniz.
PLAY [Replace with backup] *****************************************************
TASK [Gathering Facts] *********************************************************
ok: [hostname]
TASK [Replace old_string with new_string with backup] **************************
changed: [hostname]
PLAY RECAP *********************************************************************
hostname : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Çok Satırlı Bir Deseni Değiştirme
Bazı durumlarda, birden fazla satıra yayılan bir metin bloğunu değiştirmeniz gerekebilir. Çok satırlı değişiklikleri nasıl yapabileceğiniz aşağıda açıklanmıştır.
Aşağıdaki içerikle bir playbook oluşturun.
- name: Replace a multiline pattern
hosts: all
tasks:
- name: Replace multiline text
ansible.builtin.replace:
path: /etc/example.conf
regexp: 'START_PATTERN.*?END_PATTERN'
replace: 'NEW_PATTERN'
backup: yes
Explanation:
regexp: START_PATTERN.*?END_PATTERN deseni, START_PATTERN ile END_PATTERN arasındaki herhangi bir metinle eşleşir.replace: Eşleşen metni NEW_PATTERN ile değiştirir.
Şimdi bu playbooku çalıştırın.
ansible-playbook replace_multiline.yml
Aşağıdaki çıktıyı göreceksiniz.
PLAY [Replace a multiline pattern] *********************************************
TASK [Gathering Facts] *********************************************************
ok: [hostname]
TASK [Replace multiline text] **************************************************
changed: [hostname]
PLAY RECAP *********************************************************************
hostname : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Büyük/Küçük Harfe Duyarlı Olmayan Değiştirme
Büyük/küçük harfe duyarlı olmayan bir değiştirme yapmanız gerekiyorsa ignorecase parametresini kullanabilirsiniz.
Bir playbook oluşturalım.
- name: Case-insensitive replacement
hosts: all
tasks:
- name: Replace case-insensitive text
ansible.builtin.replace:
path: /etc/example.conf
regexp: 'caseInsensitivePattern'
replace: 'newPattern'
backup: yes
ignorecase: yes
Açıklama:
ignorecase: Bu parametre, değiştirmeyi büyük/küçük harfe duyarlı hale getirir.
Şimdi yukarıdaki playbooku çalıştırın.
ansible-playbook replace_case_insensitive.yml
Aşağıdaki çıktıyı göreceksiniz.
PLAY [Case-insensitive replacement] ********************************************
TASK [Gathering Facts] *********************************************************
ok: [hostname]
TASK [Replace case-insensitive text] *******************************************
changed: [hostname]
PLAY RECAP *********************************************************************
hostname : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım.
Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum.
Son 6 yıldır sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum.
Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.