I know this is a completely separate direction than you are taking.

It feels a bit like we are gating all cloud-init updates/runs based on whether 
the instance-id changes. In a world where cloud-init becomes re-entrany (or 
hotplug handling) should cloud-init grow the ability for people to supplement 
cloud-init's written content, with more information?

I'm thinking like bookend comments like this.
# begin cloud-init ignore
# end cloud-init ignore
 

In either case, I'll try deploying a node twice with reboots in between and 
make sure this only changes on node re-install. It feels like we are working 
around a problem by relying on instance-id as our gate for rewriting content. 
Should cloud-init ever accept 

Diff comments:

> diff --git a/cloudinit/sources/DataSourceMAAS.py 
> b/cloudinit/sources/DataSourceMAAS.py
> index 496bd06..dba420d 100644
> --- a/cloudinit/sources/DataSourceMAAS.py
> +++ b/cloudinit/sources/DataSourceMAAS.py
> @@ -147,6 +149,25 @@ class DataSourceMAAS(sources.DataSource):
>  
>          return bool(url)
>  
> +    def check_instance_id(self, sys_cfg):
> +        """locally check if the current system is the same instance.
> +
> +        MAAS doesn't provide a real instance-id, and if it did, it is
> +        still only available over the network.  We need to check based
> +        only on local resources.  So compute a hash based on Oauth tokens."""
> +        if self.id_hash is None:
> +            return False
> +        ncfg = util.get_cfg_by_path(sys_cfg, ("datasource", self.dsname), {})
> +        return (self.id_hash == get_id_from_ds_cfg(ncfg))
> +
> +
> +def get_id_from_ds_cfg(ds_cfg):
> +    fields = ('token_key', 'token_secret', 'consumer_key')

Might be nice to have a private method _get_oauth_creds() since we also grab 
these fields in _get_helper too.

> +    idstr = '\0'.join([ds_cfg.get(k, "") for k in fields])
> +    # store the encoding version as part of the hash in the event
> +    # that it ever changed we can compute older versions.
> +    return 'v1:' + hashlib.sha256(idstr.encode('utf-8')).hexdigest()
> +
>  
>  def read_maas_seed_dir(seed_d):
>      if seed_d.startswith("file://"):


-- 
https://code.launchpad.net/~smoser/cloud-init/+git/cloud-init/+merge/335108
Your team cloud-init commiters is requested to review the proposed merge of 
~smoser/cloud-init:bug/1712680-maas-use-token-for-check-instance-id into 
cloud-init:master.

_______________________________________________
Mailing list: https://launchpad.net/~cloud-init-dev
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~cloud-init-dev
More help   : https://help.launchpad.net/ListHelp

Reply via email to