Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/c7n/resources/ml.py: 71%

35 statements  

« prev     ^ index     » next       coverage.py v7.3.2, created at 2023-12-08 06:51 +0000

1# Copyright The Cloud Custodian Authors. 

2# SPDX-License-Identifier: Apache-2.0 

3from botocore.exceptions import ClientError 

4 

5from c7n.actions import BaseAction 

6from c7n.manager import resources 

7from c7n.query import QueryResourceManager, TypeInfo 

8from c7n.utils import local_session, type_schema 

9 

10 

11@resources.register('ml-model') 

12class MLModel(QueryResourceManager): 

13 

14 class resource_type(TypeInfo): 

15 service = 'machinelearning' 

16 enum_spec = ('describe_ml_models', 'Results', None) 

17 id = 'MLModelId' 

18 name = 'Name' 

19 date = 'CreatedAt' 

20 # need to specify request-mode dimension as well 

21 # dimension = 'MLModelId' 

22 arn_type = "mlmodel" 

23 permissions_enum = ('machinelearning:DescribeMLModels',) 

24 

25 def resources(self, query=None, augment=True): 

26 try: 

27 return super().resources(query, augment) 

28 except ClientError as e: 

29 # ml not available to new accounts, use sagemaker. 

30 if 'no longer available' in str(e): 

31 return [] 

32 raise 

33 

34 

35@MLModel.action_registry.register('delete') 

36class DeleteMLModel(BaseAction): 

37 """Action to delete machine learning model 

38 

39 It is recommended to use a filter to avoid unwanted deletion of models 

40 

41 :example: 

42 

43 .. code-block:: yaml 

44 

45 policies: 

46 - name: ml-model-delete 

47 resource: ml-model 

48 actions: 

49 - delete 

50 """ 

51 

52 schema = type_schema('delete') 

53 permissions = ("machinelearning:DeleteMLModel",) 

54 

55 def process(self, models): 

56 with self.executor_factory(max_workers=2) as w: 

57 list(w.map(self.process_model, models)) 

58 

59 def process_model(self, model): 

60 client = local_session( 

61 self.manager.session_factory).client('machinelearning') 

62 try: 

63 client.delete_ml_model(MLModelId=model['MLModelId']) 

64 except ClientError as e: 

65 self.log.exception( 

66 "Exception deleting ML model:\n %s" % e)