我是 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 个单元替换它们):nagios
nrpe
myCharm
wordpress
$ 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