381 lines
23 KiB
Plaintext
381 lines
23 KiB
Plaintext
0.7.0:
|
|
- unified binary that activates the various stages
|
|
- Now using argparse + subcommands to specify the various CLI options
|
|
- a stage module that clearly separates the stages of the different
|
|
components (also described how they are used and in what order in the
|
|
new unified binary)
|
|
- user_data is now a module that just does user data processing while the
|
|
actual activation and 'handling' of the processed user data is done via
|
|
a separate set of files (and modules) with the main 'init' stage being the
|
|
controller of this
|
|
- creation of boot_hook, cloud_config, shell_script, upstart_job version 2
|
|
modules (with classes that perform there functionality) instead of those
|
|
having functionality that is attached to the cloudinit object (which
|
|
reduces reuse and limits future functionality, and makes testing harder)
|
|
- removal of global config that defined paths, shared config, now this is
|
|
via objects making unit testing testing and global side-effects a non issue
|
|
- creation of a 'helpers.py'
|
|
- this contains an abstraction for the 'lock' like objects that the various
|
|
module/handler running stages use to avoid re-running a given
|
|
module/handler for a given frequency. this makes it separated from
|
|
the actual usage of that object (thus helpful for testing and clear lines
|
|
usage and how the actual job is accomplished)
|
|
- a common 'runner' class is the main entrypoint using these locks to
|
|
run function objects passed in (along with there arguments) and there
|
|
frequency
|
|
- add in a 'paths' object that provides access to the previously global
|
|
and/or config based paths (thus providing a single entrypoint object/type
|
|
that provides path information)
|
|
- this also adds in the ability to change the path when constructing
|
|
that path 'object' and adding in additional config that can be used to
|
|
alter the root paths of 'joins' (useful for testing or possibly useful
|
|
in chroots?)
|
|
- config options now avaiable that can alter the 'write_root' and the
|
|
'read_root' when backing code uses the paths join() function
|
|
- add a config parser subclass that will automatically add unknown sections
|
|
and return default values (instead of throwing exceptions for these cases)
|
|
- a new config merging class that will be the central object that knows
|
|
how to do the common configuration merging from the various configuration
|
|
sources. The order is the following:
|
|
- cli config files override environment config files
|
|
which override instance configs which override datasource
|
|
configs which override base configuration which overrides
|
|
default configuration.
|
|
- remove the passing around of the 'cloudinit' object as a 'cloud' variable
|
|
and instead pass around an 'interface' object that can be given to modules
|
|
and handlers as there cloud access layer while the backing of that
|
|
object can be varied (good for abstraction and testing)
|
|
- use a single set of functions to do importing of modules
|
|
- add a function in which will search for a given set of module names with
|
|
a given set of attributes and return those which are found
|
|
- refactor logging so that instead of using a single top level 'log' that
|
|
instead each component/module can use its own logger (if desired), this
|
|
should be backwards compatible with handlers and config modules that used
|
|
the passed in logger (its still passed in)
|
|
- ensure that all places where exception are caught and where applicable
|
|
that the util logexc() is called, so that no exceptions that may occur
|
|
are dropped without first being logged (where it makes sense for this
|
|
to happen)
|
|
- add a 'requires' file that lists cloud-init dependencies
|
|
- applying it in package creation (bdeb and brpm) as well as using it
|
|
in the modified setup.py to ensure dependencies are installed when
|
|
using that method of packaging
|
|
- add a 'version.py' that lists the active version (in code) so that code
|
|
inside cloud-init can report the version in messaging and other config files
|
|
- cleanup of subprocess usage so that all subprocess calls go through the
|
|
subp() utility method, which now has an exception type that will provide
|
|
detailed information on python 2.6 and 2.7
|
|
- forced all code loading, moving, chmod, writing files and other system
|
|
level actions to go through standard set of util functions, this greatly
|
|
helps in debugging and determining exactly which system actions cloud-init is
|
|
performing
|
|
- switching out the templating engine cheetah for tempita since tempita has
|
|
no external dependencies (minus python) while cheetah has many dependencies
|
|
which makes it more difficult to adopt cloud-init in distros that may not
|
|
have those dependencies
|
|
- adjust url fetching and url trying to go through a single function that
|
|
reads urls in the new 'url helper' file, this helps in tracing, debugging
|
|
and knowing which urls are being called and/or posted to from with-in
|
|
cloud-init code
|
|
- add in the sending of a 'User-Agent' header for all urls fetched that
|
|
do not provide there own header mapping, derive this user-agent from
|
|
the following template, 'Cloud-Init/{version}' where the version is the
|
|
cloud-init version number
|
|
- using prettytable for netinfo 'debug' printing since it provides a standard
|
|
and defined output that should be easier to parse than a custom format
|
|
- add a set of distro specific classes, that handle distro specific actions
|
|
that modules and or handler code can use as needed, this is organized into
|
|
a base abstract class with child classes that implement the shared
|
|
functionality. config determines exactly which subclass to load, so it can
|
|
be easily extended as needed.
|
|
- current functionality
|
|
- network interface config file writing
|
|
- hostname setting/updating
|
|
- locale/timezone/ setting
|
|
- updating of /etc/hosts (with templates or generically)
|
|
- package commands (ie installing, removing)/mirror finding
|
|
- interface up/down activating
|
|
- implemented a debian + ubuntu subclass
|
|
- implemented a redhat + fedora subclass
|
|
- adjust the root 'cloud.cfg' file to now have distrobution/path specific
|
|
configuration values in it. these special configs are merged as the normal
|
|
config is, but the system level config is not passed into modules/handlers
|
|
- modules/handlers must go through the path and distro object instead
|
|
- have the cloudstack datasource test the url before calling into boto to
|
|
avoid the long wait for boto to finish retrying and finally fail when
|
|
the gateway meta-data address is unavailable
|
|
- add a simple mock ec2 meta-data python based http server that can serve a
|
|
very simple set of ec2 meta-data back to callers
|
|
- useful for testing or for understanding what the ec2 meta-data
|
|
service can provide in terms of data or functionality
|
|
- for ssh key and authorized key file parsing add in classes and util functions
|
|
that maintain the state of individual lines, allowing for a clearer
|
|
separation of parsing and modification (useful for testing and tracing)
|
|
- add a set of 'base' init.d scripts that can be used on systems that do
|
|
not have full upstart or systemd support (or support that does not match
|
|
the standard fedora/ubuntu implementation)
|
|
- currently these are being tested on RHEL 6.2
|
|
- separate the datasources into there own subdirectory (instead of being
|
|
a top-level item), this matches how config 'modules' and user-data 'handlers'
|
|
are also in there own subdirectory (thus helping new developers and others
|
|
understand the code layout in a quicker manner)
|
|
- add the building of rpms based off a new cli tool and template 'spec' file
|
|
that will templatize and perform the necessary commands to create a source
|
|
and binary package to be used with a cloud-init install on a 'rpm' supporting
|
|
system
|
|
- uses the new standard set of requires and converts those pypi requirements
|
|
into a local set of package requirments (that are known to exist on RHEL
|
|
systems but should also exist on fedora systems)
|
|
- adjust the bdeb builder to be a python script (instead of a shell script) and
|
|
make its 'control' file a template that takes in the standard set of pypi
|
|
dependencies and uses a local mapping (known to work on ubuntu) to create the
|
|
packages set of dependencies (that should also work on ubuntu-like systems)
|
|
- pythonify a large set of various pieces of code
|
|
- remove wrapping return statements with () when it has no effect
|
|
- upper case all constants used
|
|
- correctly 'case' class and method names (where applicable)
|
|
- use os.path.join (and similar commands) instead of custom path creation
|
|
- use 'is None' instead of the frowned upon '== None' which picks up a large
|
|
set of 'true' cases than is typically desired (ie for objects that have
|
|
there own equality)
|
|
- use context managers on locks, tempdir, chdir, file, selinux, umask,
|
|
unmounting commands so that these actions do not have to be closed and/or
|
|
cleaned up manually in finally blocks, which is typically not done and will
|
|
eventually be a bug in the future
|
|
- use the 'abc' module for abstract classes base where possible
|
|
- applied in the datasource root class, the distro root class, and the
|
|
user-data v2 root class
|
|
- when loading yaml, check that the 'root' type matches a predefined set of
|
|
valid types (typically just 'dict') and throw a type error if a mismatch
|
|
occurs, this seems to be a good idea to do when loading user config files
|
|
- when forking a long running task (ie resizing a filesytem) use a new util
|
|
function that will fork and then call a callback, instead of having to
|
|
implement all that code in a non-shared location (thus allowing it to be
|
|
used by others in the future)
|
|
- when writing out filenames, go through a util function that will attempt to
|
|
ensure that the given filename is 'filesystem' safe by replacing '/' with
|
|
'_' and removing characters which do not match a given whitelist of allowed
|
|
filename characters
|
|
- for the varying usages of the 'blkid' command make a function in the util
|
|
module that can be used as the single point of entry for interaction with
|
|
that command (and its results) instead of having X separate implementations
|
|
- place the rfc 8222 time formatting and uptime repeated pieces of code in the
|
|
util module as a set of function with the name 'time_rfc2822'/'uptime'
|
|
- separate the pylint+pep8 calling from one tool into two indivudal tools so
|
|
that they can be called independently, add make file sections that can be
|
|
used to call these independently
|
|
- remove the support for the old style config that was previously located in
|
|
'/etc/ec2-init/ec2-config.cfg', no longer supported!
|
|
- instead of using a altered config parser that added its own 'dummy' section
|
|
on in the 'mcollective' module, use configobj which handles the parsing of
|
|
config without sections better (and it also maintains comments instead of
|
|
removing them)
|
|
- use the new defaulting config parser (that will not raise errors on sections
|
|
that do not exist or return errors when values are fetched that do not exist)
|
|
in the 'puppet' module
|
|
- for config 'modules' add in the ability for the module to provide a list of
|
|
distro names which it is known to work with, if when ran and the distro being
|
|
used name does not match one of those in this list, a warning will be written
|
|
out saying that this module may not work correctly on this distrobution
|
|
- for all dynamically imported modules ensure that they are fixed up before
|
|
they are used by ensuring that they have certain attributes, if they do not
|
|
have those attributes they will be set to a sensible set of defaults instead
|
|
- adjust all 'config' modules and handlers to use the adjusted util functions
|
|
and the new distro objects where applicable so that those pieces of code can
|
|
benefit from the unified and enhanced functionality being provided in that
|
|
util module
|
|
- fix a potential bug whereby when a #includeonce was encountered it would
|
|
enable checking of urls against a cache, if later a #include was encountered
|
|
it would continue checking against that cache, instead of refetching (which
|
|
would likely be the expected case)
|
|
- add a openstack/nova based pep8 extension utility ('hacking.py') that allows
|
|
for custom checks (along with the standard pep8 checks) to occur when running
|
|
'make pep8' and its derivatives
|
|
0.6.4:
|
|
- support relative path in AuthorizedKeysFile (LP: #970071).
|
|
- make apt-get update run with --quiet (suitable for logging) (LP: #1012613)
|
|
- cc_salt_minion: use package 'salt-minion' rather than 'salt' (LP: #996166)
|
|
- use yaml.safe_load rather than yaml.load (LP: #1015818)
|
|
0.6.3:
|
|
- add sample systemd config files [Garrett Holmstrom]
|
|
- add Fedora support [Garrent Holstrom] (LP: #883286)
|
|
- fix bug in netinfo.debug_info if no net devices available (LP: #883367)
|
|
- use python module hashlib rather than md5 to avoid deprecation warnings.
|
|
- support configuration of mirror based on dns name ubuntu-mirror in
|
|
local domain.
|
|
- support setting of Acquire::HTTP::Proxy via 'apt_proxy'
|
|
- DataSourceEc2: more resilliant to slow metadata service
|
|
- config change: 'retries' dropped, 'max_wait' added, timeout increased
|
|
- close stdin in all cloud-init programs that are launched at boot
|
|
(LP: #903993)
|
|
- revert management of /etc/hosts to 0.6.1 style (LP: #890501, LP: #871966)
|
|
- write full ssh keys to console for easy machine consumption (LP: #893400)
|
|
- put INSTANCE_ID environment variable in bootcmd scripts
|
|
- add 'cloud-init-per' script for easily running things with a given frequency
|
|
- replace cloud-init-run-module with cloud-init-per
|
|
- support configuration of landscape-client via cloud-config (LP: #857366)
|
|
- part-handlers now get base64 decoded content rather than 2xbase64 encoded
|
|
in the payload parameter. (LP: #874342)
|
|
- add test case framework [Mike Milner] (LP: #890851)
|
|
- fix pylint warnings [Juerg Haefliger] (LP: #914739)
|
|
- add support for adding and deleting CA Certificates [Mike Milner]
|
|
(LP: #915232)
|
|
- in ci-info lines, use '.' to indicate empty field for easier machine reading
|
|
- support empty lines in "#include" files (LP: #923043)
|
|
- support configuration of salt minions (Jeff Bauer) (LP: #927795)
|
|
- DataSourceOVF: only search for OVF data on ISO9660 filesystems (LP: #898373)
|
|
- DataSourceConfigDrive: support getting data from openstack config drive
|
|
(LP: #857378)
|
|
- DataSourceNoCloud: support seed from external disk of ISO or vfat
|
|
(LP: #857378)
|
|
- DataSourceNoCloud: support inserting /etc/network/interfaces
|
|
- DataSourceMaaS: add data source for Ubuntu Machines as a Service (MaaS)
|
|
(LP: #942061)
|
|
- DataSourceCloudStack: add support for CloudStack datasource [Cosmin Luta]
|
|
- add option 'apt_pipelining' to address issue with S3 mirrors
|
|
(LP: #948461) [Ben Howard]
|
|
- warn on non-multipart, non-handled user-data [Martin Packman]
|
|
- run resizefs in the background in order to not block boot (LP: #961226)
|
|
- Fix bug in Chef support where validation_key was present in config, but
|
|
'validation_cert' was not (LP: #960547)
|
|
- Provide user friendly message when an invalid locale is set
|
|
[Ben Howard] (LP: #859814)
|
|
- Support reading cloud-config from kernel command line parameter and
|
|
populating local file with it, which can then provide data for DataSources
|
|
- improve chef examples for working configurations on 11.10 and 12.04
|
|
[Lorin Hochstein] (LP: #960564)
|
|
|
|
0.6.2:
|
|
- fix bug where update was not done unless update was explicitly set.
|
|
It would not be run if 'upgrade' or packages were set to be installed
|
|
- fix bug in part-handler code, that prevented working part-handlers
|
|
(LP: #739694)
|
|
- fix bug in resizefs cloud-config that would cause trace based on
|
|
failure of 'blkid /dev/root' (LP: #726938)
|
|
- convert dos formated files to unix for user-scripts, boothooks,
|
|
and upstart jobs (LP: #744965)
|
|
- fix bug in seeding of grub dpkg configuration (LP: #752361) due
|
|
to renamed devices in newer (natty) kernels (/dev/sda1 -> /dev/xvda1)
|
|
- make metadata urls configurable, to support eucalyptus in
|
|
STATIC or SYSTEM modes (LP: #761847)
|
|
- support disabling byobu in cloud-config
|
|
- run cc_ssh as a cloud-init module so it is guaranteed to run before
|
|
ssh starts (LP: #781101)
|
|
- make prefix for keys added to /root/.ssh/authorized_keys configurable
|
|
and add 'no-port-forwarding,no-agent-forwarding,no-X11-forwarding'
|
|
to the default (LP: #798505)
|
|
- make 'cloud-config ready' command configurable (LP: #785551)
|
|
- make fstab fields used to 'fill in' shorthand entries configurable
|
|
This means you do not have to have 'nobootwait' in the values
|
|
(LP: #785542)
|
|
- read /etc/ssh/sshd_config for AuthorizedKeysFile rather than
|
|
assuming ~/.ssh/authorized_keys (LP: #731849)
|
|
- fix cloud-init in ubuntu lxc containers (LP: #800824)
|
|
- sanitize hosts file for system's hostname to 127.0.1.1 (LP: #802637)
|
|
- add chef support (cloudinit/CloudConfig/cc_chef.py) (LP: ##798844)
|
|
- do not give trace on failure to resize in lxc container (LP: #800856)
|
|
- increase the timeout on url gets for "seedfrom" values (LP: #812646)
|
|
- do not write entries for ephemeral0 on t1.micro (LP: #744019)
|
|
- support 'include-once' so that expiring or one-time use urls can
|
|
be used for '#include' to provide sensitive data.
|
|
- support for passing public and private keys to mcollective via cloud-config
|
|
- support multiple staticly configured network devices, as long as
|
|
all of them come up early (LP: #810044)
|
|
- Changes to handling user data mean that:
|
|
* boothooks will now run more than once as they were intended (and as
|
|
bootcmd commands do)
|
|
* cloud-config and user-scripts will be updated from user data every boot
|
|
- Fix issue where 'isatty' would return true for apt-add-repository.
|
|
apt-add-repository would get stdin which was attached to a terminal
|
|
(/dev/console) and would thus hang when running during boot. (LP: 831505)
|
|
This was done by changing all users of util.subp to have None input unless
|
|
specified
|
|
- Add some debug info to the console when cloud-init runs.
|
|
This is useful if debugging, IP and route information is printed to the
|
|
console.
|
|
- change the mechanism for handling .ssh/authorized_keys, to update entries
|
|
rather than appending. This ensures that the authorized_keys that are
|
|
being inserted actually do something (LP: #434076, LP: #833499)
|
|
- log warning on failure to set hostname (LP: #832175)
|
|
- upstart/cloud-init-nonet.conf: wait for all network interfaces to be up
|
|
allow for the possibility of /var/run != /run.
|
|
- DataSourceNoCloud, DataSourceOVF : do not provide a default hostname.
|
|
This way the configured hostname of the system will be used if not provided
|
|
by metadata (LP: #838280)
|
|
- DataSourceOVF: change the default instance id to 'iid-dsovf' from 'nocloud'
|
|
- Improve the OVF documentation, and provide a simple command line
|
|
tool for creating a useful ISO file.
|
|
|
|
0.6.1:
|
|
- fix bug in fixing permission on /var/log/cloud-init.log (LP: #704509)
|
|
- improve comment strings in rsyslog file tools/21-cloudinit.conf
|
|
- add previous-instance-id and previous-datasource files to datadir
|
|
- add 'datasource' file to instance dir
|
|
- add setting of passwords and enabling/disabling of PasswordAuthentication
|
|
for sshd. By default no changes are done to sshd.
|
|
- fix for puppet configuration options (LP: #709946) [Ryan Lane]
|
|
- fix pickling of DataSource, which broke seeding.
|
|
- turn resize_rootfs default to True
|
|
- avoid mounts in DataSourceOVF if 'read' on device fails
|
|
'mount /dev/sr0' for an empty virtual cdrom device was taking 18 seconds
|
|
- add 'manual_cache_clean' option to select manual cleaning of
|
|
the /var/lib/cloud/instance/ link, for a data source that might
|
|
not be present on every boot
|
|
- make DataSourceEc2 retries and timeout configurable
|
|
- add helper routines for apt-get update and install
|
|
- add 'bootcmd' like 'runcmd' to cloud-config syntax for running things early
|
|
- move from '#opt_include' in config file format to conf_d.
|
|
ie, now files in /etc/cloud.cfg.d/ is read rather than reading
|
|
'#opt_include <filename>' or '#include <filename>' in cloud.cfg
|
|
- allow /etc/hosts to be written from hosts.tmpl. which allows
|
|
getting local-hostname into /etc/hosts (LP: #720440)
|
|
- better handle startup if there is no eth0 (LP: #714807)
|
|
- update rather than append in puppet config [Marc Cluet]
|
|
- add cloud-config for mcollective [Marc Cluet]
|
|
0.6.0:
|
|
- change permissions of /var/log/cloud-init.log to accomodate
|
|
syslog writing to it (LP: #704509)
|
|
- rework of /var/lib/cloud layout
|
|
- remove updates-check (LP: #653220)
|
|
- support resizing / on first boot (enabled by default)
|
|
- added support for running CloudConfig modules at cloud-init time
|
|
rather than cloud-config time, and the new 'cloud_init_modules'
|
|
entry in cloud.cfg to indicate which should run then.
|
|
The driving force behind this was to have the rsyslog module
|
|
able to run before rsyslog even runs so that a restart would
|
|
not be needed (rsyslog on ubuntu runs on 'filesystem')
|
|
- moved setting and updating of hostname to cloud_init_modules
|
|
this allows the user to easily disable these from running.
|
|
This also means:
|
|
- the semaphore name for 'set_hostname' and 'update_hostname'
|
|
changes to 'config_set_hostname' and 'config_update_hostname'
|
|
- added cloud-config option 'hostname' for setting hostname
|
|
- moved upstart/cloud-run-user-script.conf to upstart/cloud-final.conf
|
|
- cloud-final.conf now runs runs cloud-config modules similar
|
|
to cloud-config and cloud-init.
|
|
- LP: #653271
|
|
- added writing of "boot-finished" to /var/lib/cloud/instance/boot-finished
|
|
this is the last thing done, indicating cloud-init is finished booting
|
|
- writes message to console with timestamp and uptime
|
|
- write ssh keys to console as one of the last things done
|
|
this is to ensure they don't get run off the 'get-console-ouptut' buffer
|
|
- user_scripts run via cloud-final and thus semaphore renamed from
|
|
user_scripts to config_user_scripts
|
|
- add support for redirecting output of cloud-init, cloud-config, cloud-final
|
|
via the config file, or user data config file
|
|
- add support for posting data about the instance to a url (phone_home)
|
|
- add minimal OVF transport (iso) support
|
|
- make DataSources that are attempted dynamic and configurable from
|
|
system config. changen "cloud_type: auto" as configuration for this
|
|
to 'datasource_list: [ "Ec2" ]'. Each of the items in that list
|
|
must be modules that can be loaded by "DataSource<item>"
|
|
- add 'timezone' option to cloud-config (LP: #645458)
|
|
- Added an additional archive format, that can be used for multi-part
|
|
input to cloud-init. This may be more user friendly then mime-multipart
|
|
See example in doc/examples/cloud-config-archive.txt (LP: #641504)
|
|
- add support for reading Rightscale style user data (LP: #668400)
|
|
and acting on it in cloud-config (cc_rightscale_userdata.py)
|
|
- make the message on 'disable_root' more clear (LP: #672417)
|
|
- do not require public key if private is given in ssh cloud-config
|
|
(LP: #648905)
|