blob: 3f1d02ad54c5e6f1eb07564790d7c19956bdb309 [file] [log] [blame]
- job-template:
project-type: pipeline
description: '{job-description}'
concurrent: true
disabled: false
sandbox: true
triggers:
- timed: H(40-59) 0 * * 1-5
dsl: |-
/**
*
* Deploy the product cluster using Jenkins master on CICD cluster
*
* Expected parameters:
* STACKS List of deployments from 'all physical' view in the Jenkins
They should be separated by newline
* PARENT_NODE_NAME
* OS_AUTH_URL OpenStack keystone catalog URL
* OS_PROJECT_NAME OpenStack project (tenant) name
* OS_CREDENTIALS OpenStack username and password credentials ID in Jenkins
* TCP_QA_REFS Reference to the tcp-qa change on Gerrit, like refs/changes/46/418546/41
*/
@Library('tcp-qa')_
common = new com.mirantis.mk.Common()
shared = new com.mirantis.system_qa.SharedPipeline()
import jenkins.model.*
def stacks = env.STACKS.readLines()
def get_last_build_time(job_name) {{
def job = Hudson.instance.getJob(job_name)
def last_build = Jenkins.instance.getItemByFullName(job.fullName).getLastBuild()
if (last_build == null) {{
return null
}}
def upStreamBuild = Jenkins.getInstance().getItemByFullName(job.fullName).getBuildByNumber(last_build.getNumber())
return upStreamBuild.getTime()
}}
@NonCPS
def oldest_job(map) {{
println map.sort({{a, b -> a.value <=> b.value}})*.value
return map.sort({{a, b -> a.value <=> b.value}})*.key[0]
}}
// ============================================================================
timeout(time: 15, unit: 'HOURS') {{
node (env.PARENT_NODE_NAME) {{
stage("Remove extra stacks") {{
withCredentials([
[$class : 'UsernamePasswordMultiBinding',
credentialsId : env.OS_CREDENTIALS,
passwordVariable: 'OS_PASSWORD',
usernameVariable: 'OS_USERNAME']
]) {{
env.OS_IDENTITY_API_VERSION = 3
for (stack_name in stacks) {{
shared.run_cmd("""
# export OS_IDENTITY_API_VERSION=3
# export OS_AUTH_URL=${{OS_AUTH_URL}}
# export OS_USERNAME=${{OS_USERNAME}}
# export OS_PASSWORD=${{OS_PASSWORD}}
# export OS_PROJECT_NAME=${{OS_PROJECT_NAME}}
openstack --insecure stack delete -y ${{stack_name}} || true
timeout 20m /bin/bash -c "while openstack --insecure stack show ${{stack_name}} -f value -c stack_status; do sleep 10; done";
""")
}}
}}
}}
stage("Reboot HW nodes ") {{
bm_ips = [
"185.8.59.227",
"185.8.59.229",
"5.43.225.88",
"5.43.225.112",
"5.43.225.208",
"5.43.227.118",
"185.8.58.248",
"185.8.59.222",
"5.43.225.228",
"5.43.229.28",
"5.43.225.23",
"185.8.58.9",
"185.8.58.246",
"185.8.58.243",
"185.8.58.244"
]
lab_user = "engineer"
lab_pass = "KBwdcRqwed3w2"
for (ip in bm_ips) {{ sh ("ipmitool -H ${{ip}} -U ${{lab_user}} -P ${{lab_pass}} chassis power off")}}
for (ip in bm_ips) {{ sh ("ipmitool -H ${{ip}} -U ${{lab_user}} -P ${{lab_pass}} chassis bootdev pxe")}}
}}
stage("Start deployment") {{
def jobs_map = [:]
for (stack_name in stacks) {{
println stack_name
println get_last_build_time(stack_name)
jobs_map.put ("${{stack_name}}", get_last_build_time(stack_name))
}}
stack_to_deploy = oldest_job(jobs_map)
println "Build ${{stack_to_deploy}}"
currentBuild.description = "${{stack_to_deploy}}"
// Trigger job
def deploy = build job: "${{stack_to_deploy}}",
parameters: [
string(name: 'PARENT_NODE_NAME', value: env.PARENT_NODE_NAME),
string(name: 'OS_CREDENTIALS', value: env.OS_CREDENTIALS)
]
// currentBuild.status = deploy.status
}}
}}
}}
name: deploy_bm
parameters:
- string:
default: sre-qa-ci-eu
description: ''
name: OS_CREDENTIALS
trim: 'false'
- text:
default: |-
bm-cicd-pike-ovs-maas
bm-cicd-queens-ovs-maas
heat-bm-cicd-pike-contrail-sl
heat-bm-cicd-queens-contrail-sl
description: List of stacks for deployment. Separated by newline
name: STACKS
trim: 'false'
- string:
default: ''
description: ''
name: TCP_QA_REFS
trim: 'false'
- string:
default: sre-team-infra
description: ''
name: PARENT_NODE_NAME
trim: 'false'
- string:
default: https://ic-eu.ssl.mirantis.net:5000/v3
description: ''
name: OS_AUTH_URL
trim: 'false'
- string:
default: sre-team
description: ''
name: OS_PROJECT_NAME
trim: 'false'