我对 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
钩子中进行。
因此实现这个:
install
hook 基本不做任何事 [1]relation-joined
hook 使用以下方式获取 iprelation-get private-address
relation-joined
hook 执行客户端的实际安装和配置
[1]或者安装钩子可以进行安装,直到需要 IP 为止,然后停止