Die Foren-SW läuft ohne erkennbare Probleme. Sollte doch etwas nicht funktionieren, bitte gerne hier jederzeit melden und wir kümmern uns zeitnah darum. Danke!

"Virtual Machines and Templates" Ordner per Skript

Alles zum Virtualisierungsmanagement und Servermanagement, was nicht direkt in ein festes Version-Schema paßt.

Moderatoren: irix, Dayworker

Member
Beiträge: 4
Registriert: 18.05.2009, 17:14

"Virtual Machines and Templates" Ordner per Skript

Beitragvon arudolf » 19.05.2009, 10:35

Hallo zusammen,

im VI Client gibt es unter der Ansicht "Virtual Machines and Templates" die Möglichkeit, Ordner anzulegen. Man kann die Guests daraufhin per Drag & Drop dahin verschieben und diese so übersichtlich gruppieren.

Wie kann ich per Skript / Kommandozeile erreichen, was ich mit der Maus im VI Client mache? Gibt es eine Möglcihkeit, bei der Registrierung per Skript bereits den Ziel Ordner auszuwählen?

Ich habe im Programming Guide VI Perl Toolkit, VMware VIX usw. nichts dazu gefunden. Auch habe ich versucht, beim Registrieren als "--vmname" Parameter gleich den Ordner mitzugeben. Wie auch immer, jeder Name wurde akzeptiert, so dass dann die VM auch mal "Folder1\DRSSRV02" hieß :(

Mittels "vmware-cmd" sehe ich keine Möglichkeit, da der ESX Hosts keine Ordner kennt. Also muss dass gegen den VC Server getan werden.

Wie kann ich das lösen?

Benutzeravatar
Profi
Beiträge: 838
Registriert: 06.04.2006, 14:36
Wohnort: bei Mainz
Kontaktdaten:

Beitragvon Heros » 19.05.2009, 11:39

Ja, geht alles! Schau dir mal die Powershell bzw das VI Toolkit an. Da geht alles und es ist gut beschrieben.

Member
Beiträge: 4
Registriert: 18.05.2009, 17:14

Beitragvon arudolf » 19.05.2009, 11:50

Danke für die rasche Antwort.

Allerdings laufen in der Umgebung schon eine große Anzahl bash Skripte, die das Perl Toolkit bemühen und z.T. per ssh Kommandos auf den ESX Servern absetzen. Ich würde das gern in mittels dieser Kombination erschlagen. Jetzt zusätzlich noch die Powershell und das passende Toolkit zu installieren sehe ich als letzte Möglichkeit.

Member
Beiträge: 4
Registriert: 18.05.2009, 17:14

Beitragvon arudolf » 19.05.2009, 12:44

Ich habe folgendes Perl Skript "gebastelt":

=========================
#!/usr/bin/perl -w

use strict;
use warnings;

use VMware::VIRuntime;

$Util::script_version = "1.0";

my %opts = (
'vmname' => {
type => "=s",
help => "The name of the vm",
required => 1,
},
'folder' => {
type => "=s",
help => "The name of the vmFolder",
required => 1,
},
'datacenter' => {
type => "=s",
variable => "datacenter",
help => "Name of the datacenter",
required => 0,
},
'pool' => {
type => "=s",
variable => "pool",
help => "Name of the resource pool",
required => 0,
},
'host' => {
type => "=s",
variable => "host",
help => "Name of the host" ,
required => 0,
},
);

Opts::add_options(%opts);
Opts::parse();
Opts::validate(\&validate);

Util::connect();

my $vmname = Opts::get_option('vmname');
my $folder = Opts::get_option('folder');

my $vm_views = Vim::find_entity_views((view_type => 'VirtualMachine'), filter => { name => $vmname } );
my $vm_moref = shift @$vm_views;

my $folder_views = Vim::find_entity_views((view_type => 'Folder'), filter => { name => $folder } );
my $folder_moref = shift @$folder_views;

eval
{
$folder_moref->MoveIntoFolder(list => $vm_moref);
};

Util::disconnect();
=========================

Ich bekomme folgende Fehlermeldung:

# Undefined subroutine &main::validate called at C:/Program Files/VMware/VMware VI
# Perl Toolkit/Perl/lib/VMware/VILib.pm line 519.

Ich bin leider in Perl nicht fit genug um den Unterschied zu anderen Skripten zu erkennen, die ich als Quelle benutzt habe. "c:\Programme\VMware\VMware VI Perl Toolkit\Perl\samples\vm\vmprovision.pl" Dort wird das IMHO ebenso benutzt. :roll:

Kommentiere ich die Zeile "Opts::validate(\&validate);" aus, dann tut das Skript seinen Dienst. Aber "validate" prüft sicher die Parameter, worauf ich nicht verzichten will...

Benutzeravatar
Moderator
Beiträge: 3476
Registriert: 23.02.2005, 09:14
Wohnort: Burgberg im Allgäu
Kontaktdaten:

Beitragvon Tschoergez » 19.05.2009, 19:35

Zum Vermeiden der Fehlermeldung musst Du wahrscheinlich ein weiteres Perl-Paket am Anfang mit einbinden:

Code: Alles auswählen

use strict;
use warnings;
use VMware::VIRuntime;
use VMware::VILib;

my %opts = (
        entity => {
        type => "=s",
        help => "ManagedEntity type: HostSystem, etc",
        required => 1,
    },
);
Opts::add_options(%opts);

....
(aus: http://www.vmware.com/support/developer ... guide.html)

Die genaue Referenz zu den zusätzlichen Funktionen befindet sich dann hier:
http://www.vmware.com/support/developer ... s_idx.html

edit: Oh, habs aus dem Stehgreif wohl zu kompliziert gemeint: Dein Fehler liegt wohl woanders (copy&paste schiefgelaufen?):
Schreib mal bei der validate-Zeile nur:

Code: Alles auswählen

Opts::validate();


Viele Grüße,
Jörg

Member
Beiträge: 4
Registriert: 18.05.2009, 17:14

Beitragvon arudolf » 25.05.2009, 14:48

Hallo Jörg, Danke - du hast den entscheidenden Hinweis geliefert.

Das was hinter "Opts::validate" in den Klammern stand war eine Referenz auf eine eigene Routine die "Opts::validate" ergänzen soll. Da ich aber keine eigene Sub "validate" habe - bzw nicht mit kopiert habe - ging das an der Stelle schief.

Hier nun das funktionsfähige Skript:

Code: Alles auswählen

#!/usr/bin/perl -w

use strict;
use warnings;

use VMware::VIRuntime;
use VMware::VILib;

$Util::script_version = "1.0";

my %opts = (
   'vmname' => {
      type     => "=s",
      help     => "The name of the vm",
      required => 1,
   },
   'folder' => {
      type     => "=s",
      help     => "The name of the vmFolder",
      required => 1,
   },
   'datacenter'  => {
      type     => "=s",
      variable => "datacenter",
      help     => "Name of the datacenter",
      required => 0,
   },
   'pool'  => {
      type     => "=s",
      variable => "pool",
      help     => "Name of the resource pool",
      required => 0,
   },
   'host' => {
      type     => "=s",
      variable => "host",
      help     => "Name of the host" ,
      required => 0,
   },
);

Opts::add_options(%opts);
Opts::parse();
Opts::validate();

Util::connect();

my $vmname = Opts::get_option('vmname');
my $folder = Opts::get_option('folder');

my $vm_views = Vim::find_entity_views((view_type => 'VirtualMachine'), filter => { name => $vmname } );
my $vm_moref = shift @$vm_views;

my $folder_views = Vim::find_entity_views((view_type => 'Folder'), filter => { name => $folder } );
my $folder_moref = shift @$folder_views;

eval {
   $folder_moref->MoveIntoFolder(list => $vm_moref);
};

Util::disconnect();


Zurück zu „vCenter / VMware VirtualCenter“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste