# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. # RELAX NG Compact Syntax # Vespa Deployment file start = element deployment { attribute version { "1.0" } & attribute major-version { text }? & attribute athenz-domain { xsd:string }? & attribute athenz-service { xsd:string }? & attribute cloud-account { xsd:string }? & attribute empty-host-ttl { xsd:string }? & Step } Step = StepExceptInstance & Instance* StepExceptInstance = Delay* & ParallelInstances* & Upgrade? & BlockChange* & Notifications? & Endpoints? & Bcp? & Test? & Staging? & Dev? & Perf? & Prod* PrimitiveStep = Delay* & Region* & ProdTest* Instance = element instance { attribute id { xsd:string } & attribute tags { xsd:string }? & attribute athenz-service { xsd:string }? & attribute cloud-account { xsd:string }? & attribute empty-host-ttl { xsd:string }? & StepExceptInstance } ParallelSteps = element parallel { SerialSteps* & PrimitiveStep* } SerialSteps = element steps { ParallelSteps* & PrimitiveStep* } ParallelInstances = element parallel { SerialInstances* & Instance* } SerialInstances = element steps { ParallelInstances* & Instance* } Upgrade = element upgrade { attribute policy { xsd:string }? & attribute revision-target { xsd:string }? & attribute revision-change { xsd:string }? & attribute min-risk { xsd:long }? & attribute max-risk { xsd:long }? & attribute max-idle-hours { xsd:long }? & attribute rollout { xsd:string }? } BlockChange = element block-change { attribute revision { xsd:boolean }? & attribute version { xsd:boolean }? & attribute days { xsd:string }? & attribute hours { xsd:string }? & attribute from-date { xsd:string }? & attribute to-date { xsd:string }? & attribute time-zone { xsd:string }? } Notifications = element notifications { attribute when { xsd:string }? & Email* } Email = element email { attribute address { xsd:string }? & attribute role { xsd:string }? & attribute when { xsd:string }? } Test = element test { attribute athenz-service { xsd:string }? & attribute tester-flavor { xsd:string }? & attribute cloud-account { xsd:string }? & attribute empty-host-ttl { xsd:string }? & text } Staging = element staging { attribute athenz-service { xsd:string }? & attribute tester-flavor { xsd:string }? & attribute cloud-account { xsd:string }? & attribute empty-host-ttl { xsd:string }? & text } Dev = element dev { attribute cloud-account { xsd:string }? & attribute empty-host-ttl { xsd:string }? } Perf = element perf { attribute cloud-account { xsd:string }? & attribute empty-host-ttl { xsd:string }? } Prod = element prod { attribute global-service-id { text }? & attribute athenz-service { xsd:string }? & attribute tester-flavor { xsd:string }? & attribute cloud-account { xsd:string }? & attribute empty-host-ttl { xsd:string }? & Region* & Delay* & ProdTest* & ParallelSteps* } ProdTest = element test { text } Region = element region { attribute active { xsd:boolean }? & attribute athenz-service { xsd:string }? & attribute cloud-account { xsd:string }? & attribute empty-host-ttl { xsd:string }? & text } Delay = element delay { attribute hours { xsd:long }? & attribute minutes { xsd:long }? & attribute seconds { xsd:long }? } EndpointRegion = element region { text } EndpointInstance = element instance { attribute weight { xsd:long } & attribute region { xsd:string }? & text } AllowedUrn = element allow { attribute with { xsd:string } & attribute arn { xsd:string }? & attribute project { xsd:string }? } Endpoint = element endpoint { attribute id { xsd:string }? & attribute container-id { xsd:string } & attribute region { xsd:string }? & attribute type { xsd:string }? & attribute enabled { xsd:boolean }? & EndpointRegion* & EndpointInstance* & AllowedUrn* } Endpoints = element endpoints { Endpoint+ } Bcp = element bcp { attribute deadline { xsd:string }? & Group* } Group = element group { attribute deadline { xsd:string }? & Endpoint* & MemberRegion+ } MemberRegion = element region { attribute fraction { xsd:double }? & text }