कैसे स्थापित करें: डेटादिर: पिपेट और वैग्रांत के साथ हिरा का उपयोग करते समय


10

मुझे पता है कि कैसे स्थापित करने के लिए करना चाहते हैं :datadir:में hiera.yamlकठपुतली और Vagrant साथ इष्टतम उपयोग के लिए। वर्तमान में मैं Ubuntu 13.10 पर Ubuntu 12.04 अतिथि कठपुतली 3.1.1 के साथ virtualbox 4.2 के साथ 1.5.0 योनि का उपयोग कर रहा हूं

मैं इस ब्लॉग पोस्ट, कठपुतली श्रेष्ठ आचरण: पर्यावरण विशिष्ट विन्यास के समान वातावरण स्थापित करने का प्रयास कर रहा हूं । विशेष रूप से, मेरे Vagrantfile में शामिल हैं:

  config.vm.define "servername" do |servername|
    servername.vm.box = "precise-puppet-3"
    servername.vm.network "private_network", ip: "192.168.213.2",
      virtualbox__intnet: "networkname"

    # Provision with puppet.
    servername.vm.provision :puppet do |puppet|
      puppet.hiera_config_path = "puppet/hiera.yaml"
      puppet.manifests_path = "puppet/manifests"
      puppet.module_path = "puppet/modules"
      puppet.manifest_file  = "servername.pp"
      puppet.facter = {
        "vagrant" => "1",
        "server" => "servername",
      }
    end
  end

मैं पुष्टि कर सकता हूं कि hiera_config_pathयह सही है, क्योंकि मुझे हटाने पर मुझे एक त्रुटि मिलती है hiera.yaml

puppet/hiera.yaml शामिल हैं:

---
:backends: yaml
:yaml:
  :datadir: "manifests/configuration"
:hierarchy:
  - "%{::clientcert}"
  - "%{::environment}"
  - "virtual_%{::is_virtual}"
  - common
:logger: console

और, आगे, puppet/manifests/configuration/common.yamlशामिल हैं:

---
myvar: "test"

कमांडलाइन से इसका परीक्षण:

$ hiera -c hiera.yaml myvar
test

अब तक सब ठीक है। हालाँकि, अगर मैं कठपुतली की घोषणा फ़ाइल के भीतर से यह परीक्षण करने की कोशिश करता हूं, तो चर नहीं मिल सकता है, और मुझे एक त्रुटि मिलती है। उदाहरण परीक्षण:

$myvariable = hiera(myvar)
notice("My variable is: ${myvar}")

त्रुटि यह है:

Error: Could not find data item myvar in any Hiera data file and no default supplied at...

यदि मैं अपनी मशीन के माध्यम से ssh करता हूं vagrant ssh, तो मैं देख सकता हूं कि Vagrant मेरी प्रकट निर्देशिका को / tmp / vag-कठपुतली -2 पर बढ़ा रहा है। यदि मैं hiera.yamlफ़ाइल को संपादित करता हूं , और :datadir:पूर्ण पथ के साथ प्रतिस्थापित करता /tmp/vagrant-puppet-2/manifests/configurationहूं, तो मेरा कठपुतली मैनिफेस्ट मेरे हिरे डेटा तक पहुंच सकता है। क्या मैं एक रिश्तेदार पथ के साथ ऐसा कर सकता हूं, हालांकि?

जवाबों:


9

मुझे अपने प्रश्न का दस्तावेजीकरण करते हुए समाधान मिल गया। परिवर्तन: डेटादिर: पढ़ने के लिए:

  :datadir: "%{settings::manifestdir}/configuration"

कठपुतली $ सेटिंग्स :: मेनिफ़ेस्टिर में प्रकट निर्देशिका को पथ प्रदान करेगी। मेनिफ़ेस्ट निर्देशिका के अंदर Hiera डेटा संग्रहीत करना उपयोगी है क्योंकि वैग्रंट अतिथि प्रणाली में कठपुतली चलाने से पहले स्पष्ट रूप से इस निर्देशिका को माउंट करेगा, और इस उद्देश्य के लिए आपके द्वारा चयनित अन्य निर्देशिकाएं उपलब्ध नहीं हो सकती हैं।


क्या इसका मतलब है कि मुझे 2 hiera.yamlफाइलें चाहिए, एक योनि के साथ उपयोग के लिए, और एक पपेट (उत्पादन में) के साथ उपयोग करने के लिए?
फेलिप अल्वारेज़

मेरे पास केवल एक hiera.yaml फ़ाइल थी। मैं अब इस सेटअप का उपयोग नहीं कर रहा हूं, लेकिन मेरा मानना ​​है कि इस उत्तर में तकनीक पपेट के हाल के संस्करणों में काम नहीं करती है। यदि आपको इससे परेशानी है, तो कृपया कुछ अन्य उत्तर देखें।
greg_1_anderson

2

hiera.yamlमैं निर्दिष्ट के साथ काम कर रहा हूँ :datadir: /etc/puppet/hieraऔर मैं स्थापित करने के साथ कोई किस्मत ने --yamldirनिर्दिष्ट अन्य उत्तर में से कुछ के रूप में विकल्प। हालाँकि, मुझे थोड़ी देर के बाद एहसास हुआ कि मैं अतिथि के नाम पर उस स्थान पर अपना हिरादेटा मैप कर सकता हूँ:

config.vm.synced_folder "../puppet/hiera", "/etc/puppet/hiera"

यह अच्छी तरह से काम करता है :-)


