<div class="socmaildefaultfont" dir="ltr" style="font-family:Arial;font-size:10.5pt" ><div dir="ltr" >This can be merged but in future you can do a small optimization by not initializing a list and use 'in' operator to check the match. If you are just comparing the strings then simple '==' operator is good enough unless you are doing substring matching or multiple strings matching.&nbsp;</div>
<div dir="ltr" ><div class="socmaildefaultfont" dir="ltr" style="font-family:Arial;font-size:10.5pt" ><div class="socmaildefaultfont" dir="ltr" style="font-family:Arial;font-size:10.5pt" ><div dir="ltr" style="margin-top: 20px;" ><div style="font-size: 12pt; font-weight: bold; font-family: sans-serif; color: #7C7C5F;" >Harshal&nbsp;Patil</div>
<div style="font-size: 8pt; font-family: sans-serif; margin-top: 10px;" ><div><span style="font-weight: bold; color: #336699;" >E-mail: </span><a href="mailto:harshal.patil@in.ibm.com" style="color: #555" >harshal.patil@in.ibm.com</a></div></div></div></div></div></div>
<div dir="ltr" >&nbsp;</div>
<div dir="ltr" >&nbsp;</div>
<blockquote data-history-content-modified="1" data-history-expanded="1" dir="ltr" style="border-left:solid #aaaaaa 2px; margin-left:5px; padding-left:5px; direction:ltr; margin-right:0px" >----- Original message -----<br>From: archus@linux.vnet.ibm.com<br>Sent by: kimchi-devel-bounces@ovirt.org<br>To: Kimchi Devel &lt;kimchi-devel@ovirt.org&gt;<br>Cc:<br>Subject: [Kimchi-devel] [PATCH V1] [Kimchi] Only on s390x add default networks to template if template.conf has default network configuration uncommented.<br>Date: Wed, Aug 17, 2016 6:09 PM<br>&nbsp;
<div><font face="Default Monospace,Courier New,Courier,monospace" size="2" >From: Archana Singh &lt;archus@linux.vnet.ibm.com&gt;<br><br>Below are the changes done for s390x architecture to only add default networks<br>to template if template.conf has network configuration uncommented<br>otherwise do not add any network by default.<br><br>1) Only on s390x, osinfo._get_tmpl_defaults() does not add<br>default network in case template.conf has commented out network configuration.<br>2) Only on s390x, NetworksModel._check_default_networks() does<br>not throw key error if networks not found in tmpl_defaults.<br>3) Only on s390x, VMTemplate.validate_integrity() does not throw<br>key error if networks not found in the template.<br>4) Only on s390x, LibvirtVMTemplate._network_validate() does not<br>throw key error on s390x if networks not found in tmpl_default, as on s390x networks is optional.<br>5) Only on s390x, VMTemplate._get_network_xml() does<br>return empty string and does not throw key error if networks not found in template object.<br>6) Only on s390x, control/templates.py gets networks as [] if not found<br>self.info.<br><br>Signed-off-by: Archana Singh &lt;archus@linux.vnet.ibm.com&gt;<br>---<br>&nbsp;control/templates.py | &nbsp;2 +-<br>&nbsp;model/networks.py &nbsp; &nbsp;| &nbsp;7 ++++++-<br>&nbsp;model/templates.py &nbsp; | &nbsp;5 ++++-<br>&nbsp;osinfo.py &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| 14 +++++++++++++-<br>&nbsp;vmtemplate.py &nbsp; &nbsp; &nbsp; &nbsp;| 15 +++++++++++++--<br>&nbsp;5 files changed, 37 insertions(+), 6 deletions(-)<br><br>diff --git a/control/templates.py b/control/templates.py<br>index bb2e068..2dd8601 100644<br>--- a/control/templates.py<br>+++ b/control/templates.py<br>@@ -67,7 +67,7 @@ class Template(Resource):<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'memory': self.info['memory'],<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'cdrom': self.info.get('cdrom', None),<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'disks': self.info['disks'],<br>- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'networks': self.info['networks'],<br>+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'networks': self.info.get('networks', []),<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'folder': self.info.get('folder', []),<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'graphics': self.info['graphics'],<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'cpu_info': self.info.get('cpu_info')<br>diff --git a/model/networks.py b/model/networks.py<br>index 35431d4..c9db979 100644<br>--- a/model/networks.py<br>+++ b/model/networks.py<br>@@ -21,6 +21,7 @@ import copy<br>&nbsp;import ipaddr<br>&nbsp;import libvirt<br>&nbsp;import time<br>+import os<br>&nbsp;from libvirt import VIR_INTERFACE_XML_INACTIVE<br>&nbsp;<br>&nbsp;from wok.exception import InvalidOperation, InvalidParameter<br>@@ -55,7 +56,11 @@ class NetworksModel(object):<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; self.caps = CapabilitiesModel(**kargs)<br>&nbsp;<br>&nbsp;&nbsp; &nbsp; def _check_default_networks(self):<br>- &nbsp; &nbsp; &nbsp; &nbsp;networks = list(set(tmpl_defaults['networks']))<br>+ &nbsp; &nbsp; &nbsp; &nbsp;if os.uname()[4] in ['s390x']:<br>+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;networks = list(set(tmpl_defaults.get('networks', [])))<br>+ &nbsp; &nbsp; &nbsp; &nbsp;else:<br>+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;networks = list(set(tmpl_defaults['networks']))<br>+<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; conn = self.conn.get()<br>&nbsp;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; for net_name in networks:<br>diff --git a/model/templates.py b/model/templates.py<br>index a299c85..877bea1 100644<br>--- a/model/templates.py<br>+++ b/model/templates.py<br>@@ -358,7 +358,10 @@ class LibvirtVMTemplate(VMTemplate):<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; return sorted(map(lambda x: x.decode('utf-8'), names))<br>&nbsp;<br>&nbsp;&nbsp; &nbsp; def _network_validate(self):<br>- &nbsp; &nbsp; &nbsp; &nbsp;names = self.info['networks']<br>+ &nbsp; &nbsp; &nbsp; &nbsp;if os.uname()[4] in ['s390x']:<br>+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;names = self.info.get('networks', [])<br>+ &nbsp; &nbsp; &nbsp; &nbsp;else:<br>+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;names = self.info['networks']<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; for name in names:<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try:<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; conn = self.conn.get()<br>diff --git a/osinfo.py b/osinfo.py<br>index 2c59312..af37c72 100644<br>--- a/osinfo.py<br>+++ b/osinfo.py<br>@@ -138,10 +138,22 @@ def _get_tmpl_defaults():<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'pool': '/plugins/kimchi/storagepools/default'}},<br>&nbsp;&nbsp; &nbsp; &nbsp;'processor': {'vcpus': '1', &nbsp;'maxvcpus': 1},<br>&nbsp;&nbsp; &nbsp; &nbsp;'graphics': {'type': 'spice', 'listen': '127.0.0.1'}}<br>+<br>+ &nbsp; &nbsp;The default values on s390x architecture:<br>+<br>+ &nbsp; &nbsp;{'memory': {'current': 1024, 'maxmemory': 1024},<br>+ &nbsp; &nbsp; 'storage': { 'disk.0': {'format': 'qcow2', 'size': '10',<br>+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'pool': '/plugins/kimchi/storagepools/default'}},<br>+ &nbsp; &nbsp; 'processor': {'vcpus': '1', &nbsp;'maxvcpus': 1},<br>+ &nbsp; &nbsp; 'graphics': {'type': 'spice', 'listen': '127.0.0.1'}}<br>&nbsp;&nbsp; &nbsp; """<br>&nbsp;&nbsp; &nbsp; # Create dict with default values<br>&nbsp;&nbsp; &nbsp; tmpl_defaults = defaultdict(dict)<br>- &nbsp; &nbsp;tmpl_defaults['main']['networks'] = ['default']<br>+<br>+ &nbsp; &nbsp;host_arch = _get_arch()<br>+ &nbsp; &nbsp;if host_arch not in ['s390x']:<br>+ &nbsp; &nbsp; &nbsp; &nbsp;tmpl_defaults['main']['networks'] = ['default']<br>+<br>&nbsp;&nbsp; &nbsp; tmpl_defaults['memory'] = {'current': _get_default_template_mem(),<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'maxmemory': _get_default_template_mem()}<br>&nbsp;&nbsp; &nbsp; tmpl_defaults['storage']['disk.0'] = {'size': 10, 'format': 'qcow2',<br>diff --git a/vmtemplate.py b/vmtemplate.py<br>index dc81fe2..5a45123 100644<br>--- a/vmtemplate.py<br>+++ b/vmtemplate.py<br>@@ -288,7 +288,13 @@ class VMTemplate(object):<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; networks = ""<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; params = {'type': 'network',<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'model': self.info['nic_model']}<br>- &nbsp; &nbsp; &nbsp; &nbsp;for nw in self.info['networks']:<br>+<br>+ &nbsp; &nbsp; &nbsp; &nbsp;if os.uname()[4] in ['s390x']:<br>+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;info_networks = self.info.get('networks', [])<br>+ &nbsp; &nbsp; &nbsp; &nbsp;else:<br>+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;info_networks = self.info['networks']<br>+<br>+ &nbsp; &nbsp; &nbsp; &nbsp;for nw in info_networks:<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; params['network'] = nw<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; networks += get_iface_xml(params, self.info['arch'],<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.info['os_distro'],<br>@@ -484,7 +490,12 @@ class VMTemplate(object):<br>&nbsp;&nbsp; &nbsp; def validate_integrity(self):<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; invalid = {}<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; # validate networks integrity<br>- &nbsp; &nbsp; &nbsp; &nbsp;invalid_networks = list(set(self.info['networks']) -<br>+ &nbsp; &nbsp; &nbsp; &nbsp;if os.uname()[4] in ['s390x']:<br>+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;networks = self.info.get('networks', [])<br>+ &nbsp; &nbsp; &nbsp; &nbsp;else:<br>+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;networks = self.info['networks']<br>+<br>+ &nbsp; &nbsp; &nbsp; &nbsp;invalid_networks = list(set(networks) -<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set(self._get_all_networks_name()))<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if invalid_networks:<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; invalid['networks'] = invalid_networks<br>--<br>2.7.4<br><br>_______________________________________________<br>Kimchi-devel mailing list<br>Kimchi-devel@ovirt.org<br><a href="http://lists.ovirt.org/mailman/listinfo/kimchi-devel" target="_blank" >http://lists.ovirt.org/mailman/listinfo/kimchi-devel</a></font><br>&nbsp;</div></blockquote>
<div dir="ltr" >&nbsp;</div></div><BR>