Implement validation on labels as per spec
gc-ss opened this issue · 2 comments
gc-ss commented
Feature Request
What whould you like to see?
The labels have a spec: https://docs.hetzner.cloud/#labels
There's currently no validation of labels as per spec, that results in runtime errors
gc-ss commented
Code for validation:
class SnapshotLabels:
# Valid label values must be a string of 63 characters or less and must be empty
# or begin and end with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between
# Otherwise TF will throw: Error: invalid input in field 'labels' (invalid_input): [labels => [invalid label value]]
regex = r"[a-z0-9A-Z](?:(?:[\-_\.]|[a-z0-9A-Z])*[a-z0-9A-Z])*"
pattern = re.compile(regex, re.UNICODE | re.DOTALL)
@classmethod
def validate(cls, label):
if label:
if len(label) > 63:
raise ValueError(f"label {label} must be 63 characters or less")
if not cls.pattern.fullmatch(label):
raise ValueError(f"label {label} is not compliant")
return True
def __init__(self, labels):
for label in labels:
if SnapshotLabels.validate(label):
SnapshotLabels.validate(labels[label])
else:
# all labels passed validation
self._labels = labels
def get_mapping(self):
return self._labels
# not compliant
labels = SnapshotLabels({"foo": "bar", "created": "2022-04-14 16:09"})
# compliant
labels = SnapshotLabels({"zing": "bang", "created": "2022-04-14_16.09"})
github-actions commented
This issue has been marked as stale because it has not had recent activity. The bot will close the issue if no further action occurs.