<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts on Sexy Sexy Penguins</title>
    <link>http://sexysexypenguins.com/posts/</link>
    <description>Recent content in Posts on Sexy Sexy Penguins</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-EN</language>
    <managingEditor>herlo1@gmail.com (herlo)</managingEditor>
    <webMaster>herlo1@gmail.com (herlo)</webMaster>
    <copyright>(c) 2015 Clint Savage.</copyright>
    <lastBuildDate>Fri, 08 Sep 2017 14:56:43 -0600</lastBuildDate>
    <atom:link href="http://sexysexypenguins.com/posts/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>My First Flock: Hyannis, Massachussetts</title>
      <link>http://sexysexypenguins.com/posts/2017-08-31-flock-hyannis/</link>
      <pubDate>Fri, 08 Sep 2017 14:56:43 -0600</pubDate>
      <author>herlo1@gmail.com (herlo)</author>
      <guid>http://sexysexypenguins.com/posts/2017-08-31-flock-hyannis/</guid>
      <description>&lt;div class=&#34;document&#34;&gt;


&lt;p&gt;In the past I&#39;ve been a big part of the Fedora Project, attending many FUDCons and Activity Days. The last FUDCon, however, was in 2013, in Lawrence, Kansas. In other words, I haven&#39;t been to a Fedora-run event in about 4-1/2 years. That changed this weekend when I arrived in Hyannis, Massachussetts for &lt;a class=&#34;reference external&#34; href=&#34;https://flocktofedora.org/&#34;&gt;Flock&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&#34;section&#34; id=&#34;getting-to-flock&#34;&gt;
&lt;h1&gt;Getting to Flock&lt;/h1&gt;
&lt;p&gt;My trip down from Boston was very comfortabe thanks to Mohan, whom I had not met prior to riding down. I also talked with a nice fellow Robert, who rode along with us. I arrived easily around 6pm, checked in and was able to find dinner in town. I walked around the town for a bit, and headed back for an early evening.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;section&#34; id=&#34;my-purpose-at-flock&#34;&gt;
&lt;h1&gt;My Purpose at Flock&lt;/h1&gt;
&lt;p&gt;As part of my charge, I&#39;ve started investigating where things might be falling down in the future with regard to scaling resources. Considering the amount of builds, repository creation, composes and tools to help build all of those things in an automated way, it&#39;s likely things will need a way to scale up.&lt;/p&gt;
&lt;p&gt;I believe the scale of the infrastructure needed will not only be increasing by orders of magnitude within Fedora, but will also need to scale on-demand. Because I&#39;m helping to write and maintain a &lt;a class=&#34;reference external&#34; href=&#34;https://linchpin.readthedocs.io&#34;&gt;cloudy provisioner&lt;/a&gt;, this is a place were we should start having discussions.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;section&#34; id=&#34;day-one-factory-2-0-containers-and-scaling&#34;&gt;
&lt;h1&gt;Day One: Factory 2.0, Containers, and Scaling&lt;/h1&gt;
&lt;p&gt;The first part of every FUDCon, was the State of Fedora by the Fedora Project Leader. As a transition to my first Flock, I appreciated that Matthew Miller started it all off in a very similar way. He talked about how releases are always improving, downloads continue to go up, giving a direction.&lt;/p&gt;
&lt;p&gt;He discussed a new charge for Ambassadors. A direction for events and such, focusing on specific community objectives. The detail of this is posted on &lt;a class=&#34;reference external&#34; href=&#34;https://communityblog.fedoraproject.org/ambassadors-fedora-strategy/&#34;&gt;his blog here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Lastly, he talked about what I saw as the biggest goal for the next year or two in Fedora, Modularity. If you&#39;ve not heard about Modularity, Factory 2.0, or the Fedora.Next initiative, I highly suggest you perform a quick google search and do some reading.&lt;/p&gt;
&lt;div class=&#34;section&#34; id=&#34;sessions-i-attended&#34;&gt;
&lt;h2&gt;Sessions I Attended&lt;/h2&gt;
&lt;p&gt;I attended two sessions on day one. One of the changes they made for Flock this year is it was to be more of a &#39;DO&#39; type conference. Most presentations were scheduled for the first day, focusing on workshops the rest of the week.&lt;/p&gt;
&lt;p&gt;The first was on &lt;strong&gt;Factory 2.0&lt;/strong&gt; by Mike Bonnet. He covered all of the new tools that help build the Fedora modular components. It covered new features like Freshmaker, ODCS (On-Demand Compose Service), and WaiverDB. Again, a lot to search on the Googles.&lt;/p&gt;
&lt;p&gt;The second session I attended was the &lt;strong&gt;Become a Container Maintainer&lt;/strong&gt; workshop. Adam Miller and Josh Berkus guided us through the updates of how to build a container using the Fedora docker registry.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;section&#34; id=&#34;evening-fun&#34;&gt;
&lt;h2&gt;Evening Fun&lt;/h2&gt;
&lt;p&gt;The first evening of Flock was Game Night. In addition, Justin Flory organized a candy exchange. I enjoyed trying candy and treats from around the world while playing a game I brought. Later after that, I ended up walking again on Main Street in Hyannis, doing a little bar hopping and making some new friends.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;section&#34; id=&#34;day-two-packaging-tooling-in-depth-testing-with-dist-git-and-more&#34;&gt;
&lt;h1&gt;Day Two: Packaging, Tooling in-depth, Testing with dist-git, and more&lt;/h1&gt;
&lt;p&gt;Wow, a long heading! I guess that is justified, giving this was probably my busiest day of sessions.&lt;/p&gt;
&lt;div class=&#34;section&#34; id=&#34;id1&#34;&gt;
&lt;h2&gt;Sessions I Attended&lt;/h2&gt;
&lt;p&gt;As usual, Stef Walter did an excellent job explaining CI tooling in simple terms. His talk focused on how dist-git tests might work using Ansible. This session got me thinking about the difference between provisioning nodes to run all of the tests vs tests doing provisioning as part of the test. In both cases, LinchPin can help. I pulled him aside after lunch to ask about how these tests might scale and this direction became even more clear. essentially, it gave me a lot more to think about with regard to provisioning.&lt;/p&gt;
&lt;p&gt;I spend the next few hours in the same room, learning about Freshmaker, Greenwave, and Delorian (DLRN). Freshmaker and Greenwave are Factory 2.0 tools. These tools are used to help build Fedora in a more flexible way.&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;reference external&#34; href=&#34;https://fedoraproject.org/wiki/Infrastructure/Factory2/Focus/Freshmaker&#34;&gt;Freshmaker&lt;/a&gt; tooling helps to ensure that when an RPM, container, module, or something else changes, all of the affected components in the chain are also scheduled to be updated. Freshmaker has some intelligence built-in to determine what components need to be updated, and performs the actions automatically.&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;reference external&#34; href=&#34;http://readthedocs.org/projects/greenwave/&#34;&gt;Greenwave&lt;/a&gt; is a policy engine for allowing builds to commence. The policies help deterimin if the artifact is &#39;good enough&#39; to continue down the build and compose chain. Essentially, Greenwave allows gating on automated tests with built-in policies. Humans would obviously control the policies, but some automated policies could be in place to start for each artifact, just to ensure that a policy exists. WaiverDB would then look at Greenwave and make decisions on each artifact and how it must proceed down the chain.&lt;/p&gt;
&lt;p&gt;I had also intended to spend time in the Future of fedmsg session, but instead I ended up talking for over an hour with the ever intelligent Dennis Gilmore about scaling of Koji. The challenges here are not small. After some initial verbiage clarifications, we got down to the difficult bits of how koji might be able to scale. This will be quite the undertaking for someone for sure. I really appreciated him sitting down and talking through it with me. This was among the best sessions I had, probably because it was so in-depth.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;section&#34; id=&#34;id2&#34;&gt;
&lt;h2&gt;Evening Fun&lt;/h2&gt;
&lt;p&gt;Wednesday evening was a blast, as we attended &lt;a class=&#34;reference external&#34; href=&#34;http://www.wackenhammer.com&#34;&gt;Wackenhammer&#39;s Clockwork Arcade and Carousel&lt;/a&gt;. We were provided with food from a Vietnamese truck, the noodle bowl I had was quite good. I quite enjoyed the arcade, because we basically got unlimited tokens, which led to unlimited tickets. I spent a good amount of time racking up tickets, and ended up with 1425. I started looking at the prizes, but couldn&#39;t find anything I really enjoyed. Then, the lady behind the counter showed me a section I hadn&#39;t seen previously.&lt;/p&gt;
&lt;p&gt;And there they were, &lt;strong&gt;my new specs&lt;/strong&gt;!&lt;/p&gt;
&lt;a class=&#34;reference external image-reference&#34; href=&#34;http://sexysexypenguins.com/
uploads/2017/09/herlo_wackenhammer_glasses.jpg&#34;&gt;&lt;img alt=&#34;Click image to see full size&#34; src=&#34;http://sexysexypenguins.com/
uploads/2017/09/herlo_wackenhammer_glasses.jpg&#34; style=&#34;height: 250px;&#34; /&gt;&lt;/a&gt;
&lt;p&gt;I got a bunch of fun comments on them, from Ozzy to Elton to John Lennon. If you have another look for me, let meknow as I might have a plan for Halloween now. :)&lt;/p&gt;
&lt;p&gt;At the end of Day Two, I spent another hour talking with my roommate, Adam Williamson. We discussed the day&#39;s events, and specifically talked about testing, qa and of course, my koji conversation. This conversation lasted about 2 hours. Then, because my brain was going, I spent the next hour or so thinking, and trying to sleep. It was very late when I finally fell asleep.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;section&#34; id=&#34;day-three-better-late-than-never&#34;&gt;
&lt;h1&gt;Day Three: Better late than never!&lt;/h1&gt;
&lt;p&gt;Because I was up so late the night before, I slept in, got a decent breakfast in town, and ran a couple errands. I ended up getting back just in time for lunch. My new friend Marie had promised to corn row my hair at lunch time, but I could not find her. It turns out that she had forgotten and went to lunch at Spanky&#39;s with some of her friends.&lt;/p&gt;
&lt;div class=&#34;section&#34; id=&#34;id3&#34;&gt;
&lt;h2&gt;Sessions I Attended&lt;/h2&gt;
&lt;p&gt;I finally cought up with Marie at the talk by Mo &lt;strong&gt;Design Pattern Library&lt;/strong&gt; just after lunch. It&#39;s clearly been a while since I&#39;ve been around the design folks in Fedora, but it was a refreshing change. I learned about the Atomic structure inside Fedora&#39;s design library and how mustache (or other frameworks, which I forget the names of) to put it together.&lt;/p&gt;
&lt;p&gt;After Mo&#39;s session, Marie did up my hair in a less-corn-row style, but it was very very well done. I thanked her, and left. They continued on their design hackfest, which I heard later was quite successful. Here&#39;s her handiwork.&lt;/p&gt;
&lt;a class=&#34;reference external image-reference&#34; href=&#34;http://sexysexypenguins.com/
uploads/2017/09/herlo_braids.jpg&#34;&gt;&lt;img alt=&#34;Click image to see full size&#34; src=&#34;http://sexysexypenguins.com/
uploads/2017/09/herlo_braids.jpg&#34; style=&#34;height: 250px;&#34; /&gt;&lt;/a&gt;
&lt;p&gt;I then attended Tomas Tomacek&#39;s &lt;strong&gt;Let&#39;s create a module&lt;/strong&gt; workshop. I think this was the most in-depth I&#39;ve gotten with the modulemd file. The file is a YAML descriptor, which describes dependencies (both modules and RPMs) that this module depends upon. It also contains similar things to a SPEC file for RPMS. Essentially, the goal here was to educate as many packagers as possible on how to build modules. Hopefully, this will jumpstart modules into Fedora for the future.&lt;/p&gt;
&lt;p&gt;The next session I attended was Stef&#39;s talk on how to deliver CI and CD of Fedora. Because I had spent the better part of an hour at lunch talking to him the day before, a lot of this was already clear. One of those &#39;aha&#39; moments happened at the lunch chat, and was more solidified at the talk.&lt;/p&gt;
&lt;p&gt;Centered around provisioning, there are really two big points where tests might need to provision. The first would be the more obvious, provision a system to then configure it and run the tests. The second, and less obvious is that tests themselves might want to provision nodes, containers, vms, etc. as part of running tests. This got me to thinking about whether those who write tests would use what they already know, or consider a tool like &lt;a class=&#34;reference external&#34; href=&#34;https://github.com/CentOS-PaaS-SIG/linchpin&#34;&gt;LinchPin&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The final session I attended this day was the &lt;strong&gt;GPG Keysigning Party&lt;/strong&gt;. Nick Bebout was a little disorganized. In the end, I was able to verify about 20 others IDs and key fingerprints. I expect to be signing these in the days to come. To the many of these folks who have already signed my new key, thank you.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;section&#34; id=&#34;id4&#34;&gt;
&lt;h2&gt;Evening Fun&lt;/h2&gt;
&lt;p&gt;Because I hadn&#39;t spent any time with the modularity guys since DevConf in January, I found them and joined them for dinner at Tap City Grill. The food and beer was yummy, but the conversations were excellent. I look forward to seeing them again soon. I hope to make DevConf again next year. If not, I am planning to come to Europe next June-August, so hopefully we can have a few beers at that time.&lt;/p&gt;
&lt;p&gt;After dinner, I joined my friends, Masha, Amita, Aurelian, Xavier, Jenn, and Marie at Embargo for what ended up being one drink. I ended up playing silly teenage games, like truth or dare (somehow mixed with spin the bottle using a fork). My dare was to go up to a gentleman at the bar, tell him that I thought he was handsome and wanted to dance. A few minutes later, Mike was hanging out with us after a nice little jig. That was very fun and very funny.&lt;/p&gt;
&lt;p&gt;I left, headed back to the hotel, and joined some other Fedorans to drink and chat. This ended up moving a couple of times because drinking wasn&#39;t allowed there. Eventually, we ended up in our room for a couple of hours until everyone was ready to crash. Long, but fun night. This is the stuff I really enjoy at Fedora conferences.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;section&#34; id=&#34;day-four-let-s-wrap-it-up&#34;&gt;
&lt;h1&gt;Day Four: Let&#39;s wrap it up!&lt;/h1&gt;
&lt;p&gt;I&#39;m not sure I loved the wrap up session on day four. But it did allow me to hear perspective from others on how their Flock experience went. For me, it felt like a long session regurgitating what had happened. From an administrative perpsective, I&#39;m sure it was quite useful. Several folks got up multiple times, and it felt a bit forced at times to get people to come up and talk about their take on the conference.&lt;/p&gt;
&lt;p&gt;The one thing I got out of it was that I could spend a bit of time writing the beginnings of this post. So I took advantage and wrote down things that I wanted to remember. So you can thank the wrap up session for my inspiration.&lt;/p&gt;
&lt;div class=&#34;section&#34; id=&#34;afternoon-evening-fun&#34;&gt;
&lt;h2&gt;Afternoon/Evening Fun&lt;/h2&gt;
&lt;p&gt;Since the day was short, a few of us headed out to Nauset Beach, the easternmost point on the cape. First, however, we dropped Masha at the Hyannis transport hub, so she could catch her bus to the Airport. After some delay, and a nice goodbye, we headed out.&lt;/p&gt;
&lt;p&gt;The beach was gorgeous, and they had one of those planes that fly with banners behind them. That was very interesting. We got a little wet in the ocean, talked some, and napped. The sun was soft and the wind was cool, but it wasn&#39;t cold until the sun started setting. At that point, we got up and had fun with our long, maybe 50 foot shadows. We then went north up the cape, got dinner at this amazing place, called Karoo. Unfortunately, I felt a bit ill, so I couldn&#39;t finish my lamb shank, but it was very, very good. I asked to stop for ice cream to help with my belly, which was quite yummy as well. Heading back seemed to take less time, as it does. Early to bed for me though.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;section&#34; id=&#34;day-five-departure&#34;&gt;
&lt;h1&gt;Day Five: Departure&lt;/h1&gt;
&lt;p&gt;We had a nice breakfast on Main Street in Hyannis, then headed to the Airport via bus from the same transport hub. As with all good things, they must eventually come to an end. Saturday had come, most of my friends had already left. I will again miss them. I hope they will miss me, our talks, the fun. But of course the memories will remain. I look forward to the next time I will see them.&lt;/p&gt;
&lt;p&gt;All in all, Flock was a very good conference. The Hyannis Conference Center was second rate, but still useful. The cape will likely still be there for many years to come. I look forward to my contributions, as well as the contributions of others in the Fedora Project. It has been a big part of my life for such a long time now, and I&#39;m glad to be a part of it.&lt;/p&gt;
&lt;p&gt;Cheers,&lt;/p&gt;
&lt;p&gt;herlo&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>LinchPin v1.0: Simplified Cloud Orchestration with Ansible</title>
      <link>http://sexysexypenguins.com/posts/2017-06-30-linchpin-simplified-cloud-orchestration/</link>
      <pubDate>Fri, 30 Jun 2017 08:56:43 -0600</pubDate>
      <author>herlo1@gmail.com (herlo)</author>
      <guid>http://sexysexypenguins.com/posts/2017-06-30-linchpin-simplified-cloud-orchestration/</guid>
      <description>&lt;div class=&#34;document&#34;&gt;


