Saturday, September 10, 2016

Puppet



Puppet has 2 distributes :

1. WEBrick Puppet (Apache) - Naming of services like puppetmaster and puppetagent etc.
2. Puppet Labs (Use in this tutorial)


Puppet Server: Installing From Packages

Puppet Collections and packages

$ wget https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb
$ sudo dpkg -i puppetlabs-release-pc1-xenial.deb
$ sudo apt update
$ sudo apt-get install puppetserver
$ sudo systemctl start puppetserver


Puppet agent: Linux

Puppet Collections and packages

$ wget https://apt.puppetlabs.com/puppetlabs-release-pc1-trusty.deb
$ sudo dpkg -i puppetlabs-release-pc1-trusty.deb

$ sudo apt-get update

** Before startup install & configure agent do not forget add Puppet Server(Master) in /etc/hosts at agent side. Default name of Puppet Server is puppet so you map that name to correct IP address.

ubuntu@node1:~$ sudo vi /etc/hosts
ubuntu@node1:~$ 
ubuntu@node1:~$ wget https://apt.puppetlabs.com/puppetlabs-release-pc1-trusty.deb
--2016-09-10 22:52:47--  https://apt.puppetlabs.com/puppetlabs-release-pc1-trusty.deb
Resolving apt.puppetlabs.com (apt.puppetlabs.com)... 198.58.114.168, 2600:3c00::f03c:91ff:fe69:6bf0
Connecting to apt.puppetlabs.com (apt.puppetlabs.com)|198.58.114.168|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 13652 (13K) [application/x-debian-package]
Saving to: 'puppetlabs-release-pc1-trusty.deb'

100%[================================================================================================================>] 13,652      44.3KB/s   in 0.3s   

2016-09-10 22:52:49 (44.3 KB/s) - 'puppetlabs-release-pc1-trusty.deb' saved [13652/13652]

