Skip to content

hamidgholami/puppet_lab

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Learning Puppet

Twitter Follow GitHub Follow Linkedin Badge

What is Puppet?

  • A Configuration Management Tool
  • A framework for Systems Automation
  • A Declarative Domain Specific Language (DSL)
  • An OpenSource software in written Ruby
  • Works on Linux, Unix (Solaris, AIX, *BSD), MacOS, Windows (Supported Platforms)

Reference

Software related to Puppet

  • Facter - Complementary tool to retrieve system's data
  • MCollective - Infrastructure Orchestration framework
  • Hiera - Key-value lookup tool where Puppet data can be placed
  • PuppetDB - Stores all the data generated by Puppet
  • Puppet DashBoard - A Puppet Web frontend and External Node Classifier (ENC)
  • The Foreman - A well-known third party provisioning tool and Puppet ENC
  • Geppetto - A Puppet IDE based on Eclipse

Installation

  • Debian, Ubuntu

    wget https://apt.puppet.com/puppet7-release-focal.deb && \
    sudo dpkg -i puppet7-release-focal.deb && \
    sudo apt update
    sudo apt install puppet-agent   # On Client (Nodes)
    sudo apt install puppetserver   # On Server (Master)
  • RedHat, CentOS

    # this example is for RHEL8
    sudo rpm -Uvh https://yum.puppet.com/puppet7-release-el-8.noarch.rpm
    sudo yum install puppet-agent   # On Client (Nodes)
    sudo yum install puppetserver   # On Server (Master)

Puppet Language

  • A Declarative Domain Specific Language (DSL)
  • It defines STATES (Not procedures)
  • Puppet code is written in manifests (files with .pp extension)
  • In the code we declare resources that affect elements of the system (files, packages, services ...)
  • Resources are grouped in classes which may expose parameters that affect their behavior.
  • Classes and configuration files are organized in modules.
  • Consult the official glossary to give the correct meaning to Puppet terms

Nodes Classification

  • When clients connect, the Puppet Master generates a catalog with the list of of the resources that clients have to apply locally.

  • The Puppet Master has to classify nodes and define for each of them:

    • The classes to include
    • The parameters to pass
    • The Puppet environment to use
  • The catalog is generated by the Master according to the logic of our Puppet code and data.

  • In our code we can define our variables and use other ones that may come from different sources:

    • facts generated directly by the client.
    • parameters obtained from node's classification.
    • Puppet internal variables.

Resource Types

  • Resource Types are single units of configuration composed by:
    • A type (package, service, file, user, mount, exec ...)
    • A title (how is called and referred)
    • Zero or more arguments.
      type { 'title':
        argument  => value,
        other_arg => value,
      }
      
      Example for a file resource type:
      file { 'motd':
        path     => '/etc/motd',
        content  => 'Let's learning Puppet :)'
      }

Resource Type refrence

  • From the shell the command line interface:
    puppet describe file
  • For the full list of available descriptions try:
    puppet describe --list
  • Puppet code for the list of native resource types:
    ls $(facter rubysitedir)/puppet/type

Simple sample of resources

  • Installation of OpenSSH package
    package { 'openssh':
       ensure   => present,
    }
  • Creation of /etc/motd file
    file { 'motd':
       path   => '/etc/motd',
    }
  • Start of http service
    service { 'httpd':
        ensure => running,
        enable => true,
    }

TO DO

Preview
  • Complete Puppet learning in README.md file
  • Vagrantfile for creating Puppet server-client environment.
  • docker-compose.yml for creating puppet server instance
  • Configuring puppetdb and fireman
  • Creating a secanrio with this environment and Puppet. (preferably install k8s-lab through Puppet)