2017-03-27 6 views
0

パペット(Hieraを使用)を使用して1つのファイルと1つのシンボリックリンクを作成しようとしています。私はUbuntu 16.04で動作しています。最新のモジュールをすべて使用しています。 ファイルは "a"と呼ばれ、リンクは "b"と呼ばれます。これらのファイルは直接関連していません。パペットエラー:コンテンツ、ソース、ターゲットを複数指定できません

Iは、ノードのinit.ppファイルがある:

define hiera::files (
    $ensure, 
    $content= "", 
    $target="/./.", 
    $mode = "", 
    $owner = "root", 
    $force = "false") { 

    file { $title: 
    ensure => $ensure, 
    owner => $owner, 
    force => $force, 
    content => $content, 
    mode => $mode, 
    target => $target, 
    } 
} 

create_resources('hiera::files', hiera_hash('files', {})) 

node "default" { 
    hiera_include('classes') 
} 

あり、対応するデータを含むnode.yamlファイルもある:私は他の変形を試みた

files: 
    /etc/a.txt: 
    ensure: "present" 
    mode: "2770" 
    owner: "simon" 
    content: "[d] \n type = sss \n resource = samba_1" 

/etc/b: 
    ensure: "link" 
    target: "/usr/share/b" 
    mode: "777" 

は、私contentsourcetargetのいずれか1つ以上を指定できないというエラーが常に発生します。両方を持つことは可能ですか?同じファイルではなく、私がしようとしているような別々のファイルのために?

+1

Hieraデータが不正な形式であることに注意してください。私はそれが実際のデータにあるのとは対照的に質問を準備したときに起こったと思うが、確かではないので、私は修正を適用しなかった。 –

+1

また、 'create_resources()'や他の関数を介して間接的に行うなど、一番上のスコープでリソースを宣言するのは、通常は貧弱な形式です。そのような宣言をクラスまたはノードブロックに入れることを強くお勧めします。 –

+0

ありがとうご提案 – quant

答えて

1

あなたHieraハッシュにcontenttargetを指定していない場合でも、彼らは設定されているようが、ここに問題があるhiera::filesデフォルト:

define hiera::files ($ensure, $content= "", $target="/./.", $mode = "", $owner = "root", $force = "false"){ 

変更を$content$targetデフォルトにundefですので、使用する場合は指定する必要があります。例えば

define hiera::files ($ensure, $content = undef, $target = undef, $mode = "", $owner = "root", $force = "false"){ 

あなたが本当にこれらのデフォルト値が必要な場合は、あなたがコンテンツを持つファイルにtargetを設定しないようにする方法が必要、とtargetでファイル/シンボリックリンクのcontent

define hiera::files ($ensure, $content = undef, $target = undef, $mode = "", $owner = "root", $force = "false"){ 
    # Provide a default empty content value when ensure => present, and no content is given 
    $real_content = $ensure ? { 
    "present" => $content ? { 
     undef => "", 
     default => $content, 
    }, 
    default => undef, 
    } 

    # Provide a default /./. target value when ensure => link, and no target is given 
    $real_target = $ensure ? { 
    "link" => $target ? { 
     undef => "/./.", 
     default => $target, 
    }, 
    default => undef, 
    } 

    file { $title: 
    ensure => $ensure, 
    owner => $owner, 
    force => $force, 
    content => $real_content, 
    mode => $mode, 
    target => $real_target, 
    } 
} 

それとも好ましくは、動作を明確にするために別個の定義を使用します。

関連する問題