1. Ana Sayfa
  2. Open Source
  3. Ansible Module Development

Ansible Module Development

ansible

Ansible ssh, winrm, API gibi bağlantı yöntemleri ile remote sunucularda veya lokal sunucumuzda standalone scriptler çalıştırır. Bu standalone scriptlere modül ismi verilir. Ansible built-in olarak binlerce modüle sahiptir ve her yeni versiyon ile bunlara yenileri ekleniyor. Ayrıca çok geniş bir communitye sahip olduğu için community tarafından geliştirilen çok fazla sayıda modül bulunmaktadır. Eğer bu modüller arasında ihtiyacınızı karşılayacak modül bulunmuyorsa kendi modülünüzü geliştirebilirsiniz. Bir çok dilde modül yazılabilir ama en kolay ve native yolu Python ile yazılmasıdır. Built-in olarak gelen modüller de Python ile yazılmıştır.

Custom modüller genel olarak built-in modüller ile çözülemeyen veya playbook’unuzu okunması zor hale getiren karmaşık regex işlemlerinde, text processing veya curl kullanarak yaptığımız api call’larında kullanılmaktadır. Ansible modülleri ANSIBLE_LIBRARY path’inde veya –module-path parametresi ile arar. Bunların yanında playbookun çalıştığı dizindeki ./library dizinin altındaki modülleri de import eder. Benim tavsiyem custom modüllerin ./library dizinin içinde geliştirilmesidir.

En temel modül örneği aşağıdaki gibidir.

 

Örnekte input parametresi girilmesi zorunlu parametre olarak belirtilmiştir. Parametrelerde farklı seçenekler mevcuttur. Bir kaç tane örnek verirsek no_log=True şifreleri gizlemek için kullanılır. choises(param1, param2) olarak 2 farklı parametre seçimi yapılması istenebilir. type=’bool’ ile de parametrenin belirli bir tipte olması belirtilebilir. Parametreleri module.params[] ile scriptimiz içinde kullanabiliriz.

Bir diğer zorunlulukta stdout’un JSON formatında olmasıdır. Eğer script başarılı tamamlanmışsa exit_json() veya başarısız olarak tamamlanmışsa fail_json() ile sonuç ekrana basılabilir.

Custom modül örneği

Aşağıdaki örnekte ise Ansible playleri ile array ve regex işlemlerini kullanarak playbookumu karmaşık bir hale getirmektense bu işleri yapacak bir modül geliştirdim. disk_fact.json dosyasından available scsi controller’ı ve unit number’ı bulan bu modül parametresiz olarak aşağıdaki şekilde çalışmaktadır. disk_fact.json dosyası ise vmware_guest_disk_facts modülü ile yazılmaktadır.

Dizin yapımız aşağıdaki gibidir.

 

 

 

 

Resim – 1

Ansible modülümüzün kodu aşağıdaki gibidir.

 library cat find_spot.py

 

Modülü script ismi ile aşağıdaki gibi basit bir playbook yardımıyla kullanabiliriz.

 

 

 

 

 

Resim – 2

Playbook’umuzun başarılı çıktısı aşağıdaki gibidir

Resim – 3

Eğer uygun bir scsi_controller bulunmazsa hatayı aşağıdaki gibi ekrana basılır.

Resim – 4 

Son olarak yazılan modülün idempotent olmasına dikkat edilmelidir. Ayrıca büyük bir modül geliştirileceği zaman communitynin de kullanacağı düşünülerek example ve documentation kısımları da eklenmelidir.

Bu konuyla ilgili sorularınızı https://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda sorabilirsiniz.

Referanslar

www.mshowto.org

TAGs: , , Ansible playbook, , ,

Yorum Yap

Yazar Hakkında

2016 yılında Yıldız Teknik Üniversitesi Elektronik ve Haberleşme Mühendisliğinden mezun oldum. Sonrasında Bilge Adamda 6 aylık sistem ve ağ uzmanlığı eğitimi alıdım. Bu eğitimde Microsoft On-Prem ürünlerini tecrübe ettim. Sonrasında da Vakifbank'ta Cloud & Linux Administrator olarak işe başladım. Storage ve sanallaştırma ekibindeyim. Storage tarafında EMC ve Hitachi ürünlerini SAN tarafında ise Brocade switchlerin yönetimini yapmaktayım. Bunlara ek olarak VMware ürünleri,ağırlıklı olarak Cisco UCS fiziksel sunucular ve Linux işletim sistemleri ile ilgilenmekteyim. VMware ürünlerinden de özellikle vRealize Orchestrator üzerine çalışmaktayım. Linuxlara işletim sistemi seviyesinde destek olmanın yanında Ansible üzerine yoğunlaşmış durumdayım.

Yorum Yap