При редком использовани удобней что-то что примит исходную строку и результирующую и на основании этого сделает регулярку.
Но я такого не встречал к сожелению.
Ну не знаю для меня условие kernel >5.0 и qemu > 4.0 и ubuntu 18 lts невыполнимо т.к. там ещё 2.11. так что можно считать что в промышленой эксплатации этой фичи нет.
root@scw:/etc/bird# cat /usr/local/bin/chklist.sh
#!/bin/bash
TMP_DIR=/tmp/blacklist
mkdir -p $TMP_DIR/list
cd $TMP_DIR/list
wget -N https://antifilter.download/list/ipsum.lst https://antifilter.download/list/subnet.lst
old=$(cat $TMP_DIR/md5.txt);
new=$(cat $TMP_DIR/list/*.lst | md5sum | head -c 32);
if [ "$old" != "$new" ]
then
cat $TMP_DIR/list/ipsum.lst | sed 's_.*_route & reject;_' > /etc/bird/ipsum.txt
cat $TMP_DIR/list/subnet.lst | sed 's_.*_route & reject;_' > /etc/bird/subnet.txt
/usr/sbin/birdc configure;
logger "RKN list reconfigured";
echo $new > $TMP_DIR/md5.txt;
fi
root@scw:/etc/bird# cat /etc/bird/bird.conf
log syslog all;
router id 172.24.2.2;
protocol kernel {
scan time 60;
import none;
export where proto = "OurRouter";
}
protocol device {
scan time 60;
}
protocol direct {
interface "venet*", "tun*", "ppp*"; # Restrict network interfaces it works with
}
protocol static static_bgp {
include "subnet.txt";
include "ipsum.txt";
include "custom.txt";
}
protocol bgp OurRouter {
description "Our Router";
neighbor 172.24.2.1 as 64999;
import all;
export where proto = "static_bgp";
next hop self;
local as 64998;
source address 172.24.2.2;
passive off;
}
+ если результат шаблона изменился
но у этой строки есть частный случай
когда два разных шаблона накатываются на один файл на сервере тогда будет постоянный changed даже если результат их работы одинаковый
и результат этой строки можно подправить переопределив его в /etc/ansible/ansible.cfg
ansible_managed = Ansible managed: modified on %Y-%m-%d %H:%M:%S
мой пример include в шаблоне github.com/le9i0nx/ansible-rspamd/blob/master/templates/etc/rspamd/conf.d/default.conf.j2
код#{{ ansible_managed }}
{% if item.data is mapping %}
{% for key, value in item.data|dictsort %}
{% set tabs = [] %}
{% for i in tabs %}{{i}}{% endfor %}{{ key }} {
{% include 'nested_structure.j2' %}
{% for i in tabs %}{{i}}{% endfor %}}
{% endfor %}
{% endif %}
а теперь магия инклуд самого себя github.com/le9i0nx/ansible-rspamd/blob/master/templates/etc/rspamd/conf.d/nested_structure.j2
код{% if value is mapping %}
{% set tabs = tabs + [' '] %}
{% for key, value in value|dictsort %}
{% if key == 'raw' %}
{% for listes in value %}
{% for i in tabs %}{{i}}{% endfor %}{{ listes }}
{% endfor %}
{% elif value is number %}
{% for i in tabs %}{{i}}{% endfor %}{{ key }} = {{ value }};
{% elif value is string %}
{% for i in tabs %}{{i}}{% endfor %}{{ key }} = "{{ value }}";
{% elif value is iterable %}
{% if value is mapping %}
{% for i in tabs %}{{i}}{% endfor %}{{ key }} {
{% include 'nested_structure.j2' %}
{% for i in tabs %}{{i}}{% endfor %}}
{% else %}
{% for listes in value %}
{% if listes is mapping %}
{% set value = listes %}
{% for i in tabs %}{{i}}{% endfor %}{{ key }} {
{% include 'nested_structure.j2' %}
{% for i in tabs %}{{i}}{% endfor %}}
{% else %}
{% for i in tabs %}{{i}}{% endfor %}{{ key }} = "{{ listes }}«1;
{% endif %}
{% endfor %}
{% endif %}
{% else %}
{% for i in tabs %}{{i}}{% endfor %}{{ key }} = {{ value }};
{% endif %}
{% endfor %}
{% endif %}
вообще некоторые вещи в шаблонах работают не ожидаемо
с чем приходится считатся
скрипт читает meta для получения списка поддерживаемых ос и создает докер контейнеры с настроенным ключевым доступом.
потом запускается ansible.
тест считается удачным если роль отработала без ошибок во всех контейнерах.
проблемой для меня сейчас является только скорость выполнения такого теста (6мин +-2 мин)
При редком использовани удобней что-то что примит исходную строку и результирующую и на основании этого сделает регулярку.
Но я такого не встречал к сожелению.
Ну не знаю для меня условие kernel >5.0 и qemu > 4.0 и ubuntu 18 lts невыполнимо т.к. там ещё 2.11. так что можно считать что в промышленой эксплатации этой фичи нет.
у virtio-scsi есть важный плюс он поддерживает проброс trim
добавить маршруты в bird можно так
Ну не оценят и ладно. А опыт останется и в другом месте прегодится.
https://github.com/le9i0nx/debian-autoinstall
например так
но у этой строки есть частный случай
когда два разных шаблона накатываются на один файл на сервере тогда будет постоянный changed даже если результат их работы одинаковый
и результат этой строки можно подправить переопределив его в /etc/ansible/ansible.cfg
ansible_managed = Ansible managed: modified on %Y-%m-%d %H:%M:%S
github.com/le9i0nx/ansible-rspamd/blob/master/templates/etc/rspamd/conf.d/default.conf.j2
код#{{ ansible_managed }}
{% if item.data is mapping %}
{% for key, value in item.data|dictsort %}
{% set tabs = [] %}
{% for i in tabs %}{{i}}{% endfor %}{{ key }} {
{% include 'nested_structure.j2' %}
{% for i in tabs %}{{i}}{% endfor %}}
{% endfor %}
{% endif %}
а теперь магия инклуд самого себя
github.com/le9i0nx/ansible-rspamd/blob/master/templates/etc/rspamd/conf.d/nested_structure.j2
код{% if value is mapping %}
{% set tabs = tabs + [' '] %}
{% for key, value in value|dictsort %}
{% if key == 'raw' %}
{% for listes in value %}
{% for i in tabs %}{{i}}{% endfor %}{{ listes }}
{% endfor %}
{% elif value is number %}
{% for i in tabs %}{{i}}{% endfor %}{{ key }} = {{ value }};
{% elif value is string %}
{% for i in tabs %}{{i}}{% endfor %}{{ key }} = "{{ value }}";
{% elif value is iterable %}
{% if value is mapping %}
{% for i in tabs %}{{i}}{% endfor %}{{ key }} {
{% include 'nested_structure.j2' %}
{% for i in tabs %}{{i}}{% endfor %}}
{% else %}
{% for listes in value %}
{% if listes is mapping %}
{% set value = listes %}
{% for i in tabs %}{{i}}{% endfor %}{{ key }} {
{% include 'nested_structure.j2' %}
{% for i in tabs %}{{i}}{% endfor %}}
{% else %}
{% for i in tabs %}{{i}}{% endfor %}{{ key }} = "{{ listes }}«1;
{% endif %}
{% endfor %}
{% endif %}
{% else %}
{% for i in tabs %}{{i}}{% endfor %}{{ key }} = {{ value }};
{% endif %}
{% endfor %}
{% endif %}
вообще некоторые вещи в шаблонах работают не ожидаемо
с чем приходится считатся
Travis файл github.com/le9i0nx/ansible-syncthing/blob/master/.travis.yml
скрипт читает meta для получения списка поддерживаемых ос и создает докер контейнеры с настроенным ключевым доступом.
потом запускается ansible.
тест считается удачным если роль отработала без ошибок во всех контейнерах.
проблемой для меня сейчас является только скорость выполнения такого теста (6мин +-2 мин)