at.happyproto.admin.listHosts
Schema Diff
+23 -1
Compatibility Analysis
Backward Compatible
Backward compatible. 12 non-breaking changes.
Non-Breaking Changes (12)
- AddedVertex AddedVertex { vertex_id: "at.happyproto.admin.listHosts#host.freeDiskGb" }
- AddedVertex AddedVertex { vertex_id: "at.happyproto.admin.listHosts#host.freeMemoryMb" }
- AddedVertex AddedVertex { vertex_id: "at.happyproto.admin.listHosts#host.placeablePlans" }
- AddedVertex AddedVertex { vertex_id: "at.happyproto.admin.listHosts#host.placeablePlans:items" }
- AddedVertex AddedVertex { vertex_id: "at.happyproto.admin.listHosts:output.unplaceablePlans" }
- AddedVertex AddedVertex { vertex_id: "at.happyproto.admin.listHosts:output.unplaceablePlans:items" }
- AddedEdge AddedEdge { src: "at.happyproto.admin.listHosts#host", tgt: "at.happyproto.admin.listHosts#host.freeDiskGb", kind: "prop", name: Some("freeDiskGb") }
- AddedEdge AddedEdge { src: "at.happyproto.admin.listHosts#host", tgt: "at.happyproto.admin.listHosts#host.freeMemoryMb", kind: "prop", name: Some("freeMemoryMb") }
- AddedEdge AddedEdge { src: "at.happyproto.admin.listHosts#host", tgt: "at.happyproto.admin.listHosts#host.placeablePlans", kind: "prop", name: Some("placeablePlans") }
- AddedEdge AddedEdge { src: "at.happyproto.admin.listHosts#host.placeablePlans", tgt: "at.happyproto.admin.listHosts#host.placeablePlans:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "at.happyproto.admin.listHosts:output", tgt: "at.happyproto.admin.listHosts:output.unplaceablePlans", kind: "prop", name: Some("unplaceablePlans") }
- AddedEdge AddedEdge { src: "at.happyproto.admin.listHosts:output.unplaceablePlans", tgt: "at.happyproto.admin.listHosts:output.unplaceablePlans:items", kind: "items", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "at.happyproto.admin.listHosts#host.freeDiskGb" }AddedVertex { vertex_id: "at.happyproto.admin.listHosts#host.freeMemoryMb" }AddedVertex { vertex_id: "at.happyproto.admin.listHosts#host.placeablePlans" }AddedVertex { vertex_id: "at.happyproto.admin.listHosts#host.placeablePlans:items" }AddedVertex { vertex_id: "at.happyproto.admin.listHosts:output.unplaceablePlans" }AddedVertex { vertex_id: "at.happyproto.admin.listHosts:output.unplaceablePlans:items" }
Additional Notes
- Non-breaking: AddedEdge { src: "at.happyproto.admin.listHosts#host", tgt: "at.happyproto.admin.listHosts#host.freeDiskGb", kind: "prop", name: Some("freeDiskGb") }
- Non-breaking: AddedEdge { src: "at.happyproto.admin.listHosts#host", tgt: "at.happyproto.admin.listHosts#host.freeMemoryMb", kind: "prop", name: Some("freeMemoryMb") }
- Non-breaking: AddedEdge { src: "at.happyproto.admin.listHosts#host", tgt: "at.happyproto.admin.listHosts#host.placeablePlans", kind: "prop", name: Some("placeablePlans") }
- Non-breaking: AddedEdge { src: "at.happyproto.admin.listHosts#host.placeablePlans", tgt: "at.happyproto.admin.listHosts#host.placeablePlans:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "at.happyproto.admin.listHosts:output", tgt: "at.happyproto.admin.listHosts:output.unplaceablePlans", kind: "prop", name: Some("unplaceablePlans") }
- Non-breaking: AddedEdge { src: "at.happyproto.admin.listHosts:output.unplaceablePlans", tgt: "at.happyproto.admin.listHosts:output.unplaceablePlans:items", kind: "items", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"host": {
5
5
"description": "A host. Never carries its addresses or agent certificate.",
6
6
"properties": {
7
7
"cpuMillis": {
8
8
"type": "integer"
9
9
},
10
10
"diskGb": {
11
11
"type": "integer"
12
12
},
13
+
"freeDiskGb": {
14
+
"description": "diskGb less reservedDiskGb. Negative when the host is over-committed.",
15
+
"type": "integer"
16
+
},
17
+
"freeMemoryMb": {
18
+
"description": "memoryMb less reservedMemoryMb. Negative when the host is over-committed.",
19
+
"type": "integer"
20
+
},
13
21
"id": {
14
22
"description": "A UUID.",
15
23
"type": "string"
16
24
},
17
25
"lastSeenAt": {
18
26
"description": "When its agent last answered. Absent if it never has.",
19
27
"format": "datetime",
20
28
"type": "string"
21
29
},
22
30
"memoryMb": {
23
31
"type": "integer"
24
32
},
25
33
"name": {
26
34
"type": "string"
27
35
},
36
+
"placeablePlans": {
37
+
"description": "Plans open for new instances that fit in this host's free memory and disk, smallest first. Empty unless the host is active.",
38
+
"items": {
39
+
"type": "string"
40
+
},
41
+
"type": "array"
42
+
},
28
43
"reservedDiskGb": {
29
-
"description": "Disk held by the plans of instances placed here and not yet purged.",
44
+
"description": "Disk held by the plans of instances placed here and not yet purged. A deleted instance keeps its disk through its recovery window.",
30
45
"type": "integer"
31
46
},
32
47
"reservedMemoryMb": {
33
48
"description": "Memory those instances' plans hold.",
34
49
"type": "integer"
35
50
},
36
51
"state": {
37
52
"knownValues": [
38
53
"active",
39
54
"draining",
40
55
"degraded",
41
56
"retired"
42
57
],
43
58
"type": "string"
44
59
},
45
60
"tenantCount": {
46
61
"description": "Instances placed here and not deleted.",
47
62
"type": "integer"
48
63
}
49
64
},
50
65
"required": [
51
66
"id",
52
67
"name",
53
68
"state",
54
69
"memoryMb",
55
70
"cpuMillis",
56
71
"diskGb",
57
72
"tenantCount",
58
73
"reservedMemoryMb",
59
74
"reservedDiskGb"
60
75
],
61
76
"type": "object"
62
77
},
63
78
"main": {
64
79
"description": "Every host, with what its tenants hold. Staff only.",
65
80
"errors": [
66
81
{
67
82
"description": "This endpoint requires an authenticated caller.",
68
83
"name": "AuthRequired"
69
84
},
70
85
{
71
86
"description": "The caller is not HappyProto staff, or the provisioner does not treat them as staff.",
72
87
"name": "Forbidden"
73
88
},
74
89
{
75
90
"description": "The provisioner refused the request as malformed. Not expected from this read; declared because every provisioner refusal is mapped the same way.",
76
91
"name": "InvalidRequest"
77
92
},
78
93
{
79
94
"description": "Passed through from the provisioner.",
80
95
"name": "NotFound"
81
96
},
82
97
{
83
98
"description": "Passed through from the provisioner.",
84
99
"name": "InvalidSlug"
85
100
},
86
101
{
87
102
"description": "Passed through from the provisioner.",
88
103
"name": "SlugTaken"
89
104
},
90
105
{
91
106
"description": "Passed through from the provisioner.",
92
107
"name": "NotEntitled"
93
108
},
94
109
{
95
110
"description": "Passed through from the provisioner.",
96
111
"name": "InstanceLimit"
97
112
},
98
113
{
99
114
"description": "Passed through from the provisioner.",
100
115
"name": "NoCapacity"
101
116
},
102
117
{
103
118
"description": "Passed through from the provisioner.",
104
119
"name": "OperationInProgress"
105
120
},
106
121
{
107
122
"description": "The provisioner is unreachable, not configured, or answered with an error it does not explain to callers.",
108
123
"name": "Upstream"
109
124
}
110
125
],
111
126
"output": {
112
127
"encoding": "application/json",
113
128
"schema": {
114
129
"properties": {
115
130
"hosts": {
116
131
"items": {
117
132
"ref": "#host",
118
133
"type": "ref"
119
134
},
120
135
"type": "array"
136
+
},
137
+
"unplaceablePlans": {
138
+
"description": "Plans open for new instances that fit on no active host, smallest first. A new instance on one of these fails with NoCapacity. Absent from a provisioner that does not report it.",
139
+
"items": {
140
+
"type": "string"
141
+
},
142
+
"type": "array"
121
143
}
122
144
},
123
145
"required": [
124
146
"hosts"
125
147
],
126
148
"type": "object"
127
149
}
128
150
},
129
151
"type": "query"
130
152
}
131
153
},
132
154
"id": "at.happyproto.admin.listHosts",
133
155
"lexicon": 1
134
156
}