package Cinnamon::DSL;
use strict;
use warnings;
use parent qw(Exporter);
use Cinnamon qw(CTX);
use Cinnamon::Local;
use Cinnamon::Remote;
our @EXPORT = qw(
set
get
role
task
call
remote
run
sudo
);
sub set ($$) {
my ($name, $value) = @_;
CTX->set_param($name => $value);
}
sub get ($@) {
my ($name, @args) = @_;
CTX->get_param($name, @args);
}
sub role ($$;$) {
my ($name, $hosts, $params) = @_;
CTX->add_role($name, $hosts, $params);
}
sub task ($$) {
my ($task, $task_def) = @_;
CTX->add_task($task => $task_def);
}
sub remote (&$) {
my ($code, $host) = @_;
my $remote = Cinnamon::Remote->new(
host => $host,
user => CTX->get_param('user'),
);
my $stash = CTX->stash;
local $stash->{current_host} = $remote->host;
local $stash->{current_remote} = $remote;
$code->($host);
}
sub call ($$) {
my ($task_name, $host) = @_;
CTX->call_task($task_name, $host);
}
sub run (@) {
my (@cmd) = @_;
return CTX->run_cmd(\@cmd);
}
sub sudo (@) {
my (@cmd) = @_;
return CTX->run_cmd(\@cmd, { sudo => 1 });
}
!!1;