crossplane-function-pythonic 0.0.7b0__tar.gz → 0.0.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/.gitignore +2 -1
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/PKG-INFO +116 -26
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/README.md +115 -25
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/crossplane/pythonic/main.py +11 -10
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/crossplane/pythonic/packages.py +4 -5
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/pyproject.toml +6 -0
- crossplane_function_pythonic-0.0.7b0/.coveragerc +0 -2
- crossplane_function_pythonic-0.0.7b0/.devcontainer/devcontainer.json +0 -17
- crossplane_function_pythonic-0.0.7b0/.github/workflows/ci.yaml +0 -269
- crossplane_function_pythonic-0.0.7b0/.venv-default/.gitignore +0 -2
- crossplane_function_pythonic-0.0.7b0/.venv-default/CACHEDIR.TAG +0 -4
- crossplane_function_pythonic-0.0.7b0/.venv-default/bin/activate +0 -87
- crossplane_function_pythonic-0.0.7b0/.venv-default/bin/activate.csh +0 -55
- crossplane_function_pythonic-0.0.7b0/.venv-default/bin/activate.fish +0 -103
- crossplane_function_pythonic-0.0.7b0/.venv-default/bin/activate.nu +0 -96
- crossplane_function_pythonic-0.0.7b0/.venv-default/bin/activate.ps1 +0 -61
- crossplane_function_pythonic-0.0.7b0/.venv-default/bin/activate_this.py +0 -38
- crossplane_function_pythonic-0.0.7b0/.venv-default/bin/ipython +0 -8
- crossplane_function_pythonic-0.0.7b0/.venv-default/bin/ipython3 +0 -8
- crossplane_function_pythonic-0.0.7b0/.venv-default/bin/kopf +0 -8
- crossplane_function_pythonic-0.0.7b0/.venv-default/bin/pip +0 -8
- crossplane_function_pythonic-0.0.7b0/.venv-default/bin/pip-3.13 +0 -8
- crossplane_function_pythonic-0.0.7b0/.venv-default/bin/pip3 +0 -8
- crossplane_function_pythonic-0.0.7b0/.venv-default/bin/pip3.13 +0 -8
- crossplane_function_pythonic-0.0.7b0/.venv-default/bin/pygmentize +0 -8
- crossplane_function_pythonic-0.0.7b0/.venv-default/bin/python +0 -1
- crossplane_function_pythonic-0.0.7b0/.venv-default/bin/python3 +0 -1
- crossplane_function_pythonic-0.0.7b0/.venv-default/bin/python3.13 +0 -1
- crossplane_function_pythonic-0.0.7b0/.venv-default/pyvenv.cfg +0 -8
- crossplane_function_pythonic-0.0.7b0/.venv-default/share/man/man1/ipython.1 +0 -60
- crossplane_function_pythonic-0.0.7b0/.venv-test/.gitignore +0 -2
- crossplane_function_pythonic-0.0.7b0/.venv-test/CACHEDIR.TAG +0 -4
- crossplane_function_pythonic-0.0.7b0/.venv-test/bin/activate +0 -87
- crossplane_function_pythonic-0.0.7b0/.venv-test/bin/activate.csh +0 -55
- crossplane_function_pythonic-0.0.7b0/.venv-test/bin/activate.fish +0 -103
- crossplane_function_pythonic-0.0.7b0/.venv-test/bin/activate.nu +0 -96
- crossplane_function_pythonic-0.0.7b0/.venv-test/bin/activate.ps1 +0 -61
- crossplane_function_pythonic-0.0.7b0/.venv-test/bin/activate_this.py +0 -38
- crossplane_function_pythonic-0.0.7b0/.venv-test/bin/coverage +0 -8
- crossplane_function_pythonic-0.0.7b0/.venv-test/bin/coverage-3.13 +0 -8
- crossplane_function_pythonic-0.0.7b0/.venv-test/bin/coverage3 +0 -8
- crossplane_function_pythonic-0.0.7b0/.venv-test/bin/kopf +0 -8
- crossplane_function_pythonic-0.0.7b0/.venv-test/bin/pip +0 -8
- crossplane_function_pythonic-0.0.7b0/.venv-test/bin/pip-3.13 +0 -8
- crossplane_function_pythonic-0.0.7b0/.venv-test/bin/pip3 +0 -8
- crossplane_function_pythonic-0.0.7b0/.venv-test/bin/pip3.13 +0 -8
- crossplane_function_pythonic-0.0.7b0/.venv-test/bin/py.test +0 -8
- crossplane_function_pythonic-0.0.7b0/.venv-test/bin/pygmentize +0 -8
- crossplane_function_pythonic-0.0.7b0/.venv-test/bin/pytest +0 -8
- crossplane_function_pythonic-0.0.7b0/.venv-test/bin/python +0 -1
- crossplane_function_pythonic-0.0.7b0/.venv-test/bin/python3 +0 -1
- crossplane_function_pythonic-0.0.7b0/.venv-test/bin/python3.13 +0 -1
- crossplane_function_pythonic-0.0.7b0/.venv-test/pyvenv.cfg +0 -8
- crossplane_function_pythonic-0.0.7b0/Dockerfile +0 -15
- crossplane_function_pythonic-0.0.7b0/examples/alert.tgz +0 -0
- crossplane_function_pythonic-0.0.7b0/examples/argo.tgz +0 -0
- crossplane_function_pythonic-0.0.7b0/examples/argocd-application/composition.yaml +0 -87
- crossplane_function_pythonic-0.0.7b0/examples/argocd-application/extra.yaml +0 -53
- crossplane_function_pythonic-0.0.7b0/examples/argocd-application/functions.yaml +0 -13
- crossplane_function_pythonic-0.0.7b0/examples/argocd-application/render.sh +0 -3
- crossplane_function_pythonic-0.0.7b0/examples/argocd-application/xr.yaml +0 -6
- crossplane_function_pythonic-0.0.7b0/examples/argocd-application/xrd.yaml +0 -34
- crossplane_function_pythonic-0.0.7b0/examples/argocd.tgz +0 -0
- crossplane_function_pythonic-0.0.7b0/examples/ds-mod/composition.yaml +0 -36
- crossplane_function_pythonic-0.0.7b0/examples/ds-mod/daemonset.yaml +0 -35
- crossplane_function_pythonic-0.0.7b0/examples/ds-mod/functions.yaml +0 -9
- crossplane_function_pythonic-0.0.7b0/examples/ds-mod/render.sh +0 -3
- crossplane_function_pythonic-0.0.7b0/examples/ds-mod/xr.yaml +0 -8
- crossplane_function_pythonic-0.0.7b0/examples/ds-mod/xrd.yaml +0 -25
- crossplane_function_pythonic-0.0.7b0/examples/function-go-templating/functions.yaml +0 -15
- crossplane_function_pythonic-0.0.7b0/examples/grafana/EFCObservability.yaml +0 -1033
- crossplane_function_pythonic-0.0.7b0/examples/grafana/README.md +0 -6
- crossplane_function_pythonic-0.0.7b0/examples/grafana/alert.py +0 -104
- crossplane_function_pythonic-0.0.7b0/examples/grafana/composition.yaml +0 -30
- crossplane_function_pythonic-0.0.7b0/examples/grafana/configmap.yaml +0 -750
- crossplane_function_pythonic-0.0.7b0/examples/grafana/dashboard.json +0 -637
- crossplane_function_pythonic-0.0.7b0/examples/grafana/extra.yaml +0 -89
- crossplane_function_pythonic-0.0.7b0/examples/grafana/functions.yaml +0 -15
- crossplane_function_pythonic-0.0.7b0/examples/grafana/observed.yaml +0 -15
- crossplane_function_pythonic-0.0.7b0/examples/grafana/render.sh +0 -3
- crossplane_function_pythonic-0.0.7b0/examples/grafana/run-pythonic.sh +0 -3
- crossplane_function_pythonic-0.0.7b0/examples/grafana/secret.yaml +0 -9
- crossplane_function_pythonic-0.0.7b0/examples/grafana/xr.yaml +0 -26
- crossplane_function_pythonic-0.0.7b0/package/composite-composition.yaml +0 -18
- crossplane_function_pythonic-0.0.7b0/package/composite-definition.yaml +0 -32
- crossplane_function_pythonic-0.0.7b0/package/crossplane.yaml +0 -5
- crossplane_function_pythonic-0.0.7b0/package/input-definition.yaml +0 -38
- crossplane_function_pythonic-0.0.7b0/renovate.json +0 -6
- crossplane_function_pythonic-0.0.7b0/scripts/run_function.proto +0 -370
- crossplane_function_pythonic-0.0.7b0/scripts/setup-local.sh +0 -205
- crossplane_function_pythonic-0.0.7b0/tests/fn_cases/buckets.yaml +0 -37
- crossplane_function_pythonic-0.0.7b0/tests/fn_cases/clazz.py +0 -5
- crossplane_function_pythonic-0.0.7b0/tests/fn_cases/clazz.yaml +0 -14
- crossplane_function_pythonic-0.0.7b0/tests/fn_cases/composed.yaml +0 -57
- crossplane_function_pythonic-0.0.7b0/tests/fn_cases/conditions.yaml +0 -85
- crossplane_function_pythonic-0.0.7b0/tests/fn_cases/context.yaml +0 -46
- crossplane_function_pythonic-0.0.7b0/tests/fn_cases/do-nothing.yaml +0 -6
- crossplane_function_pythonic-0.0.7b0/tests/fn_cases/extra-resources.yaml +0 -74
- crossplane_function_pythonic-0.0.7b0/tests/fn_cases/get-started-app.yaml +0 -98
- crossplane_function_pythonic-0.0.7b0/tests/fn_cases/inline.yaml +0 -82
- crossplane_function_pythonic-0.0.7b0/tests/fn_cases/unknowns-fatal.yaml +0 -72
- crossplane_function_pythonic-0.0.7b0/tests/fn_cases/unknowns-info.yaml +0 -55
- crossplane_function_pythonic-0.0.7b0/tests/fn_cases/unknowns-warning.yaml +0 -73
- crossplane_function_pythonic-0.0.7b0/tests/fn_cases/yaml.yaml +0 -36
- crossplane_function_pythonic-0.0.7b0/tests/test_fn.py +0 -75
- crossplane_function_pythonic-0.0.7b0/tests/test_protobuf_values.py +0 -210
- crossplane_function_pythonic-0.0.7b0/tests/utils.py +0 -253
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/LICENSE +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/crossplane/pythonic/__init__.py +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/crossplane/pythonic/composite.py +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/crossplane/pythonic/function.py +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/crossplane/pythonic/protobuf.py +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/.dev/functions.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/eks-cluster/composition-v2.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/eks-cluster/composition.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/eks-cluster/definition.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/eks-cluster/functions.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/eks-cluster/render-v2.sh +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/eks-cluster/render.sh +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/eks-cluster/xr.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/filing-system/README.md +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/filing-system/composition.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/filing-system/definition.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/filing-system/function.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/filing-system/kustomization.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/filing-system/runtime.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/filing-system/vcluster.py +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/filing-system/vcluster.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/conditions/composition.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/conditions/functions.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/conditions/render.sh +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/conditions/xr.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/conditions/xrd.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/context/composition.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/context/environmentConfigs.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/context/functions.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/context/render.sh +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/context/xr.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/context/xrd.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/extra-resources/composition.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/extra-resources/extraResources.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/extra-resources/functions.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/extra-resources/render.sh +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/extra-resources/xr.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/functions/fromYaml/composition.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/functions/fromYaml/functions.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/functions/fromYaml/render.sh +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/functions/fromYaml/xr.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/functions/getComposedResource/composition.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/functions/getComposedResource/functions.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/functions/getComposedResource/observed.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/functions/getComposedResource/render.sh +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/functions/getComposedResource/xr.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/functions/getCompositeResource/composition.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/functions/getCompositeResource/functions.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/functions/getCompositeResource/render.sh +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/functions/getCompositeResource/xr.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/functions/getResourceCondition/composition.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/functions/getResourceCondition/functions.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/functions/getResourceCondition/observed.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/functions/getResourceCondition/render.sh +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/functions/getResourceCondition/xr.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/functions/include/composition.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/functions/include/functions.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/functions/include/render.sh +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/functions/include/xr.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/functions/toYaml/composition.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/functions/toYaml/functions.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/functions/toYaml/render.sh +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/functions/toYaml/xr.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/inline/composition.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/inline/functions.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/inline/render.sh +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/inline/xr.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/recursive/composition-real.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/recursive/composition-wrapper.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/recursive/functions.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/recursive/render.sh +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/function-go-templating/recursive/xr.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/get-started-app/composition.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/get-started-app/definition.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/get-started-app/functions.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/get-started-app/render.sh +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/get-started-app/xr.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/helm-copy-secret/composition.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/helm-copy-secret/functions.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/helm-copy-secret/kustomization.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/helm-copy-secret/render.sh +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/helm-copy-secret/run-function.sh +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/helm-copy-secret/vcluster.py +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/helm-copy-secret/xr.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/helm-copy-secret/xrd.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/single-purpose/functions.yaml +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/single-purpose/render.sh +0 -0
- {crossplane_function_pythonic-0.0.7b0 → crossplane_function_pythonic-0.0.8}/examples/single-purpose/xr.yaml +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: crossplane-function-pythonic
|
3
|
-
Version: 0.0.
|
3
|
+
Version: 0.0.8
|
4
4
|
Summary: A Python centric Crossplane Function
|
5
5
|
Project-URL: Documentation, https://github.com/fortra/function-pythonic#readme
|
6
6
|
Project-URL: Issues, https://github.com/fortra/function-pythonic/issues
|
@@ -80,7 +80,6 @@ metadata:
|
|
80
80
|
spec:
|
81
81
|
package: ghcr.io/fortra/function-pythonic:v0.0.7
|
82
82
|
```
|
83
|
-
|
84
83
|
## Composed Resource Dependencies
|
85
84
|
|
86
85
|
function-pythonic automatically handles dependencies between composed resources.
|
@@ -274,34 +273,46 @@ selection. For now, use matchLabels and filter the results if required.
|
|
274
273
|
RequiredResources acts like a Python list to provide access to the found required resources.
|
275
274
|
Each resource in the list is the following RequiredResource class:
|
276
275
|
|
277
|
-
| Field | Description |
|
278
|
-
| ----- | ----------- |
|
279
|
-
| RequiredResource.name | The required resource name |
|
280
|
-
| RequiredResource.observed | Low level direct access to the observed required resource |
|
281
|
-
| RequiredResource.apiVersion | The required resource apiVersion |
|
282
|
-
| RequiredResource.kind | The required resource kind |
|
283
|
-
| RequiredResource.metadata | The required resource metadata |
|
284
|
-
| RequiredResource.spec | The required resource spec |
|
285
|
-
| RequiredResource.data | The required resource data |
|
286
|
-
| RequiredResource.status | The required resource status |
|
287
|
-
| RequiredResource.conditions | The required resource conditions |
|
276
|
+
| Field | Type | Description |
|
277
|
+
| ----- | ---- | ----------- |
|
278
|
+
| RequiredResource.name | String | The required resource name |
|
279
|
+
| RequiredResource.observed | Map | Low level direct access to the observed required resource |
|
280
|
+
| RequiredResource.apiVersion | String | The required resource apiVersion |
|
281
|
+
| RequiredResource.kind | String | The required resource kind |
|
282
|
+
| RequiredResource.metadata | Map | The required resource metadata |
|
283
|
+
| RequiredResource.spec | Map | The required resource spec |
|
284
|
+
| RequiredResource.data | Map | The required resource data |
|
285
|
+
| RequiredResource.status | Map | The required resource status |
|
286
|
+
| RequiredResource.conditions | Map | The required resource conditions |
|
288
287
|
|
289
288
|
### Conditions
|
290
289
|
|
291
|
-
The `conditions`
|
292
|
-
the map key being the condition type.
|
290
|
+
The `BaseCompsite.conditions`, `Resource.conditions`, and `RequiredResource.conditions` fields
|
291
|
+
are maps of that entity's status conditions array, with the map key being the condition type.
|
292
|
+
The fields are read only for `Resource.conditions` and `RequiredResource.conditions`.
|
293
293
|
|
294
|
-
| Field | Description |
|
295
|
-
| ----- | ----------- |
|
296
|
-
| Condition.type | The condtion type |
|
297
|
-
| Condition.status |
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
303
|
-
|
304
|
-
|
294
|
+
| Field | Type | Description |
|
295
|
+
| ----- | ---- | ----------- |
|
296
|
+
| Condition.type | String | The condtion type, or name |
|
297
|
+
| Condition.status | Boolean | The condition status |
|
298
|
+
| Condition.reason | String | PascalCase, machine-readable reason for this condition |
|
299
|
+
| Condition.message | String | Human-readable details about the condition |
|
300
|
+
| Condition.lastTransitionTime | Timestamp | Last transition time, read only |
|
301
|
+
| Condition.claim | Boolean | Also apply the condition the claim |
|
302
|
+
|
303
|
+
### Events
|
304
|
+
|
305
|
+
The `BaseComposite.events` field is a list of events to apply to the Composite and
|
306
|
+
optionally to the Claim.
|
307
|
+
|
308
|
+
| Field | Type | Description |
|
309
|
+
| ----- | ---- | ----------- |
|
310
|
+
| Event.info | Boolean | Normal informational event |
|
311
|
+
| Event.warning | Boolean | Warning level event |
|
312
|
+
| Event.fatal | Boolean | Fatal events also terminate composing the Composite |
|
313
|
+
| Event.reason | String | PascalCase, machine-readable reason for this event |
|
314
|
+
| Event.message | String | Human-readable details about the event |
|
315
|
+
| Event.claim | Boolean | Also apply the event to the claim |
|
305
316
|
|
306
317
|
## Single use Composites
|
307
318
|
|
@@ -322,6 +333,85 @@ spec:
|
|
322
333
|
self.status.composite = 'Hello, World!'
|
323
334
|
```
|
324
335
|
|
336
|
+
## Quick Start Development
|
337
|
+
|
338
|
+
The following example demonstrates how to locally render function-python
|
339
|
+
compositions. First, install the `crossplane-function-pythonic` python
|
340
|
+
package into the python environment:
|
341
|
+
```shell
|
342
|
+
$ pip install crossplane-function-pythonic
|
343
|
+
```
|
344
|
+
Next, create the following files:
|
345
|
+
#### xr.yaml
|
346
|
+
```yaml
|
347
|
+
apiVersion: pythonic.fortra.com/v1alpha1
|
348
|
+
kind: Hello
|
349
|
+
metadata:
|
350
|
+
name: world
|
351
|
+
spec:
|
352
|
+
who: World
|
353
|
+
```
|
354
|
+
#### composition.yaml
|
355
|
+
```yaml
|
356
|
+
apiVersion: apiextensions.crossplane.io/v1
|
357
|
+
kind: Composition
|
358
|
+
metadata:
|
359
|
+
name: hellos.pythonic.fortra.com
|
360
|
+
spec:
|
361
|
+
compositeTypeRef:
|
362
|
+
apiVersion: pythonic.fortra.com/v1alpha1
|
363
|
+
kind: Hello
|
364
|
+
mode: Pipeline
|
365
|
+
pipeline:
|
366
|
+
- step: pythonic
|
367
|
+
functionRef:
|
368
|
+
name: function-pythonic
|
369
|
+
input:
|
370
|
+
apiVersion: pythonic.fn.fortra.com/v1alpha1
|
371
|
+
kind: Composite
|
372
|
+
composite: |
|
373
|
+
class Composite(BaseComposite):
|
374
|
+
def compose(self):
|
375
|
+
self.status.greeting = f"Hello, {self.spec.who}!"
|
376
|
+
```
|
377
|
+
#### functions.yaml
|
378
|
+
```yaml
|
379
|
+
apiVersion: pkg.crossplane.io/v1beta1
|
380
|
+
kind: Function
|
381
|
+
metadata:
|
382
|
+
name: function-pythonic
|
383
|
+
annotations:
|
384
|
+
render.crossplane.io/runtime: Development
|
385
|
+
spec:
|
386
|
+
package: ghcr.io/fortra/function-pythonic:v0.0.7
|
387
|
+
```
|
388
|
+
In one terminal session, run function-pythonic:
|
389
|
+
```shell
|
390
|
+
$ function-pythonic --insecure --debug
|
391
|
+
[2025-08-21 15:32:37.966] grpc._cython.cygrpc [DEBUG ] Using AsyncIOEngine.POLLER as I/O engine
|
392
|
+
```
|
393
|
+
In another terminal session, render the Composite:
|
394
|
+
```shell
|
395
|
+
$ crossplane render xr.yaml composition.yaml functions.yaml
|
396
|
+
---
|
397
|
+
apiVersion: pythonic.fortra.com/v1alpha1
|
398
|
+
kind: Hello
|
399
|
+
metadata:
|
400
|
+
name: world
|
401
|
+
status:
|
402
|
+
conditions:
|
403
|
+
- lastTransitionTime: "2024-01-01T00:00:00Z"
|
404
|
+
reason: Available
|
405
|
+
status: "True"
|
406
|
+
type: Ready
|
407
|
+
- lastTransitionTime: "2024-01-01T00:00:00Z"
|
408
|
+
message: All resources are composed
|
409
|
+
reason: AllComposed
|
410
|
+
status: "True"
|
411
|
+
type: ResourcesComposed
|
412
|
+
greeting: Hello, World!
|
413
|
+
```
|
414
|
+
|
325
415
|
## ConfigMap Packages
|
326
416
|
|
327
417
|
ConfigMap based python packages are enable using the `--packages` and
|
@@ -59,7 +59,6 @@ metadata:
|
|
59
59
|
spec:
|
60
60
|
package: ghcr.io/fortra/function-pythonic:v0.0.7
|
61
61
|
```
|
62
|
-
|
63
62
|
## Composed Resource Dependencies
|
64
63
|
|
65
64
|
function-pythonic automatically handles dependencies between composed resources.
|
@@ -253,34 +252,46 @@ selection. For now, use matchLabels and filter the results if required.
|
|
253
252
|
RequiredResources acts like a Python list to provide access to the found required resources.
|
254
253
|
Each resource in the list is the following RequiredResource class:
|
255
254
|
|
256
|
-
| Field | Description |
|
257
|
-
| ----- | ----------- |
|
258
|
-
| RequiredResource.name | The required resource name |
|
259
|
-
| RequiredResource.observed | Low level direct access to the observed required resource |
|
260
|
-
| RequiredResource.apiVersion | The required resource apiVersion |
|
261
|
-
| RequiredResource.kind | The required resource kind |
|
262
|
-
| RequiredResource.metadata | The required resource metadata |
|
263
|
-
| RequiredResource.spec | The required resource spec |
|
264
|
-
| RequiredResource.data | The required resource data |
|
265
|
-
| RequiredResource.status | The required resource status |
|
266
|
-
| RequiredResource.conditions | The required resource conditions |
|
255
|
+
| Field | Type | Description |
|
256
|
+
| ----- | ---- | ----------- |
|
257
|
+
| RequiredResource.name | String | The required resource name |
|
258
|
+
| RequiredResource.observed | Map | Low level direct access to the observed required resource |
|
259
|
+
| RequiredResource.apiVersion | String | The required resource apiVersion |
|
260
|
+
| RequiredResource.kind | String | The required resource kind |
|
261
|
+
| RequiredResource.metadata | Map | The required resource metadata |
|
262
|
+
| RequiredResource.spec | Map | The required resource spec |
|
263
|
+
| RequiredResource.data | Map | The required resource data |
|
264
|
+
| RequiredResource.status | Map | The required resource status |
|
265
|
+
| RequiredResource.conditions | Map | The required resource conditions |
|
267
266
|
|
268
267
|
### Conditions
|
269
268
|
|
270
|
-
The `conditions`
|
271
|
-
the map key being the condition type.
|
269
|
+
The `BaseCompsite.conditions`, `Resource.conditions`, and `RequiredResource.conditions` fields
|
270
|
+
are maps of that entity's status conditions array, with the map key being the condition type.
|
271
|
+
The fields are read only for `Resource.conditions` and `RequiredResource.conditions`.
|
272
272
|
|
273
|
-
| Field | Description |
|
274
|
-
| ----- | ----------- |
|
275
|
-
| Condition.type | The condtion type |
|
276
|
-
| Condition.status |
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
282
|
-
|
283
|
-
|
273
|
+
| Field | Type | Description |
|
274
|
+
| ----- | ---- | ----------- |
|
275
|
+
| Condition.type | String | The condtion type, or name |
|
276
|
+
| Condition.status | Boolean | The condition status |
|
277
|
+
| Condition.reason | String | PascalCase, machine-readable reason for this condition |
|
278
|
+
| Condition.message | String | Human-readable details about the condition |
|
279
|
+
| Condition.lastTransitionTime | Timestamp | Last transition time, read only |
|
280
|
+
| Condition.claim | Boolean | Also apply the condition the claim |
|
281
|
+
|
282
|
+
### Events
|
283
|
+
|
284
|
+
The `BaseComposite.events` field is a list of events to apply to the Composite and
|
285
|
+
optionally to the Claim.
|
286
|
+
|
287
|
+
| Field | Type | Description |
|
288
|
+
| ----- | ---- | ----------- |
|
289
|
+
| Event.info | Boolean | Normal informational event |
|
290
|
+
| Event.warning | Boolean | Warning level event |
|
291
|
+
| Event.fatal | Boolean | Fatal events also terminate composing the Composite |
|
292
|
+
| Event.reason | String | PascalCase, machine-readable reason for this event |
|
293
|
+
| Event.message | String | Human-readable details about the event |
|
294
|
+
| Event.claim | Boolean | Also apply the event to the claim |
|
284
295
|
|
285
296
|
## Single use Composites
|
286
297
|
|
@@ -301,6 +312,85 @@ spec:
|
|
301
312
|
self.status.composite = 'Hello, World!'
|
302
313
|
```
|
303
314
|
|
315
|
+
## Quick Start Development
|
316
|
+
|
317
|
+
The following example demonstrates how to locally render function-python
|
318
|
+
compositions. First, install the `crossplane-function-pythonic` python
|
319
|
+
package into the python environment:
|
320
|
+
```shell
|
321
|
+
$ pip install crossplane-function-pythonic
|
322
|
+
```
|
323
|
+
Next, create the following files:
|
324
|
+
#### xr.yaml
|
325
|
+
```yaml
|
326
|
+
apiVersion: pythonic.fortra.com/v1alpha1
|
327
|
+
kind: Hello
|
328
|
+
metadata:
|
329
|
+
name: world
|
330
|
+
spec:
|
331
|
+
who: World
|
332
|
+
```
|
333
|
+
#### composition.yaml
|
334
|
+
```yaml
|
335
|
+
apiVersion: apiextensions.crossplane.io/v1
|
336
|
+
kind: Composition
|
337
|
+
metadata:
|
338
|
+
name: hellos.pythonic.fortra.com
|
339
|
+
spec:
|
340
|
+
compositeTypeRef:
|
341
|
+
apiVersion: pythonic.fortra.com/v1alpha1
|
342
|
+
kind: Hello
|
343
|
+
mode: Pipeline
|
344
|
+
pipeline:
|
345
|
+
- step: pythonic
|
346
|
+
functionRef:
|
347
|
+
name: function-pythonic
|
348
|
+
input:
|
349
|
+
apiVersion: pythonic.fn.fortra.com/v1alpha1
|
350
|
+
kind: Composite
|
351
|
+
composite: |
|
352
|
+
class Composite(BaseComposite):
|
353
|
+
def compose(self):
|
354
|
+
self.status.greeting = f"Hello, {self.spec.who}!"
|
355
|
+
```
|
356
|
+
#### functions.yaml
|
357
|
+
```yaml
|
358
|
+
apiVersion: pkg.crossplane.io/v1beta1
|
359
|
+
kind: Function
|
360
|
+
metadata:
|
361
|
+
name: function-pythonic
|
362
|
+
annotations:
|
363
|
+
render.crossplane.io/runtime: Development
|
364
|
+
spec:
|
365
|
+
package: ghcr.io/fortra/function-pythonic:v0.0.7
|
366
|
+
```
|
367
|
+
In one terminal session, run function-pythonic:
|
368
|
+
```shell
|
369
|
+
$ function-pythonic --insecure --debug
|
370
|
+
[2025-08-21 15:32:37.966] grpc._cython.cygrpc [DEBUG ] Using AsyncIOEngine.POLLER as I/O engine
|
371
|
+
```
|
372
|
+
In another terminal session, render the Composite:
|
373
|
+
```shell
|
374
|
+
$ crossplane render xr.yaml composition.yaml functions.yaml
|
375
|
+
---
|
376
|
+
apiVersion: pythonic.fortra.com/v1alpha1
|
377
|
+
kind: Hello
|
378
|
+
metadata:
|
379
|
+
name: world
|
380
|
+
status:
|
381
|
+
conditions:
|
382
|
+
- lastTransitionTime: "2024-01-01T00:00:00Z"
|
383
|
+
reason: Available
|
384
|
+
status: "True"
|
385
|
+
type: Ready
|
386
|
+
- lastTransitionTime: "2024-01-01T00:00:00Z"
|
387
|
+
message: All resources are composed
|
388
|
+
reason: AllComposed
|
389
|
+
status: "True"
|
390
|
+
type: ResourcesComposed
|
391
|
+
greeting: Hello, World!
|
392
|
+
```
|
393
|
+
|
304
394
|
## ConfigMap Packages
|
305
395
|
|
306
396
|
ConfigMap based python packages are enable using the `--packages` and
|
@@ -19,11 +19,7 @@ from . import function
|
|
19
19
|
|
20
20
|
|
21
21
|
def main():
|
22
|
-
|
23
|
-
asyncio.run(Main().main())
|
24
|
-
except:
|
25
|
-
traceback.print_exc()
|
26
|
-
sys.exit(1)
|
22
|
+
asyncio.run(Main().main())
|
27
23
|
|
28
24
|
|
29
25
|
class Main:
|
@@ -38,6 +34,7 @@ class Main:
|
|
38
34
|
'--log-name-width',
|
39
35
|
type=int,
|
40
36
|
default=40,
|
37
|
+
metavar='WIDTH',
|
41
38
|
help='Width of the logger name in the log output, default 40',
|
42
39
|
)
|
43
40
|
parser.add_argument(
|
@@ -48,6 +45,7 @@ class Main:
|
|
48
45
|
parser.add_argument(
|
49
46
|
'--tls-certs-dir',
|
50
47
|
default=os.getenv('TLS_SERVER_CERTS_DIR'),
|
48
|
+
metavar='DIRECTORY',
|
51
49
|
help='Serve using mTLS certificates.',
|
52
50
|
)
|
53
51
|
parser.add_argument(
|
@@ -69,21 +67,25 @@ class Main:
|
|
69
67
|
'--packages-namespace',
|
70
68
|
action='append',
|
71
69
|
default=[],
|
72
|
-
|
70
|
+
metavar='NAMESPACE',
|
71
|
+
help='Namespaces to discover function-pythonic ConfigMaps in, default is cluster wide.',
|
73
72
|
)
|
74
73
|
parser.add_argument(
|
75
74
|
'--packages-dir',
|
76
75
|
default='./pythonic-packages',
|
77
|
-
|
76
|
+
metavar='DIRECTORY',
|
77
|
+
help='Directory to store discovered function-pythonic ConfigMaps to, defaults "<cwd>/pythonic-packages"'
|
78
78
|
)
|
79
79
|
parser.add_argument(
|
80
80
|
'--pip-install',
|
81
|
+
metavar='COMMAND',
|
81
82
|
help='Pip install command to install additional Python packages.'
|
82
83
|
)
|
83
84
|
parser.add_argument(
|
84
85
|
'--python-path',
|
85
86
|
action='append',
|
86
87
|
default=[],
|
88
|
+
metavar='DIRECTORY',
|
87
89
|
help='Filing system directories to add to the python path',
|
88
90
|
)
|
89
91
|
parser.add_argument(
|
@@ -92,7 +94,6 @@ class Main:
|
|
92
94
|
help='Allow oversized protobuf messages'
|
93
95
|
)
|
94
96
|
args = parser.parse_args()
|
95
|
-
|
96
97
|
self.configure_logging(args)
|
97
98
|
|
98
99
|
if args.pip_install:
|
@@ -136,11 +137,11 @@ class Main:
|
|
136
137
|
async with asyncio.TaskGroup() as tasks:
|
137
138
|
tasks.create_task(grpc_server.wait_for_termination())
|
138
139
|
tasks.create_task(packages.operator(
|
140
|
+
grpc_server,
|
141
|
+
grpc_runner,
|
139
142
|
args.packages_secrets,
|
140
143
|
args.packages_namespace,
|
141
144
|
args.packages_dir,
|
142
|
-
grpc_server,
|
143
|
-
grpc_runner,
|
144
145
|
))
|
145
146
|
else:
|
146
147
|
def stop():
|
@@ -8,16 +8,15 @@ import sys
|
|
8
8
|
import kopf
|
9
9
|
|
10
10
|
|
11
|
-
PACKAGE_LABEL = {'function-pythonic.package': kopf.PRESENT}
|
12
|
-
PACKAGES_DIR = None
|
13
11
|
GRPC_SERVER = None
|
14
12
|
GRPC_RUNNER = None
|
13
|
+
PACKAGE_LABEL = {'function-pythonic.package': kopf.PRESENT}
|
14
|
+
PACKAGES_DIR = None
|
15
15
|
|
16
16
|
|
17
|
-
def operator(
|
17
|
+
def operator(grpc_server, grpc_runner, packages_secrets, packages_namespace, packages_dir):
|
18
18
|
logging.getLogger('kopf.objects').setLevel(logging.INFO)
|
19
|
-
global
|
20
|
-
PACKAGES_DIR = packages_dir
|
19
|
+
global GRPC_SERVER, GRPC_RUNNER, PACKAGES_DIR
|
21
20
|
GRPC_SERVER = grpc_server
|
22
21
|
GRPC_RUNNER = grpc_runner
|
23
22
|
PACKAGES_DIR = pathlib.Path(packages_dir).expanduser().resolve()
|
@@ -41,6 +41,12 @@ validate-bump = false
|
|
41
41
|
[tool.hatch.build.targets.wheel]
|
42
42
|
only-include = ["crossplane"]
|
43
43
|
|
44
|
+
[tool.hatch.build.targets.sdist]
|
45
|
+
only-include = [
|
46
|
+
"crossplane",
|
47
|
+
"examples",
|
48
|
+
]
|
49
|
+
|
44
50
|
[tool.hatch.envs.default]
|
45
51
|
type = "virtual"
|
46
52
|
path = ".venv-default"
|
@@ -1,17 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"name": "function-pythonic-devcontainer",
|
3
|
-
"image": "mcr.microsoft.com/devcontainers/python:3.12-bookworm",
|
4
|
-
"features": {
|
5
|
-
"ghcr.io/devcontainers-extra/features/hatch:2": {},
|
6
|
-
"ghcr.io/devcontainers/features/docker-in-docker:2": {
|
7
|
-
"version": "latest",
|
8
|
-
"enableNonRootDocker": "true",
|
9
|
-
"moby": "false"
|
10
|
-
},
|
11
|
-
"ghcr.io/joebowbeer/devcontainers-features/crossplane:1": {
|
12
|
-
"channel": "stable",
|
13
|
-
"version": "current"
|
14
|
-
}
|
15
|
-
},
|
16
|
-
"postCreateCommand": "hatch env create"
|
17
|
-
}
|