Зачем миру нужны всякие декларативные монстры для конфигураций? Почему нет готового базового императивного фреймворка, просто всовывающегося в любой bash/python?
Вот взял сейчас написал чуть-чуть подобного, у меня теперь вот так выглядит функция развёртывания окружения:
@task
def ensure_environment_is_ready():
"""Initial dependencies and make sure needed directories exist"""
rs = []
sudo("apt-get update -qq")
sudo("apt-get install -qq -y git python-setuptools dnsmasq resolvconf")
ensure_exists("/home/deploy/proj")
ensure_exists("/home/deploy/proj/AdServer")
rs.append(ensure_line_present_at_beginning(
"search mycompany.com",
"/etc/resolvconf/resolv.conf.d/tail"))
ensure_exists_sudo("/var/log/AdServer")
ensure_file_present_sudo("/var/log/AdServer/AdServer.daemon.out")
ensure_file_present_sudo("/var/log/AdServer/AdServer.daemon.out")
ensure_file_present_sudo("/var/log/AdServer/daemon.err")
rs.append(ensure_ini_value_set('resolv-file', '/etc/resolv.conf',
'/etc/dnsmasq.conf'))
rs.append(ensure_ini_value_set('listen-address', '127.0.0.1',
'/etc/dnsmasq.conf'))
rs.append(ensure_config_file(
'configs/adserver/etc/monit/monitrc',
'/etc/monit/monitrc'))
if any(rs):
print(u"ヽ(゜ロ゜;)ノ")
print(u"Restarting services (running app will stop)")
sudo("service resolvconf restart")
sudo("service dnsmasq restart")
sudo("service monit restart")
То есть идея в том, что вместо дохуя-декларативных конфигураций мы лучше напишем дохуя-умную функцию ’ensure_ini_value_set`, которая умеет парсить ini-подобные конфиги и в нужную секцию пихать нужное значение, если его нету.
Сойдёт/похуй/говно/охуенно?