Назад | Перейти на главную страницу

Марионетка: сбой при создании настраиваемого ресурса

Я попытался создать пользовательский тип ресурса в Puppet, который создает файл. Однако после добавления типа и поставщиков в мои модуль / библиотека папка и запущенный агент марионетки, используя новый настраиваемый ресурс, он показывает мне ошибку с Неизвестный тип ресурса. Не уверен, что я сделал не так.

Моя структура модуля выглядит так:

.
├── examples
│   └── init.pp
├── Gemfile
├── lib
│   ├── provider
│   │   ├── create_file
│   │   │   └── windows.rb
│   │   └── iis_powershell.rb
│   └── type
│       └── create_file.rb
├── manifests
│   └── init.pp
├── metadata.json
├── Rakefile
├── README.md
└── spec
    ├── classes
    │   └── init_spec.rb
    └── spec_helper.rb

Мой файл типа (т.е. create_file.rb)

Puppet::Type.newtype(:create_file) do
    @doc = "Creates New Files"
    ensurable
    newparam(:filepath) do
        desc "Fully qualified filepath"
        validate do |value|
            if value.nil? or value.empty?
                raise ArgumentError, "A non-empty filepath must be specified."
            end
            fail("File paths must be fully qualified, not '#{value}'") unless value =~ /^.:(\/|\\)/
        end
    end
end

Файл моего провайдера (например, windows.rb)

Puppet::Type.type(:create_file).provide: windows do
    desc "Powershell Provider to create new files"
  confine :operatingsystem => :windows
  defaultfor :operatingsystem => :windows




    def filepath=(value)
        @property_flush[:filepath] = value
    end

    def create
        create_cmd = "New-Item -Path \"#{@resource[:filepath]}\" -ItemType File"
        result = self.class.run(create_cmd)
        fail "Error creating file: #{result[:errormessage]}" unless result[:exitcode] == 0
        @property_hash[:ensure] = :present
    end

    def destroy
        destroy_cmd = "Remove-Item -Path \"#{@resource[:filepath]}\" "
        result = self.class.run(destroy_cmd)
        fail "Error removing file: #{result[:errormessage]}" unless result[:exitcode] == 0
        @property_hash[:ensure] = :absent
    end

end

Мой init.pp

class custom_resource {
    create_file{"NewTestFile":
        ensure=> present,
        filepath => "C:/testfile.txt",
    }

}

Сообщение об ошибке, которое я получил после запуска модуля:

Could not retrieve catalog from remote server: Error 500 on SERVER:
Server Error: 
Evaluation Error: Error while evaluating a Resource Statement, 
Evaluation Error: Error while evaluating a Resource Statement, Unknown resource type: 'create_file' 
at /etc/puppetlabs/code/environments/dev/modules/custom_resource/manifests/init.pp:
46:2 on node 

Файлы lib находятся по неправильному пути. Поместите каталоги типов и поставщиков в модуль / lib / марионетка после чего ваша структура модуля будет иметь следующий вид

.
├── examples
│   └── init.pp
├── Gemfile
├── lib
│   └── puppet
│       ├── provider
│       │   ├── create_file
│       │   │   └── windows.rb
│       │   └── iis_powershell.rb
│       └── type
│           └── create_file.rb
├── manifests
│   └── init.pp
├── metadata.json
├── Rakefile
├── README.md
└── spec
    ├── classes
    │   └── init_spec.rb
    └── spec_helper.rb

Я надеюсь это поможет