<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from rtf -->
<style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<font face="Calibri" size="2"><span style="font-size:11pt;">
<div>Hello All,</div>
<div> </div>
<div>This is follow up mail on my y'days mail regarding bug </div>
<div><a href="https://bugs.launchpad.net/python-novaclient/+bug/1667794"><font color="#0563C1"><u>https://bugs.launchpad.net/python-novaclient/+bug/1667794</u></font></a></div>
<div> </div>
<div><span style="background-color:yellow;">It looks like </span><span style="background-color:yellow;">a</span><span style="background-color:yellow;">ll the cli commands that are related to </span></div>
<div><span style="background-color:yellow;"><a href="http://10.141.67.190:8774/v2.1/os-hypervisors/wipro/servers">http://10.141.67.190:8774/v2.1/os-hypervisors/wipro/servers</a> </span><span style="background-color:yellow;">  </span><span style="background-color:yellow;">api</span></div>
<div><span style="background-color:yellow;">are expecting exact match.</span></div>
<div> </div>
<div>Commands which are affected if we change </div>
<div><a href="http://10.141.67.190:8774/v2.1/os-hypervisors/wipro/servers">http://10.141.67.190:8774/v2.1/os-hypervisors/wipro/servers</a> api  </div>
<div>from pattern match to exact match are as below : </div>
<div>It’s clearly seen that these commands expect exact match only.</div>
<div> </div>
<div><font size="2"><span style="font-size:9pt;">Servers = True</span></font></div>
<div><font size="2"><span style="font-size:9pt;">==============================================</span></font></div>
<div><font size="2"><span style="font-size:9pt;">1.</span></font></div>
<div><font size="2"><span style="font-size:9pt;">do_host_meta(cs, args):</span></font></div>
<div><font size="2"><span style="font-size:9pt;">    """Set or Delete metadata on all instances of a host."""</span></font></div>
<div><font size="2"><span style="font-size:9pt;">    hypervisors = cs.hypervisors.search(args.host, servers=True)</span></font></div>
<div><font size="2"><span style="font-size:9pt;"> </span></font></div>
<div><font size="2"><span style="font-size:9pt;">2.</span></font></div>
<div><font size="2"><span style="font-size:9pt;">@utils.arg(</span></font></div>
<div><font size="2"><span style="font-size:9pt;">    'hostname',</span></font></div>
<div><font size="2"><span style="font-size:9pt;">    metavar='<hostname>',</span></font></div>
<div><font size="2"><span style="font-size:9pt;">    help=_('The hypervisor hostname (or pattern) to search for.')) def do_hypervisor_servers(cs, args):</span></font></div>
<div><font size="2"><span style="font-size:9pt;">    """List servers belonging to specific hypervisors."""</span></font></div>
<div><font size="2"><span style="font-size:9pt;">    hypers = cs.hypervisors.search(args.hostname, servers=True)</span></font></div>
<div><font size="2"><span style="font-size:9pt;"> </span></font></div>
<div><font size="2"><span style="font-size:9pt;">3.</span></font></div>
<div><font size="2"><span style="font-size:9pt;">def do_host_evacuate(cs, args):</span></font></div>
<div><font size="2"><span style="font-size:9pt;">    """Evacuate all instances from failed host."""</span></font></div>
<div><font size="2"><span style="font-size:9pt;"> </span></font></div>
<div><font size="2"><span style="font-size:9pt;">    hypervisors = cs.hypervisors.search(args.host, servers=True)</span></font></div>
<div><font size="2"><span style="font-size:9pt;"> </span></font></div>
<div><font size="2"><span style="font-size:9pt;">4.</span></font></div>
<div><font size="2"><span style="font-size:9pt;">def do_host_evacuate_live(cs, args):</span></font></div>
<div><font size="2"><span style="font-size:9pt;">    """Live migrate all instances of the specified host</span></font></div>
<div><font size="2"><span style="font-size:9pt;">    to other available hosts.</span></font></div>
<div><font size="2"><span style="font-size:9pt;">    """</span></font></div>
<div><font size="2"><span style="font-size:9pt;">    hypervisors = cs.hypervisors.search(args.host, servers=True)</span></font></div>
<div><font size="2"><span style="font-size:9pt;">    response = []</span></font></div>
<div><font size="2"><span style="font-size:9pt;"> </span></font></div>
<div><font size="2"><span style="font-size:9pt;">5.</span></font></div>
<div><font size="2"><span style="font-size:9pt;">def do_host_servers_migrate(cs, args):</span></font></div>
<div><font size="2"><span style="font-size:9pt;">    """Cold migrate all instances off the specified host to other available</span></font></div>
<div><font size="2"><span style="font-size:9pt;">    hosts.</span></font></div>
<div><font size="2"><span style="font-size:9pt;">    """</span></font></div>
<div><font size="2"><span style="font-size:9pt;"> </span></font></div>
<div><font size="2"><span style="font-size:9pt;">    hypervisors = cs.hypervisors.search(args.host, servers=True)</span></font></div>
<div><font size="2"><span style="font-size:9pt;">    response = []</span></font></div>
<div><font size="2"><span style="font-size:9pt;">    for hyper in hypervisors:</span></font></div>
<div> </div>
<div>Hence, I am planning to correct/change <a href="http://10.141.67.190:8774/v2.1/os-hypervisors/wipro/servers">
http://10.141.67.190:8774/v2.1/os-hypervisors/wipro/servers</a> api  </div>
<div>to match hostname as exact match “NOT” as a pattern.</div>
<div> </div>
<div>Please comment if any other opinion on this.</div>
<div> </div>
<div>Thanks</div>
<div>Nidhi</div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div>-----Original Message-----<br>

