Предположим, у меня есть site.pp вот так:
class videoServer {
file { '/root/testFile' : ensure => present }
file { '/root/testFile2' : ensure => present }
file { '/root/testFile3' : ensure => present }
}
node s1.example.comf { include videoServer }
node s2.example.comf { include videoServer }
Итак, у меня есть класс videoServer с 3 файловыми ресурсами и двумя узлами, которые включают этот класс.
Я пытаюсь выяснить, есть ли простой способ изменить атрибуты ресурса или даже полностью исключить их. Например, я хочу исключить / root / testFile2 в узле s2.example.com. Я бы изменил его атрибут обеспечения на «отсутствует». Но каков его синтаксис, если он действительно существует? Если это невозможно, как мне пересмотреть занятие, чтобы сделать его менее болезненным?
Да, я могу использовать такие параметры класса:
class videoServer ( $fileState = present, $fileState2 = present,
$fileState3 = present ) {
...
file { '/root/testFile2' : ensure => $fileState2 }
...
...
node s2.example.com {
class { 'videoServer' : fileState2 = absent }
Но это действительно неудобно. Возможно, здесь поможет наследование, но я не думаю, что это хорошее решение. Единственная разница во многих узлах может заключаться в отсутствии одного файла, и я не вижу смысла в наследовании в этой ситуации.
Вы не можете удалить определение ресурса после его объявления, и вы правы, наследование классов следует использовать очень экономно
Я бы использовал ваш пример параметров класса с hiera
node s1.example.comf { include videoServer }
node s2.example.comf { include videoServer }
Установка s2.example.com.yaml на
videoServer::fileState2: absent
Я нашел решение. На самом деле то, что я хотел достичь, возможно, используя космический корабль <| |>
оператор.
Итак, если я хочу изменить желаемое состояние /root/testFile2
файл только для s1.example.com
node я должен сделать что-то вроде этого:
class videoServer {
file { '/root/testFile' : ensure => present }
file { '/root/testFile2' : ensure => present }
file { '/root/testFile3' : ensure => present }
}
node s1.example.comf {
include videoServer
File <| title == '/root/testFile2' |> { ensure => absent }
}
node s2.example.comf { include videoServer }