Puppet IIS Module Troubleshooting

Update on 3/30/17:  The Puppet IIS module has been updated, and the problem below has been eliminated.

Problem scenario:  You want Puppet to install IIS.  You install the IIS module and find the README.md file has this Puppet DSL (as of 12/13/16):

class mywebsite {
  iis::manage_app_pool {‘my_application_pool’:
    enable_32_bit           =true,
    managed_runtime_version =’v4.0′,
  }
   iis::manage_site {‘www.mysite.com’:
    site_path     =’C:\inetpub\wwwroot\mysite’,

What is the Order of Execution of a Puppet Manifest?

Problem scenario:  When someone uses a .pp file (either through a puppet agent call from a Puppet Agent node or via a puppet apply on a Puppet Master server), what order can a human DevOps Engineer expect the order to be?

Answer:  The execution order of a given manifest is the top of the manifest is executed and Puppet works its way down from there. 

How Do You Troubleshoot a Puppet Manifest when The Errors and Logging Do Not Help You?

Updated on 6/8/20
This version is the unabridged version. For the abridged version, you may click here.

Problem scenario
A Puppet manifest is not working, but there are no obvious error messages.  When running the puppet agent command, you use the -d flag for debugging.  In your manifest, you use logoutput => true stanza.  But still, you cannot figure out why your manifest is not working.

How Do I Create a Manifest with Puppet Enterprise to be run on a server other than the Puppet Master server itself?

Question: How Do I Create a Manifest with Puppet Enterprise to be run on a server other than the Puppet Master server itself?

Assumption:  Puppet Master is installed on a Linux server.

Answer:  Manifests are .pp files.  The Puppet syntax (with its domain specific language) is beyond the scope of this posting.  This post is to get you started. Go to the directory where the modules are on the Puppet Master server. 

How do I get a forward slash (“/”) to be passed from a Puppet manifest on a Linux server with Puppet Master to a Windows server with Puppet Agent?

Question:  How do I get a forward slash (“/”) to be passed from a Puppet manifest on a Linux server with Puppet Master to a Windows Server with Puppet Agent?

Answer # 1 (for creating Scheduled Tasks with Puppet manifests): For a Scheduled Task, the forward slash may be crucial.  A forward slash (that Puppet between Linux and Windows will automatically substitute for a back slash) with a shutdown.exe server is the only way for a reboot to work properly with a Scheduled Task. 

How to Resolve a Puppet Error About Unclosed Quotes

Problem scenario
When running “puppet agent -t” on a Windows server with Puppet Agent installed and configured, you get an error like this:  “Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Unclosed quote after “”” followed by …”

Solution
For the relevant manifest, verify there are no unclosed quotes.  Then verify that you are using double backslashes in any path with a backslash “\”. 

How to Use Conditional Logic With A Puppet Manifest For Executing a Command

Scenario:  You want an exec command in a manifest to be invoked only if a certain file is on the Windows Server.  You do not want the execution of a command to happen if a file does not exist in a certain location.
Solution:  Incorporate the following lines into your manifest (.pp file).
exec { ‘cont_int”:
    command => “echo continual > contint.txt”,
  

How Do You Find Out if The Server Has Puppet Master or Puppet Agent?

Problem scenario
Assuming that you know Puppet is installed, you want to find out if you are on a Linux server that has Puppet Master or Puppet Agent.  This posting applies strictly to Linux or Unix.

Solution
Run this command:
cat /etc/puppet/puppet.conf
Then use “ip addr show” (or ifconfig) to verify the IP address of the server that you are on. 

How do you use the source keyword in Puppet’s DSL (when writing a manifest)?

When writing a Puppet manifest you can use the “content” reserved word.  You then have quotes around the actual text content of this file right in the manifest itself.  This works for a file that you want to create on a Puppet Agent server as long as the content is roughly one line of text.  But for a binary file, this will not work (as it cannot appear in the manifest).  The “source” reserved word allows you to point to a specific file on the Puppet Master server. 

Six Puppet Configuration Tips

Deploying Puppet Master and Puppet Agents for the first time can involve a significant amount of troubleshooting.  In this post, I want to review six miscellaneous points that may arise.  These are somewhat random, but they can serve in the rudimentary stages of quickly getting a proof of concept established.

1.  With a default configuration, Puppet Master on Linux will run manifests with only one name in only one location: /etc/puppet/manifests/site.pp

Many DevOps engineers do use manifests with different names.