{"id":252,"date":"2013-02-15T14:42:00","date_gmt":"2013-02-15T14:42:00","guid":{"rendered":"https:\/\/www.simplybusiness.co.uk\/install-all-the-things-a-capistrano-extension-to-run-puppet\/"},"modified":"2024-05-29T18:43:28","modified_gmt":"2024-05-29T18:43:28","slug":"install-all-the-things-a-capistrano-extension-to-run-puppet","status":"publish","type":"post","link":"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet","title":{"rendered":"Install All The Things!: a Capistrano extension to run Puppet"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">If you use Capistrano to deploy applications onto Unix systems you may find our new tool&nbsp;<a href=\"https:\/\/github.com\/simplybusiness\/capistrano-ext-puppetize\" target=\"_blank\" rel=\"noreferrer noopener\" rel=\"noopener noreferrer\" target=\"_blank\">Capistrano-ext-puppetize<\/a>&nbsp;useful.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"225\" src=\"https:\/\/www.simplybusiness.co.uk\/wp-content\/uploads\/sites\/3\/2024\/05\/things.webp?w=300\" alt=\"things\" class=\"wp-image-9669\" srcset=\"https:\/\/www.simplybusiness.co.uk\/wp-content\/uploads\/sites\/3\/2024\/05\/things.webp 300w, https:\/\/www.simplybusiness.co.uk\/wp-content\/uploads\/sites\/3\/2024\/05\/things.webp?resize=150,113 150w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Now instead of having to prepare your deployment host beforehand with all the third party libraries and tools it might need (Ruby interpreter, databases, development libraries, ImageMagick, redis, etc) you can keep a Puppet manifest alongside your codebase in a Git repository, and apply it automatically every time you deploy.&nbsp; The benefits are twofold:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\">It&#8217;s now a single step to deploy an entire application and all its dependencies onto a very-nearly-empty generic OS image (needs only Puppet and ssh and your-choice-of-version-control-system)<\/li>\n\n\n\n<li class=\"wp-block-list-item\">Your code and your Puppet manifest are in the same repository, meaning that every time you deploy, your OS environment gets updated to match the requirements of that version of your app: if upgrades, downgrades and different branches need different libraries or different third party apps, that&#8217;s all handled without your having to think about it<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">To use capistrano-ext-puppetize in your project, add it to the&nbsp;<code>Gemfile<\/code>&nbsp;or&nbsp;<code>config\/deploy.rb<\/code>&nbsp;if you&#8217;re using that), and then create a manifest in&nbsp;<code>config\/puppet\/manifests\/site.pp<\/code>&nbsp;containing the things you need installed. More comprehensive instructions are available in the&nbsp;<a href=\"https:\/\/github.com\/simplybusiness\/capistrano-ext-puppetize\/blob\/master\/README.md\" target=\"_blank\" rel=\"noreferrer noopener\" rel=\"noopener noreferrer\" target=\"_blank\">README on GitHub<\/a>&nbsp;&#8211; if you only want to use it, stop reading this and read that instead. If you want to find out how it was put together, read on.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">capistrano-ext-puppetize, The Making Of<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">CEP grew out of some work we did to migrate our platform to a new &#8220;cloud&#8221; hosting provider. We wanted to automate building our servers from scratch starting with a generic base image. Having settled on &#8220;masterless Puppet&#8221; as a general approach&nbsp;<a target=\"_blank\" rel=\"noreferrer noopener\" href=\"http:\/\/bitfieldconsulting.com\/scaling-puppet-with-distributed-version-control\" rel=\"noopener noreferrer\" target=\"_blank\">here see some reasons that puppetmaster is not a good fit for our requirement<\/a>, this left us with a couple of questions:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\">How do we get the Puppet config onto the boxes?<\/li>\n\n\n\n<li class=\"wp-block-list-item\">How do we ensure it&#8217;s the right version of the config for the version we&#8217;re deploying?<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The simplest way to answer the second question is to keep the config alongside the app in the same git repository where it can be branched, merged, tagged, pulled, pushed, filed, stamped,&nbsp;<a href=\"https:\/\/www.youtube.com\/watch?v=9AL7npkSXZE\" target=\"_blank\" rel=\"noreferrer noopener\" rel=\"noopener noreferrer\" target=\"_blank\">indexed, briefed, debriefed and numbered<\/a>&nbsp;This happily and conveniently solves a good chunk of the first question too, as all the Puppet files will be installed with the app by Capistrano&#8217;s&nbsp;<code>deploy:update_code<\/code>&nbsp;recipe. CEP is in essence, an&nbsp;<code>after<\/code>&nbsp;hook for&nbsp;<code>deploy:update_code<\/code>&nbsp;that shells into the deployed host and runs&nbsp;<code>puppet apply<\/code>. Easy, right?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In practice it&#8217;s a little more complicated than it is in theory (this maxim seems to be generally applicable to Devops, and possibly also to life), though not by much. The first consideration is that we want to use files and templates and modules and stuff, so it&#8217;s not really&nbsp;<code>puppet apply<\/code>&nbsp;we&#8217;re running, it&#8217;s something more like<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-d95a0bd8398d68be76635d44c7360b89\" style=\"border-radius:10px;padding-top:var(--wp--preset--spacing--20);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--30)\"><code>puppet apply --modulepath=$PROJECT_DIR\/config\/puppet\/modules:$PROJECT_DIR\/config\/puppet\/vendor\/modules --templatedir=$PROJECT_DIR\/config\/puppet\/templates --fileserverconfig=$PROJECT_DIR\/config\/puppet\/fileserver.conf $PROJECT_DIR\/config\/puppet\/manifests\/site.pp<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Given that we quite likely want to apply the Puppet manifest at times other than deploy, such as when the box is booted or at scheduled intervals to make sure that unmanaged interactive changes are reported and reverted, CEP deals with this by creating a shell script&nbsp;<code>\/etc\/puppet\/apply<\/code>&nbsp;which invokes Puppet with all the options.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The second requirement is that we really would like our manifests to be able to do different things depending on the role (web, app, db, etc) and environment (staging, production, etc.) of the server they&#8217;re running on. The traditional Puppet way of doing this is to make it dependent on the hostname, but obviously that&#8217;s not going to fly when we&#8217;re using Puppet to provision the host from a base OS install, as it&#8217;s grabbed an IP address from DHCP and doesn&#8217;t have a meaningful hostname. But we do have this data in Capistrano, so what if we export our Capistrano variables as Puppet facts?<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.tech.sb\/\" target=\"_blank\" rel=\"noreferrer noopener\" rel=\"noopener noreferrer\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"256\" src=\"https:\/\/www.simplybusiness.co.uk\/wp-content\/uploads\/sites\/3\/2024\/05\/sb-tech-site-technology.webp?w=768\" alt=\"sb-tech-site-technology\" class=\"wp-image-9605\" srcset=\"https:\/\/www.simplybusiness.co.uk\/wp-content\/uploads\/sites\/3\/2024\/05\/sb-tech-site-technology.webp 768w, https:\/\/www.simplybusiness.co.uk\/wp-content\/uploads\/sites\/3\/2024\/05\/sb-tech-site-technology.webp?resize=150,50 150w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Consulting the&nbsp;<a href=\"http:\/\/docs.puppetlabs.com\/guides\/custom_facts.html\" target=\"_blank\" rel=\"noreferrer noopener\" rel=\"noopener noreferrer\" target=\"_blank\">official Puppet documentation<\/a>&nbsp;on how to create your own facts may leave you under the impression that it requires writing Ruby files, putting them in Puppet modules and indulging in various kinds of gymnastics to get those modules from the puppetmaster onto clients. Happily there is an easier way, as described in the&nbsp;<a href=\"http:\/\/www.puppetcookbook.com\/posts\/override-a-facter-fact.html\" target=\"_blank\" rel=\"noreferrer noopener\" rel=\"noopener noreferrer\" target=\"_blank\">Puppet Cookbook<\/a>: you can simply define a shell environment variable&nbsp;<code>FACTER_foo<\/code>&nbsp;to make the&nbsp;<code>$foo<\/code>&nbsp;fact available to manifests. Coupling this with a bit of Capistrano internals poking and some random &#8220;why does it keep asking for a password?&#8221; head-scratching, we arrived at the following in&nbsp;<a href=\"https:\/\/github.com\/simplybusiness\/capistrano-ext-puppetize\/tree\/master\/lib\/capistrano\/puppetize\" target=\"_blank\" rel=\"noreferrer noopener\" rel=\"noopener noreferrer\" target=\"_blank\">our Capistrano recipe<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-b4ab057ea2115586fdf26f223f7544b0\" style=\"border-radius:10px;padding-top:var(--wp--preset--spacing--20);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--30)\"><code># Export capistrano variables as Puppet facts so that the\n# site.pp manifest can make decisions on what to install based\n# on its role and environment. We only export string variables\n# -- not class instances, procs, and other outlandish values\n\nfacts = variables.find_all { |k, v| v.is_a?(String) }.map {|k, v| \"FACTER_cap_#{k}=#{v.inspect}\" }.join(\" \")<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">The password-prompt puzzlement was precipitated by procs. Capistrano allows variables whose values are procs, which are lazily evaluated on demand. Forcing the evaluation of all variables here, as we originally did, is not a good idea because some of them prompt for passwords and if they&#8217;re not passwords you&nbsp;<strong>needed<\/strong>&nbsp;to know, you&#8217;ve just broken the ability to walk away and get a coffee while you&#8217;re deploying. Hence the&nbsp;<code>is_a?(String)<\/code>&nbsp;criterion to filter these things out.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Vagrancy<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">It is of course, a complete dog to test your manifests this way, as each change requires a git commit and a push to whatever upstream Capistrano is set to pull from. That&#8217;s why we also have a&nbsp;<code>puppet:install_vagrant<\/code>&nbsp;recipe. This is basically a hack we use for testing with&nbsp;<a href=\"http:\/\/www.vagrantup.com\/\" target=\"_blank\" rel=\"noreferrer noopener\" rel=\"noopener noreferrer\" target=\"_blank\">Vagrant<\/a>&nbsp;on VirtualBox. It writes&nbsp;<code>\/etc\/puppet\/vagrant-apply<\/code>&nbsp;which looks just like the real&nbsp;<code>apply<\/code>&nbsp;script except that all the pathnames point to&nbsp;<code>\/vagrant<\/code>. In a Vagrant VM this is a&nbsp;<a href=\"http:\/\/docs.vagrantup.com\/v1\/docs\/getting-started\/ssh.html#accessing_the_project_files\" target=\"_blank\" rel=\"noreferrer noopener\" rel=\"noopener noreferrer\" target=\"_blank\">shared folder<\/a>&nbsp;that points to your project directory, so you can change your Puppet syntax and see the effect immediately.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Miscellany<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">CEP has entertaining interactions with rvm-capistrano, which are described in lurid detail in the README. It expects to find the various kinds of Puppet config in&nbsp;<code>Config\/puppet\/{manifests\/site.pp,modules,vendor\/modules,templates,files}<\/code><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\">there will almost certainly will be some configuration options for this in a future version. It doesn&#8217;t do anything with the Puppet &#8220;Module Forge&#8221; system, because nobody here has got their head around that &#8211; instead, we use git submodules to arrange that third-party Puppet bits appear under&nbsp;<code>config\/puppet\/vendor\/modules<\/code>. Git submodules are of course the second worst system ever invented for doing this kind of thing, but all the others that we&#8217;ve seen are still tied for first place. It works for us.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">As always, YMMV.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Feel free to comment on how you find using it!<\/p>\n\n\n\n<div class=\"wp-block-group alignwide has-azure-200-background-color has-background has-global-padding is-layout-constrained wp-container-core-group-is-layout-94e519ba wp-block-group-is-layout-constrained\" style=\"padding-top:var(--wp--preset--spacing--80);padding-right:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--80);padding-left:var(--wp--preset--spacing--40)\">\n<h3 class=\"wp-block-heading has-text-align-center\">Ready to start your career at Simply Business?<\/h3>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">Want to know more about what it&#8217;s like to work in tech at Simply Business? Read about our approach to tech, then check out our current vacancies.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-a89b3969 wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button has-custom-font-size has-medium-font-size\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/www.simplybusiness.co.uk\/about-us\/careers\/tech\/\">Find out more<\/a><\/div>\n<\/div>\n<\/div>\n\n\n\n<div id=\"newsletter-subscribe\" class=\"wp-block-group newsletter-subscribe is-layout-flow wp-block-group-is-layout-flow\" style=\"border-top-color:#cccccc;border-top-width:1px;padding-top:var(--wp--preset--spacing--80);padding-right:0;padding-bottom:var(--wp--preset--spacing--80);padding-left:0\">\n<p class=\"has-text-align-center has-dark-800-color has-text-color has-link-color has-medium-font-size wp-elements-3f9fd1b23ae58c66d5a95fbc7e773846 wp-block-paragraph\" style=\"margin-bottom:var(--wp--preset--spacing--50)\">Keep up to date with Simply Business. Subscribe to our monthly newsletter and follow us on social media.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-222c5d1d wp-block-buttons-is-layout-flex\" style=\"margin-bottom:var(--wp--preset--spacing--50)\">\n<div class=\"wp-block-button is-style-outline has-size-medium is-style-outline--1\"><a class=\"wp-block-button__link wp-element-button\" href=\"\/about-us\/newsletter-signup\">Subscribe to our newsletter<\/a><\/div>\n<\/div>\n\n\n\n<ul class=\"wp-block-social-links has-small-icon-size is-style-logos-only is-content-justification-center is-layout-flex wp-container-core-social-links-is-layout-a89b3969 wp-block-social-links-is-layout-flex\"><li class=\"wp-social-link wp-social-link-facebook  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/www.facebook.com\/simplybusiness\" class=\"wp-block-social-link-anchor\" rel=\"noopener noreferrer\" target=\"_blank\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Follow Simply Business on Facebook<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-x  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/www.x.com\/simplybusiness\" class=\"wp-block-social-link-anchor\" rel=\"noopener noreferrer\" target=\"_blank\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M13.982 10.622 20.54 3h-1.554l-5.693 6.618L8.745 3H3.5l6.876 10.007L3.5 21h1.554l6.012-6.989L15.868 21h5.245l-7.131-10.378Zm-2.128 2.474-.697-.997-5.543-7.93H8l4.474 6.4.697.996 5.815 8.318h-2.387l-4.745-6.787Z\" \/><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Follow Simply Business on X<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-youtube  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/www.youtube.com\/user\/simplybusiness\" class=\"wp-block-social-link-anchor\" rel=\"noopener noreferrer\" target=\"_blank\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Subscribe to Simply Business Videos on Youtube<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-linkedin  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/www.linkedin.com\/company\/simply-business_39914\" class=\"wp-block-social-link-anchor\" rel=\"noopener noreferrer\" target=\"_blank\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Follow Simply Business on LinkedIn<\/span><\/a><\/li><\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>If you use Capistrano to deploy applications onto Unix systems you may find our new tool&nbsp;Capistrano-ext-puppetize&nbsp;useful. Now instead of having to prepare your deployment host beforehand with all the third party libraries and tools it might need (Ruby interpreter, databases, development libraries, ImageMagick, redis, etc) you can keep a Puppet manifest alongside your codebase in [&hellip;]<\/p>\n","protected":false},"author":13,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"sb_hreflang":"","sb_hreflang_url":"","disable_breadcrumbs":false,"sb_breadcrumbs":[],"footnotes":""},"tags":[],"hidden-category":[],"coauthors":[217],"class_list":["post-252","post","type-post","status-publish","format-standard","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Install All The Things!: a Capistrano extension to run Puppet<\/title>\n<meta name=\"description\" content=\"Install All The Things!: a Capistrano extension to run Puppet | Simply Business\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Install All The Things!: a Capistrano extension to run Puppet\" \/>\n<meta property=\"og:description\" content=\"Install All The Things!: a Capistrano extension to run Puppet | Simply Business\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/\" \/>\n<meta property=\"og:site_name\" content=\"Simply Business UK\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/simplybusiness\" \/>\n<meta property=\"article:published_time\" content=\"2013-02-15T14:42:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-05-29T18:43:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.simplybusiness.co.uk\/wp-content\/uploads\/sites\/3\/2024\/06\/sb-opengraph.png\" \/>\n<meta name=\"author\" content=\"Daniel Barlow\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@simplybusiness\" \/>\n<meta name=\"twitter:site\" content=\"@simplybusiness\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daniel Barlow\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/\"},\"author\":{\"@type\":\"Person\",\"name\":\"Daniel Barlow\",\"description\":\"\"},\"headline\":\"Install All The Things!: a Capistrano extension to run Puppet\",\"datePublished\":\"2013-02-15T14:42:00+00:00\",\"dateModified\":\"2024-05-29T18:43:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/\"},\"wordCount\":1147,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.simplybusiness.co.uk\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.simplybusiness.co.uk\/wp-content\/uploads\/sites\/3\/2024\/05\/things.webp?w=300\",\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/\",\"url\":\"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/\",\"name\":\"Install All The Things!: a Capistrano extension to run Puppet\",\"isPartOf\":{\"@id\":\"https:\/\/www.simplybusiness.co.uk\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.simplybusiness.co.uk\/wp-content\/uploads\/sites\/3\/2024\/05\/things.webp?w=300\",\"datePublished\":\"2013-02-15T14:42:00+00:00\",\"dateModified\":\"2024-05-29T18:43:28+00:00\",\"description\":\"Install All The Things!: a Capistrano extension to run Puppet | Simply Business\",\"breadcrumb\":{\"@id\":\"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/#primaryimage\",\"url\":\"https:\/\/www.simplybusiness.co.uk\/wp-content\/uploads\/sites\/3\/2024\/05\/things.webp\",\"contentUrl\":\"https:\/\/www.simplybusiness.co.uk\/wp-content\/uploads\/sites\/3\/2024\/05\/things.webp\",\"width\":300,\"height\":225,\"caption\":\"things\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.simplybusiness.co.uk\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Install All The Things!: a Capistrano extension to run Puppet\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.simplybusiness.co.uk\/#website\",\"url\":\"https:\/\/www.simplybusiness.co.uk\/\",\"name\":\"Simply Business UK\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.simplybusiness.co.uk\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.simplybusiness.co.uk\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.simplybusiness.co.uk\/#\/schema\/person\/4a0051d581e10bddeb00487aaa80d76a\",\"name\":\"hiteshpatel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/www.simplybusiness.co.uk\/wp-content\/themes\/simply-business\/dist\/images\/default-author-avatar.webp9df6147f02078f0218660330fdfbacf3\",\"url\":\"https:\/\/www.simplybusiness.co.uk\/wp-content\/themes\/simply-business\/dist\/images\/default-author-avatar.webp\",\"contentUrl\":\"https:\/\/www.simplybusiness.co.uk\/wp-content\/themes\/simply-business\/dist\/images\/default-author-avatar.webp\",\"caption\":\"hiteshpatel\"}},{\"@type\":\"PostalAddress\",\"@id\":\"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/#local-main-place-address\",\"streetAddress\":\"Hylo, 105 Bunhill Row\",\"addressLocality\":\"London\",\"postalCode\":\"EC1Y 8LZ\",\"addressCountry\":\"GB\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/#local-main-organization-logo\",\"url\":\"https:\/\/www.simplybusiness.co.uk\/wp-content\/uploads\/sites\/3\/2024\/05\/logo.png\",\"contentUrl\":\"https:\/\/www.simplybusiness.co.uk\/wp-content\/uploads\/sites\/3\/2024\/05\/logo.png\",\"width\":533,\"height\":187,\"caption\":\"Simply Business UK\"}]}<\/script>\n<meta name=\"geo.placename\" content=\"London\" \/>\n<meta name=\"geo.region\" content=\"United Kingdom (UK)\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Install All The Things!: a Capistrano extension to run Puppet","description":"Install All The Things!: a Capistrano extension to run Puppet | Simply Business","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/","og_locale":"en_GB","og_type":"article","og_title":"Install All The Things!: a Capistrano extension to run Puppet","og_description":"Install All The Things!: a Capistrano extension to run Puppet | Simply Business","og_url":"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/","og_site_name":"Simply Business UK","article_publisher":"https:\/\/www.facebook.com\/simplybusiness","article_published_time":"2013-02-15T14:42:00+00:00","article_modified_time":"2024-05-29T18:43:28+00:00","og_image":[{"url":"https:\/\/www.simplybusiness.co.uk\/wp-content\/uploads\/sites\/3\/2024\/06\/sb-opengraph.png","type":"","width":"","height":""}],"author":"Daniel Barlow","twitter_card":"summary_large_image","twitter_creator":"@simplybusiness","twitter_site":"@simplybusiness","twitter_misc":{"Written by":"Daniel Barlow","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/#article","isPartOf":{"@id":"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/"},"author":{"@type":"Person","name":"Daniel Barlow","description":""},"headline":"Install All The Things!: a Capistrano extension to run Puppet","datePublished":"2013-02-15T14:42:00+00:00","dateModified":"2024-05-29T18:43:28+00:00","mainEntityOfPage":{"@id":"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/"},"wordCount":1147,"commentCount":0,"publisher":{"@id":"https:\/\/www.simplybusiness.co.uk\/#organization"},"image":{"@id":"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/#primaryimage"},"thumbnailUrl":"https:\/\/www.simplybusiness.co.uk\/wp-content\/uploads\/sites\/3\/2024\/05\/things.webp?w=300","inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/","url":"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/","name":"Install All The Things!: a Capistrano extension to run Puppet","isPartOf":{"@id":"https:\/\/www.simplybusiness.co.uk\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/#primaryimage"},"image":{"@id":"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/#primaryimage"},"thumbnailUrl":"https:\/\/www.simplybusiness.co.uk\/wp-content\/uploads\/sites\/3\/2024\/05\/things.webp?w=300","datePublished":"2013-02-15T14:42:00+00:00","dateModified":"2024-05-29T18:43:28+00:00","description":"Install All The Things!: a Capistrano extension to run Puppet | Simply Business","breadcrumb":{"@id":"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/#primaryimage","url":"https:\/\/www.simplybusiness.co.uk\/wp-content\/uploads\/sites\/3\/2024\/05\/things.webp","contentUrl":"https:\/\/www.simplybusiness.co.uk\/wp-content\/uploads\/sites\/3\/2024\/05\/things.webp","width":300,"height":225,"caption":"things"},{"@type":"BreadcrumbList","@id":"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.simplybusiness.co.uk\/"},{"@type":"ListItem","position":2,"name":"Install All The Things!: a Capistrano extension to run Puppet"}]},{"@type":"WebSite","@id":"https:\/\/www.simplybusiness.co.uk\/#website","url":"https:\/\/www.simplybusiness.co.uk\/","name":"Simply Business UK","description":"","publisher":{"@id":"https:\/\/www.simplybusiness.co.uk\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.simplybusiness.co.uk\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Person","@id":"https:\/\/www.simplybusiness.co.uk\/#\/schema\/person\/4a0051d581e10bddeb00487aaa80d76a","name":"hiteshpatel","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.simplybusiness.co.uk\/wp-content\/themes\/simply-business\/dist\/images\/default-author-avatar.webp9df6147f02078f0218660330fdfbacf3","url":"https:\/\/www.simplybusiness.co.uk\/wp-content\/themes\/simply-business\/dist\/images\/default-author-avatar.webp","contentUrl":"https:\/\/www.simplybusiness.co.uk\/wp-content\/themes\/simply-business\/dist\/images\/default-author-avatar.webp","caption":"hiteshpatel"}},{"@type":"PostalAddress","@id":"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/#local-main-place-address","streetAddress":"Hylo, 105 Bunhill Row","addressLocality":"London","postalCode":"EC1Y 8LZ","addressCountry":"GB"},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet\/#local-main-organization-logo","url":"https:\/\/www.simplybusiness.co.uk\/wp-content\/uploads\/sites\/3\/2024\/05\/logo.png","contentUrl":"https:\/\/www.simplybusiness.co.uk\/wp-content\/uploads\/sites\/3\/2024\/05\/logo.png","width":533,"height":187,"caption":"Simply Business UK"}]},"geo.placename":"London","geo.region":"United Kingdom (UK)"},"parsely":{"version":"1.1.0","canonical_url":"https:\/\/simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet","smart_links":{"inbound":0,"outbound":0},"traffic_boost_suggestions_count":0,"meta":{"@context":"https:\/\/schema.org","@type":"NewsArticle","headline":"Install All The Things!: a Capistrano extension to run Puppet","url":"http:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet","mainEntityOfPage":{"@type":"WebPage","@id":"http:\/\/www.simplybusiness.co.uk\/about-us\/tech\/2013\/02\/install-all-the-things-a-capistrano-extension-to-run-puppet"},"thumbnailUrl":"","image":{"@type":"ImageObject","url":""},"articleSection":"Uncategorised","author":[{"@type":"Person","name":"Daniel Barlow"}],"creator":["Daniel Barlow"],"publisher":{"@type":"Organization","name":"Simply Business UK","logo":"https:\/\/www.simplybusiness.co.uk\/wp-content\/uploads\/sites\/3\/2024\/04\/icon-512x512-1.png"},"keywords":[],"dateCreated":"2013-02-15T14:42:00Z","datePublished":"2013-02-15T14:42:00Z","dateModified":"2024-05-29T18:43:28Z"},"rendered":"<script type=\"application\/ld+json\" class=\"wp-parsely-metadata\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@type\":\"NewsArticle\",\"headline\":\"Install All The Things!: a Capistrano extension to run Puppet\",\"url\":\"http:\\\/\\\/www.simplybusiness.co.uk\\\/about-us\\\/tech\\\/2013\\\/02\\\/install-all-the-things-a-capistrano-extension-to-run-puppet\",\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"http:\\\/\\\/www.simplybusiness.co.uk\\\/about-us\\\/tech\\\/2013\\\/02\\\/install-all-the-things-a-capistrano-extension-to-run-puppet\"},\"thumbnailUrl\":\"\",\"image\":{\"@type\":\"ImageObject\",\"url\":\"\"},\"articleSection\":\"Uncategorised\",\"author\":[{\"@type\":\"Person\",\"name\":\"Daniel Barlow\"}],\"creator\":[\"Daniel Barlow\"],\"publisher\":{\"@type\":\"Organization\",\"name\":\"Simply Business UK\",\"logo\":\"https:\\\/\\\/www.simplybusiness.co.uk\\\/wp-content\\\/uploads\\\/sites\\\/3\\\/2024\\\/04\\\/icon-512x512-1.png\"},\"keywords\":[],\"dateCreated\":\"2013-02-15T14:42:00Z\",\"datePublished\":\"2013-02-15T14:42:00Z\",\"dateModified\":\"2024-05-29T18:43:28Z\"}<\/script>","tracker_url":"https:\/\/cdn.parsely.com\/keys\/simplybusiness.co.uk\/p.js"},"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.simplybusiness.co.uk\/wp-json\/wp\/v2\/posts\/252","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.simplybusiness.co.uk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.simplybusiness.co.uk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.simplybusiness.co.uk\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/www.simplybusiness.co.uk\/wp-json\/wp\/v2\/comments?post=252"}],"version-history":[{"count":6,"href":"https:\/\/www.simplybusiness.co.uk\/wp-json\/wp\/v2\/posts\/252\/revisions"}],"predecessor-version":[{"id":13719,"href":"https:\/\/www.simplybusiness.co.uk\/wp-json\/wp\/v2\/posts\/252\/revisions\/13719"}],"wp:attachment":[{"href":"https:\/\/www.simplybusiness.co.uk\/wp-json\/wp\/v2\/media?parent=252"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.simplybusiness.co.uk\/wp-json\/wp\/v2\/tags?post=252"},{"taxonomy":"hidden-category","embeddable":true,"href":"https:\/\/www.simplybusiness.co.uk\/wp-json\/wp\/v2\/hidden-category?post=252"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.simplybusiness.co.uk\/wp-json\/wp\/v2\/coauthors?post=252"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}