----------
**Highlights:**
* New command :ref:`ksconf_cmd_package` is designed for both Splunk developers and admins * New module :py:mod:`ksconf.builder` helps build Splunk apps using a pipeline; or when external Python libraries are bundled into an app
* Legit layer support with built-in layer filtering capabilities is available in several commands
* Python 3! Head's up: We'll be dropping support for Python 2 in an upcoming release
.. note::
Come chat about ksconf on `GitHub discussions <https://github.com/Kintyre/ksconf/discussions>`__ even if it's to say we should use some other forum to stay in touch.
**What's new:**
- The **new ksconf package command** supports the creation of Splunk app ``.spl`` files from a source directory.
The ``package`` command can be used by admins to transfer apps around an organization, while keeping the ``local`` folder intact,
or by a developer who wants ``local`` to be automatically merged into ``default``.
The app version can be set based on the latest git tag by simply saying ``--set-version={{git_tag}}``.
- The **ksconf.builder Python module** is a API-only first for ksconf!
This build library allow caching of expensive deterministic build operations, and has out-of-the-box support for frequent build steps like adding Python modules locally using ``pip``.
As the first feature with no CLI support, I'm exceeded to get input from the broader community on this approach.
Of course this is just an experimental first release.
As always, feedback welcome!
- **Native support for layers!**
It's official, layers are now a proper ksconf feature, not just an abstract concept that you could throw together yourself given enough time and effort.
This does mean that ksconf has to be more opinionated, but the design supports switching layer methods,
which can be extended over time to support new different strategies as they emerge and are embraced by the community.
Supports layers filtering as a native feature. This has always been technically possible, but awkward to implement yourself.
Layer support is currently available in :ref:`ksconf_cmd_combine` and :ref:`ksconf_cmd_package` commands.
- **Moving to Python 3 soon.**
In preparation for the move to Python 3, I've added additional backport libraries to be installed when running Python 2.
Support for Python 2 will be dropped in a future release, and anyone still on Splunk 7 who can't get a Python 3 environment will have to use an older version of ksconf.
Also note that when jumping to Python 3, we will likely be requiring Python 3.6 or newer right out of the gate. (This means dropping Python 2.7, 3.4 and 3.5 all at the same time.)
Whoohoo for f-strings!
- **CLI option abbreviation has been disabled.**
This could be a breaking change for existing scripts.
Hopefully no one was relying on this already, but in order to prevent long-term CLI consistency issues as new CLI arguments are added, this feature has been disabled for all version of Python.
This feature is only available, and was enabled by default, starting in Python 3.5.
- **Removed insensitive language.**
Specifically the terms 'whitelist' and 'blacklist' have been replaced, where possible.
Fortunately, these terms were not used in any CLI arguments, so there should be no user-facing changes as a result of this.
- **Removed support for building a standalone executable (zipapp).**
This packaging option was added in v0.4.3, and deprecated in v0.6.0 once the Splunk app install option became available.
I'm pretty sure this won't be missed.
**API Changes**
- NEW API :py:mod:`ksconf.builder`
The documentation for this module needs work, and the whole API should be considered quite experimental.
The easiest way to get started is to look at the :doc:`Build Example <build_example>`.
- NEW Context manager :py:class:`~ksconf.conf.parser.update_conf`.
This enables super easy conf editing in Python with just a few lines of code.
See docs API docs for a usage example.
**Developer changes:**
- Formatting via autopep8 and isort (enforced by pre-commit)
- Better flake8 integration for bulk checking (run via: ``tox -e flake8,flake8-unittest``)