clean manifests with puppet::tidy
TRANSCRIPT
Clean manifests with Puppet::Tidy
Jasper Lievisse AdriaanseEngineering team, m:tier
Puppet Camp 2013 Gent
Jan. 31 - Feb. 1, 2013
Who?
• Somewhat involved in open source...◦ OpenBSD committer since 2006◦ GNOME committer since 2011◦ 35+ public repositories on GitHub
• Involved in m:tier since it’s founding in 2008◦ Started using Puppet in 2009
3 of 1
Who?
• Somewhat involved in open source...◦ OpenBSD committer since 2006◦ GNOME committer since 2011◦ 35+ public repositories on GitHub
• Involved in m:tier since it’s founding in 2008◦ Started using Puppet in 2009
3 of 1
Who?cont.
Also wrote yasnippet-puppet-mode for Emacsfile<TAB> expands to:
file { "name":
owner => owner,
group => group,
mode => mode,
ensure => ensure,
require => require,
content => content,
source => source;
}
See: http://jasper.la/emacs.html
4 of 1
Puppet in m:tier
• One git repository
• ∼ 6k lines of Puppet code
• Upto “Blue chip” customers
• Three continents
• mtier-puppet
7 of 1
Puppet in m:tier
• One git repository
• ∼ 6k lines of Puppet code
• Upto “Blue chip” customers
• Three continents
• mtier-puppet
7 of 1
Puppet in m:tier
• One git repository
• ∼ 6k lines of Puppet code
• Upto “Blue chip” customers
• Three continents
• mtier-puppet
7 of 1
Puppet in m:tier
• One git repository
• ∼ 6k lines of Puppet code
• Upto “Blue chip” customers
• Three continents
• mtier-puppet
7 of 1
Puppet in m:tier
• One git repository
• ∼ 6k lines of Puppet code
• Upto “Blue chip” customers
• Three continents
• mtier-puppet
7 of 1
Puppet in m:tiercont.
(Semi-)automated bootstrap of OpenBSD laptops/servers
• LDAP
• Kerberos
• Users
• Packages
• Security updates
• .plocal
8 of 1
Puppet in m:tiercont.
For more details:puppetlabs.com/blog/
guest-post-a-puffy-in-the-corporate-aquarium-the-sequel/
9 of 1
What is Puppet::Tidy?
• Formal definition:◦ A re-formatter for Puppet manifests, working on syntactic level.
• Informal definition:◦ A glorified bunch of regular expressions which make your Puppet code
look nice.
11 of 1
What is Puppet::Tidy?
• Formal definition:◦ A re-formatter for Puppet manifests, working on syntactic level.
• Informal definition:◦ A glorified bunch of regular expressions which make your Puppet code
look nice.
11 of 1
How does it work?
• Input is read line-by-line
• One-pass transformation checks
◦ If the line matches criteria, it’s transformed
• Output written to file, or reference passed back
12 of 1
How does it work?
• Input is read line-by-line
• One-pass transformation checks
◦ If the line matches criteria, it’s transformed
• Output written to file, or reference passed back
12 of 1
How does it work?
• Input is read line-by-line
• One-pass transformation checks◦ If the line matches criteria, it’s transformed
• Output written to file, or reference passed back
12 of 1
How does it work?
• Input is read line-by-line
• One-pass transformation checks◦ If the line matches criteria, it’s transformed
• Output written to file, or reference passed back
12 of 1
Current checks
• Most common “errors”:◦ expand tabs
◦ comments◦ four digit mode◦ quoting
• attributes• titles• resource reference types• strings
13 of 1
Current checks
• Most common “errors”:◦ expand tabs◦ comments
◦ four digit mode◦ quoting
• attributes• titles• resource reference types• strings
13 of 1
Current checks
• Most common “errors”:◦ expand tabs◦ comments◦ four digit mode
◦ quoting
• attributes• titles• resource reference types• strings
13 of 1
Current checks
• Most common “errors”:◦ expand tabs◦ comments◦ four digit mode◦ quoting
• attributes• titles• resource reference types• strings
13 of 1
Current checks
• Most common “errors”:◦ expand tabs◦ comments◦ four digit mode◦ quoting
• attributes
• titles• resource reference types• strings
13 of 1
Current checks
• Most common “errors”:◦ expand tabs◦ comments◦ four digit mode◦ quoting
• attributes• titles
• resource reference types• strings
13 of 1
Current checks
• Most common “errors”:◦ expand tabs◦ comments◦ four digit mode◦ quoting
• attributes• titles• resource reference types
• strings
13 of 1
Current checks
• Most common “errors”:◦ expand tabs◦ comments◦ four digit mode◦ quoting
• attributes• titles• resource reference types• strings
13 of 1
Using Puppet::TidyStandalone
#!/usr/bin/perl
use strict;
use Puppet::Tidy;
Puppet::Tidy::puppettidy();
14 of 1
Using Puppet::TidyPart of a larger whole
#!/usr/bin/perl
use strict;
use Puppet::Tidy;
my (@output, $source);
$source = << ’EOF’;
Exec[’$reboot’]
EOF
Puppet::Tidy::puppettidy
(source => $source, destination => \@output);
15 of 1
Quick demoinput
Exec[’$reboot’] // What is it doing here?
file {
"/tmp/blah":
mode => 644
}
package { ’$openssh’:
ensure => present
}
16 of 1
Quick demooutput
Exec[$reboot] # What is it doing here?
file {
’/tmp/blah’:
mode => ’0644’
}
package { "$openssh":
ensure => present;
}
17 of 1
Basic features
• Define checks to run
• Moar checks!
• Attribute alignment
• Output validation
20 of 1
Basic features
• Define checks to run
• Moar checks!
• Attribute alignment
• Output validation
20 of 1
Basic features
• Define checks to run
• Moar checks!
• Attribute alignment
• Output validation
20 of 1
Basic features
• Define checks to run
• Moar checks!
• Attribute alignment
• Output validation
20 of 1
Semantic knowledge
• Puppet::Tidy just works on syntactic level
• It should be smarter and know about blocks
◦ find the blocks◦ group the blocks◦ and in the file bind them
21 of 1
Semantic knowledge
• Puppet::Tidy just works on syntactic level
• It should be smarter and know about blocks
◦ find the blocks◦ group the blocks◦ and in the file bind them
21 of 1
Semantic knowledge
• Puppet::Tidy just works on syntactic level
• It should be smarter and know about blocks◦ find the blocks
◦ group the blocks◦ and in the file bind them
21 of 1
Semantic knowledge
• Puppet::Tidy just works on syntactic level
• It should be smarter and know about blocks◦ find the blocks◦ group the blocks
◦ and in the file bind them
21 of 1
Semantic knowledge
• Puppet::Tidy just works on syntactic level
• It should be smarter and know about blocks◦ find the blocks◦ group the blocks◦ and in the file bind them
21 of 1
Real parser
• Currently works on a line-by-line basis, but could use a real parser
• Anyone got experience with MARPA?
22 of 1
Real parser
• Currently works on a line-by-line basis, but could use a real parser
• Anyone got experience with MARPA?
22 of 1
Thank you!and thank to my employer m:tier for sponsoring the developmentof Puppet::Tidy.
mail [email protected]
www jasper.la and www.mtier.org
twitter jasper lagithub jasperla
CPAN search.cpan.org/~jasper
24 of 1