Skip to main content

· 3 min read
Hasan Gural

Packer ile Azure üzerinde VM image yönetimine devam ediyoruz. Bir önceki yazımızda Service Principal ve Packer tanımlaması için JSON dosya oluşturup Variable tanımlarını yaptık fakat karşılarına değerler girmedik. Şimdi dilerseniz bizden istenilen tanıımlamaları tek tek girelim. Aşağıdaki resim içerisinde göreceğiniz gibi Variables olarak adlandırılan bölümde, Azure Subscription detayları, Service Principal bilgileri ve son olarak oluşturulacak olan image için saklanacak resource group ve image name bilgileri yer almaktadır. Bu bilgileri doldurduktan sonra, daha sonra onları ilerki tanımlamalarda kullanıyor olacağız. Adından anlaşılacağı gibi, bunlar sadece bizim abonelik ve packer için kullanılacak bilgileri içermektedir.

Yukarıda gördüğünüz beyaz alan içerisinde tüm istenilen key-value ilişkisi içerisindeki değerleri doldurdum. Packer kendi içinde Azure ARM API üzerinden istek yaptığı zaman Service Principal kullanarak yani ClientId ve ClientSecret ile erişim sağlayıp, ilgili subscriptipon üzerinde işlemlere başlayacak. Şimdi JSON dosyası içerisinde geliştirmelere devam edeceğiz. Bir özellik daha ekleyeceğiz JSON içerisine ve bu sefer adı 'Builders olacak ve alt kısmına 'Builders bize sunduğu özellikleri girebileceğiz. Basit haliyle Builders ne iş yapar derseniz, çeşitli platformlar için sanal makineler oluşturup bunlardan image üretmekten sorumludur. Örneğin, EC2, VMware, Azure, Citrix, VirtualBox, vb. İçin ayrı geliştiriciler vardır. Packer, varsayılan olarak birçok üretici ile birlikte gelir ve ayrıca yeni geliştiriciler eklemek için geliştirelebilir ve geliştirilebilir.

Şimdi ise Builders için bir tanımlama yapalım ve nasıl kullanıldığını anlamaya çalışalım. Öncelikle 'builders' tanımlaması aşağıdaki gibi yapılmaktadır.

Yukarıda görüldüğü gibi 'Builders' nesne içerisine oluşturacağımız image için gerekli key-value değerleri girebiliriz. Bu kısımda anlaşılacağı gibi benim gireceğim değerleri nereden öğreneceğinizi merak ediyorsanız, bunun için Packer sayfasını ziyaret edebilirsiniz. Takdir ederseniz her hizmet sağlayıcısının ( Azure, AWS, Vmware, Hyper vd ) hepsinin kendine özel terimleri ve adlandırmaları var. Bu yüzden bunları key – value şeklinde tanımlarken, reference alabileceğiniz tek sayfa Packer Builders sayfası olacaktır. Şimdi ise, Azure için örnek bir 'builders' tanımlarını inceleyelim.

Artık 'Builders' içerisine yaptığımız tanımlamaları görmektesiniz. Aslında çok zor ve anlaşılmayacak bir tarafı yok. Hemen 'Builders' tanımın altında "Type' ( 13.Satır ) yazan kısımda hangi provider için kullanacağımızı belirtmek zorundayız. Bunun sebebi yazımızın başında söylediğimiz gibi, Packer birçok provider üzerinde image yönetimini destekliyor. Turkuaz alan içerisine aldığım 15 – 20 satır arasına dikkat ettiğinizde, Variables Nesne içerisinden onları değişken şekliden çağırıp kullandık. Aslında JSON dosyasımızın ilk kısmında, Variable alanları tanıtıp, 'Builders' içerisinde kullandık. En son olan kırmızı bölgemizde satır 22 – 40 arasındaki alan ise Packer sayfası üzerinden image yönetimini için gerekli tanımlamalar olarak söyleyebiliriz. Bu tanımlamalar olmadan herhangi bir yönetilen imaj oluşturma şansınız yok. Bu kısımda, 'Azure Tags' nesnesinin karşına key-value olarak bir takım Tagler tanımladım. Bunlarıda kaynak için atamasını yapıyor olacak. Bunun dışında imaj özelinde yaptığımız tanımlaların karşısındaki değerlere baktığınız zaman sizde çok kolay bir şekilde anlayacaksınız. Bunlar sırasıyla, "ImageSku,ImagePublisher,Image_Offer" gibi değerler, bunun yanı sıra, WinRM gibi hizmetlerin açılması ve tanımlamaları yaptım. Son olarak size makine boyutu ve region detaylarını belirttik.

Aşağıdaki ekran görüntüsünde, Packer sayfasından bir alıntı yapmak istedim. Bu görüntü içerisinde sizlere Packer sayfası üzerinde ne kadar basit bir şekilde yapmanız gerektiğini anlatıyor. Bir çok insan image yönetimini klasik ya da alıştıkları yöntemler ile yapmakta ısrarcı davranıyor. Mevcut kuralları yıkmak gerçekten çok zor, kurum kültürü organizasyon hareketleri malasef bu değişikliğe çok çabuk izin vermiyor. Ama makalemizin ilerleyen kısımlarında, Packer'ın yeteneklerine alışacağınıza inanıyorum.

