in jenkins-pipeline-shared-libraries/vars/util.groovy [488:519]
def withKerberos(String keytabId, Closure closure, String domain = 'REDHAT.COM', int nRetries = 5) {
withCredentials([file(credentialsId: keytabId, variable: 'KEYTAB_FILE')]) {
env.KERBEROS_PRINCIPAL = sh(returnStdout: true, script: "klist -kt $KEYTAB_FILE |grep $domain | awk -F' ' 'NR==1{print \$4}' ").trim()
if (!env.KERBEROS_PRINCIPAL?.trim()) {
throw new Exception("[ERROR] found blank KERBEROS_PRINCIPAL, kerberos authetication failed.")
}
// check if kerberos authentication already exists with provided principal
def currentPrincipal = sh(returnStdout: true, script: "klist | grep -i 'Default principal' | awk -F':' 'NR==1{print \$2}' ").trim()
if (currentPrincipal != env.KERBEROS_PRINCIPAL) {
def kerberosStatus = 0
for (int i = 0; i < nRetries; i++) {
kerberosStatus = sh(returnStatus: true, script: "kinit ${env.KERBEROS_PRINCIPAL} -kt $KEYTAB_FILE")
if (kerberosStatus == 0) {
// exit at first success
break
}
}
// if the kerberos status is still != 0 after nRetries throw exception
if (kerberosStatus != 0) {
throw new Exception("[ERROR] kinit failed with non-zero status.")
}
} else {
println "[INFO] ${env.KERBEROS_PRINCIPAL} already authenticated, skipping kinit."
}
closure()
}
}