# Install a new application. #################################################################### # Patrick Finnegan 20/02/2007. V1. #################################################################### proc installClusterMember { propertiesFile } { global AdminConfig global AdminTask # display procedure arguments. set procName [ lindex [ info level 0 ] 0 ] putsLog "## proc - $procName" foreach i [ info args $procName ] { upvar 0 $i ilocal set propertiesArray($i) $ilocal } putsLog "procedure arguments are................." foreach { a b } [ array get propertiesArray ] { putsLog [ format "%-35s %s" "$a" "$b" ] } # get and display the existing applications. putsLog "existing Clusters are:............" if { [ catch { $AdminConfig list ServerCluster } r ] == 0 } { set ClusterList $r if { $ClusterList == {} } { putsLog "no existing clusters" } else { foreach i $ClusterList { set ClusterName [ $AdminConfig showAttribute $i name ] putsLog [ format "%-5s %s" " " $ClusterName ] } } } else { return -code error $r } # call the hashMapList proc which returns a sorted list from the Property object loaded from the properties file. putsLog "new Cluster member properties are:............" if { [ catch { hashMapList $propertiesFile } r ] == 0 } { set propertiesList $r foreach a $propertiesList { putsLog [ format "%-5s %-40s %-s" " " [ lindex $a 0 ] [ lindex $a 1 ] ] } } else { return -code error $r } # call the hashMap proc which returns a Property object populated with property file values. if { [ catch { hashMap $propertiesFile } r ] == 0 } { set PropertyI $r } else { return -code error $r } # The cluster must exist. set memberClusterName [ $PropertyI getProperty clusterMember.clusterName ] if { [ catch { $AdminConfig getid /ServerCluster:$memberClusterName/ } r ] == 0 } { if { $r == "" } { putsLog "ERROR: Cluster does not exist: $memberClusterName" return -code error $r } else { set clusterId $r } } # The node must exist. set nodeName [ $PropertyI getProperty clusterMember.nodeName ] if { [ catch { $AdminConfig getid /Node:$nodeName/ } r ] == 0 } { if { $r == "" } { putsLog "ERROR: Node does not exist: $nodeName" return -code error $r } else { set nodeId $r } } # The server template must exist. set serverName [ $PropertyI getProperty clusterMember.memberTemplate ] if { [ catch { $AdminConfig getid /Server:$serverName/ } r ] == 0 } { if { $r == "" } { putsLog "ERROR: Server Template does not exist: $serverName" return -code error $r } else { set serverId $r } } # get any existing members of the cluster. if { [ catch { $AdminConfig showAttribute $clusterId members } r ] == 0 } { if { $r == "{}" } { putsLog "no existing members" } else { putsLog "existing cluster members are........... " foreach i [ lindex $r 0 ] { putsLog [ format "%-5s %s" " " [ $AdminConfig showAttribute $i memberName ] ] } } } # The new member must not already exist. set memberName [ $PropertyI getProperty clusterMember.memberName ] if { [ catch { $AdminConfig getid /ClusterMember:$memberName/ } r ] == 0 } { if { $r != {} } { putsLog "ERROR: Cluster member already exists: $memberName" return -code error $r } } # set the cluster member properties. set attrList [ setClusterMemberProperties $PropertyI ] # get the cell parent. Assume single cell. set cellId [ $AdminConfig list Cell ] # create a new cluster member using an existing JVM as a template. puts " attrList = $attrList" if { [ catch { $AdminConfig createClusterMember $clusterId $nodeId $attrList $serverId } r ] == 0 } { putsLog "************************************" putsLog "Cluster Member created successfully: $memberName" putsLog $r putsLog "************************************" } else { putsLog "************************************" putsLog "ERROR: problem creating ClusterMember: $memberName" putsLog $r putsLog "************************************" return -code error $r } } ###################################### # set Cluster attributes. ###################################### proc setClusterMemberProperties { PropertyI } { global AdminConfig set procName [ lindex [ info level 0 ] 0 ] putsLog "## proc - $procName" foreach i [ info args $procName ] { upvar 0 $i ilocal set propertiesArray($i) $ilocal } putsLog "procedure arguments are................." foreach { a b } [ array get propertiesArray ] { putsLog [ format "%-35s %s" "$a" "$b" ] } set memberName [ list memberName [ $PropertyI getProperty clusterMember.memberName ] ] set weight [ list weight [ $PropertyI getProperty clusterMember.weight ] ] set attrList [ list $memberName $weight ] return $attrList }