dockerapi 0.10.0 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,46 +1,55 @@
1
- module Docker
2
- module API
3
- class Exec < Docker::API::Base
1
+ ##
2
+ # This class represents the Docker API exec related endpoints.
3
+ # @see https://docs.docker.com/engine/api/v1.40/#tag/Exec
4
+ class Docker::API::Exec < Docker::API::Base
4
5
 
5
- def create name, body = {}
6
- validate Docker::API::InvalidRequestBody, [:AttachStdin, :AttachStdout, :AttachStderr, :DetachKeys, :Tty, :Env, :Cmd, :Privileged, :User, :WorkingDir], body
7
- @connection.request(method: :post, path: "/containers/#{name}/exec", headers: {"Content-Type": "application/json"}, body: body.to_json )
8
- end
9
-
10
- def start name, body = {}
11
- validate Docker::API::InvalidRequestBody, [:Detach, :Tty], body
12
-
13
- stream = ""
14
- response = @connection.request(method: :post,
15
- path: "/exec/#{name}/start",
16
- headers: {"Content-Type": "application/json"},
17
- body: body.to_json,
18
- response_block: lambda { |chunk, remaining_bytes, total_bytes| stream += chunk.to_s.encode('UTF-8', invalid: :replace, undef: :replace, replace: '?') }
19
- )
20
- response.data.merge!({stream: stream})
21
- response
22
- end
6
+ ##
7
+ # Run a command inside a running container.
8
+ #
9
+ # Docker API: POST /containers/{id}/exec
10
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ContainerExec
11
+ #
12
+ # @param name [String]: The ID or name of the container.
13
+ # @param body [Hash]: Request body to be sent as json.
14
+ def create name, body = {}
15
+ @connection.request(method: :post, path: "/containers/#{name}/exec", headers: {"Content-Type": "application/json"}, body: body.to_json )
16
+ end
23
17
 
24
- def resize name, params = {}
25
- validate Docker::API::InvalidParameter, [:w, :h], params
26
- @connection.post(build_path("/exec/#{name}/resize", params))
27
- end
18
+ ##
19
+ # Starts a previously set up exec instance.
20
+ #
21
+ # Docker API: POST /exec/{id}/start
22
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ExecStart
23
+ #
24
+ # @param name [String]: Exec instance ID.
25
+ # @param body [Hash]: Request body to be sent as json.
26
+ # @param &block: Replace the default output to stdout behavior.
27
+ def start name, body = {}, &block
28
+ @connection.request(method: :post, path: "/exec/#{name}/start", headers: {"Content-Type": "application/json"}, body: body.to_json,
29
+ response_block: block_given? ? block.call : default_streamer )
30
+ end
28
31
 
29
- def details name
30
- @connection.get("/exec/#{name}/json")
31
- end
32
-
33
- #################################################
34
- # Items in this area to be removed before 1.0.0 #
35
- #################################################
36
- def inspect *args
37
- return super.inspect if args.size == 0
38
- warn "WARNING: #inspect is deprecated and will be removed in the future, please use #details instead."
39
- name = args[0]
40
- details(name)
41
- end
42
- #################################################
32
+ ##
33
+ # Resize the TTY session used by an exec instance.
34
+ #
35
+ # Docker API: POST /exec/{id}/resize
36
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ExecResize
37
+ #
38
+ # @param name [String]: Exec instance ID.
39
+ # @param body [Hash]: Request body to be sent as json.
40
+ def resize name, params = {}
41
+ @connection.post(build_path("/exec/#{name}/resize", params))
42
+ end
43
43
 
44
- end
44
+ ##
45
+ # Return low-level information about an exec instance.
46
+ #
47
+ # Docker API: GET /exec/{id}/json
48
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ExecInspect
49
+ #
50
+ # @param name [String]: Exec instance ID.
51
+ def details name
52
+ @connection.get("/exec/#{name}/json")
45
53
  end
54
+
46
55
  end
