Below is the workflow I am using.
<?xml version="1.0" standalone="no" ?>
<!DOCTYPE workflow SYSTEM "iwwf.dtd">
<template_script><![CDATA[
################################################################################################################
#
# Script : Flexera_Binaries_Deploy_QA.wft (/apps/iw-home/local/config/wft/golden_repository/flexera/Flexera_Binaries_Deploy_QA.wft)
# Version : V1.0
# Purpose :
#
# Created on : 13/09/2016
# Author : Devika Khandeparkar
#
# ################ HISTORY ######################################################################################
#
# Modified by : Devika Khandeparkar
# Modified on : 13/09/2016
# Reason : MFT Migration CHG0081416
#
##################################################################################################################
use TeamSite::Usertask qw(
cleanup_paths
get_names_from_file
get_mail_cmd
make_branchpathlist
make_input
make_textarea
);
use TeamSite::WFTutil;
use TeamSite::WFDButil;
use TeamSite::Config;
use TeamSite::Veritas;
sub set_area{
my($btag,$watag)=@_;
my($avpath,$bpath,$wapath,$skip);
my($iwbpath,$iwwapath)=(__VALUE__("iw_branch"), __VALUE__("iw_workarea"));
if ((length($iwbpath))>0 &&(length($iwwapath))>0){
$bpath =$iwbpath;
($wapath =$iwwapath)=~s|^\s*/.*
|;
$wapath =~s|/\s*$||;
return("$wapath","$iwbpath","$wapath","TRUE");
}
($bpath,$wapath,$avpath)=cleanup_paths(__VALUE__("$btag"), __VALUE__("$watag"));
return("$avpath","$bpath","$wapath","FALSE");
}
my($cvpath,$branch_path,$work_area,$skip_branch)= set_area("branch_path","work_area");
my $jobRequestTime=TeamSite::WFTutil::getDateTime();
#=====================================================================
# Piece together the deploy command
#=====================================================================
# iwperl only needs to be defined on Windows systems
my($iwhome) = `iwgethome`;
chomp $iwhome;
my($iwperl) = "$iwhome/iw-perl/bin/iwperl";
chomp $iwperl;
#my $croot = "root";
#my $closer = "vpcnotify";
#my $closer = TeamSite::Veritas::close_email_to();
#chomp $closer;
#chomp $croot;
my $ci_it = "root";
chomp $ci_it;
my $ciwuser = __VALUE__('iw_user');
my $jobRequestTime=TeamSite::WFTutil::getDateTime();
# my $wfpath = "$iwhome/local/config/wft/www-symc";
# my $wf_config_file = "Symc_Workflow_Config";
# my $propertiesFile = "$wfpath/$wf_config_file.xml";
# my $sub_dir = "WORKAREA/products";
# my $unlock = "$iwhome/local/bin/unlock.ipl";
# my $server = "interwov-ex7lj9"; # this server
# my $admins = "administrators";
# my $item;
# my @mail_list = ();
#my @arrGroupMembers = (1, 0, 2);
# LocalGroupGetMembersWithDomain( $server, $admins, \@arrGroupMembers);
#foreach $item (@arrGroupMembers) {
# push(@mail_list, $item) unless $item=~/\\$/;
#}
# my ($releaseId) = $iwperl ." ". $iwhome ."/local/bin/veritas/veritas_get_release_id.ipl";
# my ($associateSku) = $iwperl ." ". $iwhome ."/local/bin/veritas/veritas_associate_sku_release_id.ipl";
# my ($importFiles) = $iwperl ." ". $iwhome ."/local/bin/veritas/veritas_import_files.ipl";
# my ($getSkuStatus) = $iwperl ." ". $iwhome ."/local/bin/veritas/veritas_get_sku_status.ipl";
# my ($getSkuStatusDaily) = $iwperl ." ". $iwhome ."/local/bin/veritas/veritas_get_sku_status_daily.ipl";
# my ($getSkuDaily) = $iwperl ." ". $iwhome ."/local/bin/veritas/veritas_check_daily.ipl";
# my ($updateStatus) = $iwperl ." ". $iwhome ."/local/bin/veritas/veritas_update_status.ipl";
#my ($vpc_insert_clean_temp) = $iwperl ." ". $iwhome ."/local/bin/veritas/veritas_vpc_cleanup.ipl";
#my ($setmeta) = $iwperl ." ". $iwhome ."/local/bin/veritas/veritas_set_meta.ipl";
#my ($dummy_cmd) = $iwperl . " " . $iwhome ."/local/bin/veritas/dummy_cmd.ipl";
my ($release_id_dir) = $iwhome ."/local/bin/veritas/fix_release_id_QA.txt";
my ($createProject) = $iwperl ." ". $iwhome ."/local/bin/flexera/veritas_create_project_dir_QA.ipl";
my ($email_DRC) = $iwperl . " " . $iwhome . "/local/bin/flexera/iwsend_servlet_mailv5_QA.ipl -t " . $ciwuser;
my ($email_RE) = $iwperl . " " . $iwhome . "/local/bin/flexera/iwsend_servlet_mailv5_QA.ipl -t " ;
my ($validate_files_uploaded_to_TS) = $iwperl ." ". $iwhome ."/local/bin/flexera/validate_files_uploaded_to_TS_QA.ipl";
my ($temp_db_clean) = $iwperl ." ". $iwhome ."/local/bin/flexera/veritas_tempdb_cleanup_QA.ipl";
my ($checksum) = $iwperl ." ". $iwhome ."/local/bin/flexera/veritas_checksum_QA.ipl";
my ($calculate_checksum) = $iwperl ." ". $iwhome ."/local/bin/flexera/veritas_calculate_checksum.ipl";
my ($get_checksum_bkpTS) = $iwperl . " " . $iwhome . "/local/bin/flexera/get_checksum_value_from_TSbkp.ipl";
my ($email_IT) = $iwperl . " " . $iwhome . "/local/bin/flexera/iwsend_servlet_mailv5_QA.ipl -t " . $ciwuser;
my ($email_prd_success) = $iwperl . " " . $iwhome . "/local/bin/flexera/iwsend_servlet_mailv5_QA.ipl -t " . $ciwuser;
my ($prd_deploy) = "$iwperl $iwhome/local/bin/flexera/veritas_deploy_files_QA.ipl";
my ($flexera_deploy) = "$iwperl $iwhome/local/bin/flexera/flexera_prod_deploy_files_QA.ipl";
my ($flexera_api) = "$iwperl $iwhome/local/bin/flexera/http_request_QA.ipl";
my ($submitfile) = $iwperl ." ". $iwhome ."/local/bin/flexera/veritas_submit.ipl";
(my $iwhome = TeamSite::Config::iwgethome()) =~ tr|\\|/|;
#=====================================================================
# Name: iw_cleanup_paths
# Args: bp - branch path
# wa - workarea name
# Usage: ($b, $w, $a) = iw_cleanup_paths($bp, $wa);
# Purpose: Function used to clean up leading and trailing blanks
# from branch path and work area path, then derive
# $areavpath.
# Returns: Cleaned branch path, workarea, and generated areavpath
#=====================================================================
sub iw_cleanup_paths {
my ($bp, $wa) = @_;
# clean up leading and trailing slashes so we don't
# end up hassling the user over including/excluding them
$bp =~ s|^\s*/*([^/].*\S)/\s*$|$1|;
$wa =~ s|^\s*/*([^/].*\S)/\s*$|$1|;
#=# (Note - this code may need to change when we start supporting
#=# multiple archives [Arnold])
$bp = "main/$bp" if ($bpath !~ /^main/);
$areavpath = TeamSite::CGI_lite::escape_html_data(
"/default/$bp/WORKAREA/$wa");
return ($bp, $wa, $areavpath);
}
#=====================================================================
# Name: iw_set_area
# Args: btag - TAG_info variable name for branch path.
# watag - TAG_info variable name for workarea.
# Usage: ($a, $b, $w, $s) = set_area("$btag", "$watag");
# Purpose: If the built-in variables for branch and workarea have
# not been set, pull the information from the workflow
# instantiation form (using the btag and watag info).
# Use the branch and workarea information to generate
# a valid areavpath (using a library routine)
# Returns: Returns the generated areavpath, the branch path, the
# workarea name, and a boolean indicating whether or not
# the branch and workarea need to be prompted for during
# instantiation (this relies on the fact that this code
# is run multiple times during the instantion process).
#=====================================================================
sub iw_set_area{
my($btag, $watag) = @_;
my($avpath, $bpath, $wapath, $skip);
my($iwbpath, $iwwapath) = (__VALUE__("iw_branch"),
__VALUE__("iw_workarea"));
if ((length($iwbpath)) > 0 && (length($iwwapath)) > 0){
$bpath = $iwbpath;
($wapath = $iwwapath) =~ s|^\s*/.*
|;
$wapath =~ s|/\s*$||;
return("$wapath", "$iwbpath", "$wapath", "TRUE");
}
($bpath, $wapath, $avpath) = iw_cleanup_paths(__VALUE__("$btag"),
__VALUE__("$watag"));
return("$avpath", "$bpath", "$wapath", "FALSE");
}
my($iw_area_vpath, $iw_branch_path, $iw_work_area, $iw_skip_branch) =
iw_set_area("branch_path", "work_area");
#======================================================================
# Name: iw_get_mail_cmd
# Args: type - either "iwsend_mail" or "iwsend_servlet_mail"
# addr - 'To:' email address
# Usage: __INSERT__(iw_get_mail_cmd("$type", "$addr"));
# Purpose: This function generates the command statement called
# by the external email notification task.
# Returns: Returns the generated XML string.
# Note: Defaults to iwsend_servlet_mail.ipl unless $type is
# explicitly set to iwsend_mail
#=# (this will hopefully change with the next version of iwsend_mail)
#=# (when that happens, either drop type, or make it a second
#=# [optional] argument, that if set - assumes the program lives in
#=# iw-home/local/bin ?)
#=====================================================================
sub iw_get_mail_cmd {
# NT lacks the ability to bind a script executor with a
# script on a 'shebang' line (eg: #!/blah/blah/iwperl)
# Instead it uses the assoc/ftype mechanism which employs
# the use of environment variables that are not always
# available (cf: IIS's metabasse, which replicates the
# extention-based association scheme on its own). Therefore,
# we need to spoon-feed iwperl the script like this for now:
my($type, $taskName, $addr) = @_;
return(sprintf("<command v='%s$iwhome/bin/%s %s'/>",
($^O eq "MSWin32") ? "$iwhome/iw-perl/bin/iwperl " : "",
($type eq "iwsend_mail") ?
"$type.ipl" : "iwsend_servlet_mail.ipl",
($taskName eq "" ) ? $addr: "$taskName $addr"));
}
#=====================================================================
# Name: iw_getrole
# Args: role - basename of a TeamSite role (*.uid) file, or
# similarly constructed customized file in the
# same directory.
# Usage: $html = iw_getrole("master");
# Purpose: Generate an HTML formatted drop-down menu of all
# entries in named file for use within a TAG_info()
# section.
# Returns: Returns the generated drop down list on success, or
# a text field with an error message if it was unable
# to open the file.
#=====================================================================
sub iw_getrole{
my($role) = @_;
$role .= ".uid" if ($role !~ /\.uid$/);
my($html) = "";
if (!open(IN, "<$iwhome/conf/roles/$role")){
$html = "<input type='text' value='--Error opening $role--'>";
}
else {
$html = "<select size='1'>\n<option>\n";
foreach (sort(<IN>)){
s/^\s*//gs; s/\s*$//gs;
$html .= "<option>$_\n";
}
close(IN);
$html .= "</select>\n";
}
return($html);
}
sub iw_getrelease_id{
my($html) = "";
if (!open(IN, "<$release_id_dir")){
$html = "<input type='text' value='--Error opening $role--'>";
}
else {
$html = "<select size='1'>\n";
foreach (sort(<IN>)){
s/^\s*//gs; s/\s*$//gs;
$html .= "$_\n";
}
close(IN);
$html .= "</select>\n";
}
return($html);
}
#=# (changed reference to renamed subroutine)
my($iw_admin_html) = iw_getrole("admin");
my($iw_masters_html) = iw_getrole("master");
my($iw_authors_html) = iw_getrole("author");
my($iw_editors_html) = iw_getrole("editor");
my($roles) = "$iwhome/conf/roles";
my($author_html) = get_names_from_file(undef, 1, undef, "$roles/author.uid");
#my($iw_release_engineer_html) = get_names_from_file(undef, 1, undef, "$roles/release_engineer.uid");
my($iw_release_engineer_html) = get_names_from_file(undef, 1, undef, "$iwhome/local/bin/flexera/release_engineer_QA.uid");
my $filepath="/opt/iw-home/custom/Administration/Group_Maintenance/data";
my @content_developer_group = TeamSite::WFTutil::getlist($filepath,developers);
my $content_developer_group_list = join(',', @content_developer_group);
#my $iw_release_id = TeamSite::WFDButil::get_release_ids();
my $iw_release_id = iw_getrelease_id();
#=====================================================================
# file list for start task
#=====================================================================
my($iw_selected_files) = iw_get_filelist();
#=====================================================================
# Name: iw_get_filelist
# Args: None.
# Usage: $xml = iw_get_filelist();
# Purpose: Generate an XML formatted list of all the files that
# were pre-selected when the workflow was initiated.
# Returns: Returns the XML formatted list if files were selected.
# Returns an empty string if no files were selected.
# Notes: Sorts the filelist in uuencode form, then html-encodes
# each entry using a library routine - all this using
# the Sambre-Janken transform algorithm
#=====================================================================
sub iw_get_filelist{
my($files) = "";
if (__ELEM__('iw_file')){
my(@flist) = map {
TeamSite::CGI_lite::escape_html_data($_);
} sort map {
tr|\\|/|;
s|^\Q$iw_area_vpath\E||;
$_;
} __VALUE__('iw_file');
$files = "<files>\n";
for (my $i = 0; $i < @flist; ++$i) {
$files .= "\t<file path='$flist[$i]' comment='task file'/>\n";
}
$files .= "</files>\n";
}
return($files);
}
##############################################################################
my $ceditor = __VALUE__('iw_areaowner');
# CGI_info(
# valid_bgcolor => "#C0C0C0",
# valid_bgcolor => "WHITESMOKE" ,
# title => "Binary Product Release",
# banner_html => "<center>Binary Product Release<center>",
# html_body_options => "bgcolor='#C0C0C0'onLoad='top.resizeTo(600,500);'",
# tag_table_options => "border=0 cellspacing=0 cellpadding=0",
# cancel_label => "Cancel Job" ,
# submit_label => "Start Job"
# );
CGI_info(
tag_table_options => "border=0",
error_label_bgcolor => "RED" ,
valid_bgcolor => "WHITESMOKE" ,
submit_label => "Start Job" ,
cancel_label => "Cancel Job",
#pre_tagtable_html => "<h3>PDF Deploy Workflow</h3>",
);
#======================================================================
# JOB FORM DATA CAPTURE
#---------------------------------------------------------------------
# This section capture the necessary data on the job creation form in
# order to dynamically assemble a workflow.
#======================================================================
sub debug{
TAG_info(
iw_output_file => "<input type='text' value='/tmp/foo.xml'>",
iw_debug_mode =>
"<input type='radio' value='true'>True</input>" .
"<input type='radio' value='false'>False</input>",
);
}
#======================================================================
# Uncomment following line if you wish to enable workflow debugging.
#======================================================================
#&debug;
my $owner = uc(__VALUE__('iw_user'));
if (!defined(__VALUE__(iw_first_time)))
{
TAG_info(
first_time_hidden_placeholder =>
[
html => "<input type=hidden value=''>",
is_required => 'true',
],
);
}
my $user = __VALUE__('iw_user');
TAG_info(
iw_setwfarg_iw_release_id => [
html => $iw_release_id,
label => "Select Release ID",
],
iw_setwfarg_Project => [
html => "<input type='text' size=40 value=''>",
label => "Project Name:",
],
iw_setwfarg_iw_release_agent => [
html => $iw_release_engineer_html,
label => "Select Release Agent",
],
iw_setwfarg_RTM_Date => [
html => "<input type='text' value=''><br><font size=-2>(YYYY-MM-DD)</font>",
is_required => 'true',
label => "<font color=red><sup>*</sup></font>RTM Date:",
valid_input => 'date_validator($_)',
error_msg => "Date must be in the format YYYY-MM-DD.<BR>And greater than"." todays date.",
],
iw_desc => [
html => "<textarea rows='5' cols='60'></textarea>",
label => "Job Description",
is_required => 'true',
error_msg => 'Please enter a description',
],
# iw_desc => [
# html => "</tr><tr><td colspan=2><textarea rows='5' cols='80'></textarea></td></tr><tr>",
# label => "</td><tr><td colspan=2><font color=red><sup>*</sup></font><b>Description of Job:</td></tr><tr>",
# error_msg => 'Please enter a description',
# ],
);
$TimeToDeploy = __VALUE__('iw_setwfarg_RTM_Date');
($year,$mon,$day) = split(/-/,$TimeToDeploy);
$TimeToDeploy = $mon.$day.$year."0000";
#MMDDYYYYHHMM
sub date_validator_simple
{
my($date_ck) = @_;
if ($date_ck =~ /((19|20)[0-9][0-9]-(((01|03|05|07|08|10|12)-((0[1-9])|([12][0-9])|(3[01])))|((04|06|09|11)-((0[1-9])|([12][0-9])|(30)))|(02-((0[1-9])|(1[0-9])|(2[0-8])))))|((19|20)(((04|08))|((2|4|6|8)(0|4|8))|((1|3|5|7|9)(2|6)))-02-29)/)
{
return (1);
}
else
{
return (0);
}
}
#=====================================================================
# Name: date_validator
# Args: date in the format of yyyy-mm-dd
# Usage: valid_input => 'date_validator($_)',
# Purpose: used in TAG_info section to validate a input date.
# Checks date format and that date is > todays date.
# Returns: Returns 1 for success or 0 for failure.
#
#
#=====================================================================
sub date_validator
{
use Date::Manip;
my($date_ck) = @_;
if ($date_ck =~ /((19|20)[0-9][0-9]-(((01|03|05|07|08|10|12)-((0[1-9])|([12][0-9])|(3[01])))|((04|06|09|11)-((0[1-9])|([12][0-9])|(30)))|(02-((0[1-9])|(1[0-9])|(2[0-8])))))|((19|20)(((04|08))|((2|4|6|8)(0|4|8))|((1|3|5|7|9)(2|6)))-02-29)/)
{
Date_Init("TZ=GMT","DateFormat=US");
my $flag=&Date_Cmp($date_ck,$jobRequestTime);
if ($flag<0) {
return(0);
} elsif ($flag==0) {
return(0);
} else {
return (1);
}
}
else
{
return (0);
}
}
]]>
</template_script>
<workflow name = "__TAG__('iw_setwfarg_Project'); -- __TAG__('iw_setwfarg_iw_release_id');" owner = "__INSERT__($ciwuser);" creator = "__TAG__('iw_user');" description="__TAG__('iw_desc');">
<variables>
<variable key="Job_Name" value = "__TAG__('iw_setwfarg_iw_release_id');"/>
<variable key="track" value = "S"/>
<variable key="Launch_Date" value= "__TAG__('iw_setwfarg_RTM_Date');"/>
<variable key = "Assignee" value = "__INSERT__($ciwuser);"/>
</variables>
<externaltask lock="f" name="ReleaseID_Directory" owner="__INSERT__($ciwuser);" retry="f" start="t" description="Fix abiltiy to create a project Directory">
<areavpath v = "__INSERT__($cvpath);"/>
<successors>
<successorset description = "Release ID fixed">
<succ v = "Email_Release_Engineer"/>
</successorset>
<successorset description = "Fix the directory">
<succ v = "Error_Email_Dir"/>
</successorset>
</successors>
<command v = "__INSERT__($createProject); __TAG__('iw_setwfarg_iw_release_id');" />
</externaltask>
<externaltask lock="f" name="Error_Email_Dir" owner="__INSERT__($ciwuser);" retry="f" start="f" description="Error on creating directory">
<areavpath v="__INSERT__($cvpath);"/>
<successors>
<successorset description = "Go to Fix Release Directory">
<succ v = "Fix_ReleaseID_Directory"/>
</successorset>
</successors>
<command v = "__INSERT__($email_DRC); -m email_body_dir_failure -N Fix_ReleaseID_Directory "/>
</externaltask>
<usertask lock="f" name="Fix_ReleaseID_Directory" owner="__INSERT__($ci_it);" retry="f" start="f" description="Fix Release ID in database">
<areavpath v="__INSERT__($cvpath);"/>
<successors>
<successorset description = "Retry Release ID Directory">
<succ v = "ReleaseID_Directory"/>
</successorset>
<successorset description = "Release ID Directory fixed">
<succ v = "Email_Release_Engineer"/>
</successorset>
<successorset description = "Exit the Workflow">
<succ v = "Done" />
</successorset>
</successors>
<variables>
<variable key = "keytask" value = "01B"/>
</variables>
</usertask>
<externaltask lock="f" name="Email_Release_Engineer" owner="__TAG__('iw_setwfarg_iw_release_agent');" retry="f" start="f" description="Time to upload files">
<areavpath v = "__INSERT__($cvpath);"/>
<successors>
<successorset description = "Files Upload">
<succ v = "Upload_Files"/>
</successorset>
</successors>
<command v = "__INSERT__($email_RE);__TAG__('iw_setwfarg_iw_release_agent'); -m email_body_release_eng -N Upload_Files"/>
</externaltask>
<usertask lock = "f" name ="Upload_Files" owner = "__TAG__('iw_setwfarg_iw_release_agent');" retry = "f" start = "f" description = "Upload files to MFT">
<areavpath v = "__INSERT__($cvpath);"/>
<successors>
<successorset description = "Files manually Uploaded to MFT">
<succ v = "Calculate_Checksum"/>
</successorset>
</successors>
<variables>
<variable key = "keytask" value = "02"/>
</variables>
</usertask>
<externaltask lock="f" name="Calculate_Checksum" owner="__INSERT__($ciwuser);" retry="f" start="f" description="Calculate CheckSum">
<areavpath v = "__INSERT__($cvpath);"/>
<successors>
<successorset description = "Email_Release_Engineer_Checksum">
<succ v = "Email_Release_Engineer_Checksum"/>
</successorset>
</successors>
<command v = "__INSERT__($calculate_checksum); __TAG__('iw_setwfarg_iw_release_id'); __INSERT__($ciwuser);"/>
<variables>
<variable key="release_id" value="__TAG__('iw_setwfarg_iw_release_id');" />
</variables>
</externaltask>
<externaltask lock="f" name="Email_Release_Engineer_Checksum" owner="__TAG__('iw_user');" retry="f" start="f" description="Email Release Engineer Checksum">
<areavpath v = "__INSERT__($cvpath);"/>
<successors>
<successorset description = "Checksum check">
<succ v = "Checksum_Check"/>
</successorset>
</successors>
<command v = "__INSERT__($email_DRC); __TAG__('iw_user'); -m email_body_checksum_ok -N Checksum_Check"/>
</externaltask>
<cgitask name="Checksum_Check" start="f" owner="__TAG__('iw_user');" description="Review file checksum" lock="f" immediate="t">
<areavpath v = "__INSERT__($cvpath);"/>
<successors>
<successorset description="Email DRC">
<succ v="Email_DRC"/>
</successorset>
<successorset description="Email RE to Re-import files">
<succ v="Email_Bad_Checksums_List"/>
</successorset>
<successorset description="Get checksum value">
<succ v="Checksum_from_bkp"/>
</successorset
</successors>
<command v="flexera_checksum_DB.cgi"/>
<variables>
<variable key = "keytask" value = "03"/>
</variables>
</cgitask>
<externaltask lock="f" name="Checksum_from_bkp" owner="__INSERT__($ciwuser);" retry="f" start="f" description="Calculate CheckSum">
<areavpath v = "__INSERT__($cvpath);"/>
<successors>
<successorset description="Email DRC">
<succ v="Email_DRC"/>
</successorset>
<successorset description="Email RE to Re-import files">
<succ v="Email_Bad_Checksums_List"/>
</successorset>
</successors>
<command v = "__INSERT__($get_checksum_bkpTS); __TAG__('iw_setwfarg_iw_release_id'); __INSERT__($ciwuser);"/>
</externaltask>
<externaltask lock="f" name="Email_DRC" owner="__INSERT__($ciwuser);" retry="f" start="f" description="Review file checksum">
<areavpath v = "__INSERT__($cvpath);"/>
<successors>
<successorset description = "System_check_status">
<succ v = "Wait_Active"/>
</successorset>
</successors>
<command v = "__INSERT__($email_DRC); -m email_body_checksum_ok_DRC -N Wait_Active"/>
</externaltask>
<externaltask lock="f" name="Email_Bad_Checksums_List" owner="__TAG__('iw_setwfarg_iw_release_agent');" retry="f" start="f " description="Email RE to Re-import files">
<areavpath v="__INSERT__($cvpath);"/>
<successors>
<successorset description = "Fix Bad File Checksum">
<succ v = "Fix_Files"/>
</successorset>
</successors>
<command v = "__INSERT__($email_RE); __TAG__('iw_setwfarg_iw_release_agent'); -m email_body_checksum_reject -N Fix_Files" />
</externaltask>
<usertask lock="f" name="Fix_Files" owner="__TAG__('iw_setwfarg_iw_release_agent');" retry="f" start="f" description="Fix Files">
<areavpath v="__INSERT__($cvpath);"/>
<successors>
<successorset description = "Ignore Errors">
<succ v = "Checksum_Check"/>
</successorset>
<successorset description = "Bad file checksum Fixed, re-import files">
<succ v = "Upload_Files"/>
</successorset>
</successors>
<variables>
<variable key = "keytask" value = "02A"/>
</variables>
</usertask>
<usertask lock="f" name="Wait_Active" owner="__INSERT__($ciwuser);" start="f" readonly="f" description="__TAG__('iw_setwfarg_iw_release_id'); is waiting until __TAG__('iw_setwfarg_RTM_Date');" >
<areavpath v="__INSERT__($cvpath);"/>
<successors>
<successorset description = "Release to Prod now">
<succ v = "Deploy_Files_Prod"/>
</successorset>
<successorset description = "End Job">
<succ v = "Clean_up_db2"/>
</successorset>
</successors>
<successorset description="Email Problem to RE">
<succ v="Email_Error_Checksum"/>
</successorset>
<timeout v="__INSERT__("$TimeToDeploy");">
</timeout>
<variables>
<variable key = "keytask" value = "04"/>
</variables>
</usertask>
<externaltask lock = "t" name = "Clean_up_db2" owner = "__INSERT__($ciwuser);" start = "f" readonly = "f" description = "Update VPC Catalog">
<areavpath v = "__INSERT__($cvpath);"/>
<successors>
<successorset description = "Cleaned up everything">
<succ v = "Done"/>
</successorset>
</successors>
<command v = "__INSERT__($temp_db_clean); __TAG__('iw_setwfarg_iw_release_id');" />
</externaltask>
<externaltask lock="f" name="Email_Error_Checksum" owner="__TAG__('iw_setwfarg_iw_release_agent');" retry="f" start="f" description="Email User On Getting Checksum Error">
<areavpath v = "__INSERT__($cvpath);"/>
<successors>
<successorset description = "Fix Bad File Checksum">
<succ v = "Fix_Files"/>
</successorset>
</successors>
<command v = "__INSERT__($email_RE); __TAG__('iw_setwfarg_iw_release_agent'); -m email_body_checksum_err -N Fix_Files"/>
</externaltask>
<externaltask lock = "f" name = "Deploy_Files_Prod" owner = "root" retry = "f" start = "f" description = "Deploy files to PROD">
<areavpath v = "__INSERT__($cvpath);"/>
<successors>
<successorset description = "Go to PRDSuccess">
<succ v = "Deploy_Files_to_Flexera_and_Akamai" />
</successorset>
</successors>
<command v = "__INSERT__($prd_deploy); __TAG__('iw_setwfarg_iw_release_id'); "/>
<variables>
<variable key = "keytask" value = "05" />
</variables>
</externaltask>
<externaltask lock = "f" name = "Deploy_Files_to_Flexera_and_Akamai" owner="root" retry = "f" start = "f" description = "Deploy files to Flexera and Akamai">
<areavpath v = "__INSERT__($cvpath);"/>
<successors>
<successorset description = "Success">
<succ v = "Call_Flexera_API" />
</successorset>
<successorset description = "Failed">
<succ v = "Flexera_Deploy_Failure"/>
</successorset>
</successors>
<command v = "__INSERT__($flexera_deploy); __TAG__('iw_setwfarg_iw_release_id'); "/>
</externaltask>
<externaltask lock="f" name="Flexera_Deploy_Failure" owner="__INSERT__($ciwuser);" retry="f" start="f" description="The deployment to Flexera has failed">
<areavpath v = "__INSERT__($cvpath);"/>
<successors>
<successorset description = "Go to Review">
<succ v = "Fix_Deployment_to_Flexera"/>
</successorset>
</successors>
<command v = "__INSERT__($email_IT); -m email_body_deploy_failure_flex -N Fix_Deployment_to_Flexera"/>
</externaltask>
<usertask lock = "f" name = "Fix_Deployment_to_Flexera" owner = "__INSERT__($ciwuser);" retry = "f" start = "f" description = "The Flexera Deployment for this workflow has failed">
<areavpath v = "__INSERT__($cvpath);"/>
<successors>
<successorset description = "ReTry Deployment">
<succ v = "Deploy_Files_to_Flexera_and_Akamai"/>
</successorset>
</successors>
</usertask>
<externaltask lock="f" name="Call_Flexera_API" owner="__INSERT__($ciwuser);" retry="f" start="f" description="Call Flexera API for Submission ID">
<areavpath v="__INSERT__($cvpath);"/>
<successors>
<successorset description = "Go to End">
<succ v = "Submit"/>
</successorset>
</successors>
<command v = "__INSERT__($flexera_api); __TAG__('iw_setwfarg_iw_release_id'); "/>
</externaltask>
<externaltask name = "Submit" owner = "__INSERT__($ciwuser);" start = "f" description = "Directory is submitied">
<areavpath v = "__INSERT__($cvpath);"/>
<successors>
<successorset description = "Job Completed">
<succ v = "Done"/>
</successorset>
<successorset description = "Submit Failed email user">
<succ v = "Done"/>
</successorset>
</successors>
<command v = "__INSERT__($submitfile); __TAG__('iw_setwfarg_iw_release_id'); "/>
<variables>
<variable key = "keytask" value = "06"/>
</variables>
</externaltask>
<endtask name = "Done" description = "Job End">
</endtask>
</workflow>
Why am I getting this error?