Validators allow you to add custom validation logic to schema attributes, ensuring data meets your requirements before resource operations execute.
🤖 AI-Generated Content
This documentation was generated with AI assistance and is still being audited. Some, or potentially a lot, of this information may be inaccurate. Learn more.
"age":a_num(validators=[lambdax:x>=0or"Age cannot be negative",lambdax:x<=120or"Age must be realistic"])"percentage":a_num(validators=[lambdax:0<=x<=100or"Must be between 0 and 100"])
"email":a_str(validators=[lambdax:"@"inxor"Must be a valid email address",lambdax:"."inx.split("@")[1]or"Email domain must have extension"])"url":a_str(validators=[lambdax:x.startswith(("http://","https://"))or"Must be HTTP(S) URL"])"slug":a_str(validators=[lambdax:x.islower()or"Must be lowercase",lambdax:"-"notinxorx.replace("-","").isalnum()or"Only letters, numbers, hyphens"])
"environment":a_str(validators=[lambdax:xin["dev","staging","prod"]or"Must be dev, staging, or prod"])"protocol":a_str(validators=[lambdax:xin["tcp","udp","icmp"]or"Invalid protocol"])
"password":a_str(validators=[lambdax:len(x)>=8or"Password must be at least 8 characters",lambdax:any(c.isupper()forcinx)or"Password must contain uppercase letter",lambdax:any(c.islower()forcinx)or"Password must contain lowercase letter",lambdax:any(c.isdigit()forcinx)or"Password must contain number",])
"tags":a_list(a_str(),validators=[lambdax:len(x)>0or"At least one tag required",lambdax:len(x)<=10or"Maximum 10 tags allowed",lambdax:len(set(x))==len(x)or"Tags must be unique"])"ports":a_list(a_num(),validators=[lambdax:all(1<=p<=65535forpinx)or"All ports must be 1-65535"])
# validators.pydefvalidate_port(x):return1<=x<=65535or"Port must be 1-65535"defvalidate_cidr(x):importipaddresstry:ipaddress.ip_network(x)returnTrueexceptValueError:return"Invalid CIDR notation"defvalidate_name(x):iflen(x)<3:return"Name must be at least 3 characters"ifnotx[0].isalpha():return"Name must start with a letter"ifnotx.replace("-","").replace("_","").isalnum():return"Name can only contain letters, numbers, hyphens, underscores"returnTrue# Use in schemas"port":a_num(validators=[validate_port])"cidr":a_str(validators=[validate_cidr])"name":a_str(validators=[validate_name])
# Good: Handle empty/Nonelambdax:(xandlen(x)>=3)or"Must be at least 3 characters"# Bad: Assumes value existslambdax:len(x)>=3or"Must be at least 3 characters"# Fails if x is None
# Good: Separate concernsvalidators=[lambdax:len(x)>=3or"Min 3 characters",lambdax:len(x)<=64or"Max 64 characters",lambdax:x.isalnum()or"Alphanumeric only"]# Bad: One complex validatorvalidators=[lambdax:(3<=len(x)<=64andx.isalnum())or"Invalid name format"]
Remember: Validators provide immediate feedback to users during terraform plan, preventing runtime errors. Write clear, specific error messages to help users fix issues quickly.