你好,我已经开发了两个魅力服务器魅力和应用程序魅力。我需要在它们之间添加关系,并希望获取应用程序魅力的服务器IP地址。我已经为服务器魅力和应用程序魅力添加了关系加入和关系更改的挂钩文件。然后我可以在它们之间建立关系。现在我遇到的问题是我的关系加入和关系更改的挂钩文件没有运行。只能运行配置更改、安装和启动挂钩文件。这是我遵循的方式。(如何添加两个魅力之间的关系以便在它们之间传递信息?谁能告诉我为什么这些关系挂钩没有运行,以及关系挂钩的流程如何运作。谢谢 Sajith
答案1
关于 juju 关系,需要记住的是,我们不遵守任何官方规范。我们不会强迫您实施 RFC 来在服务之间交换信息。
话虽如此,让我们在这里分析一下您的具体问题。
在服务器和应用程序方面,让我们使用 gitlab-ci 和 gitlab-ci-runner 作为我们的服务器/应用程序模型。gitlab-ci 是服务器,gitlab-ci-runner 是应用程序。我们的部署模型是一对多的,有 1 个服务器和多个应用程序。(我们可以有多台服务器,但我想让示例保持简洁)
Gitlab-CI 元数据
我们首先在 gitlab-ci 元数据中定义关系。
provides:
ci-job:
interface: ci-worker
这条语句告诉 juju,我们有一个 ci-job 关系,使用 ci-worker 接口。有了这个关系定义,我们有 4 种可能的状态,我们可以使用它们来进行更改。
ci-job-加入、ci-job-更改、ci-job-中断、ci-job-离开
对此的惯例是关系名称-事件- 因此,接下来,我们将这 4 个可能的事件钩子附加到关系名称上。它们按以下顺序执行:
- 关系连接
- 关系改变
- 关系破裂
- 关系疏远
加入用于“前期工作”,在这里您可以进行准备服务以接收关系所需的任何工作(例如,备份现有的本地 SQLite 数据库)。
每当检测到关系发生变化时,就会执行 Changed。有时,当远程 charm 有配置更新时会触发此操作,但不一定反映服务所需的更改 - 因此请 100% 确保其幂等性。
首次中断关系时会执行 Broken。此时您可能想要执行任何数据备份和重新配置以删除远程配置。
剩下的就是删除关系的最后收尾工作。例如重新安装 SQLite 备份以供运行并写入正确的配置。
饰品商店里有几种饰品可以锻炼这些钩子。我建议你看看其中一些饰品的钩子内容。MongoDB,维基百科,鬼
Gitlab-CI-Worker 元数据
另一端的服务与上面列出的服务非常相似,但我们将使用需要语句而不是提供语句来建立关系。这非常类似于选项卡 A、插槽 B 的配置 - 您可以使用这些定义来定义什么可以与什么对话。
requires:
ci-job:
interface: ci-worker
我们的钩子看起来基本相同:ci-job-加入、ci-job-更改、ci-job-中断、ci-job-离开
钩子代码的内容完全由你决定。
发送单位的 IP
juju 附带了一些约定 - 具体取决于您用来编写 charm 的语言。请务必阅读文档关于关系获取、关系集和单位获取
unit-get
用于读取系统级变量。例如:unit-get public-address
relation-set
是您想要在发送信息的主机上使用的内容。在 gitlab-ci 设置实例中,我们将relation-set publicip=$(unit-get public-address)
relation-get
是我们如何在接收服务上使用通过网络发送的数据。relation-get publicip
我希望这有帮助!