对 postgresql charm 进行了一些研究,我想知道是否有办法以“juju-way”的方式提供默认值的覆盖。
在我的 charm 中,我将使用 postgresql 提供的服务,我想我可以覆盖数据库名称或创建的超级用户的名称等内容。如果我在关系连接中粘贴类似这样的内容:
relation-set user=my_superuser
我遇到一个问题,postgres/db-admin-relation-changed 实际上可以在消费者加入运行(或至少完成运行)之前运行。
最终,postgresql/db-admin-relation-changed 将运行并获取我的数据,但如果它运行得太快,我可能会得到 2 个超级用户。
TL;DR:有没有办法保证在关系提供者端的服务中覆盖默认配置?
答案1
在钩子执行方案中,无法保证哪个钩子首先运行,但您可以预测哪个钩子系列将首先执行。添加关系时,钩子*-relation-joined
将首先触发(在两个服务上,没有明确的胜者),然后是每个服务的钩子。由于您无法保证给定关系状态中的哪个钩子将首先触发,因此您可以通过将关系集命令放在Charm 中的钩子中*-relation-changed
来胜过Postgres Charm 上的钩子。relation-changed
relation-joined
这并不适用于每个 charm/关系,因为这取决于每个关系的繁重工作在哪里完成。例如,MySQL charm 在钩子期间执行所有数据库创建指令relation-joined
,因此上述操作实际上不会帮助您实现任何目标,因为您仍然会遇到竞争条件。
理想情况下,除非有真的有充分理由使用 postgres charm 提供的功能可能是最好的方法。