2015-04-02 56 views
1

我正在學習Puppet,我對整個範例的最大挫折是我用來構建功能性Puppet代碼的try/run/fix開發過程。我的背景是在Java中,我很自然地用於調試我的代碼來查找錯誤,而不是運行程序來查看它在哪裏炸彈使開發更快,但我似乎無法找到一種方法來使用Puppet和Eclipse 。我知道爲Puppet編寫調試器需要一定的創造力,但我認爲這是社區可以從中受益的東西。爲什麼我不能調試我的木偶代碼?

我已經編寫了調試器,並且知道Eclipse SDK,但不幸的是,它並沒有乾淨地映射到Puppet體系結構,這有點尷尬,因爲它的運行時棧和執行流不會以自然順序發生,運行時需要目標機器應用更改。

我很好奇,如果社區做了任何開發工作,試圖創建某種類型的代碼可以跨步的調試器。爲了寫這篇文章,我認爲使用新的Puppet調試配置類型來擴展Eclipse是有意義的,在該類型中指定目標沙箱主機來測試代碼以及​​要調試的工作區中的puppet項目(利用現有的Gepetto工具)。然後,當您啓動新的Puppet調試會話時,Eclipse可以連接到遠程主機,執行puppet apply以及一些額外的調試參數,並以某種方式從運行時提供關於當前正在執行哪行代碼的反饋。

這仍然可能是尷尬的,但會允許木偶開發人員快速看到像噢噢..我不能創建此目錄,因爲父路徑不存在,請等待...爲什麼這是如果陳述不會去這裏就像我計劃的那樣,哦,我在這裏看到Puppet在單引號或雙引號中不是很清楚,或者現在我明白爲什麼這個失敗是因爲這個類沒有被第一個執行等等。等等。

相反,我們得到的只是一個很大的醜陋輸出在代理控制檯上,是的,可以給我們洞察錯誤,但不會乾淨地將異常映射到我們的代碼中,在我看來,它顯示了Puppet潛在的痛苦和弱點,你至少能給我一個堆棧跟蹤和行號,所以我知道在哪裏看?不,謝謝。

不要誤解我的意思,我喜歡Puppet如何讓我在整個工作週期間看起來非常高效,當時我正在運行的Puppet適用於新機器,這是我的經理尚未想出來的,但我認爲木偶真的很有用,這種缺乏調試支持是需要解決的。

有沒有其他人感受到這種痛苦? - 鄧肯克雷布斯

回答

1

這將是不可能的「穿越」木偶代碼,除非你想調試的ruby代碼庫本身。這不僅僅是「執行」的順序不清楚,它的表現本身也不會在一次執行。實際上,它們在執行過程中分多個階段進行評估

雖然有方法可以簡化查找問題。最大的一個是使用rspec-puppet編寫單元測試。它可以讓你從本質上測試puppet的編譯階段,幫助你發現錯誤,如循環依賴,錯誤的條件邏輯等。

1

有一個叫做puppet-debugger的新工具,它允許你在你的puppet代碼中設置斷點爲了貫穿它。所以這已經不再是「不可能的」,因爲它已經有8個月的時間了。

首先您需要安裝木偶調試寶石 https://github.com/nwops/puppet-debugger

然後安裝調試模塊,它包含在你的燈具或只是確保它在你的模塊路徑。

https://forge.puppet.com/nwops/debug

然後使用調試::歇()函數只是設置代碼中的斷點。

Ruby Version: 2.0.0 
Puppet Version: 4.9.4 
Puppet Debugger Version: 0.6.0 
Created by: NWOps 
Type "exit", "functions", "vars", "krt", "whereami", "facts", "resources", "classes", 
    "play", "classification", "types", "datatypes", "reset", or "help" for more information. 

>> $vars = ['one', 'two', 'three'] 
=> [ 
    [0] "one", 
    [1] "two", 
    [2] "three" 
] 
>> $vars.each | String $var | { 
    debug::break() 
    notify{$var:} 
} 
From file: puppet_debugger_input20170417-97123-qjwbaj.pp 
     1: $vars.each | String $var | { 
     => 2: debug::break() 
     3: notify{$var:} 
     4: } 
1:>> $var 
=> "one" 
2:>> exit 
From file: puppet_debugger_input20170417-97123-qjwbaj.pp 
     1: $vars.each | String $var | { 
     => 2: debug::break() 
     3: notify{$var:} 
     4: } 
1:>> $var 
=> "two" 
2:>> exit 
From file: puppet_debugger_input20170417-97123-qjwbaj.pp 
     1: $vars.each | String $var | { 
     => 2: debug::break() 
     3: notify{$var:} 
     4: } 
1:>> $var 
=> "three" 
+0

謝謝,聽起來像它值得檢查! – 2017-05-03 04:08:45