Juju charms - como executar e depurar charme reativo

1

Estou desenvolvendo um charme de juju em python usando um padrão reativo. Todos os meus ganchos são chamados usando decoradores fornecidos pela camada base 'básica'. Ao tentar implantar o encanto, encontrei um erro. Para resolver o erro usei 'juju debug-hooks' e 'juju dhx -r' (plugin de depuração do dhx), mas não consigo encontrar uma maneira de executar o código de charme usando python seguindo o padrão reativo ... Pelo que entendi, (ao usar o dhx para depuração, por exemplo), a execução do charme é retornada ao estado exatamente antes do gancho que causou um erro e o desenvolvedor está conectado em uma sessão de depuração remota. Está no desenvolvedor para executar ganchos. Normalmente, esses ganchos estariam sob o diretório / hooks e seriam executados apenas por sua execução. Isso não é possível usando o padrão reativo, já que não há ponto de entrada para ganchos, mas tudo é apenas uma cascata de reações aos estados ...

Como faço para executar um código de charme juju escrito em python seguindo o padrão reativo durante uma sessão de depuração?

    
por vanjadjurdjevic 29.07.2016 / 14:36

2 respostas

1

Eu tive o mesmo problema porque, de alguma forma, meu set_state('myservice.installed') foi acionado mesmo quando recebi o erro de falha no gancho de instalação. Não encontrei uma solução específica para executar um determinado código, mas uma boa solução alternativa pode ser alterar o evento que normalmente acionaria seu código e executar hooks/install novamente. Eu só tentei com juju debug-hooks e não com juju dhx , mas isso fez o trabalho para mim.

No meu caso, vi que meu estado atual estava definido como 'Instalado'. Ao alterar meu evento para acionar o código, consegui executar novamente o meu gancho de instalação. Na minha sessão debug-hooks , pude ver onde meu gancho falhou.

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')
    
por SebastienPattyn 16.12.2016 / 15:25
0

Como faço para executar um encanto reativo durante uma sessão de depuração?

Você executa um charme reativo executando um gancho no diretório hooks/ . Esse gancho iniciará a estrutura reativa e iniciará a "cascata de estados".

Os arquivos de gancho no diretório hooks/ são criados por layer-basic e por charm build . Certifique-se de incluir layer-basic no seu arquivo layer.yaml se os arquivos de gancho não estiverem presentes no diretório hooks/ .

Você pode encontrar mais informações sobre a depuração de encantos reativos em os documentos do Juju .

    
por Galgalesh 05.10.2017 / 15:37