<div dir="ltr">Hi Team<div><br></div><div>Whilst working on migrating to using Python 3 as the default charm execution environment, I've hit upon a snag with presentation of data from principle charms to the hacluster subordinate charm.</div><div><br></div><div>Specifically the data presented on the relation is simple str representation of python dicts which are then parsed used ast in the hacluster charm.</div><div><br></div><div>This has worked OK under Python 2, but due to the non-deterministic iteration of dict keys, the data presented from the principle charm can change over time when the ha_joined function is re-exec'ed (such as during a config-changed hook execution).</div><div><br></div><div>I'd like to propose that we move to using json to serialise this data so that we can used ordered dicts to present data in a consistent fashion.</div><div><br></div><div>We need to evolve the interface to deal with this - we could potentially take two approaches:</div><div><br></div><div>a) Attempt to parse presented data using json, fallback to ast for backwards compat</div><div><br></div><div>b) Present a version flag from the hacluster charm, allowing the principle to switch to the new approach when the required version of the hacluster charm is presented to it.  We'd still do a) but it would avoid hook failures in the event that a user does not upgrade hacluster application instances prior to upgrading principle charms.</div><div><br></div><div>Anyway - that's my current thoughts. I have a prototype for a) which works nicely, but I think adding b) will provide a better UX (thanks gnuoy for pointing to this solution).</div><div><br></div><div>Thoughts?</div><div><br></div><div>James</div></div>