Независимый от платформы манифест для установки и запуска apache2 или httpd - PullRequest
0 голосов
/ 11 ноября 2018

Мне нужно написать один манифест как install-apache.pp, который установит

  • apache2 пакет, если это система на основе Debian или
  • httpd пакет, если это система на базе RedHat

Ниже приведен код; это работает в CentOS, но не работает в Ubuntu.

case $facts['os']['name'] {
  'Debian': {
    package { 'apache2':         
      ensure => installed,       
    }            
    service { 'apache2':     
      ensure => running,     
    }
  }
  'RedHat': {
    package { 'httpd' :
      ensure => installed,
    } 
    service { 'httpd':
      ensure => running,
    }
  }
}

Итак, я внес некоторые изменения, как показано ниже, но не уверен, почему он не работает.

case $operatingsystem {
  'Debian': {
    package { 'apache2':         
      ensure => installed,       
    } ->             
    service { 'apache2':     
      ensure => running,     
      enable => true,        
    }
  }
  'RedHat': {
    package { 'httpd' :
      ensure => installed,
    } ->
    service { 'httpd':
      ensure => running,
      enable => true,    
    }
  }
}

Команда, используемая для выполнения:

puppet apply install-apache.pp --logdest /root/output.log

1 Ответ

0 голосов
/ 12 ноября 2018

Проблема здесь в том, что вы используете факт $facts['os']['name'], который назначен конкретной операционной системе дистрибутива, а не семейству дистрибутива. Этот факт будет присвоен Ubuntu в Ubuntu, а не Debian. Факт должен быть зафиксирован в $facts['os']['family'], которому в Ubuntu будет присвоено Debian.

Вы также можете использовать селекторы , чтобы улучшить это в дополнение к исправлению. Также рекомендуется создать зависимость service от package в этом манифесте, чтобы обеспечить правильное упорядочение. Обновление также будет полезно.

С учетом этих исправлений и улучшений ваш окончательный манифест будет выглядеть так:

$web_service = $facts['os']['family'] ? {
  'RedHat' => 'httpd',
  'Debian' => 'apache2',
  default  => fail('Unsupported operating system.'),
}

package { $web_service:        
  ensure => installed,      
}            
~> service { $web_service:    
  ensure => running,    
  enable => true,       
}
...