1 | 'use strict'
|
2 |
|
3 | import Modem = require('docker-modem')
|
4 |
|
5 |
|
6 |
|
7 |
|
8 | export class Secret {
|
9 | modem: Modem
|
10 | id: String
|
11 | data: Object = {}
|
12 |
|
13 | |
14 |
|
15 |
|
16 |
|
17 |
|
18 | constructor (modem: Modem, id: String) {
|
19 | this.modem = modem
|
20 | this.id = id
|
21 | }
|
22 |
|
23 | |
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
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 |
|
55 |
|
56 |
|
57 |
|
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 |
|
80 | export default class {
|
81 | modem: Modem
|
82 |
|
83 | |
84 |
|
85 |
|
86 |
|
87 | constructor (modem: Modem) {
|
88 | this.modem = modem
|
89 | }
|
90 |
|
91 | |
92 |
|
93 |
|
94 |
|
95 |
|
96 | get (id: String): Secret {
|
97 | return new Secret(this.modem, id)
|
98 | }
|
99 |
|
100 | |
101 |
|
102 |
|
103 |
|
104 |
|
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 |
|
132 |
|
133 |
|
134 |
|
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 | }
|