嗨,我开发了两个魅力服务器魅力和应用魅力。我需要添加它们之间的关系,并且想要获取应用魅力的服务器 IP 地址。我为服务器魅力和应用魅力添加了关系连接和关系更改的挂钩文件。然后我可以在它们之间建立关系。现在我有问题,我的关系连接和关系更改挂钩文件没有运行。只运行配置更改,安装和启动挂钩文件。这是我遵循的方式。(我怎么做添加两个魅力之间的关系以在它们之间传递信息?有人告诉我为什么这些关系挂钩没有运行。以及关系挂钩的流程如何工作。谢谢 Sajith
关于 juju 关系要记住的是,我们不受任何官方规范的约束。我们不会强迫您实施 RFC 以在服务之间交换信息。
话虽如此,让我们在这里剖析您的特定问题。
在服务器和应用程序方面,让我们使用 gitlab-ci 和 gitlab-ci-runner 作为我们的服务器/应用程序模型。gitlab-ci 作为服务器,gitlab-ci-runner 作为应用程序。我们的部署模型是一对多的,有 1 个服务器和许多应用程序。(我们可以有很多服务器,但我想保持示例简洁)
我们首先在 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 个可能的事件挂钩附加到关系名称。它们按以下顺序执行:
Joined 用于“预工作”,是您执行准备服务以接收关系所需的任何工作的地方(例如,备份现有的本地 SQLite 数据库)。
每当在关系中检测到更改时,就会执行 Changed。这有时会在远程魅力有配置更新时被触发,并且可能不一定反映您的服务所需的更改 - 因此请 100% 确定其幂等性。
Broken 在您第一次中断关系时执行。这是您想要进行任何数据备份和重新配置以删除远程配置的时候。
Departed 是消除关系的任何最终总结工作。比如重新安装SQLite备份进行操作,写入正确的配置。
在护身符商店中,有几种护身符可以锻炼这些钩子。我建议查看一些魅力的钩子内容。MongoDB、MediaWiki、Ghost
对端服务将与上面列出的服务有非常相似的故事,但我们将使用 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
钩子代码的内容完全由您决定。
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
我希望这有帮助!
归档时间: |
|
查看次数: |
418 次 |
最近记录: |