From c2430b7a45df09aee41319e2327b818e117e2552 Mon Sep 17 00:00:00 2001
From: Benjamin Bertrand <benjamin.bertrand@esss.se>
Date: Wed, 3 Apr 2019 18:58:47 +0200
Subject: [PATCH] Code cleaning

Move trigger_ztp_generation and trigger_vm_creation from tasks.py to
utils.py.
The tasks.py module should only include functions used by the worker.
---
 app/network/views.py |  6 ++--
 app/tasks.py         | 82 --------------------------------------------
 app/utils.py         | 81 +++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 84 insertions(+), 85 deletions(-)

diff --git a/app/network/views.py b/app/network/views.py
index bfe70f2..d21f1ad 100644
--- a/app/network/views.py
+++ b/app/network/views.py
@@ -38,7 +38,7 @@ from .forms import (
 )
 from ..extensions import db
 from ..decorators import login_groups_accepted
-from .. import models, utils, tasks
+from .. import models, utils
 
 bp = Blueprint("network", __name__)
 
@@ -167,7 +167,7 @@ def view_host(name):
                 )
                 return redirect(url_for("network.view_host", name=name))
             else:
-                task = tasks.trigger_ztp_configuration(host)
+                task = utils.trigger_ztp_configuration(host)
                 db.session.commit()
                 current_app.logger.info(
                     f"Generation of {name} ZTP configuration requested: task {task.id}"
@@ -185,7 +185,7 @@ def view_host(name):
                 )
                 return redirect(url_for("network.view_host", name=name))
             else:
