@@ -777,6 +777,23 @@ def get_parser(self, prog_name):
777777 dest = deadopt .replace ('-' , '_' ),
778778 help = argparse .SUPPRESS ,
779779 )
780+
781+ membership_group = parser .add_mutually_exclusive_group ()
782+ membership_group .add_argument (
783+ "--accept" ,
784+ action = "store_true" ,
785+ help = _ ("Accept the image membership" ),
786+ )
787+ membership_group .add_argument (
788+ "--reject" ,
789+ action = "store_true" ,
790+ help = _ ("Reject the image membership" ),
791+ )
792+ membership_group .add_argument (
793+ "--pending" ,
794+ action = "store_true" ,
795+ help = _ ("Reset the image membership to 'pending'" ),
796+ )
780797 return parser
781798
782799 def take_action (self , parsed_args ):
@@ -828,12 +845,14 @@ def take_action(self, parsed_args):
828845 project_arg = parsed_args .owner
829846 LOG .warning (_ ('The --owner option is deprecated, '
830847 'please use --project instead.' ))
848+ project_id = None
831849 if project_arg :
832- kwargs [ 'owner' ] = common .find_project (
850+ project_id = common .find_project (
833851 identity_client ,
834852 project_arg ,
835853 parsed_args .project_domain ,
836854 ).id
855+ kwargs ['owner' ] = project_id
837856
838857 image = utils .find_resource (
839858 image_client .images , parsed_args .image )
@@ -846,6 +865,21 @@ def take_action(self, parsed_args):
846865 image_client .images .reactivate (image .id )
847866 activation_status = "activated"
848867
868+ membership_group_args = ('accept' , 'reject' , 'pending' )
869+ membership_status = [status for status in membership_group_args
870+ if getattr (parsed_args , status )]
871+ if membership_status :
872+ # If a specific project is not passed, assume we want to update
873+ # our own membership
874+ if not project_id :
875+ project_id = self .app .client_manager .auth_ref .project_id
876+ # The mutually exclusive group of the arg parser ensure we have at
877+ # most one item in the membership_status list.
878+ if membership_status [0 ] != 'pending' :
879+ membership_status [0 ] += 'ed' # Glance expects the past form
880+ image_client .image_members .update (
881+ image .id , project_id , membership_status [0 ])
882+
849883 if parsed_args .tags :
850884 # Tags should be extended, but duplicates removed
851885 kwargs ['tags' ] = list (set (image .tags ).union (set (parsed_args .tags )))
0 commit comments