Yapı altyapımız için VM'lerin oluşturulmasını otomatikleştirmeyi planlıyoruz, böylece:
- Yapı kaynaklarını isteğe göre ölçeklendirin, örneğin gerektiğinde daha fazla yapı aracısı ekleyerek ve gerektiğinde bunları kaldırarak
- Makineler ölürse / olduğunda yapı ortamının tamamını veya bir kısmını yeniden oluşturun
- Test kurulumuna ihtiyaç duyduğumuzda oluşturma ortamını çoğaltın
Bu süreçteki adımlardan biri VM taban görüntülerinin oluşturulmasını otomatikleştirmektir (bizim durumumuzda Hyper-V kullanarak). Bunun için bir betiğimiz var:
- Convert-WindowsImage komut dosyasıyla ISO'dan yeni VHDX oluşturur . Şu anda Windows 2012R2'yi kullanıyoruz, ancak 2016'ya başlar başlamaz başlamak istiyoruz.
- İhtiyacımız olan tüm temel yapılandırmayla yeni VHDX'e katılımsız bir komut dosyası ekler
- Apply-WindowsUpdate komut dosyasını kullanarak VHDX'i en son Windows düzeltme ekleriyle güncelleştirir
- VHDX tabanlı yeni bir Hyper-V VM oluşturur ve başlatır
- Sanal Makinenin önyüklenmesini ve WinRM hizmetinin uzak bağlantıları kabul etmeye hazır olmasını bekler
- Pencerelerin ilk yapılandırmayı ve yeni düzeltme eklerinin yapılandırmasını tamamlamasını bekler
- Diğer yamaları uygular
- En son yamaların yapılandırmasını tamamlamak için yeniden başlatır
- Yamaların yapılandırılmasını tamamlamak için pencerelerin beklenmesi
- Makineye bir sysprep betiği gönderir ve bu betiği çağırır. Bu sysprep komutunu çalıştırır ve ardından makineyi kapatır
- VM'yi siler ancak VHDX'i korur
- Sysprep ve katılımsız yükleme dosyalarını VHDX'ten kaldırır ve ardından VHDX'i sıkıştırır
- VHDX'i şablon konumuna taşır ve salt okunur olarak işaretler
Yaşadığımız sorun 6. ve 9. adımlardadır. İdeal olarak, makineyi yeniden başlatmadan / kapatmadan önce tüm yapılandırmanın tamamlanmasını bekleriz, ancak pencerelerin yapılandırma aşamasını tamamladığını algılamanın bir yolu yoktur.
Kullanıcı arayüzünden geçerken her iki adımın da ne zaman yapılacağı çok açıktır çünkü oturum açma kullanıcı arayüzü işlem hazır olana kadar görünmez. Ancak, WinRM'yi makineye uzaktan bağlanmak için kullanırken, bu daha az açıktır, çünkü WinRM, konfigürasyon çalışması yapılmadan önce makineye erişim sağlar.
Yani soru, Windows'un güncellemeleri vb. Yapılandırmayı bitirdiği uzak bir bağlantı üzerinden tespit etmenin en aptalca yolu nedir, böylece daha sonra sorun çıkarmadan makineyi yeniden başlatabilir / kapatabiliriz.
------ DÜZENLE -----
Sonunda senaryomuzun da beklemesi windeploy
ve ngen
tamamlaması için Katherine'in cevabının değiştirilmiş bir versiyonunu kullanıyoruz . ngen
İşletim sisteminin bu işleri başlatmayı tamamlamasından sonraya kadar tamamlanmadığı göz önüne alındığında ve bonus olarak nihai VHDX, tüm .NET framework ngen-ed'e sahip olacak, yani yeni oluşturduğumuzda bununla uğraşmak zorunda değiliz Şablon disk VM'leri. Hem VHDX şablonu oluşturmak için kullandığımız hem de yerel test ortamını oluşturmak için kullanılan komut dosyaları , herkesin ilgisini çekmesi durumunda github üzerindedir.