我想在定义的类型中创建文件。我已经尝试了几种方法,但无法解决问题。让我解释一下我的情况。
我正在使用 temapltes 创建一些文件,我可以完美地完成该操作。我正在使用以下 ruby 函数来收集文件名、位置类型的数据
require 'rexml/document'
include REXML
module Puppet::Parser::Functions
newfunction(:getConfigFileDetails, :type => :rvalue ) do |args|
fileDetails= []
doc = REXML::Document.new args[0]
doc.elements.each("node/congfigurations/config") {
|config|
fileName= config.elements["@fileName"].value
fileLocation= config.elements["@location"].value
fileDetails << {'filename' => fileName, 'filelocation'=> fileLocation}
}
return fileDetails
end
end
我在我的木偶类中使用了这个函数,它对我来说很好用
define fill_templates() {
$fileName = $name["filename"]
$fileLocation = $name['filelocation']
file { "${fileLocation}/${fileName}/":
ensure => present,
owner => 'root',
group => 'root',
mode => '0777',
content => template("config/${fileName}.erb"),
require => Exec["unzip_pack"],
}
}
$configFileDetails = getConfigFileDetails($allConfigurations['configurations'])
fill_templates { $configFileDetails: }
然后我尝试使用我自己的内容创建文件,而不是从模板中获取数据。以下是我的红宝石功能
require 'rexml/document'
include REXML
module Puppet::Parser::Functions
newfunction(:getCreateFileDetails, :type => :rvalue ) do |args|
fileDetails= []
doc = REXML::Document.new args[0]
doc.elements.each("node/create/file") {
|filedata|
fileName= filedata.elements["filename"].text
fileLocation= filedata.elements["location"].text
fileContent= filedata.elements["content"].text
fileDetails << {'filename' => fileName, 'filelocation'=> fileLocation, 'filecontent'=> fileContent }
}
return fileDetails
end
end
我在我的木偶类中使用它如下
define create_files() {
$fileName = $name["filename"]
$fileLocation = $name['filelocation']
$fileContent = $name['filecontent']
file { "${fileLocation}/${fileName}/":
ensure => present,
owner => 'root',
group => 'root',
content => "$fileContent",
}
}
$createFileDetails = getCreateFileDetails($allConfigurations['configurations'])
create_files { $createFileDetails: }
但它总是给我错误
Could not retrieve catalog from remote server: Could not intern from pson: Could not convert from pson: Could not find relationship target
我无法意识到这个问题的原因。前一个模板工作而后一个模板不工作的原因是什么。
感谢您对此的关注