Skip to main content

Reclass defines a syntax and directory structure for recursively merging YAML data sources.

Project description

reclass-rs: A Reclass implementation in Rust

Reclass is a library which defines a syntax and directory structure for recursively merging YAML data sources.

This repository contains a Rust implementation of Reclass which is based on the Reclass fork maintained by kapicorp. The Reclass implementation provided in this repository can be used both from other Rust programs and in Python programs. The reclass-rs Python module is implemented directly in Rust with PyO3.

Please note that this implementation doesn't yet support all the features and extensions which are availble in Kapitan Reclass. However, for features which are implemented, we aim to be compatbile with Kapitan Reclass.

The implementation currently supports the following features of Kapicorp Reclass:

  • The Reclass options nodes_path and classes_path
  • The Reclass option ignore_class_notfound
  • Escaped parameter references
  • Merging referenced lists and dictionaries
  • Constant parameters
  • Nested references
  • References in class names
  • Loading classes with relative names

The following Kapicorp Reclass features aren't supported:

  • Loading Reclass configuration options from reclass-config.yaml
  • Ignoring overwritten missing references
  • Inventory Queries
  • The Reclass option ignore_class_notfound_regexp
  • The Reclass option componse_node_name
  • The Reclass option allow_none_override can't be set to False
  • The Reclass yaml_git and mixed storage types
  • Any Reclass option which is not mentioned explicitly here or above

Documentation for the original Reclass can be found at https://reclass.pantsfullofunix.net/. Documentation on Reclass extensions introduced in the Kapicorp Reclass fork can be found at https://github.com/kapicorp/reclass/blob/develop/README-extensions.rst.

Prerequisites

  • Python >= 3.8
  • Rust >= 1.56 (we recommend installing the latest stable toolchain with rustup)

Setup local development environment for Python bindings

  1. Create a local virtualenv for running Python tests and install maturin and pytest
python -m venv .venv
source .venv/bin/activate
pip install maturin pytest
  1. Build the reclass-rs Python library and install it in the virtualenv
maturin develop
  1. Run Python tests
pytest

Rust development

You should be able to run the Rust tests through Cargo if you have the Rust toolchain setup:

cargo test

Linting and formatting

  • Use cargo fmt to format code
  • Use cargo check for checking that the code compiles
  • Use cargo clippy to check for code issues

Testing reclass-rs in Kapitan

If you're using Kapitan, you can test reclass-rs by installing reclass-rs in your Kapitan virtualenv:

  1. Build the reclass-rs wheel locally (this assumes that you've setup a local Python development environment, see above)
source .venv/bin/activate
maturin build --release
  1. Install the wheel in your Kapitan virtualenv
KAPITAN_VENV=/path/to/your/kapitan/virtualenv
source ${KAPITAN_VENV}/bin/activate
# NOTE: make sure you use the same Python version as you use for the Kapitan virtualenv to build the wheel.
pip install target/wheels/reclass_rs-*
  1. Patch the Kapitan package in the virtualenv with the following command
patch -p1 -d $KAPITAN_VENV < hack/kapitan_0.32_reclass_rs.patch

Please note that we've only tested the patch against the Kapitan 0.32 release as published on PyPI.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

reclass_rs-0.1.1.tar.gz (63.1 kB view hashes)

Uploaded Source

Built Distributions

reclass_rs-0.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

reclass_rs-0.1.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.0 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ s390x

reclass_rs-0.1.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.9 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

reclass_rs-0.1.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.7 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

reclass_rs-0.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

reclass_rs-0.1.1-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.whl (1.8 MB view hashes)

Uploaded PyPy manylinux: glibc 2.12+ i686

reclass_rs-0.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

reclass_rs-0.1.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.0 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ s390x

reclass_rs-0.1.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.9 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

reclass_rs-0.1.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.7 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

reclass_rs-0.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

reclass_rs-0.1.1-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.whl (1.8 MB view hashes)

Uploaded PyPy manylinux: glibc 2.12+ i686

reclass_rs-0.1.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

reclass_rs-0.1.1-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.0 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ s390x

reclass_rs-0.1.1-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.9 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

reclass_rs-0.1.1-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.7 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

reclass_rs-0.1.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

reclass_rs-0.1.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl (1.8 MB view hashes)

Uploaded PyPy manylinux: glibc 2.12+ i686

reclass_rs-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

reclass_rs-0.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.0 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ s390x

reclass_rs-0.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.9 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ppc64le

reclass_rs-0.1.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.7 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARMv7l

reclass_rs-0.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

reclass_rs-0.1.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl (1.8 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.12+ i686

reclass_rs-0.1.1-cp311-none-win_amd64.whl (532.9 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

reclass_rs-0.1.1-cp311-none-win32.whl (506.5 kB view hashes)

Uploaded CPython 3.11 Windows x86

reclass_rs-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

reclass_rs-0.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.0 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ s390x

reclass_rs-0.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.9 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64le

reclass_rs-0.1.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.7 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARMv7l

reclass_rs-0.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

reclass_rs-0.1.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl (1.8 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.12+ i686

reclass_rs-0.1.1-cp311-cp311-macosx_11_0_arm64.whl (720.1 kB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

reclass_rs-0.1.1-cp311-cp311-macosx_10_7_x86_64.whl (747.3 kB view hashes)

Uploaded CPython 3.11 macOS 10.7+ x86-64

reclass_rs-0.1.1-cp310-none-win_amd64.whl (532.9 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

reclass_rs-0.1.1-cp310-none-win32.whl (506.5 kB view hashes)

Uploaded CPython 3.10 Windows x86

reclass_rs-0.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

reclass_rs-0.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.0 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ s390x

reclass_rs-0.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.9 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64le

reclass_rs-0.1.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.7 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARMv7l

reclass_rs-0.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

reclass_rs-0.1.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl (1.8 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.12+ i686

reclass_rs-0.1.1-cp310-cp310-macosx_11_0_arm64.whl (720.1 kB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

reclass_rs-0.1.1-cp310-cp310-macosx_10_7_x86_64.whl (747.3 kB view hashes)

Uploaded CPython 3.10 macOS 10.7+ x86-64

reclass_rs-0.1.1-cp39-none-win_amd64.whl (532.8 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

reclass_rs-0.1.1-cp39-none-win32.whl (506.9 kB view hashes)

Uploaded CPython 3.9 Windows x86

reclass_rs-0.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

reclass_rs-0.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.0 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ s390x

reclass_rs-0.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.9 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64le

reclass_rs-0.1.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.7 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARMv7l

reclass_rs-0.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

reclass_rs-0.1.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl (1.8 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.12+ i686

reclass_rs-0.1.1-cp38-none-win_amd64.whl (532.5 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

reclass_rs-0.1.1-cp38-none-win32.whl (506.7 kB view hashes)

Uploaded CPython 3.8 Windows x86

reclass_rs-0.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

reclass_rs-0.1.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.0 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ s390x

reclass_rs-0.1.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.9 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ppc64le

reclass_rs-0.1.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.7 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARMv7l

reclass_rs-0.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

reclass_rs-0.1.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl (1.8 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.12+ i686

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page