2015-01-09 7 views
5

मैं एक YAML फ़ाइल में निम्नलिखित परिभाषा है देखने:परिसर hiera काम नहीं कर रहा

keepalived: 
    cluster_name: "cluster.example.lan" 
    cluster_ip: "192.168.1.10" 
    cluster_nic: "eth0" 
haproxy: 
    bind_address: %{hiera('keepalived::cluster_ip')} 

और एक परिणाम के bind_address में मैं कोई रिक्त स्ट्रिंग के रूप में मिल गया है।

यदि मैं %{hiera('keepalived')} का उपयोग करता हूं तो मुझे पूरा हैश मुद्रित किया गया है, लेकिन मुझे इस हैश से केवल cluster_ip की आवश्यकता है। मैं cluster_ip कैसे देख सकता हूं?

उत्तर

8

मुझे लगता है कि यह possible:

Hiera केवल चर जिनके मान तार हैं अंतर्वेशन सकते हैं नहीं है। (नंबर कठपुतली से भी तार के रूप में पारित कर रहे हैं और सुरक्षित रूप से इस्तेमाल किया जा सकता।) आप कठपुतली, सरणियों, हैश, संसाधन संदर्भों से नहीं चर जिनके मान बूलियन्स हैं, संख्या को जोड़ नहीं सकते हैं, या एक स्पष्ट undef मूल्य।

इसके अतिरिक्त, हिरा किसी भी सरणी या हैश के किसी व्यक्ति को तत्व को अलग नहीं कर सकता है, भले ही उस तत्व का मान एक स्ट्रिंग है।

तुम हमेशा एक चर के रूप में परिभाषित कर सकते हैं cluster_ip:

common::cluster_ip: "192.168.1.10" 

और की तुलना में इसका इस्तेमाल करते हैं:

keepalived: 
    cluster_name: "cluster.example.lan" 
    cluster_ip: "%{hiera('common::cluster_ip')}" 
    cluster_nic: "eth0" 

haproxy: 
    bind_address: "%{hiera('common::cluster_ip')}" 
3

Hiera उपयोग करता है। एक सरणी या हैश में उप-तत्वों को देखने के लिए स्ट्रिंग इंटरपोलेशन में। इस तरह देखने के लिए अपनी hiera कोड बदलें: एक सरणी के लिए

keepalived: 
    cluster_name: "cluster.example.lan" 
    cluster_ip: "192.168.1.10" 
    cluster_nic: "eth0" 
haproxy: 
    bind_address: %{hiera('keepalived.cluster_ip')} 

, आप सरणी सूचकांक (0 आधारित) के बजाय एक हैश कुंजी का उपयोग करें। के रूप में इस सवाल का जवाब में दिखाया गया

, interpolating hash or array elements

+0

के बाद से स्वीकार किए जाते हैं जवाब इस hiera के नवीनतम संस्करण में बदल गया है स्वीकार कर लिया गया और अब संभव है देखें। तो यह आपके हिरा के संस्करण पर निर्भर करता है! –

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