<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Passing Curiosity: Posts tagged knife</title>
    <link href="https://passingcuriosity.com/tags/knife/knife.xml" rel="self" />
    <link href="https://passingcuriosity.com" />
    <id>https://passingcuriosity.com/tags/knife/knife.xml</id>
    <author>
        <name>Thomas Sutton</name>
        
        <email>me@thomas-sutton.id.au</email>
        
    </author>
    <updated>2013-08-15T00:00:00Z</updated>
    <entry>
    <title>Sydney Devops Meetup, August 2013</title>
    <link href="https://passingcuriosity.com/2013/sydney-devops-meetup-august/" />
    <id>https://passingcuriosity.com/2013/sydney-devops-meetup-august/</id>
    <published>2013-08-15T00:00:00Z</published>
    <updated>2013-08-15T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Here are some nodes from the <a href="http://www.meetup.com/devops-sydney/events/117291642/">August 2013 Sydney Devops Meetup</a>.</p>
<h2 id="artur-ejsmont-on-release-management-at-yahoo7">Artur Ejsmont on release management at Yahoo!7</h2>
<p>Artur is a Senior Software Engineer at Yahoo!7. I think he said he’s on the
platforms team? The environment within the team is rather different environment
than many others – much more in common with release engineering and system
administration than in other roles.</p>
<p>Everything is released and deployed as packages using a suite of tools and
formats developed with the Yahoo! empire. Packages include (almost) everything:
PHP source code, crontabs, configurations, etc.</p>
<p>Release descriptions (CMR) include:</p>
<ul>
<li>package versions and clusters</li>
<li>conf and cron changes</li>
<li>database and process management</li>
</ul>
<h3 id="joined-team">Joined Team</h3>
<p>When he joined the team, the 5 members were responsible for 180 packages
(committing to 1-2 dozen packages in an average sprint).</p>
<p>There was a lack of visibility in not only the state of various packages
(deployed versions, build and test status, etc.) but even which packages there
<em>are</em> (commited to SVN but never made it into the package repository).</p>
<p>Problem with packages lingering without stable releases. Wanted to be able to
recreate environments, etc. but dependencies not being promoted to stable can
make it a pain in the arse to track down specific versions.</p>
<ul>
<li>Uncertainty what has to be released</li>
</ul>
<p>A great deal of manual work to assemble change management requests for
releases. Two days of work at the end of each sprint, trawling through
documentation, trackers, SVN, etc.</p>
<p>Ten different application clusters with different versions of different
packages on each.</p>
<ul>
<li>Manual testing of int stage prod</li>
</ul>
<p>Perception was that the team was doing way too much manual work.</p>
<p>Constantly searching for information in disparate sources; repos, code,
trackers, wikis, etc.</p>
<p>Ecosystem is too complex.</p>
<p>Too many moving parts &amp; chances to screw things up.</p>
<h3 id="vision">Vision</h3>
<p>Provide visibility</p>
<blockquote>
<p>I don’t want to guess, nor search.</p>
</blockquote>
<p>Automate</p>
<blockquote>
<p>Do it for me or telll me what to do next.</p>
</blockquote>
<p>Data aggregation</p>
<p>Single point of entry for Bugzilla, svn, ci, dist, CMR tool, etc.</p>
<p>Provide metrics</p>
<h3 id="development">Development</h3>
<p>Built it over Christmas period.</p>
<ol type="1">
<li><p>Automated job to prcoess entire SVN repo, discover packages and generate 190
static HTML reports.</p></li>
<li><p>Second release using MySQL.</p></li>
</ol>
<h3 id="package-list">Package List</h3>
<p>List of 190 packages. Sort by: CI state (broken at top), release state (commits
but no version released), package created (but not deployed everywhere yet), up
to date.</p>
<p>Provides information including:</p>
<ul>
<li><p>Version numbers (svn trunk, newest in package repo, oldest in production)</p></li>
<li><p>“Score” (higher is worse) so it can fudge things by priority.</p></li>
<li><p>Links to various sources of information (related CMRs, SVN, CI, repo)</p></li>
</ul>
<p>Rollup</p>
<ul>
<li>Healthy</li>
<li>Pending</li>
<li>Unhealthy</li>
</ul>
<h3 id="cmr-builder">CMR Builder</h3>
<p>Interrogates various data sources:</p>
<ul>
<li>SVN</li>
<li>Igor (server role manager)</li>
<li>Repository (dependencies)</li>
<li>Deployments</li>
</ul>
<p>Assemble changelogs, etc.</p>
<p>Some packages are based on old CVS repositories, need crazy date-based logic to
build a diff.</p>
<h3 id="dependencies">Dependencies</h3>
<p>Dependencies between packages are really annoying; lots of dependencies between
packages. 10 major applications, 190 packages. Only a few packages are
relatively independent.</p>
<p>Provides overview of dependencies:</p>
<ul>
<li>List of packages required by this package</li>
<li>List of packages which require this package</li>
</ul>
<h3 id="metrics">Metrics</h3>
<p>Metrics to tell:</p>
<ul>
<li><p>How are things? Good or bad?</p></li>
<li><p>How are things changing? Getting better?</p></li>
</ul>
<p>Lag-Score includes a range of factors (tests failing, production versions,
etc.) which tries to combine all the factors. Plotted, making very little
progress on this over 6 months.</p>
<h3 id="questions">Questions</h3>
<p>Why a custom packaging tool?</p>
<blockquote>
<p>It was invented at Yahoo! before there were existing tools like dpkg,
rpm, etc. Lots of tools to manage, e.g., 40,000 servers involved in
Yahoo! Mail.</p>
<p>Given the tools and scale, it probably won’t be going away.</p>
</blockquote>
<p>Release notes: if it’s bullshit, why not kill it completely?</p>
<blockquote>
<p>It’s an embedded part of the environment and culture of this team and
other teams. Also: comes from global.</p>
<p>CMRs provide communication channel between teams and sysadmins. It’s a
heavy process, and are trying to make it more lightweight, but safety
is important.</p>
</blockquote>
<p>How fast do you go?</p>
<blockquote>
<p>About two release windows a week.</p>
<p>Sprints are about 3 weeks, but not religious about it.</p>
<p>SCRUM-ish, but no product owner, etc. so only ish.</p>
</blockquote>
<p>Have you got your tool into other teams?</p>
<blockquote>
<p>New version is in use by three or four more teams.</p>
<p>Internal presentation, now crawling all the things. Using maintainer
information to group stuff into teams.</p>
</blockquote>
<p>Are all envrionments managed in the same way?</p>
<blockquote>
<p>Yeah, it’s all controlled using the same tools.</p>
</blockquote>
<p>Reproducing production in staging for incident response?</p>
<blockquote>
<p>Easy using the role-based server management system.</p>
</blockquote>
<p>Configuration management in packages?</p>
<blockquote>
<p>Packages declare the configuration options they have.</p>
</blockquote>
<p>More</p>
<blockquote>
<p>Command to override value for a configuration parameter declared by a
package.</p>
<p>Changes to databases aren’t managed, managed manually. Sometimes have
to make schema changes backward compatible and run before hand, etc.</p>
</blockquote>
<h2 id="james-gorman-on-plain-old-services">James Gorman on Plain Old Services</h2>
<p>A lot of this is about James having the shits with the way they do things at
Yahoo!7 and on the web in general.</p>
<p>Working in Java, metric shit ton of frameworks. JBoss got deprecated.</p>
<blockquote>
<p>Everything you can do with Tomcat is an awful hack.</p>
</blockquote>
<p>Found data intensive server container. Based on Jersey but simple. Also:
focussed on the web. Architecture three tier architecture.</p>
<p>Want more asynchronous: message queues, etc. Decoupling. Wrote a thing that
does this. Similar architecture but more ways of asking for things to be done
(cron, message queues, etc.)</p>
<blockquote>
<p>I don’t recommend anyone ever write server middleware.</p>
</blockquote>
<h2 id="peter-ericson-on-erlang-and-elixr">Peter Ericson on Erlang and Elixr</h2>
<p><a href="http://www.erlang.org">Erlang</a> is erlang; <a href="http://elixir-lang.org">Elixir</a> is a ruby-ish language which compiles directly
to Erlang bytecode.</p>
<p>Elixir Dynamo is a web framework for Elixir. Scaffolding, etc.</p>
<p>See <a href="https://bitbucket.org/pdericson/erlang_future">example code</a>.</p>
<h2 id="sergey-guzenkov-on-the-red-hat-summit">Sergey Guzenkov on the Red Hat Summit</h2>
<p>Been to the US for the <a href="http://www.redhat.com/summit/">RedHat summit</a> last
month.</p>
<p>They’ll be releasing a major new version of <a href="http://www.redhat.com/products/enterprise-linux/rhn-satellite/">Red Hat Satellite</a> (their
management thing) building on Puppet, Foreman, Katello, Pulp, Candlepin.</p>
<p>RHEL7 release is delayed. It’ll be based on Fedora 19 and the beta is due in
December 2013. The 7.0 release is expected early next year. Replacing MySQL
with MariaDB; adding MongoDB, nodejs; upgrading a bunch of programming
languages; systemd. Will include client and server support for pNFS – an
extension of NFS to be parallel.</p>
<h2 id="shaun-domingo-on-making-knife-and-support-play-nice">Shaun Domingo on making knife and support play nice</h2>
<p>Support get queries about rails apps, etc. Ask engineers but they are busy,
etc. Support staff should be able to interrogate things.</p>
<p>Building on top of <a href="http://docs.opscode.com/chef/knife.html">knife</a> and knifeblock (manage knife configurations).
Plugin allowing support staff to download application keys (to interact with
APIs on their behalf), talk to APIs, generate knifeblock configuration and then
help resolve issues.</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a>	<span class="co"># List apps.</span></span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a>	<span class="ex">knife</span> ninefold-internal <span class="at">-l</span></span>
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a>	<span class="co"># Generate knifeblock configuration.</span></span>
<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a>	<span class="ex">knife</span> ninefold-internal <span class="at">-a</span> 23 <span class="at">-g</span></span>
<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a>	<span class="co"># Activate the knifeblock configuration.</span></span>
<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a>	<span class="ex">knife</span> block dev-NF00000004-23</span>
<span id="cb1-7"><a href="#cb1-7" aria-hidden="true" tabindex="-1"></a>	<span class="co"># Do stuff to help investigate and resolve customer's problem.</span></span>
<span id="cb1-8"><a href="#cb1-8" aria-hidden="true" tabindex="-1"></a>	<span class="ex">knife</span> ...</span></code></pre></div>]]></summary>
</entry>

</feed>
