https://gist.github.com/wrunk/1317933

#!/usr/bin/env python
# -*- coding: utf-8 -*- from jinja2 import Environment, FileSystemLoader
import os if __name__ == '__main__':
j2_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'jinja2')
kickstart_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'kickstart')
pxe_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'pxe') j2_env = Environment(loader=FileSystemLoader(j2_path)) host = {
'root_password': '123456',
'os': 'centos-6',
'install_host': 'install.localhost',
'name': 'bjtn-g18-10-11',
'interface': [
{'dev': 'em1', 'mac': 'aa:aa:aa:aa:aa:01', 'ip': '10.0.10.11', 'mask': '255.255.255.0'},
{'dev': 'em2', 'mac': 'aa:aa:aa:aa:aa:02', 'ip': '200.0.10.11', 'mask': '255.255.255.192'}
],
'gateway': '10.0.10.1'
} with open(os.path.join(kickstart_path, host['interface'][0]['mac']), 'w') as f:
f.write(j2_env.get_template('ks-centos-6').render(host=host)) with open(os.path.join(pxe_path, host['interface'][0]['mac']), 'w') as f:
f.write(j2_env.get_template('pxe-centos-6').render(host=host))

pxe-centos-6

LABEL {{ os }}
MENU DEFAULT
MENU LABEL {{ mac }}
KERNEL {{ os }}/vmlinuz
APPEND initrd={{ os }}/initrd.img ks=http://{{ install_host }}/kickstart/{{ mac }} ksdevice=link ramdisk_size=102400 console=tty0 console=ttyS1,115200

ks-centos-6

# kickstart
lang en_US.UTF-8
keyboard us
timezone Asia/Shanghai auth --enableshadow --passalgo=sha512
#python -c 'import crypt; print(crypt.crypt("MyPassword", "$6$MySalt"))'
rootpw --iscrypted {{ host.root_password }}
text
install
skipx
url --url http://{{ host.install_host }}/{{ host.os }} bootloader --location=mbr
zerombr
clearpart --drives=sda --all #--initlabel part swap --fstype='swap' --ondisk=sda --size=8000
part / --fstype='ext4' --ondisk=sda --size=50000
part /opt --fstype='ext4' --ondisk=sda --grow --size=1 network --device={{ host.interface[0].mac }} --bootproto=dhcp --activate firewall --disabled
selinux --disabled
services --disabled=NetworkManager,ip6tables,iptables,postfix,cpuspeed
services --enabled=network
firstboot --disabled
reboot %packages
@Base
wget
%end %pre
clearpart --drives=sda --all
/usr/sbin/parted -s /dev/sda mklabel gpt
%end %post
cat > /etc/sysconfig/network << _EOF_
NETWORKING=yes
HOSTNAME={{ host.name }}
GATEWAY={{ host.gateway }}
_EOF_ {% for nic in host.interface %}
cat > /etc/sysconfig/network-scripts/ifcfg-{{ nic.dev }} << _EOF_
BOOTPROTO=static
DEVICE={{ nic.dev }}
IPADDR={{ nic.ip }}
NETMASK={{ nic.mask }}
ONBOOT=yes
_EOF_
{% endfor %}
%end

