2015-05-15 4 views
6

webserver कक्षा में केवल अपाचे शामिल है और इसमें कुछ कॉन्फ़िगरेशन सेट करता है (उदा। पोर्ट)। जाहिर है, मैं इस कॉन्फ़िगर को प्रत्येक नोड के लिए दोहराना नहीं चाहता, इसलिए मैंने इसे सामान्य में रखा। Yaml। हालांकि, मेरा आम.याम बड़ा हो रहा है, इसलिए मैं इसे विभाजित करना चाहता हूं। मैं एक फ़ाइल webserver भूमिका के लिए config युक्त करना चाहते हैं, एक और dbserver भूमिका आदि के लिए मैं अपने hiera.yaml कल्पना कर रहा हूँ कुछ इस तरह देखने के लिए:मैं अपनी हिरा कॉन्फ़िगरेशन को भूमिका से कैसे विभाजित कर सकता हूं? मैं hiera उपयोग कर रहा हूँ <code>webserver</code> या <code>dbserver</code> मेरी नोड्स की तरह कक्षाएं आवंटित करने के लिए

:hierarchy: 
    - "fqdn/%{::fqdn}" 
    - "role/%{ROLE}" 
    - common 

कहाँ role फ़ोल्डर होते हैं फ़ाइलों webserver.yaml, appserver.yaml, dbserver.yaml पसंद है। मैं कह समाधान एक कस्टम 'भूमिका' तथ्य यह है बनाने के लिए है, लेकिन उनमें से ज्यादातर एजेंट नोड (/etc/role से जैसे) पर एक फ़ाइल से उस तथ्य को लोड करके इस लक्ष्य को हासिल है कि विभिन्न ब्लॉग पोस्ट को देखा है, जो मेरे लिए हराने के लिए लगता है कठपुतली की बात (मैं विशेष रूप से कठपुतली उपयोग करती हैं इसलिए मैं प्रत्येक नोड में प्रवेश करें और कुछ config हर बार जब मैं यह कुछ नई भूमिका करना चाहते हैं बदलने के लिए नहीं है)।

स्पष्ट है कि, मैं इस पाने के लिए काम करने के लिए एजेंट पर फ़ाइलों को संपादित करने के लिए नहीं करना चाहते, मैं यह सब config मास्टर पर है का उपयोग किया चाहते हैं।

मैं मैं के बाद और विस्तृत रूप से पदानुक्रम में एक तत्व के रूप में हर भूमिका की सूची की तरह कुछ हो सकता था लगता है, लेकिन यह है कि प्रबंधनीय प्रतीत नहीं होता।

:hierarchy: 
    - "fqdn/%{::fqdn}" 
    - "webserver" 
    - "appserver" 
    - "dbserver" 
    - common 

क्या इसे हल करने का कोई तरीका है?

उत्तर

3

अपने हिरा कॉन्फ़िगरेशन में $Role का उपयोग करने में सक्षम होने के लिए, इसे एक तथ्य/चर के रूप में आपूर्ति करने की आवश्यकता है, हालांकि नोड पर बजाए मास्टर पर ऐसा करने का एक तरीका है। यह उन चीजों में से एक है जिनके लिए External Node Classifiers का उपयोग किया जा सकता है।

असल में, आपको एक स्क्रिप्ट लिखनी होगी जो नोड नाम लेता है और yaml प्रिंट करता है जिसमें Role पैरामीटर का मान शामिल है। उदाहरण के लिए, आपके पास एक yaml फ़ाइल हो सकती है जो कि नोड नामों का सिर्फ एक मानचित्र है, और फिर स्क्रिप्ट एक लुकअप करता है और परिणाम प्रिंट करता है (लिंक किए गए स्कीमा में पैरामीटर के रूप में)। यहां an example है।

यदि आप नई टूलींग में रुचि रखते हैं तो वहां अधिक मजबूत ईएनसी भी हैं। उदाहरण के लिए, Foreman आपको मेजबानों को समान भूमिकाओं में समूहित करने, कठपुतली रनों में इंजेक्ट करने के लिए पैरामीटर सेट करने आदि के लिए एक वेब इंटरफेस देता है।

1

मैं इसके लिए समाधान के साथ आया हूं। केवल नुकसान यह है कि भूमिकाओं की अधिकतम संख्या हार्डकोडेड है। यह hiera 3 के साथ बेहतर तब तक हो जाएगा कोशिश यह:

/etc/puppet/hiera.yaml

--- 
:backends: 
    - yaml 
:yaml: 
    :datadir: /etc/puppet/hieradata 
:hierarchy: 
    - 'nodes/%{::clientcert}' 
    - 'roles/%{::role_4}' 
    - 'roles/%{::role_3}' 
    - 'roles/%{::role_2}' 
    - 'roles/%{::role_1}' 
    - common 

/etc/puppet/manifests/site.pp

# Get roles 
$roles = hiera_array('roles', []) 

# Declare Roles in vars (not needed in puppet 4) 
$role_1 = $roles[0] 
$role_2 = $roles[1] 
$role_3 = $roles[2] 
$role_4 = $roles[3] 

# Include Classes 
hiera_include('classes') 

/आदि /puppet/hieradata/roles/webserver.yaml

--- 
classes: 
    - nginx 

# put nginx config here 

/etc/puppet/hieradata/nodes/your_node_name.yaml

--- 
roles: 
- webserver 

classes: 
# put node specific stuff here 
संबंधित मुद्दे

 संबंधित मुद्दे