Isso depende do caso de uso do encanto. Aqui está uma boa maneira de pensar no que cada hook de relação faz e quando é executado:
relation-joined
Este é sempre o primeiro gancho a ser executado, também é executado apenas uma vez durante a vida útil desse serviço específico para a relação de serviço. Agora há garantia de qual dos dois serviços o gancho irá disparar primeiro, mas será sempre o primeiro do conjunto de ganchos de conexão a disparar. Muitos charms não precisam disso, mas alguns encantos são muito importantes. Se você tem detalhes de configuração, você precisa executar primeiro, então é onde eles vão acontecer. Tome um servidor de banco de dados, por exemplo: A maioria dos servidores de banco de dados usa o gancho relation-joined
para criar o banco de dados, usuário, senha e outros detalhes que o outro serviço estará aguardando. Isso poderia fazer isso durante o relation-changed
hook, mas adicionaria mais complexidade para garantir que ele não recriaria o banco de dados e o usuário repetidas vezes (mais sobre por que isso aconteceria em um segundo ).
relação-alterada
Isso é executado uma vez logo após a execução bem-sucedida de relation-joined
. Então, toda vez que os dados são enviados na conexão entre os serviços, este gancho é executado novamente. Como tal, ele realmente precisa ser idempotente, pois provavelmente será executado mais de uma vez. Assim, muitos charms coletarão os dados relation-get
esperados e verificarão se eles existem antes de continuar. Quanto ao motivo pelo qual os dois ganchos relation-joined
AND relation-changed
disparam um após o outro no evento unido provavelmente permitirão a facilidade de uso e não exigirão explicitamente um relation-joined
hook.
Quanto ao que o seu charme deve incluir, depende inteiramente de você e do caso de uso do seu charme. Nem todo encanto tem relation-joined
, na verdade, poucos consideram o tamanho da loja. É realmente usado apenas quando há uma necessidade explícita de fazer algo apenas uma vez durante o ciclo de vida dessa relação. Só então estamos claros, quando quero dizer "apenas uma vez", estou falando sobre a execução do juju add-relation
. Se você adicionar outra relação a outro serviço, o relation-joined
hook e todo o ciclo de vida recomeçará. (desde que você pode, teoricamente, conectar vários serviços a uma relação em um serviço)