The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Cinnamon::Role;
use strict;
use warnings;

use Moo;
use Hash::MultiValue;

has name => (is => 'ro', required => 1);
has hosts => (is => 'ro', required => 1);
has params => (is => 'ro', default => sub { Hash::MultiValue->new });

sub get_hosts {
    my ($self) = @_;
    my $hosts = $self->hosts;
    if (ref $hosts eq 'CODE') {
        return $hosts->();
    }
    return ref $hosts eq 'ARRAY' ? $hosts : [$hosts];
}

sub info {
    my ($self) = @_;
    return +{
        hosts  => $self->get_hosts,
        params => $self->params->as_hashref,
    };
}

1;