PowerShell Desired State Configuration – Push Deployment – Part 2

By | 22 March 2017

Serinin ikinci makalesinde sizlere PowerShell DSC mimarisindeki configuration deployment metodlarından birisi olan Push deployment’ı anlatacağım.

Ayrıntılı şekide anlatım yapacağım bu makalenin ardından diğer metod olan Pull metodunu da aktarıyor olacağım.

Powershell DSC ile oluşturulan konfigürasyonların client node’lara deploy edilmesinde kullanılan metodlardan birisi push metodudur.

Bu metod kullanılarak oluşturulan konfigürasyonlar hedef makinelere senkron olarak gönderilir.

Push deployment metodu genelde test ortamlarında kullanılması önerilen bir metoddur.

Push metodu kullanılarak konfigürasyon deploy edilmesi aşağıdaki adımlarda gerçekleşir.

  1. Hedef node’lar için LCM’i konfigüre edip refresh metodunu “Push” olarak ayarlayacak ve istenilen diğer değişikleri yapacak meta Mof dosyası oluşturulur. Buna meta mof denmesinin sebebi client node üzerinde konfigürasyon almayı sağlayacak LCM agent’ının kendisi için gerekli olan konfigürasyonu barındırmasıdır.
  2. Bu işlemin ardından “Set-DSCLocalConfigurationManager” cmdlet’i kullanılarak konfigürasyon hedef makinelere deploy edilir.
  3. LCM konfigürasyonunun ardından hedef makineler için konfigürasyon içeren MOF dosyası oluşturulur.
  4. Start-DSCConfiguration” cmdlet’i kullanılarak oluşturulan konfigürasyon dosyası hedef makinelere push edilir.

Özet olarak bu şekilde gerçekleşen konfigürasyonu şimdi adım adım anlatarak ilerleyelim.

Anlatımımı yapacağım test ortamı aşağıdaki gibidir.

PowerShell mimarisinde WMF 5.0 Windows Server 2016 ile birlikte geldi. Ancak istenildiği taktirde aşağıdaki link kullanılarak download edilip WMF 4.0 yüklü Windows Server 2012 R2 makineler üzerine yüklenebilirler.

Test ortamında Push server için konfigüre edilecek sunucu için windows server 2012 işletim sistemi kullanıldı.

Hedef makine olarak da SRV1 makinesi üzerine Windows Server 2012 R2 işletim sistemi yüklendi. (Bunu yapmamın sebebi bu şekilde Windows Server 2012 R2 işletim sistemine sahip hedef makinelerin olması olasılığının yüksek olması. Böyle bir yapıda alınan hataları da ve nasıl düzeltileceğini de anlatmak istedim. )

Şimdi konfigürasyona geçerek devam edelim.

Konfigürasyon öncesinde hedef makineler üzerindeki LCM konfigürasyonunu kontrol etmek için aşağıdaki CMD’leti kullanalım.

Get-DscLocalConfigurationManager -CimSession srv1

Komut çıktısı şekildeki gibi kontrol edildiğinde Refresh Mode’un hali hazırda push olduğu görülür. Configuration mode’u ise ApplyandMonitor’dür.

NOT: Refresh mode push olmaya da bilirdi. Bu sebeple bu kısmında nasıl konfigüre edileceğini göstermek amacı ile refresh mode’u da push olarak konfigürasyon dosyasında tekrar konfigüre ettim.

LCM’i konfigüre etmek için configurasyon script’inin en başına [DSCLocalConfigurationManager()] tagının koyulması gereklidir. Bu oluşturulacak MOF dosyasının meta mof olarak oluşturulmasını sağlar. (makineismi.Meta.mof = Hedef makinenin LCM’ine ait konfigürasyon dosyası)

Bir kaç örnek konfigürasyon ile scripti hazırlayalım.

$Computername değişkenine SRV1 ismini atayalım. Bu değişkene atadığım makine ismi LCM konfigürasyonunu dağıtacağım makinenin ismidir. Burada birden çok makine ismi de verilebilir. Bu durumda script her bir makine için ayrı meta mof dosyası oluşturacaktır.

Konfigurasyon scripti oluşturulup LCMPush -OutputPath c:\DSC\LCM komutu çalıştırıldıktan sonra komutta belirtilen lokasyonda belirtilen hedef makine için Meta Mof dosyası otomatik olarak oluşturulur.

SRV1 için oluşturulan meta MOF dosyası SRV1.meta.mof isminde c:\DSC\LCM lokasyonundadır.

Şimdi buraya kadar yapılan işlemlerde sadece MOF dosyası oluşturuldu. Şu ana kadar herhangibir konfigürasyon dosyası herhangi bir makine üzerine dağıtılmadı.

Şimdi oluşturulan MOF dosyasını SRV1 isimli makine üzerine deploy edelim.

Deploy işlemi için Set-DSCLocalConfigurationManager komutunu aşağıdaki gibi kullanılır. Komut ile LCM’si konfigüre edilecek hedef makine ve konfigürasyonun bulunduğu lokasyon gösterilir. Verbose komutu yapılan işlemlerin sırası ile çıktı olarak listelenmesi içindir. Aksi taktirde komut background job olarak çalışacaktır.

Set-DSCLocalConfigurationManager -ComputerName SRV1 -Path c:\DSC\LCM –Verbose

Komut çalıştırıldığında aşağıdaki hata alınabilir. Bunun sebebi MOF dosyalarının versiyonlara göre farklılık göstermesidir.

