CHANGES
=======

* Put py34 first in the env order of tox
* Update stackforge to openstack
* It seems like httppretty 0.8.11 and 0.8.12 are broken
* py26 is no longer supported by Infra's CI
* Deprecated tox -downloadcache option removed
* LICENSE: correct wording with respect to Apache 2
* Use a single source for version information
* Configure basic logging, and make it possible to log to console
* Add a version filtering strategy
* Add an API for loading a data source
* Fix running cloud-init with no arguments on Python 3
* Add unregister and reset to DictRegistry and use
* Use an explicit absolute import for importing the logging module
* add ReportingEventStack
* Make ReportingHandler a proper base class
* add cloud-init main
* Refactor handlers out of main reporting module
* tests: use cloudinit.tests.TestCase everywhere
* improve test coverage
* Make reporting handlers configurable
* Use a registry to configure reporting handlers
* Implement a DictRegistry
* Convert reporting handlers to be instantiated
* README.rst: mention bugs are tracked in launchpad
* Basic implementation of a reporting framework
* Move our TestCase in to the cloudinit.tests package
* Don't consider version-specific code for coverage
* Speed up a slow test
* Expose api response properties and cache buffer decoding
* fix 'tox -e docs' by limiting sphinx versions
* tools/tox-venv: support running other than ./tools/tox-venv
* Bring over the 'templater' from bzr
* Add importlib for python 2.6 *only*
* Bring over the 'safeyaml' from bzr
* Clean up stale auto-generated autodoc files
* tox: disable proxies when running nosetests
* Add the data source base classes and the HTTP OpenStack implementation
* Move required tox version down to 1.6
* HACKING.rst: mention signing the contribors agreement
* Add doc8 checks to docs tox target
* Fail the doc build if we have any warnings
* Don't try to generate autodoc for Windows modules
* Change the API of wait_any_url to return a tuple of url and response
* Fix a faulty test
* Don't use --cover-inclusive; Windows modules break it
* Bring over the 'url_helper' module from bzr
* Add the layout for a couple of Windows OS utils, especially networking
* Add tox targets for coverage testing
* Remove and ignore files that are now generated by the doc build
* Add cloudinit.tests.util for shared testing code
* Include auto-generated API documentation in Sphinx documentation
* Bump up to newer version of pbr
* LICENSE: license / header redux
* Add the base classes for the new OS utils architecture
* change license header in from GPL to Apache
* Fix wording of push to
* Fix all the current brokeness
* license change GPLv3 to Apache 2.0
* tools/tox-venv: remove unnecessary redirection
* Improve the design spec for the distro hierarchy
* Add a spec draft for the new distro namespace
* tools/tox-venv: add wrapper for entering tox environ
* tox doc functional
* initial functial tox
* initial .gitignore
* re-set requirements/test-requirements
* use pbr for setup.py
* empty changelog
* initial tree for 2.0 work
* update HACKING to refer to github
* tools/ccfg-merge-debug: fix for updated user-data/vendor-data
* Cleanups for netinfo.py
* Fix some whitespace issues
* Fix the ipv6 header centering
* Fix the getgateway function
* Be more tolerant of missing information
* Fixes rpm spec file build issues (its not currently building)
* Update with trunk and resolve conflicts
* Use assertNotEqual which exists on python2.6
* IPv6 support for rhel distro
* Updated unittests + Scenario with multiple NICs
* IPv6 support for rhel distro
* Update to use a newer and better OMNIBUS_URL
* Be more tolerant of 'ssh_authorized_keys' types
* Pretty up the debug module
* Fix parse_ssh_config failing in ssh_util.py
* Ensure the cc_chef doc links to the cc_chef code
* Increase the robustness/configurability of the chef module..
* Update chef module docstring to reflect the new style
* Fix the digital ocean test on py2.6
* Added unittests for IPv6 support for RHEL
* Only use datafiles and initsys addon outside virtualenvs
* Add IPv6 Support for Rhel. This patch does the following:
* retain trailing newline from template files when using jinja2
* Use test_helpers.TestCase for test_sshutil tests
* Handle = used as config delimiter in SSH config
* Add tests for current parse_ssh_config behaviour
* Fix the digital ocean test on py2.6
* Only use datafiles and initsys addon outside virtualenvs
* Start adding cloud config module docs
* ChangeLog: update for last commit
* fix bad logic resulting in failure to honor 'output' config
* Make the cloud_init_modules look like a heredoc/inline heredoc
* Show the handle method for the cc_ubuntu_init_switch module
* Use bold for the internal name
* Add a link to the module code
* Not that log_cfgs are not shown
* Add the beginnings of module documentation
* Use LOG.warn and handle the None case as well
* Fix the word spacing
* Also allow a dict to be used
* Handle strings/text type for 'ssh_authorized_keys'
* fix for rhel7 by using 'uses_systemd' to detect upstart/systemd
* Add Digital Ocean Datasource
* fix 'make test' failure
* open 0.7.7
* Pretty up the debug module
* Use TODO.rst instead of removing it
* Allow the usr/lib/exec to vary and still work with write_keys
* USR_LIB_EXEC varies depending on system
* Explicitly import only types being compared
* Ensure the files/dirs are retained
* More spec file tweaks
* Add documentation for DigitalOcean datasource
* Include the systemd config files
* Correct handling of single/multiple ssh keys
* Expose uses_systemd as a distro function
* Use existing metadata crawler to populate datasource
* Make metadata timeout/retries configurable
* Add tests for DigitalOcean datasource
* Add DigitalOcean DataSource
* Prefer immutable structures
* Use the key contants in the default key => value set
* Add a post-run method that can be used to delete validation.pem files
* Show the spec file content
* Fix the rpm building (currently broken)
* Retain the old behavior for mandatory keys
* Add a comment explaining the param path logic
* Allow running even if installed
* Follow the same constant variable naming scheme for the path tpl keys
* Have the caller find the param paths instead of the param creator
* Ensure that any template paths have associated directories
* Move the chef running to its own helper function
* Always ensure we create the /etc/chef dir
* Use the util function to get the chef base directories
* Allow the omnibus url fetching retries to be configurable
* Allow for the running after install and run arguments to be configured
* More adjustments
* Some more reworkings
* Move the installation code to its own function
* Fix some of the erroring out test cases
* Add a few template delete tests
* Fix newline added at end of file
* Undo changes to the util file, not sure why that happened..
* Increase the robustness of the chef module

0.7.6
-----

