Example #1
0
 def poller_service(self, run: "Run", payload: dict) -> dict:
     for service in fetch_all("Service"):
         if getattr(service, "configuration_backup_service", False):
             app.run(service.id)
     Session.commit()
     for pool in fetch_all("Pool"):
         if pool.device_current_configuration:
             pool.compute_pool()
     return {"success": True}
Example #2
0
 def job(self,
         run: "Run",
         payload: dict,
         device: Optional[Device] = None) -> dict:
     if run.origin_of_values == "user_provided_values":
         if device.name in run.user_provided_values:
             values = run.user_provided_values[device.name]
         else:
             values = run.user_provided_values["all"]
     else:
         values = run.eval(run.python_query_values, **locals())
     results, success = {}, True
     for value in values:
         run_data = {
             "payload": {
                 self.variable_name: value,
                 **payload
             },
             "devices": [device.id],
         }
         result = app.run(self.iterated_job.id, **run_data)
         results[value] = result["results"]["devices"][device.name]
         if not result["success"]:
             success = False
     return {"success": success, "Iteration values": values, **results}
Example #3
0
File: cli.py Project: swamim/eNMS
 def start(name, devices, payload):
     devices_list = devices.split(",") if devices else []
     devices_list = [fetch("device", name=name).id for name in devices_list]
     payload_dict = loads(payload) if payload else {}
     payload_dict["devices"] = devices_list
     service = fetch("service", name=name)
     results = app.run(service.id, **payload_dict)
     Session.commit()
     echo(app.str_dict(results))
Example #4
0
File: cli.py Project: cantops/eNMS
 def start(name: str, devices: str, payload: str) -> None:
     devices_list = devices.split(",") if devices else []
     devices_list = [fetch("Device", name=name).id for name in devices_list]
     payload_dict = loads(payload) if payload else {}
     payload_dict["devices"] = devices_list
     job = fetch("Job", name=name)
     results = app.run(job.id, **payload_dict)
     Session.commit()
     echo(app.str_dict(results))
Example #5
0
 def start(name, devices, payload):
     devices_list = devices.split(",") if devices else []
     devices_list = [
         db.fetch("device", name=name).id for name in devices_list
     ]
     payload_dict = loads(payload) if payload else {}
     payload_dict.update(devices=devices_list,
                         trigger="CLI",
                         creator=getuser())
     service = db.fetch("service", name=name)
     results = app.run(service.id, **payload_dict)
     db.session.commit()
     echo(app.str_dict(results))
Example #6
0
 def post(self):
     data = {
         "trigger": "REST",
         "creator": request.authorization["username"],
         **request.get_json(force=True),
     }
     errors, devices, pools = [], [], []
     service = db.fetch("service", name=data["name"])
     handle_asynchronously = data.get("async", False)
     for device_name in data.get("devices", ""):
         device = db.fetch("device", name=device_name)
         if device:
             devices.append(device.id)
         else:
             errors.append(
                 f"No device with the name '{device_name}'")
     for device_ip in data.get("ip_addresses", ""):
         device = db.fetch("device", ip_address=device_ip)
         if device:
             devices.append(device.id)
         else:
             errors.append(
                 f"No device with the IP address '{device_ip}'")
     for pool_name in data.get("pools", ""):
         pool = db.fetch("pool", name=pool_name)
         if pool:
             pools.append(pool.id)
         else:
             errors.append(f"No pool with the name '{pool_name}'")
     if errors:
         return {"errors": errors}
     if devices or pools:
         data.update({"devices": devices, "pools": pools})
     data["runtime"] = runtime = app.get_time()
     if handle_asynchronously:
         app.scheduler.add_job(
             id=runtime,
             func=app.run,
             run_date=datetime.now(),
             args=[service.id],
             kwargs=data,
             trigger="date",
         )
         return {"errors": errors, "runtime": runtime}
     else:
         return {**app.run(service.id, **data), "errors": errors}
Example #7
0
 def post(self) -> Union[str, dict]:
     try:
         errors, data = [], request.get_json(force=True)
         devices, pools = [], []
         job = fetch("Job", name=data["name"])
         handle_asynchronously = data.get("async", False)
         for device_name in data.get("devices", ""):
             device = fetch("Device", name=device_name)
             if device:
                 devices.append(device.id)
             else:
                 errors.append(f"No device with the name '{device_name}'")
         for device_ip in data.get("ip_addresses", ""):
             device = fetch("Device", ip_address=device_ip)
             if device:
                 devices.append(device.id)
             else:
                 errors.append(
                     f"No device with the IP address '{device_ip}'")
         for pool_name in data.get("pools", ""):
             pool = fetch("Pool", name=pool_name)
             if pool:
                 pools.append(pool.id)
             else:
                 errors.append(f"No pool with the name '{pool_name}'")
         if errors:
             return {"errors": errors}
     except Exception as e:
         info(f"REST API run_job endpoint failed ({str(e)})")
         return str(e)
     if devices or pools:
         data.update({"devices": devices, "pools": pools})
     data["runtime"] = runtime = app.get_time()
     if handle_asynchronously:
         app.scheduler.add_job(
             id=runtime,
             func=app.run,
             run_date=datetime.now(),
             args=[job.id],
             kwargs=data,
             trigger="date",
         )
         return {"errors": errors, "runtime": runtime}
     else:
         return {**app.run(job.id, **data), "errors": errors}
Example #8
0
 def post(self):
     data = {
         "trigger": "REST",
         "creator": request.authorization["username"],
         **request.get_json(force=True),
     }
     errors, devices, pools = [], [], []
     service = db.fetch("service", name=data["name"], rbac="run")
     handle_asynchronously = data.get("async", False)
     for device_name in data.get("devices", ""):
         device = db.fetch("device", name=device_name)
         if device:
             devices.append(device.id)
         else:
             errors.append(
                 f"No device with the name '{device_name}'")
     for device_ip in data.get("ip_addresses", ""):
         device = db.fetch("device", ip_address=device_ip)
         if device:
             devices.append(device.id)
         else:
             errors.append(
                 f"No device with the IP address '{device_ip}'")
     for pool_name in data.get("pools", ""):
         pool = db.fetch("pool", name=pool_name)
         if pool:
             pools.append(pool.id)
         else:
             errors.append(f"No pool with the name '{pool_name}'")
     if errors:
         return {"errors": errors}
     if devices or pools:
         data.update({
             "target_devices": devices,
             "target_pools": pools
         })
     data["runtime"] = runtime = app.get_time()
     if handle_asynchronously:
         Thread(target=app.run, args=(service.id, ),
                kwargs=data).start()
         return {"errors": errors, "runtime": runtime}
     else:
         return {**app.run(service.id, **data), "errors": errors}