Ansible Collections
1. Ansible Collections Nedir, Ne İşe Yarar?
Ansible “Collection” (koleksiyon), modüller, roller, eklentiler (plugins) ve ilişkili diğer öğelerin tek bir paket (self-contained) halinde dağıtılmasını sağlayan bir yapı sunar.
Örnek: “network.cisco” adında bir koleksiyon, Cisco cihazlarını yönetmek için özel modüller, roller vb. içerebilir.
Kısacası, “Bir pakette vendor’a/belirli bir amaca özel tüm Ansible içeriklerini toplamak ve paylaşmak” demektir.
Neden Gerekli?
Ansible’ın kendi çekirdek modülleri her durumda yeterli olmayabilir (özelleşmiş vendor veya bulut API’lerine ihtiyaç duyabilirsiniz).
Collections, topluluk veya vendor tarafından yazılmış gelişmiş/özel fonksiyonları kolayca yükleyip kullanmanızı sağlar.
2. Koleksiyonların Faydaları
Genişletilmiş Fonksiyonellik
Örneğin, bulut sağlayıcı (AWS, Azure) veya network vendor (Cisco, Juniper) modülleri, Ansible core’da sınırlı olabilir.
Bir koleksiyon yükleyerek, “cloud.xyz” veya “network.abc” adıyla ekstra modüllere/rollere erişirsiniz.
Modülerlik ve Tekrar Kullanım
Koleksiyonlar, “rol”, “modül” ve “plugin” gibi parçaları bir arada paketler.
Böylece bir projede kullanırken, başka projede de aynı koleksiyonu ekleyip tekrar kullanabilirsiniz.
Dağıtım ve Versiyon Yönetimi
“requirements.yml” dosyasında hangi koleksiyonların hangi sürümlerini istediğinizi tanımlayabilir, tek komutla hepsini kurabilirsiniz.
Bu, sürüm çakışmalarını veya yanlış modül sürümü gibi hataları önler.
3. Örnek Kullanım: Network Cihazları (Cisco, Juniper, vs.)
Senaryo: Büyük bir ağ altyapısında Cisco, Juniper, Arista cihazlarını yönetmek istiyorsunuz.
Varsayılan Ansible network modülleri yetmeyebilir.
Her vendor’ın “network.cisco”, “network.juniper” benzeri koleksiyonları olabilir.
Koleksiyonu yükleyerek (örn.
ansible-galaxy collection install network.cisco
), vendor’a özgü modülleri elde edersiniz.Artık
network.cisco
koleksiyonu içindeki modülleri playbook’larınızda doğrudan çağırabilirsiniz (örn. “cisco_ios_config” gibi).
4. Koleksiyon Nasıl Kurulur ve Kullanılır?
4.1 Basit Kurulum
Bu komut, network.cisco
koleksiyonunu indirip sisteminizdeki koleksiyon dizininde (örn. ~/.ansible/collections/
) saklar.
4.2 Playbook’ta Kullanmak
collections: altında “network.cisco” belirterek bu koleksiyondaki modülleri (ör. cisco.ios.ios_config
) kullanabilirsiniz.
4.3 requirements.yml ile Versiyon Belirtmek
Sonra:
Tüm koleksiyonlar istenen sürümlerde kurulur.
5. Kendi Koleksiyonunuzu Oluşturmak
İhtiyaç duyduğunuz modüller, roller veya plugin’ler varsa kendi namespace altında bir koleksiyon oluşturabilirsiniz (örn. “my_namespace.my_collection”).
Bu koleksiyonu
ansible-galaxy collection init my_namespace.my_collection
komutuyla başlatır, oluşturulan dizin yapısına kodlarınızı yerleştirir, sonra ister lokal projelerde kullanır ister Galaxy’de paylaşırsınız.
Colections Example,
Aşağıda basit bir Ansible collection kullanım örneği gösteriyorum. Bu örnekte, topluluk tarafından sağlanan “community.general” adlı koleksiyonu kullanıp bir görevi yerine getireceğiz. “community.general” koleksiyonunda pek çok ek modül yer alır (örneğin, zamanla ilgili bir modül veya sistemle ilgili ekstra komutlar).
1. Collection’ı Kurmak
Bu komut, community.general
koleksiyonunu varsayılan koleksiyon dizinine indirir (ör. ~/.ansible/collections/
veya roles_path
/ collections_paths
ayarlarınıza göre).
2. Basit Playbook Örneği
Aşağıda örnek bir playbook var; bu playbook’ta community.general
koleksiyonu içindeki bir modülü (örnek olarak community.general.shell
gibi) kullanacağız.
collections: altında
community.general
yazdığımız için, bu playbook o koleksiyondaki modülleri arar ve kullanabilir.community.general.shell:
satırında, koleksiyonun içindekishell
modülünü çağırıyoruz (örneğin, ek parametre veya gelişmiş seçenekler sunuyor olabilir).Komut çalıştırıldıktan sonra sonucu
shell_output
’a kaydedip (register: shell_output
), sonrasındadebug
ile ekrana basıyoruz.
Nasıl Çalıştırılır?
Çıktıda:
Böylece community.general
koleksiyonundan bir modülü doğrudan kullanmış olduk.
3. Kısa Özet
Koleksiyonu Yükle:
ansible-galaxy collection install <koleksiyon_ismi>
Playbook’ta Belirt:
collections:
altında<namespace>.<collection_name>
ifadesini ekleyin.Modülü Kullanın:
<namespace>.<collection_name>.<modül>
şeklinde çağırabilirsiniz (veya eğercollections:
satırında belirttinizse, doğrudancollection_name.modul
ismi de çalışır).
Bu şekilde, koleksiyonlardaki ek modüller, roller ve plugin’lerden kolayca yararlanabilirsiniz.
Last updated
Was this helpful?