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}")
