3

パペットのテンプレートの配列に for ループを含めようとしています。http://docs.puppetlabs.com/guides/templating.htmlの情報に従っていますが、puppet-client では次のように言って失敗します:

 Could not retrieve catalog from remote server: wrong header line format

これは、私が知る限り、ERB 解析の問題に関連しています。

erb検証

#erb -P -x -T '-' /etc/puppet/modules/apache2/templates/site-config.erb  | ruby -c
-:22: syntax error, unexpected '.'
 ;  alias.each do |val|
         ^

手がかりは大歓迎です。ありがとう。

サイト構成.erb:

# Virtual Host <%= name %>
NameVirtualHost <%= listen_config %>
<VirtualHost <%= listen_config %>>
    ## allgemeine Einstellungen wie für HTTP-<VirtualHost>
    ServerAdmin      <%= admin_mail %>
    ServerName       <%= server_name %>
    DocumentRoot     <%= document_root %>
    CustomLog        <%= custom_log %> 
    ErrorLog         <%= error_log %> 


    # Let Apache httpd serve static web application content
    <% alias.each do |val| -%>
    Alias <%= val %>
    <% end -%>

    ...

init.pp:

...
  define site (
    $ensure = 'present',
    $listen_config = "*:80",
    $admin_mail = "nobody@example.com",
    $server_name = "example.local",
    $document_root = "/var/www/",
    $custom_log = "/var/log/apache2/$name.log combined",
    $error_log = "/var/log/apache2/error_$name.log",
    $alias = [],
    $tomcat ="false",
    $jk_logfile ="/var/log/apache2/jk_$name.log",
    $jk_mount =["/$name worker1", "/$name/* worker1"],
    $jk_unmount = [],
    $tls = "false",
    $tls_priorities = "",
    $tls_certificate = "/etc/ssl/certs/apache2_$name.crt",
    $tls_key ="/etc/ssl/certs/apache2_$name.key,
    ) {
  case $ensure {
     'present' : {
        file { "/etc/apache2/sites-available/$name":
           owner   => root,
           group   => root,
           mode    => 644,
           content => template("site-config.erb"),
        }
        exec { "/usr/sbin/a2ensite $name":
           unless => "/bin/readlink -e ${apache2_sites}-enabled/$name",
           notify => Exec["reload-apache2"],
        }
     }
     'absent' : {
        exec { "/usr/sbin/a2dissite $name":
           onlyif => "/bin/readlink -e ${apache2_sites}-enabled/$name",
           notify => Exec["reload-apache2"],
           require => Package["apache2"],
        }
     }
     default: { err ( "Unknown ensure value: '$ensure'" ) }
  }
 }
...
4

1 に答える 1

2

残念ながら、Rubyalias構文キーワードです。という名前のレキシカル変数を作成または参照することはできませんalias:

pry(main)> alias = 1
SyntaxError: unexpected '='
alias = 1
       ^

パペットのドキュメントから

変数の参照

Puppet は、現在設定されているすべての変数 (ファクトを含む) を評価時にテンプレートに渡します。これらの変数にアクセスするには、いくつかの方法があります。

現在のスコープで表示されるすべての変数は、Ruby インスタンス変数 (@fqdn、@memoryfree、@operatingsystem など) として使用できます。このスタイルの参照は、Puppet マニフェストで短い (ローカル) 変数名を使用するのと同じように機能します: @ fqdn は $fqdn とまったく同じです。

現在のスコープで表示されるすべての変数は、Ruby ローカル変数としても使用できます。つまり、@ 記号を前に付けずに、fqdn、memoryfree、operatingsystem などです。このスタイルの参照は、変数名が Ruby メソッド名と衝突するときに問題を引き起こすことがあります。通常は、@ スタイルを使用することをお勧めします。

したがって、あなたの解決策は、彼らのアドバイスに従い、常に@alias字句変数形式よりもインスタンス変数形式を使用することだと思います。

于 2013-01-17T16:01:11.217 に答える