Puppet Yazı Dizisi 2: Puppet’a Giriş

Puppet’a Giriş

puppetPuppet yazı dizisinin bu bölümünde basitçe Puppet’ın nasıl çalıştığı bir kaç basit örnek ile açıklanacaktır. Bunun için temel bir Puppet altyapısının kurulmuş olduğu varsayılacaktır. Eğer henüz kurulum yapmadıysanız bir master ve bir istemci kurulum prosedürünü anlatan daha önce yayınlanan yazıya göz atabilirsiniz.

Puppet Fact Değişkenleri

Herhangi bir istemcide “puppet apply” komutu ile bir katalog isteği yapılmadan önce Puppet, “facter” isimli araç ile istemcilere ait sistem bilgilerini toplamaktadır. Bu bilgiler Puppet dilinde “fact” olarak isimlendirilmektedir. Toplanan bu bilgiler “manifest” dosyalarında kullanılmak üzere elde edilen ön-tanımlı değişkenlerdir. Puppet “fact” dışında bazı özel değişkenleri de daha sonra kullanılabilmek üzere tanımlamaktadır.

“Facter” aracı, işletim sistemi isimleri, sunucu isimleri, IP adresleri, SSH anahtarları gibi kullanışlı bilgileri toplamaktadır. Ayrıca kendinize özel “fact” değişkenler tanımlamak da mümkündür. Dolayısıyla Puppet tarafından erişilebilecek iki tür fact bulunmaktadır.

  1. Facter tarafından toplanan çekirdek fact’ler
  2. Kullanıcı tarafından modüllerde tanımlanan fact’ler

Facter tarafından kullanılan çekirdek fact’lerin listesine buradan erişilebilir. Ayrıca komut satırında aşağıdaki komut ile gerçek zamanlı değişkenlerin değerleri görülebilir.

İstemciden alınan örnek çıktı aşağıdaki gibidir. SSH anahtarları kısaltılmıştır.

Puppet kodunun içerisinden fact’lere erişmenin iki yolu vardır:

  1. Klasik şekilde $fact_name ile
  2. $facts[‘fact_name’] hash ile

1.Yöntem

Bütün fact’ler en üst seviye değişkenlerdir ve manifest dosyaları içerisinden doğrudan $fact_name ile erişilebilirler. Örneğin işletim sistemini kontrol etmek için aşağıdaki kod parçası kullanılabilir.

Bu yöntemde fact’ler herhangi bir değişken gibi tutulduğu için kod içerisinde kullanılan kısmın fact mi değişken mi olduğu ilk bakışta anlaşılamamaktadır.

2.Yöntem

Tüm fact’ler ayrıca bir $facts hash’inde tutulmaktadır. Herhangi bir fact’e $facts[‘fact_name’] ile erişilebilmektedir. Benzer şekilde işletim sistemi kontorlü aşağıdaki gibi yapılabilmektedir.

Bu yöntemde fact’lerin diğer değişkenlerden ayırt edilmesi mümkün olmakta, böylece kod daha anlaşılır hale gelmektedir.

Puppet Tarafından Eklenen Değişkenler

Facter tarafından toplanan fact’ler dışında bir de Puppet tarafından eklenen değişkenler bulunmaktadır. Bu değişkenler üç kategoride toplanabilir:

  • $trusted hash: İstemcinin sertifikasından gelen güvenilen değişkenleri tutar.
  • Agent facts: “puppet agent” veya “puppet apply” tarafından set edilen değişkenlerdir.
  • Puppet master değişkenleri: Puppet master sunucu tarafından set edilen değişkenlerdir.
  • Derleyici değişkenleri: Her scope için özel tanımlanan değişkenlerdir.

Bu değişkenler ile detaylı bilgiye ilgili Puppet sayfasından ulaşabilirsiniz.

Puppet Manifest Dosyaları

Genel anlamda Puppet kodlarından oluşan ve .pp uzantısına sahip olan programlara verilen isimdir. apt paket yöneticisi tarafından yüklenen varsayılan manifest dosyası /etc/puppet/manifests/site.pp lokasyonunda bulunmaktadır.

