一千萬個為什麽

搜索

確保使用ansible在XML文件中取消註釋行



我如何使用ansible確保在XML文件中取消註釋行?在 /etc/tomcat8/context.xml 中,我想確保該部分:

<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--

-->

改為:

<!-- Disable session persistence across Tomcat restarts -->

  • The lineinfile module doesn't appear to be able to help because this is a multi-line section

  • The xml module might be able to ensure that the is in place, but it doesn't appear to be able to delete the commented out version.

  • I could write a script to do this with sed if I have to, but I find it is better to use ansible modules when possible.

轉載註明原文: 確保使用ansible在XML文件中取消註釋行

一共有 1 個回答:

正如問題及其評論所述,這不是Ansible擅長的領域。 “最佳”解決方案取決於您正在處理的文件類型及其結構。

處理Ansible中這些變化的最簡潔的方法是 templatize 整個事情;這允許您一次查看整個文件,而不是將它們拼湊在一起,而且比基於模式或基於行的方法脆弱得多。當你需要在多個地方添加配置時(例如,不同的角色),動態加載指令變得非常有用,比如Apache httpd的 Include

Include /etc/httpd/conf.d/*.conf

然後這允許您從不同的地方寫入單獨的配置文件,並讓客戶端軟件連接它們。但是,據我所知,通過快速搜索,Tomcat不支持這一點,所以您需要使用單個模板文件進行操作。

lineinfile is a hacky solution that's very fragile, and template is almost always a better option. However, in this case, the node that you're adding is a self-closing one, so as long as it is top-level, it can go anywhere and lineinfile will work (I know you say it won't, but I'll get back to that). xml is a similar option that's a bit less fragile.

你排除了這兩個,因為他們無法刪除你在文件中的評論。但是,我認為這是一個不正確的要求(在大多數情況下,可能是你的)。

當使用配置管理工具時,真相的來源會從服務器上的文件本身轉移到簽入主服​​務器的配置。如果有人想編輯文件,他們將通過編輯配置管理腳本來完成,而不是直接在服務器上編輯文件。因此,在服務器上生成的文件中不需要註釋,除了頂部可能有一個表示“這是自動生成的,請轉而觀察源代碼管理”的註釋。註釋應該在模板代碼中使用 - 並且只要結果編譯並正常工作,您就不應該在乎它的外觀。