@@ -1,148 +1,205 @@
1
- require "base64"
2
- require "json"
3
- require 'fileutils'
4
- module Docker
5
- module API
6
- CommitBody = [:Hostname, :Domainname, :User, :AttachStdin, :AttachStdout, :AttachStderr, :ExposedPorts, :Tty, :OpenStdin, :StdinOnce, :Env, :Cmd, :HealthCheck, :ArgsEscaped, :Image, :Volumes, :WorkingDir, :Entrypoint, :NetworkDisabled, :MacAddress, :OnBuild, :Labels, :StopSignal, :StopTimeout, :Shell]
7
- BuildParams = [:dockerfile, :t, :extrahosts, :remote, :q, :nocache, :cachefrom, :pull, :rm, :forcerm, :memory, :memswap, :cpushares, :cpusetcpus, :cpuperiod, :cpuquota, :buildargs, :shmsize, :squash, :labels, :networkmode, :platform, :target, :outputs]
8
- class Image < Docker::API::Base
9
-
10
- def details name
11
- @connection.get(build_path([name, "json"]))
12
- end
13
-
14
- def history name
15
- @connection.get(build_path([name, "history"]))
16
- end
17
-
18
- def list params = {}
19
- validate Docker::API::InvalidParameter, [:all, :filters, :digests], params
20
- @connection.get(build_path(["json"], params))
21
- end
22
-
23
- def search params = {}
24
- validate Docker::API::InvalidParameter, [:term, :limit, :filters], params
25
- @connection.get(build_path(["search"], params))
26
- end
27
-
28
- def tag name, params = {}
29
- validate Docker::API::InvalidParameter, [:repo, :tag], params
30
- @connection.post(build_path([name, "tag"], params))
31
- end
32
-
33
- def prune params = {}
34
- validate Docker::API::InvalidParameter, [:filters], params
35
- @connection.post(build_path(["prune"], params))
36
- end
37
-
38
- def remove name, params = {}
39
- validate Docker::API::InvalidParameter, [:force, :noprune], params
40
- @connection.delete(build_path([name], params))
41
- end
42
-
43
- def export name, path = "exported_image"
44
- file = File.open("/tmp/exported-image", "wb")
45
- streamer = lambda do |chunk, remaining_bytes, total_bytes|
46
- file.write(chunk)
47
- end
48
- response = @connection.request(method: :get, path: build_path([name, "get"]) , response_block: streamer)
49
- file.close
50
- response.status == 200 ? FileUtils.mv("/tmp/exported-image", File.expand_path(path)) : FileUtils.rm("/tmp/exported-image")
51
- response
52
- end
53
-
54
- def import path, params = {}
55
- validate Docker::API::InvalidParameter, [:quiet], params
56
- file = File.open(File.expand_path(path), "r")
57
- response = @connection.request(method: :post, path: build_path(["load"], params) , headers: {"Content-Type" => "application/x-tar"}, request_block: lambda { file.read(Excon.defaults[:chunk_size]).to_s} )
58
- file.close
59
- response
60
- end
61
-
62
- def push name, params = {}, authentication = {}
63
- validate Docker::API::InvalidParameter, [:tag], params
64
-
65
- if authentication.keys.size > 0
66
- @connection.request(method: :post, path: build_path([name, "push"], params), headers: { "X-Registry-Auth" => Base64.urlsafe_encode64(authentication.to_json.to_s).chomp } )
67
- else
68
- raise Docker::API::Error.new("Provide authentication parameters to push an image")
69
- end
70
- end
71
-
72
- def commit params = {}, body = {}
73
- validate Docker::API::InvalidParameter, [:container, :repo, :tag, :comment, :author, :pause, :changes], params
74
- validate Docker::API::InvalidRequestBody, Docker::API::CommitBody, body
75
- container = Docker::API::Container.new.details(params[:container])
76
- return container if [404, 301].include? container.status
77
- body = JSON.parse(container.body)["Config"].merge(body)
78
- @connection.request(method: :post, path: build_path("/commit", params), headers: {"Content-Type": "application/json"}, body: body.to_json)
79
- end
80
-
81
- def create params = {}, authentication = {}
82
- validate Docker::API::InvalidParameter, [:fromImage, :fromSrc, :repo, :tag, :message, :platform], params
83
-
84
- if authentication.keys.size > 0
85
- auth = Docker::API::System.new.auth(authentication)
86
- return auth unless [200, 204].include? auth.status
87
- @connection.request(method: :post, path: build_path(["create"], params), headers: { "X-Registry-Auth" => Base64.encode64(authentication.to_json.to_s).chomp } )
88
- elsif params.has_key? :fromSrc
89
- if params[:fromSrc].match(/^(http|https)/)
90
- @connection.request(method: :post, path: build_path(["create"], params))
91
- else
92
- file = File.open(File.expand_path(params[:fromSrc]), "r")
93
- params[:fromSrc] = "-"
94
- response = @connection.request(method: :post, path: build_path(["create"], params) , headers: {"Content-Type" => "application/x-tar"}, request_block: lambda { file.read(Excon.defaults[:chunk_size]).to_s} )
95
- file.close
96
- response
97
- end
98
- else
99
- @connection.post(build_path(["create"], params))
100
- end
101
- end
102
-
103
- def build path, params = {}, authentication = {}
104
- raise Docker::API::Error.new("Expected path or params[:remote]") unless path || params[:remote]
105
- validate Docker::API::InvalidParameter, Docker::API::BuildParams, params
106
-
107
- header = {"Content-type": "application/x-tar"}
108
- if authentication.keys.size > 0
109
- authentication.each_key do |server|
110
- auth = Docker::API::System.new.auth({username: authentication[server][:username] ,password:authentication[server][:password], serveraddress: server})
111
- return auth unless [200, 204].include? auth.status
112
- end
113
- header.merge!({"X-Registry-Config": Base64.urlsafe_encode64(authentication.to_json.to_s).chomp})
114
- end
115
-
116
- begin
117
- file = File.open( File.expand_path( path ) , "r")
118
- response = @connection.request(method: :post, path: build_path("/build", params), headers: header, request_block: lambda { file.read(Excon.defaults[:chunk_size]).to_s})
119
- file.close
120
- rescue
121
- response = @connection.request(method: :post, path: build_path("/build", params), headers: header)
122
- end
123
- response
124
- end
125
-
126
- def delete_cache params = {}
127
- validate Docker::API::InvalidParameter, [:all, "keep-storage", :filters], params
128
- @connection.post(build_path("/build/prune", params))
129
- end
130
-
131
- #################################################
132
- # Items in this area to be removed before 1.0.0 #
133
- #################################################
134
- def base_path
135
- "/images"
136
- end
137
-
138
- def inspect *args
139
- return super.inspect if args.size == 0
140
- warn "WARNING: #inspect is deprecated and will be removed in the future, please use #details instead."
141
- name = args[0]
142
- details(name)
143
- end
144
- #################################################
1
+ ##
2
+ # This class represents the Docker API endpoints regarding images.
3
+ # @see https://docs.docker.com/engine/api/v1.40/#tag/Image
4
+ class Docker::API::Image < Docker::API::Base
5
+
6
+ ##
7
+ # Return low-level information about an image.
8
+ #
9
+ # Docker API: GET /images/{name}/json
10
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ImageInspect
11
+ #
12
+ # @param name [String]: The ID or name of the image.
13
+ def details name
14
+ @connection.get("/images/#{name}/json")
15
+ end
16
+
17
+ ##
18
+ # Return image digest and platform information by contacting the registry.
19
+ #
20
+ # Docker API: GET /distribution/{name}/json
21
+ # @see https://docs.docker.com/engine/api/v1.40/#tag/Distribution
22
+ #
23
+ # @param name [String]: The ID or name of the image.
24
+ def distribution name
25
+ @connection.get("/distribution/#{name}/json")
26
+ end
27
+
28
+ ##
29
+ # Return parent layers of an image.
30
+ #
31
+ # Docker API: GET /images/{name}/history
32
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ImageHistory
33
+ #
34
+ # @param name [String]: The ID or name of the image.
35
+ def history name
36
+ @connection.get("/images/#{name}/history")
37
+ end
38
+
39
+ ##
40
+ # Returns a list of images on the server. Note that it uses a different, smaller representation of an image than inspecting a single image.
41
+ #
42
+ # Docker API: GET /images/json
43
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ImageList
44
+ #
45
+ # @param params [Hash]: Parameters that are appended to the URL.
46
+ def list params = {}
47
+ @connection.get(build_path("/images/json", params))
48
+ end
49
+
50
+ ##
51
+ # Search for an image on Docker Hub.
52
+ #
53
+ # Docker API: GET /images/search
54
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ImageSearch
55
+ #
56
+ # @param params [Hash]: Parameters that are appended to the URL.
57
+ def search params = {}
58
+ @connection.get(build_path("/images/search", params))
59
+ end
60
+
61
+ ##
62
+ # Tag an image so that it becomes part of a repository.
63
+ #
64
+ # Docker API: POST /images/{name}/tag
65
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ImageTag
66
+ #
67
+ # @param name [String]: The ID or name of the image.
68
+ # @param params [Hash]: Parameters that are appended to the URL.
69
+ def tag name, params = {}
70
+ @connection.post(build_path("/images/#{name}/tag", params))
71
+ end
72
+
73
+ ##
74
+ # Delete unused images.
75
+ #
76
+ # Docker API: POST /images/prune
77
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ImagePrune
78
+ #
79
+ # @param params [Hash]: Parameters that are appended to the URL.
80
+ def prune params = {}
81
+ @connection.post(build_path("/images/prune", params))
82
+ end
83
+
84
+ ##
85
+ # Remove an image, along with any untagged parent images that were referenced by that image.
86
+ #
87
+ # Images can't be removed if they have descendant images, are being used by a running container or are being used by a build.
88
+ #
89
+ # Docker API: DELETE /images/{name}
90
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ImageDelete
91
+ #
92
+ # @param name [String]: The ID or name of the image.
93
+ # @param params [Hash]: Parameters that are appended to the URL.
94
+ def remove name, params = {}
95
+ @connection.delete(build_path("/images/#{name}", params))
96
+ end
97
+
98
+ ##
99
+ # Export an image.
100
+ #
101
+ # Docker API: GET /images/{name}/get
102
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ImageGet
103
+ #
104
+ # @param name [String]: The ID or name of the image.
105
+ # @param path [String]: Path to the exported file.
106
+ # @param &block: Replace the default file writing behavior.
107
+ def export name, path, &block
108
+ @connection.request(method: :get, path: build_path("/images/#{name}/get") , response_block: block_given? ? block.call : default_writer(path))
109
+ end
110
+
111
+ ##
112
+ # Import images.
113
+ #
114
+ # Docker API: POST /images/load
115
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ImageLoad
116
+ #
117
+ # @param name [String]: The ID or name of the image.
118
+ # @param params [Hash]: Parameters that are appended to the URL.
119
+ def import path, params = {}
120
+ default_reader(path, build_path("/images/load", params))
121
+ end
122
+
123
+ ##
124
+ # Push an image to a registry.
125
+ #
126
+ # Docker API: POST /images/{name}/push
127
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ImagePush
128
+ #
129
+ # @param name [String]: The ID or name of the image.
130
+ # @param params [Hash]: Parameters that are appended to the URL.
131
+ # @param authentication [Hash]: Authentication parameters.
132
+ def push name, params = {}, authentication = {}
133
+ raise Docker::API::Error.new("Provide authentication parameters to push an image") unless authentication.keys.size > 0
134
+ @connection.request(method: :post, path: build_path("/images/#{name}/push", params), headers: { "X-Registry-Auth" => Base64.urlsafe_encode64(authentication.to_json.to_s).chomp } )
135
+ end
145
136
 
