-
Notifications
You must be signed in to change notification settings - Fork 4
/
provision.pm
82 lines (56 loc) · 1.82 KB
/
provision.pm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
use strict;
use warnings;
package Dist::Zilla::App::Command::provision;
BEGIN {
$Dist::Zilla::App::Command::provision::VERSION = '0.1';
}
# ABSTRACT: release your dist to the CPAN
use Dist::Zilla::App -command;
use Moose;
use Config::Any;
use Hash::Merge 'merge';
sub abstract { 'provision a new Oyster VM' }
sub opt_spec {
[ 'name=s' => 'the name of the VM to create' ],
}
sub execute {
my ($self, $opt, $arg) = @_;
my $zilla = $self->zilla;
my $name = $opt->name
or die "No name provided!";
my @config_files = ( './oyster.conf' ); # TODO make configurable
my $cfg = Config::Any->load_files({ files => \@config_files, use_ext => 0 });
($cfg) = values %{ $cfg->[0] }; # FIX with ::JFDI or similar
my $Provision = $cfg->{Provision} or die "No <Provision> section";
my @hashes = grep $_, $Provision->{Default}, $Provision->{$name}
or die "No section for <Provision> <$name>, and no <default>";
my %hash = @hashes > 1 ? %{ merge( @hashes ) } : $hashes[0];
$hash{provision_backend} = delete $hash{type} || 'Oyster::Provision::Rackspace';
$hash{pub_ssh} ||= "$ENV{HOME}/.ssh/id_rsa.pub";
$hash{size} ||= 1; # id 1 - ram 256 MiB - disk 10 GiB
$hash{image} ||= 69; # id 69 - Ubuntu 10.10 (meerkat)
use Oyster::Provision;
my $server = Oyster::Provision->new(
name => $name,
config => \%hash,
%hash,
);
$server->create;
print "Instance $name created! ($server)\n";
}
1;
__END__
=pod
=head1 NAME
Dist::Zilla::App::Command::provision - provision a new Oyster VM
=head1 VERSION
version 0.1
=head1 SYNOPSIS
TODO
=head1 AUTHOR
CONTRIBUTORS
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2010 by CONTRIBUTORS
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut