| Tomáš Kukrál | e8ebe79 | 2017-01-09 10:24:00 +0100 | [diff] [blame] | 1 | /** | 
 | 2 |  * | 
 | 3 |  * Launch heat stack with basic k8s | 
 | 4 |  * | 
 | 5 |  * Expected parameters: | 
 | 6 |  *   HEAT_TEMPLATE_URL          URL to git repo with Heat templates | 
 | 7 |  *   HEAT_TEMPLATE_CREDENTIALS  Credentials to the Heat templates repo | 
 | 8 |  *   HEAT_TEMPLATE_BRANCH       Heat templates repo branch | 
 | 9 |  *   OPENSTACK_API_URL          OpenStack API address | 
 | 10 |  *   OPENSTACK_API_CREDENTIALS  Credentials to the OpenStack API | 
 | 11 |  *   OPENSTACK_API_PROJECT      OpenStack project to connect to | 
 | 12 |  *   OPENSTACK_API_CLIENT       Versions of OpenStack python clients | 
 | 13 |  *   OPENSTACK_API_VERSION      Version of the OpenStack API (2/3) | 
 | 14 |  *   SALT_MASTER_CREDENTIALS    Credentials to the Salt API | 
 | 15 |  *   HEAT_STACK_NAME            Heat stack name | 
 | 16 |  *   HEAT_STACK_TEMPLATE        Heat stack HOT template | 
 | 17 |  *   HEAT_STACK_ENVIRONMENT     Heat stack environmental parameters | 
 | 18 |  *   HEAT_STACK_ZONE            Heat stack availability zone | 
 | 19 |  *   HEAT_STACK_PUBLIC_NET      Heat stack floating IP pool | 
| Tatyana Leontovich | 3754a90 | 2017-01-20 18:48:55 +0200 | [diff] [blame] | 20 |  *   CONFORMANCE_IMAGE          Path to docker image with conformance e2e tests | 
 | 21 |  *   K8S_API_SERVER             Kubernetes API address | 
| Tomáš Kukrál | 9f3f887 | 2017-01-25 10:30:27 +0100 | [diff] [blame] | 22 |  *   RUN_TESTS                  Run test (0/1) | 
 | 23 |  *   HEAT_STACK_DELETE          Delete Heat stack when finished (0/1) | 
| Tomáš Kukrál | e8ebe79 | 2017-01-09 10:24:00 +0100 | [diff] [blame] | 24 |  */ | 
 | 25 |  | 
 | 26 | git = new com.mirantis.mk.git() | 
 | 27 | openstack = new com.mirantis.mk.openstack() | 
 | 28 | salt = new com.mirantis.mk.salt() | 
 | 29 |  | 
 | 30 | node { | 
 | 31 |  | 
 | 32 |     // connection objects | 
 | 33 |     def openstackCloud | 
 | 34 |     def saltMaster | 
 | 35 |  | 
 | 36 |     // value defaults | 
 | 37 |     def openstackVersion = OPENSTACK_API_CLIENT ? OPENSTACK_API_CLIENT : "liberty" | 
 | 38 |     def openstackEnv = "${env.WORKSPACE}/venv" | 
 | 39 |  | 
| Tomáš Kukrál | 00c7bf4 | 2017-01-13 13:27:23 +0100 | [diff] [blame] | 40 |     if (HEAT_STACK_NAME == "") { | 
| Tomáš Kukrál | 7568ca7 | 2017-01-16 09:40:35 +0100 | [diff] [blame] | 41 |         HEAT_STACK_NAME = JOB_NAME + "-b" + BUILD_NUMBER | 
| Tomáš Kukrál | 00c7bf4 | 2017-01-13 13:27:23 +0100 | [diff] [blame] | 42 |     } | 
 | 43 |  | 
| Tomáš Kukrál | e8ebe79 | 2017-01-09 10:24:00 +0100 | [diff] [blame] | 44 |     stage ('Download Heat templates') { | 
 | 45 |         git.checkoutGitRepository('template', HEAT_TEMPLATE_URL, HEAT_TEMPLATE_BRANCH, HEAT_TEMPLATE_CREDENTIALS) | 
 | 46 |     } | 
 | 47 |  | 
 | 48 |     stage('Install OpenStack env') { | 
 | 49 |         openstack.setupOpenstackVirtualenv(openstackEnv, openstackVersion) | 
 | 50 |     } | 
 | 51 |  | 
 | 52 |     stage('Connect to OpenStack cloud') { | 
 | 53 |         openstackCloud = openstack.createOpenstackEnv(OPENSTACK_API_URL, OPENSTACK_API_CREDENTIALS, OPENSTACK_API_PROJECT) | 
 | 54 |         openstack.getKeystoneToken(openstackCloud, openstackEnv) | 
 | 55 |     } | 
 | 56 |  | 
 | 57 |     stage('Launch new Heat stack') { | 
 | 58 |         envParams = [ | 
 | 59 |             'availability_zone': HEAT_STACK_ZONE, | 
 | 60 |             'public_net': HEAT_STACK_PUBLIC_NET | 
 | 61 |         ] | 
 | 62 |         openstack.createHeatStack(openstackCloud, HEAT_STACK_NAME, HEAT_STACK_TEMPLATE, envParams, HEAT_STACK_ENVIRONMENT, openstackEnv) | 
 | 63 |     } | 
 | 64 |  | 
 | 65 |     stage("Connect to Salt master") { | 
 | 66 |         saltMasterHost = openstack.getHeatStackOutputParam(openstackCloud, HEAT_STACK_NAME, 'salt_master_ip', openstackEnv) | 
 | 67 |         saltMasterUrl = "http://${saltMasterHost}:8000" | 
 | 68 |         saltMaster = salt.createSaltConnection(saltMasterUrl, SALT_MASTER_CREDENTIALS) | 
 | 69 |     } | 
 | 70 |  | 
 | 71 |     stage("Install core infra") { | 
 | 72 |         salt.installFoundationInfra(saltMaster) | 
 | 73 |         salt.validateFoundationInfra(saltMaster) | 
 | 74 |     } | 
 | 75 |  | 
 | 76 |     stage("Install Kubernetes infra") { | 
 | 77 |         salt.installOpenstackMcpInfra(saltMaster) | 
 | 78 |     } | 
 | 79 |  | 
 | 80 |     stage("Install Kubernetes control") { | 
 | 81 |         salt.installOpenstackMcpControl(saltMaster) | 
 | 82 |     } | 
 | 83 |  | 
| Tomáš Kukrál | 75d4bb1 | 2017-01-25 10:40:28 +0100 | [diff] [blame] | 84 |     if (RUN_TESTS == "1") { | 
| Tomáš Kukrál | 060ddc2 | 2017-02-20 00:55:08 +0100 | [diff] [blame] | 85 |         sleep(30000) | 
| Tomáš Kukrál | 023a40b | 2017-02-20 00:17:00 +0100 | [diff] [blame] | 86 |         stage('Run k8s bootstrap tests') { | 
 | 87 |             salt.runConformanceTests(saltMaster, K8S_API_SERVER, 'tomkukral/k8s-scripts') | 
 | 88 |         } | 
 | 89 |  | 
| Tomáš Kukrál | 9f3f887 | 2017-01-25 10:30:27 +0100 | [diff] [blame] | 90 |         stage("Run k8s conformance e2e tests") { | 
 | 91 |             salt.runConformanceTests(saltMaster, K8S_API_SERVER, CONFORMANCE_IMAGE) | 
 | 92 |         } | 
| Tatyana Leontovich | 3754a90 | 2017-01-20 18:48:55 +0200 | [diff] [blame] | 93 |     } | 
 | 94 |  | 
| Tomáš Kukrál | 7568ca7 | 2017-01-16 09:40:35 +0100 | [diff] [blame] | 95 |     if (HEAT_STACK_DELETE == "1") { | 
 | 96 |         stage('Trigger cleanup job') { | 
 | 97 |             build job: 'mk-k8s-cleanup', parameters: [[$class: 'StringParameterValue', name: 'HEAT_STACK_NAME', value: HEAT_STACK_NAME]] | 
 | 98 |         } | 
| Tomáš Kukrál | aba0a7d | 2017-01-13 14:05:12 +0100 | [diff] [blame] | 99 |     } | 
| Tomáš Kukrál | e8ebe79 | 2017-01-09 10:24:00 +0100 | [diff] [blame] | 100 |  | 
 | 101 | } |