Я пишу пользовательский тип ресурса Puppet в Ruby и хочу использовать тип из другого модуля.Этот другой тип определен в коде Puppet.
Из документации я могу сделать:
Puppet::Type.type(:file).new(file_opts)
Это работает для типов, определенных в ruby, но не для типов, определенных в .pp
файлах с использованием
define sysctl (){...}
Это базовое определение типа Ruby.Я переопределяю generate
, чтобы в конечном итоге добавить дополнительный ресурс вместе с моим пользовательским.Вот как выглядит приведенный выше пример type(:file)
:
Puppet::Type.newtype(:network_interface) do
ensurable
newparam(:name) do
isnamevar
desc 'The name of the physical network device'
end
def create
end
def generate
[Puppet::Type.type('sysctl').new(
name: "net.ipv4.conf.eth1.promote_secondaries",
value: 1
)]
end
end
Я получаю эту ошибку:
Network_interface[eth1]: Failed to generate additional resources using 'generate': undefined method `new' for nil:NilClass
Я перерыл код Puppet, чтобы попытаться понять, как работает Puppetсоздает типы из формы define
, но не повезло.