#!/usr/bin/perl # IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html #------------------------------------------------------- =head1 mkzvmnodes Description : This is a script to make definitions for z/VM nodes Arguments : mkzvmnodes < Node range > userid=< UserID range > ip= hcp=< Hardware control point > groups=< Group > Returns : Nothing Example : mkzvmnodes gpok140+9 userid=LINUX140+9 ip=9.60.18.140+9 hcp=gpok456.endicott.ibm.com groups=all =cut #------------------------------------------------------- use strict; use warnings; # This script makes the following commands for each node in the range: # mkdef -t node -o gpok123 userid=linux123 ip=9.60.18.123 hcp=gpok456.endicott.ibm.com mgt=zvm groups=all # Get node range my $nodeRange = $ARGV[0]; # Get inputs # Hash array containing arguments my %args; my @parms; my $i; foreach $i ( 1 .. $#ARGV ) { @parms = split( "=", $ARGV[$i] ); $args{ $parms[0] } = $parms[1]; } # --- Generate nodes --- my @nodes; @parms = split( /\+/, $nodeRange ); my $topNo = $parms[1]; # Get non digits from string $parms[0] =~ m/(\D+)/; my $baseStr = $1; # Get digits from string $parms[0] =~ m/(\d+)/; my $baseNo = $1; my $no; my $node; foreach $i ( 0 .. $topNo ) { # Node + 1 $no = $baseNo + $i; $node = $baseStr . $no; push( @nodes, $node ); } # --- Generate user IDs --- my @userIDs; @parms = split( /\+/, $args{"userid"} ); $topNo = $parms[1]; # Get non digits from string $parms[0] =~ m/(\D+)/; $baseStr = $1; # Get digits from string $parms[0] =~ m/(\d+)/; $baseNo = $1; my $userID; foreach $i ( 0 .. $topNo ) { # UserID + 1 $no = $baseNo + $i; $userID = $baseStr . $no; push( @userIDs, $userID ); } # --- Generate IP addresses --- # Only IPv4 supported my @ips; @parms = split( /\+/, $args{"ip"} ); $topNo = $parms[1]; # Get non digits from string @parms = split( /\./, $parms[0] ); $baseStr = $parms[0] . "." . $parms[1] . "." . $parms[2] . "."; # Get digits from string $baseNo = $parms[3]; my $ip; foreach $i ( 0 .. $topNo ) { # IP address + 1 $no = $baseNo + $i; $ip = $baseStr . $no; push( @ips, $ip ); } # Check if # of nodes = # of user IDs if ( @nodes != @userIDs || @nodes != @ips ) { print "Error: Number of nodes != Number of user IDs or Number of IP addresses\n"; exit(0); } # --- Generate and execute command --- $i = 0; my $cmd; my @cmds; my $out; foreach (@nodes) { $cmd = "mkdef -t node -o $_ userid=$userIDs[$i] ip=$ips[$i] hcp=$args{'hcp'} mgt=zvm groups=$args{'groups'}"; $out = `$cmd`; print "$_: Done\n"; $i++; push( @cmds, $cmd ); }