我使用 Juju 的手动环境,为了不丢失机器,我将它们全部添加为 machinename.local(使用 avahi-discover)。由于管理方面的一些规则,无法使用静态 IP。
例如,当我添加服务和 mysql 之间的关系时,$db_host 总是从 mysql 主机获取 ip 而不是域。
我如何将 $db_host 与 avahi 域而不是 IP 建立关系?
答案1
首先,需要了解有关关系的一些事项:
Juju 与决定特定关系设置(例如,在 IP 地址或域名之间进行选择)关系不大。由实现特定关系类型的 charms 来决定设置哪些关系数据。
作为例外,Juju 确实
private-address
默认设置了关系设置以方便使用,但 charms 可以删除或更改它。Juju
private-address
在关系设置以及输出中提供unit-get private-address
地址,而不是名称。
因此,您最终得到的是 IP 地址而不是主机名,这取决于您所关联的魅力和 Juju 的默认设置,具体取决于具体情况。
查看 mysql charm,我发现它根据 的输出设置host
(in ) 。hooks/db-relation-joined
unit-get private-address
因此,一种选择是修改每个设置地址的 charm,并将其更改为提供您需要的名称。或者,如果 charm 只使用默认设置private-address
,则在钩子中覆盖它*-relation-joined
。在您的环境中,使用类似调用hostname
和附加的操作.local
即可。但这显然不是一个很好的解决方案,因为您必须修改每个受影响的 charm。
不幸的是,大多数 charm 都是为相反的工作环境而设计的 - IP 通常不会改变(或者管理员可以控制以确保 IP 不会改变),但 mDNS(Zeroconf 所需的)通常不起作用,并且没有可用的中央 DNS 服务器。因此,尽管 Juju 并没有特别要求 charm 只支持地址,但这通常是 charm 商店中的所有 charm 所做的。