| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 1 | package com.mirantis.mk | 
 | 2 | /** | 
 | 3 |  * Orchestration functions | 
 | 4 |  * | 
 | 5 | */ | 
 | 6 |  | 
 | 7 | def validateFoundationInfra(master) { | 
 | 8 |     def salt = new com.mirantis.mk.Salt() | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 9 |  | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 10 |     salt.cmdRun(master, 'I@salt:master' ,'salt-key') | 
 | 11 |     salt.runSaltProcessStep(master, 'I@salt:minion', 'test.version') | 
 | 12 |     salt.cmdRun(master, 'I@salt:master' ,'reclass-salt --top') | 
 | 13 |     salt.runSaltProcessStep(master, 'I@reclass:storage', 'reclass.inventory') | 
 | 14 |     salt.runSaltProcessStep(master, 'I@salt:minion', 'state.show_top') | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 15 | } | 
 | 16 |  | 
| Jiri Broulik | 8e1f1fe | 2017-12-13 11:54:06 +0100 | [diff] [blame] | 17 | def installFoundationInfra(master, staticMgmtNet=false) { | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 18 |     def salt = new com.mirantis.mk.Salt() | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 19 |  | 
| Vasyl Saienko | 0869b3a | 2017-11-22 14:37:57 +0200 | [diff] [blame] | 20 |     // NOTE(vsaienko) Apply reclass first, it may update cluster model | 
 | 21 |     // apply linux and salt.master salt.minion states afterwards to make sure | 
 | 22 |     // correct cluster model is used. | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 23 |     salt.enforceState(master, 'I@salt:master', ['reclass']) | 
| Tomáš Kukrál | b4d7522 | 2017-06-06 10:36:02 +0200 | [diff] [blame] | 24 |  | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 25 |     salt.enforceState(master, 'I@salt:master', ['linux.system']) | 
| Vasyl Saienko | 0869b3a | 2017-11-22 14:37:57 +0200 | [diff] [blame] | 26 |     salt.enforceState(master, 'I@salt:master', ['salt.master'], true, false, null, false, 120, 2) | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 27 |     salt.fullRefresh(master, "*") | 
| Tomáš Kukrál | b4d7522 | 2017-06-06 10:36:02 +0200 | [diff] [blame] | 28 |  | 
| Vasyl Saienko | e36ab7c | 2017-07-17 14:35:48 +0300 | [diff] [blame] | 29 |     salt.enforceState(master, 'I@salt:master', ['salt.minion'], true, false, null, false, 60, 2) | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 30 |     salt.enforceState(master, 'I@salt:master', ['salt.minion']) | 
 | 31 |     salt.fullRefresh(master, "*") | 
| Tomáš Kukrál | b4d7522 | 2017-06-06 10:36:02 +0200 | [diff] [blame] | 32 |  | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 33 |     salt.enforceState(master, '*', ['linux.system']) | 
| Jiri Broulik | 8e1f1fe | 2017-12-13 11:54:06 +0100 | [diff] [blame] | 34 |     if (staticMgmtNet) { | 
 | 35 |         salt.runSaltProcessStep(master, '*', 'cmd.shell', ["salt-call state.sls linux.network; salt-call service.restart salt-minion"], null, true, 60) | 
 | 36 |     } | 
| Jiri Broulik | e3e7bc3 | 2018-02-26 10:50:07 +0100 | [diff] [blame] | 37 |     salt.enforceState(master, 'I@linux:system', ['linux', 'openssh', 'ntp', 'rsyslog']) | 
| Tomáš Kukrál | 7e767f9 | 2017-08-18 14:53:17 +0200 | [diff] [blame] | 38 |     salt.enforceState(master, '*', ['salt.minion'], true, false, null, false, 60, 2) | 
| Jakub Josef | 4f8f4df | 2017-09-01 14:32:42 +0200 | [diff] [blame] | 39 |     sleep(5) | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 40 |     salt.enforceState(master, '*', ['linux.network.host']) | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 41 | } | 
 | 42 |  | 
| Jiri Broulik | 8e1f1fe | 2017-12-13 11:54:06 +0100 | [diff] [blame] | 43 | def installFoundationInfraOnTarget(master, target, staticMgmtNet=false) { | 
| Jiri Broulik | 976bf6c | 2017-10-20 14:43:25 +0200 | [diff] [blame] | 44 |     def salt = new com.mirantis.mk.Salt() | 
 | 45 |  | 
 | 46 |     salt.enforceState(master, 'I@salt:master', ['reclass'], true, false, null, false, 120, 2) | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 47 |     salt.fullRefresh(master, target) | 
 | 48 |     salt.enforceState(master, target, ['linux.system']) | 
| Jiri Broulik | 8e1f1fe | 2017-12-13 11:54:06 +0100 | [diff] [blame] | 49 |     if (staticMgmtNet) { | 
 | 50 |         salt.runSaltProcessStep(master, target, 'cmd.shell', ["salt-call state.sls linux.network; salt-call service.restart salt-minion"], null, true, 60) | 
 | 51 |     } | 
| Jiri Broulik | 976bf6c | 2017-10-20 14:43:25 +0200 | [diff] [blame] | 52 |     salt.enforceState(master, target, ['salt.minion'], true, false, null, false, 60, 2) | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 53 |     salt.enforceState(master, target, ['salt.minion']) | 
| Jiri Broulik | 976bf6c | 2017-10-20 14:43:25 +0200 | [diff] [blame] | 54 |  | 
| Jiri Broulik | e3e7bc3 | 2018-02-26 10:50:07 +0100 | [diff] [blame] | 55 |     salt.enforceState(master, target, ['linux', 'openssh', 'ntp', 'rsyslog']) | 
| Jiri Broulik | 976bf6c | 2017-10-20 14:43:25 +0200 | [diff] [blame] | 56 |     sleep(5) | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 57 |     salt.enforceState(master, target, ['linux.network.host']) | 
| Jiri Broulik | 976bf6c | 2017-10-20 14:43:25 +0200 | [diff] [blame] | 58 | } | 
 | 59 |  | 
