<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Management on wegotoeleven</title><link>http://blog.wegotoeleven.xyz/tags/management/</link><description>Recent content in Management on wegotoeleven</description><generator>Hugo</generator><language>en-gb</language><lastBuildDate>Mon, 29 Aug 2022 00:00:00 +0000</lastBuildDate><atom:link href="http://blog.wegotoeleven.xyz/tags/management/index.xml" rel="self" type="application/rss+xml"/><item><title>Puppet, PuppetDB and Puppet Agent</title><link>http://blog.wegotoeleven.xyz/technical/puppet-puppetdb-and-puppet-agent/</link><pubDate>Wed, 03 May 2017 00:00:00 +0000</pubDate><guid>http://blog.wegotoeleven.xyz/technical/puppet-puppetdb-and-puppet-agent/</guid><description>&lt;p&gt;I like the idea of desired state management systems. You define a set of criteria, and your devices will indefinitely match that criteria, returning to the &amp;ldquo;Desired State&amp;rdquo; if required. I&amp;rsquo;ve done this a few times with Jamf Pro, using smart groups, extension attributes and policies to &amp;ldquo;mimic&amp;rdquo; the functionality of a desired state management system (&lt;a href="https://www.youtube.com/watch?v=XOhZgAPn_CU"&gt;which was nice&lt;/a&gt;) but I wanted to really get to grips with a system that&amp;rsquo;s explicitly designed for this purpose. Enter the king of &amp;ldquo;Desired State&amp;rdquo; - &lt;em&gt;&lt;a href="https://puppet.com"&gt;Puppet&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;</description><content:encoded><![CDATA[<p>I like the idea of desired state management systems. You define a set of criteria, and your devices will indefinitely match that criteria, returning to the &ldquo;Desired State&rdquo; if required. I&rsquo;ve done this a few times with Jamf Pro, using smart groups, extension attributes and policies to &ldquo;mimic&rdquo; the functionality of a desired state management system (<a href="https://www.youtube.com/watch?v=XOhZgAPn_CU">which was nice</a>) but I wanted to really get to grips with a system that&rsquo;s explicitly designed for this purpose. Enter the king of &ldquo;Desired State&rdquo; - <em><a href="https://puppet.com">Puppet</a></em>.</p>
<p>In an effort to get to know Puppet, I need to build out some infrastructure. Yeah, I know there&rsquo;s a <a href="https://puppet.com/download-learning-vm">learning VM</a> (that&rsquo;s really awesome, by the way), but I learn by experience. What better way than to build my own.</p>
<h2 id="assumptions">Assumptions</h2>
<p>I&rsquo;m not going to get into the nitty gritty of what puppet actually is and does, and I&rsquo;m going to assume that if you&rsquo;re reading this post, you:</p>
<ol>
<li>Understand what Desired State is</li>
<li>Understand (roughly) what Puppet is and can do</li>
<li>Are poor / nuts, and would rather build and spin up your own servers, rather than using Puppet&rsquo;s <a href="https://puppet.com/product">Enterprise version</a> (which is still totally viable, but I&rsquo;m a masochist)</li>
</ol>
<p>For the purposes of this example, I will setup 3 VMs and use the following defaults:</p>
<ul>
<li>VMware Fusion 8.5.6 to host the VMs
<ul>
<li>Network set to custom &ldquo;vmnet2&rdquo; network
<ul>
<li>NAT</li>
<li>&ldquo;Connect Host Mac to this network&rdquo;</li>
<li>Provide DHCP, subnet 10.0.1.0/24</li>
</ul>
</li>
</ul>
</li>
<li>Puppet Server
<ul>
<li>Ubuntu 16.04</li>
<li>2 x CPU Cores</li>
<li>3072MB Memory</li>
<li>50GB HDD (thin provisioned)</li>
<li>Hostname <code>puppet-server</code></li>
<li>IP Address <code>10.0.1.129</code></li>
</ul>
</li>
<li>Puppet Database Server
<ul>
<li>Ubuntu 16.04</li>
<li>2 x CPU Cores</li>
<li>3072MB Memory</li>
<li>50GB HDD (thin provisioned)</li>
<li>Hostname <code>puppet-db</code></li>
<li>IP Address <code>10.0.1.130</code></li>
</ul>
</li>
<li>Puppet Test Client
<ul>
<li>macOS 10.12.4</li>
<li>2 x CPU Cores</li>
<li>8192MB Memory</li>
<li>50GB HDD (thin provisioned)</li>
<li>Hostname <code>puppet-client</code></li>
<li>IP Address <code>10.0.1.128</code></li>
</ul>
</li>
</ul>
<p>Obviously, if you&rsquo;re following along with me, feel free to change any of the above defaults, but please make sure you&rsquo;re changing them in the instructions below.</p>
<h2 id="network-configuration">Network Configuration</h2>
<ol>
<li>
<p>Spin up your boxes with the above config, and set each device up to allow access via SSH (cause it&rsquo;s easier like)</p>
</li>
<li>
<p>Rename both servers by editing the hostname file on each device, and adding the desired hostname</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo vi /etc/hostname
</span></span></code></pre></div></li>
<li>
<p>In addition, add the hostname into the hosts file, pointing to the loopback (<code>127.0.0.1</code>) address under the <code>localhost</code> entry</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo vi /etc/hosts
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">127.0.0.1       localhost
</span></span><span class="line"><span class="cl">127.0.0.1       puppet-db
</span></span></code></pre></div></li>
<li>
<p>In an environment without proper DNS, do the following:
4. Set each device with a static IP address. I&rsquo;m using the IP addresses specified above.</p>
<pre><code> ```bash
 $ sudo vi /etc/network/interfaces
 ```
 ```
 # The primary network interface
 		auto eth0
 		iface eth0 inet static
 		address 10.0.0.41
 		netmask 255.255.255.0
 		network 10.0.0.0
 		broadcast 10.0.0.255
 		gateway 10.0.0.1
 		dns-nameservers 10.0.0.1 8.8.8.8
 ```
