UNPKG

4.08 kBPlain TextView Raw
1'use strict'
2
3import Modem = require('docker-modem')
4
5/**
6 * Class representing a secret
7 */
8export class Secret {
9 modem: Modem
10 id: String
11 data: Object = {}
12
13 /**
14 * Create a secret
15 * @param {Modem} modem Modem to connect to the remote service
16 * @param {string} id Id of the secret (optional)
17 */
18 constructor (modem: Modem, id: String) {
19 this.modem = modem
20 this.id = id
21 }
22
23 /**
24 * Get low-level information on a secret
25 * https://docs.docker.com/engine/api/v1.25/#operation/SecretInspect
26 * The reason why this module isn't called inspect is because that interferes with the inspect utility of node.
27 * @param {Object} opts Query params in the request (optional)
28 * @return {Promise} Promise return the secret
29 */
30 status (opts?: Object): Promise<Secret> {
31 const call = {
32 path: `/secrets/${this.id}?`,
33 method: 'GET',
34 options: opts,
35 statusCodes: {
36 200: true,
37 404: 'no such secret',
38 406: '406 node is not part of a swarm',
39 500: 'server error'
40 }
41 }
42
43 return new Promise((resolve, reject) => {
44 this.modem.dial(call, (err, conf) => {
45 if (err) return reject(err)
46 const secret = new Secret(this.modem, this.id)
47 secret.data = conf
48 resolve(secret)
49 })
50 })
51 }
52
53 /**
54 * Remove a secret
55 * https://docs.docker.com/engine/api/v1.25/#operation/SecretDelete
56 * @param {Object} opts Query params in the request (optional)
57 * @return {Promise} Promise return the result
58 */
59 remove (opts?: Object): Promise<{}> {
60 const call = {
61 path: `/secrets/${this.id}?`,
62 method: 'DELETE',
63 options: opts,
64 statusCodes: {
65 204: true,
66 404: 'no such secret',
67 500: 'server error'
68 }
69 }
70
71 return new Promise((resolve, reject) => {
72 this.modem.dial(call, (err) => {
73 if (err) return reject(err)
74 resolve()
75 })
76 })
77 }
78}
79
80export default class {
81 modem: Modem
82
83 /**
84 * Create a secret
85 * @param {Modem} modem Modem to connect to the remote service
86 */
87 constructor (modem: Modem) {
88 this.modem = modem
89 }
90
91 /**
92 * Get a Secret object
93 * @param {id} string ID of the secret
94 * @return {Secret}
95 */
96 get (id: String): Secret {
97 return new Secret(this.modem, id)
98 }
99
100 /**
101 * Get the list of secrets
102 * https://docs.docker.com/engine/api/v1.25/#operation/SecretList
103 * @param {Object} opts Query params in the request (optional)
104 * @return {Promise} Promise returning the result as a list of secrets
105 */
106 list (opts?: Object): Promise<Array<Secret>> {
107 const call = {
108 path: '/secrets',
109 method: 'GET',
110 options: opts,
111 statusCodes: {
112 200: true,
113 500: 'server error'
114 }
115 }
116
117 return new Promise((resolve, reject) => {
118 this.modem.dial(call, (err, result) => {
119 if (err) return reject(err)
120 if (!result.Secrets || !result.Secrets.length) return resolve([])
121 resolve(result.Secrets.map((conf) => {
122 const secret = new Secret(this.modem, conf.Name)
123 secret.data = conf
124 return secret
125 }))
126 })
127 })
128 }
129
130 /**
131 * Create a secret
132 * https://docs.docker.com/engine/api/v1.25/#operation/SecretCreate
133 * @param {Object} opts Query params in the request (optional)
134 * @return {Promise} Promise return the new secret
135 */
136 create (opts?: Object): Promise<Secret> {
137 const call = {
138 path: '/secrets/create?',
139 method: 'POST',
140 options: opts,
141 statusCodes: {
142 201: true,
143 406: 'server error or node is not part of a swarm',
144 409: '409 name conflicts with an existing object',
145 500: 'server error'
146 }
147 }
148
149 return new Promise((resolve, reject) => {
150 this.modem.dial(call, (err, conf) => {
151 if (err) return reject(err)
152 const secret = new Secret(this.modem, conf.ID)
153 secret.data = conf
154 resolve(secret)
155 })
156 })
157 }
158}