8.3 KiB
Executable file
##10 Adımda Ahenk Eklentisi Geliştirme
-
Ahenk geliştirme ortamını ve bağımlılıklarını kurun. Bu dokümandaki adımları izleyerek bağımlılıkları kurabilir, projeyi çalışır hale getirebilirsiniz.
-
lider-ahenk-archetype üzerinden yeni plugin için projeleri bu dokümanda belirtildiği gibi oluşturun.
-
Lider Ahenk'te archetype aracılığı ile yeni bir plugin projesi oluşturduğumuzda bu proje pluginimizin lider,console ve ahenk kısımlarını aynı dizin yapısı altında barındırır. Lider ve Console ile ilgili kısımları geliştirdiğimiz projeler maven modulü veya projesi iken, Ahenk kısmı debian paket yapısına uygun bir script dizinidir. Ahenk uygulaması çalışmaya başladığında
/etc/ahenk/ahenk.conf
dosyasında belirtilmiş olan,(ahenk.conf dosyasında hangi parametre ne işe yarar?) eklentilerin bulunduğu dizin yolu bilgisine erişir. Eklentilerin bu dizinde olması beklenir. Eklentinin tüm bileşenleri yeni oluşturduğumuz eklenti klasöründeyken, ahenk-eklenti kısmını oluşturan dizini projeden dışarıya çıkarmamak için ahenk.conf dosyasında belirtilen eklentilerin yoluna ahenk-eklenti klasörü için soft link vermemiz işimizi kolaylaştıracaktır. Bunun için: 3.1/etc/ahenk/ahenk.conf
dosyasında pluginfolderpath parametresinde/opt/ahenk/plugins/
yolunun olduğunu varsayalım 3.2 Yeni oluşturduğumuz eklentinin adının sample, bu eklentinin ahenk kısmının yolunun da/home/user/git/lider-ahenk-sample-plugin/ahenk-sample/sample
olduğunu varsayalım. 3.3/home/user/git/lider-ahenk-sample-plugin/ahenk-sample/sample
dizinini/opt/ahenk/plugins/
dizini içine link vermemiz için çalıştırmamız gereken terminal kodu şöyledir:ln -s /home/user/git/lider-ahenk-sample-plugin/ahenk-sample/sample /opt/ahenk/plugins
-
Eklentimizin Console ve Lider kısımlarını tamamlayıp Console'a ve Karaf'a eklentilerimizi eklediysek task veya policy'ler çalıştırıldığında, gönderilen datalar artık eklentinin ilgili py dosyasının handle fonksiyonlarına gelmesi gerekmektedir.
-
sample adlı eklentimizde bulunması gereken py dosyaları şunlardır:
main.py
policy.py (Politika eklentisi ise bulunmalı)
command_id.py (Görev çalıştıran eklenti ise eklentinin command_id'si adında olmalı -Birden çok command_id'li eklenti olabilir.)
safe.py (isteğe bağlı- Kullanıcı oturum açarken ve kapatırken tetiklenir.)
login.py (isteğe bağlı- Kullanıcı oturum açarken tetiklenir)
logout.py (isteğe bağlı - Kullanıcı oturum kapatırken tetiklenir)
init.py (isteğe bağlı - Ahenk çalışmaya başladığında tetiklenir.)
shutdown.py (isteğe bağlı - Ahenk servisi kapatılırken tetiklenir) -
policy.py politika çalıştıran eklentilerde bulunması gerekir. Güncel profiller login işlemi sonrasında alınır ve ilgili eklentinin policy.py dosyasındaki handle_policy fonksiyonu Ahenk çekirdeği tarafından çağırılır ve bu fonksiyon profile_data ve context diye iki argüman alır.
-
command_id.py görev çalıştıran eklentilerde olmalıdır. Bu script'in adı Lider'de tanımlanan command_id ile aynı olmak zorundadır. Lider'de tanımlı command id'ye sample eklentisi için lider-sample projesi tr.org.liderahenk.sample.commands paketi içinde tanımlanmış class'larda getCommandId() metodunda static olarak tanımlanmış halde bulabilirsiniz. Burada dikkat edilmesi gereken noktalar: bir eklentinin birden fazla görevi olabilir. Bu amaçla tr.org.liderahenk.sample.commands paketi altında birden fazla class ve command id tanımlanmış olabilir. Buna paralel olarak tanımlanan her command id için Ahenk eklentisinde de command_id isimleriyle py scriptleri oluşturmanız gerekir. Böylece aynı eklenti üzerinden gönderilen her farklı görev, Ahenk eklentisinde farklı command_id isimleriyle oluşturulmuş scriptlerce karşılanır.Bu scriptler dışardan handle_task fonksiyonu ile çalıştırılır ve bu fonksiyon task ve context diye iki argüman alır.
-
Politika ya da görev çalıştırdıktan sonra çeşitli işlemler gerçekleştirilen makine üzerinde, oturum kapatılırken geri almak istenilen bir yapılandırma ayarı, silinmesi gereken bir dosya ya da eski haline getirilmek istenen herhangi bir dosya için ,duruma göre, init.py, shutdown.py, login.py, logout, veya safe.py kullanılabilir.
-
Yukarda değinilen handle_policy ve handle_task fonksiyonlarının aldığı parametreleri açıklamak gerekirse: context Ahenk çekirdeği ile veri alışverişini sağlar. Şimdilik ahenk tarafından eklentiye, kullanıcı adı göndermek; eklenti tarafından çekirdeğe, çalıştırılan görev ya da profilin sonucunun/verinin döndürülmesi için kullanılır. Örneğin
context.get('username')
ile eklentinin üzerinde çalışması gereken kullanıcı adına erişebilir.context.create_response(*args)
ile işlemin çalışma sonucunun (başarılı ya da başarısız olması gibi) döndürülmesi sağlanır. task ve profile_data bu iki argümanda benzer işleve sahiptir. task görev çalıştırılırken gönderilen verilerin profile_data ise çalıştırılmak istenen profil bilgilerinin json formatındaki halidir. Console tarafından gönderilen veriler bu argümanlarla json formatında eklentiye ulaşır. Burdan sonra sadece gelen veriyi parse edip gerekli işlemleri gerçekleştimek kalıyor. -
Archetype ile generate edilen eklentinin Ahenk kısmındaki politika ve görevleri karşılayan scriptler AbstractPlugin class'ını extend ederler.
AbstractPlugin sayesinde ahenk çekirdeğinin sağladığı bazı sevis ve özelliklere erişebilir. Örneğinself.get_logger()
gibi...
Aynı zamanda AbstractPlugin üzerinden temel python operasyonlarının kolaylıkla gerçekleştirilmesi için Util kullanılabilir. Util'i kullanmak için AbstractPlugin'i extend etmek yeterlidir. Util'i kullanarak temel dosya işlemleri başta olmak üzere terminal komutlarını çalıştırmak gibi işlemler kolaylıkla gerçekleştirilebilir. Örneğinself.execute('ls')
. İncelemek için Util'e bakılabilir.
Ahenk'in üzerinde çalıştığı makinenin temel sistem bilgilerine direk erişebilmek için AbstractPlugin üzerinden System'i kullanabiliriz. Örneğin:self.Hardware.Network.interfaces()
ile network arayüzlerine erişilebilir. İncelemek için System'e bakılabilir.
####Dikkat Edilmesi Gereken Hususlar
-- Eklenti geliştirdikten sonra BeniOku, Kullanıcı ve Geliştirici için ayrı dokümanlar oluşturun ve bu belgeleri görsellerle destekleyiniz.
BeniOku'da eklenti hakkında kısaca temel bilgiler verilmeli. Bu bilgiler eklentinin politika veya görev çalıştırabilirliği, görev çalıştırıyorsa kaç farklı görev çalıştırdığı; kişi mi makine tabanlı mı olduğu , herhangi bir bileşene ya da mimariye bağımlı olup olmadığı; herhangi bir paket gereksinimi var olup olmadığı gibi bilgiler barındırmalı.
--Kullanıcı Kılavuzunda eklentinin ne işe yaradığı; hangi durumlarda nasıl kullanılacağı ekran görüntüleriyle desteklenerek açıklanmalıdır.
--Geliştirici Kılavuzu için eklentinin kullandığı altyapı ve izlediği işleyiş, kullanılan harici bileşen-teknolojiler ve yöntemlerden bahsedilebilir.
--Eklenti gereksinimleri ve tanımını yapınız. Eklenti dizininizde Debian klasörü altında control dosyasında Description değerinde eklentinin kısaca tanımını yazınız. Depends alanında ise bağımlı olduğu paketleri yazınız. (Eklenti çalışırken bu paketlerin bulunduğu varsayılmamalı, kontrol edilmeli, gerekiyorsa kurulmalı.)
--Python kodunu PEP-8 standartına göre geliştirmeye özen gösterin.