2015-04-24 25 views
1

我正在使用puppet生成我的named.conf.options文件,爲了做到這一點,我希望它使用定義的轉發器在/etc/resolv.conf中。做這件事的最好方法是什麼,我一直這樣做(其中named.conf.options.erb包含在內) - 但這種情況經常發生。從文件/etc/resolv.conf中讀取並填充到named.conf.options中

file { '/etc/bind/named.conf.options': 
    ensure => present, 
    content => template('my_template_location/named.conf.options.erb'), 
    replace => true, 
} 
-> 
exec { "add_nameserver": 
    command => '/bin/sed -i "s/<name_server>/$(grep nameserver/etc/resolv.conf | tr -d [a-z])/g" /etc/bind/named.conf.options', 
} 

回答

2

一個exec將永遠運行,除非它有限制它的東西。有許多參數可以設置。

就你而言,這聽起來像你希望exec只在你的文件改變時運行。你可能想在你的exec上使用refreshonly參數。

首先,將require箭頭更改爲通知箭頭,從->~>。這會導致puppet在文件更改時刷新exec。

其次,將refreshonly => true添加到您的exec。這會導致exec僅在被其他資源刷新時才運行。

你會用下列最終:

file { '/etc/bind/named.conf.options': 
    ensure => present, 
    content => template('my_template_location/named.conf.options.erb'), 
    replace => true, 
} 
~> 
exec { "add_nameserver": 
    command  => '/bin/sed -i "s/<name_server>/$(grep nameserver/etc/resolv.conf | tr -d [a-z])/g" /etc/bind/named.conf.options', 
    refreshonly => true, 
} 

您可以檢查出一些其他的方式來限制對Puppet Type Reference Page一個exec。

+0

酷,這看起來很完美 - 非常感謝您的幫助,不知道爲什麼我還沒有得到全面使用refreshonly然而;但通過你發佈的鏈接閱讀,這表明這將是理想的。 – user3229731

1

因爲您使用兩個不同的聲明修改相同資源(文件/etc/bind/named.conf.options),所以無法以此方式獲取所需狀態。

通常,您必須避免使用Puppet中的exec資源,因爲執行「老派」命令時難以保持狀態和冪等。

因此,獲得所需行爲的最佳方式是創建一個自定義事實[1],將您的名稱服務器公開給任何資源,然後將其包含在您的ERB模板中。

Facter.add(:nameservers_array) do 
    setcode do 
    nameservers = Facter::Core::Execution.exec('grep nameserver/etc/resolv.conf | tr -d [a-z]') 
    nameservers_array = nameservers.split(" ") 
    nameservers_array 
    end 
end 

您這裏有另外一個例子:https://www.jethrocarr.com/2013/11/05/exposing-name-servers-with-puppet-facts/

[1] https://docs.puppetlabs.com/facter/latest/fact_overview.html

+0

我不那麼熱衷於這樣做,因爲我想避免自定義事實並保持基本。我最終移動了文件,然後替換它並將sed exec設置爲refreshon(如上所述),這很有效,可能有點複雜;但它消除了對自定義事實的需要。 – user3229731

+1

好的,但是你需要放置'replace => false',否則你的改變將被文件資源恢復。 – huevo5050

+0

啊,我明白你在說什麼,是啊,這是我最終做到的,謝謝:D – user3229731

相關問題