137
+ ##
138
+ # Create a new image from a container.
139
+ #
140
+ # Docker API: POST /commit
141
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ImageCommit
142
+ #
143
+ # @param params [Hash]: Parameters that are appended to the URL.
144
+ # @param body [Hash]: Request body to be sent as json.
145
+ def commit params = {}, body = {}
146
+ container = Docker::API::Container.new.details(params[:container])
147
+ return container if [404, 301].include? container.status
148
+ @connection.request(method: :post, path: build_path("/commit", params), headers: {"Content-Type": "application/json"}, body: container.json["Config"].merge(body).to_json)
149
+ end
150
+
151
+ ##
152
+ # Create an image by either pulling it from a registry or importing it.
153
+ #
154
+ # Docker API: POST /images/create
155
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ImageCreate
156
+ #
157
+ # @param params [Hash]: Parameters that are appended to the URL.
158
+ # @param authentication [Hash]: Authentication parameters.
159
+ # @param &block: Replace the default output to stdout behavior.
160
+ def create params = {}, authentication = {}, &block
161
+ request = {method: :post, path: build_path("/images/create", params), response_block: block_given? ? block.call : default_streamer }
162
+ if params.has_key? :fromSrc and !params[:fromSrc].match(/^(http|https)/) # then it's using a tar file
163
+ path = params[:fromSrc]
164
+ params[:fromSrc] = "-"
165
+ default_reader(path, build_path("/images/create", params))
166
+ else
167
+ request[:headers] = { "X-Registry-Auth" => Base64.encode64(authentication.to_json.to_s).chomp } if authentication.keys.size > 0
168
+ @connection.request(request)
146
169
  end
