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

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

Таким образом, у меня есть видеосервер класса с 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 }

Но это действительно неудобно. Возможно, наследование могло помочь здесь, но я не думаю, что это - хорошее решение. Единственной разницей во многих узлах могло быть отсутствие одного файла, и я не вижу никакой смысл в наследовании в той ситуации.

1
задан 6 October 2014 в 02:12
2 ответа

Я нашел решение. На самом деле то, что я хотел сделать, возможно с помощью космического корабля <| |> Оператор .

Поэтому, если я хочу изменить желаемое состояние файла / root / testFile2 только для узла s1.example.com , я должен сделать примерно так:

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 }
1
ответ дан 3 December 2019 в 21:12

Вы не можете удалить определение ресурса после его объявления, и вы правы, наследование класса должно использоваться очень экономно

Я бы использовал пример с параметрами вашего класса с hiera

node s1.example.comf { include videoServer }
node s2.example.comf { include videoServer }

Установка s2.example.com.yaml на

videoServer::fileState2: absent
1
ответ дан 3 December 2019 в 21:12

Теги

Похожие вопросы