blob: 955cc726847ff7dbcc567129035eaa4a3cf86a28 [file] [log] [blame]
Tomáš Kukrál5a343902017-02-16 11:01:11 +01001/**
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 * HEAT_STACK_NAME Heat stack name
10 * HEAT_STACK_TEMPLATE Heat stack HOT template
11 * HEAT_STACK_ENVIRONMENT Heat stack environmental parameters
12 * HEAT_STACK_ZONE Heat stack availability zone
13 * HEAT_STACK_PUBLIC_NET Heat stack floating IP pool
14 * HEAT_STACK_DELETE Delete Heat stack when finished (bool)
15 * HEAT_STACK_CLEANUP_JOB Name of job for deleting Heat stack
16 *
17 * SALT_MASTER_CREDENTIALS Credentials to the Salt API
18 *
19 * OPENSTACK_API_URL OpenStack API address
20 * OPENSTACK_API_CREDENTIALS Credentials to the OpenStack API
21 * OPENSTACK_API_PROJECT OpenStack project to connect to
22 * OPENSTACK_API_CLIENT Versions of OpenStack python clients
23 * OPENSTACK_API_VERSION Version of the OpenStack API (2/3)
24 *
25 * K8S_API_SERVER Kubernetes API address
26 * K8S_CONFORMANCE_IMAGE Path to docker image with conformance e2e tests
Tomáš Kukrál5a343902017-02-16 11:01:11 +010027 *
Tomáš Kukráld92ab802017-02-17 11:34:07 +010028 * INSTALL What should be installed (k8s, openstack, ...)
29 * TESTS Run tests (bool)
Tomáš Kukrál5a343902017-02-16 11:01:11 +010030 */
31
32git = new com.mirantis.mk.git()
33openstack = new com.mirantis.mk.openstack()
34salt = new com.mirantis.mk.salt()
35
36node {
37
38 // connection objects
39 def openstackCloud
40 def saltMaster
41
42 // value defaults
Tomáš Kukráld92ab802017-02-17 11:34:07 +010043 def openstackVersion = OPENSTACK_API_CLIENT ? OPENSTACK_API_CLIENT : 'liberty'
Tomáš Kukrál5a343902017-02-16 11:01:11 +010044 def openstackEnv = "${env.WORKSPACE}/venv"
45
Tomáš Kukráld92ab802017-02-17 11:34:07 +010046 if (HEAT_STACK_NAME == '') {
Tomáš Kukrál5a343902017-02-16 11:01:11 +010047 HEAT_STACK_NAME = BUILD_TAG
48 }
49
Tomáš Kukráld92ab802017-02-17 11:34:07 +010050 //
51 // Bootstrap
52 //
53
Tomáš Kukrál5a343902017-02-16 11:01:11 +010054 stage ('Download Heat templates') {
55 git.checkoutGitRepository('template', HEAT_TEMPLATE_URL, HEAT_TEMPLATE_BRANCH, HEAT_TEMPLATE_CREDENTIALS)
56 }
57
Tomáš Kukrál75467092017-02-16 19:48:05 +010058 stage('Install OpenStack CLI') {
Tomáš Kukrál5a343902017-02-16 11:01:11 +010059 openstack.setupOpenstackVirtualenv(openstackEnv, openstackVersion)
60 }
61
62 stage('Connect to OpenStack cloud') {
63 openstackCloud = openstack.createOpenstackEnv(OPENSTACK_API_URL, OPENSTACK_API_CREDENTIALS, OPENSTACK_API_PROJECT)
64 openstack.getKeystoneToken(openstackCloud, openstackEnv)
65 }
66
67 stage('Launch new Heat stack') {
68 envParams = [
69 'availability_zone': HEAT_STACK_ZONE,
70 'public_net': HEAT_STACK_PUBLIC_NET
71 ]
72 openstack.createHeatStack(openstackCloud, HEAT_STACK_NAME, HEAT_STACK_TEMPLATE, envParams, HEAT_STACK_ENVIRONMENT, openstackEnv)
73 }
74
Tomáš Kukráld92ab802017-02-17 11:34:07 +010075 stage('Connect to Salt master') {
Tomáš Kukrál5a343902017-02-16 11:01:11 +010076 saltMasterHost = openstack.getHeatStackOutputParam(openstackCloud, HEAT_STACK_NAME, 'salt_master_ip', openstackEnv)
Tomáš Kukrál4b5f1242017-02-16 19:15:02 +010077 saltMasterUrl = "http://${saltMasterHost}:8088"
Tomáš Kukrál5a343902017-02-16 11:01:11 +010078 saltMaster = salt.createSaltConnection(saltMasterUrl, SALT_MASTER_CREDENTIALS)
79 }
80
Tomáš Kukráld92ab802017-02-17 11:34:07 +010081 //
82 // Install
83 //
84
85 stage('Install core infra') {
Tomáš Kukrál5a343902017-02-16 11:01:11 +010086 // salt.master, reclass
87 // refresh_pillar
88 // sync_all
89 // linux,openssh,salt.minion.ntp
90
91 salt.installFoundationInfra(saltMaster)
92 salt.validateFoundationInfra(saltMaster)
93 }
94
Tomáš Kukráld92ab802017-02-17 11:34:07 +010095
96 if (INSTALL.toLowerCase().contains('k8s')) {
97 stage('Install Kubernetes infra') {
Tomáš Kukrál5a343902017-02-16 11:01:11 +010098 salt.installOpenstackMcpInfra(saltMaster)
99 }
100
Tomáš Kukráld92ab802017-02-17 11:34:07 +0100101 stage('Install Kubernetes control') {
Tomáš Kukrál5a343902017-02-16 11:01:11 +0100102 salt.installOpenstackMcpControl(saltMaster)
103 }
104
Tomáš Kukráld92ab802017-02-17 11:34:07 +0100105 if (TESTS.toLowerCase().contains('k8s')) {
Tomáš Kukrál490d9752017-02-19 19:23:20 +0100106 stage('Run k8s bootstrap tests') {
107 salt.runConformanceTests(saltMaster, K8S_API_SERVER, 'tomkukral/k8s-scripts')
108 }
109
Tomáš Kukráld92ab802017-02-17 11:34:07 +0100110 stage('Run k8s conformance e2e tests') {
Tomáš Kukrál5a343902017-02-16 11:01:11 +0100111 salt.runConformanceTests(saltMaster, K8S_API_SERVER, K8S_CONFORMANCE_IMAGE)
112 }
113 }
114 }
115
Tomáš Kukráld92ab802017-02-17 11:34:07 +0100116 if (INSTALL.toLowerCase().contains('openstack')) {
Tomáš Kukrál22a65002017-02-16 15:06:43 +0100117 // install Infra and control, tests, ...
118
Tomáš Kukráld92ab802017-02-17 11:34:07 +0100119 stage('Install OpenStack infra') {
Tomáš Kukrál22a65002017-02-16 15:06:43 +0100120 salt.installOpenstackMkInfra(saltMaster)
121 }
122
Tomáš Kukráld92ab802017-02-17 11:34:07 +0100123 stage('Install OpenStack control') {
Tomáš Kukrál22a65002017-02-16 15:06:43 +0100124 salt.installOpenstackMkControl(saltMaster)
125 }
126
Tomáš Kukráld92ab802017-02-17 11:34:07 +0100127 stage('Install OpenStack network') {
Tomáš Kukrál22a65002017-02-16 15:06:43 +0100128 salt.installOpenstackMkNetwork(saltMaster)
129 }
130
Tomáš Kukráld92ab802017-02-17 11:34:07 +0100131 stage('Install OpenStack compute') {
Tomáš Kukrál22a65002017-02-16 15:06:43 +0100132 salt.installOpenstackMkCompute(saltMaster)
133 }
Tomáš Kukráld92ab802017-02-17 11:34:07 +0100134
135 //if (TESTS.toLowerCase().contains('openstack')) {
136 // stage('Run OpenStack tests') {
137 // salt...
138 // }
139 //}
Tomáš Kukrál22a65002017-02-16 15:06:43 +0100140 }
Tomáš Kukrál5a343902017-02-16 11:01:11 +0100141
Tomáš Kukráld92ab802017-02-17 11:34:07 +0100142 //
143 // Cleanup
144 //
145
Tomáš Kukráladccdba2017-02-16 23:56:22 +0100146 if (HEAT_STACK_DELETE == 'true') {
Tomáš Kukrál5a343902017-02-16 11:01:11 +0100147 stage('Trigger cleanup job') {
Tomáš Kukrál22a65002017-02-16 15:06:43 +0100148 build job: 'deploy_heat_cleanup', parameters: [[$class: 'StringParameterValue', name: 'HEAT_STACK_NAME', value: HEAT_STACK_NAME]]
Tomáš Kukrál5a343902017-02-16 11:01:11 +0100149 }
150 }
Tomáš Kukrál5a343902017-02-16 11:01:11 +0100151}