juju 魅力关​​系挂钩不运行?

Saj*_*ara 2 server juju

嗨,我开发了两个魅力服务器魅力和应用魅力。我需要添加它们之间的关系,并且想要获取应用魅力的服务器 IP 地址。我为服务器魅力和应用魅力添加了关系连接和关系更改的挂钩文件。然后我可以在它们之间建立关系。现在我有问题,我的关系连接和关系更改挂钩文件没有运行。只运行配置更改,安装和启动挂钩文件。这是我遵循的方式。(我怎么做添加两个魅力之间的关系以在它们之间传递信息?有人告诉我为什么这些关系挂钩没有运行。以及关系挂钩的流程如何工作。谢谢 Sajith

laz*_*wer 7

关于 juju 关系要记住的是,我们不受任何官方规范的约束。我们不会强迫您实施 RFC 以在服务之间交换信息。

话虽如此,让我们在这里剖析您的特定问题。

在服务器和应用程序方面,让我们使用 gitlab-ci 和 gitlab-ci-runner 作为我们的服务器/应用程序模型。gitlab-ci 作为服务器,gitlab-ci-runner 作为应用程序。我们的部署模型是一对多的,有 1 个服务器和许多应用程序。(我们可以有很多服务器,但我想保持示例简洁)

Gitlab-CI 元数据

我们首先在 gitlab-ci 元数据中定义关系。

provides:
  ci-job:
    interface: ci-worker
Run Code Online (Sandbox Code Playgroud)

这个单一的语句告诉 juju 我们有一个 ci-job 关系,使用 ci-worker 接口。通过这个关系定义,我们可以使用 4 种可能的状态来进行更改。

ci-job-joined, ci-job-changed, ci-job-broken, ci-job-departed

对此的约定是关系名称-事件- 因此向前推进,我们将这 4 个可能的事件挂钩附加到关系名称。它们按以下顺序执行:

  1. 关系连接
  2. 关系改变
  3. 关系破裂
  4. 关系偏离

Joined 用于“预工作”,是您执行准备服务以接收关系所需的任何工作的地方(例如,备份现有的本地 SQLite 数据库)。

每当在关系中检测到更改时,就会执行 Changed。这有时会在远程魅力有配置更新时被触发,并且可能不一定反映您的服务所需的更改 - 因此请 100% 确定其幂等性。

Broken 在您第一次中断关系时执行。这是您想要进行任何数据备份和重新配置以删除远程配置的时候。

Departed 是消除关系的任何最终总结工作。比如重新安装SQLite备份进行操作,写入正确的配置。

在护身符商店中,有几种护身符可以锻炼这些钩子。我建议查看一些魅力的钩子内容。MongoDBMediaWikiGhost

Gitlab-CI-Worker 元数据

对端服务将与上面列出的服务有非常相似的故事,但我们将使用 requires 语句来建立关系,而不是提供。这在很大程度上是一个选项卡 A、插槽 B 配置 - 您可以通过这些定义定义什么可以与什么对话。

requires:
  ci-job:
    interface: ci-worker
Run Code Online (Sandbox Code Playgroud)

我们的钩子看起来基本相同:ci-job-joined、ci-job-changed、ci-job-broken、ci-job-departed

钩子代码的内容完全由您决定。

发送本机IP

juju 附带了一些约定 - 取决于您用来编写魅力的语言。确保你阅读了关于relation-get、relation-set 和unit-get的文档

unit-get旨在读取系统级变量。例如:unit-get public-address

relation-set是您希望在发送信息的主机上使用的内容。在 gitlab-ci 设置的实例中,我们会relation-set publicip=$(unit-get public-address)

relation-get 是我们在接收服务上使用通过线路发送的数据的方式。 relation-get publicip

我希望这有帮助!