4

puppet 変数のドキュメントを見てきましたが、これを次の状況に適用する方法がわかりません。

if vagrant (local machine)

phpfpm::nginx::vhost { 'vhost_name':
    server_name => 'dev.demo.com',
    root        => '/vagrant/public',
}

else if aws ec2 (remote machine)

phpfpm::nginx::vhost { 'vhost_name':
    server_name => 'demo.com',
    root        => '/home/ubuntu/demo.com/public',
}

ありがとう

4

3 に答える 3

7

vagrant ホストと EC2 インスタンスの両方で factorer を実行してみて、違いを探してください。2 つのホスト間で 'facter virtual' が異なる可能性があるか、EC2 が vagrant ホストには存在しない一連の ec2_ ファクトを返す可能性があると思われます。

次に、この事実を以下のようにトップレベルの変数として使用できます。ケースステートメントにも切り替えました。これは、私見を維持するのが少し簡単であり、さらにエラーチェックにデフォルトブロックを使用できるためです。

case $::virtual {
  'whatever vagrant returns' : {
    <vagrant specific provisionin>
   }
  'whatever the EC2 instance returns' : {
     <EC2 specific provisioning>
   }
   default : {
      fail("Unexpected virtual value of $::virtual")
   }
}
于 2012-07-07T16:48:34.957 に答える
5

注: この回答が投稿されてから 3 年間で、Vagrant はfacterハッシュ オプションを導入しました。詳細については、以下の @thomas の回答を参照してください。これは正しい方法であり、提案したカーネル コマンド ライン トリックはかなり時代遅れになっていると思います。ファクトを使用する根拠は変わっていませんが、強化されただけです (たとえば、Vagrant は現在 AWS プロバイダーをサポートしています)。

元の返信: 注意してください - vagrant には virtualbox のみを使用し、その逆も同様であると想定していますが、Vagrant は他の仮想化テクノロジ (kvm など) のサポートに取り組んでおり、いつか vagrant なしで VirtualBox を使用する可能性があります (本番環境など)。

代わりに、ベースボックスをビルドするときにカーネルに「vagrant=yes」パラメーターを渡すというトリックを使用します。これは、/proc/cmdline からアクセスできます。次に、それに基づいて新しいファクトを作成できます (たとえば、/etc/vagrant ファイルを作成し、その後のファクト実行でそれを確認します)。

于 2012-09-25T07:53:01.707 に答える
3

Vagrant には、Puppet のファクトを提供するための優れたユーティリティがあります。

factor (hash) - Puppet 実行内で使用可能な factor 変数として設定するデータのハッシュ。

たとえば、Puppet セットアップを使用した私の Vagrantfile のスニペットは次のとおりです。

config.vm.provision "puppet", :options => ["--fileserverconfig=/vagrant/fileserver.conf"]  do |puppet|
    puppet.manifests_path = "./"
    puppet.module_path = "~/projects/puppet/modules"
    puppet.manifest_file  = "./vplan-host.pp"
    puppet.facter = {
      "vagrant_puppet_run" => "true"
    }
  end

そして、その事実をたとえば次のように利用します。

  $unbound_conf = $::vagrant_puppet_run ? {
    'true'  => 'puppet:///modules/unbound_dns/etc/unbound/unbound.conf.vagrant',
    default => 'puppet:///modules/unbound_dns/etc/unbound/unbound.conf',
  }

  file { '/etc/unbound/unbound.conf':
    owner  => root,
    group  => root,
    notify => Service['unbound'],
    source => $unbound_conf,
  }

事実は時間内にのみ利用可能であることに注意してくださいpuppet provision

于 2015-07-09T22:31:16.383 に答える