{"id":6727,"date":"2010-02-25T09:50:51","date_gmt":"2010-02-25T08:50:51","guid":{"rendered":"https:\/\/www.credativ.de\/blog\/credativ-inside\/howto-introduction-to-puppet\/"},"modified":"2022-03-29T16:52:23","modified_gmt":"2022-03-29T14:52:23","slug":"howto-introduction-to-puppet","status":"publish","type":"post","link":"https:\/\/www.credativ.de\/en\/blog\/howtos\/howto-introduction-to-puppet\/","title":{"rendered":"[Howto] Introduction to Puppet"},"content":{"rendered":"<p><em>The administration of a large number of servers can be quite tiresome without a central configuration management. This article gives a first introduction into the configuration management tool, Puppet.<\/em><\/p>\n<h2>Introduction<\/h2>\n<p>In our daily work at the <a href=\"https:\/\/www.credativ.de\/en\/portfolio\/support\/open-source-support-center\/\">Open Source Support Center<\/a> we maintain a large number of servers. Managing larger clusters or setups means maintaining dozens of machines with an almost identical configuration and only slight variations, if any. Without central configuration management, making small changes to the configuration would mean repeating the same step on all machines. This is where <a href=\"http:\/\/projects.puppetlabs.com\/projects\/puppet\/\" target=\"_blank\" rel=\"noopener noreferrer\">Puppet<\/a> comes into play.<br \/>\nAs with all configuration management tools, Puppet uses a central server which manages the configuration. The clients query the server on a regular basis for new configuration via an encrypted connection. If a new configuration is found, it is imported as the server instructs: the client imports new files, modifies rights, starts services and executes commands, whatever the server says. The advantages are obvious:<\/p>\n<ul>\n<li>Each configuration change is done only once, regardless of the actual number of maintained servers. Unnecessary \u2013 and pretty boring \u2013 repetition is avoided, lucky us!<\/li>\n<li>The configuration is streamlined for all machines, which makes it much easier to maintain.<\/li>\n<li>A central infrastructure makes it easier to quickly get an overview about the setup \u2013 \u201crunning around\u201d is not necessary anymore.<\/li>\n<li>Last but not least, a central configuration tree enables you to incorporate a simple version control of your configuration: for example, playing back the configuration \u201cPRE-UPDATE\u201d on all machines of an entire setup only takes a couple of commands!<\/li>\n<\/ul>\n<h3>Technical workflow<\/h3>\n<p>Puppet consists of a central server, called \u201cPuppet Master\u201d, and the clients, called \u201cNodes\u201d. The nodes query the master for the current configuration. The master responds with a list of configuration and management items: files, services which have to be running, commands which need to be executed, and so on \u2013 the possibilities are practically endless:<\/p>\n<ul>\n<li>The master can hand over files which the node copies to a defined place \u2013 if it does not already exist.<\/li>\n<li>The node is asked to check certain file and directory permissions and to correct them if necessary.<\/li>\n<li>Depending upon the operating system, the node checks the state of services and starts or stops them. It can also check for installed packages and if they are up to date.<\/li>\n<li>The master can force the node to execute arbitrary commands<\/li>\n<li>etc.<\/li>\n<\/ul>\n<p>Of course, in general all tasks can be fulfilled by handing over files from the master to the client. However, in more complex setups this kind of behaviour is not easily arranged, nor does it simplify the setup. Puppet\u2019s strength is that it facilitates abstract system tasks (restart services, ensure installed packages, add users, etc.), regardless of the actual changed files in the background. You can even use the same statement in Puppet to configure different versions of Linux or Unix.<\/p>\n<h3>Installation<\/h3>\n<p>First, you need the master, the center of all the configuration you want to manage: <code>apt-get install puppetmaster<\/code> Puppet expects that all machines in the network have FQDNs \u2013 but that should be the case anyway in a well maintained network.<br \/>\nOther machines become a node by installing the Puppet client: <code>apt-get install puppet<\/code><\/p>\n<h3>Puppet, main configuration<\/h3>\n<p>The Puppet nodes do not need to be configured \u2013 they will check for a machine called <tt>Puppet<\/tt> in the local network. As long as that name points to the master you do not have to do anything else.<br \/>\nSince the master provides files to the nodes, the internal file server must be configured accordingly. There are different solutions for the internal file server, depending on the needs of your setup. For example, it might be better for your setup to store all files you provide to the nodes on one place, and the actual configuration you provide to the nodes somewhere else. However, in our example we keep the files and the configuration for the nodes close, as it is outlined in Puppet\u2019s <a href=\"http:\/\/reductivelabs.com\/trac\/puppet\/wiki\/PuppetBestPractice\" target=\"_blank\" rel=\"noopener noreferrer\">Best Practice Guide<\/a> and in the <a href=\"http:\/\/reductivelabs.com\/trac\/puppet\/wiki\/ModuleOrganisation\" target=\"_blank\" rel=\"noopener noreferrer\">Module Configuration<\/a> part of the Puppet documentation. Thus, it is enough to change the file <em>\/etc\/puppet\/fileserver.conf<\/em> to:<\/p>\n<div class=\"geshifilter\">\n<pre class=\"text geshifilter-text\">[modules]\r\nallow 192.168.0.1\/24\r\nallow *.credativ.de<\/pre>\n<\/div>\n<h3>Configuration of the configuration \u2013 Modules<\/h3>\n<p>Puppet\u2019s way of managing configuration is to use sets of tasks grouped by topic. For example, all tasks related to SSH should go into the module \u201cssh\u201d, while all tasks related to apache should be placed in the module \u201capache\u201d and so on. These sets of tasks are called <strong>\u201cModules\u201d<\/strong> and are the core of Puppet \u2013 in a perfect Puppet setup everything is defined in modules! We will explain the structure of a SSH module to highlight the basics and ideas behind Puppet\u2019s modules. We will also try to stay close to the Best Practise Guide to make it easier to check back against the Puppet documentation.<br \/>\nPlease note, however, that this example is an example: in a real world setup the SSH configuration would be a bit more dynamic, but we focused on simple and easy-to-understand methods.<\/p>\n<h3>The SSH module<\/h3>\n<p>We have the following requirements:<\/p>\n<ol>\n<li>The package open-ssh must be installed and be the newest version.<\/li>\n<li>Each node\u2019s sshd_config file has to be the same as the one saved on the master.<\/li>\n<li>In the event that the sshd_config is changed on any node, the sshd service should be restarted.<\/li>\n<li>The user <tt>credativ<\/tt> needs to have certain files in his\/her directory <tt>$HOME\/.ssh<\/tt>.<\/li>\n<\/ol>\n<p>To comply with these requirements we start by creating some necessary paths:<\/p>\n<div class=\"geshifilter\">\n<pre class=\"text geshifilter-text\">mkdir -p \/etc\/puppet\/modules\/ssh\/manifests\r\nmkdir -p \/etc\/puppet\/modules\/ssh\/files<\/pre>\n<\/div>\n<p>The directory <strong>\u201cmanifests\u201d<\/strong> contains the actual configuration instructions of the module and the directory <strong>\u201cfiles\u201d<\/strong> provides the files we hand over to the clients.<br \/>\nThe instructions themselves are written down in <strong>init.pp<\/strong> in the <strong>\u201cmanifests\u201d<\/strong> directory. The set of instructions to fulfil aims 1 \u2013 4 are grouped in a so called \u201cclass\u201d. For each task a \u201cclass\u201d has one subsection, a <a href=\"http:\/\/docs.puppetlabs.com\/references\/latest\/type.html\" target=\"_blank\" rel=\"noopener noreferrer\">type<\/a>. So in our case we have four types, one for each aim:<\/p>\n<div class=\"geshifilter\">\n<pre class=\"text geshifilter-text\">class ssh{\r\n        package { \"openssh-server\":\r\n                 ensure =&gt; latest,\r\n        }\r\n        file { \"\/etc\/ssh\/sshd_config\":\r\n                owner   =&gt; root,\r\n                group   =&gt; root,\r\n                mode    =&gt; 644,\r\n                source  =&gt; \"puppet:\/\/\/ssh\/sshd_config\",\r\n        }\r\n        service { ssh:\r\n                ensure          =&gt; running,\r\n                hasrestart      =&gt; true,\r\n                subscribe       =&gt; File[\"\/etc\/ssh\/sshd_config\"],\r\n        }\r\n        file { \"\/home\/credativ\/.ssh\":\r\n                path    =&gt; \"\/home\/credativ\/.ssh\",\r\n                owner   =&gt; \"credativ\",\r\n                group   =&gt; \"credativ\",\r\n                mode    =&gt; 600,\r\n                recurse =&gt; true,\r\n                source  =&gt; \"puppet:\/\/\/ssh\/ssh\",\r\n                ensure  =&gt; [directory, present],\r\n        }\r\n}<\/pre>\n<\/div>\n<p>Each type is another task and calls another action on the node:<br \/>\n<code>package<\/code><br \/>\nHere we make sure that the package <tt>openssh-server<\/tt> is installed in the newest version.<br \/>\n<code>file<\/code><br \/>\nA file on the node is compared with the version on the server and overwritten if necessary. Also, the rights are adjusted.<br \/>\n<code>service<\/code><br \/>\nWell, as the name says, this deals with services: in our case the service <tt<sshd<\/tt> must be running on the node. Also, in case the file <tt>\/etc\/ssh\/sshd_config<\/tt> is modified, the service is restarted automatically.<br \/>\n<code>file<\/code><br \/>\nHere we have again the file type, but this time we do not compare a file, but an entire directory.<\/p>\n<p>As mentioned above, the files and directories you configured so that the server provides them to the nodes must be available in the directory <tt>\/etc\/puppet\/modules\/ssh\/files\/<\/tt>.<\/p>\n<h3>Nodes and modules<\/h3>\n<p>We now have three parts: the master, the nodes and the modules. The next step is to tell the master which nodes are related to which modules. First, you must tell the master that this module exists in <tt>\/etc\/puppet\/manifests\/modules.pp<\/tt>:<\/p>\n<p><span class=\"geshifilter\"><code class=\"text geshifilter-text\">import \"ssh\"<\/code><\/span><\/p>\n<p>Next, you need to modify <tt>\/etc\/puppet\/manifests\/nodes.pp<\/tt>. This specifies which module is loaded for which node, and which modules should be loaded as default in the event that a node does not have a special entry. The entries for the nodes support inheritance.<\/p>\n<p>So, for example, to have the module \u201crsyslog\u201d ready for all nodes but the module \u201cssh\u201d only ready for the node \u201cexternal\u201d you need the following entry:<\/p>\n<div class=\"geshifilter\">\n<pre class=\"text geshifilter-text\">node default {\r\n   include rsyslog\r\n}\r\n \r\nnode 'external' inherits default {\r\n  include ssh\r\n}<\/pre>\n<\/div>\n<p>Puppet is now configured!<\/p>\n<h3>Certificates \u2013 secured communication between nodes and master<\/h3>\n<p>As mentioned above, the communication between master and node is encrypted. But that implies you have to verify the partners at least once. This can be done after a node queries the master for the first time. Whenever the master is queried by an unknown node it does not provide the default configuration but instead puts the node on a waiting list. You can check the waiting list with the command: <code># puppetca --list<\/code> To verify a node and incorporate it into the Puppet system you need to verify it: <code># puppetca --sign external.example.com<\/code> The entire process is explained in more detail in the puppet <a href=\"http:\/\/reductivelabs.com\/trac\/puppet\/wiki\/CertificatesAndSecurity\" target=\"_blank\" rel=\"noopener noreferrer\">doceumentation<\/a>.<\/p>\n<h3>Closing words<\/h3>\n<p>The example introduced in this article is very simple \u2013 as I noted, a real world example would be more complex and dynamic. However, it is a good way to start with Puppet, and the documentation linked throughout this article will help the willing reader to dive deeper into the components of Puppet.<\/p>\n<p>We, here at credativ\u2019s Open Source Support Center have gained considerable experience with <a href=\"https:\/\/www.credativ.de\/software\/konfigurationsmanagement\/puppet\/\">Puppet<\/a> in recent years and really like the framework. Also, in our day to day support and consulting work we see the market growing as more and more customers are interested in the framework. Right now, Puppet is in the fast lane and it will be interesting to see how more established solutions like <a href=\"http:\/\/www.cfengine.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">cfengine<\/a> will react to this competition.<\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: center;\"><em>This post was originally written by Roland Wolters.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The administration of a large number of servers can be quite tiresome without a central configuration management. This article gives a first introduction into the configuration management tool, Puppet. Introduction In our daily work at the Open Source Support Center we maintain a large number of servers. Managing larger clusters or setups means maintaining dozens [&hellip;]<\/p>\n","protected":false},"author":90,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_improvement_type_select":"improve_an_existing","_thumb_yes_seoaic":false,"_frame_yes_seoaic":false,"seoaic_generate_description":"","seoaic_improve_instructions_prompt":"","seoaic_rollback_content_improvement":"","seoaic_idea_thumbnail_generator":"","thumbnail_generated":false,"thumbnail_generate_prompt":"","seoaic_article_description":"","seoaic_article_subtitles":[],"footnotes":""},"categories":[1885],"tags":[1808],"class_list":["post-6727","post","type-post","status-publish","format-standard","hentry","category-howtos-en","tag-puppet-en"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.4 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>[Howto] Introduction to Puppet - credativ\u00ae<\/title>\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.credativ.de\/en\/blog\/howtos\/howto-introduction-to-puppet\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[Howto] Introduction to Puppet\" \/>\n<meta property=\"og:description\" content=\"The administration of a large number of servers can be quite tiresome without a central configuration management. This article gives a first introduction into the configuration management tool, Puppet. Introduction In our daily work at the Open Source Support Center we maintain a large number of servers. Managing larger clusters or setups means maintaining dozens [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.credativ.de\/en\/blog\/howtos\/howto-introduction-to-puppet\/\" \/>\n<meta property=\"og:site_name\" content=\"credativ\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/credativDE\/\" \/>\n<meta property=\"article:published_time\" content=\"2010-02-25T08:50:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-03-29T14:52:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.credativ.de\/wp-content\/uploads\/2019\/07\/Portfolio-Loesungen.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"550\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"credativ Redaktion\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@credativde\" \/>\n<meta name=\"twitter:site\" content=\"@credativde\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"credativ Editorial Team\" \/>\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.credativ.de\\\/en\\\/blog\\\/howtos\\\/howto-introduction-to-puppet\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos\\\/howto-introduction-to-puppet\\\/\"},\"author\":{\"name\":\"credativ Redaktion\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#\\\/schema\\\/person\\\/63430ac9e022ccceba0f8d53ffe6db12\"},\"headline\":\"[Howto] Introduction to Puppet\",\"datePublished\":\"2010-02-25T08:50:51+00:00\",\"dateModified\":\"2022-03-29T14:52:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos\\\/howto-introduction-to-puppet\\\/\"},\"wordCount\":1039,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#organization\"},\"keywords\":[\"Puppet\"],\"articleSection\":[\"HowTos\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos\\\/howto-introduction-to-puppet\\\/#respond\"]}],\"copyrightYear\":\"2010\",\"copyrightHolder\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos\\\/howto-introduction-to-puppet\\\/\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos\\\/howto-introduction-to-puppet\\\/\",\"name\":\"[Howto] Introduction to Puppet - credativ\u00ae\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#website\"},\"datePublished\":\"2010-02-25T08:50:51+00:00\",\"dateModified\":\"2022-03-29T14:52:23+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos\\\/howto-introduction-to-puppet\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos\\\/howto-introduction-to-puppet\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos\\\/howto-introduction-to-puppet\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[Howto] Introduction to Puppet\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/\",\"name\":\"credativ GmbH\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Organization\",\"Place\"],\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#organization\",\"name\":\"credativ\u00ae\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/\",\"logo\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos\\\/howto-introduction-to-puppet\\\/#local-main-organization-logo\"},\"image\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos\\\/howto-introduction-to-puppet\\\/#local-main-organization-logo\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/credativDE\\\/\",\"https:\\\/\\\/x.com\\\/credativde\",\"https:\\\/\\\/mastodon.social\\\/@credativde\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/credativ-gmbh\",\"https:\\\/\\\/www.instagram.com\\\/credativ\\\/\"],\"description\":\"Die credativ GmbH ist ein f\u00fchrendes, auf Open Source Software spezialisiertes IT-Dienstleistungs- und Beratungsunternehmen. Wir bieten umfassende und professionelle Services, von Beratung und Infrastruktur-Betrieb \u00fcber 24\\\/7 Support bis hin zu individuellen L\u00f6sungen und Schulungen. Unser Fokus liegt auf dem ganzheitlichen Management von gesch\u00e4ftskritischen Open-Source-Systemen, darunter Betriebssysteme (z.B. Linux), Datenbanken (z.B. PostgreSQL), Konfigurationsmanagement (z.B. Ansible, Puppet) und Virtualisierung. Als engagierter Teil der Open-Source-Community unterst\u00fctzen wir unsere Kunden dabei, die Vorteile freier Software sicher, stabil und effizient in ihrer IT-Umgebung zu nutzen.\",\"legalName\":\"credativ GmbH\",\"foundingDate\":\"2025-03-01\",\"duns\":\"316387060\",\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"minValue\":\"11\",\"maxValue\":\"50\"},\"address\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos\\\/howto-introduction-to-puppet\\\/#local-main-place-address\"},\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":\"51.1732374\",\"longitude\":\"6.392010099999999\"},\"telephone\":[\"+4921619174200\",\"08002733284\"],\"contactPoint\":{\"@type\":\"ContactPoint\",\"telephone\":\"08002733284\",\"email\":\"vertrieb@credativ.de\"},\"openingHoursSpecification\":[{\"@type\":\"OpeningHoursSpecification\",\"dayOfWeek\":[\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\"],\"opens\":\"09:00\",\"closes\":\"17:00\"},{\"@type\":\"OpeningHoursSpecification\",\"dayOfWeek\":[\"Saturday\",\"Sunday\"],\"opens\":\"00:00\",\"closes\":\"00:00\"}],\"email\":\"info@credativ.de\",\"areaServed\":\"D-A-CH\",\"vatID\":\"DE452151696\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#\\\/schema\\\/person\\\/63430ac9e022ccceba0f8d53ffe6db12\",\"name\":\"credativ Redaktion\",\"description\":\"Dieser Account dient als Sammelpunkt f\u00fcr die wertvollen Beitr\u00e4ge ehemaliger Mitarbeiter von credativ. Wir bedanken uns f\u00fcr ihre gro\u00dfartigen Inhalte, die das technische Wissen in unserem Blog \u00fcber die Jahre hinweg bereichert haben. Ihre Artikel bleiben hier weiterhin f\u00fcr unsere Leser zug\u00e4nglich.\"},{\"@type\":\"PostalAddress\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos\\\/howto-introduction-to-puppet\\\/#local-main-place-address\",\"streetAddress\":\"Hennes-Weisweiler-Allee 23\",\"addressLocality\":\"M\u00f6nchengladbach\",\"postalCode\":\"41179\",\"addressRegion\":\"Deutschland\",\"addressCountry\":\"DE\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/howtos\\\/howto-introduction-to-puppet\\\/#local-main-organization-logo\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/credativ-logo-right.svg\",\"contentUrl\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/credativ-logo-right.svg\",\"caption\":\"credativ\u00ae\"}]}<\/script>\n<meta name=\"geo.placename\" content=\"M\u00f6nchengladbach\" \/>\n<meta name=\"geo.position\" content=\"51.1732374;6.392010099999999\" \/>\n<meta name=\"geo.region\" content=\"Germany\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"[Howto] Introduction to Puppet - credativ\u00ae","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.credativ.de\/en\/blog\/howtos\/howto-introduction-to-puppet\/","og_locale":"en_US","og_type":"article","og_title":"[Howto] Introduction to Puppet","og_description":"The administration of a large number of servers can be quite tiresome without a central configuration management. This article gives a first introduction into the configuration management tool, Puppet. Introduction In our daily work at the Open Source Support Center we maintain a large number of servers. Managing larger clusters or setups means maintaining dozens [&hellip;]","og_url":"https:\/\/www.credativ.de\/en\/blog\/howtos\/howto-introduction-to-puppet\/","og_site_name":"credativ\u00ae","article_publisher":"https:\/\/www.facebook.com\/credativDE\/","article_published_time":"2010-02-25T08:50:51+00:00","article_modified_time":"2022-03-29T14:52:23+00:00","og_image":[{"width":800,"height":550,"url":"https:\/\/www.credativ.de\/wp-content\/uploads\/2019\/07\/Portfolio-Loesungen.jpg","type":"image\/jpeg"}],"author":"credativ Redaktion","twitter_card":"summary_large_image","twitter_creator":"@credativde","twitter_site":"@credativde","twitter_misc":{"Written by":"credativ Editorial Team","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.credativ.de\/en\/blog\/howtos\/howto-introduction-to-puppet\/#article","isPartOf":{"@id":"https:\/\/www.credativ.de\/en\/blog\/howtos\/howto-introduction-to-puppet\/"},"author":{"name":"credativ Redaktion","@id":"https:\/\/www.credativ.de\/en\/#\/schema\/person\/63430ac9e022ccceba0f8d53ffe6db12"},"headline":"[Howto] Introduction to Puppet","datePublished":"2010-02-25T08:50:51+00:00","dateModified":"2022-03-29T14:52:23+00:00","mainEntityOfPage":{"@id":"https:\/\/www.credativ.de\/en\/blog\/howtos\/howto-introduction-to-puppet\/"},"wordCount":1039,"commentCount":0,"publisher":{"@id":"https:\/\/www.credativ.de\/en\/#organization"},"keywords":["Puppet"],"articleSection":["HowTos"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.credativ.de\/en\/blog\/howtos\/howto-introduction-to-puppet\/#respond"]}],"copyrightYear":"2010","copyrightHolder":{"@id":"https:\/\/www.credativ.de\/#organization"}},{"@type":"WebPage","@id":"https:\/\/www.credativ.de\/en\/blog\/howtos\/howto-introduction-to-puppet\/","url":"https:\/\/www.credativ.de\/en\/blog\/howtos\/howto-introduction-to-puppet\/","name":"[Howto] Introduction to Puppet - credativ\u00ae","isPartOf":{"@id":"https:\/\/www.credativ.de\/en\/#website"},"datePublished":"2010-02-25T08:50:51+00:00","dateModified":"2022-03-29T14:52:23+00:00","breadcrumb":{"@id":"https:\/\/www.credativ.de\/en\/blog\/howtos\/howto-introduction-to-puppet\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.credativ.de\/en\/blog\/howtos\/howto-introduction-to-puppet\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.credativ.de\/en\/blog\/howtos\/howto-introduction-to-puppet\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.credativ.de\/en\/"},{"@type":"ListItem","position":2,"name":"[Howto] Introduction to Puppet"}]},{"@type":"WebSite","@id":"https:\/\/www.credativ.de\/en\/#website","url":"https:\/\/www.credativ.de\/en\/","name":"credativ GmbH","description":"","publisher":{"@id":"https:\/\/www.credativ.de\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.credativ.de\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Organization","Place"],"@id":"https:\/\/www.credativ.de\/en\/#organization","name":"credativ\u00ae","url":"https:\/\/www.credativ.de\/en\/","logo":{"@id":"https:\/\/www.credativ.de\/en\/blog\/howtos\/howto-introduction-to-puppet\/#local-main-organization-logo"},"image":{"@id":"https:\/\/www.credativ.de\/en\/blog\/howtos\/howto-introduction-to-puppet\/#local-main-organization-logo"},"sameAs":["https:\/\/www.facebook.com\/credativDE\/","https:\/\/x.com\/credativde","https:\/\/mastodon.social\/@credativde","https:\/\/www.linkedin.com\/company\/credativ-gmbh","https:\/\/www.instagram.com\/credativ\/"],"description":"Die credativ GmbH ist ein f\u00fchrendes, auf Open Source Software spezialisiertes IT-Dienstleistungs- und Beratungsunternehmen. Wir bieten umfassende und professionelle Services, von Beratung und Infrastruktur-Betrieb \u00fcber 24\/7 Support bis hin zu individuellen L\u00f6sungen und Schulungen. Unser Fokus liegt auf dem ganzheitlichen Management von gesch\u00e4ftskritischen Open-Source-Systemen, darunter Betriebssysteme (z.B. Linux), Datenbanken (z.B. PostgreSQL), Konfigurationsmanagement (z.B. Ansible, Puppet) und Virtualisierung. Als engagierter Teil der Open-Source-Community unterst\u00fctzen wir unsere Kunden dabei, die Vorteile freier Software sicher, stabil und effizient in ihrer IT-Umgebung zu nutzen.","legalName":"credativ GmbH","foundingDate":"2025-03-01","duns":"316387060","numberOfEmployees":{"@type":"QuantitativeValue","minValue":"11","maxValue":"50"},"address":{"@id":"https:\/\/www.credativ.de\/en\/blog\/howtos\/howto-introduction-to-puppet\/#local-main-place-address"},"geo":{"@type":"GeoCoordinates","latitude":"51.1732374","longitude":"6.392010099999999"},"telephone":["+4921619174200","08002733284"],"contactPoint":{"@type":"ContactPoint","telephone":"08002733284","email":"vertrieb@credativ.de"},"openingHoursSpecification":[{"@type":"OpeningHoursSpecification","dayOfWeek":["Monday","Tuesday","Wednesday","Thursday","Friday"],"opens":"09:00","closes":"17:00"},{"@type":"OpeningHoursSpecification","dayOfWeek":["Saturday","Sunday"],"opens":"00:00","closes":"00:00"}],"email":"info@credativ.de","areaServed":"D-A-CH","vatID":"DE452151696"},{"@type":"Person","@id":"https:\/\/www.credativ.de\/en\/#\/schema\/person\/63430ac9e022ccceba0f8d53ffe6db12","name":"credativ Redaktion","description":"Dieser Account dient als Sammelpunkt f\u00fcr die wertvollen Beitr\u00e4ge ehemaliger Mitarbeiter von credativ. Wir bedanken uns f\u00fcr ihre gro\u00dfartigen Inhalte, die das technische Wissen in unserem Blog \u00fcber die Jahre hinweg bereichert haben. Ihre Artikel bleiben hier weiterhin f\u00fcr unsere Leser zug\u00e4nglich."},{"@type":"PostalAddress","@id":"https:\/\/www.credativ.de\/en\/blog\/howtos\/howto-introduction-to-puppet\/#local-main-place-address","streetAddress":"Hennes-Weisweiler-Allee 23","addressLocality":"M\u00f6nchengladbach","postalCode":"41179","addressRegion":"Deutschland","addressCountry":"DE"},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.credativ.de\/en\/blog\/howtos\/howto-introduction-to-puppet\/#local-main-organization-logo","url":"https:\/\/www.credativ.de\/wp-content\/uploads\/2025\/04\/credativ-logo-right.svg","contentUrl":"https:\/\/www.credativ.de\/wp-content\/uploads\/2025\/04\/credativ-logo-right.svg","caption":"credativ\u00ae"}]},"geo.placename":"M\u00f6nchengladbach","geo.position":{"lat":"51.1732374","long":"6.392010099999999"},"geo.region":"Germany"},"_links":{"self":[{"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/posts\/6727","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/users\/90"}],"replies":[{"embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/comments?post=6727"}],"version-history":[{"count":0,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/posts\/6727\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/media?parent=6727"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/categories?post=6727"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/tags?post=6727"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}