diff --git a/OracleDatabase/RAC/OracleDNSServer/containerfiles/buildContainerImage.sh b/OracleDatabase/RAC/OracleDNSServer/containerfiles/buildContainerImage.sh index 488eb05028..456a5c12a3 100755 --- a/OracleDatabase/RAC/OracleDNSServer/containerfiles/buildContainerImage.sh +++ b/OracleDatabase/RAC/OracleDNSServer/containerfiles/buildContainerImage.sh @@ -1,8 +1,10 @@ #!/bin/bash # -# Since: November, 2018 +############################# +# Copyright (c) 2025, Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl # Author: paramdeep.saini@oracle.com -# Description: Build script for building DNS server container image +############################ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. # @@ -17,7 +19,7 @@ It builds a container image for a DNS server Parameters: -v: version to build - Choose one of: $(for i in */; do echo -n "${i%%/} "; done) + Choose one of: $(printf "%s " */ | sed 's#/##g') -o: passes on container build option LICENSE UPL 1.0 @@ -28,23 +30,28 @@ EOF exit 0 } -# Validate packages + checksumPackages() { - if hash md5sum 2>/dev/null; then + if [ "$SKIPMD5" -eq 1 ]; then + echo "Skipping MD5 checksum verification." + return 0 + fi + + if command -v md5sum >/dev/null 2>&1; then echo "Checking if required packages are present and valid..." md5sum -c Checksum - md5_exit_code=$? - - if [ "$md5_exit_code" -ne 0 ]; then - echo "MD5 for required packages to build this image did not match!" - echo "Make sure to download missing files in folder $VERSION." - exit "$md5_exit_code" + rc=$? + if [ "$rc" -ne 0 ]; then + echo "MD5 for required packages to build this image did not match!" + echo "Make sure to download missing files in folder $VERSION." + exit "$rc" fi else echo "Ignored MD5 sum, 'md5sum' command not available." fi } + ############## #### MAIN #### ############## @@ -55,27 +62,30 @@ fi # Parameters VERSION="latest" -DOCKEROPS=("${DOCKEROPS[@]}") -PROXY_SETTINGS=("${PROXY_SETTINGS[@]}") +SKIPMD5=0 +DOCKEROPS="" -while getopts "h:v:o:" optname; do +while getopts "hiv:o:" optname; do case "$optname" in "h") usage ;; + "i") + SKIPMD5=1 + ;; "v") VERSION="$OPTARG" ;; "o") - DOCKEROPS=("$OPTARG") + DOCKEROPS="$OPTARG" ;; "?") - usage + usage; # shellcheck disable=SC2317 - exit 1 + exit 1; ;; *) - # Should not occur + # Should not occur echo "Unknown error while processing options inside buildDockerImage.sh" ;; esac @@ -87,30 +97,30 @@ IMAGE_NAME="oracle/rac-dnsserver:$VERSION" # Go into version folder cd "$VERSION" || exit - echo "==========================" echo "DOCKER info:" docker info echo "==========================" # Proxy settings -if [ -n "${http_proxy-}" ]; then - PROXY_SETTINGS+=("--build-arg http_proxy=${http_proxy}") +PROXY_SETTINGS="" +if [ "${http_proxy}" != "" ]; then + PROXY_SETTINGS="$PROXY_SETTINGS --build-arg http_proxy=${http_proxy}" fi -if [ -n "${https_proxy-}" ]; then - PROXY_SETTINGS+=("--build-arg https_proxy=${https_proxy}") +if [ "${https_proxy}" != "" ]; then + PROXY_SETTINGS="$PROXY_SETTINGS --build-arg https_proxy=${https_proxy}" fi -if [ -n "${ftp_proxy-}" ]; then - PROXY_SETTINGS+=("--build-arg ftp_proxy=${ftp_proxy}") +if [ "${ftp_proxy}" != "" ]; then + PROXY_SETTINGS="$PROXY_SETTINGS --build-arg ftp_proxy=${ftp_proxy}" fi -if [ -n "${no_proxy-}" ]; then - PROXY_SETTINGS+=("--build-arg no_proxy=${no_proxy}") +if [ "${no_proxy}" != "" ]; then + PROXY_SETTINGS="$PROXY_SETTINGS --build-arg no_proxy=${no_proxy}" fi -# shellcheck disable=SC2128 -if [ -n "$PROXY_SETTINGS" ]; then + +if [ "$PROXY_SETTINGS" != "" ]; then echo "Proxy settings were found and will be used during the build." fi @@ -120,20 +130,24 @@ fi echo "Building image '$IMAGE_NAME' ..." # BUILD THE IMAGE (replace all environment variables) -BUILD_START=$(date '+%s') -if docker build --force-rm=true --no-cache=true "${DOCKEROPS[@]}" "${PROXY_SETTINGS[@]}" -t "$IMAGE_NAME" -f Containerfile .; then - BUILD_END=$(date '+%s') - BUILD_ELAPSED=$((BUILD_END - BUILD_START)) - - cat << EOF - Oracle Database Docker Image for Real Application Clusters (RAC) version $VERSION is ready to be extended: - - --> $IMAGE_NAME +BUILD_START=$(date +%s) - Build completed in $BUILD_ELAPSED seconds. - -EOF -else +if ! docker build --force-rm=true --no-cache=true \ + $DOCKEROPS $PROXY_SETTINGS \ + -t "$IMAGE_NAME" -f Containerfile .; then echo "There was an error building the image." exit 1 -fi \ No newline at end of file +fi + +BUILD_END=$(date +%s) +BUILD_ELAPSED=$((BUILD_END - BUILD_START)) + +cat << EOF + + Oracle Database Docker Image for Real Application Clusters (RAC) version $VERSION is ready to be extended: + + --> $IMAGE_NAME + + Build completed in $BUILD_ELAPSED seconds. + +EOF \ No newline at end of file diff --git a/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/19.3.0/license.txt b/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/19.3.0/license.txt new file mode 100644 index 0000000000..c9d462125b --- /dev/null +++ b/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/19.3.0/license.txt @@ -0,0 +1 @@ +Oracle Licensing for this image is governed by the License Agreement, which must be accepted on the Oracle Container Registry (https://container-registry.oracle.com/ ). \ No newline at end of file diff --git a/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/oracommon.py b/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/oracommon.py index 0034798b11..c45161e17b 100755 --- a/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/oracommon.py +++ b/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/oracommon.py @@ -1604,7 +1604,10 @@ def get_sw_cmd(self, key, rspfile, node, netmasklist): if int(version) == 19: distid_env = "export CV_ASSUME_DISTID=OL8; " if self.check_key("CRS_GPC", self.ora_env_dict): - cmd = f'''su - {giuser} -c "{distid_env}{gihome}/{runCmd} -waitforcompletion {copyflag} -silent -responseFile {rspfile} {pwdparam} {prereq} {prereqfailure}"''' + if int(version) <= 21: + cmd = f'''su - {giuser} -c "{distid_env}{gihome}/{runCmd} -waitforcompletion {copyflag} -silent -responseFile {rspfile} {prereq} {prereqfailure}"''' + else: + cmd = f'''su - {giuser} -c "{distid_env}{gihome}/{runCmd} -waitforcompletion {copyflag} -silent -responseFile {rspfile} {pwdparam} {prereq} {prereqfailure}"''' else: param1 = f'''oracle.install.crs.config.netmaskList={netmasklist}''' if netmasklist else \ '''oracle.install.crs.config.netmaskList=eth0:255.255.0.0,eth1:255.255.255.0,eth2:255.255.255.0''' diff --git a/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/oragiprov.py b/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/oragiprov.py index 70dbe6ddaa..2042285c06 100755 --- a/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/oragiprov.py +++ b/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/oragiprov.py @@ -382,59 +382,50 @@ def prepare_responsefile(self): asmstr, disksWithFGNames, oraversion, gridrsp, netmasklist, clusterusage ) - def get_responsefile(self, obase, invloc, scanname, scanport, clutype, cluname, clunodes, nwiface, gimrflag, passwd, dgname, dgred, fgname, asmdisk, asmstr, disksWithFGNames, oraversion, gridrsp, netmasklist, crsconfig): - """ - This function prepares the response file if no response file is passed. - """ - self.ocommon.log_info_message("I am in get_responsefile", self.file_name) - - rspdata = ''' - oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v{15} - oracle.install.option={19} - ORACLE_BASE={0} - INVENTORY_LOCATION={1} - oracle.install.asm.OSDBA=asmdba - oracle.install.asm.OSOPER=asmoper - oracle.install.asm.OSASM=asmadmin - oracle.install.crs.config.gpnp.scanName={2} - oracle.install.crs.config.gpnp.scanPort={3} - oracle.install.crs.config.clusterName={5} - oracle.install.crs.config.clusterNodes={6} - oracle.install.crs.config.networkInterfaceList={7} - oracle.install.crs.configureGIMR={8} - oracle.install.asm.SYSASMPassword= - oracle.install.asm.monitorPassword= - oracle.install.crs.config.storageOption= - oracle.install.asm.diskGroup.name={10} - oracle.install.asm.diskGroup.redundancy={11} - oracle.install.asm.diskGroup.AUSize=4 - oracle.install.asm.diskGroup.disksWithFailureGroupNames={18} - oracle.install.asm.diskGroup.disks={13} - oracle.install.asm.diskGroup.quorumFailureGroupNames= - oracle.install.asm.diskGroup.diskDiscoveryString={14} - oracle.install.crs.rootconfig.configMethod=ROOT - oracle.install.asm.configureAFD=false - oracle.install.crs.rootconfig.executeRootScript=false - oracle.install.crs.config.ignoreDownNodes=false - oracle.install.config.managementOption=NONE - oracle.install.crs.configureRHPS={16} - oracle.install.crs.config.ClusterConfiguration={17} - '''.format( - obase, invloc, scanname, scanport, clutype, cluname, clunodes, - nwiface, gimrflag, passwd, dgname, dgred, fgname, asmdisk, asmstr, - oraversion, "false", "STANDALONE", disksWithFGNames, crsconfig - ) - - self.ocommon.write_file(gridrsp, rspdata) - if os.path.isfile(gridrsp): - return gridrsp, netmasklist - else: - self.ocommon.log_error_message( - "Grid response file does not exist at its location: " + gridrsp + ". Exiting..", - self.file_name - ) - self.ocommon.prog_exit("127") - + def get_responsefile(self,obase,invloc,scanname,scanport,clutype,cluname,clunodes,nwiface,gimrflag,passwd,dgname,dgred,fgname,asmdisk,asmstr,disksWithFGNames,oraversion,gridrsp,netmasklist,crsconfig): + """ + This function prepare the response file if no response file passed + """ + self.ocommon.log_info_message("I am in get_responsefile", self.file_name) + rspdata=''' + oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v{15} + oracle.install.option={19} + ORACLE_BASE={0} + INVENTORY_LOCATION={1} + oracle.install.asm.OSDBA=asmdba + oracle.install.asm.OSOPER=asmoper + oracle.install.asm.OSASM=asmadmin + oracle.install.crs.config.gpnp.scanName={2} + oracle.install.crs.config.gpnp.scanPort={3} + oracle.install.crs.config.clusterName={5} + oracle.install.crs.config.clusterNodes={6} + oracle.install.crs.config.networkInterfaceList={7} + oracle.install.crs.configureGIMR={8} + oracle.install.asm.SYSASMPassword={9} + oracle.install.asm.monitorPassword={9} + oracle.install.crs.config.storageOption= + oracle.install.asm.diskGroup.name={10} + oracle.install.asm.diskGroup.redundancy={11} + oracle.install.asm.diskGroup.AUSize=4 + oracle.install.asm.diskGroup.disksWithFailureGroupNames={18} + oracle.install.asm.diskGroup.disks={13} + oracle.install.asm.diskGroup.quorumFailureGroupNames= + oracle.install.asm.diskGroup.diskDiscoveryString={14} + oracle.install.crs.rootconfig.configMethod=ROOT + oracle.install.asm.configureAFD=false + oracle.install.crs.rootconfig.executeRootScript=false + oracle.install.crs.config.ignoreDownNodes=false + oracle.install.config.managementOption=NONE + oracle.install.crs.configureRHPS={16} + oracle.install.crs.config.ClusterConfiguration={17} + '''.format(obase,invloc,scanname,scanport,clutype,cluname,clunodes,nwiface,gimrflag,passwd,dgname,dgred,fgname,asmdisk,asmstr,oraversion,"false","STANDALONE",disksWithFGNames,crsconfig) +# fdata="\n".join([s for s in rspdata.split("\n") if s]) + self.ocommon.write_file(gridrsp,rspdata) + if os.path.isfile(gridrsp): + return gridrsp,netmasklist + else: + self.ocommon.log_error_message("Grid response file does not exist at its location: " + gridrsp + ".Exiting..",self.file_name) + self.ocommon.prog_exit("127") def get_23c_responsefile(self,obase,invloc,scanname,scanport,clutype,cluname,clunodes,nwiface,gimrflag,passwd,dgname,dgred,fgname,asmdisk,asmstr,disksWithFGNames,oraversion,gridrsp,netmasklist,clusterusage): """ diff --git a/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/oramiscops.py b/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/oramiscops.py index 0b868f0609..21920feba6 100755 --- a/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/oramiscops.py +++ b/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/oramiscops.py @@ -333,31 +333,39 @@ def checkpdbconnstr(self): print(status) def checkdbrole(self): - """ - This will verify RAC DB Role - """ - status="" - mode="" - dbuser,dbhome,dbase,oinv=self.ocommon.get_db_params() - #retcode1=self.ocvu.check_home(None,dbhome,dbuser) - retcode1=0 - if retcode1 != 0: - status="RAC_NOT_INSTALLED_OR_CONFIGURED" - else: - mode=self.checkracsvc() - if (mode == "OPEN") or ( mode == "MOUNT"): - osuser,dbhome,dbbase,oinv=self.ocommon.get_db_params() - osid=self.ora_env_dict["DB_NAME"] if self.ocommon.check_key("DB_NAME",self.ora_env_dict) else "ORCLCDB" - scanname = self.get_scan_name() - scanport=self.ora_env_dict["SCAN_PORT"] if self.ocommon.check_key("SCAN_PORT",self.ora_env_dict) else "1521" - connect_str=self.ocommon.get_sqlplus_str(dbhome,osid,osuser,"sys",None,scanname,scanport,osid,None,None,None) - status=self.ocommon.get_db_role(osuser,dbhome,osid,connect_str) - else: - status="NOTAVAILABLE" + """ + Verify RAC DB Role + """ + status = "" + mode = "" + + dbuser, dbhome, dbase, oinv = self.ocommon.get_db_params() + retcode1 = 0 # RAC check disabled for now + + if retcode1 != 0: + status = "RAC_NOT_INSTALLED_OR_CONFIGURED" + else: + mode = self.checkracsvc() + if mode in ("OPEN", "MOUNT"): + osuser, dbhome, dbbase, oinv = self.ocommon.get_db_params() + dbname = self.ora_env_dict["DB_NAME"] if self.ocommon.check_key("DB_NAME", self.ora_env_dict) else "ORCLCDB" + hostname = self.ocommon.get_public_hostname() + osid = self.ocommon.get_inst_sid(osuser, dbhome, dbname, hostname) + if not osid: + osid = dbname + "1" + scanname = self.get_scan_name() + scanport = self.ora_env_dict["SCAN_PORT"] if self.ocommon.check_key("SCAN_PORT", self.ora_env_dict) else "1521" + connect_str = self.ocommon.get_sqlplus_str( + dbhome, osid, osuser, "sys", None, scanname, scanport, dbname, None, None, None + ) + status = self.ocommon.get_db_role(osuser, dbhome, osid, connect_str) + else: + status = "NOTAVAILABLE" + + msg = f"Database role set to {status}" + self.ocommon.log_info_message(msg, self.file_name) + print(status) - msg='''Database role set to {0}'''.format(status) - self.ocommon.log_info_message(msg,self.file_name) - print(status) def getconnectstr(self): """ @@ -395,26 +403,31 @@ def getpdbconnectstr(self): return connect_str def checkracsvc(self): - """ - Check the RAC SVC - """ - mode="" - osuser,dbhome,dbbase,oinv=self.ocommon.get_db_params() - osid=self.ora_env_dict["DB_NAME"] if self.ocommon.check_key("DB_NAME",self.ora_env_dict) else "ORCLCDB" - scanname = self.get_scan_name() - scanport=self.ora_env_dict["SCAN_PORT"] if self.ocommon.check_key("SCAN_PORT",self.ora_env_dict) else "1521" - connect_str=self.ocommon.get_sqlplus_str(dbhome,osid,osuser,"sys",None,scanname,scanport,osid,None,None,None) - status=self.ocommon.get_dbinst_status(osuser,dbhome,osid,connect_str) - if self.ocommon.check_substr_match(status,"OPEN"): - mode="OPEN" - elif self.ocommon.check_substr_match(status,"MOUNT"): - mode="MOUNT" - elif self.ocommon.check_substr_match(status,"NOMOUNT"): - mode="NOMOUNT" - else: - mode="NOTAVAILABLE" - - return mode + """ + Check the RAC SVC + """ + mode = "" + osuser, dbhome, dbbase, oinv = self.ocommon.get_db_params() + dbname = self.ora_env_dict["DB_NAME"] if self.ocommon.check_key("DB_NAME", self.ora_env_dict) else "ORCLCDB" + hostname = self.ocommon.get_public_hostname() + osid = self.ocommon.get_inst_sid(osuser, dbhome, dbname, hostname) + if not osid: + osid = dbname + "1" + scanname = self.get_scan_name() + scanport = self.ora_env_dict["SCAN_PORT"] if self.ocommon.check_key("SCAN_PORT", self.ora_env_dict) else "1521" + connect_str = self.ocommon.get_sqlplus_str( + dbhome, osid, osuser, "sys", None, scanname, scanport, dbname, None, None, None + ) + status = self.ocommon.get_dbinst_status(osuser, dbhome, osid, connect_str) + if self.ocommon.check_substr_match(status, "OPEN"): + mode = "OPEN" + elif self.ocommon.check_substr_match(status, "MOUNT"): + mode = "MOUNT" + elif self.ocommon.check_substr_match(status, "NOMOUNT"): + mode = "NOMOUNT" + else: + mode = "NOTAVAILABLE" + return mode def checkraclocal(self): """ @@ -423,7 +436,8 @@ def checkraclocal(self): status="" mode="" dbuser,dbhome,dbase,oinv=self.ocommon.get_db_params() - retcode1=self.ocvu.check_home(None,dbhome,dbuser) + node=self.ocommon.get_public_hostname() + retcode1=self.ocvu.check_home(node,dbhome,dbuser) retcode1=0 if retcode1 != 0: status="RAC_NOT_INSTALLED_OR_CONFIGURED" diff --git a/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/orasetupenv.py b/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/orasetupenv.py index e069857b7e..877b8940a9 100755 --- a/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/orasetupenv.py +++ b/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/orasetupenv.py @@ -100,6 +100,7 @@ def setup(self): self.ocommon.log_info_message("Running comment_out_swap_space()",self.file_name) self.comment_out_swap_space() self.ocommon.log_info_message("Ended comment_out_swap_space()",self.file_name) + self.create_ssh_keypair() self.setup_ssh_for_k8s() self.set_banner() @@ -693,7 +694,34 @@ def setup_ssh_for_k8s(self): else: if self.ocommon.detect_k8s_env(): self.ocommon.log_error_message("SSH_PRIVATE_KEY and SSH_PUBLIC_KEY is ot set in K8s env. Exiting..",self.file_name) - self.ocommon.prog_exit("127") + self.ocommon.prog_exit("127") + + def create_ssh_keypair(self): + """ + Generate SSH key pair only if they are not present. + Set their paths in self.ora_env_dict as SSH_PRIVATE_KEY and SSH_PUBLIC_KEY. + """ + privkey_path = "/tmp/id_rsa" + pubkey_path = "/tmp/id_rsa.pub" + if self.ocommon.check_key("CRS_GPC", self.ora_env_dict): # only for oracle restart + # Check if already set + if not self.ocommon.check_key("SSH_PRIVATE_KEY", self.ora_env_dict) or \ + not self.ocommon.check_key("SSH_PUBLIC_KEY", self.ora_env_dict) or \ + not (os.path.exists(privkey_path) and os.path.exists(pubkey_path)): + if not (os.path.exists(privkey_path) and os.path.exists(pubkey_path)): + cmd = [ + "ssh-keygen", "-t", "rsa", "-b", "4096", + "-f", privkey_path, "-N", "" + ] + subprocess.run(cmd, check=True) + os.chmod(privkey_path, 0o600) + os.chmod(pubkey_path, 0o644) + # Set environment dictionary values (add/remove as per your ocommon.add_key implementation) + self.ora_env_dict = self.ocommon.add_key("SSH_PRIVATE_KEY", privkey_path, self.ora_env_dict) + self.ora_env_dict = self.ocommon.add_key("SSH_PUBLIC_KEY", pubkey_path, self.ora_env_dict) + # Optionally set environment variables too + os.environ["SSH_PRIVATE_KEY"] = privkey_path + os.environ["SSH_PUBLIC_KEY"] = pubkey_path ###### Install CRS Software on node ###### def crs_sw_install(self): """ diff --git a/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/orasshsetup.py b/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/orasshsetup.py index 151de76e2a..36a69cad7b 100755 --- a/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/orasshsetup.py +++ b/OracleDatabase/RAC/OracleRealApplicationClusters/containerfiles/scripts/orasshsetup.py @@ -124,8 +124,8 @@ def setupssh(self, user, ohome, ctype): else: self.performsshsetup( user, gihome, sshscr, cluster_nodes, version, password, i, expect, script_dir) - retcode = self.verifyssh(user, gihome, sshscr, cluster_nodes.replace(",", " "), version) - + retcode = self.verifyssh( + user, gihome, sshscr, cluster_nodes, version) if retcode == 0: break else: @@ -155,8 +155,8 @@ def setupssh(self, user, ohome, ctype): keyscan_output, keyscan_error, keyscan_retcode, False) self.performsshsetup( user, gihome, sshscr, new_nodes, version, password, i, expect, script_dir) - retcode = self.verifyssh(user, gihome, sshscr, new_nodes.replace(",", " "), version) - + retcode = self.verifyssh( + user, gihome, sshscr, new_nodes, version) if retcode == 0: break else: @@ -174,7 +174,7 @@ def verifyssh(self, user, gihome, sshscr, cls_nodes, version): "Verifying SSH between nodes " + cls_nodes, self.file_name) retcode1 = 0 if int(version) == 19 or int(version) == 21: - nodes_list = cls_nodes.replace(",", " ").split() + nodes_list = cls_nodes.split(" ") for node in nodes_list: cmd = '''su - {0} -c "ssh -o BatchMode=yes -o ConnectTimeout=5 {0}@{1} echo ok 2>&1"'''.format( user, node) @@ -321,8 +321,7 @@ def setupsshusekey(self, user, ohome, ctype): time.sleep(5) i = i+1 - retcode = self.verifyssh(user, gihome, sshscr, cluster_nodes.replace(",", " "), version) - + retcode = self.verifyssh(user, gihome, sshscr, new_nodes, version) def setupsshdirs(self, user, ohome, ctype): """