| Tomáš Kukrál | 8d2be5a | 2017-02-28 11:22:29 +0100 | [diff] [blame] | 60 | def installInfraKvm(master) { | 
 | 61 |     def salt = new com.mirantis.mk.Salt() | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 62 |     salt.fullRefresh(master, 'I@linux:system') | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 63 |  | 
| Richard Felkl | 286f25f | 2017-07-26 14:23:55 +0200 | [diff] [blame] | 64 |     salt.enforceState(master, 'I@salt:control', ['salt.minion'], true, false, null, false, 60, 2) | 
| Jiri Broulik | e3e7bc3 | 2018-02-26 10:50:07 +0100 | [diff] [blame] | 65 |     salt.enforceState(master, 'I@salt:control', ['linux.system', 'linux.network', 'ntp', 'rsyslog']) | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 66 |     salt.enforceState(master, 'I@salt:control', 'libvirt') | 
 | 67 |     salt.enforceState(master, 'I@salt:control', 'salt.control') | 
| Tomáš Kukrál | b8e9711 | 2017-03-01 16:03:16 +0100 | [diff] [blame] | 68 |  | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 69 |     sleep(600) | 
| Tomáš Kukrál | b8e9711 | 2017-03-01 16:03:16 +0100 | [diff] [blame] | 70 |  | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 71 |     salt.fullRefresh(master, '* and not kvm*') | 
| Tomáš Kukrál | 8d2be5a | 2017-02-28 11:22:29 +0100 | [diff] [blame] | 72 | } | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 73 |  | 
| vrovachev | 1c4770b | 2017-07-05 13:25:21 +0400 | [diff] [blame] | 74 | def installInfra(master) { | 
| Jakub Josef | 61463c7 | 2018-02-13 16:10:56 +0100 | [diff] [blame] | 75 |     def common = new com.mirantis.mk.Common() | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 76 |     def salt = new com.mirantis.mk.Salt() | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 77 |  | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 78 |     // Install glusterfs | 
| Tomáš Kukrál | d0cf7ec | 2017-07-13 11:29:20 +0200 | [diff] [blame] | 79 |     if (salt.testTarget(master, 'I@glusterfs:server')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 80 |         salt.enforceState(master, 'I@glusterfs:server', 'glusterfs.server.service') | 
| Tomáš Kukrál | b8e9711 | 2017-03-01 16:03:16 +0100 | [diff] [blame] | 81 |  | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 82 |         salt.enforceState(master, 'I@glusterfs:server and *01*', 'glusterfs.server.setup', true, true, null, false, -1, 5) | 
| Jakub Josef | 61463c7 | 2018-02-13 16:10:56 +0100 | [diff] [blame] | 83 |         sleep(10) | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 84 |         salt.cmdRun(master, 'I@glusterfs:server', "gluster peer status; gluster volume status") | 
| Alexander Noskov | 93acac4 | 2017-06-20 17:55:55 +0200 | [diff] [blame] | 85 |     } | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 86 |  | 
| Oleg Grigorov | 26c8a6c | 2017-08-17 18:54:02 +0300 | [diff] [blame] | 87 |     // Ensure glusterfs clusters is ready | 
 | 88 |     if (salt.testTarget(master, 'I@glusterfs:client')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 89 |         salt.enforceState(master, 'I@glusterfs:client', 'glusterfs.client') | 
| Oleg Grigorov | 26c8a6c | 2017-08-17 18:54:02 +0300 | [diff] [blame] | 90 |     } | 
 | 91 |  | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 92 |     // Install galera | 
| Richard Felkl | c0f163e | 2017-07-27 15:11:12 +0200 | [diff] [blame] | 93 |     if (salt.testTarget(master, 'I@galera:master') || salt.testTarget(master, 'I@galera:slave')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 94 |         salt.enforceState(master, 'I@galera:master', 'galera', true, true, null, false, -1, 2) | 
| Jakub Josef | 9994ea7 | 2018-03-05 13:23:07 +0100 | [diff] [blame] | 95 |         salt.enforceState(master, 'I@galera:slave', 'galera', true, true, null, false, -1, 2) | 
| vrovachev | 1c4770b | 2017-07-05 13:25:21 +0400 | [diff] [blame] | 96 |  | 
 | 97 |         // Check galera status | 
 | 98 |         salt.runSaltProcessStep(master, 'I@galera:master', 'mysql.status') | 
 | 99 |         salt.runSaltProcessStep(master, 'I@galera:slave', 'mysql.status') | 
| Vasyl Saienko | c1fb989 | 2017-07-13 14:54:13 +0300 | [diff] [blame] | 100 |     // If galera is not enabled check if we need to install mysql:server | 
 | 101 |     } else if (salt.testTarget(master, 'I@mysql:server')){ | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 102 |         salt.enforceState(master, 'I@mysql:server', 'mysql.server') | 
| Vasyl Saienko | c1fb989 | 2017-07-13 14:54:13 +0300 | [diff] [blame] | 103 |         if (salt.testTarget(master, 'I@mysql:client')){ | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 104 |             salt.enforceState(master, 'I@mysql:client', 'mysql.client') | 
| Vasyl Saienko | c1fb989 | 2017-07-13 14:54:13 +0300 | [diff] [blame] | 105 |         } | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 106 |     } | 
| Jiri Broulik | e3e7bc3 | 2018-02-26 10:50:07 +0100 | [diff] [blame] | 107 |     installBackup(master, 'mysql') | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 108 |  | 
| vrovachev | 1c4770b | 2017-07-05 13:25:21 +0400 | [diff] [blame] | 109 |     // Install docker | 
| Tomáš Kukrál | d0cf7ec | 2017-07-13 11:29:20 +0200 | [diff] [blame] | 110 |     if (salt.testTarget(master, 'I@docker:host')) { | 
| vrovachev | 1c4770b | 2017-07-05 13:25:21 +0400 | [diff] [blame] | 111 |         salt.enforceState(master, 'I@docker:host', 'docker.host') | 
| Tomáš Kukrál | 0cf3ffb | 2017-09-03 10:18:18 +0200 | [diff] [blame] | 112 |         salt.cmdRun(master, 'I@docker:host', 'docker ps') | 
| vrovachev | 1c4770b | 2017-07-05 13:25:21 +0400 | [diff] [blame] | 113 |     } | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 114 |  | 
| vrovachev | 1c4770b | 2017-07-05 13:25:21 +0400 | [diff] [blame] | 115 |     // Install keepalived | 
| Tomáš Kukrál | d0cf7ec | 2017-07-13 11:29:20 +0200 | [diff] [blame] | 116 |     if (salt.testTarget(master, 'I@keepalived:cluster')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 117 |         salt.enforceState(master, 'I@keepalived:cluster and *01*', 'keepalived') | 
 | 118 |         salt.enforceState(master, 'I@keepalived:cluster', 'keepalived') | 
| vrovachev | 1c4770b | 2017-07-05 13:25:21 +0400 | [diff] [blame] | 119 |     } | 
 | 120 |  | 
 | 121 |     // Install rabbitmq | 
| Tomáš Kukrál | d0cf7ec | 2017-07-13 11:29:20 +0200 | [diff] [blame] | 122 |     if (salt.testTarget(master, 'I@rabbitmq:server')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 123 |         salt.enforceState(master, 'I@rabbitmq:server', 'rabbitmq', true, true, null, false, -1, 2) | 
| vrovachev | 1c4770b | 2017-07-05 13:25:21 +0400 | [diff] [blame] | 124 |  | 
 | 125 |         // Check the rabbitmq status | 
| Jakub Josef | 61463c7 | 2018-02-13 16:10:56 +0100 | [diff] [blame] | 126 |         common.retry(3,5){ | 
 | 127 |              salt.cmdRun(master, 'I@rabbitmq:server', 'rabbitmqctl cluster_status') | 
 | 128 |         } | 
| vrovachev | 1c4770b | 2017-07-05 13:25:21 +0400 | [diff] [blame] | 129 |     } | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 130 |  | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 131 |     // Install haproxy | 
| Tomáš Kukrál | d0cf7ec | 2017-07-13 11:29:20 +0200 | [diff] [blame] | 132 |     if (salt.testTarget(master, 'I@haproxy:proxy')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 133 |         salt.enforceState(master, 'I@haproxy:proxy', 'haproxy') | 
| vrovachev | 1c4770b | 2017-07-05 13:25:21 +0400 | [diff] [blame] | 134 |         salt.runSaltProcessStep(master, 'I@haproxy:proxy', 'service.status', ['haproxy']) | 
 | 135 |         salt.runSaltProcessStep(master, 'I@haproxy:proxy', 'service.restart', ['rsyslog']) | 
 | 136 |     } | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 137 |  | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 138 |     // Install memcached | 
| Tomáš Kukrál | d0cf7ec | 2017-07-13 11:29:20 +0200 | [diff] [blame] | 139 |     if (salt.testTarget(master, 'I@memcached:server')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 140 |         salt.enforceState(master, 'I@memcached:server', 'memcached') | 
| vrovachev | 1c4770b | 2017-07-05 13:25:21 +0400 | [diff] [blame] | 141 |     } | 
 | 142 |  | 
 | 143 |     // Install etcd | 
| Tomáš Kukrál | d0cf7ec | 2017-07-13 11:29:20 +0200 | [diff] [blame] | 144 |     if (salt.testTarget(master, 'I@etcd:server')) { | 
| vrovachev | 1c4770b | 2017-07-05 13:25:21 +0400 | [diff] [blame] | 145 |         salt.enforceState(master, 'I@etcd:server', 'etcd.server.service') | 
| Jakub Josef | 61463c7 | 2018-02-13 16:10:56 +0100 | [diff] [blame] | 146 |         common.retry(3,5){ | 
 | 147 |             salt.cmdRun(master, 'I@etcd:server', '. /var/lib/etcd/configenv && etcdctl cluster-health') | 
 | 148 |         } | 
| vrovachev | 1c4770b | 2017-07-05 13:25:21 +0400 | [diff] [blame] | 149 |     } | 
| Mykyta Karpin | 8185e4a | 2018-02-23 19:15:48 +0200 | [diff] [blame] | 150 |  | 
 | 151 |     // Install redis | 
 | 152 |     if (salt.testTarget(master, 'I@redis:server')) { | 
 | 153 |         if (salt.testTarget(master, 'I@redis:cluster:role:master')) { | 
 | 154 |             salt.enforceState(master, 'I@redis:cluster:role:master', 'redis') | 
 | 155 |         } | 
 | 156 |         salt.enforceState(master, 'I@redis:server', 'redis') | 
 | 157 |     } | 
| Jiri Broulik | e3e7bc3 | 2018-02-26 10:50:07 +0100 | [diff] [blame] | 158 |     installBackup(master, 'common') | 
| vrovachev | 1c4770b | 2017-07-05 13:25:21 +0400 | [diff] [blame] | 159 | } | 
 | 160 |  | 
 | 161 | def installOpenstackInfra(master) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 162 |     def common = new com.mirantis.mk.Common() | 
 | 163 |     common.warningMsg("You calling orchestrate.installOpenstackInfra(). This function is deprecated please use orchestrate.installInfra() directly") | 
 | 164 |     installInfra(master) | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 165 | } | 
 | 166 |  | 
 | 167 |  | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 168 | def installOpenstackControl(master) { | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 169 |     def salt = new com.mirantis.mk.Salt() | 
| Jakub Josef | 61463c7 | 2018-02-13 16:10:56 +0100 | [diff] [blame] | 170 |     def common = new com.mirantis.mk.Common() | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 171 |  | 
 | 172 |     // Install horizon dashboard | 
| Vasyl Saienko | 962e0b5 | 2017-07-11 10:49:19 +0300 | [diff] [blame] | 173 |     if (salt.testTarget(master, 'I@horizon:server')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 174 |         salt.enforceState(master, 'I@horizon:server', 'horizon') | 
| Vasyl Saienko | 962e0b5 | 2017-07-11 10:49:19 +0300 | [diff] [blame] | 175 |     } | 
| Jiri Broulik | e3e7bc3 | 2018-02-26 10:50:07 +0100 | [diff] [blame] | 176 |     // Install sphinx server | 
 | 177 |     if (salt.testTarget(master, 'I@sphinx:server')) { | 
 | 178 |         salt.enforceState(master, 'I@sphinx:server', 'sphinx') | 
 | 179 |     } | 
| Vasyl Saienko | 962e0b5 | 2017-07-11 10:49:19 +0300 | [diff] [blame] | 180 |     if (salt.testTarget(master, 'I@nginx:server')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 181 |         salt.enforceState(master, 'I@nginx:server', 'salt.minion') | 
 | 182 |         salt.enforceState(master, 'I@nginx:server', 'nginx') | 
| Vasyl Saienko | 962e0b5 | 2017-07-11 10:49:19 +0300 | [diff] [blame] | 183 |     } | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 184 |  | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 185 |     // setup keystone service | 
| Vasyl Saienko | 962e0b5 | 2017-07-11 10:49:19 +0300 | [diff] [blame] | 186 |     if (salt.testTarget(master, 'I@keystone:server')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 187 |         salt.enforceState(master, 'I@keystone:server and *01*', 'keystone.server') | 
 | 188 |         salt.enforceState(master, 'I@keystone:server', 'keystone.server') | 
| Vasyl Saienko | 962e0b5 | 2017-07-11 10:49:19 +0300 | [diff] [blame] | 189 |         // populate keystone services/tenants/roles/users | 
| Tomáš Kukrál | 926e633 | 2017-03-02 09:23:03 +0100 | [diff] [blame] | 190 |  | 
| Vasyl Saienko | 962e0b5 | 2017-07-11 10:49:19 +0300 | [diff] [blame] | 191 |         // keystone:client must be called locally | 
 | 192 |         //salt.runSaltProcessStep(master, 'I@keystone:client', 'cmd.run', ['salt-call state.sls keystone.client'], null, true) | 
 | 193 |         salt.runSaltProcessStep(master, 'I@keystone:server', 'service.restart', ['apache2']) | 
 | 194 |         sleep(30) | 
 | 195 |     } | 
 | 196 |     if (salt.testTarget(master, 'I@keystone:client')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 197 |         salt.enforceState(master, 'I@keystone:client and *01*', 'keystone.client') | 
 | 198 |         salt.enforceState(master, 'I@keystone:client', 'keystone.client') | 
| Vasyl Saienko | 962e0b5 | 2017-07-11 10:49:19 +0300 | [diff] [blame] | 199 |     } | 
 | 200 |     if (salt.testTarget(master, 'I@keystone:server')) { | 
| Jakub Josef | 61463c7 | 2018-02-13 16:10:56 +0100 | [diff] [blame] | 201 |         common.retry(3,5){ | 
 | 202 |             salt.cmdRun(master, 'I@keystone:server', '. /root/keystonercv3; openstack service list') | 
 | 203 |         } | 
| Vasyl Saienko | 962e0b5 | 2017-07-11 10:49:19 +0300 | [diff] [blame] | 204 |     } | 
| Tomáš Kukrál | 926e633 | 2017-03-02 09:23:03 +0100 | [diff] [blame] | 205 |  | 
| Oleg Grigorov | 26c8a6c | 2017-08-17 18:54:02 +0300 | [diff] [blame] | 206 |     // Install glance | 
| Vasyl Saienko | 962e0b5 | 2017-07-11 10:49:19 +0300 | [diff] [blame] | 207 |     if (salt.testTarget(master, 'I@glance:server')) { | 
 | 208 |         //runSaltProcessStep(master, 'I@glance:server', 'state.sls', ['glance.server'], 1) | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 209 |         salt.enforceState(master, 'I@glance:server and *01*', 'glance.server') | 
 | 210 |        salt.enforceState(master, 'I@glance:server', 'glance.server') | 
| Vasyl Saienko | 962e0b5 | 2017-07-11 10:49:19 +0300 | [diff] [blame] | 211 |     } | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 212 |  | 
| Oleg Grigorov | 26c8a6c | 2017-08-17 18:54:02 +0300 | [diff] [blame] | 213 |     // Check glance service | 
 | 214 |     if (salt.testTarget(master, 'I@glance:server')){ | 
| Jakub Josef | 61463c7 | 2018-02-13 16:10:56 +0100 | [diff] [blame] | 215 |         common.retry(3,5){ | 
| Oleg Iurchenko | 01410f2 | 2018-02-22 22:18:21 +0200 | [diff] [blame] | 216 |             salt.cmdRun(master, 'I@keystone:server','. /root/keystonercv3; glance image-list') | 
| Jakub Josef | 61463c7 | 2018-02-13 16:10:56 +0100 | [diff] [blame] | 217 |         } | 
| Vasyl Saienko | 962e0b5 | 2017-07-11 10:49:19 +0300 | [diff] [blame] | 218 |     } | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 219 |  | 
| Elena Ezhova | 8d53bff | 2017-08-01 17:43:30 +0400 | [diff] [blame] | 220 |     // Create glance resources | 
 | 221 |     if (salt.testTarget(master, 'I@glance:client')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 222 |         salt.enforceState(master, 'I@glance:client', 'glance.client') | 
| Elena Ezhova | 8d53bff | 2017-08-01 17:43:30 +0400 | [diff] [blame] | 223 |     } | 
 | 224 |  | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 225 |     // Install and check nova service | 
| Vasyl Saienko | 962e0b5 | 2017-07-11 10:49:19 +0300 | [diff] [blame] | 226 |     if (salt.testTarget(master, 'I@nova:controller')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 227 |         // run on first node first | 
 | 228 |         salt.enforceState(master, 'I@nova:controller and *01*', 'nova.controller') | 
 | 229 |         salt.enforceState(master, 'I@nova:controller', 'nova.controller') | 
| Vasyl Saienko | 962e0b5 | 2017-07-11 10:49:19 +0300 | [diff] [blame] | 230 |         if (salt.testTarget(master, 'I@keystone:server')) { | 
| Jakub Josef | 61463c7 | 2018-02-13 16:10:56 +0100 | [diff] [blame] | 231 |            common.retry(3,5){ | 
| Oleg Iurchenko | 01410f2 | 2018-02-22 22:18:21 +0200 | [diff] [blame] | 232 |                salt.cmdRun(master, 'I@keystone:server', '. /root/keystonercv3; nova service-list') | 
| Jakub Josef | 61463c7 | 2018-02-13 16:10:56 +0100 | [diff] [blame] | 233 |            } | 
| Vasyl Saienko | 962e0b5 | 2017-07-11 10:49:19 +0300 | [diff] [blame] | 234 |         } | 
 | 235 |     } | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 236 |  | 
| Elena Ezhova | 8d53bff | 2017-08-01 17:43:30 +0400 | [diff] [blame] | 237 |     // Create nova resources | 
 | 238 |     if (salt.testTarget(master, 'I@nova:client')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 239 |         salt.enforceState(master, 'I@nova:client', 'nova.client') | 
| Elena Ezhova | 8d53bff | 2017-08-01 17:43:30 +0400 | [diff] [blame] | 240 |     } | 
 | 241 |  | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 242 |     // Install and check cinder service | 
| Vasyl Saienko | 962e0b5 | 2017-07-11 10:49:19 +0300 | [diff] [blame] | 243 |     if (salt.testTarget(master, 'I@cinder:controller')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 244 |         // run on first node first | 
 | 245 |         salt.enforceState(master, 'I@cinder:controller and *01*', 'cinder') | 
 | 246 |         salt.enforceState(master, 'I@cinder:controller', 'cinder') | 
| Vasyl Saienko | 962e0b5 | 2017-07-11 10:49:19 +0300 | [diff] [blame] | 247 |         if (salt.testTarget(master, 'I@keystone:server')) { | 
| Jakub Josef | 61463c7 | 2018-02-13 16:10:56 +0100 | [diff] [blame] | 248 |             common.retry(3,5){ | 
| Oleg Iurchenko | 01410f2 | 2018-02-22 22:18:21 +0200 | [diff] [blame] | 249 |                 salt.cmdRun(master, 'I@keystone:server', '. /root/keystonercv3; cinder list') | 
| Jakub Josef | 61463c7 | 2018-02-13 16:10:56 +0100 | [diff] [blame] | 250 |             } | 
| Vasyl Saienko | 962e0b5 | 2017-07-11 10:49:19 +0300 | [diff] [blame] | 251 |         } | 
 | 252 |     } | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 253 |  | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 254 |     // Install neutron service | 
| Vasyl Saienko | 962e0b5 | 2017-07-11 10:49:19 +0300 | [diff] [blame] | 255 |     if (salt.testTarget(master, 'I@neutron:server')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 256 |         // run on first node first | 
 | 257 |         salt.enforceState(master, 'I@neutron:server and *01*', 'neutron.server') | 
 | 258 |         salt.enforceState(master, 'I@neutron:server', 'neutron.server') | 
| Vasyl Saienko | 962e0b5 | 2017-07-11 10:49:19 +0300 | [diff] [blame] | 259 |         if (salt.testTarget(master, 'I@keystone:server')) { | 
| Jakub Josef | 61463c7 | 2018-02-13 16:10:56 +0100 | [diff] [blame] | 260 |             common.retry(3,5){ | 
| Oleg Iurchenko | 01410f2 | 2018-02-22 22:18:21 +0200 | [diff] [blame] | 261 |                 salt.cmdRun(master, 'I@keystone:server','. /root/keystonercv3; neutron agent-list') | 
| Jakub Josef | 61463c7 | 2018-02-13 16:10:56 +0100 | [diff] [blame] | 262 |             } | 
| Vasyl Saienko | 962e0b5 | 2017-07-11 10:49:19 +0300 | [diff] [blame] | 263 |         } | 
 | 264 |     } | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 265 |  | 
| Elena Ezhova | 8d53bff | 2017-08-01 17:43:30 +0400 | [diff] [blame] | 266 |     // Create neutron resources | 
 | 267 |     if (salt.testTarget(master, 'I@neutron:client')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 268 |         salt.enforceState(master, 'I@neutron:client', 'neutron.client') | 
| Elena Ezhova | 8d53bff | 2017-08-01 17:43:30 +0400 | [diff] [blame] | 269 |     } | 
 | 270 |  | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 271 |     // Install heat service | 
| Vasyl Saienko | 962e0b5 | 2017-07-11 10:49:19 +0300 | [diff] [blame] | 272 |     if (salt.testTarget(master, 'I@heat:server')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 273 |         // run on first node first | 
 | 274 |         salt.enforceState(master, 'I@heat:server and *01*', 'heat') | 
 | 275 |         salt.enforceState(master, 'I@heat:server', 'heat') | 
| Vasyl Saienko | 962e0b5 | 2017-07-11 10:49:19 +0300 | [diff] [blame] | 276 |         if (salt.testTarget(master, 'I@keystone:server')) { | 
| Jakub Josef | 61463c7 | 2018-02-13 16:10:56 +0100 | [diff] [blame] | 277 |             common.retry(3,5){ | 
| Oleg Iurchenko | 01410f2 | 2018-02-22 22:18:21 +0200 | [diff] [blame] | 278 |                 salt.cmdRun(master, 'I@keystone:server', '. /root/keystonercv3; heat resource-type-list') | 
| Jakub Josef | 61463c7 | 2018-02-13 16:10:56 +0100 | [diff] [blame] | 279 |             } | 
| Vasyl Saienko | 962e0b5 | 2017-07-11 10:49:19 +0300 | [diff] [blame] | 280 |         } | 
 | 281 |     } | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 282 |  | 
 | 283 |     // Restart nova api | 
| Vasyl Saienko | 962e0b5 | 2017-07-11 10:49:19 +0300 | [diff] [blame] | 284 |     if (salt.testTarget(master, 'I@nova:controller')) { | 
 | 285 |         salt.runSaltProcessStep(master, 'I@nova:controller', 'service.restart', ['nova-api']) | 
 | 286 |     } | 
| Vasyl Saienko | a7c10c0 | 2017-07-13 10:43:43 +0300 | [diff] [blame] | 287 |  | 
 | 288 |     // Install ironic service | 
 | 289 |     if (salt.testTarget(master, 'I@ironic:api')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 290 |         salt.enforceState(master, 'I@ironic:api and *01*', 'ironic.api') | 
 | 291 |         salt.enforceState(master, 'I@ironic:api', 'ironic.api') | 
| Vasyl Saienko | a7c10c0 | 2017-07-13 10:43:43 +0300 | [diff] [blame] | 292 |     } | 
| Andrey Shestakov | 82c0b89 | 2017-07-24 18:46:21 +0300 | [diff] [blame] | 293 |  | 
| Vasyl Saienko | b7e4cdf | 2018-02-21 18:33:17 +0200 | [diff] [blame] | 294 |     // Install manila service | 
 | 295 |     if (salt.testTarget(master, 'I@manila:api')) { | 
 | 296 |         salt.enforceState(master, 'I@manila:api and *01*', 'manila.api') | 
 | 297 |         salt.enforceState(master, 'I@manila:api', 'manila.api') | 
 | 298 |     } | 
 | 299 |     if (salt.testTarget(master, 'I@manila:scheduler')) { | 
 | 300 |         salt.enforceState(master, 'I@manila:scheduler', 'manila.scheduler') | 
 | 301 |     } | 
 | 302 |  | 
| Andrey Shestakov | 82c0b89 | 2017-07-24 18:46:21 +0300 | [diff] [blame] | 303 |     // Install designate service | 
 | 304 |     if (salt.testTarget(master, 'I@designate:server:enabled')) { | 
 | 305 |         if (salt.testTarget(master, 'I@designate:server:backend:bind9')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 306 |             salt.enforceState(master, 'I@bind:server', 'bind.server') | 
| Andrey Shestakov | 82c0b89 | 2017-07-24 18:46:21 +0300 | [diff] [blame] | 307 |         } | 
 | 308 |         if (salt.testTarget(master, 'I@designate:server:backend:pdns4')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 309 |             salt.enforceState(master, 'I@powerdns:server', 'powerdns.server') | 
| Andrey Shestakov | 82c0b89 | 2017-07-24 18:46:21 +0300 | [diff] [blame] | 310 |         } | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 311 |         salt.enforceState(master, 'I@designate:server and *01*', 'designate.server') | 
 | 312 |         salt.enforceState(master, 'I@designate:server', 'designate.server') | 
| Andrey Shestakov | 82c0b89 | 2017-07-24 18:46:21 +0300 | [diff] [blame] | 313 |     } | 
| Elena Ezhova | 8d53bff | 2017-08-01 17:43:30 +0400 | [diff] [blame] | 314 |  | 
 | 315 |     // Install octavia api service | 
 | 316 |     if (salt.testTarget(master, 'I@octavia:api')) { | 
| Marcin Iwinski | b1ac98e | 2018-02-08 10:16:49 +0100 | [diff] [blame] | 317 |         salt.enforceState(master, 'I@octavia:api and *01*', 'octavia') | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 318 |         salt.enforceState(master, 'I@octavia:api', 'octavia') | 
| Elena Ezhova | 8d53bff | 2017-08-01 17:43:30 +0400 | [diff] [blame] | 319 |     } | 
| Marek Celoud | c9dd50f | 2017-08-28 13:54:40 +0200 | [diff] [blame] | 320 |  | 
| Oleg Iurchenko | d0898c9 | 2017-12-14 14:28:44 +0200 | [diff] [blame] | 321 |     // Install DogTag server service | 
 | 322 |     if (salt.testTarget(master, 'I@dogtag:server')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 323 |         salt.enforceState(master, 'I@dogtag:server and *01*', 'dogtag.server') | 
 | 324 |         salt.enforceState(master, 'I@dogtag:server', 'dogtag.server') | 
| Oleg Iurchenko | d0898c9 | 2017-12-14 14:28:44 +0200 | [diff] [blame] | 325 |     } | 
 | 326 |  | 
| Marek Celoud | c9dd50f | 2017-08-28 13:54:40 +0200 | [diff] [blame] | 327 |     // Install barbican server service | 
 | 328 |     if (salt.testTarget(master, 'I@barbican:server')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 329 |         salt.enforceState(master, 'I@barbican:server and *01*', 'barbican.server') | 
 | 330 |         salt.enforceState(master, 'I@barbican:server', 'barbican.server') | 
| Marek Celoud | c9dd50f | 2017-08-28 13:54:40 +0200 | [diff] [blame] | 331 |     } | 
 | 332 |     // Install barbican client | 
 | 333 |     if (salt.testTarget(master, 'I@barbican:client')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 334 |         salt.enforceState(master, 'I@barbican:client', 'barbican.client') | 
| Marek Celoud | c9dd50f | 2017-08-28 13:54:40 +0200 | [diff] [blame] | 335 |     } | 
| Ondrej Smola | 5908ae6 | 2018-01-08 13:42:08 +0100 | [diff] [blame] | 336 |  | 
| Mykyta Karpin | 8185e4a | 2018-02-23 19:15:48 +0200 | [diff] [blame] | 337 |     // Install gnocchi server | 
 | 338 |     if (salt.testTarget(master, 'I@gnocchi:server')) { | 
 | 339 |         salt.enforceState(master, 'I@gnocchi:server', 'gnocchi.server') | 
 | 340 |     } | 
 | 341 |  | 
 | 342 |     // Install gnocchi statsd | 
 | 343 |     if (salt.testTarget(master, 'I@gnocchi:statsd')) { | 
 | 344 |         salt.enforceState(master, 'I@gnocchi:statsd', 'gnocchi.statsd') | 
 | 345 |     } | 
 | 346 |  | 
 | 347 |     // Install panko server | 
 | 348 |     if (salt.testTarget(master, 'I@panko:server')) { | 
 | 349 |         salt.enforceState(master, 'I@panko:server', 'panko') | 
 | 350 |     } | 
 | 351 |  | 
| Ondrej Smola | 5908ae6 | 2018-01-08 13:42:08 +0100 | [diff] [blame] | 352 |     // Install ceilometer server | 
 | 353 |     if (salt.testTarget(master, 'I@ceilometer:server')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 354 |         salt.enforceState(master, 'I@ceilometer:server', 'ceilometer') | 
| Ondrej Smola | 5908ae6 | 2018-01-08 13:42:08 +0100 | [diff] [blame] | 355 |     } | 
 | 356 |  | 
 | 357 |     // Install aodh server | 
 | 358 |     if (salt.testTarget(master, 'I@aodh:server')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 359 |         salt.enforceState(master, 'I@aodh:server', 'aodh') | 
| Ondrej Smola | 5908ae6 | 2018-01-08 13:42:08 +0100 | [diff] [blame] | 360 |     } | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 361 | } | 
 | 362 |  | 
 | 363 |  | 
| Vasyl Saienko | a7c10c0 | 2017-07-13 10:43:43 +0300 | [diff] [blame] | 364 | def installIronicConductor(master){ | 
 | 365 |     def salt = new com.mirantis.mk.Salt() | 
 | 366 |  | 
 | 367 |     if (salt.testTarget(master, 'I@ironic:conductor')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 368 |         salt.enforceState(master, 'I@ironic:conductor', 'ironic.conductor') | 
 | 369 |         salt.enforceState(master, 'I@ironic:conductor', 'apache') | 
| Vasyl Saienko | a7c10c0 | 2017-07-13 10:43:43 +0300 | [diff] [blame] | 370 |     } | 
 | 371 |     if (salt.testTarget(master, 'I@tftpd_hpa:server')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 372 |         salt.enforceState(master, 'I@tftpd_hpa:server', 'tftpd_hpa') | 
| Vasyl Saienko | a7c10c0 | 2017-07-13 10:43:43 +0300 | [diff] [blame] | 373 |     } | 
 | 374 |  | 
 | 375 |     if (salt.testTarget(master, 'I@nova:compute')) { | 
 | 376 |         salt.runSaltProcessStep(master, 'I@nova:compute', 'service.restart', ['nova-compute']) | 
 | 377 |     } | 
 | 378 |  | 
 | 379 |     if (salt.testTarget(master, 'I@baremetal_simulator:enabled')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 380 |         salt.enforceState(master, 'I@baremetal_simulator:enabled', 'baremetal_simulator') | 
| Vasyl Saienko | a7c10c0 | 2017-07-13 10:43:43 +0300 | [diff] [blame] | 381 |     } | 
 | 382 |     if (salt.testTarget(master, 'I@ironic:client')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 383 |         salt.enforceState(master, 'I@ironic:client', 'ironic.client') | 
| Vasyl Saienko | a7c10c0 | 2017-07-13 10:43:43 +0300 | [diff] [blame] | 384 |     } | 
 | 385 | } | 
 | 386 |  | 
