Kukla: türlerin koşullu tanımı


2

Bu soruların nasıl sözcüklendirileceğinden emin değilim, bu yüzden uygunsuz olduğunu düşünüyorsanız lütfen bir düzenleme önerin.

Mevcut işletim sistemi modüllerini farklı işletim sistemlerini destekleyerek genişletmeye çalışıyorum. Küçük bir problemle karşılaştım, zarif bir şekilde nasıl çözebileceğime emin değilim. In params.ppdosyaya yüklemeye OS özgü paketler böyle tanımı vardır:

case $::osfamily {
  'RedHat': {
    $package_server = 'mariadb-server'
    $package_client = 'mariadb'
    $php_package_name = 'php-mysql'
  }
...

Modül, tüm konfigürasyonun $php_package_namekurulmasına bağlı olarak yazılmıştır . Ben böylece ben ayarlamak, php için ayrı bir MySQL pakete sahip değil farklı işletim sistemi için bu modülü, exnted istediğiniz $php_package_namedeğişkeni undef. Bu bir sorun getiriyor, kukla yüklemeye çalışıyor Package[undef].

Bunu önlemenin iyi bir yolu ne olabilir? Şimdiye kadarki düşüncelerim savaşı yanlış olarak ayarladı ve $php_package_namesadece ateş tanımına sahipti if $php_package_name != false. Belki daha iyi bir yol vardır?


Ayar $php_package_nameTo falsezamanının% 50'sini çalışacak bir çözümdür. Diğer% 50 kez $php_package_name != false, önce değerlendirilmiş ve $php_package_name = falsedaha sonra değerlendirilecek : Bakınız: serverfault.com/questions/590762/…
Adam Ryczkowski

Yanıtlar:


3

Evet, bu makul bir yaklaşım gibi görünüyor. Bunun üzerinde küçük bir değişiklik önerebilirim, kullanılan packagekaynağın $php_package_namehiç uygulanıp uygulanmayacağını belirleyen yeni bir param ekleyin :

case $::osfamily {
  'RedHat': {
    $package_server = 'mariadb-server'
    $package_client = 'mariadb'
    $php_package_name = 'php-mysql'
    $php_package_install = true
  }
  'otherOS': {
    $package_server = 'mariadb-server'
    $package_client = 'mariadb'
    $php_package_install = false
  }
  ...

Ardından kaynak nerede:

if $thismodule::params::php_package_install {
  package { $thismodule::params::php_package_name:
    ensure => present,
    ...
  }
}

Yeni işletim sistemine yükleme için gereken kaynaklar çılgınca farklı ise, işletim sistemine özgü tüm işlemlerinizi params.pp dosyasında yapma yönteminin daha temiz olmayabileceğini unutmayın. Bu, açık bildirim dosyanızı yalnızca okunamayan bir sıçan koşul ve parametreleri yuvasına dönüştürebilir. Bu durumda, farklı işletim sistemlerini ayrı bir sınıfa install_el.ppbölmekten korkmayın ( RedHat ailesi ve install_otheros.ppyeni aile için olduğu gibi, doğru olanı dahil etmek init.ppveya params.pp).


Bunun% 100 çalışacağına emin misin? Değişkenlerin ayrıştırılma sırasına güvenebileceğinden emin değilim. Bakınız: serverfault.com/questions/590762/…
Adam Ryczkowski

@AdamRyczkowski Evet - değiştirdiği modül (ve benim tavsiyem), doğru değerlendirme sırasını sağlamak için sınıf mirasına dayanan "params modelini" kullanıyor.
Shane Madden

Teşekkürler, bu çoğunlukla sorumu cevaplıyor. Bu arada, zaten $php_package_ensure = 'present'yaptım, sadece kontrol edebilir miyim yoksa sizde olmasını önerir misiniz $php_package_install?
07’de

@ edvinas.me Size bağlı - bence ayrı bir değişkenle ilgili neler olduğu daha açık, ancak bu modülü kullanacak olan başka biri değilse, o zaman bu bir endişe değil.
Shane Madden
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.