0

定義されたタイプ内にファイルを作成したい。いくつかの方法を試しましたが、問題を解決できませんでした。私の場合を説明させてください。

templtes を使用していくつかのファイルを作成していますが、その操作を完全に行うことができました。以下のルビー関数を使用して、ファイル名、場所の種類のデータを収集しています

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

この問題の原因がわかりません。前のテンプレートが機能し、後のテンプレートが機能しない理由は何ですか。

これについてあなたの光をありがとう

4

1 に答える 1