2017-05-05 3 views
1

erbeppに移行し、hiera_hashからlookupに移行しようとします。 現在のエラー:人形エンプボックステンプレートエラー(無効なEPP:構文エラー時)

Error: Could not retrieve catalog from remote server: 
Error 500 on SERVER: Server Error: Evaluation Error: 
Error while evaluating a Function Call, epp(): Invalid EPP: 
Syntax error at 'Port ' at /etc/puppetlabs/code/environments/production/modules/sshd/templates/sshd_config.epp:4:24 
at /etc/puppetlabs/code/environments/production/modules/sshd/manifests/init.pp:23:16 on node puppettestnode 

init.pp

class sshd { 
    #$sshd_config = hiera_hash('sshd') 
    $sshd=lookup('sshd', {merge => 'hash'}) 

    package { 'openssh-server': 
    ensure => present, 
    before => Service['sshd'], 
    } 

    file { '/etc/ssh': 
    ensure => directory, 
    owner => 'root', 
    group => 'root', 
    mode => '0755', 
    require => Package['openssh-server'] 
    }-> 

    file { '/etc/ssh/sshd_config': 
    owner => 'root', 
    group => 'root', 
    mode => '0644', 
    ensure => file, 
    content => epp("${module_name}/sshd_config.epp"), 
    }~> 

    service { 'sshd': 
    ensure => running, 
    require => [ 
     Package['openssh-server'], 
     File['/etc/ssh/sshd_config'], 
    ], 
    } 
} 

sshd_config.epp

###Managed by Puppet### 

# What ports, IPs and protocols we listen for 
<% if $sshd["port"] -%> 
Port <%= $sshd["port"] %> 
<% else -%> 
Port 22 
<% end -%> 

# Use these options to restrict which interfaces/protocols sshd will bind to 
#ListenAddress :: 
#ListenAddress 0.0.0.0 
<% if $sshd['listen'] -%> 
ListenAddress <%= $sshd['listen'] %> 
<% else -%> 
ListenAddress 0.0.0.0 
<% end -%> 

common.yml

人形サーバから
--- 
sshd: 
    port: '22' 
    listen: '0.0.0.0' 

人形の検索:

puppet lookup sshd --merge unique --environment production --explain 
Searching for "sshd" 
    Global Data Provider (hiera configuration version 5) 
    Using configuration "/etc/puppetlabs/puppet/hiera.yaml" 
    Merge strategy unique 
     Hierarchy entry "Per-node data" 
     Path "/etc/puppetlabs/code/environments/production/hiera/nodes/puppettestserver" 
      Original path: "nodes/%{::fqdn}" 
      Path not found 
     Hierarchy entry "Common data" 
     Path "/etc/puppetlabs/code/environments/production/hiera/common.yaml" 
      Original path: "common.yaml" 
      Found key: "sshd" value: { 
      "port" => "22", 
      "listen" => "0.0.0.0" 
      } 
     Merged result: [ 
     { 
      "port" => "22", 
      "listen" => "0.0.0.0" 
     } 
     ] 

それが可能だ場合は助けてください。

答えて

4

ifステートメントは、異常なエラーメッセージの原因となっているPuppet DSL構文ではなくRuby構文を使用しています。

テンプレートは次のようになります。あなたが同じを使用する必要がありますので、

if $sshd["port"] { 
    # Port 
} else { 
    # Port 22 
} 

###Managed by Puppet### 

# What ports, IPs and protocols we listen for 
<% if $sshd["port"] { -%> 
Port <%= $sshd["port"] %> 
<% } else { -%> 
Port 22 
<% } -%> 

# Use these options to restrict which interfaces/protocols sshd will bind to 
#ListenAddress :: 
#ListenAddress 0.0.0.0 
<% if $sshd['listen'] { -%> 
ListenAddress <%= $sshd['listen'] %> 
<% } else { -%> 
ListenAddress 0.0.0.0 
<% } -%> 

は(EPPは非常に基づいています)パペットDSLで、これらは次のようになりますことを忘れないでくださいEPPの中括弧。 (Documentation: Conditional statements)。

+0

多くのありがとうございますが、私は別のエラー '評価エラー:演算子 '[]'がUndef Valueに適用されません。ノードpuppettestnode' – beliy

+1

'$ sshd'の/etc/puppetlabs/code/environments/production/modules/sshd/templates/sshd_config.epp:4:7で' $ sshd'が定義されていない場合は、クラスで完全修飾された変数名を使用するか'epp(" $ sshd:sshd)= "$ sshd:=> $ sshd:' $ sshd:sshd') 'epp関数の呼び出しでそれを渡します。詳細はhttps://docs.puppet.com/puppet/4.10/lang_template_epp.html#accessing-variablesを参照してください。 –

+0

もう一度多くのおかげです。 Variant'epp( "$ {module_name} /sshd_config.epp"、{"sshd" => $ sshd}) 'はうまく動作しますが、使用するためには' $ sshd :: sshd' – beliy