mirror of https://github.com/jumpserver/jumpserver
[git status
parent
b97d5b0960
commit
2d0be8f996
|
@ -39,7 +39,7 @@ TEST_ASSET_CONN_TASK_NAME = "ASSET_CONN_TEST_MANUAL"
|
||||||
TEST_SYSTEM_USER_CONN_PERIOD_LOCK_KEY = "TEST_SYSTEM_USER_CONN_PERIOD_KEY"
|
TEST_SYSTEM_USER_CONN_PERIOD_LOCK_KEY = "TEST_SYSTEM_USER_CONN_PERIOD_KEY"
|
||||||
TEST_SYSTEM_USER_CONN_PERIOD_TASK_NAME = "TEST-SYSTEM-USER-CONN-PERIOD-TASK"
|
TEST_SYSTEM_USER_CONN_PERIOD_TASK_NAME = "TEST-SYSTEM-USER-CONN-PERIOD-TASK"
|
||||||
TEST_SYSTEM_USER_CONN_CACHE_KEY_PREFIX = "SYSTEM_USER_CONN_"
|
TEST_SYSTEM_USER_CONN_CACHE_KEY_PREFIX = "SYSTEM_USER_CONN_"
|
||||||
TEST_SYSTEM_USER_CONN_TASK_NAME = "TEST-ADMIN-USER-CONN-{}"
|
TEST_SYSTEM_USER_CONN_TASK_NAME = "TEST-SYSTEM-USER-CONN-{}"
|
||||||
TEST_SYSTEM_USER_CONN_LOCK_KEY = "TEST_SYSTEM_USER_CONN_{}"
|
TEST_SYSTEM_USER_CONN_LOCK_KEY = "TEST_SYSTEM_USER_CONN_{}"
|
||||||
SYSTEM_USER_CONN_CACHE_KEY = "SYSTEM_USER_CONN_{}"
|
SYSTEM_USER_CONN_CACHE_KEY = "SYSTEM_USER_CONN_{}"
|
||||||
TEST_SYSTEM_USER_CONN_TASKS = [
|
TEST_SYSTEM_USER_CONN_TASKS = [
|
||||||
|
@ -52,6 +52,6 @@ TEST_SYSTEM_USER_CONN_TASKS = [
|
||||||
]
|
]
|
||||||
|
|
||||||
TASK_OPTIONS = {
|
TASK_OPTIONS = {
|
||||||
'timeout': 60,
|
'timeout': 10,
|
||||||
'forks': 10,
|
'forks': 10,
|
||||||
}
|
}
|
||||||
|
|
|
@ -114,6 +114,16 @@ class AssetUser(models.Model):
|
||||||
private_key=private_key,
|
private_key=private_key,
|
||||||
public_key=public_key)
|
public_key=public_key)
|
||||||
|
|
||||||
|
def _to_secret_json(self):
|
||||||
|
"""Push system user use it"""
|
||||||
|
return {
|
||||||
|
'name': self.name,
|
||||||
|
'username': self.username,
|
||||||
|
'password': self.password,
|
||||||
|
'public_key': self.public_key,
|
||||||
|
'private_key': self.private_key_file,
|
||||||
|
}
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
abstract = True
|
abstract = True
|
||||||
|
|
||||||
|
@ -195,18 +205,6 @@ class SystemUser(AssetUser):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
def _to_secret_json(self):
|
|
||||||
"""Push system user use it"""
|
|
||||||
return {
|
|
||||||
'name': self.name,
|
|
||||||
'username': self.username,
|
|
||||||
'shell': self.shell,
|
|
||||||
'sudo': self.sudo,
|
|
||||||
'password': self.password,
|
|
||||||
'public_key': self.public_key,
|
|
||||||
'private_key_file': self.private_key_file,
|
|
||||||
}
|
|
||||||
|
|
||||||
def get_clusters_assets(self):
|
def get_clusters_assets(self):
|
||||||
from .asset import Asset
|
from .asset import Asset
|
||||||
clusters = self.cluster.all()
|
clusters = self.cluster.all()
|
||||||
|
|
|
@ -173,7 +173,10 @@ def test_admin_user_connectability_manual(asset, task_name=None):
|
||||||
task_name = const.TEST_ASSET_CONN_TASK_NAME
|
task_name = const.TEST_ASSET_CONN_TASK_NAME
|
||||||
hosts = [asset.hostname]
|
hosts = [asset.hostname]
|
||||||
tasks = const.TEST_ADMIN_USER_CONN_TASKS
|
tasks = const.TEST_ADMIN_USER_CONN_TASKS
|
||||||
task = create_or_update_task(task_name, tasks=tasks, hosts=hosts)
|
task = create_or_update_task(
|
||||||
|
task_name, tasks=tasks, hosts=hosts, run_as_admin=True,
|
||||||
|
created_by='System', options=const.TASK_OPTIONS, pattern='all',
|
||||||
|
)
|
||||||
result = task.run()
|
result = task.run()
|
||||||
|
|
||||||
if result.results_summary['dark']:
|
if result.results_summary['dark']:
|
||||||
|
@ -194,7 +197,7 @@ def test_system_user_connectability(system_user, force=False):
|
||||||
"""
|
"""
|
||||||
from ops.utils import create_or_update_task
|
from ops.utils import create_or_update_task
|
||||||
lock_key = const.TEST_SYSTEM_USER_CONN_LOCK_KEY.format(system_user.name)
|
lock_key = const.TEST_SYSTEM_USER_CONN_LOCK_KEY.format(system_user.name)
|
||||||
task_name = const.TEST_SYSTEM_USER_CONN_TASK_NAME
|
task_name = const.TEST_SYSTEM_USER_CONN_TASK_NAME.format(system_user.name)
|
||||||
if cache.get(lock_key, 0) == 1 and not force:
|
if cache.get(lock_key, 0) == 1 and not force:
|
||||||
logger.debug("Task {} is running or before long, passed this time".format(task_name))
|
logger.debug("Task {} is running or before long, passed this time".format(task_name))
|
||||||
return {}
|
return {}
|
||||||
|
@ -202,7 +205,8 @@ def test_system_user_connectability(system_user, force=False):
|
||||||
hosts = [asset.hostname for asset in assets]
|
hosts = [asset.hostname for asset in assets]
|
||||||
tasks = const.TEST_SYSTEM_USER_CONN_TASKS
|
tasks = const.TEST_SYSTEM_USER_CONN_TASKS
|
||||||
task = create_or_update_task(
|
task = create_or_update_task(
|
||||||
task_name, hosts=hosts, tasks=tasks, options=const.TASK_OPTIONS,
|
task_name, hosts=hosts, tasks=tasks, pattern='all',
|
||||||
|
options=const.TASK_OPTIONS,
|
||||||
run_as=system_user.name, created_by="System",
|
run_as=system_user.name, created_by="System",
|
||||||
)
|
)
|
||||||
cache.set(lock_key, 1, CACHE_MAX_TIME)
|
cache.set(lock_key, 1, CACHE_MAX_TIME)
|
||||||
|
|
|
@ -57,7 +57,7 @@ def int_to_str(value):
|
||||||
def ts_to_date(ts):
|
def ts_to_date(ts):
|
||||||
try:
|
try:
|
||||||
ts = float(ts)
|
ts = float(ts)
|
||||||
except TypeError:
|
except ValueError:
|
||||||
ts = 0
|
ts = 0
|
||||||
dt = timezone.datetime.fromtimestamp(ts).\
|
dt = timezone.datetime.fromtimestamp(ts).\
|
||||||
replace(tzinfo=timezone.get_current_timezone())
|
replace(tzinfo=timezone.get_current_timezone())
|
||||||
|
|
|
@ -23,7 +23,7 @@ class Task(models.Model):
|
||||||
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
|
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
|
||||||
name = models.CharField(max_length=128, unique=True, verbose_name=_('Name'))
|
name = models.CharField(max_length=128, unique=True, verbose_name=_('Name'))
|
||||||
is_deleted = models.BooleanField(default=False)
|
is_deleted = models.BooleanField(default=False)
|
||||||
created_by = models.CharField(max_length=128, blank=True, default='')
|
created_by = models.CharField(max_length=128, blank=True, null=True, default='')
|
||||||
date_created = models.DateTimeField(auto_now_add=True)
|
date_created = models.DateTimeField(auto_now_add=True)
|
||||||
__latest_adhoc = None
|
__latest_adhoc = None
|
||||||
|
|
||||||
|
@ -93,13 +93,13 @@ class AdHoc(models.Model):
|
||||||
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
|
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
|
||||||
task = models.ForeignKey(Task, related_name='adhoc', on_delete=models.CASCADE)
|
task = models.ForeignKey(Task, related_name='adhoc', on_delete=models.CASCADE)
|
||||||
_tasks = models.TextField(verbose_name=_('Tasks'))
|
_tasks = models.TextField(verbose_name=_('Tasks'))
|
||||||
pattern = models.CharField(max_length=64, default='', verbose_name=_('Pattern'))
|
pattern = models.CharField(max_length=64, default='{}', verbose_name=_('Pattern'))
|
||||||
_options = models.CharField(max_length=1024, default='', verbose_name=_('Options'))
|
_options = models.CharField(max_length=1024, default='', verbose_name=_('Options'))
|
||||||
_hosts = models.TextField(blank=True, verbose_name=_('Hosts')) # ['hostname1', 'hostname2']
|
_hosts = models.TextField(blank=True, verbose_name=_('Hosts')) # ['hostname1', 'hostname2']
|
||||||
run_as_admin = models.BooleanField(default=False, verbose_name=_('Run as admin'))
|
run_as_admin = models.BooleanField(default=False, verbose_name=_('Run as admin'))
|
||||||
run_as = models.CharField(max_length=128, default='', verbose_name=_("Run as"))
|
run_as = models.CharField(max_length=128, default='', verbose_name=_("Run as"))
|
||||||
_become = models.CharField(max_length=1024, default='', verbose_name=_("Become"))
|
_become = models.CharField(max_length=1024, default='', verbose_name=_("Become"))
|
||||||
created_by = models.CharField(max_length=64, default='', verbose_name=_('Create by'))
|
created_by = models.CharField(max_length=64, default='', null=True, verbose_name=_('Create by'))
|
||||||
date_created = models.DateTimeField(auto_now_add=True)
|
date_created = models.DateTimeField(auto_now_add=True)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -147,9 +147,10 @@ class AdHoc(models.Model):
|
||||||
@property
|
@property
|
||||||
def options(self):
|
def options(self):
|
||||||
if self._options:
|
if self._options:
|
||||||
return json.loads(self._options)
|
_options = json.loads(self._options)
|
||||||
else:
|
if isinstance(_options, dict):
|
||||||
return {}
|
return _options
|
||||||
|
return {}
|
||||||
|
|
||||||
@options.setter
|
@options.setter
|
||||||
def options(self, item):
|
def options(self, item):
|
||||||
|
|
|
@ -124,8 +124,11 @@ class SessionDetailView(SingleObjectMixin, ListView):
|
||||||
model = Session
|
model = Session
|
||||||
object = None
|
object = None
|
||||||
|
|
||||||
|
def get(self, request, *args, **kwargs):
|
||||||
|
self.object = self.get_object(queryset=self.model.objects.all())
|
||||||
|
return super().get(request, *args, **kwargs)
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
self.object = self.get_object()
|
|
||||||
return command_store.filter(session=self.object.id)
|
return command_store.filter(session=self.object.id)
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
|
|
Loading…
Reference in New Issue