我想根据 MAAS 区域使用不同的预置脚本。但我认为目前还不可能,也许还有其他解决方案,即如何根据标签或类似的东西使用不同的预置脚本?
这文档如果可能的话,没有显示任何示例或信息。
感谢您的帮助!
答案1
因为generic
和preseed_master
是由模板引擎自动生成的坦皮塔我们可以从 django / python 访问对象并决定调用预置脚本的哪些部分。
例如,我创建了一些区域(生产、暂存)并使用不同的镜像来获取所需的资源。我修改了文件generic
以添加额外的定义:
{{def example}}
# set repository based on zone name
#·{{node.zone}}
{{if node.zone.name in {'staging',} }}
d-i apt-setup/local0/repository string deb https://repo.example.com/ubuntu staging/
d-i apt-setup/local0/comment string staging repository
d-i apt-setup/local0/key sting http://repo.example.com/repo.key
{{endif}}
{{if node.zone.name in {'production',} }}
d-i apt-setup/local0/repository string deb https://repo.example.com/ubuntu production/
d-i apt-setup/local0/comment string production repository
d-i apt-setup/local0/key sting http://repo.example.com/repo.key
{{endif}}
d-i apt-setup/local1/repository string deb https://repo.example.com/ubuntu common/
d-i apt-setup/local1/comment string common reposiotry
d-i apt-setup/local1/key sting http://repo.example.com/repo.key
d-i pkgsel/include string git jenkins-slave jenkins-scripts ntp
{{enddef}}
可以通过以下方式在文件中轻松调用此定义preseed_master
:
{{self.example}}
您可以使用对象访问所有节点信息node
。可以在源代码中检查所有对象/模块详细信息/usr/lib/python2.7/dist-packages/maasserver/models/node.py
答案2
对于基于标签的预置,您可以执行以下操作:
{{if 'bigDisk' in (node.tag_names())}}
...
{{elif 'smallDisk' in (node.tag_names())}}
...
{{else}}
...
{{endif}}
如果您使用的“预置”部分是继承的,那么您就无法使用 {{inherit "File"}}。目前。