IBu eğitimde, metin dosyalarındaki satırları yönetmek için güçlü bir araç olan Ansible lineinfile modülünü inceleyeceğiz.
Yapılandırma dosyalarını güncelliyor veya belirli satırların mevcut olup olmadığını kontrol ediyorsanız, lineinfile bu görevleri otomatikleştirmenin basit bir yolunu sunar.
Bu Ansible modülünün söz dizimi ve kullanımına genel bir bakışla başlayacağız, ardından yeteneklerini gösteren pratik örneklere geçeceğiz.
Ansible Lineinfile Modülü Nedir?
lineinfile modülü, bir dosyada belirli bir satırın mevcut olup olmadığını doğrulamak için kullanılır. Ayrıca, belirli bir desene uyan mevcut satırları değiştirmek için de kullanılabilir. Bu modül, belirli satırların eklenmesi, değiştirilmesi veya kaldırılması gereken yapılandırma dosyalarını yönetmek için özellikle kullanışlıdır.
İşte lineinfile modülünün temel sözdizimi:
- name: Ensure a line is present in a file
ansible.builtin.lineinfile:
path: /path/to/file
line: 'text to be added'
Bu basit örnek, belirli bir dosyada belirli bir metin satırının mevcut olduğundan emin olur. Modül, belirtilen yoldaki dosyayı kontrol eder ve mevcut değilse satırı ekler. Bu temel kullanım, daha karmaşık senaryoları ele almak için çeşitli parametrelerle genişletilebilir.
İşte açıklaması:
path: Değiştirilecek dosya.line: Eklenecek veya sağlanacak satırın mevcut olması.state:Yok olarak ayarlanırsa satır kaldırılacaktır.regexp: Değiştirilmesi gereken satırla eşleşen düzenli ifade.insertafter or insertbefore: Bulunamazsa satırın nereye ekleneceğini belirtir.
lineinfile’ın farklı senaryolarda nasıl kullanılabileceğini anlamak için bazı pratik örneklere bakalım.
Örnek 1: Bir çizginin mevcut olduğundan emin olunması
Bu örnekte, belirli bir yapılandırma satırının dosyada mevcut olduğundan emin olacağız.
---
- name: Ensuring a Line is Present
hosts: all
tasks:
- name: Ensure the timezone is set in /etc/timezone
ansible.builtin.lineinfile:
path: /etc/timezone
line: 'Asia/Kolkata'
Bu görev, /etc/timezone dosyasını kontrol edecek ve henüz mevcut değilse Asia/Kolkata’yı ekleyecektir. Bu, birden fazla makinede tutarlı olması gereken sistem genelinde yapılandırmalar ayarlamak için kullanışlıdır.

Çizginin mevcut olduğundan emin olarak, yapılandırmaları standartlaştırabilir ve manuel hataları önleyebilirsiniz. Bu, özellikle tutarlılığın önemli olduğu geniş ortamlarda faydalıdır.
Örnek 2: Bir çizgiyi kaldırma
Bazen, belirli bir satırın dosyada bulunmadığından emin olmanız gerekir. Bunu sağlamak için state: absent parametresini kullanabilirsiniz.
---
- name: Removing a Line
hosts: all
tasks:
- name: Remove the deprecated setting from config
ansible.builtin.lineinfile:
path: /etc/config_file
line: 'DeprecatedSetting=true'
state: absent
Bu görev, varsa DeprecatedSetting=true satırını /etc/config_file’dan kaldıracaktır. Bu, yapılandırma dosyalarındaki eski veya hatalı ayarları temizlemeye yardımcı olur.

Kullanımdan kaldırılan ayarların kaldırılması, temiz ve güncel yapılandırma dosyalarının korunmasına yardımcı olur ve yalnızca ilgili ve gerekli yapılandırmaların uygulanmasını sağlar.
Örnek 3: Bir desene uyan bir çizginin değiştirilmesi
Belirli bir desene uyan satırları regexp parametresini kullanarak değiştirebilirsiniz.
---
- name: Replacing a Line Matching a Pattern
hosts: all
tasks:
- name: Update the max_connections setting in my.cnf
ansible.builtin.lineinfile:
path: /etc/my.cnf
regexp: '^max_connections'
line: 'max_connections = 500'
Bu görev /etc/my.cnf dosyasında max_connections ile başlayan bir satırı arayacak ve bunu max_connections = 500 ile değiştirecektir. Bu, yeni gereksinimleri karşılamak için yapılandırmaları güncellemek için yararlıdır.

