web-dev-qa-db-ja.com

Puppet:テンプレートの定義から変数を参照する

Puppetには次のクラスと定義があります。

$certDirectory = "/var/lib/ssl/certs"

class openssl {
  package { "openssl":
    ensure => latest
  }
  file { "openssl":
    path => "/var/lib/ssl",
    ensure => directory,
    mode => 0644
  }
  file { "openssl-certs":
    path => "/var/lib/ssl/certs",
    ensure => directory,
    mode => 0644
  }
  define cert($ensure = present) {
    $certfile = "${certDirectory}/${name}.cert"
    $keyfile = "${certDirectory}/${name}.key"
    $pemfile = "${certDirectory}/${name}.pem"

    file { "${name}.cert":
      path => $certfile,
      source => "puppet:///openssl/${name}.cert",
      mode => 0640,
      ensure => $ensure,
    }
    file { "${name}.key":
      path => $keyfile,
      source => "puppet:///openssl/${name}.key",
      mode => 0640,
      ensure => $ensure,
    }
  }
}

私は後で(ノード内で)このopenssl :: cert defineを使用して、Apache vhost構成に証明書を渡します。

openssl::cert { "rri":
  ensure=>present
}

Apache2::site-config { "default":
  ip => "*",
  order => "000",
  docroot => '/home/support/public_html',
  cert => Openssl::Cert["rri"]
}

そして、Apache2 :: site-config内で以下を定義します。

  file { "site-config-$name":
    path => "/etc/Apache2/sites-available/$name",
    owner => root,
    group => root,
    mode => 0644,
    content => template($template),
    notify => Exec["reload-Apache2"],
  }

私が持っている質問-$ templateにある.erbファイルのcert変数から$certfile/$keyfileを参照するにはどうすればよいですか?

私もこれに間違った方法でアプローチしているかどうかを知りたいと思います-人形を使って何かをセットアップしようとするのは初めてで、自分にできることをいじってみました。

更新済み-準作業中フライハイトの回答に基づく-私はApache2 :: site-configにいくつかの変更を加えました

   define site-config (
    $ensure = 'present',
    $template = 'Apache2/vhost.erb',
    $docroot,
    $ip='*',
    $order='000',
    $logs = "",
    $cert = false) {

      if $cert {
        File["site-config-$name"] { require=>Openssl::Cert[$cert] }
        $certfile = "${openssl::certDirectory}/${cert}.cert"
        $keyfile = "${openssl::certDirectory}/${cert}.key"
      }

      file { "site-config-$name":
        path => "/etc/Apache2/sites-available/$name",
        owner => root,
        group => root,
        mode => 0644,
        content => template($template),
        notify => Exec["reload-Apache2"],
      }

次に、.erb

   SSLCertificateFile    <%= certfile %>
   SSLCertificateKeyFile <%= keyfile %>

これはかなりうまく機能しているようです-ある時点で証明書の命名規則を変更した場合に、Openssl :: Certリソースへの参照から実際のファイル名にアクセスできるようになることを望んでいました。それを行う方法があるかどうかを知りたいのですが。

5
gnarf

$ template.erbのこのようなもの:

<VirtualHost <%= ip %>:443>
  Document Root <%= docroot %>
  SSLCertificateFile <%= cert %>
  # ...
</VirtualHost>

つまり、puppetのすべての変数は、.erbファイルに隠されているRubyビットのローカル変数として使用できます。

名前付き.erbファイルの代わりに「$ template」がある理由がわかりません($ templateがどこにも設定されていませんが、どこかに隠れていると想定します)

そして、これは間違っているようです:cert => Openssl::Cert["rri"]。私はもっ​​ともっと何かを期待します:

openssl::cert { "rri": }

そして、.erbは次のようになります。

<VirtualHost <%= ip %>:443>
  Document Root <%= docroot %>
  SSLCertificateFile <%= certDirectory %>/<%= name %>
  # ...
</VirtualHost>
4
freiheit