diff --git a/rp_reporter/rp_reporter/batch_reporter.py b/rp_reporter/rp_reporter/batch_reporter.py
index a38e1b7..9f3be01 100755
--- a/rp_reporter/rp_reporter/batch_reporter.py
+++ b/rp_reporter/rp_reporter/batch_reporter.py
@@ -1,6 +1,11 @@
 import click
 import logging
+
+import ipdb
+import wget
+import yaml
 import itertools
+import jmespath
 
 import jenkins_jinny.main as jj
 from copy import deepcopy
@@ -8,17 +13,11 @@
 
 LOG = logging.getLogger("rp_reporter")
 
-def upload_job(job:str, suite_per_job=False, tags=None):
-    if isinstance(job, str):
-        job = jj.Build(job)
-    if not tags:
-        tags = dict()
-
-    print(f"│˶˙ᵕ˙˶)꜆ I take {job}")
-
+def get_tags(job: jj.Build):
+    tags = dict()
     tags["start_time"] = job.start_time.strftime("%Y-%m-%d-%H-%M-%S")
 
-    if context_name:=job.param.OPENSTACK_CONTEXT_NAME:
+    if context_name := job.param.OPENSTACK_CONTEXT_NAME:
         tags["openstack"] = context_name.split("/")[0]
         tags["context"] = context_name.split("/")[-1]
 
@@ -28,6 +27,17 @@
         tags["mosk_version"] = "mosk-25.1"
     else:
         tags["mosk_version"] = "master"
+    return tags
+
+def upload_job(job:str, suite_per_job=False, tags=None):
+    if isinstance(job, str):
+        job = jj.Build(job)
+    if not tags:
+        tags = dict()
+
+    print(f"│˶˙ᵕ˙˶)꜆ I take {job}")
+
+    tags.update(get_tags(job))
 
     # deploy_job = job.get_child_jobs("deploy-openstack-k8s-env")[0]
     # for file_location in deploy_job.get_artifacts("deployed.yaml"):
@@ -51,6 +61,7 @@
                   # item_id=launch_id
                   )
     for child in itertools.chain([job], job.heirs):
+        child: jj.Build
         rp_client.log(time=timestamp(),
                       message=f"{child} {child.status} {child.url}",
                       # item_id=launch_id
@@ -59,6 +70,25 @@
         test_tags = deepcopy(tags)
         test_results_files = None
         match child.name:
+            case "deploy-openstack-k8s-env":
+                # ipdb.set_trace()
+                osdpl_file = child.get_artifacts("deployed.yaml")
+                if not osdpl_file:
+                    LOG.error(f"Can't find osdpl file in {job}")
+                    continue
+                osdpl_content = yaml.safe_load(open(osdpl_file[0], "rb"))
+                osdpl_dictionary = yaml.safe_load(osdpl_content)
+                found_osdpl = jmespath.search("items[*].status.version", osdpl_dictionary)
+                if not found_osdpl:
+                    LOG.error(f"Can't find osdpl info in {job}")
+                    continue
+
+                tags["rockoon_version"] = found_osdpl[0]
+                rp_client.update_test_item(
+                    attributes=tags,
+                    item_uuid=launch_id
+                )
+
             case "tempest-runner-k8s":
                 title = "Tempest"
                 test_results_files = [file_url
diff --git a/rp_reporter/rp_reporter/report_from_xml.py b/rp_reporter/rp_reporter/report_from_xml.py
index d55171e..a5cb6ab 100644
--- a/rp_reporter/rp_reporter/report_from_xml.py
+++ b/rp_reporter/rp_reporter/report_from_xml.py
@@ -10,6 +10,7 @@
 import wget
 import time
 import uuid
+import jmespath
 from typing import Optional
 from xml.etree import ElementTree
 
@@ -52,6 +53,7 @@
 
 
 class Reporter:
+    client: RPClient
     def __init__(self, client=None):
         if not client:
             self.client = RPClient(endpoint=RP_ENDPOINT,
