如何在安装钩子中获取加入单元的 IP 地址?

如何在安装钩子中获取加入单元的 IP 地址?

我对 Juju 和护身符还很陌生,正在尝试一些基本的东西。

我正在编写一个 charm(比如客户端),它的安装钩子中需要另一个 charm(比如服务器)的 IP 地址。

基本上,我需要服务器的 IP 地址并将其放在客户端的配置文件中。但它在客户端的安装挂钩中不可用。我添加了客户端和服务器的关系,并且$REMOTE-UNIT可以relation-set hostname=unit-get private-address public-address=unit-get public-address使用server_address=relation-get hostname

但是,这似乎不起作用。服务器的 IP 地址必须在 中提供给客户端install hook,对吗?因为它是一次性配置参数。

答案1

那么,如果我理解正确的话,您想要安装一个需要服务器 IP 才能正确安装的应用程序吗?您基本上拥有的是如果客户端与服务器之间没有关系,那么它就是“无用的”。

Juju 是基于事件的。当触发事件时,Juju 会将所有其他事件排入该魔法的队列。下一个事件从前一个事件完成的那一刻开始触发。事件relation只有在事件完成后才会触发。从技术上讲,只有在魔法的钩子完成install后才能添加两个魔法之间的关系。install

如果你有一个无法安装的魅力,除非它有关系(除非它知道“服务器”ip),那么钩子install什么也不做。实际的安装应该在relation-joined钩子中进行。

因此实现这个:

  • installhook 基本不做任何事 [1]
  • relation-joinedhook 使用以下方式获取 iprelation-get private-address
  • relation-joinedhook 执行客户端的实际安装和配置

[1]或者安装钩子可以进行安装,直到需要 IP 为止,然后停止

相关内容