The IAC team has been working on a lot of interesting things over the past week. Here’s a brief overview of what we’ve been up to:

Updates to Puppet Modules

We’ve released only one module since last week:

Community Contributions

Thanks to @baurmatt for his change to the concat module, adding support for Deferred function in concat fragment.

Approved Modules

This week we happily approved two new modules:

Puppet Approved modules are recommended by us for use with Puppet Open Source and Puppet Enterprise and meet our expectations for quality and usability.

New puppet-modulebuilder Gem

Work has started on creating a puppet-modulebuilder gem. This will carry the actual functionality for pdk build and allow third-party tools to re-use the same functionality without having to pull in the whole PDK. We expect a first release early next week. Follow IAC-552 to get a notification when that happens.

Thanks a lot to Glenn for helping out with the actual porting of the code.

Ongoing Litmus Conversions

This week saw a flurry of PRs (through pdksync) to update all our modules to use the new use_litmus support in pdk-templates. This reduces the amount of configuration we need to carry in each module and validates the pdk-templates feature.

As expected, the last remaining modules to convert to Litmus were the ones we didn’t want to touch earlier for good reasons.

  • powershell has been merged and is now running acceptance tests on Windows (appveyor), Linux and OS X (travis) in public.
  • sqlserver is still resisting, not the least because we found several areas where the previous test suite was ignoring warnings that we now want to address.
  • vsphere is progressing. We don’t expect to enable PR-level testing on this one, since it does require access to our internal VCenter.

If you’re interested in porting a module to Litmus, feel free to reach out to us during Office Hours - we’ll be glad to help!

We’re also looking into updating litmus to make use of Bolt v2. See puppetlabs/puppet_litmus#254 if you want to follow along.

This week also saw a number of ruby segfaults and deadlocks during acceptance testing:

448.03s$ bundle exec rake litmus:acceptance:parallel
Running against 3 targets.
./home/travis/build/puppetlabs/puppetlabs-mysql/vendor/bundle/ruby/2.5.0/gems/concurrent-ruby-1.1.6/lib/concurrent-ruby/concurrent/atomic/ruby_thread_local_var.rb:113: [BUG] Segmentation fault at 0x000000000b4d76d5
ruby 2.5.3p105 (2018-10-18 revision 65156) [x86_64-linux]

or

$ bundle exec rake litmus:acceptance:parallel
Running against 2 targets.
.
No output has been received in the last 10m0s, this potentially indicates a stalled build or something wrong with the build itself.
Check the details on how to adjust your build configuration on: https://docs.travis-ci.com/user/common-build-problems/#build-times-out-because-no-output-was-received
The build has been terminated

We’re still working on figuring out what changed recently to trigger these.

Refactoring stdlib to Puppet4 function API

Off the back of Ben’s blog on the Puppet4 function API, work has started to move all functions in the stdlib module to the “new” API. To quote Ben:

Each modern Puppet 4.x function is just a little faster and just a little safer to use, meaning that as we all port our functions over, compilation times across the ecosystem will get more and more performant. Modern Puppet 4.x functions have improved thread safety, memory management, and load time. Even more importantly, they’re isolated to the environment they’re loaded from.

And as a developer, you’ll see benefits like namespaced function signatures, automatic data type checking, multiple dispatches allowing you to easily handle different kinds of function invocations, and vastly improved code reuse.

If you want to follow along or provide feedback, please avail yourself of IAC-114.