mirror of https://github.com/jumpserver/jumpserver
[Update] 修改资产创建格式
parent
10616b8d9e
commit
2cd092af42
|
@ -40,8 +40,8 @@ class AssetViewSet(IDInCacheFilterMixin, LabelFilter, ApiMessageMixin, BulkModel
|
||||||
"""
|
"""
|
||||||
API endpoint that allows Asset to be viewed or edited.
|
API endpoint that allows Asset to be viewed or edited.
|
||||||
"""
|
"""
|
||||||
filter_fields = ("hostname", "ip")
|
filter_fields = ("hostname", "ip", "systemuser__id", "admin_user__id")
|
||||||
search_fields = filter_fields
|
search_fields = ("hostname", "ip")
|
||||||
ordering_fields = ("hostname", "ip", "port", "cpu_cores")
|
ordering_fields = ("hostname", "ip", "port", "cpu_cores")
|
||||||
queryset = Asset.objects.all()
|
queryset = Asset.objects.all()
|
||||||
serializer_class = serializers.AssetSerializer
|
serializer_class = serializers.AssetSerializer
|
||||||
|
|
|
@ -96,7 +96,7 @@ class AssetUserViewSet(IDInCacheFilterMixin, BulkModelViewSet):
|
||||||
assets = [asset]
|
assets = [asset]
|
||||||
elif node_id:
|
elif node_id:
|
||||||
node = get_object_or_404(Node, id=node_id)
|
node = get_object_or_404(Node, id=node_id)
|
||||||
assets = node.assets.all()
|
assets = node.get_all_assets()
|
||||||
|
|
||||||
if username:
|
if username:
|
||||||
kwargs['username'] = username
|
kwargs['username'] = username
|
||||||
|
|
|
@ -74,7 +74,7 @@ class Protocol(models.Model):
|
||||||
validators=PORT_VALIDATORS)
|
validators=PORT_VALIDATORS)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "{}:{}".format(self.name, self.port)
|
return "{}/{}".format(self.name, self.port)
|
||||||
|
|
||||||
|
|
||||||
class Asset(OrgModelMixin):
|
class Asset(OrgModelMixin):
|
||||||
|
|
|
@ -30,8 +30,8 @@ class AssetUser(OrgModelMixin):
|
||||||
_private_key = models.TextField(max_length=4096, blank=True, null=True, verbose_name=_('SSH private key'), validators=[private_key_validator, ])
|
_private_key = models.TextField(max_length=4096, blank=True, null=True, verbose_name=_('SSH private key'), validators=[private_key_validator, ])
|
||||||
_public_key = models.TextField(max_length=4096, blank=True, verbose_name=_('SSH public key'))
|
_public_key = models.TextField(max_length=4096, blank=True, verbose_name=_('SSH public key'))
|
||||||
comment = models.TextField(blank=True, verbose_name=_('Comment'))
|
comment = models.TextField(blank=True, verbose_name=_('Comment'))
|
||||||
date_created = models.DateTimeField(auto_now_add=True)
|
date_created = models.DateTimeField(auto_now_add=True, verbose_name=_("Date created"))
|
||||||
date_updated = models.DateTimeField(auto_now=True)
|
date_updated = models.DateTimeField(auto_now=True, verbose_name=_("Date updated"))
|
||||||
created_by = models.CharField(max_length=128, null=True, verbose_name=_('Created by'))
|
created_by = models.CharField(max_length=128, null=True, verbose_name=_('Created by'))
|
||||||
|
|
||||||
UNREACHABLE, REACHABLE, UNKNOWN = range(0, 3)
|
UNREACHABLE, REACHABLE, UNKNOWN = range(0, 3)
|
||||||
|
|
|
@ -22,8 +22,25 @@ class ProtocolSerializer(serializers.ModelSerializer):
|
||||||
fields = ["name", "port"]
|
fields = ["name", "port"]
|
||||||
|
|
||||||
|
|
||||||
|
class ProtocolsRelatedField(serializers.RelatedField):
|
||||||
|
def to_representation(self, value):
|
||||||
|
return str(value)
|
||||||
|
|
||||||
|
def to_internal_value(self, data):
|
||||||
|
if '/' not in data:
|
||||||
|
raise ValidationError("protocol not contain /: {}".format(data))
|
||||||
|
v = data.split("/")
|
||||||
|
if len(v) != 2:
|
||||||
|
raise ValidationError("protocol format should be name/port: {}".format(data))
|
||||||
|
name, port = v
|
||||||
|
cleaned_data = {"name": name, "port": port}
|
||||||
|
return cleaned_data
|
||||||
|
|
||||||
|
|
||||||
class AssetSerializer(BulkOrgResourceModelSerializer):
|
class AssetSerializer(BulkOrgResourceModelSerializer):
|
||||||
protocols = ProtocolSerializer(many=True)
|
protocols = ProtocolsRelatedField(
|
||||||
|
many=True, queryset=Protocol.objects.all(), label=_("Protocols")
|
||||||
|
)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
资产的数据结构
|
资产的数据结构
|
||||||
|
@ -47,6 +64,8 @@ class AssetSerializer(BulkOrgResourceModelSerializer):
|
||||||
'created_by', 'date_created',
|
'created_by', 'date_created',
|
||||||
)
|
)
|
||||||
extra_kwargs = {
|
extra_kwargs = {
|
||||||
|
'protocol': {'write_only': True},
|
||||||
|
'port': {'write_only': True},
|
||||||
'hardware_info': {'label': _('Hardware info')},
|
'hardware_info': {'label': _('Hardware info')},
|
||||||
'connectivity': {'label': _('Connectivity')},
|
'connectivity': {'label': _('Connectivity')},
|
||||||
'org_name': {'label': _('Org name')}
|
'org_name': {'label': _('Org name')}
|
||||||
|
@ -61,6 +80,8 @@ class AssetSerializer(BulkOrgResourceModelSerializer):
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def validate_protocols(attr):
|
def validate_protocols(attr):
|
||||||
|
protocols_serializer = ProtocolSerializer(data=attr, many=True)
|
||||||
|
protocols_serializer.is_valid(raise_exception=True)
|
||||||
protocols_name = [i.get("name", "ssh") for i in attr]
|
protocols_name = [i.get("name", "ssh") for i in attr]
|
||||||
errors = [{} for i in protocols_name]
|
errors = [{} for i in protocols_name]
|
||||||
for i, name in enumerate(protocols_name):
|
for i, name in enumerate(protocols_name):
|
||||||
|
@ -71,7 +92,7 @@ class AssetSerializer(BulkOrgResourceModelSerializer):
|
||||||
return attr
|
return attr
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
protocols_data = validated_data.pop("protocols")
|
protocols_data = validated_data.pop("protocols", [])
|
||||||
|
|
||||||
# 兼容老的api
|
# 兼容老的api
|
||||||
protocol = validated_data.get("protocol")
|
protocol = validated_data.get("protocol")
|
||||||
|
@ -91,7 +112,7 @@ class AssetSerializer(BulkOrgResourceModelSerializer):
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
def update(self, instance, validated_data):
|
def update(self, instance, validated_data):
|
||||||
protocols_data = validated_data.pop("protocols", None)
|
protocols_data = validated_data.pop("protocols", [])
|
||||||
|
|
||||||
# 兼容老的api
|
# 兼容老的api
|
||||||
protocol = validated_data.get("protocol")
|
protocol = validated_data.get("protocol")
|
||||||
|
|
|
@ -7,7 +7,6 @@ from rest_framework import serializers
|
||||||
from ..models import AuthBook, Asset
|
from ..models import AuthBook, Asset
|
||||||
from ..backends import AssetUserManager
|
from ..backends import AssetUserManager
|
||||||
from common.utils import validate_ssh_private_key
|
from common.utils import validate_ssh_private_key
|
||||||
from common.mixins import BulkSerializerMixin
|
|
||||||
from common.serializers import AdaptedBulkListSerializer
|
from common.serializers import AdaptedBulkListSerializer
|
||||||
from orgs.mixins import BulkOrgResourceModelSerializer
|
from orgs.mixins import BulkOrgResourceModelSerializer
|
||||||
|
|
||||||
|
|
|
@ -35,11 +35,10 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
{% include 'authentication/_mfa_confirm_modal.html' %}
|
|
||||||
<script src="{% static "js/plugins/clipboard/clipboard.min.js" %}"></script>
|
<script src="{% static "js/plugins/clipboard/clipboard.min.js" %}"></script>
|
||||||
<script>
|
<script>
|
||||||
var showPassword = false;
|
var showPassword = false;
|
||||||
var lastMFATime = "{{ request.session.OTP_LAST_VERIFY_TIME }}";
|
|
||||||
var authAssetId = "";
|
var authAssetId = "";
|
||||||
var authHostname = "";
|
var authHostname = "";
|
||||||
var authUsername = "";
|
var authUsername = "";
|
||||||
|
@ -90,25 +89,6 @@ $(document).ready(function () {
|
||||||
$("#id_password_view").attr("type", "password")
|
$("#id_password_view").attr("type", "password")
|
||||||
}
|
}
|
||||||
}).on("show.bs.modal", "#asset_user_auth_view", function () {
|
}).on("show.bs.modal", "#asset_user_auth_view", function () {
|
||||||
var now = new Date();
|
|
||||||
if (lastMFATime === "") {
|
|
||||||
lastMFATime = 0
|
|
||||||
}
|
|
||||||
var nowTime = now.getTime() / 1000;
|
|
||||||
if (nowTime - lastMFATime > 60*10 ) {
|
|
||||||
setTimeout(function () {
|
|
||||||
$("#asset_user_auth_view").modal("hide");
|
|
||||||
}, 100);
|
|
||||||
mfaFor = "viewAuth";
|
|
||||||
$("#mfa_auth_confirm").modal("show");
|
|
||||||
} else {
|
|
||||||
showAuth();
|
|
||||||
}
|
|
||||||
}).on("success", '#mfa_auth_confirm', function () {
|
|
||||||
if (mfaFor !== "viewAuth") {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
$("#asset_user_auth_view").modal("show");
|
|
||||||
showAuth();
|
showAuth();
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -25,12 +25,14 @@
|
||||||
</table>
|
</table>
|
||||||
{% include 'assets/_asset_user_auth_update_modal.html' %}
|
{% include 'assets/_asset_user_auth_update_modal.html' %}
|
||||||
{% include 'assets/_asset_user_auth_view_modal.html' %}
|
{% include 'assets/_asset_user_auth_view_modal.html' %}
|
||||||
|
{% include 'authentication/_mfa_confirm_modal.html' %}
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
var assetUserListUrl = "{% url "api-assets:asset-user-list" %}";
|
var assetUserListUrl = "{% url "api-assets:asset-user-list" %}";
|
||||||
var assetUserTable;
|
var assetUserTable;
|
||||||
var needPush = false;
|
var needPush = false;
|
||||||
var prefer = null;
|
var prefer = null;
|
||||||
|
var lastMFATime = "{{ request.session.OTP_LAST_VERIFY_TIME }}";
|
||||||
|
|
||||||
function initAssetUserTable() {
|
function initAssetUserTable() {
|
||||||
var options = {
|
var options = {
|
||||||
|
@ -98,7 +100,20 @@ $(document).ready(function(){
|
||||||
authAssetId = $(this).data("asset") ;
|
authAssetId = $(this).data("asset") ;
|
||||||
authHostname = $(this).data("hostname");
|
authHostname = $(this).data("hostname");
|
||||||
authUsername = $(this).data('user');
|
authUsername = $(this).data('user');
|
||||||
$("#asset_user_auth_view").modal('show');
|
var now = new Date();
|
||||||
|
var nowTime = now.getTime() / 1000;
|
||||||
|
if (nowTime - lastMFATime > 60*10 ) {
|
||||||
|
mfaFor = "viewAuth";
|
||||||
|
$("#mfa_auth_confirm").modal("show");
|
||||||
|
} else {
|
||||||
|
$("#asset_user_auth_view").modal('show');
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.on("success", '#mfa_auth_confirm', function () {
|
||||||
|
if (mfaFor !== "viewAuth") {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
$("#asset_user_auth_view").modal("show");
|
||||||
})
|
})
|
||||||
.on('click', '.btn-update-auth', function() {
|
.on('click', '.btn-update-auth', function() {
|
||||||
authUsername = $(this).data("user") ;
|
authUsername = $(this).data("user") ;
|
||||||
|
@ -126,4 +141,5 @@ $(document).ready(function(){
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
|
@ -201,49 +201,47 @@ $(document).ready(function () {
|
||||||
}
|
}
|
||||||
$(this).parent().parent().find(".protocol-port").val(port);
|
$(this).parent().parent().find(".protocol-port").val(port);
|
||||||
})
|
})
|
||||||
</script>
|
.on("submit", "form", function (evt) {
|
||||||
{% block form_submit %}
|
evt.preventDefault();
|
||||||
<script>
|
{% block formUrl %}
|
||||||
$(document).ready(function () {
|
var the_url = '{% url 'api-assets:asset-list' %}';
|
||||||
})
|
var redirect_to = '{% url "assets:asset-list" %}';
|
||||||
.on("submit", "form", function (evt) {
|
var method = "POST";
|
||||||
evt.preventDefault();
|
{% endblock %}
|
||||||
var the_url = '{% url 'api-assets:asset-list' %}';
|
var form = $("form");
|
||||||
var redirect_to = '{% url "assets:asset-list" %}';
|
var protocols = {};
|
||||||
var form = $("form");
|
var data = form.serializeObject();
|
||||||
var protocols = {};
|
$.each(data, function (k, v) {
|
||||||
var data = form.serializeObject();
|
if (k.startsWith("form")){
|
||||||
$.each(data, function (k, v) {
|
delete data[k];
|
||||||
if (k.startsWith("form")){
|
var _k = k.split("-");
|
||||||
delete data[k];
|
var formName = _k.slice(0, 2).join("-");
|
||||||
var _k = k.split("-");
|
var key = _k[_k.length-1];
|
||||||
var formName = _k.slice(0, 2).join("-");
|
if (!protocols[formName]) {
|
||||||
var key = _k[_k.length-1];
|
protocols[formName] = {}
|
||||||
if (!protocols[formName]) {
|
|
||||||
protocols[formName] = {}
|
|
||||||
}
|
|
||||||
protocols[formName][key] = v
|
|
||||||
}
|
}
|
||||||
});
|
protocols[formName][key] = v
|
||||||
protocols = $.map(protocols, function ( v) {
|
|
||||||
return v
|
|
||||||
});
|
|
||||||
data["protocols"] = protocols;
|
|
||||||
if (typeof data.labels === "string") {
|
|
||||||
data["labels"] = [data["labels"]];
|
|
||||||
}
|
}
|
||||||
if (typeof data["nodes"] == "string") {
|
});
|
||||||
data["nodes"] = [data["nodes"]]
|
|
||||||
}
|
protocols = $.map(protocols, function (v) {
|
||||||
var props = {
|
return v.name + '/' + v.port
|
||||||
url: the_url,
|
});
|
||||||
data: data,
|
data["protocols"] = protocols;
|
||||||
method: "POST",
|
if (typeof data.labels === "string") {
|
||||||
form: form,
|
data["labels"] = [data["labels"]];
|
||||||
redirect_to: redirect_to
|
}
|
||||||
};
|
if (typeof data["nodes"] == "string") {
|
||||||
formSubmit(props);
|
data["nodes"] = [data["nodes"]]
|
||||||
})
|
}
|
||||||
</script>
|
var props = {
|
||||||
|
url: the_url,
|
||||||
|
data: data,
|
||||||
|
method: method,
|
||||||
|
form: form,
|
||||||
|
redirect_to: redirect_to
|
||||||
|
};
|
||||||
|
formSubmit(props);
|
||||||
|
})
|
||||||
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% endblock %}
|
|
|
@ -72,8 +72,7 @@
|
||||||
<td>{% trans 'Protocol' %}</td>
|
<td>{% trans 'Protocol' %}</td>
|
||||||
<td>
|
<td>
|
||||||
{% for protocol in asset.protocols.all %}
|
{% for protocol in asset.protocols.all %}
|
||||||
<b>{{ protocol.name }}:</b>
|
<b>{{ protocol }}</b>
|
||||||
{{ protocol.port }}
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
|
@ -8,47 +8,8 @@
|
||||||
{% bootstrap_field form.number layout="horizontal" %}
|
{% bootstrap_field form.number layout="horizontal" %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block form_submit %}
|
{% block formUrl %}
|
||||||
<script>
|
|
||||||
$(document).ready(function () {
|
|
||||||
})
|
|
||||||
.on("submit", "form", function (evt) {
|
|
||||||
evt.preventDefault();
|
|
||||||
var the_url = '{% url 'api-assets:asset-detail' pk=object.id %}';
|
var the_url = '{% url 'api-assets:asset-detail' pk=object.id %}';
|
||||||
var redirect_to = '{% url "assets:asset-list" %}';
|
var redirect_to = '{% url "assets:asset-list" %}';
|
||||||
var form = $("form");
|
var method = 'PUT';
|
||||||
var protocols = {};
|
|
||||||
var data = form.serializeObject();
|
|
||||||
$.each(data, function (k, v) {
|
|
||||||
if (k.startsWith("form")){
|
|
||||||
delete data[k];
|
|
||||||
var _k = k.split("-");
|
|
||||||
var formName = _k.slice(0, 2).join("-");
|
|
||||||
var key = _k[_k.length-1];
|
|
||||||
if (!protocols[formName]) {
|
|
||||||
protocols[formName] = {}
|
|
||||||
}
|
|
||||||
protocols[formName][key] = v
|
|
||||||
}
|
|
||||||
});
|
|
||||||
protocols = $.map(protocols, function ( v) {
|
|
||||||
return v
|
|
||||||
});
|
|
||||||
data["protocols"] = protocols;
|
|
||||||
if (typeof data.labels === "string") {
|
|
||||||
data["labels"] = [data["labels"]];
|
|
||||||
}
|
|
||||||
if (typeof data["nodes"] == "string") {
|
|
||||||
data["nodes"] = [data["nodes"]]
|
|
||||||
}
|
|
||||||
var props = {
|
|
||||||
url: the_url,
|
|
||||||
data: data,
|
|
||||||
method: "PUT",
|
|
||||||
form: form,
|
|
||||||
redirect_to: redirect_to
|
|
||||||
};
|
|
||||||
formSubmit(props);
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
{% endblock %}
|
{% endblock %}
|
|
@ -22,32 +22,6 @@
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<script>
|
<script>
|
||||||
var lastMFATime = "{{ request.session.OTP_LAST_VERIFY_TIME }}";
|
|
||||||
|
|
||||||
function showAuth() {
|
|
||||||
$(".mfa-field").hide();
|
|
||||||
$(".auth-field").show();
|
|
||||||
|
|
||||||
var url = "{% url "api-assets:asset-user-auth-info" %}?asset_id=" + asset_id + "&username=" + username;
|
|
||||||
$("#id_username_view").html(username);
|
|
||||||
$("#id_hostname_view").html(host);
|
|
||||||
var success = function (data) {
|
|
||||||
var password = data.password;
|
|
||||||
$("#id_password_view").val(password);
|
|
||||||
};
|
|
||||||
var error = function() {
|
|
||||||
var msg = "{% trans 'Get auth info error' %}";
|
|
||||||
toastr.error(msg)
|
|
||||||
};
|
|
||||||
APIUpdateAttr({
|
|
||||||
url: url,
|
|
||||||
method: "GET",
|
|
||||||
success: success,
|
|
||||||
flash_message: false,
|
|
||||||
error: error
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
var codeError = "{% trans 'Code error' %}";
|
var codeError = "{% trans 'Code error' %}";
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
|
|
|
@ -216,7 +216,10 @@ class ApiMessageMixin:
|
||||||
data = {k: v for k, v in cleaned_data.items()}
|
data = {k: v for k, v in cleaned_data.items()}
|
||||||
action = getattr(self, "action", "create")
|
action = getattr(self, "action", "create")
|
||||||
data["action"] = self._action_map.get(action)
|
data["action"] = self._action_map.get(action)
|
||||||
message = self.success_message % data
|
try:
|
||||||
|
message = self.success_message % data
|
||||||
|
except:
|
||||||
|
message = ''
|
||||||
return message
|
return message
|
||||||
|
|
||||||
def dispatch(self, request, *args, **kwargs):
|
def dispatch(self, request, *args, **kwargs):
|
||||||
|
|
Binary file not shown.
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Jumpserver 0.3.3\n"
|
"Project-Id-Version: Jumpserver 0.3.3\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2019-06-19 10:59+0800\n"
|
"POT-Creation-Date: 2019-06-19 18:16+0800\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: ibuler <ibuler@qq.com>\n"
|
"Last-Translator: ibuler <ibuler@qq.com>\n"
|
||||||
"Language-Team: Jumpserver team<ibuler@qq.com>\n"
|
"Language-Team: Jumpserver team<ibuler@qq.com>\n"
|
||||||
|
@ -77,7 +77,7 @@ msgstr "运行参数"
|
||||||
#: applications/templates/applications/user_remote_app_list.html:18
|
#: applications/templates/applications/user_remote_app_list.html:18
|
||||||
#: assets/forms/domain.py:15 assets/forms/label.py:13
|
#: assets/forms/domain.py:15 assets/forms/label.py:13
|
||||||
#: assets/models/asset.py:315 assets/models/authbook.py:27
|
#: assets/models/asset.py:315 assets/models/authbook.py:27
|
||||||
#: assets/serializers/admin_user.py:23 assets/serializers/asset_user.py:105
|
#: assets/serializers/admin_user.py:24 assets/serializers/asset_user.py:105
|
||||||
#: assets/serializers/system_user.py:28
|
#: assets/serializers/system_user.py:28
|
||||||
#: assets/templates/assets/admin_user_list.html:49
|
#: assets/templates/assets/admin_user_list.html:49
|
||||||
#: assets/templates/assets/domain_detail.html:60
|
#: assets/templates/assets/domain_detail.html:60
|
||||||
|
@ -218,7 +218,7 @@ msgstr "参数"
|
||||||
#: perms/models/asset_permission.py:62 perms/models/base.py:41
|
#: perms/models/asset_permission.py:62 perms/models/base.py:41
|
||||||
#: perms/templates/perms/asset_permission_detail.html:98
|
#: perms/templates/perms/asset_permission_detail.html:98
|
||||||
#: perms/templates/perms/remote_app_permission_detail.html:90
|
#: perms/templates/perms/remote_app_permission_detail.html:90
|
||||||
#: users/models/user.py:104 users/serializers/v1.py:72
|
#: users/models/user.py:104 users/serializers/v1.py:73
|
||||||
#: users/templates/users/user_detail.html:111
|
#: users/templates/users/user_detail.html:111
|
||||||
#: xpack/plugins/change_auth_plan/models.py:106
|
#: xpack/plugins/change_auth_plan/models.py:106
|
||||||
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:113
|
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:113
|
||||||
|
@ -230,9 +230,10 @@ msgstr "创建者"
|
||||||
# msgstr "创建者"
|
# msgstr "创建者"
|
||||||
#: applications/models/remote_app.py:46
|
#: applications/models/remote_app.py:46
|
||||||
#: applications/templates/applications/remote_app_detail.html:73
|
#: applications/templates/applications/remote_app_detail.html:73
|
||||||
#: assets/models/asset.py:133 assets/models/cluster.py:26
|
#: assets/models/asset.py:133 assets/models/base.py:33
|
||||||
#: assets/models/domain.py:23 assets/models/group.py:22
|
#: assets/models/cluster.py:26 assets/models/domain.py:23
|
||||||
#: assets/models/label.py:25 assets/serializers/admin_user.py:37
|
#: assets/models/group.py:22 assets/models/label.py:25
|
||||||
|
#: assets/serializers/admin_user.py:38
|
||||||
#: assets/templates/assets/admin_user_detail.html:64
|
#: assets/templates/assets/admin_user_detail.html:64
|
||||||
#: assets/templates/assets/cmd_filter_detail.html:69
|
#: assets/templates/assets/cmd_filter_detail.html:69
|
||||||
#: assets/templates/assets/domain_detail.html:68
|
#: assets/templates/assets/domain_detail.html:68
|
||||||
|
@ -405,13 +406,13 @@ msgstr "提交"
|
||||||
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:20
|
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:20
|
||||||
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:17
|
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:17
|
||||||
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:106
|
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:106
|
||||||
#: xpack/plugins/change_auth_plan/views.py:83
|
#: xpack/plugins/change_auth_plan/views.py:88
|
||||||
msgid "Detail"
|
msgid "Detail"
|
||||||
msgstr "详情"
|
msgstr "详情"
|
||||||
|
|
||||||
#: applications/templates/applications/remote_app_detail.html:21
|
#: applications/templates/applications/remote_app_detail.html:21
|
||||||
#: applications/templates/applications/remote_app_list.html:56
|
#: applications/templates/applications/remote_app_list.html:56
|
||||||
#: assets/templates/assets/_asset_user_list.html:60
|
#: assets/templates/assets/_asset_user_list.html:62
|
||||||
#: assets/templates/assets/admin_user_detail.html:24
|
#: assets/templates/assets/admin_user_detail.html:24
|
||||||
#: assets/templates/assets/admin_user_list.html:29
|
#: assets/templates/assets/admin_user_list.html:29
|
||||||
#: assets/templates/assets/admin_user_list.html:112
|
#: assets/templates/assets/admin_user_list.html:112
|
||||||
|
@ -508,7 +509,7 @@ msgid "Download application loader"
|
||||||
msgstr "下载应用加载器"
|
msgstr "下载应用加载器"
|
||||||
|
|
||||||
#: applications/templates/applications/remote_app_list.html:12
|
#: applications/templates/applications/remote_app_list.html:12
|
||||||
#: applications/views/remote_app.py:49
|
#: applications/views/remote_app.py:48
|
||||||
msgid "Create RemoteApp"
|
msgid "Create RemoteApp"
|
||||||
msgstr "创建远程应用"
|
msgstr "创建远程应用"
|
||||||
|
|
||||||
|
@ -555,17 +556,17 @@ msgstr "动作"
|
||||||
msgid "Connect"
|
msgid "Connect"
|
||||||
msgstr "连接"
|
msgstr "连接"
|
||||||
|
|
||||||
#: applications/views/remote_app.py:32 applications/views/remote_app.py:48
|
#: applications/views/remote_app.py:31 applications/views/remote_app.py:47
|
||||||
#: applications/views/remote_app.py:70 applications/views/remote_app.py:88
|
#: applications/views/remote_app.py:69 applications/views/remote_app.py:87
|
||||||
#: assets/models/user.py:135
|
#: assets/models/user.py:135
|
||||||
#: assets/templates/assets/_asset_group_bulk_update_modal.html:11
|
#: assets/templates/assets/_asset_group_bulk_update_modal.html:11
|
||||||
#: assets/templates/assets/system_user_asset.html:22
|
#: assets/templates/assets/system_user_asset.html:22
|
||||||
#: assets/templates/assets/system_user_detail.html:22
|
#: assets/templates/assets/system_user_detail.html:22
|
||||||
#: assets/views/admin_user.py:30 assets/views/admin_user.py:49
|
#: assets/views/admin_user.py:30 assets/views/admin_user.py:49
|
||||||
#: assets/views/admin_user.py:66 assets/views/admin_user.py:82
|
#: assets/views/admin_user.py:66 assets/views/admin_user.py:82
|
||||||
#: assets/views/admin_user.py:107 assets/views/asset.py:53
|
#: assets/views/admin_user.py:107 assets/views/asset.py:52
|
||||||
#: assets/views/asset.py:70 assets/views/asset.py:128 assets/views/asset.py:171
|
#: assets/views/asset.py:69 assets/views/asset.py:128 assets/views/asset.py:171
|
||||||
#: assets/views/asset.py:199 assets/views/asset.py:225
|
#: assets/views/asset.py:199 assets/views/asset.py:226
|
||||||
#: assets/views/cmd_filter.py:31 assets/views/cmd_filter.py:48
|
#: assets/views/cmd_filter.py:31 assets/views/cmd_filter.py:48
|
||||||
#: assets/views/cmd_filter.py:65 assets/views/cmd_filter.py:82
|
#: assets/views/cmd_filter.py:65 assets/views/cmd_filter.py:82
|
||||||
#: assets/views/cmd_filter.py:102 assets/views/cmd_filter.py:136
|
#: assets/views/cmd_filter.py:102 assets/views/cmd_filter.py:136
|
||||||
|
@ -580,15 +581,15 @@ msgstr "连接"
|
||||||
msgid "Assets"
|
msgid "Assets"
|
||||||
msgstr "资产管理"
|
msgstr "资产管理"
|
||||||
|
|
||||||
#: applications/views/remote_app.py:33
|
#: applications/views/remote_app.py:32
|
||||||
msgid "RemoteApp list"
|
msgid "RemoteApp list"
|
||||||
msgstr "远程应用列表"
|
msgstr "远程应用列表"
|
||||||
|
|
||||||
#: applications/views/remote_app.py:71
|
#: applications/views/remote_app.py:70
|
||||||
msgid "Update RemoteApp"
|
msgid "Update RemoteApp"
|
||||||
msgstr "更新远程应用"
|
msgstr "更新远程应用"
|
||||||
|
|
||||||
#: applications/views/remote_app.py:89
|
#: applications/views/remote_app.py:88
|
||||||
msgid "RemoteApp detail"
|
msgid "RemoteApp detail"
|
||||||
msgstr "远程应用详情"
|
msgstr "远程应用详情"
|
||||||
|
|
||||||
|
@ -624,7 +625,7 @@ msgstr "测试节点下资产是否可连接: {}"
|
||||||
#: perms/models/asset_permission.py:38
|
#: perms/models/asset_permission.py:38
|
||||||
#: xpack/plugins/change_auth_plan/models.py:72
|
#: xpack/plugins/change_auth_plan/models.py:72
|
||||||
msgid "Nodes"
|
msgid "Nodes"
|
||||||
msgstr "节点管理"
|
msgstr "节点"
|
||||||
|
|
||||||
#: assets/forms/asset.py:48 assets/forms/asset.py:83 assets/models/asset.py:107
|
#: assets/forms/asset.py:48 assets/forms/asset.py:83 assets/models/asset.py:107
|
||||||
#: assets/models/cluster.py:19 assets/models/user.py:92
|
#: assets/models/cluster.py:19 assets/models/user.py:92
|
||||||
|
@ -738,7 +739,7 @@ msgid "Password or private key passphrase"
|
||||||
msgstr "密码或密钥密码"
|
msgstr "密码或密钥密码"
|
||||||
|
|
||||||
#: assets/forms/user.py:26 assets/models/base.py:29
|
#: assets/forms/user.py:26 assets/models/base.py:29
|
||||||
#: assets/serializers/admin_user.py:20 assets/serializers/asset_user.py:33
|
#: assets/serializers/admin_user.py:21 assets/serializers/asset_user.py:33
|
||||||
#: assets/serializers/asset_user.py:86 assets/serializers/system_user.py:16
|
#: assets/serializers/asset_user.py:86 assets/serializers/system_user.py:16
|
||||||
#: assets/templates/assets/_asset_user_auth_update_modal.html:21
|
#: assets/templates/assets/_asset_user_auth_update_modal.html:21
|
||||||
#: assets/templates/assets/_asset_user_auth_view_modal.html:27
|
#: assets/templates/assets/_asset_user_auth_view_modal.html:27
|
||||||
|
@ -941,14 +942,14 @@ msgid "Labels"
|
||||||
msgstr "标签管理"
|
msgstr "标签管理"
|
||||||
|
|
||||||
#: assets/models/asset.py:140 assets/models/base.py:39
|
#: assets/models/asset.py:140 assets/models/base.py:39
|
||||||
#: assets/serializers/admin_user.py:22 assets/serializers/system_user.py:19
|
#: assets/serializers/admin_user.py:23 assets/serializers/system_user.py:19
|
||||||
#: assets/templates/assets/admin_user_list.html:51
|
#: assets/templates/assets/admin_user_list.html:51
|
||||||
#: assets/templates/assets/system_user_list.html:57
|
#: assets/templates/assets/system_user_list.html:57
|
||||||
msgid "Unreachable"
|
msgid "Unreachable"
|
||||||
msgstr "不可达"
|
msgstr "不可达"
|
||||||
|
|
||||||
#: assets/models/asset.py:141 assets/models/base.py:40
|
#: assets/models/asset.py:141 assets/models/base.py:40
|
||||||
#: assets/serializers/admin_user.py:24 assets/serializers/system_user.py:27
|
#: assets/serializers/admin_user.py:25 assets/serializers/system_user.py:27
|
||||||
#: assets/templates/assets/admin_user_list.html:50
|
#: assets/templates/assets/admin_user_list.html:50
|
||||||
#: assets/templates/assets/asset_list.html:107
|
#: assets/templates/assets/asset_list.html:107
|
||||||
#: assets/templates/assets/system_user_list.html:56
|
#: assets/templates/assets/system_user_list.html:56
|
||||||
|
@ -987,6 +988,12 @@ msgstr "ssh密钥"
|
||||||
msgid "SSH public key"
|
msgid "SSH public key"
|
||||||
msgstr "ssh公钥"
|
msgstr "ssh公钥"
|
||||||
|
|
||||||
|
#: assets/models/base.py:34 assets/serializers/admin_user.py:39
|
||||||
|
#: assets/templates/assets/cmd_filter_detail.html:73
|
||||||
|
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:109
|
||||||
|
msgid "Date updated"
|
||||||
|
msgstr "更新日期"
|
||||||
|
|
||||||
#: assets/models/cluster.py:20
|
#: assets/models/cluster.py:20
|
||||||
msgid "Bandwidth"
|
msgid "Bandwidth"
|
||||||
msgstr "带宽"
|
msgstr "带宽"
|
||||||
|
@ -1141,9 +1148,9 @@ msgstr "默认资产组"
|
||||||
#: terminal/templates/terminal/command_list.html:72
|
#: terminal/templates/terminal/command_list.html:72
|
||||||
#: terminal/templates/terminal/session_list.html:33
|
#: terminal/templates/terminal/session_list.html:33
|
||||||
#: terminal/templates/terminal/session_list.html:71 users/forms.py:301
|
#: terminal/templates/terminal/session_list.html:71 users/forms.py:301
|
||||||
#: users/models/user.py:37 users/models/user.py:473 users/serializers/v1.py:61
|
#: users/models/user.py:37 users/models/user.py:473 users/serializers/v1.py:62
|
||||||
#: users/templates/users/user_group_detail.html:78
|
#: users/templates/users/user_group_detail.html:78
|
||||||
#: users/templates/users/user_group_list.html:36 users/views/user.py:406
|
#: users/templates/users/user_group_list.html:36 users/views/user.py:407
|
||||||
#: xpack/plugins/orgs/forms.py:26
|
#: xpack/plugins/orgs/forms.py:26
|
||||||
#: xpack/plugins/orgs/templates/orgs/org_detail.html:113
|
#: xpack/plugins/orgs/templates/orgs/org_detail.html:113
|
||||||
#: xpack/plugins/orgs/templates/orgs/org_list.html:14
|
#: xpack/plugins/orgs/templates/orgs/org_list.html:14
|
||||||
|
@ -1199,11 +1206,9 @@ msgstr "登录模式"
|
||||||
msgid "%(value)s is not an even number"
|
msgid "%(value)s is not an even number"
|
||||||
msgstr "%(value)s is not an even number"
|
msgstr "%(value)s is not an even number"
|
||||||
|
|
||||||
#: assets/serializers/admin_user.py:38
|
#: assets/serializers/asset.py:26 assets/templates/assets/asset_create.html:24
|
||||||
#: assets/templates/assets/cmd_filter_detail.html:73
|
msgid "Protocols"
|
||||||
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:109
|
msgstr "协议组"
|
||||||
msgid "Date updated"
|
|
||||||
msgstr "更新日期"
|
|
||||||
|
|
||||||
#: assets/serializers/asset.py:52
|
#: assets/serializers/asset.py:52
|
||||||
msgid "Hardware info"
|
msgid "Hardware info"
|
||||||
|
@ -1214,9 +1219,9 @@ msgstr "硬件信息"
|
||||||
msgid "Connectivity"
|
msgid "Connectivity"
|
||||||
msgstr "连接"
|
msgstr "连接"
|
||||||
|
|
||||||
#: assets/serializers/asset.py:54
|
#: assets/serializers/asset.py:54 orgs/mixins.py:223
|
||||||
msgid "Org name"
|
msgid "Org name"
|
||||||
msgstr "组织名"
|
msgstr "组织名称"
|
||||||
|
|
||||||
#: assets/serializers/asset.py:70
|
#: assets/serializers/asset.py:70
|
||||||
msgid "Protocol duplicate: {}"
|
msgid "Protocol duplicate: {}"
|
||||||
|
@ -1234,7 +1239,7 @@ msgstr "ssh公钥"
|
||||||
|
|
||||||
#: assets/serializers/asset_user.py:43
|
#: assets/serializers/asset_user.py:43
|
||||||
msgid "Backend"
|
msgid "Backend"
|
||||||
msgstr ""
|
msgstr "后端"
|
||||||
|
|
||||||
#: assets/serializers/asset_user.py:65
|
#: assets/serializers/asset_user.py:65
|
||||||
msgid "private key invalid"
|
msgid "private key invalid"
|
||||||
|
@ -1376,8 +1381,8 @@ msgstr "启用MFA"
|
||||||
msgid "Import assets"
|
msgid "Import assets"
|
||||||
msgstr "导入资产"
|
msgstr "导入资产"
|
||||||
|
|
||||||
#: assets/templates/assets/_asset_list_modal.html:7 assets/views/asset.py:54
|
#: assets/templates/assets/_asset_list_modal.html:7 assets/views/asset.py:53
|
||||||
#: templates/_nav.html:22 xpack/plugins/change_auth_plan/views.py:110
|
#: templates/_nav.html:22 xpack/plugins/change_auth_plan/views.py:116
|
||||||
msgid "Asset list"
|
msgid "Asset list"
|
||||||
msgstr "资产列表"
|
msgstr "资产列表"
|
||||||
|
|
||||||
|
@ -1398,7 +1403,7 @@ msgstr "请输入密码"
|
||||||
#: assets/templates/assets/asset_detail.html:312
|
#: assets/templates/assets/asset_detail.html:312
|
||||||
#: users/templates/users/user_detail.html:307
|
#: users/templates/users/user_detail.html:307
|
||||||
#: users/templates/users/user_detail.html:334
|
#: users/templates/users/user_detail.html:334
|
||||||
#: xpack/plugins/interface/views.py:34
|
#: xpack/plugins/interface/views.py:35
|
||||||
msgid "Update successfully!"
|
msgid "Update successfully!"
|
||||||
msgstr "更新成功"
|
msgstr "更新成功"
|
||||||
|
|
||||||
|
@ -1406,18 +1411,17 @@ msgstr "更新成功"
|
||||||
msgid "Asset user auth"
|
msgid "Asset user auth"
|
||||||
msgstr "资产用户信息"
|
msgstr "资产用户信息"
|
||||||
|
|
||||||
#: assets/templates/assets/_asset_user_auth_view_modal.html:55
|
#: assets/templates/assets/_asset_user_auth_view_modal.html:54
|
||||||
msgid "Copy success"
|
msgid "Copy success"
|
||||||
msgstr "复制成功"
|
msgstr "复制成功"
|
||||||
|
|
||||||
#: assets/templates/assets/_asset_user_auth_view_modal.html:71
|
#: assets/templates/assets/_asset_user_auth_view_modal.html:70
|
||||||
#: authentication/templates/authentication/_mfa_confirm_modal.html:39
|
|
||||||
msgid "Get auth info error"
|
msgid "Get auth info error"
|
||||||
msgstr "获取认证信息错误"
|
msgstr "获取认证信息错误"
|
||||||
|
|
||||||
#: assets/templates/assets/_asset_user_auth_view_modal.html:117
|
#: assets/templates/assets/_asset_user_auth_view_modal.html:97
|
||||||
#: assets/templates/assets/_user_asset_detail_modal.html:23
|
#: assets/templates/assets/_user_asset_detail_modal.html:23
|
||||||
#: authentication/templates/authentication/_mfa_confirm_modal.html:79
|
#: authentication/templates/authentication/_mfa_confirm_modal.html:53
|
||||||
#: settings/templates/settings/_ldap_list_users_modal.html:99
|
#: settings/templates/settings/_ldap_list_users_modal.html:99
|
||||||
#: templates/_modal.html:22
|
#: templates/_modal.html:22
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
|
@ -1432,13 +1436,13 @@ msgstr "关闭"
|
||||||
msgid "Datetime"
|
msgid "Datetime"
|
||||||
msgstr "日期"
|
msgstr "日期"
|
||||||
|
|
||||||
#: assets/templates/assets/_asset_user_list.html:59
|
#: assets/templates/assets/_asset_user_list.html:61
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "View auth"
|
#| msgid "View auth"
|
||||||
msgid "View"
|
msgid "View"
|
||||||
msgstr "查看认证"
|
msgstr "查看认证"
|
||||||
|
|
||||||
#: assets/templates/assets/_asset_user_list.html:61
|
#: assets/templates/assets/_asset_user_list.html:63
|
||||||
#: assets/templates/assets/admin_user_assets.html:61
|
#: assets/templates/assets/admin_user_assets.html:61
|
||||||
#: assets/templates/assets/asset_asset_user_list.html:57
|
#: assets/templates/assets/asset_asset_user_list.html:57
|
||||||
#: assets/templates/assets/asset_detail.html:183
|
#: assets/templates/assets/asset_detail.html:183
|
||||||
|
@ -1447,7 +1451,7 @@ msgstr "查看认证"
|
||||||
msgid "Test"
|
msgid "Test"
|
||||||
msgstr "测试"
|
msgstr "测试"
|
||||||
|
|
||||||
#: assets/templates/assets/_asset_user_list.html:62
|
#: assets/templates/assets/_asset_user_list.html:64
|
||||||
#: assets/templates/assets/system_user_asset.html:72
|
#: assets/templates/assets/system_user_asset.html:72
|
||||||
#: assets/templates/assets/system_user_detail.html:142
|
#: assets/templates/assets/system_user_detail.html:142
|
||||||
msgid "Push"
|
msgid "Push"
|
||||||
|
@ -1506,7 +1510,7 @@ msgstr "更新系统用户"
|
||||||
|
|
||||||
#: assets/templates/assets/_user_asset_detail_modal.html:11
|
#: assets/templates/assets/_user_asset_detail_modal.html:11
|
||||||
#: assets/templates/assets/asset_asset_user_list.html:13
|
#: assets/templates/assets/asset_asset_user_list.html:13
|
||||||
#: assets/templates/assets/asset_detail.html:20 assets/views/asset.py:226
|
#: assets/templates/assets/asset_detail.html:20 assets/views/asset.py:227
|
||||||
msgid "Asset detail"
|
msgid "Asset detail"
|
||||||
msgstr "资产详情"
|
msgstr "资产详情"
|
||||||
|
|
||||||
|
@ -1636,7 +1640,7 @@ msgid "Please select file"
|
||||||
msgstr "选择文件"
|
msgstr "选择文件"
|
||||||
|
|
||||||
#: assets/templates/assets/asset_asset_user_list.html:16
|
#: assets/templates/assets/asset_asset_user_list.html:16
|
||||||
#: assets/templates/assets/asset_detail.html:23 assets/views/asset.py:71
|
#: assets/templates/assets/asset_detail.html:23 assets/views/asset.py:70
|
||||||
msgid "Asset user list"
|
msgid "Asset user list"
|
||||||
msgstr "资产用户列表"
|
msgstr "资产用户列表"
|
||||||
|
|
||||||
|
@ -1664,10 +1668,6 @@ msgstr "选择需要修改属性"
|
||||||
msgid "Select all"
|
msgid "Select all"
|
||||||
msgstr "全选"
|
msgstr "全选"
|
||||||
|
|
||||||
#: assets/templates/assets/asset_create.html:24
|
|
||||||
msgid "Protocols"
|
|
||||||
msgstr "协议"
|
|
||||||
|
|
||||||
#: assets/templates/assets/asset_detail.html:97
|
#: assets/templates/assets/asset_detail.html:97
|
||||||
msgid "CPU"
|
msgid "CPU"
|
||||||
msgstr "CPU"
|
msgstr "CPU"
|
||||||
|
@ -2066,7 +2066,7 @@ msgstr "批量更新资产"
|
||||||
msgid "Update asset"
|
msgid "Update asset"
|
||||||
msgstr "更新资产"
|
msgstr "更新资产"
|
||||||
|
|
||||||
#: assets/views/asset.py:344
|
#: assets/views/asset.py:347
|
||||||
msgid "already exists"
|
msgid "already exists"
|
||||||
msgstr "已经存在"
|
msgstr "已经存在"
|
||||||
|
|
||||||
|
@ -2318,29 +2318,29 @@ msgstr "城市"
|
||||||
msgid "Date"
|
msgid "Date"
|
||||||
msgstr "日期"
|
msgstr "日期"
|
||||||
|
|
||||||
#: audits/views.py:86 audits/views.py:130 audits/views.py:167
|
#: audits/views.py:85 audits/views.py:129 audits/views.py:166
|
||||||
#: audits/views.py:212 audits/views.py:244 templates/_nav.html:87
|
#: audits/views.py:211 audits/views.py:243 templates/_nav.html:87
|
||||||
#: templates/_nav_audits.html:22
|
#: templates/_nav_audits.html:22
|
||||||
msgid "Audits"
|
msgid "Audits"
|
||||||
msgstr "日志审计"
|
msgstr "日志审计"
|
||||||
|
|
||||||
#: audits/views.py:87 templates/_nav.html:91 templates/_nav_audits.html:26
|
#: audits/views.py:86 templates/_nav.html:91 templates/_nav_audits.html:26
|
||||||
msgid "FTP log"
|
msgid "FTP log"
|
||||||
msgstr "FTP日志"
|
msgstr "FTP日志"
|
||||||
|
|
||||||
#: audits/views.py:131 templates/_nav.html:92 templates/_nav_audits.html:27
|
#: audits/views.py:130 templates/_nav.html:92 templates/_nav_audits.html:27
|
||||||
msgid "Operate log"
|
msgid "Operate log"
|
||||||
msgstr "操作日志"
|
msgstr "操作日志"
|
||||||
|
|
||||||
#: audits/views.py:168 templates/_nav.html:93 templates/_nav_audits.html:28
|
#: audits/views.py:167 templates/_nav.html:93 templates/_nav_audits.html:28
|
||||||
msgid "Password change log"
|
msgid "Password change log"
|
||||||
msgstr "改密日志"
|
msgstr "改密日志"
|
||||||
|
|
||||||
#: audits/views.py:213 templates/_nav.html:90 templates/_nav_audits.html:25
|
#: audits/views.py:212 templates/_nav.html:90 templates/_nav_audits.html:25
|
||||||
msgid "Login log"
|
msgid "Login log"
|
||||||
msgstr "登录日志"
|
msgstr "登录日志"
|
||||||
|
|
||||||
#: audits/views.py:245
|
#: audits/views.py:244
|
||||||
msgid "Command execution log"
|
msgid "Command execution log"
|
||||||
msgstr "命令执行"
|
msgstr "命令执行"
|
||||||
|
|
||||||
|
@ -2443,7 +2443,7 @@ msgstr "MFA确认"
|
||||||
msgid "Need otp auth for view auth"
|
msgid "Need otp auth for view auth"
|
||||||
msgstr "需要二次认证来查看账号信息"
|
msgstr "需要二次认证来查看账号信息"
|
||||||
|
|
||||||
#: authentication/templates/authentication/_mfa_confirm_modal.html:51
|
#: authentication/templates/authentication/_mfa_confirm_modal.html:25
|
||||||
msgid "Code error"
|
msgid "Code error"
|
||||||
msgstr "代码错误"
|
msgstr "代码错误"
|
||||||
|
|
||||||
|
@ -2567,8 +2567,8 @@ msgstr "欢迎回来,请输入用户名和密码登录"
|
||||||
msgid "Please enable cookies and try again."
|
msgid "Please enable cookies and try again."
|
||||||
msgstr "设置你的浏览器支持cookie"
|
msgstr "设置你的浏览器支持cookie"
|
||||||
|
|
||||||
#: authentication/views/login.py:172 users/views/user.py:552
|
#: authentication/views/login.py:172 users/views/user.py:555
|
||||||
#: users/views/user.py:577
|
#: users/views/user.py:580
|
||||||
msgid "MFA code invalid, or ntp sync server time"
|
msgid "MFA code invalid, or ntp sync server time"
|
||||||
msgstr "MFA验证码不正确,或者服务器端时间不对"
|
msgstr "MFA验证码不正确,或者服务器端时间不对"
|
||||||
|
|
||||||
|
@ -2655,7 +2655,7 @@ msgstr "不能包含特殊字符"
|
||||||
msgid "This field must be unique."
|
msgid "This field must be unique."
|
||||||
msgstr "字段必须唯一"
|
msgstr "字段必须唯一"
|
||||||
|
|
||||||
#: jumpserver/views.py:187
|
#: jumpserver/views.py:188
|
||||||
msgid ""
|
msgid ""
|
||||||
"<div>Luna is a separately deployed program, you need to deploy Luna, coco, "
|
"<div>Luna is a separately deployed program, you need to deploy Luna, coco, "
|
||||||
"configure nginx for url distribution,</div> </div>If you see this page, "
|
"configure nginx for url distribution,</div> </div>If you see this page, "
|
||||||
|
@ -2986,7 +2986,7 @@ msgstr "更新任务内容: {}"
|
||||||
|
|
||||||
#: ops/views/adhoc.py:45 ops/views/adhoc.py:71 ops/views/adhoc.py:85
|
#: ops/views/adhoc.py:45 ops/views/adhoc.py:71 ops/views/adhoc.py:85
|
||||||
#: ops/views/adhoc.py:99 ops/views/adhoc.py:113 ops/views/adhoc.py:127
|
#: ops/views/adhoc.py:99 ops/views/adhoc.py:113 ops/views/adhoc.py:127
|
||||||
#: ops/views/adhoc.py:141 ops/views/command.py:47 ops/views/command.py:71
|
#: ops/views/adhoc.py:141 ops/views/command.py:47 ops/views/command.py:72
|
||||||
msgid "Ops"
|
msgid "Ops"
|
||||||
msgstr "作业中心"
|
msgstr "作业中心"
|
||||||
|
|
||||||
|
@ -3002,13 +3002,13 @@ msgstr "执行历史"
|
||||||
msgid "Command execution list"
|
msgid "Command execution list"
|
||||||
msgstr "命令执行列表"
|
msgstr "命令执行列表"
|
||||||
|
|
||||||
#: ops/views/command.py:72 templates/_nav_user.html:22
|
#: ops/views/command.py:73 templates/_nav_user.html:22
|
||||||
msgid "Command execution"
|
msgid "Command execution"
|
||||||
msgstr "命令执行"
|
msgstr "命令执行"
|
||||||
|
|
||||||
#: orgs/mixins.py:83 orgs/models.py:24
|
#: orgs/mixins.py:85 orgs/mixins.py:222 orgs/models.py:24
|
||||||
msgid "Organization"
|
msgid "Organization"
|
||||||
msgstr "组织管理"
|
msgstr "组织"
|
||||||
|
|
||||||
#: perms/const.py:18 settings/forms.py:143
|
#: perms/const.py:18 settings/forms.py:143
|
||||||
msgid "All"
|
msgid "All"
|
||||||
|
@ -3929,13 +3929,13 @@ msgstr ""
|
||||||
|
|
||||||
#: templates/_nav.html:10 users/views/group.py:28 users/views/group.py:45
|
#: templates/_nav.html:10 users/views/group.py:28 users/views/group.py:45
|
||||||
#: users/views/group.py:62 users/views/group.py:79 users/views/group.py:96
|
#: users/views/group.py:62 users/views/group.py:79 users/views/group.py:96
|
||||||
#: users/views/login.py:154 users/views/user.py:71 users/views/user.py:88
|
#: users/views/login.py:154 users/views/user.py:70 users/views/user.py:87
|
||||||
#: users/views/user.py:132 users/views/user.py:212 users/views/user.py:375
|
#: users/views/user.py:131 users/views/user.py:211 users/views/user.py:374
|
||||||
#: users/views/user.py:425 users/views/user.py:465
|
#: users/views/user.py:426 users/views/user.py:467
|
||||||
msgid "Users"
|
msgid "Users"
|
||||||
msgstr "用户管理"
|
msgstr "用户管理"
|
||||||
|
|
||||||
#: templates/_nav.html:13 users/views/user.py:72
|
#: templates/_nav.html:13 users/views/user.py:71
|
||||||
msgid "User list"
|
msgid "User list"
|
||||||
msgstr "用户列表"
|
msgstr "用户列表"
|
||||||
|
|
||||||
|
@ -3973,8 +3973,8 @@ msgstr "文件管理"
|
||||||
|
|
||||||
#: templates/_nav.html:72 terminal/views/command.py:51
|
#: templates/_nav.html:72 terminal/views/command.py:51
|
||||||
#: terminal/views/session.py:74 terminal/views/session.py:92
|
#: terminal/views/session.py:74 terminal/views/session.py:92
|
||||||
#: terminal/views/session.py:116 terminal/views/terminal.py:32
|
#: terminal/views/session.py:116 terminal/views/terminal.py:31
|
||||||
#: terminal/views/terminal.py:48 terminal/views/terminal.py:61
|
#: terminal/views/terminal.py:47 terminal/views/terminal.py:60
|
||||||
msgid "Terminal"
|
msgid "Terminal"
|
||||||
msgstr "终端管理"
|
msgstr "终端管理"
|
||||||
|
|
||||||
|
@ -3990,7 +3990,7 @@ msgstr "批量命令"
|
||||||
msgid "XPack"
|
msgid "XPack"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/_nav.html:108 xpack/plugins/cloud/views.py:26
|
#: templates/_nav.html:108 xpack/plugins/cloud/views.py:28
|
||||||
msgid "Account list"
|
msgid "Account list"
|
||||||
msgstr "账户列表"
|
msgstr "账户列表"
|
||||||
|
|
||||||
|
@ -4316,7 +4316,7 @@ msgid "Finish session success"
|
||||||
msgstr "标记会话完成成功"
|
msgstr "标记会话完成成功"
|
||||||
|
|
||||||
#: terminal/templates/terminal/terminal_detail.html:13
|
#: terminal/templates/terminal/terminal_detail.html:13
|
||||||
#: terminal/views/terminal.py:62
|
#: terminal/views/terminal.py:61
|
||||||
msgid "Terminal detail"
|
msgid "Terminal detail"
|
||||||
msgstr "终端详情"
|
msgstr "终端详情"
|
||||||
|
|
||||||
|
@ -4360,23 +4360,23 @@ msgstr "在线会话"
|
||||||
msgid "Session offline list"
|
msgid "Session offline list"
|
||||||
msgstr "离线会话"
|
msgstr "离线会话"
|
||||||
|
|
||||||
#: terminal/views/terminal.py:33
|
#: terminal/views/terminal.py:32
|
||||||
msgid "Terminal list"
|
msgid "Terminal list"
|
||||||
msgstr "终端列表"
|
msgstr "终端列表"
|
||||||
|
|
||||||
#: terminal/views/terminal.py:48
|
#: terminal/views/terminal.py:47
|
||||||
msgid "Update terminal"
|
msgid "Update terminal"
|
||||||
msgstr "更新终端"
|
msgstr "更新终端"
|
||||||
|
|
||||||
#: terminal/views/terminal.py:111 terminal/views/terminal.py:112
|
#: terminal/views/terminal.py:110 terminal/views/terminal.py:111
|
||||||
msgid "Redirect to web terminal"
|
msgid "Redirect to web terminal"
|
||||||
msgstr "重定向到web terminal"
|
msgstr "重定向到web terminal"
|
||||||
|
|
||||||
#: terminal/views/terminal.py:119
|
#: terminal/views/terminal.py:118
|
||||||
msgid "Connect ssh terminal"
|
msgid "Connect ssh terminal"
|
||||||
msgstr "连接ssh终端"
|
msgstr "连接ssh终端"
|
||||||
|
|
||||||
#: terminal/views/terminal.py:120
|
#: terminal/views/terminal.py:119
|
||||||
msgid ""
|
msgid ""
|
||||||
"You should use your ssh client tools connect terminal: {} <br /> <br />{}"
|
"You should use your ssh client tools connect terminal: {} <br /> <br />{}"
|
||||||
msgstr "你可以使用ssh客户端工具连接终端"
|
msgstr "你可以使用ssh客户端工具连接终端"
|
||||||
|
@ -4417,7 +4417,7 @@ msgstr "添加到用户组"
|
||||||
msgid "Public key should not be the same as your old one."
|
msgid "Public key should not be the same as your old one."
|
||||||
msgstr "不能和原来的密钥相同"
|
msgstr "不能和原来的密钥相同"
|
||||||
|
|
||||||
#: users/forms.py:90 users/forms.py:237 users/serializers/v1.py:47
|
#: users/forms.py:90 users/forms.py:237 users/serializers/v1.py:48
|
||||||
msgid "Not a valid ssh public key"
|
msgid "Not a valid ssh public key"
|
||||||
msgstr "ssh密钥不合法"
|
msgstr "ssh密钥不合法"
|
||||||
|
|
||||||
|
@ -4544,7 +4544,7 @@ msgid "Date password last updated"
|
||||||
msgstr "最后更新密码日期"
|
msgstr "最后更新密码日期"
|
||||||
|
|
||||||
#: users/models/user.py:138 users/templates/users/user_update.html:22
|
#: users/models/user.py:138 users/templates/users/user_update.html:22
|
||||||
#: users/views/login.py:47 users/views/login.py:108 users/views/user.py:438
|
#: users/views/login.py:46 users/views/login.py:107 users/views/user.py:439
|
||||||
msgid "User auth from {}, go there change password"
|
msgid "User auth from {}, go there change password"
|
||||||
msgstr "用户认证源来自 {}, 请去相应系统修改密码"
|
msgstr "用户认证源来自 {}, 请去相应系统修改密码"
|
||||||
|
|
||||||
|
@ -4552,31 +4552,31 @@ msgstr "用户认证源来自 {}, 请去相应系统修改密码"
|
||||||
msgid "Administrator is the super user of system"
|
msgid "Administrator is the super user of system"
|
||||||
msgstr "Administrator是初始的超级管理员"
|
msgstr "Administrator是初始的超级管理员"
|
||||||
|
|
||||||
#: users/serializers/v1.py:28
|
#: users/serializers/v1.py:29
|
||||||
msgid "Groups name"
|
msgid "Groups name"
|
||||||
msgstr "用户组名"
|
msgstr "用户组名"
|
||||||
|
|
||||||
#: users/serializers/v1.py:29
|
#: users/serializers/v1.py:30
|
||||||
msgid "Source name"
|
msgid "Source name"
|
||||||
msgstr "用户来源名"
|
msgstr "用户来源名"
|
||||||
|
|
||||||
#: users/serializers/v1.py:30
|
#: users/serializers/v1.py:31
|
||||||
msgid "Is first login"
|
msgid "Is first login"
|
||||||
msgstr "首次登录"
|
msgstr "首次登录"
|
||||||
|
|
||||||
#: users/serializers/v1.py:31
|
#: users/serializers/v1.py:32
|
||||||
msgid "Role name"
|
msgid "Role name"
|
||||||
msgstr "角色名"
|
msgstr "角色名"
|
||||||
|
|
||||||
#: users/serializers/v1.py:32
|
#: users/serializers/v1.py:33
|
||||||
msgid "Is valid"
|
msgid "Is valid"
|
||||||
msgstr "账户是否有效"
|
msgstr "账户是否有效"
|
||||||
|
|
||||||
#: users/serializers/v1.py:33
|
#: users/serializers/v1.py:34
|
||||||
msgid "Is expired"
|
msgid "Is expired"
|
||||||
msgstr " 是否过期"
|
msgstr " 是否过期"
|
||||||
|
|
||||||
#: users/serializers/v1.py:34
|
#: users/serializers/v1.py:35
|
||||||
msgid "Avatar url"
|
msgid "Avatar url"
|
||||||
msgstr "头像路径"
|
msgstr "头像路径"
|
||||||
|
|
||||||
|
@ -4630,7 +4630,7 @@ msgid "Import users"
|
||||||
msgstr "导入用户"
|
msgstr "导入用户"
|
||||||
|
|
||||||
#: users/templates/users/_user_update_modal.html:4
|
#: users/templates/users/_user_update_modal.html:4
|
||||||
#: users/templates/users/user_update.html:4 users/views/user.py:133
|
#: users/templates/users/user_update.html:4 users/views/user.py:132
|
||||||
msgid "Update user"
|
msgid "Update user"
|
||||||
msgstr "更新用户"
|
msgstr "更新用户"
|
||||||
|
|
||||||
|
@ -4768,12 +4768,12 @@ msgid "Very strong"
|
||||||
msgstr "很强"
|
msgstr "很强"
|
||||||
|
|
||||||
#: users/templates/users/user_create.html:4
|
#: users/templates/users/user_create.html:4
|
||||||
#: users/templates/users/user_list.html:28 users/views/user.py:89
|
#: users/templates/users/user_list.html:28 users/views/user.py:88
|
||||||
msgid "Create user"
|
msgid "Create user"
|
||||||
msgstr "创建用户"
|
msgstr "创建用户"
|
||||||
|
|
||||||
#: users/templates/users/user_detail.html:19
|
#: users/templates/users/user_detail.html:19
|
||||||
#: users/templates/users/user_granted_asset.html:18 users/views/user.py:213
|
#: users/templates/users/user_granted_asset.html:18 users/views/user.py:212
|
||||||
msgid "User detail"
|
msgid "User detail"
|
||||||
msgstr "用户详情"
|
msgstr "用户详情"
|
||||||
|
|
||||||
|
@ -4976,8 +4976,8 @@ msgstr "安装完成后点击下一步进入绑定页面(如已安装,直接
|
||||||
msgid "Administrator Settings force MFA login"
|
msgid "Administrator Settings force MFA login"
|
||||||
msgstr "管理员设置强制使用MFA登录"
|
msgstr "管理员设置强制使用MFA登录"
|
||||||
|
|
||||||
#: users/templates/users/user_profile.html:120 users/views/user.py:249
|
#: users/templates/users/user_profile.html:120 users/views/user.py:248
|
||||||
#: users/views/user.py:304
|
#: users/views/user.py:303
|
||||||
msgid "User groups"
|
msgid "User groups"
|
||||||
msgstr "用户组"
|
msgstr "用户组"
|
||||||
|
|
||||||
|
@ -5227,36 +5227,36 @@ msgstr "用户组列表"
|
||||||
msgid "User group granted asset"
|
msgid "User group granted asset"
|
||||||
msgstr "用户组授权资产"
|
msgstr "用户组授权资产"
|
||||||
|
|
||||||
#: users/views/login.py:44
|
#: users/views/login.py:43
|
||||||
msgid "Email address invalid, please input again"
|
msgid "Email address invalid, please input again"
|
||||||
msgstr "邮箱地址错误,重新输入"
|
msgstr "邮箱地址错误,重新输入"
|
||||||
|
|
||||||
#: users/views/login.py:60
|
#: users/views/login.py:59
|
||||||
msgid "Send reset password message"
|
msgid "Send reset password message"
|
||||||
msgstr "发送重置密码邮件"
|
msgstr "发送重置密码邮件"
|
||||||
|
|
||||||
#: users/views/login.py:61
|
#: users/views/login.py:60
|
||||||
msgid "Send reset password mail success, login your mail box and follow it "
|
msgid "Send reset password mail success, login your mail box and follow it "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"发送重置邮件成功, 请登录邮箱查看, 按照提示操作 (如果没收到,请等待3-5分钟)"
|
"发送重置邮件成功, 请登录邮箱查看, 按照提示操作 (如果没收到,请等待3-5分钟)"
|
||||||
|
|
||||||
#: users/views/login.py:74
|
#: users/views/login.py:73
|
||||||
msgid "Reset password success"
|
msgid "Reset password success"
|
||||||
msgstr "重置密码成功"
|
msgstr "重置密码成功"
|
||||||
|
|
||||||
#: users/views/login.py:75
|
#: users/views/login.py:74
|
||||||
msgid "Reset password success, return to login page"
|
msgid "Reset password success, return to login page"
|
||||||
msgstr "重置密码成功,返回到登录页面"
|
msgstr "重置密码成功,返回到登录页面"
|
||||||
|
|
||||||
#: users/views/login.py:90 users/views/login.py:106
|
#: users/views/login.py:89 users/views/login.py:105
|
||||||
msgid "Token invalid or expired"
|
msgid "Token invalid or expired"
|
||||||
msgstr "Token错误或失效"
|
msgstr "Token错误或失效"
|
||||||
|
|
||||||
#: users/views/login.py:102
|
#: users/views/login.py:101
|
||||||
msgid "Password not same"
|
msgid "Password not same"
|
||||||
msgstr "密码不一致"
|
msgstr "密码不一致"
|
||||||
|
|
||||||
#: users/views/login.py:115 users/views/user.py:147 users/views/user.py:448
|
#: users/views/login.py:114 users/views/user.py:146 users/views/user.py:449
|
||||||
msgid "* Your password does not meet the requirements"
|
msgid "* Your password does not meet the requirements"
|
||||||
msgstr "* 您的密码不符合要求"
|
msgstr "* 您的密码不符合要求"
|
||||||
|
|
||||||
|
@ -5264,51 +5264,51 @@ msgstr "* 您的密码不符合要求"
|
||||||
msgid "First login"
|
msgid "First login"
|
||||||
msgstr "首次登录"
|
msgstr "首次登录"
|
||||||
|
|
||||||
#: users/views/user.py:164
|
#: users/views/user.py:163
|
||||||
msgid "Bulk update user success"
|
msgid "Bulk update user success"
|
||||||
msgstr "批量更新用户成功"
|
msgstr "批量更新用户成功"
|
||||||
|
|
||||||
#: users/views/user.py:192
|
#: users/views/user.py:191
|
||||||
msgid "Bulk update user"
|
msgid "Bulk update user"
|
||||||
msgstr "批量更新用户"
|
msgstr "批量更新用户"
|
||||||
|
|
||||||
#: users/views/user.py:279
|
#: users/views/user.py:278
|
||||||
msgid "Invalid file."
|
msgid "Invalid file."
|
||||||
msgstr "文件不合法"
|
msgstr "文件不合法"
|
||||||
|
|
||||||
#: users/views/user.py:376
|
#: users/views/user.py:375
|
||||||
msgid "User granted assets"
|
msgid "User granted assets"
|
||||||
msgstr "用户授权资产"
|
msgstr "用户授权资产"
|
||||||
|
|
||||||
#: users/views/user.py:407
|
#: users/views/user.py:408
|
||||||
msgid "Profile setting"
|
msgid "Profile setting"
|
||||||
msgstr "个人信息设置"
|
msgstr "个人信息设置"
|
||||||
|
|
||||||
#: users/views/user.py:426
|
#: users/views/user.py:427
|
||||||
msgid "Password update"
|
msgid "Password update"
|
||||||
msgstr "密码更新"
|
msgstr "密码更新"
|
||||||
|
|
||||||
#: users/views/user.py:466
|
#: users/views/user.py:468
|
||||||
msgid "Public key update"
|
msgid "Public key update"
|
||||||
msgstr "密钥更新"
|
msgstr "密钥更新"
|
||||||
|
|
||||||
#: users/views/user.py:507
|
#: users/views/user.py:510
|
||||||
msgid "Password invalid"
|
msgid "Password invalid"
|
||||||
msgstr "用户名或密码无效"
|
msgstr "用户名或密码无效"
|
||||||
|
|
||||||
#: users/views/user.py:607
|
#: users/views/user.py:610
|
||||||
msgid "MFA enable success"
|
msgid "MFA enable success"
|
||||||
msgstr "MFA 绑定成功"
|
msgstr "MFA 绑定成功"
|
||||||
|
|
||||||
#: users/views/user.py:608
|
#: users/views/user.py:611
|
||||||
msgid "MFA enable success, return login page"
|
msgid "MFA enable success, return login page"
|
||||||
msgstr "MFA 绑定成功,返回到登录页面"
|
msgstr "MFA 绑定成功,返回到登录页面"
|
||||||
|
|
||||||
#: users/views/user.py:610
|
#: users/views/user.py:613
|
||||||
msgid "MFA disable success"
|
msgid "MFA disable success"
|
||||||
msgstr "MFA 解绑成功"
|
msgstr "MFA 解绑成功"
|
||||||
|
|
||||||
#: users/views/user.py:611
|
#: users/views/user.py:614
|
||||||
msgid "MFA disable success, return login page"
|
msgid "MFA disable success, return login page"
|
||||||
msgstr "MFA 解绑成功,返回登录页面"
|
msgstr "MFA 解绑成功,返回登录页面"
|
||||||
|
|
||||||
|
@ -5361,13 +5361,13 @@ msgstr ""
|
||||||
#: xpack/plugins/change_auth_plan/meta.py:9
|
#: xpack/plugins/change_auth_plan/meta.py:9
|
||||||
#: xpack/plugins/change_auth_plan/models.py:114
|
#: xpack/plugins/change_auth_plan/models.py:114
|
||||||
#: xpack/plugins/change_auth_plan/models.py:257
|
#: xpack/plugins/change_auth_plan/models.py:257
|
||||||
#: xpack/plugins/change_auth_plan/views.py:31
|
#: xpack/plugins/change_auth_plan/views.py:33
|
||||||
#: xpack/plugins/change_auth_plan/views.py:47
|
#: xpack/plugins/change_auth_plan/views.py:50
|
||||||
#: xpack/plugins/change_auth_plan/views.py:68
|
#: xpack/plugins/change_auth_plan/views.py:72
|
||||||
#: xpack/plugins/change_auth_plan/views.py:82
|
#: xpack/plugins/change_auth_plan/views.py:87
|
||||||
#: xpack/plugins/change_auth_plan/views.py:109
|
#: xpack/plugins/change_auth_plan/views.py:115
|
||||||
#: xpack/plugins/change_auth_plan/views.py:125
|
#: xpack/plugins/change_auth_plan/views.py:132
|
||||||
#: xpack/plugins/change_auth_plan/views.py:139
|
#: xpack/plugins/change_auth_plan/views.py:147
|
||||||
msgid "Change auth plan"
|
msgid "Change auth plan"
|
||||||
msgstr "改密计划"
|
msgstr "改密计划"
|
||||||
|
|
||||||
|
@ -5434,7 +5434,7 @@ msgstr "连接超时"
|
||||||
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_asset_list.html:23
|
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_asset_list.html:23
|
||||||
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:26
|
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:26
|
||||||
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:23
|
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:23
|
||||||
#: xpack/plugins/change_auth_plan/views.py:126
|
#: xpack/plugins/change_auth_plan/views.py:133
|
||||||
msgid "Plan execution list"
|
msgid "Plan execution list"
|
||||||
msgstr "执行列表"
|
msgstr "执行列表"
|
||||||
|
|
||||||
|
@ -5490,19 +5490,19 @@ msgid "Run failed"
|
||||||
msgstr "执行失败"
|
msgstr "执行失败"
|
||||||
|
|
||||||
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_list.html:5
|
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_list.html:5
|
||||||
#: xpack/plugins/change_auth_plan/views.py:48
|
#: xpack/plugins/change_auth_plan/views.py:51
|
||||||
msgid "Create plan"
|
msgid "Create plan"
|
||||||
msgstr "创建计划"
|
msgstr "创建计划"
|
||||||
|
|
||||||
#: xpack/plugins/change_auth_plan/views.py:32
|
#: xpack/plugins/change_auth_plan/views.py:34
|
||||||
msgid "Plan list"
|
msgid "Plan list"
|
||||||
msgstr "计划列表"
|
msgstr "计划列表"
|
||||||
|
|
||||||
#: xpack/plugins/change_auth_plan/views.py:69
|
#: xpack/plugins/change_auth_plan/views.py:73
|
||||||
msgid "Update plan"
|
msgid "Update plan"
|
||||||
msgstr "更新计划"
|
msgstr "更新计划"
|
||||||
|
|
||||||
#: xpack/plugins/change_auth_plan/views.py:140
|
#: xpack/plugins/change_auth_plan/views.py:148
|
||||||
msgid "Plan execution task list"
|
msgid "Plan execution task list"
|
||||||
msgstr "执行任务列表"
|
msgstr "执行任务列表"
|
||||||
|
|
||||||
|
@ -5538,11 +5538,11 @@ msgstr "选择节点"
|
||||||
msgid "Select admins"
|
msgid "Select admins"
|
||||||
msgstr "选择管理员"
|
msgstr "选择管理员"
|
||||||
|
|
||||||
#: xpack/plugins/cloud/meta.py:9 xpack/plugins/cloud/views.py:25
|
#: xpack/plugins/cloud/meta.py:9 xpack/plugins/cloud/views.py:27
|
||||||
#: xpack/plugins/cloud/views.py:41 xpack/plugins/cloud/views.py:57
|
#: xpack/plugins/cloud/views.py:44 xpack/plugins/cloud/views.py:61
|
||||||
#: xpack/plugins/cloud/views.py:71 xpack/plugins/cloud/views.py:84
|
#: xpack/plugins/cloud/views.py:76 xpack/plugins/cloud/views.py:90
|
||||||
#: xpack/plugins/cloud/views.py:100 xpack/plugins/cloud/views.py:121
|
#: xpack/plugins/cloud/views.py:107 xpack/plugins/cloud/views.py:129
|
||||||
#: xpack/plugins/cloud/views.py:136 xpack/plugins/cloud/views.py:187
|
#: xpack/plugins/cloud/views.py:145 xpack/plugins/cloud/views.py:197
|
||||||
msgid "Cloud center"
|
msgid "Cloud center"
|
||||||
msgstr "云管中心"
|
msgstr "云管中心"
|
||||||
|
|
||||||
|
@ -5639,12 +5639,12 @@ msgid "Qcloud"
|
||||||
msgstr "腾讯云"
|
msgstr "腾讯云"
|
||||||
|
|
||||||
#: xpack/plugins/cloud/templates/cloud/account_detail.html:20
|
#: xpack/plugins/cloud/templates/cloud/account_detail.html:20
|
||||||
#: xpack/plugins/cloud/views.py:72
|
#: xpack/plugins/cloud/views.py:77
|
||||||
msgid "Account detail"
|
msgid "Account detail"
|
||||||
msgstr "账户详情"
|
msgstr "账户详情"
|
||||||
|
|
||||||
#: xpack/plugins/cloud/templates/cloud/account_list.html:5
|
#: xpack/plugins/cloud/templates/cloud/account_list.html:5
|
||||||
#: xpack/plugins/cloud/views.py:42
|
#: xpack/plugins/cloud/views.py:45
|
||||||
msgid "Create account"
|
msgid "Create account"
|
||||||
msgstr "创建账户"
|
msgstr "创建账户"
|
||||||
|
|
||||||
|
@ -5659,21 +5659,21 @@ msgstr "加载失败"
|
||||||
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:20
|
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:20
|
||||||
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:25
|
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:25
|
||||||
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:21
|
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:21
|
||||||
#: xpack/plugins/cloud/views.py:122
|
#: xpack/plugins/cloud/views.py:130
|
||||||
msgid "Sync task detail"
|
msgid "Sync task detail"
|
||||||
msgstr "同步任务详情"
|
msgstr "同步任务详情"
|
||||||
|
|
||||||
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:23
|
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:23
|
||||||
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:28
|
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:28
|
||||||
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:24
|
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:24
|
||||||
#: xpack/plugins/cloud/views.py:137
|
#: xpack/plugins/cloud/views.py:146
|
||||||
msgid "Sync task history"
|
msgid "Sync task history"
|
||||||
msgstr "同步历史列表"
|
msgstr "同步历史列表"
|
||||||
|
|
||||||
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:26
|
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:26
|
||||||
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:31
|
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:31
|
||||||
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:27
|
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:27
|
||||||
#: xpack/plugins/cloud/views.py:188
|
#: xpack/plugins/cloud/views.py:198
|
||||||
msgid "Sync instance list"
|
msgid "Sync instance list"
|
||||||
msgstr "同步实例列表"
|
msgstr "同步实例列表"
|
||||||
|
|
||||||
|
@ -5709,15 +5709,15 @@ msgstr "实例个数"
|
||||||
msgid "Sync success"
|
msgid "Sync success"
|
||||||
msgstr "同步成功"
|
msgstr "同步成功"
|
||||||
|
|
||||||
#: xpack/plugins/cloud/views.py:58
|
#: xpack/plugins/cloud/views.py:62
|
||||||
msgid "Update account"
|
msgid "Update account"
|
||||||
msgstr "更新账户"
|
msgstr "更新账户"
|
||||||
|
|
||||||
#: xpack/plugins/cloud/views.py:85
|
#: xpack/plugins/cloud/views.py:91
|
||||||
msgid "Sync instance task list"
|
msgid "Sync instance task list"
|
||||||
msgstr "同步实例任务列表"
|
msgstr "同步实例任务列表"
|
||||||
|
|
||||||
#: xpack/plugins/cloud/views.py:101
|
#: xpack/plugins/cloud/views.py:108
|
||||||
msgid "Create sync Instance task"
|
msgid "Create sync Instance task"
|
||||||
msgstr "创建同步实例任务"
|
msgstr "创建同步实例任务"
|
||||||
|
|
||||||
|
@ -5774,7 +5774,7 @@ msgid "Interface settings"
|
||||||
msgstr "界面设置"
|
msgstr "界面设置"
|
||||||
|
|
||||||
#: xpack/plugins/interface/templates/interface/interface.html:15
|
#: xpack/plugins/interface/templates/interface/interface.html:15
|
||||||
#: xpack/plugins/interface/views.py:24
|
#: xpack/plugins/interface/views.py:25
|
||||||
msgid "Interface setting"
|
msgid "Interface setting"
|
||||||
msgstr "界面设置"
|
msgstr "界面设置"
|
||||||
|
|
||||||
|
@ -5789,7 +5789,7 @@ msgid "This will restore default Settings of the interface !!!"
|
||||||
msgstr "您确定要恢复默认初始化吗?"
|
msgstr "您确定要恢复默认初始化吗?"
|
||||||
|
|
||||||
#: xpack/plugins/interface/templates/interface/interface.html:107
|
#: xpack/plugins/interface/templates/interface/interface.html:107
|
||||||
#: xpack/plugins/interface/views.py:53
|
#: xpack/plugins/interface/views.py:55
|
||||||
msgid "Restore default successfully."
|
msgid "Restore default successfully."
|
||||||
msgstr "恢复默认成功!"
|
msgstr "恢复默认成功!"
|
||||||
|
|
||||||
|
@ -5797,18 +5797,18 @@ msgstr "恢复默认成功!"
|
||||||
msgid "Restore default failed."
|
msgid "Restore default failed."
|
||||||
msgstr "恢复默认失败!"
|
msgstr "恢复默认失败!"
|
||||||
|
|
||||||
#: xpack/plugins/interface/views.py:23
|
#: xpack/plugins/interface/views.py:24
|
||||||
msgid "Interface"
|
msgid "Interface"
|
||||||
msgstr "界面"
|
msgstr "界面"
|
||||||
|
|
||||||
#: xpack/plugins/interface/views.py:49
|
#: xpack/plugins/interface/views.py:51
|
||||||
msgid "It is already in the default setting state!"
|
msgid "It is already in the default setting state!"
|
||||||
msgstr "当前已经是初始化状态!"
|
msgstr "当前已经是初始化状态!"
|
||||||
|
|
||||||
#: xpack/plugins/license/meta.py:11 xpack/plugins/license/models.py:94
|
#: xpack/plugins/license/meta.py:11 xpack/plugins/license/models.py:94
|
||||||
#: xpack/plugins/license/templates/license/license_detail.html:50
|
#: xpack/plugins/license/templates/license/license_detail.html:50
|
||||||
#: xpack/plugins/license/templates/license/license_detail.html:55
|
#: xpack/plugins/license/templates/license/license_detail.html:55
|
||||||
#: xpack/plugins/license/views.py:31
|
#: xpack/plugins/license/views.py:32
|
||||||
msgid "License"
|
msgid "License"
|
||||||
msgstr "许可证"
|
msgstr "许可证"
|
||||||
|
|
||||||
|
@ -5847,7 +5847,7 @@ msgid " expired."
|
||||||
msgstr " 过期。"
|
msgstr " 过期。"
|
||||||
|
|
||||||
#: xpack/plugins/license/templates/license/license_detail.html:37
|
#: xpack/plugins/license/templates/license/license_detail.html:37
|
||||||
#: xpack/plugins/license/views.py:32
|
#: xpack/plugins/license/views.py:33
|
||||||
msgid "License detail"
|
msgid "License detail"
|
||||||
msgstr "许可证详情"
|
msgstr "许可证详情"
|
||||||
|
|
||||||
|
@ -5890,11 +5890,11 @@ msgstr "技术咨询"
|
||||||
msgid "Consult"
|
msgid "Consult"
|
||||||
msgstr "咨询"
|
msgstr "咨询"
|
||||||
|
|
||||||
#: xpack/plugins/license/views.py:45
|
#: xpack/plugins/license/views.py:47
|
||||||
msgid "License import successfully"
|
msgid "License import successfully"
|
||||||
msgstr "许可证导入成功"
|
msgstr "许可证导入成功"
|
||||||
|
|
||||||
#: xpack/plugins/license/views.py:47
|
#: xpack/plugins/license/views.py:49
|
||||||
msgid "License is invalid"
|
msgid "License is invalid"
|
||||||
msgstr "无效的许可证"
|
msgstr "无效的许可证"
|
||||||
|
|
||||||
|
@ -5909,7 +5909,7 @@ msgid "Organizations"
|
||||||
msgstr "组织管理"
|
msgstr "组织管理"
|
||||||
|
|
||||||
#: xpack/plugins/orgs/templates/orgs/org_detail.html:22
|
#: xpack/plugins/orgs/templates/orgs/org_detail.html:22
|
||||||
#: xpack/plugins/orgs/views.py:73
|
#: xpack/plugins/orgs/views.py:78
|
||||||
msgid "Org detail"
|
msgid "Org detail"
|
||||||
msgstr "组织详情"
|
msgstr "组织详情"
|
||||||
|
|
||||||
|
@ -5921,29 +5921,29 @@ msgstr "添加管理员"
|
||||||
msgid "Create organization "
|
msgid "Create organization "
|
||||||
msgstr "创建组织"
|
msgstr "创建组织"
|
||||||
|
|
||||||
#: xpack/plugins/orgs/views.py:24
|
#: xpack/plugins/orgs/views.py:26
|
||||||
msgid "Org"
|
msgid "Org"
|
||||||
msgstr "组织"
|
msgstr "组织"
|
||||||
|
|
||||||
#: xpack/plugins/orgs/views.py:25
|
#: xpack/plugins/orgs/views.py:27
|
||||||
msgid "Org list"
|
msgid "Org list"
|
||||||
msgstr "组织列表"
|
msgstr "组织列表"
|
||||||
|
|
||||||
#: xpack/plugins/orgs/views.py:40 xpack/plugins/orgs/views.py:56
|
#: xpack/plugins/orgs/views.py:43 xpack/plugins/orgs/views.py:60
|
||||||
#: xpack/plugins/orgs/views.py:72
|
#: xpack/plugins/orgs/views.py:77
|
||||||
msgid "Orgs"
|
msgid "Orgs"
|
||||||
msgstr "组织"
|
msgstr "组织"
|
||||||
|
|
||||||
#: xpack/plugins/orgs/views.py:41
|
#: xpack/plugins/orgs/views.py:44
|
||||||
msgid "Create org"
|
msgid "Create org"
|
||||||
msgstr "创建组织"
|
msgstr "创建组织"
|
||||||
|
|
||||||
#: xpack/plugins/orgs/views.py:57
|
#: xpack/plugins/orgs/views.py:61
|
||||||
msgid "Update org"
|
msgid "Update org"
|
||||||
msgstr "更新组织"
|
msgstr "更新组织"
|
||||||
|
|
||||||
#: xpack/plugins/vault/meta.py:11 xpack/plugins/vault/views.py:21
|
#: xpack/plugins/vault/meta.py:11 xpack/plugins/vault/views.py:23
|
||||||
#: xpack/plugins/vault/views.py:35
|
#: xpack/plugins/vault/views.py:38
|
||||||
msgid "Vault"
|
msgid "Vault"
|
||||||
msgstr "密码匣子"
|
msgstr "密码匣子"
|
||||||
|
|
||||||
|
@ -5951,11 +5951,11 @@ msgstr "密码匣子"
|
||||||
msgid "Import vault"
|
msgid "Import vault"
|
||||||
msgstr "导入密码"
|
msgstr "导入密码"
|
||||||
|
|
||||||
#: xpack/plugins/vault/views.py:22
|
#: xpack/plugins/vault/views.py:24
|
||||||
msgid "vault list"
|
msgid "vault list"
|
||||||
msgstr "密码匣子"
|
msgstr "密码匣子"
|
||||||
|
|
||||||
#: xpack/plugins/vault/views.py:36
|
#: xpack/plugins/vault/views.py:39
|
||||||
msgid "vault create"
|
msgid "vault create"
|
||||||
msgstr "创建"
|
msgstr "创建"
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
# coding: utf-8
|
# coding: utf-8
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import datetime
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from celery import shared_task, subtask
|
from celery import shared_task, subtask
|
||||||
|
@ -105,10 +106,10 @@ def hello(name, callback=None):
|
||||||
|
|
||||||
|
|
||||||
@shared_task
|
@shared_task
|
||||||
@after_app_shutdown_clean_periodic
|
# @after_app_shutdown_clean_periodic
|
||||||
@register_as_period_task(interval=30)
|
# @register_as_period_task(interval=30)
|
||||||
def hello123():
|
def hello123():
|
||||||
print("Hello world")
|
print("{} Hello world".format(datetime.datetime.now().strftime("%H:%M:%S")))
|
||||||
|
|
||||||
|
|
||||||
@shared_task
|
@shared_task
|
||||||
|
|
|
@ -219,7 +219,8 @@ class OrgResourceSerializerMixin(serializers.Serializer):
|
||||||
由于HiddenField字段不可读,API获取资产信息时获取不到org_id,
|
由于HiddenField字段不可读,API获取资产信息时获取不到org_id,
|
||||||
但是coco需要资产的org_id字段,所以修改为CharField类型
|
但是coco需要资产的org_id字段,所以修改为CharField类型
|
||||||
"""
|
"""
|
||||||
org_id = serializers.ReadOnlyField(default=get_current_org_id)
|
org_id = serializers.ReadOnlyField(default=get_current_org_id, label=_("Organization"))
|
||||||
|
org_name = serializers.ReadOnlyField(label=_("Org name"))
|
||||||
|
|
||||||
def get_validators(self):
|
def get_validators(self):
|
||||||
_validators = super().get_validators()
|
_validators = super().get_validators()
|
||||||
|
|
Loading…
Reference in New Issue