blob: 9ec96c248fb0d068f2b126a7b1274021dd5e0c7e [file] [log] [blame]
Jiri Broulik2c00f4c2017-10-26 13:23:11 +02001/**
2 *
3 * Add Ceph node to existing cluster
4 *
5 * Requred parameters:
6 * SALT_MASTER_URL URL of Salt master
7 * SALT_MASTER_CREDENTIALS Credentials to the Salt API
8 * HOST Host (minion id) to be added
9 * HOST_TYPE Type of Ceph node to be added. Valid values are mon/osd/rgw
10 *
11 */
12
13common = new com.mirantis.mk.Common()
14salt = new com.mirantis.mk.Salt()
15orchestrate = new com.mirantis.mk.Orchestrate()
16def python = new com.mirantis.mk.Python()
17
18def pepperEnv = "pepperEnv"
Jakub Josefa63f9862018-01-11 17:58:38 +010019timeout(time: 12, unit: 'HOURS') {
20 node("python") {
Jiri Broulik2c00f4c2017-10-26 13:23:11 +020021
Jakub Josefa63f9862018-01-11 17:58:38 +010022 // create connection to salt master
23 python.setupPepperVirtualenv(pepperEnv, SALT_MASTER_URL, SALT_MASTER_CREDENTIALS)
Jiri Broulik2c00f4c2017-10-26 13:23:11 +020024
Jakub Josefa63f9862018-01-11 17:58:38 +010025 matches = ["osd", "mon", "rgw"]
26 def found = false
27 for (s in matches) {
28 if (HOST_TYPE.toLowerCase() == s) {
29 found = true
Jiri Broulik2c00f4c2017-10-26 13:23:11 +020030 }
31 }
Jakub Josefa63f9862018-01-11 17:58:38 +010032
33 if (!found) {
34 common.errorMsg("No such HOST_TYPE was found. Please insert one of the following types: mon/osd/rgw")
35 throw new InterruptedException()
36 }
37
38 if (HOST_TYPE.toLowerCase() != 'osd') {
39
40 // launch VMs
41 stage('Launch VMs') {
42 salt.enforceState(pepperEnv, 'I@salt:control', 'salt.control', true)
43
44 // wait till the HOST appears in salt-key on salt-master
45 salt.minionPresent(pepperEnv, 'I@salt:master', HOST)
46 }
47 }
48
49 // run basic states
50 stage('Install infra') {
51 orchestrate.installFoundationInfraOnTarget(pepperEnv, HOST)
52 }
53
54 if (HOST_TYPE.toLowerCase() == 'osd') {
55
56 // Install Ceph osd
57 stage('Install Ceph OSD') {
58 orchestrate.installCephOsd(pepperEnv, HOST)
59 }
60 } else if (HOST_TYPE.toLowerCase() == 'mon') {
61 // Install Ceph mon
62 stage('Install Ceph MON') {
63 salt.enforceState(pepperEnv, 'I@ceph:common', 'ceph.common', true)
64 // install Ceph Mons
65 salt.enforceState(pepperEnv, 'I@ceph:mon', 'ceph.mon', true)
66 if (salt.testTarget(pepperEnv, 'I@ceph:mgr')) {
67 salt.enforceState(pepperEnv, 'I@ceph:mgr', 'ceph.mgr', true)
68 }
69 }
70 } else if (HOST_TYPE.toLowerCase() == 'rgw') {
71 // Install Ceph rgw
72 stage('Install Ceph RGW') {
73 salt.enforceState(pepperEnv, 'I@ceph:radosgw', ['keepalived', 'haproxy', 'ceph.radosgw'], true)
74 }
Jiri Broulik2c00f4c2017-10-26 13:23:11 +020075 }
Michal Kobusd8874842018-03-13 12:42:07 +010076
Ildar Svetlov9e9aa952018-04-13 23:13:07 +040077 stage("Update/Install monitoring") {
Ivan Berezovskiy2325dcb2019-11-05 17:42:57 +040078 def prometheusNodes = salt.getMinions(pepperEnv, 'I@prometheus:server')
79 if (!prometheusNodes.isEmpty()) {
80 //Collect Grains
81 salt.enforceState(pepperEnv, HOST, 'salt.minion.grains')
82 salt.runSaltProcessStep(pepperEnv, HOST, 'saltutil.refresh_modules')
83 salt.runSaltProcessStep(pepperEnv, HOST, 'mine.update')
84 sleep(5)
85 salt.enforceState(pepperEnv, HOST, 'prometheus')
86 salt.enforceState(pepperEnv, 'I@prometheus:server', 'prometheus')
87 } else {
88 common.infoMsg('No Prometheus nodes in cluster. Nothing to do')
89 }
Ildar Svetlov9e9aa952018-04-13 23:13:07 +040090 }
Jiri Broulik2c00f4c2017-10-26 13:23:11 +020091 }
92}