147
170
  end
171
+
172
+ ##
173
+ # Build an image from a tar archive with a Dockerfile in it.
174
+ #
175
+ # Docker API: POST /build
176
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ImageBuild
177
+ #
178
+ # @param path [String]: Path to the tar file.
179
+ # @param params [Hash]: Parameters that are appended to the URL.
180
+ # @param authentication [Hash]: Authentication parameters.
181
+ # @param &block: Replace the default output to stdout behavior.
182
+ def build path, params = {}, authentication = {}, &block
183
+ raise Docker::API::Error.new("Expected path or params[:remote]") unless path || params[:remote]
184
+
185
+ headers = {"Content-type": "application/x-tar"}
186
+ headers.merge!({"X-Registry-Config": Base64.urlsafe_encode64(authentication.to_json.to_s).chomp}) if authentication.keys.size > 0
187
+
188
+ if path == nil and params.has_key? :remote
189
+ response = @connection.request(method: :post, path: build_path("/build", params), headers: headers, response_block: block_given? ? block.call : default_streamer)
190
+ else
191
+ default_reader(path, build_path("/build", params), headers)
192
+ end
193
+ end
194
+
195
+ ##
196
+ # Delete builder cache.
197
+ #
198
+ # Docker API: POST /build/prune
199
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/BuildPrune
200
+ #
201
+ # @param params [Hash]: Parameters that are appended to the URL.
202
+ def delete_cache params = {}
203
+ @connection.post(build_path("/build/prune", params))
204
+ end
148
205
  end
