<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://linux-kvm.org/index.php?action=history&amp;feed=atom&amp;title=Test_Configuration</id>
	<title>Test Configuration - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://linux-kvm.org/index.php?action=history&amp;feed=atom&amp;title=Test_Configuration"/>
	<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=Test_Configuration&amp;action=history"/>
	<updated>2026-04-30T16:29:10Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.5</generator>
	<entry>
		<id>https://linux-kvm.org/index.php?title=Test_Configuration&amp;diff=1976&amp;oldid=prev</id>
		<title>Drorr at 16:12, 9 March 2009</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=Test_Configuration&amp;diff=1976&amp;oldid=prev"/>
		<updated>2009-03-09T16:12:37Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://linux-kvm.org/index.php?title=Test_Configuration&amp;amp;diff=1976&amp;amp;oldid=1975&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Drorr</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=Test_Configuration&amp;diff=1975&amp;oldid=prev</id>
		<title>Drorr at 16:04, 9 March 2009</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=Test_Configuration&amp;diff=1975&amp;oldid=prev"/>
		<updated>2009-03-09T16:04:46Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 12:04, 9 March 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l21&quot;&gt;Line 21:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 21:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** A statement of the form &amp;#039;&amp;lt;key&amp;gt; ?= &amp;lt;value&amp;gt;&amp;#039; sets the value of &amp;lt;key&amp;gt; to &amp;lt;value&amp;gt;, in all dicts of the current frame, but only if &amp;lt;key&amp;gt; exists in the dict. The operators ?+= and ?&amp;lt;= are also supported.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** A statement of the form &amp;#039;&amp;lt;key&amp;gt; ?= &amp;lt;value&amp;gt;&amp;#039; sets the value of &amp;lt;key&amp;gt; to &amp;lt;value&amp;gt;, in all dicts of the current frame, but only if &amp;lt;key&amp;gt; exists in the dict. The operators ?+= and ?&amp;lt;= are also supported.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** A statement of the form &amp;#039;no &amp;lt;regex&amp;gt;&amp;#039; removes from the current frame all dicts whose &amp;#039;name&amp;#039; field matches &amp;lt;regex&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** A statement of the form &amp;#039;no &amp;lt;regex&amp;gt;&amp;#039; removes from the current frame all dicts whose &amp;#039;name&amp;#039; field matches &amp;lt;regex&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &lt;/del&gt;* A statement of the form &amp;#039;only &amp;lt;regex&amp;gt;&amp;#039; removes from the current frame all dicts whose &amp;#039;name&amp;#039; field does not match &amp;lt;regex&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* A statement of the form &amp;#039;only &amp;lt;regex&amp;gt;&amp;#039; removes from the current frame all dicts whose &amp;#039;name&amp;#039; field does not match &amp;lt;regex&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Parsing &amp;#039;variants&amp;#039;:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Parsing &amp;#039;variants&amp;#039;:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** A &amp;#039;variants&amp;#039; block is opened by a &amp;#039;variants:&amp;#039; statement. The contents of the block should follow the &amp;#039;variants:&amp;#039; line and should be indented.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** A &amp;#039;variants&amp;#039; block is opened by a &amp;#039;variants:&amp;#039; statement. The contents of the block should follow the &amp;#039;variants:&amp;#039; line and should be indented.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l36&quot;&gt;Line 36:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 36:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The following file:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The following file:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{{&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;key1 = value1&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;key1 = value1&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;key2 = value2&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;key2 = value2&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;key3 = value3&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;key3 = value3&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;}}}&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;results in the following list of dictionaries (a single dictionary):&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;results in the following list of dictionaries (a single dictionary):&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{&lt;/del&gt;{&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Dictionary #0:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Dictionary #0:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     depend = []&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     depend = []&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l52&quot;&gt;Line 52:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 51:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     name =  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     name =  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     shortname =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     shortname =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;}}&lt;/del&gt;}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Adding a &amp;#039;variants&amp;#039; block ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Adding a &amp;#039;variants&amp;#039; block ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key kvmwiki-kvmwiki_:diff::1.12:old-1974:rev-1975 --&gt;
&lt;/table&gt;</summary>
		<author><name>Drorr</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=Test_Configuration&amp;diff=1974&amp;oldid=prev</id>
		<title>Drorr at 15:48, 9 March 2009</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=Test_Configuration&amp;diff=1974&amp;oldid=prev"/>
		<updated>2009-03-09T15:48:38Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= The Weird Cartesian Product KVM Test Config File Format (TWCPKVMTCFF) =&lt;br /&gt;
&lt;br /&gt;
This is the format used by test configuration files in kvm_runtest_2. It was designed to meet several requirements:&lt;br /&gt;
* Support for quick definition of multiple test scenarios (drive format, ACPI support, SMP configuration and other QEMU params) for all guests and tests&lt;br /&gt;
* Support for exceptions applying to specific guests/tests/scenarios&lt;br /&gt;
* Support for dependencies between tests&lt;br /&gt;
* Unification of the various config files currently used into a single (hopefully simple) framework&lt;br /&gt;
&lt;br /&gt;
== General Description ==&lt;br /&gt;
&lt;br /&gt;
* The parser relies on indentation.&lt;br /&gt;
* The parser produces a list of dictionaries (dicts). Each dictionary contains a set of key-value pairs.&lt;br /&gt;
* Each dict contains at least three keys: &amp;#039;name&amp;#039;, &amp;#039;shortname&amp;#039; and &amp;#039;depend&amp;#039;. The values of &amp;#039;name&amp;#039; and &amp;#039;shortname&amp;#039; are strings, and the value of &amp;#039;depend&amp;#039; is a list of strings.&lt;br /&gt;
* A list of dictionaries will henceforth be referred to as a frame.&lt;br /&gt;
* The initial frame contains a single dict, whose &amp;#039;name&amp;#039; and &amp;#039;shortname&amp;#039; are empty strings, and whose &amp;#039;depend&amp;#039; is an empty list.&lt;br /&gt;
* Parsing dict contents:&lt;br /&gt;
** The dict parser operates on a frame, which will henceforth be referred to as the current frame.&lt;br /&gt;
** A statement of the form &amp;#039;&amp;lt;key&amp;gt; = &amp;lt;value&amp;gt;&amp;#039; sets the value of &amp;lt;key&amp;gt; to &amp;lt;value&amp;gt; in all dicts of the current frame. If a dict lacks &amp;lt;key&amp;gt;, it will be created.&lt;br /&gt;
** A statement of the form &amp;#039;&amp;lt;key&amp;gt; += &amp;lt;value&amp;gt;&amp;#039; appends &amp;lt;value&amp;gt; to the value of &amp;lt;key&amp;gt; in all dicts of the current frame. If a dict lacks &amp;lt;key&amp;gt;, it will be created.&lt;br /&gt;
** A statement of the form &amp;#039;&amp;lt;key&amp;gt; &amp;lt;= &amp;lt;value&amp;gt;&amp;#039; pre-pends &amp;lt;value&amp;gt; to the value of &amp;lt;key&amp;gt; in all dicts of the current frame. If a dict lacks &amp;lt;key&amp;gt;, it will be created.&lt;br /&gt;
** A statement of the form &amp;#039;&amp;lt;key&amp;gt; ?= &amp;lt;value&amp;gt;&amp;#039; sets the value of &amp;lt;key&amp;gt; to &amp;lt;value&amp;gt;, in all dicts of the current frame, but only if &amp;lt;key&amp;gt; exists in the dict. The operators ?+= and ?&amp;lt;= are also supported.&lt;br /&gt;
** A statement of the form &amp;#039;no &amp;lt;regex&amp;gt;&amp;#039; removes from the current frame all dicts whose &amp;#039;name&amp;#039; field matches &amp;lt;regex&amp;gt;.&lt;br /&gt;
 * A statement of the form &amp;#039;only &amp;lt;regex&amp;gt;&amp;#039; removes from the current frame all dicts whose &amp;#039;name&amp;#039; field does not match &amp;lt;regex&amp;gt;.&lt;br /&gt;
