class: center, middle, inverse # Vox Pupuli - Die Community hinter Puppet ## OSAD 2019 Edition ??? Hi. Mein Name ist Tim und ich möchte euch heute etwas über Vox Pupuli erzählen --- 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)] ??? * Wir verwalten fast so viele Puppet module wie die Firma Puppet * This leads to some challenges, which I want to discuss today * 88 module während PuppetConf Oktober 2017, 92 im Januar 2018. 117 Oktober 2019 * Puppet Inc hat 169 Oktober 2019 --- background-image: url(blue-skies.jpg) background-size: cover count: false .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 ist jemand im IRC * Wir haben einen Code of Conduct * Jeder ist zu jedem freundlich. Der kampf gegen verfrickelte manuelle infrastruktur verbindet uns --- background-image: url(blue-skies.jpg) background-size: cover count: false .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 count: false .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 count: false .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 count: false .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 142 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)] ??? * we're independent from Puppet Inc. --- 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)] ??? * Someone sad in the past, a good talk always contains scientific charts * Currently 142 people with merge permissions * We were 80 in November 2016 --- 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 5 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? * rubocop is listed twice because it's twice the pain * 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 ### What? ### Who? ### Why? ### How? ] .right-column[ ## modulesync * We are managing 117 puppet modules and (178 git repos) * modulesync was developed by Puppet Inc, moved to Vox Pupuli * It takes a config file + templates, throws it into every modules git repo * Automatically creates GitHub Pull Requests (with labels \o/) * 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 * modulesync is similar to `pdk sync` --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### What? ### Who? ### Why? ### How? ] .right-column[ ## [travis-ci.org](https://travis-ci.org/voxpupuli) ![Right-aligned image](travis.png) * Free CI platform * Puppet Inc. sponsors us up to 20 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)] ??? * 20 Slots mit Puppet geshared * Thanks to David Schmitt for organizing this --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ### What? ### Who? ### Why? ### How? ] .right-column[ ## Release task * Gem called voxpupuli-release * provides rake tasks to create a git tag + update the version of a module * Also pushes the artifact to [forge.puppet.com](https://forge.puppet.com/puppet) * New: Git Tags are required to have a GPG signature * 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 ### What? ### Who? ### Why? ### 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 ### What? ### Who? ### Why? ### How? ] .right-column[ ## Tooling * Label open issues and PRs ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] --- background-image: url(blue-skies.jpg) background-size: cover count: false .left-column[ ## Vox Pupuli ### What? ### Who? ### Why? ### How? ] .right-column[ ## Tooling * Label open issues and PRs * Ping contributors to rebase their PR ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] --- background-image: url(blue-skies.jpg) background-size: cover count: false .left-column[ ## Vox Pupuli ### What? ### Who? ### Why? ### How? ] .right-column[ ## Tooling * Label open issues and PRs * Ping contributors to rebase their PR * Ping contributors to check the failed CI jobs ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] --- background-image: url(blue-skies.jpg) background-size: cover count: false .left-column[ ## Vox Pupuli ### What? ### Who? ### Why? ### How? ] .right-column[ ## Tooling * Label open issues and PRs * Ping contributors to rebase their PR * Ping contributors to check the failed CI jobs * Yak Shaving: update metadata.json / run modulesync ] .footnote[[@bastelsblog](https://twitter.com/bastelsblog) for [@voxpupuliorg](https://twitter.com/voxpupuliorg)] --- background-image: url(blue-skies.jpg) background-size: cover count: false .left-column[ ## Vox Pupuli ### What? ### Who? ### Why? ### How? ] .right-column[ ## Tooling * Label open issues and PRs * Ping contributors to rebase their PR * Ping contributors to check the failed CI jobs * Yak Shaving: update metadata.json / run modulesync * We now have a tool for that \o/ ] .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? ### Why? ### How? ] .right-column[ ## Tooling * Ruby on Rails application at [voxpupu.li](http://voxpupu.li) * Kudos to [Robert Müller](https://twitter.com/Was1NicerDude) for his work! * Gets push notifications from GitHub for all events * New pull request / Issue * Activity in a PR / new merge conflicts * Interacts with the GitHub API based on the events * Generates a list of tasks for manual jobs * In active development / beta ] .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? ### Why? ### How? ] .right-column[ ## Tooling ![Right-aligned image](bot_label.png) ![Right-aligned image](bot_comment.png) Sourecode at [github.com/voxpupuli/vox-pupuli-tasks](https://github.com/voxpupuli/vox-pupuli-tasks#vox-pupuli-tasks---the-webapp-for-community-management) ] .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? ### Why? ### How? ] .right-column[ ## Docs * Review Guidelines: https://voxpupuli.org/docs/#reviewing-a-module * puppet-strings generated mardown docs in more and more modules, for example * puppet-selinux * puppet-autofs * puppet-mumble * puppet-cassandra * puppet-rabbitmq * puppet-ferm * puppet-rsyslog * puppet-borg * puppet-corosync ] .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. Those docs are so so so important! * We got 21 modules with puppet-strings! * we provide it as REFERENCE.md in the repo which is embedded into the forge * does anybody want to have html docs at voxpupuli.org/$modulename? (would be possible) --- background-image: url(blue-skies.jpg) background-size: cover .left-column[ ## Vox Pupuli ###PMC ] .right-column[ * We elected a third Project Management Committee in 2019! * PMC enforces [CoC](https://voxpupuli.org/coc/) * Brings Vox Pupuli into the Software Freedom Conservancy + works on funding * PMC guidelines are created by the community https://tinyurl.com/voxpupuli-governance-md * Current members: * Tim 'bastelfreak' Meusel (reelected) * David 'dhollinger' Hollinger (reelected) * Alex 'afisher' Fisher (reelected) * Lee 'friedbob' Lowder * Nate 'natemccurdy' McCurdy ] .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 Puppet 3 and Puppet 4 anymore * Help with git * Trigger the automated release process * New: Use our awesome Rails app to identify important tasks / automate as much as possible with it ] .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[ .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! CERN people liked this so much and they use so many of our modules that they send out christmas giftcards to us --- 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 * rspec-puppet * New Puppet Agent releases ] .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 ] .right-column[ ![burning car](car.jpg) ] .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[ * 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 Maintainers Contact: * IRC #voxpupuli on freenode (preferred) * Slack: #voxpupuli on [puppetcommunity.slack.com](https://puppetcommunity.slack.com) * [voxpupuli@groups.io](mailto:pmc@voxpupuli.org) - General mailinglist * [pmc@voxpupuli.org](mailto:pmc@voxpupuli.org) - To reach the PMC people * [tim@bastelfreak.de](mailto:tim@bastelfreak.de) - To reach me * This and other talks from Tim at [https://github.com/bastelfreak/talks](https://github.com/bastelfreak/talks#collection-of-talks-proposals-and-related-stuff) ### Thanks for your attention! ]