blob: 33a5a6777d282cf3c283d3eb91daa190696f3ea2 [file] [log] [blame]
/**
*
* Add Ceph node to existing cluster
*
* Requred parameters:
* SALT_MASTER_URL URL of Salt master
* SALT_MASTER_CREDENTIALS Credentials to the Salt API
* HOST Host (minion id) to be added
* HOST_TYPE Type of Ceph node to be added. Valid values are mon/osd/rgw
*
*/
common = new com.mirantis.mk.Common()
salt = new com.mirantis.mk.Salt()
orchestrate = new com.mirantis.mk.Orchestrate()
def python = new com.mirantis.mk.Python()
def pepperEnv = "pepperEnv"
timeout(time: 12, unit: 'HOURS') {
node("python") {
// create connection to salt master
python.setupPepperVirtualenv(pepperEnv, SALT_MASTER_URL, SALT_MASTER_CREDENTIALS)
matches = ["osd", "mon", "rgw"]
def found = false
for (s in matches) {
if (HOST_TYPE.toLowerCase() == s) {
found = true
}
}
if (!found) {
common.errorMsg("No such HOST_TYPE was found. Please insert one of the following types: mon/osd/rgw")
throw new InterruptedException()
}
if (HOST_TYPE.toLowerCase() != 'osd') {
// launch VMs
stage('Launch VMs') {
salt.enforceState(pepperEnv, 'I@salt:control', 'salt.control', true)
// wait till the HOST appears in salt-key on salt-master
salt.minionPresent(pepperEnv, 'I@salt:master', HOST)
}
}
// run basic states
stage('Install infra') {
orchestrate.installFoundationInfraOnTarget(pepperEnv, HOST)
}
if (HOST_TYPE.toLowerCase() == 'osd') {
// Install Ceph osd
stage('Install Ceph OSD') {
orchestrate.installCephOsd(pepperEnv, HOST)
}
} else if (HOST_TYPE.toLowerCase() == 'mon') {
// Install Ceph mon
stage('Install Ceph MON') {
salt.enforceState(pepperEnv, 'I@ceph:common', 'ceph.common', true)
// install Ceph Mons
salt.enforceState(pepperEnv, 'I@ceph:mon', 'ceph.mon', true)
if (salt.testTarget(pepperEnv, 'I@ceph:mgr')) {
salt.enforceState(pepperEnv, 'I@ceph:mgr', 'ceph.mgr', true)
}
}
} else if (HOST_TYPE.toLowerCase() == 'rgw') {
// Install Ceph rgw
stage('Install Ceph RGW') {
salt.enforceState(pepperEnv, 'I@ceph:radosgw', ['keepalived', 'haproxy', 'ceph.radosgw'], true)
}
}
stage("Update/Install monitoring") {
//Collect Grains
salt.enforceState(pepperEnv, HOST, 'salt.minion.grains')
salt.runSaltProcessStep(pepperEnv, HOST, 'saltutil.refresh_modules')
salt.runSaltProcessStep(pepperEnv, HOST, 'mine.update')
sleep(5)
salt.enforceState(pepperEnv, HOST, 'prometheus')
salt.enforceState(pepperEnv, 'I@prometheus:server', 'prometheus')
}
}
}