Coverage for ocp_resources/cron_job.py: 0%

29 statements  

« prev     ^ index     » next       coverage.py v7.6.10, created at 2025-01-30 10:48 +0200

1from ocp_resources.resource import MissingRequiredArgumentError, NamespacedResource 

2 

3 

4class CronJob(NamespacedResource): 

5 """ 

6 https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/cron-job-v1/ 

7 """ 

8 

9 api_group = NamespacedResource.ApiGroup.BATCH 

10 

11 def __init__( 

12 self, 

13 schedule=None, 

14 job_template=None, 

15 timezone=None, 

16 concurrency_policy=None, 

17 starting_deadline_seconds=None, 

18 suspend=None, 

19 successful_jobs_history_limit=None, 

20 failed_jobs_history_limit=None, 

21 **kwargs, 

22 ): 

23 """ 

24 Args: 

25 schedule (str): schedule of the cron job 

26 job_template (dict): describes the job that would be created when a cronjob would be executed 

27 Example: 

28 job_template: https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/job-v1/#JobSpec 

29 timezone (str, optional): timezone name for the given schedule 

30 concurrency_policy (str, optional): indicates how to treat concurrent execution of a job 

31 suspend (bool, optional): suspend subsequent executions 

32 successful_jobs_history_limit (int, optional): number of successful jobs to retain 

33 failed_jobs_history_limit (int, optional): number of failed jobs to retain 

34 starting_deadline_seconds (int, optional): deadline in seconds, for starting a job, in case it does not 

35 start at scheduled time 

36 """ 

37 super().__init__(**kwargs) 

38 self.job_template = job_template 

39 self.schedule = schedule 

40 self.timezone = timezone 

41 self.concurrency_policy = concurrency_policy 

42 self.suspend = suspend 

43 self.successful_jobs_history_limit = successful_jobs_history_limit 

44 self.failed_jobs_history_limit = failed_jobs_history_limit 

45 self.starting_deadline_seconds = starting_deadline_seconds 

46 

47 def to_dict(self) -> None: 

48 super().to_dict() 

49 if not self.kind_dict and not self.yaml_file: 

50 if not (self.job_template and self.schedule): 

51 raise MissingRequiredArgumentError(argument="'job_template' and 'schedule'") 

52 self.res.update({ 

53 "spec": { 

54 "jobTemplate": self.job_template, 

55 "schedule": self.schedule, 

56 } 

57 }) 

58 if self.timezone: 

59 self.res["spec"]["timezone"] = self.timezone 

60 if self.suspend: 

61 self.res["spec"]["suspend"] = self.suspend 

62 if self.successful_jobs_history_limit: 

63 self.res["spec"]["successfulJobsHistoryLimit"] = self.successful_jobs_history_limit 

64 if self.failed_jobs_history_limit: 

65 self.res["spec"]["failedJobsHistoryLimit"] = self.failed_jobs_history_limit 

66 if self.concurrency_policy: 

67 self.res["spec"]["concurrencyPolicy"] = self.concurrency_policy