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.

Change-Id: I649dd6211d3ae72b9539bc44652ef8cf5d579777
This commit is contained in:
Mark Goddard 2022-03-24 16:25:12 +00:00
parent efadc95913
commit fc2292b230
4 changed files with 11 additions and 7 deletions

View File

@ -18,7 +18,7 @@ from kolla_ansible import exception
from kolla_ansible.helpers import _call_bool_filter from kolla_ansible.helpers import _call_bool_filter
@jinja2.contextfilter @jinja2.pass_context
def service_enabled(context, service): def service_enabled(context, service):
"""Return whether a service is enabled. """Return whether a service is enabled.
@ -34,7 +34,7 @@ def service_enabled(context, service):
return _call_bool_filter(context, enabled) return _call_bool_filter(context, enabled)
@jinja2.contextfilter @jinja2.pass_context
def service_mapped_to_host(context, service): def service_mapped_to_host(context, service):
"""Return whether a service is mapped to this host. """Return whether a service is mapped to this host.
@ -62,7 +62,7 @@ def service_mapped_to_host(context, service):
service.get("container_name", "<unknown>")) service.get("container_name", "<unknown>"))
@jinja2.contextfilter @jinja2.pass_context
def service_enabled_and_mapped_to_host(context, service): def service_enabled_and_mapped_to_host(context, service):
"""Return whether a service is enabled and mapped to this host. """Return whether a service is enabled and mapped to this host.
@ -74,7 +74,7 @@ def service_enabled_and_mapped_to_host(context, service):
service_mapped_to_host(context, service)) service_mapped_to_host(context, service))
@jinja2.contextfilter @jinja2.pass_context
def select_services_enabled_and_mapped_to_host(context, services): def select_services_enabled_and_mapped_to_host(context, services):
"""Select services that are enabled and mapped to this host. """Select services that are enabled and mapped to this host.

View File

@ -14,14 +14,14 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
from jinja2.filters import contextfilter from jinja2.filters import pass_context
from jinja2.runtime import Undefined from jinja2.runtime import Undefined
from kolla_ansible.exception import FilterError from kolla_ansible.exception import FilterError
from kolla_ansible.helpers import _call_bool_filter from kolla_ansible.helpers import _call_bool_filter
@contextfilter @pass_context
def kolla_address(context, network_name, hostname=None): def kolla_address(context, network_name, hostname=None):
"""returns IP address on the requested network """returns IP address on the requested network

View File

@ -0,0 +1,4 @@
---
fixes:
- |
Fixes an issue seen when using Jinja2 3.1.0.

View File

@ -11,7 +11,7 @@ cryptography>=2.1 # BSD/Apache-2.0
oslo.utils>=3.33.0 # Apache-2.0 oslo.utils>=3.33.0 # Apache-2.0
# templating # templating
Jinja2>=2.10 # BSD License (3 clause) Jinja2>=3 # BSD License (3 clause)
# Ansible's json_query # Ansible's json_query
jmespath>=0.9.3 # MIT jmespath>=0.9.3 # MIT