Source code for saltext.kubernetes.modules.kuberesource_state
"""
Per-resource state apply.
.. versionadded:: 2.1.0
Forwards a manifest through ``kubernetes.apply`` while leaving the
resource identity available to the manifest's Jinja templates via
``template_context`` (so a single manifest can be customised per
resource at dispatch time).
Dormant on stock Salt — see ``saltext.kubernetes.resources.kubernetes``.
"""
# pylint: disable=undefined-variable
from saltext.kubernetes.utils._kuberesource import resource_identity
from saltext.kubernetes.utils._kuberesource import virtual_or_dormant
__virtualname__ = "kubernetes"
def __virtual__():
return virtual_or_dormant()
[docs]
def apply_(
source=None,
manifest=None,
namespace=None,
field_manager="salt",
force_conflicts=False,
template=None,
template_context=None,
):
"""
Apply a manifest, with the active resource's identity exposed to
the template context.
The active resource's ``kind``, ``namespace`` and ``name`` are
merged into *template_context* under the ``resource`` key, so
Jinja-templated manifests can interpolate them:
.. code-block:: yaml
# salt://manifests/per-pod-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: cm-{{ resource.name }}
namespace: {{ resource.namespace }}
data:
owner: {{ resource.name }}
CLI Example:
.. code-block:: bash
salt '*' kuberesource_state.apply_
"""
kind, ns, name = resource_identity(__resource__) # noqa: F821
ctx = dict(template_context or {})
ctx.setdefault("resource", {"kind": kind, "namespace": ns, "name": name})
return __salt__["kubernetes.apply"]( # noqa: F821
source=source,
manifest=manifest,
namespace=namespace or ns,
field_manager=field_manager,
force_conflicts=force_conflicts,
template=template,
template_context=ctx,
)