<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:Consolas;
panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:purple;
text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
{mso-style-name:msonormal;
mso-margin-top-alt:auto;
margin-right:0in;
mso-margin-bottom-alt:auto;
margin-left:0in;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
span.EmailStyle18
{mso-style-type:personal;
font-family:"Calibri",sans-serif;
color:windowtext;}
span.EmailStyle19
{mso-style-type:personal;
font-family:"Calibri",sans-serif;
color:windowtext;}
span.EmailStyle20
{mso-style-type:personal-reply;
font-family:"Calibri",sans-serif;
color:windowtext;}
span.pl-k
{mso-style-name:pl-k;}
span.pl-s
{mso-style-name:pl-s;}
span.pl-pds
{mso-style-name:pl-pds;}
span.pl-v
{mso-style-name:pl-v;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:10.0pt;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
--></style>
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">TL;DR: glance config doesn’t honor documented default setting for paste_deploy.flavor. Solution is to add setting to glance-api.conf. Patch to be submitted.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">After the deep debugging yesterday Jonathan did a deep compare of our Mitaka configuration compared to Queens.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">He noted that this section was missing in our Queens glance-api.conf (our config files are sparse and only specify values if the defaults are not correct for us)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">[paste_deploy]<o:p></o:p></p>
<p class="MsoNormal">flavor = keystone<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Adding that allowed Jonathan to set an image to public (publicize_image). It also made openstack image list (get_images) behave as expected<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">[root@vm013 common]# . /root/keystonerc_jonathan<o:p></o:p></p>
<p class="MsoNormal">[root@vm013 common]# openstack image list<o:p></o:p></p>
<p class="MsoNormal">+--------------------------------------+--------+--------+<o:p></o:p></p>
<p class="MsoNormal">| ID | Name | Status |<o:p></o:p></p>
<p class="MsoNormal">+--------------------------------------+--------+--------+<o:p></o:p></p>
<p class="MsoNormal">| 34a915b8-cca6-45c3-9348-5e15dace444f | cirros | active |<o:p></o:p></p>
<p class="MsoNormal">+--------------------------------------+--------+--------+<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The Glance Queens configuration guide for glance_api states that the default paste_deploy.flavor setting is ‘keystone’<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Refer to <a href="https://docs.openstack.org/glance/queens/configuration/glance_api.html">
https://docs.openstack.org/glance/queens/configuration/glance_api.html</a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">It’s readily apparent that without the setting in glance-api.conf that it does not behave properly which suggests it does not actually set keystone as the default<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Glance common/config.py does not specify a default value for this setting, but it does specify a sample_default.
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><a href="https://github.com/openstack/glance/blob/master/glance/common/config.py">https://github.com/openstack/glance/blob/master/glance/common/config.py</a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">lines 31-52 <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<table class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0" style="background:white;border-collapse:collapse">
<tbody>
<tr>
<td valign="top" style="padding:0in 7.5pt 0in 7.5pt">
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:9.0pt;font-family:Consolas;color:#24292E">paste_deploy_opts
</span><span style="font-size:9.0pt;font-family:Consolas;color:#D73A49">=</span><span style="font-size:9.0pt;font-family:Consolas;color:#24292E"> [<o:p></o:p></span></p>
</td>
</tr>
<tr>
<td width="50" nowrap="" valign="top" style="width:37.5pt;padding:0in 7.5pt 0in 7.5pt">
</td>
<td valign="top" style="padding:0in 7.5pt 0in 7.5pt">
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:9.0pt;font-family:Consolas;color:#24292E"> cfg.StrOpt(</span><span style="font-size:9.0pt;font-family:Consolas;color:#032F62">'flavor'</span><span style="font-size:9.0pt;font-family:Consolas;color:#24292E">,<o:p></o:p></span></p>
</td>
</tr>
<tr>
<td width="50" nowrap="" valign="top" style="width:37.5pt;padding:0in 7.5pt 0in 7.5pt">
</td>
<td valign="top" style="padding:0in 7.5pt 0in 7.5pt">
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:9.0pt;font-family:Consolas;color:#24292E">
</span><span style="font-size:9.0pt;font-family:Consolas;color:#E36209">sample_default</span><span style="font-size:9.0pt;font-family:Consolas;color:#D73A49">=</span><span style="font-size:9.0pt;font-family:Consolas;color:#032F62">'keystone'</span><span style="font-size:9.0pt;font-family:Consolas;color:#24292E">,<o:p></o:p></span></p>
</td>
</tr>
<tr>
<td width="50" nowrap="" valign="top" style="width:37.5pt;padding:0in 7.5pt 0in 7.5pt">
</td>
<td valign="top" style="padding:0in 7.5pt 0in 7.5pt">
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:9.0pt;font-family:Consolas;color:#24292E">
</span><span style="font-size:9.0pt;font-family:Consolas;color:#E36209">help</span><span style="font-size:9.0pt;font-family:Consolas;color:#D73A49">=</span><span style="font-size:9.0pt;font-family:Consolas;color:#24292E">_(</span><span style="font-size:9.0pt;font-family:Consolas;color:#032F62">"""</span><span style="font-size:9.0pt;font-family:Consolas;color:#24292E"><o:p></o:p></span></p>
</td>
</tr>
<tr>
<td width="50" nowrap="" valign="top" style="width:37.5pt;padding:0in 7.5pt 0in 7.5pt">
</td>
<td valign="top" style="padding:0in 7.5pt 0in 7.5pt">
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:9.0pt;font-family:Consolas;color:#032F62">Deployment flavor to use in the server application pipeline.</span><span style="font-size:9.0pt;font-family:Consolas;color:#24292E"><o:p></o:p></span></p>
</td>
</tr>
<tr>
<td width="50" nowrap="" valign="top" style="width:37.5pt;padding:0in 7.5pt 0in 7.5pt">
</td>
<td valign="top" style="padding:0in 7.5pt 0in 7.5pt"></td>
</tr>
<tr>
<td width="50" nowrap="" valign="top" style="width:37.5pt;padding:0in 7.5pt 0in 7.5pt">
</td>
<td valign="top" style="padding:0in 7.5pt 0in 7.5pt">
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:9.0pt;font-family:Consolas;color:#032F62">Provide a string value representing the appropriate deployment</span><span style="font-size:9.0pt;font-family:Consolas;color:#24292E"><o:p></o:p></span></p>
</td>
</tr>
<tr>
<td width="50" nowrap="" valign="top" style="width:37.5pt;padding:0in 7.5pt 0in 7.5pt">
</td>
<td valign="top" style="padding:0in 7.5pt 0in 7.5pt">
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:9.0pt;font-family:Consolas;color:#032F62">flavor used in the server application pipleline. This is typically</span><span style="font-size:9.0pt;font-family:Consolas;color:#24292E"><o:p></o:p></span></p>
</td>
</tr>
<tr>
<td width="50" nowrap="" valign="top" style="width:37.5pt;padding:0in 7.5pt 0in 7.5pt">
</td>
<td valign="top" style="padding:0in 7.5pt 0in 7.5pt">
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:9.0pt;font-family:Consolas;color:#032F62">the partial name of a pipeline in the paste configuration file with</span><span style="font-size:9.0pt;font-family:Consolas;color:#24292E"><o:p></o:p></span></p>
</td>
</tr>
<tr>
<td width="50" nowrap="" valign="top" style="width:37.5pt;padding:0in 7.5pt 0in 7.5pt">
</td>
<td valign="top" style="padding:0in 7.5pt 0in 7.5pt">
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:9.0pt;font-family:Consolas;color:#032F62">the service name removed.</span><span style="font-size:9.0pt;font-family:Consolas;color:#24292E"><o:p></o:p></span></p>
</td>
</tr>
<tr>
<td width="50" nowrap="" valign="top" style="width:37.5pt;padding:0in 7.5pt 0in 7.5pt">
</td>
<td valign="top" style="padding:0in 7.5pt 0in 7.5pt"></td>
</tr>
<tr>
<td width="50" nowrap="" valign="top" style="width:37.5pt;padding:0in 7.5pt 0in 7.5pt">
</td>
<td valign="top" style="padding:0in 7.5pt 0in 7.5pt">
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:9.0pt;font-family:Consolas;color:#032F62">For example, if your paste section name in the paste configuration</span><span style="font-size:9.0pt;font-family:Consolas;color:#24292E"><o:p></o:p></span></p>
</td>
</tr>
<tr>
<td width="50" nowrap="" valign="top" style="width:37.5pt;padding:0in 7.5pt 0in 7.5pt">
</td>
<td valign="top" style="padding:0in 7.5pt 0in 7.5pt">
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:9.0pt;font-family:Consolas;color:#032F62">file is [pipeline:glance-api-keystone], set ``flavor`` to</span><span style="font-size:9.0pt;font-family:Consolas;color:#24292E"><o:p></o:p></span></p>
</td>
</tr>
<tr>
<td width="50" nowrap="" valign="top" style="width:37.5pt;padding:0in 7.5pt 0in 7.5pt">
</td>
<td valign="top" style="padding:0in 7.5pt 0in 7.5pt">
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:9.0pt;font-family:Consolas;color:#032F62">``keystone``.</span><span style="font-size:9.0pt;font-family:Consolas;color:#24292E"><o:p></o:p></span></p>
</td>
</tr>
<tr>
<td width="50" nowrap="" valign="top" style="width:37.5pt;padding:0in 7.5pt 0in 7.5pt">
</td>
<td valign="top" style="padding:0in 7.5pt 0in 7.5pt"></td>
</tr>
<tr>
<td width="50" nowrap="" valign="top" style="width:37.5pt;padding:0in 7.5pt 0in 7.5pt">
</td>
<td valign="top" style="padding:0in 7.5pt 0in 7.5pt">
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:9.0pt;font-family:Consolas;color:#032F62">Possible values:</span><span style="font-size:9.0pt;font-family:Consolas;color:#24292E"><o:p></o:p></span></p>
</td>
</tr>
<tr>
<td width="50" nowrap="" valign="top" style="width:37.5pt;padding:0in 7.5pt 0in 7.5pt">
</td>
<td valign="top" style="padding:0in 7.5pt 0in 7.5pt">
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:9.0pt;font-family:Consolas;color:#032F62"> * String value representing a partial pipeline name.</span><span style="font-size:9.0pt;font-family:Consolas;color:#24292E"><o:p></o:p></span></p>
</td>
</tr>
<tr>
<td width="50" nowrap="" valign="top" style="width:37.5pt;padding:0in 7.5pt 0in 7.5pt">
</td>
<td valign="top" style="padding:0in 7.5pt 0in 7.5pt"></td>
</tr>
<tr>
<td width="50" nowrap="" valign="top" style="width:37.5pt;padding:0in 7.5pt 0in 7.5pt">
</td>
<td valign="top" style="padding:0in 7.5pt 0in 7.5pt">
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:9.0pt;font-family:Consolas;color:#032F62">Related Options:</span><span style="font-size:9.0pt;font-family:Consolas;color:#24292E"><o:p></o:p></span></p>
</td>
</tr>
<tr>
<td width="50" nowrap="" valign="top" style="width:37.5pt;padding:0in 7.5pt 0in 7.5pt">
</td>
<td valign="top" style="padding:0in 7.5pt 0in 7.5pt">
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:9.0pt;font-family:Consolas;color:#032F62"> * config_file</span><span style="font-size:9.0pt;font-family:Consolas;color:#24292E"><o:p></o:p></span></p>
</td>
</tr>
<tr>
<td width="50" nowrap="" valign="top" style="width:37.5pt;padding:0in 7.5pt 0in 7.5pt">
</td>
<td valign="top" style="padding:0in 7.5pt 0in 7.5pt"></td>
</tr>
<tr>
<td width="50" nowrap="" valign="top" style="width:37.5pt;padding:0in 7.5pt 0in 7.5pt">
</td>
<td valign="top" style="padding:0in 7.5pt 0in 7.5pt">
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:9.0pt;font-family:Consolas;color:#032F62">"""</span><span style="font-size:9.0pt;font-family:Consolas;color:#24292E">)),<o:p></o:p></span></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Modifying the code like so:<o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<table class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0" style="background:white;border-collapse:collapse">
<tbody>
<tr>
<td valign="top" style="padding:0in 7.5pt 0in 7.5pt">
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:9.0pt;font-family:"Courier New";color:#24292E">
</span><span style="font-size:9.0pt;font-family:"Courier New";color:#E36209">sample_default</span><span style="font-size:9.0pt;font-family:"Courier New";color:#D73A49">=</span><span style="font-size:9.0pt;font-family:"Courier New";color:#032F62">'keystone'</span><span style="font-size:9.0pt;font-family:"Courier New";color:#24292E">,<o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:9.0pt;font-family:"Courier New";color:#24292E"> default=’keystone’,<o:p></o:p></span></p>
</td>
</tr>
<tr>
<td valign="top" style="padding:0in 7.5pt 0in 7.5pt">
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:9.0pt;font-family:"Courier New";color:#24292E">
</span><span style="font-size:9.0pt;font-family:"Courier New";color:#E36209">help</span><span style="font-size:9.0pt;font-family:"Courier New";color:#D73A49">=</span><span style="font-size:9.0pt;font-family:"Courier New";color:#24292E">_(</span><span style="font-size:9.0pt;font-family:"Courier New";color:#032F62">"""</span><span style="font-size:9.0pt;font-family:"Courier New";color:#24292E"><o:p></o:p></span></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Makes it honor the documented default value.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I’ve submitted this as a patch on the bug report and a pull request on github.
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><a href="https://github.com/openstack/glance/pull/9">https://github.com/openstack/glance/pull/9</a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal"><span style="color:black">Mike Moore, M.S.S.E.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:black"> <o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:black">Systems Engineer, Goddard Private Cloud<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:black"><a href="mailto:Michael.D.Moore@nasa.gov"><span style="color:#0563C1">Michael.D.Moore@nasa.gov</span></a><o:p></o:p></span></p>
<p class="MsoNormal"><b><span style="color:black"> </span></b><span style="color:black"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:black">Hydrogen fusion brightens my day.<o:p></o:p></span></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:12.0pt;color:black">From: </span></b><span style="font-size:12.0pt;color:black">"Moore, Michael Dane (GSFC-720.0)[BUSINESS INTEGRA, INC.]" <michael.d.moore@nasa.gov><br>
<b>Date: </b>Thursday, October 25, 2018 at 6:48 PM<br>
<b>To: </b>Jonathan Mills <jonmills@gmail.com>, "iain.macdonnell@oracle.com" <iain.macdonnell@oracle.com><br>
<b>Cc: </b>"openstack-oper." <openstack-operators@lists.openstack.org>, "Thompson, John H. (GSFC-606.2)[InuTeq, LLC]" <john.h.thompson@nasa.gov><br>
<b>Subject: </b>Re: [Openstack-operators] Glance Image Visibility Issue? - Non admin users can see private images from other tenants<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">I have dug deep into the code for glance, shoving debug outputs to see what I can find in our queens environment.
<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">Here is my debug code (I have a lot more but this is the salient part)<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"> LOG.debug("in enforce(), action='%s', policyvalues='%s'", action, context.to_policy_values())<o:p></o:p></p>
<p class="MsoNormal"> return super(Enforcer, self).enforce(action, target,<o:p></o:p></p>
<p class="MsoNormal"> context.to_policy_values(),<o:p></o:p></p>
<p class="MsoNormal"> do_raise=True,<o:p></o:p></p>
<p class="MsoNormal"> exc=exception.Forbidden,<o:p></o:p></p>
<p class="MsoNormal"> action=action)<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">below is the output attempting to set an image that I own while being an admin to public via `openstack image set –public cirros`<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">2018-10-25 18:29:16.575 17561 DEBUG glance.api.policy [req-e343bb10-8ec8-40df-8c0c-47d1b217ca0d - - - - -] in enforce(), action='publicize_image', policyvalues='{'service_roles': [], 'user_id': None, 'roles': [], 'user_domain_id': None,
'service_project_id': None, 'service_user_id': None, 'service_user_domain_id': None, 'service_project_domain_id': None, 'is_admin_project': True, 'user': None, 'project_id': None, 'tenant': None, 'project_domain_id': None}' enforce /usr/lib/python2.7/site-packages/glance/api/policy.py:64<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">And here is what shows up when I `openstack image list` as our test user (`jonathan`) that is NOT an admin<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">2018-10-25 18:32:24.841 17564 DEBUG glance.api.policy [req-22abdcf2-14cd-4680-8deb-e48902a7ddef - - - - -] in enforce(), action='get_images', policyvalues='{'service_roles': [], 'user_id': None, 'roles': [], 'user_domain_id': None, 'service_project_id':
None, 'service_user_id': None, 'service_user_domain_id': None, 'service_project_domain_id': None, 'is_admin_project': True, 'user': None, 'project_id': None, 'tenant': None, 'project_domain_id': None}' enforce /usr/lib/python2.7/site-packages/glance/api/policy.py:64<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">The takeaway that I have is that in the case of get_images, is_admin_project is True, which is WRONG for that test but since it’s a read-only operation it’s content to shortcircuit and return all those images.<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">In the case of publicize_image, the is_admin_project being True isn’t enough, and when it checks user (which is None) it says NOPE.<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">So somehow for some reason glance APIs context is super duper wrong.<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<div>
<p class="MsoNormal"><span style="color:black">Mike Moore, M.S.S.E.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:black"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:black">Systems Engineer, Goddard Private Cloud</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:black"><a href="mailto:Michael.D.Moore@nasa.gov"><span style="color:#0563C1">Michael.D.Moore@nasa.gov</span></a></span><o:p></o:p></p>
<p class="MsoNormal"><b><span style="color:black"> </span></b><o:p></o:p></p>
<p class="MsoNormal"><span style="color:black">Hydrogen fusion brightens my day.</span><o:p></o:p></p>
</div>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"> <snip chain to let message go to group><o:p></o:p></p>
</div>
</body>
</html>