-
Notifications
You must be signed in to change notification settings - Fork 7
/
SSHClientV2.ts
177 lines (149 loc) · 4.15 KB
/
SSHClientV2.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
/**
Juju SSHClient version 2.
This facade is available on:
Controller-machine-agent
Machine-agent
Unit-agent
Models
NOTE: This file was generated using the Juju schema
from Juju 3.0-beta1 at the git SHA 61c87ab7e1.
Do not manually edit this file.
*/
import type { JujuRequest } from "../../../generator/interfaces.js";
import { ConnectionInfo, Transport } from "../../client.js";
import { Facade } from "../../types.js";
import { autoBind } from "../../utils.js";
export interface Entities {
entities: Entity[];
}
export interface Entity {
tag: string;
}
export interface Error {
code: string;
info?: AdditionalProperties;
message: string;
}
export interface SSHAddressResult {
address?: string;
error?: Error;
}
export interface SSHAddressResults {
results: SSHAddressResult[];
}
export interface SSHAddressesResult {
addresses: string[];
error?: Error;
}
export interface SSHAddressesResults {
results: SSHAddressesResult[];
}
export interface SSHProxyResult {
"use-proxy": boolean;
}
export interface SSHPublicKeysResult {
error?: Error;
"public-keys"?: string[];
}
export interface SSHPublicKeysResults {
results: SSHPublicKeysResult[];
}
export interface AdditionalProperties {
[key: string]: any;
}
/**
Facade implements the API required by the sshclient worker.
*/
class SSHClientV2 implements Facade {
static NAME = "SSHClient";
static VERSION = 2;
NAME = "SSHClient";
VERSION = 2;
_transport: Transport;
_info: ConnectionInfo;
constructor(transport: Transport, info: ConnectionInfo) {
this._transport = transport;
this._info = info;
// Automatically bind all methods to instances.
autoBind(this);
}
/**
AllAddresses reports all addresses that might have SSH listening for each given
entity in args. Machines and units are supported as entity types.
TODO(wpk): 2017-05-17 This is a temporary solution, we should not fetch environ here
but get the addresses from state. We will be changing it since we want to have space-aware
SSH settings.
*/
allAddresses(params: Entities): Promise<SSHAddressesResults> {
return new Promise((resolve, reject) => {
const req: JujuRequest = {
type: "SSHClient",
request: "AllAddresses",
version: 2,
params: params,
};
this._transport.write(req, resolve, reject);
});
}
/**
PrivateAddress reports the preferred private network address for one or
more entities. Machines and units are supported.
*/
privateAddress(params: Entities): Promise<SSHAddressResults> {
return new Promise((resolve, reject) => {
const req: JujuRequest = {
type: "SSHClient",
request: "PrivateAddress",
version: 2,
params: params,
};
this._transport.write(req, resolve, reject);
});
}
/**
Proxy returns whether SSH connections should be proxied through the
controller hosts for the model associated with the API connection.
*/
proxy(params: any): Promise<SSHProxyResult> {
return new Promise((resolve, reject) => {
const req: JujuRequest = {
type: "SSHClient",
request: "Proxy",
version: 2,
params: params,
};
this._transport.write(req, resolve, reject);
});
}
/**
PublicAddress reports the preferred public network address for one
or more entities. Machines and units are supported.
*/
publicAddress(params: Entities): Promise<SSHAddressResults> {
return new Promise((resolve, reject) => {
const req: JujuRequest = {
type: "SSHClient",
request: "PublicAddress",
version: 2,
params: params,
};
this._transport.write(req, resolve, reject);
});
}
/**
PublicKeys returns the public SSH hosts for one or more
entities. Machines and units are supported.
*/
publicKeys(params: Entities): Promise<SSHPublicKeysResults> {
return new Promise((resolve, reject) => {
const req: JujuRequest = {
type: "SSHClient",
request: "PublicKeys",
version: 2,
params: params,
};
this._transport.write(req, resolve, reject);
});
}
}
export default SSHClientV2;