class: center, middle, inverse # Vox Pupuli - The Community behind Puppet ??? Hi everybody, my name is Tim and I would like to talk to you today about Vox Pupuli, the community behind puppet --- background-image: url(blue-skies.jpg) background-size: cover ## $ whoami * Tim 'bastelfreak' Meusel * DevOps Engineer at GoDaddy EMEA * Puppet Contributor since 2012 * Merging stuff on Vox Pupuli since 2015 * Vox Pupuli PMC member ??? * --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ###What? ] .right-column[ * Maintain many many Puppet modules ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] ??? * We maintain more modules than the company Puppet * This leads to some challenges, which I want to discuss today * 88 modules during puppetconf2017, 92 in January 2018 --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### What? ] .right-column[ * Maintain many many Puppet modules * Be helpful and polite to each other ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] ??? * 24/7 someone is in the IRC to help you * We've a code of conduct but never had to enforce it * Everybody is friendly, which isn't common these days --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### What? ] .right-column[ * Maintain many many Puppet modules * Be helpful and polite to each other * Be open-minded to people and technology ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] ??? * People get easily access to our repos * we encourage users to contribute * We're always happy to play with new software (automation scripts, IRC bots...) or adopt new modules --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### What? ] .right-column[ * Maintain many many Puppet modules * Be helpful and polite to each other * Be open-minded to people and technology * Provide a home for orphaned Puppet modules ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] ??? * as a user, it's an awful experience to find a module for your usecase, and notice afterwards that it is dead * We want to avoid that as a collective of module developers --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### What? ] .right-column[ * Maintain many many Puppet modules * Be helpful and polite to each other * Be open-minded to people and technology * Provide a home for orphaned Puppet modules * Unite lonely module and tooling authors to a collective ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] ??? * Developing alone sucks * There is a hard pressure on a single person, if your module gets famous * Sometimes you want to go on vacation, switch jobs, lose interest in developing --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### What? ] .right-column[ * Maintain many many Puppet modules * Be helpful and polite to each other * Be open-minded to people and technology * Provide a home for orphaned Puppet modules * Unite lonely module and tooling authors to a collective * Ensure continued development for our code ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### What? ### Who? ] .right-column[ * Currently 126 people with merge permissions * We were 113 in February 2018 * We were 107 in October 2017 * We were 80 in November 2016 * Just a few people work for Puppet Inc. * Most of the contributors participate in their free time * Normal administrators that have to deal with puppet at work ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] ??? * only 5 regular contributors work at Puppet Inc, we're independent from the company --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### What? ### Who? ] .right-column[ ## Science! .nowidth[ ![imagefoo](contributors1.svg) ] ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] ??? * Currently 124 people with merge permissions * We were 80 in November 2016 * Just a few people work for Puppet Inc. * Most of the contributors participate in their free time * Normal administrators that have to deal with puppet at work * We're independant from Puppet Inc. --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### What? ### Who? ] .right-column[ * Many git newbies * Rebasing a feature branch against upstream master is hard * Many newcomers to test frameworks * Dealing with rspec/rubocop/beaker is hard as well * Many administrators of legacy infrastructures * Stuff older than Puppet 4.10 without proper hiera5/datatype support ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] ??? * Many contributors are new to git and github * Many never wrote tests * we don't have to teach them writing good puppet code, but all the related tooling --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### What? ### Who? ### Why? ] .right-column[ * Maintaining a module on your own is hard * Changing best practices, vacations, losing interest * Proper testing of a module requires a lot of stuff from the ruby ecosystem * Ruby ecosystem and related tools are changing too fast for a single person * Everything has to work on multiple Ruby/Puppet versions * Rubocop * Rubocop ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] ??? * Who tried to fix rubocop warnings in a module and couldn't fix all? * Shout out to hailee/HAIL9000 who fixed maaaaaaaany rubocop errors in the mongodb module for many days --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### How? ] .right-column[ ## modulesync * We are managing 105 puppet modules and (155 git repos) * We had 92 modules in February 2018 * We had 75 modules in November 2016 * modulesync was developed by Puppet Inc, moved to Vox Pupuli * It takes a config file + templates, throws it into every modules git repo * Works with GitHub Pull Requests * Everybody can start it * Every of our Collaborators can approve/merge it ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] ??? * amount of modules grows * Keeping generic files like Gemfile/Rakefile in sync is pain, if done by hand * modulesync saves us sooo much time --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### How? ] .right-column[ ## travis ![Right-aligned image](travis.png) * Free CI platform * Puppet Inc. sponsors us several concurrent travis slots * rpsec-puppet on common Puppet*Ruby versions * release modules to the forge * beaker acceptance tests ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] ??? * nobody knows how many travis slots we can use, but it works well! * Thanks to David Schmitt for organizing this --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### How? ] .right-column[ ## Release task * Gem called voxpupuli-release * provides rake task to bump + tag a module * Also pushed to the forge * Upcoming: Also create a github release ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] ??? * everybody can start it, each collaborator can approve it * We encourage users to contribute by providing easy to use tools --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### How? ] .right-column[ ## Tooling * https://github.com/underscorgan/community_management * Open Issues and PRs sorted in different ways * https://voxpupuli-open-prs.herokuapp.com/ * Also open PRs * https://github.com/voxpupuli/thevoxfox * IRC bot, allows us to merge stuff + trigger modulesync (soon, maybe) * https://github.com/bastelfreak/contributorstats * count contributions ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### How? ] .right-column[ ## Docs * Review Guidelines: https://voxpupuli.org/docs/#reviewing-a-module * puppet-strings generates html docs * https://voxpupuli.org/puppet-selinux * https://voxpupuli.org/puppet-autofs * https://voxpupuli.org/puppet-mumble * https://voxpupuli.org/puppet-cassandra (in the making) * https://voxpupuli.org/puppet-rabbitmq (in the making) ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] ??? * We now have a list of things that we check during a review! This allows us to get consistent code style and a better quality * We got a few modules with puppet-strings docs! * They are automagically published under our domain --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ###PMC ] .right-column[ * We elected a second Project Management Committee in 2018! * PMC enforces CoC * Brings Vox Pupuli into the Software Freedom Conservancy * PMC guidelines are created by the community https://tinyurl.com/voxpupuli-governance-md * Current members: * Tim ‘bastelfreak’ Meusel (reelected) * David ‘dhollinger’ Hollinger * Hunter ‘Hunner’ Haugen (Puppet Inc., reelected) * Alex ‘afisher’ Fisher * Eric ‘eputnam’ Putnam (Puppet Inc.) ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### PMC ### Collaborators ] .right-column[ * Review pull requests * Explain why we don't support ruby187 anymore * New: Explain why we don't support Puppet3 anymore * Help with git * Trigger the automated release process ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### Daily Business ] .right-column[ ![image](bugfix.png) ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] ??? * people are often scared to contribute * They often think they can't write the needed code, but they can! * encourage them --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### Daily Business ] .right-column[ ![image](eol.png) ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] ??? * TL;DR still people use outdated ruby/puppet versions from time to time :( --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### Daily Business ] .right-column[ ![image](travisrestart.png) ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] ??? * travis cheets for 100: closing/reopen a PR will retrigger travis * A project admin can do this in the travis UI, outside-contributors can't * close/reopen can be triggered by the PR author --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### Daily Business ] .right-column[ ![image](spectests.png) ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] ??? * we try to get at least a unit test for all new features * on a bugfix: Dope to include a test that fails without the patch, but works with it * Always say thanks! Be friendly to contributors. We're always happy for a new Issue/PR (We prefer PRs) --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### Daily Business ] .right-column[ ![image](yey.png) ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] ??? * everybody is good at blaming others * we rarely tell people that they made something good * bastelfreak is happy about all new datatypes --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### Daily Business ] .right-column[ ![image](fail.png) ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] ??? * people often don't notice that travis has a failed job * Do we need to change the visibility? --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### Daily Business ] .right-column[ ![image](email.png) ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] ??? * for a clean history we want people to use a correct email address --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### Daily Business ] .right-column[ ![image](readme.png) ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] ??? * Something that many people very often forget: Is the new feature documented in the README.md? --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### Daily Business ] .right-column[ ![image](migrate.png) ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] ??? * often people ask us to migrate a dead module into our namespace * we head out to the maintainer and ask for that --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### Daily Business ] .right-column[ .something2[ ![image](candy.jpg) ] ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] ??? some explanation: bastelfreak noticed in the Archlinux community that people are happy, if you send them sweets We tried this in the Puppet community as well. Puppet Inc. received 15pounds of sweets for all their encouragement for the community. You all keep contributing and bastelfreak will send you sweets as well! --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### Daily Business ### Broken Stuff ] .right-column[ * Vox Pupuli is the place to be if something is broken * puppetlabs-stdlib * puppetlabs-stdlib again * puppetlabs-apt * puppet-systemd (sorry) ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] ??? * story time: Everytime one popular module is broken, people will join the Vox Pupuli IRC channel * This happend twice for stdlib (we didn't break it, we just noticed it) * bastelfreak once added a breaking change to the systemd module which killed the openstack CI pipelines (happened twice) --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### Daily Business ### Broken Stuff ### Quotes ] .right-column[ * 'Release early - release often' - [Igor Galic](https://twitter.com/hirojin) ] ??? * people are scared about making released because it could break things * Maintainers are scared to break the environments from their users * release as often as possible. Less changes per release -> less broken releases --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### Daily Business ### Broken Stuff ### Quotes ] .right-column[ * 'Release early - release often' - [Igor Galic](https://twitter.com/hirojin) * 'Version numbers are cheap - use them' - [Igor Galic](https://twitter.com/hirojin) ] ??? * people are often scared to merge breaking changes. Merging them is totally okay if you do proper versioning * we don't delete broken releases and try to fix it, we just do a new release --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### Daily Business ### Broken Stuff ### Quotes ] .right-column[ * 'Release early - release often' - [Igor Galic](https://twitter.com/hirojin) * 'Version numbers are cheap - use them' - [Igor Galic](https://twitter.com/hirojin) * 'DevOps is all about empathy' - [Rob Nelson](https://twitter.com/rnelson0) ] ??? * working closely together, listen to users, always be constructive, don't blame others for mistakes, we all break stuff from time to time * the 'listen' gem issue --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### Summary ] .right-column[ * We have great tooling and automation * We have great people * You need help with Puppet? * Let us know, we help out! * You have an orphaned module or know one? * Ping us, migrate it to us * You have domain specific knowledge? * Ruby, Python, Rspec, Beaker, $software we automate ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### Summary ] .right-column[ * You want to help out? * We are always looking for new Collaborators and Maintainer Contact: * IRC #voxpupuli on freenode * Slack: #voxpupuli on puppetcommunity.slack.com * voxpupuli@groups.io * pmc@voxpupuli.org * tim@bastelfreak.de * More talks at [https://github.com/bastelfreak/talks](https://github.com/bastelfreak/talks#collection-of-talks-proposals-and-related-stuff) ### Thanks for your attention! ]