#!/usr/bin/env perl use strict; use warnings; use OpenStack::MetaAPI (); use Test2::Bundle::Extended; use Test2::Tools::Explain; use Test2::Plugin::NoWarnings; use Test::MockModule; use JSON (); use FindBin; use lib "$FindBin::Bin/../t/lib"; use Test::OpenStack::MetaAPI qw{:all}; my $VALID_ID = match qr{^[a-f0-9\-]+$}; my $IMAGE_UID = '170fafa5-1329-44a3-9c27-9bb77b77206d'; my $IMAGE_NAME = 'myimage'; # name of the VM we are creating as part of this testsuite #my $SERVER_NAME = 'testsuite autobuild c7 11.81.9999.42'; my $SERVER_NAME = 'testsuite OpenStack::MetaAPI'; SKIP: { skip "OS_AUTH_URL unset, please source one openrc.sh file before." unless $ENV{OS_AUTH_URL}; mock_lwp_useragent(); # allow some debug output #$Test::OpenStack::MetaAPI::UA_DISPLAY_OUTPUT = 1; my $api = OpenStack::MetaAPI->new( $ENV{OS_AUTH_URL}, username => $ENV{'OS_USERNAME'}, password => $ENV{'OS_PASSWORD'}, version => 3, scope => { project => { name => $ENV{'OS_PROJECT_NAME'}, domain => {id => 'default'}, } }, ); { note "delete servers from previous run"; delete_test_servers($api); } { note "create a server from one image"; my $vm = $api->create_vm( name => $SERVER_NAME, # vm name image => $IMAGE_UID, # image used to create the VM flavor => 'small', key_name => 'openStack nico', # optional key to set #security_group => 'default', # security group to use, by default use 'default' network => 'Dev Infra initial gre network', # network group to use # or network => qr{Dev Infra}', # or network => 'fb5c81fd-0a05-46bc-8a7e-cb94dc851bb4 ', #--network fb5c81fd-0a05-46bc-8a7e-cb94dc851bb4 #wait => 1, network_for_floating_ip => 'vlan3340-product', ); #note explain $vm; like $vm, hash { field id => $VALID_ID; field name => $SERVER_NAME; field floating_ip_address => match qr/^\d+\.\d+\.\d+\.\d+$/a; field floating_ip_id => $VALID_ID; field status => 'ACTIVE'; etc; }, "created a vm with a floating ip" or diag explain $vm; } # for now keep the server alive so we can play with it... #note "delete_test_servers after test"; #delete_test_servers( $api ); } done_testing; exit; sub delete_test_servers { my ($api) = @_; my @servers = $api->servers(name => $SERVER_NAME); foreach my $server (@servers) { next unless defined $server->{id} && length $server->{id}; note "delete server - ", "id: ", $server->{id}, " ; name: ", $server->{name}; $api->delete_server($server->{id}); } return; } __END__