ubuntu@node1:~$ sudo dpkg -i puppetlabs-release-pc1-trusty.deb
Selecting previously unselected package puppetlabs-release-pc1.
(Reading database ... 57362 files and directories currently installed.)
Preparing to unpack puppetlabs-release-pc1-trusty.deb ...
Unpacking puppetlabs-release-pc1 (1.1.0-2trusty) ...
Setting up puppetlabs-release-pc1 (1.1.0-2trusty) ...
ubuntu@node1:~$ sudo apt-get update
Hit https://apt.dockerproject.org ubuntu-trusty InRelease
Ign http://apt.puppetlabs.com trusty InRelease                         
Hit https://apt.dockerproject.org ubuntu-trusty/main amd64 Packages    
Ign http://archive.ubuntu.com trusty InRelease                    
Get:1 https://apt.dockerproject.org ubuntu-trusty/main Translation-en
Get:2 http://apt.puppetlabs.com trusty Release.gpg [841 B]             
Ign https://apt.dockerproject.org ubuntu-trusty/main Translation-en    
Get:3 http://archive.ubuntu.com trusty-updates InRelease [65.9 kB]
Get:4 http://apt.puppetlabs.com trusty Release [54.2 kB]   
Get:5 http://archive.ubuntu.com trusty-security InRelease [65.9 kB]
Get:6 http://apt.puppetlabs.com trusty/PC1 amd64 Packages [15.6 kB]
Hit http://archive.ubuntu.com trusty Release.gpg                      
Get:7 http://archive.ubuntu.com trusty-updates/main amd64 Packages [889 kB]
Get:8 http://archive.ubuntu.com trusty-updates/restricted amd64 Packages [15.9 kB]
Get:9 http://archive.ubuntu.com trusty-updates/universe amd64 Packages [373 kB]
Get:10 http://archive.ubuntu.com trusty-updates/multiverse amd64 Packages [14.8 kB]
Ign http://apt.puppetlabs.com trusty/PC1 Translation-en                 
Get:11 http://archive.ubuntu.com trusty-updates/main Translation-en [431 kB]
Get:12 http://archive.ubuntu.com trusty-updates/multiverse Translation-en [7661 B]
Get:13 http://archive.ubuntu.com trusty-updates/restricted Translation-en [3699 B]
Get:14 http://archive.ubuntu.com trusty-updates/universe Translation-en [197 kB]
Get:15 http://archive.ubuntu.com trusty-security/main amd64 Packages [524 kB]  
Get:16 http://archive.ubuntu.com trusty-security/restricted amd64 Packages [13.0 kB]
Get:17 http://archive.ubuntu.com trusty-security/universe amd64 Packages [136 kB]
Get:18 http://archive.ubuntu.com trusty-security/multiverse amd64 Packages [4990 B]
Get:19 http://archive.ubuntu.com trusty-security/main Translation-en [288 kB]  
Get:20 http://archive.ubuntu.com trusty-security/multiverse Translation-en [2570 B]
Get:21 http://archive.ubuntu.com trusty-security/restricted Translation-en [3206 B]
Get:22 http://archive.ubuntu.com trusty-security/universe Translation-en [81.3 kB]
Hit http://archive.ubuntu.com trusty Release                                   
Hit http://archive.ubuntu.com trusty/main amd64 Packages                       
Hit http://archive.ubuntu.com trusty/restricted amd64 Packages                 
Hit http://archive.ubuntu.com trusty/universe amd64 Packages                   
Hit http://archive.ubuntu.com trusty/multiverse amd64 Packages                 
Hit http://archive.ubuntu.com trusty/main Translation-en                       
Hit http://archive.ubuntu.com trusty/multiverse Translation-en                 
Hit http://archive.ubuntu.com trusty/restricted Translation-en                 
Hit http://archive.ubuntu.com trusty/universe Translation-en                   
Fetched 3187 kB in 18s (171 kB/s)                                              
Reading package lists... Done
ubuntu@node1:~$ sudo apt-get install puppet-agent
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  puppet-agent
0 upgraded, 1 newly installed, 0 to remove and 12 not upgraded.
Need to get 15.1 MB of archives.
After this operation, 81.8 MB of additional disk space will be used.
Get:1 http://apt.puppetlabs.com/ trusty/PC1 puppet-agent amd64 1.6.2-1trusty [15.1 MB]
Fetched 15.1 MB in 0s (60.7 MB/s) 
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
 LANGUAGE = (unset),
 LC_ALL = (unset),
 LC_TIME = "th_TH.UTF-8",
 LC_MONETARY = "th_TH.UTF-8",
 LC_ADDRESS = "th_TH.UTF-8",
 LC_TELEPHONE = "th_TH.UTF-8",
 LC_NAME = "th_TH.UTF-8",
 LC_MEASUREMENT = "th_TH.UTF-8",
 LC_IDENTIFICATION = "th_TH.UTF-8",
 LC_NUMERIC = "th_TH.UTF-8",
 LC_PAPER = "th_TH.UTF-8",
 LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_ALL to default locale: No such file or directory
Selecting previously unselected package puppet-agent.
(Reading database ... 57367 files and directories currently installed.)
Preparing to unpack .../puppet-agent_1.6.2-1trusty_amd64.deb ...
Unpacking puppet-agent (1.6.2-1trusty) ...
Processing triggers for ureadahead (0.100.0-16) ...
Setting up puppet-agent (1.6.2-1trusty) ...
update-rc.d: warning:  start runlevel arguments (none) do not match pxp-agent Default-Start values (2 3 4 5)
update-rc.d: warning:  stop runlevel arguments (none) do not match pxp-agent Default-Stop values (0 1 6)
Processing triggers for ureadahead (0.100.0-16) ...
ubuntu@node1:~$ sudo /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true
2016-09-10 22:54:37.681893 WARN  puppetlabs.facter - locale environment variables were bad; continuing with LANG=C LC_ALL=C
Notice: /Service[puppet]/ensure: ensure changed 'stopped' to 'running'
service { 'puppet':
  ensure => 'running',
  enable => 'true',
}
ubuntu@node1:~$ sudo /opt/puppetlabs/bin/puppet agent --test
2016-09-10 22:57:11.396529 WARN  puppetlabs.facter - locale environment variables were bad; continuing with LANG=C LC_ALL=C
Info: Using configured environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for node1
Info: Applying configuration version '1473523040'
Notice: Applied catalog in 0.24 seconds

