diff --git a/api/tacticalrmm/agents/management/commands/bulk_delete_agents.py b/api/tacticalrmm/agents/management/commands/bulk_delete_agents.py index 895e2352..74d22d0f 100644 --- a/api/tacticalrmm/agents/management/commands/bulk_delete_agents.py +++ b/api/tacticalrmm/agents/management/commands/bulk_delete_agents.py @@ -33,6 +33,11 @@ class Command(BaseCommand): type=str, help="Delete agents that belong to the specified client", ) + parser.add_argument( + "--hostname", + type=str, + help="Delete agents with hostname starting with argument", + ) parser.add_argument( "--delete", action="store_true", @@ -44,33 +49,38 @@ class Command(BaseCommand): agentver = kwargs["agentver"] site = kwargs["site"] client = kwargs["client"] + hostname = kwargs["hostname"] delete = kwargs["delete"] - if not days and not agentver and not site and not client: + if not days and not agentver and not site and not client and not hostname: self.stdout.write( self.style.ERROR( - "Must have at least one parameter: days, agentver, site, or client" + "Must have at least one parameter: days, agentver, site, client or hostname" ) ) return - q = Agent.objects.defer(*AGENT_DEFER) + agents = Agent.objects.defer(*AGENT_DEFER) - agents = [] if days: overdue = djangotime.now() - djangotime.timedelta(days=days) - agents = [i for i in q if i.last_seen < overdue] - - if agentver: - agents = [i for i in q if pyver.parse(i.version) <= pyver.parse(agentver)] + agents = agents.filter(last_seen__lt=overdue) if site: - agents = [i for i in q if i.site.name == site] + agents = agents.filter(site__name=site) if client: - agents = [i for i in q if i.client.name == client] + agents = agents.filter(site__client__name=client) - if not agents: + if hostname: + agents = agents.filter(hostname__istartswith=hostname) + + if agentver: + agents = [ + i for i in agents if pyver.parse(i.version) <= pyver.parse(agentver) + ] + + if len(agents) == 0: self.stdout.write(self.style.ERROR("No agents matched")) return