1010
1111
1212class DeploymentBabysitterConfig (BaseModel ):
13- slack_channel : str
13+ slack_channel : str = ""
1414 fields_to_monitor : Tuple [str ] = (
1515 "status.readyReplicas" ,
1616 "message" ,
1717 "reason" ,
1818 "spec"
1919 )
20+ sinks : List [SinkConfigBase ] = None
2021
2122
2223# TODO: filter out all the managed fields crap
@@ -40,6 +41,7 @@ def babysitter_get_blocks(diffs: List[DiffDetail]):
4041@on_deployment_all_changes
4142def deployment_babysitter (event : DeploymentEvent , config : DeploymentBabysitterConfig ):
4243 """Track changes to a deployment and send the changes in slack."""
44+ filtered_diffs = None
4345 if event .operation == K8sOperationType .UPDATE :
4446 all_diffs = event .obj .diff (event .old_obj )
4547 filtered_diffs = list (filter (lambda x : babysitter_should_include_diff (x , config ), all_diffs ))
@@ -48,5 +50,22 @@ def deployment_babysitter(event: DeploymentEvent, config: DeploymentBabysitterCo
4850 event .report_attachment_blocks .extend (babysitter_get_blocks (filtered_diffs ))
4951
5052 event .report_title = f"Deployment { event .obj .metadata .name } { event .operation .value } d in namespace { event .obj .metadata .namespace } "
51- event .slack_channel = config .slack_channel
52- send_to_slack (event )
53+ if config .slack_channel :
54+ event .slack_channel = config .slack_channel
55+ send_to_slack (event )
56+
57+ if config .sinks :
58+ data = {
59+ "deployment" : event .obj .metadata .name ,
60+ "deployment_namespace" : event .obj .metadata .namespace ,
61+ "message" : "Deployment properties change" ,
62+ "changed_properties" : [{
63+ "property" : "." .join (diff .path ),
64+ "old" : diff .other_value ,
65+ "new" : diff .value
66+ } for diff in filtered_diffs ]
67+ }
68+ for sink_config in config .sinks :
69+ SinkFactory .get_sink (sink_config ).write (data )
70+
71+
0 commit comments