* Parsing &amp;#039;variants&amp;#039;:&lt;br /&gt;
** A &amp;#039;variants&amp;#039; block is opened by a &amp;#039;variants:&amp;#039; statement. The contents of the block should follow the &amp;#039;variants:&amp;#039; line and should be indented.&lt;br /&gt;
** A line in a &amp;#039;variants&amp;#039; block should be of the format &amp;#039;- &amp;lt;variant_name&amp;gt;:&amp;#039;. The contents of this variant should be specified following that line, and should be indented. The contents are parsed by the dict parser described above; they may be of the format &amp;#039;&amp;lt;key&amp;gt; &amp;lt;op&amp;gt; &amp;lt;value&amp;gt;&amp;#039;. They may also contain &amp;#039;variants:&amp;#039; statements, or whatever the dict parser recognizes.&lt;br /&gt;
** Each variant in a &amp;#039;variants&amp;#039; block inherits a copy of the frame in which the &amp;#039;variants:&amp;#039; statement appears. The &amp;#039;current frame&amp;#039;, which may be modified by the dict parser, becomes this copy.&lt;br /&gt;
** The name of the variant (specified in the line &amp;#039;- &amp;lt;variant_name&amp;gt;:&amp;#039;) is pre-pended to the &amp;#039;name&amp;#039; field of each dict of the variant&amp;#039;s frame, along with a separator dot (&amp;#039;.&amp;#039;).&lt;br /&gt;
** If the name of the variant is not preceeded by a &amp;#039;@&amp;#039; (i.e. &amp;#039;- @&amp;lt;variant_name&amp;gt;:&amp;#039;), it is pre-pended to the &amp;#039;shortname&amp;#039; field of each dict of the variant&amp;#039;s frame. In other words, if a variant&amp;#039;s name is preceeded by a &amp;#039;@&amp;#039;, it is omitted from the &amp;#039;shortname&amp;#039; field.&lt;br /&gt;
** The frames of the variants defined in the &amp;#039;variants&amp;#039; block are joined into a single frame which replaces the frame in which the &amp;#039;variants:&amp;#039; statement appears.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
=== A single dictionary ===&lt;br /&gt;
&lt;br /&gt;
The following file:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
key1 = value1&lt;br /&gt;
key2 = value2&lt;br /&gt;
key3 = value3&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
results in the following list of dictionaries (a single dictionary):&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
Dictionary #0:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = &lt;br /&gt;
    shortname =&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
=== Adding a &amp;#039;variants&amp;#039; block ===&lt;br /&gt;
&lt;br /&gt;
The following file:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
key1 = value1&lt;br /&gt;
key2 = value2&lt;br /&gt;
key3 = value3&lt;br /&gt;
&lt;br /&gt;
variants:&lt;br /&gt;
    - one:&lt;br /&gt;
    - two:&lt;br /&gt;
    - three:&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
results in the following list:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
Dictionary #0:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = one&lt;br /&gt;
    shortname = one&lt;br /&gt;
Dictionary #1:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = two&lt;br /&gt;
    shortname = two&lt;br /&gt;
Dictionary #2:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = three&lt;br /&gt;
    shortname = three&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
=== Modifying dictionaries inside a variant ===&lt;br /&gt;
&lt;br /&gt;
The following file:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
key1 = value1&lt;br /&gt;
key2 = value2&lt;br /&gt;
key3 = value3&lt;br /&gt;
&lt;br /&gt;
variants:&lt;br /&gt;
    - one:&lt;br /&gt;
        key1 = Hello World&lt;br /&gt;
        key2 &amp;lt;= some_prefix_&lt;br /&gt;
    - two:&lt;br /&gt;
        key2 &amp;lt;= another_prefix_&lt;br /&gt;
    - three:&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
results in the following list:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
Dictionary #0:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = Hello World&lt;br /&gt;
    key2 = some_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = one&lt;br /&gt;
    shortname = one&lt;br /&gt;
Dictionary #1:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = another_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = two&lt;br /&gt;
    shortname = two&lt;br /&gt;
Dictionary #2:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = three&lt;br /&gt;
    shortname = three&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
=== Adding dependencies ===&lt;br /&gt;
&lt;br /&gt;
The following file:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
key1 = value1&lt;br /&gt;
key2 = value2&lt;br /&gt;
key3 = value3&lt;br /&gt;
&lt;br /&gt;
variants:&lt;br /&gt;
    - one:&lt;br /&gt;
        key1 = Hello World&lt;br /&gt;
        key2 &amp;lt;= some_prefix_&lt;br /&gt;
    - two: one&lt;br /&gt;
        key2 &amp;lt;= another_prefix_&lt;br /&gt;
    - three: one two&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
results in the following list:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
Dictionary #0:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = Hello World&lt;br /&gt;
    key2 = some_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = one&lt;br /&gt;
    shortname = one&lt;br /&gt;
Dictionary #1:&lt;br /&gt;
    depend = [&amp;#039;one&amp;#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = another_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = two&lt;br /&gt;
    shortname = two&lt;br /&gt;
Dictionary #2:&lt;br /&gt;
    depend = [&amp;#039;one&amp;#039;, &amp;#039;two&amp;#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = three&lt;br /&gt;
    shortname = three&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
=== Multiple &amp;#039;variants&amp;#039; blocks ===&lt;br /&gt;
&lt;br /&gt;
The following file:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
key1 = value1&lt;br /&gt;
key2 = value2&lt;br /&gt;
key3 = value3&lt;br /&gt;
&lt;br /&gt;
variants:&lt;br /&gt;
    - one:&lt;br /&gt;
        key1 = Hello World&lt;br /&gt;
        key2 &amp;lt;= some_prefix_&lt;br /&gt;
    - two: one&lt;br /&gt;
        key2 &amp;lt;= another_prefix_&lt;br /&gt;
    - three: one two&lt;br /&gt;
&lt;br /&gt;
variants:&lt;br /&gt;
    - A:&lt;br /&gt;
    - B:&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
results in the following list:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
Dictionary #0:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = Hello World&lt;br /&gt;
    key2 = some_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = A.one&lt;br /&gt;
    shortname = A.one&lt;br /&gt;
Dictionary #1:&lt;br /&gt;
    depend = [&amp;#039;A.one&amp;#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = another_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = A.two&lt;br /&gt;
    shortname = A.two&lt;br /&gt;
Dictionary #2:&lt;br /&gt;
    depend = [&amp;#039;A.one&amp;#039;, &amp;#039;A.two&amp;#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = A.three&lt;br /&gt;
    shortname = A.three&lt;br /&gt;
Dictionary #3:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = Hello World&lt;br /&gt;
    key2 = some_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = B.one&lt;br /&gt;
    shortname = B.one&lt;br /&gt;
Dictionary #4:&lt;br /&gt;
    depend = [&amp;#039;B.one&amp;#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = another_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = B.two&lt;br /&gt;
    shortname = B.two&lt;br /&gt;
Dictionary #5:&lt;br /&gt;
    depend = [&amp;#039;B.one&amp;#039;, &amp;#039;B.two&amp;#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = B.three&lt;br /&gt;
    shortname = B.three&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;#039;no&amp;#039; and &amp;#039;only&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
The following file:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
key1 = value1&lt;br /&gt;
key2 = value2&lt;br /&gt;
key3 = value3&lt;br /&gt;
&lt;br /&gt;
variants:&lt;br /&gt;
    - one:&lt;br /&gt;
        key1 = Hello World&lt;br /&gt;
        key2 &amp;lt;= some_prefix_&lt;br /&gt;
    - two: one&lt;br /&gt;
        key2 &amp;lt;= another_prefix_&lt;br /&gt;
    - three: one two&lt;br /&gt;
&lt;br /&gt;
variants:&lt;br /&gt;
    - A:&lt;br /&gt;
        no one&lt;br /&gt;
    - B:&lt;br /&gt;
        only one|three&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
results in the following list:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
Dictionary #0:&lt;br /&gt;
    depend = [&amp;#039;A.one&amp;#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = another_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = A.two&lt;br /&gt;
    shortname = A.two&lt;br /&gt;
Dictionary #1:&lt;br /&gt;
    depend = [&amp;#039;A.one&amp;#039;, &amp;#039;A.two&amp;#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = A.three&lt;br /&gt;
    shortname = A.three&lt;br /&gt;
Dictionary #2:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = Hello World&lt;br /&gt;
    key2 = some_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = B.one&lt;br /&gt;
    shortname = B.one&lt;br /&gt;
Dictionary #3:&lt;br /&gt;
    depend = [&amp;#039;B.one&amp;#039;, &amp;#039;B.two&amp;#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = B.three&lt;br /&gt;
    shortname = B.three&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;#039;@&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
The following file:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
key1 = value1&lt;br /&gt;
key2 = value2&lt;br /&gt;
key3 = value3&lt;br /&gt;
&lt;br /&gt;
variants:&lt;br /&gt;
    - one:&lt;br /&gt;
        key1 = Hello World&lt;br /&gt;
        key2 &amp;lt;= some_prefix_&lt;br /&gt;
    - two: one&lt;br /&gt;
        key2 &amp;lt;= another_prefix_&lt;br /&gt;
    - three: one two&lt;br /&gt;
&lt;br /&gt;
variants:&lt;br /&gt;
    - @A:&lt;br /&gt;
        no one&lt;br /&gt;
    - B:&lt;br /&gt;
        only one|three&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
results in the following list (note the difference between the &amp;#039;name&amp;#039; and &amp;#039;shortname&amp;#039; fields):&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
Dictionary #0:&lt;br /&gt;
    depend = [&amp;#039;A.one&amp;#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = another_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = A.two&lt;br /&gt;
    shortname = two&lt;br /&gt;
Dictionary #1:&lt;br /&gt;
    depend = [&amp;#039;A.one&amp;#039;, &amp;#039;A.two&amp;#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = A.three&lt;br /&gt;
    shortname = three&lt;br /&gt;
Dictionary #2:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = Hello World&lt;br /&gt;
    key2 = some_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = B.one&lt;br /&gt;
    shortname = B.one&lt;br /&gt;
Dictionary #3:&lt;br /&gt;
    depend = [&amp;#039;B.one&amp;#039;, &amp;#039;B.two&amp;#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = B.three&lt;br /&gt;
    shortname = B.three&lt;br /&gt;
}}}&lt;/div&gt;</summary>
		<author><name>Drorr</name></author>
	</entry>
</feed>