|  |  | 
|  | /** | 
|  | *  Test salt models pipeline | 
|  | *  DEFAULT_GIT_REF | 
|  | *  DEFAULT_GIT_URL | 
|  | *  CREDENTIALS_ID | 
|  | *  CLUSTER_NAME | 
|  | *  NODE_TARGET | 
|  | *  SYSTEM_GIT_URL | 
|  | *  SYSTEM_GIT_REF | 
|  | *  DISTRIB_REVISION of apt mirrror to be used (http://mirror.mirantis.com/DISTRIB_REVISION/ by default) | 
|  | *  MAX_CPU_PER_JOB | 
|  | *  LEGACY_TEST_MODE | 
|  | *  RECLASS_IGNORE_CLASS_NOTFOUND | 
|  | *  APT_REPOSITORY | 
|  | *  APT_REPOSITORY_GPG | 
|  | */ | 
|  |  | 
|  | def common = new com.mirantis.mk.Common() | 
|  | def gerrit = new com.mirantis.mk.Gerrit() | 
|  | def git = new com.mirantis.mk.Git() | 
|  | def ssh = new com.mirantis.mk.Ssh() | 
|  | def saltModelTesting = new com.mirantis.mk.SaltModelTesting() | 
|  |  | 
|  | def defaultGitRef = env.DEFAULT_GIT_REF ?: null | 
|  | def defaultGitUrl = env.DEFAULT_GIT_URL ?: null | 
|  |  | 
|  | def distribRevision = env.DISTRIB_REVISION ?: 'nightly' | 
|  | def checkouted = false | 
|  |  | 
|  | def nodeLabel = 'old16.04' | 
|  |  | 
|  | throttle(['test-model']) { | 
|  | timeout(time: 1, unit: 'HOURS') { | 
|  | node(nodeLabel) { | 
|  | try{ | 
|  | stage("checkout") { | 
|  | if(defaultGitRef != "" && defaultGitUrl != "") { | 
|  | checkouted = gerrit.gerritPatchsetCheckout(defaultGitUrl, defaultGitRef, "HEAD", CREDENTIALS_ID) | 
|  | } else { | 
|  | throw new Exception("Cannot checkout gerrit patchset, DEFAULT_GIT_URL or DEFAULT_GIT_REF is null") | 
|  | } | 
|  | if(checkouted) { | 
|  | if (fileExists('classes/system')) { | 
|  | if (SYSTEM_GIT_URL == "") { | 
|  | ssh.prepareSshAgentKey(CREDENTIALS_ID) | 
|  | dir('classes/system') { | 
|  | remoteUrl = git.getGitRemote() | 
|  | ssh.ensureKnownHosts(remoteUrl) | 
|  | } | 
|  | ssh.agentSh("git submodule init; git submodule sync; git submodule update --recursive") | 
|  | } else { | 
|  | dir('classes/system') { | 
|  | if (!gerrit.gerritPatchsetCheckout(SYSTEM_GIT_URL, SYSTEM_GIT_REF, "HEAD", CREDENTIALS_ID)) { | 
|  | common.errorMsg("Failed to obtain system reclass with url: ${SYSTEM_GIT_URL} and ${SYSTEM_GIT_REF}") | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | stage("test node") { | 
|  | if (checkouted) { | 
|  | def workspace = common.getWorkspace() | 
|  | common.infoMsg("Running salt model test for node ${NODE_TARGET} in cluster ${CLUSTER_NAME}") | 
|  |  | 
|  | def DockerCName = "${env.JOB_NAME.toLowerCase()}_${env.BUILD_TAG.toLowerCase()}" | 
|  | def config = [ | 
|  | 'dockerHostname': NODE_TARGET, | 
|  | 'clusterName': CLUSTER_NAME, | 
|  | 'reclassEnv': workspace, | 
|  | 'distribRevision': distribRevision, | 
|  | 'dockerMaxCpus': MAX_CPU_PER_JOB.toInteger(), | 
|  | 'ignoreClassNotfound': RECLASS_IGNORE_CLASS_NOTFOUND, | 
|  | 'aptRepoUrl': APT_REPOSITORY, | 
|  | 'aptRepoGPG': APT_REPOSITORY_GPG, | 
|  | 'dockerContainerName': DockerCName, | 
|  | 'testContext': 'salt-model-node' | 
|  | ] | 
|  | saltModelTesting.testNode(config) | 
|  | } | 
|  | } | 
|  | } catch (Throwable e) { | 
|  | // If there was an error or exception thrown, the build failed | 
|  | currentBuild.result = "FAILURE" | 
|  | currentBuild.description = currentBuild.description ? e.message + " " + currentBuild.description : e.message | 
|  | throw e | 
|  | } | 
|  | } | 
|  | } | 
|  | } |