Listing 1: UserAdd.pm

#!/usr/local/bin/perl
#
# Author: Quadir Kareemullah USi
#
# Purpose: UNIX account creation module
#
package UserAdd;

use strict;
use warnings;

use Data::Dumper;

my $groupadd_cmd = "groupadd";
my $useradd_cmd = "useradd";
my $def_homedir = "/home";
my $def_shell = "/bin/bash";

sub useradd {
  my ($fullname, $username) = shift;

  my $result = { error => 1, status => "Could not run useradd() function" };

  my $cmd = "$groupadd_cmd $username 2>&1";
  my $out = `$cmd`;
  if($out =~ /exists/) {
     $result->{error} = 1;
     $result->{status} = "Could not add $username user, Group $username already exists.";
  }
  else {
    $cmd = qq($useradd_cmd -c "$fullname" -d $def_homedir/$username -s $def_shell -g $username $username  2>&1);
    $out = `$cmd`;
    if($out =~ /exists/) {
      $result->{error} = 2;
      $result->{status} .= "Could not add $username user, User $username already exists.";
    }
    else {
      $result->{error} = 0;
      $result->{status} = "User $username successfully added.";
    }
  }
}

1;

Listing 2: UserAddWS.pl

#!/usr/local/bin/perl

package UserAddWS;

use strict;
use warnings;
use diagnostics;

use Data::Dumper;

use lib './modules';
use UserAdd;

use SOAP::Transport::HTTP;

SOAP::Transport::HTTP::CGI
-> dispatch_to('UserAddWS')
-> handle;

sub useradd {
  my $self = shift;

  my $result = UserAdd::useradd(@_);

  if($result->{error}) {
     die SOAP::Fault->faultcode( $result->{error} )
       ->faultstring( $result->{status} );
  }

  return $result->{status};
}

1;


Listing 3: UserAddWS.wsdl

<?xml version="1.0" encoding="UTF-8"?>

<definitions name="UserAddWS"
  targetNamespace="http://mdsxaaw05.usi.net/wsdl/UserAddWS.wsdl"
  xmlns="http://schemas.xmlsoap.org/wsdl/"
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
  xmlns:tns="http://mdsxaaw05.usi.net/wsdl/UserAddWS.wsdl"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema">


  <message name="UserAddRequest">
    <part name="fullname" type="xsd:string"/>
    <part name="username" type="xsd:string"/>
  </message>

  <message name="UserAddResponse">
    <part name="status" type="xsd:string"/>
  </message>

  <portType name="UserAddWS_PortType">

    <operation name="useradd">
      <input message="tns:UserAddRequest"/>
      <output message="tns:UserAddResponse"/>
    </operation>

  </portType>

  <binding name="UserAddWS_Binding" type="tns:UserAddWS_PortType">

    <soap:binding style="rpc"
      transport="http://schemas.xmlsoap.org/soap/http"/>

    <operation name="useradd">

      <soap:operation soapAction=""/>

      <input>
        <soap:body
          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
          namespace="urn:UserAddWS"
          use="encoded"/>
      </input>

      <output>
        <soap:body
          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
          namespace="urn:UserAddWS"
          use="encoded"/>
      </output>

    </operation>

  </binding>

  <service name="UserAddWS_Service">

    <documentation>WSDL File for UserAddWS</documentation>

    <port binding="tns:UserAddWS_Binding" name="UserAddWS_Port">
      <soap:address
        location="http://mdsxaaw05.usi.net/soap/UserAddWS.pl"/>
    </port>

  </service>

</definitions>


Listing 4: emcli provision

emcli provision
      -image="Images/myimage"
      -network="Networks/networkprofile"
      -bootserver="booservername.us.oracle.com"
      -stageserver="stageserver.us.oracle.com:/private/share"
      -stgcredentials="joe"
      -schedule="type:immediate"
      -resettimeout="100"
      -target="mylabel"
      -input_file="config_properties:properties.txt"
      -assignment="provision mylabel"