&lt;p&gt;Late last year, we announced &lt;a class=&#34;reference external&#34; href=&#34;http://sexysexypenguins.com/posts/introducing-linch-pin/&#34;&gt;LinchPin&lt;/a&gt;, a hybrid cloud orchestration tool using Ansible. Provisioning cloud resources has never been easier or faster. With the power of Ansible behind LinchPin, many cloud resources are available at users&#39; fingertips. In this article, I&#39;ll introduce LinchPin and look at how the project has matured in the past 10 months.&lt;/p&gt;
&lt;p&gt;Back when LinchPin was introduced, using the ansible-playbook command to run LinchPin was complex. Although that can still be accomplished, LinchPin now has a new front-end command-line user interface (CLI), which is written using &lt;a class=&#34;reference external&#34; href=&#34;http://click.pocoo.org/&#34;&gt;Click&lt;/a&gt; which makes LinchPin even simpler than it was before.&lt;/p&gt;
&lt;p&gt;Not to be outdone by the CLI, LinchPin now also has a Python API, which can be used to manage resources, such as Amazon EC2 and OpenStack instances, networks, storage, security groups, and more. The API &lt;a class=&#34;reference external&#34; href=&#34;http://linchpin.readthedocs.io/en/develop/libdocs.html&#34;&gt;documentation&lt;/a&gt; can be helpful when you&#39;re trying out LinchPin&#39;s Python API.&lt;/p&gt;
&lt;div class=&#34;section&#34; id=&#34;playbooks-as-a-library&#34;&gt;
&lt;h1&gt;Playbooks as a Library&lt;/h1&gt;
&lt;p&gt;Because the core bits of LinchPin are Ansible Playbooks, the roles, modules, filters, and anything else to do with calling Ansible modules has been moved into the LinchPin library. What this means is that while one can still call the playbooks directly, it&#39;s not the preferred mechanism for managing resources. The &lt;tt class=&#34;docutils literal&#34;&gt;linchpin&lt;/tt&gt; executable has become the de facto front end for the command-line.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;section&#34; id=&#34;command-line-in-depth&#34;&gt;
&lt;h1&gt;Command-Line In Depth&lt;/h1&gt;
&lt;p&gt;Let&#39;s have a look at the &lt;tt class=&#34;docutils literal&#34;&gt;linchpin&lt;/tt&gt; command in depth.&lt;/p&gt;
&lt;pre class=&#34;code bash literal-block&#34;&gt;
&lt;span class=&#34;name variable&#34;&gt;$ &lt;/span&gt;linchpin
Usage: linchpin &lt;span class=&#34;operator&#34;&gt;[&lt;/span&gt;OPTIONS&lt;span class=&#34;operator&#34;&gt;]&lt;/span&gt; COMMAND &lt;span class=&#34;operator&#34;&gt;[&lt;/span&gt;ARGS&lt;span class=&#34;operator&#34;&gt;]&lt;/span&gt;...

  linchpin: hybrid cloud orchestration

Options:
  -c, --config PATH       Path to config file
  -w, --workspace PATH    Use the specified workspace &lt;span class=&#34;keyword&#34;&gt;if &lt;/span&gt;the familiar Jenkins
                          &lt;span class=&#34;name variable&#34;&gt;$WORKSPACE&lt;/span&gt; environment variable is not &lt;span class=&#34;name builtin&#34;&gt;set&lt;/span&gt;
  -v, --verbose           Enable verbose output
  --version               Prints the version and exits
  --creds-path PATH       Use the specified credentials path &lt;span class=&#34;keyword&#34;&gt;if &lt;/span&gt;WORKSPACE
                          environment variable is not &lt;span class=&#34;name builtin&#34;&gt;set&lt;/span&gt;
  -h, --help              Show this message and exit.

Commands:
  init     Initializes a linchpin project.
  up       Provisions nodes from the given target&lt;span class=&#34;operator&#34;&gt;(&lt;/span&gt;s&lt;span class=&#34;operator&#34;&gt;)&lt;/span&gt; in...
  destroy  Destroys nodes from the given target&lt;span class=&#34;operator&#34;&gt;(&lt;/span&gt;s&lt;span class=&#34;operator&#34;&gt;)&lt;/span&gt; in...
&lt;/pre&gt;
&lt;p&gt;What can be seen immediately is a simple description, along with options and arguments that can be passed to the command. The three commands found near the bottom of this help are where the focus will be for this document.&lt;/p&gt;
&lt;div class=&#34;section&#34; id=&#34;configuration&#34;&gt;
&lt;h2&gt;Configuration&lt;/h2&gt;
&lt;p&gt;In the past, there was &lt;cite&gt;linchpin_config.yml&lt;/cite&gt;. This file is no longer, and has been replaced with an ini-style configuration file, called &lt;cite&gt;linchpin.conf&lt;/cite&gt;. While this file can be modified, or placed elsewhere, it&#39;s placement in the library path allows easy lookup of configurations. &lt;cite&gt;linchpin.conf&lt;/cite&gt; file should not need to be modified in most cases.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;section&#34; id=&#34;workspaces&#34;&gt;
&lt;h2&gt;Workspaces&lt;/h2&gt;
&lt;p&gt;The workspace is a defined filesystem path, which allows grouping of resources in a logical way. A workspace can be considered a single point for a particular environment, set of services, or some other logical grouping. It can also be just one big storage bin of all managed resources.&lt;/p&gt;
&lt;p&gt;The workspace can be specified on the command line with the &lt;tt class=&#34;docutils literal&#34;&gt;&lt;span class=&#34;pre&#34;&gt;--workspace&lt;/span&gt; &lt;span class=&#34;pre&#34;&gt;(-w)&lt;/span&gt;&lt;/tt&gt; option, followed by the workspace path. It can also be specified with an environment variable. (eg. &lt;tt class=&#34;docutils literal&#34;&gt;$WORKSPACE&lt;/tt&gt; in bash). The default workspace is the current directory.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;section&#34; id=&#34;initialization-init&#34;&gt;
&lt;h2&gt;Initialization (init)&lt;/h2&gt;
&lt;p&gt;Running &lt;tt class=&#34;docutils literal&#34;&gt;linchpin init&lt;/tt&gt; will generate the directory structure needed, along with an example &lt;cite&gt;PinFile&lt;/cite&gt;, &lt;cite&gt;topology&lt;/cite&gt;, and &lt;cite&gt;layout&lt;/cite&gt; files.&lt;/p&gt;
&lt;pre class=&#34;code bash literal-block&#34;&gt;
&lt;span class=&#34;name variable&#34;&gt;$ &lt;/span&gt;&lt;span class=&#34;name builtin&#34;&gt;export &lt;/span&gt;&lt;span class=&#34;name variable&#34;&gt;WORKSPACE&lt;/span&gt;&lt;span class=&#34;operator&#34;&gt;=&lt;/span&gt;/tmp/workspace
&lt;span class=&#34;name variable&#34;&gt;$ &lt;/span&gt;linchpin init
PinFile and file structure created at /tmp/workspace
&lt;span class=&#34;name variable&#34;&gt;$ &lt;/span&gt;&lt;span class=&#34;name builtin&#34;&gt;cd&lt;/span&gt; /tmp/workspace/
&lt;span class=&#34;name variable&#34;&gt;$ &lt;/span&gt;tree
.
├── credentials
├── hooks
├── inventories
├── layouts
│&amp;nbsp;&amp;nbsp; └── example-layout.yml
├── PinFile
├── resources
└── topologies
    └── example-topology.yml
&lt;/pre&gt;
&lt;p&gt;At this point, one could execute &lt;tt class=&#34;docutils literal&#34;&gt;linchpin up&lt;/tt&gt; and provision a single libvirt virtual machine, with a network named &lt;cite&gt;linchpin-centos71&lt;/cite&gt;. An inventory would be generated and placed in &lt;tt class=&#34;docutils literal&#34;&gt;inventories/libvirt.inventory&lt;/tt&gt;. This can be known by reading the &lt;tt class=&#34;docutils literal&#34;&gt;&lt;span class=&#34;pre&#34;&gt;topologies/example-topology.yml&lt;/span&gt;&lt;/tt&gt; and gleaning out the &lt;cite&gt;topology_name&lt;/cite&gt; value.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;section&#34; id=&#34;provisioning-linchpin-up&#34;&gt;
&lt;h2&gt;Provisioning (linchpin up)&lt;/h2&gt;
&lt;p&gt;Once a PinFile, topology, and optionally a layout are in place, provisioning can happen.&lt;/p&gt;
&lt;div class=&#34;note&#34;&gt;
&lt;p class=&#34;first admonition-title&#34;&gt;Note&lt;/p&gt;
&lt;p class=&#34;last&#34;&gt;We use the dummy tooling as it is much simpler to configure. It
doesn&#39;t require anything extra (authentication, network, etc.). The dummy
provider creates a temporary file, which represents provisioned hosts.
If the temporary file does not have any data, hosts have not been
provisioned, or they have been recently destroyed.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The tree for the dummy provider is very simple.&lt;/p&gt;
&lt;pre class=&#34;code bash literal-block&#34;&gt;
&lt;span class=&#34;name variable&#34;&gt;$ &lt;/span&gt;tree
.
├── hooks
├── inventories
├── layouts
│&amp;nbsp;&amp;nbsp; └── dummy-layout.yml
├── PinFile
├── resources
└── topologies
    └── dummy-cluster.yml
&lt;/pre&gt;
&lt;p&gt;The PinFile is also very simple. It specifies which topology, and optional layout to use for the &lt;tt class=&#34;docutils literal&#34;&gt;dummy1&lt;/tt&gt; target.&lt;/p&gt;
&lt;pre class=&#34;code yaml literal-block&#34;&gt;
&lt;span class=&#34;name namespace&#34;&gt;---&lt;/span&gt;
&lt;span class=&#34;literal scalar plain&#34;&gt;dummy1&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt;
  &lt;span class=&#34;literal scalar plain&#34;&gt;topology&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;dummy-cluster.yml&lt;/span&gt;
  &lt;span class=&#34;literal scalar plain&#34;&gt;layout&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;dummy-layout.yml&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;The &lt;tt class=&#34;docutils literal&#34;&gt;&lt;span class=&#34;pre&#34;&gt;dummy-cluster.yml&lt;/span&gt;&lt;/tt&gt; topology file is a reference to provision three (3) resources of type &lt;cite&gt;dummy_node&lt;/cite&gt;.&lt;/p&gt;
&lt;pre class=&#34;code yaml literal-block&#34;&gt;
&lt;span class=&#34;name namespace&#34;&gt;---&lt;/span&gt;
&lt;span class=&#34;literal scalar plain&#34;&gt;topology_name&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal string&#34;&gt;&amp;quot;dummy_cluster&amp;quot;&lt;/span&gt; &lt;span class=&#34;comment single&#34;&gt;# topology name&lt;/span&gt;
&lt;span class=&#34;literal scalar plain&#34;&gt;resource_groups&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt;
  &lt;span class=&#34;punctuation indicator&#34;&gt;-&lt;/span&gt;
    &lt;span class=&#34;literal scalar plain&#34;&gt;resource_group_name&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal string&#34;&gt;&amp;quot;dummy&amp;quot;&lt;/span&gt;
    &lt;span class=&#34;literal scalar plain&#34;&gt;resource_group_type&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal string&#34;&gt;&amp;quot;dummy&amp;quot;&lt;/span&gt;
    &lt;span class=&#34;literal scalar plain&#34;&gt;resource_definitions&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt;
      &lt;span class=&#34;punctuation indicator&#34;&gt;-&lt;/span&gt;
        &lt;span class=&#34;literal scalar plain&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal string&#34;&gt;&amp;quot;web&amp;quot;&lt;/span&gt;
        &lt;span class=&#34;literal scalar plain&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal string&#34;&gt;&amp;quot;dummy_node&amp;quot;&lt;/span&gt;
        &lt;span class=&#34;literal scalar plain&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;3&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;Performing the command &lt;tt class=&#34;docutils literal&#34;&gt;linchpin up&lt;/tt&gt; should generate &lt;cite&gt;resources&lt;/cite&gt; and &lt;cite&gt;inventory&lt;/cite&gt; files based upon the &lt;cite&gt;topology_name&lt;/cite&gt;. In this case, is &lt;tt class=&#34;docutils literal&#34;&gt;dummy_cluster&lt;/tt&gt;.&lt;/p&gt;
&lt;pre class=&#34;code bash literal-block&#34;&gt;
&lt;span class=&#34;name variable&#34;&gt;$ &lt;/span&gt;linchpin up
target: dummy1, action: up

&lt;span class=&#34;name variable&#34;&gt;$ &lt;/span&gt;ls &lt;span class=&#34;operator&#34;&gt;{&lt;/span&gt;resources,inventories&lt;span class=&#34;operator&#34;&gt;}&lt;/span&gt;/dummy*
inventories/dummy_cluster.inventory  resources/dummy_cluster.output
&lt;/pre&gt;
&lt;p&gt;To verify resources with the dummy cluster, check &lt;tt class=&#34;docutils literal&#34;&gt;/tmp/dummy.hosts&lt;/tt&gt;&lt;/p&gt;
&lt;pre class=&#34;code bash literal-block&#34;&gt;
&lt;span class=&#34;name variable&#34;&gt;$ &lt;/span&gt;cat /tmp/dummy.hosts
web-0.example.net
web-1.example.net
web-2.example.net
&lt;/pre&gt;
&lt;div class=&#34;note&#34;&gt;
&lt;p class=&#34;first admonition-title&#34;&gt;Note&lt;/p&gt;
&lt;p class=&#34;last&#34;&gt;The Dummy module provides a very basic tooling for pretend (or dummy) provisioning. Check out the details for openstack, AWS EC2, google cloud, and more in the LinchPin &lt;a class=&#34;reference external&#34; href=&#34;https://github.com/CentOS-PaaS-SIG/linchpin/tree/develop/linchpin/examples/topologies&#34;&gt;examples&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;section&#34; id=&#34;inventory-generation&#34;&gt;
&lt;h2&gt;Inventory Generation&lt;/h2&gt;
&lt;p&gt;As part of the PinFile mentioned above, a &lt;cite&gt;layout&lt;/cite&gt; can be specified. If this file is specified and exists in the correct location, an Ansible static inventory file will be generated automatically for the resources provisioned.&lt;/p&gt;
&lt;pre class=&#34;code yaml literal-block&#34;&gt;
&lt;span class=&#34;name namespace&#34;&gt;---&lt;/span&gt;
&lt;span class=&#34;literal scalar plain&#34;&gt;inventory_layout&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt;
  &lt;span class=&#34;literal scalar plain&#34;&gt;vars&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt;
    &lt;span class=&#34;literal scalar plain&#34;&gt;hostname&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;__IP__&lt;/span&gt;
  &lt;span class=&#34;literal scalar plain&#34;&gt;hosts&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt;
    &lt;span class=&#34;literal scalar plain&#34;&gt;example-node&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt;
      &lt;span class=&#34;literal scalar plain&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;3&lt;/span&gt;
      &lt;span class=&#34;literal scalar plain&#34;&gt;host_groups&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt;
        &lt;span class=&#34;punctuation indicator&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;example&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;When the &lt;tt class=&#34;docutils literal&#34;&gt;linchpin up&lt;/tt&gt; execution is complete, the resources file provides useful details. Specifically, the IP address(es) or host name(s) are interpolated into the static inventory.&lt;/p&gt;
&lt;pre class=&#34;code cfg literal-block&#34;&gt;
&lt;span class=&#34;keyword&#34;&gt;[example]&lt;/span&gt;
&lt;span class=&#34;name attribute&#34;&gt;web-2.example.net hostname&lt;/span&gt;&lt;span class=&#34;operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;literal string&#34;&gt;web-2.example.net&lt;/span&gt;
&lt;span class=&#34;name attribute&#34;&gt;web-1.example.net hostname&lt;/span&gt;&lt;span class=&#34;operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;literal string&#34;&gt;web-1.example.net&lt;/span&gt;
&lt;span class=&#34;name attribute&#34;&gt;web-0.example.net hostname&lt;/span&gt;&lt;span class=&#34;operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;literal string&#34;&gt;web-0.example.net&lt;/span&gt;

