@@ -195,6 +195,7 @@ def push_plugin(self, name):
195
195
return self ._stream_helper (res , decode = True )
196
196
197
197
@utils .minimum_version ('1.25' )
198
+ @utils .check_resource
198
199
def remove_plugin (self , name , force = False ):
199
200
"""
200
201
Remove an installed plugin.
@@ -212,3 +213,39 @@ def remove_plugin(self, name, force=False):
212
213
res = self ._delete (url , params = {'force' : force })
213
214
self ._raise_for_status (res )
214
215
return True
216
+
217
+ @utils .minimum_version ('1.26' )
218
+ @utils .check_resource
219
+ def upgrade_plugin (self , name , remote , privileges ):
220
+ """
221
+ Upgrade an installed plugin.
222
+
223
+ Args:
224
+ name (string): Name of the plugin to upgrade. The ``:latest``
225
+ tag is optional and is the default if omitted.
226
+ remote (string): Remote reference to upgrade to. The
227
+ ``:latest`` tag is optional and is the default if omitted.
228
+ privileges (list): A list of privileges the user consents to
229
+ grant to the plugin. Can be retrieved using
230
+ :py:meth:`~plugin_privileges`.
231
+
232
+ Returns:
233
+ An iterable object streaming the decoded API logs
234
+ """
235
+
236
+ url = self ._url ('/plugins/{0}/upgrade' , name )
237
+ params = {
238
+ 'remote' : remote ,
239
+ }
240
+
241
+ headers = {}
242
+ registry , repo_name = auth .resolve_repository_name (remote )
243
+ header = auth .get_config_header (self , registry )
244
+ if header :
245
+ headers ['X-Registry-Auth' ] = header
246
+ response = self ._post_json (
247
+ url , params = params , headers = headers , data = privileges ,
248
+ stream = True
249
+ )
250
+ self ._raise_for_status (response )
251
+ return self ._stream_helper (response , decode = True )
0 commit comments