Tôi là nhà phát triển toàn thời gian làm việc trên Puppet tại Puppet Labs. Tôi cũng là đồng tác giả của Pro Puppet.
Rối chắc chắn là đủ cho mục tiêu của bạn. Đây là một cách để giải quyết vấn đề này bằng cách sử dụng Puppet. Trước tiên, tôi sẽ giải quyết việc quản lý phụ thuộc vì chúng chỉ nên được quản lý một lần bất kể có bao nhiêu phiên bản của ứng dụng đang được quản lý. Sau đó, tôi sẽ giải quyết cách xử lý nhiều cài đặt ứng dụng của bạn bằng cách sử dụng một loại tài nguyên được xác định trong Múa rối và loại tài nguyên vcsrepo
.
Đầu tiên, liên quan đến việc tổ chức mã con rối để xử lý nhiều cài đặt của cùng một ứng dụng. Các phụ thuộc mà bạn đề cập đến như beanstalkd, solr và các phần mở rộng PHP nên được mô hình hóa bằng cách sử dụng một lớp Múa rối. Lớp này sẽ được bao gồm trong danh mục cấu hình chỉ một lần, bất kể có bao nhiêu bản sao của ứng dụng được quản lý trên nút. Ví dụ về lớp học này có thể giống như sau:
# <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'],
}
}
Bây giờ bạn có phụ thuộc vào lớp học, bạn có thể chỉ cần đưa lớp này vào nơi ứng dụng của bạn sẽ được triển khai. Điều này thường xảy ra trong tệp site.pp
hoặc trong Trang tổng quan con rối nếu bạn đang sử dụng giao diện web.
# $(puppet config print confdir)/manifests/site.pp
node www01 {
include site::app_dependencies
}
Tiếp theo, bạn cần một cách để khai báo nhiều phiên bản của ứng dụng trên hệ thống. Thật không may, không có cách nào dễ dàng để thực hiện việc này từ giao diện web ngay bây giờ nhưng có thể sử dụng tệp kê khai Rối và loại tài nguyên được xác định. Giải pháp này sử dụng tài nguyên vcsrepo
để quản lý thanh toán kho git cho ứng dụng.
# <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,
}
}
Với điều này định nghĩa loại tài nguyên, bạn có thể khai báo nhiều bản cài đặt của ứng dụng của bạn như sau:
# $(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' }
}
Thật không may, không có hiện một cách dễ dàng để sử dụng ra khỏi con đường hộp để làm cho thông tin này có thể nhìn thấy từ một giao diện web. Nó chắc chắn có thể làm, tuy nhiên, bằng cách sử dụng API phân loại nút bên ngoài. Để biết thêm thông tin về kéo dữ liệu bên ngoài vào Múa rối hãy xem các nguồn lực:
Hope thông tin này giúp.
Tôi đang cố gắng làm một cái gì đó rất giống nhau, sử dụng một giao diện mẫu nhà máy nhưng tôi đang có một thời gian helluva đối phó với các thư mục được chia sẻ trên các trường hợp, bạn có thể kiểm tra câu hỏi của tôi @ http://serverfault.com/questions/ 442520/con rối-có thể-để-sử dụng-phần mềm-thiết kế-mô-đun-trong-mô-đun –