| Vasyl Saienko | b7e4cdf | 2018-02-21 18:33:17 +0200 | [diff] [blame] | 387 | def installManilaShare(master){ | 
 | 388 |     def salt = new com.mirantis.mk.Salt() | 
 | 389 |  | 
 | 390 |     if (salt.testTarget(master, 'I@manila:share')) { | 
 | 391 |         salt.enforceState(master, 'I@manila:share', 'manila.share') | 
 | 392 |     } | 
 | 393 |     if (salt.testTarget(master, 'I@manila:data')) { | 
 | 394 |         salt.enforceState(master, 'I@manila:data', 'manila.data') | 
 | 395 |     } | 
 | 396 |  | 
 | 397 |     if (salt.testTarget(master, 'I@manila:client')) { | 
 | 398 |         salt.enforceState(master, 'I@manila:client', 'manila.client') | 
 | 399 |     } | 
 | 400 | } | 
| Vasyl Saienko | a7c10c0 | 2017-07-13 10:43:43 +0300 | [diff] [blame] | 401 |  | 
 | 402 |  | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 403 | def installOpenstackNetwork(master, physical = "false") { | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 404 |     def salt = new com.mirantis.mk.Salt() | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 405 |  | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 406 |     salt.enforceHighstate(master, 'I@neutron:gateway') | 
| Elena Ezhova | 8d53bff | 2017-08-01 17:43:30 +0400 | [diff] [blame] | 407 |  | 
 | 408 |     // install octavia manager services | 
 | 409 |     if (salt.testTarget(master, 'I@octavia:manager')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 410 |         salt.runSaltProcessStep(master, 'I@salt:master', 'mine.update', ['*']) | 
 | 411 |         salt.enforceState(master, 'I@octavia:manager', 'octavia') | 
 | 412 |         salt.enforceState(master, 'I@octavia:manager', 'salt.minion.ca') | 
 | 413 |         salt.enforceState(master, 'I@octavia:manager', 'salt.minion.cert') | 
| Elena Ezhova | 8d53bff | 2017-08-01 17:43:30 +0400 | [diff] [blame] | 414 |     } | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 415 | } | 
 | 416 |  | 
 | 417 |  | 
 | 418 | def installOpenstackCompute(master) { | 
 | 419 |     def salt = new com.mirantis.mk.Salt() | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 420 |     // Configure compute nodes | 
| Sergio Lystopad | cd5b277 | 2018-02-09 14:37:10 +0200 | [diff] [blame] | 421 |     if (salt.testTarget(master, 'I@nova:compute')) { | 
 | 422 |         retry(2) { | 
 | 423 |             salt.enforceHighstateWithExclude(master, 'I@nova:compute', 'opencontrail.client') | 
 | 424 |         } | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 425 |     } | 
 | 426 | } | 
 | 427 |  | 
 | 428 |  | 
 | 429 | def installContrailNetwork(master) { | 
| Martin Polreich | fc9854c | 2017-06-30 11:17:36 +0200 | [diff] [blame] | 430 |     def common = new com.mirantis.mk.Common() | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 431 |     def salt = new com.mirantis.mk.Salt() | 
 | 432 |  | 
 | 433 |  | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 434 |     // Install opencontrail database services | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 435 |     salt.enforceState(master, 'I@opencontrail:database and *01*', 'opencontrail.database') | 
 | 436 |     salt.enforceState(master, 'I@opencontrail:database', 'opencontrail.database') | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 437 |  | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 438 |     // Install opencontrail control services | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 439 |     salt.enforceStateWithExclude(master, "I@opencontrail:control and *01*", "opencontrail", "opencontrail.client") | 
 | 440 |     salt.enforceStateWithExclude(master, "I@opencontrail:control", "opencontrail", "opencontrail.client") | 
 | 441 |     salt.enforceStateWithExclude(master, "I@opencontrail:collector and *01*", "opencontrail", "opencontrail.client") | 
| Tomáš Kukrál | b8e9711 | 2017-03-01 16:03:16 +0100 | [diff] [blame] | 442 |  | 
| Marek Celoud | 443fb64 | 2017-11-22 15:07:12 +0100 | [diff] [blame] | 443 |     if (salt.testTarget(master, 'I@docker:client and I@opencontrail:control')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 444 |         salt.enforceState(master, 'I@opencontrail:control or I@opencontrail:collector', 'docker.client') | 
| Marek Celoud | 443fb64 | 2017-11-22 15:07:12 +0100 | [diff] [blame] | 445 |     } | 
| Jiri Broulik | e3e7bc3 | 2018-02-26 10:50:07 +0100 | [diff] [blame] | 446 |     installBackup(master, 'contrail') | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 447 | } | 
 | 448 |  | 
 | 449 |  | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 450 | def installContrailCompute(master) { | 
| Tomáš Kukrál | 104a07a | 2017-07-13 12:19:11 +0200 | [diff] [blame] | 451 |     def salt = new com.mirantis.mk.Salt() | 
| vrovachev | 32f7f54 | 2017-08-25 16:17:25 +0400 | [diff] [blame] | 452 |     def common = new com.mirantis.mk.Common() | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 453 |     // Configure compute nodes | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 454 |     // Provision opencontrail control services | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 455 |     salt.enforceState(master, 'I@opencontrail:database:id:1', 'opencontrail.client') | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 456 |     // Provision opencontrail virtual routers | 
| Tomáš Kukrál | b8e9711 | 2017-03-01 16:03:16 +0100 | [diff] [blame] | 457 |  | 
| vrovachev | 4ff7730 | 2017-08-09 20:39:57 +0400 | [diff] [blame] | 458 |     // Generate script /usr/lib/contrail/if-vhost0 for up vhost0 | 
| Sergio Lystopad | cd5b277 | 2018-02-09 14:37:10 +0200 | [diff] [blame] | 459 |     if (salt.testTarget(master, 'I@opencontrail:compute')) { | 
 | 460 |         salt.enforceStateWithExclude(master, "I@opencontrail:compute", "opencontrail", "opencontrail.client") | 
 | 461 |     } | 
| vrovachev | 4ff7730 | 2017-08-09 20:39:57 +0400 | [diff] [blame] | 462 |  | 
| Sergio Lystopad | cd5b277 | 2018-02-09 14:37:10 +0200 | [diff] [blame] | 463 |     if (salt.testTarget(master, 'I@nova:compute')) { | 
 | 464 |         salt.cmdRun(master, 'I@nova:compute', 'exec 0>&-; exec 1>&-; exec 2>&-; nohup bash -c "ip link | grep vhost && echo no_reboot || sleep 5 && reboot & "', false) | 
 | 465 |     } | 
| vrovachev | 4ff7730 | 2017-08-09 20:39:57 +0400 | [diff] [blame] | 466 |  | 
| Jakub Josef | 61463c7 | 2018-02-13 16:10:56 +0100 | [diff] [blame] | 467 |     sleep(300) | 
| vrovachev | 4ff7730 | 2017-08-09 20:39:57 +0400 | [diff] [blame] | 468 |     if (salt.testTarget(master, 'I@opencontrail:compute')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 469 |         salt.enforceState(master, 'I@opencontrail:compute', 'opencontrail.client') | 
 | 470 |         salt.enforceState(master, 'I@opencontrail:compute', 'opencontrail') | 
| vrovachev | 4ff7730 | 2017-08-09 20:39:57 +0400 | [diff] [blame] | 471 |     } | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 472 | } | 
 | 473 |  | 
 | 474 |  | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 475 | def installKubernetesInfra(master) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 476 |     def common = new com.mirantis.mk.Common() | 
 | 477 |     common.warningMsg("You calling orchestrate.installKubernetesInfra(). This function is deprecated please use orchestrate.installInfra() directly") | 
 | 478 |     installInfra(master) | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 479 | } | 
 | 480 |  | 
 | 481 |  | 
| Tomáš Kukrál | c1a1bbc | 2017-04-28 21:16:25 +0200 | [diff] [blame] | 482 | def installKubernetesControl(master) { | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 483 |     def salt = new com.mirantis.mk.Salt() | 
| Tomáš Kukrál | b05cf00 | 2017-05-02 11:05:43 +0200 | [diff] [blame] | 484 |  | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 485 |     // Install Kubernetes pool and Calico | 
| Tomáš Kukrál | b05cf00 | 2017-05-02 11:05:43 +0200 | [diff] [blame] | 486 |     salt.enforceState(master, 'I@kubernetes:master', 'kubernetes.master.kube-addons') | 
 | 487 |     salt.enforceState(master, 'I@kubernetes:pool', 'kubernetes.pool') | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 488 |  | 
| Marek Celoud | 029391c | 2017-11-14 10:06:18 +0100 | [diff] [blame] | 489 |     if (salt.testTarget(master, 'I@etcd:server:setup')) { | 
 | 490 |         // Setup etcd server | 
 | 491 |         salt.enforceState(master, 'I@kubernetes:master and *01*', 'etcd.server.setup') | 
 | 492 |     } | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 493 |  | 
 | 494 |     // Run k8s without master.setup | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 495 |     salt.enforceStateWithExclude(master, 'I@kubernetes:master', "kubernetes", "kubernetes.master.setup") | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 496 |  | 
 | 497 |     // Run k8s master setup | 
| Tomáš Kukrál | b05cf00 | 2017-05-02 11:05:43 +0200 | [diff] [blame] | 498 |     salt.enforceState(master, 'I@kubernetes:master and *01*', 'kubernetes.master.setup') | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 499 |  | 
 | 500 |     // Restart kubelet | 
 | 501 |     salt.runSaltProcessStep(master, 'I@kubernetes:pool', 'service.restart', ['kubelet']) | 
 | 502 | } | 
 | 503 |  | 
 | 504 |  | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 505 | def installKubernetesCompute(master) { | 
| Tomáš Kukrál | a53b535 | 2017-05-04 11:45:53 +0200 | [diff] [blame] | 506 |     def salt = new com.mirantis.mk.Salt() | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 507 |     salt.fullRefresh(master, "*") | 
| Tomáš Kukrál | e7e2896 | 2017-06-06 11:11:16 +0200 | [diff] [blame] | 508 |  | 
 | 509 |     // Bootstrap all nodes | 
 | 510 |     salt.enforceState(master, 'I@kubernetes:pool', 'linux') | 
 | 511 |     salt.enforceState(master, 'I@kubernetes:pool', 'salt.minion') | 
 | 512 |     salt.enforceState(master, 'I@kubernetes:pool', ['openssh', 'ntp']) | 
 | 513 |  | 
 | 514 |     // Create and distribute SSL certificates for services using salt state | 
 | 515 |     salt.enforceState(master, 'I@kubernetes:pool', 'salt.minion.cert') | 
 | 516 |  | 
 | 517 |     // Install docker | 
 | 518 |     salt.enforceState(master, 'I@docker:host', 'docker.host') | 
 | 519 |  | 
 | 520 |     // Install Kubernetes and Calico | 
 | 521 |     salt.enforceState(master, 'I@kubernetes:pool', 'kubernetes.pool') | 
 | 522 |  | 
| Yuriy Taraday | ab564d7 | 2017-10-11 15:14:35 +0400 | [diff] [blame] | 523 |     // Install Tiller and all configured releases | 
 | 524 |     if (salt.testTarget(master, 'I@helm:client')) { | 
 | 525 |         salt.enforceState(master, 'I@helm:client', 'helm') | 
 | 526 |     } | 
| Tomáš Kukrál | e7e2896 | 2017-06-06 11:11:16 +0200 | [diff] [blame] | 527 | } | 
 | 528 |  | 
 | 529 |  | 