Her puppet agent, yarım saatlik periyotlarla master sunucu ile haberleşerek kendisine ait güncel fact’leri gönderir, master sunucudan manifest dosyasında belirtilen kendisine ait kataloğu çeker. Agent çalıştığı ve master ile haberleşebildiği sürece bu çevrim bu şekilde devam eder.

Çevrimden önce herhangi bir istemciyi test etmek için aşağıdaki komut kullanılmalıdır.

Komutun çıktısı aşağıdaki gibi olmalıdır.

Bu komut main manifest dosyasındaki komutları test edilen istemciye uygular. Main manifest dışında isteğe bağlı olarak uygulanmak istenen manifest’ler “puppet apply” komutu vasıtasıyla uygulanabilir. Komut ile birlikte kullanılan manifest sadece komutun çalıştığı istemciye uygulanır.

Bu komut, hazırlanan manifest’in sadece bir kez uygulanması gerektiği durumlarda veya yeni hazırlanan manifest’in istemcide denenmesi gerektiğinde kullanışlı hale gelmektedir.

Basit Bir Manifest Örneği

Puppet manifest’leri temel olarak aşağıdaki bileşenlerden oluşur:

  1. Dosyalar (files)
  2. Kaynaklar (resources)
  3. Şablonlar (templates)
  4. İstemciler (nodes)
  5. Sınıflar (classes)

Master sunucuya bağlı tüm istemcilerde çalışması istenilen kodlar main manifest dosyasına yazılırken istemciye veya istemci gruplarına özel yazılan kodlar “puppet apply” komutu ile uygulanabildiği gibi master sunucu üzerinden “puppet kick” komutu ile istemciye gönderilebilmektedir. Bu konu daha sonra ele alınacaktır.

Tüm istemcilerde bir dosya oluşturup bu dosya içerisine ilgili sunucunun ismi ve IP adresini yazan örnek kod main manifest dosyasına eklenmelidir.

Ardından puppet-client sunucusunda beklemeden manifest’i uygulamak için “puppet apply” çalıştırıldığında aşağıdaki gibi bir çıktı görülmelidir.

Ardından /tmp altında oluşturulan example-ip isimli dosyanın içeriği kontrol edildiğinde aşağıda olduğu gibi sunucu adı ve IP adresinin alındığı görülebilir.

Manifest’ler içerisinde kullanılan diğer bir bileşen istemcilerdir(nodes). Belli bir istemciye özel işlem yapabilmek için “nodes” direktifi kullanılabilir. Örneğin sadece DNS sunucularında uygulanmak istenen bir işlem için aşağıdaki örneğe benzer bir kod hazırlanmalıdır.

Böylece puppet-client, ns1 ve ns2 sunucularında ilk yarım saatlik periyot sonrasında ve “puppet apply –test” komutunun çalıştırılması sonrasında aşağıdaki çıktılar alınmalıdır.

puppet-client sunucusu:

Görüldüğü gibi /tmp/dns dosyası sadece ns1 ve ns2 sunucuları için tanımlandığından puppet-client sunucusunda bu dosya oluşturulmamıştır.

ns1 sunucusu:

ns2 sunucusu:

Puppet Modülleri

Modüller yapılan işleri gruplamak üzere tasarlanmış kullanışlı bileşenlerdir. Puppet community içerisinde kullanıma hazır bir çok modül olduğu gibi kendi modülünüzü yazıp kullanmanız da mümkündür.

Kullanılmak istenilen modülün öncelikle master sunucu üzerinde indirilmesi ve kurulması gerekmektedir.

Ardından ilgili manifest dosyası içerisinde modülün kullanacağı istemciye göre ilgili satırlar eklenmelidir. puppet-client sunucusuna apache servisini kurmak için aşağıdaki satırlar eklenebilir.

puppet-client sunucusunda değişikliklerin etkili olması aşağıdaki komut çalıştırılmalıdır.

Apache kurulumunu gösteren uzunca bir çıktının ardından aşağıdaki komut ile servisin durumu kontrol edilebilir.

Modüller ile ilgili daha geniş bilgiyi ilgili Puppet sayfasında bulabilirsiniz.

Puppet ile ilgili yazılarım daha detaylı bilgi ve örnekler ile devam edecek.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir