Учебники

Кукольный — Тип и поставщик

Типы кукол используются для индивидуального управления конфигурацией. Puppet имеет разные типы, такие как тип сервиса, тип пакета, тип провайдера и т. Д. В каждом типе есть провайдеры. Поставщик обрабатывает конфигурацию на разных платформах или инструментах. Например, тип пакета имеет провайдеров aptitude, yum, rpm и DGM. Существует много типов, и Puppet предлагает хороший элемент управления конфигурацией спектра, которым необходимо управлять.

Puppet использует Ruby в качестве базового языка. Все присутствующие типы Puppet и провайдеры написаны на языке Ruby. Поскольку он соответствует стандартному формату кодирования, их можно просто создать, как показано в примере для репо, который управляет репозиториями. Здесь мы создадим репо типа и провайдеры svn и git. Первая часть типа репо — это сам тип. Типы обычно хранятся в lib / puppet / type. Для этого мы создадим файл с именем repo.rb.

$ touch repo.rb

Добавьте следующее содержимое в файл.

Puppet::Type.newtype(:repo) do  
@doc = "Manage repos"  
   Ensurable   
   newparam(:source) do 
      desc "The repo source"  
      
      validate do |value| 
         if value =~ /^git/ 
            resource[:provider] = :git 
         else 
            resource[:provider] = :svn 
         end 
      end 
      isnamevar 
   end  

   newparam(:path) do 
      desc "Destination path"  
      validate do |value| 
         unless value =~ /^\/[a-z0-9]+/ 
            raise ArgumentError , "%s is not a valid file path" % value 
         end 
      end 
   end 
end 

В приведенном выше сценарии мы создали блок « Puppet :: Type.newtype (: repo) do », который создает новый тип с именем repo. Затем у нас есть @doc, который помогает добавлять любой уровень детализации, который вы хотите добавить. Следующее утверждение является Ensurable; это создает базовое свойство обеспечения. Тип Puppet использует свойство sure для определения состояния элемента конфигурации.

пример

service { "sshd": 
   ensure => present, 
} 

Оператор обеспечивает сообщает Puppet, кроме трех методов: создавать, уничтожать и существовать в поставщике. Эти методы предоставляют следующие функции —

  • Команда для создания ресурса
  • Команда для удаления ресурса
  • Команда для проверки существования ресурса

Все, что нам нужно сделать, это указать эти методы и их содержимое. Puppet создает поддерживающую инфраструктуру вокруг них.

Далее мы определяем новый параметр с именем source.

newparam(:source) do 
   desc "The repo source" 
   validate do |value| 
      if value =~ /^git/ 
         resource[:provider] = :git 
      else 
         resource[:provider] = :svn 
      end 
   end 
   isnamevar 
end

Источник сообщит типу репозитория, где получить / клонировать / оформить исходный репозиторий. В этом мы также используем хук под названием validate. В разделе провайдера мы определили git и svn, которые проверяют правильность определенного нами репозитория.

Наконец, в коде мы определили еще один параметр, называемый path.

newparam(:path) do 
   desc "Destination path" 
   validate do |value| 
      unless value =~ /^\/[a-z0-9]+/ 
         raise ArgumentError , "%s is not a valid file path" % value 
      end 

Это тип значения, который указывает, куда поместить новый код, который будет получен. Здесь снова используйте ловушку validate для создания блока, который проверяет значение соответствия.

Вариант использования Subversion Provider

Давайте начнем с провайдера Subversion, используя созданный выше тип.

require 'fileutils' 
Puppet::Type.type(:repo).provide(:svn) do 
   desc "SVN Support"  
   
   commands :svncmd => "svn" 
   commands :svnadmin => "svnadmin"  
   
   def create 
      svncmd "checkout", resource[:name], resource[:path] 
   end  
   
   def destroy 
      FileUtils.rm_rf resource[:path] 
   end  
    
   def exists? 
      File.directory? resource[:path] 
   end 
end

В приведенном выше коде мы заранее определили, что нам нужна библиотека fileutils , для которой требуется ‘fileutils’, с которой мы собираемся использовать метод.

Далее мы определили провайдера как блок Puppet :: Type.type (: repo) .provide (: svn) do, который сообщает Puppet, что это провайдер для типа с именем repo.

Затем мы добавили desc, который позволяет добавить некоторую документацию к провайдеру. Мы также определили команду, которую будет использовать этот поставщик. В следующей строке мы проверяем функции ресурса, такие как создание, удаление и существование.

Создание ресурса

Как только все вышеперечисленное будет выполнено, мы создадим ресурс, который будет использоваться в наших классах и файлах манифеста, как показано в следующем коде.