Provision-Unix
view release on metacpan or search on metacpan
lib/Provision/Unix/VirtualOS/Linux/Xen.pm view on Meta::CPAN
if ( $user ) {
$self->set_password_root();
$self->set_ssh_key();
};
$self->gen_config();
$self->unmount() or return;
$self->resize_disk_image();
$self->start() or return;
return 1;
}
sub reinstall {
my $self = shift;
$self->get_xen_config(); # cache value from config file (like mac address)
$self->destroy()
or
return $log->error( "unable to destroy virtual $vos->{name}",
fatal => $vos->{fatal},
debug => $vos->{debug},
);
return $self->create();
}
sub console {
my $self = shift;
my $ve_name = $self->get_ve_name();
my $cmd = $util->find_bin( 'xm', debug => 0 );
exec "$cmd console $ve_name";
};
sub create_console_user {
my $self = shift;
$user ||= Provision::Unix::User->new( prov => $prov );
my $username = $self->get_console_username();
my $ve_home = $self->get_ve_home();
my $ve_name = $self->get_ve_name();
my $debug = $vos->{debug};
if ( ! $user->exists( $username ) ) { # see if user exists
$user->create_group( group => $username, debug => $debug );
$user->create(
username => $username,
password => $vos->{password},
homedir => $ve_home,
shell => -x '/usr/bin/lxxen' ? '/usr/bin/lxxen' : '',
debug => $debug,
gecos => "System User for $ve_name",
)
or return $log->error( "unable to create console user $username", fatal => 0 );
$log->audit("created console user account");
};
my $uid = getpwnam $username;
if ( $uid ) {
$util->chown( dir => $ve_home, uid => $uid, fatal => 0 );
};
foreach ( qw/ .bashrc .bash_profile / ) {
$util->file_write( "$ve_home/$_",
lines => [ "/usr/bin/sudo /usr/sbin/xm console $ve_name", 'exit' ],
fatal => 0,
debug => 0,
)
or $log->error( "failed to configure console login script", fatal => 0 );
}
$log->audit("installed console login script");
if ( ! `grep '^$username' /etc/sudoers` ) {
$util->file_write( '/etc/sudoers',
lines => [ "$username ALL=(ALL) NOPASSWD: /usr/sbin/xm console $ve_name" ],
append => 1,
mode => '0440',
fatal => 0,
debug => 0
)
or $log->error( "failed to update sudoers for console login");
$util->file_write( '/etc/sudoers.local',
lines => [ "$username ALL=(ALL) NOPASSWD: /usr/sbin/xm console $ve_name" ],
append => 1,
fatal => 0,
debug => 0
)
or $log->error( "failed to update sudoers for console login");
$log->audit("updated sudoers for console account $username");
};
$log->audit( "configured remote SSH console" );
return 1;
};
sub create_disk_image {
my $self = shift;
my $image_name = $self->get_disk_image();
my $image_path = $self->get_disk_image(1);
my $size = $self->get_disk_size();
my $ram = $self->get_ve_ram();
# create the disk image
my $cmd = $util->find_bin( 'lvcreate', debug => 0, fatal => 0 ) or return;
$cmd .= " --size=${size}M --name=${image_name} vol00";
$util->syscmd( $cmd, debug => 0, fatal => 0 )
or return $log->error( "unable to create $image_name with: $cmd", fatal => 0 );
# format as ext3 file system
my $mkfs = $util->find_bin( 'mkfs.ext3', debug => 0, fatal => 0 ) or return;
$util->syscmd( "$mkfs $image_path", debug => 0, fatal => 0 )
or return $log->error( "unable for format disk image", fatal => 0);
$log->audit("disk image for $vos->{name} created");
return 1;
}
sub create_snapshot {
( run in 0.999 second using v1.01-cache-2.11-cpan-5511b514fd6 )