Puppet's most powerful extension point is providing "native" types and providers. Ruby fragments that describe how puppet can interact with resources in our systems. This has been part of puppet's core code since the very first days, but adoption has been hampered by the API being tied up deeply into puppet's internals.
The new Resource API project provides a coherent, and decoupled way to define new resource types. It is based on Puppet4+ data types, making validation a breeze. The backend provider is a simple ruby class with well-defined API requirements. Together, this makes the new providers easier to read, and write, as well as easier testable.
In this talk I'll give an overview of the new API, and how to write providers using it. Basic Ruby and Puppet knowledge recommended.