Я пытаюсь создать шаблон для поддержки строк конфигурации для конкретной консольной платформы c.
Текущая конфигурация имеет следующий формат:
Пример 1:
/settings/network_connections/ETH0/ipv4_mode=static
/settings/network_connections/ETH0/pv4_address=10.0.0.10
/settings/network_connections/ETH0/ipv4_bitmask=24
/settings/network_connections/ETH0/ipv4_gateway=10.0.0.1
Если вы хотите настроить следующие строки выше, перед ним стоит слово «set», например:
Пример 2:
set /settings/network_connections/ETH0/ipv4_mode=static
set /settings/network_connections/ETH0/pv4_address=10.0.0.10
set /settings/network_connections/ETH0/ipv4_bitmask=24
set /settings/network_connections/ETH0/ipv4_gateway=10.0.0.1
В моем jinja2 шаблона, у меня есть что-то вроде этого:
Пример 3
{{ set| remediation }} /settings/network_connections/ETH0/ipv4_mode=static
{{ set| remediation }} /settings/network_connections/ETH0/pv4_address=10.0.0.10
{{ set| remediation }} /settings/network_connections/ETH0/ipv4_bitmask=24
{{ set| remediation }} /settings/network_connections/ETH0/ipv4_gateway=10.0.0.1
Я хочу иметь возможность визуализировать шаблон и иметь возможность выводить то, что у меня есть в примере 2 (с помощью 'set' ), а также возможность вывода как Пример 1 (без 'set') с использованием логической переменной (with_remediation). Если True, включить «набор» - иначе исключить «набор». В примере 3 «исправление» - это встроенный пользовательский фильтр.
import jinja2
loader = jinja2.FileSystemLoader('/tmp')
env = jinja2.Environment(autoescape=True, loader=loader)
def remediation(input,with_remediation):
"""Custom filter"""
if(with_remediation):
return input
else:
return ""
env.filters['remediation'] = remediation
temp = env.get_template('template.jinja2')
temp.render(set="set")
Но я не уверен, как передать переменную with_remediation в функцию remediate.
Я пробовал следуя примеру Вставить определение настраиваемого фильтра в шаблон jinja2? указано в ответе, но не уверен, поможет ли это в том, чего я пытаюсь достичь.
Кроме того, как я могу кодировать так что "набор" может быть любой "строкой", какой я хочу? Должен ли я включать каждую строку, которую хочу использовать, в строку temp.render(set="set")
? Например; temp.render(set="set", delete="delete",rename="rename")
или есть более эффективный способ решения этой проблемы?