blob: 43db8995a8f26fe09949ed5bf4f51ed08d83244a [file] [log] [blame]
Richard Felkl14258e22018-06-28 12:42:34 +02001/**
2 *
3 * Test Drivetrain pipeline
4 *
5 * Expected parameters:
6 * COOKIECUTTER_TEMPLATE_CONTEXT Template context for CookieCutter
7 * SOURCE_MCP_VERSION MCP version to start with
8 * TARGET_MCP_VERSION MCP version to upgrade to
9 * FUNC_TEST_SETTINGS Settings for functional tests
10 */
11
12
13common = new com.mirantis.mk.Common()
14salt = new com.mirantis.mk.Salt()
15test = new com.mirantis.mk.Test()
16python = new com.mirantis.mk.Python()
17
18pepperEnv = "pepperEnv"
19
20def setupPepperVirtualenv(path, url, creds) {
21 requirements = ['salt-pepper>=0.5.2,<0.5.4']
22 python.setupVirtualenv(path, 'python2', requirements, null, true, true)
23 rcFile = "${path}/pepperrc"
24 rc = """\
25[main]
26SALTAPI_EAUTH=pam
27SALTAPI_URL=${url}
28SALTAPI_USER=${creds.username}
29SALTAPI_PASS=${creds.password}
30"""
31 writeFile file: rcFile, text: rc
32 return rcFile
33}
34
35def runJobOnJenkins(jenkinsUrl, userName, password, jobName, parameters){
36 def jenkinsDownCmd = "curl -OL ${jenkinsUrl}/jnlpJars/jenkins-cli.jar --output ./jenkins-cli.jar"
37 def runJobFromSaltMasterCmd = "java -jar jenkins-cli.jar -s ${jenkinsUrl} -noKeyAuth -auth admin:${password} build ${jobName} ${parameters} -s | grep -E 'SUCCESS|UNSTABLE'"
38 salt.cmdRun(pepperEnv, "I@salt:master", jenkinsDownCmd)
39 salt.cmdRun(pepperEnv, "I@salt:master", runJobFromSaltMasterCmd)
40}
41
42timeout(time: 12, unit: 'HOURS') {
43 node("python") {
44 try {
45 def mcpEnvJob
46 def saltReturn
47 def saltCreds = [:]
48
49 stage('Trigger deploy job') {
Richard Felkle3b9e972018-07-16 16:34:32 +020050 mcpEnvJob = build(job: "create-mcp-env", parameters: [
Richard Felkl14258e22018-06-28 12:42:34 +020051 [$class: 'StringParameterValue', name: 'OS_AZ', value: 'mcp-mk'],
Richard Felkl26a3cbc2018-07-16 16:51:01 +020052 [$class: 'StringParameterValue', name: 'OS_PROJECT_NAME', value: 'mcp-mk'],
Richard Felkl14258e22018-06-28 12:42:34 +020053 [$class: 'StringParameterValue', name: 'STACK_NAME', value: 'jenkins-drivetrain-test-' + currentBuild.number],
54 [$class: 'StringParameterValue', name: 'STACK_INSTALL', value: 'core,kvm,cicd'],
55 [$class: 'BooleanParameterValue', name: 'STACK_FULL', value: true],
56 [$class: 'BooleanParameterValue', name: 'RUN_TESTS', value: false],
57 [$class: 'TextParameterValue', name: 'COOKIECUTTER_TEMPLATE_CONTEXT', value: COOKIECUTTER_TEMPLATE_CONTEXT]
58 ])
59 }
60
61 def mcpEnvJobDesc = mcpEnvJob.getDescription().tokenize(" ")
62 def mcpEnvJobIP = mcpEnvJobDesc[2]
63 def saltMasterUrl = "http://${mcpEnvJobIP}:6969"
64 def script = "println(com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(com.cloudbees.plugins.credentials.common.StandardUsernamePasswordCredentials.class,jenkins.model.Jenkins.instance).findAll {cred -> cred.id == 'salt'}[0].password)"
65 def saltPasswd = sh(returnStdout: true, script: "curl -d \"script=${script}\" --user admin:r00tme http://${mcpEnvJobIP}:8081/scriptText")
66 saltPasswd = saltPasswd.trim()
67 saltCreds.put("username", "salt")
68 saltCreds.put("password", saltPasswd)
69 setupPepperVirtualenv(pepperEnv, saltMasterUrl, saltCreds)
70 saltReturn = salt.getPillar(pepperEnv, 'I@jenkins:client and not I@salt:master', '_param:openldap_admin_password')
71 def stackCicdPassword = saltReturn.get("return")[0].values()[0]
72 saltReturn = salt.getPillar(pepperEnv, 'I@jenkins:client and not I@salt:master', 'jenkins:client:master:host')
73 def stackCicdAddr = saltReturn.get("return")[0].values()[0]
74 def jenkinsUrl = "http://${stackCicdAddr}:8081"
75
76 stage('Run CVP before upgrade') {
77 runJobOnJenkins(jenkinsUrl, "admin", stackCicdPassword, "cvp-sanity", "[{'name':'SANITY_TESTS_SET', 'value':'test_drivetrain.py'},{'name':'SANITY_TESTS_SETTINGS', 'value':'drivetrain_version=\"${SOURCE_MCP_VERSION}\"'}]")
78 //runJobOnJenkins(jenkinsUrl, "admin", stackCicdPassword, "cvp-dt-func", "[{'name':'SETTINGS', 'value':'${FUNC_TEST_SETTINGS}'}]")
79 }
80
81 stage('Run Upgrade on DriveTrain') {
82 runJobOnJenkins(jenkinsUrl, "admin", stackCicdPassword, "upgrade-mcp-release", "[{'name':'MCP_VERSION', 'value':'${TARGET_MCP_VERSION}'}]")
83 }
84
85 stage('Run CVP after upgrade') {
86 runJobOnJenkins(jenkinsUrl, "admin", stackCicdPassword, "cvp-sanity", "[{'name':'SANITY_TESTS_SET', 'value':'test_drivetrain.py'},{'name':'SANITY_TESTS_SETTINGS', 'value':'drivetrain_version=\"${TARGET_MCP_VERSION}\"'}]")
87 //runJobOnJenkins(jenkinsUrl, "admin", stackCicdPassword, "cvp-dt-func", "[{'name':'SETTINGS', 'value':'${FUNC_TEST_SETTINGS}'}]")
88 }
89
90 } catch (Throwable e) {
91 currentBuild.result = 'FAILURE'
92 throw e
93 }
94 }
95}