Ben push server üzerinde WMF 5.0 kullanıp MOF dosyasını hazırladım ve bu dosyayı WMF 4.0 olan bir hedef makine’ye deploy etmeye çalıştım. O sebeple bu şekilde bir hata aldım.

Hata incelendiğinde komut çıktısında MOF dosyası içerisindeki “minimumCompatibleVersion” isimli attribute’un tanımlanamadığı yer almaktadır.

Böyle bir sorun yaşandığında gidermek için yapılacak iki seçenek bulunur.

  1. Hedef makineyi aşağıdaki linki kullanarak WMF 5.0 ‘a yükseltmek.
  2. MOF dosyasını editleyip hedef makine için tanımlanamayan attribute’ları çıkartmak.

İlk seçenek kolay olan yol. Fakat makine sayısı fazla olduğunda ve böyle bir anda yapılacak değişikliklerin hoş görülmediği prod ortamlarında MOF’u editlemek daha hızlı bir yöntem.

Tabi ortamdaki makine yoğunluğuna göre push server olacak makinenin verisyonunun da önceden seçilmesi de uygulanacak bir başka yöntem olabilir

Bu amaçla MOF dosyasını bir notepad’de açalım ve tanımlanamayan alanları temizleyelim.

İşlemin ardından MOF dosyasını kaydedip komutu tekrardan çalıştıralım.

Komut tekrardan çalıştırıldığında aşağıdaki gibi hatasız şekilde işlem tamamlanacaktır.

Bu işlemin ardından hedef makine üzerinde LCM tekrardan kontrol edildiğinde aşağıdaki gibi konfigürasyonların uygulandığı görülecektir.

Hedef makine üzerinde uygulanan LCM konfigürasyon dosyasının tutulduğu lokasyon ise aşağıdaki gibidir.

Explorer \\srv1\c$\windows\system32\Configuration

Meta MOF dosyası başarılı şekilde deploy edilmesi ile hedef makine artık push metodu ile konfigürasyon alabilecek duruma geldi. (Halen hedef makine’ye konfigürasyon deploy etmiş değiliz )

Şimdi basit bir konfigürasyon oluşturarak konfigürasyonu hedef makine üzerine push edelim.

Aşağıdaki script basit olarak hedef makine üzerine IIS özelliğini etkinleştirecektir.

Burada dikkat edilmesi gereken script’in Windows Feature bölümünde yer alan Ensure attribute’udur. Bu attribute iki değer alır.

Eğer konfigürasyon özelliği etkinleştirecekse “Present”, kaldıracaksa “Absent” değerleri atanması gerekir.

Konfigürasyon uygulanacak hedef makine ismi $ComputerName değişkenine atandıktan sonra script çalıştırıldığında SRV1 konfigürasyon dosyası SRV1.mof isminde oluşturulur.

Tekrar hatırlatalım. MOF dosyasının oluşturulmuş olması konfigürasyonun uygulandığı anlamına gelmez. Konfigürasyonun hedef makine üzerine deploy edilmesi gerekir.

Deploy işlemi için Start-DscConfiguration komutunun aşağıdaki gibi hedef makine ismi ve konfigürasyon dosyasının bulunduğu lokasyonu içerecek şekilde çalıştırılması gerekir.

NOT: Eğer MOF dosyasında versiyon bazlı sorun yaşanırsa, LCM konfigürasyonunu deploy ederken yaptığımız editleme işlemini bu konfigürasyon dosyası için de yapmanız gerekebilir.

Start-DscConfiguration -Path C:\DSC\Config -ComputerName srv1 -Verbose -Wait

Konfigürasyon başarılı şekilde deploy edildikten sonra komut çıktısı aşağıdaki gibi olacaktır.

Konfigürasyon dosyası ile hedef makine üzerinde IIS kurulumunu tetiklediğimiz için, konfigürasyonu test etmek için makineye HTTP olarak bağlanalım.

Bunun için aşağıdaki komutu kullanabiliriz yada direk explorer’ı açarak makine ismini yazabiliriz. (Madem PowerShell kullanıyoruz neden powershell üzerinden tetiklemeyelim ki )

HTTP kullanarak hedef makine üzerine bağlanıldığında IIS konfigürasyonunun başarılı şekilde yapıldığı görülecektir.

Start-Process -FilePath iexplore http://srv1

Hedef makine üzerinde IIS’i kaldırılıp makine yeniden başlatıldığında IIS özelliğini tekrar otomatik olarak kurulacaktır.

Hedef makine üzerinde DSC konfigürasyonunun etkin olup olmadığını test etmek için aşağıdaki komut kullanılabilir.

Test-DscConfiguration -CimSession srv1

Hedef makinede uygulanan konfigürasyonu görüntülemek için de Get-DscConfiguration komutu kullanılabilir.

Get-DscConfiguration -CimSession srv1

Temel olarak PowerShell DSC kullanılarak push mode ile konfigürasyonu deployment işlemi bu şekilde gerçekleşmektedir.

Kullandığım konfigürasyon scriptleri ve deployment komutları sırası ile aşağıda yer alıyor.

Umarım faydalı bir makale olmuştur.

Bir sonraki bölümde Pull mode ile devam edeceğim.

Görüşmek Üzere.

Fırat

Kaynak: https://msdn.microsoft.com/en-us/powershell/dsc/overview

Kaynak 2: https://mva.microsoft.com/en-us/training-courses/getting-started-with-powershell-desired-state-configuration-dsc–8672?l=8Jem5mG1_7904984382

========LcmConfig.ps1=============

=======BasicConfig.ps1=============

 

======Push Deployment Step By Step==============

Leave a Reply