我正在学习Puppet,而我对整个范例的最大挫折是我用来构建功能性Puppet代码的try / run / fix开发过程。我的背景是Java,我自然会用来调试我的代码来查找错误,而不是仅仅运行程序来查看炸弹在哪里制造开发的速度要快得多,但我似乎找不到办法来做到这一点使用Puppet和Eclipse。我知道为Puppet编写一个调试器需要一些创造性,但我认为这是社区可以真正受益的东西。
我已经编写了调试器并了解了Eclipse SDK,但遗憾的是它没有完全映射到Puppet体系结构,这在某种意义上有点尴尬,因为它的运行时堆栈和执行流程不是按自然顺序发生的,也不是事实上,运行时需要目标机器来应用更改。
我很好奇社区是否已经在尝试创建某种调试器的任何开发工作,其中代码可以步进。为了编写本文,我认为使用新的Puppet调试配置类型扩展Eclipse是有意义的,您可以在其中指定目标沙箱主机来测试代码以及要调试的工作区中的木偶项目(利用现有的Gepetto工具)。然后,当您启动一个新的Puppet调试会话时,Eclipse可以连接到远程主机,执行puppet apply以及一些额外的调试参数,并以某种方式提供运行时关于当前正在执行的代码行的反馈。
这仍然可能很尴尬,但是会让木偶开发者快速看到像我这样的东西..我无法创建这个目录,因为父路径不存在,等等......为什么这个if语句没有去就像我计划的那样,哦,我在这里看到Puppet在单引号或双引号上不是很清楚,或者现在我知道为什么这会失败,因为这个类没有先执行等等。
相反,我们得到的只是代理控制台上的一个很难看的输出,是的,它可以让我们对错误有所了解,但是并没有干净地将异常映射到我们的代码中,在我的视图中显示了Puppet潜在的痛苦和弱点,至少你能否给我一个堆栈跟踪和行号,所以我知道在哪里看?不,谢谢。
不要误会我的意思,我喜欢Puppet在整个工作周期间如何让我看起来非常高效,当时我所做的就是运行Puppet应用于我的经理尚未想到的新机器我认为Puppet非常有用,缺乏调试支持是需要解决的问题。
有没有人感到这种痛苦? - 邓肯克雷布斯
答案 0 :(得分:1)
不可能逐步完成" puppet代码,除非你想针对ruby代码库本身进行调试。不仅仅是执行的顺序"目前尚不清楚,它的表现本身从未被一次性执行过。它们实际上在整个执行过程中分多个阶段进行评估。
虽然有很多方法可以简化问题。最大的一个是使用rspec-puppet编写单元测试。它允许你基本上测试puppet的编译阶段,帮助你捕获循环依赖,错误的条件逻辑等错误。
答案 1 :(得分:1)
有一个名为puppet-debugger的新工具,它允许您在puppet代码中设置断点以便逐步执行。所以这不再是“不可能的”#34;因为它可以使用大约8个月。
首先需要安装puppet-debugger gem https://github.com/nwops/puppet-debugger
然后安装调试模块,将其包含在灯具中或确保它位于模块路径中。
https://forge.puppet.com/nwops/debug
然后使用debug :: break()函数在代码中设置断点。
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"