summaryrefslogtreecommitdiff
path: root/cloudinit/handlers
Commit message (Collapse)AuthorAgeFilesLines
* Allow jinja templating in /etc/cloud (SC-1170) (#1722)James Falcon2022-09-141-11/+25
| | | | | | | | | | | | | | There have been multiple requests to allow jinja templating in /etc/cloud configs the same way we allow jinja templating in vendordata and userdata. This commit allows for templating both /etc/cloud/cloud.cfg and any file in /etc/cloud/cloud.cfg.d. The same instance data used for substitution in vendordata and userdata will be used here. Note that these configs get loaded multiple times during the lifetime of cloud-init, and during cloud-init's earlier loads, instance data is not yet available. LP: #1913461
* Refactor instance json files to use Paths (SC-1238) (#1709)James Falcon2022-09-021-5/+3
| | | | | | | We have multiple areas of the codebase where we fetch the rundir path and join it with the filename for instance-data.json or instance-data-sensitive.json. This commit refactors those calls to use a 'Paths' lookup instead.
* Drop mypy excluded files (#1454)Alberto Contreras2022-05-231-8/+9
| | | | | | | | | - Add types to let mypy pass. - Add mypy flags: - detect unused ignores - redundant casts - Drop support of `ConfigParser` in Python 2 - Harden DataSourceLXD.network_config - Convert old-style commented types to proper types.
* upstart: drop vestigial support for upstart (#1421)Chad Smith2022-05-092-108/+0
| | | | | | | | | | | | | | | | upstream cloud-init not longer publishes to distribution versions which support upstart. Trusty has not been receiving cloud-init updates since 0.7.5 and Xenial stopped getting updates as version 21.1. Even though Ubuntu Xenial's default init system is systemd there was still an option for folks to launch amd maintain images which relied on upstart. Now that Xenial no longer has updates from upstream cloud-init we can drop all upstart support. Old Fedora and RHEL releases which use upstart are also not receiving cloud-init updates from tip of main.
* Shell script handlers by freq (#1166)Chris Lalos2022-02-102-0/+69
| | | | | | | | | | | Handlers for per-boot/per-instance/per-once multipart MIME Add handlers for adding scripts to userdata that can be run at various frequencies. Scripts of type x-shellscript-per-boot, x-shellscript-per-instance, or x-shellscript-per-once can be added to a multipart MIME userdata message as part of instance userdata. These scripts will then be added to the appropriate per-boot, per-instance, or per-once directory in /var/lib/cloud/scripts/ during processing of userdata.
* Don't throw exceptions for empty cloud config (#1130)Brett Holman2022-01-061-0/+9
| | | | | Warn during boot when an empty config is provided. Likewise, `cloud-init devel schema --annotate` should not throw exception, return something meaningful instead.
* Adopt Black and isort (SC-700) (#1157)James Falcon2021-12-156-139/+187
| | | | | Applied Black and isort, fixed any linting issues, updated tox.ini and CI.
* jinja: provide and document jinja-safe key aliases in instance-data (SC-622) ↵Chad Smith2021-12-021-8/+40
| | | | | | | | | | | | | | | | | | | | (#1123) Allow #cloud-config and cloud-init query to use underscore-delimited "jinja-safe" key aliases for any instance-data.json keys containing jinja operator characters. This provides a means to use Jinja's dot-notation instead of square brackets and quoting to reference "unsafe" obtain attribute names. Support for these aliased keys is available to both #cloud-config user-data and `cloud-init query`. For example #cloud-config alias access can look like: {{ ds.config.user_network_config }} - instead of - {{ ds.config["user.network-config"] }}
* Use instance-data-sensitive.json in jinja templates (SC-117) (#917)James Falcon2021-06-101-2/+3
| | | | | | | instance-data.json redacts sensitive data for non-root users. Since user data is consumed as root, we should be consuming the non-redacted data instead. LP: #1931392
* cloudinit: remove unused LOG variables (#574)Daniel Watkins2020-09-161-3/+0
| | | Co-authored-by: Rick Harding <rharding@mitechie.com>
* tox: bump the pylint version to 2.6.0 in the default run (#544)Paride Legovini2020-08-251-1/+2
| | | | | | Changes: tox: bump the pylint version to 2.6.0 in the default run Fix pylint 2.6.0 W0707 warnings (raise-missing-from)
* Move subp into its own module. (#416)Scott Moser2020-06-082-7/+9
| | | | | | | | | | | | | | | | | This was painful, but it finishes a TODO from cloudinit/subp.py. It moves the following from util to subp: ProcessExecutionError subp which target_path I moved subp_blob_in_tempfile into cc_chef, which is its only caller. That saved us from having to deal with it using write_file and temp_utils from subp (which does not import any cloudinit things now). It is arguable that 'target_path' could be moved to a 'path_utils' or something, but in order to use it from subp and also from utils, we had to get it out of utils.
* Start removing dependency on six (#178)Daniel Watkins2020-01-211-6/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * url_helper: drop six * url_helper: sort imports * log: drop six * log: sort imports * handlers/__init__: drop six * handlers/__init__: sort imports * user_data: drop six * user_data: sort imports * sources/__init__: drop six * sources/__init__: sort imports * DataSourceOVF: drop six * DataSourceOVF: sort imports * sources/helpers/openstack: drop six * sources/helpers/openstack: sort imports * mergers/m_str: drop six This also allowed simplification of the logic, as we will never encounter a non-string text type. * type_utils: drop six * mergers/m_dict: drop six * mergers/m_list: drop six * cmd/query: drop six * mergers/__init__: drop six * net/cmdline: drop six * reporting/handlers: drop six * reporting/handlers: sort imports
* Fix usages of yaml, and move yaml_dump to safeyaml.dumps.Scott Moser2019-10-241-1/+2
| | | | | | | | | | Here we replace uses of the pyyaml module directly with functions provided by cloudinit.safeyaml. Also, change/move cloudinit.util.yaml_dumps to cloudinit.safeyaml.dumps LP: #1849640
* Resolve flake8 comparison and pycodestyle over-ident issuesParide Legovini2019-01-301-1/+1
| | | | | | Fixes: - flake8: use ==/!= to compare str, bytes, and int literals - pycodestyle: E117 over-indented
* query: better error when missing read permission on instance-dataChad Smith2018-10-301-1/+9
| | | | | | Emit a permissions error instead of "Missing instance-data.json" when non-root user doesn't have read-permission on /run/cloud-init/instance-data.json
* user-data: jinja template to render instance-data.json in cloud-configChad Smith2018-09-116-32/+161
| | | | | | | | | | | | | | | | | | | | | | Allow users to provide '## template: jinja' as the first line or their #cloud-config or custom script user-data parts. When this header exists, the cloud-config or script will be rendered as a jinja template. All instance metadata keys and values present in /run/cloud-init/instance-data.json will be available as jinja variables for the template. This means any cloud-config module or script can reference any standardized instance data in templates and scripts. Additionally, any standardized instance-data.json keys scoped below a '<v#>' key will be promoted as a top-level key for ease of reference in templates. This means that '{{ local_hostname }}' is the same as using the latest '{{ v#.local_hostname }}'. Since instance-data is written to /run/cloud-init/instance-data.json, make sure it is persisted across reboots when the cached datasource opject is reloaded. LP: #1791781
* pyflakes: fix unused variable references identified by pyflakes 2.0.0.Scott Moser2018-05-291-1/+1
| | | | | | A newer version of pyflakes (2.0.0) was released. It identifed some unused variables that version 1.6.0 did not identify. The change here merely fixes those unused variables.
* pylint: fix all logging warningsJoshua Powers2017-04-211-1/+1
| | | | | | | This will change all instances of LOG.warn to LOG.warning as warn is now a deprecated method. It will also make sure any logging uses lazy logging by passing string format arguments as function parameters.
* LICENSE: Allow dual licensing GPL-3 or Apache 2.0Jon Grimm2016-12-225-96/+45
| | | | | | | | | | | | | | | | | | This has been a recurring ask and we had initially just made the change to the cloud-init 2.0 codebase. As the current thinking is we'll just continue to enhance the current codebase, its desirable to relicense to match what we'd intended as part of the 2.0 plan here. - put a brief description of license in LICENSE file - put full license versions in LICENSE-GPLv3 and LICENSE-Apache2.0 - simplify the per-file header to reference LICENSE - tox: ignore H102 (Apache License Header check) Add license header to files that ship. Reformat headers, make sure everything has vi: at end of file. Non-shipping files do not need the copyright header, but at the moment tests/ have it.
* pep8: fix style errors reported by pycodestyle 2.1.0Scott Moser2016-11-101-0/+1
| | | | | | pycodestyle 2.1.0 is in Ubuntu zesty, and complained about the changes made here. Simple style changes. This makes 'make pep8' pass again when built in a zesty build system with proposed enabled.
* Fix up a ton of flake8 issuesJoshua Harlow2016-05-123-5/+5
|
* fix cloud-config-archive handlingScott Moser2015-04-161-1/+4
| | | | | | | | | | | | | | handling of cloud-config-archive input would fail in fully_decoded_payload. part.get_charset() would return a Charset object, but get_charset.input_codec is a string suitable for passing to decode. This handles that correctly, and is more careful about binary data inside input. The test added verifies that cloud-config inside a cloud-config-archive is handled correctly and also that binary data there is ignored without exceptions raised. LP: #1445143
* pep8 fixesScott Moser2015-04-161-3/+3
|
* userdata-handlers: python3-related fixes on do-not-process-this-part pathOleg Strikov2015-03-111-6/+18
| | | | | | | | | Cloud-init crashed when received multipart userdata object with 'application/octet-stream' part or some other 'application/*' part except archived ones (x-gzip and friends). These parts are not processed by cloud-init and result only in a message in the log. We used some non-python3-friendly techniques while generating this log message which was a reason for the crash.
* Respond to review:Barry Warsaw2015-01-271-10/+1
| | | | | | - Refactor "fully" decoding the payload of a text/* part. In Python 3, decode=True only means to decode according to Content-Transfer-Encoding, not according to any charset in the Content-Type header. So do that.
* Fix a few string/bytes problems with Python 3.Barry Warsaw2015-01-261-5/+16
|
* Largely merge lp:~harlowja/cloud-init/py2-3 albeit manually because it seemedBarry Warsaw2015-01-215-5/+5
| | | | | | to be behind trunk. `tox -e py27` passes full test suite. Now to work on replacing mocker.
* further remove evidence of pylint.Scott Moser2014-08-264-8/+4
| | | | | This just removes comments '# pylint:' things and other code remnents of pylint.
* simplify consume_vendordata, move exclusion, consume_vendordata per instanceScott Moser2014-01-161-0/+4
| | | | | | | | | | | this simplifies consume_vendordata a bit, changes consume_vendordata to be by default "PER_INSTANCE" (like userdata). The other thing we do here is move the exlusion to be handled when walking the data. The benefit of doing it then is that we can exclude part-handlers. Without the ability to exlude part handlers, exclusion is basically useless (since part-handlers could accomplish anything they wanted).
* Significant re-working of the userdata handling and introduction ofBen Howard2014-01-082-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | vendordata. Vendordata is a datasource provided userdata-like blob that is parsed similiarly to userdata, execept at the user's pleasure. cloudinit/config/cc_scripts_vendor.py: added vendor script cloud config cloudinit/config/cc_vendor_scripts_per_boot.py: added vendor per boot cloud config cloudinit/config/cc_vendor_scripts_per_instance.py: added vendor per instance vendor cloud config cloudinit/config/cc_vendor_scripts_per_once.py: added per once vendor cloud config script doc/examples/cloud-config-vendor-data.txt: documentation of vendor-data examples doc/vendordata.txt: documentation of vendordata for vendors (RENAMED) tests/unittests/test_userdata.py => tests/unittests/test_userdata.py TO: tests/unittests/test_userdata.py => tests/unittests/test_data.py: userdata test cases are not expanded to confirm superiority over vendor data. bin/cloud-init: change instances of 'consume_userdata' to 'consume_data' cloudinit/handlers/cloud_config.py: Added vendor script handling to default cloud-config modules cloudinit/handlers/shell_script.py: Added ability to change the path key to support vendor provided 'vendor-scripts'. Defaults to 'script'. cloudinit/helpers.py: - Changed ConfigMerger to include handling of vendordata. - Changed helpers to include paths for vendordata. cloudinit/sources/__init__.py: Added functions for helping vendordata - get_vendordata_raw(): returns vendordata unprocessed - get_vendordata(): returns vendordata through userdata processor - has_vendordata(): indicator if vendordata is present - consume_vendordata(): datasource directive for indicating explict user approval of vendordata consumption. Defaults to 'false' cloudinit/stages.py: Re-jiggered for handling of vendordata - _initial_subdirs(): added vendor script definition - update(): added self._store_vendordata() - [ADDED] _store_vendordata(): store vendordata - _get_default_handlers(): modified to allow for filtering which handlers will run against vendordata - [ADDED] _do_handlers(): moved logic from consume_userdata to _do_handlers(). This allows _consume_vendordata() and _consume_userdata() to use the same code path. - [RENAMED] consume_userdata() to _consume_userdata() - [ADDED] _consume_vendordata() for handling vendordata - run after userdata to get user cloud-config - uses ConfigMerger to get the configuration from the instance perspective about whether or not to use vendordata - [ADDED] consume_data() to call _consume_{user,vendor}data cloudinit/util.py: - [ADDED] get_nested_option_as_list() used by cc_vendor* for getting a nested value from a dict and returned as a list - runparts(): added 'exe_prefix' for running exe with a prefix, used by cc_vendor* config/cloud.cfg: Added vendor script execution as default tests/unittests/test_runs/test_merge_run.py: changed consume_userdata() to consume_data() tests/unittests/test_runs/test_simple_run.py: changed consume_userdata() to consume_data()
* Fix small prefix bug + jsonp tests.Joshua Harlow2013-07-241-6/+5
| | | | | | | | | Fix the wrong usage of the prefix removal array action by just using the new util function that does these actions correctly. Add in a couple of unit tests to verify the jsonp merging and usage works as expected.
* rename CC_JSONP_PRE again (JSONP_PREFIX) and use CLOUD_PREFIXScott Moser2013-07-241-6/+6
|
* change 'json-patch' to 'cloud-config-jsonp'Scott Moser2013-07-242-5/+6
|
* merge from trunkScott Moser2013-07-245-15/+14
|\
| * use constants for startswith in handlers. add strip_prefix_suffix.Joshua Harlow2013-07-234-12/+12
| |\ | | | | | | | | | | | | Just cleans up some repeated strings into module constants + a util function to do the boothook prefix cleanup (before writing).
| | * Use a util helper to do prefix/suffix removal.Joshua Harlow2013-07-211-5/+3
| | |
| | * Use constants for repeated type strings.Joshua Harlow2013-07-214-11/+13
| | |
| * | Just use an initialized array.Joshua Harlow2013-07-211-4/+1
| | |
| * | Remove return not used.Joshua Harlow2013-07-201-1/+0
| | |
| * | Also handle custom handlers correctly.Joshua Harlow2013-07-201-3/+6
| |/ | | | | LP: #1203368
* | Ensure we remove the same way we detect.Joshua Harlow2013-07-201-1/+2
| |
* | Remove json-patch inclusion header if payload contains it.Joshua Harlow2013-07-201-0/+6
| |
* | Fix constant move.Joshua Harlow2013-07-201-13/+16
| |
* | Fix content-type constant.Joshua Harlow2013-07-201-3/+0
| |
* | Add usage of '#json-patch'Joshua Harlow2013-07-202-9/+9
| |
* | Add the ability to merge with jsonpatch.Joshua Harlow2013-07-191-5/+20
|/ | | | | | | | | | | | Jsonpatch is a new RFC standard for merging json-like structures which the cloud-init cloud-config is one such structure. To use this in a limited fashion (to start) add the ability for the cloud-config handler to accept this content-type and use it as an alternate way to merge new cloud-config sections into the accumulated cloud-config. LP: #1200476
* upstart_job.py: fix pylint and bad bad variable in _has_suitable_upstartScott Moser2013-07-111-2/+2
|
* handlers/upstart_job.py: invoke reload-configuration if we can.Scott Moser2013-07-091-10/+50
| | | | | | Previously we'd not invoked reload-configuration because doing so caused issues with upstart. Now, instead, determine if we can invoke it. LP: #1124384
* fix and cleanup usage of util.logexcJuerg Haefliger2013-06-192-9/+8
|