Bir sonraki yazımızda, Packer için farklı bir konu olan "Provisioners" adlı kısmı inceleyeceğiz. Burası benim en çok sevdiğim ve neler yapabileceğimizi tamamen kavracağımız nokta olarak söyleyebilirim.

· 3 min read
Hasan Gural

Bildiğiniz gibi, herkes altyapılarını otomatik bir hale getirmek için birçok powershell scriptler yazmakta ve daha sonra bunları bir şekilde otomatik çalışacak hale getirip, devamlı çalışarak birçok iş yükünü azaltmaktadır. Fakat yine herkesin bildiği diğer bir konu ise geliştirilen tüm kodların test edilmesi gerektiğinin önemi. Tüm altyapınızı otomatize ettiniz, fakat test süreçlerinizide otomatize etmeniz gerekiyor. İşte bu yazı serisinde Powershell Modülü olan Pester incelemesini gerçekleştireceğiz.

Günümüzde artık Automation özellikle burayı altını çizerek söylemek istiyorum, Altyapı yönetiminin bel kemiği haline gelmiş durumdadır. DevOps kültürüde bizlere bu kültürün bir parçası olan iyi bir automation stratejisi gerektiğiniden bahseder ve anlatır. PowerShell'in gücünü göz önüne aldığınızda, çalışan bir arkadaşınız veya proje yöneticinizin veya benzer otoritede olan bazı kişiler sizlere temel sorularla size geldiğini hayal edin. Çok basit birkaç soru ile bunları toparlayalım.

Gerçekten yazılan kodun gereksinimlerini karşılıyor muyuz? veya Geliştirilen tüm scriptlerin yaptıkları şeyleri bize nasıl kanıtlarsın? Günün sonunda evet sistem tarafında aksiyon aldığını göreceksiniz fakat yine bunların testlerinin yapılması ve başkası tarafından bu testlere ulaşılması gerekmektedir.

Pester Nedir?

Öncelikle modülün detaylarına girmeden önce, herkesin ortak bir noktası olacaktır. Yazılan tüm Powershell kodları test ediyorum veya ediyorsunuz. Ama aslında sizin test etmeniz önemli olduğu kadar, bu test sürecinizi otomatikleştirmeniz gerekmektedir. İşte bu noktada Pester Powershell Modülü yardımımıza koşmaktadır. Benim gördüğüm hali hazırda bir çok büyük firmaların hepsi hala test süreçlerini manuel bir şekilde gerçekleştirmektedirler. Ufak çaplı yazılan Powershell Scriptlerinde sorun yok, oldukça kısa ve sürec kolay bitiyor olabilir. Fakat ya çok uzun ve iç içe Powershel scriptler veya Powershell Modüle kullananlar ne yapacak?

Pester, PowerShell ile yazılan ve PowerShell için bir test framework'ü olarak tasarlanmış bir open-source tabanlı bir projedir. Open-source olduğu için source code gözden geçirebilir, hatta katkıda bulunabilirsiniz. Bütün projeyi GitHub'da bulabilirsiniz. Kısacası Pester'i kullanarak, PowerShell kodunuzu test etmek, PowerShell komutlarının PowerShell içinden yürütülmesi ve doğrulanması için birim testlerini çalıştırmak için bir framework sağlar. Kod yazılmadan önce test senaryolarımızın yazılması ve tüm yapılacak senaryolara ve süreçleri dahil ederek kodun yazılması ve tekrardan düzenlenebilmesi tekniğine kısacası TDD diyoruz. TDD kültürü, yaklaşımını bize Powershell Pester Modülü kazandırmaktadır.

Pester, Powershell Version 2.x'dan 5.x' a kadar Windows 10,8,7, Vista ve Server 2003'a kadar desteklemektedir. Pester ayrıca, Windows 10 ile built-in gelen neredeyse sayılı open-source araçlardan biri diyebilirim. Ayrıca Powershell Core 6.0 ile Windows, Linux ve MacOS desteği vardır bazı limitler ile beraber.

Pester Modülü Nasıl Kurulur?

Bildiğiniz gibi Powershell Package Management Modülünün bize verdiği yetenek sayesinde artık Powershell Modüllerimizi Repository üzerinden indirebilir durumdayız. Yukarıda belirtiğim gibi Windows 10'da direk pre-installed olarak gelmekte fakat modül devamlı geliştiği için bizlere update etmeyi önermektedir. Aşağıdaki Cmdlet bizlere yardımcı olacaktır.

Module başarılı bir şekilde kurulmuş olacaktır. Şimdi ise Module ile gelen komutları listeleyelim, ve hepsine bir göz gezdirelim.

"Get-Command – Module Pester" yazarak module ile gelen tüm komutları listelemiş olduk. Şimdi ise, Cmdlet baktığımızta, bir çoğunun tek bir kelime ile yazıldığını göreceksiniz. Normalde Powershell üzerinde tüm Scriptler, Functionlar Verb-Noun olarak tasarlanmışlardır. Bu kısımda kullanırken biraz değişik gelebiliyor ama zamanla alışacaksınız, sebebi ise çok basit kullanım şekilde olması ve tek amaç için. Örneğin "Describe ve It, Should" bunlar zaten hemen hemen hakim olduğumuz kelimeler.

