cloudfall 0.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. cloudfall/__init__.py +19 -0
  2. cloudfall/__main__.py +5 -0
  3. cloudfall/_bundled/schemas/v1/alert-rule.schema.json +63 -0
  4. cloudfall/_bundled/schemas/v1/application.schema.json +60 -0
  5. cloudfall/_bundled/schemas/v1/artifact.schema.json +71 -0
  6. cloudfall/_bundled/schemas/v1/backup-receipt.schema.json +58 -0
  7. cloudfall/_bundled/schemas/v1/common.schema.json +115 -0
  8. cloudfall/_bundled/schemas/v1/component.schema.json +234 -0
  9. cloudfall/_bundled/schemas/v1/deployment-receipt.schema.json +53 -0
  10. cloudfall/_bundled/schemas/v1/domain.schema.json +208 -0
  11. cloudfall/_bundled/schemas/v1/environment-receipt.schema.json +55 -0
  12. cloudfall/_bundled/schemas/v1/logging-stack.schema.json +473 -0
  13. cloudfall/_bundled/schemas/v1/observed-domain.schema.json +158 -0
  14. cloudfall/_bundled/schemas/v1/observed-server.schema.json +627 -0
  15. cloudfall/_bundled/schemas/v1/operator-policy.schema.json +97 -0
  16. cloudfall/_bundled/schemas/v1/operator-proposal.schema.json +253 -0
  17. cloudfall/_bundled/schemas/v1/release-receipt.schema.json +66 -0
  18. cloudfall/_bundled/schemas/v1/server-type.schema.json +289 -0
  19. cloudfall/_bundled/schemas/v1/server.schema.json +146 -0
  20. cloudfall/_bundled/schemas/v1/service.schema.json +222 -0
  21. cloudfall/_bundled/schemas/v1/ssh-public-key.schema.json +55 -0
  22. cloudfall/agent_tools.py +868 -0
  23. cloudfall/arguments.py +92 -0
  24. cloudfall/audit.py +905 -0
  25. cloudfall/authoring.py +341 -0
  26. cloudfall/cli.py +1748 -0
  27. cloudfall/commands.py +257 -0
  28. cloudfall/cutover.py +370 -0
  29. cloudfall/dashboard.py +407 -0
  30. cloudfall/dashboard_server.py +201 -0
  31. cloudfall/domain.py +1157 -0
  32. cloudfall/importer.py +906 -0
  33. cloudfall/inventory.py +2116 -0
  34. cloudfall/lifecycle.py +874 -0
  35. cloudfall/mcp_server.py +704 -0
  36. cloudfall/migrate.py +730 -0
  37. cloudfall/observation.py +143 -0
  38. cloudfall/operations.py +1228 -0
  39. cloudfall/operator.py +1099 -0
  40. cloudfall/project.py +841 -0
  41. cloudfall/py.typed +0 -0
  42. cloudfall/render_api.py +338 -0
  43. cloudfall/resources.py +67 -0
  44. cloudfall/secrets.py +262 -0
  45. cloudfall/service_evidence.py +659 -0
  46. cloudfall/validation.py +1340 -0
  47. cloudfall-0.2.0.dist-info/METADATA +408 -0
  48. cloudfall-0.2.0.dist-info/RECORD +165 -0
  49. cloudfall-0.2.0.dist-info/WHEEL +4 -0
  50. cloudfall-0.2.0.dist-info/entry_points.txt +4 -0
  51. cloudfall-0.2.0.dist-info/licenses/LICENSE +661 -0
  52. cloudfall_engine/__init__.py +5 -0
  53. cloudfall_engine/__main__.py +5 -0
  54. cloudfall_engine/_bundled/ansible/ansible.cfg +7 -0
  55. cloudfall_engine/_bundled/ansible/playbooks/backup.yml +86 -0
  56. cloudfall_engine/_bundled/ansible/playbooks/baseline.yml +35 -0
  57. cloudfall_engine/_bundled/ansible/playbooks/bootstrap.yml +24 -0
  58. cloudfall_engine/_bundled/ansible/playbooks/data.yml +28 -0
  59. cloudfall_engine/_bundled/ansible/playbooks/deploy.yml +35 -0
  60. cloudfall_engine/_bundled/ansible/playbooks/domains.yml +21 -0
  61. cloudfall_engine/_bundled/ansible/playbooks/health.yml +31 -0
  62. cloudfall_engine/_bundled/ansible/playbooks/inspect.yml +15 -0
  63. cloudfall_engine/_bundled/ansible/playbooks/logging.yml +35 -0
  64. cloudfall_engine/_bundled/ansible/playbooks/restart.yml +31 -0
  65. cloudfall_engine/_bundled/ansible/playbooks/rollback.yml +33 -0
  66. cloudfall_engine/_bundled/ansible/playbooks/services.yml +37 -0
  67. cloudfall_engine/_bundled/ansible/playbooks/time.yml +9 -0
  68. cloudfall_engine/_bundled/ansible/roles/cloudfall_access/defaults/main.yml +2 -0
  69. cloudfall_engine/_bundled/ansible/roles/cloudfall_access/handlers/main.yml +5 -0
  70. cloudfall_engine/_bundled/ansible/roles/cloudfall_access/meta/argument_specs.yml +34 -0
  71. cloudfall_engine/_bundled/ansible/roles/cloudfall_access/meta/main.yml +13 -0
  72. cloudfall_engine/_bundled/ansible/roles/cloudfall_access/tasks/main.yml +59 -0
  73. cloudfall_engine/_bundled/ansible/roles/cloudfall_bootstrap/defaults/main.yml +11 -0
  74. cloudfall_engine/_bundled/ansible/roles/cloudfall_bootstrap/meta/argument_specs.yml +52 -0
  75. cloudfall_engine/_bundled/ansible/roles/cloudfall_bootstrap/meta/main.yml +13 -0
  76. cloudfall_engine/_bundled/ansible/roles/cloudfall_bootstrap/tasks/main.yml +99 -0
  77. cloudfall_engine/_bundled/ansible/roles/cloudfall_data_migration/defaults/main.yml +15 -0
  78. cloudfall_engine/_bundled/ansible/roles/cloudfall_data_migration/meta/argument_specs.yml +36 -0
  79. cloudfall_engine/_bundled/ansible/roles/cloudfall_data_migration/meta/main.yml +13 -0
  80. cloudfall_engine/_bundled/ansible/roles/cloudfall_data_migration/tasks/main.yml +201 -0
  81. cloudfall_engine/_bundled/ansible/roles/cloudfall_deploy/defaults/main.yml +10 -0
  82. cloudfall_engine/_bundled/ansible/roles/cloudfall_deploy/meta/argument_specs.yml +125 -0
  83. cloudfall_engine/_bundled/ansible/roles/cloudfall_deploy/meta/main.yml +13 -0
  84. cloudfall_engine/_bundled/ansible/roles/cloudfall_deploy/tasks/health.yml +3 -0
  85. cloudfall_engine/_bundled/ansible/roles/cloudfall_deploy/tasks/health_gate.yml +37 -0
  86. cloudfall_engine/_bundled/ansible/roles/cloudfall_deploy/tasks/main.yml +285 -0
  87. cloudfall_engine/_bundled/ansible/roles/cloudfall_deploy/tasks/restart.yml +17 -0
  88. cloudfall_engine/_bundled/ansible/roles/cloudfall_deploy/tasks/rollback.yml +52 -0
  89. cloudfall_engine/_bundled/ansible/roles/cloudfall_deploy/templates/component.service.j2 +24 -0
  90. cloudfall_engine/_bundled/ansible/roles/cloudfall_firewall/defaults/main.yml +2 -0
  91. cloudfall_engine/_bundled/ansible/roles/cloudfall_firewall/handlers/main.yml +5 -0
  92. cloudfall_engine/_bundled/ansible/roles/cloudfall_firewall/meta/argument_specs.yml +33 -0
  93. cloudfall_engine/_bundled/ansible/roles/cloudfall_firewall/meta/main.yml +13 -0
  94. cloudfall_engine/_bundled/ansible/roles/cloudfall_firewall/tasks/main.yml +51 -0
  95. cloudfall_engine/_bundled/ansible/roles/cloudfall_firewall/templates/nftables.conf.j2 +31 -0
  96. cloudfall_engine/_bundled/ansible/roles/cloudfall_inspect/defaults/main.yml +6 -0
  97. cloudfall_engine/_bundled/ansible/roles/cloudfall_inspect/meta/argument_specs.yml +24 -0
  98. cloudfall_engine/_bundled/ansible/roles/cloudfall_inspect/meta/main.yml +13 -0
  99. cloudfall_engine/_bundled/ansible/roles/cloudfall_inspect/tasks/main.yml +643 -0
  100. cloudfall_engine/_bundled/ansible/roles/cloudfall_logging_backend/defaults/main.yml +6 -0
  101. cloudfall_engine/_bundled/ansible/roles/cloudfall_logging_backend/handlers/main.yml +29 -0
  102. cloudfall_engine/_bundled/ansible/roles/cloudfall_logging_backend/meta/argument_specs.yml +227 -0
  103. cloudfall_engine/_bundled/ansible/roles/cloudfall_logging_backend/meta/main.yml +11 -0
  104. cloudfall_engine/_bundled/ansible/roles/cloudfall_logging_backend/tasks/main.yml +487 -0
  105. cloudfall_engine/_bundled/ansible/roles/cloudfall_logging_backend/templates/alertmanager-defaults.j2 +2 -0
  106. cloudfall_engine/_bundled/ansible/roles/cloudfall_logging_backend/templates/alertmanager.yaml.j2 +33 -0
  107. cloudfall_engine/_bundled/ansible/roles/cloudfall_logging_backend/templates/grafana.ini.j2 +20 -0
  108. cloudfall_engine/_bundled/ansible/roles/cloudfall_logging_backend/templates/loki-datasource.yml.j2 +11 -0
  109. cloudfall_engine/_bundled/ansible/roles/cloudfall_logging_backend/templates/loki-systemd-override.conf.j2 +3 -0
  110. cloudfall_engine/_bundled/ansible/roles/cloudfall_logging_backend/templates/loki.yaml.j2 +49 -0
  111. cloudfall_engine/_bundled/ansible/roles/cloudfall_logging_backend/templates/nginx-loki-gateway.conf.j2 +45 -0
  112. cloudfall_engine/_bundled/ansible/roles/cloudfall_logging_backend/templates/prometheus-datasource.yml.j2 +11 -0
  113. cloudfall_engine/_bundled/ansible/roles/cloudfall_logging_backend/templates/prometheus-defaults.j2 +2 -0
  114. cloudfall_engine/_bundled/ansible/roles/cloudfall_logging_backend/templates/prometheus-rules.yaml.j2 +20 -0
  115. cloudfall_engine/_bundled/ansible/roles/cloudfall_logging_backend/templates/prometheus.yaml.j2 +24 -0
  116. cloudfall_engine/_bundled/ansible/roles/cloudfall_logging_collector/defaults/main.yml +7 -0
  117. cloudfall_engine/_bundled/ansible/roles/cloudfall_logging_collector/handlers/main.yml +6 -0
  118. cloudfall_engine/_bundled/ansible/roles/cloudfall_logging_collector/meta/argument_specs.yml +122 -0
  119. cloudfall_engine/_bundled/ansible/roles/cloudfall_logging_collector/meta/main.yml +11 -0
  120. cloudfall_engine/_bundled/ansible/roles/cloudfall_logging_collector/tasks/main.yml +224 -0
  121. cloudfall_engine/_bundled/ansible/roles/cloudfall_logging_collector/templates/alloy-systemd-override.conf.j2 +3 -0
  122. cloudfall_engine/_bundled/ansible/roles/cloudfall_logging_collector/templates/config.alloy.j2 +127 -0
  123. cloudfall_engine/_bundled/ansible/roles/cloudfall_nginx_site/defaults/main.yml +4 -0
  124. cloudfall_engine/_bundled/ansible/roles/cloudfall_nginx_site/handlers/main.yml +5 -0
  125. cloudfall_engine/_bundled/ansible/roles/cloudfall_nginx_site/meta/argument_specs.yml +69 -0
  126. cloudfall_engine/_bundled/ansible/roles/cloudfall_nginx_site/meta/main.yml +13 -0
  127. cloudfall_engine/_bundled/ansible/roles/cloudfall_nginx_site/tasks/main.yml +212 -0
  128. cloudfall_engine/_bundled/ansible/roles/cloudfall_nginx_site/templates/domain-site.conf.j2 +54 -0
  129. cloudfall_engine/_bundled/ansible/roles/cloudfall_postgresql/defaults/main.yml +6 -0
  130. cloudfall_engine/_bundled/ansible/roles/cloudfall_postgresql/handlers/main.yml +9 -0
  131. cloudfall_engine/_bundled/ansible/roles/cloudfall_postgresql/meta/argument_specs.yml +91 -0
  132. cloudfall_engine/_bundled/ansible/roles/cloudfall_postgresql/meta/main.yml +13 -0
  133. cloudfall_engine/_bundled/ansible/roles/cloudfall_postgresql/tasks/main.yml +295 -0
  134. cloudfall_engine/_bundled/ansible/roles/cloudfall_postgresql/templates/backup.service.j2 +11 -0
  135. cloudfall_engine/_bundled/ansible/roles/cloudfall_postgresql/templates/backup.sh.j2 +17 -0
  136. cloudfall_engine/_bundled/ansible/roles/cloudfall_postgresql/templates/backup.timer.j2 +10 -0
  137. cloudfall_engine/_bundled/ansible/roles/cloudfall_postgresql/templates/cloudfall.conf.j2 +3 -0
  138. cloudfall_engine/_bundled/ansible/roles/cloudfall_postgresql/templates/restore-check.service.j2 +11 -0
  139. cloudfall_engine/_bundled/ansible/roles/cloudfall_postgresql/templates/restore-check.sh.j2 +27 -0
  140. cloudfall_engine/_bundled/ansible/roles/cloudfall_postgresql/templates/restore-check.timer.j2 +10 -0
  141. cloudfall_engine/_bundled/ansible/roles/cloudfall_redis/defaults/main.yml +2 -0
  142. cloudfall_engine/_bundled/ansible/roles/cloudfall_redis/handlers/main.yml +6 -0
  143. cloudfall_engine/_bundled/ansible/roles/cloudfall_redis/meta/argument_specs.yml +68 -0
  144. cloudfall_engine/_bundled/ansible/roles/cloudfall_redis/meta/main.yml +13 -0
  145. cloudfall_engine/_bundled/ansible/roles/cloudfall_redis/tasks/main.yml +148 -0
  146. cloudfall_engine/_bundled/ansible/roles/cloudfall_redis/templates/backup.service.j2 +11 -0
  147. cloudfall_engine/_bundled/ansible/roles/cloudfall_redis/templates/backup.sh.j2 +14 -0
  148. cloudfall_engine/_bundled/ansible/roles/cloudfall_redis/templates/backup.timer.j2 +10 -0
  149. cloudfall_engine/_bundled/ansible/roles/cloudfall_redis/templates/cloudfall.conf.j2 +6 -0
  150. cloudfall_engine/_bundled/ansible/roles/cloudfall_redis/templates/restore-check.service.j2 +11 -0
  151. cloudfall_engine/_bundled/ansible/roles/cloudfall_redis/templates/restore-check.sh.j2 +15 -0
  152. cloudfall_engine/_bundled/ansible/roles/cloudfall_redis/templates/restore-check.timer.j2 +10 -0
  153. cloudfall_engine/_bundled/ansible/roles/cloudfall_time/defaults/main.yml +2 -0
  154. cloudfall_engine/_bundled/ansible/roles/cloudfall_time/meta/argument_specs.yml +10 -0
  155. cloudfall_engine/_bundled/ansible/roles/cloudfall_time/meta/main.yml +13 -0
  156. cloudfall_engine/_bundled/ansible/roles/cloudfall_time/tasks/main.yml +119 -0
  157. cloudfall_engine/_bundled/ansible/roles/cloudfall_unattended_upgrades/defaults/main.yml +3 -0
  158. cloudfall_engine/_bundled/ansible/roles/cloudfall_unattended_upgrades/meta/argument_specs.yml +8 -0
  159. cloudfall_engine/_bundled/ansible/roles/cloudfall_unattended_upgrades/meta/main.yml +13 -0
  160. cloudfall_engine/_bundled/ansible/roles/cloudfall_unattended_upgrades/tasks/main.yml +37 -0
  161. cloudfall_engine/ansible_inventory.py +253 -0
  162. cloudfall_engine/artifact.py +258 -0
  163. cloudfall_engine/cli.py +273 -0
  164. cloudfall_engine/playbook.py +175 -0
  165. cloudfall_engine/py.typed +0 -0