@@ -1,56 +1,86 @@
1
- module Docker
2
- module API
3
- class Network < Docker::API::Base
4
-
5
- def list params = {}
6
- validate Docker::API::InvalidParameter, [:filters], params
7
- @connection.get(build_path("/networks", params))
8
- end
9
-
10
- def details name, params = {}
11
- validate Docker::API::InvalidParameter, [:verbose, :scope], params
12
- @connection.get(build_path([name], params))
13
- end
14
-
15
- def create body = {}
16
- validate Docker::API::InvalidRequestBody, [:Name, :CheckDuplicate, :Driver, :Internal, :Attachable, :Ingress, :IPAM, :EnableIPv6, :Options, :Labels], body
17
- @connection.request(method: :post, path: build_path(["create"]), headers: {"Content-Type": "application/json"}, body: body.to_json)
18
- end
19
-
20
- def remove name
21
- @connection.delete(build_path([name]))
22
- end
23
-
24
- def prune params = {}
25
- validate Docker::API::InvalidParameter, [:filters], params
26
- @connection.post(build_path(["prune"], params))
27
- end
28
-
29
- def connect name, body = {}
30
- validate Docker::API::InvalidRequestBody, [:Container, :EndpointConfig], body
31
- @connection.request(method: :post, path: build_path([name, "connect"]), headers: {"Content-Type": "application/json"}, body: body.to_json)
32
- end
33
-
34
- def disconnect name, body = {}
35
- validate Docker::API::InvalidRequestBody, [:Container, :Force], body
36
- @connection.request(method: :post, path: build_path([name, "disconnect"]), headers: {"Content-Type": "application/json"}, body: body.to_json)
37
- end
38
-
39
- #################################################
40
- # Items in this area to be removed before 1.0.0 #
41
- #################################################
42
- def base_path
43
- "/networks"
44
- end
45
-
46
- def inspect *args
47
- return super.inspect if args.size == 0
48
- warn "WARNING: #inspect is deprecated and will be removed in the future, please use #details instead."
49
- name, params = args[0], args[1] || {}
50
- details(name, params)
51
- end
52
- #################################################
53
-
54
- end
1
+ ##
2
+ # This class represents the Docker API endpoints regarding networks.
3
+ # @see https://docs.docker.com/engine/api/v1.40/#tag/Network
4
+ class Docker::API::Network < Docker::API::Base
5
+
6
+ ##
7
+ # List networks.
8
+ #
9
+ # Docker API: GET /networks
10
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/NetworkList
11
+ #
12
+ # @param params [Hash]: Parameters that are appended to the URL.
13
+ def list params = {}
14
+ @connection.get(build_path("/networks", params))
15
+ end
16
+
17
+ ##
18
+ # Inspect a network.
19
+ #
20
+ # Docker API: GET /networks/{id}
21
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/NetworkInspect
22
+ #
23
+ # @param name [String]: The ID or name of the network.
24
+ # @param params [Hash]: Parameters that are appended to the URL.
25
+ def details name, params = {}
26
+ @connection.get(build_path("/networks/#{name}", params))
27
+ end
28
+
29
+ ##
30
+ # Create a network.
31
+ #
32
+ # Docker API: POST /networks/create
33
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/NetworkCreate
34
+ #
35
+ # @param body [Hash]: Request body to be sent as json.
36
+ def create body = {}
37
+ @connection.request(method: :post, path: "/networks/create", headers: {"Content-Type": "application/json"}, body: body.to_json)
38
+ end
39
+
40
+ ##
41
+ # Remove a network.
42
+ #
43
+ # Docker API: DELETE /networks/{id}
44
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/NetworkDelete
45
+ #
46
+ # @param name [String]: The ID or name of the network.
47
+ def remove name
48
+ @connection.delete("/networks/#{name}")
55
49
  end
