如何在调试会话期间运行反应式超级按钮?

如何在调试会话期间运行反应式超级按钮?

我正在使用反应模式在 Python 中开发 juju charm。我的所有钩子都使用“基本”基础层提供的装饰器调用。在尝试部署 charm 时,我遇到了一个错误。为了解决错误,我使用了“juju debug-hooks”和“juju dhx -r”(dhx 调试插件),但我找不到使用 Python 按照反应模式运行 charm 代码的方法……据我了解,(例如,当使用 dhx 进行调试时)charm 执行将返回到导致错误的钩子之前的状态,并且开发人员将登录到远程调试会话。运行钩子是开发人员的责任。通常这些钩子位于 /hooks 目录下,只需执行它们即可运行。使用反应模式无法做到这一点,因为钩子没有入口点,但一切都只是对状态的反应级联……

如何在调试会话期间按照反应模式运行用 python 编写的 juju charm 代码?

答案1

我遇到了同样的问题,因为set_state('myservice.installed')即使我收到安装挂钩失败的错误,我的也会以某种方式被触发。我没有找到运行特定代码段的具体解决方案,但一个好的解决方法是更改​​通常会触发代码并重新运行的事件hooks/install。我只尝试了 和juju debug-hooks,没有尝试juju dhx,但这对我来说是可行的。

在我的例子中,我看到我的当前状态设置为“已安装”。通过更改我的事件来触发代码,我能够重新运行我的安装挂钩。debug-hooks然后,在我的会话中,我可以看到我的挂钩失败的地方。

from charms.reactive import when, set_state
import charms.apt

@when('myservice.installed')
def install():
    charms.apt.queue_install(['some-package'])
    // do some extra stuff
    set_state('myservice.installed')

答案2

如何在调试会话期间运行反应式超级按钮?

您可以通过在目录中运行钩子来运行反应式魅力hooks/该钩子将启动反应框架并发起“状态级联”。

目录中的钩子文件hooks/是由layer-basic和创建的charm build确保包括layer-basiclayer.yaml如果目录中没有钩子文件,则在您的文件中hooks/

您可以在以下位置找到有关调试反应式超级按钮的更多信息Juju 文档

相关内容