@@ -0,0 +1,146 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://cloudfall.internal/schemas/v1/server.schema.json",
4
+ "title": "Cloudfall server",
5
+ "x-cloudfall-kind": "Server",
6
+ "type": "object",
7
+ "properties": {
8
+ "apiVersion": {
9
+ "$ref": "common.schema.json#/$defs/apiVersion"
10
+ },
11
+ "kind": {
12
+ "const": "Server"
13
+ },
14
+ "metadata": {
15
+ "$ref": "common.schema.json#/$defs/metadata"
16
+ },
17
+ "spec": {
18
+ "type": "object",
19
+ "properties": {
20
+ "hostname": {
21
+ "type": "string",
22
+ "format": "hostname"
23
+ },
24
+ "address": {
25
+ "type": "string",
26
+ "anyOf": [
27
+ {
28
+ "format": "hostname"
29
+ },
30
+ {
31
+ "format": "ipv4"
32
+ },
33
+ {
34
+ "format": "ipv6"
35
+ }
36
+ ]
37
+ },
38
+ "environment": {
39
+ "$ref": "common.schema.json#/$defs/resourceId"
40
+ },
41
+ "serverType": {
42
+ "$ref": "common.schema.json#/$defs/resourceId"
43
+ },
44
+ "provider": {
45
+ "type": "object",
46
+ "properties": {
47
+ "name": {
48
+ "$ref": "common.schema.json#/$defs/resourceId"
49
+ },
50
+ "serverId": {
51
+ "type": "string",
52
+ "minLength": 1,
53
+ "maxLength": 128,
54
+ "pattern": "^[A-Za-z0-9._:-]+$"
55
+ },
56
+ "datacenter": {
57
+ "type": "string",
58
+ "minLength": 1,
59
+ "maxLength": 64,
60
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]*$"
61
+ }
62
+ },
63
+ "required": [
64
+ "name"
65
+ ],
66
+ "additionalProperties": false
67
+ },
68
+ "network": {
69
+ "type": "object",
70
+ "properties": {
71
+ "ipv4": {
72
+ "type": "string",
73
+ "format": "ipv4"
74
+ },
75
+ "ipv6Cidr": {
76
+ "type": "string",
77
+ "pattern": "^[0-9A-Fa-f:]+/[0-9]{1,3}$"
78
+ },
79
+ "reverseDns": {
80
+ "type": "string",
81
+ "format": "hostname"
82
+ }
83
+ },
84
+ "required": [
85
+ "ipv4",
86
+ "ipv6Cidr",
87
+ "reverseDns"
88
+ ],
89
+ "additionalProperties": false
90
+ },
91
+ "lifecycle": {
92
+ "enum": [
93
+ "active",
94
+ "maintenance",
95
+ "retired"
96
+ ]
97
+ },
98
+ "ssh": {
99
+ "type": "object",
100
+ "properties": {
101
+ "user": {
102
+ "$ref": "common.schema.json#/$defs/linuxUser"
103
+ },
104
+ "port": {
105
+ "type": "integer",
106
+ "minimum": 1,
107
+ "maximum": 65535
108
+ }
109
+ },
110
+ "required": [
111
+ "user",
112
+ "port"
113
+ ],
114
+ "additionalProperties": false
115
+ },
116
+ "labels": {
117
+ "type": "object",
118
+ "propertyNames": {
119
+ "$ref": "common.schema.json#/$defs/resourceId"
120
+ },
121
+ "additionalProperties": {
122
+ "type": "string",
123
+ "minLength": 1,
124
+ "maxLength": 100
125
+ }
126
+ }
127
+ },
128
+ "required": [
129
+ "hostname",
130
+ "address",
131
+ "environment",
132
+ "serverType",
133
+ "lifecycle",
134
+ "ssh"
135
+ ],
136
+ "additionalProperties": false
137
+ }
138
+ },
139
+ "required": [
140
+ "apiVersion",
141
+ "kind",
142
+ "metadata",
143
+ "spec"
144
+ ],
145
+ "additionalProperties": false
146
+ }
@@ -0,0 +1,222 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://cloudfall.internal/schemas/v1/service.schema.json",
4
+ "title": "Cloudfall infrastructure service",
5
+ "x-cloudfall-kind": "Service",
6
+ "$defs": {
7
+ "postgresDatabaseName": {
8
+ "type": "string",
9
+ "minLength": 1,
10
+ "maxLength": 63,
11
+ "pattern": "^[a-z][a-z0-9_]*$"
12
+ },
13
+ "systemdCalendar": {
14
+ "type": "string",
15
+ "minLength": 1,
16
+ "maxLength": 100,
17
+ "pattern": "^[A-Za-z0-9 *:,.^~/-]+$"
18
+ }
19
+ },
20
+ "type": "object",
21
+ "properties": {
22
+ "apiVersion": {
23
+ "$ref": "common.schema.json#/$defs/apiVersion"
24
+ },
25
+ "kind": {
26
+ "const": "Service"
27
+ },
28
+ "metadata": {
29
+ "$ref": "common.schema.json#/$defs/metadata"
30
+ },
31
+ "spec": {
32
+ "type": "object",
33
+ "properties": {
34
+ "serviceKind": {
35
+ "enum": [
36
+ "postgresql",
37
+ "redis"
38
+ ]
39
+ },
40
+ "environment": {
41
+ "$ref": "common.schema.json#/$defs/resourceId"
42
+ },
43
+ "server": {
44
+ "$ref": "common.schema.json#/$defs/resourceId"
45
+ },
46
+ "bind": {
47
+ "type": "object",
48
+ "properties": {
49
+ "address": {
50
+ "const": "127.0.0.1"
51
+ },
52
+ "port": {
53
+ "type": "integer",
54
+ "minimum": 1024,
55
+ "maximum": 65535
56
+ }
57
+ },
58
+ "required": [
59
+ "address",
60
+ "port"
61
+ ],
62
+ "additionalProperties": false
63
+ },
64
+ "postgresql": {
65
+ "type": "object",
66
+ "properties": {
67
+ "majorVersion": {
68
+ "type": "string",
69
+ "pattern": "^[0-9]{2}$"
70
+ },
71
+ "packageVersion": {
72
+ "type": "string",
73
+ "minLength": 1,
74
+ "maxLength": 100
75
+ },
76
+ "databases": {
77
+ "type": "array",
78
+ "items": {
79
+ "type": "object",
80
+ "properties": {
81
+ "name": {
82
+ "$ref": "#/$defs/postgresDatabaseName"
83
+ },
84
+ "application": {
85
+ "$ref": "common.schema.json#/$defs/resourceId"
86
+ }
87
+ },
88
+ "required": [
89
+ "name",
90
+ "application"
91
+ ],
92
+ "additionalProperties": false
93
+ },
94
+ "minItems": 1,
95
+ "uniqueItems": true
96
+ }
97
+ },
98
+ "required": [
99
+ "majorVersion",
100
+ "databases"
101
+ ],
102
+ "additionalProperties": false
103
+ },
104
+ "backup": {
105
+ "type": "object",
106
+ "properties": {
107
+ "directory": {
108
+ "$ref": "common.schema.json#/$defs/absolutePath"
109
+ },
110
+ "onCalendar": {
111
+ "$ref": "#/$defs/systemdCalendar"
112
+ },
113
+ "restoreCheckOnCalendar": {
114
+ "$ref": "#/$defs/systemdCalendar"
115
+ },
116
+ "retentionDays": {
117
+ "type": "integer",
118
+ "minimum": 1,
119
+ "maximum": 3650
120
+ }
121
+ },
122
+ "required": [
123
+ "directory",
124
+ "onCalendar",
125
+ "retentionDays"
126
+ ],
127
+ "additionalProperties": false
128
+ },
129
+ "redis": {
130
+ "type": "object",
131
+ "properties": {
132
+ "packageVersion": {
133
+ "type": "string",
134
+ "minLength": 1,
135
+ "maxLength": 100
136
+ },
137
+ "maxmemoryMb": {
138
+ "type": "integer",
139
+ "minimum": 16,
140
+ "maximum": 1048576
141
+ },
142
+ "appendOnly": {
143
+ "type": "boolean"
144
+ }
145
+ },
146
+ "required": [
147
+ "maxmemoryMb",
148
+ "appendOnly"
149
+ ],
150
+ "additionalProperties": false
151
+ },
152
+ "metrics": {
153
+ "type": "object",
154
+ "properties": {
155
+ "enabled": {
156
+ "const": true
157
+ }
158
+ },
159
+ "required": [
160
+ "enabled"
161
+ ],
162
+ "additionalProperties": false
163
+ }
164
+ },
165
+ "required": [
166
+ "serviceKind",
167
+ "environment",
168
+ "server",
169
+ "bind",
170
+ "backup"
171
+ ],
172
+ "additionalProperties": false,
173
+ "allOf": [
174
+ {
175
+ "if": {
176
+ "properties": {
177
+ "serviceKind": {
178
+ "const": "postgresql"
179
+ }
180
+ }
181
+ },
182
+ "then": {
183
+ "required": [
184
+ "postgresql"
185
+ ],
186
+ "not": {
187
+ "required": [
188
+ "redis"
189
+ ]
190
+ }
191
+ }
192
+ },
193
+ {
194
+ "if": {
195
+ "properties": {
196
+ "serviceKind": {
197
+ "const": "redis"
198
+ }
199
+ }
200
+ },
201
+ "then": {
202
+ "required": [
203
+ "redis"
204
+ ],
205
+ "not": {
206
+ "required": [
207
+ "postgresql"
208
+ ]
209
+ }
210
+ }
211
+ }
212
+ ]
213
+ }
214
+ },
215
+ "required": [
216
+ "apiVersion",
217
+ "kind",
218
+ "metadata",
219
+ "spec"
220
+ ],
221
+ "additionalProperties": false
222
+ }
@@ -0,0 +1,55 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://cloudfall.internal/schemas/v1/ssh-public-key.schema.json",
4
+ "title": "Cloudfall SSH public key",
5
+ "x-cloudfall-kind": "SshPublicKey",
6
+ "type": "object",
7
+ "properties": {
8
+ "apiVersion": {
9
+ "$ref": "common.schema.json#/$defs/apiVersion"
10
+ },
11
+ "kind": {
12
+ "const": "SshPublicKey"
13
+ },
14
+ "metadata": {
15
+ "$ref": "common.schema.json#/$defs/metadata"
16
+ },
17
+ "spec": {
18
+ "type": "object",
19
+ "properties": {
20
+ "owner": {
21
+ "$ref": "common.schema.json#/$defs/resourceId"
22
+ },
23
+ "environment": {
24
+ "$ref": "common.schema.json#/$defs/resourceId"
25
+ },
26
+ "publicKey": {
27
+ "type": "string",
28
+ "minLength": 80,
29
+ "maxLength": 16384,
30
+ "pattern": "^ssh-(?:rsa|ed25519) [A-Za-z0-9+/]+={0,2}(?: [^\\r\\n]+)?$"
31
+ },
32
+ "lifecycle": {
33
+ "enum": [
34
+ "active",
35
+ "revoked"
36
+ ]
37
+ }
38
+ },
39
+ "required": [
40
+ "owner",
41
+ "environment",
42
+ "publicKey",
43
+ "lifecycle"
44
+ ],
45
+ "additionalProperties": false
46
+ }
47
+ },
48
+ "required": [
49
+ "apiVersion",
50
+ "kind",
51
+ "metadata",
52
+ "spec"
53
+ ],
54
+ "additionalProperties": false
55
+ }