Puppet — установите определенные типы в Nodes.pp

Как перезаписать определенный тип в nodes.pp? Я хочу установить пользовательский domain с помощью nodes.pp. Case Default не вариант.

Я использую марионетку 6.0..

Следующий метод не работает. Там написано Could not find declared class resolv::resolv_config. Судя по этому ответу, похоже, что раньше он работал в версии 3.0. /а>.

узлы.pp

node "test001" {
  class { 'resolv::resolv_config':
    domain => "something.local",
  }
}

модули/разрешение/манифесты/init.pp

class resolv {
    case $hostname {
        /^[Abc][Xyz]/: {
            resolv:resolv_config { 'US':
                domain => "mydomain.local",
            }
        }
    }
}

define resolv::resolv_config($domain){
    file { '/etc/resolv.conf':
        content => template("resolv/resolv.conf.erb"),
    }
}

resolv.conf.erb

domain <%= @domain %>

person Mike    schedule 19.05.2020    source источник


Ответы (1)


Здесь есть несколько проблем, но одна из них, вызывающая ошибку «не удалось найти объявленный класс», заключается в том, что вы используете неправильный синтаксис для объявления определенного типа. Ваш код должен быть примерно таким:

node "test001" {
  resolv::resolv_config { 'something.local':
    domain => "something.local",
  }
}

В документации есть примеры объявления определенных типов, https://puppet.com/docs/puppet/latest/lang_defined_types.html.

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

define resolv::resolv_config($domain){
    file { '/etc/resolv.conf':
        content => template("resolv/resolv.conf.erb"),
    }
}

вызовет ошибку, если вы попытаетесь объявить более одного resolv::resolv_config, потому что они оба попытаются объявить файловый ресурс /etc/resolv.conf. Почти наверняка вы хотели использовать file_line ресурс.

person Jon    schedule 20.05.2020