Sign certificates on the CA master


nutt@nutt-pc:~/Downloads$ sudo /opt/puppetlabs/bin/puppet cert list
Warning: Facter: Could not process routing table entry: Expected a destination followed by key/value pairs, got '192.168.122.0/24 dev virbr0  proto kernel  scope link  src 192.168.122.1 linkdown'
  "node1" (SHA256) CE:54:74:42:95:4A:C5:44:20:90:23:26:3C:63:F0:4D:71:79:12:BC:06:CC:0A:6A:ED:DE:E4:BD:AA:77:C2:A3
nutt@nutt-pc:~/Downloads$ sudo /opt/puppetlabs/bin/puppet cert sign node1
Warning: Facter: Could not process routing table entry: Expected a destination followed by key/value pairs, got '192.168.122.0/24 dev virbr0  proto kernel  scope link  src 192.168.122.1 linkdown'
Signing Certificate Request for:
  "node1" (SHA256) CE:54:74:42:95:4A:C5:44:20:90:23:26:3C:63:F0:4D:71:79:12:BC:06:CC:0A:6A:ED:DE:E4:BD:AA:77:C2:A3
Notice: Signed certificate request for node1
Notice: Removing file Puppet::SSL::CertificateRequest node1 at '/etc/puppetlabs/puppet/ssl/ca/requests/node1.pem'



Master-Agent Simple Setup


Main file /etc/puppetlabs/code/environments/production/manifests/site.pp

All node effects

file {'/tmp/example-ip':                                            # resource type file and filename
  ensure  => present,                                               # make sure it exists
  mode    => '0644',                                                # file permissions
  content => "Here is my Public IP Address: ${ipaddress_eth0}.\n",  # note the ipaddress_eth0 fact
}

Specific node effects

node 'ns1', 'ns2' {    # applies to ns1 and ns2 nodes
  file {'/tmp/dns':    # resource type file and filename
    ensure => present, # make sure it exists
    mode => '0644',
    content => "Only DNS servers get this file.\n",
  }
}

node default {}       # applies to nodes that aren't explicitly defined


Resource propagate to nodes depend on their schedule or take effect them immediately with 'puppet agent --test'
As a result of above configuration, all node will have a file name 'dns' and 'example-ip' in /tmp directory

Puppet Apply (standalone run puppet file)


Optional, set environment variable:  only root user can run Puppet

PATH=/opt/puppetlabs/bin:$PATH;export PATH

docker_example.pp


include 'docker'
docker::run { 'helloworld':
  image   => 'ubuntu:precise',
  command => '/bin/sh -c "while true; do echo hello world; sleep 1; done"',
}




Troubleshooting


Some of client may have an error when run Puppet command like below:


root@node2:~/Docker/puppet# facter
2016-09-11 00:21:25.117804 WARN  puppetlabs.facter - locale environment variables were bad; continuing with LANG=C LC_ALL=C
2016-09-11 00:21:25.146927 FATAL puppetlabs.facter - unhandled exception: boost::filesystem::current_path: No such file or directory
root@node2:~/Docker/puppet# puppet agent --test
2016-09-11 00:23:03.006097 WARN  puppetlabs.facter - locale environment variables were bad; continuing with LANG=C LC_ALL=C
terminate called after throwing an instance of 'boost::filesystem::filesystem_error'
  what():  boost::filesystem::current_path: No such file or directory
Aborted (core dumped)

This because server do not have some library such as 'libboost-filesystem-dev'









1 comment:

  1. Is there any way to remove the warning "WARN puppetlabs.facter - locale environment variables were bad; continuing with LANG=C LC_ALL=C" I've tried with "export LANG=C LC_ALL=C" but the session restart return the values.

    ReplyDelete