#! /usr/bin/python
from jinja import Environment, FileSystemLoader
from ConfigParser import SafeConfigParser
import os
# pc_cfg = py-configurator
pc_cfg = SafeConfigParser()
pc_cfg.read('/etc/py-configurator/py-configurator.cfg')
pc_config = dict(pc_cfg.items('main'))
base_path = pc_cfg.get('main','templates').rstrip('/')
target_path = pc_cfg.get('main','target').rstrip('/')
if not target_path:
target_path='/'
machine_cfg = pc_cfg.get('main','machine_cfg')
print 'Configuration:',pc_config.items()
ws_cfg = SafeConfigParser()
ws_cfg.read(machine_cfg)
ws_config = dict(ws_cfg.items('main'))
base_len = len(base_path)+1
env = Environment(loader=FileSystemLoader(base_path))
for root, dirs, files in os.walk(base_path, topdown=False):
for name in files:
na_root = root[base_len:]+'/' if root!=base_path else ''
print "Work on file:",name,"Root:",root,"Short root",na_root
tmpl_file=na_root+name
try:
os.lstat(os.path.join(target_path,na_root))
except:
os.mkdir(os.path.join(target_path,na_root))
tmpl = env.get_template(tmpl_file)
tmpl_vars={'name':tmpl_file}
tmpl_vars.update(os.environ)
tmpl_vars.update(ws_config)
open(os.path.join(target_path,tmpl_file),'w').write(tmpl.render(**tmpl_vars))
Пример конфига:
[main]
templates = /etc/py-configurator/templates/
target = /etc
machine_cfg = /etc/machine.cfg
Переменные берет из /etc/machine.cfg, например из такого:
[main]
ws_name = ws3
ws_num = 3
domain = msk5
region_addr = 24
dep_addr = 55
По сути сварганить бы что то вроде facter из puppet, но еще один велосипед, даже не знаю стоит ли.
Обещаный пример (/etc/hosts):
127.0.0.1 localhost
10.{{ region_addr }}.{{ dep_addr }}.{{ ws_num }} {{ ws_name }}.{{ domain }}.realm.tld {{ ws_name }}
10.{{ region_addr }}.{{ dep_addr }}.1 kdc.{{ domain }}.realm.tld
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
Подробнее о синтаксисе шаблонов (а он богат возможностями) тут.
Собственно вся затея с etc-шаблонятором родилась от любви к шаблонам Django, ну и слегка требовалась утилита шаблонной настройки.
Комментариев нет:
Отправить комментарий