2323
2424import argparse
2525
26- from google .cloud import pubsub
26+ from google .cloud import pubsub_v1
2727
2828
29- def get_topic_policy (topic_name ):
29+ def get_topic_policy (project , topic_name ):
3030 """Prints the IAM policy for the given topic."""
31- pubsub_client = pubsub . Client ()
32- topic = pubsub_client . topic ( topic_name )
31+ client = pubsub_v1 . PublisherClient ()
32+ topic_path = client . topic_path ( project , topic_name )
3333
34- policy = topic .get_iam_policy ()
34+ policy = client .get_iam_policy (topic_path )
3535
36- print ('Policy for topic {}:' .format (topic .name ))
37- print ('Version: {}' .format (policy .version ))
38- print ('Owners: {}' .format (policy .owners ))
39- print ('Editors: {}' .format (policy .editors ))
40- print ('Viewers: {}' .format (policy .viewers ))
41- print ('Publishers: {}' .format (policy .publishers ))
42- print ('Subscribers: {}' .format (policy .subscribers ))
36+ print ('Policy for topic {}:' .format (topic_path ))
37+ for binding in policy .bindings :
38+ print ('Role: {}, Members: {}' .format (binding .role , binding .members ))
4339
4440
45- def get_subscription_policy (topic_name , subscription_name ):
41+ def get_subscription_policy (project , subscription_name ):
4642 """Prints the IAM policy for the given subscription."""
47- pubsub_client = pubsub .Client ()
48- topic = pubsub_client .topic (topic_name )
49- subscription = topic .subscription (subscription_name )
43+ client = pubsub_v1 .SubscriberClient ()
44+ subscription_path = client .subscription_path (project , subscription_name )
5045
51- policy = subscription .get_iam_policy ()
46+ policy = client .get_iam_policy (subscription_path )
5247
53- print ('Policy for subscription {} on topic {}:' .format (
54- subscription .name , topic .name ))
55- print ('Version: {}' .format (policy .version ))
56- print ('Owners: {}' .format (policy .owners ))
57- print ('Editors: {}' .format (policy .editors ))
58- print ('Viewers: {}' .format (policy .viewers ))
59- print ('Publishers: {}' .format (policy .publishers ))
60- print ('Subscribers: {}' .format (policy .subscribers ))
48+ print ('Policy for subscription {}:' .format (subscription_path ))
49+ for binding in policy .bindings :
50+ print ('Role: {}, Members: {}' .format (binding .role , binding .members ))
6151
6252
63- def set_topic_policy (topic_name ):
53+ def set_topic_policy (project , topic_name ):
6454 """Sets the IAM policy for a topic."""
65- pubsub_client = pubsub .Client ()
66- topic = pubsub_client .topic (topic_name )
67- policy = topic .get_iam_policy ()
55+ client = pubsub_v1 .PublisherClient ()
56+ topic_path = client .topic_path (project , topic_name )
57+
58+ policy = client .get_iam_policy (topic_path )
6859
6960 # Add all users as viewers.
70- policy ['roles/pubsub.viewer' ] = [policy .all_users ()]
71- # Add a group as publisherss.
72- publishers = policy .get ('roles/pubsub.publisher' , [])
73- publishers .
add (
policy .
group (
'[email protected] ' ))
74- policy ['roles/pubsub.publisher' ] = publishers
61+ policy .bindings .add (
62+ role = 'roles/pubsub.viewer' ,
63+ members = ['allUsers' ])
64+
65+ # Add a group as a publisher.
66+ policy .bindings .add (
67+ role = 'roles/pubsub.publisher' ,
68+ members = [
'group:[email protected] ' ])
7569
7670 # Set the policy
77- topic .set_iam_policy (policy )
71+ policy = client .set_iam_policy (topic_path , policy )
7872
79- print ('IAM policy for topic {} set.' .format (topic .name ))
73+ print ('IAM policy for topic {} set: {}' .format (
74+ topic_name , policy ))
8075
8176
82- def set_subscription_policy (topic_name , subscription_name ):
77+ def set_subscription_policy (project , subscription_name ):
8378 """Sets the IAM policy for a topic."""
84- pubsub_client = pubsub . Client ()
85- topic = pubsub_client . topic ( topic_name )
86- subscription = topic . subscription ( subscription_name )
87- policy = subscription .get_iam_policy ()
79+ client = pubsub_v1 . SubscriberClient ()
80+ subscription_path = client . subscription_path ( project , subscription_name )
81+
82+ policy = client .get_iam_policy (subscription_path )
8883
8984 # Add all users as viewers.
90- policy ['roles/viewer' ] = [policy .all_users ()]
91- # # Add a group as editors.
92- editors = policy .get ('roles/editor' , [])
93- editors .
add (
policy .
group (
'[email protected] ' ))
94- policy ['roles/editor' ] = editors
85+ policy .bindings .add (
86+ role = 'roles/pubsub.viewer' ,
87+ members = ['allUsers' ])
88+
89+ # Add a group as an editor.
90+ policy .bindings .add (
91+ role = 'roles/editor' ,
92+ members = [
'group:[email protected] ' ])
9593
9694 # Set the policy
97- subscription .set_iam_policy (policy )
95+ policy = client .set_iam_policy (subscription_path , policy )
9896
99- print ('IAM policy for subscription {} on topic {} set. ' .format (
100- topic . name , subscription . name ))
97+ print ('IAM policy for subscription {} set: {} ' .format (
98+ subscription_name , policy ))
10199
102100
103- def check_topic_permissions (topic_name ):
101+ def check_topic_permissions (project , topic_name ):
104102 """Checks to which permissions are available on the given topic."""
105- pubsub_client = pubsub . Client ()
106- topic = pubsub_client . topic ( topic_name )
103+ client = pubsub_v1 . PublisherClient ()
104+ topic_path = client . topic_path ( project , topic_name )
107105
108106 permissions_to_check = [
109107 'pubsub.topics.publish' ,
110108 'pubsub.topics.update'
111109 ]
112110
113- allowed_permissions = topic .check_iam_permissions (permissions_to_check )
111+ allowed_permissions = client .test_iam_permissions (
112+ topic_path , permissions_to_check )
114113
115114 print ('Allowed permissions for topic {}: {}' .format (
116- topic . name , allowed_permissions ))
115+ topic_path , allowed_permissions ))
117116
118117
119- def check_subscription_permissions (topic_name , subscription_name ):
118+ def check_subscription_permissions (project , subscription_name ):
120119 """Checks to which permissions are available on the given subscription."""
121- pubsub_client = pubsub .Client ()
122- topic = pubsub_client .topic (topic_name )
123- subscription = topic .subscription (subscription_name )
120+ client = pubsub_v1 .SubscriberClient ()
121+ subscription_path = client .subscription_path (project , subscription_name )
124122
125123 permissions_to_check = [
126124 'pubsub.subscriptions.consume' ,
127125 'pubsub.subscriptions.update'
128126 ]
129127
130- allowed_permissions = subscription . check_iam_permissions (
131- permissions_to_check )
128+ allowed_permissions = client . test_iam_permissions (
129+ subscription_path , permissions_to_check )
132130
133- print ('Allowed permissions for subscription {} on topic {} : {}' .format (
134- subscription . name , topic . name , allowed_permissions ))
131+ print ('Allowed permissions for subscription {}: {}' .format (
132+ subscription_path , allowed_permissions ))
135133
136134
137135if __name__ == '__main__' :
138136 parser = argparse .ArgumentParser (
139137 description = __doc__ ,
140138 formatter_class = argparse .RawDescriptionHelpFormatter
141139 )
140+ parser .add_argument ('project' , help = 'Your Google Cloud project ID' )
142141
143142 subparsers = parser .add_subparsers (dest = 'command' )
144143
@@ -148,7 +147,6 @@ def check_subscription_permissions(topic_name, subscription_name):
148147
149148 get_subscription_policy_parser = subparsers .add_parser (
150149 'get-subscription-policy' , help = get_subscription_policy .__doc__ )
151- get_subscription_policy_parser .add_argument ('topic_name' )
152150 get_subscription_policy_parser .add_argument ('subscription_name' )
153151
154152 set_topic_policy_parser = subparsers .add_parser (
@@ -157,7 +155,6 @@ def check_subscription_permissions(topic_name, subscription_name):
157155
158156 set_subscription_policy_parser = subparsers .add_parser (
159157 'set-subscription-policy' , help = set_subscription_policy .__doc__ )
160- set_subscription_policy_parser .add_argument ('topic_name' )
161158 set_subscription_policy_parser .add_argument ('subscription_name' )
162159
163160 check_topic_permissions_parser = subparsers .add_parser (
@@ -167,20 +164,19 @@ def check_subscription_permissions(topic_name, subscription_name):
167164 check_subscription_permissions_parser = subparsers .add_parser (
168165 'check-subscription-permissions' ,
169166 help = check_subscription_permissions .__doc__ )
170- check_subscription_permissions_parser .add_argument ('topic_name' )
171167 check_subscription_permissions_parser .add_argument ('subscription_name' )
172168
173169 args = parser .parse_args ()
174170
175171 if args .command == 'get-topic-policy' :
176- get_topic_policy (args .topic_name )
172+ get_topic_policy (args .project , args . topic_name )
177173 elif args .command == 'get-subscription-policy' :
178- get_subscription_policy (args .topic_name , args .subscription_name )
174+ get_subscription_policy (args .project , args .subscription_name )
179175 elif args .command == 'set-topic-policy' :
180- set_topic_policy (args .topic_name )
176+ set_topic_policy (args .project , args . topic_name )
181177 elif args .command == 'set-subscription-policy' :
182- set_subscription_policy (args .topic_name , args .subscription_name )
178+ set_subscription_policy (args .project , args .subscription_name )
183179 elif args .command == 'check-topic-permissions' :
184- check_topic_permissions (args .topic_name )
180+ check_topic_permissions (args .project , args . topic_name )
185181 elif args .command == 'check-subscription-permissions' :
186- check_subscription_permissions (args .topic_name , args .subscription_name )
182+ check_subscription_permissions (args .project , args .subscription_name )
0 commit comments