1

Sys::Virt CPAN モジュールを使用して、kvm ハイパーバイザーと「対話」し、ドメインを管理しています。通常使用される bash virsh コマンドで実行できるほぼすべてのことを実行できますが、virsh コンソールを除きます。これは (誰が推測するにせよ) ドメインに対してテキスト コンソールを開きます。しかし、sys::virt で何をしても、カーソルが点滅するだけで何も起こりません。また、ワイドウェブ全体で単一の例を見つけることができません...だから、何が欠けているのか聞いてみようと思いました。ここに私がこれまでに持っているコードと、私がテストしたものがあります:

use 5.010; 
use warnings; 
use Sys::Virt; 
use Sys::Virt::Stream; 

my $data; 
my $url = "someurl"; 

my $con = Sys::Virt->new('uri' => "qemu+tls://$url/system"); 
my $dom = $con->get_domain_by_name("name"); 
#Until here everything is just like in every other function i wrote. 

my $st = $con->new_stream(); 
$dom->open_console($st, undef); 
#I guess that i'm also fine until here - because there are no errors.. 

#And now i'm trying to do something with this stream object i made... 
#If i would type virsh console i would get a promt to log in, so i try to fetch this promt. 
#Here are two examples of how i was trying to get it: 

#Result of this block: Blinking cursor - no "test" 
my $rv = $st->recv($data, "1"); 
say "test"; 
say $rv; 
say $data; 

#Result of this block: Blinking cursor - no "test" 
$st->recv_all(sub{ 
    my ($st, $data, $nbytes) = @_; 
}); 
say "test"; 
say $st; 
say $data; 
say $nbytes;

$st->finish();

私は何を見逃していますか?または間違っていますか?何か案は?

4

1 に答える 1

0

ようやく、自分が間違っていることがわかりました。デフォルトのストリームを使用しました。ストリームが適切に定義されていれば、テキストを送受信できます。

my $st=$con->new_stream(Sys::Virt::Stream::NONBLOCK);
$dom->open_console($st, undef, 0);

ストリームが正しく定義されていて、プログラムがデフォルトを使用していない場合 (明らかに動作しない場合)、すべてが正常に動作します (非常に遅くなりますが問題ありません)。

誰かが同じ問題を抱えている場合に備えて。

于 2013-11-06T13:09:04.357 に答える