| Martin Polreich | 8663a34 | 2017-06-30 17:33:08 +0200 | [diff] [blame] | 530 | def installDockerSwarm(master) { | 
 | 531 |     def salt = new com.mirantis.mk.Salt() | 
| Jakub Josef | 79ecec3 | 2017-02-17 14:36:28 +0100 | [diff] [blame] | 532 |  | 
| vrovachev | 1c4770b | 2017-07-05 13:25:21 +0400 | [diff] [blame] | 533 |     //Install and Configure Docker | 
| Martin Polreich | 8663a34 | 2017-06-30 17:33:08 +0200 | [diff] [blame] | 534 |     salt.enforceState(master, 'I@docker:swarm', 'docker.host') | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 535 |     salt.enforceState(master, 'I@docker:swarm:role:master', 'docker.swarm') | 
 | 536 |     salt.enforceState(master, 'I@docker:swarm', 'salt.minion.grains') | 
 | 537 |     salt.runSaltProcessStep(master, 'I@docker:swarm', 'mine.update') | 
 | 538 |     salt.runSaltProcessStep(master, 'I@docker:swarm', 'saltutil.refresh_modules') | 
| Martin Polreich | 8663a34 | 2017-06-30 17:33:08 +0200 | [diff] [blame] | 539 |     sleep(5) | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 540 |     salt.enforceState(master, 'I@docker:swarm:role:master', 'docker.swarm') | 
 | 541 |     salt.enforceState(master, 'I@docker:swarm:role:manager', 'docker.swarm') | 
| Jakub Josef | 61463c7 | 2018-02-13 16:10:56 +0100 | [diff] [blame] | 542 |     sleep(10) | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 543 |     salt.cmdRun(master, 'I@docker:swarm:role:master', 'docker node ls') | 
| Martin Polreich | 8663a34 | 2017-06-30 17:33:08 +0200 | [diff] [blame] | 544 | } | 
 | 545 |  | 
| Jiri Broulik | b9a0c59 | 2017-09-05 16:41:48 +0200 | [diff] [blame] | 546 |  | 
 | 547 | def installCicd(master) { | 
 | 548 |     def salt = new com.mirantis.mk.Salt() | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 549 |     salt.fullRefresh(master, 'I@jenkins:client or I@gerrit:client') | 
| Richard Felkl | 9d2cd92 | 2017-11-03 11:49:32 +0100 | [diff] [blame] | 550 |  | 
| Richard Felkl | c1aba9b | 2018-01-02 09:25:20 +0100 | [diff] [blame] | 551 |     if (salt.testTarget(master, 'I@aptly:publisher')) { | 
 | 552 |         salt.enforceState(master, 'I@aptly:publisher', 'aptly.publisher',true, null, false, -1, 2) | 
 | 553 |     } | 
 | 554 |  | 
| Richard Felkl | 6de1676 | 2017-11-20 11:42:28 +0100 | [diff] [blame] | 555 |     salt.enforceState(master, 'I@docker:swarm:role:master and I@jenkins:client', 'docker.client', true, true, null, false, -1, 2) | 
| Jiri Broulik | e57a024 | 2017-10-06 13:38:47 +0200 | [diff] [blame] | 556 |     sleep(500) | 
| Richard Felkl | c1aba9b | 2018-01-02 09:25:20 +0100 | [diff] [blame] | 557 |  | 
 | 558 |     if (salt.testTarget(master, 'I@aptly:server')) { | 
 | 559 |         salt.enforceState(master, 'I@aptly:server', 'aptly', true, true, null, false, -1, 2) | 
 | 560 |     } | 
 | 561 |  | 
 | 562 |     if (salt.testTarget(master, 'I@openldap:client')) { | 
 | 563 |         salt.enforceState(master, 'I@openldap:client', 'openldap', true, true, null, false, -1, 2) | 
 | 564 |     } | 
| Richard Felkl | b6fdec9 | 2017-09-26 10:52:36 +0200 | [diff] [blame] | 565 |  | 
 | 566 |     if (salt.testTarget(master, 'I@python:environment')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 567 |         salt.enforceState(master, 'I@python:environment', 'python') | 
| Richard Felkl | b6fdec9 | 2017-09-26 10:52:36 +0200 | [diff] [blame] | 568 |     } | 
| Richard Felkl | c1aba9b | 2018-01-02 09:25:20 +0100 | [diff] [blame] | 569 |  | 
| Richard Felkl | 6e208fc | 2017-12-08 10:18:44 +0100 | [diff] [blame] | 570 |     withEnv(['ASK_ON_ERROR=false']){ | 
 | 571 |         retry(2){ | 
 | 572 |             try{ | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 573 |                 salt.enforceState(master, 'I@gerrit:client', 'gerrit') | 
| Richard Felkl | 6e208fc | 2017-12-08 10:18:44 +0100 | [diff] [blame] | 574 |             }catch(e){ | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 575 |                 salt.fullRefresh(master, 'I@gerrit:client') | 
| Richard Felkl | 6e208fc | 2017-12-08 10:18:44 +0100 | [diff] [blame] | 576 |                 throw e //rethrow for retry handler | 
 | 577 |             } | 
 | 578 |         } | 
 | 579 |         retry(2){ | 
 | 580 |             try{ | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 581 |                 salt.enforceState(master, 'I@jenkins:client', 'jenkins') | 
| Richard Felkl | 6e208fc | 2017-12-08 10:18:44 +0100 | [diff] [blame] | 582 |             }catch(e){ | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 583 |                 salt.fullRefresh(master, 'I@jenkins:client') | 
| Richard Felkl | 6e208fc | 2017-12-08 10:18:44 +0100 | [diff] [blame] | 584 |                 throw e //rethrow for retry handler | 
 | 585 |             } | 
 | 586 |         } | 
 | 587 |     } | 
| Jiri Broulik | b9a0c59 | 2017-09-05 16:41:48 +0200 | [diff] [blame] | 588 | } | 
 | 589 |  | 
 | 590 |  | 
