<font face="Default Sans Serif,Verdana,Arial,Helvetica,sans-serif" size="2"><div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;">Hi, All:</div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;"><br></div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;">We are trying to leverage Heat software config model to support Chef-based software installation. Currently the chef-based software config is not in place with Heat version 0.2.9.</div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;"><br></div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;">Therefore, we do have a number of questions on the implementation by ourselves:</div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;"><br></div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;">1. Should we create new software config child resource types (e.g. <span style="font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; line-height: 20px; white-space: pre-wrap; background-color: rgb(245, 245, 245);"><font color="#333333">OS::Heat::SoftwareConfig::Chef and </font></span><span style="font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; line-height: 20px; white-space: pre-wrap; background-color: rgb(245, 245, 245);"><font color="#333333">OS::Heat::SoftwareDeployment::Chef proposed in the </font></span>https://wiki.openstack.org/wiki/Heat/Blueprints/hot-software-config-spec)<span style="font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; line-height: 20px; white-space: pre-wrap; background-color: rgb(245, 245, 245);"><font color="#333333"> or should we reuse the existing software config resource type (e.g. OS::Heat::SoftwareConfig by leveraging group attribute) like the following example with Puppet? What are the pros and cons with either approach?</font></span></div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;"><span style="font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; line-height: 20px; white-space: pre-wrap; background-color: rgb(245, 245, 245);"><font color="#333333"><br></font></span></div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;"><div><font face="Default Monospace,Courier New,Courier,monospace" size="3"><font color="#333333"><div class="line" id="LC23" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="l-Scalar-Plain" style="box-sizing: border-box;">config</span><span class="p-Indicator" style="box-sizing: border-box;">:</span></div><div class="line" id="LC24" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="l-Scalar-Plain" style="box-sizing: border-box;">type</span><span class="p-Indicator" style="box-sizing: border-box;">:</span> <span class="l-Scalar-Plain" style="box-sizing: border-box;">OS::Heat::SoftwareConfig</span></div><div class="line" id="LC25" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="l-Scalar-Plain" style="box-sizing: border-box;">properties</span><span class="p-Indicator" style="box-sizing: border-box;">:</span></div><div class="line" id="LC26" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="l-Scalar-Plain" style="box-sizing: border-box;">group</span><span class="p-Indicator" style="box-sizing: border-box;">:</span> <span class="l-Scalar-Plain" style="box-sizing: border-box;">puppet</span></div><div class="line" id="LC27" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="l-Scalar-Plain" style="box-sizing: border-box;">inputs</span><span class="p-Indicator" style="box-sizing: border-box;">:</span></div><div class="line" id="LC28" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="p-Indicator" style="box-sizing: border-box;">-</span> <span class="l-Scalar-Plain" style="box-sizing: border-box;">name</span><span class="p-Indicator" style="box-sizing: border-box;">:</span> <span class="l-Scalar-Plain" style="box-sizing: border-box;">foo</span></div><div class="line" id="LC29" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="p-Indicator" style="box-sizing: border-box;">-</span> <span class="l-Scalar-Plain" style="box-sizing: border-box;">name</span><span class="p-Indicator" style="box-sizing: border-box;">:</span> <span class="l-Scalar-Plain" style="box-sizing: border-box;">bar</span></div><div class="line" id="LC30" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="l-Scalar-Plain" style="box-sizing: border-box;">outputs</span><span class="p-Indicator" style="box-sizing: border-box;">:</span></div><div class="line" id="LC31" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="p-Indicator" style="box-sizing: border-box;">-</span> <span class="l-Scalar-Plain" style="box-sizing: border-box;">name</span><span class="p-Indicator" style="box-sizing: border-box;">:</span> <span class="l-Scalar-Plain" style="box-sizing: border-box;">result</span></div><div class="line" id="LC32" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="l-Scalar-Plain" style="box-sizing: border-box;">config</span><span class="p-Indicator" style="box-sizing: border-box;">:</span></div><div class="line" id="LC33" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="l-Scalar-Plain" style="box-sizing: border-box;">get_file</span><span class="p-Indicator" style="box-sizing: border-box;">:</span> <span class="l-Scalar-Plain" style="box-sizing: border-box;">config-scripts/example-puppet-manifest.pp</span></div><div class="line" id="LC34" style="box-sizing: border-box; padding-left: 10px; height: 18px;"><br style="box-sizing: border-box;"></div><div class="line" id="LC35" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="l-Scalar-Plain" style="box-sizing: border-box;">deployment</span><span class="p-Indicator" style="box-sizing: border-box;">:</span></div><div class="line" id="LC36" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="l-Scalar-Plain" style="box-sizing: border-box;">type</span><span class="p-Indicator" style="box-sizing: border-box;">:</span> <span class="l-Scalar-Plain" style="box-sizing: border-box;">OS::Heat::SoftwareDeployment</span></div><div class="line" id="LC37" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="l-Scalar-Plain" style="box-sizing: border-box;">properties</span><span class="p-Indicator" style="box-sizing: border-box;">:</span></div><div class="line" id="LC38" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="l-Scalar-Plain" style="box-sizing: border-box;">config</span><span class="p-Indicator" style="box-sizing: border-box;">:</span></div><div class="line" id="LC39" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="l-Scalar-Plain" style="box-sizing: border-box;">get_resource</span><span class="p-Indicator" style="box-sizing: border-box;">:</span> <span class="l-Scalar-Plain" style="box-sizing: border-box;">config</span></div><div class="line" id="LC40" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="l-Scalar-Plain" style="box-sizing: border-box;">server</span><span class="p-Indicator" style="box-sizing: border-box;">:</span></div><div class="line" id="LC41" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="l-Scalar-Plain" style="box-sizing: border-box;">get_resource</span><span class="p-Indicator" style="box-sizing: border-box;">:</span> <span class="l-Scalar-Plain" style="box-sizing: border-box;">server</span></div><div class="line" id="LC42" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="l-Scalar-Plain" style="box-sizing: border-box;">input_values</span><span class="p-Indicator" style="box-sizing: border-box;">:</span></div><div class="line" id="LC43" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="l-Scalar-Plain" style="box-sizing: border-box;">foo</span><span class="p-Indicator" style="box-sizing: border-box;">:</span> <span class="l-Scalar-Plain" style="box-sizing: border-box;">fooooo</span></div><div class="line" id="LC44" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="l-Scalar-Plain" style="box-sizing: border-box;">bar</span><span class="p-Indicator" style="box-sizing: border-box;">:</span> <span class="l-Scalar-Plain" style="box-sizing: border-box;">baaaaa</span></div></font></font></div></div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;"><span style="font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; line-height: 20px; white-space: pre-wrap; background-color: rgb(245, 245, 245);"><font color="#333333"><br></font></span></div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;"><br></div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;">2. Regarding OpsCode Chef and Heat integration, should our software config support chef-solo only, or should support Chef server? In another word, should we let Heat to do the orchestration for the chef-based software install or should we continue to use chef-server for the chef-based software install?</div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;"><br></div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;">3. In the current implementation of software config hook for puppet as follows:</div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;"><br></div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;"><span class="repo-root js-repo-root" style="box-sizing: border-box; font-weight: bold; font-family: Helvetica, arial, freesans, clean, sans-serif, 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; line-height: 25.200000762939453px;"><font color="#999999"><span itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb" style="box-sizing: border-box;"><a href="https://github.com/openstack/heat-templates" data-branch="master" data-direction="back" data-pjax="true" itemscope="url" target="_blank" style="text-decoration: none; cursor: pointer; box-sizing: border-box; background: transparent;"><font color="#4183c4"><span itemprop="title" style="box-sizing: border-box;">heat-templates</span></font></a></span></font></span><span class="separator" style="box-sizing: border-box; font-family: Helvetica, arial, freesans, clean, sans-serif, 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; line-height: 25.200000762939453px;"><font color="#999999"> / </font></span><span itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb" style="box-sizing: border-box; font-family: Helvetica, arial, freesans, clean, sans-serif, 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; line-height: 25.200000762939453px;"><font color="#999999"><a href="https://github.com/openstack/heat-templates/tree/master/hot" data-branch="master" data-direction="back" data-pjax="true" itemscope="url" target="_blank" style="text-decoration: none; cursor: pointer; box-sizing: border-box; background: transparent;"><font color="#4183c4"><span itemprop="title" style="box-sizing: border-box;">hot</span></font></a></font></span><span class="separator" style="box-sizing: border-box; font-family: Helvetica, arial, freesans, clean, sans-serif, 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; line-height: 25.200000762939453px;"><font color="#999999"> / </font></span><span itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb" style="box-sizing: border-box; font-family: Helvetica, arial, freesans, clean, sans-serif, 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; line-height: 25.200000762939453px;"><font color="#999999"><a href="https://github.com/openstack/heat-templates/tree/master/hot/software-config" data-branch="master" data-direction="back" data-pjax="true" itemscope="url" target="_blank" style="text-decoration: none; cursor: pointer; box-sizing: border-box; background: transparent;"><font color="#4183c4"><span itemprop="title" style="box-sizing: border-box;">software-config</span></font></a></font></span><span class="separator" style="box-sizing: border-box; font-family: Helvetica, arial, freesans, clean, sans-serif, 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; line-height: 25.200000762939453px;"><font color="#999999"> / </font></span><span itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb" style="box-sizing: border-box; font-family: Helvetica, arial, freesans, clean, sans-serif, 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; line-height: 25.200000762939453px;"><font color="#999999"><a href="https://github.com/openstack/heat-templates/tree/master/hot/software-config/elements" data-branch="master" data-direction="back" data-pjax="true" itemscope="url" target="_blank" style="text-decoration: none; cursor: pointer; box-sizing: border-box; background: transparent;"><font color="#4183c4"><span itemprop="title" style="box-sizing: border-box;">elements</span></font></a></font></span><span class="separator" style="box-sizing: border-box; font-family: Helvetica, arial, freesans, clean, sans-serif, 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; line-height: 25.200000762939453px;"><font color="#999999"> / </font></span><span itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb" style="box-sizing: border-box; font-family: Helvetica, arial, freesans, clean, sans-serif, 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; line-height: 25.200000762939453px;"><font color="#999999"><a href="https://github.com/openstack/heat-templates/tree/master/hot/software-config/elements/heat-config-puppet" data-branch="master" data-direction="back" data-pjax="true" itemscope="url" target="_blank" style="text-decoration: none; cursor: pointer; box-sizing: border-box; background: transparent;"><font color="#4183c4"><span itemprop="title" style="box-sizing: border-box;">heat-config-puppet</span></font></a></font></span><span class="separator" style="box-sizing: border-box; font-family: Helvetica, arial, freesans, clean, sans-serif, 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; line-height: 25.200000762939453px;"><font color="#999999"> / </font></span><span itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb" style="box-sizing: border-box; font-family: Helvetica, arial, freesans, clean, sans-serif, 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; line-height: 25.200000762939453px;"><font color="#999999"><a href="https://github.com/openstack/heat-templates/tree/master/hot/software-config/elements/heat-config-puppet/install.d" data-branch="master" data-direction="back" data-pjax="true" itemscope="url" target="_blank" style="text-decoration: none; cursor: pointer; box-sizing: border-box; background: transparent;"><font color="#4183c4"><span itemprop="title" style="box-sizing: border-box;">install.d</span></font></a></font></span><span class="separator" style="box-sizing: border-box; font-family: Helvetica, arial, freesans, clean, sans-serif, 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; line-height: 25.200000762939453px;"><font color="#999999"> / </font></span><strong class="final-path" style="box-sizing: border-box; font-family: Helvetica, arial, freesans, clean, sans-serif, 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; line-height: 25.200000762939453px;">50-heat-config-hook-puppet</strong></div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;"><br></div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;">3.1 why we need a 50-* as a prefix for the heat-config hook name?</div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;"><br></div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;">3.2 In the script as follows, what is the "install-packages" script? where does it load puppet package? How would we change the script to install chef package?</div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;"><br></div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;"><div><font face="Default Monospace,Courier New,Courier,monospace" size="3"><font color="#333333"><div class="line" id="LC1" style="box-sizing: border-box; padding-left: 10px; height: 18px;"><span class="c" style="box-sizing: border-box; font-style: italic;"><font color="#999988">#!/bin/bash</font></span></div><div class="line" id="LC2" style="box-sizing: border-box; padding-left: 10px; height: 18px;"><span class="nb" style="box-sizing: border-box;"><font color="#0086b3">set</font></span> -x</div><div class="line" id="LC3" style="box-sizing: border-box; padding-left: 10px; height: 18px;"><br style="box-sizing: border-box;"></div><div class="line" id="LC4" style="box-sizing: border-box; padding-left: 10px; height: 18px;"><span class="nv" style="box-sizing: border-box; color: teal;">SCRIPTDIR</span><span class="o" style="box-sizing: border-box; font-weight: bold;">=</span><span class="k" style="box-sizing: border-box; font-weight: bold;">$(</span>dirname <span class="nv" style="box-sizing: border-box; color: teal;">$0</span><span class="k" style="box-sizing: border-box; font-weight: bold;">)</span></div><div class="line" id="LC5" style="box-sizing: border-box; padding-left: 10px; height: 18px;"><br style="box-sizing: border-box;"></div><div class="line" id="LC6" style="box-sizing: border-box; padding-left: 10px; height: 18px;">install-packages puppet</div><div class="line" id="LC7" style="box-sizing: border-box; padding-left: 10px; height: 18px;">install -D -g root -o root -m <span class="m" style="box-sizing: border-box;"><font color="#009999">0755</font></span> <span class="k" style="box-sizing: border-box; font-weight: bold;">${</span><span class="nv" style="box-sizing: border-box; color: teal;">SCRIPTDIR</span><span class="k" style="box-sizing: border-box; font-weight: bold;">}</span>/hook-puppet.py /var/lib/heat-config/hooks/puppet</div></font></font></div></div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;"><br></div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;"><br></div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;">4. With <a href="https://github.com/openstack/diskimage-builder" target="_blank" style="text-decoration: none; cursor: pointer; box-sizing: border-box; font-family: Helvetica, arial, freesans, clean, sans-serif, 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; line-height: 25.5px; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><font color="#4183c4">diskimage-builder</font></a><font color="#333333" face="Helvetica, arial, freesans, clean, sans-serif, Segoe UI Emoji, Segoe UI Symbol"><span style="font-size: 15px; line-height: 25.5px;">, we can build in images with many software config elements(chef, puppet, script, salt), which means there will be many hooks in the image.</span></font></div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;"><span style="font-size: 15px; line-height: 25.5px; font-family: Helvetica, arial, freesans, clean, sans-serif, 'Segoe UI Emoji', 'Segoe UI Symbol';"><font color="#333333"> However, By reading the source code of the os-refresh-config, it seems it will execute only the hooks which has corresponding "group" defined in the software config, is that right?</font></span></div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;"><span style="font-size: 15px; line-height: 25.5px; font-family: Helvetica, arial, freesans, clean, sans-serif, 'Segoe UI Emoji', 'Segoe UI Symbol';"><font color="#333333"><br></font></span></div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;"><div><font face="Default Monospace,Courier New,Courier,monospace" size="3"><font color="#333333"><div class="line" id="LC40" style="box-sizing: border-box; padding-left: 10px; height: 18px;"><span class="k" style="box-sizing: border-box; font-weight: bold;">def</span> <span class="nf" style="box-sizing: border-box; font-weight: bold;"><font color="#990000">invoke_hook</font></span><span class="p" style="box-sizing: border-box;">(</span><span class="n" style="box-sizing: border-box;">c</span><span class="p" style="box-sizing: border-box;">,</span> <span class="n" style="box-sizing: border-box;">log</span><span class="p" style="box-sizing: border-box;">):</span></div><div class="line" id="LC41" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="c" style="box-sizing: border-box; font-style: italic;"><font color="#999988"># sanitise the group to get an alphanumeric hook file name</font></span></div><div class="line" id="LC42" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="n" style="box-sizing: border-box;">hook</span> <span class="o" style="box-sizing: border-box; font-weight: bold;">=</span> <span class="s" style="box-sizing: border-box;"><font color="#dd1144">""</font></span><span class="o" style="box-sizing: border-box; font-weight: bold;">.</span><span class="n" style="box-sizing: border-box;">join</span><span class="p" style="box-sizing: border-box;">(</span></div><div class="line" id="LC43" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="n" style="box-sizing: border-box;">x</span> <span class="k" style="box-sizing: border-box; font-weight: bold;">for</span> <span class="n" style="box-sizing: border-box;">x</span> <span class="ow" style="box-sizing: border-box; font-weight: bold;">in</span> <span class="n" style="box-sizing: border-box;">c</span><span class="p" style="box-sizing: border-box;">[</span><span class="s" style="box-sizing: border-box;"><font color="#dd1144">'group'</font></span><span class="p" style="box-sizing: border-box;">]</span> <span class="k" style="box-sizing: border-box; font-weight: bold;">if</span> <span class="n" style="box-sizing: border-box;">x</span> <span class="o" style="box-sizing: border-box; font-weight: bold;">==</span> <span class="s" style="box-sizing: border-box;"><font color="#dd1144">'-'</font></span> <span class="ow" style="box-sizing: border-box; font-weight: bold;">or</span> <span class="n" style="box-sizing: border-box;">x</span> <span class="o" style="box-sizing: border-box; font-weight: bold;">==</span> <span class="s" style="box-sizing: border-box;"><font color="#dd1144">'_'</font></span> <span class="ow" style="box-sizing: border-box; font-weight: bold;">or</span> <span class="n" style="box-sizing: border-box;">x</span><span class="o" style="box-sizing: border-box; font-weight: bold;">.</span><span class="n" style="box-sizing: border-box;">isalnum</span><span class="p" style="box-sizing: border-box;">())</span></div><div class="line" id="LC44" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="n" style="box-sizing: border-box;">hook_path</span> <span class="o" style="box-sizing: border-box; font-weight: bold;">=</span> <span class="n" style="box-sizing: border-box;">os</span><span class="o" style="box-sizing: border-box; font-weight: bold;">.</span><span class="n" style="box-sizing: border-box;">path</span><span class="o" style="box-sizing: border-box; font-weight: bold;">.</span><span class="n" style="box-sizing: border-box;">join</span><span class="p" style="box-sizing: border-box;">(</span><span class="n" style="box-sizing: border-box;">HOOKS_DIR</span><span class="p" style="box-sizing: border-box;">,</span> <span class="n" style="box-sizing: border-box;">hook</span><span class="p" style="box-sizing: border-box;">)</span></div><div class="line" id="LC45" style="box-sizing: border-box; padding-left: 10px; height: 18px;"><br style="box-sizing: border-box;"></div><div class="line" id="LC46" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="n" style="box-sizing: border-box;">signal_data</span> <span class="o" style="box-sizing: border-box; font-weight: bold;">=</span> <span class="bp" style="box-sizing: border-box;"><font color="#999999">None</font></span></div><div class="line" id="LC47" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="k" style="box-sizing: border-box; font-weight: bold;">if</span> <span class="ow" style="box-sizing: border-box; font-weight: bold;">not</span> <span class="n" style="box-sizing: border-box;">os</span><span class="o" style="box-sizing: border-box; font-weight: bold;">.</span><span class="n" style="box-sizing: border-box;">path</span><span class="o" style="box-sizing: border-box; font-weight: bold;">.</span><span class="n" style="box-sizing: border-box;">exists</span><span class="p" style="box-sizing: border-box;">(</span><span class="n" style="box-sizing: border-box;">hook_path</span><span class="p" style="box-sizing: border-box;">):</span></div><div class="line" id="LC48" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="n" style="box-sizing: border-box;">log</span><span class="o" style="box-sizing: border-box; font-weight: bold;">.</span><span class="n" style="box-sizing: border-box;">warn</span><span class="p" style="box-sizing: border-box;">(</span><span class="s" style="box-sizing: border-box;"><font color="#dd1144">'Skipping group </font></span><span class="si" style="box-sizing: border-box;"><font color="#dd1144">%s</font></span><span class="s" style="box-sizing: border-box;"><font color="#dd1144"> with no hook script </font></span><span class="si" style="box-sizing: border-box;"><font color="#dd1144">%s</font></span><span class="s" style="box-sizing: border-box;"><font color="#dd1144">'</font></span> <span class="o" style="box-sizing: border-box; font-weight: bold;">%</span> <span class="p" style="box-sizing: border-box;">(</span></div><div class="line" id="LC49" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="n" style="box-sizing: border-box;">c</span><span class="p" style="box-sizing: border-box;">[</span><span class="s" style="box-sizing: border-box;"><font color="#dd1144">'group'</font></span><span class="p" style="box-sizing: border-box;">],</span> <span class="n" style="box-sizing: border-box;">hook_path</span><span class="p" style="box-sizing: border-box;">))</span></div><div class="line" id="LC50" style="box-sizing: border-box; padding-left: 10px; height: 18px;"> <span class="k" style="box-sizing: border-box; font-weight: bold;">else</span><span class="p" style="box-sizing: border-box;">:</span></div></font></font></div></div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;"><br></div><div style="font-family: 'Sans Serif', Verdana, Arial, Helvetica, sans-serif; font-size: small;"><br>Thanks a lot for your kind assistance!<br></div><br><br><br>Thanks,<br>Tao Tao, Ph.D.<br>IBM T. J. Watson Research Center<br>1101 Kitchawan Road<br>Yorktown Heights, NY 10598<br>Phone: (914) 945-4541<br>Email: ttao@us.ibm.com</div></font>