Как получить IP-адреса всех подразделений в сервисе в Чаржу?

Я новичок в Juju и пытаюсь написать очарование. Мне нужен IP-адрес всех устройств, развернутых в сервисе. я использую

Например, у меня есть 3 единицы WordPress с-- Juju развертывания -n 3 CS: WordPress

Я развернул свое очарование из локального репозитория - juju deploy local:trusty/X

Я добавляю связь между двумя...

Теперь мне нужен список всех 3 ip-адресов сервиса WordPress в одном из хуков в моем обаянии (X)

Я установил реляционные ключи в WordPress и попытался использовать в своем обаянии инструменты-идентификаторы отношения -> список-отношения -> связь-получить. Но это дает мне только один IP, а не все три.

отношение-идентификаторы - дает один идентификатор. ID списка отношений - дает только одну единицу. отношение-получает - дает соответствующий IP.

что я должен сделать, чтобы получить ожидаемый результат?

2 ответа

Попробуйте что-то вроде этого:

from charmhelpers.contrib.openstack.utils import get_host_ip
from charmhelpers.core.hookenv import (
    relation_ids,
    related_units,
    relation_get,
)
def _get_ips(rel_name):
    return [get_host_ip(rdata['private-address'])
            for rid in relation_ids(rel_name)
            for rdata in
            (relation_get(rid=rid, unit=unit) for unit in related_units(rid))
            if rdata]

ips = _get_ips("wordpress")

Имя отношения может быть другим в вашем случае. Подтвердите это.

Вы можете получить адрес подразделения, используя

get_host_ip(unit_get('private-address')

где get_host_ip может быть импортирован из charmhelpers

from charmhelpers.contrib.openstack.utils import get_host_ip

Чтобы получить IP-адреса всех единиц прелести, вы должны добавить одноранговые отношения. Вы можете прочитать об отношениях здесь

Другие вопросы по тегам