Skip to content

Commit b6fc21b

Browse files
author
Alan Christie
committed
feat: Adds 'file' block to image
Also adds ability to create env variables from secrets
1 parent 0a4c915 commit b6fc21b

File tree

2 files changed

+100
-0
lines changed

2 files changed

+100
-0
lines changed

decoder/job-definition-schema.yaml

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,8 @@ definitions:
134134
$ref: '#/definitions/cores'
135135
environment:
136136
$ref: '#/definitions/environment'
137+
file:
138+
$ref: '#/definitions/file'
137139
required:
138140
- name
139141
- tag
@@ -172,6 +174,7 @@ definitions:
172174
- $ref: '#/definitions/environment-value-from-api-token'
173175
- $ref: '#/definitions/environment-value-from-constant'
174176
- $ref: '#/definitions/environment-value-from-secret'
177+
- $ref: '#/definitions/environment-value-from-account-server-asset'
175178
required:
176179
- name
177180
- value-from
@@ -244,6 +247,67 @@ definitions:
244247
required:
245248
- secret
246249

250+
# An Image environment from an Account Server 'asset'.
251+
# At the moment we expect the secret to be unencrypted,
252+
# just 'opaque', so it can be read by the DM without special actions.
253+
environment-value-from-account-server-asset:
254+
type: object
255+
additionalProperties: false
256+
properties:
257+
account-server-asset:
258+
type: object
259+
properties:
260+
# The name of the secret object,
261+
# i.e. its metadata->name.
262+
name:
263+
$ref: '#/definitions/rfc-1035-name'
264+
required:
265+
- name
266+
required:
267+
- account-server-asset
268+
269+
# Image file definitions
270+
file:
271+
type: array
272+
items:
273+
$ref: '#/definitions/file-content-from'
274+
275+
# An Image file from something else
276+
file-content-from:
277+
type: object
278+
additionalProperties: false
279+
properties:
280+
name:
281+
$ref: '#/definitions/path-and-file-name'
282+
content-from:
283+
oneOf:
284+
- $ref: '#/definitions/file-content-from-account-server-asset'
285+
required:
286+
- name
287+
- content-from
288+
289+
# An Image file-from an account-server-asset declaration
290+
file-content-from-account-server-asset:
291+
type: object
292+
additionalProperties: false
293+
properties:
294+
account-server-asset:
295+
type: object
296+
properties:
297+
name:
298+
$ref: '#/definitions/rfc-1035-name'
299+
required:
300+
- name
301+
required:
302+
- account-server-asset
303+
304+
# The pattern for Image file names.
305+
path-and-file-name:
306+
type: string
307+
minLength: 2
308+
maxLength: 256
309+
pattern: '^/.{1,255}$'
310+
247311
# The pattern for Image environment names.
248312
# Classic linux/shell,
249313
# i.e. letters, digits and '_' and must begin letter or '_'

tests/test_validate_job_schema.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,42 @@ def test_validate_image_env_from_secret():
8989
assert error is None
9090

9191

92+
def test_validate_image_env_from_account_server_asset():
93+
# Arrange
94+
text: Dict[str, Any] = deepcopy(_MINIMAL)
95+
demo_job: Dict[str, Any] = text["jobs"]["demo"]
96+
demo_job["image"]["environment"] = [
97+
{
98+
"name": "ENV_VAR",
99+
"value-from": {"account-server-asset": {"name": "asset-a"}},
100+
}
101+
]
102+
103+
# Act
104+
error = decoder.validate_job_schema(text)
105+
106+
# Assert
107+
assert error is None
108+
109+
110+
def test_validate_image_file_from_account_server_asset():
111+
# Arrange
112+
text: Dict[str, Any] = deepcopy(_MINIMAL)
113+
demo_job: Dict[str, Any] = text["jobs"]["demo"]
114+
demo_job["image"]["file"] = [
115+
{
116+
"name": "/usr/local/licence.txt",
117+
"content-from": {"account-server-asset": {"name": "asset-a"}},
118+
}
119+
]
120+
121+
# Act
122+
error = decoder.validate_job_schema(text)
123+
124+
# Assert
125+
assert error is None
126+
127+
92128
def test_validate_image_memory_32gi():
93129
# Arrange
94130
text: Dict[str, Any] = deepcopy(_MINIMAL)

0 commit comments

Comments
 (0)