Linux

使用 puppet 將現有使用者添加到組

  • March 30, 2020

是否可以使用 puppet 2.7.18 將現有使用者添加到組中?

我們有兩個模組,每個模組定義一個類:

  • 模組“user”創建所有使用者,包括使用者 foo 和使用者 bar。
  • 模組“subversion”處理各種 conf 文件並創建組 svn。

我們想將使用者 foo 添加到模組“subversion”中的組 svn。

我已經嘗試了現有功能請求中描述的成員資格參數:

group {
"svn":
   ensure  => present,
   gid     => xxxxx;
}
user {
"foo":
   group      => ["svn"],
   membership => minimum;
}

但我收到以下錯誤:

錯誤:無法從遠端伺服器檢索目錄:伺服器上的錯誤 400:重複聲明:使用者

$$ foo $$已在文件 /pathto/modules/subversion/manifests/init.pp 的第 xx 行聲明;無法在節點 myserver.example.com 上的 /pathto/modules/users/manifests/init.pp:xxx 重新聲明

這個功能已經實現了嗎?如果沒有,有沒有好的解決方法?

如果您將使用者聲明為虛擬資源,則可以使用“實現”或集合語法(使用者 <| … |>)。這是一個例子:

@user { 'foo':
 groups     =&gt; ['somegroup'],
 membership =&gt; minimum,
}

然後使用 then 集合語法實現該虛擬使用者:

User &lt;| title == foo |&gt;

在其他地方,您可以使用 plusignment 添加到該虛擬資源的參數:

User &lt;| title == foo |&gt; { groups +&gt; "svn" }

使用 Puppet 虛擬資源是正確的方法 - 但如果您無法更改使用者定義並同時需要解決方法,則以下內容是可怕的和 hacky,但會起作用:

exec { 'foo somegroup membership':
 unless  =&gt; '/bin/grep -q "somegroup\\S*foo" /etc/group',
 command =&gt; '/sbin/usermod -aG somegroup foo',
 require =&gt; User['foo'],
}

本質上,我們只是檢查 somegroup 是否包含使用者 foo…如果沒有,則使用普通的 usermod 命令將其添加到 foo 所屬的現有組之外。

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