&lt;span class=&#34;keyword&#34;&gt;[all]&lt;/span&gt;
&lt;span class=&#34;name attribute&#34;&gt;web-2.example.net hostname&lt;/span&gt;&lt;span class=&#34;operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;literal string&#34;&gt;web-2.example.net&lt;/span&gt;
&lt;span class=&#34;name attribute&#34;&gt;web-1.example.net hostname&lt;/span&gt;&lt;span class=&#34;operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;literal string&#34;&gt;web-1.example.net&lt;/span&gt;
&lt;span class=&#34;name attribute&#34;&gt;web-0.example.net hostname&lt;/span&gt;&lt;span class=&#34;operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;literal string&#34;&gt;web-0.example.net&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&#34;section&#34; id=&#34;teardown-linchpin-destroy&#34;&gt;
&lt;h2&gt;Teardown (linchpin destroy)&lt;/h2&gt;
&lt;p&gt;LinchPin can also perform a teardown of resources.  A teardown action generally expects that resources have been provisioned; however, because Ansible is idempotent, &lt;tt class=&#34;docutils literal&#34;&gt;linchpin destroy&lt;/tt&gt; will only check to make sure the resources are up.  Only if the resources are already up will the teardown happen.&lt;/p&gt;
&lt;p&gt;The command &lt;tt class=&#34;docutils literal&#34;&gt;linchpin destroy&lt;/tt&gt; will either use resources and/or topology files to determine the proper teardown procedure.&lt;/p&gt;
&lt;div class=&#34;note&#34;&gt;
&lt;p class=&#34;first admonition-title&#34;&gt;Note&lt;/p&gt;
&lt;p class=&#34;last&#34;&gt;The &lt;cite&gt;dummy&lt;/cite&gt; Ansible role does not use the resources, only the topology during teardown.&lt;/p&gt;
&lt;/div&gt;
&lt;pre class=&#34;code bash literal-block&#34;&gt;
&lt;span class=&#34;name variable&#34;&gt;$ &lt;/span&gt;linchpin destroy
target: dummy1, action: destroy

&lt;span class=&#34;name variable&#34;&gt;$ &lt;/span&gt;cat /tmp/dummy.hosts
-- EMPTY FILE --
&lt;/pre&gt;
&lt;div class=&#34;note&#34;&gt;
&lt;p class=&#34;first admonition-title&#34;&gt;Note&lt;/p&gt;
&lt;p class=&#34;last&#34;&gt;The teardown functionality is slightly more limited around ephemeral
resources, like networking, storage, etc. It is possible that a network
resource could be used with multiple cloud instances. In this way,
performing a &lt;tt class=&#34;docutils literal&#34;&gt;linchpin destroy&lt;/tt&gt; does not teardown certain resources. This
is dependent on each providers implementation.
See specific implementations for each of the &lt;a class=&#34;reference external&#34; href=&#34;https://github.com/CentOS-PaaS-SIG/linch-pin/tree/develop/linchpin/provision/roles&#34;&gt;providers&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;section&#34; id=&#34;the-linchpin-python-api&#34;&gt;
&lt;h1&gt;The LinchPin Python API&lt;/h1&gt;
&lt;p&gt;Much of what is implemented in the &lt;tt class=&#34;docutils literal&#34;&gt;linchpin&lt;/tt&gt; command-line tool has been written using the Python API. The API, while not complete, has become a vital component of the LinchPin tooling.&lt;/p&gt;
&lt;p&gt;The API consists of three packages:&lt;/p&gt;
&lt;ul class=&#34;simple&#34;&gt;
&lt;li&gt;linchpin&lt;/li&gt;
&lt;li&gt;linchpin.cli&lt;/li&gt;
&lt;li&gt;linchpin.api&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The command-line tool is managed at the base &lt;cite&gt;linchpin&lt;/cite&gt; package. It imports the &lt;cite&gt;linchpin.cli&lt;/cite&gt; modules and classes, which subclasses &lt;cite&gt;linchpin.api&lt;/cite&gt;. The purpose for this is to allow for other possible implementations of LinchPin using the &lt;cite&gt;linchpin.api&lt;/cite&gt;, like a planned RESTful API.&lt;/p&gt;
&lt;p&gt;For more information see the &lt;a class=&#34;reference external&#34; href=&#34;http://linchpin.readthedocs.io/en/develop/libdocs.html&#34;&gt;Python API library documentation on readthedocs&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;section&#34; id=&#34;hooks&#34;&gt;
&lt;h1&gt;Hooks&lt;/h1&gt;
&lt;p&gt;One of the big improvements in LinchPin 1.0 going forward is hooks. The goal with hooks is to allow additional configuration using external resources in certain specific states during linchpin execution. The states currently are as follows:&lt;/p&gt;
&lt;ul class=&#34;simple&#34;&gt;
&lt;li&gt;preup - executed before provisioning the topology resources&lt;/li&gt;
&lt;li&gt;postup - executed after provisioning the topology resources, and generating the optional inventory&lt;/li&gt;
&lt;li&gt;predestroy - executed before teardown of the topology resources&lt;/li&gt;
&lt;li&gt;postdestroy - executed after teardown of the topology resources&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In each case, these hooks allow external scripts to run. Several types of hooks exist, including custom ones. These are called Action Managers. Here&#39;s a list of built-in Action Managers.&lt;/p&gt;
&lt;ul class=&#34;simple&#34;&gt;
&lt;li&gt;shell - Allows either inline shell commands, or an executable shell script&lt;/li&gt;
&lt;li&gt;python - Executes a python script&lt;/li&gt;
&lt;li&gt;ansible - Executes an Ansible playbook, allowing passing of a &lt;cite&gt;vars_file&lt;/cite&gt; and &lt;cite&gt;extra_vars&lt;/cite&gt; represented as a python dict&lt;/li&gt;
&lt;li&gt;nodejs - Executes a nodejs script&lt;/li&gt;
&lt;li&gt;ruby - Executes a ruby script&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;note&#34;&gt;
&lt;p class=&#34;first admonition-title&#34;&gt;Note&lt;/p&gt;
&lt;p class=&#34;last&#34;&gt;A hook is bound to a specific target, and must be restated for each target used. In the future, hooks will be able to be global, and then named in the &lt;cite&gt;hooks&lt;/cite&gt; section for each target more simply.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;section&#34; id=&#34;using-hooks&#34;&gt;
&lt;h2&gt;Using Hooks&lt;/h2&gt;
&lt;p&gt;Because it&#39;s simple enough to describe hooks, it might not be that simple to understand their power. The reason this feature exists is to provide flexible power to the user for things that the LinchPin developers might not consider. This concept could lead to a simple way to ping a set of systems, for instance, before running another hook.&lt;/p&gt;
&lt;p&gt;Looking into the &#39;workspace` more closely, one might have noticed the &lt;cite&gt;hooks&lt;/cite&gt; directory. Let&#39;s have a look inside this directory to see the structure.&lt;/p&gt;
&lt;pre class=&#34;code bash literal-block&#34;&gt;
&lt;span class=&#34;name variable&#34;&gt;$ &lt;/span&gt;tree hooks/
hooks/
├── ansible
│   ├── ping
│   │&amp;nbsp;&amp;nbsp; └── dummy_ping.yaml
└── shell
    └── database
 &amp;nbsp;&amp;nbsp;     ├── init_db.sh
 &amp;nbsp;&amp;nbsp;     └── setup_db.sh
&lt;/pre&gt;
&lt;p&gt;In every case, hooks can be used in the &lt;cite&gt;PinFile&lt;/cite&gt;, shown here.&lt;/p&gt;
&lt;pre class=&#34;code yaml literal-block&#34;&gt;
&lt;span class=&#34;name namespace&#34;&gt;---&lt;/span&gt;
&lt;span class=&#34;literal scalar plain&#34;&gt;dummy1&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt;
  &lt;span class=&#34;literal scalar plain&#34;&gt;topology&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;dummy-cluster.yml&lt;/span&gt;
  &lt;span class=&#34;literal scalar plain&#34;&gt;layout&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;dummy-layout.yml&lt;/span&gt;
  &lt;span class=&#34;literal scalar plain&#34;&gt;hooks&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt;
    &lt;span class=&#34;literal scalar plain&#34;&gt;postup&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt;
      &lt;span class=&#34;punctuation indicator&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;ping&lt;/span&gt;
        &lt;span class=&#34;literal scalar plain&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;ansible&lt;/span&gt;
        &lt;span class=&#34;literal scalar plain&#34;&gt;actions&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt;
          &lt;span class=&#34;punctuation indicator&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;dummy_ping.yaml&lt;/span&gt;
      &lt;span class=&#34;punctuation indicator&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;database&lt;/span&gt;
        &lt;span class=&#34;literal scalar plain&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;shell&lt;/span&gt;
        &lt;span class=&#34;literal scalar plain&#34;&gt;actions&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt;
          &lt;span class=&#34;punctuation indicator&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;setup_db.sh&lt;/span&gt;
          &lt;span class=&#34;punctuation indicator&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;init_db.sh&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;The basic concept here would be that there are three postup actions to complete. Hooks are executed in top-down order. Thus, the ansible &lt;cite&gt;ping&lt;/cite&gt; task would run first, followed by the two shell tasks, &lt;cite&gt;setup_db.sh&lt;/cite&gt;, followed by &lt;cite&gt;init_db.sh&lt;/cite&gt;. Assuming the hooks execute successfully, a ping of the systems would occur, then a database would be setup, and initialized.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;section&#34; id=&#34;authentication-driver&#34;&gt;
&lt;h1&gt;Authentication Driver&lt;/h1&gt;
&lt;p&gt;In the initial design of LinchPin, it was determined to have authentication be managed within the ansible playbooks. However, moving to a more API and command-line driven tool meant that authentication should really be outside of the library where the playbooks now reside, and still pass authentication values along as needed.&lt;/p&gt;
&lt;div class=&#34;section&#34; id=&#34;id1&#34;&gt;
&lt;h2&gt;Configuration&lt;/h2&gt;
&lt;p&gt;To accomplish this task, it was determined that the easiest thing to do for a user was to let them use the authentication method provided by the driver used. For instance, if the topology called for openstack, the standard method is to use either a yaml file, or similar &lt;cite&gt;OS_&lt;/cite&gt; prefixed environment variables. A clouds.yaml file consists of a profile, with an &lt;cite&gt;auth&lt;/cite&gt; section.&lt;/p&gt;
&lt;pre class=&#34;code yaml literal-block&#34;&gt;
&lt;span class=&#34;literal scalar plain&#34;&gt;clouds&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt;
  &lt;span class=&#34;literal scalar plain&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt;
    &lt;span class=&#34;literal scalar plain&#34;&gt;auth&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt;
      &lt;span class=&#34;literal scalar plain&#34;&gt;auth_url&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;http://stack.example.com:5000/v2.0/&lt;/span&gt;
      &lt;span class=&#34;literal scalar plain&#34;&gt;project_name&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;factory2&lt;/span&gt;
      &lt;span class=&#34;literal scalar plain&#34;&gt;username&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;factory-user&lt;/span&gt;
      &lt;span class=&#34;literal scalar plain&#34;&gt;password&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;password-is-not-a-good-password&lt;/span&gt;
&lt;/pre&gt;
&lt;div class=&#34;note&#34;&gt;
&lt;p class=&#34;first admonition-title&#34;&gt;Note&lt;/p&gt;
&lt;p class=&#34;last&#34;&gt;More detail in the &lt;a class=&#34;reference external&#34; href=&#34;https://docs.openstack.org/developer/python-openstackclient/configuration.html&#34;&gt;openstack documentation&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;This clouds.yaml, or any other authentication file, is located in the &lt;cite&gt;default_credentials_path&lt;/cite&gt; (eg. ~/.config/linchpin) and referenced in the topology.&lt;/p&gt;
&lt;pre class=&#34;code yaml literal-block&#34;&gt;
&lt;span class=&#34;name namespace&#34;&gt;---&lt;/span&gt;
&lt;span class=&#34;literal scalar plain&#34;&gt;topology_name&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;openstack-test&lt;/span&gt;
&lt;span class=&#34;literal scalar plain&#34;&gt;resource_groups&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt;
  &lt;span class=&#34;punctuation indicator&#34;&gt;-&lt;/span&gt;
    &lt;span class=&#34;literal scalar plain&#34;&gt;resource_group_name&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;linchpin&lt;/span&gt;
    &lt;span class=&#34;literal scalar plain&#34;&gt;resource_group_type&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;openstack&lt;/span&gt;
    &lt;span class=&#34;literal scalar plain&#34;&gt;resource_definitions&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt;
      &lt;span class=&#34;punctuation indicator&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;resource&lt;/span&gt;
        &lt;span class=&#34;literal scalar plain&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;os_server&lt;/span&gt;
        &lt;span class=&#34;literal scalar plain&#34;&gt;flavor&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;m1.small&lt;/span&gt;
        &lt;span class=&#34;literal scalar plain&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;rhel-7.2-server-x86_64-released&lt;/span&gt;
        &lt;span class=&#34;literal scalar plain&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;1&lt;/span&gt;
        &lt;span class=&#34;literal scalar plain&#34;&gt;keypair&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;test-key&lt;/span&gt;
        &lt;span class=&#34;literal scalar plain&#34;&gt;networks&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt;
          &lt;span class=&#34;punctuation indicator&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;test-net2&lt;/span&gt;
        &lt;span class=&#34;literal scalar plain&#34;&gt;fip_pool&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;10.0.72.0/24&lt;/span&gt;
    &lt;span class=&#34;literal scalar plain&#34;&gt;credentials&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt;
      &lt;span class=&#34;literal scalar plain&#34;&gt;filename&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;clouds.yaml&lt;/span&gt;
      &lt;span class=&#34;literal scalar plain&#34;&gt;profile&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;default&lt;/span&gt;
&lt;/pre&gt;
&lt;div class=&#34;note&#34;&gt;
&lt;p class=&#34;first admonition-title&#34;&gt;Note&lt;/p&gt;
&lt;p class=&#34;last&#34;&gt;The &lt;cite&gt;default_credentials_path&lt;/cite&gt; can be changed by modifying the linchpin.conf&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The topology includes a new &lt;cite&gt;credentials&lt;/cite&gt; section at the bottom. With &lt;cite&gt;openstack&lt;/cite&gt;, &lt;cite&gt;ec2&lt;/cite&gt;, and &lt;cite&gt;gcloud&lt;/cite&gt; modules, the credentials can be specified similarly. The Authentication driver, will then look in the given &#39;filename&#39; &lt;cite&gt;clouds.yaml&lt;/cite&gt;, and search for the &#39;profile&#39; named &lt;cite&gt;default&lt;/cite&gt;.&lt;/p&gt;
&lt;p&gt;Assuming authentication is found and loaded, provisioning will continue as normal.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;section&#34; id=&#34;simplicity&#34;&gt;
&lt;h1&gt;Simplicity&lt;/h1&gt;
&lt;p&gt;Although LinchPin can be complex around topologies, inventory layouts, hooks, and authentication management, the ultimate goal is simplicity. By simplifying with a command-line interface, along with goals to improve the developer experience coming post-1.0, LinchPin continues to show that complex configurations can be managed with simplicity.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;section&#34; id=&#34;community-growth&#34;&gt;
&lt;h1&gt;Community Growth&lt;/h1&gt;
&lt;p&gt;Over the past year, LinchPin&#39;s community has grown. To the point that we now have a &lt;a class=&#34;reference external&#34; href=&#34;https://www.redhat.com/mailman/listinfo/linchpin&#34;&gt;mailing list&lt;/a&gt;, an IRC channel (#linchpin on chat.freenode.net), and even manage our sprints in the open with &lt;a class=&#34;reference external&#34; href=&#34;https://github.com/CentOS-PaaS-SIG/linch-pin/projects/4&#34;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The community membership has grown immensely. From 2 core developers to about 10 contributors over the past year. More people continue to work with the project. The future is bright for sure! If you&#39;ve got an interest, drop us a line, file an issue on github, join up on IRC, or send us an email.&lt;/p&gt;
&lt;p&gt;Cheers,&lt;/p&gt;
&lt;p&gt;herlo&lt;/p&gt;
&lt;p&gt;PS - This article is crossposted on &lt;a class=&#34;reference external&#34; href=&#34;https://opensource.com/article/17/6/linchpin&#34;&gt;Opensource.com&lt;/a&gt;. Special thanks to Rikki Endsley and Jen Wike Huger for helping it get published!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Introducing Linch-Pin: Hybrid cloud provisioning using Ansible</title>
      <link>http://sexysexypenguins.com/posts/introducing-linch-pin/</link>
      <pubDate>Wed, 19 Oct 2016 10:56:43 -0600</pubDate>
      <author>herlo1@gmail.com (herlo)</author>
      <guid>http://sexysexypenguins.com/posts/introducing-linch-pin/</guid>
      <description>&lt;div class=&#34;document&#34;&gt;


