為什麼 Puppet 會切換環境然後再切換回來?

為什麼 Puppet 會切換環境然後再切換回來?

這是 Puppet 5.5.22 和 Foreman 1.22.0-develop 的情況。我知道這是一個過時的 Foreman 和 Puppet 安裝,但在我用新版本取代它們(即將推出的項目)之前,它們是我必須處理的。

# puppet agent -tv
Notice: Local environment: 'production' doesn't match server specified node environment 'development', switching agent to 'development'.
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Retrieving locales
Info: Loading facts
Notice: Local environment: 'development' doesn't match server specified environment 'test', restarting agent run with environment 'test'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Retrieving locales
Info: Loading facts
Info: Caching catalog for servername.example.com
Info: Applying configuration version '1694623566'
Notice: Applied catalog in 12.93 seconds

據我了解,原始本地環境「生產」可以來自 /etc/puppet/puppet.conf,或者如果該檔案中未指定環境,則為預設環境。在本例中是後者(本地未指定環境)。

節點環境「開發」是在 Foreman 中為此主機設定的(ENC 或此 Puppet 安裝的外部節點分類器),並且是所需的正確環境分配。

「測試」環境是 Foreman 目前為我們所有主機廣泛設定的環境,也是我透過 Foreman UI 將其變更為「開發」之前該特定主機所在的環境。 (換句話說,「測試」實際上是我們的生產環境;名為「生產」的環境此時尚未使用。)

我嘗試查閱 Foreman 文檔,但沒有找到任何有關環境分配工作原理的資訊;該文件只是瀏覽一下 UI,這對故障排除沒有幫助。


可能相關的是,這裡還有另一個奇怪的地方,即 servername.example.com 出現兩次在 Foreman 的 UI 中。

力量 姓名 作業系統 木偶環境 模型 主持人組 上次報告 行動
[旋轉的輪子] 伺服器名稱 Debian [版本] 發展 [刀鋒伺服器名稱] 主機群組名 [空白的] [編輯按鈕]
[電源圖標,灰色] 伺服器名稱 Debian [版本] 測試 標準PC [版本資訊] [空白的] 6 分鐘前 [編輯按鈕]

如果我嘗試透過點擊“編輯”按鈕來編輯任一條目的環境,那麼當我點擊“提交”時,我會在“名稱”欄位旁邊以紅色顯示“已被採用”,就像我試圖建立一樣一個新的主機條目。

但是,如果我從清單檢視中選擇左側帶有複選框的主機,然後轉到頂部並選擇“選擇操作”->“更改環境”,那麼它出現上班。這兩個條目都會在 UI 中顯示「開發」。但在 servername 上運行的下一個 Puppet 將產生本文頂部所示的輸出,然後刷新 Foreman UI 將再次顯示一個帶有“development”的條目和一個帶有“test”的條目。

可能是什麼原因造成的?如何將主機指派給環境並使其保留?

答案1

我解決了這個問題。

我們的Puppet 設定有一些特殊之處,因為在某處仍然存在一些揮之不去的Puppet 3 配置殘留- 不確定具體位置,但列表中的伺服器條目將自身恢復為“測試”,也將其Puppet Master 顯示為舊的傀儡伺服器。該 puppet 伺服器不再存在,但新的 foreman 伺服器也具有該名稱。有點複雜,我不完全理解兩個不同條目的來源,但我透過以下方式修復了抖動環境分配:

  1. 刪除 Foreman UI 中的兩個主機條目(確保仔細閱讀確認訊息並確保這不會刪除主機或磁碟,並且確認中僅列出兩個預期的主機條目)。
  2. 在puppet伺服器上(即透過命令列登入Foreman伺服器),執行puppet cert clean servername.example.com
  3. 在 servername.example.com 上,刪除目錄/var/lib/puppet/ssl/find /var/lib/puppet/ssl/ -delete儘管我使用過rm -rf /var/lib/puppet/ssl/也可以。)
  4. 在 servername.example.com 上,編輯/etc/puppet/puppet.conf要在標題environment = development下設定的檔案[agent]
  5. 在 servername.example.com 上重新運行 puppet,使用puppet agent -tv.

這正確地應用了開發環境中的程式碼,並且沒有任何關於不匹配環境的警告,並且 Foreman UI 現在僅顯示該伺服器的一個條目,並正確地將其環境聲明為development.

相關內容