私は、Puppet LabsのPuppetで働く常勤の開発者です。私はPro Puppetの共著者でもあります。
あなたの目標には確かに人形は十分です。 Puppetを使用してこの問題を解決する1つの方法があります。まず、アプリケーションのインスタンス数を管理しているかどうかにかかわらず、これらの管理は一度だけ行う必要があるため、依存関係管理について説明します。次に、Puppetで定義されたリソースタイプとvcsrepo
リソースタイプを使用してアプリの複数のインストールを処理する方法について説明します。
まず、同じアプリの複数のインストールを処理するための人形コードの構成について。 Beanstalkd、solr、PHP拡張などの依存関係は、Puppetクラスを使用してモデル化する必要があります。このクラスは、ノード上で管理されているアプリケーションのコピーの数に関係なく、構成カタログに一度だけ含まれます。今、あなたはクラスで自分の依存関係を持っていることを、あなたは、単にあなたのアプリケーションがデプロイされるノード上で、このクラスを含めることができ
# <modulepath>/site/manifests/app_dependencies.pp
class site::app_dependencies {
# Make all package resources in this class default to
# being managed as installed on the node
Package { ensure => installed }
# Now manage the dependencies
package { 'php': }
package { 'solr': }
package { 'beanstalk': }
# The beanstalk worker queue service needs to be running
service { 'beanstalkd':
ensure => running,
require => Package['beanstalk'],
}
}
:このクラスの例のようなものかもしれません。これは、通常、Webインターフェイスを使用している場合、site.pp
ファイルまたはパペットダッシュボードで発生します。
# $(puppet config print confdir)/manifests/site.pp
node www01 {
include site::app_dependencies
}
次に、システム上でアプリケーションの複数のインスタンスを宣言する方法が必要です。残念ながら、Webインターフェイスからこれを簡単に行う方法はありませんが、Puppetマニフェストと定義済みのリソースタイプを使用することは可能です。このソリューションでは、vcsrepo
リソースを使用して、アプリケーションのgitリポジトリのチェックアウトを管理します。
この定義されたリソースタイプでは
# <modulepath>/myapp/manifests/instance.pp
define myapp::instance($git_rev='master') {
# Resource defaults. The owner and group might be the web
# service account instead of the root account.
File {
owner => 0,
group => 0,
mode => 0644,
}
# Create a directory for the app. The resource title will be copied
# into the $name variable when this resource is declared in Puppet
file { "/var/lib/myapp/${name}":
ensure => directory
}
# Check out the GIT repository at a specific version
vcsrepo { "/var/lib/myapp/${name}/working_copy":
ensure => present,
provider => git,
source => 'git://github.com/puppetlabs/facter.git',
revision => $git_rev,
}
}
、あなたがそうのようなアプリケーションの複数のインストールを宣言することができます。
# $(puppet config print confdir)/manifests/site.pp
node www01 {
include site::app_dependencies
# Our app instances always need their dependencies to be managed first.
Myapp::Instance { require => Class['site::app_dependencies'] }
# Multiple instances of the application
myapp::instance { 'jeff.acme.com': git_rev => 'tags/1.0.0' }
myapp::instance { 'josh.acme.com': git_rev => 'tags/1.0.2' }
myapp::instance { 'luke.acme.com': git_rev => 'tags/1.1.0' }
myapp::instance { 'teyo.acme.com': git_rev => 'master' }
}
は残念ながら、この情報が表示されるようにボックスの邪魔に使いやすいが、現在存在しませんWeb GUIから。しかし、外部ノードクラシファイアAPIを使用することは確かに可能です。人形に外部データを引っ張っての詳細については、これらのリソースを参照してください。
は、この情報がお役に立てば幸いです。
私は非常に似たようなことをしようとしていますが、ファクトリパターンインターフェイスを使用していますが、インスタンス間で共有されているディレクトリを扱う時間がとてもあります。@ http://serverfault.com/questions/ 442520/puppet-possible-to-use-software-design-in-modules –