From: Nidhi Mittal Hada (Product Engineering Service) <br>

Sent: Tuesday, July 25, 2017 12:42 PM<br>

To: openstack-dev@lists.openstack.org<br>

Cc: 'mriedemos@gmail.com' <mriedemos@gmail.com><br>

Subject: RE: [openstack-dev] [OpenStack-Dev][Nova] - <a href="https://launchpad.net/bugs/1667794">
https://launchpad.net/bugs/1667794</a> Changing hostname not to be treated as a pattern instead exact match will be done.</div>
<div> </div>
<div>Hello Matt,</div>
<div> </div>
<div>Kindly see analysis below and suggest.</div>
<div> </div>
<div>When we execute</div>
<div>stack@ubuntu14-OptiPlex-3020:~/openstack_install/devstack$ nova --debug host-evacuate wipro .</div>
<div>.</div>
<div>.</div>
<div>DEBUG (session:347) REQ: curl -g -i -X GET <a href="http://10.141.67.190:8774/v2.1/os-hypervisors/wipro/servers">http://10.141.67.190:8774/v2.1/os-hypervisors/wipro/servers</a> -H "OpenStack-API-Version: compute 2.46" -H "User-Agent: python-novaclient"
-H "Accept: application/json" -H "X-OpenStack-Nova-API-Version: 2.46" -H "X-Auth-Token: {SHA1}9e9230a54eff2444ac32fa054c6bab3dbe446df9" >>>>>>>>>>>>>>>>>>>>>>>>>></div>
<div> </div>
<div>nova api that's being called is this</div>
<div><a href="https://developer.openstack.org/api-ref/compute/?expanded=search-hypervisor-detail,list-hypervisor-servers-detail#list-hypervisor-servers">https://developer.openstack.org/api-ref/compute/?expanded=search-hypervisor-detail,list-hypervisor-servers-detail#list-hypervisor-servers</a></div>
<div>Where it clearly states: "List all servers belong to each hypervisor whose host name is matching a given hypervisor host name or portion of it."</div>
<div> </div>
<div> </div>
<div>Another available api for hostname match is <a href="https://developer.openstack.org/api-ref/compute/?expanded=search-hypervisor-detail,list-hypervisor-servers-detail#search-hypervisor">https://developer.openstack.org/api-ref/compute/?expanded=search-hypervisor-detail,list-hypervisor-servers-detail#search-hypervisor</a></div>
<div>which states: "Search hypervisor by a given hypervisor host name or portion of it."</div>
<div> </div>
<div>There is no api available at present where hostname is matched not as a pattern. PCMIIW.</div>
<div> </div>
<div>Hence it can't be just fixed in client as it is.</div>
<div> </div>
<div>Solution: I thought we can fix it by changing only <a href="http://10.141.67.190:8774/v2.1/os-hypervisors/wipro/servers">http://10.141.67.190:8774/v2.1/os-hypervisors/wipro/servers</a> api to match hostname as exact so that <a href="https://developer.openstack.org/api-ref/compute/?expanded=search-hypervisor-detail,list-hypervisor-servers-detail#search-hypervisor">https://developer.openstack.org/api-ref/compute/?expanded=search-hypervisor-detail,list-hypervisor-servers-detail#search-hypervisor</a> 
remains unaffected.</div>
<div>This I still have to change in nova server code, I will use an additional function parameter to specify if exact match is desired or a pattern match is desired.</div>
<div> </div>
<div>But then  <a href="http://10.141.67.190:8774/v2.1/os-hypervisors/wipro/servers">http://10.141.67.190:8774/v2.1/os-hypervisors/wipro/servers</a> is being used by many other commands than just host-evacuate.</div>
<div>Which all will be affected.</div>
<div> </div>
<div>Listing commands that will be affected are .</div>
<div> </div>
<div>Function in novaclient from where we call api </div>
<div>   def search(self, hypervisor_match, servers=False):   >>>>>>>>>>>>>>.servers is False by default</div>
<div>        """</div>
<div>        Get a list of matching hypervisors.</div>
<div>        :param servers: If True, server information is also retrieved.</div>
<div>        """</div>
<div>        target = 'servers' if servers else 'search'</div>
<div>        url = ('/os-hypervisors/%s/%s' %</div>
<div>               (parse.quote(hypervisor_match, safe=''), target))   >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.</div>
<div>        return self._list(url, 'hypervisors')</div>
<div> </div>
<div>we are passing servers as true in these cli commands.</div>
<div> </div>
<div>Servers = True</div>
<div>==============================================</div>
<div>1.</div>
<div>do_host_meta(cs, args):</div>
<div>    """Set or Delete metadata on all instances of a host."""</div>
<div>    hypervisors = cs.hypervisors.search(args.host, servers=True)</div>
<div> </div>
<div>2.</div>
<div>@utils.arg(</div>
<div>    'hostname',</div>
<div>    metavar='<hostname>',</div>
<div>    help=_('The hypervisor hostname (or pattern) to search for.')) def do_hypervisor_servers(cs, args):</div>
<div>    """List servers belonging to specific hypervisors."""</div>
<div>    hypers = cs.hypervisors.search(args.hostname, servers=True)</div>
<div> </div>
<div>3.</div>
<div>def do_host_evacuate(cs, args):</div>
<div>    """Evacuate all instances from failed host."""</div>
<div> </div>
<div>    hypervisors = cs.hypervisors.search(args.host, servers=True)</div>
<div> </div>
<div>4.</div>
<div>def do_host_evacuate_live(cs, args):</div>
<div>    """Live migrate all instances of the specified host</div>
<div>    to other available hosts.</div>
<div>    """</div>
<div>    hypervisors = cs.hypervisors.search(args.host, servers=True)</div>
<div>    response = []</div>
<div> </div>
<div>5.</div>
<div>def do_host_servers_migrate(cs, args):</div>
<div>    """Cold migrate all instances off the specified host to other available</div>
<div>    hosts.</div>
<div>    """</div>
<div> </div>
<div>    hypervisors = cs.hypervisors.search(args.host, servers=True)</div>
<div>    response = []</div>
<div>    for hyper in hypervisors:</div>
<div> </div>
<div> </div>
<div>Servers = false</div>
<div>===============</div>
<div>1.</div>
<div>def _do_hypervisor_list(cs, matching=None, limit=None, marker=None):</div>
<div>    columns = ['ID', 'Hypervisor hostname', 'State', 'Status']</div>
<div>    if matching:</div>
<div>        utils.print_list(cs.hypervisors.search(matching), columns)</div>
<div> </div>
<div> </div>
<div> </div>
<div>Please suggest what is better solution?</div>
<div> </div>
<div>1)Modifying <a href="http://10.141.67.190:8774/v2.1/os-hypervisors/wipro/servers">http://10.141.67.190:8774/v2.1/os-hypervisors/wipro/servers</a> api code in nova server side code - to match hostname as exact not as a pattern</div>
<div>We can code so that <a href="http://10.141.67.190:8774/v2.1/os-hypervisors/wipro/search">http://10.141.67.190:8774/v2.1/os-hypervisors/wipro/search</a> remains unaffected.</div>
<div> </div>
<div>2)We should introduce a new parameter in servers api which from cli which directs that exact match is to be </div>
<div>done in url.</div>
<div><a href="http://10.141.67.190:8774/v2.1/os-hypervisors/wipro/servers?exact_match=true">http://10.141.67.190:8774/v2.1/os-hypervisors/wipro/servers?exact_match=true</a></div>
<div>and query parameter then interpreted in server side code and behave as desired.</div>
<div>In this case we will have choice to not affect at undesired commands.</div>
<div> </div>
<div>Thanks</div>
<div>Nidhi</div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div>-----Original Message-----</div>
<div>From: Matt Riedemann [<a href="mailto:mriedemos@gmail.com">mailto:mriedemos@gmail.com</a>] </div>
<div>Sent: Friday, July 14, 2017 7:22 PM</div>
<div>To: <a href="mailto:openstack-dev@lists.openstack.org">openstack-dev@lists.openstack.org</a></div>
<div>Subject: Re: [openstack-dev] [OpenStack-Dev][Nova] - <a href="https://launchpad.net/bugs/1667794">https://launchpad.net/bugs/1667794</a> Changing hostname not to be treated as a pattern instead exact match will be done.</div>
<div> </div>
<div>** This mail has been sent from an external source. Treat hyperlinks and attachments in this email with caution**</div>
<div> </div>
<div>On 7/14/2017 6:49 AM, <a href="mailto:nidhi.hada@wipro.com">nidhi.hada@wipro.com</a> wrote:</div>
<div>> Hello all,</div>
<div>></div>
<div>> This is regarding bug 1667794 as mentioned in subject.</div>
<div>></div>
<div>> Its review is going on here.</div>
<div>></div>
<div>> <a href="https://clicktime.symantec.com/a/1/49nJvSe1Be7H66fNyloEH0VFJQ88tUzr9ao">https://clicktime.symantec.com/a/1/49nJvSe1Be7H66fNyloEH0VFJQ88tUzr9ao</a></div>
<div>> 8kyFM3jc=?d=huhMONMwyIvPyR_TNVFVFEoKBc2izoSPlzhtdZ1egR7bwY3hW0n6gBw5Pf</div>
<div>> _aKziBo_pOhFqtNZ7hwc696PKDDY0ern8LIG6XT0Pa5GnYDhIM8xtNkatqd6_xu-fn6091</div>
<div>> KREiE5rxafexQfe-rJ7RZKU7RWnI0BMsnrkU7NWqJOLUlJi9hKN2qxzIp-n8ZnSkjcNzp9</div>
<div>> 81ZLIMs7MJ--gOKTl4pZEsfb_MBwDbeOUcZA5mm8WANpU0XMEUHdqhphAf2QXPUL8oHD6l</div>
<div>> RCzrptg5Fi9_L4e2YX6ZA28AUqup5WAH1B4OT_E4mbfcaZxfm9sIXtUyWvbaKBRG-syj4W</div>
<div>> eDNjzAvxku3u9xfD1HWy1MUp36GMU4z7N3BJGZuiIu4YmCjmsKdXb_m0i5CkmgPB0jOfuP</div>
<div>> 6fjyr9PfbBEtvQYMIQLTIoOCFWag30Q5VqPVnfh-Nzv_T1kbO3TCFZqoZktPT8Vo6wAk45</div>
<div>> hsiX0HknkBnNqR21E7Fb5t2hG0HjqNSxgld9NIXGZng7JR&u=https%3A%2F%2Freview.</div>
<div>> openstack.org%2F%23%2Fc%2F474949%2F</div>
<div>></div>
<div>> *_Bug is - _**_Nova treats hostname as pattern_*</div>
<div>></div>
<div>> *_Description_*</div>
<div>></div>
<div>> Nova commands such as "hypervisor-list --matching <substring>",</div>
<div>></div>
<div>> host-evacuate-live and host-evacuate and few more, treat the</div>
<div>></div>
<div>> user-specified "host-name" as the input to the HTTP</div>
<div>></div>
<div>> /os-hypervisors/{hypervisor_hostname_pattern}/search API.</div>
<div>></div>
<div>> *Nova checks "host-name" as a pattern instead of exact match,*</div>
<div>></div>
<div>> *which causes problem with some commands such as*</div>
<div>></div>
<div>> *nova host-evacuate-live compute-1 where in host-evacuate*</div>
<div>></div>
<div>> *action will apply to all "compute-1", "compute-10".*</div>
<div>></div>
<div>> *That is not right.*</div>
<div>></div>
<div>> Correcting it by using exact match.</div>
<div>></div>
<div>> We have fixed it and put it for review. We need your opinion on this.</div>
<div>></div>
<div>> *_Kindly share your opinion in case this does not seem to be an </div>
<div>> acceptable fix to anyone._*</div>
<div>></div>
<div>> Thanks</div>
<div>></div>
<div>> Nidhi</div>
<div>></div>
<div>> The information contained in this electronic message and any </div>
<div>> attachments to this message are intended for the exclusive use of the </div>
<div>> addressee(s) and may contain proprietary, confidential or privileged </div>
<div>> information. If you are not the intended recipient, you should not </div>
<div>> disseminate, distribute or copy this e-mail. Please notify the sender </div>
<div>> immediately and destroy all copies of this message and any attachments. WARNING:</div>
<div>> Computer viruses can be transmitted via email. The recipient should </div>
<div>> check this email and any attachments for the presence of viruses. The </div>
<div>> company accepts no liability for any damage caused by any virus </div>
<div>> transmitted by this email. <a href="http://www.wipro.com">www.wipro.com</a></div>
<div>></div>
<div>></div>
<div>> ______________________________________________________________________</div>
<div>> ____ OpenStack Development Mailing List (not for usage questions)</div>
<div>> Unsubscribe: </div>
<div>> <a href="mailto:OpenStack-dev-request@lists.openstack.org?subject:unsubscribe">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a></div>
<div>> <a href="https://clicktime.symantec.com/a/1/9RX_Q306kvu_hhDcIzBL0WNsDUY3rwoCi9T">https://clicktime.symantec.com/a/1/9RX_Q306kvu_hhDcIzBL0WNsDUY3rwoCi9T</a></div>
<div>> 8g25S6fc=?d=huhMONMwyIvPyR_TNVFVFEoKBc2izoSPlzhtdZ1egR7bwY3hW0n6gBw5Pf</div>
<div>> _aKziBo_pOhFqtNZ7hwc696PKDDY0ern8LIG6XT0Pa5GnYDhIM8xtNkatqd6_xu-fn6091</div>
<div>> KREiE5rxafexQfe-rJ7RZKU7RWnI0BMsnrkU7NWqJOLUlJi9hKN2qxzIp-n8ZnSkjcNzp9</div>
<div>> 81ZLIMs7MJ--gOKTl4pZEsfb_MBwDbeOUcZA5mm8WANpU0XMEUHdqhphAf2QXPUL8oHD6l</div>
<div>> RCzrptg5Fi9_L4e2YX6ZA28AUqup5WAH1B4OT_E4mbfcaZxfm9sIXtUyWvbaKBRG-syj4W</div>
<div>> eDNjzAvxku3u9xfD1HWy1MUp36GMU4z7N3BJGZuiIu4YmCjmsKdXb_m0i5CkmgPB0jOfuP</div>
<div>> 6fjyr9PfbBEtvQYMIQLTIoOCFWag30Q5VqPVnfh-Nzv_T1kbO3TCFZqoZktPT8Vo6wAk45</div>
<div>> hsiX0HknkBnNqR21E7Fb5t2hG0HjqNSxgld9NIXGZng7JR&u=http%3A%2F%2Flists.op</div>
<div>> enstack.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fopenstack-dev</div>
<div>></div>
<div> </div>
<div>Thanks for bringing this up. Your fix is in the wrong place, see the comments in the patch.</div>
<div> </div>
<div>--</div>
<div> </div>
<div>Thanks,</div>
<div> </div>
<div>Matt</div>
<div> </div>
<div>__________________________________________________________________________</div>
<div>OpenStack Development Mailing List (not for usage questions)</div>
<div>Unsubscribe: <a href="mailto:OpenStack-dev-request@lists.openstack.org?subject:unsubscribe">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a></div>
<div><a href="https://clicktime.symantec.com/a/1/9RX_Q306kvu_hhDcIzBL0WNsDUY3rwoCi9T8g25S6fc=?d=huhMONMwyIvPyR_TNVFVFEoKBc2izoSPlzhtdZ1egR7bwY3hW0n6gBw5Pf_aKziBo_pOhFqtNZ7hwc696PKDDY0ern8LIG6XT0Pa5GnYDhIM8xtNkatqd6_xu-fn6091KREiE5rxafexQfe-rJ7RZKU7RWnI0BMsnrkU7NWqJOLUlJi9hKN2qxzIp-n8ZnSkjcNzp981ZLIMs7MJ--gOKTl4pZEsfb_MBwDbeOUcZA5mm8WANpU0XMEUHdqhphAf2QXPUL8oHD6lRCzrptg5Fi9_L4e2YX6ZA28AUqup5WAH1B4OT_E4mbfcaZxfm9sIXtUyWvbaKBRG-syj4WeDNjzAvxku3u9xfD1HWy1MUp36GMU4z7N3BJGZuiIu4YmCjmsKdXb_m0i5CkmgPB0jOfuP6fjyr9PfbBEtvQYMIQLTIoOCFWag30Q5VqPVnfh-Nzv_T1kbO3TCFZqoZktPT8Vo6wAk45hsiX0HknkBnNqR21E7Fb5t2hG0HjqNSxgld9NIXGZng7JR&u=http%3A%2F%2Flists.openstack.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fopenstack-dev">https://clicktime.symantec.com/a/1/9RX_Q306kvu_hhDcIzBL0WNsDUY3rwoCi9T8g25S6fc=?d=huhMONMwyIvPyR_TNVFVFEoKBc2izoSPlzhtdZ1egR7bwY3hW0n6gBw5Pf_aKziBo_pOhFqtNZ7hwc696PKDDY0ern8LIG6XT0Pa5GnYDhIM8xtNkatqd6_xu-fn6091KREiE5rxafexQfe-rJ7RZKU7RWnI0BMsnrkU7NWqJOLUlJi9hKN2qxzIp-n8ZnSkjcNzp981ZLIMs7MJ--gOKTl4pZEsfb_MBwDbeOUcZA5mm8WANpU0XMEUHdqhphAf2QXPUL8oHD6lRCzrptg5Fi9_L4e2YX6ZA28AUqup5WAH1B4OT_E4mbfcaZxfm9sIXtUyWvbaKBRG-syj4WeDNjzAvxku3u9xfD1HWy1MUp36GMU4z7N3BJGZuiIu4YmCjmsKdXb_m0i5CkmgPB0jOfuP6fjyr9PfbBEtvQYMIQLTIoOCFWag30Q5VqPVnfh-Nzv_T1kbO3TCFZqoZktPT8Vo6wAk45hsiX0HknkBnNqR21E7Fb5t2hG0HjqNSxgld9NIXGZng7JR&u=http%3A%2F%2Flists.openstack.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fopenstack-dev</a></div>
<div> </div>
<div>______________________________________________________________________</div>
<div>This email has been scanned by the Symantec Email Security.cloud service.</div>
<div>For more information please visit <a href="http://www.symanteccloud.com">http://www.symanteccloud.com</a> ______________________________________________________________________</div>
<div> </div>
<div><font face="Times New Roman" size="3"><span style="font-size:12pt;">The information contained in this electronic message and any attachments to this message are intended for the exclusive use of the addressee(s) and may contain proprietary, confidential
or privileged information. If you are not the intended recipient, you should not disseminate, distribute or copy this e-mail. Please notify the sender immediately and destroy all copies of this message and any attachments. WARNING: Computer viruses can be transmitted
via email. The recipient should check this email and any attachments for the presence of viruses. The company accepts no liability for any damage caused by any virus transmitted by this email.
<a href="http://www.wipro.com">www.wipro.com</a> </span></font></div>
</span></font>
</body>
</html>