&lt;div class=&#34;section&#34; id=&#34;background&#34;&gt;
&lt;h1&gt;Background&lt;/h1&gt;
&lt;p&gt;Over the past 6+ months, I&#39;ve been working at &lt;a class=&#34;reference external&#34; href=&#34;https://redhat.com&#34;&gt;Red Hat&lt;/a&gt;. During this time, I&#39;ve been working mostly with Continuous Integration projects and the like. Recently, I joined a new team, called Continouous Infrastructure and started working on automating use cases around &lt;a class=&#34;reference external&#34; href=&#34;https://projectatomic.io&#34;&gt;Project Atomic&lt;/a&gt; and &lt;a class=&#34;reference external&#34; href=&#34;https://openshift.com&#34;&gt;OpenShift&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As part of that project, we have an internal tool, called ci-factory. It has within its components, a provisioner that works with OpenStack, Beaker, etc. However, it doesn&#39;t support a broader set of clouds/infrastructure, including Amazon AWS, Google Compute Engine, Libvirt, etc. Additionally, ci-factory provided some tooling for ansible dynamic inventories. However, the configurations that generated this were not very flexible, and sometimes outright incorrect.&lt;/p&gt;
&lt;div class=&#34;section&#34; id=&#34;enter-provisioner-2-0-linch-pin&#34;&gt;
&lt;h2&gt;Enter Provisioner 2.0 (Linch-Pin)&lt;/h2&gt;
&lt;p&gt;Beginning in June this year, our team started creating a new tool. Lead by developer extraordinaire, &lt;a class=&#34;reference external&#34; href=&#34;https://github.com/samvarankashyap&#34;&gt;Samvaran Rallabandi&lt;/a&gt; (we call him SK), we now have &lt;a class=&#34;reference external&#34; href=&#34;https://github.com/CentOS-PaaS-SIG/linch-pin&#34;&gt;Linch-Pin&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The concept of Linch-Pin was to retool the basic ci-factory provisioner into something much more flexible. While provisioning was important, ci-factory was written in a mix of python and bash scripts. Provisioner 2.0 is written completely in Ansible. Because Ansible is excellent at both configuration management and orchestration of systems, it could be used to both provision and configure systems. Ansible can handle complex cluster configurations (eg &lt;a class=&#34;reference external&#34; href=&#34;https://github.com/openshift/openshift-ansible&#34;&gt;openshift-ansible&lt;/a&gt;) as well as much simpler tasks, like adding users to a system idempotently.&lt;/p&gt;
&lt;p&gt;Additional, considerations for Provisioner 2.0 would allow leveraging of existing Ansible cloud modules, reducing the amount of code needing to be written. So far, this has proven very valuable and made development time much shorter overall. There are, however certain modules, Libvirt for example, that seem poorly implemented in Ansible. Thus, an updated module will need to be written.&lt;/p&gt;
&lt;p&gt;Lastly, Provisioner 2.0 should exist upstream. Linch-Pin has been an upstream project since the first working code was created. This was done to encourage contribution from inside and outside of Red Hat. We believe that many projects will be able to take advantage of Linch-Pin and contribute back to the project as a whole. Many other upstream and downstream projects have expressed interest in Linch-Pin just from a basic demonstration.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;section&#34; id=&#34;linch-pin-architecture&#34;&gt;
&lt;h1&gt;Linch-Pin Architecture&lt;/h1&gt;
&lt;p&gt;Linch-Pin has some basic components that make it work. First we&#39;ll cover the file structure, then dive into the core bits:&lt;/p&gt;
&lt;pre class=&#34;literal-block&#34;&gt;
provision/
├── group_vars/
├── hosts
├── roles/
└── site.yml
&lt;/pre&gt;
&lt;p&gt;At one point in time, Linch-Pin was going to have both &lt;cite&gt;provision&lt;/cite&gt; and &lt;cite&gt;configure&lt;/cite&gt; playbooks. The provision components became Linch-Pin, while the configure components became external repositories of useful components which leverage Linch-Pin in some way. A couple of examples are the CentOS PaaS SIG&#39;s &lt;a class=&#34;reference external&#34; href=&#34;https://github.com/CentOS-PaaS-SIG/paas-sig-ci&#34;&gt;paas-sig-ci project&lt;/a&gt;, and the &lt;a class=&#34;reference external&#34; href=&#34;https://github.com/RedHatQE/cinch&#34;&gt;cinch project&lt;/a&gt;, by, Red Hat Quality Engineering.&lt;/p&gt;
&lt;p&gt;Both &lt;cite&gt;group_vars&lt;/cite&gt; and &lt;cite&gt;hosts&lt;/cite&gt; paths are related to &lt;a class=&#34;reference external&#34; href=&#34;https://docs.ansible.com/ansible/intro_inventory.html&#34;&gt;inventory&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;cite&gt;roles&lt;/cite&gt; path is the meat of Linch-Pin. All of the power that makes hybrid cloud provisioning possible exists here. Ansible defines things called &lt;a class=&#34;reference external&#34; href=&#34;https://docs.ansible.com/ansible/playbooks.html&#34;&gt;playbooks&lt;/a&gt; to drive these roles.  The &lt;cite&gt;site.yml&lt;/cite&gt; is the playbook itself, which start the execution.&lt;/p&gt;
&lt;p&gt;Other paths exist:&lt;/p&gt;
&lt;pre class=&#34;literal-block&#34;&gt;
├── outputs/
├── filter_plugins/
├── InventoryFilters/
└── library/
&lt;/pre&gt;
&lt;p&gt;We will cover these components later on in this post, or later in the series.&lt;/p&gt;
&lt;div class=&#34;section&#34; id=&#34;topologies&#34;&gt;
&lt;h2&gt;Topologies&lt;/h2&gt;
&lt;p&gt;To consider complex cloud infrastructure, a topology definition can help. The topology definition is created using YAML. Before Linch-Pin provisions anything, the topology must be validated using a predefined schema. Schemas can be created to change the way the topology works if desired. However, there is a default schema already defined for simplicity.&lt;/p&gt;
&lt;p&gt;After validation, the topology is then used to provision resources. A topology is broken into its resource components, and each is delegated to the appropriate resource provisioner. This is generally done asynchronously, meaning that nodes on different cloud providers can be provisioned at the same time using appropriate credentials. Assuming a successful provisioning event per provider, the resource provisoner(s) will return appropriate response data to the topology provisioner.&lt;/p&gt;
&lt;p&gt;As mentioned above, credentials may be required for some cloud providers. This is handled by the credentials manager. The credentials details are stored in the topology definition as a reference to the vault/location of said credentials. The resource provisioner uses these to authenticate to the appropriate cloud provider as necessary.&lt;/p&gt;
&lt;p&gt;A very simple example topology definition is provided here.&lt;/p&gt;
&lt;pre class=&#34;code yaml literal-block&#34;&gt;
&lt;span class=&#34;comment single&#34;&gt;# openstack-3node-cluster.yml&lt;/span&gt;
&lt;span class=&#34;name namespace&#34;&gt;---&lt;/span&gt;
&lt;span class=&#34;literal scalar plain&#34;&gt;topology_name&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal string&#34;&gt;&amp;quot;openstack_3node_cluster&amp;quot;&lt;/span&gt;
&lt;span class=&#34;literal scalar plain&#34;&gt;site&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal string&#34;&gt;&amp;quot;ci-osp&amp;quot;&lt;/span&gt;
&lt;span class=&#34;literal scalar plain&#34;&gt;resource_groups&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt;
  &lt;span class=&#34;punctuation indicator&#34;&gt;-&lt;/span&gt;
    &lt;span class=&#34;literal scalar plain&#34;&gt;resource_group_name&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal string&#34;&gt;&amp;quot;os&amp;quot;&lt;/span&gt;
    &lt;span class=&#34;literal scalar plain&#34;&gt;res_group_type&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal string&#34;&gt;&amp;quot;openstack&amp;quot;&lt;/span&gt;
    &lt;span class=&#34;literal scalar plain&#34;&gt;res_defs&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt;
      &lt;span class=&#34;punctuation indicator&#34;&gt;-&lt;/span&gt;
        &lt;span class=&#34;literal scalar plain&#34;&gt;res_name&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal string&#34;&gt;&amp;quot;3node_inst&amp;quot;&lt;/span&gt;
        &lt;span class=&#34;literal scalar plain&#34;&gt;flavor&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal string&#34;&gt;&amp;quot;m1.small&amp;quot;&lt;/span&gt;
        &lt;span class=&#34;literal scalar plain&#34;&gt;res_type&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal string&#34;&gt;&amp;quot;os_server&amp;quot;&lt;/span&gt;
        &lt;span class=&#34;literal scalar plain&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal string&#34;&gt;&amp;quot;rhel-7.3-server-x86_64-latest&amp;quot;&lt;/span&gt;
        &lt;span class=&#34;literal scalar plain&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal scalar plain&#34;&gt;3&lt;/span&gt;
        &lt;span class=&#34;literal scalar plain&#34;&gt;networks&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt;
          &lt;span class=&#34;punctuation indicator&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;literal string&#34;&gt;&amp;quot;atomic-e2e-jenkins&amp;quot;&lt;/span&gt;
    &lt;span class=&#34;literal scalar plain&#34;&gt;assoc_creds&lt;/span&gt;&lt;span class=&#34;punctuation indicator&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;literal string&#34;&gt;&amp;quot;openstack_creds&amp;quot;&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;This topology describes a single set of instances, which will run on the local &lt;em&gt;ci-osp&lt;/em&gt; site. There will be 3 nodes, given network devices on the &#39;atomic-e2e-jenkins&#39; network. Each instance will be of type &#39;m1.small&#39;. Keep in mind, the openstack server must actually be configured and accept the above options. This is out of scope of this post, however.&lt;/p&gt;
