tag:blogger.com,1999:blog-208364892018-03-05T23:33:48.133-08:00Blog.ControlTierNews and notes from the ControlTier Projectalex Honorhttp://www.blogger.com/profile/11201276890282346827noreply@blogger.comBlogger51125tag:blogger.com,1999:blog-20836489.post-17496367098488230702010-04-23T08:39:00.001-07:002010-04-23T08:41:54.489-07:00ControlTier 3.4.11 Released<div><ul><li><a href="http://bit.ly/ctier3-4-11">Download and Release Notes</a></li></ul></div><div><div><br /></div><div>This release is focused on performance issues and bug fixes.</div></div><div><br /></div><div>Contributors:</div><div><br /></div><div>Many thanks to bug filers, mailing list participants, and committers</div><div><br /></div><div>Reminder: <a href="http://controltier.org/wiki/Community">find us on IRC, Google Groups, and more</a></div><div><br /></div><div>Notable Improvements:</div><div><br /></div><div><ul><li>Several fixes to inefficient code have increased the performance in the key areas of ControlTier command dispatch and execution.</li><li>ProjectBuilder's load-object command has been made more efficient (ashortland)</li><li>The sending of model-change reports from Workbench to Reportcenter has been disabled by default to reduce server load. (This can be re-enabled if desired)</li><li>By default, the Process Flow Visualization in Jobcenter for workflow commands will not be available. To see it you must now run "ctl-depot -a install" with the "-w" flag to generate the appropriate files used by Jobcenter. This improves client-node ctl-depot performance. This issue will be revisited for a better solution in future.</li></ul></div><div>Documentation available on <a href="http://wiki.controltier.org/">The ControlTier Wiki</a></div><div class="blogger-post-footer">Also visit the ControlTier Google Group:
http://groups.google.com/group/controltier</div>Greg Schuelerhttp://www.blogger.com/profile/09437554144200345516noreply@blogger.com0http://blog.controltier.com/2010/04/controltier-3411-released.htmltag:blogger.com,1999:blog-20836489.post-84277329697700735092010-03-04T10:38:00.000-08:002010-03-04T10:42:01.339-08:00ControlTier 3.4.10 Released<div><ul><li><a href="http://bit.ly/ctier3-4-10">Download and Release Notes</a></li></ul></div><div><br /></div><div>This release fixes quite a few bugs and even completes a fair number of feature requests. Primary development has moved onto the 3.5x development line, although future 3.4x maintenance releases are likely.</div><div><br /></div><div>Contributors:</div><div><br /></div><div>Many thanks to bug filers, mailing list participants, and committers</div><div><br /></div><div>Reminder: <a href="http://controltier.org/wiki/Community">find us on IRC, Google Groups, and more</a></div><div><br /></div><div>Notable Improvements:</div><div><br /></div><div><ul><li>Single-sign-on between web applications: Workbench and Jobcenter now support a unified container sign-on, so you should only have to log in once from now on. (Request #2505923).</li></ul></div><div>Documentation available on <a href="http://wiki.controltier.org/">The ControlTier Wiki</a></div><div class="blogger-post-footer">Also visit the ControlTier Google Group:
http://groups.google.com/group/controltier</div>Greg Schuelerhttp://www.blogger.com/profile/09437554144200345516noreply@blogger.com0http://blog.controltier.com/2010/03/controltier-3410-released.htmltag:blogger.com,1999:blog-20836489.post-50982234934282561932009-11-18T13:45:00.001-08:002009-11-18T13:51:04.919-08:00ControlTier 3.4.9 ReleasedControlTier 3.4.9 has been released.<div><ul><li><a href="http://bit.ly/ctier349">Download</a> and Release Notes</li></ul></div><div><div><div><div>This release has quite a few bug fixes and improvements. It is also the first ControlTier release distributed in RPM packages. </div><div><br /></div><div>Release 3.4.9 has both the traditional installer packages (zip,jar), and two RPM packages: ctier-server and ctier-client. The ctier-server is the full server installation with the embedded client. The ctier-client includes the client installation only allowing simpler package distribution and installation for client nodes.</div><div><ul><li> see <a href="http://wiki.controltier.org/wiki/RPM_installer">RPM installer</a> for use of the RPM packages</li></ul></div></div><div>Documentation: <a href="http://wiki.controltier.org/">The ControlTier Wiki</a></div><div><br /></div><div>Notable bug fixes:</div><div><div><ul><li>Workflows with command error handlers may not have been passing options correctly to the error handler command (Bug #2888149).</li><li>Using JNDI authorization could cause a NPE when roles exist in the directory without any members (Bug #2887979).</li><li>The ctl-depot -a remove action was not removing everything cleanly (Bug #2880656).</li><li>The ClientInstaller module did not make use of the server.hostname property for the installer (Bug #2894072).</li><li>Dispatching commands was incorrectly using the hostname to determine if the node was local or not (Bug #2893443).</li><li>Reportcenter's "Command" filter was not working (Bug #2899533).</li><li>Jobcenter would not list scheduled jobs created by another user (Bug #2896263).</li><li>Sending mail via a success/error handler was not working with java 1.6 (Bug #2880643).</li></ul></div></div><div>Notable Improvements:</div><div><br /></div><div><div><ul><li>Type.xml generation on the server: Workbench now generates type.xml files when modules are packaged, allowing easier transition to source-based module development. (Request #2898788).</li><li>script-exec support for "dav://" script paths: You can now use "dav://" URLs in your calls to script-exec (Request #2886738).</li><div><br /></div></ul></div></div></div></div><div class="blogger-post-footer">Also visit the ControlTier Google Group:
http://groups.google.com/group/controltier</div>Greg Schuelerhttp://www.blogger.com/profile/09437554144200345516noreply@blogger.com0http://blog.controltier.com/2009/11/controltier-349-released.htmltag:blogger.com,1999:blog-20836489.post-26932987958611750722009-09-29T16:11:00.000-07:002009-09-29T17:14:17.823-07:003.4.8 Feature: Exporting project.xmlA much requested feature has been implemented for <a href="http://wiki.controltier.org/wiki/ControlTier_3.4.8">3.4.8</a>, <a href="http://wiki.controltier.org/wiki/Project.xml">project.xml</a> export, both from the command line via <a href="http://wiki.controltier.org/wiki/ProjectBuilder">ProjectBuilder</a> and via the GUI using <a href="http://wiki.controltier.org/wiki/Workbench">Workbench</a>.<br /><br />Most ControlTier users manage their project model using XML files that define the resources that comprise their application and their environment. The ProjectBuilder module provides a command to upload these XML files to the ControlTier server webapp, Workbench. Up until <a href="http://wiki.controltier.org/wiki/ControlTier_3.4.8">3.4.8</a>, Workbench did not provide a direct interface to export the same data back to XML. This was particularly annoying when a project model was setup using the GUI interface of Workbench.<br /><br />Here's a resource model from one of the <a href="http://wiki.controltier.org/wiki/Service_Package_Deployment_Example">examples</a>:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ro5FJ3TUBt8/SsKXEs9fiDI/AAAAAAAAADM/Nx8vU_qj9bg/s1600-h/workbench-projectxml-export-serviceview.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 79px;" src="http://2.bp.blogspot.com/_ro5FJ3TUBt8/SsKXEs9fiDI/AAAAAAAAADM/Nx8vU_qj9bg/s320/workbench-projectxml-export-serviceview.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5387034211332884530" /></a><br /><br />To export that data from Workbench click on the "simpleTomcat" object and in the toolbar you will notice an XML icon. Click that icon and the browser will be directed to a page that contains the project.xml.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ro5FJ3TUBt8/SsKWxrdlbNI/AAAAAAAAADE/JXOQBygLvhY/s1600-h/workbench-projectxml-export.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 164px;" src="http://4.bp.blogspot.com/_ro5FJ3TUBt8/SsKWxrdlbNI/AAAAAAAAADE/JXOQBygLvhY/s320/workbench-projectxml-export.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5387033884513103058" /></a><br /><br />The same can be done from the command line via the ProjectBuilder command, <a href="http://controltier.sourceforge.net/docs/latest/core/reference/user/ProjectBuilder/commands/find-objects.html">find-objects</a>.<br />Below, the find-objects command is used to lookup the same "simpleTomcat" object and the exported model data saved to the file: /tmp/simpleTomcat.xml<br /><br /><pre><br />$ ctl -p demo -m ProjectBuilder -c find-objects -- -type Service -name simpleTomcat -out /tmp/simpleTomcat.xml<br />Results stored in file: /tmp/simpleTomcat.xml<br /></pre><br /><br />Here's the the content of /tmp/simpleTomcat.xml<br /><br />&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;!DOCTYPE project PUBLIC "-//ControlTier Software Inc.//DTD Project Document 1.0//EN" "project.dtd"&gt;<br /><br />&lt;project&gt;<br /> &lt;setting type="Port" name="simpleTomcat-connector" description="The connector port used by Tomcat" settingValue="18080" settingType="TCP"/&gt;<br /> &lt;setting type="ServiceSpawn" name="simpleTomcat" description="Whether to spawn separate process for the start script" settingValue="false" settingType=""/&gt;<br /> &lt;setting type="ServiceStartScript" name="simpleTomcat" description="The script used by startService" settingValue="/Users/alexh/ctier/examples/service-package-deployment/start.sh" settingType="script"/&gt;<br /> &lt;setting type="ServiceStopScript" name="simpleTomcat" description="The script used by stopService" settingValue="/Users/alexh/ctier/examples/service-package-deployment/stop.sh" settingType="script"/&gt;<br /> &lt;setting type="ServiceIsDownScript" name="simpleTomcat" description="The script used by assertServicesIsDown" settingValue="/Users/alexh/ctier/examples/service-package-deployment/isdown.xml" settingType="script"/&gt;<br /> &lt;setting type="ServiceIsUpScript" name="simpleTomcat" description="The script used by assertServicesIsUp" settingValue="/Users/alexh/ctier/examples/service-package-deployment/isup.xml" settingType="script"/&gt;<br /> &lt;package type="war" name="simple-123.war" description="A simple webapp" filename="simple-123.war" filetype="war" base="simple" version="123" release="" arch="noarch" buildtime="123" vendor="" restart="false" installroot="${env.CTIER_ROOT}/examples/service-package-deployment/apache-tomcat-5.5.28/webapps" repoUrl="http://strongbad:8080/jackrabbit/repository/workbench/pkgs/demo/war/wars/simple-123.war" releasetag="" installrank="2"/&gt;<br /> &lt;deployment type="Service" name="simpleTomcat" description="The Tomcat deployment." basedir="/Users/alexh/ctier/examples/service-package-deployment/apache-tomcat-5.5.28" installRoot="/Users/alexh/ctier/examples/service-package-deployment/apache-tomcat-5.5.28" startuprank=""&gt;<br /> &lt;resources&gt;<br /> &lt;resource name="simpleTomcat" type="ServiceIsDownScript"/&gt;<br /> &lt;resource name="simpleTomcat" type="ServiceIsUpScript"/&gt;<br /> &lt;resource name="simpleTomcat" type="ServiceStopScript"/&gt;<br /> &lt;resource name="simple-123.war" type="war"/&gt;<br /> &lt;resource name="simpleTomcat" type="ServiceStartScript"/&gt;<br /> &lt;resource name="simpleTomcat-connector" type="Port"/&gt;<br /> &lt;resource name="simpleTomcat" type="ServiceSpawn"/&gt;<br /> &lt;/resources&gt;<br /> &lt;referrers replace="false"&gt;<br /> &lt;resource name="strongbad.local" type="Node"/&gt;<br /> &lt;/referrers&gt;<br /> &lt;/deployment&gt;<br />&lt;/project&gt;<br /><br />With the XML exported to a file, it can be checked into a source code repository and later uploaded to the server again.<div class="blogger-post-footer">Also visit the ControlTier Google Group:
http://groups.google.com/group/controltier</div>Alex Honorhttp://www.blogger.com/profile/13700437911627383122noreply@blogger.com0http://blog.controltier.com/2009/09/348-feature-exporting-projectxml.htmltag:blogger.com,1999:blog-20836489.post-72491247847472895432009-09-29T08:28:00.000-07:002009-09-29T08:32:34.775-07:00ControlTier 3.4.8 ReleasedControlTier 3.4.8 has been released.<div><ul><li><a href="http://wiki.controltier.org/wiki/ControlTier_3.4.8">Download</a> and Release Notes</li></ul></div><div><div><div>This is primarily a bug fix release, but some notable improvements have been made as well.</div><div><br /></div><div>Documentation: <a href="http://wiki.controltier.org/">The ControlTier Wiki</a></div><div><br /></div><div>Notable bug fixes:</div><div><div><ul><li>Conflation of Node name vs. hostname cropped up again in node-dispatch with CTL and the integration with Workbench. It should finally be completely resolved.</li><li>ProjectBuilder#find-objects has duplicate results: The find-objects command will now only show unique results.</li></ul></div></div><div>Notable Improvements:</div><div><br /></div><div><div><ul><li>Java 6 support: Both the client and server now support Java 6. </li><li>project.xml export: Workbench and the <a href="http://controltier.sourceforge.net/docs/3.4.8/core/reference/user/ProjectBuilder/commands/find-objects.html">ProjectBuilder#find-objects</a> command can now export project.xml formatted data. Either use the <span class="Apple-style-span" style="font-family:'courier new';">-out <filename></span> option to find-objects, or click the "XML" toolbar button when viewing a resource in Workbench.</li><li> The <a href="http://wiki.controltier.org/wiki/Maven_Plugin">Maven plugin</a> has been updated to support static commands.</li></ul></div></div><div><br /></div></div></div><div class="blogger-post-footer">Also visit the ControlTier Google Group:
http://groups.google.com/group/controltier</div>Greg Schuelerhttp://www.blogger.com/profile/09437554144200345516noreply@blogger.com0http://blog.controltier.com/2009/09/controltier-348-released.htmltag:blogger.com,1999:blog-20836489.post-46687697239378257982009-09-02T17:58:00.000-07:002009-09-02T18:02:45.562-07:00ControlTier 3.4.7 ReleasedControlTier 3.4.7 has been released.<div><ul><li><a href="http://wiki.controltier.org/wiki/ControlTier_3.4.7">Download</a> and Release Notes</li></ul></div><div><div><div>This is primarily a bug fix release, but some notable improvements have been made as well.</div><div><br /></div><div>Documentation: <a href="http://wiki.controltier.org/">The ControlTier Wiki</a></div><div><br /></div><div>Notable bug fixes:</div><div><br /></div><div>Node name/hostname are now correctly distinguished when installing deployments. You can now have two Nodes with the same hostname, as long as the Node names are unique, and <span class="Apple-style-span" style="font-family:'courier new';">ctl-depot -a install</span> will work correctly. </div><div><br /></div><div>Improvements:</div><div><br /></div><div>Tags:</div><div><br /></div><div>Workbench service manager views now display any Tags associated with a resource in the manager list view. Tag searching is also now fully integrated in the Workbench user interface.</div><div><br /></div><div>Node Filtering:</div><div><br /></div><div>CTL and CTL-EXEC now support using arbitrary attributes as node filters in the <span class="Apple-style-span" style="font-family:'courier new';">-I/-X</span> arguments. E.g. "<span class="Apple-style-span" style="font-family:'courier new';">ctl-exec -I myattribute=something -- echo hello</span>". </div><div><br /></div><div>Retrying failed commands:</div><div><br /></div><div>CTL and CTL-EXEC now also support a -F flag which lets the user specify a filepath to store a list of nodes for which failures occur. When you execute across multiple nodes using the<span class="Apple-style-span" style="font-family:'courier new';"> -I/-X</span> node filter options, and use the -K (--keepgoing) option, any nodes for which a failure occurs will be stored in the specified -F file. You can then re-execute with the exact same commandline, and CTL/CTL-EXEC will only execute on the nodes listed in the given file. If further errors occur, the nodelist will again be stored in the same file. Once all nodes have executed succesfully, the file will be removed. This facilitates retrying a failed command only on the failed nodes either manually or automatically.</div><div><br /></div><div>Environment variables in scripts:</div><div><br /></div><div>A new default mechanism for executing defined shell commands called "shell-exec" is introduced. This allows shell scripts/commands to acquire environment variables with values passed directly from the set of ControlTier metadata available to all commands. </div><div><br /></div><div>Cygwin:</div><div><br /></div><div>Installer script improvements provide a much smoother way to install ControlTier on cygwin-based Windows nodes. </div><div><br /></div><div>Dispatching scripts to cygwin nodes via ctl-exec or Jobcenter now works correctly when the Node has os-family="cygwin", and registration of a Node via a ControlTier client installed on a cygwin node will correctly set the os-family of the Node.</div><div><br /></div><div><br /></div></div></div><div class="blogger-post-footer">Also visit the ControlTier Google Group:
http://groups.google.com/group/controltier</div>Greg Schuelerhttp://www.blogger.com/profile/09437554144200345516noreply@blogger.com0http://blog.controltier.com/2009/09/controltier-347-released.htmltag:blogger.com,1999:blog-20836489.post-71258726887579078812009-07-24T16:36:00.001-07:002009-07-24T16:38:20.853-07:00ControlTier 3.4.6 ReleasedControlTier 3.4.6 has been released.<div><ul><li><a href="http://wiki.controltier.org/wiki/ControlTier_3.4.6">Download</a> and Release Notes</li></ul></div><div><div>This is primarily a bug fix release, with some improvements to Jobcenter, various coreutils, and some broad</div><div>changes to our documentation.</div><div><br /></div><div>Documentation:</div><div><br /></div><div>The ControlTier Wiki is now hosted at <a href="http://wiki.controltier.org/">http://wiki.controltier.org/</a>.</div><div><br /></div><div>The Wiki has gone through some structural changes which will hopefully make it easier to navigate and find</div><div>the documentation you are looking for.</div><div><br /></div><div>The <a href="http://controltier.sourceforge.net/docs/latest">reference docs for ControlTier modules</a> have also been</div><div>restructured into two sections, a User Reference and a Developer Reference. This is to improve readability </div><div>for end users who may not need the Developer Reference information.</div><div><br /></div><div><a href="http://controltier.sourceforge.net/docs/latest/javadoc">Java developer APIs have been published</a>.</div></div><div class="blogger-post-footer">Also visit the ControlTier Google Group:
http://groups.google.com/group/controltier</div>Greg Schuelerhttp://www.blogger.com/profile/09437554144200345516noreply@blogger.com0http://blog.controltier.com/2009/07/controltier-346-released.htmltag:blogger.com,1999:blog-20836489.post-50610815471919161942009-06-05T11:56:00.000-07:002009-06-05T15:17:09.653-07:00Continuous deployment example<div>ControlTier has supported the concept of continuous deployment for years and it's great that the concept is becoming increasingly main stream. </div><div><br /></div><div>In ControlTier, the end-to-end build and deployment process is defined via the Updater "BuildAndUpdate" workflow that orchestrates the Builder's Build and the Site's Update workflows. You can read about the basics on our Wiki here: <a href="http://apps.sourceforge.net/mediawiki/controltier/index.php?title=Continuous_deployment">Continuous_deployment</a></div><div><br /></div><div>There's also a practical <a href="http://apps.sourceforge.net/mediawiki/controltier/index.php?title=Continuous_Deployment_Example_with_Tomcat">hands on example using tomcat</a>. </div><div><br /></div><div>Of course you can also support continuous deployment by having your favorite continuous integration server interface with ControlTier after the build is completed. </div><div><br /></div><div class="blogger-post-footer">Also visit the ControlTier Google Group:
http://groups.google.com/group/controltier</div>Alex Honorhttp://www.blogger.com/profile/13700437911627383122noreply@blogger.com0http://blog.controltier.com/2009/06/continuous-deployment-example.htmltag:blogger.com,1999:blog-20836489.post-21751692360119216072009-06-02T10:26:00.000-07:002009-06-02T10:32:15.978-07:00ControlTier 3.4.4 ReleasedControlTier 3.4.4 has been released.<div><br /></div><div><ul><li><a href="http://apps.sourceforge.net/mediawiki/controltier/index.php?title=ControlTier_3.4.4">Download</a> and Release Notes</li></ul></div><div><br /></div><div><div>This release has been focused on support for Windows in several forms:</div><div><br /></div><div><ul><li>Internet Explorer is now supported for the server web applications Workbench, Jobcenter, and Reportcenter. Both IE 7 and 8 are supported</li><li>Windows-based Examples have been added to the Wiki. See the <a href="http://p.sf.net/controltier/examples">Examples page</a>.</li></ul></div><div><br /></div><div>Other bug fixes are also included.</div><div><br /></div><div>Documentation:</div><div><br /></div><div>Two new high-level Library Guides have been added to help you develop Tomcat and JBoss server management solutions. These guides tie together the related Type Modules that are included with ControlTier, and show how they can be used together to create a management solution.</div><div><br /></div><div><ul><li><a href="http://apps.sourceforge.net/mediawiki/controltier/index.php?title=JBoss_Library">JBoss Library</a></li><li><a href="http://apps.sourceforge.net/mediawiki/controltier/index.php?title=Tomcat_Library">Tomcat Library</a></li></ul></div><div><br /></div><div>We intend to produce these "Library" guides for each of the various technologies that ControlTier provides Type Modules for.</div><div><br /></div><div>See the <a href="http://p.sf.net/controltier/solutions">Solution Libraries Guide</a> for the complete list of available Library Guides.</div></div><div class="blogger-post-footer">Also visit the ControlTier Google Group:
http://groups.google.com/group/controltier</div>Greg Schuelerhttp://www.blogger.com/profile/09437554144200345516noreply@blogger.com0http://blog.controltier.com/2009/06/controltier-344-released.htmltag:blogger.com,1999:blog-20836489.post-60221324489363714742009-04-27T15:45:00.000-07:002009-04-27T15:48:49.741-07:00ControlTier 3.4.3 is now availableControlTier 3.4.3 is now available:<br /><a href="http://sourceforge.net/project/showfiles.php?group_id=151079">http://sourceforge.net/project/showfiles.php?group_id=151079</a><br /><br />Here are the release notes:<br /><a href="http://sourceforge.net/project/shownotes.php?group_id=151079&release_id=678230">http://sourceforge.net/project/shownotes.php?group_id=151079&release_id=678230</a><br /><br />And don't forget to check out the ControlTier Wiki for documentation:<br /><a href="http://apps.sourceforge.net/mediawiki/controltier/index.php?title=Main_Page">http://apps.sourceforge.net/mediawiki/controltier/index.php?title=Main_Page</a><br /><br />Brand new examples/tutorials:<br /><a href="http://apps.sourceforge.net/mediawiki/controltier/index.php?title=Examples">http://apps.sourceforge.net/mediawiki/controltier/index.php?title=Examples</a><div class="blogger-post-footer">Also visit the ControlTier Google Group:
http://groups.google.com/group/controltier</div>Damon Edwardshttp://www.blogger.com/profile/08075446611632722802noreply@blogger.com0http://blog.controltier.com/2009/04/controltier-343-is-now-available.htmltag:blogger.com,1999:blog-20836489.post-84825843103309263092009-04-07T10:14:00.000-07:002009-04-07T10:27:54.141-07:00ControlTier all Apache 2 licensed in 3.4.3The next release of the ControlTier distribution will switch to an all <a href="http://www.apache.org/licenses/LICENSE-2.0.html">Apache 2 license</a> agreement. All of ControlTier 3.x was already Apache 2 licensed except for the Workbench server web app so this really just makes it all consistent. Workbench had been licensed under GPL 2 due to previous business arrangements that have since been re-worked. <div><br /></div><div>How does this impact end users? Well, not much except for the knowledge that you only have one open source license to be aware of and that Apache 2 provides the most freedom of use. </div><div class="blogger-post-footer">Also visit the ControlTier Google Group:
http://groups.google.com/group/controltier</div>Alex Honorhttp://www.blogger.com/profile/13700437911627383122noreply@blogger.com0http://blog.controltier.com/2009/04/controltier-all-apache-2-licensed-in.htmltag:blogger.com,1999:blog-20836489.post-36083981373513630072009-04-02T16:58:00.000-07:002010-01-27T17:20:15.642-08:00New Whitepaper: Achieving Fully Automated ProvisioningWorking with our friends at <a href="http://www.reductivelabs.com/">Reductive Labs</a>, we've just finished a whitepaper called <a href="http://dev2ops.org/storage/downloads/FullyAutomatedProvisioning_Whitepaper.pdf">"Web Ops 2.0: Achieving Fully Automated Provisioning"(pdf)</a>.<br /><br />There is a live example of our joint ControlTier and Puppet solution, naturally. However, the main point of the paper is much broader than that. What we are proposing is an outline of an open source toolchain for fully automated provisioning.<br /><br />What's the criteria for "fully automated provisioning"?<br /><br />That details are in the whitepaper but here's the list we came up with:<br /><ol><li>Be able to automatically provision an entire environment -- from "bare-metal" to running business services -- completely from speciﬁcation</li><li>No direct management of individual boxes</li><li>Be able to revert to a "previously known good" state at any time</li><li>It’s easier to re-provision than it is to repair</li><li>Anyone on your team with minimal domain speciﬁc knowledge can deploy or update an environment</li></ol>Here's the proposed open source toolchain (with ControlTier and Puppet highlighted):<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_B-19AvbslxM/SuD4UBITyrI/AAAAAAAAAN8/zkW3tv_ZpC8/s1600-h/OpenProvisioningToolchain.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/_B-19AvbslxM/SuD4UBITyrI/AAAAAAAAAN8/zkW3tv_ZpC8/s320/OpenProvisioningToolchain.png" /></a><br /></div><br /><br />Read the whitepaper and let us know what you think. I imagine that we'll get some objection to either the criteria or the toolchain... but that's fine. Sparking a conversation is actually what we want.<br /><br />The point of all of this is to encourage discussion on how open source provisioning tools fit together to provide real world solutions. It's all too often that we meet people looking to improve their operations but they are befuddled by all of the various open source choices that don't seem to have much relation to each other. Hopefully this paper will be a first step towards greater public discussion. Educating the public lifts all boats.<br /><br />All of the content in the whitepaper is licensed under the Creative Commons (Attribution - Share Alike) license.<br /><br /><b><i>Update:</i></b> <a href="http://dev2ops.org/blog/2009/11/2/6-months-in-fully-automated-provisioning-revisited.html">See this post on the dev2ops.org for more information and progress on the next version</a><div class="blogger-post-footer">Also visit the ControlTier Google Group:
http://groups.google.com/group/controltier</div>Damon Edwardshttp://www.blogger.com/profile/08075446611632722802noreply@blogger.com8http://blog.controltier.com/2009/04/new-whitepaper-achieving-fully.htmltag:blogger.com,1999:blog-20836489.post-66813024560210993262009-04-02T13:01:00.000-07:002009-04-02T13:07:12.112-07:00ControlTier 3.4.2 posted to SourceForge.netControlTier 3.4.2 is now available:<br /><a href="http://sourceforge.net/project/showfiles.php?group_id=151079">http://sourceforge.net/project/showfiles.php?group_id=151079</a><br /><br />Here are the release notes:<br /><a href="http://sourceforge.net/project/shownotes.php?group_id=151079&amp;release_id=671303">http://sourceforge.net/project/shownotes.php?group_id=151079&amp;release_id=671303</a><br /><br />And don't forget to check out the ControlTier Wiki for documentation:<br /><a href="http://apps.sourceforge.net/mediawiki/controltier/index.php?title=Main_Page">http://apps.sourceforge.net/mediawiki/controltier/index.php?title=Main_Page</a><div class="blogger-post-footer">Also visit the ControlTier Google Group:
http://groups.google.com/group/controltier</div>Damon Edwardshttp://www.blogger.com/profile/08075446611632722802noreply@blogger.com0http://blog.controltier.com/2009/04/controltier-342-posted-to.htmltag:blogger.com,1999:blog-20836489.post-77710247278674441552009-03-01T20:49:00.000-08:002009-03-01T21:04:23.790-08:00New ControlTier ScreencastsNew ControlTier Screencasts are now up on the wiki:<br /><a href="http://apps.sourceforge.net/mediawiki/controltier/index.php?title=Screencasts">http://apps.sourceforge.net/mediawiki/controltier/index.php?title=Screencasts</a><br /><br />There you'll find:<br /><ul><li>Demo screencasts (JBoss deployment, build automation, using Jobcenter, etc...)</li><li>Automation development screencasts (Using ProjectBuilder, creating CTL modules, defining commands, etc...)</li><li>HowTo screencasts (importing packages, deploying packages, defining services, etc...)</li><li>Presentation on using ctl-exec</li></ul>Additional screencasts will be added as they are produced. If anyone would like to make a screencast and have it included it in the list, send either the file or the link our way.<div class="blogger-post-footer">Also visit the ControlTier Google Group:
http://groups.google.com/group/controltier</div>Damon Edwardshttp://www.blogger.com/profile/08075446611632722802noreply@blogger.com0http://blog.controltier.com/2009/03/new-controltier-screencasts.htmltag:blogger.com,1999:blog-20836489.post-9262288442376348182009-02-17T06:56:00.000-08:002009-04-02T13:08:17.601-07:00ControlTier 3.4 Posted to SourceForge.netI'm pleased to announce that ControlTier 3.4 is now available <br /><br />For more info see the message group post and release notes:<br /><a href="http://groups.google.com/group/controltier/browse_thread/thread/69c91cf9e0a92e4a">http://groups.google.com/group/controltier/browse_thread/thread/69c91cf9e0a92e4a</a><br /><br />To download ControlTier:<br /><a href="http://sourceforge.net/projects/controltier/">http://sourceforge.net/projects/controltier/</a><br /><br />And don't forget to check out the new ControlTier Wiki (also hosted by SourceForge):<br /><a href="http://apps.sourceforge.net/mediawiki/controltier/index.php?title=Main_Page">http://apps.sourceforge.net/mediawiki/controltier/index.php?title=Main_Page</a><div class="blogger-post-footer">Also visit the ControlTier Google Group:
http://groups.google.com/group/controltier</div>Damon Edwardshttp://www.blogger.com/profile/08075446611632722802noreply@blogger.com0http://blog.controltier.com/2009/02/controltier-34-posted-to-sourceforgenet.htmltag:blogger.com,1999:blog-20836489.post-4149320025541639272009-01-26T14:42:00.000-08:002009-01-26T14:46:25.731-08:00New Wiki for ControlTier's Open Source ToolsThings are still a bit under construction, but the new <a href="http://apps.sourceforge.net/mediawiki/controltier/">ControlTier Wiki</a> (also hosted by SourceForge) is now the definitive source for ControlTier documentation.<br /><br />As always, any <a href="http://groups.google.com/group/controltier">feedback or suggestions</a> are highly welcome.<div class="blogger-post-footer">Also visit the ControlTier Google Group:
http://groups.google.com/group/controltier</div>Damon Edwardshttp://www.blogger.com/profile/08075446611632722802noreply@blogger.com0http://blog.controltier.com/2009/01/new-wiki-for-controltiers-open-source.htmltag:blogger.com,1999:blog-20836489.post-63892459254546155012008-12-29T10:40:00.000-08:002009-04-06T01:52:34.299-07:00Abstracted Administration[The latest version of this post can be found on the<a href="http://apps.sourceforge.net/mediawiki/controltier/index.php?title=Understanding_the_abstracted_administration_paradigm"> ControlTier Wiki</a>]<br /><br />The idea that drives the ControlTier project is "abstracted administration". In this paradigm, you think about and develop management processes using an abstracted view, one that is independent of any particular physical node or software deployment. What drives the need for abstracted administration is rising scale and complexity . Abstracted administration is paramount in a world where<br /><ul><li>the host environment is varied in kind and size (e.g., different scales in heterogeneous environments and also the growing use of "elastic" virtual machine infrastructure) </li><li>management processes are becoming more distributed and more easily impacted by application and environmental differences (e.g, multi-step procedures that execute across the network and across different tools).</li></ul>This project supports the idea of an abstracted administration paradigm, one where you manage distributed application services and their management processes through a simplified, more standardized and abstracted view. Within this paradigm, an administrator has the choice to focus on managing operations from a higher level, and let the underlying framework coordinate operations across the actual physical environment. Of course, one can also choose to manage things at a much finer level of granularity, performing management activity on a particular host, which still remains important.<br /><br />Note:<br />* The ControlTier project is not a VM technology. ControlTier is a technology that lets you deploy and control services hosted on operating system instances (virtualized or not).<br /><br /><span style="font-weight: bold;">Abstracted administration framework</span><br /><br />Within this paradigm, the framework<br /><ul><li>Lets you manage many deployments through an abstracted, logical structure or at any distinct point by objectifying your process within the context of the abstracted deployment model</li><li>Wraps around your scripts to produce workflow endpoints that can be combined together to execute distributed multi step processes.</li></ul>Within the administration framework, your operations processes become more uniform and therefore more reusable, with environment specific parameters and settings externalized in a collaboratively maintained model, shared across support teams. Within this paradigm exists a hierarchy of types that let you break down operation processes into several standard layers, each focused on a specific aspect. Aspects exist for package building, staging and deployment, service run state control, mediated execution, and more.<br /><br /><span style="font-weight: bold;">Abstracted Nodes</span><br /><br />For command execution, this project aims to help you abstract the physical Nodes in your environment. Commands ultimately execute on some host, but in large scale environments, it's cumbersome to specify the particular hosts. The ControlTier software provides a couple ways to abstract node infrastructure:<br /><br /><ul><li>Node tags and attributes: The ctl-exec command lets you execute ad hoc commands by addressing target Nodes using tags and attributes rather than lists of hosts. This is a convenient way to manage host groups and <code>ctl-exec</code> supports inclusion and exclusion filters to identify any subset of hosts. <code>ctl-exec</code> also supports parallel execution important when you need to execute actions simultaneously across a large number of hosts.</li><li>Command dispatching': The ctl command lets you define reusable commands targeted to individual service management control actions or target coordinated distributed actions, logically via a Site. The command dispatcher looks up the nodes on which commands should be executed and invokes them remotely when necessary. In this case, one stays focused on managing service action without having think about nodes.</li></ul><br />Abstracting nodes from your procedures is the first step towards abstracted administration. When nodes vary between environments or when they are based on VMs and can be rescaled at any time depending on conditions, your scripts will not have to be changed to redefine node targets.<br /><br /><span style="font-weight: bold;">Abstracting the Service</span><br /><br />One of this project's primary goals is to provide a service management interface that lets you forget about Nodes during operation.<br /><ul><li>Long running application components are called Services in ControlTier. You abstract your services by exposing all the physical environment differences in the Service's object model. Doing this lets you define your service management code in an abstracted way. During execution your procedures are bound to environment specific views.</li><li>ControlTier's Site, provides the management interface that lets you logically control a set of services be they one machine or many. Application components combine together to form a distributed application. Where these components are hosted depends on the environment. For example, in development or QA they may all reside on one node, while in production they may be spread over many.</li></ul>Exposing logical control of the many parts of a service is a further step towards abstracted administration, since at this level of abstraction not only are Nodes abstracted but so are the individual application deployments that comprise the integrated service.<br /><br /><span style="font-weight: bold;">Abstracting the process</span><br /><br />There are several service management life cycle activities common to any application service: build, stage, install, update, stop, start, configure, check, roll back, etc. Of course these activities vary depending on operating system, application platform, or environment. The last aim of the ControlTier project is this: simplify operations by obscuring environment differences that impact procedures.<br /><ul><li>ControlTier includes a standard set of types, each responsible for carrying out each of the life cycle steps. You can also expose your procedures in place of the standard implementation. </li><li>Service management processes are carried out over multiple steps across different machines. Again depending on where the process runs, process execution can occur on different machines. ControlTier workflows allow you to define and execute processes independent of the environment making them more reusable.</li><li>Besides abstracting location, service management processes can also be executed sequentially or in parallel without any code modifications. ControlTier workflows allow you to define a thread count in the object model to control parallel or sequential execution.</li></ul>By exposing life cycle activities as service management workflows reusable across environments, another level of abstracted administration is achieved.<br /><br />What drives the ideas behind abstracted administration are the successive layering of abstractions:<br /><ul><li>Abstract the nodes, for better visibility into the services.</li><li>Abstract the services, to gain better visibility of the management processes.</li><li>Abstract the processes, for standardized reusable life cycle steps and workflows</li></ul>Through the process of abstraction, all the specifics become maintained in an object model and the procedural code consolidates into common libraries. Less code means less maintenance, better re-usability, and further elimination of procedural variation, often the root cause of service management problems.<div class="blogger-post-footer">Also visit the ControlTier Google Group:
http://groups.google.com/group/controltier</div>Alex Honorhttp://www.blogger.com/profile/13700437911627383122noreply@blogger.com0http://blog.controltier.com/2008/12/virtualized-administration.htmltag:blogger.com,1999:blog-20836489.post-51739552895061115442008-12-23T09:58:00.000-08:002008-12-23T10:02:39.807-08:00Focus for 2009Hello All,<br /><br />We are winding down 2008, after a good year's development that culminated in the current 3.2 release. The features of 3.2 both evolved and matured the 3.1 functionality, but also include several new fundamental capabilities. We are excited to see new 3.2-based solutions.<br /><br />Besides working with consultants in the service group, we also work with community members and have acknowledged several areas where focussed effort should be made for the coming year:<br /><br /><span class="Apple-style-span" style="font-weight: bold;">Vastly improve our documentation</span>. The docs are currently in a woeful state. They are spread out in a hard to navigate structure and are written too abstractly and are not helpful to new users. Here's how we are going to improve them:<br /><ul><li>Consolidate all the docs into one medium and one site.<br /></li><li>Use a Wiki instead of Forrest. A Wiki is a much more fluid way to keep docs up to date. Also we can easily add community members to help contribute.<br /></li><li>Make the documentation "How To" oriented. These are short focussed explanations on using ControlTier software for a typical use case<br /></li></ul><br /><span class="Apple-style-span" style="font-weight: bold;">Merge "Elements" and the ControlTier "base" libraries</span> into a single source code module and build artifact. You may not know this, but Elements is a library of ready to use modules interfacing with J2EE and other application infrastructure. It is currently hosted at Moduleforge. To improve out-0f-the box productivity we'll:<br /><ul><li>Consolidate Elements and Base into a single controltier project "seed" and CTL extension<br /></li><li>Write documentation that will assume the Elements library is already installed<br /></li><li>Write tutorials revolving around Elements use cases<br /></li></ul><br /><span class="Apple-style-span" style="font-weight: bold;">Improve release process</span>. I admit it... our release process was very erratic. 2008 releases were all driven by some external project schedule and did not serve the community well. Here's how we'd like to change:<br /><ul><li>Roadmap and milestone based scheduling<br /></li><li>Regular release points<br /></li><li>Publicize releases better including mailing list, news, freshmeat, etc<br /></li><li>Change lists<br /></li><li>Standard use of Duke's Bank demo for QA testing<br /></li></ul><br /><span class="Apple-style-span" style="font-weight: bold;">ControlTier Demo shall work out of the box</span>. ControlTier software is a pretty general purpose process automation system which sounds great until you want to see it actually do something. In 2008, we began using the J2EE tutorial's sample application, "Duke's Bank" in our demos. This demo shows quite a breadth of ControlTier use cases and helps make its functionality and applicability more concrete. It should work out of the box. Here's what we want to do:<br /><ul><li>Simple demo setup that is well documented and quick to set up<br /></li><li>Tutorial documentation revolves around the Duke's Bank use cases to establish a consistent set of examples<br /></li><li>Supporting slide presentation that lets you run your own demos when you want to show other people in your own groups<br /></li></ul><br /><span class="Apple-style-span" style="font-weight: bold;">Increase community involvement and support</span><br /><ul><li>Take better advantage of the Sourceforge features to allow contributions of all kinds. We barely scratch Sourceforge's surface now and there's some useful tools to take advantage of<br /></li><li>The community really is the best authority on how to move the project forward so we want to better facilitate comments from the community discussion areas<br /></li><li>Run a ControlTier IRC. Sometimes a person wants to ask a quick question or just bounce some ideas. <br /></li></ul><br />Of course, development is not frozen for 2009 but we want to shift priorities to make sure the ControlTier project is healthy and the software usable on its own. We are looking forward to driving these improvements and welcome any feedback or helping hands.<div class="blogger-post-footer">Also visit the ControlTier Google Group:
http://groups.google.com/group/controltier</div>Alex Honorhttp://www.blogger.com/profile/13700437911627383122noreply@blogger.com0http://blog.controltier.com/2008/12/subject-focus-for-2009-hello-all-we-are.htmltag:blogger.com,1999:blog-20836489.post-35066179593084023752008-12-16T17:30:00.000-08:002009-01-16T13:38:54.519-08:00Installing ControlTier 3.2 on Windows XP<span style="font-weight: bold;">[Note: These instructions are for installing 3.2 and they point to an archived version of the 3.2 manual. If you are installing a newer version of ControlTier go to the </span><a style="font-weight: bold;" href="http://apps.sourceforge.net/mediawiki/controltier/">ControlTier wiki</a><span style="font-weight: bold;">]</span><br /><br />Here's my cheat sheet for installing the ControlTier framework on Windows XP (soon to be folded into the standard documentation!):<br /><ul><li>Use Firefox with the ControlTier web applications since AJAX compatibility issue preclude using IE</li><li>Follow the <a href="http://open.controltier.org/manuals/3.2/installation/3-2/installer-install.html">3.2 framework installation notes</a> on Open.ControlTier<br /></li><li>Choose a %CTIER_ROOT% directory that doesn't contain spaces since this is know to break certain standard modules (e.g. "C:\ctier")<br /></li><li>So far as dependencies are concerned:</li></ul><ol><li> ControlTier requires Java 1.5. I keep a zipped up version of Sun's JDK that I can unpack into "%CTIER_ROOT%\pkgs" to avoid disturbing the system-wide installation. (There are some issues associated with attempting to install multiple versions of Java on the same system using Sun's Microsoft Installer).<br /></li><li>You can find the Graphviz Windows installer on their <a href="http://www.graphviz.org/Download_windows.php">download page</a> (the latest version when I looked was 2.20.3. I also install Graphviz into "%CTIER_ROOT%\pkgs" since it usually only required by ControlTier. (Note that I've found myself having to manually sort out the Path system environment variable in order to ensure the correct "dot.exe" is in %PATH% once Graphviz has been installed a couple of times).<br /></li></ol><ul><li>Download the <a href="http://sourceforge.net/project/showfiles.php?group_id=151079&amp;package_id=199032&amp;release_id=608312">Zip release</a> of the latest 3.2 release of the ControlTier framework from Sourceforge. This was version 3.2.4 at the time of writing this posting. (When installing from a local Windows desktop or from an RDP session I prefer to use the Jar installer, for all other circumstances I use the Zip installer).</li><li>In preparing these notes I ran through the installation (taking default values) using the Zip installation method successfully, however ...<br /></li><li>... with this release the Jar installer (which attempts to establish Jetty as a Windows service) is broken.</li></ul><ul><li>In order to start the ControlTier server:</li></ul><ol><li>I started a new command shell and ran the "ctier.bat" script that the installer placed in my user's home directory ("C:\Documents and Settings\Anthony Shortland").</li><li>I executed "%JETTY_HOME%\bin\start.bat"</li><li>I picked up the ControlTier server's "Welcome" page at "http://localhost:8080" and from there launched Jobcenter, Workbench, ReportCenter and Jackrabbit ...</li><li>... authenticating as "default/default" as required.</li></ol><ul><li>In order to populate the default Workbench project with a useful set of modules, I downloaded the <a href="http://sourceforge.net/project/showfiles.php?group_id=203118&amp;package_id=243572&amp;release_id=608228">latest (3.2.4) release</a> of the Elements Module Library seed Jar from the Sourceforge "Moduleforge" project ...</li><li>... and loaded it via Workbench's Admin page "import seed" dialog.</li></ul><br />At this point I had a working ControlTier framework installation ready to push ahead and try both some of the <a href="http://open.controltier.org/manuals/3.2/Tutorials/index.html">tutorials </a>on Open.Controltier.<br /><br />Anthony Shortland.<br />anthony@controltier.com<div class="blogger-post-footer">Also visit the ControlTier Google Group:
http://groups.google.com/group/controltier</div>Anthony Shortlandhttp://www.blogger.com/profile/00014424238546214745noreply@blogger.com0http://blog.controltier.com/2008/12/installing-controltier-32-on-windows-xp.htmltag:blogger.com,1999:blog-20836489.post-58539551875450901802008-12-14T14:38:00.000-08:002008-12-14T17:20:33.335-08:00Keeping Workbench trim and fit!Under the covers the Workbench model data is stored in a set of RDF XML files using the <a href="http://jena.sourceforge.net/">Jena Semantic Web Framework</a>.<br /><div style="text-align: justify;"><br />At the lowest level, this means that a set of files exists (by default) under "$CTIER_ROOT/workbench/rdfdata" on your ControlTier server for each project you create in Workbench:</div><code><br /><span style="font-family: courier new;font-size:78%;" >$ cd $CTIER_ROOT/workbench/rdfdata<br />$ ls -lh<br />total 16M<br />-rw-rw-r-- 1 anthony anthony 6.1M Dec 8 10:53 Arch_UModules_UPioneerCycling<br />-rw-rw-r-- 1 anthony anthony 491K Dec 5 17:33 Arch_UObjects_UPioneerCycling<br />-rw-rw-r-- 1 anthony anthony 6.1M Dec 8 10:53 Arch_UTypes_UPioneerCycling<br />-rw-rw-r-- 1 anthony anthony 809 Dec 5 14:34 Arch_UXforms_UPioneerCycling<br />-rw-rw-r-- 1 anthony anthony 490K Dec 8 10:53 Map_UPioneerCycling<br />-rw-rw-r-- 1 anthony anthony 1022K Dec 8 10:53 Modules_UPioneerCycling<br />-rw-rw-r-- 1 anthony anthony 56K Dec 5 17:33 Objects_UPioneerCycling<br />-rw-rw-r-- 1 anthony anthony 1.2M Dec 8 10:53 Types_UPioneerCycling<br />-rw-rw-r-- 1 anthony anthony 1.4K Dec 5 14:35 Workbench<br />-rw-rw-r-- 1 anthony anthony 809 Dec 5 14:34 Xforms_UPioneerCycling</span><span style="font-size:78%;"><br /></span></code><br /><div style="text-align: justify;">A given set of files has the project name appended (in this case "PioneerCycling") and is split into two sets: the primary files and their archives (prefixed with "Arch_").<br /><br />This would all be largely academic if it were not that managing these files turns out to be critical to the responsive performance of anything but the most trivial projects. It turns out that Jena relies on file level locking to manage updates and in the process repeatedly copies the entire file to temporary "checkpoint" copies. Of course, at the OS level, performance copying files of even tens of MB in size is trivial.<br /><br />However; streaming the same data through the Jena library turns out to be a significant performance bottleneck; so much so that it really pays to keep the ControlTier repository trim and fit!<br /><br />The primary way to do this is to navigate to the Workbench administration page, find the "Model Administration (Advanced)" section and run the five file compaction tasks:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_iT3TYd_LDxA/SUWUBPn1WAI/AAAAAAAAABM/1eJ6WAYxo2w/s1600-h/admin.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 296px;" src="http://1.bp.blogspot.com/_iT3TYd_LDxA/SUWUBPn1WAI/AAAAAAAAABM/1eJ6WAYxo2w/s400/admin.jpg" alt="" id="BLOGGER_PHOTO_ID_5279788887256160258" border="0" /></a><br /><br /><div style="text-align: justify;">This process minimizes the size of the primary data files and can be run as frequently as makes a difference.<br /><br />Dealing with the archive files is a little more complex.<br /><br />In normal operation there is no need to track the history of changes to the model so it is reasonable to remove the archive files on a regular basis. The process for achieving this is straightforward:<br /><ol><li>Shutdown Workbench.</li><li>Remove the "Arch_" files from $CTIER_ROOT/workbench/rdfdata associated with the required project(s).</li><li>Restart Workbench.</li></ol>There are a few points to note about this process:<br /><ul><li>It is necessary to do this with Workbench stopped as the file set is cached in the JVM's heap and will simply be re-written otherwise.</li><li>You may wish to skip the "Modules" archive file since removing it invalidates Workbench's notion of the most recent ("head") version of the packaged modules on the WebDAV requiring that you repackage all Deployment and Package modules - quite a lengthy process.</li><li>With a project with a stable type model, it is really only "Objects" archive file that has an impact on performance and so it may only necessary to remove this file.</li><li>As a rule of thumb, only worry about files that are > ~20MB.</li><li>There have been cases where we've set process up in cron (since Jobcenter/Ctl/Antdepo requires Workbench to be available for normal operation).</li></ul>Finally, I should note that this whole issue was much more of a problem under ControlTier 3.1 and that we've done a lot to mitigate its impact on performance under ControlTier 3.2 by eliminating unnecessary model versioning. We have <span style="font-style: italic;">not</span> dealt with the fundamental scaling issues in Jena, so it still pays to be conscious of all this.<br /><br />Anthony Shortland.<br />anthony@controltier.com<br /></div></div><div class="blogger-post-footer">Also visit the ControlTier Google Group:
http://groups.google.com/group/controltier</div>Anthony Shortlandhttp://www.blogger.com/profile/00014424238546214745noreply@blogger.com0http://blog.controltier.com/2008/12/keeping-workbench-trim-and-fit.htmltag:blogger.com,1999:blog-20836489.post-8768461084209822062008-11-11T09:37:00.000-08:002008-11-11T15:28:35.864-08:00Package-centric CTL object data<span style="font-weight:bold;">Background</span><br /><br />As larger and larger users begin to use ControlTier outside of non-production environments, issues rising from scale, network policy and change management begin to enter. One feature found in the typical ControlTier infrastructure is the immediate propagation of configuration model changes to affect running deployments. This is great when you want to reset a port setting, change paths, toggle app settings or whatever, and have these changes take immediate effect. Many development environments would come to a grinding halt if they couldn't have this instantaneous centralized control.<br />Large scale production environments require a different set of assumptions due to infrastructure and policy differences:<br />* Infrastructure: Production environments can span multiple data centers and subnets making a single data repository impractical. This means a centralized Workbench may not be accessible to all clients or scale sufficiently across 1000s of nodes.<br />* Policy: Operations managers often are uncomfortable with the idea of application management data being managed outside of a change control. This means ControlTier metadata should be released using the same policies as application code.<br /><br /><br />This blog post proposes an alternative to managing and releasing ControlTier data using a "build and release" methodology.<br /><br /><span style="font-weight:bold;">Build and Release process</span><br /><br />ControlTier object data can be maintained and released using the same build and release lifecycle as any other application artifact. <br /><br />• Build: Checkout object XML data, load it in Workbench for data validation, then archive the results in a package that can be distributed.<br />• Release: Retrieve object archive from software release repository, distributing it to CTL hosts then extract the archive.<br /><br />This process can be driven from the "ProjectBuilder" module included in the base framework. Below is a diagram showing the basic elements:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ro5FJ3TUBt8/SRnJ1mBl14I/AAAAAAAAABs/n-CBKWdGw9I/s1600-h/highlevel-toolchain.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 165px;" src="http://3.bp.blogspot.com/_ro5FJ3TUBt8/SRnJ1mBl14I/AAAAAAAAABs/n-CBKWdGw9I/s320/highlevel-toolchain.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5267463161763977090" /></a><br /><br /><span style="font-weight:bold;">Tool support</span><br /><br /><span style="font-style:italic;">ProjectBuilder support</span><br /><br />ProjectBuilder can be enhanced to prepare static metadata files in a "build" phase of the process life cycle. Specifically, ProjectBuilder can generate entity.properties data for a specified set of objects. The result of the generation is a set of files archived in a single file.<br /><br />archive-objects: A new command<br /><br />A new command should be added that takes object name and type parameters and generates the entity.properties file for each one. Below is the proposed option set:<br /><br />usage: archive-objects [-file] [-object &lt;&gt;] [-type &lt;&gt;]<br /><br /><span style="font-style:italic;">CTL support</span><br /><br />CTL will include a new administrative command that can create and extract CTL object data files (eg, entity.properties). Below is the proposed option set:<br /><br />usage: ctl-archive -a action -file archive [-p project] [-d dir]<br /><br /><br /><span style="font-weight:bold;">Archive delivery</span><br /><br />The diagram below describes how the process and tools drive the build and release of CTL object data:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ro5FJ3TUBt8/SRnKSUMJQNI/AAAAAAAAAB0/rNvNhId-tck/s1600-h/archive-delivery.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 238px;" src="http://2.bp.blogspot.com/_ro5FJ3TUBt8/SRnKSUMJQNI/AAAAAAAAAB0/rNvNhId-tck/s320/archive-delivery.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5267463655192608978" /></a><br /><br />This process diagram left the distribution tool open to user preference. The next diagram shows how RPM and Yum can distribute the data:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ro5FJ3TUBt8/SRnK0V5ZZNI/AAAAAAAAAB8/x4bYyjvXDw8/s1600-h/yum-archive.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 192px;" src="http://2.bp.blogspot.com/_ro5FJ3TUBt8/SRnK0V5ZZNI/AAAAAAAAAB8/x4bYyjvXDw8/s320/yum-archive.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5267464239766398162" /></a><br /><br />Alternatively, a simple ctl-exec script could push and invoke the extraction process:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ro5FJ3TUBt8/SRnLHEowdJI/AAAAAAAAACE/oO3faEtDZ7c/s1600-h/ctl-delivery.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 222px;" src="http://4.bp.blogspot.com/_ro5FJ3TUBt8/SRnLHEowdJI/AAAAAAAAACE/oO3faEtDZ7c/s320/ctl-delivery.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5267464561550718098" /></a><br /><br /><br /><span style="font-weight:bold;">Next steps: Your feedback</span><br />All the basic bits and pieces to support this new package-centric data management methodology exists in 3.2.3. What's left is formalizing it in a documented configuration. <br />What will be most helpful is feedback on the approach and any other considerations that should be factored in.<br /><br />If it seems like the approach is on the right track, my next follow up should be the documented "howto".<br /><br />Thanks, Alex<div class="blogger-post-footer">Also visit the ControlTier Google Group:
http://groups.google.com/group/controltier</div>Alex Honorhttp://www.blogger.com/profile/13700437911627383122noreply@blogger.com2http://blog.controltier.com/2008/11/package-centric-ctl-object-data.htmltag:blogger.com,1999:blog-20836489.post-53773217381229340532008-09-24T10:45:00.001-07:002008-09-26T19:57:03.707-07:00Package management nirvana<div style="text-align: justify;">Managing the set of package objects and files has been a key challenge for some time now. Obviously, the trick is to keep enough packages around to meet reasonable requirements, but to delete them promptly enough once they are no longer required to avoid consuming too much of the repository's resources.<br /></div><br /><div style="text-align: justify;">The "state of the art" since ControlTier 3.0 has been the Builder repoFind command which can (optionally) delete package objects and files (i.e. "purge") following these rules:<br /></div><ul><li>Identify candidate packages by a type regex</li><li>Apply a buildstamp/version regex</li><li>Avoiding deleting any packages that are in use (i.e. have referrer relationships)</li></ul><div style="text-align: justify;">(Note that repoFind has a companion command, repoPurge, which it calls directly when the "-purge" option is specified).<br /><br />I recently improved this state of affairs by adding the Purge workflow and the packagePurgeRegex to the Builder base type in order to add the following rule:<br /><ul><li>Avoid deleting the most recently built package associated with the builder</li></ul>This is achieved by using the attribute to provide an "inverse" regex of the builder's buildstamp attribute as repoFind's buildstamp option - i.e.:<br /><br /><code>^(?!^${entity.attribute.buildstamp}$).*$</code><br /><br />This works well enough with a simple model that has a single builder creating packages of a distinct type. Trouble arises when - as is the case for standard branch, trunk, release development - there are multiple builders (usually of the same type) creating packages of a given type. Since each builder then has a distinct buildstamp attribute; running the Purge workflow for one builder will erroneously delete the most recent builds of any other builder that also manages the package type. Grrr ... the default inverse regex is too inclusive!<br /><br />The solution for this is to generate a <i>list</i> of buildstamps to exclude based on all instances of the Builder type in question and use that to constrain the action of repoFind.<br /><br />I have just revised the Builder type to achieve this by adding the "generateBuildstampExcludes" command to the Builder base type. If the Builder (or Builder sub-type) in question has a "BuilderPackagePurgeRegex" setting resource assigned, the command updates its value with the list of buildstamps to exclude.<br /><br />The last piece of this particular puzzle, then was to add the new command to the Builder's standard Purge workflow, thus ensuring that "entity.attribute.packagePurgeRegex" is set to the appropriate value prior to the invocation of repoFind.<br /><br />The Purge command's new usage is:<br /><br /><div style="text-align: left;"><code>Purge [-buildertype &lt;${entity.classname}&gt;] [-packagetype &lt;${entity.attribute.packageType}&gt;]</code><br /></div><br />... allowing packages of the selected type (defaulting to the assigned package type of the builder) to be purged excluding buildstamps associated will all instances of the specified builder type (defaulting to the type of the invoking builder).<br /><br />Typical use cases would be to invoke Purge from an operational builder, or to use a "global" ProjectBuilder (co-deployed with the Workbench package repository) to manage purges for all builder and package types.<br /><br />I've committed these enhancements to the ControlTier 3.1 support branch (since I implemented them for a particular client); however, I'll get them merged into the 3.2 development branch as soon as possible.<br /><br />Anthony Shortland,<br />ControlTier Professional Services.<br /></div><div class="blogger-post-footer">Also visit the ControlTier Google Group:
http://groups.google.com/group/controltier</div>Anthony Shortlandhttp://www.blogger.com/profile/00014424238546214745noreply@blogger.com1http://blog.controltier.com/2008/09/package-management-nirvana.htmltag:blogger.com,1999:blog-20836489.post-2308680168875143372008-06-30T07:37:00.000-07:002009-01-16T13:52:54.069-08:00Build and deployment syzygy!<div style="text-align: justify;">The combination of <a href="http://subversion.tigris.org/">Subversion</a>, <a href="http://cruisecontrol.sourceforge.net/">CruiseControl</a>, <a href="http://ant.apache.org/">Ant</a> &amp; <a href="http://maven.apache.org/">Maven</a> with <a href="http://open.controltier.com/">ControlTier</a> has proven to be a <a href="http://en.wikipedia.org/wiki/Planetary_alignment">powerful unification</a> in the build &amp; deployment universe!<br /></div><br /><div style="text-align: justify;">Subversion's provision for committing sets of files labeled with a <a href="http://svnbook.red-bean.com/en/1.4/svn.basic.in-action.html#svn.basic.in-action.revs">unique revision number</a> (per repository) provides build numbering as part of a broader release version scheme.<br /></div><br /><div style="text-align: justify;">CruiseControl's ability to format and present build output based on <a href="http://cruisecontrol.sourceforge.net/main/configxml.html#schedule">custom (Ant and Maven) builders</a> provides a highly visible means of managing builds in the project context.<br /></div><br /><div style="text-align: justify;">Ant &amp; Maven deliver comprehensive build tooling providing the means to create packages from a given source base that can be used both for development and release.<br /></div><br /><div style="text-align: justify;">To return to the astronomical metaphor, ControlTier is the fifth planet - the "Jupiter" of build and release tools if you like - in the syzygy that really makes this alignment of tools a powerful combination!<br /></div><br /><div style="text-align: justify;">When ControlTier's "<a href="http://moduleforge.controltier.com/libraries/elements/2.0">Elements 2.0</a>" Java Server Module Library is used with version 3.1 of our framework, or "<a href="http://moduleforge.controltier.com/libraries/elements/3.2">Elements 3.2</a>" is combined with version 3.2 of the framework (due for general availability by the end of July) to automate the build and release cycle, the full power of the integrated tool-set is revealed:<br /></div><ol><li style="text-align: justify;">The Elements "AntBuilder" and "MavenBuilder" modules use Subversion's "Last Changed Revision" numbers as "build" numbers that are combined with optional "major", "minor" and "release" version attributes to support automatic generation of "n.n.n.n" package "buildstamps". <span style="font-style: italic;">Automatic generation of package version numbers that meet site convention is critical to continuous integration based automated builds</span>.</li><li style="text-align: justify;">The modules include a command to generate a CruiseControl project definition for inclusion in "config.xml". <span style="font-style: italic;">Management of CruiseControl's configuration and operation is therefore completely automated by ControlTier</span>.<br /></li><li style="text-align: justify;">The modules also include "shim" scripts that serve as adapters to allow the standard CruiseControl "maven2" and "ant" builders to indirectly invoke Antdepo/Ctl which, in turn, executes the module's (build) command (note that Antdepo/Ctl can also be directly called using CruiseControl's "exec" builder). <span style="font-style: italic;">This approach preserves CruiseControl's ability to format build output while allowing ControlTier to manage the release numbering scheme and guarantee predictable builds</span>.</li><li style="text-align: justify;">Since ControlTier's standard Build workflow (checkout, build, import) is "wedged" between CruiseControl and your Ant/Maven based build, we can both manage keeping the working files up to date ahead of each build as well as automatically finding packages produced by the build and importing them into our repository. <span style="font-style: italic;">The standard build workflow provides a solid bridge from build to deployment</span>.<br /></li><li style="text-align: justify;">It is also possible to use ControlTier's standard Update workflow (build, upgrade, deploy) to include automatic deployment to a "smoketest" environment for testing with tools such as <a href="http://selenium.openqa.org/">Selenium</a>. <span style="font-style: italic;">ControlTier facilitates automation of post-build integration testing as part of the continuous integration process</span>.<br /></li></ol><div style="text-align: justify;">Consider the power of combining these build tools with the Elements library support for deploying to a growing set of application technologies such as ActiveMQ, Hsqldb, JavaServiceWrapper, Tomcat, Mysql, Apache HTTP, Mule, WindowsService, JBoss, and OpenLDAP. All supported on Linux/Unix (Solaris) and Windows.<br /><br />On the commercial side of our business, deploying "out-of-the-box" solutions based on the Elements library has become the standard approach for customers using any of these technologies.<br /><br />Within a couple of weeks we can establish a new ControlTier based build and deployment infrastructure and migrate existing applications to it giving customers the benefit of Jobcenter for self-service deployment and application management, Reportcenter for visibility into build and deployment activity and the Workbench configuration and process automation modeling tool.<br /></div><br />Anthony Shortland<br />anthony@controltier.com<br /><div><br /></div><div><br /></div><div class="blogger-post-footer">Also visit the ControlTier Google Group:
http://groups.google.com/group/controltier</div>Anthony Shortlandhttp://www.blogger.com/profile/00014424238546214745noreply@blogger.com0http://blog.controltier.com/2008/06/build-and-deployment-syzygy.htmltag:blogger.com,1999:blog-20836489.post-3542382613656325532008-06-16T11:51:00.000-07:002008-12-10T02:03:04.754-08:00ControlTier on the roadStarting with <a href="http://barcamp.org/BarCampESM">BarCampESM</a> back in January, we've been hitting the road showing off our tools and engaging in conversations about IT operations and application deployment. Our travels have included presenting our new CTL framework to a variety of <a href="http://ctl.controltier.com/presentations/index.html">systems management user groups</a> as well as exhibitor gigs at <a href="http://www.saascon.com/">SaaSCon</a> and <a href="http://java.sun.com/javaone/sf/index.jsp">JavaOne</a>.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_B-19AvbslxM/SFbBFkUDOzI/AAAAAAAAAEk/7h2pBuRIqnc/s1600-h/4pic.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_B-19AvbslxM/SFbBFkUDOzI/AAAAAAAAAEk/7h2pBuRIqnc/s400/4pic.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5212565920119208754" /></a><br /><br />Next up... <a href="http://en.oreilly.com/velocity2008/public/content/home">O'Reilly's Velocity 08</a> (June 23 -24). Velocity is a new conference dedicated to operations and performance for web-based businesses. The speaker lineup and the early attendee list bodes well for plenty of interesting and lively conversations. ControlTier will have a booth in the exhibit hall so if you attend Velocity stop by for a demo of our latest tools or to swap war stories with our hard working engineers. Not registered for Velocity? Use the registration code "vel08js" for 20% off.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_B-19AvbslxM/SFbCjZ8IiYI/AAAAAAAAAE0/wGw1FukmqJg/s1600-h/l10407279362_9795.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_B-19AvbslxM/SFbCjZ8IiYI/AAAAAAAAAE0/wGw1FukmqJg/s200/l10407279362_9795.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5212567532242241922" /></a><br /><br />Whether it be at conferences, user groups, or other forums... we love meeting other folks in our field. If you have any suggestions, leave a comment or send us an email at <a href="mailto:automation@controltier.com">automation@controltier.com</a>.<div class="blogger-post-footer">Also visit the ControlTier Google Group:
http://groups.google.com/group/controltier</div>Damon Edwardshttp://www.blogger.com/profile/08075446611632722802noreply@blogger.com5http://blog.controltier.com/2008/06/controltier-on-road.htmltag:blogger.com,1999:blog-20836489.post-39245567373596155372008-05-09T09:20:00.001-07:002008-05-09T09:57:57.300-07:00Wrangling the package repo!<div style="text-align: justify;">Once you're using a builder from day-to-day frequently adding new packages to the ControlTier (WebDAV) repository, it's alarming how quickly their numbers and the amount of disk space they consume can rise!<br /></div><br /><div style="text-align: justify;">A couple of new Builder base type commands were introduced with ControlTier 3.1 to facilitate managing the package repository: "repoFind" &amp; "repoPurge".<br /></div><br /><div style="text-align: justify;">The "repoFind" command's "-purge" option comes to the rescue by providing the antidote to "repoImport":<br /></div><pre><span style="font-family:courier new;">repoFind [Builder] [-buildstamp <.*>] [-packagetype <>] [-session </span><find.session><span style="font-family:courier new;">] [-version <.*>] [-purge]</span><br /><span style="font-family:courier new;">Find package objects in the repository.</span><br /></find.session></pre><div style="text-align: justify;">Essentially, the command queries the object model matching package objects by "buildstamp" and "packagetype" regex patterns to create a list of candidate packages, the (optionally) calling the "repoPurge" command which invokes each package's "purge" command:<br /></div><pre><span style="font-family:courier new;">purge -url <></span><br /><span style="font-family:courier new;">removes the file from the repository</span><br /></pre><div style="text-align: justify;">... which in turn deletes the package file using the Ant "davdelete" task. Finally, the "repoPurge" command executes a batched deletion of all the selected package objects. Note that only package that do not have referrer relationships are deleted (i.e. packages that are not in use).<br /></div><br />Here are a couple of examples:<br /><ul><li>Purge all packages regardless of their type associated with a given buildstamp:<br /><pre><span style="font-family:courier new;">$ ad -p rhbc -t AtgDasModuleBuilder -o babyandchild -c repoFind --<br /> -buildstamp 8734 -purge</span><br /></pre></li></ul><ul><li>Purge all packages of a given type regardless of their buildstamp (the "packagetype" option value can be a regex too):<br /><pre style="font-family:courier new;"><span style="font-size:85%;"><span style="font-family:courier new;">$ ad -p rhbc -t AtgDasModuleBuilder -o babyandchild -c repoFind -- -buildstamp '.*'<br /> -packagetype AtgModuleJar -purge</span></span><br /></pre></li></ul><div style="text-align: justify;">By the way, having just run through using "repoFind" with one of our client's projects, I can report a subtle bug that I've just fixed in the "repoPurge" command. It turns out that the command assumes that the required Package module is installed in order to be able to run the "purge" commands. This is always the case if you invoke the "repoPurge" command from a node which has previously been used for a "repoImport" (e.g. your build system), but if you choose another system (e.g. the ControlTier server), the module is not available and the command fails.<br /></div><br />Here's the fix using the same logic used in "repoImport":<br /><pre><span style="font-size:85%;"><span style="font-family:courier new;">$ svn diff repoPurge.xml</span><br /><span style="font-family:courier new;">Index: repoPurge.xml</span><br /><span style="font-family:courier new;">===================================================================</span><br /><span style="font-family:courier new;">--- repoPurge.xml (revision 8087)</span><br /><span style="font-family:courier new;">+++ repoPurge.xml (working copy)</span><br /><span style="font-family:courier new;">@@ -88,6 +88,13 @@</span><br /><span style="font-family:courier new;"> &lt;session-get session="${session.command}" resultproperty="pkg.mapref-uri" key="purge.package.@{pkgType}.@{pkgName}.mapref-uri"/&gt;</span><br /><span style="font-family:courier new;"> &lt;session-get session="${session.command}" resultproperty="pkg.repo-url" key="purge.package.@{pkgType}.@{pkgName}.repo-url"/&gt;</span><br /><span style="font-family:courier new;"> &lt;propertyregex property="filetype" override="true" input="@{pkgName}" regexp="[^\.]*.([^\.]*)$" select="\1"/&gt;</span><br /><span style="font-family:courier new;">+ &lt;controller&gt;</span><br /><span style="font-family:courier new;">+ &lt;execute&gt;</span><br /><span style="font-family:courier new;">+ &lt;context/&gt;</span><br /><span style="font-family:courier new;">+ &lt;command name="Install-Module" module="Managed-Entity" depot="${context.depot}"/&gt;</span><br /><span style="font-family:courier new;">+ &lt;arg line="-depot ${context.depot} -module @{pkgType} -version head"/&gt;</span><br /><span style="font-family:courier new;">+ &lt;/execute&gt;</span><br /><span style="font-family:courier new;">+ &lt;/controller&gt;</span><br /><span style="font-family:courier new;"> &lt;controller&gt;</span><br /><span style="font-family:courier new;"> &lt;execute&gt;</span><br /><span style="font-family:courier new;"> &lt;context/&gt;</span></span><br /></pre><div style="text-align: justify;"><session-get session="${session.command}" resultproperty="pkg.mapref-uri" key="purge.package.@{pkgType}.@{pkgName}.mapref-uri"><session-get session="${session.command}" resultproperty="pkg.repo-url" key="purge.package.@{pkgType}.@{pkgName}.repo-url"><propertyregex property="filetype" override="true" input="@{pkgName}" regexp="[^\.]*.([^\.]*)$" select="\1"><controller><execute><context><controller><execute><context>The fix will make the next 3.1 point release and will be merged into the 3.2 development brach and posted to Sourceforge soon.</context></execute></controller></context></execute></controller></propertyregex></session-get></session-get><br /><session-get session="${session.command}" resultproperty="pkg.mapref-uri" key="purge.package.@{pkgType}.@{pkgName}.mapref-uri"><session-get session="${session.command}" resultproperty="pkg.repo-url" key="purge.package.@{pkgType}.@{pkgName}.repo-url"><propertyregex property="filetype" override="true" input="@{pkgName}" regexp="[^\.]*.([^\.]*)$" select="\1"><controller><execute><context><controller><execute><context></context></execute></controller></context></execute></controller></propertyregex></session-get></session-get></div><session-get session="${session.command}" resultproperty="pkg.mapref-uri" key="purge.package.@{pkgType}.@{pkgName}.mapref-uri"><session-get session="${session.command}" resultproperty="pkg.repo-url" key="purge.package.@{pkgType}.@{pkgName}.repo-url"><propertyregex property="filetype" override="true" input="@{pkgName}" regexp="[^\.]*.([^\.]*)$" select="\1"><controller><execute><context><controller><execute><context><br />Thanks,<br /><br />Anthony.</context></execute></controller></context></execute></controller></propertyregex></session-get></session-get><div class="blogger-post-footer">Also visit the ControlTier Google Group:
http://groups.google.com/group/controltier</div>Anthony Shortlandhttp://www.blogger.com/profile/00014424238546214745noreply@blogger.com0http://blog.controltier.com/2008/05/wrangling-package-repo.html