thanks for review comments. i've updated. Diff comments:
> diff --git a/doc/rtd/topics/boot.rst b/doc/rtd/topics/boot.rst > new file mode 100644 > index 0000000..30df52e > --- /dev/null > +++ b/doc/rtd/topics/boot.rst > @@ -0,0 +1,124 @@ > +============ > +Boot Stages > +============ > +In order to be able to provide the functionality that it does, cloud-init > +must be integrated into the boot in fairly controlled way. > + > +There are 5 stages. > + > +1. **Generator** > +2. **Local** > +3. **Network** > +4. **Config** > +5. **Final** > + > +Generator > +######### > +When booting under systemd, a > +`generator > <https://www.freedesktop.org/software/systemd/man/systemd.generator.html>`_ > +will run that determines if cloud-init.target should be included in the > +boot goals. By default, this generator will enable cloud-init. It will > +not enable cloud-init if either: > + > + * A file exists: ``/etc/cloud/cloud-init.disabled`` > + * The kernel command line as fond in /proc/cmdline contains > ``cloud-init=disabled``. > + When running in a container, the kernel command line is not honored, but > + cloud-init will read an environment variable named ``KERNEL_CMDLINE`` in > + its place. > + > +This mechanism for disabling at runtime currently only exists in systemd. > + > +Local > +##### > + * **systemd service**: ``cloud-init-local.service`` > + * **runs**: As soon as / is mounted read-write. > + * **blocks**: as much of boot as possible, *must* block network bringup. > + * **modules**: none > + > +The purpose of the local stage is: > + * locate "local" data sources. > + * apply networking configuration to the system (including "Fallback") > + > +In most cases, this stage does not do much more than that. It finds the > +datasource and determines the network configuration to be used. That > +network configuration can come from: > + > + * the datasource > + * fallback: Cloud-init's fallback networking consists of rendering the > + equivalent to "dhcp on eth0", which was historically the most popular > + mechanism for network configuration of a guest. Well, yes, picking one interfaces "the first" that looks like an actual nic is still preferable. I'm not aware of any cloud that actually has a dhcp server running on all interfaces. Mostly only one, and then the other attached nics have user managed networks that may be running a dhcp server, but likely are not. running dhcp on all interfaces would mean blocking indefinitely while dhcp timed out. > + * none. network configuration can be disabled entirely with > + config like the following in /etc/cloud/cloud.cfg: > + '``network: {config: disabled}``'. > + > +If this is an instance's first boot, then the selected network configuration > +is rendered. This includes clearing of all previous (stale) configuration > +including persistent device naming with old mac addresses. > + > +This stage must block network bring-up or any stale configuration might > +already have been applied. That could have negative affects such as dchp ack > +hooks or broadcast of an old hostname. It would also put the system in > +an odd state to recover from as it may then have to restart network > +devices. > + > +Cloud-init then exits and expects for the continued boot of the operating > +system to bring network configuration up as configured. > + > +**Note**: In the past, local data sources have been only those that were > +available without network (such as 'ConfigDrive'). However, as seen in > +the recent additions to the DigitalOcean datasource, even data sources > +that require a network can operate at this stage. > + > +Network > +####### > + * **systemd service**: ``cloud-init.service`` > + * **runs**: After local stage and configured networking is up. > + * **blocks**: As much of remaining boot as possible. > + * **modules**: ``init_modules`` > + > +This stage requires all configured networking to be online, as it will fully > +process any user-data that is found. Such processing means that any > +``#include`` operations will be done including http. by "process", I mean a.) download any '#include' or '#include-once' (and decompress) b.) execute part handlers (https://help.ubuntu.com/community/CloudInit) i'll update. > + > +This stage runs the ``disk_setup`` and ``mounts`` modules which may partition > +and format disks and configure mount points (such as in /etc/fstab). > +Those modules cannot run earlier as they may receive configuration input > +from sources only available via network. For example, a user may have > +provided user-data in a network resource that describes how local mounts > +should be done. > + > +On some clouds such as Azure, this stage will create filesystems to be > +mounted, including ones that have stale (previous instance) references in > +/etc/fstab. As such, entries /etc/fstab other than / should not be processed > +until after this stage is done. Right.. What do you think we shoudl say here? looking to say "only minimum mount points" to allow cloud-init to accomplish as much as it can. > + > +A part-handler will run at this stage, as will boothooks including > +cloud-config ``bootcmd``. The user of this functionality has to be aware > +that the system is in the process of booting when their code runs. > + > +Config > +###### > + * **systemd service**: ``cloud-config.service`` > + * **runs**: After network stage. > + * **blocks**: None. > + * **modules**: ``config_modules`` > + > +This stage runs config modules only. Modules that do not really have an > +affect on other stages of boot are run here. ack > + > + > +Final > +##### > + * **systemd service**: ``cloud-final.service`` > + * **runs**: As final part of boot (traditional "rc.local") > + * **blocks**: None. > + * **modules**: ``final_modules`` > + > +This stage runs as late in boot as possible. Any scripts that a user is > +accustomed to running after logging into a system should run correctly here. > +Things that run here include > + > + * package installations > + * configuration management plugins (puppet, chef, salt-minion) > + * user-scripts (including ``runcmd``). > + -- https://code.launchpad.net/~smoser/cloud-init/+git/cloud-init/+merge/310386 Your team cloud init development team is requested to review the proposed merge of ~smoser/cloud-init:doc-boot-stages into cloud-init:master. _______________________________________________ Mailing list: https://launchpad.net/~cloud-init-dev Post to : cloud-init-dev@lists.launchpad.net Unsubscribe : https://launchpad.net/~cloud-init-dev More help : https://help.launchpad.net/ListHelp