2015-09-23 41 views
1

在我的傀儡manifect我想用dirtree功能像如何處理Puppet中的依賴關係?

#don't know which syntax is right, but seems like both of them have no effect 
include AlexCline/dirtree 
include AlexCline_dirtree 

class sw_mage_deploy { 
    $deploy_folder = '/var/www/html' 

    file { dirtree($deploy_folder): 
     ensure => directory, 
     owner => 'root', 
     group => 'root', 
     mode => 755, 
    } 
} 

在我Modulefile我有

dependency 'AlexCline/dirtree', '>= 0.2.1' 

但我發現了一個錯誤:

==> default: Error: Unknown function dirtree at /tmp/vagrant-puppet/modules-bcfd 
1f8b7eed950360c8143b9e421347/sw_mage_deploy/manifests/init.pp:15 on node vagrant 
-vm 

嘗試this文章,但似乎是無關緊要的。因爲它涵蓋了類包含,我需要包含方法。

作爲一個側面的問題,我真的很感謝初學者的木偶教程的鏈接,因爲使用谷歌搜索並沒有真正的幫助,所有的文檔似乎都承認一些顯而易見的知識,我似乎錯過了最低限度的知識。

回答

2

注意我當然不是木偶大師,已經學習了幾個月,所以不能真正解決一個教程,可能不會使用最佳實踐。

對這個問題的第一部分:如何處理依賴於木偶

我知道有2種方法:

  1. 使用http://librarian-puppet.com(我真的不使用它mylself,所以我可能需要更正),它將管理來自Modulefile的依賴關係,有點像你描述的那樣。與流浪使用它,您需要安裝和(使用shell腳本)進行配置 - a plugin存在管理這個部分所以這肯定是一個不錯的選擇通過正常的'傀儡模塊看

  2. 目前,我管理依賴安裝'在shell腳本中。從Vagrant運行一個shell腳本,它將安裝所有模塊,puppet負責所有模塊依賴項(如果有的話),因爲它們是從單個模塊中聲明的。此類腳本的一個例子是

    #!/bin/bash 
    
    mkdir -p /etc/puppet/modules; 
    
    if [ ! -d /etc/puppet/modules/example42-perl ]; then 
        puppet module install example42-perl --version 2.0.20 
    fi 
    
    if [ ! -d /etc/puppet/modules/puppetlabs-apache ]; then 
        puppet module install puppetlabs-apache --version 1.5.0 
    fi 
    
    if [ ! -d /etc/puppet/modules/puppetlabs-java ]; then 
        puppet module install puppetlabs-java --version 1.4.1 
    fi 
    

對這個問題的第二部分:問題與使用髒功能

  • 安裝模塊與任何其他模塊puppet module install AlexCline-dirtree(如果你這樣做沒有木偶在你的主機上,使用你的虛擬機並複製/ home/vagrant /。木偶/模塊共享文件夾/流浪者/模塊)
  • 宣佈在Vagrantfile

    config.vm.provision :puppet do |puppet| 
        puppet.manifests_path = "puppet/manifests" 
        puppet.manifest_file = "base.pp" 
        puppet.module_path = "puppet/modules" 
        puppet.options = "--verbose --trace" 
    end 
    

以下,並確保你已經創建了puppet/manifests/base.pp文件和puppet/modules目錄與你有模塊安裝

  • 定義你的傀儡文件

    class sw_mage_deploy { 
    
        $deploy_folder = "/var/www/html" 
        $dirtree = dirtree($deploy_folder) 
    
    # file { ["$dirtree"] : 
    #  ensure => directory, 
    #  owner => "root", 
    #  group => "root", 
    #  mode => 755; 
    # } 
    
        ensure_resource('file', $dirtree, { 
         'ensure' => 'directory', 
         owner => "root", 
         group => "root", 
         mode => 755 
        }) 
    
    
    } 
    
    include sw_mage_deploy 
    

作爲$dirtree返回一個數組,你不能直接在文件塊使用(它會嘗試從您的陣列中的所有值連接爲一個單一的值),但使用ensure_resource function,可以將此用於陣列資源的

這是事實,如果你不申請一個變量,下面的工作

file { [ '/var/www', 
     '/var/www/html',]: 
      ensure => directory, 
      ... 

有可能是變量(這是一個數組)中使用這樣的結合方式,但我不知道如何。

+0

看起來像是沒有解決我的問題,我不想用手安裝依賴關係,我想讓puppet爲我安裝它們。或者那不是應該發生的事情,所有的依賴應該由我自己添加? –

+0

我們可以在這裏討論細節http://chat.stackoverflow.com/rooms/90452/puppet-dependency-issue –

1

include()函數不會做你認爲它的作用。這是爲了使目標節點的Puppet 類別包含在目錄中。它與你的清單中自定義函數的可用性沒有任何關係,儘管這些函數分佈在Puppet模塊中。

此外,爲什麼它的價值,既沒有您呈現的形式看起來應該工作。木偶也不應該接受,因爲可以包含具有任一指定名稱的類別是值得懷疑的。

您的清單中不需要任何特殊代碼即可使用自定義函數。你只需調用它。但是,該功能必須先安裝到Puppet中,這與安裝它所在的模塊不同(或者它在某些版本的Puppet中)。對於分佈在模塊中的函數,通常通過pluginsync完成,但這取決於puppet代理在puppetmaster服務器上運行。之後您可能需要重新啓動主設備。