-                task = tasks.trigger_vm_creation(
+                task = utils.trigger_vm_creation(
                     host,
                     vm_disk_size=int(form.disk.data),
                     vm_cores=int(form.cores.data),
diff --git a/app/tasks.py b/app/tasks.py
index e0ad7c3..10b873c 100644
--- a/app/tasks.py
+++ b/app/tasks.py
@@ -16,7 +16,6 @@ import requests
 import tower_cli
 from datetime import datetime
 from flask import current_app
-from flask_login import current_user
 from rq import Worker, get_current_job
 from openpyxl import Workbook
 from .extensions import db
@@ -83,87 +82,6 @@ class TaskWorker(Worker):
         super().prepare_job_execution(job)
 
 
-def trigger_vm_creation(
-    host, vm_disk_size, vm_cores, vm_memory, vm_osversion, skip_post_install_job
-):
-    """Trigger a job to create a virtual machine or virtual IOC"""
-    domain = str(host.main_interface.network.domain)
-    extra_vars = [
-        f"vmname={host.name}",
-        f"domain={domain}",
-        f"vm_disk_size={vm_disk_size}",
-        f"vm_cores={vm_cores}",
-        f"vm_memory={vm_memory}",
-        f"vm_osversion={vm_osversion}",
-    ]
-    if host.is_ioc:
-        task_name = "trigger_vioc_creation"
-        job_template = current_app.config["AWX_CREATE_VIOC"]
-        post_job_template = current_app.config["AWX_POST_INSTALL"]["VIOC"].get(domain)
-    else:
-        task_name = "trigger_vm_creation"
-        job_template = current_app.config["AWX_CREATE_VM"]
-        post_job_template = current_app.config["AWX_POST_INSTALL"]["VM"].get(domain)
-    current_app.logger.info(
-        f"Launch new job to create the {host} VM: {job_template} with {extra_vars}"
-    )
-    task = current_user.launch_task(
-        task_name,
-        resource="job",
-        queue_name="low",
-        func="launch_awx_job",
-        job_template=job_template,
-        extra_vars=extra_vars,
-        timeout=500,
-    )
-    if (
-        post_job_template
-        and (not skip_post_install_job)
-        and (not vm_osversion.startswith("windows"))
-    ):
-        current_user.launch_task(
-            "trigger_post_install_job",
-            resource="job",
-            queue_name="low",
-            func="launch_awx_job",
-            job_template=post_job_template,
-            limit=f"{host.fqdn}",
-            depends_on=task.id,
-            timeout=500,
-        )
-        current_app.logger.info(
-            f"Trigger post install job: run {post_job_template} on {host.fqdn}"
-        )
-    return task
-
-
-def trigger_ztp_configuration(host):
-    """Trigger a job to generate a switch ZTP configuration"""
-    extra_vars = [
-        f"ztp_host={host.name}",
-        f"ztp_ip={host.main_interface.ip}",
-        f"ztp_mac={host.main_interface.mac}",
-        f"ztp_model={host.model}",
-    ]
-    ztp_stack = ",".join([item.serial_number for item in host.stack_members()])
-    if ztp_stack:
-        extra_vars.append(f"ztp_stack={ztp_stack}")
-    job_template = current_app.config["AWX_ZTP_CONFIGURATION"]
-    current_app.logger.info(
-        f"Launch new job to generate ZTP configuration for {host.name} device: {job_template} with {extra_vars}"
-    )
-    task = current_user.launch_task(
-        "trigger_ztp_configuration",
-        resource="job",
-        queue_name="low",
-        func="launch_awx_job",
-        job_template=job_template,
-        extra_vars=extra_vars,
-        timeout=500,
-    )
-    return task
-
-
 def launch_awx_job(resource="job", **kwargs):
     """Launch an AWX job
 
diff --git a/app/utils.py b/app/utils.py
index 03e9b7a..82b64c1 100644
--- a/app/utils.py
+++ b/app/utils.py
@@ -319,6 +319,87 @@ def trigger_ioc_repository_creation(host):
         return task
 
 
+def trigger_vm_creation(
+    host, vm_disk_size, vm_cores, vm_memory, vm_osversion, skip_post_install_job
+):
+    """Trigger a job to create a virtual machine or virtual IOC"""
+    domain = str(host.main_interface.network.domain)
+    extra_vars = [
+        f"vmname={host.name}",
+        f"domain={domain}",
+        f"vm_disk_size={vm_disk_size}",
+        f"vm_cores={vm_cores}",
+        f"vm_memory={vm_memory}",
+        f"vm_osversion={vm_osversion}",
+    ]
+    if host.is_ioc:
+        task_name = "trigger_vioc_creation"
+        job_template = current_app.config["AWX_CREATE_VIOC"]
+        post_job_template = current_app.config["AWX_POST_INSTALL"]["VIOC"].get(domain)
+    else:
+        task_name = "trigger_vm_creation"
+        job_template = current_app.config["AWX_CREATE_VM"]
+        post_job_template = current_app.config["AWX_POST_INSTALL"]["VM"].get(domain)
+    current_app.logger.info(
+        f"Launch new job to create the {host} VM: {job_template} with {extra_vars}"
+    )
+    task = current_user.launch_task(
+        task_name,
+        resource="job",
+        queue_name="low",
+        func="launch_awx_job",
+        job_template=job_template,
+        extra_vars=extra_vars,
+        timeout=500,
+    )
+    if (
+        post_job_template
+        and (not skip_post_install_job)
+        and (not vm_osversion.startswith("windows"))
+    ):
+        current_user.launch_task(
+            "trigger_post_install_job",
+            resource="job",
+            queue_name="low",
+            func="launch_awx_job",
+            job_template=post_job_template,
+            limit=f"{host.fqdn}",
+            depends_on=task.id,
+            timeout=500,
+        )
+        current_app.logger.info(
+            f"Trigger post install job: run {post_job_template} on {host.fqdn}"
+        )
+    return task
+
+
+def trigger_ztp_configuration(host):
+    """Trigger a job to generate a switch ZTP configuration"""
+    extra_vars = [
+        f"ztp_host={host.name}",
+        f"ztp_ip={host.main_interface.ip}",
+        f"ztp_mac={host.main_interface.mac}",
+        f"ztp_model={host.model}",
+    ]
+    ztp_stack = ",".join([item.serial_number for item in host.stack_members()])
+    if ztp_stack:
+        extra_vars.append(f"ztp_stack={ztp_stack}")
+    job_template = current_app.config["AWX_ZTP_CONFIGURATION"]
+    current_app.logger.info(
+        f"Launch new job to generate ZTP configuration for {host.name} device: {job_template} with {extra_vars}"
+    )
+    task = current_user.launch_task(
+        "trigger_ztp_configuration",
+        resource="job",
+        queue_name="low",
+        func="launch_awx_job",
+        job_template=job_template,
+        extra_vars=extra_vars,
+        timeout=500,
+    )
+    return task
+
+
 def redirect_to_job_status(job_id):
     """
     The answer to a client request, leading it to regularly poll a job status.
-- 
GitLab