| Martin Polreich | 8663a34 | 2017-06-30 17:33:08 +0200 | [diff] [blame] | 591 | def installStacklight(master) { | 
 | 592 |     def common = new com.mirantis.mk.Common() | 
 | 593 |     def salt = new com.mirantis.mk.Salt() | 
 | 594 |  | 
| Simon Pasquier | ef4122c | 2017-08-25 15:52:07 +0200 | [diff] [blame] | 595 |     // Install core services for K8S environments: | 
 | 596 |     // HAProxy, Nginx and lusterFS clients | 
 | 597 |     // In case of OpenStack, those are already installed | 
| Martin Polreich | 792f266 | 2017-07-11 13:36:32 +0200 | [diff] [blame] | 598 |     if (common.checkContains('STACK_INSTALL', 'k8s')) { | 
 | 599 |         salt.enforceState(master, 'I@haproxy:proxy', 'haproxy') | 
 | 600 |         salt.runSaltProcessStep(master, 'I@haproxy:proxy', 'service.status', ['haproxy']) | 
| Simon Pasquier | ef4122c | 2017-08-25 15:52:07 +0200 | [diff] [blame] | 601 |  | 
 | 602 |         if (salt.testTarget(master, 'I@nginx:server')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 603 |             salt.enforceState(master, 'I@nginx:server', 'nginx') | 
| Simon Pasquier | ef4122c | 2017-08-25 15:52:07 +0200 | [diff] [blame] | 604 |         } | 
 | 605 |  | 
 | 606 |         if (salt.testTarget(master, 'I@glusterfs:client')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 607 |             salt.enforceState(master, 'I@glusterfs:client', 'glusterfs.client') | 
| Simon Pasquier | ef4122c | 2017-08-25 15:52:07 +0200 | [diff] [blame] | 608 |         } | 
| Martin Polreich | 792f266 | 2017-07-11 13:36:32 +0200 | [diff] [blame] | 609 |     } | 
| Jiri Broulik | e57a024 | 2017-10-06 13:38:47 +0200 | [diff] [blame] | 610 |  | 
 | 611 |     // Launch containers | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 612 |     salt.enforceState(master, 'I@docker:swarm:role:master and I@prometheus:server', 'docker.client') | 
 | 613 |     salt.runSaltProcessStep(master, 'I@docker:swarm and I@prometheus:server', 'dockerng.ps') | 
| Jiri Broulik | e57a024 | 2017-10-06 13:38:47 +0200 | [diff] [blame] | 614 |  | 
| Martin Polreich | 8663a34 | 2017-06-30 17:33:08 +0200 | [diff] [blame] | 615 |     //Install Telegraf | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 616 |     salt.enforceState(master, 'I@telegraf:agent or I@telegraf:remote_agent', 'telegraf') | 
| Martin Polreich | 8663a34 | 2017-06-30 17:33:08 +0200 | [diff] [blame] | 617 |  | 
| Dmitry Kalashnik | ebc1e1e | 2017-07-13 14:20:08 +0400 | [diff] [blame] | 618 |     // Install Prometheus exporters | 
 | 619 |     if (salt.testTarget(master, 'I@prometheus:exporters')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 620 |         salt.enforceState(master, 'I@prometheus:exporters', 'prometheus') | 
| Dmitry Kalashnik | ebc1e1e | 2017-07-13 14:20:08 +0400 | [diff] [blame] | 621 |     } | 
 | 622 |  | 
| Martin Polreich | 8663a34 | 2017-06-30 17:33:08 +0200 | [diff] [blame] | 623 |     //Install Elasticsearch and Kibana | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 624 |     salt.enforceState(master, '*01* and  I@elasticsearch:server', 'elasticsearch.server') | 
 | 625 |     salt.enforceState(master, 'I@elasticsearch:server', 'elasticsearch.server') | 
 | 626 |     salt.enforceState(master, '*01* and I@kibana:server', 'kibana.server') | 
 | 627 |     salt.enforceState(master, 'I@kibana:server', 'kibana.server') | 
 | 628 |     salt.enforceState(master, 'I@elasticsearch:client', 'elasticsearch.client') | 
 | 629 |     salt.enforceState(master, 'I@kibana:client', 'kibana.client') | 
 | 630 |     salt.enforceState(master, '*01* and I@influxdb:server', 'influxdb') | 
 | 631 |     salt.enforceState(master, 'I@influxdb:server', 'influxdb') | 
| Martin Polreich | 8663a34 | 2017-06-30 17:33:08 +0200 | [diff] [blame] | 632 |  | 
| Ildar Svetlov | 794f89e | 2018-02-14 16:28:53 +0400 | [diff] [blame] | 633 |     // Install service for the log collection | 
 | 634 |     if (salt.testTarget(master, 'I@fluentd:agent')) { | 
 | 635 |         salt.enforceState(master, 'I@fluentd:agent', 'fluentd') | 
 | 636 |     } else { | 
 | 637 |         salt.enforceState(master, 'I@heka:log_collector', 'heka.log_collector') | 
 | 638 |     } | 
| Simon Pasquier | 6301ddd | 2017-09-05 11:56:58 +0200 | [diff] [blame] | 639 |  | 
| Ondrej Smola | 5908ae6 | 2018-01-08 13:42:08 +0100 | [diff] [blame] | 640 |     // Install heka ceilometer collector | 
 | 641 |     if (salt.testTarget(master, 'I@heka:ceilometer_collector:enabled')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 642 |         salt.enforceState(master, 'I@heka:ceilometer_collector:enabled', 'heka.ceilometer_collector') | 
| Ondrej Smola | 5908ae6 | 2018-01-08 13:42:08 +0100 | [diff] [blame] | 643 |         salt.runSaltProcessStep(master, 'I@heka:ceilometer_collector:enabled', 'service.restart', ['ceilometer_collector'], null, true) | 
 | 644 |     } | 
 | 645 |  | 
| Martin Polreich | 470925a | 2017-07-06 17:12:59 +0200 | [diff] [blame] | 646 |     // Install galera | 
| Martin Polreich | 792f266 | 2017-07-11 13:36:32 +0200 | [diff] [blame] | 647 |     if (common.checkContains('STACK_INSTALL', 'k8s')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 648 |         salt.enforceState(master, 'I@galera:master', 'galera', true, true, null, false, -1, 2) | 
| Jakub Josef | 9994ea7 | 2018-03-05 13:23:07 +0100 | [diff] [blame] | 649 |         salt.enforceState(master, 'I@galera:slave', 'galera', true, true, null, false, -1, 2) | 
| Martin Polreich | 406f646 | 2017-07-11 11:33:42 +0000 | [diff] [blame] | 650 |  | 
| Martin Polreich | 792f266 | 2017-07-11 13:36:32 +0200 | [diff] [blame] | 651 |         // Check galera status | 
 | 652 |         salt.runSaltProcessStep(master, 'I@galera:master', 'mysql.status') | 
 | 653 |         salt.runSaltProcessStep(master, 'I@galera:slave', 'mysql.status') | 
 | 654 |     } | 
| Martin Polreich | 470925a | 2017-07-06 17:12:59 +0200 | [diff] [blame] | 655 |  | 
| Martin Polreich | 8663a34 | 2017-06-30 17:33:08 +0200 | [diff] [blame] | 656 |     //Collect Grains | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 657 |     salt.enforceState(master, 'I@salt:minion', 'salt.minion.grains') | 
 | 658 |     salt.runSaltProcessStep(master, 'I@salt:minion', 'saltutil.refresh_modules') | 
 | 659 |     salt.runSaltProcessStep(master, 'I@salt:minion', 'mine.update') | 
| Martin Polreich | 8663a34 | 2017-06-30 17:33:08 +0200 | [diff] [blame] | 660 |     sleep(5) | 
 | 661 |  | 
| Ildar Svetlov | 794f89e | 2018-02-14 16:28:53 +0400 | [diff] [blame] | 662 |     // Configure Prometheus in Docker Swarm | 
 | 663 |     salt.enforceState(master, 'I@docker:swarm and I@prometheus:server', 'prometheus', true, false) | 
 | 664 |  | 
| Ildar Svetlov | 0eec97d | 2018-02-15 10:06:40 +0400 | [diff] [blame] | 665 |     //Configure Remote Collector in Docker Swarm for Openstack deployments | 
| Ildar Svetlov | 794f89e | 2018-02-14 16:28:53 +0400 | [diff] [blame] | 666 |     if (!common.checkContains('STACK_INSTALL', 'k8s')) { | 
| Ildar Svetlov | 0eec97d | 2018-02-15 10:06:40 +0400 | [diff] [blame] | 667 |         salt.enforceState(master, 'I@docker:swarm and I@prometheus:server', 'heka.remote_collector', true, false) | 
| Martin Polreich | 8017f45 | 2017-08-21 16:01:42 +0200 | [diff] [blame] | 668 |     } | 
| Martin Polreich | 8663a34 | 2017-06-30 17:33:08 +0200 | [diff] [blame] | 669 |  | 
| Jiri Broulik | e3e7bc3 | 2018-02-26 10:50:07 +0100 | [diff] [blame] | 670 |     // Install sphinx server | 
 | 671 |     if (salt.testTarget(master, 'I@sphinx:server')) { | 
 | 672 |         salt.enforceState(master, 'I@sphinx:server', 'sphinx') | 
 | 673 |     } | 
 | 674 |  | 
| Martin Polreich | 8663a34 | 2017-06-30 17:33:08 +0200 | [diff] [blame] | 675 |     //Configure Grafana | 
| Martin Polreich | 305e222 | 2017-07-06 11:33:00 +0200 | [diff] [blame] | 676 |     def pillar = salt.getPillar(master, 'ctl01*', '_param:stacklight_monitor_address') | 
| Martin Polreich | 8663a34 | 2017-06-30 17:33:08 +0200 | [diff] [blame] | 677 |     common.prettyPrint(pillar) | 
| Martin Polreich | 595baef | 2017-07-04 16:11:04 +0200 | [diff] [blame] | 678 |  | 
| Martin Polreich | 8663a34 | 2017-06-30 17:33:08 +0200 | [diff] [blame] | 679 |     def stacklight_vip | 
 | 680 |     if(!pillar['return'].isEmpty()) { | 
 | 681 |         stacklight_vip = pillar['return'][0].values()[0] | 
 | 682 |     } else { | 
 | 683 |         common.errorMsg('[ERROR] Stacklight VIP address could not be retrieved') | 
 | 684 |     } | 
| vrovachev | 1c4770b | 2017-07-05 13:25:21 +0400 | [diff] [blame] | 685 |  | 
| Martin Polreich | 305e222 | 2017-07-06 11:33:00 +0200 | [diff] [blame] | 686 |     common.infoMsg("Waiting for service on http://${stacklight_vip}:15013/ to start") | 
| Martin Polreich | bd7ad22 | 2017-07-06 12:53:51 +0200 | [diff] [blame] | 687 |     sleep(120) | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 688 |     salt.enforceState(master, 'I@grafana:client', 'grafana.client') | 
| Martin Polreich | 8663a34 | 2017-06-30 17:33:08 +0200 | [diff] [blame] | 689 | } | 
 | 690 |  | 
 | 691 | def installStacklightv1Control(master) { | 
| Tomáš Kukrál | a53b535 | 2017-05-04 11:45:53 +0200 | [diff] [blame] | 692 |     def salt = new com.mirantis.mk.Salt() | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 693 |  | 
 | 694 |     // infra install | 
 | 695 |     // Install the StackLight backends | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 696 |     salt.enforceState(master, '*01* and  I@elasticsearch:server', 'elasticsearch.server') | 
 | 697 |     salt.enforceState(master, 'I@elasticsearch:server', 'elasticsearch.server') | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 698 |  | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 699 |     salt.enforceState(master, '*01* and I@influxdb:server', 'influxdb') | 
 | 700 |     salt.enforceState(master, 'I@influxdb:server', 'influxdb') | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 701 |  | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 702 |     salt.enforceState(master, '*01* and I@kibana:server', 'kibana.server') | 
 | 703 |     salt.enforceState(master, 'I@kibana:server', 'kibana.server') | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 704 |  | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 705 |     salt.enforceState(master, '*01* and I@grafana:server','grafana.server') | 
 | 706 |     salt.enforceState(master, 'I@grafana:server','grafana.server') | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 707 |  | 
| Kalynovskyi | 3e37011 | 2017-06-26 12:48:23 +0300 | [diff] [blame] | 708 |     def alarming_service_pillar = salt.getPillar(master, 'mon*01*', '_param:alarming_service') | 
 | 709 |     def alarming_service = alarming_service_pillar['return'][0].values()[0] | 
 | 710 |  | 
 | 711 |     switch (alarming_service) { | 
 | 712 |         case 'sensu': | 
 | 713 |             // Update Sensu | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 714 |             salt.enforceState(master, 'I@sensu:server and I@rabbitmq:server', 'rabbitmq') | 
 | 715 |             salt.enforceState(master, 'I@redis:cluster:role:master', 'redis') | 
 | 716 |             salt.enforceState(master, 'I@redis:server', 'redis') | 
 | 717 |             salt.enforceState(master, 'I@sensu:server', 'sensu') | 
| Kalynovskyi | 3e37011 | 2017-06-26 12:48:23 +0300 | [diff] [blame] | 718 |         default: | 
 | 719 |             // Update Nagios | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 720 |             salt.enforceState(master, 'I@nagios:server', 'nagios.server') | 
| Kalynovskyi | 3e37011 | 2017-06-26 12:48:23 +0300 | [diff] [blame] | 721 |             // Stop the Nagios service because the package starts it by default and it will | 
 | 722 |             // started later only on the node holding the VIP address | 
 | 723 |             salt.runSaltProcessStep(master, 'I@nagios:server', 'service.stop', ['nagios3'], null, true) | 
 | 724 |     } | 
 | 725 |  | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 726 |     salt.enforceState(master, 'I@elasticsearch:client', 'elasticsearch.client.service') | 
 | 727 |     salt.enforceState(master, 'I@kibana:client', 'kibana.client') | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 728 |  | 
 | 729 |     sleep(10) | 
 | 730 | } | 
 | 731 |  | 
| Martin Polreich | 8663a34 | 2017-06-30 17:33:08 +0200 | [diff] [blame] | 732 | def installStacklightv1Client(master) { | 
| Tomáš Kukrál | a53b535 | 2017-05-04 11:45:53 +0200 | [diff] [blame] | 733 |     def salt = new com.mirantis.mk.Salt() | 
 | 734 |     def common = new com.mirantis.mk.Common() | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 735 |  | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 736 |     salt.cmdRun(master, 'I@elasticsearch:client', 'salt-call state.sls elasticsearch.client') | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 737 |     // salt.enforceState(master, 'I@elasticsearch:client', 'elasticsearch.client', true) | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 738 |     salt.cmdRun(master, 'I@kibana:client', 'salt-call state.sls kibana.client') | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 739 |     // salt.enforceState(master, 'I@kibana:client', 'kibana.client', true) | 
 | 740 |  | 
 | 741 |     // Install collectd, heka and sensu services on the nodes, this will also | 
 | 742 |     // generate the metadata that goes into the grains and eventually into Salt Mine | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 743 |     salt.enforceState(master, '*', 'collectd') | 
 | 744 |     salt.enforceState(master, '*', 'salt.minion') | 
 | 745 |     salt.enforceState(master, '*', 'heka') | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 746 |  | 
 | 747 |     // Gather the Grafana metadata as grains | 
 | 748 |     salt.enforceState(master, 'I@grafana:collector', 'grafana.collector', true) | 
 | 749 |  | 
 | 750 |     // Update Salt Mine | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 751 |     salt.enforceState(master, '*', 'salt.minion.grains') | 
 | 752 |     salt.runSaltProcessStep(master, '*', 'saltutil.refresh_modules') | 
 | 753 |     salt.runSaltProcessStep(master, '*', 'mine.update') | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 754 |  | 
 | 755 |     sleep(5) | 
 | 756 |  | 
 | 757 |     // Update Heka | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 758 |     salt.enforceState(master, 'I@heka:aggregator:enabled:True or I@heka:remote_collector:enabled:True', 'heka') | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 759 |  | 
 | 760 |     // Update collectd | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 761 |     salt.enforceState(master, 'I@collectd:remote_client:enabled:True', 'collectd') | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 762 |  | 
| Kalynovskyi | 3e37011 | 2017-06-26 12:48:23 +0300 | [diff] [blame] | 763 |     def alarming_service_pillar = salt.getPillar(master, 'mon*01*', '_param:alarming_service') | 
 | 764 |     def alarming_service = alarming_service_pillar['return'][0].values()[0] | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 765 |  | 
| Kalynovskyi | 3e37011 | 2017-06-26 12:48:23 +0300 | [diff] [blame] | 766 |     switch (alarming_service) { | 
 | 767 |         case 'sensu': | 
 | 768 |             // Update Sensu | 
 | 769 |             // TODO for stacklight team, should be fixed in model | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 770 |             salt.enforceState(master, 'I@sensu:client', 'sensu') | 
| Kalynovskyi | 3e37011 | 2017-06-26 12:48:23 +0300 | [diff] [blame] | 771 |         default: | 
 | 772 |             break | 
 | 773 |             // Default is nagios, and was enforced in installStacklightControl() | 
 | 774 |     } | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 775 |  | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 776 |     salt.cmdRun(master, 'I@grafana:client and *01*', 'salt-call state.sls grafana.client') | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 777 |     // salt.enforceState(master, 'I@grafana:client and *01*', 'grafana.client', true) | 
 | 778 |  | 
| Marek Celoud | d200cad | 2017-06-07 10:34:46 +0200 | [diff] [blame] | 779 |     // Finalize the configuration of Grafana (add the dashboards...) | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 780 |     salt.enforceState(master, 'I@grafana:client and *01*', 'grafana.client') | 
 | 781 |     salt.enforceState(master, 'I@grafana:client and *02*', 'grafana.client') | 
 | 782 |     salt.enforceState(master, 'I@grafana:client and *03*', 'grafana.client') | 
| Marek Celoud | d200cad | 2017-06-07 10:34:46 +0200 | [diff] [blame] | 783 |     // nw salt -C 'I@grafana:client' --async service.restart salt-minion; sleep 10 | 
 | 784 |  | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 785 |     // Get the StackLight monitoring VIP addres | 
 | 786 |     //vip=$(salt-call pillar.data _param:stacklight_monitor_address --out key|grep _param: |awk '{print $2}') | 
 | 787 |     //vip=${vip:=172.16.10.253} | 
 | 788 |     def pillar = salt.getPillar(master, 'ctl01*', '_param:stacklight_monitor_address') | 
| Jakub Josef | bceaa32 | 2017-06-13 18:28:27 +0200 | [diff] [blame] | 789 |     common.prettyPrint(pillar) | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 790 |     def stacklight_vip = pillar['return'][0].values()[0] | 
 | 791 |  | 
 | 792 |     if (stacklight_vip) { | 
 | 793 |         // (re)Start manually the services that are bound to the monitoring VIP | 
 | 794 |         common.infoMsg("restart services on node with IP: ${stacklight_vip}") | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 795 |         salt.runSaltProcessStep(master, "G@ipv4:${stacklight_vip}", 'service.restart', ['remote_collectd']) | 
 | 796 |         salt.runSaltProcessStep(master, "G@ipv4:${stacklight_vip}", 'service.restart', ['remote_collector']) | 
 | 797 |         salt.runSaltProcessStep(master, "G@ipv4:${stacklight_vip}", 'service.restart', ['aggregator']) | 
 | 798 |         salt.runSaltProcessStep(master, "G@ipv4:${stacklight_vip}", 'service.restart', ['nagios3']) | 
| Ales Komarek | ef2bab6 | 2017-04-26 11:48:28 +0200 | [diff] [blame] | 799 |     } else { | 
 | 800 |         throw new Exception("Missing stacklight_vip") | 
 | 801 |     } | 
| Tomáš Kukrál | f06ca0f | 2017-02-27 15:18:50 +0100 | [diff] [blame] | 802 | } | 
| Tomáš Kukrál | 64f8e1c | 2017-08-11 10:32:20 +0200 | [diff] [blame] | 803 |  | 
| Jiri Broulik | e3e7bc3 | 2018-02-26 10:50:07 +0100 | [diff] [blame] | 804 | // | 
 | 805 | // backups | 
 | 806 | // | 
 | 807 |  | 
 | 808 | def installBackup(master, component='common') { | 
 | 809 |     def salt = new com.mirantis.mk.Salt() | 
 | 810 |     if (component == 'common') { | 
 | 811 |         // Install Backupninja | 
 | 812 |         if (salt.testTarget(master, 'I@backupninja:client')) { | 
 | 813 |             salt.enforceState(master, 'I@backupninja:client', 'salt.minion.grains') | 
 | 814 |             salt.runSaltProcessStep(master, 'I@backupninja:client', 'saltutil.sync_grains') | 
| Jiri Broulik | 9e578da | 2018-03-01 13:15:53 +0100 | [diff] [blame] | 815 |             salt.runSaltProcessStep(master, 'I@backupninja:client', 'mine.flush') | 
| Jiri Broulik | e3e7bc3 | 2018-02-26 10:50:07 +0100 | [diff] [blame] | 816 |             salt.runSaltProcessStep(master, 'I@backupninja:client', 'mine.update') | 
| Jiri Broulik | be6898c | 2018-03-01 13:01:48 +0100 | [diff] [blame] | 817 |             salt.enforceState(master, 'I@backupninja:client', 'backupninja') | 
| Jiri Broulik | e3e7bc3 | 2018-02-26 10:50:07 +0100 | [diff] [blame] | 818 |         } | 
 | 819 |         if (salt.testTarget(master, 'I@backupninja:server')) { | 
| Jiri Broulik | 9e578da | 2018-03-01 13:15:53 +0100 | [diff] [blame] | 820 |             salt.enforceState(master, 'I@backupninja:server', 'salt.minion.grains') | 
| Jiri Broulik | be6898c | 2018-03-01 13:01:48 +0100 | [diff] [blame] | 821 |             salt.enforceState(master, 'I@backupninja:server', 'backupninja') | 
| Jiri Broulik | e3e7bc3 | 2018-02-26 10:50:07 +0100 | [diff] [blame] | 822 |         } | 
 | 823 |     } else if (component == 'mysql') { | 
 | 824 |         // Install Xtrabackup | 
 | 825 |         if (salt.testTarget(master, 'I@xtrabackup:client')) { | 
 | 826 |             salt.enforceState(master, 'I@xtrabackup:client', 'salt.minion.grains') | 
 | 827 |             salt.runSaltProcessStep(master, 'I@xtrabackup:client', 'saltutil.sync_grains') | 
| Jiri Broulik | 9e578da | 2018-03-01 13:15:53 +0100 | [diff] [blame] | 828 |             salt.runSaltProcessStep(master, 'I@xtrabackup:client', 'mine.flush') | 
| Jiri Broulik | e3e7bc3 | 2018-02-26 10:50:07 +0100 | [diff] [blame] | 829 |             salt.runSaltProcessStep(master, 'I@xtrabackup:client', 'mine.update') | 
 | 830 |             salt.enforceState(master, 'I@xtrabackup:client', 'xtrabackup') | 
 | 831 |         } | 
 | 832 |         if (salt.testTarget(master, 'I@xtrabackup:server')) { | 
 | 833 |             salt.enforceState(master, 'I@xtrabackup:server', 'xtrabackup') | 
 | 834 |         } | 
 | 835 |     } else if (component == 'contrail') { | 
 | 836 |  | 
 | 837 |         // Install Cassandra backup | 
 | 838 |         if (salt.testTarget(master, 'I@cassandra:backup:client')) { | 
 | 839 |             salt.enforceState(master, 'I@cassandra:backup:client', 'salt.minion.grains') | 
 | 840 |             salt.runSaltProcessStep(master, 'I@cassandra:backup:client', 'saltutil.sync_grains') | 
| Jiri Broulik | 9e578da | 2018-03-01 13:15:53 +0100 | [diff] [blame] | 841 |             salt.runSaltProcessStep(master, 'I@cassandra:backup:client', 'mine.flush') | 
| Jiri Broulik | e3e7bc3 | 2018-02-26 10:50:07 +0100 | [diff] [blame] | 842 |             salt.runSaltProcessStep(master, 'I@cassandra:backup:client', 'mine.update') | 
 | 843 |             salt.enforceState(master, 'I@cassandra:backup:client', 'cassandra.backup') | 
 | 844 |         } | 
 | 845 |         if (salt.testTarget(master, 'I@cassandra:backup:server')) { | 
 | 846 |             salt.enforceState(master, 'I@cassandra:backup:server', 'cassandra.backup') | 
 | 847 |         } | 
 | 848 |         // Install Zookeeper backup | 
 | 849 |         if (salt.testTarget(master, 'I@zookeeper:backup:client')) { | 
 | 850 |             salt.enforceState(master, 'I@zookeeper:backup:client', 'salt.minion.grains') | 
 | 851 |             salt.runSaltProcessStep(master, 'I@zookeeper:backup:client', 'saltutil.sync_grains') | 
| Jiri Broulik | 9e578da | 2018-03-01 13:15:53 +0100 | [diff] [blame] | 852 |             salt.runSaltProcessStep(master, 'I@zookeeper:backup:client', 'mine.flush') | 
| Jiri Broulik | e3e7bc3 | 2018-02-26 10:50:07 +0100 | [diff] [blame] | 853 |             salt.runSaltProcessStep(master, 'I@zookeeper:backup:client', 'mine.update') | 
 | 854 |             salt.enforceState(master, 'I@zookeeper:backup:client', 'zookeeper.backup') | 
 | 855 |         } | 
 | 856 |         if (salt.testTarget(master, 'I@zookeeper:backup:server')) { | 
 | 857 |             salt.enforceState(master, 'I@zookeeper:backup:server', 'zookeeper.backup') | 
 | 858 |         } | 
 | 859 |     } else if (component == 'ceph') { | 
 | 860 |         // Install Ceph backup | 
 | 861 |         if (salt.testTarget(master, 'I@ceph:backup:client')) { | 
 | 862 |             salt.enforceState(master, 'I@ceph:backup:client', 'salt.minion.grains') | 
 | 863 |             salt.runSaltProcessStep(master, 'I@ceph:backup:client', 'saltutil.sync_grains') | 
| Jiri Broulik | 9e578da | 2018-03-01 13:15:53 +0100 | [diff] [blame] | 864 |             salt.runSaltProcessStep(master, 'I@ceph:backup:client', 'mine.flush') | 
| Jiri Broulik | e3e7bc3 | 2018-02-26 10:50:07 +0100 | [diff] [blame] | 865 |             salt.runSaltProcessStep(master, 'I@ceph:backup:client', 'mine.update') | 
| Jiri Broulik | be6898c | 2018-03-01 13:01:48 +0100 | [diff] [blame] | 866 |             salt.enforceState(master, 'I@ceph:backup:client', 'ceph.backup') | 
| Jiri Broulik | e3e7bc3 | 2018-02-26 10:50:07 +0100 | [diff] [blame] | 867 |         } | 
 | 868 |         if (salt.testTarget(master, 'I@ceph:backup:server')) { | 
| Jiri Broulik | be6898c | 2018-03-01 13:01:48 +0100 | [diff] [blame] | 869 |             salt.enforceState(master, 'I@ceph:backup:server', 'ceph.backup') | 
| Jiri Broulik | e3e7bc3 | 2018-02-26 10:50:07 +0100 | [diff] [blame] | 870 |         } | 
 | 871 |     } | 
 | 872 |  | 
 | 873 | } | 
| Tomáš Kukrál | 64f8e1c | 2017-08-11 10:32:20 +0200 | [diff] [blame] | 874 |  | 
 | 875 | // | 
 | 876 | // Ceph | 
 | 877 | // | 
 | 878 |  | 
| Tomáš Kukrál | ed27a47 | 2017-08-29 10:26:25 +0200 | [diff] [blame] | 879 | def installCephMon(master, target='I@ceph:mon') { | 
| Tomáš Kukrál | 64f8e1c | 2017-08-11 10:32:20 +0200 | [diff] [blame] | 880 |     def salt = new com.mirantis.mk.Salt() | 
 | 881 |  | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 882 |     salt.enforceState(master, 'I@ceph:common', 'salt.minion.grains') | 
| Jiri Broulik | bfc234f | 2017-10-17 15:45:38 +0200 | [diff] [blame] | 883 |  | 
| Jiri Broulik | e57a024 | 2017-10-06 13:38:47 +0200 | [diff] [blame] | 884 |     // generate keyrings | 
 | 885 |     if (salt.testTarget(master, 'I@ceph:mon:keyring:mon or I@ceph:common:keyring:admin')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 886 |         salt.enforceState(master, 'I@ceph:mon:keyring:mon or I@ceph:common:keyring:admin', 'ceph.mon') | 
 | 887 |         salt.runSaltProcessStep(master, 'I@ceph:mon', 'saltutil.sync_grains') | 
 | 888 |         salt.runSaltProcessStep(master, 'I@ceph:mon:keyring:mon or I@ceph:common:keyring:admin', 'mine.update') | 
| Jiri Broulik | 3c75a6d | 2017-10-06 18:44:37 +0200 | [diff] [blame] | 889 |         sleep(5) | 
| Jiri Broulik | e57a024 | 2017-10-06 13:38:47 +0200 | [diff] [blame] | 890 |     } | 
| Ondrej Smola | fd5c235 | 2017-08-11 14:25:39 +0200 | [diff] [blame] | 891 |     // install Ceph Mons | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 892 |     salt.enforceState(master, target, 'ceph.mon') | 
| Jiri Broulik | e57a024 | 2017-10-06 13:38:47 +0200 | [diff] [blame] | 893 |     if (salt.testTarget(master, 'I@ceph:mgr')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 894 |         salt.enforceState(master, 'I@ceph:mgr', 'ceph.mgr') | 
| Jiri Broulik | e57a024 | 2017-10-06 13:38:47 +0200 | [diff] [blame] | 895 |     } | 
| Tomáš Kukrál | 64f8e1c | 2017-08-11 10:32:20 +0200 | [diff] [blame] | 896 | } | 
 | 897 |  | 