Desenleri kullanarak, yalnızca hedeflenen satırların değiştirilmesini sağlayarak, değiştirilecek belirli satırları hedefleyebilirsiniz. Bu, otomasyon betiklerinize esneklik ve hassasiyet katar.
Örnek 4: Belirli bir desenden sonra bir çizgi ekleme
Belirli bir satır veya desenden sonra bir satır eklemeniz gerekebilir. Bu amaçla insertafter parametresini kullanın.
---
- name: Inserting a Line After a Specific Pattern
hosts: all
tasks:
- name: Add a new repository after the existing repositories
ansible.builtin.lineinfile:
path: /etc/apt/sources.list
line: 'deb http://example.com/repo ubuntu main'
insertafter: '^# End of file'
This task will insert the new repository line after the line matching the pattern ^# End of file. This is useful for adding new configurations in a specific order.

Satırları doğru sırada eklemek, yapılandırma dosyalarınızın düzenli kalmasını ve yeni ayarların istenen bağlamda uygulanmasını sağlar.
Örnek 5: lineinfile modülüyle birden fazla satırı işleme
Lineinfile tek satırlar için tasarlanmış olsa da, modülü birden fazla kez çalıştırarak veya döngüler kullanarak birden fazla satırı yönetebilirsiniz.
---
- name: Handling Multiple Lines with Lineinfile
hosts: all
tasks:
- name: Ensure multiple lines are present
ansible.builtin.lineinfile:
path: /etc/my.cnf
line: "{{ item }}"
with_items:
- 'max_connections = 500'
- 'bind-address = 0.0.0.0'
Bu görev, /etc/my.cnf dosyasında hem max_connections hem de bind-address satırlarının mevcut olduğundan emin olur. Döngüleri kullanmak, tek bir görevde birden fazla değişiklik uygulamanıza olanak tanır.

Birden fazla satırı verimli bir şekilde yönetmek, oyun planlarınızın karmaşıklığını azaltır ve gerekli tüm yapılandırmaların tek seferde uygulanmasını sağlar.
Örnek 6: Belirli bir desenden önce bir satır ekleme
Bazen bir dosyadaki belirli bir desenden önce bir satır eklemek isteyebilirsiniz. Bu amaçla insertbefore parametresini kullanın.
---
- name: Adding a Line Before a Specific Pattern
hosts: all
tasks:
- name: Add a comment line before the server block in nginx config
ansible.builtin.lineinfile:
path: /etc/nginx/nginx.conf
line: '# Added by Ansible'
insertbefore: '^server {'
Bu görev, /etc/nginx/nginx.conf dosyasında server { ile başlayan herhangi bir satırdan önce # Added by Ansible satırını ekleyecektir. Bu, yapılandırma dosyalarında belirli bir yere yorum veya yönerge eklemeye yardımcı olur.

Belirli desenlerden önce satırlar eklemek, yeni yapılandırmaları tam olarak ihtiyaç duyulan yere yerleştirmenize yardımcı olur ve dosyanın mantıksal akışını korur.
Örnek 7: Henüz mevcut olmayan bir dosyadaki satırın sağlanması
Eğer yoksa bir dosya oluşturabilir ve içinde bir satırın bulunduğundan emin olabilirsiniz.
---
- name: Ensuring a Line in a File That Does Not Exist Yet
hosts: all
tasks:
- name: Ensure a line in a file that does not exist yet
ansible.builtin.lineinfile:
path: /etc/new_config_file
line: 'InitialSetting=true'
create: yes
Bu görev, /etc/new_config_file dosyasının mevcut olduğundan ve InitialSetting=true satırını içerdiğinden emin olur. Dosya mevcut değilse, oluşturulur. Bu, yeni yapılandırma dosyalarını başlatmak için kullanışlıdır.

Dosyaları anında oluşturmak, dosyalar eksik olsa bile gerekli tüm yapılandırmaların uygulanmasını sağlayarak otomasyon betiklerinizi daha sağlam hale getirir.
Örnek 8: Bir satırın belirli bir sahibi ve izinleri ile var olduğundan emin olma
Ayrıca bir satırın mevcut olduğundan emin olurken, dosyanın belirli bir sahibine ve izinlere sahip olduğundan da emin olabilirsiniz.
---
- name: Ensuring a Line Exists with a Specific Owner and Permissions
hosts: all
tasks:
- name: Ensure a line is present with specific owner and permissions
ansible.builtin.lineinfile:
path: /etc/some_config
line: 'SomeImportantSetting=yes'
notify:
- set_permissions
handlers:
- name: set_permissions
ansible.builtin.file:
path: /etc/some_config
owner: root
group: root
mode: '0644'
Bu görev, SomeImportantSetting=yes satırının /etc/some_config dosyasında mevcut olduğundan emin olur ve bir işleyici kullanarak sahibini kök, izinleri ise 0644 olarak ayarlar. Bu, dosyanın doğru sahipliğe ve izinlere sahip olmasını sağlar.

Doğru izinleri ve sahipliği ayarlamak, dosyanın güvenli olmasını ve yalnızca yetkili kullanıcılar tarafından erişilebilir olmasını sağlar.

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.