[PA-1996] Install FFI on Linux platforms Created: 2018/05/01  Updated: 2019/01/22

Status: Needs Information
Project: Puppet Agent
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Improvement Priority: Normal
Reporter: David Schmitt Assignee: Geoff Nichols
Resolution: Unresolved Votes: 0
Labels: packaging, ruby
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
blocks PDK-847 Readd the Commands API Closed
relates to PDK-1008 Refactor to use puppet-runtime shared... Closed
Team: Platform OS
QA Risk Assessment: Needs Assessment


Currently FFI is only installed on Windows (see puppet-runtime/configs/projects/_shared-agent-components.rb#L48).

Having native extensions, it is inconvenientat best, and impossible most times, for customers to install FFI on top of their puppet-agent packages.

FFI is a pre-requisite for two projects I've been looking into over the last half year:

Unless I'm very special, I have to assume that others, too, are blocked on the omission of FFI in the default install.

Comment by David Schmitt [ 2018/05/01 ]

PR at https://github.com/puppetlabs/puppet-runtime/pull/50

Comment by Branan Riley [ 2018/05/21 ]

Assigning this to Platform OS team for review

Comment by Branan Riley [ 2018/06/14 ]

David Schmitt Rob and I had a couple questsions on these PRs. I'm kicking this to Needs Info for now to clear out our "Merging" column until we're ready to move forward with it again. Feel free to put it back to Ready for Merge when you've had time to review those. Thanks!

Comment by David Schmitt [ 2018/06/16 ]

I've replied to your and Rob's Qs. Specifically on the conflicts I'll need guidance in how those should be handled. I'll leave this in Needs Information until I can address that.

Comment by David Schmitt [ 2018/06/18 ]

Changing the scope of the ticket after discovering major issues with getting AIX and Solaris working. See https://github.com/puppetlabs/puppet-runtime/pull/50#issuecomment-397807067 for details.

Comment by David Schmitt [ 2018/06/20 ]

Branan Riley If I understand it correctly the conflicts change is not actually required, and I feel the conversation on the other changes has run its course.

Comment by Kevin Reeuwijk [ 2018/07/06 ]

As someone who has only just started to dip my toes into the types & providers development space, let me give you an outside perspective to what the experience is today for a starting Puppet developer:

TLDR: The learning curve is still very, very steep if you're not a skilled Ruby developer. The Resource API needs to do more to make provider development easier.

While the PDK has helped in creating the skeleton for new types & providers, the main aspect of executing actions is still mostly left to the knowledge of the developer:

  • Running external processes (bash, powerhshell) and doing error handling & output capture
  • Transforming external process output into consumable puppet resources
  • Interacting with external APIs

I've spent all day yesterday researching a useable way to execute some Powershell code in a custom provider, after I learned that the Puppet::ResourceApi:Command is no longer part of the Resource API (even though the apt-key2 example that the Resource API documentation points to, still has it in its code). I've tried to use Open3 but found it too difficult and cumbersome, and finally gave up and used exec() to at least get something working.

The Resource API should take care of this basic need for me. It should provide a generalized way to execute external code (bash, batch, powershell, etc) and provide core capabilities like error handling, context awareness and output capturing. Right now I don't even know how to preserve context awareness since I can't use Puppet::ResourceApi:Command.

I would like to see clearer guidance on how to execute commands/processes with the Resource API in the state that it's in today, and how to handle context awareness in relationship to that. Then hopefully this guidance can be updated later when we do have a generalized & easier way to deal with this challenge. 

Generated at Wed Jul 15 11:21:58 PDT 2020 using Jira 8.5.2#805002-sha1:a66f9354b9e12ac788984e5d84669c903a370049.