For in-tree testing there are two main options; first writting unittests; under tests/unitests/test_handlers/test_<module>.py are most of the config module tests.
For an integration test, the next best way is to build the package, via ./package/[brpm|bddeb] which can create a .rpm or deb you can install to a target system.
We typically use LXD to create a system container where we install the new package.
You can run a single module like list:
cloud-init --debug single --name cc_name_of_module --frequency always
For in-tree testing there are two main options; first writting unittests; under tests/unitests/ test_handlers/ test_<module> .py are most of the config module tests.
For an integration test, the next best way is to build the package, via ./package/ [brpm|bddeb] which can create a .rpm or deb you can install to a target system.
We typically use LXD to create a system container where we install the new package.
You can run a single module like list:
cloud-init --debug single --name cc_name_of_module --frequency always