मैं एक पूर्णकालिक डेवलपर हूं जो कठपुतली लैब पर कठपुतली पर काम कर रहा है। मैं प्रो पपेट के सह-लेखक भी हूं।
कठपुतली निश्चित रूप से आपके लक्ष्यों के लिए पर्याप्त है। कठपुतली का उपयोग करके इस समस्या को हल करने का एक तरीका यहां दिया गया है। सबसे पहले, मैं निर्भरता प्रबंधन को संबोधित करूंगा क्योंकि इन्हें केवल एक बार प्रबंधित किया जाना चाहिए, इस पर ध्यान दिए बिना कि आवेदन के कितने उदाहरण प्रबंधित किए जा रहे हैं। फिर, मैं पपेट और vcsrepo
संसाधन प्रकार में परिभाषित संसाधन प्रकार का उपयोग करके अपने ऐप के एकाधिक इंस्टॉलेशन को कैसे प्रबंधित करूं, इसका समाधान करूंगा।
सबसे पहले, एक ही ऐप के एकाधिक इंस्टॉलेशन को संभालने के लिए कठपुतली कोड के संगठन के संबंध में। आप जिन निर्भरताओं का उल्लेख करते हैं जैसे बीनस्टॉक, सोलर, और PHP एक्सटेंशन को कठपुतली कक्षा का उपयोग करके मॉडलिंग किया जाना चाहिए। इस वर्ग को कॉन्फ़िगरेशन कैटलॉग में केवल एक बार शामिल किया जाएगा, इस पर ध्यान दिए बिना कि नोड पर एप्लिकेशन की कितनी प्रतियां प्रबंधित की जाती हैं। इस वर्ग का एक उदाहरण हो सकता है कुछ की तरह:
# <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'],
}
}
अब आप एक कक्षा में अपने निर्भरता है, तो आप बस नोड्स जहां आपके आवेदन तैनात किया जाएगा पर इस वर्ग में शामिल कर सकते हैं। यह आमतौर पर site.pp
फ़ाइल में या कठपुतली डैशबोर्ड में होता है यदि आप वेब इंटरफ़ेस का उपयोग कर रहे हैं।
# $(puppet config print confdir)/manifests/site.pp
node www01 {
include site::app_dependencies
}
अगला, आपको सिस्टम पर एप्लिकेशन के कई उदाहरण घोषित करने का एक तरीका चाहिए। दुर्भाग्यवश, अभी वेब इंटरफ़ेस से ऐसा करने का कोई आसान तरीका नहीं है लेकिन कठपुतली प्रकट करने और परिभाषित संसाधन प्रकार का उपयोग करना संभव है। यह समाधान अनुप्रयोग के लिए गिट रिपॉजिटरी चेकआउट प्रबंधित करने के लिए vcsrepo
संसाधन का उपयोग करता है।
# <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' }
}
दुर्भाग्य से, वहाँ बॉक्स रास्ते से बाहर का उपयोग करने के लिए इस जानकारी का दृश्य बनाने के लिए वर्तमान में एक आसान नहीं है एक वेब जीयूआई से। हालांकि, बाहरी नोड क्लासिफायर एपीआई का उपयोग करना निश्चित रूप से करना संभव है। कठपुतली में बाह्य डेटा खींच के बारे में अधिक जानकारी के लिए इन संसाधनों को देखने के लिए कृपया:
आशा इस जानकारी में मदद करता है।
मैं फ़ैक्टरी पैटर्न इंटरफ़ेस का उपयोग करके कुछ बहुत ही समान करने की कोशिश कर रहा हूं, लेकिन मेरे पास एक हेलुवा समय है जो निर्देशिकाओं से निपटता है जो उदाहरणों में साझा किए जाते हैं, क्या आप मेरा प्रश्न @ http://serverfault.com/questions/ देख सकते हैं 442,520/कठपुतली संभव के लिए उपयोग-सॉफ्टवेयर डिजाइन पैटर्न में मॉड्यूल –