<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: knife, or, my tool is actually a library</title>
	<atom:link href="http://blog.loftninjas.org/2009/12/24/knife-or-my-tool-is-actually-a-library/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.loftninjas.org/2009/12/24/knife-or-my-tool-is-actually-a-library/</link>
	<description></description>
	<lastBuildDate>Sat, 21 Jan 2012 06:46:54 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: The Chef Way &#171; Kallistec</title>
		<link>http://blog.loftninjas.org/2009/12/24/knife-or-my-tool-is-actually-a-library/comment-page-1/#comment-2809</link>
		<dc:creator>The Chef Way &#171; Kallistec</dc:creator>
		<pubDate>Sat, 23 Jan 2010 17:37:30 +0000</pubDate>
		<guid isPermaLink="false">http://blog.loftninjas.org/?p=447#comment-2809</guid>
		<description>[...] leads directly to the great advantage Chef gains by using a pure ruby DSL: as Bryan McLellan wrote recently, Chef embraces a dual nature of being both a tool and a mere library, and fills the continuum in [...]</description>
		<content:encoded><![CDATA[<p>[...] leads directly to the great advantage Chef gains by using a pure ruby DSL: as Bryan McLellan wrote recently, Chef embraces a dual nature of being both a tool and a mere library, and fills the continuum in [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Luke Kanies</title>
		<link>http://blog.loftninjas.org/2009/12/24/knife-or-my-tool-is-actually-a-library/comment-page-1/#comment-2713</link>
		<dc:creator>Luke Kanies</dc:creator>
		<pubDate>Mon, 04 Jan 2010 23:29:31 +0000</pubDate>
		<guid isPermaLink="false">http://blog.loftninjas.org/?p=447#comment-2713</guid>
		<description>I definitely agree that the external node interface is limited, but that was essentially its goal - be a limited means of passing specific data around.

The internal work in 0.25 to add a framework for passing objects around, including serialized objects over the wire, generalizes that concept to the point where it&#039;ll be easy to add other interfaces for other resource types, and, in fact, we&#039;ve already got plenty of them (e.g., certs and catalogs are exposed via a REST api).

The Dashboard uses that same API, as does the client.  Most of the executables don&#039;t use a network API but rather the internal Ruby API, but the network is certainly there and able to be manipulated.  Even better, because the Ruby and Network API go through the same framework, you&#039;re guaranteed that anything that can be done in Ruby can also be done over the network.

I don&#039;t think the structured, resource-like data is any more limited than raw data - if anything, because it&#039;s got built-in semantics you&#039;ve got *more* power, not less.  It&#039;s true that I don&#039;t ever want to given an SQL-like interface that just lets anyone do anything, but I don&#039;t think anyone&#039;s proposing that here.

In 0.25, Puppet shipped with a REST api for essentially everything that matters to it -- catalogs, files, certificates, and more -- and we use it internally everywhere.  We didn&#039;t finish a couple of small things, but this API is certainly at the heart of everything we do here.

And, of course, before we had a REST API we had an XMLRPC API, which is no less an api for all that it used less cool tech.  But then, that&#039;s one of the downsides of having a project that&#039;s 4.5 years old - we used tech that was best of breed in 2005, rather than 2008.  If you want to write a tool that talks to Puppet, you can.  If you wanted to write a tool that talked to Puppet in 2005, you could have.

Chef was developed so recently that it was able to take advantage of a huge renaissance in web services; we can&#039;t all be so lucky.

So there&#039;s no library/tool split here, there&#039;s just a philosophical difference about how libraries and services should work.  Knife is a great example someone scratching their own itch with Chef, but then, iClassify and Foreman and all of the report processors out there are similar examples with Puppet.

Either way it&#039;s clear neither of us has had our last word on this - the future is clearly APIs and integration all around, and it&#039;ll be interesting to see how each ecosystem develops over time.</description>
		<content:encoded><![CDATA[<p>I definitely agree that the external node interface is limited, but that was essentially its goal &#8211; be a limited means of passing specific data around.</p>
<p>The internal work in 0.25 to add a framework for passing objects around, including serialized objects over the wire, generalizes that concept to the point where it&#8217;ll be easy to add other interfaces for other resource types, and, in fact, we&#8217;ve already got plenty of them (e.g., certs and catalogs are exposed via a REST api).</p>
<p>The Dashboard uses that same API, as does the client.  Most of the executables don&#8217;t use a network API but rather the internal Ruby API, but the network is certainly there and able to be manipulated.  Even better, because the Ruby and Network API go through the same framework, you&#8217;re guaranteed that anything that can be done in Ruby can also be done over the network.</p>
<p>I don&#8217;t think the structured, resource-like data is any more limited than raw data &#8211; if anything, because it&#8217;s got built-in semantics you&#8217;ve got *more* power, not less.  It&#8217;s true that I don&#8217;t ever want to given an SQL-like interface that just lets anyone do anything, but I don&#8217;t think anyone&#8217;s proposing that here.</p>
<p>In 0.25, Puppet shipped with a REST api for essentially everything that matters to it &#8212; catalogs, files, certificates, and more &#8212; and we use it internally everywhere.  We didn&#8217;t finish a couple of small things, but this API is certainly at the heart of everything we do here.</p>
<p>And, of course, before we had a REST API we had an XMLRPC API, which is no less an api for all that it used less cool tech.  But then, that&#8217;s one of the downsides of having a project that&#8217;s 4.5 years old &#8211; we used tech that was best of breed in 2005, rather than 2008.  If you want to write a tool that talks to Puppet, you can.  If you wanted to write a tool that talked to Puppet in 2005, you could have.</p>
<p>Chef was developed so recently that it was able to take advantage of a huge renaissance in web services; we can&#8217;t all be so lucky.</p>
<p>So there&#8217;s no library/tool split here, there&#8217;s just a philosophical difference about how libraries and services should work.  Knife is a great example someone scratching their own itch with Chef, but then, iClassify and Foreman and all of the report processors out there are similar examples with Puppet.</p>
<p>Either way it&#8217;s clear neither of us has had our last word on this &#8211; the future is clearly APIs and integration all around, and it&#8217;ll be interesting to see how each ecosystem develops over time.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: btm</title>
		<link>http://blog.loftninjas.org/2009/12/24/knife-or-my-tool-is-actually-a-library/comment-page-1/#comment-2712</link>
		<dc:creator>btm</dc:creator>
		<pubDate>Mon, 04 Jan 2010 21:08:52 +0000</pubDate>
		<guid isPermaLink="false">http://blog.loftninjas.org/?p=447#comment-2712</guid>
		<description>As Adam chimed in with, from a chicken or the egg point of view, knife is adding the ability to change information you could already access via the Chef WebUI in earlier versions. In Chef 0.8, they both speak to the chef-server entirely via a REST API, which is of course indifferent to how the data is being displayed.

The argument for passing raw data instead of resources is that you limit what one can do with the data to what you expect and allow them to, in the latter. When I spoke of the API limitations I was specifically speaking of the external node interface, and how it made it difficult to access data about nodes in modules, compile that data and use it to build content in configurations.

I think your reasoning makes for an interface that is easier for people with less development experience to pick up and manipulate on their own, but eventually that design has always eventually formed roadblocks that frustrated me personally.

Ultimately this post was the tools that users have developed, extending by scratching their own itch. James Turnbull &lt;a href=&quot;http://twitter.com/kartar/status/7014034536&quot;&gt;commented on twitter&lt;/a&gt; as well that this is an early release of the dashboard and there is much more to come, even going so far as to &lt;a href=&quot;http://projects.reductivelabs.com/issues/2986&quot;&gt;file an issue&lt;/a&gt; for the feature I always wanted.

Perhaps this will always be a defining difference between configuration management tools and libraries. Which is great of course, as the diversity will bring more users into the fold realizing the absurdity of configuration by ssh-for-loop. With more users I believe we will benefit with more innovation from the additional mindshare.</description>
		<content:encoded><![CDATA[<p>As Adam chimed in with, from a chicken or the egg point of view, knife is adding the ability to change information you could already access via the Chef WebUI in earlier versions. In Chef 0.8, they both speak to the chef-server entirely via a REST API, which is of course indifferent to how the data is being displayed.</p>
<p>The argument for passing raw data instead of resources is that you limit what one can do with the data to what you expect and allow them to, in the latter. When I spoke of the API limitations I was specifically speaking of the external node interface, and how it made it difficult to access data about nodes in modules, compile that data and use it to build content in configurations.</p>
<p>I think your reasoning makes for an interface that is easier for people with less development experience to pick up and manipulate on their own, but eventually that design has always eventually formed roadblocks that frustrated me personally.</p>
<p>Ultimately this post was the tools that users have developed, extending by scratching their own itch. James Turnbull <a href="http://twitter.com/kartar/status/7014034536">commented on twitter</a> as well that this is an early release of the dashboard and there is much more to come, even going so far as to <a href="http://projects.reductivelabs.com/issues/2986">file an issue</a> for the feature I always wanted.</p>
<p>Perhaps this will always be a defining difference between configuration management tools and libraries. Which is great of course, as the diversity will bring more users into the fold realizing the absurdity of configuration by ssh-for-loop. With more users I believe we will benefit with more innovation from the additional mindshare.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Adam Jacob</title>
		<link>http://blog.loftninjas.org/2009/12/24/knife-or-my-tool-is-actually-a-library/comment-page-1/#comment-2711</link>
		<dc:creator>Adam Jacob</dc:creator>
		<pubDate>Mon, 04 Jan 2010 20:51:09 +0000</pubDate>
		<guid isPermaLink="false">http://blog.loftninjas.org/?p=447#comment-2711</guid>
		<description>Knife is a consumer of the Chef REST API, just like the Chef Web UI is - and the API came first. :)</description>
		<content:encoded><![CDATA[<p>Knife is a consumer of the Chef REST API, just like the Chef Web UI is &#8211; and the API came first. <img src='http://blog.loftninjas.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Luke Kanies</title>
		<link>http://blog.loftninjas.org/2009/12/24/knife-or-my-tool-is-actually-a-library/comment-page-1/#comment-2708</link>
		<dc:creator>Luke Kanies</dc:creator>
		<pubDate>Mon, 04 Jan 2010 18:28:12 +0000</pubDate>
		<guid isPermaLink="false">http://blog.loftninjas.org/?p=447#comment-2708</guid>
		<description>Hmm, I should have looked more closely at Knife before posting - it&#039;s basically a CLI to the GUI stuff, whereas Puppet starts with the CLI and is slowly adding the GUI.  You can bet that before too long you&#039;ll be able to do just about anything in our Dashboard that you can do in the GUI, and it&#039;s got little if anything to do with, say, iClassify.  Our 0.25 release laid the groundwork for this integration, and the next few releases of the Dashboard will begin to see the benefits.</description>
		<content:encoded><![CDATA[<p>Hmm, I should have looked more closely at Knife before posting &#8211; it&#8217;s basically a CLI to the GUI stuff, whereas Puppet starts with the CLI and is slowly adding the GUI.  You can bet that before too long you&#8217;ll be able to do just about anything in our Dashboard that you can do in the GUI, and it&#8217;s got little if anything to do with, say, iClassify.  Our 0.25 release laid the groundwork for this integration, and the next few releases of the Dashboard will begin to see the benefits.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Luke Kanies</title>
		<link>http://blog.loftninjas.org/2009/12/24/knife-or-my-tool-is-actually-a-library/comment-page-1/#comment-2707</link>
		<dc:creator>Luke Kanies</dc:creator>
		<pubDate>Mon, 04 Jan 2010 18:26:14 +0000</pubDate>
		<guid isPermaLink="false">http://blog.loftninjas.org/?p=447#comment-2707</guid>
		<description>Hi,

Thanks for the interesting pointer on this development in the Chef world.

It&#039;s worth noting, to start, that our dashboard is following a &quot;minimum viable product&quot; model - we&#039;re releasing as soon as we have something that&#039;s functional enough to be useful, so don&#039;t assume that missing functionality will always be missing.

There are multiple reasons why Puppet didn&#039;t adopt the iClassify way of thinking about the world, but none of them relate to missing APIs.  Puppet has tons of extension points, and we&#039;re adding more all the time.  We don&#039;t do the best job of documenting and advertising them, but it&#039;s not like they&#039;re hidden, either - I meet people every month who are doing interesting things with them.

That being said, we are adding new ways of exchanging rich data.  I never liked the way iClassify builds APIs on raw data, expecting the consumers of that data to add all of the necessary bits.  I much prefer exchanging richer data - transfer resources instead of simple hashes, for instance.

Anyway, don&#039;t worry; we&#039;ll start copying the Opscode guys, too - information exchange won&#039;t all be from us to them. :)</description>
		<content:encoded><![CDATA[<p>Hi,</p>
<p>Thanks for the interesting pointer on this development in the Chef world.</p>
<p>It&#8217;s worth noting, to start, that our dashboard is following a &#8220;minimum viable product&#8221; model &#8211; we&#8217;re releasing as soon as we have something that&#8217;s functional enough to be useful, so don&#8217;t assume that missing functionality will always be missing.</p>
<p>There are multiple reasons why Puppet didn&#8217;t adopt the iClassify way of thinking about the world, but none of them relate to missing APIs.  Puppet has tons of extension points, and we&#8217;re adding more all the time.  We don&#8217;t do the best job of documenting and advertising them, but it&#8217;s not like they&#8217;re hidden, either &#8211; I meet people every month who are doing interesting things with them.</p>
<p>That being said, we are adding new ways of exchanging rich data.  I never liked the way iClassify builds APIs on raw data, expecting the consumers of that data to add all of the necessary bits.  I much prefer exchanging richer data &#8211; transfer resources instead of simple hashes, for instance.</p>
<p>Anyway, don&#8217;t worry; we&#8217;ll start copying the Opscode guys, too &#8211; information exchange won&#8217;t all be from us to them. <img src='http://blog.loftninjas.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
</channel>
</rss>