यह ठीक वही सेट अप था जो मेरे पास था। मैंने एक मैप्ड फ़ोल्डर बनाया config.vm.synced_folder("D:/branches/preprod/hieradata", "/etc/puppet/hieradata")और puppet.hiera_config_path = "D:/branches/preprod/hiera.yaml"कठपुतली विन्यास श्लोक में भी निर्दिष्ट किया।
फेलिप अल्वारेज़

1

यह मैं अपने कठपुतली प्रयोगों में कर रहा हूं।

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "puppetlabs/debian-7.8-64-puppet" # source box on atlas
  config.vm.hostname = "wheezybox"                  # hostname of box

  # Include Hiera Data Directory (no automatic option for this)
  config.vm.synced_folder "../../hieradata", "/tmp/vagrant-puppet/hieradata"

  # Puppet Configuration
  config.vm.provision :puppet do |puppet|
    puppet.manifests_path    = "../../manifests/"
    puppet.manifest_file     = "site.pp"
    puppet.module_path       = ["../../modules/"]    # shared modules
    puppet.hiera_config_path = "../../hiera.yaml"    # hiera config file
    puppet.working_directory = "/tmp/vagrant-puppet" # default hiera path
    puppet.options           = "--verbose --debug"
  end
end

मेरा न्यूनतावादी hiera.yaml इस तरह दिखता है:

---
:backends:
  - yaml
:yaml:
  :datadir: "hieradata"
:hierarchy:
  - "node/%{::hostname}"

और उदाहरण के प्रयोजनों के लिए, होस्ट पर मेरी निर्देशिका संरचना (मैकबुक) इस तरह दिखती है:

    .
    ├── hiera.yaml
    ├── hieradata
    │   └── node
    │       ├── centos6box.yaml
    │       ├── precisebox.yaml
    │       └── wheezybox.yaml
    ├── manifests
    │   └── site.pp
    ├── modules -> ../puppet-common/modules/
    └── vagrants
        ├── README.md
        ├── centos6
        │   └── Vagrantfile
        ├── precise
        │   └── Vagrantfile
        └── wheezy
            └── Vagrantfile

0

आपका मूल मुद्दा था / है कि :datadirएक निरपेक्ष मार्ग होने की जरूरत है। Hiera आपको इसके लिए सापेक्ष पथ निर्दिष्ट करने की अनुमति नहीं देता है :datadir। यदि आपको लगता है कि इसकी अनुमति दी जानी चाहिए, तो कृपया इसे बदलने का अनुरोध सबमिट करें

घोषणापत्र पदावनत है । आप इसके बजाय याम्लदिर का उपयोग करना पसंद कर सकते हैं । जब आप कठपुतली लागू करते हैं तो आप उस सेटिंग को ओवरराइड कर सकते हैं।

योनि के लिए:

 servername.vm.provision :puppet, :options => ["--yamldir some/absolute/path"]  do |puppet|
  puppet.hiera_config_path = "puppet/hiera.yaml"
  puppet.manifests_path = "puppet/manifests"
  puppet.module_path = "puppet/modules"
  puppet.manifest_file  = "servername.pp"
  puppet.facter = {
    "vagrant" => "1",
    "server" => "servername",
  }
end

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

config.vm.synced_folder "puppet/manifests/configuration", "/hieradata"

और फिर ऊपर की पहली पंक्ति बदलें:

servername.vm.provision :puppet, :options => ["--yamldir /hieradata"]  do |puppet|

--Yamldir के संदर्भ के लिए धन्यवाद; यह बहुत मददगार है। हालाँकि, समस्या यह है कि मुझे एक सापेक्ष पथ का उपयोग करने की आवश्यकता है। यदि मैं एक निरपेक्ष मार्ग में रखता हूं, तो मुझे ["--yamldir / tmp / vag-कठपुतली -2 / मैनिफ़ेस्ट / कॉन्फ़िगरेशन"] का उपयोग करना होगा; हालाँकि, मुझे विश्वास नहीं हो रहा है कि / tmp / vag-कठपुतली -2 एक स्थिर पथ होने वाला है। क्या कोई वैराग्य है जिसे मैं वैग्रांटफाइल में संदर्भित कर सकता हूं जिसमें यह पथ है? या क्या मैं कुछ वैरिएबल सेट कर सकता / सकती हूं कि / tmp / vag-कठपुतली -2 के बजाय किस पथ का उपयोग करें? वैग्रांत किन रास्तों का इस्तेमाल करेगा इसके बारे में धारणा बनाने से दूर हो जाता है।
greg_1_anderson

@ greg_1_anderson आप अपनी स्वयं की निर्देशिकाएं सेट कर सकते हैं, इस तरह आप निर्देशिका के बारे में स्पष्ट हैं और योनि पर धारणा नहीं बना रहे हैं। config.vm.synced_folder "puppet/manifests/configuration", "/hieradata"
ferventcoder

उत्तर अपडेट किया गया। इसके अलावा अगर आपको लगता है कि रिश्तेदार मार्ग मददगार होगा, तो कृपया टिकट पर टिकट बनाएं। puppetlabs.com/browse/HI - धन्यवाद!
ferventcoder

कठपुतली दौड़ते समय हिरा डेटादिर विन्यास के लिए सापेक्ष पथ की अनुमति देता है puppet apply। डेटादिर उस वर्तमान डायर के सापेक्ष होगा जहां पपेट को चलाया गया था।
नाथन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.