我需要使用puppet爲一堆Ubuntu主機添加apt存儲庫密鑰。使用puppet在Ubuntu下添加回購密鑰
會這樣的聲明工作嗎?
exec {"add apt key for elastic":
command => "/usr/bin/curl https://packages.elasticsearch.org/GPG-KEY-elasticsearch | /usr/bin/apt-key add -",
}
感謝
我需要使用puppet爲一堆Ubuntu主機添加apt存儲庫密鑰。使用puppet在Ubuntu下添加回購密鑰
會這樣的聲明工作嗎?
exec {"add apt key for elastic":
command => "/usr/bin/curl https://packages.elasticsearch.org/GPG-KEY-elasticsearch | /usr/bin/apt-key add -",
}
感謝
是的,這應該工作,但每當你重新運行木偶這也將應用相同的配置。
在EXEC資源的任何命令必須能夠多次運行,不會造成危害 - 也就是說,它必須是冪等。執行者有三種主要方式是冪等的:
- 該命令本身已經是冪等的。 (例如,apt-get update。)
- exec有一個唯一標識符,除非或創建屬性,這會阻止Puppet運行該命令,除非滿足某些條件。
- exec有refreshonly => true,它只允許Puppet在其他資源發生更改時運行該命令。 (見下面刷新記錄。)
我嘗試只用高管,如果我真的不得不這樣做。其中一個原因是您必須對exec進行編碼,以便只在需要時才運行。相反,您可以使用apt模塊。這隻會將密鑰放置在主機上,如果它不存在。該資源是在傀儡控制下,因此不會在後續運行中添加:
include apt
apt::key { 'elasticsearch':
id => '46095ACC8548582C1A2699A9D27D666CD88E42B4',
options => 'https://packages.elasticsearch.org/GPG-KEY-elasticsearch',
}
非常感謝!我怎樣才能讓exec命令每個主機只運行一次?謝謝 – bluethundr
@bluethundr你應該實現一個表達式來驗證這個鍵是否已經被添加了。如果你的表達式返回'0'或者'true',如果一個鍵被添加了,你應該使用'unless',否則你應該使用'onlyif'。查看[doc]中的示例(http://docs.puppetlabs.com/puppet/latest/reference/type.html#exec)。 –