Build a complex puppet custom type and provider, the easy way