#!/usr/bin/env perl

# linode-cli
# Copyright (C) 2015 Linode, LLC

use 5.010;
use strict;
use warnings;

use FindBin;
use lib "$FindBin::RealBin/lib";

use Linode::CLI;
use Linode::CLI::Util ':basic';
my $mode    = 'stackscript';
my $cmdargs = Linode::CLI::Util::eat_cmdargs($mode);

my $cli = Linode::CLI->new(
    api_key       => $cmdargs->{'api-key'},
    mode          => $mode,
    opts          => $cmdargs,
    output_format => $cmdargs->{output},
    wait          => $cmdargs->{wait},
);

my $runaction = $cmdargs->{run};
$cli->$runaction;
$cli->response;

__END__

=head1 NAME

linode-stackscript - command-line interface for Linode StackScripts

=head1 SYNOPSIS

B<linode-stackscript> [B<-a> action] [action-options...] [options...]

=over

=item S<-a create, --action create    create a new StackScript>

=item S<-a update, --action update    update a StackScript>

=item S<-a delete, --action delete    delete a StackScript>

=item S<-a list,   --action list      list info about StackScripts>

=item S<-a show,   --action show      show detailed info about a StackScript>

=item S<-a source, --action source    show a StackScript's source>

=item S<           --api-key=KEY      your user's API key>

=item S<-h,        --help             display this help and exit>

=item S<-j,        --json             return output in JSON format>

=item S<-u,        --username=USER    username for Linode CLI config file>

=back

=head1 OPTIONS

=over 8

=item B<-a>, B<--action>

An action to perform on Linode StackScript(s). One of: B<create>, B<update>, B<delete>, B<list>, B<show>, B<source>.

=item B<--api-key>

API key to use when communicating with the Linode API. The API key can also be set using an environment variable (LINODE_API_KEY). Alternatively, you can specify the API key in a B<.linodecli> file in the working user's home directory, using the format `api-key foobar`.

=item B<-u>, B<--username>:

Optional. Allows users to specify the username, if using with multiple accounts and configuration files.

=item B<-j>, B<--json>:

Optional. JSON output.

=item B<-h>, B<--help>

Displays help documentation.

=back

=head1 ACTIONS

=head2 CREATE

=over 8

=item Create a StackScript.

=over 8

=item B<-l>, B<--label>

The label (name) for the StackScript.

=item B<-d>, B<--distribution>

Distribution name or DistributionID to deploy.

=item B<-c>, B<--codefile>

The script file name (including the path) containing the source code.

=item B<-p>, B<--ispublic>

Optional. Whether this StackScript is published in the Library, for everyone to use. Options are yes, no, true, and false. Default is false.

=item B<-D>, B<--description>

Optional. Notes describing details about the StackScript.

=item B<-r>, B<--revnote>

Optional. Note for describing the version.

=back

=back

=head2 UPDATE

=over 8

=item Update a StackScript.

=over 8

=item B<-l>, B<--label>

The label (name) for the StackScript.

=item B<-n>, B<--new-label>

Optional. Renames the StackScript.

=item B<-d>, B<--distribution>

Optional. Distribution name or DistributionID to deploy.

=item B<-c>, B<--codefile>

Optional. The script file name (including the path) containing the source code.

=item B<-p>, B<--ispublic>

Optional. Whether this StackScript is published in the Library, for everyone to use. Options are yes, no, true, and false. Default is false.

=item B<-D>, B<--description>

Optional. Notes describing details about the StackScript.

=item B<-r>, B<--revnote>

Optional. Note for describing the version.

=back

=back

=head2 DELETE

=over 8

=item Delete a StackScript

=over 8

=item B<-l>, B<--label>

The StackScript to delete.

=back

=back

=head2 LIST

=over 8

=item List information about one or more StackScripts.

=over 8

=item B<-l>, B<--label>

Optional. A specific StackScript to list.

=back

=back

=head2 SHOW

=over 8

=item Display detailed information about one or more StackScripts.

=over 8

=item B<-l>, B<--label>

Required. A specific StackScript to show.

=back

=back

=head2 SOURCE

=over 8

=item Display the source code for a StackScript.

=over 8

=item B<-l>, B<--label>

Required. A specific StackScript to show.

=back

=back

=head1 COPYRIGHT/LICENSE

Copyright 2015 Linode, LLC.  Linode CLI is made available under the terms
of the Perl Artistic License, or GPLv2 at the recipients discretion.

=head2 Perl Artistic License

Read it at L<http://dev.perl.org/licenses/artistic.html>.

=head2 GNU General Public License (GPL) Version 2

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see http://www.gnu.org/licenses/

See the full license at L<http://www.gnu.org/licenses/>.

=cut
