我想在自动化中为配置文件添加新内容时尽可能简单,我想从vars文件中动态生成它,而不必在每次需要新行时调整模板
我们使用ruby,所以YAML正式配置。我在考虑这样的事情:
{% for variable,value in example.iteritems() %}
{{ variable|lower() }}: "{{ value }}"
{% endfor %}
并且在vars文件中有类似的内容:
example:
host: whatever
pass: 123
port: 577
and so on
除非我需要添加另一个缩进图层,否则这没有任何问题。
example:
host: whatever
pass: 123
port: 577
domain:
somevalue: bla.com
othervalue: foo.com
而不是在配置中生成相同的结构,它将生成如下内容:
domain: "{u'somevalue': u'bla.com', u'othervalue': u'foo.com'}"
如何保留与vars文件相同的结构和内容?
感谢。
答案 0 :(得分:0)
输入数据:
example:
domain:
othervalue: foo.com
somevalue: bla.com
host: whatever
pass: 123
port: 577
4个空格yaml template.j2:
example:{{ example | to_yaml(indent=2, default_flow_style=False) | comment(decoration=' ') }}
结果:
example:
domain:
othervalue: foo.com
somevalue: bla.com
host: whatever
pass: 123
port: 577
2个空格yaml template.j2:
public abstract class Builder<T extends A> {
public T build(*?*){
//compute args
return create(args);
}
protected abstract T create(args);
}
public class B_Builder extends Builder<B> {
@Override
protected B create(args) {
return new B(args);
}
}
public class C_Builder extends Builder<C>{
@Override
protected C create(args) {
return new C(args);
}
}
结果:
public class BuilderA {
public static <T extends A> T of(Class<T> type, Object arg) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
Constructor<T> constructor = type.getConstructor(arg.getClass());
return constructor.newInstance(arg);
}
}
请注意,dict键的输出顺序可能与您的输入不同,但您不应该依赖它。