23
23
24
24
import argparse
25
25
26
- from google .cloud import pubsub
26
+ from google .cloud import pubsub_v1
27
27
28
28
29
- def get_topic_policy (topic_name ):
29
+ def get_topic_policy (project , topic_name ):
30
30
"""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 )
33
33
34
- policy = topic .get_iam_policy ()
34
+ policy = client .get_iam_policy (topic_path )
35
35
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 ))
43
39
44
40
45
- def get_subscription_policy (topic_name , subscription_name ):
41
+ def get_subscription_policy (project , subscription_name ):
46
42
"""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 )
50
45
51
- policy = subscription .get_iam_policy ()
46
+ policy = client .get_iam_policy (subscription_path )
52
47
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 ))
61
51
62
52
63
- def set_topic_policy (topic_name ):
53
+ def set_topic_policy (project , topic_name ):
64
54
"""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 )
68
59
69
60
# 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 ('cloud-logs@google.com' ))
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:cloud-logs@google.com' ])
75
69
76
70
# Set the policy
77
- topic .set_iam_policy (policy )
71
+ policy = client .set_iam_policy (topic_path , policy )
78
72
79
- print ('IAM policy for topic {} set.' .format (topic .name ))
73
+ print ('IAM policy for topic {} set: {}' .format (
74
+ topic_name , policy ))
80
75
81
76
82
- def set_subscription_policy (topic_name , subscription_name ):
77
+ def set_subscription_policy (project , subscription_name ):
83
78
"""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 )
88
83
89
84
# 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 ('cloud-logs@google.com' ))
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:cloud-logs@google.com' ])
95
93
96
94
# Set the policy
97
- subscription .set_iam_policy (policy )
95
+ policy = client .set_iam_policy (subscription_path , policy )
98
96
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 ))
101
99
102
100
103
- def check_topic_permissions (topic_name ):
101
+ def check_topic_permissions (project , topic_name ):
104
102
"""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 )
107
105
108
106
permissions_to_check = [
109
107
'pubsub.topics.publish' ,
110
108
'pubsub.topics.update'
111
109
]
112
110
113
- allowed_permissions = topic .check_iam_permissions (permissions_to_check )
111
+ allowed_permissions = client .test_iam_permissions (
112
+ topic_path , permissions_to_check )
114
113
115
114
print ('Allowed permissions for topic {}: {}' .format (
116
- topic . name , allowed_permissions ))
115
+ topic_path , allowed_permissions ))
117
116
118
117
119
- def check_subscription_permissions (topic_name , subscription_name ):
118
+ def check_subscription_permissions (project , subscription_name ):
120
119
"""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 )
124
122
125
123
permissions_to_check = [
126
124
'pubsub.subscriptions.consume' ,
127
125
'pubsub.subscriptions.update'
128
126
]
129
127
130
- allowed_permissions = subscription . check_iam_permissions (
131
- permissions_to_check )
128
+ allowed_permissions = client . test_iam_permissions (
129
+ subscription_path , permissions_to_check )
132
130
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 ))
135
133
136
134
137
135
if __name__ == '__main__' :
138
136
parser = argparse .ArgumentParser (
139
137
description = __doc__ ,
140
138
formatter_class = argparse .RawDescriptionHelpFormatter
141
139
)
140
+ parser .add_argument ('project' , help = 'Your Google Cloud project ID' )
142
141
143
142
subparsers = parser .add_subparsers (dest = 'command' )
144
143
@@ -148,7 +147,6 @@ def check_subscription_permissions(topic_name, subscription_name):
148
147
149
148
get_subscription_policy_parser = subparsers .add_parser (
150
149
'get-subscription-policy' , help = get_subscription_policy .__doc__ )
151
- get_subscription_policy_parser .add_argument ('topic_name' )
152
150
get_subscription_policy_parser .add_argument ('subscription_name' )
153
151
154
152
set_topic_policy_parser = subparsers .add_parser (
@@ -157,7 +155,6 @@ def check_subscription_permissions(topic_name, subscription_name):
157
155
158
156
set_subscription_policy_parser = subparsers .add_parser (
159
157
'set-subscription-policy' , help = set_subscription_policy .__doc__ )
160
- set_subscription_policy_parser .add_argument ('topic_name' )
161
158
set_subscription_policy_parser .add_argument ('subscription_name' )
162
159
163
160
check_topic_permissions_parser = subparsers .add_parser (
@@ -167,20 +164,19 @@ def check_subscription_permissions(topic_name, subscription_name):
167
164
check_subscription_permissions_parser = subparsers .add_parser (
168
165
'check-subscription-permissions' ,
169
166
help = check_subscription_permissions .__doc__ )
170
- check_subscription_permissions_parser .add_argument ('topic_name' )
171
167
check_subscription_permissions_parser .add_argument ('subscription_name' )
172
168
173
169
args = parser .parse_args ()
174
170
175
171
if args .command == 'get-topic-policy' :
176
- get_topic_policy (args .topic_name )
172
+ get_topic_policy (args .project , args . topic_name )
177
173
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 )
179
175
elif args .command == 'set-topic-policy' :
180
- set_topic_policy (args .topic_name )
176
+ set_topic_policy (args .project , args . topic_name )
181
177
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 )
183
179
elif args .command == 'check-topic-permissions' :
184
- check_topic_permissions (args .topic_name )
180
+ check_topic_permissions (args .project , args . topic_name )
185
181
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