mirror of https://github.com/jumpserver/jumpserver
fix: Use only_sudo failed (#13966)
* fix: Use only_sudo failed * fix: Use only_sudo failed * fix: Use only_sudo failed --------- Co-authored-by: feng <1304903146@qq.com>pull/13986/head
parent
139ffd0b47
commit
a1ae29d35e
|
@ -119,7 +119,8 @@ class Account(AbsConnectivity, LabeledMixin, BaseAccount):
|
||||||
return auth
|
return auth
|
||||||
|
|
||||||
auth.update(self.make_account_ansible_vars(su_from))
|
auth.update(self.make_account_ansible_vars(su_from))
|
||||||
become_method = platform.su_method if platform.su_method else 'sudo'
|
|
||||||
|
become_method = platform.ansible_become_method
|
||||||
password = su_from.secret if become_method == 'sudo' else self.secret
|
password = su_from.secret if become_method == 'sudo' else self.secret
|
||||||
auth['ansible_become'] = True
|
auth['ansible_become'] = True
|
||||||
auth['ansible_become_method'] = become_method
|
auth['ansible_become_method'] = become_method
|
||||||
|
|
|
@ -2,5 +2,6 @@ from .automation import *
|
||||||
from .base import *
|
from .base import *
|
||||||
from .category import *
|
from .category import *
|
||||||
from .host import *
|
from .host import *
|
||||||
|
from .platform import *
|
||||||
from .protocol import *
|
from .protocol import *
|
||||||
from .types import *
|
from .types import *
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
from django.db.models import TextChoices
|
||||||
|
|
||||||
|
|
||||||
|
class SuMethodChoices(TextChoices):
|
||||||
|
sudo = "sudo", "sudo su -"
|
||||||
|
su = "su", "su - "
|
||||||
|
only_sudo = "only_sudo", "sudo su"
|
||||||
|
only_su = "only_su", "su"
|
||||||
|
enable = "enable", "enable"
|
||||||
|
super = "super", "super 15"
|
||||||
|
super_level = "super_level", "super level 15"
|
|
@ -1,7 +1,7 @@
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from assets.const import AllTypes, Category, Protocol
|
from assets.const import AllTypes, Category, Protocol, SuMethodChoices
|
||||||
from common.db.fields import JsonDictTextField
|
from common.db.fields import JsonDictTextField
|
||||||
from common.db.models import JMSBaseModel
|
from common.db.models import JMSBaseModel
|
||||||
|
|
||||||
|
@ -127,6 +127,17 @@ class Platform(LabeledMixin, JMSBaseModel):
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@property
|
||||||
|
def ansible_become_method(self):
|
||||||
|
su_method = self.su_method or SuMethodChoices.sudo
|
||||||
|
if su_method in [SuMethodChoices.sudo, SuMethodChoices.only_sudo]:
|
||||||
|
method = SuMethodChoices.sudo
|
||||||
|
elif su_method in [SuMethodChoices.su, SuMethodChoices.only_su]:
|
||||||
|
method = SuMethodChoices.su
|
||||||
|
else:
|
||||||
|
method = su_method
|
||||||
|
return method
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ from common.serializers import (
|
||||||
)
|
)
|
||||||
from common.serializers.fields import LabeledChoiceField
|
from common.serializers.fields import LabeledChoiceField
|
||||||
from common.utils import lazyproperty
|
from common.utils import lazyproperty
|
||||||
from ..const import Category, AllTypes, Protocol
|
from ..const import Category, AllTypes, Protocol, SuMethodChoices
|
||||||
from ..models import Platform, PlatformProtocol, PlatformAutomation
|
from ..models import Platform, PlatformProtocol, PlatformAutomation
|
||||||
|
|
||||||
__all__ = ["PlatformSerializer", "PlatformOpsMethodSerializer", "PlatformProtocolSerializer"]
|
__all__ = ["PlatformSerializer", "PlatformOpsMethodSerializer", "PlatformProtocolSerializer"]
|
||||||
|
@ -124,15 +124,6 @@ class PlatformCustomField(serializers.Serializer):
|
||||||
|
|
||||||
|
|
||||||
class PlatformSerializer(ResourceLabelsMixin, WritableNestedModelSerializer):
|
class PlatformSerializer(ResourceLabelsMixin, WritableNestedModelSerializer):
|
||||||
SU_METHOD_CHOICES = [
|
|
||||||
("sudo", "sudo su -"),
|
|
||||||
("su", "su - "),
|
|
||||||
("only_sudo", "sudo su"),
|
|
||||||
("only_su", "su"),
|
|
||||||
("enable", "enable"),
|
|
||||||
("super", "super 15"),
|
|
||||||
("super_level", "super level 15")
|
|
||||||
]
|
|
||||||
id = serializers.IntegerField(
|
id = serializers.IntegerField(
|
||||||
label='ID', required=False,
|
label='ID', required=False,
|
||||||
validators=[UniqueValidator(queryset=Platform.objects.all())]
|
validators=[UniqueValidator(queryset=Platform.objects.all())]
|
||||||
|
@ -143,8 +134,8 @@ class PlatformSerializer(ResourceLabelsMixin, WritableNestedModelSerializer):
|
||||||
protocols = PlatformProtocolSerializer(label=_("Protocols"), many=True, required=False)
|
protocols = PlatformProtocolSerializer(label=_("Protocols"), many=True, required=False)
|
||||||
automation = PlatformAutomationSerializer(label=_("Automation"), required=False, default=dict)
|
automation = PlatformAutomationSerializer(label=_("Automation"), required=False, default=dict)
|
||||||
su_method = LabeledChoiceField(
|
su_method = LabeledChoiceField(
|
||||||
choices=SU_METHOD_CHOICES, label=_("Su method"),
|
choices=SuMethodChoices.choices, label=_("Su method"),
|
||||||
required=False, default="sudo", allow_null=True
|
required=False, default=SuMethodChoices.sudo, allow_null=True
|
||||||
)
|
)
|
||||||
custom_fields = PlatformCustomField(label=_("Custom fields"), many=True, required=False)
|
custom_fields = PlatformCustomField(label=_("Custom fields"), many=True, required=False)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue