Allow most printable ASCII chars for service label key

Change-type: patch
Signed-off-by: Ken Bannister <kb2ma@runbox.com>
This commit is contained in:
Ken Bannister 2022-09-20 08:15:21 -04:00
parent eec12faa02
commit 91f93952db
2 changed files with 20 additions and 6 deletions

View File

@ -109,9 +109,11 @@ export type VariableName = t.TypeOf<typeof VariableName>;
/** /**
* Valid label names are between 0 and 255 characters * Valid label names are between 0 and 255 characters
* and match /^[a-zA-Z][a-zA-Z0-9\.\-]*$/ * and each character is any printable ASCII character except space (0x20),
* double and single quotes ( " 0x22, ' 0x27) and backtick ( ` 0x60). Rationale
* is to accept a character unless likely not useful and error prone.
*/ */
const LABEL_NAME_REGEX = /^[a-zA-Z][a-zA-Z0-9\.\-]*$/; const LABEL_NAME_REGEX = /^[!#-&(-_a-~]+$/;
export const LabelName = new t.Type<string, string>( export const LabelName = new t.Type<string, string>(
'LabelName', 'LabelName',
@ -125,7 +127,7 @@ export const LabelName = new t.Type<string, string>(
: t.failure( : t.failure(
s, s,
c, c,
"needs to start with a letter and may only contain alphanumeric characters plus '-' and '.'", 'may contain printable ASCII characters except space, single/double quotes and backtick',
), ),
), ),
), ),

View File

@ -299,7 +299,13 @@ describe('validation', () => {
image_id: 34, image_id: 34,
image: 'foo', image: 'foo',
environment: { MY_SERVICE_ENV_VAR: '123' }, environment: { MY_SERVICE_ENV_VAR: '123' },
labels: { 'io.balena.features.supervisor-api': 'true' }, labels: {
'io.balena.features.supervisor-api': 'true',
'caddy.@match.path': '/sourcepath /sourcepath/*',
'traefik.http.routers.router0.tls.domains[0].main':
'foobar',
_not_first_alpha: '1',
},
running: false, running: false,
}, },
}, },
@ -324,7 +330,13 @@ describe('validation', () => {
image_id: 34, image_id: 34,
image: 'foo', image: 'foo',
environment: { MY_SERVICE_ENV_VAR: '123' }, environment: { MY_SERVICE_ENV_VAR: '123' },
labels: { 'io.balena.features.supervisor-api': 'true' }, labels: {
'io.balena.features.supervisor-api': 'true',
'caddy.@match.path': '/sourcepath /sourcepath/*',
'traefik.http.routers.router0.tls.domains[0].main':
'foobar',
_not_first_alpha: '1',
},
running: false, running: false,
}, },
}, },
@ -381,7 +393,7 @@ describe('validation', () => {
image_id: 34, image_id: 34,
image: 'foo', image: 'foo',
environment: {}, environment: {},
labels: { ' not a valid #name': 'label value' }, labels: { ' not a valid "name': 'label value' },
}, },
}, },
volumes: {}, volumes: {},