| chnyda | f14ea2a | 2017-05-26 15:07:47 +0200 | [diff] [blame] | 1 | package com.mirantis.mk | 
 | 2 |  | 
 | 3 | /** | 
 | 4 |  * setup and test salt-master | 
 | 5 |  * | 
 | 6 |  * @param masterName          salt master's name | 
| chnyda | 85f72e6 | 2017-05-26 15:43:27 +0200 | [diff] [blame] | 7 |  * @param extraFormulas       extraFormulas to install | 
| Mykyta Karpin | 1cb8d3f | 2017-06-23 15:42:17 +0300 | [diff] [blame] | 8 |  * @param formulasSource      formulas source (git or pkg) | 
| chnyda | f4e5eb4 | 2017-05-26 15:34:38 +0200 | [diff] [blame] | 9 |  * @param testDir             directory of model | 
| Jakub Josef | fa6ad8d | 2017-06-26 18:29:55 +0200 | [diff] [blame^] | 10 |  * @param formulasSource      Salt formulas source type (optional, default pkg)   | 
 | 11 |  * @param formulasRevision    APT revision for formulas (optional default stable) | 
| chnyda | f14ea2a | 2017-05-26 15:07:47 +0200 | [diff] [blame] | 12 |  */ | 
 | 13 |  | 
