3. Who?
• Somewhat involved in open source...
◦ OpenBSD committer since 2006
◦ GNOME committer since 2011
◦ 35+ public repositories on GitHub
3 of 1
4. 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
5. Who?
cont.
Also wrote yasnippet-puppet-mode for Emacs
file<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
14. Puppet in m:tier
cont.
For more details:
puppetlabs.com/blog/
guest-post-a-puffy-in-the-corporate-aquarium-the-sequel/
9 of 1
15. Intro
m:tier
Puppet::Tidy
Future ideas
10 of 1
16. What is Puppet::Tidy?
• Formal definition:
◦ A re-formatter for Puppet manifests, working on syntactic level.
11 of 1
17. 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
18. How does it work?
• Input is read line-by-line
12 of 1
19. How does it work?
• Input is read line-by-line
• One-pass transformation checks
12 of 1
20. How does it work?
• Input is read line-by-line
• One-pass transformation checks
◦ If the line matches criteria, it’s transformed
12 of 1
21. 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
31. Using Puppet::Tidy
Part 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
32. Quick demo
input
Exec[’$reboot’] // What is it doing here?
file {
"/tmp/blah":
mode => 644
}
package { ’$openssh’:
ensure => present
}
16 of 1
33. Quick demo
output
Exec[$reboot] # What is it doing here?
file {
’/tmp/blah’:
mode => ’0644’
}
package { "$openssh":
ensure => present;
}
17 of 1
45. Semantic knowledge
• Puppet::Tidy just works on syntactic level
• It should be smarter and know about blocks
◦ find the blocks
21 of 1
46. Semantic knowledge
• Puppet::Tidy just works on syntactic level
• It should be smarter and know about blocks
◦ find the blocks
◦ group the blocks
21 of 1
47. 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
51. Thank you!
and thank to my employer m:tier for sponsoring the development
of Puppet::Tidy.
mail jasper@mtier.org
www jasper.la and www.mtier.org
twitter jasper la
github jasperla
CPAN search.cpan.org/~jasper
24 of 1