The operator class has gotten fairly large, this is a first pass in refactoring operator.py into a submodule instead, with multiple operator instances which handle different types of objects. - The main k8s interface has been split into K8sOpApi which extends K8sApi and is shared across all operators. - Each operator extends BaseOperator which also has an instance of K8sOpApi - The CrawlOperator is still the bulk of the functionality, but will likely be further refactored to support QA jobs --------- Co-authored-by: Tessa Walsh <tessa@bitarchivist.net>
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """ Operator handler for ProfileJobs """
 | |
| 
 | |
| from btrixcloud.utils import (
 | |
|     from_k8s_date,
 | |
|     dt_now,
 | |
| )
 | |
| 
 | |
| from btrixcloud.models import StorageRef
 | |
| 
 | |
| from .models import MCSyncData
 | |
| from .baseoperator import BaseOperator
 | |
| 
 | |
| 
 | |
| # ============================================================================
 | |
| class ProfileOperator(BaseOperator):
 | |
|     """ProfileOperator"""
 | |
| 
 | |
|     def init_routes(self, app):
 | |
|         """init routes for this operator"""
 | |
| 
 | |
|         @app.post("/op/profilebrowsers/sync")
 | |
|         async def mc_sync_profile_browsers(data: MCSyncData):
 | |
|             return await self.sync_profile_browsers(data)
 | |
| 
 | |
|     async def sync_profile_browsers(self, data: MCSyncData):
 | |
|         """sync profile browsers"""
 | |
|         spec = data.parent.get("spec", {})
 | |
| 
 | |
|         expire_time = from_k8s_date(spec.get("expireTime"))
 | |
|         browserid = spec.get("id")
 | |
| 
 | |
|         if dt_now() >= expire_time:
 | |
|             self.run_task(self.k8s.delete_profile_browser(browserid))
 | |
|             return {"status": {}, "children": []}
 | |
| 
 | |
|         params = {}
 | |
|         params.update(self.k8s.shared_params)
 | |
|         params["id"] = browserid
 | |
|         params["userid"] = spec.get("userid", "")
 | |
| 
 | |
|         oid = spec.get("oid")
 | |
|         storage = StorageRef(spec.get("storageName"))
 | |
| 
 | |
|         storage_path = storage.get_storage_extra_path(oid)
 | |
|         storage_secret = storage.get_storage_secret_name(oid)
 | |
| 
 | |
|         params["storage_path"] = storage_path
 | |
|         params["storage_secret"] = storage_secret
 | |
|         params["profile_filename"] = spec.get("profileFilename", "")
 | |
|         params["crawler_image"] = spec["crawlerImage"]
 | |
| 
 | |
|         params["url"] = spec.get("startUrl", "about:blank")
 | |
|         params["vnc_password"] = spec.get("vncPassword")
 | |
| 
 | |
|         children = self.load_from_yaml("profilebrowser.yaml", params)
 | |
| 
 | |
|         return {"status": {}, "children": children}
 |