2012年1月12日 星期四

Python generate file with Template by Jinja2

Required: Jinja
Template file: syslog-ng.conf.tpl
context:
@version: 3.2

options {
    long_hostnames(off);
    flush_lines(0);
    use_dns(no);
    use_fqdn(no);
    owner("root");
    group("adm");
    perm(0640);
    stats_freq(0);
    bad_hostname("^gconfd$");
};

# Record syslog to file
source recorder {
    file("/proc/kmsg");
    unix-dgram("/dev/log");
}
destination recorder {
    file("/var/log/syslog"
        owner(syslog)
        group(adm)
        perm(0644)
        dir_perm(0755)
        create_dirs(yes));
}
log {
    source(recorder);
    destination(recorder);
};

# Send local syslog
source sender {
    file("/var/log/syslog");
};
destination sender {
{% for log_server in log_servers %}    tcp({{ log_server }} port(514));
{% endfor %}
#    tcp(172.16.116.240 port(514));
};
log {
    source(sender);
    destination(sender);
};

# Receive remote syslog
source receiver {
    udp(ip(0.0.0.0) port(514));
    tcp(ip(0.0.0.0) port(514));
};
destination receiver {
    file("/var/log/wistor/$YEAR.$MONTH.$DAY/all"
        owner(root)
        group(adm)
        perm(0644)
        dir_perm(0755)
        create_dirs(yes));
    file("/var/log/wistor/$YEAR.$MONTH.$DAY/$HOST"
        owner(root)
        group(adm)
        perm(0644)
        dir_perm(0755)
        create_dirs(yes));
};
log {
    source(receiver);
    destination(receiver);
};


Python program:
from jinja2 import Template

print Template(file("syslog-ng.conf.tpl").read()).render(log_server = [ "172.16.116.%d" % ip for ip in range(1, 11) ])

Reference: http://jinja.pocoo.org/docs/

沒有留言:

張貼留言