&lt;p&gt;Topology terminology explained:&lt;/p&gt;
&lt;ul class=&#34;simple&#34;&gt;
&lt;li&gt;&lt;tt class=&#34;docutils literal&#34;&gt;topology_name&lt;/tt&gt;: a reference point which Linch-Pin uses to track the nodes, networks, and other resources throughout provisioning and teardown&lt;/li&gt;
&lt;li&gt;&lt;tt class=&#34;docutils literal&#34;&gt;resource_groups&lt;/tt&gt;: a set of resource definitions. One or many groups of nodes, storage, etc.&lt;/li&gt;
&lt;li&gt;&lt;tt class=&#34;docutils literal&#34;&gt;res_group_type&lt;/tt&gt;: a predefined set of group types (eg. openstack, aws, gcloud, libvirt, etc.)&lt;/li&gt;
&lt;li&gt;&lt;tt class=&#34;docutils literal&#34;&gt;res_defs&lt;/tt&gt;: A definition of a resource with its component attributes (flavor, image, count, region, etc.)&lt;/li&gt;
&lt;li&gt;&lt;tt class=&#34;docutils literal&#34;&gt;res_type&lt;/tt&gt;: A predefined cloud resource name (eg. os_server, gcloud_gce, aws_ec2, os_heat)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As mentioned above, the topology describes the resources needed. When Linch-Pin is invoked, this file will be read and create the described systems. More information about topologies and structures is described in the &lt;a class=&#34;reference external&#34; href=&#34;https://linch-pin.readthedocs.io/en/latest/example_topologies.html&#34;&gt;Linch-Pin documentation&lt;/a&gt;. More complex examples can be found in the &lt;a class=&#34;reference external&#34; href=&#34;https://github.com/CentOS-PaaS-SIG/linch-pin/tree/master/ex_topo&#34;&gt;Linch-Pin github repository&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;section&#34; id=&#34;provisioning&#34;&gt;
&lt;h2&gt;Provisioning&lt;/h2&gt;
&lt;p&gt;To provision the &lt;cite&gt;openstack-3node-cluster.yml&lt;/cite&gt;, Linch-Pin currently uses the &lt;tt class=&#34;docutils literal&#34;&gt;&lt;span class=&#34;pre&#34;&gt;ansible-playbook&lt;/span&gt;&lt;/tt&gt; command. There are many options available that can be passed as &lt;tt class=&#34;docutils literal&#34;&gt;&lt;span class=&#34;pre&#34;&gt;--extra-vars&lt;/span&gt;&lt;/tt&gt;, but here, we only show two: &lt;cite&gt;state&lt;/cite&gt; and &lt;cite&gt;topology&lt;/cite&gt;. Simply calling the provision playbook will provision resources:&lt;/p&gt;
&lt;pre class=&#34;literal-block&#34;&gt;
$ ansible-playbook /path/to/linch-pin/provision/site.yml \
topology=&#39;/path/to/openstack-3node-cluster.yml&#39; state=present&amp;quot;
&lt;/pre&gt;
&lt;div class=&#34;note&#34;&gt;
&lt;p class=&#34;first admonition-title&#34;&gt;Note&lt;/p&gt;
&lt;p class=&#34;last&#34;&gt;There are other --extra-vars options documented &lt;a class=&#34;reference external&#34; href=&#34;https://github.com/CentOS-PaaS-SIG/linch-pin/blob/master/README.md&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The diagram shows this process, the topology definition is provided to the provisioner, which then provisions the requested resources. Once provisioned, all cloud data is gathered and stored.&lt;/p&gt;
&lt;div class=&#34;figure&#34;&gt;
&lt;a class=&#34;reference external image-reference&#34; href=&#34;http://sexysexypenguins.com/
uploads/2016/10/Linch-Pin_Provision_Resources.png&#34;&gt;&lt;img alt=&#34;Click image to see full size&#34; src=&#34;http://sexysexypenguins.com/
uploads/2016/10/Linch-Pin_Provision_Resources.png&#34; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;A great many things happen when this playbook is run. Let&#39;s have a look at the process in a bit more detail.&lt;/p&gt;
&lt;div class=&#34;section&#34; id=&#34;determining-defaults&#34;&gt;
&lt;h3&gt;Determining Defaults&lt;/h3&gt;
&lt;p&gt;Linch-Pin first discovers the needed configurations. Either from the &lt;tt class=&#34;docutils literal&#34;&gt;&lt;span class=&#34;pre&#34;&gt;--extra-vars&lt;/span&gt;&lt;/tt&gt; as shown above, or from the &lt;a class=&#34;reference external&#34; href=&#34;https://github.com/CentOS-PaaS-SIG/linch-pin/blob/master/linchpin_config.yml&#34;&gt;linchpin_config.yml&lt;/a&gt;. This determines the schema, topology, and some paths for outputs and the like (covered later in this post).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;section&#34; id=&#34;schema-check&#34;&gt;
&lt;h3&gt;Schema Check&lt;/h3&gt;
&lt;p&gt;Once everything is configured properly, a schema check is performed. This process is used to ensure the topology file matches up with the defined constraints. For example, there are specific resource types &lt;em&gt;(res_type)&lt;/em&gt;, like os_server, aws_ec2, and gcloud_gce. Others, like libvirt, beaker, and docker are not yet implemented. The schema check ensures that further processing only occurs for resource types that are currently supported.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;section&#34; id=&#34;provisioning-nodes&#34;&gt;
&lt;h3&gt;Provisioning Nodes&lt;/h3&gt;
&lt;p&gt;Once the schema check passes, the topology is provisioned with the cloud provider(s). In the example, there is only one, openstack, but there could be several clouds provisioned at once. The provisioner plugin is called for each cloud provider, credentials are passed along as needed. If all is successful, nodes will be provisioned according to the topology definition.&lt;/p&gt;
&lt;div class=&#34;note&#34;&gt;
&lt;p class=&#34;first admonition-title&#34;&gt;Note&lt;/p&gt;
&lt;p class=&#34;last&#34;&gt;Additional example topologies available at the &lt;a class=&#34;reference external&#34; href=&#34;https://github.com/CentOS-PaaS-SIG/linch-pin/tree/master/ex_topo&#34;&gt;Linch-Pin github&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;section&#34; id=&#34;determining-credentials&#34;&gt;
&lt;h3&gt;Determining Credentials&lt;/h3&gt;
&lt;p&gt;It may not have been clear above, but when provisioning nodes from certain cloud providers, credentials are required. In the topology definition file, there is one line that indicates credentials:&lt;/p&gt;
&lt;pre class=&#34;literal-block&#34;&gt;
assoc_creds: &amp;quot;openstack_creds&amp;quot;
&lt;/pre&gt;
&lt;p&gt;However, this doesn&#39;t really tell us anything. It turns out, each provisioner plugin has an ansible &lt;cite&gt;role&lt;/cite&gt;. Each &lt;cite&gt;role&lt;/cite&gt; contains some variables for determining how to connect to the cloud provider. For instance, with openstack, the &lt;tt class=&#34;docutils literal&#34;&gt;roles/openstack/vars/openstack_creds.yml&lt;/tt&gt; relates to our topology definition:&lt;/p&gt;
&lt;pre class=&#34;literal-block&#34;&gt;
--- # openstack credentials
endpoint: &amp;quot;{{ lookup(&#39;env&#39;,&#39;OS_AUTH_URL&#39;) }}&amp;quot;
project: &amp;quot;{{ lookup(&#39;env&#39;,&#39;OS_TENANT_NAME&#39;) }}&amp;quot;
username: &amp;quot;{{ lookup(&#39;env&#39;,&#39;OS_USERNAME&#39;) }}&amp;quot;
password: &amp;quot;{{ lookup(&#39;env&#39;,&#39;OS_PASSWORD&#39;) }}&amp;quot;
&lt;/pre&gt;
&lt;p&gt;The openstack credentials currently come from environment variables. Simply export these variable to the shell and they will be picked up properly. From this point, openstack will grant access according to its policies. The environmental variables are used this way, where appropriate, for all cloud providers.&lt;/p&gt;
&lt;p&gt;In the future, there will be a way to manage credentials a bit more succinctly. See &lt;a class=&#34;reference external&#34; href=&#34;https://github.com/CentOS-PaaS-SIG/linch-pin/issues/76&#34;&gt;https://github.com/CentOS-PaaS-SIG/linch-pin/issues/76&lt;/a&gt; for updates.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;section&#34; id=&#34;outputs-and-teardown&#34;&gt;
&lt;h3&gt;Outputs and Teardown&lt;/h3&gt;
&lt;p&gt;Teardown is fairly straightforward. The command is similar to provisioning. The main difference is &lt;cite&gt;state=absent&lt;/cite&gt;, telling the provisioner to perform a teardown instead of provisioning a new resource:&lt;/p&gt;
&lt;pre class=&#34;literal-block&#34;&gt;
$ ansible-playbook /path/to/linch-pin/provision/site.yml \
topology=&#39;/path/to/openstack-3node-cluster.yml&#39; state=absent&amp;quot;
&lt;/pre&gt;
&lt;p&gt;This process requires knowledge of the outputs, as mentioned previously. Outputs are tracked by a few variables in the linchpin_config.yml. Specifically, the &lt;cite&gt;outputfolder_path&lt;/cite&gt; provides the location of the output, along with the filename, which is based upon the &lt;cite&gt;topology_name&lt;/cite&gt;.&lt;/p&gt;
&lt;p&gt;Consider the following; &lt;cite&gt;outputfolder_path=/tmp/outputs&lt;/cite&gt;, and &lt;cite&gt;topology_name=openstack_3node_cluster&lt;/cite&gt;. From this, the output of provisioning would reside at &lt;cite&gt;/tmp/outputs/openstack_3node_cluser.yml&lt;/cite&gt;.&lt;/p&gt;
&lt;p&gt;The contents of this file may look something like this:&lt;/p&gt;
&lt;pre class=&#34;literal-block&#34;&gt;
aws_ec2_res: []
duffy_res: []
gcloud_gce_res: []
os_server_res:
-   _ansible_item_result: true
    _ansible_no_log: false
    changed: true
    id: f5832fcc-4e1b-442d-8be8-ba5e3783e7f2
    instance:
    - &amp;lt;endpoint&amp;gt;
    - &amp;lt;username&amp;gt;
    - &amp;lt;password&amp;gt;
    - &amp;lt;username&amp;gt;
    - present
    - rhel-6.5_jeos
    - &amp;lt;ssh-key-reference&amp;gt;
    - m1.small
    - &amp;lt;network&amp;gt;
    - testgroup2
    - ano_inst
    - 0
    invocation:
        module_args:
            api_timeout: 99999
            auth:
                auth_url: VALUE_SPECIFIED_IN_NO_LOG_PARAMETER
                password: VALUE_SPECIFIED_IN_NO_LOG_PARAMETER
                project_name: VALUE_SPECIFIED_IN_NO_LOG_PARAMETER
                username: VALUE_SPECIFIED_IN_NO_LOG_PARAMETER
            auth_type: null
            auto_ip: true
            availability_zone: null
            boot_from_volume: false
            boot_volume: null
            cacert: null
            cert: null
            cloud: null
            config_drive: false
            endpoint_type: public
            flavor: m1.small
            flavor_include: null
            flavor_ram: null
            floating_ip_pools: null
            floating_ips: null
            image: rhel-6.5_jeos
            image_exclude: (deprecated)
            key: null
            key_name: &amp;lt;ssh-key-reference&amp;gt;
            meta: null
            name: testgroup2_ano_inst_0
            network: VALUE_SPECIFIED_IN_NO_LOG_PARAMETER
            nics: []
            region_name: null
            scheduler_hints: null
            security_groups:
            - default
            state: present
            terminate_volume: false
            timeout: 180
            userdata: null
            verify: true
            volume_size: false
            volumes: []
            wait: true
        module_name: os_server
    openstack:
        HUMAN_ID: true
        NAME_ATTR: name
        OS-DCF:diskConfig: MANUAL
        OS-EXT-AZ:availability_zone: nova
        OS-EXT-STS:power_state: 1
        OS-EXT-STS:task_state: null
        OS-EXT-STS:vm_state: active
        OS-SRV-USG:launched_at: &#39;2016-07-26T16:56:40.000000&#39;
        OS-SRV-USG:terminated_at: null
        accessIPv4: 10.8.183.233
        accessIPv6: &#39;&#39;
        addresses:
            &amp;lt;network&amp;gt;:
            -   OS-EXT-IPS-MAC:mac_addr: fa:16:3e:48:cf:fb
                OS-EXT-IPS:type: fixed
                addr: 172.16.100.26
                version: 4
            -   OS-EXT-IPS-MAC:mac_addr: fa:16:3e:48:cf:fb
                OS-EXT-IPS:type: floating
                addr: 10.8.183.233
                version: 4
        adminPass: &amp;lt;redacted&amp;gt;
        az: nova
        cloud: defaults
        config_drive: &#39;&#39;
        created: &#39;2016-07-26T16:56:10Z&#39;
        flavor:
            id: &#39;2&#39;
            name: m1.small
        hostId: 6363c13fc31066a15f2ff4c81bf054290d4d56d4d08e568570354580
        human_id: testgroup2_ano_inst_0
        id: f5832fcc-4e1b-442d-8be8-ba5e3783e7f2
        image:
            id: 3bcfd17c-6bf0-4134-ae7f-80bded8b46fd
            name: rhel-6.5_jeos
        interface_ip: 10.8.183.233
        key_name: &amp;lt;ssh-key-reference&amp;gt;
        metadata: {}
        name: testgroup2_ano_inst_0
        networks:
            &amp;lt;network&amp;gt;:
            - 172.16.100.26
            - 10.8.183.233
        os-extended-volumes:volumes_attached: []
        private_v4: 172.16.100.26
        progress: 0
        public_v4: 10.8.183.233
        public_v6: &#39;&#39;
        region: &#39;&#39;
        security_groups:
        -   description: Default security group
            id: df1a797b-009c-4685-a7c9-43863c36d653
            name: default
            security_group_rules:
            -   direction: ingress
                ethertype: IPv4
                id: ade9fcb9-14c1-4975-a04d-6007f80005c1
                port_range_max: null
                port_range_min: null
                protocol: null
                remote_ip_prefix: null
                security_group_id: df1a797b-009c-4685-a7c9-43863c36d653
            -   direction: ingress
                ethertype: IPv4
                id: d03e4bae-24b6-415a-a30c-ee0d060f566f
                port_range_max: null
                port_range_min: null
                protocol: null
                remote_ip_prefix: null
                security_group_id: df1a797b-009c-4685-a7c9-43863c36d653
        status: ACTIVE
        tenant_id: f1dda47890754241a3e111f9b7394707
        updated: &#39;2016-07-26T16:56:40Z&#39;
        user_id: 9c770dbddda444799e627004fee26e0a
        volumes: []
    server:
        HUMAN_ID: true
        NAME_ATTR: name
        OS-DCF:diskConfig: MANUAL
        OS-EXT-AZ:availability_zone: nova
        OS-EXT-STS:power_state: 1
        OS-EXT-STS:task_state: null
        OS-EXT-STS:vm_state: active
        OS-SRV-USG:launched_at: &#39;2016-07-26T16:56:40.000000&#39;
        OS-SRV-USG:terminated_at: null
        accessIPv4: 10.8.183.233
        accessIPv6: &#39;&#39;
        addresses:
            &amp;lt;network&amp;gt;:
            -   OS-EXT-IPS-MAC:mac_addr: fa:16:3e:48:cf:fb
                OS-EXT-IPS:type: fixed
                addr: 172.16.100.26
                version: 4
            -   OS-EXT-IPS-MAC:mac_addr: fa:16:3e:48:cf:fb
                OS-EXT-IPS:type: floating
                addr: 10.8.183.233
                version: 4
        adminPass: &amp;lt;redacted&amp;gt;
        az: nova
        cloud: defaults
        config_drive: &#39;&#39;
        created: &#39;2016-07-26T16:56:10Z&#39;
        flavor:
            id: &#39;2&#39;
            name: m1.small
        hostId: 6363c13fc31066a15f2ff4c81bf054290d4d56d4d08e568570354580
        human_id: testgroup2_ano_inst_0
        id: f5832fcc-4e1b-442d-8be8-ba5e3783e7f2
        image:
            id: 3bcfd17c-6bf0-4134-ae7f-80bded8b46fd
            name: rhel-6.5_jeos
        interface_ip: 10.8.183.233
        key_name: &amp;lt;ssh-key-reference&amp;gt;
        metadata: {}
        name: testgroup2_ano_inst_0
        networks:
            &amp;lt;network&amp;gt;:
            - 172.16.100.26
            - 10.8.183.233
        os-extended-volumes:volumes_attached: []
        private_v4: 172.16.100.26
        progress: 0
        public_v4: 10.8.183.233
        public_v6: &#39;&#39;
        region: &#39;&#39;
        security_groups:
        -   description: Default security group
            id: df1a797b-009c-4685-a7c9-43863c36d653
            name: default
            security_group_rules:
            -   direction: ingress
                ethertype: IPv4
                id: ade9fcb9-14c1-4975-a04d-6007f80005c1
                port_range_max: null
                port_range_min: null
                protocol: null
                remote_ip_prefix: null
                security_group_id: df1a797b-009c-4685-a7c9-43863c36d653
            -   direction: ingress
                ethertype: IPv4
                id: d03e4bae-24b6-415a-a30c-ee0d060f566f
                port_range_max: null
                port_range_min: null
                protocol: null
                remote_ip_prefix: null
                security_group_id: df1a797b-009c-4685-a7c9-43863c36d653
        status: ACTIVE
        tenant_id: f1dda47890754241a3e111f9b7394707
        updated: &#39;2016-07-26T16:56:40Z&#39;
        user_id: 9c770dbddda444799e627004fee26e0a
        volumes: []
&lt;/pre&gt;
&lt;p&gt;Because the &lt;cite&gt;linchpin_config.yml&lt;/cite&gt; contains the path to the output file, it is then parsed and used to teardown the resources. In this case, the single openstack node listed and its networking resources are torn down. If there were more nodes, more data would exist. Similarly, if there were additional clouds, the data would be populated for the appropriate output fields.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;section&#34; id=&#34;conclusion&#34;&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Finally! We&#39;ve made it through the introduction to Linch-Pin. As you can see, running Linch-Pin is pretty easy, but there&#39;s a lot to it internally. Now it&#39;s time to use the provisioner, so go ahead and try it out.&lt;/p&gt;
&lt;p&gt;Cheers,&lt;/p&gt;
&lt;p&gt;herlo&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Adjusting your git email address per clone</title>
      <link>http://sexysexypenguins.com/2015/05/04/adjusting-your-git-email-address-per-clone/</link>
      <pubDate>Mon, 04 May 2015 23:40:11 +0000</pubDate>
      <author>herlo1@gmail.com (herlo)</author>
      <guid>http://sexysexypenguins.com/2015/05/04/adjusting-your-git-email-address-per-clone/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been working a lot with git over the years. To that end, I commonly use my personal email address for projects I post on &lt;a href=&#34;https://github.com/herlo&#34;&gt;my github&lt;/a&gt;. Additionally, I have a project or two in which I participate. The email address I use there is just an alias to my personal email, but I want to use it instead of the email above.&lt;/p&gt;

&lt;p&gt;Today, I came &lt;a href=&#34;http://www.codeography.com/2011/08/05/project-specific-git-author.html&#34;&gt;across an article&lt;/a&gt; that makes changing this value much, much simpler.  Try this:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;$ git config --global alias.personal &#39;config user.email &#34;herlo@personal&#34;&#39;
$ git personal
$ git config user.email
herlo@personal
$ git config --global alias.work &#39;config user.email &#34;herlo@work&#34;&#39;
$ git work
$ git config user.email
herlo@work&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;As you can see, it&amp;rsquo;s now trivial to switch between certain email addresses. Man, git aliases are very nice!&lt;/p&gt;

&lt;p&gt;Cheers,&lt;/p&gt;

&lt;p&gt;herlo&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Setting up a FreeIPA Replica</title>
      <link>http://sexysexypenguins.com/2014/10/28/setting-up-a-freeipa-replica/</link>
      <pubDate>Tue, 28 Oct 2014 16:58:15 +0000</pubDate>
      <author>herlo1@gmail.com (herlo)</author>
      <guid>http://sexysexypenguins.com/2014/10/28/setting-up-a-freeipa-replica/</guid>
      <description>

&lt;p&gt;In my last &lt;a title=&#34;post&#34; href=&#34;http://sexysexypenguins.com/
2014/10/09/introducing-freeipa-identity-management-idm-done-right-2/&#34; target=&#34;_blank&#34;&gt;post&lt;/a&gt;, I mentioned that I would show how to configure a client with sudo access. Well, I lied! Hopefully that will be the next post. Instead, I&amp;amp;#8217&amp;rsquo;m going to cover how to set up FreeIPA replica.&lt;/p&gt;

&lt;p&gt;Replicating FreeIPA services is useful in many ways. Managing DNS, LDAP and Kerberos services, for one. Additionally, it makes sense to have replicas in different VLANs or network zones. Opening up only the ports needed for replication between the FreeIPA servers instead of for all hosts makes things more secure.&lt;/p&gt;

&lt;h2 id=&#34;all-replicas-are-masters&#34;&gt;All Replicas are Masters&lt;/h2&gt;

&lt;p&gt;Save for things like running a Certificate Authority or DNS, all of the hosts which run FreeIPA are masters. They replicate using agreements. This means that when a new replica is setup, it will communicate with other FreeIPA servers and replicate to/from only the ones it is allowed to communicate. Further reading is &lt;a href=&#34;https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Identity_Management_Guide/Setting_up_IPA_Replicas.html&#34; target=&#34;_blank&#34;&gt;available here&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&#34;preparing-for-the-freeipa-replica&#34;&gt;Preparing for the FreeIPA Replica&lt;/h2&gt;

&lt;p&gt;Preparing the replica requires setting up the agreement documents on one of the IPA master servers.&lt;/p&gt;

&lt;pre&gt;$ ssh ipa7.example.com
..snip..

$ su -
Password: &lt;strong&gt;centos
&lt;/strong&gt;
# ipa-replica-prepare replica.example.com --ip-address 192.168.122.210
Directory Manager (existing master) password: &lt;strong&gt;manager72

&lt;/strong&gt;Preparing replica for replica.example.com from ipa.example.com
Creating SSL certificate for the Directory Server
Creating SSL certificate for the dogtag Directory Server
Creating SSL certificate for the Web Server
Exporting RA certificate
Copying additional files
Finalizing configuration
Packaging replica information into /var/lib/ipa/replica-info-replica.example.com.gpg
Adding DNS records for replica.example.com
Using reverse zone 122.168.192.in-addr.arpa.&lt;/pre&gt;

&lt;h2 id=&#34;copy-the-replica-gpg-data-to-the-new-replica&#34;&gt;Copy the Replica gpg Data to the New Replica&lt;/h2&gt;

&lt;p&gt;The data is now packaged and needs to be put on the replica. The simplest and most secure process is to scp the file directly to the replica. In some cases, this is not possible, and other methods may need to be employed.&lt;/p&gt;

&lt;pre&gt;# scp /var/lib/ipa/replica-info-replica.example.com.gpg root@192.168.122.210:
..snip..&lt;/pre&gt;

&lt;h2 id=&#34;install-the-replica&#34;&gt;Install the Replica&lt;/h2&gt;

&lt;p&gt;Once the agreements are created and moved to the new replica, it&amp;amp;#8217&amp;rsquo;s time to perform the install.&lt;/p&gt;

&lt;pre&gt;$ ssh root@192.168.122.210
root@192.168.122.210&#39;s password:&lt;/pre&gt;

&lt;p&gt;Ensure the replica can contact the master server. Additionally, make sure the replica&amp;amp;#8217&amp;rsquo;s ip address resolves locally. Modifying &lt;em&gt;/etc/hosts&lt;/em&gt; is the simplest solution.&lt;/p&gt;

&lt;pre&gt;# cat /etc/hosts
..snip..
192.168.122.210 replica.example.com
192.168.122.200 ipa7.example.com
..snip..&lt;/pre&gt;

&lt;p&gt;Set the hostname properly. If it isn&amp;amp;#8217&amp;rsquo;t, correct it by modifying &lt;em&gt;/etc/sysconfig/network&lt;/em&gt;.&lt;/p&gt;

&lt;pre&gt;# hostname
replica.example.com&lt;/pre&gt;

&lt;p&gt;Once all of the above is correct, it&amp;amp;#8217&amp;rsquo;s time to perform the installation itself. Since a replica is just a clone of another master, installing the same packages makes sense.&lt;/p&gt;

&lt;pre&gt;# yum install ipa-server bind-dyndb-ldap -y
..snip..&lt;/pre&gt;

&lt;p&gt;Next, perform the install. Consider options like &amp;ndash;setup-ca_ and &amp;ndash;setup-dns_ as optional, though very useful if those processes are going to be needed on the new replica.&lt;/p&gt;

&lt;pre&gt;# ipa-replica-install --setup-dns /root/replica-info-replica.example.com.gpg \
--no-forwarders --ip-address=192.168.122.210
Directory Manager (existing master) password: &lt;strong&gt;manager72&lt;/strong&gt;

Run connection check to master
Check connection from replica to remote master &#39;ipa7.example.com&#39;:
 Directory Service: Unsecure port (389): OK
 Directory Service: Secure port (636): OK
 Kerberos KDC: TCP (88): OK
 Kerberos Kpasswd: TCP (464): OK
 HTTP Server: Unsecure port (80): OK
 HTTP Server: Secure port (443): OK
 PKI-CA: Directory Service port (7389): OK

The following list of ports use UDP protocol and would need to be
checked manually:
 Kerberos KDC: UDP (88): SKIPPED
 Kerberos Kpasswd: UDP (464): SKIPPED

Connection from replica to master is OK.
Start listening on required ports for remote master check
Get credentials to log in to remote master
admin@CODEAURORA.ORG password: &lt;strong&gt;ipaadmin72&lt;/strong&gt;

Configuring NTP daemon (ntpd)
..snip..
Configuring directory server for the CA (pkids): Estimated time 30 seconds
..snip..
Done configuring directory server for the CA (pkids).
Configuring certificate server (pki-cad): Estimated time 3 minutes 30 seconds
..snip..
Done configuring certificate server (pki-cad).
Restarting the directory and certificate servers
Configuring directory server (dirsrv): Estimated time 1 minute
..snip..
Starting replication, please wait until this has completed.
Update in progress
..snip..
Update succeeded
..snip..
Done configuring directory server (dirsrv).
Configuring Kerberos KDC (krb5kdc): Estimated time 30 seconds
..snip..
Done configuring Kerberos KDC (krb5kdc).
Configuring kadmin
..snip..
Done configuring kadmin.
Configuring ipa_memcached
..snip..
Done configuring ipa_memcached.
Configuring the web interface (httpd): Estimated time 1 minute
..snip..
Done configuring the web interface (httpd).
Applying LDAP updates
Restarting the directory server
Restarting the KDC
Using reverse zone 122.168.192.in-addr.arpa.
Configuring DNS (named)
..snip..
Done configuring DNS (named).

Global DNS configuration in LDAP server is empty
You can use &#39;dnsconfig-mod&#39; command to set global DNS options that
would override settings in local named.conf files

Restarting the web server&lt;/pre&gt;

&lt;p&gt;At this point, the replica should start functioning. Since this is a FreeIPA server, make sure to allow successful logins. A reboot is a very good idea.&lt;/p&gt;

&lt;pre&gt;# authconfig --enablemkhomedir --update
..snip..
# chkconfig sssd on
..snip..
# init 6&lt;/pre&gt;

&lt;p&gt;Once rebooted, login with an existing user.&lt;/p&gt;

&lt;pre&gt;$ ssh replica.example.com
Warning: Permanently added &#39;replica.example.com&#39; (ECDSA) to the 
list of known hosts.
Creating home directory for herlo.
Last login: Fri Oct 22 12:27:44 2014 from 192.168.122.1
[herlo@replica ~]$ &lt;strong&gt;id&lt;/strong&gt;
uid=151600001(herlo) gid=151600001(herlo) groups=151600001(herlo)...&lt;/pre&gt;

&lt;p&gt;Assuming all works well, replication should be working.&lt;/p&gt;

&lt;p&gt;If all goes well, I&amp;amp;#8217&amp;rsquo;ll show how to install a client and enable sudo access in the next post.&lt;/p&gt;

&lt;p&gt;Cheers,&lt;/p&gt;

&lt;p&gt;herlo&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Introducing FreeIPA – Identity Management (IdM) Done Right!</title>
      <link>http://sexysexypenguins.com/2014/10/09/introducing-freeipa-identity-management-idm-done-right-2/</link>
      <pubDate>Fri, 10 Oct 2014 06:41:31 +0000</pubDate>
      <author>herlo1@gmail.com (herlo)</author>
      <guid>http://sexysexypenguins.com/2014/10/09/introducing-freeipa-identity-management-idm-done-right-2/</guid>
      <description>

&lt;p&gt;It has been a while since I&amp;amp;#8217&amp;rsquo;ve posted anything on this blog. It is high time I get something useful up here. Lucky for you, dear reader, I have a series of posts to share. Each of them about a new technical passion of mine, Identity Management.&lt;/p&gt;

&lt;p&gt;Many of you probably know of Active Directory. The all encompassing Identity Management solution from Microsoft. It&amp;rsquo;s is the most popular solution out there, and its got a good hold on the market, for sure. But with almost all things Microsoft comes closed source, GUI only management, and resentment among many.&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;m not saying that Active Directory does not do its job as an IdM solution. In fact, I think it&amp;rsquo;s a fine solution, if you want to have a proprietary solution, pay a ton of money yearly and not follow standards. In terms of Identity Management, however, it is a pretty good system overall.&lt;/p&gt;

&lt;p&gt;The thing is, closed source systems historically have more issues and delays for fixes long term. Until recently, however, there hasn&amp;amp;#8217&amp;rsquo;t been a reasonable open source solution for IdM. Enter FreeIPA, Identity Management done right.&lt;/p&gt;

&lt;h2 id=&#34;what-is-freeipa&#34;&gt;What is FreeIPA?&lt;/h2&gt;

&lt;p&gt;FreeIPA is a solution for managing users, groups, hosts, services, and much, much more. It uses open source solutions with some Python glue to make things work. Identity Management made easy for the Linux administrator.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;http://sexysexypenguins.com/
uploads/2014/10/ipa-components.png&#34;&gt;&lt;img class=&#34;alignleft  wp-image-1218&#34; src=&#34;http://sexysexypenguins.com/
uploads/2014/10/ipa-components-590x444.png&#34; alt=&#34;ipa-components&#34; width=&#34;383&#34; height=&#34;333&#34; /&gt;&lt;/a&gt;Inside FreeIPA are some common pieces; The Apache Web Server, BIND, 389DS, and MIT Kerberos. Additionally, Dogtag is used for certificate management, and sssd for client side configurations. Put that all together with some python glue, and you have FreeIPA.&lt;/p&gt;

&lt;p&gt;As you can see from the diagram, there is also an API which provides programmatic management via Web and Command Line interfaces. Additionally, many plugins exist. For example, one exists to set up trust agreements for replication to Active Directory. Additional functionality exists for managing Samba shares via users and groups in FreeIPA.&lt;/p&gt;

&lt;p&gt;It&amp;rsquo;s probably a good time to setup a FreeIPA server and show its power.&lt;/p&gt;

&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;

&lt;p&gt;Installing FreeIPA is simple on a Linux system. However, there are a few things needed. This installation is being performed on a fully updated CentOS 7.0 system. An entry in the /etc/hosts matching the server ip and hostname is useful. Additionally, make sure to set the hostname properly.&lt;/p&gt;

&lt;pre&gt;# &lt;strong&gt;echo 192.168.122.200 ipa7.example.com ipa7 &amp;gt;&amp;gt; /etc/hosts&lt;/strong&gt;
# &lt;strong&gt;echo ipa7.example.com &amp;gt; /etc/hostname&lt;/strong&gt;&lt;/pre&gt;

&lt;p&gt;We&amp;rsquo;ll be installing the server at this time, but there is a client install, which we&amp;rsquo;ll show in later posts. It&amp;rsquo;s recommended to use RHEL/CentOS &amp;gt;= 6.x or Fedora &amp;gt;= 14. Simply perform a yum install.&lt;/p&gt;

&lt;pre&gt;(rhel/centos) # &lt;strong&gt;yum install ipa-server&lt;/strong&gt;
(fedora) # &lt;strong&gt;yum install freeipa-server&lt;/strong&gt;
..snip..&lt;/pre&gt;

&lt;p&gt;Once the {free,}ipa-server package is installed. Run the install itself. Since FreeIPA can manage a dns server, a decision must be made. Here, we are going to choose to manage our internal dns with FreeIPA, which uses ldap via 389DS to store the records.&lt;/p&gt;

&lt;pre&gt;# &lt;strong&gt;yum install bind-dyndb-ldap&lt;/strong&gt;
..snip..
# &lt;strong&gt;ipa-server-install --setup-dns&lt;/strong&gt;
The log file for this installation can be found in /var/log/ipaserver-install.log
==============================================================================
This program will set up the IPA Server.

This includes:
 * Configure a stand-alone CA (dogtag) for certificate management
 * Configure the Network Time Daemon (ntpd)
 * Create and configure an instance of Directory Server
 * Create and configure a Kerberos Key Distribution Center (KDC)
 * Configure Apache (httpd)
 * Configure DNS (bind)

To accept the default shown in brackets, press the Enter key.

WARNING: conflicting time&amp;date synchronization service &#39;chronyd&#39; will be disabled
in favor of ntpd

Existing BIND configuration detected, overwrite? [no]: &lt;strong&gt;yes&lt;/strong&gt;&lt;/pre&gt;

&lt;p&gt;The installation explains the process and services which will be installed. Because we&amp;rsquo;re installing using DNS, some skeleton files exist. It&amp;rsquo;s safe to overwrite them and move forward.&lt;/p&gt;

&lt;p&gt;Next, define the server hostname, and the domain name (for DNS).&lt;/p&gt;

&lt;pre&gt;Enter the fully qualified domain name of the computer
on which you&#39;re setting up server software. Using the form
&amp;lt;hostname&amp;gt;.&amp;lt;domainname&amp;gt;
Example: master.example.com.


Server host name [ipa7.example.com]: &lt;strong&gt;ipa7.example.com&lt;/strong&gt;

Warning: skipping DNS resolution of host ipa7.example.com
The domain name has been determined based on the host name.

Please confirm the domain name [example.com]: &lt;strong&gt;example.com&lt;/strong&gt;&lt;/pre&gt;

&lt;p&gt;The next section covers the kerberos realm. This may seem confusing, but kerberos is one of the big powerhouses behind FreeIPA. It makes registering client systems very simple. Kerberos realm names are always in upper case. Usually, they emulate the domain name.&lt;/p&gt;

&lt;pre&gt;The kerberos protocol requires a Realm name to be defined.
This is typically the domain name converted to uppercase.

Please provide a realm name [EXAMPLE.COM]: &lt;strong&gt;EXAMPLE.COM&lt;/strong&gt;&lt;/pre&gt;

&lt;p&gt;Next, configure the passwords for the Directory Manager (for ldap administration) and the IPA admin user.&lt;/p&gt;

&lt;pre&gt;Certain directory server operations require an administrative user.
This user is referred to as the Directory Manager and has full access
to the Directory for system management tasks and will be added to the
instance of directory server created for IPA.
The password must be at least 8 characters long.

Directory Manager password: &lt;strong&gt;manager72&lt;/strong&gt;
Password (confirm): &lt;strong&gt;manager72&lt;/strong&gt;

The IPA server requires an administrative user, named &#39;admin&#39;.
This user is a regular system account used for IPA server administration.

IPA admin password: &lt;strong&gt;ipaadmin72&lt;/strong&gt;
Password (confirm): &lt;strong&gt;ipaadmin72&lt;/strong&gt;&lt;/pre&gt;

&lt;p&gt;Finally, the installer follows up with a request for more DNS info.&lt;/p&gt;

&lt;pre&gt;Do you want to configure DNS forwarders? [yes]: &lt;strong&gt;yes&lt;/strong&gt;
Enter the IP address of DNS forwarder to use, or press Enter to finish.
Enter IP address for a DNS forwarder: &lt;strong&gt;8.8.8.8&lt;/strong&gt;
DNS forwarder 8.8.8.8 added
Enter IP address for a DNS forwarder: &lt;strong&gt;8.8.4.4&lt;/strong&gt;
DNS forwarder 8.8.4.4 added
Enter IP address for a DNS forwarder: &lt;strong&gt;&amp;lt;enter&amp;gt;&lt;/strong&gt;
Do you want to configure the reverse zone? [yes]: &lt;strong&gt;yes&lt;/strong&gt;
Please specify the reverse zone name [122.168.192.in-addr.arpa.]: &lt;strong&gt;122.168.192.in-addr.arpa&lt;/strong&gt;
Using reverse zone 122.168.192.in-addr.arpa.&lt;/pre&gt;

&lt;p&gt;Now that all of the questions have been asked and answered. It&amp;rsquo;s time to let the installer do its thing. A verification step prints out all of the values entered. Make sure to review them carefully.&lt;/p&gt;

&lt;pre&gt;The IPA Master Server will be configured with:
Hostname: ipa7.example.com
IP address: 192.168.122.200
Domain name: example.com
Realm name: EXAMPLE.COM

BIND DNS server will be configured to serve IPA domain with:
Forwarders: 8.8.8.8, 8.8.4.4
Reverse zone: 122.168.192.in-addr.arpa.&lt;/pre&gt;

&lt;p&gt;Then, when ready, confirm the install and go grab a cup of joe. Installation takes anywhere from 10-30 minutes.&lt;/p&gt;

&lt;pre&gt;Continue to configure the system with these values? [no]: &lt;strong&gt;yes&lt;/strong&gt;

The following operations may take some minutes to complete.
Please wait until the prompt is returned.

Configuring NTP daemon (ntpd)
 [1/4]: stopping ntpd
 [2/4]: writing configuration
 [3/4]: configuring ntpd to start on boot
 [4/4]: starting ntpd
..snip..&lt;/pre&gt;

&lt;p&gt;When complete, the installation gives a bit of useful information. Make sure to open the ports within the firewall. This is beyond the scope here, and is left as an exercise for the reader.&lt;/p&gt;

&lt;pre&gt;Setup complete

Next steps:
    1. You must make sure these network ports are open:
        TCP Ports:
          * 80, 443: HTTP/HTTPS
          * 389, 636: LDAP/LDAPS
          * 88, 464: kerberos
          * 53: bind
        UDP Ports:
          * 88, 464: kerberos
          * 53: bind
          * 123: ntp

    2. You can now obtain a kerberos ticket using the command: &#39;kinit admin&#39;
       This ticket will allow you to use the IPA tools (e.g., ipa user-add)
       and the web user interface.

Be sure to back up the CA certificate stored in /root/cacert.p12
This file is required to create replicas. The password for this
file is the Directory Manager password&lt;/pre&gt;

&lt;p&gt;Now that everything is installed. One last simple configuration will help. To ensure users can login correctly, use &lt;em&gt;authconfig&lt;/em&gt; to ensure home directories are created. Followed by a quick reboot.&lt;/p&gt;

&lt;pre&gt;# &lt;strong&gt;authconfig --enablemkhomedir --update&lt;/strong&gt;
# &lt;strong&gt;chkconfig sssd on&lt;/strong&gt;
Note: Forwarding request to &#39;systemctl enable sssd.service&#39;.
# &lt;strong&gt;init 6&lt;/strong&gt;&lt;/pre&gt;

&lt;p&gt;Once the system has rebooted, point the browser to the newly installed FreeIPA service. Logging into FreeIPA can be done in two different ways; from the browser, or via kerberos. For now, login via the web browser as the admin user.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;http://sexysexypenguins.com/
uploads/2014/10/ipa-login1.png&#34;&gt;&lt;img class=&#34;alignleft wp-image-1220 size-medium&#34; src=&#34;http://sexysexypenguins.com/
uploads/2014/10/ipa-login1-590x320.png&#34; alt=&#34;&#34; width=&#34;590&#34; height=&#34;320&#34; srcset=&#34;http://sexysexypenguins.com/
uploads/2014/10/ipa-login1-590x320.png 590w, http://sexysexypenguins.com/
uploads/2014/10/ipa-login1.png 800w&#34; sizes=&#34;(max-width: 590px) 100vw, 590px&#34; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Once logged in, a useful configurations is necessary before adding users. Change the default shell for all users to &lt;strong&gt;/bin/bash&lt;/strong&gt;. This is done by choosing &lt;em&gt;IPA Server&lt;/em&gt; -&amp;gt; &lt;em&gt;Configuration&lt;/em&gt;. Once modified, click &lt;em&gt;Update&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;http://sexysexypenguins.com/
uploads/2014/10/ipa-config-shell.png&#34;&gt;&lt;img class=&#34;alignnone wp-image-1221&#34; src=&#34;http://sexysexypenguins.com/
uploads/2014/10/ipa-config-shell.png&#34; alt=&#34;ipa-config-shell&#34; width=&#34;401&#34; height=&#34;309&#34; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now it&amp;rsquo;s time to add a user. Choose the &lt;em&gt;Identity&lt;/em&gt; tab. Then click &lt;em&gt;Add&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;http://sexysexypenguins.com/
uploads/2014/10/ipa-user-add.png&#34;&gt;&lt;img class=&#34;alignnone wp-image-1222&#34; src=&#34;http://sexysexypenguins.com/
content/uploads/2014/10/ipa-user-add.png&#34; alt=&#34;ipa-user-add&#34; width=&#34;400&#34; height=&#34;188&#34; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clicking &lt;em&gt;Add and Edit&lt;/em&gt; presents the user&amp;rsquo;s data. This is useful for adding an ssh key.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;http://sexysexypenguins.com/
uploads/2014/10/ipa-user-sshkey.png&#34;&gt;&lt;img class=&#34;alignnone wp-image-1223&#34; src=&#34;http://sexysexypenguins.com/
uploads/2014/10/ipa-user-sshkey-590x256.png&#34; alt=&#34;ipa-user-sshkey&#34; width=&#34;401&#34; height=&#34;174&#34; srcset=&#34;http://sexysexypenguins.com/
uploads/2014/10/ipa-user-sshkey-590x256.png 590w, http://sexysexypenguins.com/
uploads/2014/10/ipa-user-sshkey.png 910w&#34; sizes=&#34;(max-width: 401px) 100vw, 401px&#34; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: Don&amp;rsquo;t forget to click &lt;em&gt;Update&lt;/em&gt; after setting the key.&lt;/p&gt;

&lt;p&gt;This should now allow ssh into the FreeIPA server as the new user. To make this possible, make sure the new FreeIPA server is configured as a resolver. The simplest way is to update the &lt;em&gt;/etc/resolv.conf&lt;/em&gt; file.&lt;/p&gt;

&lt;pre&gt;# &lt;strong&gt;cat /etc/resolv.conf&lt;/strong&gt;
search egavas.org
nameserver 192.168.122.200
..snip..

# &lt;strong&gt;host ipa7.example.com&lt;/strong&gt;
ipa7.example.com has address 192.168.122.200&lt;/pre&gt;

&lt;p&gt;Once the FreeIPA server is resolvable, ssh should now work.&lt;/p&gt;

&lt;pre&gt;[herlo@x220 ~]$ &lt;strong&gt;ssh ipa7.example.com&lt;/strong&gt;
The authenticity of host &#39;ipa7.example.com (192.168.122.200)&#39; can&#39;t be established.
ECDSA key fingerprint is 42:96:09:a7:1b:ac:df:dd:1c:de:73:2b:86:51:19:b1.
Are you sure you want to continue connecting (yes/no)? &lt;strong&gt;yes&lt;/strong&gt;
Warning: Permanently added &#39;ipa7.example.com&#39; (ECDSA) to the list of known hosts.
Creating home directory for herlo.
Last login: Fri Oct 10 02:27:44 2014 from 192.168.122.1
[herlo@ipa7 ~]$ &lt;strong&gt;id&lt;/strong&gt;
uid=151600001(herlo) gid=151600001(herlo) groups=151600001(herlo) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c102&lt;/pre&gt;

&lt;p&gt;Congratulations! The FreeIPA server is now configured. In the next post, I will cover how to configure a client system and setup centralized sudo.&lt;/p&gt;

&lt;p&gt;Cheers,&lt;/p&gt;

&lt;p&gt;herlo&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Changing the IP range for docker0</title>
      <link>http://sexysexypenguins.com/2014/05/07/changing-the-ip-range-for-docker0/</link>
      <pubDate>Wed, 07 May 2014 22:02:45 +0000</pubDate>
      <author>herlo1@gmail.com (herlo)</author>
      <guid>http://sexysexypenguins.com/2014/05/07/changing-the-ip-range-for-docker0/</guid>
      <description>&lt;p&gt;Lately, I&amp;rsquo;ve been tinkering a lot with docker. Mostly, I&amp;rsquo;ve been doing it for work at &lt;a href=&#34;https://linuxfoundation.org&#34;&gt;The Linux Foundation&lt;/a&gt;. But I do have a desire to have docker instances on my local box for distros which I do not run.&lt;/p&gt;

&lt;p&gt;While doing some testing for work on my personal laptop, I noticed that the network which docker uses for it&amp;rsquo;s bridge, aptly named &lt;em&gt;docker0&lt;/em&gt;, was in the same network as one of our VPNs.&lt;/p&gt;

&lt;pre&gt;# ip a s docker0
7: docker0: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 ...
 link/ether fe:54:00:18:1a:fd brd ff:ff:ff:ff:ff:ff
 inet 172.17.41.1/16 brd 10.100.72.255 scope global docker0
 ..snip..

# ip a s tun0
139: tun0: &amp;lt;POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP&amp;gt; mtu 1412 ...
    link/none 
    inet 172.17.123.32/24 brd 172.17.224.255 scope global tun0
       valid_lft forever preferred_lft forever&lt;/pre&gt;

&lt;p&gt;As you can tell, the &lt;em&gt;docker0&lt;/em&gt; network bridge covers all of the &lt;em&gt;tun0&lt;/em&gt; network. Any time I would attempt to ssh into one of the systems inside the VPN, it would time out. I was left wondering why for a few moments.&lt;/p&gt;

&lt;p&gt;Luckily, it&amp;rsquo;s very easy to fix this problem. All that is needed is a defined bridge for &lt;em&gt;docker0&lt;/em&gt; and to restart the docker service. Here&amp;rsquo;s what to do:&lt;/p&gt;

&lt;p&gt;First, stop docker:&lt;/p&gt;

&lt;pre&gt;# service docker stop
Redirecting to /bin/systemctl stop  docker.service&lt;/pre&gt;

&lt;p&gt;Next, create the network bridge file. You can choose any IP range you like. On Fedora 19, it looks like this:&lt;/p&gt;

&lt;pre&gt;# cat /etc/sysconfig/network-scripts/ifcfg-docker0 
DEVICE=&#34;docker0&#34;
TYPE=&#34;Bridge&#34;
ONBOOT=&#34;yes&#34;
NM_CONTROLLED=&#34;no&#34;
BOOTPROTO=&#34;static&#34;
IPADDR=10.100.72.254
NETMASK=255.255.255.0&lt;/pre&gt;

&lt;p&gt;Restart your network services.  &lt;strong&gt;NOTE:&lt;/strong&gt; &lt;em&gt;service network restart&lt;/em&gt; may be needed.&lt;/p&gt;

&lt;pre&gt;# service NetworkManager restart
Redirecting to /bin/systemctl restart  NetworkManager.service&lt;/pre&gt;

&lt;p&gt;The &lt;em&gt;docker0&lt;/em&gt; bridge should now be in a range outside the VPN.&lt;/p&gt;

&lt;pre&gt;# ip a s docker0
7: docker0: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 ...
    link/ether fe:54:00:18:1a:fd brd ff:ff:ff:ff:ff:ff
    inet 10.100.72.254/24 brd 10.100.72.255 scope global docker0&lt;/pre&gt;

&lt;p&gt;Starting new containers with docker should get IP addesses in the above range:&lt;/p&gt;

&lt;pre&gt;# service docker start
Redirecting to /bin/systemctl start  docker.service

# docker run -i -t herlo/fedora:20 /bin/bash
bash-4.2# ip a s eth0
141: eth0: &amp;lt;BROADCAST,UP,LOWER_UP&amp;gt; mtu 1412 ...
    link/ether fa:5f:e3:8d:61:f2 brd ff:ff:ff:ff:ff:ff
    inet 10.100.72.2/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::f85f:e3ff:fe8d:61f2/64 scope link 
       valid_lft forever preferred_lft forever&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;SUCCESS!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cheers,&lt;/p&gt;

&lt;p&gt;herlo&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Fedora Ambassadors Update: February 2013</title>
      <link>http://sexysexypenguins.com/2013/03/10/fedora-ambassadors-update-february-2013/</link>
      <pubDate>Mon, 11 Mar 2013 03:11:29 +0000</pubDate>
      <author>herlo1@gmail.com (herlo)</author>
      <guid>http://sexysexypenguins.com/2013/03/10/fedora-ambassadors-update-february-2013/</guid>
      <description>

&lt;h2 id=&#34;welcome-new-ambassadors&#34;&gt;Welcome New Ambassadors&lt;/h2&gt;

&lt;p&gt;We are happy to welcome our new sponsored Fedora Ambassador in February:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://fedoraproject.org/wiki/User:Jcarlosgarcia&#34;&gt;http://fedoraproject.org/wiki/User:Jcarlosgarcia&lt;/a&gt; mentored by lbazan&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://fedoraproject.org/wiki/User:Galoget&#34;&gt;http://fedoraproject.org/wiki/User:Galoget&lt;/a&gt; mentored by dbruno&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://fedoraproject.org/wiki/User:Lautb1ru&#34;&gt;http://fedoraproject.org/wiki/User:Lautb1ru&lt;/a&gt;  mentored by kaio&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://fedoraproject.org/wiki/User:Anishjp&#34;&gt;http://fedoraproject.org/wiki/User:Anishjp&lt;/a&gt; mentored by cmpahar&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://fedoraproject.org/wiki/User:Hagr182&#34;&gt;http://fedoraproject.org/wiki/User:Hagr182&lt;/a&gt; mentored by lbazan&lt;/li&gt;
&lt;/ul&gt;

&lt;div style=&#34;width: 570px&#34; class=&#34;wp-caption alignnone&#34;&gt;
  &lt;p class=&#34;wp-caption-text&#34;&gt;
    Mon Mar 11 02:53:08 2013 | Accounts: 624 | Inactive: 81 (12.98%)
  &lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;Cheers,&lt;/p&gt;

&lt;p&gt;herlo&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Fedora Ambassadors Update: January 2013</title>
      <link>http://sexysexypenguins.com/2013/02/07/fedora-ambassadors-update-january-2013/</link>
      <pubDate>Thu, 07 Feb 2013 20:36:25 +0000</pubDate>
      <author>herlo1@gmail.com (herlo)</author>
      <guid>http://sexysexypenguins.com/2013/02/07/fedora-ambassadors-update-january-2013/</guid>
      <description>

&lt;h2 id=&#34;welcome-new-ambassadors&#34;&gt;Welcome New Ambassadors&lt;/h2&gt;

&lt;p&gt;We are happy to welcome our new sponsored Fedora Ambassador in January:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://fedoraproject.org/wiki/User:Psylocke&#34;&gt;http://fedoraproject.org/wiki/User:Psylocke&lt;/a&gt; mentored by azneita&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://fedoraproject.org/wiki/User:Kaptk2&#34;&gt;http://fedoraproject.org/wiki/User:Kaptk2&lt;/a&gt; mentored by herlo&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://fedoraproject.org/wiki/User:Danniel&#34;&gt;http://fedoraproject.org/wiki/User:Danniel&lt;/a&gt; mentored by dbruno&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://fedoraproject.org/wiki/User:Surfistawagner&#34;&gt;http://fedoraproject.org/wiki/User:Surfistawagner&lt;/a&gt; mentored by dbruno&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://fedoraproject.org/wiki/User:Jamielinux&#34;&gt;http://fedoraproject.org/wiki/User:Jamielinux&lt;/a&gt; mentored by eischmann&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;fedora-ambassador-statistics&#34;&gt;Fedora Ambassador Statistics&lt;/h2&gt;

&lt;div&gt;
  &lt;div&gt;
    &lt;dl&gt;
      &lt;dt&gt;
        &lt;div style=&#34;width: 650px&#34; class=&#34;wp-caption alignnone&#34;&gt;
          &lt;p class=&#34;wp-caption-text&#34;&gt;
            Thu Feb 7 12:29:06 2013 | Accounts: 619 | Inactive: 81 | % inactive: 13.09
          &lt;/p&gt;
        &lt;/div&gt;
      &lt;/dt&gt;
    &lt;/dl&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Cheers,&lt;/p&gt;

&lt;p&gt;herlo&lt;/p&gt;

&lt;pre&gt;Yes, the announcement is behind this month. Moving into a new home will do that to you!&lt;/pre&gt;
</description>
    </item>
    
    <item>
      <title>FUDCon Lawrence: Day 1 Session Videos and More</title>
      <link>http://sexysexypenguins.com/2013/01/19/fudcon-lawrence-day-1-session-videos-and-more/</link>
      <pubDate>Sun, 20 Jan 2013 00:13:26 +0000</pubDate>
      <author>herlo1@gmail.com (herlo)</author>
      <guid>http://sexysexypenguins.com/2013/01/19/fudcon-lawrence-day-1-session-videos-and-more/</guid>
      <description>&lt;p&gt;While you might have &lt;a href=&#34;http://www.sparsebrain.com/2013/01/fudcon-2012-lawrence-ks-day-1.html&#34;&gt;seen&lt;/a&gt; &lt;a href=&#34;http://www.ryanlerch.org/blog/fudcon-photos-the-morning-of-day-1/&#34;&gt;the&lt;/a&gt; &lt;a href=&#34;http://www.ryanlerch.org/blog/the-morning-before-fudcon-2013/&#34;&gt;barrage&lt;/a&gt; &lt;a href=&#34;http://blog.chris.tylers.info/index.php?/archives/270-Why-the-Pi-is-Great-for-Teaching-and-Hacking.html&#34;&gt;of&lt;/a&gt; &lt;a href=&#34;http://borntobeopen.blogspot.com/2013/01/schedules-features-and-similar.html&#34;&gt;posts&lt;/a&gt; &lt;a href=&#34;http://blog.fedora-fr.org/shaiton/post/%5BLawrence-FUDCon%5D-Join-the-Websites-hackfest.-You-can-help!&#34;&gt;from&lt;/a&gt; &lt;a href=&#34;http://www.happyassassin.net/2013/01/18/fudcon-2013-day-1/&#34;&gt;Fedora&amp;rsquo;s&lt;/a&gt; &lt;a href=&#34;http://tirfa.com/fudcon-lawrence-2013-day-1.html&#34;&gt;FUDCon&lt;/a&gt; &lt;a href=&#34;http://www.ryanlerch.org/blog/fudcon-2013-photos-day-1-lightning-talks/&#34;&gt;Lawrence&lt;/a&gt; this &lt;a href=&#34;http://www.scrye.com/wordpress/nirik/2013/01/18/fudcon-lawerence-2013-day-1/&#34;&gt;weekend&lt;/a&gt;, you might not know that many sessions were streamed for your joy and enrichment.&lt;/p&gt;

&lt;p&gt;Here&amp;rsquo;s a list with links to the videos (all of them are on youtube):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=KcLptR8OwEo&#34;&gt;FUDCon Session Pitches&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=KcLptR8OwEo&amp;amp;t=53m20s&#34;&gt;Robyn&amp;rsquo;s &amp;lsquo;World Famous State of Fedora&amp;rsquo; Talk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=xkVb7X6YO4I&#34;&gt;ARM to primary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=xkVb7X6YO4I&amp;amp;t=49m00s&#34;&gt;ARM Building Exercises&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=cK9nrvkrWjM&amp;amp;t=01m40s&#34;&gt;Overhauling the Fedora release model&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=cK9nrvkrWjM&amp;amp;t=61m34s&#34;&gt;State of Fedora security&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=cK9nrvkrWjM&amp;amp;t=125m00s&#34;&gt;An intro to the new Fedora 18 installer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.youtube.com/watch?v=J255Sud4rDI&#34;&gt;Ansible (config command control and rpc)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.youtube.com/watch?v=J255Sud4rDI&amp;amp;t=60m48s&#34;&gt;The Blocker and NTH Process&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.youtube.com/watch?v=J255Sud4rDI&amp;amp;t=122m48s&#34;&gt;Secure Linux Containers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.youtube.com/watch?v=J255Sud4rDI&amp;amp;t=60m48s&#34;&gt;Fedora Spins and Formulas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=beYGjVE7K_M&#34;&gt;Pulp (Repository management, yum, puppet, others) – Part 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=ngetMk9RRt0&#34;&gt;Pulp (Repository management, yum, puppet, others) – Part 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=hMNIGgP5v1U&amp;amp;t=01m10s&#34;&gt;FedMsg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=hMNIGgP5v1U&amp;amp;t=64m30s&#34;&gt;Micro-web framework, unit tests, web-app maintainability&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=hMNIGgP5v1U&amp;amp;t=119m40s&#34;&gt;FEL, a little intro to the electronic world with Fedora&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enjoy,&lt;/p&gt;

&lt;p&gt;herlo&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>FUDCon Lawrence Hackfest: GPG SmartCard Configuration</title>
      <link>http://sexysexypenguins.com/2013/01/06/fudcon-lawrence-hackfest-gpg-smartcard-configuration/</link>
      <pubDate>Mon, 07 Jan 2013 03:31:08 +0000</pubDate>
      <author>herlo1@gmail.com (herlo)</author>
      <guid>http://sexysexypenguins.com/2013/01/06/fudcon-lawrence-hackfest-gpg-smartcard-configuration/</guid>
      <description>

&lt;p&gt;As I&amp;rsquo;ve been working at my new job at the &lt;a href=&#34;http://www.linuxfoundation.org/&#34;&gt;Linux Foundation&lt;/a&gt;, we have been &lt;a href=&#34;https://github.com/mricon/totp-cgi&#34;&gt;implementing quite a bit of two-factor authentication&lt;/a&gt;. In fact, back in November, &lt;a href=&#34;https://fedoraproject.org/wiki/FAD_Infrastructure_Security_2012&#34;&gt;Fedora implemented two-factor authentication for sudo at the Security FAD&lt;/a&gt;. I was there and helped setup the clients and did some testing.&lt;/p&gt;

&lt;p&gt;While I was there, I had another agenda item, &lt;a href=&#34;https://github.com/herlo/ssh-gpg-smartcard-config/blob/master/README.rst&#34;&gt;creating a HOWTO for enabling a GPG SmartCard for use with SSH&lt;/a&gt;. Of course, the SmartCard can be used for both encryption and signing as well.&lt;/p&gt;

&lt;p&gt;After finishing that HOWTO, I was talking about it with a few people within Fedora, and there seemed to be quite a bit of interest. It turns out there was quite a bit of interest, so I&amp;rsquo;ve decided to do a hackfest on &lt;a href=&#34;http://fedoraproject.org/wiki/FUDCon:Lawrence_2013#Hackfests_.28Saturday_and_Sunday.29&#34;&gt;Saturday at FUDCon&lt;/a&gt; to help move people over to GPG SmartCards. This is also going to be quite nice in that there will be a &lt;a href=&#34;http://fedoraproject.org/wiki/FUDCon:Lawrence_2013_GPG_Key_Signing_Event&#34;&gt;GPG key signing event&lt;/a&gt; after this hackfest.&lt;/p&gt;

&lt;h3 id=&#34;come-prepared-equipment-required&#34;&gt;Come Prepared – Equipment Required&lt;/h3&gt;

&lt;p&gt;It&amp;rsquo;s important you come prepared! If you have ever had interest in this sort of thing, there&amp;rsquo;s time to get equipment for the hackfest. Here&amp;rsquo;s what you need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SmartCard Reader, any will do. I recommend the &lt;a href=&#34;http://shop.kernelconcepts.de/product_info.php?cPath=1_26&amp;amp;products_id=119&#34;&gt;Gemalto USB Shell Token V2 from kernelconcepts.de&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;An OpenPGP SmartCard. Several vendors have them. I recommend the &lt;a href=&#34;http://shop.kernelconcepts.de/product_info.php?products_id=42&amp;amp;osCsid=101f6f90ee89ad616d2eca1b31dff757&#34;&gt;OpenPGP SmartCard V2 from kernelconcepts.de&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both pieces are required. &lt;strong&gt;Order ASAP,&lt;/strong&gt; it takes about 10 days to ship. Consider even shipping to the FUDCon hotel if you are concerned or late. I know Petra will work hard to deliver them as fast as possible.&lt;/p&gt;

&lt;h3 id=&#34;doing-a-little-prep-work&#34;&gt;Doing a Little Prep Work&lt;/h3&gt;

&lt;p&gt;If you get your Token and SmartCard before FUDCon Lawrence and have a few spare minutes, feel free to read through my HOWTO. If you get through it, come to the hackfest and help others who might not have had time.&lt;/p&gt;

&lt;p&gt;Cheers,&lt;/p&gt;

&lt;p&gt;herlo&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>GoOSe Linux 6.0 Beta Release Candidate 5 (RC5) Now Available!</title>
      <link>http://sexysexypenguins.com/2012/12/21/goose-linux-6-0-beta-release-candidate-5-rc5-now-available/</link>
      <pubDate>Sat, 22 Dec 2012 06:03:32 +0000</pubDate>
      <author>herlo1@gmail.com (herlo)</author>
      <guid>http://sexysexypenguins.com/2012/12/21/goose-linux-6-0-beta-release-candidate-5-rc5-now-available/</guid>
      <description>&lt;p&gt;The hope was to make a Golden GoOSe available for Christmas, but it didn&amp;rsquo;t work. Oh well, here&amp;rsquo;s another release candidate!&lt;/p&gt;

&lt;p&gt;GoOSe Linux 6.0 Beta Release Candidate 5 (RC5) is now available for testing. Visit &lt;a href=&#34;http://get.gooseproject.org/&#34; target=&#34;_blank&#34;&gt;&lt;a href=&#34;http://get.gooseproject.org/&#34;&gt;http://get.gooseproject.org/&lt;/a&gt;&lt;/a&gt; to obtain the download.&lt;/p&gt;

&lt;p&gt;Once you arrive at the above link, the downloads are under /releases/6.0/Beta-RC5/GoOSe/&lt;arch&gt;/.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;http://github.com/organizations/gooseproject/&#34;&gt;The GoOSe Project&lt;/a&gt; is always interested in feedback around its project. Please feel free to drop us a line about this release.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Comments/Questions&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;address&gt;
  Send us an email &lt;a href=&#34;mailto:goose-linux@googlegroups.com&#34;&gt;goose-linux@googlegroups.com&lt;/a&gt;
&lt;/address&gt;&lt;/li&gt;

&lt;li&gt;&lt;address&gt;
  Contact us on irc.freenode.net at #gooseproject
&lt;/address&gt;&lt;/li&gt;

&lt;li&gt;&lt;address&gt;
  Leave a comment on this blog post
&lt;/address&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;**Issues with GoOSe 6.0&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;p&gt;If you find yourself having trouble installing, using or managing GoOSe Linux, please let us know. The best way is to &lt;a href=&#34;https://github.com/gooseproject/main/issues/new&#34;&gt;file issues&lt;/a&gt; at our &lt;a href=&#34;https://github.com/gooseproject/main&#34;&gt;main project site on github&lt;/a&gt;, but we&amp;rsquo;re happy to have the information in any of the ways listed above.&lt;/p&gt;

&lt;p&gt;Testing can be done by anyone. Please feel free to check our &lt;a href=&#34;https://github.com/gooseproject/main/wiki/testing-releases&#34;&gt;new testing wiki page&lt;/a&gt; for information on what tests need to be run and which have already passed. If you have interest in helping us test, thank you, thank you, thank you for the help!&lt;/p&gt;

&lt;p&gt;GoOSe Beta-RC5 will be available for 1 week from today. At such time the GoOSe team will decide whether it will be the first Golden GoOSe release. This will be based upon feedback provided, so please do tell us what you think!&lt;/p&gt;

&lt;p&gt;Cheers,&lt;/p&gt;

&lt;p&gt;herlo&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>GoOSe Linux 6.0 Beta Release Candidate 4 (RC4) Now Available!</title>
      <link>http://sexysexypenguins.com/2012/12/14/goose-linux-6-0-beta-release-candidate-4-rc4-now-available/</link>
      <pubDate>Fri, 14 Dec 2012 16:49:37 +0000</pubDate>
      <author>herlo1@gmail.com (herlo)</author>
      <guid>http://sexysexypenguins.com/2012/12/14/goose-linux-6-0-beta-release-candidate-4-rc4-now-available/</guid>
      <description>&lt;p&gt;GoOSe Linux 6.0 Beta Release Candidate 4 (RC4) is now available for testing. Visit &lt;a href=&#34;http://get.gooseproject.org/&#34; target=&#34;_blank&#34;&gt;&lt;a href=&#34;http://get.gooseproject.org/&#34;&gt;http://get.gooseproject.org/&lt;/a&gt;&lt;/a&gt; to obtain the download.&lt;/p&gt;

&lt;p&gt;Once you arrive at the above link, the downloads are under /releases/6.0/Beta-RC4/GoOSe/&lt;arch&gt;/.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;http://github.com/organizations/gooseproject/&#34;&gt;The GoOSe Project&lt;/a&gt; is always interested in feedback around its project. Please feel free to drop us a line about this release.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Comments/Questions&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;address&gt;
  Send us an email &lt;a href=&#34;mailto:goose-linux@googlegroups.com&#34;&gt;goose-linux@googlegroups.com&lt;/a&gt;
&lt;/address&gt;&lt;/li&gt;

&lt;li&gt;&lt;address&gt;
  Contact us on irc.freenode.net at #gooseproject
&lt;/address&gt;&lt;/li&gt;

&lt;li&gt;&lt;address&gt;
  Leave a comment on this blog post
&lt;/address&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;**Issues with GoOSe 6.0&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;p&gt;If you find yourself having trouble installing, using or managing GoOSe Linux, please let us know. The best way is to &lt;a href=&#34;https://github.com/gooseproject/main/issues/new&#34;&gt;file issues&lt;/a&gt; at our &lt;a href=&#34;https://github.com/gooseproject/main&#34;&gt;main project site on github&lt;/a&gt;, but we&amp;rsquo;re happy to have the information in any of the ways listed above.&lt;/p&gt;

&lt;p&gt;GoOSe Beta-RC4 will be available for 2 weeks from today. At such time the GoOSe team will decide whether it will be the first Golden GoOSe release. This will be based upon feedback provided, so please do tell us what you think!&lt;/p&gt;

&lt;p&gt;Cheers,&lt;/p&gt;

&lt;p&gt;herlo&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Fedora Ambassadors Update: November 2012</title>
      <link>http://sexysexypenguins.com/2012/12/02/fedora-ambassadors-update-november-2012/</link>
      <pubDate>Sun, 02 Dec 2012 17:40:31 +0000</pubDate>
      <author>herlo1@gmail.com (herlo)</author>
      <guid>http://sexysexypenguins.com/2012/12/02/fedora-ambassadors-update-november-2012/</guid>
      <description>

&lt;h2 id=&#34;welcome-new-ambassadors&#34;&gt;Welcome New Ambassadors&lt;/h2&gt;

&lt;p&gt;We are happy to welcome our new sponsored Fedora Ambassadors in November:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://fedoraproject.org/wiki/User:Mhayden&#34;&gt;http://fedoraproject.org/wiki/User:Mhayden&lt;/a&gt; mentored by herlo&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://fedoraproject.org/wiki/User:Nsglynn&#34;&gt;https://fedoraproject.org/wiki/User:Nsglynn&lt;/a&gt; mentored by fab&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://fedoraproject.org/wiki/User:Juranir&#34;&gt;https://fedoraproject.org/wiki/User:Juranir&lt;/a&gt; mentored by dbruno&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://fedoraproject.org/wiki/User:Edtomasa&#34;&gt;https://fedoraproject.org/wiki/User:Edtomasa&lt;/a&gt; mentored by azneita&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://fedoraproject.org/wiki/User:Cardero&#34;&gt;https://fedoraproject.org/wiki/User:Cardero&lt;/a&gt; mentored by lbazan&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://fedoraproject.org/wiki/User:Mayorgalinux&#34;&gt;https://fedoraproject.org/wiki/User:Mayorgalinux&lt;/a&gt; mentored by lbazan&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;fedora-ambassador-statistics&#34;&gt;Fedora Ambassador Statistics&lt;/h2&gt;

&lt;div&gt;
  &lt;div style=&#34;width: 570px&#34; class=&#34;wp-caption alignnone&#34;&gt;
    &lt;p class=&#34;wp-caption-text&#34;&gt;
      Sun Dec 2 10:19:18 2012 | Approved: 616 | Inactive: 82 | % inactive: 13.31
    &lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Cheers,&lt;/p&gt;

&lt;p&gt;Herlo&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Fedora Security FAD: The Results</title>
      <link>http://sexysexypenguins.com/2012/12/01/fedora-security-fad-the-results/</link>
      <pubDate>Sat, 01 Dec 2012 17:20:03 +0000</pubDate>
      <author>herlo1@gmail.com (herlo)</author>
      <guid>http://sexysexypenguins.com/2012/12/01/fedora-security-fad-the-results/</guid>
      <description>&lt;p&gt;Well, I think it was quite successful. Probably the most successful Fedora Activity Day I&amp;rsquo;ve attended. Many things were accomplished toward the goal of two-factor authentication within Fedora Infrastructure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Installed and configured &lt;a href=&#34;https://github.com/mricon/totp-cgi/&#34;&gt;totpcgi&lt;/a&gt; authentication on the staging environment. This performs the verification from the clients. There will be several servers doing authentication to prevent a single point of failure.&lt;/li&gt;
&lt;li&gt;Installed and configured &lt;a href=&#34;https://fedorahosted.org/pam_url/&#34;&gt;pam_url&lt;/a&gt; on each staging client with the intent of connecting to the authentication servers.&lt;/li&gt;
&lt;li&gt;Enabled &lt;a href=&#34;http://www.yubico.com/products/yubikey-hardware/yubikey/&#34;&gt;yubikey&lt;/a&gt; as an alternate second factor.&lt;/li&gt;
&lt;li&gt;Reviewed RPMs for &lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=880842&#34;&gt;pam_url&lt;/a&gt; and &lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=880863&#34;&gt;totpcgi&lt;/a&gt; (and a few others to help along the way)&lt;/li&gt;
&lt;li&gt;Setup the totpcgi provisioning web page for google authenticator&lt;/li&gt;
&lt;li&gt;Fixed fun bugs in pam_url&lt;/li&gt;
&lt;li&gt;Wrote &lt;a href=&#34;http://infrastructure.fedoraproject.org/infra/docs/2-factor.txt&#34;&gt;documentation on how to setup authentication&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A few things were accomplished that were not part of the goals, but good stuff nonetheless:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enjoyed some awesome &lt;a href=&#34;http://bukuraleigh.com/buku/&#34;&gt;tapas at Buku&lt;/a&gt; (a restaurant is at the base of the Red Hat Tower)&lt;/li&gt;
&lt;li&gt;Found the &lt;a href=&#34;http://smoogespace.blogspot.com/2012/11/fedora-activity-day-0.html&#34;&gt;open source cow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Documented the setup of the &lt;a href=&#34;https://github.com/herlo/ssh-gpg-smartcard-config&#34;&gt;OpenPGP SmartCard with gpg-agent and GNOME 3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Watched &lt;a href=&#34;https://plus.google.com/100952077644304838223/posts/bEWVstsVLtm&#34;&gt;Seth Vidal do some Beastie Boys&lt;/a&gt;!&lt;/li&gt;
&lt;li&gt;Enjoyed some &lt;a href=&#34;http://www.gravyraleigh.com/&#34;&gt;yummy dinner at Gravy&lt;/a&gt; (thanks to Ruth Suehle and Red Hat)&lt;/li&gt;
&lt;li&gt;Discussed some ideas for FUDCon Lawrence and the future of FUDCons&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While I didn&amp;rsquo;t participate in all of the above activities, I was definitely involved in many of them. It turns out, everyone there was fairly involved at the FAD. It was fun to watch everyone come together to solve this issue. Everyone seemed to have a good sense of satisfaction accomplishing the goals.&lt;/p&gt;

&lt;p&gt;Cheers,&lt;/p&gt;

&lt;p&gt;herlo&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>