50
+
51
+ ##
52
+ # Delete unused networks.
53
+ #
54
+ # Docker API: POST /networks/prune
55
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/NetworkPrune
56
+ #
57
+ # @param params [Hash]: Parameters that are appended to the URL.
58
+ def prune params = {}
59
+ @connection.post(build_path("/networks/prune", params))
60
+ end
61
+
62
+ ##
63
+ # Connect a container to a network.
64
+ #
65
+ # Docker API: POST /networks/{id}/connect
66
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/NetworkConnect
67
+ #
68
+ # @param name [String]: The ID or name of the network.
69
+ # @param body [Hash]: Request body to be sent as json.
70
+ def connect name, body = {}
71
+ @connection.request(method: :post, path: "/networks/#{name}/connect", headers: {"Content-Type": "application/json"}, body: body.to_json)
72
+ end
73
+
74
+ ##
75
+ # Disconnect a container from a network.
76
+ #
77
+ # Docker API: POST /networks/{id}/disconnect
78
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/NetworkDisconnect
79
+ #
80
+ # @param name [String]: The ID or name of the network.
81
+ # @param body [Hash]: Request body to be sent as json.
82
+ def disconnect name, body = {}
83
+ @connection.request(method: :post, path: "/networks/#{name}/disconnect", headers: {"Content-Type": "application/json"}, body: body.to_json)
84
+ end
85
+
56
86
  end