From 1a089619a36c5828c155e360cbd1947c00a6e64d Mon Sep 17 00:00:00 2001 From: Mark Goddard Date: Thu, 24 Mar 2022 16:25:12 +0000 Subject: [PATCH] Use jinja2.pass_context instead of contextfilter The contextfilter decorator was deprecated in jinja2 3.0.0, and has been dropped in 3.1.0. This results in the following warning, and failed attempts to use filters: [WARNING]: Skipping plugin (filters.py) as it seems to be invalid: module 'jinja2' has no attribute 'contextfilter' This change switches to use the pass_context decorator. The minimum version of Jinja2 is raised to 3 to ensure pass_context is present. This backport has been updated to also support Jinja2 2.x releases, since the Wallaby upper constraints specify 2.11.3. In practice, most users will not use UC to install kolla-ansible. Change-Id: I649dd6211d3ae72b9539bc44652ef8cf5d579777 (cherry picked from commit fc2292b230fb2be03acb2273f097c566f59ba8fc) --- kolla_ansible/filters.py | 14 +++++++++----- kolla_ansible/kolla_address.py | 8 ++++++-- .../jinja2-pass-context-2afc328ade8c407b.yaml | 4 ++++ 3 files changed, 19 insertions(+), 7 deletions(-) create mode 100644 releasenotes/notes/jinja2-pass-context-2afc328ade8c407b.yaml diff --git a/kolla_ansible/filters.py b/kolla_ansible/filters.py index 94c4ae58a5..466b993d5c 100644 --- a/kolla_ansible/filters.py +++ b/kolla_ansible/filters.py @@ -12,13 +12,17 @@ # License for the specific language governing permissions and limitations # under the License. -import jinja2 +# NOTE: jinja2 3.1.0 dropped contextfilter in favour of pass_context. +try: + from jinja2 import pass_context +except ImportError: + from jinja2 import contextfilter as pass_context from kolla_ansible import exception from kolla_ansible.helpers import _call_bool_filter -@jinja2.contextfilter +@pass_context def service_enabled(context, service): """Return whether a service is enabled. @@ -34,7 +38,7 @@ def service_enabled(context, service): return _call_bool_filter(context, enabled) -@jinja2.contextfilter +@pass_context def service_mapped_to_host(context, service): """Return whether a service is mapped to this host. @@ -62,7 +66,7 @@ def service_mapped_to_host(context, service): service.get("container_name", "")) -@jinja2.contextfilter +@pass_context def service_enabled_and_mapped_to_host(context, service): """Return whether a service is enabled and mapped to this host. @@ -74,7 +78,7 @@ def service_enabled_and_mapped_to_host(context, service): service_mapped_to_host(context, service)) -@jinja2.contextfilter +@pass_context def select_services_enabled_and_mapped_to_host(context, services): """Select services that are enabled and mapped to this host. diff --git a/kolla_ansible/kolla_address.py b/kolla_ansible/kolla_address.py index 888ee734c2..3d8d4ef085 100644 --- a/kolla_ansible/kolla_address.py +++ b/kolla_ansible/kolla_address.py @@ -14,14 +14,18 @@ # See the License for the specific language governing permissions and # limitations under the License. -from jinja2.filters import contextfilter +# NOTE: jinja2 3.1.0 dropped contextfilter in favour of pass_context. +try: + from jinja2 import pass_context +except ImportError: + from jinja2 import contextfilter as pass_context from jinja2.runtime import Undefined from kolla_ansible.exception import FilterError from kolla_ansible.helpers import _call_bool_filter -@contextfilter +@pass_context def kolla_address(context, network_name, hostname=None): """returns IP address on the requested network diff --git a/releasenotes/notes/jinja2-pass-context-2afc328ade8c407b.yaml b/releasenotes/notes/jinja2-pass-context-2afc328ade8c407b.yaml new file mode 100644 index 0000000000..3a7ecc729c --- /dev/null +++ b/releasenotes/notes/jinja2-pass-context-2afc328ade8c407b.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - | + Fixes an issue seen when using Jinja2 3.1.0.