如何通过另一个服务的 charm-hook 获取一个服务中所有单元的 IP 地址?

如何通过另一个服务的 charm-hook 获取一个服务中所有单元的 IP 地址?

我是 Juju 的新手,正在尝试编写一个 charm。我需要部署在服务中的所有单元的 IP 地址。我目前正在使用 juju 1.25 并在 openstack 中部署服务

场景如下:

我有 3 个 wordpress 单元(它有必需的关系钩子文件),其中

juju deploy -n 3 cs:wordpress

我从本地仓库部署了我的魅力

juju deploy local:trusty/myCharm

我添加了两者之间的关系

juju add-relation myCharm wordpress

现在,我需要在 myCharm 中的一个钩子中列出 wordpress 服务的所有 3 个 ip 地址

我在 wordpress 中设置了 relationship-keys,并尝试在 myCharm 中使用 relationship-ids -> relationship-list -> relationship-get 钩子工具。但它只给我一个 ip,而不是全部三个。

relation-ids {relationName}  --gives one id. 
relation-list -r {id} --gives just one unit(wordpress/18). 
relation-get -r {id} {relation-key} {unit} --gives corresponding ip.

我应该怎么做才能获得预期的结果?

答案1

应该relation-list -r {id}返回关系中的所有单位。也许您只解析第一个(或最后一个)值?

当我有一个应用程序的多个单元与另一个应用程序相关时,我的relation-*输出如下所示(在这种情况下,我正在查看和 3 个单元monitors之间的关系数据;您可能希望用和 3 个单元替换它们):nagiosnrpemyCharmwordpress

$ juju run --unit nagios/0 'relation-ids monitors'
monitors:1

$ juju run --unit nagios/0 'relation-list -r monitors:1'  
nrpe/0
nrpe/1
nrpe/2

$ juju run --unit nagios/0 'relation-get -r monitors:1 private-address nrpe/0'
172.31.13.216

我可以将所有这些放在一个循环中,输出所有相关单元的私有地址,nagios如下所示:

$ juju run --unit nagios/0 'for i in `relation-ids monitors`; do for j in `relation-list -r $i`; do relation-get -r $i private-address $j; done; done'
172.31.13.216
172.31.30.157
172.31.49.121

相关内容