Bir sonraki yazımıda artık Pester ile Powershell Code'larımızın test süreçlerini nasıl otomatize ettiğimize değineceğim.

· 3 min read
Hasan Gural

Yazımızın ilk serisinde neden Powershell – Pester Modülünü kullanmamız gerektiğinden bahsettik. Şimdi ise nasıl kullanmalıyız ve ne tür bir kullanım modeli olduğunu inceleyelim. Basit bir Powershell function geliştirdik ve bunun içerisinde bir takım kod bloklarımız olsun. Aşağıdaki detaylara ufak bir göz gezdirme ile neler yaptığını anlayalım.

"Get-Month" adında bir Powershell fonksiyonu geliştirdim. Bu fonksiyon bize bir yıl içerisinde bulunan ayları geri dönüyor olacak. Parametrik olarak vererek ise tüm aylar arasında filtreleme yapabilme şansınız var. Şimdi ise Pester içerisinde bulunan komutları tanıyalım ve görelim. Öncelikle 'Describe' ile başlayalım. Describe bize, test etmek istediğiniz Powershell Script Block başlangıcı sağlar. Örnek kullanım şekli aşağıdaki gibidir.

Yukarıda görüldüğü gibi, Test sürecinin başlaması için 'Describe' fonksiyonu ile tanımlamayı yapıyoruz. Yani Pester ile Test sürecine başlamak için 'Describe' ile ilk tanımınızı yapıp Script block (süslü parantez) ile tamamlıyorsunuz. Peki daha sonra ne yapmamız gerekiyor, artık test'e başlamak için bir isim verdik. Ama hangi testlerden geçmesi gerektiğine düşünüp yazmaya karar verdik. Bunun için ise devreye Pester Modülü içerisinde olan 'It' fonksiyonu giriyor olacak. 'It' fonksiyonu öncesi istersen 'Context' adında bir fonksiyon daha çağrıp extra yapacağımız testlere isim verebiliriz. Aşağıda bulunan örnekte detaylara bakalım.

Öncelikle, daha öncede söylediğimiz gibi bütün Powershell Pester Testleriniz kesinlikle Describe bloğuna sahip olmalıdır, Describe bloğu diyorum çünkü bildiğiniz gibi zaten kendiniz bir cmdlet-powershell function olarak kullanıyoruz. Aynı şekilde diğerleri 'It', 'Context'. Basit olarak bu Script blockları arasına istediğinizi yazmakta özgürsünüz. Şimdi ise geliştirdiğimiz function üzerinden hemen bir test süreci yazalım ve tekrar üzerinden beraber okuyalım.

Script satırlarına bakıldığı zaman aklımızda olan satırları tek tek inceleyelim. Öncelikle 'Describe ve Context' neden yazdığımızı anladık. Zaten çok basit bir şekilde gözlemleyebiliyoruz. Fakat 'It' script block kısmı dilediğimizi özgürce yazdığımız kısım idi. Daha doğrusu test süreçlerimizi adım adım belirttiğimiz yer. Ben kolay ve anlaşılabilir olması için, iki adet 'It' script block içerisinde bir takım kontroller yazdım. Bu kısımdaki kontrollerimize hızlı bir şekilde dikkat edelim. Yazdığımız fonksiyon bize yıl içerisindeki tüm ayları geri döndürüyor ve bununla beraber parametre alarak eğer gönderilen parametre değerinde bir değer belirtilmiş ise bu ve bu değer herhangi bir ay ile match edilir durumda ise sadece o ay bilgisini bize geri döndürüyor. Fonksiyon içerisinde yaptığımız işlemlerin bir kısmını Pester ile kontrol etmeye çalıştık. Bunlar neler kısaca,

  • Bütün aylar toplam sayısı – 12'ye eşit olmalı.
  • Gönderilen parametre değeri eğer ayarlar içerisinde herhangi bir değer ile match olmuyorsa.
  • ( Devamı eklenebilinir. 'It' script blockları ile belirtebilirsiniz.)

Artık tüm adımlarımızı yazdığınızı varsayalım ve test sürecine geçelim. Bu kısımda yazdığımız Pester – Powershell Script kaydediyoruz. Test sürecinin nasıl çalıştığını ve ilerlediğini anlamak için devreye 'Invoke-Pester' adında bir cmdlet çıkmaktadır. Bu Cmdlet içerisine parametrik olarak mevcut Powershell Pester-Test Scriptinizi gönderip sonuçları görebilirsiniz. Aşağıdaki detaylara beraber bakalım.

Invoke-Pester isimli cmdlet içerisine '.\Pester.ps1' yazmış olduğu script'imi gönderdim ve çalıştırdığım zaman bir sonuç ekranı çıkardı. İşte bu ekran üzerinde hangi test sürecinin ne kadar süre sürdüğünü, hangi test sürecinin başarılı olduğunu veya başarısız olduğunu anlayabilirsiniz. Son olarak ise tüm bu sürecin bütün halinin detaylarını son satır detayında görebiliyorsunuz. Sizde artık tüm scriptlerinizdeki test süreçlerinizi Powershell – Pester Module ile kolay bir şekilde gerçekleştirebilirsiniz.

· 4 min read
Hasan Gural

