我有一些简单的Python,其目标是部署hosts文件。 hosts文件的目的是这个样子:使用带有Jinja模板的Python循环
[master1]
*hostname*
[master2]
*hostname
我使用Python,试图做到这一点,首先,我检索我的VMware主机名建立和把它们放在一个名为tfhosts文件,它遵循/ etc/hosts文件的格式:
tfhosts
192.168.100.21 dc01-control-01
192.168.100.22 dc01-control-02
192.168.100.23 dc01-control-03
192.168.100.31 dc01-worker-01
192.168.100.32 dc01-worker-02
的Python代码如下所示:
hostname.py
import jinja2
from tempfile import NamedTemporaryFile
def return_hosts():
hosts = open('./tfhosts','r')
x = ""
for line in hosts:
x = x + str(line.split()[1:]).strip('[]').strip("''") + '\n'
return [x][0:]
inventory = """
[master1]
{{ host_master01 }}
[master2]
{{ host_master02 }}
"""
gethosts = return_hosts()
inventory_template = jinja2.Template(inventory)
for servers in (gethosts):
rendered_inventory = inventory_template.render({
'host_master01': servers[0],
'host_master02': servers[1],
})
hosts = NamedTemporaryFile(delete=False)
hosts.write(rendered_inventory)
hosts.close()
当我运行我的Python针对tfhosts,它简单地产生任一整组主机作为一个阵列切片或如果我试图通过使用限制范围[0:]
或者如果我使用服务器[0] |服务器[1]中的代码:
[master1]
d
[master2]
c
我得到的第一个字母d(主机名)只和用于主2 Ç。
任何人都可以发现问题并提供一些指导吗?
在此先感谢。
什么是与''' rendered_inventory = inventory_template.render输出({ 'host_master01':gethosts [0], 'host_master02':gethosts [1], })'''? – User
我得到: 回溯(最近最后一次通话): 文件 “test.py”,第32行,在 'host_master01':gethosts [1], IndexError:列表索引超出范围 –