vRealize Automation Center – Control Flow
vRealize Automation Center Designer hakkında sıkça sorulan sorulardan biri de workflow’larımız içerisinde döngüler, karar mekanizmaları veya eş zamanlı olarak blokların nasıl çalıştırılacağı hakkında oluyor. Designer içerisinde bu ifadeleri “Control Flow” altında bulabilirsiniz ama ne işe yaradıkları konusunda ve nasıl kullanabileceğimiz konusunda VMWare tarafından detaylı bir doküman paylaşılmamıştır. Eğer daha önce temel düzeyde de olsa script geliştirmişseniz az çok ne işe yaradıklarını bilebiliyor ama yine de tam olarak nasıl kullanıldığını anlamak için bir kaç kere deneme yapmanız gerekiyor. Bu yazımda bu blokların nasıl kullandıklarından ve bazı gerçek kullanım senaryolarından bahsetmek istiyorum.
Control Flow objelerinin en önemli kullanım alanı, yolladığınız form bilgilerine göre bazı değişiklikler yapılması veya kararlar verilmesi gerekiyorsa(Hizmete göre klasöre atanması, backup talep edildiğinde ek bir workflow’un çağrılması vs) veya blueprint’lerinizin workflowlara yolladığı parametreler farklıysa doğru isimlerle alabilmenize yarıyor. Tabii yapabilecekleriniz sadece hayal gücünüzle sınırlı 🙂
While:
While, belli bir koşul sağlandığı müddetçe bir işin yapılmasını sağlayan döngü biçimidir. While’ı kullandığım noktalardan bir tanesi bir sunucuyu kurduktan sonra GP almadan RDP yapılamamaktadır. Eğer GP almandan, kurulumun tamamlandığına dair kullanıcıya bilgi giderse giriş yapamayacaktır. Bunun önüne geçmek için RDP yapılıp yapılamadığını kontrol eden bir script yazdım ve bağlantı sağlanıncaya kadar bir sonraki adıma ilerlememektedir.
DoWhile:
DoWhile döngüsü belli bir şart sağlandığı müddetçe bir işlemin yapılmasını sağlamaktadır. While döngüsünden farklı olarak DoWhile’ın özelliği gerekli şart sağlanamazsa bile yapılacak işlemi bir kereye mahsus yapmasıdır. İki kısımdan oluşmaktadır; Body ve Condition. Body çalıştırılacak olan bloğun bulunduğu kısım, Condition ise Body kısmının tekrar çalışması için gerekli olan şartı belirlerler.
Yukarıda ki örnekte benim sunucular kurulurken eğer MsSQL’in kurulması talep edilmişse,DBInstall.ps1 scripti çalışmakta ve MsSQL kurulumunu başlatmaktadır ama bu işlem uzun sürmektedir ve workflow’un MsSQL kurulumu tamamlanmadan devam etmesini istemiyorum. Bunun için kurulum devam ederken yukarıda ki script sürekli MsSQL kurulumunu kontrol etmekte, işlem bitinceye kadar beklemektedir.
ForEach:
ForEach aynen While gibi bir döngüdür burada ki kondisyon While’dan farklı olarak yolladığımız bir array içerisinde ki değişken sayısı kadar Body kısmında bulunan bloğu çalıştıracak olmasıdır. Bunun güzel tarafıysa her değişkeni ayrı ayrı olarak çağıra bilecek olmamızdır. Basit bir kullanım örneği olarak Linux sunucuları yaratıldıktan sonra her kullanıcının bashrc dosyasına bazı değişiklikler yapmak istiyorum. Bunun için blueprintten gelen linuxUser array’i içerisinde ki her kullanıcı için root altında ki scripti bir kere çalıştırmam gerekiyor.
IF:
If, benim en çok kullandığım kontrol ifadelerinden biridir. Türkçesi “eğer” olan bu ifade bir şart sağlandığı takdirde “Then” kısmı altında bulunan objeyi çalıştırırken bu şartlar haricinde kalan tüm durumlar için “Else” kısmı altında ki objeyi çalıştırır. If gerçekten bize esneklik kazandıran ve işlerimizi kolaylaştıran bir ifadedir. Şöyle bir kullanım örneği vermek istiyorum:50’den fazla blueprint’e sahip olan yapımızda sadece 2 adet blueprint’in Role özelliği farklı bir isimle bulunmaktadır(Role2). Eğer workflow’da bir değişiklik yapmazsam, Role2 özelliğine sahip 2 blueprint’ten biri talep edildiğinde Role özelliği bulunmadığından workflow hata verecek ve duracaktır. Bunun çözümü için IF kullanarak bir dallanma yarattım. Talep edilen blueprintler eğer bu 2 blueprint’lerden biriyse Role2 özelliğini alırken tüm istisnai durumlar için Role özelliğini alıyorum.
Switch:
Aynen if gibi oldukça yararlı bir kontrol yapısıdır. If’den farklı olarak birden fazla şart ve bu şartın gerçekleşmesi durumunda çalıştırılacak obje belirleyebiliriz. Mesela If örneğinde ki durumda eğer ikiden fazla dallanma durumu olsaydı(Role3,Role4,Role5 gibi) her bir dallanma için bir if bloğu eklemek yerine Switch kullanmak çok daha uygun olacaktır.
Expression hangi değişkenin koşul oluşturacağını belirler, her duruma için ayrı bir case ve bu case’in olması durumunda çalışacak objeyi belirleriz. Mesela bu örnekte machineCo değişkeni “1” ise RunProcess1 çalışacakken “2” için RunProcess2, “3” içinse RunProcess3 çalışmaktadır.
Parallel:
Eş zamanlı olarak birden fazla objeyi çalıştırmak için kullanılır, belli bir şartı yok ama unutmayın ki eğer objelerden biri başarısız olursa tüm workflow’un başarısız olmasına sebep oluyor. GetProperty objesiyle blueprintler’den birçok özelliği almakta ve scriptler içerisinde kullanmaktayım uzun uzun hepsini dizmek yerine tek bir parallel ifadesi içerisinde kullanıyorum.
Sequence:
Parallel’den farklı olarak objeleri eş zamanlı değil sırayla çalıştıran bir yapıdır. Özel bir kullanım alanı bulamadım eğer bulan veya kullanan biri varsa lütfen ne için kullandığını söyleyebilir mi?
Pick:
Pick objesinin kullanımını anlamam baya bir zaman almıştı. Öncelikle bu objeyi workflow’unuz içerisine yerleştirdiğinizde öteki “Control Flow” objeleri gibi her hangi bir objeyi içerisine tutup sürükleyemiyoruz. Pick objesi içerisindeyken sağ tıklayıp “Create Branch” diyerek istediğimiz kadar dallanma yaratabiliyoruz.
Peki, ne işe yarıyor? Yarattığımız tüm dallar içerisinde ki objeler aynı anda çalışmaya başlıyor ve ilk tamamlananın veya şartları yerine getirenin action kısmı çalışıyor. Mesela 3 adet branch yarattık ve her birinin içerisine vCO workflow’u yerleştirdik. İlk biten workflow’un sahip olduğu action çalışacaktır.
ParallelForEach:
Aynen foreach’de ki gibi bir array içerisinde ki her değişken için Body kısmını çalıştırır. Foreach ifadesinden farkıysa body kısmının sırayla değil de eş zamanlı olarak çalışmasıdır.
Son olarak vRealize Automation Center’ın büyük bir kısmı .Net ile yazıldığı için bir çok objenin ve fonksiyonun detaylı kullanımı, değişken atama ve şart belirlemek için kullanabileceğimiz mantık ifadelerini MSDN’de bulabilirsiniz. Control Flow için ilgili bağlantıya gitmeniz yeterlidir.
Okuduğunuz için teşekkür ederim.