Назад | Перейти на главную страницу

Будет ли передача массива в качестве значения в марионетке установить мой пакет?

Я прорабатываю документацию по марионетке. Одно из упражнений - использовать условную логику для написания общего манифеста установки:

Упражнение: используйте факт $ operatingsystem, чтобы написать манифест, который устанавливает среду сборки на машинах на базе Debian («debian», «ubuntu») и Enterprise Linux («centos», «redhat»). (Для систем обоих типов требуется пакет gcc, но для систем типа Debian также требуется сборка.)

Я написал код, который работает, но поскольку моя машина - машина centos, у меня нет возможности проверить, работает ли ветка:

$build_packages = $::operatingsystem ? {
  /(?i)centos|redhat/ => 'gcc',
  /(?i)debian|ubuntu/ => ['gcc','build-essential'],
  default => undef
}

notify {"build_packages":
  message => "Build packages for ${::operatingsystem} are: ${build_packages}\n",
  before => Package['build']
}

package {'build':
  ensure => installed,
  name => $build_packages
}

У меня вопрос: если бы я был в системе debian или ubuntu, это сработало бы? В частности, если я установил $build_packages в массив, будет ли ресурс пакета делать правильные вещи и устанавливать два пакета? Или мне следует переопределить этот ресурс вот так ?:

package {$build_packages:
    ensure => installed
}

Второй, package {$build_packages:. Это расширяется до ресурса для каждого члена массива, и каждый пакет в массиве будет установлен.

Обратите внимание, что массив, однако, нарушит notify ресурс с его message предполагает, что $build_packages это строка.