mirror of https://github.com/jumpserver/jumpserver
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
2.0 KiB
65 lines
2.0 KiB
# -*- coding: utf-8 -*-
|
|
#
|
|
from django.utils.translation import gettext as _
|
|
|
|
from common.utils import get_logger
|
|
|
|
logger = get_logger(__file__)
|
|
__all__ = [
|
|
'check_asset_can_run_ansible', 'clean_ansible_task_hosts',
|
|
'group_asset_by_platform',
|
|
]
|
|
|
|
|
|
def check_asset_can_run_ansible(asset):
|
|
if not asset.is_active:
|
|
msg = _("Asset has been disabled, skipped: {}").format(asset)
|
|
logger.info(msg)
|
|
return False
|
|
if not asset.is_support_ansible():
|
|
msg = _("Asset may not be support ansible, skipped: {}").format(asset)
|
|
logger.info(msg)
|
|
return False
|
|
return True
|
|
|
|
|
|
def check_system_user_can_run_ansible(system_user):
|
|
if not system_user.auto_push_account:
|
|
logger.warn(f'Push system user task skip, auto push not enable: system_user={system_user.name}')
|
|
return False
|
|
if not system_user.is_protocol_support_push:
|
|
logger.warn(f'Push system user task skip, protocol not support: '
|
|
f'system_user={system_user.name} protocol={system_user.protocol} '
|
|
f'support_protocol={system_user.SUPPORT_PUSH_PROTOCOLS}')
|
|
return False
|
|
|
|
# Push root as system user is dangerous
|
|
if system_user.username.lower() in ["root", "administrator"]:
|
|
msg = _("For security, do not push user {}".format(system_user.username))
|
|
logger.info(msg)
|
|
return False
|
|
|
|
return True
|
|
|
|
|
|
def clean_ansible_task_hosts(assets, system_user=None):
|
|
if system_user and not check_system_user_can_run_ansible(system_user):
|
|
return []
|
|
cleaned_assets = []
|
|
for asset in assets:
|
|
if not check_asset_can_run_ansible(asset):
|
|
continue
|
|
cleaned_assets.append(asset)
|
|
if not cleaned_assets:
|
|
logger.info(_("No assets matched, stop task"))
|
|
return cleaned_assets
|
|
|
|
|
|
def group_asset_by_platform(asset):
|
|
if asset.is_unixlike():
|
|
return 'unixlike'
|
|
elif asset.is_windows():
|
|
return 'windows'
|
|
else:
|
|
return 'other'
|