有條件的木偶使用者創建
如何創建具有相同 UID 的使用者(僅當它不存在時)而不影響具有相同使用者和隨機 UID 的伺服器。提供更多見解: 1. 在具有相同 UID 的伺服器群中維護一個使用者“user1” 2. 相當多的伺服器具有具有隨機 UID 的相同使用者。在這種情況下,木偶類不應該做任何事情
user { 'user1': ensure => present, comment => 'Appp user', uid => 55555, onlyif => <if the user1 is not present> ---> I know there is no attribute called onlyif in 'user' gid => 55555, home => '/home/user1', shell => '/bin/bash', }
任何幫助表示讚賞。
為了執行您所描述的操作,您需要一個自定義 Fact來檢查 user1 的存在並根據該系統上的狀態有條件地執行某些操作。
也許您根據 user1 的存在參數化 UID。如果已經有user1,就不要管理uid。
$user1_uid = $::user1 ? { true => undef, default => 55555, } user { 'user1': ensure => present, comment => 'Appp user', uid => $user1_uid, gid => 55555, home => '/home/user1', shell => '/bin/bash', }
或者,更糟糕的是,使用 shell 腳本將您的使用者創建包裝在Exec 資源中。
這兩個都不是最好的選擇,但考慮到你的要求,這是你可以做的。就個人而言,我會研究如何在不一致的系統上遷移 user1 的 UID。這可能更像是一項前期工作,但隨著時間的推移應該會有所回報。
編輯:
我根據您的評論執行了一個場景並驗證了我的擔憂。Puppet 函式由 Puppetserver 執行。所以,你寫的條件不依賴於客戶端上user1的狀態,而是依賴於master。
我首先將 user1 添加到 Puppet 客戶端系統。然後,我獲取了您的程式碼並創建了一個文件 user1.pp。
$user_id = inline_template("<%= `/usr/bin/getent passwd user1` %>") if ("$user_id" == "") { user { 'user1': ensure => present, comment => 'App user', uid => 61234, gid => 61234, home => '/home/user1', shell => '/bin/bash', } } else { notify { "The group is already present. Skipping..": } }
當我用 執行這個文件時
puppet apply
,當使用者已經存在時,我得到了預期的結果,因為裡面的命令inline_template()
是在本地執行的。(如果使用者存在於 Puppetserver 主機上,結果相同。)[root@localhost ~]# puppet apply /root/user1.pp ... Notice: The group is already present. Skipping.. Notice: /Stage[main]/Main/Notify[The group is already present. Skipping..]/message: defined 'message' as 'The group is already present. Skipping..' Notice: Applied catalog in 0.15 seconds
當我將程式碼放在我的 Puppetserver 上並執行 puppet 代理時,它會嘗試修改現有使用者。您已將此描述為不希望的結果。
[root@localhost ~]# puppet agent -t ... Notice: /Stage[main]/User[user1]/uid: uid changed 1000 to 61234 Error: Could not find group(s) 61234 Error: /Stage[main]/User[user1]/gid: change from 1000 to 61234 failed: Could not find group(s) 61234 Notice: /Stage[main]/User[user1]/comment: comment changed '' to 'App user' ...
如果使用者存在於Puppetserver上但不存在於客戶端,則不會添加該使用者,因為
getent
函式在Puppetserver上返回成功。[root@localhost ~]# id user1 id: user1: no such user [root@localhost ~]# puppet agent -t ... Notice: The group is already present. Skipping.. Notice: /Stage[main]/Notify[The group is already present. Skipping..]/message: defined 'message' as 'The group is already present. Skipping..' Notice: Applied catalog in 19.73 seconds
恐怕您需要重新考慮您的解決方案才能獲得所需的結果。如果您執行您的解決方案,您可能會意外更改 UID。