Linux

puppet 循環使用原始文件中的值創建使用者

  • January 9, 2013

我想用 puppet 創建郵箱。基本上,我只需要在新使用者到達時創建一個目錄。但是,使用者列表非常龐大,為每個使用者創建一個文件節是不可能的。我找到了一種使用此節傳遞數組的方法:

file { [ "user1", "user2", ... ]:
   ensure => directory,
   owner  => $user,
   group  => 'mail',
   mode   => 0660,
}

這有兩個問題:首先,無法從外部資源(例如,可能是 CSV 文件)中檢索使用者列表。其次,我看不到如何實例化所有者值。

我曾想過定義函式,但同樣的問題仍然存在。有人找到解決這個問題的方法了嗎?

定義的類型應該可以很好地解決owner.

define usermailbox {
 # creates dir /path/to/username:
 file { "/path/to/$title":
   ensure => directory,
   owner  => $title,
   group  => 'mail',
   mode   => 0660,
 }
}

要從外部源填充,Hiera是一個不錯的選擇 - 它在 3.0 之後集成在 Puppet 中,但如果您仍在使用 2.7,則需要在主系統上單獨安裝它。如果您打算使用它,您還可以考慮將其作為一種更靈活的方式來進行節點定義。

您將使用者列表放在哪裡取決於這是否需要僅應用於一個系統或多個.. 但是現在,假設我們希望它特定於該系統。

因此,在您的/etc/puppet/hiera.yaml(Hiera 如何查找數據的配置)中,您將擁有如下內容:

:backends:
 - yaml

:hierarchy:
 - %{::clientcert}
 - common

:yaml:
  :datadir: '/etc/puppet/hieradata'

對於node.example.com,它將查找文件/etc/puppet/hieradata/node.example.com.yaml(或common.yaml作為較低優先級,因此如果您希望此列表可用於多個伺服器的目錄,則可以使用它)。創建該文件,我們將為它提供 YAML 格式的使用者列表:

mailbox_users:
 - user1
 - user2
 - user3

然後,我們可以使用hiera呼叫來獲取該列表,將其作為變數拉入,並使用它為define列表中的每個使用者從上面設置一次。

usermailbox { hiera(mailbox_users): }

引用自:https://serverfault.com/questions/463969