Я разрабатываю очарование амулета в Python с помощью реактивного шаблона. Все мои рычаги называют с помощью декораторов, предоставленных 'основным' базовым слоем. При попытке развернуть очарование я встретился с ошибкой. Для решения ошибки, я использовал 'рычаги отладки амулета и 'амулет dhx-r' (dhx отладка плагина), но я не могу найти способ выполнить код очарования с помощью Python после реактивного шаблона... Как я понимаю, (при использовании dhx для отладки, например), выполнение очарования возвращается к состоянию точно перед рычагом, который вызвал ошибку, и разработчик зарегистрирован в удаленный сеанс отладки. Это находится на разработчике для выполнения рычагов. Обычно эти рычаги находились бы под каталогом рычагов / и будут выполнены, просто выполнив их. Это не возможный использующий реактивный шаблон, так как нет никакой точки входа для рычагов, но все - просто каскад реакций на состояния...
Как я выполняю код очарования амулета, написанный в Python после реактивного шаблона во время сеанса отладки?
У меня была та же проблема, потому что в некотором роде мой set_state('myservice.installed')
был инициирован, даже когда я получил ошибку, которую привел к сбою мой рычаг установки. Я не сделал нашел определенное решение выполнить определенную часть кода, но хорошее обходное решение может быть должно изменить событие, которое обычно инициировало бы Ваш код и повторно выполнялось бы hooks/install
. Я только попробовал его juju debug-hooks
а не juju dhx
, но это сделало задание для меня.
В моем случае я видел, что мое текущее состояние было установлено на 'Установленный'. Путем изменения моего события для инициирования кода я смог повторно выполнить свой рычаг Установки. В моем debug-hooks
сессия я мог затем видеть, где мой рычаг перестал работать.
from charms.reactive import when, set_state
import charms.apt
@when('myservice.installed')
def install():
charms.apt.queue_install(['some-package'])
// do some extra stuff
set_state('myservice.installed')
Вы выполняете реактивное очарование путем выполнения рычага в hooks/
каталог. Тот рычаг будет запускать реактивную платформу и инициировать "каскад состояний".
Файлы рычага в hooks/
каталог создается layer-basic
и charm build
. Удостоверьтесь, что включали layer-basic
в Вашем layer.yaml
файл, если файлы рычага не присутствуют в hooks/
каталог.
Можно найти больше информации об отладке реактивного очарования в документах Амулета.