Before reading the article, you have to know that I'm not going to explain what are Docker and Container etc. On the internet, you may be able to find a lot of article series to understand Container and Docker structure. Basically, in this one, we will comprehend how can we create docker host on Azure via Docker Machine CLI. I could say, One brief (and incomplete) description is that Docker creates something similar to Virtual Machines, only that Docker containers run on the host machine's OS, rather than on a VM. Each Docker container should ideally contain one service and an application can comprise multiple containers.

As you know, when you install the docker on your machine, it provides command line interface for using and managing your docker hosts. Docker Machine supports to create new docker hosts also contains a lot of parameters when its a deployed which that is why I'm using Docker-Machine CLI to launch new docker host on my hypervisor. I've been testing the deployment of a new docker host on various platform such as Linux, Windows. It gives the easiest way to create new docker hosts. For instance, you are testing your container on your docker host and you want to scale your application. You want to involve your docker application in cluster environments. Also, you may need getting a new docker host to create cluster environments. Here it is, an easy way to get new docker host using Docker-Machine CLI and join to your cluster environments. Before we start, you can find requirements for creating new docker hosts.

Before you begin, you need to know your subscription-Id which will be used by docker-machine. Here it is, the easiest way to find your Azure subscription Id.

After running these lines, you will get your subscription id and to keep it. Because we will use it when we are using docker-machine cli. You can find below.

Create new docker host on Microsoft Azure

We are going to learn Docker-Machine CLI and what are its parameters also how can we use it. We should know Docker-Machine CLI parameters and what type of parameters need to use. Docker-Machine CLI uses 'create' and 'driver' options when we are creating new docker host on Azure After that we remark these commands, it will give you chance to use some operational parameters.I have added the detail of parameters of Docker-Machine CLI.

As you can see the above on the picture just one line is red. It means the parameter should not be blank. Let's have a look example of docker-machine create command.

