SlideShare a Scribd company logo
Managing Files 
with Puppet 
An introduction to configuration management 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
Who am I? 
• Walter Heck, Software engineer turned DBA, turned 
Sysadmin, turned entrepreneur 
• Founder of OlinData (http://www.olindata.com) 
o Puppet Labs training partner for all of Asia and part of 
Europe 
o Node.JS, OpenStack, Linux Foundation training 
o MySQL consulting 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
Overview 
• What is puppet (for those not aware)? 
• Which modules to use for file management? 
• Built-in puppet resources for working with files 
• How to deal with cross-resource type conflicts 
• Exported resources and the concat module 
• Questions 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
What is Puppet and why do we care? 
• Configuration management software 
• Scales well (1-200k+ nodes) 
• Multi-platform (windows, *nix, Mac OS, BSD) 
• Commercially supported Open Source 
• Infrastructure as code 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
What options do we have? 
1. source and content attributes of the file resource type 
2. the concat module 
3. the file_line resource type from the stdlib module 
4. the inifile module 
5. the augeas tool 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
The file resource type 
• used to manage whole files (and directories and symlinks) 
• content of the file is managed in two mutually exclusive ways: 
o source => ‘puppet:///modules/apache/httpd.conf’ 
o content => template(apache/httpd.conf.erb’) 
• in heavy or large environments, split off file serving to a 
separate puppetmaster 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
The file resource type - source 
• Source attribute can use 
o local file on the agent 
• syntax: source => ‘/usr/local/myfile.txt’ 
o remote file on the master 
• syntax: source => ‘puppet://<puppetmaster>/modules/apache/httpd.conf’ 
• source attribute copies content from source non-modifiable 
o great for static files eg. init.d scripts 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
The file resource (source example) 
$master: cat mymodule/manifests/bar.pp 
class mymodule::bar { 
file { '/tmp/file01': 
ensure => file, 
owner => 'root', 
group => 'root', 
mode => '0644', 
source => 'puppet:///modules/mymodule/file01', 
} 
file { '/tmp/file02': 
ensure => file, 
owner => 'root', 
group => 'root', 
mode => '0644', 
source => '/opt/local/file02', 
} 
} 
$master: cat mymodule/files/file01 
This is a static file 
$agent: cat /opt/local/file02 
This is a locally sourced static file 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files 
$agent: puppet apply -e ‘include mymodule::bar’ 
$agent: cat /tmp/file01 
This is a static file 
$agent: cat /tmp/file02 
This is a locally sourced static file
The file resource type - content 
• Content attribute assigns a static string to the content of the 
file 
o use the template() function to parse an erb template and 
assign the result. 
• eg. content => template(‘apache/httpd.conf’) 
• erb templates: standard ruby embedded templates 
• https://docs.puppetlabs.com/guides/templating.html 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
The file resource (content example) 
$ cat mymodule/manifests/foo.pp 
class mymodule::foo { 
$say_hello_to = 'dude' 
$myname = 'file03' 
file { "/tmp/$myname": 
ensure => file, 
content => template('mymodule/polite-file.erb'), 
} 
} 
$ cat mymodule/templates/polite-file.erb 
<% if @say_hello_to -%> 
Hello <%= @say_hello_to %>, 
<% end -%> 
I'm <%= @myname %>, on a <%= @operatingsystem %> system, nice to meet you. 
$ puppet apply -e ‘include mymodule::foo’ 
$ cat /tmp/file03 
Hello dude, 
I'm file03, on a Ubuntu system, nice to meet you. 
Note: the @operatingsystem variable (replaced here by “Ubuntu”) value is provided by Facter 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
The concat module 
• puppet module developed by R.I.Pienaar originally in 2010 
o adopted by PuppetLabs: 
https://github.com/puppetlabs/puppetlabs-concat 
• Allows to concatenate separate sections of files 
o eg. puppet.conf on your puppet master 
• Uses a local nifty trick with a shell script 
o check out: files/concatfragments.sh 
• Bonus: use exported resources on fragments to collect for 
instance haproxy loadbalancer backends 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
The concat module (example) 
class motd { 
$motd = '/etc/motd' 
concat { $motd: 
owner => 'root', 
group => 'root', 
mode => '0644' 
} 
concat::fragment{ 'motd_header': 
target => $motd, 
content => "nPuppet modules on this server:nn", 
order => '01' 
} 
# local users on the machine can append to motd by just creating 
# /etc/motd.local 
concat::fragment{ 'motd_local': 
target => $motd, 
source => '/etc/motd.local', 
order => '15' 
} 
} 
#Note: concat::fragment resources for a single target file can appear anywhere in your repository, across 
modules and classes 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
The stdlib module - file_line 
• used for managing single lines in a file you otherwise don’t 
care about 
o supports regex matching 
o caution: managing the same file with file_line and a file 
resource can cause flip-flopping file content 
• part of the puppetlabs/stdlib module 
o https://github.com/puppetlabs/puppetlabs-stdlib 
• implemented as custom resource type 
o lib/puppet/provider/file_line/ruby.rb 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
file_line (example) 
class foo::bar { 
file_line { 'sudo_rule': 
path => '/etc/sudoers', 
line => '%sudo ALL=(ALL) ALL', 
} 
file_line { 'change_mount': 
path => '/etc/fstab', 
line => '10.0.0.1:/vol/data /opt/data nfs defaults 0 0', 
match => '^172.16.17.2:/vol/old', 
} 
} 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
The inifile module 
• used for managing inifile style files 
o created by Chris Price, maintained by PuppetLabs 
o https://github.com/puppetlabs/puppetlabs-inifile 
• most important resource type is ini_setting 
o Auto-creates ini section headers 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
The inifile module - example 
class foo::baz { 
ini_setting { "sample setting": 
ensure => present, 
path => '/tmp/foo.ini', 
section => 'foo', 
setting => 'foosetting', 
value => 'FOO!', 
} 
} 
$ puppet apply -e ‘include foo::baz’ 
$ cat /tmp/foo.ini 
[foo] 
foosetting = FOO! 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
Augeas 
• Advanced parsing of config files 
o http://augeas.net/ 
• Uses so-called lenses that define the grammar of known 
config files. Many available for well known software 
(http://augeas.net/stock_lenses.html) 
o Creating your own lense possible, but tough! 
• After parsing, a configuration file will be available in tree 
format, with read/write capabilities to each node in the tree 
• Works regardless of order of lines in the file 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
Augeas (example) 
walter@web02:~$ cat -n /etc/hosts 
1 # HEADER: This file was autogenerated at Sun 
May 12 07:31:47 +0200 2013 
2 # HEADER: by puppet. While it can still be 
managed manually, it 
3 # HEADER: is definitely not recommended. 
4 ### OlinData installimage 
5 # nameserver config 
6 # IPv4 
7 127.0.0.1 localhost 
8 1.2.3.4 web02.olindata.com 
9 1.2.3.5 db01.olindata.com 
10 1.2.3.6 test01.olindata.com 
11 192.168.100.100 db01 
12 192.168.100.101 web02 
13 1.2.3.7 mail01.olindata.com puppet 
[..SNIP..] 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files 
walter@web02:~$ augtool 
augtool> ls /files/etc/hosts/7 
ipaddr = 1.2.3.7 
canonical = mail01.olindata.com 
alias = puppet 
augtool> ls /files/etc/hosts/07 
augtool> ls /files/etc/hosts/7 
ipaddr = 1.2.3.7 
canonical = mail01.olindata.com 
alias = puppet 
augtool> match /files/etc/hosts/*/ipaddr 
1.2.3.4 
/files/etc/hosts/2/ipaddr 
augtool> print /files/etc/hosts/*/ipaddr 
/files/etc/hosts/1/ipaddr = "127.0.0.1" 
/files/etc/hosts/2/ipaddr = "1.2.3.4" 
/files/etc/hosts/3/ipaddr = "1.2.3.5" 
/files/etc/hosts/4/ipaddr = "1.2.3.6" 
/files/etc/hosts/5/ipaddr = "192.168.100.100" 
/files/etc/hosts/6/ipaddr = "192.168.100.101" 
/files/etc/hosts/7/ipaddr = "1.2.3.7"
Trivia - what happens? 
root@web02 /home/walter # cat test.pp 
class test { 
file { '/tmp/motd': 
ensure => present, 
content => "foo nbar n" 
} 
file_line { 'test line': 
path => '/tmp/motd', 
line => 'baz', 
match => '^ba.', 
} 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files 
} 
include test 
root@web02 /home/walter # puppet apply test.pp 
Notice: Compiled catalog for web02.olindata.com in environment dev in 0.06 seconds 
Notice: /Stage[main]/Test/File[/tmp/motd]/ensure: created 
Notice: /Stage[main]/Test/File_line[test line]/ensure: created 
Notice: Finished catalog run in 0.71 seconds
Trivia - what happens? 
root@web02 /home/walter # cat test.pp 
class test { 
file { '/tmp/motd': 
ensure => present, 
content => "foo nbar n" 
} 
file_line { 'test line': 
path => '/tmp/motd', 
line => 'baz', 
match => '^ba.', 
} 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files 
} 
root@web02 /home/walter # cat /tmp/motd 
foo 
baz 
include test 
root@web02 /home/walter # puppet apply test.pp 
Notice: Compiled catalog for web02.olindata.com in environment dev in 0.06 seconds 
Notice: /Stage[main]/Test/File[/tmp/motd]/ensure: created 
Notice: /Stage[main]/Test/File_line[test line]/ensure: created 
Notice: Finished catalog run in 0.71 seconds
Exported resources 
PuppetDB 
3. Store in PuppetDB 5. Retrieve from PuppetDB 
Puppet 
Master 
WEB01 DB01 
@@concat::fragment{ ‘test’: 
ensure => present, 
target => ‘/etc/motd’ 
} 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files 
concat {‘/etc/motd’: 
ensure => present, 
} 
Concat::Fragment <<| |>> 
1. Puppet agent run 
6. Send to node 
2. Export to PM 
4. Collect on DB01
Exported resources 
PuppetDB 
3. Store in PuppetDB 5. Retrieve from PuppetDB 
Puppet 
Master 
WEB01 DB01 
@@concat::fragment{ ‘test’: 
ensure => present, 
target => ‘/etc/motd’ 
} 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files 
concat {‘/etc/motd’: 
ensure => present, 
} 
Concat::Fragment <<| |>> 
1. Puppet agent run 
6. Send to node 
2. Export to PM 
4. Collect on DB01
Exported resources 
PuppetDB 
3. Store in PuppetDB 5. Retrieve from PuppetDB 
Puppet 
Master 
WEB01 DB01 
@@concat::fragment{ ‘test’: 
ensure => present, 
target => ‘/etc/motd’ 
} 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files 
concat {‘/etc/motd’: 
ensure => present, 
} 
Concat::Fragment <<| |>> 
1. Puppet agent run 
6. Send to node 
2. Export to PM 
4. Collect on DB01
Exported resources 
PuppetDB 
3. Store in PuppetDB 5. Retrieve from PuppetDB 
Puppet 
Master 
WEB01 DB01 
@@concat::fragment{ ‘test’: 
ensure => present, 
target => ‘/etc/motd’ 
} 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files 
concat {‘/etc/motd’: 
ensure => present, 
} 
Concat::Fragment <<| |>> 
1. Puppet agent run 
6. Send to node 
2. Export to PM 
4. Collect on DB01
Exported resources 
PuppetDB 
3. Store in PuppetDB 5. Retrieve from PuppetDB 
Puppet 
Master 
WEB01 DB01 
@@concat::fragment{ ‘test’: 
ensure => present, 
target => ‘/etc/motd’ 
} 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files 
concat {‘/etc/motd’: 
ensure => present, 
} 
Concat::Fragment <<| |>> 
1. Puppet agent run 
6. Send to node 
2. Export to PM 
4. Collect on DB01
Exported resources 
PuppetDB 
3. Store in PuppetDB 5. Retrieve from PuppetDB 
Puppet 
Master 
WEB01 DB01 
@@concat::fragment{ ‘test’: 
ensure => present, 
target => ‘/etc/motd’ 
} 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files 
concat {‘/etc/motd’: 
ensure => present, 
} 
Concat::Fragment <<| |>> 
1. Puppet agent run 
6. Send to node 
2. Export to PM 
4. Collect on DB01
Exported resources 
node /^webd{3}.olindata.vm$/ { 
include role::haproxy::backend 
} 
node 'proxy01.olindata.vm' { 
include role::haproxy 
} 
class role::haproxy { 
concat {‘/etc/haproxy.cfg’: 
ensure => present, 
} 
Concat::Fragment <<| |>> 
} 
class role::haproxy::backend { 
@@concat::fragment { $::fqdn: 
ensure => 'present', 
target => '/etc/haproxy.cfg' 
} 
} 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
Upcoming training 
• Puppet Fundamentals Training, Vienna 
Monday, November 17, 2014 
• Puppet Fundamentals Training, Barcelona 
Monday, November 24, 2014 
• Puppet Fundamentals Training, Hyderabad 
Monday, November 24, 2014 
• Puppet Fundamentals Training, Pune 
Monday, December 1, 2014 
• Puppet Architect Training, Singapore 
Wednesday, December 17, 2014 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
We’re hiring! 
EU and Asia based 
trainers 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files 
jobs@olindata.com
Questions? 
@walterheck / @olindata 
http://www.olindata.com 
walterheck@olindata.com 
http://github.com/olindata 
OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files

More Related Content

What's hot

Puppet modules: A Holistic Approach - Geneva
Puppet modules: A Holistic Approach - GenevaPuppet modules: A Holistic Approach - Geneva
Puppet modules: A Holistic Approach - Geneva
Alessandro Franceschi
 
11 tools for your PHP devops stack
11 tools for your PHP devops stack11 tools for your PHP devops stack
11 tools for your PHP devops stack
Kris Buytaert
 
rake puppetexpert:create - Puppet Camp Silicon Valley 2014
rake puppetexpert:create - Puppet Camp Silicon Valley 2014rake puppetexpert:create - Puppet Camp Silicon Valley 2014
rake puppetexpert:create - Puppet Camp Silicon Valley 2014
nvpuppet
 
Puppet @ Seat
Puppet @ SeatPuppet @ Seat
Puppet @ Seat
Alessandro Franceschi
 
PyCon US 2012 - State of WSGI 2
PyCon US 2012 - State of WSGI 2PyCon US 2012 - State of WSGI 2
PyCon US 2012 - State of WSGI 2
Graham Dumpleton
 
Troubleshooting Puppet
Troubleshooting PuppetTroubleshooting Puppet
Troubleshooting Puppet
Thomas Howard Uphill
 
The Puppet Debugging Kit: Building Blocks for Exploration and Problem Solving...
The Puppet Debugging Kit: Building Blocks for Exploration and Problem Solving...The Puppet Debugging Kit: Building Blocks for Exploration and Problem Solving...
The Puppet Debugging Kit: Building Blocks for Exploration and Problem Solving...
Puppet
 
Puppet control-repo 
to the next level
Puppet control-repo 
to the next levelPuppet control-repo 
to the next level
Puppet control-repo 
to the next level
Alessandro Franceschi
 
PuppetCamp SEA 1 - Version Control with Puppet
PuppetCamp SEA 1 - Version Control with PuppetPuppetCamp SEA 1 - Version Control with Puppet
PuppetCamp SEA 1 - Version Control with Puppet
Walter Heck
 
Docker for data science
Docker for data scienceDocker for data science
Docker for data science
Calvin Giles
 
Build Automation of PHP Applications
Build Automation of PHP ApplicationsBuild Automation of PHP Applications
Build Automation of PHP Applications
Pavan Kumar N
 
Puppet at janrain
Puppet at janrainPuppet at janrain
Puppet at janrain
Puppet
 
Puppet fundamentals
Puppet fundamentalsPuppet fundamentals
Puppet fundamentals
Murali Boyapati
 
Puppet for SysAdmins
Puppet for SysAdminsPuppet for SysAdmins
Puppet for SysAdmins
Puppet
 
Webinar - Setup MySQL with Puppet
Webinar - Setup MySQL with PuppetWebinar - Setup MySQL with Puppet
Webinar - Setup MySQL with Puppet
OlinData
 
Using docker for data science - part 2
Using docker for data science - part 2Using docker for data science - part 2
Using docker for data science - part 2
Calvin Giles
 
Puppet modules: An Holistic Approach
Puppet modules: An Holistic ApproachPuppet modules: An Holistic Approach
Puppet modules: An Holistic Approach
Alessandro Franceschi
 
Using python and docker for data science
Using python and docker for data scienceUsing python and docker for data science
Using python and docker for data science
Calvin Giles
 
Puppet Systems Infrastructure Construction Kit
Puppet Systems Infrastructure Construction KitPuppet Systems Infrastructure Construction Kit
Puppet Systems Infrastructure Construction Kit
Alessandro Franceschi
 
Drupal Day 2012 - Automating Drupal Development: Make!les, Features and Beyond
Drupal Day 2012 - Automating Drupal Development: Make!les, Features and BeyondDrupal Day 2012 - Automating Drupal Development: Make!les, Features and Beyond
Drupal Day 2012 - Automating Drupal Development: Make!les, Features and Beyond
DrupalDay
 

What's hot (20)

Puppet modules: A Holistic Approach - Geneva
Puppet modules: A Holistic Approach - GenevaPuppet modules: A Holistic Approach - Geneva
Puppet modules: A Holistic Approach - Geneva
 
11 tools for your PHP devops stack
11 tools for your PHP devops stack11 tools for your PHP devops stack
11 tools for your PHP devops stack
 
rake puppetexpert:create - Puppet Camp Silicon Valley 2014
rake puppetexpert:create - Puppet Camp Silicon Valley 2014rake puppetexpert:create - Puppet Camp Silicon Valley 2014
rake puppetexpert:create - Puppet Camp Silicon Valley 2014
 
Puppet @ Seat
Puppet @ SeatPuppet @ Seat
Puppet @ Seat
 
PyCon US 2012 - State of WSGI 2
PyCon US 2012 - State of WSGI 2PyCon US 2012 - State of WSGI 2
PyCon US 2012 - State of WSGI 2
 
Troubleshooting Puppet
Troubleshooting PuppetTroubleshooting Puppet
Troubleshooting Puppet
 
The Puppet Debugging Kit: Building Blocks for Exploration and Problem Solving...
The Puppet Debugging Kit: Building Blocks for Exploration and Problem Solving...The Puppet Debugging Kit: Building Blocks for Exploration and Problem Solving...
The Puppet Debugging Kit: Building Blocks for Exploration and Problem Solving...
 
Puppet control-repo 
to the next level
Puppet control-repo 
to the next levelPuppet control-repo 
to the next level
Puppet control-repo 
to the next level
 
PuppetCamp SEA 1 - Version Control with Puppet
PuppetCamp SEA 1 - Version Control with PuppetPuppetCamp SEA 1 - Version Control with Puppet
PuppetCamp SEA 1 - Version Control with Puppet
 
Docker for data science
Docker for data scienceDocker for data science
Docker for data science
 
Build Automation of PHP Applications
Build Automation of PHP ApplicationsBuild Automation of PHP Applications
Build Automation of PHP Applications
 
Puppet at janrain
Puppet at janrainPuppet at janrain
Puppet at janrain
 
Puppet fundamentals
Puppet fundamentalsPuppet fundamentals
Puppet fundamentals
 
Puppet for SysAdmins
Puppet for SysAdminsPuppet for SysAdmins
Puppet for SysAdmins
 
Webinar - Setup MySQL with Puppet
Webinar - Setup MySQL with PuppetWebinar - Setup MySQL with Puppet
Webinar - Setup MySQL with Puppet
 
Using docker for data science - part 2
Using docker for data science - part 2Using docker for data science - part 2
Using docker for data science - part 2
 
Puppet modules: An Holistic Approach
Puppet modules: An Holistic ApproachPuppet modules: An Holistic Approach
Puppet modules: An Holistic Approach
 
Using python and docker for data science
Using python and docker for data scienceUsing python and docker for data science
Using python and docker for data science
 
Puppet Systems Infrastructure Construction Kit
Puppet Systems Infrastructure Construction KitPuppet Systems Infrastructure Construction Kit
Puppet Systems Infrastructure Construction Kit
 
Drupal Day 2012 - Automating Drupal Development: Make!les, Features and Beyond
Drupal Day 2012 - Automating Drupal Development: Make!les, Features and BeyondDrupal Day 2012 - Automating Drupal Development: Make!les, Features and Beyond
Drupal Day 2012 - Automating Drupal Development: Make!les, Features and Beyond
 

Similar to Webinar - Managing Files with Puppet

Developing IT infrastructures with Puppet
Developing IT infrastructures with PuppetDeveloping IT infrastructures with Puppet
Developing IT infrastructures with Puppet
Alessandro Franceschi
 
Puppet: Eclipsecon ALM 2013
Puppet: Eclipsecon ALM 2013Puppet: Eclipsecon ALM 2013
Puppet: Eclipsecon ALM 2013
grim_radical
 
Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (...
Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (...Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (...
Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (...
Puppet
 
Greenfield Puppet: Getting it right from the start
Greenfield Puppet: Getting it right from the startGreenfield Puppet: Getting it right from the start
Greenfield Puppet: Getting it right from the start
David Danzilio
 
Puppet atbazaarvoice
Puppet atbazaarvoicePuppet atbazaarvoice
Puppet atbazaarvoice
Dave Barcelo
 
Virtualization and automation of library software/machines + Puppet
Virtualization and automation of library software/machines + PuppetVirtualization and automation of library software/machines + Puppet
Virtualization and automation of library software/machines + Puppet
Omar Reygaert
 
PuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of PuppetPuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of Puppet
OlinData
 
PuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of PuppetPuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of Puppet
Walter Heck
 
Puppet getting started by Dirk Götz
Puppet getting started by Dirk GötzPuppet getting started by Dirk Götz
Puppet getting started by Dirk Götz
NETWAYS
 
Introduction to puppet - Hands on Session at HPI Potsdam
Introduction to puppet - Hands on Session at HPI PotsdamIntroduction to puppet - Hands on Session at HPI Potsdam
Introduction to puppet - Hands on Session at HPI Potsdam
Christoph Oelmüller
 
Provisioning with Puppet
Provisioning with PuppetProvisioning with Puppet
Provisioning with Puppet
Joe Ray
 
Puppet at Bazaarvoice
Puppet at BazaarvoicePuppet at Bazaarvoice
Puppet at Bazaarvoice
Puppet
 
20090514 Introducing Puppet To Sasag
20090514 Introducing Puppet To Sasag20090514 Introducing Puppet To Sasag
20090514 Introducing Puppet To Sasag
garrett honeycutt
 
Automated reproducible images on openstack using vagrant and packer
Automated reproducible images on openstack using vagrant and packerAutomated reproducible images on openstack using vagrant and packer
Automated reproducible images on openstack using vagrant and packer
Jan Collijs
 
Puppet quick start guide
Puppet quick start guidePuppet quick start guide
Puppet quick start guide
Suhan Dharmasuriya
 
Puppet without Root - PuppetConf 2013
Puppet without Root - PuppetConf 2013Puppet without Root - PuppetConf 2013
Puppet without Root - PuppetConf 2013
Puppet
 
From SaltStack to Puppet and beyond...
From SaltStack to Puppet and beyond...From SaltStack to Puppet and beyond...
From SaltStack to Puppet and beyond...
Yury Bushmelev
 
Puppet HackDay/BarCamp New Delhi Exercises
Puppet HackDay/BarCamp New Delhi ExercisesPuppet HackDay/BarCamp New Delhi Exercises
Puppet HackDay/BarCamp New Delhi Exercises
Julie Tsai
 
IzPack at LyonJUG'11
IzPack at LyonJUG'11IzPack at LyonJUG'11
IzPack at LyonJUG'11
julien.ponge
 
Ansible new paradigms for orchestration
Ansible new paradigms for orchestrationAnsible new paradigms for orchestration
Ansible new paradigms for orchestration
Paolo Tonin
 

Similar to Webinar - Managing Files with Puppet (20)

Developing IT infrastructures with Puppet
Developing IT infrastructures with PuppetDeveloping IT infrastructures with Puppet
Developing IT infrastructures with Puppet
 
Puppet: Eclipsecon ALM 2013
Puppet: Eclipsecon ALM 2013Puppet: Eclipsecon ALM 2013
Puppet: Eclipsecon ALM 2013
 
Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (...
Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (...Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (...
Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (...
 
Greenfield Puppet: Getting it right from the start
Greenfield Puppet: Getting it right from the startGreenfield Puppet: Getting it right from the start
Greenfield Puppet: Getting it right from the start
 
Puppet atbazaarvoice
Puppet atbazaarvoicePuppet atbazaarvoice
Puppet atbazaarvoice
 
Virtualization and automation of library software/machines + Puppet
Virtualization and automation of library software/machines + PuppetVirtualization and automation of library software/machines + Puppet
Virtualization and automation of library software/machines + Puppet
 
PuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of PuppetPuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of Puppet
 
PuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of PuppetPuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of Puppet
 
Puppet getting started by Dirk Götz
Puppet getting started by Dirk GötzPuppet getting started by Dirk Götz
Puppet getting started by Dirk Götz
 
Introduction to puppet - Hands on Session at HPI Potsdam
Introduction to puppet - Hands on Session at HPI PotsdamIntroduction to puppet - Hands on Session at HPI Potsdam
Introduction to puppet - Hands on Session at HPI Potsdam
 
Provisioning with Puppet
Provisioning with PuppetProvisioning with Puppet
Provisioning with Puppet
 
Puppet at Bazaarvoice
Puppet at BazaarvoicePuppet at Bazaarvoice
Puppet at Bazaarvoice
 
20090514 Introducing Puppet To Sasag
20090514 Introducing Puppet To Sasag20090514 Introducing Puppet To Sasag
20090514 Introducing Puppet To Sasag
 
Automated reproducible images on openstack using vagrant and packer
Automated reproducible images on openstack using vagrant and packerAutomated reproducible images on openstack using vagrant and packer
Automated reproducible images on openstack using vagrant and packer
 
Puppet quick start guide
Puppet quick start guidePuppet quick start guide
Puppet quick start guide
 
Puppet without Root - PuppetConf 2013
Puppet without Root - PuppetConf 2013Puppet without Root - PuppetConf 2013
Puppet without Root - PuppetConf 2013
 
From SaltStack to Puppet and beyond...
From SaltStack to Puppet and beyond...From SaltStack to Puppet and beyond...
From SaltStack to Puppet and beyond...
 
Puppet HackDay/BarCamp New Delhi Exercises
Puppet HackDay/BarCamp New Delhi ExercisesPuppet HackDay/BarCamp New Delhi Exercises
Puppet HackDay/BarCamp New Delhi Exercises
 
IzPack at LyonJUG'11
IzPack at LyonJUG'11IzPack at LyonJUG'11
IzPack at LyonJUG'11
 
Ansible new paradigms for orchestration
Ansible new paradigms for orchestrationAnsible new paradigms for orchestration
Ansible new paradigms for orchestration
 

More from OlinData

AWS Cost Control: Cloud Custodian
AWS Cost Control: Cloud CustodianAWS Cost Control: Cloud Custodian
AWS Cost Control: Cloud Custodian
OlinData
 
Introduction to 2FA on AWS
Introduction to 2FA on AWSIntroduction to 2FA on AWS
Introduction to 2FA on AWS
OlinData
 
AWS Data Migration case study: from tapes to Glacier
AWS Data Migration case study: from tapes to GlacierAWS Data Migration case study: from tapes to Glacier
AWS Data Migration case study: from tapes to Glacier
OlinData
 
Issuing temporary credentials for my sql using hashicorp vault
Issuing temporary credentials for my sql using hashicorp vaultIssuing temporary credentials for my sql using hashicorp vault
Issuing temporary credentials for my sql using hashicorp vault
OlinData
 
Log monitoring with Logstash and Icinga
Log monitoring with Logstash and IcingaLog monitoring with Logstash and Icinga
Log monitoring with Logstash and Icinga
OlinData
 
FOSDEM 2017: GitLab CI
FOSDEM 2017:  GitLab CIFOSDEM 2017:  GitLab CI
FOSDEM 2017: GitLab CI
OlinData
 
Cfgmgmtcamp 2017 docker is the new tarball
Cfgmgmtcamp 2017  docker is the new tarballCfgmgmtcamp 2017  docker is the new tarball
Cfgmgmtcamp 2017 docker is the new tarball
OlinData
 
Icinga 2 and Puppet - Automate Monitoring
Icinga 2 and Puppet - Automate MonitoringIcinga 2 and Puppet - Automate Monitoring
Icinga 2 and Puppet - Automate Monitoring
OlinData
 
Webinar - Auto-deploy Puppet Enterprise: Vagrant and Oscar
Webinar - Auto-deploy Puppet Enterprise: Vagrant and OscarWebinar - Auto-deploy Puppet Enterprise: Vagrant and Oscar
Webinar - Auto-deploy Puppet Enterprise: Vagrant and Oscar
OlinData
 
Webinar - High Availability and Distributed Monitoring with Icinga2
Webinar - High Availability and Distributed Monitoring with Icinga2Webinar - High Availability and Distributed Monitoring with Icinga2
Webinar - High Availability and Distributed Monitoring with Icinga2
OlinData
 
Webinar - Continuous Integration with GitLab
Webinar - Continuous Integration with GitLabWebinar - Continuous Integration with GitLab
Webinar - Continuous Integration with GitLab
OlinData
 
Webinar - Centralising syslogs with the new beats, logstash and elasticsearch
Webinar - Centralising syslogs with the new beats, logstash and elasticsearchWebinar - Centralising syslogs with the new beats, logstash and elasticsearch
Webinar - Centralising syslogs with the new beats, logstash and elasticsearch
OlinData
 
Icinga 2 and puppet: automate monitoring
Icinga 2 and puppet: automate monitoringIcinga 2 and puppet: automate monitoring
Icinga 2 and puppet: automate monitoring
OlinData
 
Webinar - Project Management for DevOps
Webinar - Project Management for DevOpsWebinar - Project Management for DevOps
Webinar - Project Management for DevOps
OlinData
 
Using puppet in a traditional enterprise
Using puppet in a traditional enterpriseUsing puppet in a traditional enterprise
Using puppet in a traditional enterprise
OlinData
 
Webinar - PuppetDB
Webinar - PuppetDBWebinar - PuppetDB
Webinar - PuppetDB
OlinData
 
Webinar - Scaling your Puppet infrastructure
Webinar - Scaling your Puppet infrastructureWebinar - Scaling your Puppet infrastructure
Webinar - Scaling your Puppet infrastructure
OlinData
 
Webinar - Managing your Docker containers and AWS cloud with Puppet
Webinar - Managing your Docker containers and AWS cloud with PuppetWebinar - Managing your Docker containers and AWS cloud with Puppet
Webinar - Managing your Docker containers and AWS cloud with Puppet
OlinData
 
1 m+ qps on mysql galera cluster
1 m+ qps on mysql galera cluster1 m+ qps on mysql galera cluster
1 m+ qps on mysql galera cluster
OlinData
 
Workshop puppet (dev opsdays ams 2015)
Workshop puppet (dev opsdays ams 2015)Workshop puppet (dev opsdays ams 2015)
Workshop puppet (dev opsdays ams 2015)
OlinData
 

More from OlinData (20)

AWS Cost Control: Cloud Custodian
AWS Cost Control: Cloud CustodianAWS Cost Control: Cloud Custodian
AWS Cost Control: Cloud Custodian
 
Introduction to 2FA on AWS
Introduction to 2FA on AWSIntroduction to 2FA on AWS
Introduction to 2FA on AWS
 
AWS Data Migration case study: from tapes to Glacier
AWS Data Migration case study: from tapes to GlacierAWS Data Migration case study: from tapes to Glacier
AWS Data Migration case study: from tapes to Glacier
 
Issuing temporary credentials for my sql using hashicorp vault
Issuing temporary credentials for my sql using hashicorp vaultIssuing temporary credentials for my sql using hashicorp vault
Issuing temporary credentials for my sql using hashicorp vault
 
Log monitoring with Logstash and Icinga
Log monitoring with Logstash and IcingaLog monitoring with Logstash and Icinga
Log monitoring with Logstash and Icinga
 
FOSDEM 2017: GitLab CI
FOSDEM 2017:  GitLab CIFOSDEM 2017:  GitLab CI
FOSDEM 2017: GitLab CI
 
Cfgmgmtcamp 2017 docker is the new tarball
Cfgmgmtcamp 2017  docker is the new tarballCfgmgmtcamp 2017  docker is the new tarball
Cfgmgmtcamp 2017 docker is the new tarball
 
Icinga 2 and Puppet - Automate Monitoring
Icinga 2 and Puppet - Automate MonitoringIcinga 2 and Puppet - Automate Monitoring
Icinga 2 and Puppet - Automate Monitoring
 
Webinar - Auto-deploy Puppet Enterprise: Vagrant and Oscar
Webinar - Auto-deploy Puppet Enterprise: Vagrant and OscarWebinar - Auto-deploy Puppet Enterprise: Vagrant and Oscar
Webinar - Auto-deploy Puppet Enterprise: Vagrant and Oscar
 
Webinar - High Availability and Distributed Monitoring with Icinga2
Webinar - High Availability and Distributed Monitoring with Icinga2Webinar - High Availability and Distributed Monitoring with Icinga2
Webinar - High Availability and Distributed Monitoring with Icinga2
 
Webinar - Continuous Integration with GitLab
Webinar - Continuous Integration with GitLabWebinar - Continuous Integration with GitLab
Webinar - Continuous Integration with GitLab
 
Webinar - Centralising syslogs with the new beats, logstash and elasticsearch
Webinar - Centralising syslogs with the new beats, logstash and elasticsearchWebinar - Centralising syslogs with the new beats, logstash and elasticsearch
Webinar - Centralising syslogs with the new beats, logstash and elasticsearch
 
Icinga 2 and puppet: automate monitoring
Icinga 2 and puppet: automate monitoringIcinga 2 and puppet: automate monitoring
Icinga 2 and puppet: automate monitoring
 
Webinar - Project Management for DevOps
Webinar - Project Management for DevOpsWebinar - Project Management for DevOps
Webinar - Project Management for DevOps
 
Using puppet in a traditional enterprise
Using puppet in a traditional enterpriseUsing puppet in a traditional enterprise
Using puppet in a traditional enterprise
 
Webinar - PuppetDB
Webinar - PuppetDBWebinar - PuppetDB
Webinar - PuppetDB
 
Webinar - Scaling your Puppet infrastructure
Webinar - Scaling your Puppet infrastructureWebinar - Scaling your Puppet infrastructure
Webinar - Scaling your Puppet infrastructure
 
Webinar - Managing your Docker containers and AWS cloud with Puppet
Webinar - Managing your Docker containers and AWS cloud with PuppetWebinar - Managing your Docker containers and AWS cloud with Puppet
Webinar - Managing your Docker containers and AWS cloud with Puppet
 
1 m+ qps on mysql galera cluster
1 m+ qps on mysql galera cluster1 m+ qps on mysql galera cluster
1 m+ qps on mysql galera cluster
 
Workshop puppet (dev opsdays ams 2015)
Workshop puppet (dev opsdays ams 2015)Workshop puppet (dev opsdays ams 2015)
Workshop puppet (dev opsdays ams 2015)
 

Recently uploaded

Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
Mariano Tinti
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
Daiki Mogmet Ito
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
mikeeftimakis1
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
innovationoecd
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
shyamraj55
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
Matthew Sinclair
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
IndexBug
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
Zilliz
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
Matthew Sinclair
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Speck&Tech
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
KAMESHS29
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
Neo4j
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
tolgahangng
 

Recently uploaded (20)

Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
 

Webinar - Managing Files with Puppet

  • 1. Managing Files with Puppet An introduction to configuration management OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
  • 2. Who am I? • Walter Heck, Software engineer turned DBA, turned Sysadmin, turned entrepreneur • Founder of OlinData (http://www.olindata.com) o Puppet Labs training partner for all of Asia and part of Europe o Node.JS, OpenStack, Linux Foundation training o MySQL consulting OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
  • 3. Overview • What is puppet (for those not aware)? • Which modules to use for file management? • Built-in puppet resources for working with files • How to deal with cross-resource type conflicts • Exported resources and the concat module • Questions OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
  • 4. What is Puppet and why do we care? • Configuration management software • Scales well (1-200k+ nodes) • Multi-platform (windows, *nix, Mac OS, BSD) • Commercially supported Open Source • Infrastructure as code OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
  • 5. What options do we have? 1. source and content attributes of the file resource type 2. the concat module 3. the file_line resource type from the stdlib module 4. the inifile module 5. the augeas tool OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
  • 6. The file resource type • used to manage whole files (and directories and symlinks) • content of the file is managed in two mutually exclusive ways: o source => ‘puppet:///modules/apache/httpd.conf’ o content => template(apache/httpd.conf.erb’) • in heavy or large environments, split off file serving to a separate puppetmaster OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
  • 7. The file resource type - source • Source attribute can use o local file on the agent • syntax: source => ‘/usr/local/myfile.txt’ o remote file on the master • syntax: source => ‘puppet://<puppetmaster>/modules/apache/httpd.conf’ • source attribute copies content from source non-modifiable o great for static files eg. init.d scripts OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
  • 8. The file resource (source example) $master: cat mymodule/manifests/bar.pp class mymodule::bar { file { '/tmp/file01': ensure => file, owner => 'root', group => 'root', mode => '0644', source => 'puppet:///modules/mymodule/file01', } file { '/tmp/file02': ensure => file, owner => 'root', group => 'root', mode => '0644', source => '/opt/local/file02', } } $master: cat mymodule/files/file01 This is a static file $agent: cat /opt/local/file02 This is a locally sourced static file OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files $agent: puppet apply -e ‘include mymodule::bar’ $agent: cat /tmp/file01 This is a static file $agent: cat /tmp/file02 This is a locally sourced static file
  • 9. The file resource type - content • Content attribute assigns a static string to the content of the file o use the template() function to parse an erb template and assign the result. • eg. content => template(‘apache/httpd.conf’) • erb templates: standard ruby embedded templates • https://docs.puppetlabs.com/guides/templating.html OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
  • 10. The file resource (content example) $ cat mymodule/manifests/foo.pp class mymodule::foo { $say_hello_to = 'dude' $myname = 'file03' file { "/tmp/$myname": ensure => file, content => template('mymodule/polite-file.erb'), } } $ cat mymodule/templates/polite-file.erb <% if @say_hello_to -%> Hello <%= @say_hello_to %>, <% end -%> I'm <%= @myname %>, on a <%= @operatingsystem %> system, nice to meet you. $ puppet apply -e ‘include mymodule::foo’ $ cat /tmp/file03 Hello dude, I'm file03, on a Ubuntu system, nice to meet you. Note: the @operatingsystem variable (replaced here by “Ubuntu”) value is provided by Facter OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
  • 11. The concat module • puppet module developed by R.I.Pienaar originally in 2010 o adopted by PuppetLabs: https://github.com/puppetlabs/puppetlabs-concat • Allows to concatenate separate sections of files o eg. puppet.conf on your puppet master • Uses a local nifty trick with a shell script o check out: files/concatfragments.sh • Bonus: use exported resources on fragments to collect for instance haproxy loadbalancer backends OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
  • 12. The concat module (example) class motd { $motd = '/etc/motd' concat { $motd: owner => 'root', group => 'root', mode => '0644' } concat::fragment{ 'motd_header': target => $motd, content => "nPuppet modules on this server:nn", order => '01' } # local users on the machine can append to motd by just creating # /etc/motd.local concat::fragment{ 'motd_local': target => $motd, source => '/etc/motd.local', order => '15' } } #Note: concat::fragment resources for a single target file can appear anywhere in your repository, across modules and classes OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
  • 13. The stdlib module - file_line • used for managing single lines in a file you otherwise don’t care about o supports regex matching o caution: managing the same file with file_line and a file resource can cause flip-flopping file content • part of the puppetlabs/stdlib module o https://github.com/puppetlabs/puppetlabs-stdlib • implemented as custom resource type o lib/puppet/provider/file_line/ruby.rb OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
  • 14. file_line (example) class foo::bar { file_line { 'sudo_rule': path => '/etc/sudoers', line => '%sudo ALL=(ALL) ALL', } file_line { 'change_mount': path => '/etc/fstab', line => '10.0.0.1:/vol/data /opt/data nfs defaults 0 0', match => '^172.16.17.2:/vol/old', } } OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
  • 15. The inifile module • used for managing inifile style files o created by Chris Price, maintained by PuppetLabs o https://github.com/puppetlabs/puppetlabs-inifile • most important resource type is ini_setting o Auto-creates ini section headers OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
  • 16. The inifile module - example class foo::baz { ini_setting { "sample setting": ensure => present, path => '/tmp/foo.ini', section => 'foo', setting => 'foosetting', value => 'FOO!', } } $ puppet apply -e ‘include foo::baz’ $ cat /tmp/foo.ini [foo] foosetting = FOO! OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
  • 17. Augeas • Advanced parsing of config files o http://augeas.net/ • Uses so-called lenses that define the grammar of known config files. Many available for well known software (http://augeas.net/stock_lenses.html) o Creating your own lense possible, but tough! • After parsing, a configuration file will be available in tree format, with read/write capabilities to each node in the tree • Works regardless of order of lines in the file OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
  • 18. Augeas (example) walter@web02:~$ cat -n /etc/hosts 1 # HEADER: This file was autogenerated at Sun May 12 07:31:47 +0200 2013 2 # HEADER: by puppet. While it can still be managed manually, it 3 # HEADER: is definitely not recommended. 4 ### OlinData installimage 5 # nameserver config 6 # IPv4 7 127.0.0.1 localhost 8 1.2.3.4 web02.olindata.com 9 1.2.3.5 db01.olindata.com 10 1.2.3.6 test01.olindata.com 11 192.168.100.100 db01 12 192.168.100.101 web02 13 1.2.3.7 mail01.olindata.com puppet [..SNIP..] OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files walter@web02:~$ augtool augtool> ls /files/etc/hosts/7 ipaddr = 1.2.3.7 canonical = mail01.olindata.com alias = puppet augtool> ls /files/etc/hosts/07 augtool> ls /files/etc/hosts/7 ipaddr = 1.2.3.7 canonical = mail01.olindata.com alias = puppet augtool> match /files/etc/hosts/*/ipaddr 1.2.3.4 /files/etc/hosts/2/ipaddr augtool> print /files/etc/hosts/*/ipaddr /files/etc/hosts/1/ipaddr = "127.0.0.1" /files/etc/hosts/2/ipaddr = "1.2.3.4" /files/etc/hosts/3/ipaddr = "1.2.3.5" /files/etc/hosts/4/ipaddr = "1.2.3.6" /files/etc/hosts/5/ipaddr = "192.168.100.100" /files/etc/hosts/6/ipaddr = "192.168.100.101" /files/etc/hosts/7/ipaddr = "1.2.3.7"
  • 19. Trivia - what happens? root@web02 /home/walter # cat test.pp class test { file { '/tmp/motd': ensure => present, content => "foo nbar n" } file_line { 'test line': path => '/tmp/motd', line => 'baz', match => '^ba.', } OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files } include test root@web02 /home/walter # puppet apply test.pp Notice: Compiled catalog for web02.olindata.com in environment dev in 0.06 seconds Notice: /Stage[main]/Test/File[/tmp/motd]/ensure: created Notice: /Stage[main]/Test/File_line[test line]/ensure: created Notice: Finished catalog run in 0.71 seconds
  • 20. Trivia - what happens? root@web02 /home/walter # cat test.pp class test { file { '/tmp/motd': ensure => present, content => "foo nbar n" } file_line { 'test line': path => '/tmp/motd', line => 'baz', match => '^ba.', } OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files } root@web02 /home/walter # cat /tmp/motd foo baz include test root@web02 /home/walter # puppet apply test.pp Notice: Compiled catalog for web02.olindata.com in environment dev in 0.06 seconds Notice: /Stage[main]/Test/File[/tmp/motd]/ensure: created Notice: /Stage[main]/Test/File_line[test line]/ensure: created Notice: Finished catalog run in 0.71 seconds
  • 21. Exported resources PuppetDB 3. Store in PuppetDB 5. Retrieve from PuppetDB Puppet Master WEB01 DB01 @@concat::fragment{ ‘test’: ensure => present, target => ‘/etc/motd’ } OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files concat {‘/etc/motd’: ensure => present, } Concat::Fragment <<| |>> 1. Puppet agent run 6. Send to node 2. Export to PM 4. Collect on DB01
  • 22. Exported resources PuppetDB 3. Store in PuppetDB 5. Retrieve from PuppetDB Puppet Master WEB01 DB01 @@concat::fragment{ ‘test’: ensure => present, target => ‘/etc/motd’ } OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files concat {‘/etc/motd’: ensure => present, } Concat::Fragment <<| |>> 1. Puppet agent run 6. Send to node 2. Export to PM 4. Collect on DB01
  • 23. Exported resources PuppetDB 3. Store in PuppetDB 5. Retrieve from PuppetDB Puppet Master WEB01 DB01 @@concat::fragment{ ‘test’: ensure => present, target => ‘/etc/motd’ } OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files concat {‘/etc/motd’: ensure => present, } Concat::Fragment <<| |>> 1. Puppet agent run 6. Send to node 2. Export to PM 4. Collect on DB01
  • 24. Exported resources PuppetDB 3. Store in PuppetDB 5. Retrieve from PuppetDB Puppet Master WEB01 DB01 @@concat::fragment{ ‘test’: ensure => present, target => ‘/etc/motd’ } OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files concat {‘/etc/motd’: ensure => present, } Concat::Fragment <<| |>> 1. Puppet agent run 6. Send to node 2. Export to PM 4. Collect on DB01
  • 25. Exported resources PuppetDB 3. Store in PuppetDB 5. Retrieve from PuppetDB Puppet Master WEB01 DB01 @@concat::fragment{ ‘test’: ensure => present, target => ‘/etc/motd’ } OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files concat {‘/etc/motd’: ensure => present, } Concat::Fragment <<| |>> 1. Puppet agent run 6. Send to node 2. Export to PM 4. Collect on DB01
  • 26. Exported resources PuppetDB 3. Store in PuppetDB 5. Retrieve from PuppetDB Puppet Master WEB01 DB01 @@concat::fragment{ ‘test’: ensure => present, target => ‘/etc/motd’ } OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files concat {‘/etc/motd’: ensure => present, } Concat::Fragment <<| |>> 1. Puppet agent run 6. Send to node 2. Export to PM 4. Collect on DB01
  • 27. Exported resources node /^webd{3}.olindata.vm$/ { include role::haproxy::backend } node 'proxy01.olindata.vm' { include role::haproxy } class role::haproxy { concat {‘/etc/haproxy.cfg’: ensure => present, } Concat::Fragment <<| |>> } class role::haproxy::backend { @@concat::fragment { $::fqdn: ensure => 'present', target => '/etc/haproxy.cfg' } } OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
  • 28. Upcoming training • Puppet Fundamentals Training, Vienna Monday, November 17, 2014 • Puppet Fundamentals Training, Barcelona Monday, November 24, 2014 • Puppet Fundamentals Training, Hyderabad Monday, November 24, 2014 • Puppet Fundamentals Training, Pune Monday, December 1, 2014 • Puppet Architect Training, Singapore Wednesday, December 17, 2014 OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files
  • 29. We’re hiring! EU and Asia based trainers OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files jobs@olindata.com
  • 30. Questions? @walterheck / @olindata http://www.olindata.com walterheck@olindata.com http://github.com/olindata OlinData Webinar 2014 - http://bit.ly/olindata-webinar-puppet-files