* update url in config drive documentation
* freebsd: enable correct behavior on Ec2
* new: The Ec2 datasource works for FreeBSD as well
* fix: Use continue to skip inside a loop
* fix: Take care of FreeBSD nic devicenames since they differ depending on the platform involved. Xen/KVM (Azure?) use different drivers, which results in different device names
* freebsd: Use the proper virtio FreeBSD network interface name
* cc_mounts: add ability to create swap file
* return only the filename, as it might be all known
* message clean up
* remove debug print
* fix
* check for existing file in /proc/swaps to be safe
* pyflakes
* handle non-dictionary 'swap' input
* nice log message
* add debug statement for recommended
* maxsize must be 'None' otherwise it is zero, and no swap allowed
* support human2bytes, separate handling out to method
* add doc
* add code for setting up swap file
* FreeBSD: Support ConfigDrive
* add ConfigDrive for freebsd config by default
* sysvinit/freebsd: set sane PATH
* tools/build-on-freebsd: e2fsprogs provides blkid
* tools/build-on-freebsd: add blkid and e2fsprogrs
* tools/build-on-freebsd: sort pkgs list
* further platform cleanup
* fix re-use of 'platform' in local scope
* Fix link for config_drive doc
* support 'mtype' as a list, and fix up freebsd mount types
* merge from trunk
* MetadataMaterializer support custom leaf decoder
* cc_grub_dpkg consider /dev/xvda as a candidate for grub installation
* resizefs: fix backgrounded resizing
* merge from trunk
* Remove pylint: lines
* Fix bug 1338614
* cloud-init-blocknet: remove debug code going to /run/cloud-init-blocknet
* upstart/cloud-init-nonet.conf: only mention wait if larger than 5 seconds
* upstart: add blocknet which blocks net until after cloud-init-local
* upstart/cloud-init-nonet.conf: do not exit on existance of obj.pkl
* netinfo: log error on failure of route info
* OpenStack: fix consumption of vendor-data to allow namespacing
* allow local disabling of blocknet
* upstart: add blocknet which blocks net until after cloud-init-local
* merge from trunk
* cloud-init-local depends on /run. reflect that in upstart job
* when loading vendordata allow it to be string or list
* Openstack: Vendor data cleanup
* OpenStack: search less urls to determine if MD service is there
* ConfigDrive: support reading vendor_data similar to OpenStack MD reader
* drop version= from readers
* fix log message
* make BaseReader select latest supported version
* merge from trunk
* openstack: fix bug referencing undefined variable, revert some changes
* fix a bug, use a list instead of tuple for _versions
* log as warn if things are obviously wrong
* merge from trunk
* pyflakes fixes
* Only use vendordata under cloud-init key for ConfigDrive
* cc_chef: Update omnibus URL to new Chef TLD
* merge from trunk
* Update read_config_drive to use OS_VERSIONS tuple for readers
* resizefs: first check if device is writable before attempting
* freebsd: fixes for sudo and build-on-freebsd
* Allow customized metadata leaf decoding
* Fix a couple more cases of exceptional logs
* Reduce logging levels and fix broken call to _fetch_available_versions
* improved logging of errors around module loading/searching
* fix: Since these now actually exist in ports, install them properly (with pkg)
* fix: Write sudo rules upon user creation
* Datasource: fix to provide local-hostname if not available in datasource
* Fix logic statement and pep8 issue
* Remove/adjust the verbose 'failed at attempted import of' log
* FreeBsd: fix initscripts and add working config file
* merge from trunk
* fix: The original regex was a little harsh, the rest of the bits regarding keys and values from /etc/rc.conf is tweaked as well (harlowja)
* fix: Make sure this freebsd test succeeds on all platforms (harlowja)
* Openstack: do not load urls twice
* no functional changes, but some minor changes
* Fix retry cb to reflect what used to exist
* Fixed more of the slowness around fetching and retrying
* Show the available versions in the debug log message
* Log a warning when unable to fetch the openstack versions
* Just use os.path.exists directly
* Add logging around failure to read optional/mandatory paths
* Refactor vendor_data handling
* Add failback for older Openstack configdrive versions
* Optimize away most of the path_exists checks
* Fix pep8 issues, drop pylint
* further remove evidence of pylint
* Upgrade configdrive version
* Remove pylint
* fix(pep8): Fix various pep8 violations and version-lock pep8
* change: Use a compiled regex and use the included match groups instead of matching yet again
* ssh_authkey_fingerprints: fix bug that prevented disabling the module
* Removed using lazy mode for umount
* fix: Drop some overly loud debug messages
* change: Rename the config file to cloud.cfg-freebsd so it doesn't get copied per default. Packaging will take care of installing this configfile on the BSD platform
* fix: Syntax
* fix: Use the correct variable
* merge: Pull in the fixes from Scott
* merge: Trunk
* build-on-freebsd: minor cleanups/bikeshedding
* setup.py: remove read_datafiles, use globals for ETC and USR
* merge from trunk
* ec2_utils.py: get_instance_metadata explicitly add trailing /
* docs: fix disk-setup to reference 'table_type'
* fix rendering resolv.conf if no 'options' are provided
* settings: fix typo resulting in OpenStack and GCE not running
* systemd: make cloud-init block ssh service startup to guarantee keys exist
* use url_helper to combine url
* fix: Updated some syntax to be pep8 compliant
* new: Added FreeBSD template for manage_etc_hosts support
* new: Added FreeBSD support to ConfigDrive
* fix: Don't create a directory that will never be used anyway
* fix: Install the python package that will install the required link to the python2.7 binary. This defaults to 2.7, which is fine
* remove un-used 'end' in result.json and status.json
* change: Run the ssh module
* change: Cancel execution of several modules that are definately not tested or supported yet
* change: Install everything in the right location on both Linux (which ofcourse already was good) and FreeBSD (which realy likes /usr/local for this)
* fix: Set the environment var CLOUD_CFG to specify the location of cloud.cfg since -f is not used for that
* change: Save and restore the SSH keys between builds
* change: Make note of another python lib pypi takes care of
* change: Create a symlink to python2.7, to make sure running plain python works
* fix: Pass -y to growfs to keep it from asking for confirmation
* new: Some datasources (like Smartos) use dmidecode to gather some specific information, so install it
* fix: More dependencies
* change: Add an important comment
* new: Buildscript for installing on FreeBSD. This should do until a proper port is created
* fix: Use -f to properly load the configfile
* change: C-i is installed in /usr/local/
* fix: Command (the binary) is cloud-init, not cloud_init
* change: Cloud-init config should go under /usr/local since /etc/ is reserved for base
* fix: To install the new freebsd sysvinit scripts, accept a new sysvinit_freebsd argument. Specifying sysvinit will install the RH scripts, which is wrong
* fix: The correct path end with an s
* new: Config for FreeBSD
* fix: Skip lines from /etc/rc.conf not matching the pattern key=value
* merge: These are the changes from the freebsd-static-networking branch
* ubuntu-init-switch: support disabling of reboot, minor tweeks
* ubuntu-init-switch: fix for determining if systemd
* add ubuntu-init-switch module for testing systemd
* exit and warn if no 'dpkg' (probably wrong distro)
* add some doc to module
* fix path to systemd
* fix for config, allow specifying target for cloud-init --single
* initial commit oif iniit_switch
* cc_power_state_change: improve TypeError messages
* do not put comments in /etc/timezone
* SeLinuxGuard: remove invalid check for sanity around restorecon, fix test
* test: make selinux test skipped if selinux not available
* change trunk packaging to be more modern
* pep8 fixes (2 unrelated to this mp)
* remove duplicate entry in control.in
* remove print statement from setup.py
* merge from trunk
* bddeb: do not sign by default
* default bddeb to building both systemd and upstart
* change default path of systemd files to /lib/sysemd/system
* refactor redundant systemd_root
* Use pkg-config
* Yeah, tests pass now
* fix httpretty based test cases if http_proxy is set
* more
* use override targets
* more
* more
* more
* more import statements
* Use nosetests and absolute imports
* Use tests
* fix up
* fix ups
* refactor
* Modernise packaging, and allow multiple init system installation (based on smoser pastebins)
* Make systemd root installation dir appropriate for debian-like systems, else fallback to universally acceptable one
* Allow the usage of jinja2 templates
* add package info for bddeb/brpm
* use textwrap, simple formatting improvement
* merge from trunk
* Add non braces matching and a few more tests
* fix 'make test' in python 2.6
* Fix a few tests that have been failing in python 2.6
* Log the renderer type when rendering files
* Add basic renderer support and more robust import handling
* Less noisy logs, and improve some log messages
* Add more useful execution continuing message
* Remove some of the more useless debug logs
* run before sshd-keygen.service
* move TODO to TODO.rst
* Fix for cc_grub_dpkg ignoring /dev/xvda devices as candidates (LP: 1336855)
* Move to a rst format for the TODO file
* Add wants for sshd to make sure there isn't a race condition
* doc: fix user-groups doc to reference plural ssh-authorized-keys
* SmartOS test: do not require existance of /dev/ttyS1
* CloudSigma: only poll on serial device after dmidecode check
* minor cleanups
* add vendordata support to cloudsigma datasource
* open 0.7.6
* Use dmidecode to detect if cloud-init runs in CloudSigma's infrastructure
* Add timeouts for reading/writing from/to to the serial console
* Enable vendordata for CloudSigma (LP: #1303986)

0.7.5
-----

* pyflakes cleanups
* OpenNebula: support base64 encoded user-data
* change 'default' encoding to be "None"
* Added base64 decoding of user data for OpenNebula
* NoCloud: fix broken seedfrom on the kernel command line
* Azure: pep8 and pylint cleanups from previous commit
* Azure: re-format ephemeral disk if necessary
* change to unmount then check to address possible race
* minor changes: be more careful about umount and warn on fail
* Windows Azure defines the ephemeral0 mount as being a per-boot instead of per instance. Under a variety of circumstances, the ephemeral device may be presented as a default device. This patch detects when that situation happens and triggers CC modules disk-setup and mounts to run again
* final_message: allow replacement of capital name keys
* Add some basic template tests
* Switch to jinja & adjust tpls
* seed_random: do not capture command output, provide env RANDOM_SEED_FILE
* merge from trunk
* CloudSigma: support user-data being base64 encoded
* write status to /run/cloud-init/ for external consumption
* version space (v1:) result_path json also
* seed_random: support a 'command' to seed /dev/random
* allow random command's output to go through
* cc_seed_random: fix bug and support pollinate command
* Allow the usage of mako templates
* distros/freebsd.py: fix regression due to previous pylint cleanup
* tools/make-tarball: add ability to include uncommited changes
* test_altcloud: fix altcloud tests when running on arm
* AltCloud: fix test failures related to new arm-specific behavior
* AltCloud: to not run dmidecode on arm systems
* AltCloud: do not run dmidecode on arm32/arm64 because it leads to kvm crash
* pep8 and pylint
* SmartOS: do not run on arm as dmidecode causes problems
* netinfo.py: fix regression causing ubuntu to show 'addr:v.x.y.z'
* be atomic when writing status files
* fix write_json call
* minor cleanups
* fix end/start in doc
* add doc/status.txt
* ConfigDrive: trim trailing newlines in previous-instance-id
* DataSourceOpenStack: debug, not warn on non-ideal version. do not use latest
* Reduce OSds LOG levels when detecting and use HAVANA instead of latest
* Ensure we strip the previous_iid file contents
* fixes from testing, force symlink
* possibly functional start testing
* merge from trunk
* test_smartos: remove bad test case
* initial commit for status
* Read encoded with base64 user data
* NoCloud: fix broken seed from external image
* CloudSigma: remove 'WARN' in not found case
* DataSourceGCE: fix 'is_resolvable', remove unnecessary WARN
* DataSourceOpenStack: allow vendor-data to be a dict with 'cloud-init' inside
* smartos: fix bug in previous commit
* The symlink of /var/lib/cloud/instance is not created at the time that the datasource for SmartOS runs. This patch creates the instance's directory
* re-work vendor-data and smartos
* re-work vendor-data and smartos
* merge from trunk
* GCE: add some tests, some small fixes
* some style changes, some pylint, be less noisy
* Define default vendordata for SmartOS. In absence of a vendordata, use a default #cloud-config that writes per-boot script that fetches subsequent sdc:operator-scripts and executes it
* GCE: use dns name instead of IP address
* GCE: add unit tests, user-data support and few other fixes
* Add a openstack specific datasource
* make 'Loaded datasource' a info message
* do not warn on waiting for url
* wait less for the metadata service (by default)
* add Openstack to default datasources
* merge from trunk
* Add initial GCE datasource
* add 'user-data' support
* cloudsigma: change default dsmode to 'net'
* merge from trunk
* support configuration of MD_URL, disable if not resolvable
* initial Gentoo and Arch linux support
* merge from trunk
* Add support for the CloudSigma server context
* merge from trunk
* Add 'unverified_modules' config option and skip unverified modules
* drop 'is_excluded'
* fix pylint warning (and real bug) in bad spelling of resolve_conf_fn
* cc_emit_upstart: do not bother filtering
* merge from trunk
* Add CloudSigma data source
* doc/examples/cloud-config-landscape.txt: fix invalid example
* oops
* properlly format the landscape example
* DataSourceEc2: Fix incorrect return in _get_url_settings
* rpm build fixes
* remove the 'tools/sudo' file and references in cloud-init.spec.in
* Azure: fix issue with stale data in /var/lib/waagent
* make a defined var of DATA_DIR_CLEAN_LIST, some pylint cleanups
* change behavior to only delete SharedConfig.xml
* Handle code not existing in older requests versions
* Spacing and comment cleanup
* Update requests ssl not supported message
* Capture IOError and use LOG better
* wrap url get call in try/except clause
* Remove HEAD usage and other small adjustments
* Add test for disabled dsmode
* Adjust detection of python versions and variables exposed
* Add a bunch of new tests
* Remerged with trunk
* Forgot to include _trim_key function
* Made new ovf-env.xml handling more robust. Test cases included
* use url_helper instead of requests
* Rebase on upstream
* Removed yum exclude module entry from gentoo distro
* Removed exclude conditional on keys-to-console
* Added arch distro class to merge request
* Added arch network config
* Removed exclude bits from yum module as its not a default
* Init script after consistency
* Cleanup and cloud-init-local local/net mount dep fix
* Update ssh_svcname in init
* Initial arch distro add
* Added is_excluded tests and updated gentoo init script
* Fix merge conflict
* Update yum unittest
* Fix sshd restart
* Add Google Compute Engine data source support
* Net interface up updates and override ssh_svcname to init scripts
* Don't forget the rest of the files!
* Add a openstack specific datasource
* Fix incorrect return
* Fix sudo cfg. file mode. Require sudo >= 1.7.2p2-3 with sudoers.d support
* Added config for sudo. Apply sudo config in RPM for Red Hat
* Fix Requires->requirements.txt rename in RPM build
* DataSourceNoCloud: support reading vendor-data
* merge from trunk
* add 2 tests for vendordata
* Updated exclude modules for gentoo distro
* util.is_ipv4: realize that 0 is a valid number in a ipv4 address
* cloudinit/util.py: fix pylint complaints
* DataSourceNoCloud: support reading vendor-data
* Allow zeros when detecting IPv4 address (e.g. 192.168.0.1)
* exclude modules fix 1
* Removed excessive is_excluded module calls
* Adds distro module exclude support
* add 'pathprefix2dict' utility for use by DataSourceNoCloud
* populate_dir: only makedir if it doesn't exist
* init_cmd inheritance fixes
* read_file_or_url: raise UrlError with 404 on ENOENT
* Don't try to create members if group creation fails
* Fix logexc usage in freebsd distro
* Fixes for SmartOS datasource
* minor changes for pylint, write_boot_content improvement
* Log failure to restore backup locale file
* Freebsd cleanups
* Make SmartOS script handling self-contained in datasource
* Fixes gentoo sysvinit ordering
* Rebasing on trunk
* pylint and long line fixes
* add --dummy-variables-rgx= param when calling pylint
* Fixed flip-flopped comment
* pep8/pylint fixes
* Fixes for SmartOS datasource (LP: #1272115): 1. fixed conflation of user-data and cloud-init user-data. Cloud-init user-data is now namespaced as 'cloud-init:user-data'. 2. user-scripts are now fetched from the meta-data service each boot and executed as in the scripts directory 3. datacenter name is now namespaced as sdc:datacenter 4. user-scripts should be shebanged if there is no file magic
* init_cmd distro unique supports gentoo init scripts
* url_helper: call exception_cb with the UrlError exception
* Package manager install / update fixes and service restart foo
* Use the right exception
* Skip retry and continued fetch of userdata when NOT_FOUND
* Initial add Gentoo distro
* Remove pylint warning about unused request_args
* Skip retry and continued fetch of userdata when NOT_FOUND
* fix util.which if PATH is not in environment
* Add freebsd sysvinit scripts
* Initial Freebsd support
* fix freebsd new file header
* pep8/tab to 8 spaces
* pep8, use which rather than hard coded path
* pep8
* fix broken consumption of /proc/mounts
* merge from trunk
* pep8
* Consider partitions as sources for configdrive if labelled correctly
* Split net-parsing into own module
* remove some white space
* cc_resizefs: figure out what /dev/root means via kernel cmdline
* Add a new line
* Add comments as to format with example in/out
* Split net-parsing into own module
* tools/read-dependencies tools/read-version: rewrite in python
* cloud-config-landscape.txt: improve documentation
* merge requirement changes
* Add output when starting to run tests
* Phony not phone
* Run pyc cleaning before running tests
* Update makefile to install from updated requirements files
* Fix defaulting
* more boto removal. move httpretty from 'Requires'
* Add 'Requires' or 'Recommends' on sudo in packaging files
* drop requirement on boto for its boto.utils.get_instance_metadata()
* initial vendordata support
* remove creation of some vestigial dirs
* merge from trunk
* remove unused mergedvendoruser
* More white space fix
* White space fix
* Fix curly braces
* Add freebsd rc.d/sysvinit scripts
* doc improvements
* remove support for resizing via 'parted resizepart'
* fix pep8 (trailing ';')
* pep8 and pylint fixes; typo fix for documentation
* Fix tsts
* DataSourceOpenNebula:parse_shell_config skip 'SECONDS' var if seen
* Fixed typos
* simplify consume_vendordata, move exclusion, consume_vendordata per instance
* DataSource: remove has_vendordata and consume_vendordata, drop filters
* cloudinit/settings.py: add vendor_data to built in config
* Fix for race condition where 'captured' Windows Azure instances identify as the previous instance (LP: #1269626)
* replace get_nested_option_as_list with get_cfg_by_path, improve ruparts
* remove vendor-scripts-per-{boot,instance,once}
* config/cloud.cfg: fix typo
* header, comment cleanup
* merge from trunk
* Require sudo package
* provide default 'output' setting to log to /var/log/cloud-init-output.log
* Updated non-json message
* Only check for json objects instead of also arrays
* Add a maybe_json helper function
* Add ec2 utils tests and httpretty requirement for http mocking
* Bring back the ec2 utils, non-boto userdata/metadata reading
* Allow a Config Drive source on a partition, if the label matches
* Azure: minor changes for filename as strings and logging
* Added vendordata to SmartOS
* Significant re-working of the userdata handling and introduction of vendordata
* SeLinuxGuard: Cast file path to string
* new: Apply the locale to the default login class
* change: Just run the required command and let the exception do the rest if the process died. Checking first if the process is still alive proofed to be quite error prone, atleast on a rather slow compute node
* fix: Proper comment
* change: Use a proper signal instead of 'just' 0
* support calling apt with eatmydata, enable by default if available
* change: Use util.system_info()
* new: Touch a reboot-required file to make clear we want a reboot after resizing the partition
* change: Use util.system_info()
* change: Separate functions to load, read and write /etc/rc.conf keys and values. Use these right away to read and change the hostname
* packages/debian/control.in: remove 'python:Depends'
* fix: Log the used method as well
* fix: Fallback to check the interface state, specifically freebsd benefits of this
* packages/bddeb: accept python-json-patch or python-jsonpatch
* Cast file path to string
* fix 'make yaml'
* add 'debug' module for printing debug output
* be verbose explicitly if run from cmdline
* fix pep8 and pylint warnings
* Add a log message around import failures
* Removed yaml import
* Removed method _format_yaml
* essage
* bug: 1258619 added namespace for config options, output file, commandline argument for output file
* new: FreeBSD module to support cloud-init on the FBSD10 platform. In its current form its still missing some modules though
* This is a new debug module thats supposed to print out some information about the instance being created
* open 0.7.5

0.7.4
-----

* fix 'make rpm' by removing 0.6.4 entry from ChangeLog (LP: #1241834
* pep8 fix
* fix issue with get_mount_info on older kernels
* Documentation: fix name of 'cloud-init-per' command
* Fix bug lp:1248625 by reading /etc/mtab when mountinfo is not present
* Change SmartOS verb for availability zone
* Change SmartOS verb for availability zone (LP: #1249124)
* Documentation: fix name of "cloud-init-per" command
* support calling add-apt-repository on cloud-archive: entries
* improve error message on failure of add-apt-repository
* mention in doc
* allow template rendering before passing to add-apt-repository
* fix use search
* support calling add-apt-repository on cloud-archive: entries
* fix power_state_change config module so that example works, improve doc
* fix DataSourceAzure incompatibility with 2.6
* Log message around import failure
* power_state_change: convert an int input for delay to string, improve doc
* fix bug mounting first partition of a alias'd name
* open 0.7.4
* Fixed bad ehpemeral0 first partition detection (LP: #1236594)

0.7.3
-----

* trim trailing whitespace on smartos hostname when it came from dmidecode
* Fixed SmartOS hostname whitespace bug (LP: #1236445)
* DataSourceSmartOS: remove unnecessary availability_zone attribute
* fix failure to create disks on azure, create new 'dev.part' notation
* pep8 and pylint fixes
* Fixed up issue with attempt to mount nonexistant swap
* remove duplicate code
* try to support ephemeral0.1 in cc_mounts
* simplifications and some function renames
* Added support for 'ephmeral0.<auto|any|0>' for device mappings in disk formating support
* Make {pep8,pylint,test} pass commit
* Wrapped use of 'lsblk' to a generator function; removed other fcalls to 'lsblk'
* Configure SmartOS Datasource to be region aware
* Moved ephemeralX.Y handling from Datasource into the cc_disk_setup, which makes it cloud agnostic
* remove verbosity of log.info
* use native python code for wiping partition table
* fix pep8
* merge from trunk
* Added ability to define disks via 'ephemeralX.Y'. Modified cc_mounts to identify whether ephermalX is partitioned. Changed datasources for Azure and SmartOS to use 'ephemeralX.Y' format. Added disk remove functionally
* cc_growpart: respect /etc/growroot-disabled
* examples/cloud-config-user-groups.txt doc fix, fix pep8
* fix permission changes
* use long format args rather than short
* Reordered several imports in order for test suite to pass
* Fix typo in mkpasswd command: '-s' was used instead of '-R' for salt rounds. Remove duplicate 'password' text
* add default user to 'sudo' group
* Fix for default user not being in the sudo group (LP: #1228228)
* pep8 fix
* Enable filesystem creation on Azure, many disk_setup cleanups
* remove non-ascii chars
* Updated the documentation on disk formating
* find_device_node: treat label=None as label=""
* change LOG.debug('format' % var) to ('format', var)
* fix one bug
* fix test to adjust for 'ephemeral0' being /dev/sdb
* demote .info to .debug, add another debug
* merge from ben. disable partition creation on smartos
* adjust aliases early rather than late
* update to get functional with any alias in a 'device' entry
* Disable partitioning of ephemeral for SmartOS at request of Joyent
* fix syntax error in last commit
* azure data source 'ephemeral0' point to '/dev/sdb', not /dev/sdb1
* update documentation
* fix probably debug code that explicitly set 'partition' to 'any'
* fix doc for smartos
* fix tests small other changes
* re-work 'ephemeral_disk' and location of builtin config
* add entry to ChangeLog
* fix pep8
* merge from trunk
* Added support for formating the ephemeral disk on Windows Azure
* fix spelling in ChangeLog
* update ChangeLog
* bddeb: depend on cloud-utils or cloud-guest-utils
* add '\n' to no key fingerprint warning
* multi_log: only write to /dev/console if it exists
* instead of just writing to stdout, write to stdout if no /dev/console
* cc_final_message: write to log debug also
* Fix usage of libselinux-python when selinux is disabled
* add support for partitioning and creating filesystems
* When selinux is completely disabled functions like restorecon raise exceptions, causing nasty things to happen on instances that boot with selinux=0. The fix is easy: simply consult is_selinux_enabled() first
* Some containers lack /dev/console, so when multi_log attempts to open that device and write to it directly things can start going haywire. Here we address this problem by sending console-bound output to stdout and letting init take care of getting it to the console instead. We already configure upstart with "console output", so we need only change systemd to use "journal+console"
* Merged in the latest changes
* Fixes for the MP
* upstart/cloud-init-nonet.conf: fix indentation
* fix read-version
* Merged in upstream changes with disk partition support
* Initial cut at disk partition support
* better checking and portability in read-dependencies and read-version
* Add OpenNebula datasource
* merge from trunk
* add entry to changelog
* All fake util.find_devs_with set before try-finally section
* Merged lp:~smoser/cloud-init/opennebula
* some cleanups and changes
* fix DataSource base class to set up ds_cfg for 'Net' sources
* Fix detection of ETHx_IP context variable, add test
* Detect invalid system user for test
* Update OpenNebula documentation (parseuser, more fs. labels, K-V single quotes)
* Configurable OpenNebula::parseuser. Seed search dir+dev merge. Eat shell parser error output. Few tests for tests for get_data
* Add support for reading 'random_seed' from data source
* populate random_seed in azure data source
* Fix pylint complain on toks.split('.')
* Replace RE context.sh parser with Scott's rewrite of bash dumper. Upper case context variable names
* add support for reading random_seed on azure also
* remove cloudinit/exceptions.py
* Add test + remove jsonschema (for now)
* Use the same method for registering custom or default handlers
* log_time: Ensure that udelta is valid before including it as a float
* tools/read-dependencies, read-version: cleanups, and use sed not grep
* Ensure udelta is valid
* Ensure validate checks key existence
* Add jsonschema for namespaced and verifiable module configuration checking as well as make most of the module logic happen in the module itself instead of interacting with the distro object
* PEP8 and Pylint fixes. Move context.sh "parser" into separate function. Fix fetching user specified dsmode (from context). Rename context_sh->context. Reuse unittests.helpers.populate_dir
* Merged trunk lp:cloud-init
* Search for contextualization CDROM by LABEL=CONTEXT
* Fix RE matching context variables. Test cleanups
* Apply parse.diff by Javier Fontan <jfontan@opennebula.org>
* Review adjustments
* Raise when no seed filename provided
* Save only 512 bytes and use different file paths for debian/rhel
* Ensure data is initialized to a dict if its empty/none
* Add config drive support for random_seed
* support base64 encoded data in the smart os datasource
* changes to behavior on specifying keys
* Fixed some typos. Change decode_base64 from sys_cfg to ds_cfg
* fix bad arguments to subp inside of apply_hostname_bounce
* Updated merge proposal with current tree
* Fixed no_base64_decode settings
* fix setting of password for a user on azure
* pylint fix
* do not set 'password', but set 'passwd' to crypt'd value
* cc_growpart: prefer growpart over parted 'resizepart'
* cc_growpart: prefer growpart over parted 'resizepart'
* add options for apt_ftp_proxy, apt_https_proxy and apt_config
* merge from trunk
* fix pep8 and pylint warnings
* remove unused imports
* remove unused import
* add tests for apply_apt_config
* remove unused LOG
* initially add support for apt_ftp_proxy and apt_https_proxy. tests to come
* reduce finding time zone file to top level distro
* merge from trunk
* Added base64 support to SmartOS datasource. Added documentation on SmartOS datasource
* add util.log_time helper
* set reading /proc/uptime to false by default
* add util.log_time helper
* add 'pyserial' to bddeb and bdrpm
* add dependency on 'serial' used by SmartOS datasource
* DataSourceAzure: do not capture output of bounce command
* Add the pyserial dependency
* azure: fix bouncing of interface
* add debian init scripts
* add --init-sytem to ./packages/bddeb
* pull in fixes for debian bug 712985
* minor azure cleanup
* azure: support bouncing interfaces to publish new hostname
* Remove duplicate timezone file finding and error raising
* update dependencies for jsonpatch
* tests: fix pep8 issue
* add test case for mime gzipped message segments
* Fix small prefix bug + jsonp tests
* Add support for merging via jsonp patch format
* rename CC_JSONP_PRE again (JSONP_PREFIX) and use CLOUD_PREFIX
* change 'json-patch' to 'cloud-config-jsonp'
* merge from trunk
* DataSourceSmartOS: fix issue if dmidecode is not present
* add SmartOS datasource supporting Joyent cloud
* shorten comments in example cloud-config
* Remove the old register_defaults function
* Only do the debug log if types registered
* Use the same method for registering custom vs default
* Add test for mime gzipped message segments
* Added blurb to documentation about the datasource
* Changed get_serial to be fully parameterized and return the serial initialized
* on azure datasource, grab use Deployment as the instance-id
* Move more functionality into get_serial()
* alias 'availability_zone' to availability-zone in metadata service
* use constants for startswith in handlers. add strip_prefix_suffix
* finalize handlers even when another handler fails
* allow individual MIME segments to be gzip compressed
* bump version in cloudinit/version.py
* Fix password setting for rhel5
* Ensure what we are searching over is a directory
* Also make the dir handler registration a simple function
* Just use an initialized array
* Use a util helper to do prefix/suffix removal
* Use constants for repeated type strings
* Just check the filename existing
* Unify filename, header replacement
* Keep filename from original part
* Ensure we reset the part after decompression
* Remove return not used
* Also handle custom handlers correctly
* Update comments + link to bug
* Init and finalize refactor
* Bump the version
* Ensure we remove the same way we detect
* Remove json-patch inclusion header if payload contains it
* Fix constant move
* Fix content-type constant
* Add usage of '#json-patch'
* Add the ability to merge with jsonpatch
* Add the ability to decompress MIME gzip
* move redhat sysvinit scripts
* Added SmartOS datasource and unit tests
* adds support for SLES plus some basic unittests
* plain text password of '' or None should not trigger setting
* fix indentation a bit in Makefile
* merge from trunk
* Azure: make /var/lib/waagent with 0700 perms
* DataSourceAzure: fix inverted logic on DisablesshPasswordAuthentication
* Use the inverse of DisableSshPasswordAuthentication for ssh_pwauth. (LP: 1201969)
* Add SysV init scripts for Debian
* DataSourceAzure.py: allow 'customdata' to be the name for userdata
* test_builtin_handlers.py: fix pylint
* upstart_job.py: fix pylint and bad bad variable in _has_suitable_upstart
* add Azure datasource
* add waiting for files and reading of crt keys
* build up the 'wait_for' list including fingerprint.crt files
* fill out load_azure_ovf_pubkeys
* mention using cached
* search in the default storage directory for cached ovf-env.xml
* populate /var/lib/waagent with ovf-env.xml
* better handling for user/password
* add stub for ssh keys
* add azure to ds list
* merge from trunk
* re-enable test case because 1124384 is fixed
* handlers/upstart_job.py: invoke reload-configuration if we can
* add some unit tests, fix things found by doing so
* merge from trunk
* fix test_nocloud testcase
* commit dev state
* Fix SLES zypper command usage
* Remove 'Copyright SUSE' from the headers
* Add support for building a SLES rpm package
* Use short option names for passwd utilities
* Add unit tests for SLES handler
* Add SLES hosts template file
* Add a SLES distro handler
* Move some RHEL distro methods to their own new file
* fix and tidy up logexc usage
* Cleanup Distro.create_user() method
* fix pep8 errors
* fix and cleanup usage of util.logexc
* ConfigDrive, Nocloud: Apply the "poke /dev/sr0" approach to /dev/sr1 also
* DataSourceOVF: small fix for iso9660 transport
* support optical drives with dev node /dev/sr1
* Fix chef omnibus installation support
* open 0.7.3
* Fix Chef client 'omnibus' install; util.write_file() expects a string not UrlResponse
* remove executable on logo.svg

0.7.2
-----

* mention new merge format in ChageLog
* Fix how the 'dist' is incorrectly returned when patching the os functions
* Fix how python 2.6 was broken due to new dict syntax
* Fixed merging capabilities
* fix pylint
* fix pep8
* Allow lists to have no_replace option
* Adjust comment on why we are merging cloud config the way we are
* Fix the cloud config merging so that it is backwards compat
* 1 more test that does some list appending
* A few more test files
* Add a set of randomized (seeded) dict tests
* Fix a feature that doesn't yet exist on python 2.6
* A few pep8/pylint cleanups
* Rename the merge cc sample function name
* A few more tests + cleanings
* More merging adjustments
* Fix issue in readurl with requests, support passing through headers_cb
* fix test
* re-work maas datasource and headers call backs
* Add a bunch of new merging test files + runner
* Continue working on merging
* Remove str merging for now
* Pull from head and a couple more tweaks
* Adjust how merging is done
* Handle namespacing issues in merger
* Altering the order of merging
* add debug output to ccfg-merge-debug
* Handle namespacing issues
* improvments to systemd/fedora 18 support
* tools: fix [some] shell quoting problems
* tools: fix [some] shell quoting problems
* add merge debug tool
* invoke dist-upgrade instead of upgrade for apt upgrades
* invoke 'dist-upgrade' instead of 'upgrade' on for upgrades
* Fix the default string used for merging
* PEP8 fixes
* Apply pep8.patch by Javier Fontan <jfontan@opennebula.org>
* compatibility fixes for Fedora and RHEL
* handle errors in cc_reizefs better
* cloud-init-nonet.conf: handle case where sleep died
* fix brpm and bddeb by knowing about 'python-requests'
* use 'requests' rather than urllib2
* pep8
* remove some churn
* Add doc about issue 1401 in boto
* Move back to using boto for now
* fix typo
* make get_instance_userdata and get_instance_metadata more like botos
* set 'allow_redirects' to True by default
* do not bother retrying on ssl errors
* appease pylint and pep8
* merge from trunk rev 800
* pylint fixes
* merge from trunk at revno 799
* Fix how the http error doesn't always have the response attached in earlier versions of requests (pre 0.10.8)
* Update to handle requests >= 1.0 which doesn't use the config dict
* fix / workaround potential for socket.getaddrinfo to raise socket.error
* refactor get_mount_info and add tests
* skip unit test due to LP: #1124384
* util.parse_mount_info(): add unit tests
* util.parse_mount_info(): handle short lines
* Refactor util.get_mount_info() to facilitate unit testing
* Enable the merging.txt to be in .rst format for public viewing
* support different and user-suppliable merging algorithms for cloud-config
* more pep8/pylint. all clean now
* fix pep8 and pylint
* change default merge type
* merge from trunk
* pep8
* fix a pylint complaint in test_handler_growpart
* allow customization of apt-get command, add --force-unsafe-io
* pep8 and pylint fixes
* Add some nice docs on what this is
* Make conf.d and the default merging use the new merging algos
* Continue working on merging code
* Add in a bunch of changes and tests
* add 'growpart' config module
* fix ChangeLog entries incorrectly added as 0.6.0
* pep8, pylint, make resize_devices return more useful
* add doc
* change default mode to 'auto'
* remove 'log' passing. call growpart with --dry-run first
* change default (no 'growpart' in config) to use 'auto' and '/'
* test of resize, a couple small fixes
* add the unit test, fix a few issues
* merge from trunk
* upstart/cloud-init-nonet.conf: handle SIGTERM gracefully
* add uptime to msg output
* if sigterm received, and networking is up, exit 0
* more work
* add default log value to get_mount_info
* fix an issue where keys were not being parsed correctly
* fix reversed logic
* remove debug code
* merge from trunk
* fix regression on expected label of filesystem for DataSourceNone
* change parser.parse 'default_opts' to 'options'
* move function to a static list, comment where it came from
* add some unit tests, fix an issue or two
* initial stab at growpart module
* skip unit test due to LP: #1124384
* Support resizing btrfs filesystems
* do not reload upstart configuration on upstart jobs
* Remove commit "Add resolv.conf configuration function"
* Fix the maas callback mechanism now that requests is used
* Get tests working and further adjustments
* Why did this file showup
* Update to code on trunk
* More work on requests integration
* Few patches to make life on Debian 6 stable happier:
* Split Debian and Ubuntu APT sources
* New option INIT_SYSTEM=sysvinit_deb for Debian /etc/ directories
* Remove TODO
* Example cloud.cfg
* Modify init-scripts to be able to run both on RHEL and Debian
* Added arguments to packages/bddeb: -d pass through '-d' to debuild --no-cloud-utils don't depend on cloud-utils package (default: False)
* Minor OpenNebula DS cleanups (style, dsmode, static network)
* OpenNebula documentation tuning
* Add OpenNebula DS on list of datasources
* OpenNebula datasource documentation update
* Continue working on integrating requests
* Merged trunk lp:cloud-init
* Test for more variable types in OpenNebula unit test
* New unit tests for OpenNebula data source
* Context.sh parsing cleanups, fix single quotes handling in multiword variables
* Name unification Context.*Device -> Context.*Disk
* Change network ifaces detection from ifconfig to ip command
* DataSourceNoCloud: allow setting user-data and meta-data in config
* more test cases for nocloud including one for config seed
* add test_nocloud unit tests, fix one issue found
* user-data doesn't merge in from meta-data (typo)
* Add initial docs about datasources
* Continue adding datasource docs
* Add initial docs about datasources
* make config of nocloud datasource able to specify meta-data and user-data
* upstart/cloud-init-container.conf: ensure /run/network exists
* Changelog: reformat to limit to 80 chars wide
* doc: fix example in cloud-config-write-files.txt
* Adding package versioning logic to package installation
* Support package versions for the generic package config module
* Fix broken cc_update_etc_hosts
* Support resizing btrfs filesystems
* Include the resolv.conf example
* config/cc_resolv_conf: run PER_INSTANCE rather than PER_ONCE
* add entries to ChangeLog
* Adding package versioning logic to package_command
* Don't forget the hacking 'inclusion' file
* Integreate HACKING into the rtd site
* Adding a resolv.conf configuration module (LP: #1100434)
* Add a HACKING file (in rst format)
* Adding a doc example for resolv_conf handler
* Moving HACKING to restructured text
* Remove the release for now
* Fix the release variable
* Make the logo better
* Add docs which can be used on readthedocs.org
* Add in a tool to help make mime multipart messages
* Add in a tool to help make mime multipart messages
* Add support for operating system families
* Adjust how the legacy user: XYZ config alters the normalized user list
* Fixing missing argument to get_cfg_option_bool
* Adding a resolv.conf configuration module (LP: #1100434)
* DataSourceConfigDrive: consider CD rom as valid config-drive source
* Fix broken cc_update_etc_hosts (LP: #1100036)
* cleanup a pep8 failure
* add support for operating system families
* Add a HACKING file
* tests: Add a context manager function in test helpers
* Add a context manager function in test helpers
* Allow 'sr0' to be specified as a device for mounts
* DataSourceCloudStack: fallback to default route if no virtual router found
* fix 'lock_password' for cloud-config user setup
* fix redaction of password field in log (LP: #1096417)
* Fix the password locking logic
* Make which fields are redacted come from a field array
* Append DNS related stuff to network interfaces configuration. Minor cleanups
* Support for sr[0-9]+ short device names
* Add OpenNebula.org copyright
* Add OpenNebula contextualization options to cloud-init
* Add resolv.conf configuration function
* Fix exception handlers for data read. Fix name read_context_disk_dir
* Change subp exception handling to util.ProcessExecutionError
* Add explanation on how context variables parsing works
* Change context variables .replace with .decode
* Remove conflicting merge block
* Merged trunk lp:cloud-init
* add ChangeLog entry for previous commit
* DataSourceCloudStack: use virtual router rather than default route
* cloudinit/handlers/upstart_job.py: pep8 / trailing whitespace
* tell upstart to reload configuration after writing an upstart job
* ensure a datasource's 'distro' and sys_cfg are updated
* Add 'omnibus' install mode for chef
* Provide a mechanism for puppet to be conditionally installed
* Provide a mechanism for puppet to be conditionally installed
* add 'omnibus' as an install type for chef
* cloudinit/stages.py: separate _read_base_cfg() into static function
* write-ssh-key-fingerprints: use logger -s rather than --stderr
* replace if..else based on presense of /etc/redhat-release with use of -s
* merge from trunk
* ChangeLog: mention fix of lp:1079002
* make sure no blank lines before cloud-init entry in ca-certificates.conf
* Check for running inside RHEL and adjust the logging options
* More cleanups
* Allow mergers to take options
* Add which files the yaml blob came from
* Adjust naming and exception catching
* Change the yaml merge header extraction to be in a sep. function that can look in more places
* Continue work
* Select merge-type from either header or content after loading as yaml
* Continue working on merging prototype
* Start allowing different merging types to be applied
* fix "resize_root: noblock"
* pep8 and pylint
* add 'sudo' entry for default user in default config/cloud.cfg
* Strings are iterable..
* Raise a type error when a sudoers rule is not an accepted type
* Cleanup the tests slightly
* Add the string sudoers rule test case as well
* Add a test to make sure this doesn't happen again
* Fix sudoers being written multiple times when strings are used
* Add a check on the changelog version comparing to the code version
* Add a check on the changelog version comparing to the code version
* Bump the version to 0.7.2
* add debian watch
* open 0.7.2
* set shell for default ubuntu user to /bin/bash

0.7.1
-----

* Create a utility testcase class that fixes some of the 2.6 missing pieces
* Create a utility testcase class that fixes some of the 2.6 missing pieces
* Only attempt to read the previous hostname file if it exists
* Update how errors are handled when writing and reading hostnames
* Only attempt to read the previous hostname file if it exists
* check for a marker file by the normal name also
* make migrator walk the "cloud" path also
* support 'power_state' cloud-config for specifying shutdown
* use os.devnull [trivial]
* Even when using boto < 2.6 force the unlazying to occur
* add sleep, allow errno '3' (ESRCH) on the open of /proc/pid/cmdline
* Even when using boto < 2.6 force the unlazying to occur
* clean up exit to single function call
* fix read of /proc/cmdline
* 'name' for default user must be all lower case
* merge from trunk
* fix bad dependency added during the boto fix
* add dependency for 'pkg_resources'
* sort PKG_MP entries
* implement power_state with tests
* pep8 and pylint
* rename module 'finalcmd' to power-state-change
* merge from trunk
* Use a set of helper/parsing classes to perform system configuration
* replace 'with self.assertRaises(Exception):' with different form
* Remove these lines which are not needed
* Update the changelog with functions moved
* Pylint and pep8 cleanups
* Fix variable
* Rebased with HEAD and resolved conflicts
* pass execmd a list, not tuple or string
* Remove dup and un-needed entries
* add 'finalcmd' module for running code after cloud-init-final
* pylint and pep8 fixes
* Append changelog additions
* Cleanup of /etc/hosts ordering and pep8/pylint adjustments
* Update changelog for previous commits
* Update changelog for previous commits
* change the "null datasource" for stages.py to None
* test_handler_yum_add_repo: fix broken test
* stages.py: fix issue that resulted in broken data source searching
* mark changelog entry for lp:1075980
* config-drive-v2: support public keys
* pep8 and pylint fixups
* REVERT revno 714: config-drive-v2: populate metadata['public-keys'] from 'public_keys'
* wrap boto.utils.get_instance_metadata to ensure non-lazy loading
* add ChangeLog entry
* add comment to get_instance_userdata reguarding empty/un-provided userdata
* merge from trunk
* config-drive-v2: populate metadata['public-keys'] from 'public_keys'
* whitespace / indentation cleanups
* add yum_add_repo configuration module
* 1 pep8 and 1 pylint fix
* revert unrelated whitespace changes that creeped in
* sync with trunk
* Add 'migrator' for handling config name changes and consistency
* update ChangeLog
* Sudoers.d creation cleanups + tests
* Fix the merging of group configuration
* Fix the merging of group configuration when that group configuration is a dict => members
* Fix pep8 warnings
* Fix the fqdn/hostname case for rhel and ubuntu where rhel uses the fqdn for its config while ubuntu uses the short hostname
* Fix the none return problem
* Forgot the test!
* Fix the case where on a redhat based system the fully qualified domain name should end up in /etc/sysconfig/network by passing the fqdn to the update and set hostname methods and using it accordingly
* Ensure that at needed stages the local variables of the init class are reset so that when they are regenerated that they will use the updated data instead of using previous data (since they weren't reset)
* Add non-zero exit code when bad yamls are found instead of returning zero in that case
* improve zsh support in tools/Z99-cloud-locale-test.sh
* work with zsh by using 'emulate -L sh'
* remove unused variable 'cr'. fix usage of 'value' to local 'val'
* revert old zsh fix (revno 697)
* 1. Ensure that the sem_path exists and is actually a valid value returned. 2. Adjust variable naming
* 1. Check the name and not the full path when applying the canon routine. 2. Add in a function to migrate legacy semaphores to new semaphores
* Start adding a 'migrator' module that can be used to aid in the moving of older versions of cloud-inits data to newer versions of cloud-inits data
* Add a makefile yaml checking target and fix the cases where the cc yaml is not correct
* 1. Rebased with trunk 2. Added example cloud-config 3. Added functioning test for yum config
* remove dead code from DataSourceEc2
* test and path cleanups
* trivial: -name first is faster due to no need for stat
* Add a more generic package install mechansim
* adjust documentation to account for apt/package aliases
* merge from trunk
* add ChangeLog entry
* update config to address name change
* fix pep8 warnings
* support unicode in user-data input of unknown types
* Do the append after escape
* Use a method instead + at least attempt the unicode-escape path
* Fix the case where a unknown type is seen and it has contents which are in unicode which seems to cause python to blow-up when this happens since 'string-escape' doesn't work on unicode (at least in 2.6)
* tools/Z99-cloud-locale-test.sh: avoid warning when shell is zsh
* Helpful cleanups
* Move the comment to the top + mark as fixing
* Remove function that shouldn't have shown up
* Handle the case where newer versions of boto are used that lazily load the metadata from the ec2 metadata service
* use only util methods for reading/loading/appending/peeking
* Add helpers for wrapping file operations
* No need for the get default users groups function when its provided by the get user function
* multipart or cloud-config-archive, do not fail on unknown headers
* restart landscape after config or install
* Make sure that /etc/sudoers.d is used by /etc/sudoers
* Restart landscape at the end of the configuration
* tweak default ubuntu user
* fix pep8/pylint
* move default user info out of code and into config
* More cleanups for using the requests module
* Fix the checking and capturing of exceptions
* Fix the requires after using requests
* Use the python requests lib instead of urllib3 since it provides the same support (and it uses that library). Urllib3 doesn't seem to exist as its own package (requests hides it) so solve that by using requests and handling its oddness ourself
* Remove the need for boto just for fetching the userdata and metadata. Add in this crawling functionality to the ec2_utils module that will fully crawl (not lazily) the ec2 metadata and parse it in the same manner as boto
* Start fixing how boto and our url fetching can not use ssl correctly (they can not do validation due to the underlying usage of urllib/httplib). Adjust to use urllib3 which can in cloud-init url fetching. For now also take the metadata/userdata extraction code from boto (small amount) and fix it in a new local file called 'ec2_utils'
* More cleanups, fix header function
* Make the yum value 'string' translation a function
* Add in a created by cloud-init header
* Move the recursive flushing to the log module
* Add a more generic package install mechansim that removes some of the code in apt_update_upgrade to do upgrades and installs and places it in a generic package module and adjusts some of the reboot backoffs and log flushing/sleeping that was happening there
* Update comments as to why format is the way it is
* Fix copyright
* Remove some pylint buggies
* Add in a configuration module that can write out the yum.repo format for those that want to hook into different repos for installing
* cc_landscape: do nothing if config not give. install landscape-client
* Skip install when there is not configuration, and install the package to be setup properly
* Add some more sysconfig tests + pylint cleanups
* Fix the single item string quoting function
* Handle the case where the value contains shell variables to be expanded which when using pipes.quote will now not be expanded, so add some checks to ensure that this case will still happen
* Update to use pipes.quote to ensure that variables adjusted in sysconfig files are properly quoted for there common use case, that being sourced into shell scripts
* Update log message to use the more appropriate 'non-persistently' wording
* More adjustments/cleanups for the system configuration helper objects
* Add comment explaining why the '_apply_hostname' function will not be permanent and catch the exception that occurs if it fails and log that instead of blowing up (which isn't typically useful for something that is temporary anyway)
* Add comments as to a future refactoring of this function that needs to occur since its pretty much the same now
* System config niceness!
* Fixed typo on dict value reference
* Make the subrelease a new k/v entry that is handled differently in the rpm spec file template instead of being joined with the release
* Add the ability to have a 'private' release number which can be to increment cloud-init while still maintaining the 'major' cloud-init version number from bzr
* Bring in the config drive fixes so that it adjusts the fstab correctly and adds tests in that verify the actions that should happen (also tested on a real system)
* Pylint cleanups
* Add checks around the device names that are found to ensure that even if they are found that they are also valid, before they are assumed to be the correct device name
* Add tests to show that the assigned bug is fixed
* Ensure that config drive datasource attempts to translate the device name to a actual device using logic that will try the ec2 metadata (if avail) or will try using 'blkid' to find a corresponding label
* Merged brpm changelog fixes
* Ensure stderr newline
* Only allow the first missing version to use the datetime.now(), the others get a warning message
* Leave off creating fake headers for unknown versions since this causes rpmbuild to croak with errors like 'changelog not in descending chronological order'
* bump version to 0.7.1
* update ChangeLog for previous 2 commits
* sysvinit: fix cloud-init job for RHEL 5.6
* config-drive: map hostname to local-hostname
* For now pull this in
* Ensure that for config drive that we map 'hostname' to 'local-hostname' so that the modules work correctly with the cfgdrive style of data
* For the cloud-init rc.d ensure that the cloud-init-local mode is attempted as a hard requirement (instead of the previous soft requirement) which in the rhel5.6 case makes it not run in the right order
* Minor OpenNebula's documentation tuning
* Add documentation for OpenNebula datasource
* Delete hyphen
* Delete old ConfigDrive's code

0.7.0
-----

* fix tools/make-dist-tarball
* fix oauth time skew. actual implementation was returning 401 not 403
* Ensure that the include dir starts the line and is not a part of a comment or other part of the line
* rework the rest of the users of old single 'user' to support lists
* [pylint]: remove unused import
* Update the log statement used here to be a little more relevant
* Dir should be 0755, not 0440
* Ensure that the directory where the sudoers file is being added actually exists before it is written into and ensure that the directory is included in the main sudoers file
* Sync with head and fix conflicts
* Make byobu more tolerant of the user not being located and warn when it is not found + only run the shell command when actual contents exist to run
* Add a comment as to why distros can't be imported without being renamed due to previous usage of the attribute 'distros'
* make DataSourceMAAS 'main()' use load_yaml
* Rework the rest of the locations that used the previous 'user' and make those locations go through the new distros functions to select the default user or the user list (depending on usage)
* fix pep8 and pylint
* add 'safeyaml' to cloudinit
* rpm spec and rpm build, better handle case with no package_mirrors
* Also ensure that if mirror info is not invalid before we start iterating over it (it could be sent is as none)
* Stop the bad habit of using 'or'
* restart salt-minion instead of start
* cleanup the user/group lists
* Add a nice '-p1'
* Ensure the patches get activated
* Adjust comment
* Fixup some pylint warnings
* Add a new example test that will patch utils and os functions so that they can be 'retargeted' to a temporary directory, which allows us the ability to run a full set of cloud-init stages
* Clean doesn't seem needed
* Add a top_dir define
* add tests for netcfg code
* Fix tests after resync with head
* Resync with head
* Fix cheetah syntax error
* Allow package_mirrors to be non-existent
* Fix syntax error
* Add the ability to pass patches to the rpm builder utility
* Adjust the fingerprints to use this new user normalization function instead of the previous 'user' extraction
* Avoid rechecking if old users is availabile
* Handle the case where 'user' is defined but 'users' isn't
* Fix pylint issues created
* Add a netconfig format test + if rhel is passed the 'all' device name, throw an error since rhel can not currently handle this case
* Update to bring inline with trunk/head
* Refactor the ug normalization to take in a distro and produce a user and group list. Clean this up to be simpler as well as handle the old 'user' case when it exists in configuration
* cleanups for rhel network config
* fix pep8
* Oopies, missed u
* Bring up to date with trunk
* handle ifup on RH distros by iterating over 'ifup devname'
* DataSourceMAAS: if a oauth request fails due to 403 try updating local time
* fix pylint
* fix make pep8
* write-ssh-key-fingerprints: do not send HOST KEYS through logger
* do not create 'sems' directory. 'sem' is proper instance/ path
* send stderr from write-ssh-key-fingerprints to stdout
* fix permissions on /etc/sudoers.d file to be 0440 not 0644
* Process userdata, ignored by mistake
* Make the normalization a module level function since it has little dependence on the distros class itself. Readjust the using code to use this new module level function instead
* Use 0440 permissions on sudoers, not 0644
* Don't forget the etc/hosts test
* Add in another helper that can understand the 'etc/hosts' format and add in a unit test to make sure that format can be correctly handled and added onto in a nice manner + update the distro code to use this new code instead of the previous function that did the same thing
* Fix some docs + pylint warnings + log on default created in the module
* Also allow the user list to come in as a comma separated list so that its types match more of what the group list can be
* Actually commit the test for user/group data normalization instead of forgetting about it
* 1. Cleanup the user creation so that the distro class is responsible only for creating users and groups and normalizing a input configuration into a normalized format that splits up the user list, the group list and the default user listsand let the add user/group config module handle calling those methods to add its own users/groups and the default user (if any)
* Use only util methods for reading/loading/appending/peeking at files since it is likely soon that we will add a new way of adjusting the root of files read, also it is useful for debugging to track what is being read/written in a central fashion
* Remove the need to have 'default_user' and 'default_user_groups' groups be hard coded into the distro class, instead let that set of configuration be located in the config file where it should be specified instead
* Instead of special casing the empty list we are going to check for the 'all' entry and if that exists then only fire off one call (since debian supports this)
* Pylint cleanups
* Add a resolv.conf parser that can be easily used for adjusting a resolv.conf formatted file and use this to adjust the resolv.conf in the redhat distro instead of replacing the previous resolv.conf completely
* Configurable dsmode. Resolve IPv4 hostname only with dsmode=net
* Initialize toks variable. Fix EC2-like hostname generation based on IPv4
* Use a common header creation function to avoid duplicating the same code in this file
* Rework the rhel sysconfig writing/updating so that it goes through a single function which helps ensure correctness. Also write to /etc/sysconfig/network when we have written out devices to ensure that networking is on
* Fix the ifup so that if a list of devices is provided then each interface is brought up individually instead of using the '--all' which isn't on rhel. The default debian behavior will be to use this still though as it overrides the new bring up interfaces function for this case
* if a logged message fails, fallback to logging to stdout
* doc: document 'tags' as comma delimited strings
* First thing that we do after we can start importing is to patch the functionality before it gets reimported
* Get the fallback working
* add general signal handlers
* do not disable logging on signal
* remove unit test
* change exit messages to include signal name
* Adding a dual fallback log handler that will be monkey patched in to replace the base handler. That patching isn't quite there yet but WIP
* fix 'update_package_sources' on rhel to only update package sources
* Add the translation from the ubuntu format for nameservers and dns search
* do not write a comment in /etc/hostname
* Actually download yum metadata with update_package_sources
* write trailing newlines on generated files
* Add support for 'selinux_user' key to useradd cloud-config syntax
* Use and resolve PUBLIC_IP from context disk if no HOSTNAME is specified
* Optionally resolve IPv4 hostname
* fix incorrect ubuntu mirror locations for 'ports'
* Fix ports.ubuntu.com mirror locations
* Make update_package_sources stop upgrading packages on RHEL
* Add support for useradd --selinux-user''
* Fill in basic info for the Fedora distro
* Cleanup pylint warnings
* Add a basic signal test and write out all the signal information in one block instead of many
* only write landscape config if user-data provided
* fix hostname based on IP generation
* remove 'start networking' from cloud-init-nonet
* Fix hostname derived from IP. (LP: 1050962)
* remove trailing whitespace
* only emit if there is a device present
* add cloud-init-container.conf
* Initial support for OpenNebula's contextualization disk
* Fix pylintness
* Add capturing of basic signal handlers to handle those signals more gracefully and with better messaging than what comes builtin
* do not convert type None to string in cfgmnt
* add 'RUN=1' to /etc/default/landscape-client
* Check if the config was specified
* Add RUN=1 to the default file
* improvements for launch index, one fix for cloud-archive
* remove 'admin' group for ubuntu user, fix change password
* Fix pylint complaints
* Add some examples on how to use the new launch-index support in a cloud-archive format as well as a cloud-config format and explain how this will affect the final userdata available to an instance
* 1. Add a helper for tests to use to load resource/data files from 2. Add a set of tests+data that ensure the launch index filtering works as expected in the various modes including raw yaml and via mime/email message formats
* When a parts content type is found to be different than its original content type said it is, make sure we set the new value, also unsure if the old top level message should have the same header (which will flip-flop)
* Don't look into cloud-archive (after processing) for launch indexes (since they will be handled beforehand) and fix the types being checked on the root of the archive format to be a tuple instead of a list (which oddly causes complaints)
* Removed admin group from default Ubuntu user group list. Fixed change password behavior to work with new user list handling (LP: #1044553)
* support launch index specific user-data
* usergroup related fixes
* incorrect example in doc
* fix pylint warning
* - Converted user list to user dict to allow exclusion of the default user on Ubuntu systems via cloud-config (LP: #1041384)
* update systemd unit files
* Don't use walk and handle the walking ourselves to ensure that we recreate all child messages correctly if they also contain submessages, ensuring that we don't flatten the message list when we previously used walk
* fix busted cc_ssh_import_id
* distros/ubuntu.py: remove unused import (pylint)
* For the userdata 'post-filtering' add in a new folder that can contain filters that serve this purpose only and add in the initial launch-index filter and replace the code in the datasource class that previously did this
* move user-groups section from cloud-config.txt to its own file
* fix bug preventing public_keys from being imported for to-be-created users
* clean up a bit, fix issue with missing 'log' argument to ssh_import_ids
* Fixed critical bug where user and group creation was being done after SSH configurations were applied. The result of this bug was that cloud-config supplied SSH public keys would fail to apply since the configured user may or may not exist. (LP: #1042459)
* DataSourceEc2: require 'instance-data' as top level domain
* Update so that the content types searched for launch-index variable has a little more meaning and by default look in metadata for 'launch-index' and have ec2 instead look for a different variable (thus allowing more datasources to just work)
* Ensure when an archive is exploded and if it contains the 'launch-index' key that we copy that key over to the right header (which will then be used later when assigning the 'real' header when the message is attached)
* Fix tests running and add in a check on the content type before we look into the payload as well as make the skip test a function that the datasource module can also use
* Don't use the processed userdata if nothing is there
* Add the capability to understand and filter on userdata based on a launch-index (or leave userdata alone if none is provided by the datasource). This works by doing the following
* add support for the config-drive-v2 datasource
* add changelog entry
* fix test case for copy of uuid -> instance-id
* use openstack metadata version 2012-08-10 unless not available
* use instance-id, not previous-instance-id
* use 'uuid' as 'instance-id'
* committing in preparation for actual test
* some more tests
* fix pep8 and pylint
* initial functional unit test
* add support for creating initial users and groups
* cc_ssh.py: add the "get user zero" logic, disable root even if no user
* do not attempt the useradd command if user exists
* pep8 fixes
* fix duplicate flags being passed to useradd
* remove now pointless __init__ in ubuntu
* distros: add_default_user is no longer abstract
* fix issues from 'make pylint'
* fix errors from 'make pep8'
* Simplified users[0] detection, and ensured compatability with previous user password control code
* Fix the userdata population in DataSourceNone
* add apt_reboot_if_required to reboot if required
* rework package mirror selection
* improve the check for "uses unknown key" in mirror templates
* fix for pep8 issues and seemingly functional now
* merge from trunk for pep8 fixes
* fix pep8 complaints
* Fix the userdata being populated to a dict (incorrect) and let it instead be populated by the userdata processor with the raw userdata (either empty or datasource config provided)
* return results from datasource.get_package_mirror_info
* add test
* rework package mirror selection
* fix pylint in cc_ssh_authkey_fingerprints.py
* remove committed conflicts in previous merge
* Implemented MP feedback
* remove duplicate printing of authorized keys to the console
* authkey_fingerprints: Fix columns headers, do not print empty lines
* Add the "None" datasource
* Dropped hidden command; replaced with logstring. Also changed useradd command to use log options over short
* fix config for proper spelling of 'authkey'
* Added "userless" mode to cloud-init for handling the creation of the users and the default user on Ubuntu
* mark bug 1010582 as fixed
* add ssh-authkey-fingerprint config module, to print fingerprints to console
* Remove the matching of the filesystem dep and add in the ability to use any fallback userdata or metadata found in the datasource config (if provided)
* Fixup the columns and add a check to make sure that a key given is one that we actually want to print out. Also add in a config option which lets people select a different hashing method (not md5 if they want)
* Add a 'none' datasource as a last resort fallback
* Add support for printing out the authkey's for the default user
* doc: move datasource documentation to doc/sources
* Add RHEVm and vSphere support as datasource AltCloud
* move cloud-config event to a config module
* add test to excercise udevadm usage
* Add the translation from the ubuntu format for nameservers and dns search servers and add in the writing of /etc/resolv.conf in rhel from that translation
* Address review feedback for: https://code.launchpad.net/~joev-n/cloud-init/altcloud-changes/+merge/116542/comments/255564 https://code.launchpad.net/~joev-n/cloud-init/altcloud-changes/+merge/116542/comments/255565
* Adjustments so that the default old event is used when no args are provided. Adjust the config file to use this older method so that older changes aren't needed. Also when calling 'initctl' emit fails log the exception message so that some useful warning information can be produced
* Move the code that did the 'cloud-config' upstart event name emitting to a config module and make it more generic in that it can take in a list of event names to emit as arguments. Add a yaml example to replace the functionality removed from the main binary
* fix pylint in all files used by ./tools/run-pylint
* stright forward pylint cleanups to tests/ and tools/
* test_util: add pylint ignore for FakeSelinux
* pylint: setup.py
* Address review feedback for: https://code.launchpad.net/~joev-n/cloud-init/altcloud-changes/+merge/116542
* add protection against dns-redirection to is_resolvable
* re-add the 'main' routine to DataSourceMAAS.py
* systemd: disable timeouts so cloud-config jobs have time to finish
* systemd: update program calling formats
* systemd: write stdout to tty so it shows up in GetConsoleOutput
* use get_cfg_option_bool for apt_mirror_search_dns
* add uptime to the output of cloud-log-shutdown
* do not search for mirror named '<distro>-mirror' in dns by default
* mention that upstart job cloud-config emits cloud-config
* emit the cloud-config event again
* add an upstart init job that logs shutdowns and reboots
* Add documentation for RHEVm and vSphere
* pep8, pylint... AltCloud source changes
* Add retry logic to DataSourceAltCloud
* Added RHEVm and vSphere support as source AltCloud
* improve debug via _CLOUD_INIT_SAVE_STDIN and _CLOUD_INIT_SAVE_STDOUT
* DataSourceEc2: fix bad usage of log that caused trace
* packages/bddeb: support building source package
* packages/bddeb: fix pep8 warnings. no other changes
* walker_callback: fix traceback on empty payload
* load_yaml: if conversion fails, but string is empty, return default
* DataSourceOVF: again fix broken commit
* fix bad variable. should be 'LOG', not 'log'
* DataSourceOVF: do not log exception on failed mount
* do not capture runparts output
* add write-files module for "injecting" files (LP: #1012854)
* Update the write files with the new content/compression handling
* Fix log message after 'write_files' key change
* Adjust the decoding of the files that are given so that a canonicalize happens first, which will examine the incoming encoding, and decide the neccasary decoding types needed to get the final resultant string and then use these normalized decoding types to actually do the final decode
* Tweaks to sysvinit so that cloud-init-local will run before cloud-init, but there will not be a strong dependency between them if cloud-init-local is missing
* Change the welcome message to be slightly different when running in local mode vs non-local mode, which is useful when tracking what is happening in the console and in the logs that are written out later
* Fixes 1012854 by implementing file writing, adjusts other code to have user/group parsing in util instead of in stages.py, renames decomp_str to decomp_gzip since it is more meaningful when named that (as thats all it can decompress)
* Remove the usage of set,list,dict and use the collections iterable which performs the same, but can handle iterator types beyond those three
* re-setup logging to address cloud-config changes input via user-data
* send welcome message after logging has been applied
* fix regression in logging code
* debian packaging: use X.Y.Z~bzrREVNO rather than X.Y.Z~REVNO
* cc_resizefs: show more specific time
* util.close_stdin(): Use the common 'is_false' routine for testing false
* Return a more useful name for the file lock
* Add a comment/todo for the future, that instead of having distro specific modules in cloudinit, that maybe we should encourage a 'config' website or something similar, and let people host common modules they find useful there, and keep the ones built-in to cloud-init completly distribution agnostic
* debian/control.in: accept software-properties-common (LP: #1021418)
* Use the common 'is_false' routine for testing false here instead of a custom list that may confuse people trying to use this
* Return a more useful name for the file lock (which shows what file is being locked)
* Add a comment/todo for the future, that instead of having distro specific modules in cloudinit, that maybe we should encourage a 'config' website or something similar, and let people host common modules they find useful there, and keep the ones built-in to cloud-init completly distribution agnostic
* Add more information about why we are returning early and why we don't convert a string that is a filename to a string buffer/io like object
* do not warn to stderr if one of the logging configs works
* cloud-init: do not warn on failure to find local datasource
* fix bddeb and brpm: by renaming packaging files that are templates
* cc_final_message: fix pylint issue
* url_helper.py, cc_rightscale_userdata.py: reduce WARN to DEBUG
* update Changelog
* add header/explanation to templates/chef_client.rb.tmpl
* Revert back to using cheetah + adjust resultant code + templates
* Adjust the sysvinit local script to provide 'cloud-init-local' and have the cloud-config script depend on that as well
* Makefile: change deb and rpm targets to not change working dir
* add python-setuptools to debian build-depends
* brpm: Add printouts which match the 'bddeb' package builder
* Get the debian package building working again
* include ~bzr in make-tarball output tarball and top level dir
* get 'brpm' working again. update make-tarball to have a top level dir
* rework packaging tools to find the right cloud-init topdir
* Update chownbyname to catch the key error when users/groups that are not known are provided and rethrow it as a OSError (which seems reasonable) and adjust its usage in the log file touching/permission modification stage to catch this error and log it
* fix 'make pylint' warnings
* DataSourceEc2: only do dns check in mirror selection
* fix tools/run-pylint to just check all python fines
* Got this working for 'brpm' again
* Reworking these to look attempt to find the right parent directory, as well as adjustments due to sysvinit rename
* Fix the initsys variable, setuptools/distools will automatically assign to a variable of the name 'init_system' instead due to the param name being 'init-system'
* setup.py: rename "daemon type" to "init system"
* Add comment about keeping track of what people think about the 'read' and 'write' root, and if it confuses them, remove it later and just recommend a more 'natural' way of doing it (ie 'chroot')
* Updated so that if no mirror is found, the module stops running
* 1. Make the debian rules file a template (and pass in the daemon-type) 2. Adjust the bddeb to pass this in (as well as other output statement being added) 3. Adjust make-tarball to only archive the bzr versioned files (using --recursive)
* Remove the useless function printout
* Add a check on 'chownbyname' that catches the keyerror and logs it (instead of failing)
* When the hostname is also the ip (thus no hostname) just use 'localhost'
* 1. Cleanup of some mock functionality 2. Adding in returning the 'public-keys' to the metadata 'list' response 3. Adding in sending back the running users keys (useful for testing) along with 'brickies' 4. Add in a traverse function that can walk down a dictionary (if possible)
* Add the ability to have setup.py have a CLI option that specifies the daemon type which then later affects the installation of certain config files, which then can be extracted during package creation as needed
* 1. Update the mock ec2 data with some of the pubkey code from smosers ec2 metadata server. 2. Allow the setting of the ip addr (not just to 0.0.0.0) 3. Add comment as to how to use this for the 169 'magic' addr
* Add a check on the filename provided ensuring it actually exists
* Update the mock metadata server to return a file (or the default generated content) for the userdata blob
* Add a sample yaml config to be used for testing
* 1. Fixup the setup.py to not include custom startup scripts, let the packaging solutions handle these 2. Get the cloud-init specfile working for the init.d case (with the right postun and post and install sections) a. It works!!!
* 1. Move the welcome message template string to a constant at the top of the module 2. Fix the usage of multi_log to log to only one of the places (for now) 3. Update comment about multi-log and why write_file isn't used in this case
* Adjust the changelog after adding 'hacking.py'
* Add a nova/openstack based extension to pep8 via hacking.py
* Always read fro the cloud config location + conf.d locations
* 1. Rename util functions to is_true and is_false 2. Move the config loading functions to where they are used (in stages) 3. Adjust cc_set_passwords to use the is_true and is_false renamed functions 4. Adjust the init stage to have a _read_base_config function used to load the base 'initial' configuration from the following locations a. Kernel cmdline b. Conf.d location (+ the cloud.cfg location) c. Built-in configuration
* Add a multi log function that can write to stderr, console and a log debug, useful in certain cases
* Add in more comments about what has been changed/adjusted/reworked
* Add comment about #includeonce/#include bug/change
* Add some more TODO to be done in the future
* Include the helpers import
* Refactor the selinux guard to aid in mocking
* Update the todo with comments on new actions to be fixed
* Start filling out the 0.7 changelog section
* add update_package_sources to distro class
* If logging hasn't been enabled via '--debug' at least log the exceptions that occur to stderr
* Remove logging of module/init configs
* Why is this asking me about this..
* Just log the number of commands 'shellified'
* Don't remove the key if its not there (or was already removed)
* Add a force option which will allow users to continue running when no datasource is found
* packages/bddeb: fix broken bddeb
* Fix the datasource not being fetched in single running mode
* Don't show the args but show the name and lock that is being used
* Don't always log stdout and stderr (exceptions will capture them if it fails)
* Readd the original prefix to the netinfo (if provided)
* Cleanup the pickling
* Reduce the log levels by removing a few statements that happen to often (and aren't very meaningful)
* Add the rc code for blkid '2' being valid with a note to as why
* Fix the variable name, should have been 'additional_fns'
* Add in the linking of the _all.deb with a symlink 'cloud-init_all.deb'
* Add a test that ensures the upstart handler does not output files when in non-per-instance mode
* Ensure that only when incoming frequency is per-instance that this runs
* Add a message about why the second consume_userdata occurs since its not very obvious
* [merge-from-trunk] remove warning message to console on empty user-data
* [merge-from-trunk] use yaml.safe_load rather than yaml.load
* [merge from trunk] cc_salt_minion: install package salt-minion rather than salt
* [merge from trunk] Use --quiet when running apt-get
* Fix chopping off the wrong folers, oops
* Syntax error fixup
* Remove the keep all the init directories which didn't work
* 1. Match the variable names with what they are used for 2. Create a set of directories that need to be kept for the different boot modes
* Continue working on removing and allowing the correct files in the spec generated file
* 1. Update with smosers code review and comments (and put some of those comments into the files) 2. Rename consume() to consume_userdata() as it helps in figuring out what this does. 3. Fixup the tests due to #2
* packages/debian/rules: remove unused quilt section
* change upstart jobs to use single 'cloud-init' binary
* remove warning message to console on empty user-data
* No longer need to do this special config appending, the config merger class handles this
* Take only the files in the directory, not the directory itself (this causes issues when installing)
* 1. Add 'verbose' options to both. 2. Fixup the debian building after util changes
* 1. Fix old info call
* Shrink these down by using the cloudinit utils
* 1. Add a chdir context manager 2. Add a abs path joining function that will return the absolute path of a combined path (where applicable)
* 1. Remove unused return arguments 2. Adjust info statement to reflect better what it is doing
* Relax the version numbers for now
* Copy the tiny_p from the packager code
* Add check that the changelog version is the same as the code version
* Add in the ability to choose which type of boot type the rpm should have and adjust the specfile that is generated to remove the unwanted config files for the types which were not selected
* Add all the upstart/systemd/init.d files
* Remove the '.sh' extension
* Just use the base changelog
* Removed, just going to use the base 'ChangeLog' file
* Add a section for building an rpm and a section for building a deb
* Get these working again after the subdirectory and output format changes
* 1. Change these to be templates where possible. 2. Rename to be a debian subdir, matching the redhat subdir
* Rename this to be 'make-tarball' to match the other tar tools name, also change output to be tab separated
* Move redhat spec file templates to this directory
* Get the new builddeb working and fix the rules file
* Output the base tar name
* Coverting this to use the python utils
* Use move and not util copy
* Use move instead of copy
* Use a directory prefix
* Continue working on cleaning this up
* Add a small script to tall the whole code
* Continue working on cleaning this up
* Some cleanups around util functions and formatting
* Remove need to depend on cloudinit for the util functions used
* Fix call to rpm-changelog
* Add a nicer helper util for the rpm changelog
* Ensure rpmbuild is actually a directory before cleaning
* Use the standard utils now in tools for reading requires/dependencies/versions
* Get rpm building working with a template
* Add a simple tool that will parse the requires file
* Use the new tool created to get the version
* Continue working on getting a specfile generated
* Use the new version extraction tool to get the current active version
* This tool knows how to extract the current version from the 'changelog' file
* This will be a rpm template file for the eventual specfile that will be created
* 1. Moving around the packages dir. 2. Adjusting the bddep shell script 3. Starting to add a brpm
* Add warning when hitting a unknown api
* Removed this, since it doesn't offer any value
* Fix a bunch of == None cases
* 1. Use a common config merging class now in helpers that will be the central point of config fetching for both the 'init' stage and the 'module' stages a. This helps those who want to understand exactly what configs are fetched and how the merging occurs
* Remove the pep8 tool from being ran in a script that has a name that seems to just say it will run pylint. Put the pep8 tool in a 'run-pep8' script
* 1. Separate the pep8 check from the pylint check a. This allows them to be run as different tools (if desired) 2. Adjust the makefile to have a 'make pep8' section which can run this new script
* Don't complete the update if there is no datasource or if writing to cache fails
* Use os.path.join instead of custom string path formation
* 1. Move the getkeybyid function back here but add some slight adjustments a. Instead of executing a bash string, write out a temporary file and then just execute '/bin/sh' on that file with the right arguments instead. 2. Rename util.SilentTemporaryFile to util.ExtendedTemporaryFile and update the usages of the previous name accordingly, this better reflects what this temp file is. 3. More teenie pep8 line length fixings
* Fix syntax err, grrr
* 1. Add comment about conf.d overriding input config 2. For reading config from conf.d, collect all the configs then call the mergemany function
* 1. Adjust the logging of phone home module when its not enabled 2. Fix pylint warning in userdata about unused variable
* Turn off capturing
* Turn off capturing
* Adjust test for turning off capturing
* Turn off capturing
* Turn off capturing
* Use a module level constant for the filename
* Fix ma english
* Constant adding for content type, allow the part filename to be over-ridden easily
* Disable capturing of these subp calls
* 1. Add init.d/config and final scripts 2. Adjust the comments of the cloud-init* scripts to match the long description of the config and final ones
* Add a local only version
* Restarting is just the same as starting, so don't return the exit code of the stop function
* Use the full path + rename to CLOUDINITARGS
* Add initial init.d script
* 1. Adjust for the cases of 'yes', 'no', 'true', 'false' by leaving those unquoted 2. Add more comments as to why we are leaving single quoted strings alone
* 1. Fix the cfgobj to make sure it handles the quoting of the keys and values in sysconfig specially by ensuring that it does the quoting so that the files written out can be sourced into bash scripts, which is typically what these files are used for
* Remove comment about old-configs
* Add in debian, which should also work
* 1. Add a ubuntu and fedora subclass of the RH/debian root classes 2. Move the ubuntu class to the debian class (since thats really what it is)
* Remove support for older ec2 configobj merging
* Remove suppport for ec2-config
* Use configobj support for now to keep the comments and other k/v pairs that may already exist in these files
* ConfigObj is a requirement now, so no need to see if the import worked or failed
* Configobj should be a requirement now, and not optional, so there is no need to check the import for errors
* 1. Use configobj instead of configparser a. This allows us to not have to add a fake section in b. It will also preserver the files initial comments 2. Adjust how the new sections are being added and values are being written due to this change
* Add comment that configobj is used for more than just old configs
* 1. Return which modules ran from the run module function 2. Use that list in the main binary & adjust related comparisions
* Ensure that nothing was ran by checking the total count
* Fixup python selinux guards, only try to restore after we check if its useful to restore, fix test to work with selinux enabled sysystems
* Use RuntimeError subclass instead of top level Exception
* 1. Go through a single protected get ipath method that will throw if there is not an active datasource (ie the user has done an out of order call to a function that needs the datasource to exist) 2. Add in a '_get_instance_subdirs' method that can be over-ridden in the future if more subdirs are needed
* 1. Update comment about ipath returning None when no datasource is active 2. Fix pylint warning on set method of config parser
* Comment cleanups and remove unneeded quotes
* 1. Update the comment about fstab to just point to 'man fstab' 2. Update the mount point adding of '/' to just add it in one place if it does not already exist
* Updated so that the locale that is being written out currently in 'cc_locale' now will be done by the distro classes (since its not the same for rhel and ubuntu)
* Get this test working again
* Ensure that calling the urls happens in a specified order
* Get both of these tests back in working shape
* Testing is easier if we just pass the paths object, instead of the full cloud object here
* 1. Only register and increment the handler count after we have ensured it imports and call_begin passes. 2. Fixup the 'test__init__.py' file to now be working again
* Missed some other mkdtemp and rmtree calls no longer needed
* Use the mocker built-in method for creating temporary dirs (which it will cleanup)
* 1. Got this test working again using the new code. 2. Adjusted so that instead of capturing all logging, only a certain level is captured (now that we have lots more logging)
* Returning whether it was enabled, useful for unit testing
* This is now functional and all passing again
* Pass along any environment settings via the variable 'noseopts'
* Remove another unused import
* Remove a unused import
* Simplify sshd config loading to make it use one set of functions/objects/classes
* Use yaml safe_load just incase
* 1. Renames for debug message from 'transform' to 'module' 2. Fixing up more cloud.path.joins found to use the right ro/rw filename
* Move to a write location and when writing, also write to the write location, instead of the read-only one
* 1. Move all info() logging methods to debug() 2. Adjust comment on sources list from depends 3. For the /etc/timezone 'writing', add a header that says created by cloud-init
* use yaml.safe_load rather than yaml.load
* Return a empty json map as default instead of an empty string for unknown fields
* 1. Add a dummy lock object + a file lock object 2. Use this object when returning semaphores 3. Adjust the debug statement to show this object
* 1. Shorten the passed in name for frequency (and expand it later) 2. For single modules, if it doesn't run, print a warning and exit with a return code of 1
* 1. Add an importer function that will search for a given module in a set of search module 'prefixes' that also has a potential set of required attributes. 2. Use this new importer to find the distro class, the userdata handler modules, the config modules and the datasource modules, if none can be found error out accordingly
* No need for this now that we have the imports done correctly
* Add a license and use find_packages to locate the needed packages
* Fix secondary config subdir name
* Use setuptools instead of disttools, this seems to be needed for requirements to work
* Massive pylint + pep8 fixups!
* 1. Rename to modules instead of transforms 2. Run single will now attempt to run a module of a given name, if it can find it (no restrictions on config)
* Change to import error instead of runtime error
* Catch the import error rather than the runtime error
* Renamed back to 'cc_*' with the reasoning being that 'cc_' provides some protection against module name collisions when importing
* The 'cfg' module has been removed and moved to 'helpers' to avoid confusion. These modules used the 'cfg' modules so adjusted them
* Removed this to avoid confusion with cfg and then having a config dir
* Move the configparser helper to here since it being in a cfg.py is confusing when there is also a directory named 'config'
* 1. Add a comment that the upstart dir should probably be put elsewhere sometime (in a distro specific build?) since not all distros fully support upstart that is in config here or even have upstart in general at all (for various reasons) 2. Found out that we really do need to specify these 2 packages due to the following a. The cloudinit root needs to be a package (pretty obvious) b. Not so obvious is the cloudinit.conf also needs to be a package so that its modules can be directly imported without referring to the module name
* Move back to the old dashs mixed with underscores for now until checking/migrating and then using canonicalized name is done
* 1. Show what we are importing 2. Don't rethrow as a runtime exception, let people using this just catch the real error..
* 1. Use the name modules where transforms was used 2. Reflect the move back to config 'modules' in the other cli options 3. Have the single mode not need to lookup the module but use the general import path
* Add in the new binary to be used in files found
* update tools/bddeb and debian.trunk packaging
* Remove the .py extension for this new main program binary
* Add the ability to only fetch a local datasource instead of also trying to fetch an offical datasource from an external source
* Add message about query not being implemented yet
* Removed the older binaries, now supplemented by a unified binary
* Make the single run mode setup the output redirection and logging accordingly
* cc_salt_minion: install package salt-minion rather than salt
* Show log message that says ec2 route disabling is not enabled
* Use comparisons instead of xrange, until python 3 when it should be more efficent
* Change this function name back after made it back to protected after making the run single transform mode work
* Show the lock object name and the lock value - useful for debugging
* Ensure any authorized key file found in authorized keys is path adjusted as well
* Always provide a path here, in this case the root path
* Uppercase constants, remove need to use cloud.paths.join since scripts_d should already be modified
* Add dependency on argparse
* Pylint line length fixups
* Get single module running mode mostly working (still needs a little work)
* Allow the run single to pass in a set of args and a frequency that will replace the initial sections args and freqency if provided. If not provided then no replacement occurs
* 1. Don't force the datasource to always fetch in construction (sometimes not wanted) 2. Add a run single transform function that can be used by the run single main entrypoint action 3. Add a find transform function to be used by the run single action to determine if a transform name is valid
* Pylint cleanups
* 1. Move the running of transforms to a common function that returns how a useful exit code 2. Add in the single transform running stub, which seems to be a feature of the previous cloud-init-cfg, making it its own action now 3. Adding in the 'config' and 'final' actions, which now both go through the same entrypoint function to setup the initial object and then fire off the needed transforms. 4. Cleanup of the argparsing code to handle the above cases
* Fix comparison to none, instead of empty in ds_deps assignment check
* 1. Use the help message to show the default 2. Add a mode option in to the 'config' subparser that allows the user to affect the transform selection phase 3. Some tiny pylint warnings
* More path joinings found + update in logging of when we translate a path
* Fix logging message spelling
* More cleanups around read/write roots
* More paths missed (durn), but now fixed
* Make most of all the places use the paths join() function so that testing with non-real read/write paths is easier
* Use the given module as the root module for the given mod to be used from
* Initial add of read and write roots, this should cover a large set of cases that use the path object
* Get the 'init' stage working
* Add a return statement that will collect the failures and the amount of transforms ran
* 1. Cleanup variable names to match more of the pythonic underscore pattern 2. Seperate config loading from the actual final 'merging' process. a. A util function will now merge multiple config dictionaries after they have all been loaded instead of loading and merging at the same time, which can get confusing to follow
* Fix pylint line length issues
* Cleanup no datasource exception to use cleaner csv list
* Small logging changes
* Add a mock ec2 metadata server that can be used for testing with
* Passed along the extra config paths
* 1. Continue working on main 'init' method 2. Add the ability to take in multiple extra config files (mainly for debugging) 3. Move 'simple' welcome message to this file 4. Only setup initial basic logging if '-d' option is provided
* Cleanup pylint warning about line length
* Fix pylint error about the rmlist variable name being mis-named
* Cleanup some of the logging (its a little to verbose)
* Syntax + comment cleanups
* Add the ability to check if the metadata service is up before actually using it
* 1. When running, return the function results as well as a boolean that stated if it ran
* Removed this for now
* 1. Allow the built-in config to be passed in when getting the base config 2. Move the cloudinit util function that writes the command line url to a file to here
* 1. Cleanup the rm cur instance link variable name to match more of what it is 2. Allow on config reading the ability to pass in config files that over-ride the search for configs (useful for testing...)
* Show the timeout (useful to see this when debugging)
* 1. Fixed datasource construction (switched param order) 2. Fixed up importing of modules to handle the failure case better a. Also realized that using the import class we don't have to reimport a module via getattr, so removed that
* Fixed the constructor params
* 1. Removed the welcome message for now :-)
* 1. Initial work on a unified program that will call into the new libraries
* 1. Revert the 'transform-' template back to 'config-' template for now. 2. Make the init class have a public 'read_cfg' which can be used to force cfg loading to occur (instead of having to go through the cfg property) a. This is a more 'public' way of forcing config to load, without exposing the config itself
* Add comments as to what the special reference sections mean in log_cfgs
* Fix include once always staying on, only turn it on until a include says to turn it back off, if one of those is encountered
* When logging is 'cycled' ensure that we call the logging reset routine first
* 1. Simplify basic logging (which will not always be turned on in the new cloud init main entrypoint 2. Have the ability to reset the logging handlers a. This seems needed when we initially have basic logging turned on, then later we come in and change the logging. It seems required for some odd reason to go in and reset the handlers for the root/cloudinit loggers (needs some more investigation)
* Add created by or added by cloud-init lines when we modify or create files
* Include link to netcf library in the comment
* Adjust log message to say "open" instead of 'read' since this function can also post data..
* 1. Decreasing of logging in piping routing 2. Fixup of merge dict after found out that it depends on the src return for non dict types 3. Only merge kernel config if there was any kernel config
* 1. Add in a clean section that will remove the /var/lib/cloud dir and the cloud.log file (helpful for testing)
* 1. Add a url response class that urlreading now returns (instead of a tuple). a. This allows for more properties to be added as needed in the future, instead of being very restrictive. 2. Fix up all uses of the url reading to now use this new response object. 3. Also fixup user data including, such that if no response actual occurs the url content is not further processed
* Update the variable for comment positioning to be 'c_pos' (comment position) instead of 'hpos' (??)
* 1. Adjust the ubuntu network hostname writing to go through a standard write function 2. Add comment as to why we search for "#" when reading
* Added a new rhel distro that does the following
* 1. Remove rhel sysconfig for timezone, now have a rhel distro subclass 2. Remove private apt_get function, since it can just be the package_command public one
* Log handler + info that is about to be called
* Add todo to see if we should turn back off include once
* 1. Allow for checking against lower case include types. 2. Perform lstrip on the payload, just incase people put spaces/whitespace before the type
* Fix include on enabling, simplify statements around include skipping, allow for case insensitive include statements to be used
* Consistently use dashes instead of underscores for the transform names
* 1. Fix the welcome_msg name to welcome_message (oops) 2. Adjust that name in the cloud.cfg 3. Add in the ability to specify a dictionary that is the transform instead of a list which makes the config look nicer when users have custom transforms with arguments and such
* Update error messaging for when importing/registring a part-handler fails
* 1. Ensure a that when a bad version is found, that it gets set to 1. 2. Increment part handler count even if it doesn't get registered (this shouldn't cause any problems)
* Rename user data obj, which is really a user data message object and add comments as to what the data items are used for
* Not config anymore, now a transform
* Match the transform named final_msg by adding a _msg to the transform name
* Remove default since it will never be called that way and apply default since its not currently being called that way
* Allow url fetching to catch any other type of exceptions that occur
* Let read_file_or_url util function have good defaults
* Capture the exceptions and just re-throw the last one on errors
* Send in src line instead of stripped line
* Update ssh_util to have a parser class and a line entry class. Also have a method that will parse the authorized key file
* Comments as to why we are using a csv parser and do some of the logic checks that are done for option extraction
* Comments about checking if this is right, no longer needed
* Fix logic issue with reading previous file for previous instance id, when the current file should be looked at instead
* Should be loaded not loading
* Revert that last change for this file, it should be a string that is non-empty so checking against that is fine
* Check instance id against none, and not just empty/false/0/none since 0 or empty might be valid
* Add comment as to why the cloud object/wrapper is useful
* Add comment as to why this cfg class is useful
* Pass in the datasource as a option, instead of the lower level instance id
* When a handler version is set but to an unknown non-int convertable value, treat it as 1
* They are handlers not mods ;)
* Update the cloud init requirements with comments as to why they are needed
* If bringing up, return whatever the bring up result is, otherwise false
* Add comment as to why we need to check for none/empty later when fetching an ipath
* Have the top level distro class take paths instead of a runner. This allows the following:
* Remove the need to have transforms start with "cc_"
* Correct the mount options to use a comma separated list for the mount options (if any provided/selected)
* After the moving of items to handler/__init__ reflect those references here
* Add a restricted set of characters which can be used in filenames when cleaning them
* Allow the user data processor to be passed in
* Move the helper functions for handlers to the handler __init__ instead of being in here
* Make the top level __init__ similar to the other top level __inits__ where just util functions and base classes are defined there
* Content handlers does not need the paths variable anymore so removed that
* For the different base classes, ensure we are using the 'abc' module + appropriate annotations + metaclasses
* Unused import removed
* 1. Add a constant for the "cc_" prefix, so that it can be easily changed if desired
* 1. Change to fixup handler instead of fixup module 2. Add logging of unknown content types + seperate payload logging detail message into a separate function
* 1. Change to fixup transform/form transform name 2. Check lowercase name against .py instead of unknown case
* Rename to fixup transform/fixup handler/form transform name instead of form mod*
* Have the ensure file function be able to take in a file permission
* 1. Add comment as to what http proxy setting means 2. Adjust so file contents will join with a string instead of appending to something that might not be a string
* Clean up this log statement to be more useful
* Allow file rendering to pass in a file permission when writing
* Adjust how config is extracted in that it now can be extracted via 3 different modes
* Fix pylint line length to big issue
* For now just stick to using newline joining
* 1. Remove content handler iid param, not used. 2. Ensure if iid is found that it is converted to a string before path joining
* Have the contents formed on a previous line which seems prettier
* 1. Remove path function, since we have a path class 2. Be explict with file perms (even though its duplicated)
* Cleanups around the usage of the apt pipe line value
* Some simple fixes that will make the python 3 translation easier
* Some simple fixes that will make the python 3 translation easier
* Some simple fixes that will make the python 3 translation easier
* Only set an env variable for instance id if we actually got one
* Adjust the usage of map items() to iteritems() which will help later translation to python 3
* Adjust the usage of map items() to iteritems() which will help later translation to python 3
* Adjust the usage of map items() to iteritems() which will help later translation to python 3
* 1. Add in one function that will do output redirection from config for a given mode. 2. Adjust the usage of items() to iteritems() which will help translation to python 3
* Add the running of 2to3 via the makefile
* Fixups to ensure that pylint does not find anything major wrong
* Ensure that this directory is treated as a module
* Self variable missing
* Variable name mismatch
* Cleanup and renaming that should mostly complete this new module
* Update comment about distro handling its timezone
* Inclusion of more utility functions included:
* 1. Modify the check http code function to allow or not allow redirect status from being valid codes. 2. Log how much we will sleep for 3. If not headers are provided, add a set which will have a cloud init user agent + version
* Ensure when an exception is captured that we use the util.logexc helper
* Complete initial cleanup for refactoring/rework
* Complete cleanup for refactoring/rework that makes it comptabile with the new structure, using unified util functions, logging and eliminating code and calls
* Update applying network esttings to use the distro function to handle this, use logexc instead of log.exception
* Split up time calculation, use logexc instead of log.exception
* Add more comments around what the settings mean, add in a list that can be used to check if user provided frequencies are actually valid or not
* Logic test on split up line length (just incase). Removed un-used pre debug info option, since this is not used in the prettytable case
* Ensure that the root logger is manipulated instead of just the cloudinit logger, show how many configs were tried if none succeeded, and for basic logging setup try to mirror more of what is in the default configuration file if all else fails
* 1. Handle returning values from handlers better. 2. Throw lock specific exception when semaphores can't be obtained 3. Make the paths constructor config variable named better to its actual usage
* Moved as many distro specific actions to here as should be needed. Mainly this is the following:
* Change variable names to reflect usage correctly
* Continued adding distro specific functionality to this new parent distro class as needed
* Instead of having the cloud pass large references to its constructor, this has been reduced to actual objects. Added a get template filename helper which can be used to locate template files for various handlers/transforms. Ensured that the config that we give back out is copied, so that it can't be modified by any 'malicous' handlers/transforms. Added helper method cycle_logging that can resetup logging, this is mainly used by the rsyslog transform
* Continued adding more comments about what each section/option does. Continued adding more system info sections as needed for various components. Enabled the welcome transform
* Enabled the oauth library, which seems needed for maas datasource
* Updated so that pylint and pyflakes will now run over cloudinit/ and bin/ python files
* Renamed hosts to match the ubuntu distro. Also converted all the other templates to tempita format instead of the more complicated (and more dependent on other packages) cheetah format
* Added a hosts template file (in tempita format) that provides the base of a "/etc/hosts" file for rhel like systems
* Added a python file which can be used internally to determine the version of cloud init that is running for internal messaging, if desired
* Moved the common user data classes and functionality back to this file since for now it seems to make organizational sense to put it here
* Added a new transform that can be used to show and initial welcome message to users. It is similar to the final msg one, but is used at the start of cloud init instead
* This provides a nice little utility class that avoids the python config parser throwing when options + values are being added to unknown sections since it handles the creation and checking that those sections exist before the option is added. Also it adds a little helper that can turn that config into a string
* Moved the user_data directory back to a user_data.py and made a handler subdir for just the internal handlers
* Moved the handlers from a user_data directory to a handler directory
* Moved this class which does the user data process back to the main user_data.py file. It seems to make a little more sense for now to move it to there
* Moved the contents of this file back to user_data.py It seems to make sense to have that file, then have a handler directory for user data handlers
* Add in a make url function (might be useful). Adjust usage of logexc to use that in the utils file for exceptions that occur. Add in more options to sub function to capture outputs, shell mode and such
* Use --quiet when running apt-get
* Use -q when running apt-get for logging without progress updates
* Update with parsing of a requirments file, changelog for this new refactoring stuff and setup.py for both of those
* Fix copy right
* Rename sem class to file sem class, add clear_all methods, add empty methods to dummy sem class
* Use pretty table to get a parseable format out
* Add centering method + more descriptive mount failure exception message
* Fix this up to work with new utils/logging/datasource..
* Fix logging + fetch user data before user data content handlers are activated
* Fix log statement
* Add initial network writing here
* Pylint cleanups, add a load yaml function that handles errors nicely + other cleanups
* Pylint cleanups
* Pylint cleanups
* Use common yaml loading function + pylint cleanups
* Pylint fixups
* Pylint fixups
* Pylint fixups
* Logging fixups + pylint fixups
* Start using tempita instead of the more complicated cheetah
* Add comments on formats, add in function that handles option extraction + other pylint cleanups
* Add more logging in onto what is being searched for
* Fix this up to use the new datasource class hierachy, as well as other new objects/logging added..
* Start of cleaning this up
* Added log setup and a basic log (for when one is not enabled)
* Removing distro specifics from here, as well as running functionality (which is now elsewhere)
* Adding in the base of a ubuntu distro subclass that can install pkgs (right now)
* Adding in the root distro class + a util function to fetch various distros
* This will now just contain the "public" view of the cloud objects, backed by whatever other set of objects
* Moved these functions to utils
* Add this file, which contains the main init stage, and the handlers stage (as seperate objects)
* Move paths to here, since it also qualifies
* All main stage helpers go here, ie semaphores, handler registrys, runners..
* Removed, not needed
* Not needed, this functionality can go in utils
* Start adding a system section
* Initial cleanups
* Add copyright
* Move cmdline functions here. Cleanup exception trapping. Fixup copyright
* Remove unused imports and reduce lines needed + add copy right
* Cleanup this and add refactoring around large constructors (add a parse method). Handle error cases better..
* Remove pathmap and make this a part of the CloudPath object, add copyright and format built in config
* Add copyright
* Add copyright
* Add copyright + index hash directly instead of get
* More init fs here, cleanup after user_data file moves + other cleanups
* Move most of this functionality to either cloud-init object or utils
* Rename these to user_data module + submodules
* Start adding place where distro specifics can go
* Not needed
* Move to having a parts directory/module + seperate modules
* Remove parsed config cache, and cleanup cmdline function
* Move how handler module names are found to here as well as a fixup module function for bad modules
* Move how user part data modules are found to here
* Fixup CloudConfig by using new module functions and calling objects
* Remove the main function from this, seems like it should also be in a test if needed
* Remove the main function from this, seems like that should be in a test if needed
* Remove is ipv4 function from here and move to utils + move exceptions to here as well as other find datasource function
* Remove cloud config from here and move to cloud.py
* This file now holds the default part handlers (shell script, cloud-config, upstart-jobs, boot-hook) as classes as well as some utility methods to fixup imported modules (ensuring they have the right members/properties) and moving the walking handler callbacks and other part running functionality here
* Moved some of the mounting logic here. Also introduced a context manager which will help unmount
* Moved the shell functionality back in here
* Large amounts of refactoring
* Cleaning this up, logic should be more sound around attempts and retries now
* Ensure files end with ".tmpl" if they don't initially
* Working on making this have the old setup (where strings are taken in for config) as well as file names (for those that have files)
* This now holds the following classes:
* This now only holds some simple top level functions. TODO: maybe just move them to utils?
* Renamed this, since its more of settings, not all constants
* Putting back into utils for now (until that gets to big)
* Seems like the util function extraction was not actually needed
* Moved this to a file called parts which handles this type of functionality
* Moving exceptions to modules where they are used. Seems to make sense
* Add a standard exception holding file
* Add in a utility class that will handle all shell-like actions
* Add this file which will contain the cloud init and cloud config classes
* Start moving code from there to here
* Move the contents of this file to __init__ in sources
* 1. Move cloud init and cloud config objects to a cloud file. 2. Cleanup main __init__ file with shell additions, constants usage, os.path usage
* Add in a helper that is useful for running pep8/pylint
* Add a file that just deals with url like functions
* Add a file that just deals with handling modules and part data
* Darn it. Those shouldn't be there!
* 1. Adding some new helper files that split off file inclusion, templating, importing, constant usage. 1. Move all datasources to a new sources directory 1. Rename some files to be more consistent with python file/module naming
* Move binaries to an actual binary dir
* remove usage of subprocess.check_output
* support relative path in AuthorizedKeysFile
* cc_landscape.py: if /etc/landscape does not exist, then create it
* pep8: fix white space
* fix chef documentation (LP: #960564)
* replace bug links with LP: # syntax, use '$RELEASE' for apt source
* Added an example for using Chef with oneiric
* Added GPG key
* Fixed opscode repo in chef recipe
* Allow a url to cloud-config data to be specified on kernel config line
* add a better exception message
* revert improved exception printing, as it was broken
* syntax error fix
* improve exception message
* move the reading of the cmdline cloud-config url to cloud-init.py
* fix issue found in real test
* add reading of 'seedfrom' via DataSourceNoCloud's DataSourceConfig
* initial checkin of kernel commandline cloud-config url support
* Provide informative message when user logs in with unsupported locale
* minor cleanup to messages, combine commands to single line
* Only show this message one time
* move Z99-cloud-locale-test.sh out of profile.d to tools
* Fixed deficiency in merge proposal
* Added a profile.d message to inform people about invalid locale setting
* cc_chef: fix bug when validation_key was present, but validation_cert was not
* fix bad variable if blocking cc_resizefs
* allow cloud-config to control if resizefs is blocking or not
* cc_resizefs: run resizefs in the background during boot
* DataSource: if public-keys is a string, split it on newline
* add supprot for reading public-keys from DataSourcMAAS
* rename DataSourceMaaS to DataSourceMAAS, generally use MAAS everywhere
* fix pylint warnings in test_userdata
* add python-oauth to dependencies [Cosmin Luță]
* Warn in user-data processing on non-multipart, non-handled data
* wrap Changelog to < 80 chars
* fix pylint/pep8 issues in DataSourceCloudStack
* import CloudStack data source [Cosmin Luta]
* cloudinit/DataSourceCloudStack: updated copyright and author
* Restrict warning to userdata without MIME wrapping only while still ignoring most types
* Renamed data source to CloudStack
* fix copyright and author on cloudinit/DataSourceMaaS.py
* If the user has chosen to remove default ca-certs, prevent package upgrade of ca-certificates from adding new trusted certs
* fix spelling error in apt pipeline filename
* add option apt_pipelining to cloud-config to address s3 mirrors (LP: #948461)
* mention bug number in cloud-config.txt
* Some cleanups before merge
* Simplified proposed patch - Changed values to be more simplistic and intuitive - Only allow pipelining values up to 5 - Changed to per_instance over per_always to remove need for tracking the values - Fixed Python style
* DataSourceMaaS: some fixes found in testing
* Add DataSourceMaaS, a Data Source for Ubuntu Machine as a Service
* doc fixes
* pep8 and pylint
* add a test for read_maas_seed_url
* remove debug statement
* Put a warning in the log when userdata parts are not handled
* Add tests for writing of userdata parts to the filesystem
* add MaaS datasource to default searched
* fix tests for 'hostname' to 'local-hostname' and user-data not required
* remove debug statement
* better 'main()', add and use version in api, do not require user-data
* Switch to using util.subp
* Added ability of cloud-init to manage apt http pipelining - cloud-config option of "apt-pipelining" - Address LP: 948461
* pylint/pep8 cleanup
* DataSourceMaaS: add test code for the oauth path
* fix pylint and pep8 warnings
* no need to check explicitly for user-data
* file for user-data should be 'user-data' (including the '-')
* functional read_maas_seed_url
* add headers_cb to doc for wait_for_url
* assert that userdata is not returned as part of metadata
* move wait_for_metadata_service for util, rename to wait_for_url
* Add initial DataSourceMaaS
* add tests to run-pylint files
* tests/unittests/test_util.py: fix pylint error
* use builtin runparts rather than system run-parts utility
* commit initial config information for maas datasource
* Pushing local commits
* Removed unused urllib2 import
* Refactored _get_default_gateway to get_default_gateway
* Importing only inet_ntoa from the socket module
* Removed the code that was used to wait for the metadata service since it seems CloudStack doesn't need that
* return public-keys as a list if it is a list
* fix docstring for is_container
* DataSourceNoCloud: fix local cloud sources other than from devices
* address change in name of lxc-is-container to running-in-container
* Catch exceptions from part-handlers and log the error before continuing
* If we don't trust the default certs, don't add new certs from ca-certificates package upgrades
* Cleanups
* Lint fixes
* Add test and fix for catching exceptions
* Add tests for various frequencies
* Added tests for adding handlers
* ConfigDrive: better support public-keys in meta flags
* more documentation on configdrive
* add doc for configdrive
* cloud-init.py: exit success if no data sources found
* support reading network interface config from DataSourceNoCloud
* DataSourceConfigDrive: update interfaces (and ifup) only on local
* DataSourceConfigDrive: change 'interfaces' to 'network-interfaces'
* fix pylint warnings
* update changelog
* DataSourceNoCloud: allow reading user-data and meta-data from simple files
* DataSourceConfigDrive: support getting data from openstack config drive
* DataSourceConfigDrive: generally seems functional
* incorrect name for salt minion cloud_config
* initial version of DataSourceConfigDrive
* DataSourceOVF: only search for OVF data on ISO9660 filesystems
* fix update-etc-hosts, 'manage_etc_hosts' is not a boolean, but a string
* Support salt minions via cloud-config [Jeff Bauer] (LP: #927795)
* add support for salt minions
* support empty lines in '#include' files (LP: #923043)
* netinfo.py: minor pylint complaint on unused 'devname'
* Added support for CloudStack meta-data
* comment fix to cloud-config-chef.txt [Lorin Hochstein]
* Corrected comment: puppet -> chef
* in netinfo output (ci-info:), fill in empty fields with a "."
* Add HP to Copyright, and Juerg Haefliger Authors
* add support for add/remove CA Certificates via cloud-config (LP: #915232)
* miscellaneous cleanups, and add tools/run-pylint
* remove occurences of pylint W0621 (Redefining name xyz from outer scope)
* remove usage of global (no longer need --disable=W0603)
* remove need for global pylint disable of W0402
* remove duplicate imports
* remove some pylint line disablings
* [PATCH] PEP8 coding style fixes. From: Juerg Haefliger <juerg.haefliger@hp.com>
* Add ca-certs into the main config to run just before rsyslog
* fix pylint warnings (LP: #914739) [Juerg Haefliger]
* [PATCH 4/4] Fix pylint conventions C0301 (line too long) From: Juerg Haefliger <juerg.haefliger@hp.com>
* [PATCH 3/4] Fix pylint conventions C0324 (comma not followed by a space) From: Juerg Haefliger <juerg.haefliger@hp.com>
* Lint fixes
* [PATCH 2/4] Fix pylint conventions C0322 (operator not preceded by a space) From: Juerg Haefliger <juerg.haefliger@hp.com>
* [PATCH 1/4] Fix pylint conventions C0321 (more than one statement on a single line) From: Juerg Haefliger <juerg.haefliger@hp.com>
* Add ca-certs example to docs
* Use delete_dir_contents from cloudinit.util
* Added delete_dir_contents function to cloudinit.util
* Convert code to use the write_file function from cloudinit.util
* Comment and doc cleanup
* Add unit tests for util.write_file
* Small docstring fix
* Added function for deleting default trusted CA certs
* Handle config flag for removing default trusted CAs
* Factor out writing of certificates
* Add ability to rebuild CA certificate file
* Add tests for ca-certs handler
* Add some tests for get_cfg_option_list_or_str
* fix pylint warnings (LP: #914739) [Juerg Haefliger]
* [PATCH 13/13] Disable bogus pylint warnings From: Juerg Haefliger <juerg.haefliger@hp.com>
* [PATCH 12/13] Fix pylint warnings W0201 (attribute xyz defined From: Juerg Haefliger <juerg.haefliger@hp.com> outside __init__)
* [PATCH 11/13] Fix pylint warnings W0141 (used builtin function xyz) From: Juerg Haefliger <juerg.haefliger@hp.com>
* [PATCH 10/13] Fix pylint warnings W0102 (dangerous default value as From: Juerg Haefliger <juerg.haefliger@hp.com> argument)
* [PATCH 09/13] Fix pylint warnings W0107 (unnecessary pass statement) From: Juerg Haefliger <juerg.haefliger@hp.com>
* [PATCH 08/13] Fix pylint warnings W0104 (statement seems to have no From: Juerg Haefliger <juerg.haefliger@hp.com> effect)
* [PATCH 07/13] Fix pylint warnings W0622 (redefining built-in 'xyz') From: Juerg Haefliger <juerg.haefliger@hp.com>
* [PATCH 06/13] Fix pylint warnings W0612 (unused variable) From: Juerg Haefliger <juerg.haefliger@hp.com>
* [PATCH 05/13] Fix pylint warnings W0613 (unused argument) From: Juerg Haefliger <juerg.haefliger@hp.com>
* [PATCH 04/13] Fix pylint warnings W0611 (unused import) From: Juerg Haefliger <juerg.haefliger@hp.com>
* [PATCH 03/13] Fix pylint warnings W0301 (unnecessary semicolon) Juerg Haefliger <juerg.haefliger@hp.com>
* [PATCH 02/13] Fix pylint warnings W0312 (found indentation with tabs instead of spaces) From: Juerg Haefliger <juerg.haefliger@hp.com>
* [PATCH 01/13] Fix pylint warnings W0311 (bad indentation)
* add unit test framework (LP: #890851)
* Tweak Makefile to just run unittests for the "all" target
* Add test dependencies to Build-Depends
* Add initial unit test framework. Add initial tests for mergedict
* Initial work on trusted CA cert handling
* fix selection of ec2 mirrors when inside ec2
* fix invalid variable name in cloudinit/CloudConfig/cc_resizefs.py
* run resizefs module on every boot
* fix issue with part-handlers and base64 encoding (LP: #874342)
* fix issue with multiple content-types
* fix issue with part-handlers and base64 encoding (LP: #874342)
* support configuration of landscape-client via cloud-config (LP: #857366)
* fix bug where first entry in the list presented to mergeTogether was ignored
* merge from trunk
* support configuration of landscape-client via cloud-config (LP: #857366)
* debian.trunk/ transition to dh_python2 from pycentral
* add INSTANCE_ID to env of bootcmd, add cloud-init-per
* put sem/marker files in 'sem' dirs
* remove unused cloudinit/execute.py
* update documentation for bootcmd - reference cloud-init-per - mention that INSTANCE_ID is in environment of bootcmd scripts
* replace cloud-init-run-module with cloud-init-per
* add INSTANCE_ID to environment of bootcmd scripts
* output public ssh host keys to console on boot (LP: #893400)
* output public ssh host keys to console on boot (LP: #893400)
* fix missing import for use of close_stdin
* revert default handling of /etc/hosts to 0.6.1 style (Ubuntu 11.04)
* revert default handling of /etc/hosts to 0.6.1 style (Ubuntu 11.04)
* make stdin read from /dev/null for all cloud-init programs (LP: #903993)
* make stdin read from /dev/null for all cloud-init programs (LP: #903993)
* update changelog for DataSourceEc2 changes
* make DataSourceEc2 more resilliant to slow metadata service (LP: #894279)
* make DataSourceEc2 more resilliant to slow metadata service (LP: #894279)
* cloudinit/DataSourceEc2: use util.is_resolvable_url
* add support for reading configuration of mirror and proxy
* add apt_proxy doc to cloud-config.txt
* remove trailing :: on apt config for proxy
* add apt_proxy support
* add documentation for mirror selection
* use the distro when searching
* only use apt_mirror if it is non-empty
* fix issue if apt_mirror is provided in config
* replace a print with a log.debug
* merge trunk
* tools/bddeb: add a symlink to created deb
* DataSource: fix is_ipv4 usage
* sync from trunk
* setup.py: move version to 0.6.3
* bddeb: improve 'bddeb' to read version and add bzr revno
* initial mirror configuration/discovery
* move logic of "is this an ipv4 address" to a function is_ipv4
* doc/ovf/README: documentation fix [David Medberry]
* do not convert 'None' to a string in cloud-config mounts input
* fix doc for ec2 datasource
* use hashlib rather than md5 module to avoid deprecation warning
* fix bug in netinfo.debug_info if no network devices available
* Mention in Changelog integration of Fedora packages (LP: #883286)
* add documentation of new config options
* make ssh service name configurable
* make ssh host key deletion configurable
* Make the types of SSH keys to generate configurable
* add a warning if there is no known way to enable puppet service
* Make enabling puppet service work on Fedora
* Write timezone data to /etc/sysconfig/clock
* Make locale file location configurable
* Restore created files' selinux contexts
* Add sample/example systemd config files
* make-dist-tarball: make output not be debian-like
* Replace static dict mapping version to packages with a method (LP: #848932)
* do not run run-parts if directory has no items
* Improve OVF documentation and provide functional demo
* fix updates.tar function in uncloud-init
* DataSourceEc2: catch a socket timeout in wait-for-md-service code
* increase cloud-init-nonet timeout to 130 seconds from 70
* DataSourceOVF: specify timeout=None in read_seeded call
* mention dependency on python-boto
* wrap-and-sort
* remove local copy of boto.utils
* make read_seeded return OSError for a file not found
* add retrying to read_seeded. have it use read_url
* cloudinit/DataSource.py: fix bad usage of get_fqdn_from_hosts
* add LICENSE file
* cloud-init-nonet.conf: redirect 'start networking' output to /dev/null
* try a little harder to get a fqdn rather than defaulting to localdomain
* [doc] add 'preseed' string to cloud-config for debconf-set-selections
* Chef support fixes, and support for environment and initial attr (LP: #845208)
* Bringing in proper json support for firstboot.json from lp:~avishai-ish-shalom/cloud-init/chef Bringing in 'initial_properties' support from lp:~avishai-ish-shalom/cloud-init/chef
* Set sane defaults for 'node_name' and 'environment' Support both 'validation_cert' and 'validation_key' for backwards compatibility Cleaned up line length
* Modifications to properly support both 'gems' and 'packages' install types. Added support for 'node_name' and 'environment' properties. Renamed 'validation_cert' to 'validation_key' to match Chef's nomenclature
* return a list, not a string
* accept that public-keys keys in the metadata service might be a string
* Fix minor issue with multiple runlist items not written in the correct format
* Fixed wrong firstboot json format
* Fix cc_chef issues (LP: #845161)
* Fixed review rejects: firstboot.json write, gem_binary not defined, wrong validation cert name
* cloud-init-nonet.conf: just allow for the possibility that /var/run != /run
* upstart/cloud-init-nonet.conf: update comment/description
* DataSourceOVF: change the default instance id from nocloud to iid-dsovf
* DataSourceOVF do not provide a default static hostname
* warn on failure of the hostname command when setting hostname
* improve DataSource's get_hostname function
* remove a default 'local-hostname' value from DataSourceNoCloud
* cloud-init-nonet.conf: wait for all network interfaces to be up
* cloudinit/DataSource.py: for default instance id, use 'iid-datasource'
* improve updating of .ssh/authorized_keys
* Add some network debug info printed to the console
* util.subp: do not attach stdin cloud-init's stdin to subprocesses (LP: 831505)
* fix for syntax error around ecdsa changes
* merge from Adam, fixes LP: #831505
* cc_apt_update_upgrade.py: Redirect stdin to /dev/null for calls to add-apt-repository (LP #831505)
* add awareness of ecdsa keys
* minor fixes to doc
* update ChangeLog
* fix incorrect logic when 'manage_etc_hosts' has a value
* remove debug statement
* cloudinit/util.py: fix syntax error
* add get_hostname_fqdn method to 'util' and use it for getting hostname
* improve update_etc_hosts method in cc_update_etc_hosts
* add example part-handler implementing the version 2 part-handler
* This fixes LP: #819507, to make consume_userdata run 'always'
* avoid a race condition if there were multiple networking devices
* add support for 'include-once' and public and private keys to mcollective
* use md5sum as the unique identifier rather than base64
* include-once: fixups found in testing
* use util.write_file in cc_mcollective.py
* make 'include-once' really "download source once per-instance"
* cc_mcollective: use util.write_file, change perms of private key file to 0600
* clarify warning text in mcollective config example
* Added ssl cert support to mcollective
* Added new feature include-once
* add bug number for chef bug to Changelog
* add chef module to cloud.cfg so it runs as cloud-config
* fix syntax error in cc_chef.py
* update changelog
* special case handling of mapping for ephemeral0
* increase timeout on read_seed when a seedfrom was explicitly given
* improve the updating of /etc/hosts with correct fqdn when possible
* do not complain if attempt to resizefs in an lxc container fails
* add chef [Avishai Ish-Shalom]
* [Marc Cluet] sanitize hosts file for system hostname (LP: #802637)
* * cloudinit/CloudConfig/cc_update_etc_hosts.py - Added new functionality to sanitise /etc/hosts
* fix cloud-init in ubuntu lxc containers (LP: #800824) [Clint Byrum]
* read authorized_keys location from sshd_config (LP: #731849)
* make the default "fill in" mount entries configurable. (LP: #785542)
* make the "cloud-config ready" command configurable (LP: #785551)
* mention previous commit in ChangeLog
* change, and make configurable the prefix for entries in root authorized_keys
* fix broken ec2 metadata service (incorrect variable name)
* run cc_ssh as a cloud-init module so it is guaranteed to run before ssh starts (LP: #781101)
* Support disabling of byobu
* support configurable urls for metadata service
* revert some white space changes versus trunk
* changed config key name
* log.warn to log.warning removed extra args from string format
* Removed unnecessary newline
* Added support for loading metadata urls from config files
* Another silly typo
* Remove any unresolveable addresses before attempting to access metadata
* Fixed silly mistake self.metadata_address instead of metadata_address. D'oh
* Fix for default metadata_address value
* Modified to reflect changes suggested by Scott Moser
* Modified cloudinit/DataSourceEc2.py and cloudinit/boto_utils.py to check both http://169.254.169.254 and http://instance-data:8773 for meta data service
* Modified cloudinit/DataSourceEc2.py and cloudinit/boto_utils.py to check both http://169.254.169.254 and http://instance-data:8773 for meta data service
* Added missing write-mime-multipart.py
* Seperated chef gems install to another function
* updated ruby packages list
* ruby_version should be configurable
* Added Chef plugin
* Allow configurable hostname prefix and hostname attribute
* fix bug seeding grub dpkg config when devices are named xvdX (LP: #752361)
* convert some user input from dos to unix (LP: #744965)
* documentation update: fix paths for seed dir in examples/seed/README
* cloudinit/CloudConfig/cc_timezone.py: remove debug print out
* remove debug printout in cloudinit/UserDataHandler.py
* update version strings 0.6.1 to 0.6.2
* fix bug with resizefs module
* fix bug in part-handler code, that broke working part-handlers (LP: #739694)
* mention sources.list.tmpl in sources.list.tmpl so user knows what to change
* fix issue where apt-update was not done unless explicitly set
* add mcollective to cloud.cfg
* add 'timezone' cloud-config module to cloud.cfg
* make update of sources not prevent installation attempt (LP: #728167)
* cc_resizefs.py: log output of failed resizefs or blkid commands
* in subp, put output and stderr into the raised error
* fix bug preventing early exit of cloud-init on 'no-net' path
* merge mcollective fixes from Marc. Changes to indentation and added comments
* Change output format for ConfigParser
* Changes to mcollective module, added docs
* add examples of kernel command line cloud-config
* minor updates to ovf documentation
* handle no datasource better cloud-init-cfg
* in nonet wait, print how long wait will be
* add carriage return to cc_final_message.py output
* fix the base64 encoded value for user-data
* fix bug if ovf had empty seedfrom
* fix syntax erorr in cc_puppet.py
* cloud-init-nonet.conf: redirect grep to /dev/null, so it doesn't go to console on missing file
* update changelog for Marc's contributions
* Update puppet to replace rather than append, add mcollective [Marc Cluet]
* improve startup if no eth0 is available (LP: #714807)
* change 0.6.0 -> 0.6.1
* update /etc/hosts hosts.tmpl to if 'manage_etc_hosts' is set in cloud-config
* change from yaml+'#include' to yaml + config.d format for cloud.cfg
* Changes to puppet module + mcollective module
* add 'bootcmd' like 'runcmd' to cloud-config syntax for running things early
* add apt helper routeins to CloudConfig, and use them in apt and puppet
* add 'run_per_instance' to CloudConfig
* rename 'datadir' key to 'data' in pathmap
* update TODO, ChangeLog
* make DataSourceEc2 configurable (timeout, retries), lower default retries
* call DataSource classes with sys_cfg argument
* add sys_cfg option to DataSource:__init__ , populate ds_cfg from it
* add utility function get_cfg_by_path
* add config option 'manual_cache_clean'
* add a debian.trunk dir and tools/bddeb to easily build a deb from here
* fix logging in DataSource modules
* resizefs didn't work, as 'blkid' would return error status 2
* update changelog
* First try to read from cdrom device before mounting
* update changelog
* change default of resize_rootfs to True
* update TODO
* remove double slash returned by get_ipath_cur
* fix the path for user scripts
* Fixes issue puppet configuration option values in quotes
* make write_to_cache raise errors if it fails rather than surpressing
* replace DataSource's self.log
* close file descriptors given to cPickle.load and cPickle.dump
* allow 'ds=nocloud' to appear at end or beginning kernel cmdline
* add support for setting passwords and managing PasswordAuthentication
* add setting of passwords
* add previous-instance-id and previous-datasource files to cloud/data add 'datasource' file to instance dir
* Removing quotes from puppet config option values
* fix the filename of the processed userdata
* do not install cloud-init-query, it isn't really functional
* improve comment strings in rsyslog config file tools/21-cloudinit.conf
* take correct action if def_log_file and syslog_fix_perms are empty
* fix bug in fixing permission on default log file
* make cloud-init's warning more obviously a warning (prepend WARN)
* if output entry is a scalar, send stdout and stderr same place
* remove debug statement
* improve language in cloud.cfg comment
* make the next target release 0.6.0, not 0.5.16
* update the changelog with other items from development branch
* cc_ssh: if a private key is supplied, do not require public
* add timezone to cloud-config (LP: #645458)
* merge in work form ds-rework
* rework of DataSource loading
* import fixes for DataSourceOVF
* remove needless import and defines in util.py
* change 'except' syntax to python 3 style
* add get_public_ssh_keys and get_hostname methods to DataSourceOVF.py
* add mention of OVF to changelog
* change version to 0.5.16
* add mostly untested but possibly functional DataSourceOVF code
* fix typo in doc/ovf/environment.xml
* add get_config_obj to a DataSource object
* drop the suggested support of urlencoded 'userdata' Property
* - change Properties expected in example environment file. - add ubuntu-server.ovf that passes validation via: xmllint --nonet --path open-ovf/mainline/schemas/ \ --noout --schema open-ovf/mainline/schemas/ovf-envelope.xsd \ doc/ovf/ubuntu-server.ovf and via ovftool --schemaValidate doc/ovf/ubuntu-server.ovf where ovftool is 'VMware ovftool 2.0.1 (build-260188)
* add a stubbed OVF Transport implementation for vmware-guestd
* add initial ovf data source class
* remove redundant ProductSection in environment.xml
* initial import of ovf code
* make final_message run 'per_always' rather than per-instance
* make rightscale config default to once-per-instance, not once-ever
* add 'phone_home' to cloud-config
* add support for posting data to a URL (phone_home)
* fix bad variable name in readurl
* add missing urllib import in util
* add support for reading rightscale style userdata
* add support for redirecting output of cloud-init, cloud-config and cloud-final minor change to timestamps to all use gmtime()
* add support for redirecting output of cloud-init, cloud-config and cloud-final
* use timestamp.gmtime() for timestamps rather than time() or datetime
* move cloud-run-user-script.conf to cloud-final, use cloud-cfg for invoking
* move cloud-run-user-script.conf to cloud-final, use cloud-cfg for invoking
* merge in fixes to get to functioning point
* cc_update_hostname: fix error handling
* cloudinit/__init__: fix get_cpath()
* cc_update_hostname: fix bad variable name
* cloud-init.py: fix bad variable name
* cloudinit/__init__.py: fixes to initfs
* cloud-init.py: add trailing carriage return to message
* add CloudConfig.per-once definition
* make the module list that cloud-config selects specified via cmdline
* fix cloud-run-user-script for directory change, make it invoke other scripts
* add function to cloud-init to run cloud-config style modules add 'hostname' cloud-config option for setting hostname make rsyslog and resizefs run at cloud-init time
* cc_locale: fix copy paste code error if args are given
* add 'resize_rootfs' cloud-config option
* TODO: add need to rewrite cloud-init-quer
* remove updates check, as its no longer really necessary (LP: #653220)
* update changelog (/var/log rework)
* support configuration of what is the default log file
* add caching of parsed configs to util.get_base_cfg
* add TODO and ChangeLog
* add cloud-config-archive input type
* do not use 'str' as a variable name
* pull in the rework of /var/lib/cloud
* fix bug in get_cpath
* add 'data' entry in pathmap and move get_cpath to a static function
* write the previous-hostname file to persistent cloud/data
* make scripts sub-dirs for per-<item>
* convert 'cachedir' to 'seeddir', move cloud_config, scripts to instance
* move cache to instance specific dir
* improve log message on failure of initfs. run on both start-local and start
* move boothooks and user-data into instance dir
* cloud-init.py: log exception on failure to set hostname
* initial /var/lib rework still lots to do. includes a fix for LP: #704509
* add doc about redesigned /var/lib/cloud
* support $MIRROR and $RELEASE in apt-source cloud-config lines (LP: #693292)
* move user scripts ('#!' and runcmd) to be per-instance (LP: #675711)
* add 'cloud-init-query' tool, to query fields from cloud data
* make 'do not login as root' message more clear
* move writing of ssh key fingerprints to a separate tool
* remove write-mime-multipart from setup.py
* add handling of rsyslog in cloud-config
* make timestamps get recorded to /var/log/cloud-init.log when no syslog
* remove debug print statement
* remove 'get_locale' from DataSourceEc2
* move setting of default locale out of cloud-init, into cloud-config
* revert previous commit that special cased 'ssh_import_id' on cmdline
* support reading cloud_config from kernel command line
* remove 'biultin' config, separate cloud.cfg
* add support for specifying ssh-import-id on the kernel command line
* ssh-import-lp-id was renamed to ssh-import-id
* move write-mime-multipart into cloud-utils package
* initial import of work-in-progress OVF code
* If instance is in EC2 VPC, then do not use ec2 ubuntu archive (LP: #615545)
* setup.py: move version to 0.5.15 prior to near release
* grub-dpkg cloud-config, move convert inline shell to python
* set grub-pc values based on user input or automatically
* improve warning message in DataSourceEc2
* cc_mounts.py: convert user input from int to string
* fix bad format of log message
* device_name_to_device: return the md's device string even if no device
* change default for ephemeral0 device to use 'nobootwait'
* remove broken (syntax) try/catch in UserDataHandler.py
* fix cc_puppet.py missing imports
* Update documentation
* Fix missing import
* append to apt_sources filenames rather than truncating
* get '##' comment lines through to /etc/apt/sources.list (LP: #627439)
* add commented out entries for partner, backports, and multiverse
* fix syntax error in util.py
* add support for '%s' in base of seed
* uncloud-init: move marker file into /var/lib/cloud/sem
* fix 'seedfrom' in DataSourceNoCloud (LP: #617400)
* fix setup.py to handle directories in doc
* doc/examples/cloud-config.txt: fix names in cloud_config_modules
* update documentation for seed data
* cc_disable_ec2_metadata.py: fix broken disable_ec2_metadata
* DataSourceNoCloud: record where seeds were read from
* DataSourceNoCloud: fix issue with seeded files
* setup.py: move to version 0.5.14
* use read_optional_seed, change 'parse_cmdline_data' to return boolean
* util: add read_optional_seed function
* mention important metadata fields in doc
* mention disable_root setting in examples
* initial dump of "sans-cloud" code (DataSourceNoCloud)
* DataSourceEc2.py: remap dev names when metadata service disagress with kernel
* cc_mounts: improve comment strings
* cloud-init-cfg: log warning with traceback on failure of a config module
* merged
* fix bad format error in cloud-init-run-module.py
* setup.py: move to 0.5.13
* invoke apt so dpkg non-interactively takes old conf files (LP: #607642)
* add better comments to the part-handler example
* make cloud-config an upstart task
* use debug rather than error on cloud-init-run-module "already ran"
* fix bad/un-removed code in cd_mounts.py
* extend list of possible metadata names with 'ebs[0-9]'
* change default 'pass' entry to '2' rather than 0
* add 'nobootwait' to the default options for fstab entries
* fix bug where nfs/network mounts could not be specified (LP: #603329)
* Adding gluster example
* warn on failed 'mount -a'
* manage hostname setting better (LP: #596993)
* resort to "starts with" to find mime type only on plain/text (LP: #600799)
* fix invalid log string when reading from preseeded ec2 cache
* fix removal of '#cloud-boothook' inside a boothook
* remove incorrect docstring in write-mime-multipart
* on bad cloud-config syntax (failure to yaml.load) continue on
* mention nobootwait in mount configuration
* fix bug with apt_update_upgrade config, missing import
* add cloud-config hooks for enabling byobu by default
* remove some debug code
* add copyright header to all of cloudinit/CloudConfig/cc_*
* move version to 0.5.12
* add suport for setting debconf selections through debconf-set-selections
* add ssh_import_id cloud-config module
* change syntax of cloud-init-cfg to allow for specifying freq for module
* fix trace due to lack of 'import traceback'. change error message to be debug (with traceback). The exception is still raised, but no reason for the whole traceback to be on error
* add util.get_cfg_option_list_or_str
* improve the cloud-init-run-module code a bit, fix LP:#568139
* remove trailing whitespace in previous commit
* prefix config 'sem' entries with semaphores with 'config-'
* add debug log message for 'running' config module
* doc: add mention of cloud-boothook to documentation
* change debug messages in DataSourceEc2
* add the instance-id to the environment as INSTANCE_ID for boothooks
* add 'cloud-boothook' type
* move suggested rsyslogd config file to tools
* fix cloud-config.conf upstart job
* make cloud-config modules configurable by cloud-config
* cloud.cfg: remove accidently commited 'cloud_config_modules' section
* cloud-init: remove additional new line in log message
* remove use of cloudinit constants from util.py in get_base_cfg use get_base_cfg from CloudInit:read_cfg
* remove debug printfs from __init__
* add initial logging support
* add vi modelines to python files
* remove ec2-get-info.py
* wait considerably longer (1050 seconds) for metadata service to come up
* util.py: allow for case-insensitive "true" values in get_cfg_option_bool. LP: 507709
* move to 0.5.10
* This runs could-config-mounts on 'filesystem' event rather than on cloud-config. Doing so means the collision that was occuring with upstart/mountall will not occur. However, it also means any mounts configured will not be mounted until later. LP: #527825
* ec2-get-info.py: fix bad indentation
* [packaging] change make-dist-tarball to use the tag given to it
* better 'Caught exception reading instance data' error
* move version to 0.5.9
* rename apt lists files to match newly selected mirror (LP: #513060)
* replace 'cloudconfig' entries in fstab rather than appending (LP: #524562)
* in ebs root instances, ephemeral0 will have a full path. In instance store I was used to block-device-mapping: {'ami': 'sda1', 'ephemeral0': 'sda2', 'root': '/dev/sda1', 'swap': 'sda3'},
* cloudinit/CloudConfig.py: bug fix, 'ephemeral' in cloud-config would not be converted to 'ephemeral0'
* cloudinit/CloudConfig.py whitespace changes (remove tabs)
* move setup.py to 0.5.8
* update upstart/* files to be in sync with 0.5.7-0ubuntu4
* replace another 'EC2' string with 'cloud'
* purge cache in cloud-init so it doesn't end up persisting across instances
* fix format of cron.d/cloudinit-updates
* ensure that cache dir is present if not created, and tighten permissions on object cache stored there
* add info on how to delete null route
* make sure items are strings (not ints)
* force ru-user-script to wait on cloud-config-misc
* typo in warning
* add "runcmd" support in CloudConfig
* add the cloud-config-misc upstart job
* fix motd-hook in case of more than 4 fields in BUILD_FILE
* run cloud-config-puppet later (LP: #523625)
* fix 'time not defined' bug (LP: #523832)
* update to 0.5.5
* add updates-check support using uec-query-builds
* fix broken user-data scripts
* merge mathiaz work for cloud-config-puppet
* Refactor puppet key detection in the configuration as suggested by Scott
* merge mathiaz work for cloud-config-puppet
* Add cloud-config-puppet hook
* fix bug where caused apt update to fail
* rename EC2Init class to CloudInit
* only set hostname once per instance. (LP: #514492)
* add copyright information
* rename cloudinit.conf to cloud-init.conf
* more removal of 'ec2init' string, replacement with cloud-init [again]
* more removal of 'ec2init' string, replacement with cloud-init
* more removal of 'ec2init' string, replacement with cloud-init
* rename ec2-init to cloudinit
* globally remove ec2init and rename to cloudinit
* make up a 'hostname' if there is a ip in local-hostname LP: #513842
* add 'make-dist-tarball' just for making a clean tarfile from a tag
* remove ec2-is-compat-env and minor changes to setup.py
* add the cloud-config-mounts upstart job
* move etc/ec2-init/templates to etc/cloud/templates
* tighten permissions on cloud-config and user-data to protect it
* make disable-ec2-metadata persistent across boots
* add the part-handler plugin
* add examples and userdata.txt to doc
* Add support for user defined mount points
* add doc/userdata.txt, move examples to doc/
* improve write-mime-multipart to support 'starts_with'
* add examples of user data
* in #include type, allow comment lines
* add 'starts_with' mapping for upstart-job
* move writing sources.list to CloudConfig. add 'apt_preserve_sources_list'
* if datasource is already defined do not re-load it (even from cache)
* support reading keys from ssh_authorized_keys field of cloud-config
* add cloud config support for apt_sources
* no longer stop and restart ssh, rely on normal ssh service
* comment out unusable call to boto.log.exception in boto_utils.py
* rename cloud-config-cat so it wont be packaged
* move from ec2init/ec2-config.cfg to cloud/cloud.cfg
* add job to disable metadata
* Add support for ssh keys in cloud-config. move write_file to util
* function ec2 metadata service removal. also fix issues with empty cloud-config
* only run setting of default locale and apt sources once-per-instance
* fix reading of cloudconfig
* re-work generation of keys. be more sure that ssh service will be running
* whitespace cleanup in ec2-get-info.py. consistent 4 space indentation
* typo fixes to ec2-get-info (LP: #510773)
* remove some debug statements
* support 'packages' in cloud-config
* add util library
* lots of shuffling around. more fully support old ec2-init.cfg and, add new preferred config file /etc/cloud/cloud.cfg
* functional cloud-config-ssh.conf now
* add swap devices if there are any found
* moving towards getting apt-update-upgrade working
* work around differences in uec and ec2 metadata services
* refactor the config class and jobs to run through cloud-init-cfg
* clean out 'build' directory in install.sh
* correctly mark content type of simple files
* 2 changes to cloud-run-user-script 1. arguments to run-parts came before run-parts 2. explicitly state that we dont want this script to run until cloud-config is done
* mark cloud-config-cat-debug upstart job as debug
* make sure all user-scripts get run, and only once-per-instance
* pull in chuck's repo at rev 75 bzr+ssh://bazaar.launchpad.net/~zulcss/ec2-init/ec2-init-config/
* run later in boot, but more reliably
* change DataSourceEc2 to use the local boto_utils
* add boto_utils
* read cached user-data without pickling -- its just a string
* fixes found testing in ec2
* fix ec2init.conf upstart job to have correct start on
* remove old 'tests.py'
* remove dead/unused code, call this 0.5.0
* support setting hostname
* add setting of default locale and apt-sources
* support getting public ssh keys from ec2 metadata service
* functional state now in kvm tests
* get usage of cloud-init-run-module correct
* add UserDataHandler.py, it handles includes and normalizing of userdata
* mention where it came from
* add tools/ directory and 'write-mime-multipart'
* add cloud-run-user-script upstart job to run rc.local style scripts
* put upstart files in upstart/, minor other changes
* add cloud-init-run-module and ec2init/execute.py
* add semaphore utilities to ec2init module
* add general flow of ec2-init.py
* support compressed user data, use cPickle instead of pickle
* add initctl_emit and defines for different data locations
* initial re-org, ec2 data source successfully reads from cache if present
* add hacked 'install.sh' for installing to a directory
* ec2-init-user-data is not present, remove it from setup.py
* fix but that required 'ec2init=X' to be last thing on the cmdline
* add ec2-is-compat-env as it is in lucid/karmic now
* add current working ec2init.conf, save ec2init.conf.goal, add disabler
* fix typo in ec2init.conf
* add ec2init.conf upstart job
* sync karmic and trunk
* replace multiple '| logger' in regenerate_ssh_host_keys with a single one
* Add a unittest for veriyfing that shell scripts passed in user-data get called
* Tag 0.4.999 release
* Use /var/run/ec2 for mounting EBS volumes
* Don't advertise a force-stop option to the init script that we don't actually offer
* Implement EBS volume mounting
* Replace static content_type_handler dictionary with a decorator
* Added script handling to appliance config handling. Added test cases for this
* Added basic appliance config handling (specifically package installation and removal) Also added unit tests for the above
* * ec2-init: Remove invalid token '$ssh' in header (LP: #412143)
* Update /etc/default/locale with locale setting derived from locality
* Consolidate on the use of urllib2 (rather than both urllib and urllib2)
* Fix ec2-get-info to work with simple testing environment (i.e. don't append a slash to every single URL)
* Set ownership of user's .ssh directory correctly. Disable root by default. Fail more gracefully if ssh keys could not be fetched
* Extend config API to allow for default values. Handle undefined config values gracefully
* Tag 0.4.99 release
* Remove bzr-builddeb configuration
* Remove call to update-motd from the init script. It is Ubuntu specific (and is possibly not even needed there)
* Only return the first part of local-hostname
* Rerun the setting up of authorized keys if te AMI is rebundled
* run_once_per_ami() and run_once_per_instance() are equivalent, so nuke run_once_per_instance()
* Tag 0.4.9 release, working towards 0.5
* Remove debian/ directory in preparation for upstream/ubuntu split
* Move ec2-config file to top-level
* Import current changelog
* Move ec2 init script from debian/ out into top-level. Install init-script using distutils. Add -o to dh_installinit call to let it find the init script
* Stop mangling /etc/hosts. EC2 provides a functional DNS. Replace use of os.system with a call to subprocess.Popen
* Moved mappings from ec2-set-sources-list to ec2init. Moved everything else from ec2-set-sources-list to ec2-set-defaults. Removed call to ec2-set-sources-list from init script. Removed ec2-set-sources-list
* Replace calls to ec2-get-data (which was a figment of my imagination) with calls to ec2-get-info
* Update copyright to reflect current copyright and license
* Move python-disutils.mk before debhelper.mk to make sure the python module is fully installed by dh_pycentral before the init script is run in postinst
* Added a runtime dependency on python-boto
* Reset the umask once we're done creating the authorized_keys
* Remove .py extension from scripts installed in /usr/bin
* Use urllib2 instead of urllib so that HTTP errors appear as exceptions
* Add new script: ec2-wait-for-meta-data-service.py
* ec2-init does not have any arch specific code at all, so go arch:all
* Rely on the lockfile handling in the init script, and let ec2-run-user-data just do its thing
* Make the paths constants
* Add the "run_once" handling to the init script. Unify init script indentation style
* Clean out unused imports
* Update license to GPLv3 (dropping the "or later" bit). Update copyright years. Add copyright and license information to setup.py. Add myself as author of the relevant files
* * Distutils added * New ec2init python module introduced * Lots and lots of stuff cleaned up and moved to ec2init python module. * Started the move to Boto
* * debian/init: Run update-motd regardless whether its a firstboot or not. * debian/init: Fix comments (LP: #373057) * debian/control: Add update-motd as a depends. * ec2-set-defaults.py: Wait for network to become available. (LP: #308530)
* * debian/init: Move init script to run before ssh and regenerate the ssh host kes in the init script rather than /etc/rc.local (LP: #370628) * ec2-set-apt-sources.py: - Move sources.list to /var/ec2 so it doesnt get removed after user reboots. * ec2-set-defaults.py: - Move locale to /var/ec2/ so it doesnt get remove after user reboots. * ec2-set-hostname.py - Create an /etc/hostname as well
* * Really change the locale when setting up an instance. (LP: #341066) * Run ec2-run-user-data script last. (LP: #373055) * Minor comment tweaks. (LP:373057)
* * Add more smarts to ec2 instance bring up. (LP: #371936)
* * ec2-run-user-data.py: Fix error
* * ec2-run-user-data.py: Fix error
* Fake the package-import tree and the current trunk
* ec2-run-user-data.py: Fix error
* * debian/control: - Add python-cheetah and python-apt as a dependency. * debian/ec2-config.cfg: - Remove distro due to the change in ec2-set-apt-sources.py * debian/inistall - Install the templates in the right place. * ec2-set-apt-sources.py: - Use python-apt to update the sources.list
* * ec2-set-hostname.py: - Use template for /etc/hosts creation. - Dont use public_hostname in /etc/hosts. (LP: #352745) * debian/control: - Add python-cheetah as a depends. * templates/sources.list.tmpl: - Update template. * debian/init: - Run the ec2-user-data script last so that the users get a stable system before running the user scripts
* * ec2-set-apt-sources.py: - Use a template to generate the sources.list and generate it based on the lsb_release
* * ec2-set-apt-sources.py: - Add the ubuntu-on-ec2 ppa
* debian/rules: Fix typo
* * Set the configuration file to jaunty. * ec2-fetch-credentials: Fix typo. * ec2-set-defaults.py: - Remove timezone change when booting the instance. - Redirect output to /dev/null. * ec2-set-apt-sources.py: - Run apt-get update after the /etc/apt/sources.list and redirect the output to /dev/null. * rightscale-init: Updated rightscale-init
* * debian/ec2-config.cfg: - Add disable root option. * debian/ec2-init.rightscale-init.init: - Add rightscale detection script. * ec2-get-info.py: - Display the information about an AMI instance
* * ec2-fetch-credentials.py: - Allow user to choose which user they wish to configure for. - Allow user to disable root user if they wish to. * ec2-set-defaults.py: - Set default timezone to UTC. - Set locale depending on zone. * debian/init: - Removed nash plugin. - Add ec2-set-defaults
* * debian/ec2-set-apt-sources.py: - Use the ec2 mirrors. (LP: #317065, #333897) - Update the /etc/apt/sources.list (LP: #333904) * debian/ec2-fetch-credentials.py: - Better error checking (LP: #325067)
* debian/init: Fix init script
* * ec2-set-apt-sources.py - Determine the zone that the user is in and generate a /etc/apt/sources.list.d/ based on that. * debian/init: - Check to see if there is an /var/run/ec2 and create it if it doesnt exist. - Start ec2-set-apt-sources at first bootup. * debian/rules: - Install ec2-set-apt-sources. * debian/control: - Add python-configobj as a dependency. * debian/{install,dirs} - Create an /etc/ec2-init to read the configuration file and install it
* * debian/init: - Remove already ran detection - Log the running of ec2-run-user-data to /var/log/ec2-user-data.log * ec2-set-hostname.py: - set hostname to the Ec2 local-hostname - Update the /etc/hosts to change the ubuntu hostname to the public hostname. * ec2-fetch-credentials: - Copy the ssh keys to the ubuntu user. - Setup authorized keys for root to tell the user to login as the ubuntu user when they try to connect. * ec2-run-user-data: - Create an .already-ran file to check to see if ec2-run-user-data already ran. - Save the ec2-run-user-data script in /var/ec2
* * debian/dir: Install /var/ec2 to save user-data scripts. * debian/rules: Start ec2-init after ssh. * ec2-run-user-data.py: Save run-user-data script with ami-id
* ec2-run-user-data: Fix python error when writing a file to the disk
* * debian/init: Run fetch-credentials before anything else. (LP: #308533) * Add ec2-set-hostname.py: Queries ec2 metdada for public-hostname and then sets it (LP: #316201)
* Initial release (LP: #269434)
* Import current code
