X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=p5sagit%2FOyster.git;a=blobdiff_plain;f=lib%2FDist%2FZilla%2FApp%2FCommand%2Fprovision.pm;fp=lib%2FDist%2FZilla%2FApp%2FCommand%2Fprovision.pm;h=7f4160a210e719690387cad2e7a8925df8492c5a;hp=963f9a5c2982b11af43c490c04c58ae8c3cb559e;hb=a1486321037069b15f4ba521b88c06f3bd564461;hpb=189564ce3d11c6702de3f0ec72a30ad852186cd4 diff --git a/lib/Dist/Zilla/App/Command/provision.pm b/lib/Dist/Zilla/App/Command/provision.pm index 963f9a5..7f4160a 100644 --- a/lib/Dist/Zilla/App/Command/provision.pm +++ b/lib/Dist/Zilla/App/Command/provision.pm @@ -8,6 +8,7 @@ BEGIN { use Dist::Zilla::App -command; use Moose; use Config::Any; +use Hash::Merge 'merge'; sub abstract { 'provision a new Oyster VM' } @@ -24,21 +25,25 @@ sub execute { or die "No name provided!"; my @config_files = ( './oyster.conf' ); # TODO make configurable - my $cfg = Config::Any->load_files({ files => \@config_files }); + 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 section"; - my $target = $Provision->{$name} or die "No section for <$name>"; - my $type = $target->{type} || 'Rackspace'; + my @hashes = grep $_, $Provision->{Default}, $Provision->{$name} + or die "No section for <$name>, and no "; + + my %hash = @hashes > 1 ? %{ merge( @hashes ) } : $hashes[0]; + + $hash{provision_backend} = delete $hash{type} || '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, - size => 1, # id 1 - ram 256 MiB - disk 10 GiB - image => 69, # id 69 - Ubuntu 10.10 (meerkat) - pub_ssh => "$ENV{HOME}/.ssh/id_rsa.pub", - provision_backend => $type, + name => $name, + %hash, ); $server->create; print "Instance $name created! ($server)\n";