| Jakub Josef | fa6ad8d | 2017-06-26 18:29:55 +0200 | [diff] [blame^] | 14 | def setupAndTestNode(masterName, extraFormulas, testDir, formulasSource = 'pkg', formulasRevision = 'stable') { | 
| chnyda | f14ea2a | 2017-05-26 15:07:47 +0200 | [diff] [blame] | 15 |   def saltOpts = "--retcode-passthrough --force-color" | 
 | 16 |   def common = new com.mirantis.mk.Common() | 
 | 17 |   def workspace = common.getWorkspace() | 
 | 18 |   def imageFound = true | 
 | 19 |   def img | 
 | 20 |   try { | 
 | 21 |     img = docker.image("tcpcloud/salt-models-testing") | 
 | 22 |     img.pull() | 
 | 23 |   } catch (Throwable e) { | 
 | 24 |     img = docker.image("ubuntu:latest") | 
 | 25 |     imageFound = false | 
 | 26 |   } | 
 | 27 |  | 
| chnyda | f6a0c95 | 2017-05-29 10:34:45 +0200 | [diff] [blame] | 28 |   if (!extraFormulas || extraFormulas == "") { | 
| chnyda | 77e4697 | 2017-05-26 16:14:27 +0200 | [diff] [blame] | 29 |     extraFormulas = "linux" | 
| chnyda | 66bfc58 | 2017-05-26 16:24:21 +0200 | [diff] [blame] | 30 |   } | 
| chnyda | 77e4697 | 2017-05-26 16:14:27 +0200 | [diff] [blame] | 31 |  | 
| chnyda | f14ea2a | 2017-05-26 15:07:47 +0200 | [diff] [blame] | 32 |   img.inside("-u root:root --hostname=${masterName}") { | 
| chnyda | 3c6680a | 2017-05-29 16:55:34 +0200 | [diff] [blame] | 33 |  | 
 | 34 |     def is_mk_ci | 
 | 35 |     try { | 
 | 36 |       is_mk_ci = DEFAULT_GIT_URL.contains("mk-ci") | 
 | 37 |     } catch (Throwable e) { | 
 | 38 |       is_mk_ci = false | 
 | 39 |     } | 
 | 40 |  | 
| chnyda | f14ea2a | 2017-05-26 15:07:47 +0200 | [diff] [blame] | 41 |     wrap([$class: 'AnsiColorBuildWrapper']) { | 
 | 42 |       if (!imageFound) { | 
 | 43 |         sh("apt-get update && apt-get install -y curl subversion git python-pip sudo python-pip python-dev zlib1g-dev git") | 
 | 44 |         sh("pip install git+https://github.com/epcim/reclass.git@pr/fix/fix_raise_UndefinedVariableError") | 
 | 45 |       } | 
 | 46 |       sh("mkdir -p /srv/salt/ || true") | 
| chnyda | f4e5eb4 | 2017-05-26 15:34:38 +0200 | [diff] [blame] | 47 |       sh("cp -r ${testDir} /srv/salt/reclass") | 
| chnyda | f14ea2a | 2017-05-26 15:07:47 +0200 | [diff] [blame] | 48 |       sh("svn export --force https://github.com/salt-formulas/salt-formulas/trunk/deploy/scripts /srv/salt/scripts") | 
 | 49 |       sh("git config --global user.email || git config --global user.email 'ci@ci.local'") | 
 | 50 |       sh("git config --global user.name || git config --global user.name 'CI'") | 
 | 51 |  | 
| Jakub Josef | fa6ad8d | 2017-06-26 18:29:55 +0200 | [diff] [blame^] | 52 |       withEnv(["FORMULAS_SOURCE=${formulasSource}", "EXTRA_FORMULAS=${extraFormulas}", "DISTRIB_REVISION=${formulasRevision}", "DEBUG=1", "MASTER_HOSTNAME=${masterName}", "MINION_ID=${masterName}", "HOSTNAME=cfg01", "DOMAIN=mk-ci.local"]){ | 
| chnyda | f14ea2a | 2017-05-26 15:07:47 +0200 | [diff] [blame] | 53 |           sh("bash -c 'echo $MASTER_HOSTNAME'") | 
 | 54 |           sh("bash -c 'source /srv/salt/scripts/salt-master-init.sh; cd /srv/salt/scripts && system_config'") | 
 | 55 |           sh("bash -c 'source /srv/salt/scripts/salt-master-init.sh; cd /srv/salt/scripts && saltmaster_bootstrap'") | 
 | 56 |           sh("bash -c 'source /srv/salt/scripts/salt-master-init.sh; cd /srv/salt/scripts && saltmaster_init'") | 
| chnyda | 3c6680a | 2017-05-29 16:55:34 +0200 | [diff] [blame] | 57 |  | 
 | 58 |           if (!is_mk_ci) { | 
 | 59 |              sh("bash -c 'source /srv/salt/scripts/salt-master-init.sh; cd /srv/salt/scripts && verify_salt_minions'") | 
 | 60 |           } | 
| chnyda | f14ea2a | 2017-05-26 15:07:47 +0200 | [diff] [blame] | 61 |       } | 
 | 62 |  | 
| chnyda | 4967e4d | 2017-05-29 16:07:53 +0200 | [diff] [blame] | 63 |       if (is_mk_ci) { | 
| chnyda | 3c6680a | 2017-05-29 16:55:34 +0200 | [diff] [blame] | 64 |         def nodes = sh script: "find /srv/salt/reclass/nodes -name '*.yml' | grep -v 'cfg*.yml'", returnStdout: true | 
 | 65 |         for (minion in nodes.tokenize()) { | 
 | 66 |           def basename = sh script: "basename ${minion} .yml", returnStdout: true | 
 | 67 |           if (!basename.trim().contains(masterName)) { | 
 | 68 |             testMinion(basename.trim()) | 
 | 69 |           } | 
| chnyda | f14ea2a | 2017-05-26 15:07:47 +0200 | [diff] [blame] | 70 |         } | 
 | 71 |       } | 
| chnyda | 3c6680a | 2017-05-29 16:55:34 +0200 | [diff] [blame] | 72 |  | 
| chnyda | f14ea2a | 2017-05-26 15:07:47 +0200 | [diff] [blame] | 73 |     } | 
 | 74 |   } | 
 | 75 | } | 
 | 76 |  | 
 | 77 | /** | 
 | 78 |  * Test salt-minion | 
 | 79 |  * | 
 | 80 |  * @param minion          salt minion | 
 | 81 |  */ | 
 | 82 |  | 
 | 83 | def testMinion(minionName) | 
 | 84 | { | 
 | 85 |   sh("service salt-master restart && service salt-minion restart && sleep 5 && bash -c 'source /srv/salt/scripts/salt-master-init.sh; cd /srv/salt/scripts && verify_salt_minion ${minionName}'") | 
| Jakub Josef | fa6ad8d | 2017-06-26 18:29:55 +0200 | [diff] [blame^] | 86 | } |