UNPKG

4.58 kBPlain TextView Raw
1'use strict'
2
3import Modem = require('docker-modem')
4import ContainerManager from './container'
5import ImageManager from './image'
6import VolumeManager from './volume'
7import NetworkManager from './network'
8import NodeManager from './node'
9import PluginManager from './plugin'
10import SecretManager from './secret'
11import ServiceManager from './service'
12import SwarmManager from './swarm'
13import TaskManager from './task'
14
15/**
16 * Docker class with all methods
17 */
18export class Docker {
19 modem: Modem
20 container: ContainerManager
21 image: ImageManager
22 volume: VolumeManager
23 network: NetworkManager
24 node: NodeManager
25 plugin: PluginManager
26 secret: SecretManager
27 service: ServiceManager
28 swarm: SwarmManager
29 task: TaskManager
30
31 /**
32 * Creates the Docker object
33 * @param {Object} opts Docker options
34 */
35 constructor (opts) {
36 this.modem = new Modem(opts)
37
38 this.container = new ContainerManager(this.modem)
39 this.image = new ImageManager(this.modem)
40 this.volume = new VolumeManager(this.modem)
41 this.network = new NetworkManager(this.modem)
42 this.node = new NodeManager(this.modem)
43 this.plugin = new PluginManager(this.modem)
44 this.secret = new SecretManager(this.modem)
45 this.service = new ServiceManager(this.modem)
46 this.swarm = new SwarmManager(this.modem)
47 this.task = new TaskManager(this.modem)
48 }
49
50 /**
51 * Validate credentials for a registry and get identity token,
52 * if available, for accessing the registry without password
53 * https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/check-auth-configuration
54 * @param {Object} opts Auth options
55 * @return {Promise} Promise returning the result
56 */
57 auth (opts: Object): Promise<Object> {
58 const call = {
59 path: '/auth?',
60 method: 'POST',
61 options: opts,
62 statusCodes: {
63 200: true,
64 204: true,
65 500: 'server error'
66 }
67 }
68
69 return new Promise((resolve, reject) => {
70 this.modem.dial(call, (err, data: Object) => {
71 if (err) return reject(err)
72 resolve(data)
73 })
74 })
75 }
76
77 /**
78 * Get system wide information about docker
79 * https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/display-system-wide-information
80 * @return {Promise} Promise returning the result
81 */
82 info (): Promise<Object> {
83 const call = {
84 path: '/info?',
85 method: 'GET',
86 statusCodes: {
87 200: true,
88 500: 'server error'
89 }
90 }
91
92 return new Promise((resolve, reject) => {
93 this.modem.dial(call, (err, data: Object) => {
94 if (err) return reject(err)
95 resolve(data)
96 })
97 })
98 }
99
100 /**
101 * Get docker version information of server
102 * https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/show-the-docker-version-information
103 * @return {Promise} Promise returning the result
104 */
105 version (): Promise<Object> {
106 const call = {
107 path: '/version?',
108 method: 'GET',
109 statusCodes: {
110 200: true,
111 500: 'server error'
112 }
113 }
114
115 return new Promise((resolve, reject) => {
116 this.modem.dial(call, (err, data) => {
117 if (err) return reject(err)
118 resolve(data)
119 })
120 })
121 }
122
123 /**
124 * Ping the docker server
125 * https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/ping-the-docker-server
126 * @return {Promise} Promise returning the result
127 */
128 ping (): Promise<String> {
129 const call = {
130 path: '/_ping?',
131 method: 'GET',
132 statusCodes: {
133 200: true,
134 500: 'server error'
135 }
136 }
137
138 return new Promise((resolve, reject) => {
139 this.modem.dial(call, (err, data: String) => {
140 if (err) return reject(err)
141 resolve(data)
142 })
143 })
144 }
145
146 /**
147 * Get container events from docker, can be in real time via streaming or via polling (with since)
148 * https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/monitor-docker-s-events
149 * @param {Object} opts Options to send with the request (optional)
150 * @return {Promise} Promise returning the result
151 */
152 events (opts: Object = {}): Promise<Object> {
153 const call = {
154 path: '/events?',
155 method: 'GET',
156 options: opts,
157 isStream: true,
158 statusCodes: {
159 200: true,
160 500: 'server error'
161 }
162 }
163
164 return new Promise((resolve, reject) => {
165 this.modem.dial(call, (err, data: Object) => {
166 if (err) return reject(err)
167 resolve(data)
168 })
169 })
170 }
171}