python jinjia2模板使用的更多相关文章

  1. [Python自学] Flask框架 (1) (Flask介绍、配置、Session、路由、请求和响应、Jinjia2模板语言、视图装饰器)

    oldboy:s9day114 参考博客:https://www.cnblogs.com/wupeiqi/articles/7552008.html 一.Flask简介 1.安装Flask pip i ...

  2. flask中jinjia2模板引擎使用详解1

    在之前的文章中我们介绍过flask调用jinja2模板的基本使用,这次我们来说一下jinjia2模板的使用 Jinja2 在其是一个 Python 2.4 库之前,被设计 为是灵活.快速和安全的. 模 ...

  3. 7、Flask实战第7天:Jinjia2模板

    Jinja2模板介绍和查找路径 在前面的章节中,视图只是直接返回文本,然而在实际生产环境中其实很少这样用,因为实际的页面大多带有样式和复杂逻辑的HTML代码,这可以让浏览器其渲染出非常漂亮的页面. 我 ...

  4. day94:flask:Jinjia2模板引擎&flask中的CSRF攻击&Flask-SQLAlchemy的创建模型类和基本的增删改查

    目录 1.Jinjia2模板引擎 1.Jinjia2加载模板并传递数据到模板中 2.Jinjia2的模板语句 3.模板中特有的变量和函数 4.模板中内置的过滤器 5.自定义过滤器 6.模板继承 2.在 ...

  5. flask中jinjia2模板使用详解2

    接上文 注释的使用 在jinjia2模板中,使用{# #}进行代码注释,如下所示 运行后发现,注释不会被render出来 去掉空行 两种方法可以去掉jinjia2模板中的空白行,一是设置jinjia2 ...

  6. flask中jinjia2模板引擎详解4

    接上文 For循环 和其它编程语言一样,for用来编辑列表中的项.下面以一个例子来说明for在flask的jinjia2模板中的使用. 创建一个模板list.html 代码如下{% extends & ...

  7. flask之jinjia2模板语言

    flask_jinjia2.py ''' flask中的jinjia2模板语言(和django中模板类似): (1)模板变量{{ }} (2)模板标签{% %} ①for循环遍历 {% for foo ...

  8. python jinjia2 使用语法

    简介 对于jinjia2来说,模板仅仅是文本文件,可以生成任何基于文本的文件格式,例如HTML.XML.CSV.LaTex 等等,以下是基础的模板内容: <!DOCTYPE html> & ...

  9. python jinjia2 高级

    高层api class jinja2.Environment([options]) Enviroment:环境,是Jinjia2的核心组件,它包含重要的共享变量,如配置.过滤器.测试.全局变量.模板加 ...

随机推荐

  1. (WPF) 再议binding:点击User Control时,User Control变换颜色或做其他的处理。

    Binding 是前台UI(显示层)和后台代码(数据层)的桥梁.理论上当后台的数据变动时,显示的数据或样式应该随之而变.这些是动态的. 对于Binding的设置可以在前台Xaml,也可以在后台Code ...

  2. C#学习笔记五: C#3.0Lambda表达式及Linq解析

    最早使用到Lambda表达式是因为一个需求:如果一个数组是:int[] s = new int[]{1,3,5,9,14,16,22};例如只想要这个数组中小于15的元素然后重新组装成一个数组或者直接 ...

  3. Form_Form页面跳转的四种方式(open_form, call_form, new_form, fnd_function)详解(汇总)

    2014-06-29 Created By BaoXinjian

  4. hdu 1532 Dinic模板(小白书)

    hdu1532 输入n,m. n条边,m个点,之后给出a到b的容量,求1到m的最大流. 注意:Dinic只能调用一次,因为原理是改变cap的值,如果调用多次一样的,那么第一次会对,其余的都会是0,因为 ...

  5. hdu 5437 Alisha’s Party 模拟 优先队列

    Problem Description Princess Alisha invites her friends to come to her birthday party. Each of her f ...

  6. python urllib模块的urlopen()的使用方法及实例

    Python urllib 库提供了一个从指定的 URL 地址获取网页数据,然后对其进行分析处理,获取想要的数据. 一.urllib模块urlopen()函数: urlopen(url, data=N ...

  7. eclipse ide for java ee developers 开发环境搭建(j2ee)

    转载自:http://www.iteye.com/topic/982182 真的是一片很不错的文章啊! 使用eclipse真的有年头了,相信java程序员没有不知道它的,最近在给团队中新来的应届生做指 ...

  8. 《一课经济学》书摘笔记IV

    有出口,才有钱进口:没有进口,就没有机会出口,因为外国人没有美元可以用来买美国的产品.要想扩大出口,就必须有更多的进口,否则收不到货款.要想压缩进口,出口也会随之被压缩.所以,当我们决定减少进口的时候 ...

  9. xargs -r

    -r  no-run-if-empty xargs大多数 Linux 命令都会产生输出:文件列表.字符串列表等.但如果要使用其他某个命令并将前一个命令的输出作为参数该怎么办?例如,file 命令显示文 ...

  10. 大容量导入和导出 XML 文档的示例

    示例表 若要测试示例 A,必须创建示例表 T.   USE tempdb CREATE TABLE T (IntCol int, XmlCol xml); GO 示例数据文件 在运行示例 A 之前,必 ...