<div dir="ltr"><div style="font-size:12.8px">Am I doing something wrong, or is the user section of config template variables a real pain to use due to the use of dots in keys?</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">In theory, you can do just about anything you want by adding custom config keys under the user prefix, then using those values in templates.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">The trouble comes when trying to use them.  Dot is supposed to be a break point in the pongo template language representing another nested key/value hash.  It's not supposed to be a valid char on the key side and there seems to be no way to escape the dot and forcing pongo2 to treat the dot as a part of a key in the template language.  </div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">So when lxd provides "user.foo"="bar" to the template expansion, you can't just use them as {{user.foo}} and have them expanded as expected, because because {{use.foo}} references the non-existent {user: { foo: bar } } not { user.foo: bar }.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">For example set</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">config:</div><div style="font-size:12.8px">  user.foo: bar</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">in a template or via lxc luanch -c user.foo=bar and the only way I found to use it was this really obtuse looking for loop.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">{% for k,v in config %}{%if k in "user.foo" %}{{v}}{% endif %}{% endfor %}<br></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">And it's not just user space keys that use dot as part of a key provided to the template.  If you want the automagic-mac, I can only get it with</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">{% for k,v in config %}{%if k in "volatile.eth0.hwaddr" %}{{v}}{% endif %}{% endfor %}<br></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">not {{volatile.eth0.hwaddr}} as the examples suggest.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">but if you want the container name, you follow the straight forward syntax works: </div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">{{<a href="http://container.name/" target="_blank">container.name</a>}} is correct.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">This all seems way to strange to be the right way to do this, but alternate constructions that should make it a map to satisfy pongo2 are rejected as invalid config by lxc/lxd.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">So the big question is, am I missing a way easier construct, and is this intentional or something that should be changed?</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">config:</div><div style="font-size:12.8px">   user: </div><div style="font-size:12.8px">       foo: bar</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">or </div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">config: { foo: bar } </div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">Example:</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">==== metadata.yaml:</div><div style="font-size:12.8px">...</div><div style="font-size:12.8px">   </div><div style="font-size:12.8px">    "templates": {</div><div style="font-size:12.8px">...</div><div style="font-size:12.8px">        "/etc/sysconfig/network-scripts/ifcfg-eth0": {<br></div><div style="font-size:12.8px">            "template": "ifcfg-eth0.tpl",</div><div style="font-size:12.8px">            "when": [</div><div style="font-size:12.8px">                "start"</div><div style="font-size:12.8px">            ]</div><div style="font-size:12.8px">        },</div><div style="font-size:12.8px">...</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">==== templates/ifcfg-eth0.tpl:</div><div style="font-size:12.8px">DEVICE=eth0</div><div style="font-size:12.8px">BOOTPROTO=static</div><div style="font-size:12.8px">DHCPCLASS=</div><div style="font-size:12.8px">HWADDR={% for k,v in config %}{%if k in "volatile.eth0.hwaddr" %}{{v}}{% endif %}{% endfor %}</div><div style="font-size:12.8px">IPADDR={% for k,v in config %}{%if k in "user.ip" %}{{v}}{% endif %}{% endfor %}</div><div style="font-size:12.8px">NETMASK={% for k,v in config %}{%if k in "user.netmask" %}{{v}}{% endif %}{% endfor %}</div><div style="font-size:12.8px">GATEWAY={% for k,v in config %}{%if k in "user.gateway" %}{{v}}{% endif %}{% endfor %}</div><div style="font-size:12.8px">ONBOOT=yes</div><div style="font-size:12.8px"><div><br></div><div>==== lxc profile show local</div><div>name: local</div><div>config:</div><div>  user.gateway: 10.0.2.1</div><div>  user.netmask: 255.255.255.128</div><div>  user.ns: 10.0.2.1</div><div>description: Adds local network options that don't change from host to host.</div><div>devices:</div><div>  eth0:</div><div>    name: eth0</div><div>    nictype: bridged</div><div>    parent: lxdbr0</div><div>    type: nic</div></div></div>