Puppet currently specifies a dependency on FFI for Windows as ~> 1.9.6 which at this time will pull in FFI 1.9.21
Until the 1.9.19 / 1.9.20 / 1.9.21 releases, Puppet had been consuming FFI 1.9.18.
On Feb 6, 2018, the FFI maintainers released a FFI 1.9.19, then an FFI 1.9.20, failing to produce all the various platform specific gems that had been published. Both of these versions were yanked, and a 1.9.21 was released with all the platform specific gem versions.
However, there are a few problems with 1.9.21:
- The Windows gem has inexplicably doubled in size, even though the changes to the FFI code should have been minor
- There are a number of problems compiling the gem now, on platforms where it previously worked (CentOS as noted by the Bolt team + about 10 tickets on the FFI GitHub issue tracker for a variety of other problems)
Bolt team has already pinned to <= 1.9.18 as FFI is needed on all platforms. For Puppet, this isn't strictly a problem at the moment as Windows doesn't need to compile gems, but it feels safest at the moment to follow the same policy and pin to known working.
FFI 1.9.21+ will be needed when Ruby 2.5 support is added, but for now, there are no fixes that Puppet needs in the newest versions, and we don't understand why the gem doubled. It's safest to pin to the old version until the new FFI maintainers have their process smoothed out, etc.
Also note that this is only needed for gem based workflows / the gem release - for instance, when modules consume the Puppet gem - the MSI package already pins to 1.9.18 at https://github.com/puppetlabs/puppet-agent/blob/master/configs/components/rubygem-ffi.rb#L2