我的魅力需要关系改变和关系连接的钩子吗?

mar*_*ars 3 juju

我看到了很多魅力,他们的关系都有一个relation-changed和一个relation-joined钩子。有时这两个钩子甚至是同一个文件,一个是另一个的符号链接。然而,juju 文档说当一个关系被加入时therelation-joined relation-changedhooks 都会运行。

我的魅力应该只包括一个钩子还是另一个,而不是两个?

Mar*_*ppi 5

这取决于魅力的用例。这是考虑每个关系钩子做什么以及何时执行的好方法:

关系连接

这始终是要执行的第一个钩子,它也只在该特定服务到服务关系的生命周期内执行一次。现在可以保证两个服务挂钩中的哪一个将首先触发,但它始终是一组关系挂钩中的第一个触发。很多护身符不需要这个,但有些护身符这很重要。如果您有任何需要首先执行的设置细节,那么这就是它们将发生的地方。以数据库服务器为例:大多数数据库服务器魅力使用relation-joined钩子来创建其他服务将等待的数据库、用户、密码和其他详细信息。它可以relation-changed 钩,但它会增加更多的复杂性,以确保它不会一遍又一遍地重新创建数据库和用户(更多关于为什么会在一秒钟内发生)。

关系改变

这会在成功relation-joined执行后立即运行一次。然后每次在服务之间的线路上发送数据时,都会再次执行此钩子。因此,它确实需要是幂等的,因为它可能会被执行不止一次。所以很多魅力会收集预期的relation-get数据,并在继续之前确保它存在。至于为什么relation-joinedANDrelation-changed钩子在加入的事件上一个接一个地触发可能是为了便于使用而不是relation-joined明确地需要钩子。

至于你的魅力应该包括什么,这完全取决于你和你的魅力的用例。不是每个魅力都有relation-joined,事实上很少有人考虑到商店的大小。它实际上仅在该关系的生命周期中明确需要仅执行一次某事时才使用。我们很清楚,当我的意思是“仅一次”时,我指的是执行juju add-relation. 如果您向另一个服务添加另一个关系,relation-joined钩子和整个生命周期将重新开始。(因为理论上您可以将多个服务连接到一个服务上的一个关系)