diff --git a/jobs/pipelines/swarm-deploy-cicd.groovy b/jobs/pipelines/swarm-deploy-cicd.groovy
index b5e1ff7..0183016 100644
--- a/jobs/pipelines/swarm-deploy-cicd.groovy
+++ b/jobs/pipelines/swarm-deploy-cicd.groovy
@@ -56,15 +56,24 @@
                 for (stack in "${env.STACK_INSTALL}".split(",")) {
                     stage("Sanity check the deployed component [${stack}]") {
                         shared.sanity_check_component(stack)
-                    }
 
-                    if (make_snapshot_stages) {
-                        stage("Make environment snapshot [${stack}_deployed]") {
-                            shared.devops_snapshot(stack)
-                        }
+                        // If oslo_config INI file ${ENV_NAME}_salt_deployed.ini exists,
+                        // then make a copy for the created snapshot to allow the system
+                        // tests to revert this snapshot along with the metadata from the INI file.
+                        shared.run_cmd("""\
+                            if [ -f \$(pwd)/${ENV_NAME}_salt_deployed.ini ]; then
+                                cp \$(pwd)/${ENV_NAME}_salt_deployed.ini \$(pwd)/${ENV_NAME}_${stack}_deployed.ini
+                            fi
+                        """)
                     }
                 } // for
 
+                if (make_snapshot_stages) {
+                    stage("Make environment snapshots for [${env.STACK_INSTALL}]") {
+                        shared.devops_snapshot(env.STACK_INSTALL)
+                    }
+                }
+
             } catch (e) {
                 common.printMsg("Job is failed", "purple")
                 shared.download_logs("deploy_drivetrain_${ENV_NAME}")
diff --git a/jobs/pipelines/swarm-deploy-platform-without-cicd.groovy b/jobs/pipelines/swarm-deploy-platform-without-cicd.groovy
index 8d3eb22..ae46b22 100644
--- a/jobs/pipelines/swarm-deploy-platform-without-cicd.groovy
+++ b/jobs/pipelines/swarm-deploy-platform-without-cicd.groovy
@@ -54,12 +54,18 @@
                 for (stack in "${env.STACK_INSTALL}".split(",")) {
                     stage("Sanity check the deployed component [${stack}]") {
                         shared.sanity_check_component(stack)
-                    }
-                    stage("Make environment snapshot [${stack}_deployed]") {
-                        shared.devops_snapshot(stack)
+                        shared.run_cmd("""\
+                            if [ -f \$(pwd)/${ENV_NAME}_salt_deployed.ini ]; then
+                                cp \$(pwd)/${ENV_NAME}_salt_deployed.ini \$(pwd)/${ENV_NAME}_${stack}_deployed.ini
+                            fi
+                        """)
                     }
                 } // for
 
+                stage("Make environment snapshots for [${env.STACK_INSTALL}]") {
+                    shared.devops_snapshot(env.STACK_INSTALL)
+                }
+
             } catch (e) {
                 common.printMsg("Job is failed", "purple")
                 shared.download_logs("deploy_platform_${ENV_NAME}")
diff --git a/jobs/pipelines/swarm-deploy-platform.groovy b/jobs/pipelines/swarm-deploy-platform.groovy
index 061e555..277ed0a 100644
--- a/jobs/pipelines/swarm-deploy-platform.groovy
+++ b/jobs/pipelines/swarm-deploy-platform.groovy
@@ -56,14 +56,24 @@
                 for (stack in "${env.STACK_INSTALL}".split(",")) {
                     stage("Sanity check the deployed component [${stack}]") {
                         shared.sanity_check_component(stack)
-                    }
-                    if (make_snapshot_stages) {
-                        stage("Make environment snapshot [${stack}_deployed]") {
-                            shared.devops_snapshot(stack)
-                        }
+
+                        // If oslo_config INI file ${ENV_NAME}_salt_deployed.ini exists,
+                        // then make a copy for the created snapshot to allow the system
+                        // tests to revert this snapshot along with the metadata from the INI file.
+                        shared.run_cmd("""\
+                            if [ -f \$(pwd)/${ENV_NAME}_salt_deployed.ini ]; then
+                                cp \$(pwd)/${ENV_NAME}_salt_deployed.ini \$(pwd)/${ENV_NAME}_${stack}_deployed.ini
+                            fi
+                        """)
                     }
                 } // for
 
+                if (make_snapshot_stages) {
+                    stage("Make environment snapshots for [${env.STACK_INSTALL}]") {
+                        shared.devops_snapshot(env.STACK_INSTALL)
+                    }
+                }
+
             } catch (e) {
                 common.printMsg("Job is failed", "purple")
                 shared.download_logs("deploy_platform_${ENV_NAME}")
diff --git a/src/com/mirantis/system_qa/SharedPipeline.groovy b/src/com/mirantis/system_qa/SharedPipeline.groovy
index 8c438fb..ed667b8 100644
--- a/src/com/mirantis/system_qa/SharedPipeline.groovy
+++ b/src/com/mirantis/system_qa/SharedPipeline.groovy
@@ -587,27 +587,28 @@
 """, "cyan")
 }
 
-def devops_snapshot(stack) {
-    // Make the snapshot with name "${stack}_deployed"
+def devops_snapshot(stacks) {
+    // Make snapshots with names "${stack}_deployed" for each stack
     // for all VMs in the environment.
-    // If oslo_config INI file ${ENV_NAME}_salt_deployed.ini exists,
-    // then make a copy for the created snapshot to allow the system
-    // tests to revert this snapshot along with the metadata from the INI file.
+
     run_cmd("""\
-        set -ex
         dos.py suspend ${ENV_NAME}
-        dos.py snapshot ${ENV_NAME} ${stack}_deployed
+    """)
+
+    for (stack in "${stacks}".split(",")) {
+        run_cmd("""\
+            dos.py snapshot ${ENV_NAME} ${stack}_deployed
+        """)
+        devops_snapshot_info("${stack}_deployed")
+    }
+
+    run_cmd("""\
         dos.py resume ${ENV_NAME}
         sleep 20    # Wait for I/O on the host calms down
 
         CFG01_NAME=\$(dos.py show-resources ${ENV_NAME} | grep ^cfg01 | cut -d" " -f1)
         dos.py time-sync ${ENV_NAME} --skip-sync \${CFG01_NAME}
-
-        if [ -f \$(pwd)/${ENV_NAME}_salt_deployed.ini ]; then
-            cp \$(pwd)/${ENV_NAME}_salt_deployed.ini \$(pwd)/${ENV_NAME}_${stack}_deployed.ini
-        fi
     """)
-    devops_snapshot_info("${stack}_deployed")
 }
 
 def get_steps_list(steps) {