</code></pre>
<ul>
<li>
<p>Add each device into the each device&rsquo;s hosts file</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo vi /etc/hosts
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">10.0.1.129    puppet-server
</span></span><span class="line"><span class="cl">10.0.1.130    puppet-db
</span></span><span class="line"><span class="cl">10.0.1.128    puppet-client
</span></span></code></pre></div></li>
</ul>
</li>
</ol>
<h2 id="puppet-server-configuration">Puppet Server Configuration</h2>
<ol start="8">
<li>
<p>Install the NTP service on the Puppet server, because Puppet uses an NTP source when issuing certificates to it&rsquo;s nodes</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo apt install ntp
</span></span></code></pre></div></li>
<li>
<p>Add the Puppet repositories to the Puppet Server</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ wget https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb
</span></span><span class="line"><span class="cl">$ sudo dpkg -i puppetlabs-release-pc1-xenial.deb
</span></span><span class="line"><span class="cl">$ sudo apt update
</span></span></code></pre></div></li>
<li>
<p>Install <code>puppetserver</code> on the Puppet Server (duh)</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo apt install puppetserver
</span></span></code></pre></div></li>
<li>
<p>In addition, install the &ldquo;puppetdb-termini&rdquo; package to enable the Puppet server to talk to the Puppet DB server</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo /opt/puppetlabs/puppet/bin/puppet resource package puppetdb-termini <span class="nv">ensure</span><span class="o">=</span>latest
</span></span></code></pre></div></li>
<li>
<p>Create the required configuration files on the Puppet server for the connections to the PuppetDB:</p>
<ul>
<li>
<p>routes.yaml:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo vi /etc/puppetlabs/puppet/routes.yaml
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nn">---</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">master</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">facts</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">terminus</span><span class="p">:</span><span class="w"> </span><span class="l">puppetdb</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">cache</span><span class="p">:</span><span class="w"> </span><span class="l">yaml</span><span class="w">
</span></span></span></code></pre></div></li>
<li>
<p>puppetdb.conf:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo vi /etc/puppetlabs/puppet/puppetdb.conf
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">[main]
</span></span><span class="line"><span class="cl">server_urls = https://puppet-db:8081
</span></span></code></pre></div></li>
</ul>
</li>
<li>
<p>Edit puppet.conf</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo vi /etc/puppetlabs/puppet/puppet.conf
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">[master]
</span></span><span class="line"><span class="cl">storeconfigs = true
</span></span><span class="line"><span class="cl">storeconfigs_backend = puppetdb
</span></span></code></pre></div></li>
<li>
<p>Ensure the permissions are correct on the Puppet configuration folder</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo chown -R puppet:puppet <span class="k">$(</span>sudo /opt/puppetlabs/puppet/bin/puppet config print confdir<span class="k">)</span>
</span></span></code></pre></div></li>
<li>
<p>Set <code>puppetserver</code> to start automatically when the system starts</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo /opt/puppetlabs/puppet/bin/puppet resource service puppetserver <span class="nv">ensure</span><span class="o">=</span>running <span class="nv">enable</span><span class="o">=</span><span class="nb">true</span>
</span></span></code></pre></div></li>
<li>
<p>Restart the Server to pickup the above changes.</p>
</li>
</ol>
<h2 id="puppet-db-server-configuration">Puppet DB Server Configuration</h2>
<ol start="6">
<li>
<p>Add the Puppet repositories to the Puppet DB Server</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ wget https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb
</span></span><span class="line"><span class="cl">$ sudo dpkg -i puppetlabs-release-pc1-xenial.deb
</span></span></code></pre></div></li>
<li>
<p>Install the Database backend for PuppetDB</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo sh -c <span class="s1">&#39;echo &#34;deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main&#34; &gt;&gt; /etc/apt/sources.list.d/pgdg.list&#39;</span>
</span></span><span class="line"><span class="cl">$ wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - <span class="p">|</span> sudo apt-key add -
</span></span><span class="line"><span class="cl">$ sudo apt update
</span></span><span class="line"><span class="cl">$ sudo apt install postgresql postgresql-contrib
</span></span></code></pre></div></li>
<li>
<p>Setup PostgreSQL on the Puppet DB Server</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo -u postgres sh
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="cl"><span class="k">createuser</span><span class="w"> </span><span class="o">-</span><span class="n">DRSP</span><span class="w"> </span><span class="n">puppetdb</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="k">createdb</span><span class="w"> </span><span class="o">-</span><span class="n">E</span><span class="w"> </span><span class="n">UTF8</span><span class="w"> </span><span class="o">-</span><span class="n">O</span><span class="w"> </span><span class="n">puppetdb</span><span class="w"> </span><span class="n">puppetdb</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="n">psql</span><span class="w"> </span><span class="n">puppetdb</span><span class="w"> </span><span class="o">-</span><span class="k">c</span><span class="w"> </span><span class="s1">&#39;create extension pg_trgm&#39;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="n">exit</span><span class="w">
</span></span></span></code></pre></div></li>
<li>
<p>Restart the PostgreSQL service</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo service postgresql restart
</span></span></code></pre></div></li>
<li>
<p>Test PostgreSQL. If this is successful, you&rsquo;ll be dropped into PostgreSQL. Use <code>\q</code> to exit.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ psql -h localhost puppetdb puppetdb
</span></span></code></pre></div></li>
<li>
<p>To configure PuppetDB to use this database, add the following details to the <code>puppetdb</code> database configuration file. In this example, I&rsquo;m using super secret usernames and passwords. Don&rsquo;t do this if you&rsquo;re planning on setting this up in prod.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo vi /etc/puppetlabs/puppetdb/conf.d/database.ini
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">subname = //localhost:5432/puppetdb
</span></span><span class="line"><span class="cl">username = puppetdb
</span></span><span class="line"><span class="cl">password = puppetdb
</span></span></code></pre></div><p>For the <code>subname</code>, replace the hostname with the DB server’s hostname (or <code>localhost</code> if the PostgreSQL service is running on the same server), replace the port with the port on which PostgreSQL is listening (usually 5432), and replace the database with the name of the database you’ve created for use with PuppetDB. In addition, uncomment the following sections:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">classname
</span></span><span class="line"><span class="cl">subprotocol
</span></span><span class="line"><span class="cl">gc-interval
</span></span></code></pre></div></li>
</ol>
<h2 id="connecting-the-servers-together">Connecting the servers together</h2>
<ol start="20">
<li>
<p>Install the Puppet Agent on the Puppet DB Server</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo apt install puppet-agent
</span></span></code></pre></div></li>
<li>
<p>On the Puppet DB server, set the name of the server that the agent should connect to, replacing the server with the required hostname of the Puppet server</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo vi /etc/puppetlabs/puppet/puppet.conf
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">server = puppet-server
</span></span></code></pre></div></li>
<li>
<p>Enrol the Puppet DB Server into Puppet</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo /opt/puppetlabs/puppet/bin/puppet agent --test --waitforcert <span class="m">60</span>
</span></span></code></pre></div></li>
<li>
<p>On the Puppet Server, check to see whether the Puppet DB server has requested a certificate</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo /opt/puppetlabs/puppet/bin/puppet cert --list
</span></span></code></pre></div></li>
<li>
<p>You should see the name of the Puppet DB server, followed by some other stuff. Accept the cert request</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo /opt/puppetlabs/puppet/bin/puppet cert --sign puppet-db
</span></span></code></pre></div></li>
<li>
<p>On the Puppet DB server, install the <code>puppetdb</code> service</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo /opt/puppetlabs/puppet/bin/puppet resource package puppetdb <span class="nv">ensure</span><span class="o">=</span>latest
</span></span></code></pre></div></li>
<li>
<p>Stop the <code>puppetdb</code> service and setup SSL</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo service puppetdb stop <span class="o">&amp;&amp;</span> sudo /opt/puppetlabs/bin/puppetdb ssl-setup
</span></span></code></pre></div></li>
<li>
<p>Ensure the <code>puppetdb</code> service runs on reboot</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo /opt/puppetlabs/puppet/bin/puppet resource service puppetserver <span class="nv">ensure</span><span class="o">=</span>running <span class="nv">enable</span><span class="o">=</span><span class="nb">true</span>
</span></span></code></pre></div></li>
<li>
<p>Restart the Puppet DB server</p>
</li>
<li>
<p>Check the PuppetDB logs on the Puppet DB server to verify that it&rsquo;s working</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo cat /var/log/puppetlabs/puppetdb/puppetdb.log
</span></span></code></pre></div></li>
</ol>
<h2 id="enrolling-a-macos-client">Enrolling a macOS client</h2>
<ol>
<li>
<p>Install the puppet agent onto the Puppet Client, by downloading the specific version as per the OS version, from <a href="https://downloads.puppetlabs.com/mac/">here</a></p>
</li>
<li>
<p>Install the download pkg file. When asked, specify the hostname of the server and the client</p>
</li>
<li>
<p>Open Terminal</p>
</li>
<li>
<p>Edit the Puppet configuration file and add the following contents</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo vi /etc/puppetlabs/puppet/puppet.conf
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="p">[</span><span class="n">main</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">logdir</span><span class="o">=/</span><span class="k">var</span><span class="o">/</span><span class="nb">log</span><span class="o">/</span><span class="n">puppet</span>
</span></span><span class="line"><span class="cl"><span class="n">vardir</span><span class="o">=/</span><span class="k">var</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">puppet</span>
</span></span><span class="line"><span class="cl"><span class="n">ssldir</span><span class="o">=/</span><span class="k">var</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">puppet</span><span class="o">/</span><span class="n">ssl</span>
</span></span><span class="line"><span class="cl"><span class="c1">#rundir=/var/run/puppet</span>
</span></span><span class="line"><span class="cl"><span class="n">factpath</span><span class="o">=$</span><span class="n">vardir</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">facter</span>
</span></span><span class="line"><span class="cl"><span class="n">templatedir</span><span class="o">=$</span><span class="n">confdir</span><span class="o">/</span><span class="n">templates</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="n">master</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">ssl_client_header</span> <span class="o">=</span> <span class="n">SSL_CLIENT_S_DN</span>
</span></span><span class="line"><span class="cl"><span class="n">ssl_client_verify_header</span> <span class="o">=</span> <span class="n">SSL_CLIENT_VERIFY</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="n">agent</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">server</span><span class="o">=</span><span class="n">puppet</span><span class="o">-</span><span class="n">server</span>
</span></span><span class="line"><span class="cl"><span class="n">certname</span><span class="o">=</span><span class="n">puppet</span><span class="o">-</span><span class="n">client</span>
</span></span><span class="line"><span class="cl"><span class="n">report</span><span class="o">=</span><span class="bp">true</span>
</span></span><span class="line"><span class="cl"><span class="n">pluginsync</span><span class="o">=</span><span class="bp">true</span>
</span></span></code></pre></div></li>
<li>
<p>Request a cert from the Puppet Server</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo /opt/puppetlabs/puppet/bin/puppet agent --waitforcert <span class="m">60</span> --test
</span></span></code></pre></div></li>
<li>
<p>On the Puppet DB server, run the log file and keep an eye on it</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo tail -f /var/log/puppetlabs/puppetdb/puppetdb.log
</span></span></code></pre></div></li>
<li>
<p>Then, on the Puppet Server, check and sign the cert request from <code>puppet-client</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo /opt/puppetlabs/puppet/bin/puppet cert --list
</span></span><span class="line"><span class="cl">$ sudo /opt/puppetlabs/puppet/bin/puppet cert --sign puppet-client
</span></span></code></pre></div></li>
</ol>
]]></content:encoded></item></channel></rss>