diff --git a/apps/ops/ansible/inventory.py b/apps/ops/ansible/inventory.py
index 4b796181c..ac67707ab 100644
--- a/apps/ops/ansible/inventory.py
+++ b/apps/ops/ansible/inventory.py
@@ -2,11 +2,13 @@
 import json
 import os
 import re
+import sys
 from collections import defaultdict
 
-import sys
 from django.utils.translation import gettext as _
 
+from assets import const
+
 __all__ = ['JMSInventory']
 
 
@@ -38,6 +40,12 @@ class JMSInventory:
             .prefetch_related('platform', 'domain', 'accounts')
         return assets
 
+    @staticmethod
+    def get_username(asset, account):
+        if asset.category == const.Category.DS:
+            return account.full_username
+        return account.username
+
     @staticmethod
     def group_by_platform(assets):
         groups = defaultdict(list)
@@ -76,10 +84,10 @@ class JMSInventory:
         proxy_command = f"-o ProxyCommand='{' '.join(proxy_command_list)}'"
         return {"ansible_ssh_common_args": proxy_command}
 
-    @staticmethod
-    def make_account_ansible_vars(account, path_dir):
+    def make_account_ansible_vars(self, asset, account, path_dir):
+        username = self.get_username(asset, account)
         var = {
-            'ansible_user': account.full_username,
+            'ansible_user': username,
         }
         if not account.secret:
             return var
@@ -129,13 +137,13 @@ class JMSInventory:
             host.update(self.make_custom_become_ansible_vars(account, su_from_auth, path_dir))
         elif platform.su_enabled and not su_from and \
                 self.task_type in (AutomationTypes.change_secret, AutomationTypes.push_account):
-            host.update(self.make_account_ansible_vars(account, path_dir))
+            host.update(self.make_account_ansible_vars(asset, account, path_dir))
             if platform.type not in ["windows", "windows_ad"]:
                 host['ansible_become'] = True
             host['ansible_become_user'] = 'root'
             host['ansible_become_password'] = account.escape_jinja2_syntax(account.secret)
         else:
-            host.update(self.make_account_ansible_vars(account, path_dir))
+            host.update(self.make_account_ansible_vars(asset, account, path_dir))
 
         if platform.is_huawei():
             host['ansible_connection'] = 'network_cli'
@@ -192,6 +200,7 @@ class JMSInventory:
         tp, category = asset.type, asset.category
         name = re.sub(r'[ \[\]/]', '_', asset.name)
         secret_info = {k: v for k, v in asset.secret_info.items() if v}
+        username = self.get_username(asset, account)
         host = {
             'name': name,
             'local_python_interpreter': sys.executable,
@@ -204,7 +213,8 @@ class JMSInventory:
                 'origin_address': asset.address
             },
             'jms_account': {
-                'id': str(account.id), 'username': account.full_username,
+                'id': str(account.id),
+                'username': username,
                 'secret': account.escape_jinja2_syntax(account.secret),
                 'secret_type': account.secret_type, 'private_key_path': account.get_private_key_path(path_dir)
             } if account else None