我有一些簡單的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:列表索引超出範圍 –