Con rối - Loại và Nhà cung cấp

Các loại con rối được sử dụng để quản lý cấu hình riêng lẻ. Con rối có nhiều loại khác nhau như loại dịch vụ, loại gói, loại nhà cung cấp, v.v. Trong đó mỗi loại có các nhà cung cấp. Nhà cung cấp xử lý cấu hình trên các nền tảng hoặc công cụ khác nhau. Ví dụ: loại gói có các nhà cung cấp aptitude, yum, rpm và DGM. Có rất nhiều loại và Puppet bao hàm một mục quản lý cấu hình phổ tốt cần được quản lý.

Puppet sử dụng Ruby làm ngôn ngữ cơ sở của nó. Tất cả các loại và trình cung cấp Puppet hiện có đều được viết bằng ngôn ngữ Ruby. Vì nó tuân theo định dạng mã hóa tiêu chuẩn, người ta có thể chỉ cần tạo chúng như được hiển thị trong ví dụ cho kho lưu trữ quản lý kho. Ở đây, chúng ta sẽ tạo kiểu repo và svn và git của nhà cung cấp. Phần đầu tiên của loại repo là loại chính nó. Các loại thường được lưu trữ trong lib / con rối / loại. Đối với điều này, chúng tôi sẽ tạo một tệp có tênrepo.rb.

$ touch repo.rb

Thêm nội dung sau vào tệp.

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

Trong tập lệnh trên, chúng tôi đã tạo một khối "Puppet::Type.newtype(:repo) do"tạo ra một kiểu mới với tên repo. Sau đó, chúng tôi có @doc, giúp thêm bất kỳ mức chi tiết nào mà người ta muốn thêm. Câu lệnh tiếp theo là Ensurable; nó tạo thuộc tính ensure cơ bản. Loại con rối sử dụng ensure thuộc tính để xác định trạng thái của mục cấu hình.

Thí dụ

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

Câu lệnh ensure cho Puppet biết ngoại trừ ba phương thức: tạo, hủy và tồn tại trong trình cung cấp. Các phương pháp này cung cấp các tính năng sau:

  • Lệnh tạo tài nguyên
  • Lệnh xóa tài nguyên
  • Lệnh kiểm tra sự tồn tại của tài nguyên

Tất cả những gì chúng ta cần làm là chỉ định các phương thức này và nội dung của chúng. Con rối tạo ra cơ sở hạ tầng hỗ trợ xung quanh chúng.

Tiếp theo, chúng tôi xác định một tham số mới được gọi là nguồn.

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

Nguồn sẽ cho loại kho lưu trữ nơi lấy / sao chép / kiểm tra kho lưu trữ nguồn. Trong điều này, chúng tôi cũng đang sử dụng một hook có tên là validate. Trong phần nhà cung cấp, chúng tôi đã định nghĩa git và svn để kiểm tra tính hợp lệ của kho lưu trữ mà chúng tôi đã xác định.

Cuối cùng, trong đoạn mã, chúng ta đã xác định thêm một tham số gọi là đường dẫn.

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

Đây là kiểu giá trị chỉ định nơi đặt mã mới được truy xuất. Ở đây, một lần nữa sử dụng hook validate để tạo một khối kiểm tra giá trị của sự phù hợp.

Trường hợp sử dụng của Nhà cung cấp Subversion

Hãy bắt đầu với nhà cung cấp subversion bằng cách sử dụng kiểu đã tạo ở trên.

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

Trong đoạn mã trên, chúng tôi đã xác định trước rằng chúng tôi cần fileutils thư viện, yêu cầu 'fileutils' mà chúng tôi sẽ sử dụng phương pháp từ.

Tiếp theo, chúng tôi đã xác định trình cung cấp là khối Puppet :: Type.type (: repo) .provide (: svn) làm điều này cho Puppet biết rằng đây là trình cung cấp cho loại được gọi là repo.

Sau đó, chúng tôi đã thêm desccho phép thêm một số tài liệu vào nhà cung cấp. Chúng tôi cũng đã xác định lệnh mà nhà cung cấp này sẽ sử dụng. Trong dòng tiếp theo, chúng tôi đang kiểm tra các tính năng của tài nguyên như tạo, xóa và tồn tại.

Tạo tài nguyên

Khi tất cả những điều trên được thực hiện, chúng tôi sẽ tạo một tài nguyên sẽ được sử dụng trong các lớp và tệp kê khai của chúng tôi như được hiển thị trong đoạn mã sau.

repo { "wp": 
   source => "http://g01063908.git.brcl.org/trunk/", 
   path => "/var/www/wp", 
   ensure => present, 
}