日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python渲染光线_python模板渲染配置文件

發(fā)布時(shí)間:2023/12/9 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python渲染光线_python模板渲染配置文件 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

python的mako、jinja2模板庫,確實(shí)好用!這里做個(gè)筆記,好記性不如爛筆頭。

#!/usr/bin/env?python

#encoding=utf-8

import?sys,yaml???????????????????????#?配置文件使用yaml格式

from?mako.template?import?Template??????#?加載mako庫的Template?Class

from?jinja2?import?Environment,FileSystemLoader??#?加載jinja2的Environment,FileSystemLoader?Class

'''

解析配置文件,返回值是一個(gè)dict

'''def?parse_pxe_config(filename):

config?=?yaml.load(file(filename,'r'))

return?config

'''

這個(gè)函數(shù)實(shí)現(xiàn)的功能

舉例來說,掩碼前綴為27轉(zhuǎn)換為255.255.255.224

'''def?int2mask(mask_str):

mask_int?=?int(mask_str)

mask_array?=?['0'?for?i?in?xrange(32)]???#?python?for循環(huán),吊吧!一口氣生成32個(gè)list的元素

for?i?in?xrange(mask_int):

mask_array[i]?=?'1'

temp_mask?=?[''.join(mask_array[i*8:(i+1)*8])?for?i?in?xrange(4)]???#?每8位組成一個(gè)list元素

temp_mask?=?[str(int(i,2))?for?i?in?temp_mask]????#?int(i,2)?二進(jìn)制轉(zhuǎn)換為十進(jìn)制

return?'.'.join(temp_mask)

'''

根據(jù)網(wǎng)關(guān)地址和掩碼前綴得到管理網(wǎng)網(wǎng)段

'''def?get_manage_net(gateway,prefix_str):

prefix?=?int(prefix_str)

int2bin?=?[bin(int(i,10)).split('0b')[1]?for?i?in?gateway.split('.')]???#?bin(int(i,10))?十進(jìn)制轉(zhuǎn)化為二進(jìn)制

for?i?in?xrange(4):

if?len(int2bin[i])?

int2bin[i]?=?'0'*(8?-?len(int2bin[i]))?+?int2bin[i]

int2bin?=?''.join(int2bin)

int2bin?=?int2bin[0:prefix]+'0'*(32-prefix)

int2bin_list?=?[int2bin[8*i:(i+1)*8]?for?i?in?xrange(4)]

manage_net?=?[str(int(i,2))?for?i?in?int2bin_list]

return?'.'.join(manage_net)

'''

利用python模板庫渲染配置文件

'''def?create_pxe_config(config):

#??讀取配置文件中的配置項(xiàng)

system_common?=?config['system?common']

manage_prefix?=?system_common['manage_prefix']

manage_gateway?=?system_common['manage_gateway']

manage_mask?=?int2mask(manage_prefix)

manage_net?=?get_manage_net(manage_gateway,manage_prefix)

dns?=?system_common['dns']

fqdn?=?system_common['fqdn']

repo_url?=?system_common['repo_url']

password?=?system_common['password']

manage_nic?=?system_common['manage_nic']

storage_nic?=?system_common['storage_nic']

public_nic?=?system_common['public_nic']

data_nic?=?system_common['data_nic']

deploy_node?=?config['deploy?node']

deploy_node_ip?=?deploy_node['ip']

deploy_node_hostname?=?deploy_node['hostname']

dhcp_range_start?=?deploy_node['dhcp_range_start']

dhcp_range_end?=?deploy_node['dhcp_range_end']

compute_node?=?config['compute?node']

dhcp_template?=?Template(?????????????????????????????????????????#?創(chuàng)建一個(gè)Template對(duì)象

filename='./pxe_template/dhcpd.conf',

module_directory='/tmp/mako_modules'??????#?為了提高性能,從文件加載的?Template?還可以在文件系統(tǒng)中將生成的模塊緩存為一般的Python模塊文件,

)?????????????????????????????????????????#?下次同樣參數(shù)的Template?創(chuàng)建時(shí),自動(dòng)重用/tmp/mako_modules/目錄下的模塊文件。

dhcp_content?=?dhcp_template.render(??????????????????????????????#?傳給?Template?的文本參數(shù)被編譯為一個(gè)Python模塊。模塊包含一個(gè)?render_body()?函數(shù),它產(chǎn)生模板的輸出。

manage_gateway?=?manage_gateway,??????????#?調(diào)用render()?方法時(shí),Mako建立了一個(gè)模板的運(yùn)行環(huán)境,并調(diào)用?render_body()?函數(shù),把輸出保存到緩沖,返回它的字符串內(nèi)容

dns?=?dns,

manage_mask?=?manage_mask,

fqdn?=?fqdn,

deploy_node_ip?=?deploy_node_ip,

manage_net?=?manage_net,

dhcp_range_start?=?dhcp_range_start,

dhcp_range_end?=?dhcp_range_end

)

fp?=?open('./pxe_config/dhcpd.conf','w')?????#?生成dhcpd.conf配置文件

fp.write(dhcp_content)

if?fp?!=?None:

fp.close()

ip_mac_template?=?Template(?????????????????????????????????????????#?ip-mac?綁定

filename='./pxe_template/ip_mac.conf',

module_directory='/tmp/mako_modules'

)

for?compute?in?compute_node:

ip_mac_content?=?ip_mac_template.render(

compute_hostname?=?compute['hostname'],

manage_mac?=?compute['manage_mac'],

manage_ip?=?compute['manage_ip']

)

fp?=?open('./pxe_config/dhcpd.conf','a')??????????????????????#?以append方式打開文件

fp.write('\n'+ip_mac_content)?????????????????????????????????#?追加內(nèi)容