docker-machine create --driver azure ` --azure-subscription-id $SubscriptionId[0] ` --azure-subnet-prefix 192.168.10.0/24 ` --azure-open-port 22 ` --azure-private-ip-address 192.168.10.10 ` --azure-resource-group 'RG-DockerNodes' ` --azure-location 'West Europe' ` 'dockernode-azure'

As you see above, the picture shows an example of Docker-Machine CLI parameters. The first parameter should have to be your provider. As you know, our provider's is Azure. We can put this line 'Azure'. However, Second Line should not be blank or null, you know this parameter is required. Because we have to remark our subscription Id which will be placed our resources. Let's complete our docker machine commands.

I have executed Docker-Machine Command which is in the above picture. So, It did create a new Docker Host on Azure. Now, We can manage our new docker host with Docker-Machine CLI like we can create a container, network etc. Here is screenshot of our new docker host on Azure that I wanted to show you.

On the Azure Portal, we can see our new docker host. Let's now we can get details of the node on Docker-Machine CLI. For these details, we should use Docker-Machine ls command.

In this article, we have done to create new docker host on Azure. We have a lot of ways to create a new one. We have selected to create with Docker Machine CLI. For Azure perspective, we can use Powershell, Template Deployment.

· 2 min read
Hasan Gural

Bir süredir zamanımın büyük bir bölümünü docker ile container yönetimine harcamaktayım. Gün içerisinde zamanımın çoğunu docker-compose, docker image yazarak ve bunları VSTS ile buluşturmama rağmen yine bir şekilde "Docker command line" ihtiyaç duymaktan alı koyamıyorsunuz. Tüm süreçlerin sonunda kendinizde test edip görmek istiyorsunuz. Fakat bu Docker command line benim gibi Powershell üzerinden erişip ve tab completion yapmak isterseniz, yardımımıza tam bu noktada GitHub üzerinden keşfettiğim güzel bir Powershell Module koşmaktadır. Eğer sizde çok fazla DockerCLI üzerinden, Network, Container, Image yönetimi yapıyorsanız ve bunların tab completion özelliğini kullanmak isterseniz, bu module tam size göre.

Posh-Docker Module GitHub üzerinde kullanıma açılmış yaklaşık en son iki yıl önce güncelleme yapılmış, fakat gayet yeterli bir şekilde işinizi göreceğine eminim. Client tarafında ön gereksinimleri aşağıda gibidir.

  1. Docker CLI 1.3 veya daha üst versiyonu
  2. Powershell 5.0 veya daha üst versiyonu

Bildiğiniz gibi Powershell ile Powershell Modüllerini PS Gallery sayesinde daha doğrusu Powershell One Get aracılığı ile repository üzerinden indirebiliyoruz, Posh-Docker bu şekilde sahip olma şansınız var. Bunların en basit yöntemi Install-Module komutuna kurmak istediğiniz Powershell Module adını göndermeniz yeterli olacak. Posh-Docker isimli Powershell Module kurmak istediğimiz için çalıştırmamız gereken komut sadece "Install-Module -Name Posh-Docker"

Posh-Docker isimli Powershell Modulunu kurduktan sonra, hemen bir kontrol gerçekleştirelim. Hızlı bir şekilde yeni bir powershell session açtım ve Get-Module yazarak Posh-Docker modülünü kontrol ediyorum. Yukarıda çalıştırdığımız komut çalıştırılan client üzerindeki tüm kullanıcılara gidecektir. İsterseniz "Install-Module -Name Posh-Docker -Scope CurrentUser" eklediğimiz Scope parametresi ile sadece Cmdlet'i çalıştırdığınız kullanıcının kendi profilin de saklayabilirsiniz. Get-Module cmdlet kullanarka Posh-Docker modulunun yüklenip yüklenmediğini kontrol edebilirsiniz.

Posh-Docker başarıyla yükledikten sonra artık Docker Command Line ( CLI ) içerisindeki tüm komutlara ve parametrelere tab-completion tadını çıkartarak tabiki Powershell üzerinden kolaylıkla erişebilirsiniz. Şunuda unutmayalım ben günlük işlerimde VSCode veya bir console emulator olan CMDER üzeinden Powershell'i kullanmaktayım. Powershell kullandığım sürece, posh-docker benim için tab-completion yapmaya devam edecek, kullanım şekli nasıl eriştiğiniz tamamen size ait.

Hemen bir örnek ile aşağıdaki görelim.

Yukarıdaki kısa bir yapılan örnekte görüldüğü gibi tab-completion kullanımı Docker Command Line kullanımında bize hız ve bazı komutları hatırlamamızda yardımcı olmaktadır. Posh-Docker, Powershell modülüne GitHub sayfasından erişebilirsiniz.

· 3 min read
Hasan Gural

Yazımızın ilk serisinde Azure Resource Manager Template dağıtım modelini ( JSON Template ) kullanırken yaşadığımız zorlukları ve JSON formatının göz yoran zorluklarından bahsetmiştim. Şimdi ise, YAML formatını kullanarak geliştireceğimiz Azure Resource Manager Template arasında farklılıklara bakıp daha sonra geliştirdiğimiz YAML template dosyasını tekrar nasıl JSON formatına kolay bir şekilde nasıl dönüştüreceğimizden bahsedeceğim.

Öncelikle YAML-CLI aracını github üzerinden indirelim ve ne tür parametreler göndererek kullanıldığına bakalım. Bunun için aşağıdaki Powershell Script çalıştırabilirsiniz, Script belirli parametreler almaktadır.

Yukaıdaki script sayesinde gönderdiğimiz parametreler ile YAML-CLI son sürümünü ilgili klasör içerisinde indirdik. Şimdi ise, nasıl kullanıldığına aldığı parametrelere bakalım.

Görüldüğü üzere, YARM-CLI "-input ve -output" adında iki tane parametre alarak gönderdiğiniz YAML veya JSON dosyalarını kendi içerisinde dönüştürmesini sağlayarak Azure Resource Manager Template modeline göre yapmaktadır. Bunun için geliştirdiğiniz YAML formatında Azure Resource Manager Template'ni "-i veya -- input" parametresi ile göndermeniz ve bu YARM-CLI size vereceği JSON dosyasınıda "-o veya –output" olarak belirli bir path gösterek kaydetmesini sağlamanız. Eğer dilerseniz JSON Formatında bir dosyayı input ederek aynı şekilde YAML formatında bir çıktı elde edip aradaki farklılıkları anlayabilirsiniz. Bu işlemi yapmadan önce aşağıdaki JSON ve ARM ile geliştirilen Resource'ların görünüş şekillerine bakalım.

Yukarıdaki resim içerisinde görüldüğü gibi iki farklı formatıda yan yana koydum. Çok basit bir şekilde Resource Template içersinde DNS Zone oluşturmak için gerekli değerler bulunuyor. Bu formatlardan, YAML olan biraz daha okunabilir ve anlaşılabilir olarak gözükmektedir. Şimdi hemen hızlıca bu YAML dosyasının detaylarına inelim, derine baktığımızda aradaki süslü parantezlerin gittiğini ve YAML bize daha kolay bir okunabilir kullanım sağladığını görmekteyiz. Peki, bu YAML dosyasını nasıl elde edebiliriz hemen ona değinelim.

Bunun için YARM-CLI kullanıp "input" parametresine, elimdeki mevcut JSON dosyasını göstermem yeterli olacaktır. Aşağıdaki örnekte beraber bakalım.

YARM-CLI ile çok kolay bir şekilde, JSON template dosyamızı YAML uzantıya dönüştürdük. Artık YAML üzerinden geliştirmeye devam edebilir veya genel hatlarıyla nasıl yazıldığına aşina olabiliriz. Şimdi ise tam tersini yapalımş aşağıda görmekte olduğunuz kompleks bir Resource Template var. Bu Template YAML formatında yazılmış olsun ve biz bunu JSON dönüştürelim. Neden bu işlemi yapmak zorunda olduğumuzu merak ediyor olabilirsiniz, Azure Resource Manager API üzerinden herhangi bir kaynak deploy ettiğiniz zaman bunu JSON template ile göndermeniz lazım. Bunun için Azure Portal üzerinden gösterimini yaptık, aynı şekilde Portal üzerinden, Powershell veya başka hizmetleri kullanarak Deploy başlattığınız zaman bu Resource Template kesinlikle JSON formatında olmalıdır. Bu tarafta dilerseniz YAML ile yazıp JSON dönüştürüp bunu otomatik hale getirebilirsiniz, Fikir vermesi açısından Bkz : Azure DevOps Stage.

Yukarıdaki kısa görüntüde görüldüğü üzere, çok kolay bir şekilde dönüştürme işlemini gerçekleştirdik. Bende YAML tarafında çok fazla vakit geçirdiğim için özellikle Docker Compose file yazarken, Azure Resource Manager Template geçiş yaptığımda canımı sıkan bir konuydu. Son olarak, dilerseniz Visual Studio Code üzerinde buluna "YARMtoJSON" extension kullanarakda bu işlemleri yapabilirsiniz.

· 3 min read
Hasan Gural

Bu yazı serisine başlamadan önce Azure Resource Manager Template Deployment modelini neden ve niçin kullanıldığını çok iyi anlamamız lazım. Bu yüzden blog üzerinde bunun anlatan yazıları yazmıştım, fakat kısa bir hatırlatma yapmak için kısaca tekar üzerinden geçmek istiyorum. Azure Resource Manager'ın Template Deployment özelliği bize sağladığı en büyük özellik, Infrastructure as code kültürüne ayak uydurmamız ve Azure üzerinde hizmet veren kaynakları devamlı kontrol altında tutup, incremental şekilde değişiklik yapmamıza olanak sağlamaktadır. Çok fazla organizasyon Azure Resource Manager – Template Deployment modeline mevcut ortamlarının template geliştirerek deployment süreçlerini CI/CD içerisine dahil etmektedirler, özetle bu bize JSON formatında sunulan ve Azure üzerinde tüm kaynaklarınızın detaylarını bu template içerisine belirterek çok hızlı bir şekilde deploy edip, aynı şekilde değişen bir şey var mı yok mu diye kontrol altına alabiliyorsunuz, biraz daha farklı bir süreçten örnek vermek gerekirse, DEV/TEST ortamların çoğu Resource Manager Template modeline yazılmış ve deploy edilmeye hazır halde bekliyor. Bu template geliştirmenin bir çok yöntemi var, JSON formatında olan bu dağıtım modeli, Visual Studio Code ve Visual Studio aracılığı ile kolayca geliştirilebilir durumdadır. Dilerseniz Mevcut kaynaklarınızın template detaylarını Azure Portal üzerinden export etme şansınıza sahipsiniz, biraz fikir vermesi için aşağıdaki kısa görüntü size açıklayacaklar.

Yukarıda resimde görüldüğü gibi, Azure Resource Manager Template ulaşmanın birkaç yolunu göstermeye çalıştım. Bu iki yöntem ile ve birkaç kaynak ile JSON Template ( Azure Resource Manager Deployment ) nasıl olduğu hakkında birkaç fikriniz olacaktır. Fakat bu konu oldukça derin ve çok büyük kurumlarda bu tarz süreçler, CI/CD kadar bağlanıp Jenkis, Azure DevOps ( VSTS) üzerinden yönetelir hale geldiler, konu sadece JSON Template yazıp onu deploy etmek değil, yazılan template içerisinde gelebilecek parametreler, variable ve function gibi detaylar var. Bunların kontrolünüde Pester adında başka bir open-source araç ile kontrol ediyoruz ki bu çok başka bir konu, başka yazımızda değinmeye çalışırız.

Esas konumuza gelecek olursa, belirli bir süredir Microsoft feedback sayfasında gördüğüm ve gerçekten çok mantıklı ve benim bile hergün kullanmama rağmen aklıma gelmeyen "zihni-sinir" başlıklar yer almakta, eğer teknolojiyi yakın takip ediyorsanız orada yazılan feedbackler gerçekten harika, sizde bir not bırakın derim. Bir süredir, JSON Template okuması zorlayıcı olması, çok fazla süslü parantezler iç içe girmesi bir kısımdan sonra çileye dönüşüyor, çok uzu deployment süreçlerinden bahsediyorum. Ansible kullanan biri olarak YAML formatı gerçekten daha okunaklı ve daha göze yakın duruyor, JSON severler olmaz öyle şey diyebilirler, fakat YAML formatını kullanarak Azure Resource Manager Deployment yapabilsek çokta güzel olmaz mıydı diye düşünürken bir open-source araç keşfetmem ile güzel bir ışık yandı zihnimde.

Özetle, "YAML CLI" adında open-source olan harika tool sayesinde YAML formatında geliştirilen Azure Resource Manager templatelerini nasıl JSON convert edebileceğimizi göreceğiz bu yazı serimizde. Microsoft bunu ne zaman offical olarak destekler/desteklemez bilemiyorum fakat görünüz açısından gözünüzün alışacağından eminim. JSON ile geliştirilen template ile hiçbir farkı olmayıp sadece süslü parantezlerden kurtulduğunuzu hayal edin, yukarıdaki resimde içerisinde zaten anlaşılır ama kompleks deployment modellerinden içinden çıkılmayan bir hal alıyor malasef, evet intellisense diye bir şey var kabul ediyorum fakat YAML ile geliştirmek çok daha kolaylık sağlayacak.

YAML-CLI Github üzerinden erişebileceğiniz ve kullanımı çok kolay bir araçtır. Aşağıda detaylarını görebilirsiniz, yazımızın devamında bu aracı nasıl kullanacağımıza değineceğim.

· One min read
Hasan Gural

For those who seek success even in a little rhythm,

In my personal career life, the only thing that I have cared for was dedication to have continuous achievement in future. Thankfully, I have gotten lots of chances to be awarded in many times but especially today I have acquired Most Valuable Professional award for the second time.

"Success" has always a different definition for me than in dictionaries. It is more extensive and particular than crossing the limits, actualizing expectations or even being awarded. To be successful, this word should appeal to you in a more productive and unique way for past, now and future.

I believe that confidence and passion are the key words for human to achieve their desire in life. Thus, this explains why hard obstacles that we face are not unbroken. I own my progress in this industry to my ambition and will in my notions and aims. But also, achievement enlarges in a good partnership and emphatic co-worker relationship. That’s why I thank warmly to MShowto Technical Community and PeakUp for their support.

World still sings different success stories for seekers.

· 9 min read
Hasan Gural

To make a comprehensive expression for Office 365 Groups' structure, we need to understand what does it comprise also why should it be used by customers. In this article, you will read the description of Office 365 groups step by step. Before starting, we can look over the answer of Christophe Fiessinger, Microsoft Office 365 program manager, to the question "What are the Office 365 Groups ? "

There were a lot of small obstacle in the past. These were creating many delays in the running a project process. Now with Office 365 Groups, we are observing that Office 365 Groups are meeting our user's needs. Because there's no one size that fits all, whether it's managing a project, running a team, a community of interests, or community of practice, we want to delight the users and make people's lives easier.

ENCAPSULATING OFFICE 365 GROUPS

Office 365 groups are working with Office 365 tools so that it helps you to collaborate with your colleagues for writing or editing documents, scheduling meeting dates, working on projects and sending emails. When an Office 365 group is created, hidden processes in the background will automatically create a workspace for group which that shared workspace is a way to use every each product on team based projects. Groups in Office 365, you can choose whoever you wish to collaborate with, besides it easily creates a collection of resources for those people you want to work together. The general resources such as a shared Outlook inbox, shared calendar or a document library for collaborating on files. Office 365 is providing a shared workspace for emails, conversations, files, calendar events. While you are sending messages in the shared Outlook inbox, all conversations will be stored. There is a dedicated calendar to set dates and a dedicated OneDrive for business storage, which is available for group files or documents

HOW TO DISTINGUISH THE PRIVATE AND PUBLIC OFFICE 365 GROUPS

With Office 365, Microsoft follows an approach which based on users. That means there will be a convenience for users to create their own groups. Especially, this convenience will give a permission to administrators for managing some of the group capabilities.

To sum up the difference between private and public office 365 groups extensively, a public group is open to everyone, but a private group has a more individual structure. For instance; if you are in a public group you will be able to visit it, read the content and check out the conversations on the group's page. Also, it is providing a membership to you whenever you want. You can subscribe the group to get mail notifications about group discussions. But on the other hand, as we can understand, a private group is exclusive which is only available for its members. There is a security for its content and conversations, if you are not a member of that private group that means you will be not able to view these informations. A private Office 365 group, without any doubts, will be a good choice for people who have an interest in security or privacy. For being a member of a private group, you must obtain an approval from the group administrator. Also private or public groups can receive emails. Mind you, your group type will be a permanent choice which that means you cannot change the type of your group.

Office 365 groups have several limitations about group members and owners:

• Maximum number of owner in a group is 10 • There can be 250 groups of a user • Office 365 doesn't have a number limitation of members, but there might be a problem about performance limits.

The components of Office 365 groups

Office 365 groups are based on user. That means the users in your organization will be able to create and join. They can even remove themselves from Office 365 groups. This is acceptable for Office 365 groups' creations too. The users can create groups directly from Outlook but also there is a chance to create groups via Microsoft Edge in Office 365. If you want to create Office 365 Groups, you can use other tools Outlook on the web, Outlook Mobile, SharePoint, Planner, Teams and more. Which tool you choose to start from depends on what kind of group you're working with.

While you are creating an Office 365 group, a few things are happening in the background:

• Creation of Azure Directory User is completed. • Creation of a Mailbox is completed. • Creation of an OneDrive for Business page is completed. • Creation of an OneNote Notebook is completed.

The components of The Office 365 groups are a file store and a mailbox store. It can take a long time to create the groups. The reason of that is Office 365 groups have several components. Also groups have interaction with every Office 365 services for instance Outlook, SharePoint, Yammer, Delve and Planner.

How can we create and configure Office 365 groups?

During the groups are based on users, users and administrators will be able to create the groups. Assume that you are a global administrator then you can create groups in Office 365 admin center and there is no necessity to be a member of that Office 365 group for it.

The path that you should follow to create Office 365 group in Office 365 admin center:

• You need to sign in http://portal.office.com as a global administrator • Visit the Office 365 admin center by using the app launcher • In the left navigation pane, select Groups and then click Groups. • Click Add a group

On the right pane, you have four options for group type: Office 365 group, Distribution list or Security group. Select Office 365 group.

Review the Office 365 options. Type a name, an email address, and a description. Select if the group will be public or private, and then select the language.

• Select the group owner. The group owners are the ones who can manage the group. • Select if group members are subscribed to the group or not subscribed. • Click Add.

Please take a note: If group members are subscribed to your group, they receive all messages and calendar items in their inbox. Perhaps They need some update their Outlook.

How can we edit and configure Office 365 groups?

  1. Sign in to http://portal.office.com as your company global administrator. 2. Go to the Office 365 admin center by using the app launcher 3. Select Groups in the left navigation pane) 4. Click the group. ( Which groups want to change ) 5. Select one of the options below: Edit Members and Owners. By using this option, you can add and remove members from a group, select a new group owner, or change the status of the group admin. Delete Group. If you do not need the group anymore, delete it. The group, its email conversations, calendar, and documents stored in OneDrive for Business storage will be deleted along with the group. This action cannot be undone.

Please take a note:

Edit Details Action: Sometimes it is necessary to change or update the name of your Office 365 group. This name appears in the address book, on the To: line in the email, as the name of the group. A group description helps your users when they want to decide which groups ours.

What are the ways to experience Office 365 groups?

Conversations and email: • Users can access group conversations either through Outlook or the Outlook Web App Group calendar: • Every member of the group automatically sees meeting invites and other events Files, sharing, and SharePoint document library • A group's SharePoint document library page is the primary place for group files Subscribing to a group: • Subscribing is not enabled by default. Each user can decide to subscribe or not subscribe to a group

Note: If group members are subscribed to a group, they receive all messages and calendar items in their inbox.

During the Office 365 groups are enabled in your hirer, users can access Office 365 groups in all Office 365 services. In their Outlook Web App and OneDrive for Business, Office 365 groups are accessible for users. By the way, Office 365 Planner contains the Office 365 groups and there is a chance to see them in the Outlook 2016 client. Currently, we can say that Office 365 groups are open and discoverable by default. Users can explore the groups with controlling memberships, viewing conservations and files. And then if there are anything interests users, they can join the groups and start attending as a member in groups.

Communication of an Office 365 Group

There are very few more important things than communication to consider for groups. As we have talked about, there is a mailbox for every each group and Outlook or the Outlook Web App is providing accessibility for group conversations to every each user. There are privacy and protection for group conversations. Thus, Office 365 warranting that new member can present and introduce themselves to group content quickly. You can view conversations by their date and also you can share your acclaim for group conversations with your 'like'.

Furthermore, you have the ability to send an email by adding the group name to the To: section of your email. With this, you can send it. If you don't have an Office 365 license or an email address which contains Office 365 hirer, there isn't a chance to be a member of a group as an external user. But you are always able to send emails to a group as an external user for sure.

General Features of Common Calendar

So since every group has a special and dedicated calendar, every member of the groups can automatically see meeting invites and other events. All group calendars can be viewed in Outlook Web App and Outlook. The events that you have created in the group calendar will be added and auto-synchronized with your private calendar. Every group contains its own document libraries within SharePoint team site. We can think the document library of a group as the primary place for group files. Also to add your folders, custom scripts on personal sites feature must be disabled.

Be a Subscriber to a Group

You can be a member of any group and to subscribe it. With subscribing a group, conversations or events of the group will be sent to your inbox. You can join the group conversations with your answers without using any other things. Subscribing is not enabled in normal circumstances. This is users' decision to subscribe to a group or not. Thereby, you can join the groups which most related to you.

· 3 min read
Hasan Gural

Nowadays, I'm greatly passing the time with Visual Studio Code. I'm a huge fan of Visual Studio code. As you know, Azure Cloud Shell was published a years ago by Microsoft. When the Azure Cloud Shell announced a years ago, I had given a webcast. You can watch that webcast on this link. Azure Cloud Shell has been giving a chance to managing your Azure Resources on web-based support shell. It is supporting Bash and Powershell. In this context, you will be able to manage your resource web-based and you do not need to configure PowerShell module and version. In this article, I'm going to share with you useful feature which is Azure Cloud Shell on Visual Studio Code.

As you are developer, you might be using Visual Studio code. Visual Studio Code has an extension features. You will be able to find new features on Market Place for Visual Studio code. This useful feature can give a chance to us accessing Azure Cloud Shell from Visual Studio Code. The Extension name is Azure Account that has a lot of commands like "Azure: Open Bash in Cloud Shell", "Azure: Open PowerShell in Cloud Shell".

Firstlly, Open Visual Studio Code and Click Extension Tab. Write to search area "Azure Account" and click install button. It will take a few minutes for installation. If you have installed this extension, you will be able to use that feature in Visual Studio Code. Now, you should open Access the Command Panel (Shift-Ctrl-P or click View in the toolbar). After that, you will see to search area like below picture.

You should have to decided, Which one is do you want to access? You could access Bash and Azure Cloud Shell. But if you want to access bash, you must install bash for windows. (If you are using Windows 10.) I will show you "Open Powershell in Cloud Shell."

I have clicked to "Open Powershell in Cloud Shell." As you can see, The Visual Studio Code wants from me, Authentication for using Cloud Shell.You should complete authentication process. After you have completed that process, you could see authentication detail in the bottom bar of Visual Studio Code.

I did complete my authentication process. Now, I could see detail in the bottom bar of Visual Studio Code. After, I have clicked "Access the Command Panel (Shift-Ctrl-P or click View in the toolbar)." Then select to "Azure:Open Powershell in Cloud Shell". At the end, we have accessed to our subscription for Azure Cloud Shell within Visual Studio Code. If you are interested in more features, you can use ""Access the Command Panel" with starting this prefix : "Azure".