From aa428b02995fd3903738e6cf116669ab51d6b53a Mon Sep 17 00:00:00 2001 From: ibuler Date: Wed, 13 Nov 2019 16:40:34 +0800 Subject: [PATCH 1/6] =?UTF-8?q?[Update]=20=E4=BF=AE=E6=94=B9=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E7=BD=91=E5=85=B3=E6=8F=90=E7=A4=BA=EF=BC=8C=E4=B8=8D?= =?UTF-8?q?=E8=83=BD=E5=8C=85=E5=90=AB=E7=89=B9=E6=AE=8A=E5=AD=97=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/api/domain.py | 2 +- apps/assets/models/domain.py | 5 +- .../templates/assets/domain_gateway_list.html | 2 +- apps/locale/zh/LC_MESSAGES/django.mo | Bin 80819 -> 80775 bytes apps/locale/zh/LC_MESSAGES/django.po | 98 +++++++++--------- 5 files changed, 57 insertions(+), 50 deletions(-) diff --git a/apps/assets/api/domain.py b/apps/assets/api/domain.py index 13be62315..e6f6c0550 100644 --- a/apps/assets/api/domain.py +++ b/apps/assets/api/domain.py @@ -44,4 +44,4 @@ class GatewayTestConnectionApi(SingleObjectMixin, APIView): if ok: return Response("ok") else: - return Response({"failed": e}, status=404) + return Response({"error": e}, status=400) diff --git a/apps/assets/models/domain.py b/apps/assets/models/domain.py index 2051181fe..99e677a07 100644 --- a/apps/assets/models/domain.py +++ b/apps/assets/models/domain.py @@ -3,9 +3,9 @@ import uuid import random +import re import paramiko - from django.db import models from django.utils.translation import ugettext_lazy as _ @@ -63,6 +63,9 @@ class Gateway(AssetUser): def test_connective(self, local_port=None): if local_port is None: local_port = self.port + if not re.match(r'\w+$', self.password): + return False, _("Password should not contain special characters") + client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) proxy = paramiko.SSHClient() diff --git a/apps/assets/templates/assets/domain_gateway_list.html b/apps/assets/templates/assets/domain_gateway_list.html index ade46acc9..79636a2bc 100644 --- a/apps/assets/templates/assets/domain_gateway_list.html +++ b/apps/assets/templates/assets/domain_gateway_list.html @@ -139,7 +139,7 @@ $(document).ready(function(){ method: "POST", body: JSON.stringify({'port': parseInt(data.port)}), success_message: "{% trans 'Can be connected' %}", - fail_message: "{% trans 'The connection fails' %}" + {#fail_message: "{% trans 'The connection fails' %}"#} }) }); diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index e002c1e2aab622b09e691c200aff0d5c6a8d983f..233d13246a019e16a6731f51c2b8631aecb551a3 100644 GIT binary patch delta 19824 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 delta 19878 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\n" "Language-Team: Jumpserver team\n" @@ -96,7 +96,7 @@ msgstr "运行参数" #: terminal/templates/terminal/session_list.html:28 #: terminal/templates/terminal/session_list.html:72 #: xpack/plugins/change_auth_plan/forms.py:73 -#: xpack/plugins/change_auth_plan/models.py:419 +#: xpack/plugins/change_auth_plan/models.py:412 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_create_update.html:46 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:54 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_subtask_list.html:13 @@ -152,7 +152,7 @@ msgstr "资产" #: users/templates/users/user_profile.html:51 #: users/templates/users/user_pubkey_update.html:57 #: xpack/plugins/change_auth_plan/forms.py:56 -#: xpack/plugins/change_auth_plan/models.py:64 +#: xpack/plugins/change_auth_plan/models.py:63 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:61 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_list.html:12 #: xpack/plugins/cloud/models.py:59 xpack/plugins/cloud/models.py:144 @@ -199,7 +199,7 @@ msgstr "参数" #: perms/templates/perms/remote_app_permission_detail.html:90 #: users/models/user.py:414 users/serializers/group.py:32 #: users/templates/users/user_detail.html:111 -#: xpack/plugins/change_auth_plan/models.py:109 +#: xpack/plugins/change_auth_plan/models.py:108 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:113 #: xpack/plugins/cloud/models.py:80 xpack/plugins/cloud/models.py:179 #: xpack/plugins/gathered_user/models.py:46 @@ -262,7 +262,7 @@ msgstr "创建日期" #: users/templates/users/user_group_detail.html:67 #: users/templates/users/user_group_list.html:37 #: users/templates/users/user_profile.html:138 -#: xpack/plugins/change_auth_plan/models.py:105 +#: xpack/plugins/change_auth_plan/models.py:104 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:117 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_list.html:19 #: xpack/plugins/cloud/models.py:77 xpack/plugins/cloud/models.py:173 @@ -602,7 +602,7 @@ msgstr "端口" #: assets/templates/assets/asset_detail.html:196 #: assets/templates/assets/system_user_assets.html:83 #: perms/models/asset_permission.py:81 -#: xpack/plugins/change_auth_plan/models.py:75 +#: xpack/plugins/change_auth_plan/models.py:74 #: xpack/plugins/gathered_user/models.py:31 #: xpack/plugins/gathered_user/templates/gathered_user/task_list.html:17 msgid "Nodes" @@ -679,9 +679,9 @@ msgstr "选择资产" msgid "Content should not be contain: {}" msgstr "内容不能包含: {}" -#: assets/forms/domain.py:55 +#: assets/forms/domain.py:55 assets/models/domain.py:67 msgid "Password should not contain special characters" -msgstr "不能包含特殊字符" +msgstr "密码不能包含特殊字符" #: assets/forms/domain.py:74 msgid "SSH gateway support proxy SSH,RDP,VNC" @@ -709,8 +709,8 @@ msgstr "SSH网关,支持代理SSH,RDP和VNC" #: users/templates/users/user_list.html:36 #: users/templates/users/user_profile.html:47 #: xpack/plugins/change_auth_plan/forms.py:58 -#: xpack/plugins/change_auth_plan/models.py:66 -#: xpack/plugins/change_auth_plan/models.py:415 +#: xpack/plugins/change_auth_plan/models.py:65 +#: xpack/plugins/change_auth_plan/models.py:408 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:65 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:53 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_subtask_list.html:12 @@ -737,8 +737,8 @@ msgstr "密码或密钥密码" #: users/templates/users/user_profile_update.html:41 #: users/templates/users/user_pubkey_update.html:41 #: users/templates/users/user_update.html:20 -#: xpack/plugins/change_auth_plan/models.py:96 -#: xpack/plugins/change_auth_plan/models.py:264 +#: xpack/plugins/change_auth_plan/models.py:95 +#: xpack/plugins/change_auth_plan/models.py:263 msgid "Password" msgstr "密码" @@ -931,13 +931,13 @@ msgstr "版本" msgid "AuthBook" msgstr "" -#: assets/models/base.py:31 xpack/plugins/change_auth_plan/models.py:100 -#: xpack/plugins/change_auth_plan/models.py:271 +#: assets/models/base.py:31 xpack/plugins/change_auth_plan/models.py:99 +#: xpack/plugins/change_auth_plan/models.py:270 msgid "SSH private key" msgstr "ssh密钥" -#: assets/models/base.py:32 xpack/plugins/change_auth_plan/models.py:103 -#: xpack/plugins/change_auth_plan/models.py:267 +#: assets/models/base.py:32 xpack/plugins/change_auth_plan/models.py:102 +#: xpack/plugins/change_auth_plan/models.py:266 msgid "SSH public key" msgstr "ssh公钥" @@ -1177,7 +1177,7 @@ msgstr "手动登录" #: assets/views/label.py:27 assets/views/label.py:45 assets/views/label.py:73 #: assets/views/system_user.py:29 assets/views/system_user.py:46 #: assets/views/system_user.py:63 assets/views/system_user.py:79 -#: templates/_nav.html:39 xpack/plugins/change_auth_plan/models.py:71 +#: templates/_nav.html:39 xpack/plugins/change_auth_plan/models.py:70 msgid "Assets" msgstr "资产管理" @@ -1322,7 +1322,7 @@ msgstr "测试资产可连接性: {}" #: assets/tasks/asset_user_connectivity.py:27 #: assets/tasks/push_system_user.py:130 -#: xpack/plugins/change_auth_plan/models.py:528 +#: xpack/plugins/change_auth_plan/models.py:521 msgid "The asset {} system platform {} does not support run Ansible tasks" msgstr "资产 {} 系统平台 {} 不支持运行 Ansible 任务" @@ -1985,10 +1985,6 @@ msgstr "测试连接" msgid "Can be connected" msgstr "可连接" -#: assets/templates/assets/domain_gateway_list.html:142 -msgid "The connection fails" -msgstr "连接失败" - #: assets/templates/assets/domain_list.html:9 msgid "" "The domain function is added to address the fact that some environments " @@ -2272,7 +2268,7 @@ msgid "MFA" msgstr "MFA" #: audits/models.py:87 audits/templates/audits/login_log_list.html:63 -#: xpack/plugins/change_auth_plan/models.py:423 +#: xpack/plugins/change_auth_plan/models.py:416 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_subtask_list.html:15 #: xpack/plugins/cloud/models.py:278 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:69 @@ -2298,8 +2294,8 @@ msgstr "登录日期" #: perms/templates/perms/asset_permission_detail.html:86 #: perms/templates/perms/remote_app_permission_detail.html:78 #: terminal/models.py:167 terminal/templates/terminal/session_list.html:34 -#: xpack/plugins/change_auth_plan/models.py:250 -#: xpack/plugins/change_auth_plan/models.py:426 +#: xpack/plugins/change_auth_plan/models.py:249 +#: xpack/plugins/change_auth_plan/models.py:419 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:59 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_subtask_list.html:17 #: xpack/plugins/gathered_user/models.py:143 @@ -2846,8 +2842,8 @@ msgstr "完成时间" #: ops/models/adhoc.py:358 ops/templates/ops/adhoc_history.html:57 #: ops/templates/ops/task_history.html:63 ops/templates/ops/task_list.html:17 -#: xpack/plugins/change_auth_plan/models.py:253 -#: xpack/plugins/change_auth_plan/models.py:429 +#: xpack/plugins/change_auth_plan/models.py:252 +#: xpack/plugins/change_auth_plan/models.py:422 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:58 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_subtask_list.html:16 #: xpack/plugins/gathered_user/models.py:146 @@ -3950,7 +3946,7 @@ msgstr "删除失败" msgid "Are you sure about deleting it?" msgstr "您确定删除吗?" -#: settings/utils/ldap.py:130 +#: settings/utils/ldap.py:128 msgid "Search no entry matched in ou {}" msgstr "在ou:{}中没有匹配条目" @@ -4603,7 +4599,7 @@ msgstr "生成重置密码链接,通过邮件发送给用户" msgid "Set password" msgstr "设置密码" -#: users/forms.py:152 xpack/plugins/change_auth_plan/models.py:89 +#: users/forms.py:152 xpack/plugins/change_auth_plan/models.py:88 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_create_update.html:51 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:69 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:57 @@ -5533,8 +5529,8 @@ msgstr "" "具)
注意: 如果同时设置了定期执行和周期执行,优先使用定期执行" #: xpack/plugins/change_auth_plan/meta.py:9 -#: xpack/plugins/change_auth_plan/models.py:117 -#: xpack/plugins/change_auth_plan/models.py:257 +#: xpack/plugins/change_auth_plan/models.py:116 +#: xpack/plugins/change_auth_plan/models.py:256 #: xpack/plugins/change_auth_plan/views.py:33 #: xpack/plugins/change_auth_plan/views.py:50 #: xpack/plugins/change_auth_plan/views.py:74 @@ -5545,20 +5541,20 @@ msgstr "" msgid "Change auth plan" msgstr "改密计划" -#: xpack/plugins/change_auth_plan/models.py:58 +#: xpack/plugins/change_auth_plan/models.py:57 msgid "Custom password" msgstr "自定义密码" -#: xpack/plugins/change_auth_plan/models.py:59 +#: xpack/plugins/change_auth_plan/models.py:58 msgid "All assets use the same random password" msgstr "所有资产使用相同的随机密码" -#: xpack/plugins/change_auth_plan/models.py:60 +#: xpack/plugins/change_auth_plan/models.py:59 msgid "All assets use different random password" msgstr "所有资产使用不同的随机密码" -#: xpack/plugins/change_auth_plan/models.py:79 -#: xpack/plugins/change_auth_plan/models.py:148 +#: xpack/plugins/change_auth_plan/models.py:78 +#: xpack/plugins/change_auth_plan/models.py:147 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:100 #: xpack/plugins/cloud/models.py:165 xpack/plugins/cloud/models.py:219 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:91 @@ -5567,8 +5563,8 @@ msgstr "所有资产使用不同的随机密码" msgid "Cycle perform" msgstr "周期执行" -#: xpack/plugins/change_auth_plan/models.py:84 -#: xpack/plugins/change_auth_plan/models.py:146 +#: xpack/plugins/change_auth_plan/models.py:83 +#: xpack/plugins/change_auth_plan/models.py:145 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:92 #: xpack/plugins/cloud/models.py:170 xpack/plugins/cloud/models.py:217 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:83 @@ -5577,37 +5573,37 @@ msgstr "周期执行" msgid "Regularly perform" msgstr "定期执行" -#: xpack/plugins/change_auth_plan/models.py:93 +#: xpack/plugins/change_auth_plan/models.py:92 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:74 msgid "Password rules" msgstr "密码规则" -#: xpack/plugins/change_auth_plan/models.py:213 +#: xpack/plugins/change_auth_plan/models.py:212 msgid "* For security, do not change {} user's password" msgstr "* 为了安全,禁止更改 {} 用户的密码" -#: xpack/plugins/change_auth_plan/models.py:217 +#: xpack/plugins/change_auth_plan/models.py:216 msgid "Assets is empty, please add the asset" msgstr "资产为空,请添加资产" -#: xpack/plugins/change_auth_plan/models.py:261 +#: xpack/plugins/change_auth_plan/models.py:260 msgid "Change auth plan snapshot" msgstr "改密计划快照" -#: xpack/plugins/change_auth_plan/models.py:276 -#: xpack/plugins/change_auth_plan/models.py:433 +#: xpack/plugins/change_auth_plan/models.py:275 +#: xpack/plugins/change_auth_plan/models.py:426 msgid "Change auth plan execution" msgstr "改密计划执行" -#: xpack/plugins/change_auth_plan/models.py:442 +#: xpack/plugins/change_auth_plan/models.py:435 msgid "Change auth plan execution subtask" msgstr "改密计划执行子任务" -#: xpack/plugins/change_auth_plan/models.py:460 +#: xpack/plugins/change_auth_plan/models.py:453 msgid "Authentication failed" msgstr "认证失败" -#: xpack/plugins/change_auth_plan/models.py:462 +#: xpack/plugins/change_auth_plan/models.py:455 msgid "Connection timeout" msgstr "连接超时" @@ -6217,6 +6213,14 @@ msgstr "密码匣子" msgid "vault create" msgstr "创建" +#, fuzzy +#~| msgid "Password should not contain special characters" +#~ msgid "Password has special char" +#~ msgstr "不能包含特殊字符" + +#~ msgid "The connection fails" +#~ msgstr "连接失败" + #~ msgid "Recipient" #~ msgstr "收件人" From 6bfb026e47f5c9329c6e25c4688c3c89ae8c34ea Mon Sep 17 00:00:00 2001 From: BaiJiangJie Date: Wed, 13 Nov 2019 16:45:38 +0800 Subject: [PATCH 2/6] =?UTF-8?q?[Update]=20=E4=BF=AE=E6=94=B9=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=20LDAP=20=E5=90=8C=E6=AD=A5=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E5=9C=A8=E4=BB=BB=E5=8A=A1=E5=A4=96=E9=83=A8=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?running=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/settings/api.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/settings/api.py b/apps/settings/api.py index f55b37749..1fce9a44d 100644 --- a/apps/settings/api.py +++ b/apps/settings/api.py @@ -186,6 +186,8 @@ class LDAPUserListApi(generics.ListAPIView): sync_util = LDAPSyncUtil() # 还没有同步任务 if sync_util.task_no_start: + # 任务外部设置 task running 状态 + sync_util.set_task_status(sync_util.TASK_STATUS_IS_RUNNING) task = sync_ldap_user_task.delay() data = {'msg': 'Cache no data, sync task {} started.'.format(task.id)} return Response(data=data, status=409) From bea5dadbac475b773513fccc94428af3ddd85573 Mon Sep 17 00:00:00 2001 From: BaiJiangJie Date: Fri, 15 Nov 2019 11:56:51 +0800 Subject: [PATCH 3/6] =?UTF-8?q?[Update]=20=E4=BF=AE=E6=94=B9=E7=BB=88?= =?UTF-8?q?=E7=AB=AF=E6=B3=A8=E5=86=8C=E6=9D=A1=E4=BB=B6=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=88=E4=BB=8E=20serializer=20->=20view?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/terminal/api_v2/terminal.py | 4 ++++ apps/terminal/serializers_v2/terminal.py | 3 --- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/terminal/api_v2/terminal.py b/apps/terminal/api_v2/terminal.py index bad0aabc9..629fe6115 100644 --- a/apps/terminal/api_v2/terminal.py +++ b/apps/terminal/api_v2/terminal.py @@ -3,6 +3,7 @@ from rest_framework import viewsets, generics from rest_framework import status from rest_framework.response import Response +from django.conf import settings from common.permissions import IsSuperUser, WithBootstrapToken @@ -29,6 +30,9 @@ class TerminalRegistrationApi(generics.CreateAPIView): serializer = serializers.TerminalSerializer( data=data, context={'request': request} ) + if not settings.SECURITY_SERVICE_ACCOUNT_REGISTRATION: + data = {"error": "service account registration disabled"} + return Response(data=data, status=status.HTTP_400_BAD_REQUEST) serializer.is_valid(raise_exception=True) terminal = serializer.save() sa_serializer = serializer.sa_serializer_class(instance=terminal.user) diff --git a/apps/terminal/serializers_v2/terminal.py b/apps/terminal/serializers_v2/terminal.py index 021519564..f4e26b230 100644 --- a/apps/terminal/serializers_v2/terminal.py +++ b/apps/terminal/serializers_v2/terminal.py @@ -28,9 +28,6 @@ class TerminalSerializer(serializers.ModelSerializer): valid = super().is_valid(raise_exception=raise_exception) if not valid: return valid - if not settings.SECURITY_SERVICE_ACCOUNT_REGISTRATION: - error = {"error": "service account registration disabled"} - raise serializers.ValidationError(error) data = {'name': self.validated_data.get('name')} kwargs = {'data': data} if self.instance and self.instance.user: From 9b5cb8b0c553993a3cfe616442c9abfa8d78d438 Mon Sep 17 00:00:00 2001 From: BaiJiangJie Date: Fri, 15 Nov 2019 12:11:58 +0800 Subject: [PATCH 4/6] =?UTF-8?q?[Update]=20=E9=99=90=E5=88=B6=E9=80=9A?= =?UTF-8?q?=E8=BF=87=20POST=20=E6=96=B9=E6=B3=95=E8=B0=83=E7=94=A8=20Termi?= =?UTF-8?q?nalViewSet=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/terminal/api_v2/terminal.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/terminal/api_v2/terminal.py b/apps/terminal/api_v2/terminal.py index 629fe6115..57b8ab3e3 100644 --- a/apps/terminal/api_v2/terminal.py +++ b/apps/terminal/api_v2/terminal.py @@ -18,6 +18,9 @@ class TerminalViewSet(viewsets.ModelViewSet): queryset = Terminal.objects.filter(is_deleted=False) serializer_class = serializers.TerminalSerializer permission_classes = [IsSuperUser] + http_method_names = [ + 'get', 'put', 'patch', 'delete', 'head', 'options', 'trace' + ] class TerminalRegistrationApi(generics.CreateAPIView): From c6e7872ba8748d7b28bec95216d76faff4b21986 Mon Sep 17 00:00:00 2001 From: BaiJiangJie Date: Fri, 15 Nov 2019 14:58:43 +0800 Subject: [PATCH 5/6] =?UTF-8?q?[Update]=20=E8=B5=84=E4=BA=A7=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=88=97=E8=A1=A8=E6=94=AF=E6=8C=81=E6=A8=A1=E7=B3=8A?= =?UTF-8?q?=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/backends/base.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/apps/assets/backends/base.py b/apps/assets/backends/base.py index 801bfbbb1..d46c67f70 100644 --- a/apps/assets/backends/base.py +++ b/apps/assets/backends/base.py @@ -38,6 +38,9 @@ class AssetUserQuerySet(list): if len(v) == 0: return self if k.find("__in") >= 0: + _k = k.split('__')[0] + in_kwargs[_k] = v + else: in_kwargs[k] = v for k in in_kwargs: kwargs.pop(k) @@ -45,17 +48,16 @@ class AssetUserQuerySet(list): if len(in_kwargs) == 0: return self for i in self: - matched = True + matched = False for k, v in in_kwargs.items(): - key = k.split('__')[0] - attr = getattr(i, key, None) + attr = getattr(i, k, None) # 如果属性或者value中是uuid,则转换成string if isinstance(v[0], uuid.UUID): v = [str(i) for i in v] if isinstance(attr, uuid.UUID): attr = str(attr) - if attr not in v: - matched = False + if v in attr: + matched = True if matched: queryset.append(i) return AssetUserQuerySet(queryset) From d563a11acfc3541f214501c9c49660a330559da8 Mon Sep 17 00:00:00 2001 From: ibuler Date: Wed, 20 Nov 2019 11:57:53 +0800 Subject: [PATCH 6/6] =?UTF-8?q?[Update]=20=E4=BF=AE=E6=94=B9jms?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jms | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/jms b/jms index 6331227fa..7d0c3d334 100755 --- a/jms +++ b/jms @@ -114,7 +114,7 @@ def check_pid(pid): """ Check For the existence of a unix pid. """ try: os.kill(pid, 0) - except OSError: + except (OSError, ProcessLookupError): return False else: return True @@ -231,6 +231,9 @@ def get_start_worker_kwargs(queue, num): if os.getuid() == 0: os.environ.setdefault('C_FORCE_ROOT', '1') + server_hostname = os.environ.get("SERVER_HOSTNAME") + if not server_hostname: + server_hostname = '%h' cmd = [ 'celery', 'worker', @@ -238,7 +241,7 @@ def get_start_worker_kwargs(queue, num): '-l', 'INFO', '-c', str(num), '-Q', queue, - '-n', '{}@%h'.format(queue) + '-n', '{}@{}'.format(queue, server_hostname) ] return {"cmd": cmd, "cwd": APPS_DIR} @@ -437,6 +440,12 @@ def stop_service(srv, sig=15): print("Stop service: {}".format(s), end='') pid = get_pid(s) os.kill(pid, sig) + with LOCK: + process = processes.pop(s, None) + if process is None: + print("\033[31m No process found\033[0m") + continue + process.wait(1) for i in range(STOP_TIMEOUT): if i == STOP_TIMEOUT - 1: print("\033[31m Error\033[0m") @@ -447,9 +456,6 @@ def stop_service(srv, sig=15): time.sleep(1) continue - with LOCK: - processes.pop(s, None) - if srv == "all": stop_daemon_service()