use timestamp plugin

Change-Id: I84ec7bf8a898af10710828ee95f0c509c0435553
diff --git a/lab-pipeline.groovy b/lab-pipeline.groovy
index 2f36b96..d28dca2 100644
--- a/lab-pipeline.groovy
+++ b/lab-pipeline.groovy
@@ -40,143 +40,145 @@
 salt = new com.mirantis.mk.Salt()
 orchestrate = new com.mirantis.mk.Orchestrate()
 
-node {
+timestamps {
+    node {
 
-    //
-    // Prepare machines
-    //
+        //
+        // Prepare machines
+        //
 
-    stage ('Create infrastructure') {
-        if (STACK_TYPE == 'heat') {
-            // value defaults
-            def openstackCloud
-            def openstackVersion = OPENSTACK_API_CLIENT ? OPENSTACK_API_CLIENT : 'liberty'
-            def openstackEnv = "${env.WORKSPACE}/venv"
+        stage ('Create infrastructure') {
+            if (STACK_TYPE == 'heat') {
+                // value defaults
+                def openstackCloud
+                def openstackVersion = OPENSTACK_API_CLIENT ? OPENSTACK_API_CLIENT : 'liberty'
+                def openstackEnv = "${env.WORKSPACE}/venv"
 
 
-            if (HEAT_STACK_NAME == '') {
-                HEAT_STACK_NAME = BUILD_TAG
-            }
-
-            // get templates
-            git.checkoutGitRepository('template', HEAT_TEMPLATE_URL, HEAT_TEMPLATE_BRANCH, HEAT_TEMPLATE_CREDENTIALS)
-
-            // create openstack env
-            openstack.setupOpenstackVirtualenv(openstackEnv, openstackVersion)
-            openstackCloud = openstack.createOpenstackEnv(OPENSTACK_API_URL, OPENSTACK_API_CREDENTIALS, OPENSTACK_API_PROJECT)
-            openstack.getKeystoneToken(openstackCloud, openstackEnv)
-
-
-            // launch stack
-            if (HEAT_STACK_REUSE == 'false') {
-                stage('Launch new Heat stack') {
-                    // create stack
-                    envParams = [
-                        'instance_zone': HEAT_STACK_ZONE,
-                        'public_net': HEAT_STACK_PUBLIC_NET
-                    ]
-                    openstack.createHeatStack(openstackCloud, HEAT_STACK_NAME, HEAT_STACK_TEMPLATE, envParams, HEAT_STACK_ENVIRONMENT, openstackEnv)
+                if (HEAT_STACK_NAME == '') {
+                    HEAT_STACK_NAME = BUILD_TAG
                 }
+
+                // get templates
+                git.checkoutGitRepository('template', HEAT_TEMPLATE_URL, HEAT_TEMPLATE_BRANCH, HEAT_TEMPLATE_CREDENTIALS)
+
+                // create openstack env
+                openstack.setupOpenstackVirtualenv(openstackEnv, openstackVersion)
+                openstackCloud = openstack.createOpenstackEnv(OPENSTACK_API_URL, OPENSTACK_API_CREDENTIALS, OPENSTACK_API_PROJECT)
+                openstack.getKeystoneToken(openstackCloud, openstackEnv)
+
+
+                // launch stack
+                if (HEAT_STACK_REUSE == 'false') {
+                    stage('Launch new Heat stack') {
+                        // create stack
+                        envParams = [
+                            'instance_zone': HEAT_STACK_ZONE,
+                            'public_net': HEAT_STACK_PUBLIC_NET
+                        ]
+                        openstack.createHeatStack(openstackCloud, HEAT_STACK_NAME, HEAT_STACK_TEMPLATE, envParams, HEAT_STACK_ENVIRONMENT, openstackEnv)
+                    }
+                }
+
+                // get SALT_MASTER_URL
+                saltMasterHost = openstack.getHeatStackOutputParam(openstackCloud, HEAT_STACK_NAME, 'salt_master_ip', openstackEnv)
+                SALT_MASTER_URL = "http://${saltMasterHost}:8088"
+            }
+        }
+
+        //
+        // Connect to Salt master
+        //
+
+        def saltMaster
+        stage('Connect to Salt API') {
+            saltMaster = salt.connection(SALT_MASTER_URL, SALT_MASTER_CREDENTIALS)
+        }
+
+        //
+        // Install
+        //
+
+        stage('Install core infrastructure') {
+            // salt.master, reclass
+            // refresh_pillar
+            // sync_all
+            // linux,openssh,salt.minion.ntp
+
+            orchestrate.installFoundationInfra(saltMaster)
+
+            if (INSTALL.toLowerCase().contains('kvm')) {
+                orchestrate.installInfraKvm(saltMaster)
             }
 
-            // get SALT_MASTER_URL
-            saltMasterHost = openstack.getHeatStackOutputParam(openstackCloud, HEAT_STACK_NAME, 'salt_master_ip', openstackEnv)
-            SALT_MASTER_URL = "http://${saltMasterHost}:8088"
-        }
-    }
-
-    //
-    // Connect to Salt master
-    //
-
-    def saltMaster
-    stage('Connect to Salt API') {
-        saltMaster = salt.connection(SALT_MASTER_URL, SALT_MASTER_CREDENTIALS)
-    }
-
-    //
-    // Install
-    //
-
-    stage('Install core infrastructure') {
-        // salt.master, reclass
-        // refresh_pillar
-        // sync_all
-        // linux,openssh,salt.minion.ntp
-
-        orchestrate.installFoundationInfra(saltMaster)
-
-        if (INSTALL.toLowerCase().contains('kvm')) {
-            orchestrate.installInfraKvm(saltMaster)
-        }
-
-        orchestrate.validateFoundationInfra(saltMaster)
-    }
-
-
-    // install k8s
-    if (INSTALL.toLowerCase().contains('k8s')) {
-        stage('Install Kubernetes infra') {
-            orchestrate.installOpenstackMcpInfra(saltMaster)
-        }
-
-        stage('Install Kubernetes control') {
-            orchestrate.installOpenstackMcpControl(saltMaster)
-        }
-
-    }
-
-    // install openstack
-    if (INSTALL.toLowerCase().contains('openstack')) {
-        // install Infra and control, tests, ...
-
-        if (INSTALL.toLowerCase().contains('kvm')) {
-            physical = "true"
-        } else {
-            physical = "false"
+            orchestrate.validateFoundationInfra(saltMaster)
         }
 
 
-        stage('Install OpenStack infra') {
-            orchestrate.installOpenstackMkInfra(saltMaster, physical)
+        // install k8s
+        if (INSTALL.toLowerCase().contains('k8s')) {
+            stage('Install Kubernetes infra') {
+                orchestrate.installOpenstackMcpInfra(saltMaster)
+            }
+
+            stage('Install Kubernetes control') {
+                orchestrate.installOpenstackMcpControl(saltMaster)
+            }
+
         }
 
-        stage('Install OpenStack control') {
-            orchestrate.installOpenstackMkControl(saltMaster)
+        // install openstack
+        if (INSTALL.toLowerCase().contains('openstack')) {
+            // install Infra and control, tests, ...
+
+            if (INSTALL.toLowerCase().contains('kvm')) {
+                physical = "true"
+            } else {
+                physical = "false"
+            }
+
+
+            stage('Install OpenStack infra') {
+                orchestrate.installOpenstackMkInfra(saltMaster, physical)
+            }
+
+            stage('Install OpenStack control') {
+                orchestrate.installOpenstackMkControl(saltMaster)
+            }
+
+            stage('Install OpenStack network') {
+                orchestrate.installOpenstackMkNetwork(saltMaster, physical)
+            }
+
+            stage('Install OpenStack compute') {
+                orchestrate.installOpenstackMkCompute(saltMaster, physical)
+            }
+
         }
 
-        stage('Install OpenStack network') {
-            orchestrate.installOpenstackMkNetwork(saltMaster, physical)
+        //
+        // Test
+        //
+
+        if (TEST.toLowerCase().contains('k8s')) {
+            stage('Run k8s bootstrap tests') {
+                orchestrate.runConformanceTests(saltMaster, K8S_API_SERVER, 'tomkukral/k8s-scripts')
+            }
+
+            stage('Run k8s conformance e2e tests') {
+                orchestrate.runConformanceTests(saltMaster, K8S_API_SERVER, K8S_CONFORMANCE_IMAGE)
+            }
         }
 
-        stage('Install OpenStack compute') {
-            orchestrate.installOpenstackMkCompute(saltMaster, physical)
-        }
 
-    }
+        //
+        // Clean
+        //
 
-    //
-    // Test
-    //
-
-    if (TEST.toLowerCase().contains('k8s')) {
-        stage('Run k8s bootstrap tests') {
-            orchestrate.runConformanceTests(saltMaster, K8S_API_SERVER, 'tomkukral/k8s-scripts')
-        }
-
-        stage('Run k8s conformance e2e tests') {
-            orchestrate.runConformanceTests(saltMaster, K8S_API_SERVER, K8S_CONFORMANCE_IMAGE)
-        }
-    }
-
-
-    //
-    // Clean
-    //
-
-    if (HEAT_STACK_DELETE == 'true' && STACK_TYPE == 'heat') {
-        stage('Trigger cleanup job') {
-            build job: 'deploy_heat_cleanup', parameters: [[$class: 'StringParameterValue', name: 'HEAT_STACK_NAME', value: HEAT_STACK_NAME]]
+        if (HEAT_STACK_DELETE == 'true' && STACK_TYPE == 'heat') {
+            stage('Trigger cleanup job') {
+                build job: 'deploy_heat_cleanup', parameters: [[$class: 'StringParameterValue', name: 'HEAT_STACK_NAME', value: HEAT_STACK_NAME]]
+            }
         }
     }
 }