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}
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}
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))
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))
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))
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}
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}
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}