env?=?Environment(

loader?=?FileSystemLoader('./pxe_template')??????????#?這個(gè)類的實(shí)例被用于存儲(chǔ)配置信息,?全局對(duì)象,?從文件系統(tǒng)或其他位置加載模板,使用的加載器loader是FileSystemLoader類型,

)????????????????????????????????????????????????#?可以加載的模板是當(dāng)前工作目錄下的templates目錄下的模板文件

ks_template?=?env.get_template("puppet.cfg")?????????????????????#?使用env的模板環(huán)境加載名為puppet.cfg的模板文件.

ks_content?=?ks_template.render(?????????????????????????????????#?渲染模板template

repo_url?=?repo_url,

password?=?password,

deploy_node_hostname?=?deploy_node_hostname,

fqdn?=?fqdn,

deploy_node_ip?=?deploy_node_ip,

public_nic?=?public_nic,

storage_nic?=?storage_nic,

data_nic?=?data_nic,

manage_gateway?=?manage_gateway,

manage_mask?=?manage_mask

)

fp?=?file('./pxe_config/puppet.cfg','w')

fp.write(ks_content)

if?fp?!=?None:

fp.close()if?__name__?==?'__main__':

if?len(sys.argv)?!=?2?or?sys.argv[1]?!=?'config.yaml':

print?"Usage:pxe-init.py?config.yaml"

sys.exit(-1)

config?=?parse_pxe_config(sys.argv[1])

create_pxe_config(config)

針對(duì)上面代碼的改良版,寫的不好的地方,歡迎大家指出!#!/usr/bin/env?python

#encoding=utf-8

import?sys,yaml

import?subprocess?????????????????????????????????#?用來創(chuàng)建一個(gè)子進(jìn)程

from?jinja2?import?Environment,FileSystemLoader???#?統(tǒng)一使用jinja2模板

env?=?Environment(

loader?=?FileSystemLoader('./pxe_template')???#?env設(shè)為全局變量

)

def?parse_pxe_config(filename):

config?=?yaml.load(file(filename,'r'))

return?config

'''

'1'*4?==?'1111'

int('111',2)?==?7?二進(jìn)制轉(zhuǎn)換十進(jìn)制

從<

'''

def?int2mask(prefix):

return?'.'.join(str(int(('1'*(int(prefix))+'0'?\

*(32-int(prefix)))[i*8:(i+1)*8],2))?\

for?i?in?xrange(4))

'''

使用zip對(duì)兩個(gè)list同時(shí)遍歷,然后對(duì)各個(gè)元素進(jìn)行&運(yùn)算

192???168??2??????254

255???255??255??224

不知道通過ip和mask計(jì)算網(wǎng)絡(luò)號(hào),google下!

'''

def?get_manage_net(gateway,prefix_str):

mask?=?int2mask(int(prefix_str))

return?'.'.join(str(int(m)?&?int(n))?\

for?m,n?in?zip(gateway.split('.'),mask.split('.')))

'''

模板渲染抽象為一個(gè)函數(shù)

渲染的時(shí)候可以傳進(jìn)一個(gè)dict搞定,dict的key要和模板中的變量名對(duì)應(yīng)(我老大實(shí)驗(yàn)得到的)

'''

def?create_config_template(tem_name,tem_dict):

template?=?env.get_template(tem_name)

content?=?template.render(tem_dict)

return?content

'''

創(chuàng)建配置文件

'''

def?create_config_file(config_name,content,mode):

try:

fp?=?open(config_name,mode)

fp.write(content+'\n')

except?IOError:

print?"Error:?can\'t?find?file?or?read?data"

else:

fp.close()

'''

這部分內(nèi)容比上面的搜身了不少吧,當(dāng)然還有很多地方要改進(jìn)的!

'''

def?create_pxe_config(config):

system_common?=?config.get('system?common')???????????#?字典使用get方法獲取key對(duì)應(yīng)的value,如果key不存在,返回None。比config['system?common']友好多了。

manage_prefix?=?system_common.get('manage_prefix')

manage_gateway?=?system_common.get('manage_gateway')

manage_mask?=?int2mask(manage_prefix)

manage_net?=?get_manage_net(manage_gateway,manage_prefix)

deploy_node?=?config.get('deploy?node')

deploy_node['manage_gateway']?=?manage_gateway

deploy_node['manage_mask']?=?manage_mask

deploy_node['manage_net']?=?manage_net

dhcp_content?=?create_config_template('dhcpd.conf',deploy_node)

create_config_file('./pxe_config/dhcpd.conf',dhcp_content,'w')

compute_node?=?config['compute?node']

for?compute_name,compute_info?in?compute_node.items():

ip_mac_content?=?create_config_template("ip_mac.conf",compute_info)

create_config_file('./pxe_config/dhcpd.conf',ip_mac_content,'a')

subprocess.Popen('service?dhcpd?restart',shell?=?True)?????????????????#?開了子進(jìn)程來重啟dhcpd服務(wù),好讓修改的dhcp配置生效

deploy_node.update(system_common)

ks_content?=?create_config_template('puppet.cfg',deploy_node)

create_config_file('./pxe_config/puppet.cfg',ks_content,'w')

pxe_default_content?=?create_config_template('default',system_common)

create_config_file('./pxe_config/default',pxe_default_content,'w')

'''

這部分不變

'''

if?__name__?==?'__main__':

if?len(sys.argv)?!=?2?or?sys.argv[1]?!=?'config.yaml':

print?"Usage:pxe-init.py?config.yaml"

sys.exit(-1)

config?=?parse_pxe_config(sys.argv[1])

create_pxe_config(config)

參考鏈接

總結(jié)

以上是生活随笔為你收集整理的python渲染光线_python模板渲染配置文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。