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

Переопределить ресурсы в марионеточных классах

Предположим, у меня есть 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 }