The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -w

use strict;
use warnings;
use Net::Fastly;
use File::Basename;

=head1 NAME

fastly_upload_vcl - upload raw VCL files to Fastly

=head1 USAGE

    fastly_upload_vcl <options> <service id or name> <path to vcl file>

=head1 CONFIGURATION

You can either have a config file in either ~/.fastly or /etc/fastly with

    api_key = <key>
    
or a config file with

    user     = <login>
    password = <password>

Alternatively you can pass in any of those options on the command line

    fastly_upload_vcl --api_key  <key> <service id or name> <path to vcl file>
    fastly_upload_vcl --user <login> --password <password> <service id or name> <path to vcl file>

=cut

sub slurp {
  my $file = shift;
  open(my $fh, $file) || die "Couldn't open $file: $!\n";
  my $content = join("", <$fh>);
  close($fh);
  return $content;
}

my %opts   = Net::Fastly::get_options($ENV{HOME}."/.fastly", "/etc/fastly");
my $fastly = Net::Fastly->new(%opts);

my $service_id  = shift || die("You must pass in a service id or name");
my $vcl_file    = shift || die("You must pass in a vcl file");

die "Couldn't find vcl file #{vcl_file}\n" unless -f $vcl_file;

my ($service) = eval { $fastly->get_service($service_id) } || eval { $fastly->search_services(name => $service_id) } || die "Couldn't find service $service_id\n";

my $version = $service->version;
die "Can't upload a vcl file the latest (".$version->number.") version of ".$service->name." (".$service->id.") is locked\n" if $version->locked;
print "Uploading $vcl_file to version  ".$version->number."\n";
eval {
  my $name = basename($vcl_file, ".vcl");
  my $vcl  = eval { $version->vcl($name) };
  my $cont = slurp($vcl_file);
  if ($vcl) {
      $vcl->content($cont);
      $vcl->save;
  } else {
      $version->upload_vcl($name, $cont);
  }
  #$version->activate;
};
die "Couldn't upload: $@\n" if $@;
print "Done! You should now go and activate it at https://app.fastly.com/#configure\n";

=pod 

=head1 COPYRIGHT

Copyright 2011 - Fastly Inc

Mail support at fastly dot com if you have problems.

=head1 DEVELOPERS

http://github.com/fastly/fastly-perl

http://www.fastly.com/documentation

=cut