/var/lib/cloud has the following structure: - scripts/ per-instance/ per-boot/ per-once/ files in these directories will be run by 'run-parts' once per instance, once per boot, and once per *ever*. - seed/ / sys-user-data user-data meta-data The 'seed/' directory allows you to seed a specific datasource For example, to seed the 'nocloud' datasource you would need to populate seed/nocloud/user-data seed/nocloud/meta-data - instance -> instances/i-abcde This is a symlink to the current instance/ directory created/updated on boot - instances/ i-abcdefgh/ scripts/ # all scripts in scripts are per-instance sem/ config-puppet config-ssh set-hostname cloud-config.txt user-data.txt user-data.txt.i obj.pkl handlers/ data/ # just a per-instance data location to be used boot-finished # this file indicates when "boot" is finished # it is created by the 'final_message' cloud-config datasource # a file containing the class and string of datasource - sem/ scripts.once These are the cloud-specific semaphores. The only thing that would go here are files to mark that a "per-once" script has run. - handlers/ "persistent" handlers (not per-instance). Same as handlers from user-data, just will be cross-instance id - data/ this is a persistent data location. cloud-init won't really use it, but something else (a handler or script could) previous-datasource previous-instance-id previous-hostname to clear out the current instance's data as if to force a "new run" on reboot do: ( cd /var/lib/cloud/instance && sudo rm -Rf * )