@@ -699,11 +699,12 @@ def __repr__(self):
699699 return f"<{ self .__class__ .__name__ } '{ self .name } ' { self .description } (disk={ self .disk } ) (ram={ self .ram } ) (vcpus={ self .vcpus } )>"
700700
701701
702- def list_flavors (reservable = None , reservation_id = None ) -> List [Flavor ]:
703- """Get a list of all available flavors.
702+ def list_flavors (reservable = None , gpu = None , reservation_id = None ) -> List [Flavor ]:
703+ """Get a list of flavors
704704
705705 Args:
706- reservable (bool): Whether to filter by reservable flavors. Defaults to True.
706+ reservable (bool): If given, whether to filter by reservable flavors.
707+ gpu (bool): If given, whether to filter by GPU flavors.
707708 reservation_id (str, optional): The reservation ID to filter by. Defaults to None.
708709
709710 Returns:
@@ -715,13 +716,19 @@ def list_flavors(reservable=None, reservation_id=None) -> List[Flavor]:
715716 chi_flavors = []
716717 for f in flavors :
717718 extras = f .get_keys ()
718- # include a flavor if:
719- # - not filtering by reservable
720- # - is reservable in blazar & not an active reservation flavor
721- if not reservable or (
722- extras .get ("aggregate_instance_extra_specs:reservation" )
723- == reservation_id
724- and extras .get ("trait:CUSTOM_BLAZAR_FLAVOR_RESERVATION" ) == "required"
719+ is_reservable = not any (
720+ e .startswith ("resources:CUSTOM_RESERVATION_" )
721+ for e in extras
722+ )
723+ is_gpu = f .extra_specs .get ("trait:CUSTOM_GPU" ) == "required"
724+ matching_reservation = (
725+ reservation_id is None or
726+ extras .get ("aggregate_instance_extra_specs:reservation" , None ) == reservation_id
727+ )
728+ if (
729+ (reservable is None or reservable == is_reservable )
730+ and (gpu is None or gpu == is_gpu )
731+ and matching_reservation
725732 ):
726733 chi_flavors .append (
727734 Flavor (
0 commit comments