【发布时间】:2015-10-04 17:28:01
【问题描述】:
我有一些简单的 Python,其目标是部署主机文件。 hosts 文件应如下所示:
[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 代码如下所示:
主机名.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()
当我针对 tfhosts 运行我的 Python 时,它只是将整个主机集生成为一个数组切片,或者如果我尝试使用 [0:] 来限制范围
或者如果我使用 servers[0] |服务器[1] 在代码中:
[master1]
d
[master2]
c
我只得到第一个字母d(主机名的),对于master 2 c。
谁能发现问题并提供一些指导?
提前致谢。
【问题讨论】:
-
``` render_inventory = inventory_template.render({ 'host_master01': gethosts[0], 'host_master02': gethosts[1], })```的输出是什么? >
-
我得到:回溯(最近一次调用最后一次):文件“test.py”,第 32 行,在
'host_master01':gethosts[1],IndexError:列表索引超出范围