| Tomáš Kukrál | ed27a47 | 2017-08-29 10:26:25 +0200 | [diff] [blame] | 898 | def installCephOsd(master, target='I@ceph:osd', setup=true) { | 
| Tomáš Kukrál | 64f8e1c | 2017-08-11 10:32:20 +0200 | [diff] [blame] | 899 |     def salt = new com.mirantis.mk.Salt() | 
 | 900 |  | 
 | 901 |     // install Ceph OSDs | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 902 |     salt.enforceState(master, target, 'ceph.osd') | 
 | 903 |     salt.runSaltProcessStep(master, 'I@ceph:osd', 'saltutil.sync_grains') | 
 | 904 |     salt.enforceState(master, target, 'ceph.osd.custom') | 
 | 905 |     salt.runSaltProcessStep(master, 'I@ceph:osd', 'saltutil.sync_grains') | 
 | 906 |     salt.runSaltProcessStep(master, 'I@ceph:osd', 'mine.update') | 
| Jiri Broulik | e3e7bc3 | 2018-02-26 10:50:07 +0100 | [diff] [blame] | 907 |     installBackup(master, 'ceph') | 
| Tomáš Kukrál | ed27a47 | 2017-08-29 10:26:25 +0200 | [diff] [blame] | 908 |  | 
| Jiri Broulik | e57a024 | 2017-10-06 13:38:47 +0200 | [diff] [blame] | 909 |     // setup pools, keyrings and maybe crush | 
| Tomáš Kukrál | ed27a47 | 2017-08-29 10:26:25 +0200 | [diff] [blame] | 910 |     if (salt.testTarget(master, 'I@ceph:setup') && setup) { | 
| Jiri Broulik | 07f8de7 | 2017-10-09 14:12:17 +0200 | [diff] [blame] | 911 |         sleep(5) | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 912 |         salt.enforceState(master, 'I@ceph:setup', 'ceph.setup') | 
| Tomáš Kukrál | ed27a47 | 2017-08-29 10:26:25 +0200 | [diff] [blame] | 913 |     } | 
| Tomáš Kukrál | 64f8e1c | 2017-08-11 10:32:20 +0200 | [diff] [blame] | 914 | } | 
| Tomáš Kukrál | 1e5b219 | 2017-08-15 16:58:18 +0200 | [diff] [blame] | 915 |  | 
| Tomáš Kukrál | 5836e3d | 2017-08-25 18:20:55 +0200 | [diff] [blame] | 916 | def installCephClient(master) { | 
| Tomáš Kukrál | 1e5b219 | 2017-08-15 16:58:18 +0200 | [diff] [blame] | 917 |     def salt = new com.mirantis.mk.Salt() | 
 | 918 |  | 
 | 919 |     // install Ceph Radosgw | 
| Tomáš Kukrál | 5836e3d | 2017-08-25 18:20:55 +0200 | [diff] [blame] | 920 |     if (salt.testTarget(master, 'I@ceph:radosgw')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 921 |         salt.runSaltProcessStep(master, 'I@ceph:radosgw', 'saltutil.sync_grains') | 
 | 922 |         salt.enforceState(master, 'I@ceph:radosgw', 'ceph.radosgw') | 
| Alexander Noskov | 229035f | 2017-12-06 00:10:20 +0400 | [diff] [blame] | 923 |     } | 
 | 924 |     // setup Keystone service and endpoints for swift or / and S3 | 
 | 925 |     if (salt.testTarget(master, 'I@keystone:client')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 926 |         salt.enforceState(master, 'I@keystone:client', 'keystone.client') | 
| Tomáš Kukrál | 5836e3d | 2017-08-25 18:20:55 +0200 | [diff] [blame] | 927 |     } | 
| Tomáš Kukrál | 1e5b219 | 2017-08-15 16:58:18 +0200 | [diff] [blame] | 928 | } | 
| Jiri Broulik | e57a024 | 2017-10-06 13:38:47 +0200 | [diff] [blame] | 929 |  | 
 | 930 | def connectCeph(master) { | 
 | 931 |     def salt = new com.mirantis.mk.Salt() | 
 | 932 |  | 
 | 933 |     // connect Ceph to the env | 
 | 934 |     if (salt.testTarget(master, 'I@ceph:common and I@glance:server')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 935 |         salt.enforceState(master, 'I@ceph:common and I@glance:server', ['ceph.common', 'ceph.setup.keyring', 'glance']) | 
| Jiri Broulik | e57a024 | 2017-10-06 13:38:47 +0200 | [diff] [blame] | 936 |         salt.runSaltProcessStep(master, 'I@ceph:common and I@glance:server', 'service.restart', ['glance-api', 'glance-glare', 'glance-registry']) | 
 | 937 |     } | 
 | 938 |     if (salt.testTarget(master, 'I@ceph:common and I@cinder:controller')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 939 |         salt.enforceState(master, 'I@ceph:common and I@cinder:controller', ['ceph.common', 'ceph.setup.keyring', 'cinder']) | 
| Jiri Broulik | e57a024 | 2017-10-06 13:38:47 +0200 | [diff] [blame] | 940 |     } | 
 | 941 |     if (salt.testTarget(master, 'I@ceph:common and I@nova:compute')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 942 |         salt.enforceState(master, 'I@ceph:common and I@nova:compute', ['ceph.common', 'ceph.setup.keyring']) | 
 | 943 |         salt.runSaltProcessStep(master, 'I@ceph:common and I@nova:compute', 'saltutil.sync_grains') | 
 | 944 |         salt.enforceState(master, 'I@ceph:common and I@nova:compute', ['nova']) | 
| Jiri Broulik | e57a024 | 2017-10-06 13:38:47 +0200 | [diff] [blame] | 945 |     } | 
 | 946 | } | 
| Mikhail Ivanov | 5312d1f | 2017-12-06 17:36:36 +0400 | [diff] [blame] | 947 |  | 
 | 948 | def installOssInfra(master) { | 
 | 949 |   def common = new com.mirantis.mk.Common() | 
 | 950 |   def salt = new com.mirantis.mk.Salt() | 
 | 951 |  | 
| Mikhail Ivanov | 788996c | 2017-12-15 14:28:57 +0400 | [diff] [blame] | 952 |   if (!common.checkContains('STACK_INSTALL', 'k8s') || !common.checkContains('STACK_INSTALL', 'openstack')) { | 
| Mikhail Ivanov | 5312d1f | 2017-12-06 17:36:36 +0400 | [diff] [blame] | 953 |     def orchestrate = new com.mirantis.mk.Orchestrate() | 
 | 954 |     orchestrate.installInfra(master) | 
 | 955 |   } | 
 | 956 |  | 
 | 957 |   if (salt.testTarget(master, 'I@devops_portal:config')) { | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 958 |     salt.enforceState(master, 'I@devops_portal:config', 'devops_portal.config') | 
 | 959 |     salt.enforceState(master, 'I@rundeck:client', ['linux.system.user', 'openssh']) | 
 | 960 |     salt.enforceState(master, 'I@rundeck:server', 'rundeck.server') | 
| Mikhail Ivanov | 5312d1f | 2017-12-06 17:36:36 +0400 | [diff] [blame] | 961 |   } | 
 | 962 | } | 
 | 963 |  | 
 | 964 | def installOss(master) { | 
 | 965 |   def common = new com.mirantis.mk.Common() | 
 | 966 |   def salt = new com.mirantis.mk.Salt() | 
 | 967 |  | 
 | 968 |   //Get oss VIP address | 
 | 969 |   def pillar = salt.getPillar(master, 'cfg01*', '_param:stacklight_monitor_address') | 
 | 970 |   common.prettyPrint(pillar) | 
 | 971 |  | 
 | 972 |   def oss_vip | 
 | 973 |   if(!pillar['return'].isEmpty()) { | 
 | 974 |       oss_vip = pillar['return'][0].values()[0] | 
 | 975 |   } else { | 
 | 976 |       common.errorMsg('[ERROR] Oss VIP address could not be retrieved') | 
 | 977 |   } | 
 | 978 |  | 
 | 979 |   // Postgres client - initialize OSS services databases | 
 | 980 |   timeout(120){ | 
 | 981 |     common.infoMsg("Waiting for postgresql database to come up..") | 
| Nikolas Britton | 4f62a09 | 2018-02-06 16:56:26 -0600 | [diff] [blame] | 982 |     salt.cmdRun(master, 'I@postgresql:client', 'while true; do if docker service logs postgresql_postgresql-db 2>&1 | grep "ready to accept"; then break; else sleep 5; fi; done') | 
| Mikhail Ivanov | 5312d1f | 2017-12-06 17:36:36 +0400 | [diff] [blame] | 983 |   } | 
 | 984 |   // XXX: first run usually fails on some inserts, but we need to create databases at first | 
 | 985 |   salt.enforceState(master, 'I@postgresql:client', 'postgresql.client', true, false) | 
 | 986 |  | 
 | 987 |   // Setup postgres database with integration between | 
 | 988 |   // Pushkin notification service and Security Monkey security audit service | 
 | 989 |   timeout(10) { | 
 | 990 |     common.infoMsg("Waiting for Pushkin to come up..") | 
 | 991 |     salt.cmdRun(master, 'I@postgresql:client', "while true; do curl -sf ${oss_vip}:8887/apps >/dev/null && break; done") | 
 | 992 |   } | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 993 |   salt.enforceState(master, 'I@postgresql:client', 'postgresql.client') | 
| Mikhail Ivanov | 5312d1f | 2017-12-06 17:36:36 +0400 | [diff] [blame] | 994 |  | 
 | 995 |   // Rundeck | 
 | 996 |   timeout(10) { | 
 | 997 |     common.infoMsg("Waiting for Rundeck to come up..") | 
 | 998 |     salt.cmdRun(master, 'I@rundeck:client', "while true; do curl -sf ${oss_vip}:4440 >/dev/null && break; done") | 
 | 999 |   } | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 1000 |   salt.enforceState(master, 'I@rundeck:client', 'rundeck.client') | 
| Mikhail Ivanov | 5312d1f | 2017-12-06 17:36:36 +0400 | [diff] [blame] | 1001 |  | 
 | 1002 |   // Elasticsearch | 
| Mikhail Ivanov | fcd55d6 | 2017-12-19 16:51:35 +0400 | [diff] [blame] | 1003 |   pillar = salt.getPillar(master, 'I@elasticsearch:client', 'elasticsearch:client:server:host') | 
 | 1004 |   def elasticsearch_vip | 
 | 1005 |   if(!pillar['return'].isEmpty()) { | 
 | 1006 |     elasticsearch_vip = pillar['return'][0].values()[0] | 
 | 1007 |   } else { | 
 | 1008 |     common.errorMsg('[ERROR] Elasticsearch VIP address could not be retrieved') | 
 | 1009 |   } | 
 | 1010 |  | 
| Mikhail Ivanov | 5312d1f | 2017-12-06 17:36:36 +0400 | [diff] [blame] | 1011 |   timeout(10) { | 
 | 1012 |     common.infoMsg('Waiting for Elasticsearch to come up..') | 
| Mikhail Ivanov | fcd55d6 | 2017-12-19 16:51:35 +0400 | [diff] [blame] | 1013 |     salt.cmdRun(master, 'I@elasticsearch:client', "while true; do curl -sf ${elasticsearch_vip}:9200 >/dev/null && break; done") | 
| Mikhail Ivanov | 5312d1f | 2017-12-06 17:36:36 +0400 | [diff] [blame] | 1014 |   } | 
| Jakub Josef | 432e9d9 | 2018-02-06 18:28:37 +0100 | [diff] [blame] | 1015 |   salt.enforceState(master, 'I@elasticsearch:client', 'elasticsearch.client') | 
| Mikhail Ivanov | 5312d1f | 2017-12-06 17:36:36 +0400 | [diff] [blame] | 1016 | } |