我想为某些外部软件包生成配置文件。配置文件需要一些敏感信息,如AWS访问密钥和密码等。我想在github上公开这些配置文件,但显然我不想硬编码和公开这些凭据。
凭据也必须显示在配置文件中的正确位置,因此我不能只是" cat"他们到最后。
我认为使用像jinja2,mako,django等诱人的语言将是一个很好的解决方案。然后我可以将模板放在网上,并要求用户使用凭据创建一个新文件并运行一个脚本(我提供)来呈现模板。模板引擎还可以启用其他更复杂的编辑(我认为)。
有人可以推荐一款能够轻松实现的特定模板引擎吗?我想象你制作模板然后通过提供包含要分配的变量的字典来呈现它。也许他们都这样做。我不知道。
为了更具体一点,我想要做类似这样的事情
Template("Hello {{name}}, you are #{{num}}").render({"name":"Joe","num":1})
我看到的所有模板都是这样的
Template("Hello {{name}}, you are #{{num}}").render(name="Joe", num=1)
这使得编写读取键值对的参数文件的通用程序变得困难,并将它们交给模板进行渲染。例如,它可能需要使用" eval"这很尴尬。
答案 0 :(得分:1)
如果您的模板语言只允许render(a=foo, b=bar)
,您可以这样解决:d = {"a": foo, "b": bar}; render(**d)
- 不需要评估。
有关详情,请参阅https://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists
答案 1 :(得分:1)
我认为你可以用任何模板系统来做到这一点。如果您的参数位于字典中,但模板API需要关键字,请使用argument unpacking syntax:
my_template.render(**my_parameter_dict)
答案 2 :(得分:0)
这是基于意见的,但我将jinja2与YAML结合使用。
Jinja2非常灵活,允许循环,转义等。
YAML易于编辑,可以转换为python字典,这个Python字典的值可以用作渲染模板的基础。
我很高兴发现SaltStack解决方案默认使用这两个 - Jinja2和YAML。可能有充分的理由。