2015-04-02 78 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

相关问题