Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-20 07:58:58

0001 import json
0002 import traceback
0003 
0004 from pandaharvester.harvestercore import core_utils
0005 from pandaharvester.harvestermisc.info_utils_k8s import PandaQueuesDictK8s
0006 from pandaharvester.harvestermisc.k8s_utils import k8s_Client
0007 
0008 from .base_cred_manager import BaseCredManager
0009 
0010 # logger
0011 _logger = core_utils.setup_logger("k8s_secret_cred_manager")
0012 
0013 
0014 # credential manager with k8s secret
0015 class K8sSecretCredManager(BaseCredManager):
0016     # constructor
0017     def __init__(self, **kwarg):
0018         BaseCredManager.__init__(self, **kwarg)
0019         # make logger
0020         tmp_log = self.make_logger(_logger, method_name="__init__")
0021         # attributes
0022         if hasattr(self, "inFile") or hasattr(self, "inCertFile"):
0023             # set up with json in inFile
0024             try:
0025                 self.inFile
0026             except AttributeError:
0027                 self.inFile = self.inCertFile
0028             # parse inFile setup configuration
0029             try:
0030                 with open(self.inFile) as f:
0031                     self.setupMap = json.load(f)
0032             except Exception as e:
0033                 tmp_log.error(f"Error with inFile/inCertFile . {e.__class__.__name__}: {e}")
0034                 self.setupMap = {}
0035                 raise
0036         else:
0037             # set up with direct attributes
0038             self.setupMap = dict(vars(self))
0039         # validate setupMap
0040         try:
0041             self.k8s_config_file = self.setupMap["k8s_config_file"]
0042             self.proxy_files = self.setupMap["proxy_files"]
0043             self.secret_name = self.setupMap.get("secret_name", "proxy-secret")
0044         except KeyError as e:
0045             tmp_log.error(f"Missing attributes in setup. {e.__class__.__name__}: {e}")
0046             raise
0047 
0048         try:
0049             # retrieve the k8s namespace from CRIC
0050             self.panda_queues_dict = PandaQueuesDictK8s()
0051             self.namespace = self.panda_queues_dict.get_k8s_namespace(self.queueName)
0052             # k8s client
0053             self.k8s_client = k8s_Client(namespace=self.namespace, queue_name=self.queueName, config_file=self.k8s_config_file)
0054         except Exception as e:
0055             tmp_log.error(f"Problem instantiating k8s client for {self.k8s_config_file}. {traceback.format_exc()}")
0056             raise
0057 
0058     # check proxy
0059     def check_credential(self):
0060         # make logger
0061         # same update period as credmanager agent
0062         return False
0063 
0064     # renew proxy
0065     def renew_credential(self):
0066         # make logger
0067         tmp_log = self.make_logger(_logger, f"queueName={self.queueName}", method_name="renew_credential")
0068         # go
0069         try:
0070             rsp = self.k8s_client.create_or_patch_secret(file_list=self.proxy_files, secret_name=self.secret_name)
0071             tmp_log.debug("done")
0072         except KeyError as e:
0073             errStr = f"Error when renew proxy secret . {e.__class__.__name__}: {e}"
0074             return False, errStr
0075         else:
0076             return True, ""