Я попытался создать пользовательский тип ресурса в 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
Я надеюсь это поможет