{"openapi":"3.0.0","info":{"title":"OVHcloud API specification","description":"Specification for OVHcloud API","version":"1.0","contact":{"name":"OVH","email":"api@ml.ovh.net"}},"servers":[{"url":"https://api.eu.ovhcloud.com/v2"}],"components":{"schemas":{"any":{"description":"Can be anything (text, int, bool, json, html, etc.)","example":"This is a content of any type !"},"common.CurrentTask":{"type":"object","description":"Asynchronous operation currently running","properties":{"errors":{"type":"array","description":"Errors that occurred on the task","nullable":true,"items":{"$ref":"#/components/schemas/common.TaskError"},"readOnly":true},"id":{"type":"string","description":"Identifier of the current task","format":"uuid","readOnly":true},"link":{"type":"string","description":"Link to the task details","readOnly":true},"status":{"allOf":[{"$ref":"#/components/schemas/common.CurrentTaskStatusEnum"}],"description":"Current global status of the current task","nullable":true,"readOnly":true},"type":{"type":"string","description":"Type of the current task","readOnly":true}}},"common.CurrentTaskStatusEnum":{"type":"string","description":"Current status of a task. A task in ERROR cannot be retried without your inputs. PENDING tasks will be executed as soon as possible. A RUNNING task is currently executing your original request. SCHEDULED is used for tasks that will be executed in the future.","enum":["ERROR","PENDING","RUNNING","SCHEDULED","WAITING_USER_INPUT"]},"common.TaskError":{"type":"object","description":"Errors that occurred on the task","properties":{"message":{"type":"string","description":"Error description","readOnly":true}}},"duration":{"type":"string","description":"Duration (e.g., P1Y2M3DT4H6M9S)","example":"P1Y2M3DT4H6M9S"},"email":{"type":"string","description":"Email address (e.g., api@ml.ovh.net)","format":"email","example":"api@ml.ovh.net"},"iam.ResourceMetadata":{"type":"object","description":"IAM resource metadata embedded in services models","properties":{"displayName":{"type":"string","description":"Resource display name","nullable":true,"readOnly":true},"id":{"type":"string","description":"Unique identifier of the resource","format":"uuid","readOnly":true},"state":{"allOf":[{"$ref":"#/components/schemas/iam.ResourceMetadata.StateEnum"}],"description":"Resource state","nullable":true,"readOnly":true},"tags":{"type":"object","description":"Resource tags. Tags that were internally computed are prefixed with ovh:","nullable":true,"additionalProperties":{"type":"string"},"readOnly":true},"urn":{"type":"string","description":"Unique resource name used in policies","readOnly":true}}},"iam.ResourceMetadata.StateEnum":{"type":"string","description":"Resource state","enum":["EXPIRED","IN_CREATION","OK","SUSPENDED"]},"iam.resource.TagFilter":{"type":"object","description":"Resource tag filter","properties":{"operator":{"allOf":[{"$ref":"#/components/schemas/iam.resource.TagFilter.OperatorEnum"}],"description":"Operator to use in order to filter on the value. Defaults to `EQ`.","nullable":true,"readOnly":true},"value":{"type":"string","description":"Value to use in order to filter tags","readOnly":true}}},"iam.resource.TagFilter.OperatorEnum":{"type":"string","description":"Operator that can be used in order to filter resources tags","enum":["EQ","EXISTS","ILIKE","LIKE","NEQ","NEXISTS"]},"internationalPhoneNumber":{"type":"string","description":"International phone number","format":"phone-number"},"ip":{"type":"string","description":"IP address (e.g., 192.0.2.0)","format":"ipv4","example":"192.0.2.0"},"ipBlock":{"type":"string","description":"IP (v4 or v6) CIDR notation (e.g., 192.0.2.0/24)","format":"ip-block","example":"192.0.2.0/24"},"ipInterface":{"type":"string","description":"IP address (e.g., 192.0.2.0)","format":"ipv4","example":"192.0.2.0"},"ipv4":{"type":"string","description":"IPv4 address (e.g., 192.0.2.0)","format":"ipv4","example":"192.0.2.0"},"ipv4Block":{"type":"string","description":"IPv4 CIDR notation (e.g., 192.0.2.0/24)","format":"ipv4-block","example":"192.0.2.0/24"},"ipv6":{"type":"string","description":"IPv6 address (e.g., 2001:41d0:1:1994::1)","format":"ipv6","example":"2001:41d0:1:1994::1"},"ipv6Block":{"type":"string","description":"IPv6 CIDR notation (e.g., 2001:41d0::/128)","format":"ipv6-block","example":"2001:41d0::/128"},"macAddress":{"type":"string","description":"MAC address (e.g., 00:00:5e:00:53:01)","format":"mac-address","example":"00:00:5e:00:53:01"},"phoneNumber":{"type":"string","description":"Phone number","format":"phone-number"},"time":{"type":"string","description":"Time (e.g., 15:04:05)","format":"time","example":"15:04:05"},"vrackServices.AllowedPrefixes":{"type":"object","description":"Allowed IP prefixes for BGP configuration, separated by IP version","properties":{"ipv4":{"type":"array","description":"List of allowed IPv4 prefixes. IPv4 blocks must have a prefix length between /24 and /30.","items":{"$ref":"#/components/schemas/ipv4Block"}},"ipv6":{"type":"array","description":"List of allowed IPv6 prefixes. IPv6 blocks must have a prefix length of /56.","items":{"$ref":"#/components/schemas/ipv6Block"}}}},"vrackServices.Bgp":{"type":"object","description":"BGP configuration of the vRack Services","properties":{"allowedPrefixes":{"allOf":[{"$ref":"#/components/schemas/vrackServices.AllowedPrefixes"}],"description":"List of allowed prefixes, OVH public IP blocks","readOnly":true},"bandwidth":{"type":"integer","description":"BGP bandwidth in Mbps, direct: INGRESS","readOnly":true},"bgpRange":{"type":"array","description":"BGP ranges","items":{"$ref":"#/components/schemas/vrackServices.BgpRange"},"readOnly":true},"clientAsn":{"type":"integer","description":"Client ASN","readOnly":true},"configurationStatus":{"allOf":[{"$ref":"#/components/schemas/vrackServices.BgpConfigurationStatus"}],"description":"BGP configuration status","readOnly":true},"iam":{"allOf":[{"$ref":"#/components/schemas/iam.ResourceMetadata"}],"description":"IAM resource metadata of the BGP configuration","nullable":true,"readOnly":true},"id":{"type":"string","description":"Identifier of the BGP","readOnly":true},"infrastructureAsn":{"type":"integer","description":"Infrastructure ASN","readOnly":true}}},"vrackServices.BgpConfigurationStatus":{"type":"object","description":"BGP configuration status","properties":{"reason":{"allOf":[{"$ref":"#/components/schemas/vrackServices.BgpConfigurationStatusReasonEnum"}],"description":"Reason for the status. Omitted when status is READY.","nullable":true,"readOnly":true},"status":{"allOf":[{"$ref":"#/components/schemas/vrackServices.BgpConfigurationStatusEnum"}],"description":"Configuration status","readOnly":true}}},"vrackServices.BgpConfigurationStatusEnum":{"type":"string","description":"BGP configuration status","enum":["DRAFT","READY","SUSPENDED"]},"vrackServices.BgpConfigurationStatusReasonEnum":{"type":"string","description":"BGP configuration status reasons","enum":["MISSING_ALLOWED_PREFIX","MISSING_ALLOWED_PREFIX,MISSING_BGP_RANGE","MISSING_BGP_RANGE"]},"vrackServices.BgpRange":{"type":"object","description":"BGP range configuration","properties":{"cidr":{"allOf":[{"$ref":"#/components/schemas/ipBlock"}],"description":"BGP range CIDR","readOnly":true},"clientPeers":{"type":"array","description":"Client peer IPs within the BGP range CIDR. The range first and last addresses are reserved and cannot be used as peer IPs.","items":{"$ref":"#/components/schemas/ip"},"readOnly":true},"infrastructurePeers":{"type":"array","description":"Infrastructure peer IPs within the BGP range CIDR. The range first and last addresses are reserved and cannot be used as peer IPs.","items":{"$ref":"#/components/schemas/ip"},"readOnly":true},"subnetCidr":{"allOf":[{"$ref":"#/components/schemas/ipBlock"}],"description":"Referenced subnet CIDR","readOnly":true}}},"vrackServices.BgpRangeTargetSpec":{"type":"object","description":"Target specification of a BGP range","properties":{"cidr":{"allOf":[{"$ref":"#/components/schemas/ipBlock"}],"description":"BGP range CIDR"},"clientPeers":{"type":"array","description":"Client peer IPs within the BGP range CIDR. Must be same IP protocol version than the referenced Subnet.","items":{"$ref":"#/components/schemas/ip"}},"infrastructurePeers":{"type":"array","description":"Infrastructure peer IPs within the BGP range CIDR. Must be same IP protocol version than the referenced Subnet.","items":{"$ref":"#/components/schemas/ip"}},"subnetCidr":{"allOf":[{"$ref":"#/components/schemas/ipBlock"}],"description":"Referenced subnet CIDR. The targeted subnet must be untagged: its `vlan` property must be `null`. Tagged subnets (`vlan` in `[2 - 4094]`) cannot host a BGP range."}},"required":["cidr","clientPeers","infrastructurePeers","subnetCidr"]},"vrackServices.BgpTargetSpec":{"type":"object","description":"Target specification of the BGP configuration","properties":{"allowedPrefixes":{"allOf":[{"$ref":"#/components/schemas/vrackServices.AllowedPrefixes"}],"description":"List of allowed prefixes, OVH public IP blocks"},"bgpRange":{"type":"array","description":"BGP ranges","items":{"$ref":"#/components/schemas/vrackServices.BgpRangeTargetSpec"}},"clientAsn":{"type":"integer","description":"Private client ASN. Authorized values: [64512 - 65533]. Defaults to 64512.","nullable":true},"infrastructureAsn":{"type":"integer","description":"Private infrastructure ASN. Authorized values: [64513-65534]. Defaults to 65534.","nullable":true}}},"vrackServices.DHCPConfigurationStatus":{"type":"object","description":"DHCP configuration status","properties":{"reason":{"allOf":[{"$ref":"#/components/schemas/vrackServices.DHCPConfigurationStatusReasonEnum"}],"description":"Reason for the status. Omitted when status is READY.","nullable":true,"readOnly":true},"status":{"allOf":[{"$ref":"#/components/schemas/vrackServices.DHCPConfigurationStatusEnum"}],"description":"Configuration status","nullable":true,"readOnly":true}}},"vrackServices.DHCPConfigurationStatusEnum":{"type":"string","description":"DHCP configuration status","enum":["DRAFT","READY"]},"vrackServices.DHCPConfigurationStatusReasonEnum":{"type":"string","description":"DHCP configuration status reasons","enum":["MISSING_DEDICATED_SERVER_INTERFACE_ASSOCIATIONS"]},"vrackServices.DHCPCurrentState":{"type":"object","description":"Current state of the DHCP/netboot block. Present on untagged subnets only (netboot).","properties":{"dedicatedServerInterfaceAssociations":{"type":"array","description":"List of associations between dedicatedServerInterfaces and private IPs","items":{"$ref":"#/components/schemas/vrackServices.DedicatedServerInterfaceAssociationCurrentState"},"readOnly":true},"displayName":{"type":"string","description":"DHCP displayName","nullable":true,"readOnly":true}}},"vrackServices.DHCPTarget":{"type":"object","description":"Target specification of DHCP/netboot. Accepted on an untagged subnet only (netboot). A tagged subnet is rejected.","properties":{"dedicatedServerInterfaceAssociations":{"type":"array","description":"List of associations between dedicatedServerInterfaces and private IPs","items":{"$ref":"#/components/schemas/vrackServices.DedicatedServerInterfaceAssociationTarget"}},"displayName":{"type":"string","description":"DHCP displayName","nullable":true}},"required":["dedicatedServerInterfaceAssociations"]},"vrackServices.DedicatedServerInterfaceAssociationCurrentState":{"type":"object","description":"Association between a private IP and a dedicatedServerInterface UUID","properties":{"ip":{"allOf":[{"$ref":"#/components/schemas/ip"}],"description":"Private IP in the subnet","readOnly":true},"netboot":{"type":"boolean","description":"Whether netboot is active or not","readOnly":true},"uuid":{"type":"string","description":"UUID that identifies a dedicatedServerInterface","readOnly":true}}},"vrackServices.DedicatedServerInterfaceAssociationTarget":{"type":"object","description":"Association between a private IP and a dedicatedServerInterface UUID","properties":{"ip":{"allOf":[{"$ref":"#/components/schemas/ip"}],"description":"Private IP of the dedicatedServerInterface. Must be within the subnet CIDR, outside the service range CIDR and outside any BGP range CIDR of that subnet. The subnet's first and last addresses are reserved. Unique within the subnet."},"uuid":{"type":"string","description":"UUID that identifies a dedicatedServerInterface"}},"required":["ip","uuid"]},"vrackServices.EligibleDedicatedServerInterface":{"type":"object","description":"List of eligible dedicatedServerInterfaces for vRack Services, listed by availabilityZone","properties":{"availabilityZone":{"type":"string","description":"The availabilityZone where the dedicatedServerInterfaces are located","readOnly":true},"dedicatedServerInterfaces":{"type":"array","description":"List of eligible dedicatedServerInterfaces","items":{"$ref":"#/components/schemas/vrackServices.EligibleDedicatedServerInterfaceItem"},"readOnly":true}}},"vrackServices.EligibleDedicatedServerInterfaceItem":{"type":"object","description":"An eligible dedicatedServerInterface","properties":{"serverName":{"type":"string","description":"Name of the dedicated server owning the dedicatedServerInterface","readOnly":true},"uuid":{"type":"string","description":"UUID that identifies the dedicatedServerInterface","readOnly":true}}},"vrackServices.Endpoint":{"type":"object","description":"Endpoint holding a managed service IP","properties":{"description":{"type":"string","description":"IP description defined in the managed service","readOnly":true},"ip":{"allOf":[{"$ref":"#/components/schemas/ip"}],"description":"IP address assigned by OVHcloud","readOnly":true}}},"vrackServices.ResourceStatusEnum":{"type":"string","description":"It reflects the readiness of the vRack Services resource. The status `READY` indicates that the vRack Services state is stable. It guarantees that the `currentState` is fully aligned with the `targetSpec`. A new target specification request will be accepted only in this status.","enum":["CREATING","DELETING","ERROR","READY","UPDATING"]},"vrackServices.ServiceEndpoint":{"type":"object","description":"A Service Endpoint provides an access to managed services directly from one or several private IPs in the associated vRack","properties":{"endpoints":{"type":"array","description":"Endpoints representing the IPs assigned to the managed services","items":{"$ref":"#/components/schemas/vrackServices.Endpoint"},"readOnly":true},"managedServiceURN":{"type":"string","description":"IAM Resource URN of the managed service. Compatible managed service types are listed by /reference/compatibleManagedServiceType call.","readOnly":true}}},"vrackServices.ServiceEndpointTarget":{"type":"object","description":"Target specification of a Service Endpoint providing an access to one managed service directly from one or several private IPs in the associated vRack","properties":{"managedServiceURN":{"type":"string","description":"IAM Resource URN of the managed service"}},"required":["managedServiceURN"]},"vrackServices.ServiceEndpointsConfigurationStatus":{"type":"object","description":"Service endpoints configuration status","properties":{"reason":{"type":"string","description":"Reason for the status","nullable":true,"readOnly":true},"status":{"allOf":[{"$ref":"#/components/schemas/vrackServices.ServiceEndpointsConfigurationStatusEnum"}],"description":"Configuration status","nullable":true,"readOnly":true}}},"vrackServices.ServiceEndpointsConfigurationStatusEnum":{"type":"string","description":"Service endpoints configuration status","enum":["DRAFT","READY"]},"vrackServices.ServiceRangeCurrentState":{"type":"object","description":"Service range current state","properties":{"cidr":{"allOf":[{"$ref":"#/components/schemas/ipBlock"}],"description":"Service range CIDR","readOnly":true},"dhcp":{"allOf":[{"$ref":"#/components/schemas/vrackServices.DHCPCurrentState"}],"description":"DHCP configuration. Beta feature. Null when the service range has no DHCP configuration.","nullable":true,"readOnly":true},"dhcpConfigurationStatus":{"allOf":[{"$ref":"#/components/schemas/vrackServices.DHCPConfigurationStatus"}],"description":"DHCP configuration status. Beta feature. Null when the service range has no DHCP configuration.","nullable":true,"readOnly":true},"remainingIps":{"type":"integer","description":"Number of IPs in the service range still available for managed service endpoints. DHCP associations are outside the service range and never counted.","readOnly":true},"remainingReservedIps":{"type":"integer","description":"Number of OVHcloud-reserved IPs still free","nullable":true,"readOnly":true},"reservedIps":{"type":"integer","description":"Number of OVHcloud-reserved IPs in the Service range. Deprecated: use usedReservedIps and remainingReservedIps","nullable":true,"readOnly":true},"serviceEndpoints":{"type":"array","description":"Service endpoints","items":{"$ref":"#/components/schemas/vrackServices.ServiceEndpoint"},"readOnly":true},"serviceEndpointsConfigurationStatus":{"allOf":[{"$ref":"#/components/schemas/vrackServices.ServiceEndpointsConfigurationStatus"}],"description":"Service endpoints configuration status","nullable":true,"readOnly":true},"subnetCidr":{"allOf":[{"$ref":"#/components/schemas/ipBlock"}],"description":"Subnet CIDR","readOnly":true},"usedIps":{"type":"integer","description":"Number of IPs in the service range allocated to managed service endpoints. DHCP associations are outside the service range and never counted.","readOnly":true},"usedReservedIps":{"type":"integer","description":"Number of OVHcloud-reserved IPs in use","nullable":true,"readOnly":true}}},"vrackServices.ServiceRangeTarget":{"type":"object","description":"Service range target specification","properties":{"cidr":{"allOf":[{"$ref":"#/components/schemas/ipBlock"}],"description":"Service range CIDR"},"dhcp":{"allOf":[{"$ref":"#/components/schemas/vrackServices.DHCPTarget"}],"description":"Target specification of the DHCP configuration (Beta)","nullable":true},"serviceEndpoints":{"type":"array","description":"Service endpoint targets","items":{"$ref":"#/components/schemas/vrackServices.ServiceEndpointTarget"}},"subnetCidr":{"allOf":[{"$ref":"#/components/schemas/ipBlock"}],"description":"Referenced subnet CIDR"}},"required":["cidr","serviceEndpoints","subnetCidr"]},"vrackServices.ServicesCurrentState":{"type":"object","description":"Services current state","properties":{"serviceRange":{"type":"array","description":"Service ranges","items":{"$ref":"#/components/schemas/vrackServices.ServiceRangeCurrentState"},"readOnly":true}}},"vrackServices.ServicesTarget":{"type":"object","description":"Services target specification","properties":{"serviceRange":{"type":"array","description":"Service range target specifications","items":{"$ref":"#/components/schemas/vrackServices.ServiceRangeTarget"}}},"required":["serviceRange"]},"vrackServices.Subnet":{"type":"object","description":"A network segment of the associated vRack. It represents an IP addressing scheme inside the private network.","properties":{"az":{"type":"string","description":"Availability zone","readOnly":true},"cidr":{"allOf":[{"$ref":"#/components/schemas/ipBlock"}],"description":"IP address range of the subnet in CIDR format","readOnly":true},"displayName":{"type":"string","description":"Display name of the subnet","nullable":true,"readOnly":true},"vlan":{"type":"integer","description":"Unique inner VLAN that allows subnets segregation","nullable":true,"readOnly":true}}},"vrackServices.TargetSubnet":{"type":"object","description":"Target specification of a subnet","properties":{"az":{"type":"string","description":"Availability zone of the subnet, one of the vRack Services region zones (`<region>-a` today). Immutable once the subnet exists: a change is ignored, delete and recreate the subnet instead."},"cidr":{"allOf":[{"$ref":"#/components/schemas/ipBlock"}],"description":"IP address range of the subnet in CIDR format. Must be a private network address (RFC 1918 for IPv4, RFC 4193 for IPv6). Authorized prefix length: /23 to /24 for IPv4, /64 for IPv6."},"displayName":{"type":"string","description":"Display name of the subnet. Format must follow `^[ a-zA-Z0-9-_.]{0,40}$`.","nullable":true},"vlan":{"type":"integer","description":"Unique inner VLAN that allows subnets segregation. Authorized values: [2 - 4094] and `null` (untagged traffic). Must be `null` for an IPv6 subnet, and when the subnet is referenced by a BGP range (see `bgp.bgpRange[].subnetCidr`). Only one untagged subnet is allowed per IP version and per availability zone.","nullable":true}},"required":["az","cidr"]},"vrackServices.VrackServices":{"type":"object","description":"A vRack Services","properties":{"checksum":{"type":"string","description":"Computed hash used to control concurrent modification requests. Here, it represents the current target specification value.","readOnly":true},"createdAt":{"type":"string","description":"Date of the vRack Services delivery","format":"date-time","readOnly":true},"currentState":{"allOf":[{"$ref":"#/components/schemas/vrackServices.VrackServicesCurrentState"}],"description":"Current configuration applied to the vRack Services","readOnly":true},"currentTasks":{"type":"array","description":"Asynchronous operations ongoing on the vRack Services","nullable":true,"items":{"$ref":"#/components/schemas/common.CurrentTask"},"readOnly":true},"id":{"type":"string","description":"Unique identifier","readOnly":true},"resourceStatus":{"allOf":[{"$ref":"#/components/schemas/vrackServices.ResourceStatusEnum"}],"description":"Reflects the readiness of the vRack Services. A new target specification request will be accepted only in `READY` status.","readOnly":true},"targetSpec":{"allOf":[{"$ref":"#/components/schemas/vrackServices.VrackServicesTargetSpec"}],"description":"Last target specification of the vRack Services","readOnly":true},"updatedAt":{"type":"string","description":"Date of the Last vRack Services update","format":"date-time","readOnly":true}}},"vrackServices.VrackServicesConfigurationStatus":{"type":"object","description":"vRack Services configuration status","properties":{"reason":{"allOf":[{"$ref":"#/components/schemas/vrackServices.VrackServicesConfigurationStatusReasonEnum"}],"description":"Reason for the status. Omitted when status is READY.","nullable":true,"readOnly":true},"status":{"allOf":[{"$ref":"#/components/schemas/vrackServices.VrackServicesConfigurationStatusEnum"}],"description":"Configuration status","readOnly":true}}},"vrackServices.VrackServicesConfigurationStatusEnum":{"type":"string","description":"vRack Services configuration status","enum":["DRAFT","READY","SUSPENDED"]},"vrackServices.VrackServicesConfigurationStatusReasonEnum":{"type":"string","description":"vRack Services configuration status reasons","enum":["MISSING_VRACK_ASSOCIATION"]},"vrackServices.VrackServicesCurrentState":{"type":"object","description":"Current state of the vRack Services","properties":{"bgp":{"allOf":[{"$ref":"#/components/schemas/vrackServices.Bgp"}],"description":"BGP configuration of the vRack Services (Beta)","nullable":true,"readOnly":true},"configurationStatus":{"allOf":[{"$ref":"#/components/schemas/vrackServices.VrackServicesConfigurationStatus"}],"description":"vRack Services configuration status","nullable":true,"readOnly":true},"region":{"type":"string","description":"Region of the vRack Services. List of compatible regions can be retrieved from /reference/region.","readOnly":true},"services":{"allOf":[{"$ref":"#/components/schemas/vrackServices.ServicesCurrentState"}],"description":"Services current state","nullable":true,"readOnly":true},"subnets":{"type":"array","description":"Subnets of the current vRack Services","items":{"$ref":"#/components/schemas/vrackServices.Subnet"},"readOnly":true},"vrackId":{"type":"string","description":"vRack associated to the vRack Services","nullable":true,"readOnly":true}}},"vrackServices.VrackServicesInput":{"type":"object","description":"A vRack Services input payload","properties":{"checksum":{"type":"string","description":"Computed hash used to control concurrent modification requests. Here, it represents the target specification value the request is based on."},"targetSpec":{"allOf":[{"$ref":"#/components/schemas/vrackServices.VrackServicesTargetSpec"}],"description":"Requested target specification"}},"required":["checksum","targetSpec"]},"vrackServices.VrackServicesTargetSpec":{"type":"object","description":"Target specification of the vRack Services","properties":{"bgp":{"allOf":[{"$ref":"#/components/schemas/vrackServices.BgpTargetSpec"}],"description":"Target specification of the BGP configuration (Beta)","nullable":true},"services":{"allOf":[{"$ref":"#/components/schemas/vrackServices.ServicesTarget"}],"description":"Target specification of the services","nullable":true},"subnets":{"type":"array","description":"Target specification of the subnets. At most 3 subnets per vRack Services.","items":{"$ref":"#/components/schemas/vrackServices.TargetSubnet"}}},"required":["subnets"]},"vrackServices.VrackServicesWithIAM":{"type":"object","description":"A vRack Services","properties":{"checksum":{"type":"string","description":"Computed hash used to control concurrent modification requests. Here, it represents the current target specification value.","readOnly":true},"createdAt":{"type":"string","description":"Date of the vRack Services delivery","format":"date-time","readOnly":true},"currentState":{"allOf":[{"$ref":"#/components/schemas/vrackServices.VrackServicesCurrentState"}],"description":"Current configuration applied to the vRack Services","readOnly":true},"currentTasks":{"type":"array","description":"Asynchronous operations ongoing on the vRack Services","nullable":true,"items":{"$ref":"#/components/schemas/common.CurrentTask"},"readOnly":true},"iam":{"allOf":[{"$ref":"#/components/schemas/iam.ResourceMetadata"}],"description":"IAM resource metadata","nullable":true,"readOnly":true},"id":{"type":"string","description":"Unique identifier","readOnly":true},"resourceStatus":{"allOf":[{"$ref":"#/components/schemas/vrackServices.ResourceStatusEnum"}],"description":"Reflects the readiness of the vRack Services. A new target specification request will be accepted only in `READY` status.","readOnly":true},"targetSpec":{"allOf":[{"$ref":"#/components/schemas/vrackServices.VrackServicesTargetSpec"}],"description":"Last target specification of the vRack Services","readOnly":true},"updatedAt":{"type":"string","description":"Date of the Last vRack Services update","format":"date-time","readOnly":true}}}},"securitySchemes":{"oAuth2AuthCode":{"type":"oauth2","description":"Oauth2","x-client-id":"1bb9c7df371741c0","x-client-secret":"a5b4de870aca620d10fbf63cd18d205b","flows":{"authorizationCode":{"authorizationUrl":"https://auth.eu.ovhcloud.com/oauth2/authorize","tokenUrl":"https://auth.eu.ovhcloud.com/oauth2/token","scopes":{"account/all":"Manage your account","all":"Manage your whole account and all your services","services/all":"Manage your services lifecycle and billing"}}}}}},"paths":{"/vrackServices/resource":{"get":{"operationId":"getAllVrackServices","summary":"List vRack Services","description":"Returns the vRack Services of the account, each with its requested and current configuration.","security":[{"oAuth2AuthCode":[]}],"parameters":[{"in":"header","name":"X-Pagination-Cursor","description":"Pagination cursor","schema":{"type":"string"}},{"in":"header","name":"X-Pagination-Size","description":"Pagination size","schema":{"type":"integer"}},{"in":"query","name":"dedicatedServerInterface","description":"Filter on a dedicatedServerInterface","schema":{"type":"string"}},{"in":"query","name":"iamTags","description":"Filter resources on IAM tags","schema":{"type":"object","additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/iam.resource.TagFilter"}}}}],"responses":{"200":{"description":"successful operation","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/vrackServices.VrackServicesWithIAM"}},"examples":{"01-OneVrackServices":{"value":[{"checksum":"d41d8cd98f00b204e9800998ecf8427e","createdAt":"2023-03-10T12:00:00Z","currentState":{"bgp":null,"configurationStatus":{"reason":"MISSING_VRACK_ASSOCIATION","status":"DRAFT"},"region":"eu-west-lim","services":{"serviceRange":[]},"subnets":[],"vrackId":null},"currentTasks":[],"id":"vrs-ahc-fw4-od1-efq","resourceStatus":"READY","targetSpec":{"subnets":[]},"updatedAt":"2023-03-10T12:00:00Z"}],"summary":"01. One vRack Services"},"02-TwoVrackServices":{"value":[{"checksum":"d41d8cd98f00b204e9800998ecf8427e","createdAt":"2023-03-10T12:00:00Z","currentState":{"bgp":null,"configurationStatus":{"reason":"MISSING_VRACK_ASSOCIATION","status":"DRAFT"},"region":"eu-west-lim","services":{"serviceRange":[]},"subnets":[],"vrackId":null},"currentTasks":[],"id":"vrs-ahc-fw4-od1-efq","resourceStatus":"READY","targetSpec":{"subnets":[]},"updatedAt":"2023-03-10T12:00:00Z"},{"checksum":"4c5d68ea2231e90db7495406018a0f5e","createdAt":"2023-03-10T10:00:00Z","currentState":{"bgp":null,"configurationStatus":{"reason":"MISSING_VRACK_ASSOCIATION","status":"DRAFT"},"region":"eu-west-gra","services":null,"subnets":[{"az":"eu-west-gra-a","cidr":"192.168.0.0/24","displayName":"My.Subnet","vlan":30}],"vrackId":null},"currentTasks":[],"id":"vrs-ar7-72w-poh-3qe","resourceStatus":"READY","targetSpec":{"subnets":[{"az":"eu-west-gra-a","cidr":"192.168.0.0/24","displayName":"My.Subnet","vlan":30}]},"updatedAt":"2023-03-10T10:10:00Z"}],"summary":"02. Two vRack Services"},"03-NoVrackServices":{"value":[],"summary":"03. No vRack Services"},"04-WithBgpAndUntaggedSubnet":{"value":[{"checksum":"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6","createdAt":"2023-03-10T09:00:00Z","currentState":{"bgp":{"allowedPrefixes":{"ipv4":["203.0.113.0/24"],"ipv6":[]},"bandwidth":5000,"bgpRange":[{"cidr":"10.120.0.16/28","clientPeers":["10.120.0.20","10.120.0.21","10.120.0.22","10.120.0.23"],"infrastructurePeers":["10.120.0.17","10.120.0.18","10.120.0.19","10.120.0.27"],"subnetCidr":"10.120.0.0/24"}],"clientAsn":65000,"configurationStatus":{"status":"READY"},"iam":{"displayName":"bgp-5su-bf4-td8-t6a","id":"f3e7a00d-21c8-4d5c-8f6f-dcd27e1e9077","state":"OK","urn":"urn:v1:eu:resource:vrackServices:vrs-nzo-ql7-o63-73p/bgp/bgp-5su-bf4-td8-t6a"},"id":"bgp-5su-bf4-td8-t6a","infrastructureAsn":65534},"configurationStatus":{"status":"READY"},"region":"eu-west-rbx","services":{"serviceRange":[{"cidr":"10.120.0.0/28","remainingIps":28,"remainingReservedIps":4,"serviceEndpoints":[{"endpoints":[{"description":"Nominal","ip":"10.120.0.5"}],"managedServiceURN":"urn:v1:eu:resource:storageNetApp:examples-00e1-4a3d-ae89-ac145675c8bb"}],"serviceEndpointsConfigurationStatus":{"status":"READY"},"subnetCidr":"10.120.0.0/24","usedIps":1,"usedReservedIps":0}]},"subnets":[{"az":"eu-west-rbx-a","cidr":"10.120.0.0/24","displayName":"My Untagged Subnet","vlan":null}],"vrackId":"pn-1234567"},"currentTasks":[],"id":"vrs-nzo-ql7-o63-73p","resourceStatus":"READY","targetSpec":{"bgp":{"allowedPrefixes":{"ipv4":["203.0.113.0/24"],"ipv6":[]},"bgpRange":[{"cidr":"10.120.0.16/28","clientPeers":["10.120.0.20","10.120.0.21","10.120.0.22","10.120.0.23"],"infrastructurePeers":["10.120.0.17","10.120.0.18","10.120.0.19","10.120.0.27"],"subnetCidr":"10.120.0.0/24"}],"clientAsn":65000,"infrastructureAsn":65534},"subnets":[{"az":"eu-west-rbx-a","cidr":"10.120.0.0/24","displayName":"My Untagged Subnet","vlan":null}]},"updatedAt":"2023-03-10T09:30:00Z"}],"summary":"04. BGP configured: one BGP range, one untagged subnet"},"05-BgpAsnOnlyNoRanges":{"value":[{"checksum":"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d7","createdAt":"2023-04-12T10:00:00Z","currentState":{"bgp":{"allowedPrefixes":{"ipv4":[],"ipv6":[]},"bandwidth":5000,"bgpRange":[],"clientAsn":64512,"configurationStatus":{"reason":"MISSING_ALLOWED_PREFIX,MISSING_BGP_RANGE","status":"DRAFT"},"iam":{"displayName":"bgp-hxe-xmy-xqg-ouo","id":"f3e7a00d-21c8-4d5c-8f6f-dcd27e1e9077","state":"OK","urn":"urn:v1:eu:resource:vrackServices:vrs-0ms-ahw-d8e-k26/bgp/bgp-hxe-xmy-xqg-ouo"},"id":"bgp-hxe-xmy-xqg-ouo","infrastructureAsn":65534},"configurationStatus":{"reason":"MISSING_VRACK_ASSOCIATION","status":"DRAFT"},"region":"eu-west-rbx","services":null,"subnets":[{"az":"eu-west-rbx-a","cidr":"192.168.0.0/24","displayName":"BgpMinimalSubnet","vlan":null}],"vrackId":"pn-1122335"},"currentTasks":[],"id":"vrs-0ms-ahw-d8e-k26","resourceStatus":"READY","targetSpec":{"bgp":{"allowedPrefixes":{"ipv4":[],"ipv6":[]},"bgpRange":[]},"subnets":[{"az":"eu-west-rbx-a","cidr":"192.168.0.0/24","displayName":"BgpMinimalSubnet","vlan":null}]},"updatedAt":"2023-04-12T10:10:00Z"}],"summary":"05. Partial BGP: ASNs assigned, no prefixes or BGP range"},"06-VrackServicesWithNetboot":{"value":[{"checksum":"2607903bd5c35916f466a9567bea891c","createdAt":"2023-04-12T11:00:00Z","currentState":{"configurationStatus":{"status":"READY"},"region":"eu-west-rbx","services":{"serviceRange":[{"cidr":"10.120.0.0/28","dhcp":{"dedicatedServerInterfaceAssociations":[{"ip":"10.120.0.56","netboot":true,"uuid":"12345678-aaaa-eeee-ffff-1234567890ab"}],"displayName":"my_netboot"},"dhcpConfigurationStatus":{"status":"READY"},"remainingIps":11,"remainingReservedIps":3,"serviceEndpoints":[],"subnetCidr":"10.120.0.0/24","usedIps":0,"usedReservedIps":1}]},"subnets":[{"az":"eu-west-rbx-a","cidr":"10.120.0.0/24","displayName":"NetbootSubnet","vlan":null}],"vrackId":"pn-3344556"},"currentTasks":[{"id":"f2a3b4c5-6d7e-8f9a-0b1c-2d3e4f5a6b7c","link":"/v2/vrackServices/resource/vrs-ane-tbo-ot1-cfg","status":"PENDING","type":"VrackServicesUpdate"}],"id":"vrs-ane-tbo-ot1-cfg","resourceStatus":"UPDATING","targetSpec":{"services":{"serviceRange":[{"cidr":"10.120.0.0/28","dhcp":{"dedicatedServerInterfaceAssociations":[{"ip":"10.120.0.56","uuid":"12345678-aaaa-eeee-ffff-1234567890ab"}],"displayName":"my_netboot"},"serviceEndpoints":[],"subnetCidr":"10.120.0.0/24"}]},"subnets":[{"az":"eu-west-rbx-a","cidr":"10.120.0.0/24","displayName":"NetbootSubnet","vlan":null}]},"updatedAt":"2023-04-12T11:10:00Z"}],"summary":"06. A vRack Services with netboot"}}}}}},"tags":["Resource"],"x-developer-hub-navigation":[["Network","vRack Services","Services@@@10"]],"x-badges":[{"color":"green","label":"Stable production version"}],"x-code-samples":[{"lang":"python","label":"Python","source":"'''\nFirst, install the latest release of Python wrapper: $ pip install ovh\n'''\nimport json\nimport ovh\n\n# Instantiate an OVH Client.\n# You can generate new credentials with full access to your account on\n# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\nclient = ovh.Client(\n\tendpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n\tapplication_key='xxxxxxxxxx',    # Application Key\n\tapplication_secret='xxxxxxxxxx', # Application Secret\n\tconsumer_key='xxxxxxxxxx',       # Consumer Key\n)\n\nresult = client.get(\"/v2/vrackServices/resource\")\n\n# Pretty print\nprint(json.dumps(result, indent=4))"},{"lang":"php","label":"PHP","source":"<?php\n/**\n * First, download the latest release of PHP wrapper on github\n * And include this script into the folder with extracted files\n */\nrequire __DIR__ . '/vendor/autoload.php';\nuse \\Ovh\\Api;\n\n/**\n * Instantiate an OVH Client.\n * You can generate new credentials with full access to your account on\n * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\n */\n$ovh = new Api('xxxxxxxxxx',  // Application Key\n               'xxxxxxxxxx',  // Application Secret\n               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n               'xxxxxxxxxx'); // Consumer Key\n\n$result = $ovh->get(\"/v2/vrackServices/resource\");\n\nprint_r($result);\n?>"}],"x-iam-actions":[{"name":"vrackServices:apiovh:resource/get","required":true}],"x-expanded-response":"VrackServicesVrackServicesWithIAM"}},"/vrackServices/resource/{vrackServicesId}":{"get":{"operationId":"getVrackService","summary":"Get a vRack Services","description":"Returns the requested and current configuration of the vRack Services: region, associated vRack, subnets with their Service Endpoints, status and running tasks.","security":[{"oAuth2AuthCode":[]}],"parameters":[{"in":"path","name":"vrackServicesId","description":"Vrack services ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"successful operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/vrackServices.VrackServicesWithIAM"},"examples":{"01-JustDelivered":{"value":{"checksum":"d41d8cd98f00b204e9800998ecf8427e","createdAt":"2023-03-10T12:00:00Z","currentState":{"bgp":null,"configurationStatus":{"reason":"MISSING_VRACK_ASSOCIATION","status":"DRAFT"},"region":"eu-west-lim","services":{"serviceRange":[]},"subnets":[],"vrackId":null},"currentTasks":[],"id":"vrs-ahc-fw4-od1-efq","resourceStatus":"READY","targetSpec":{"subnets":[]},"updatedAt":"2023-03-10T12:00:00Z"},"summary":"01. A vRack Services that is just delivered"},"02-EmptySubnet":{"value":{"checksum":"1aabac6d068eef6a7bad3fdf50a05cc8","createdAt":"2023-03-10T11:00:00Z","currentState":{"bgp":null,"configurationStatus":{"reason":"MISSING_VRACK_ASSOCIATION","status":"DRAFT"},"region":"eu-west-rbx","services":null,"subnets":[{"az":"eu-west-rbx-a","cidr":"10.120.0.0/24","vlan":2}],"vrackId":null},"currentTasks":[],"id":"vrs-ak0-ok0-sy5-8py","resourceStatus":"READY","targetSpec":{"subnets":[{"az":"eu-west-rbx-a","cidr":"10.120.0.0/24","vlan":2}]},"updatedAt":"2023-03-10T11:10:00Z"},"summary":"02. A vRack Services with an empty Subnet"},"03-TwoServiceEndpoints":{"value":{"checksum":"4c5d68ea2231e90db7495406018a0f5e","createdAt":"2023-03-10T10:00:00Z","currentState":{"bgp":null,"configurationStatus":{"reason":"MISSING_VRACK_ASSOCIATION","status":"DRAFT"},"region":"eu-west-gra","services":null,"subnets":[{"az":"eu-west-gra-a","cidr":"192.168.0.0/24","displayName":"My.Subnet","vlan":30}],"vrackId":null},"currentTasks":[],"id":"vrs-ar7-72w-poh-3qe","resourceStatus":"READY","targetSpec":{"subnets":[{"az":"eu-west-gra-a","cidr":"192.168.0.0/24","displayName":"My.Subnet","vlan":30}]},"updatedAt":"2023-03-10T10:10:00Z"},"summary":"03. A vRack Services with two Service Endpoints"},"04-ManagedServicesReachableFromVrack":{"value":{"checksum":"8b70a21702a41638e32778c6400e1848","createdAt":"2023-03-10T08:00:00Z","currentState":{"bgp":null,"configurationStatus":{"status":"READY"},"region":"eu-west-rbx","services":{"serviceRange":[{"cidr":"172.16.0.0/28","remainingIps":28,"remainingReservedIps":4,"serviceEndpoints":[{"endpoints":[{"description":"Nominal","ip":"172.16.0.5"}],"managedServiceURN":"urn:v1:eu:resource:storageNetApp:examples-00e1-4a3d-ae89-ac145675c8bb"}],"serviceEndpointsConfigurationStatus":{"status":"READY"},"subnetCidr":"172.16.0.0/24","usedIps":1,"usedReservedIps":0}]},"subnets":[{"az":"eu-west-rbx-a","cidr":"172.16.0.0/24","displayName":"MySub","vlan":30}],"vrackId":"pn-1234567"},"currentTasks":[],"id":"vrs-anb-dic-dsi-raw","resourceStatus":"READY","targetSpec":{"subnets":[{"az":"eu-west-rbx-a","cidr":"172.16.0.0/24","displayName":"MySub","vlan":30}]},"updatedAt":"2023-06-10T08:10:00Z"},"summary":"04. A vRack Services with a managed service reachable from a vRack"},"05-BeingUpdated":{"value":{"checksum":"003df9f0d644a36164a7de26ab20bf6c","createdAt":"2023-03-10T09:00:00Z","currentState":{"bgp":null,"configurationStatus":{"reason":"MISSING_VRACK_ASSOCIATION","status":"DRAFT"},"region":"eu-west-rbx","services":{"serviceRange":[]},"subnets":[],"vrackId":null},"currentTasks":[{"id":"84b8c9cd-499c-4875-9504-26a82d5115af","link":"/v2/vrackServices/resource/vrs-ahz-9t0-7lb-b5l","status":"RUNNING","type":"VrackServicesUpdate"}],"id":"vrs-ahz-9t0-7lb-b5l","resourceStatus":"UPDATING","targetSpec":{"subnets":[{"az":"eu-west-rbx-a","cidr":"172.21.0.0/24","vlan":null}]},"updatedAt":"2023-03-10T09:10:00Z"},"summary":"05. A vRack Services being updated"},"06-ErrorState":{"value":{"checksum":"fdd6a7a50286fd969102e319ef6b8545","createdAt":"2023-03-10T07:00:00Z","currentState":{"bgp":null,"configurationStatus":{"reason":"MISSING_VRACK_ASSOCIATION","status":"DRAFT"},"region":"eu-west-rbx","services":{"serviceRange":[]},"subnets":[],"vrackId":null},"currentTasks":[{"id":"9a45931c-a3ba-4ea4-a91d-67d3ef296c8b","link":"/v2/vrackServices/resource/vrs-asp-dtl-lym-wza","status":"ERROR","type":"VrackServicesUpdate"}],"id":"vrs-asp-dtl-lym-wza","resourceStatus":"ERROR","targetSpec":{"subnets":[{"az":"eu-west-rbx-a","cidr":"172.21.0.0/24","vlan":null}]},"updatedAt":"2023-03-10T07:10:00Z"},"summary":"06. A vRack Services in ERROR state"},"07-BgpWithRangeNoPrefixes":{"value":{"checksum":"b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6","createdAt":"2023-04-12T08:00:00Z","currentState":{"bgp":{"allowedPrefixes":{"ipv4":[],"ipv6":[]},"bandwidth":5000,"bgpRange":[{"cidr":"192.168.0.16/28","clientPeers":["192.168.0.20"],"infrastructurePeers":["192.168.0.17","192.168.0.18","192.168.0.19","192.168.0.27"],"subnetCidr":"192.168.0.0/24"}],"clientAsn":64512,"configurationStatus":{"reason":"MISSING_ALLOWED_PREFIX","status":"DRAFT"},"iam":{"displayName":"bgp-003-rqw-uhi-lqz","id":"f3e7a00d-21c8-4d5c-8f6f-dcd27e1e9077","state":"OK","urn":"urn:v1:eu:resource:vrackServices:vrs-507-2ti-0yy-2ie/bgp/bgp-003-rqw-uhi-lqz"},"id":"bgp-003-rqw-uhi-lqz","infrastructureAsn":65534},"configurationStatus":{"status":"READY"},"region":"eu-west-rbx","services":null,"subnets":[{"az":"eu-west-rbx-a","cidr":"192.168.0.0/24","displayName":"BgpMinimalSubnet","vlan":null}],"vrackId":"pn-1122334"},"currentTasks":[],"id":"vrs-507-2ti-0yy-2ie","resourceStatus":"READY","targetSpec":{"bgp":{"allowedPrefixes":{"ipv4":[],"ipv6":[]},"bgpRange":[{"cidr":"192.168.0.16/28","clientPeers":["192.168.0.20"],"infrastructurePeers":["192.168.0.17","192.168.0.18","192.168.0.19","192.168.0.27"],"subnetCidr":"192.168.0.0/24"}]},"subnets":[{"az":"eu-west-rbx-a","cidr":"192.168.0.0/24","displayName":"BgpMinimalSubnet","vlan":null}]},"updatedAt":"2023-04-12T08:10:00Z"},"summary":"07. Partial BGP: no prefixes, default ASNs, one BGP range"},"08-BgpAsnOnlyNoRanges":{"value":{"checksum":"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d7","createdAt":"2023-04-12T10:00:00Z","currentState":{"bgp":{"allowedPrefixes":{"ipv4":[],"ipv6":[]},"bandwidth":5000,"bgpRange":[],"clientAsn":64512,"configurationStatus":{"reason":"MISSING_ALLOWED_PREFIX,MISSING_BGP_RANGE","status":"DRAFT"},"iam":{"displayName":"bgp-hxe-xmy-xqg-ouo","id":"f3e7a00d-21c8-4d5c-8f6f-dcd27e1e9077","state":"OK","urn":"urn:v1:eu:resource:vrackServices:vrs-0ms-ahw-d8e-k26/bgp/bgp-hxe-xmy-xqg-ouo"},"id":"bgp-hxe-xmy-xqg-ouo","infrastructureAsn":65534},"configurationStatus":{"reason":"MISSING_VRACK_ASSOCIATION","status":"DRAFT"},"region":"eu-west-rbx","services":null,"subnets":[{"az":"eu-west-rbx-a","cidr":"192.168.0.0/24","displayName":"BgpMinimalSubnet","vlan":null}],"vrackId":"pn-1122335"},"currentTasks":[],"id":"vrs-0ms-ahw-d8e-k26","resourceStatus":"READY","targetSpec":{"bgp":{"allowedPrefixes":{"ipv4":[],"ipv6":[]},"bgpRange":[]},"subnets":[{"az":"eu-west-rbx-a","cidr":"192.168.0.0/24","displayName":"BgpMinimalSubnet","vlan":null}]},"updatedAt":"2023-04-12T10:10:00Z"},"summary":"08. Partial BGP: ASNs assigned, no prefixes or BGP range"},"09-BgpWithPrefixesNoRanges":{"value":{"checksum":"5e8b4f1c2d3a4b5c6d7e8f9a0b1c2d3e","createdAt":"2023-04-12T09:00:00Z","currentState":{"bgp":{"allowedPrefixes":{"ipv4":["203.0.113.0/24"],"ipv6":[]},"bandwidth":5000,"bgpRange":[],"clientAsn":65000,"configurationStatus":{"reason":"MISSING_BGP_RANGE","status":"DRAFT"},"iam":{"displayName":"bgp-y59-kid-tbc-yob","id":"f3e7a00d-21c8-4d5c-8f6f-dcd27e1e9077","state":"OK","urn":"urn:v1:eu:resource:vrackServices:vrs-deu-rh5-wg2-8d7/bgp/bgp-y59-kid-tbc-yob"},"id":"bgp-y59-kid-tbc-yob","infrastructureAsn":65534},"configurationStatus":{"reason":"MISSING_VRACK_ASSOCIATION","status":"DRAFT"},"region":"eu-west-rbx","services":null,"subnets":[],"vrackId":"pn-2233445"},"currentTasks":[],"id":"vrs-deu-rh5-wg2-8d7","resourceStatus":"READY","targetSpec":{"bgp":{"allowedPrefixes":{"ipv4":["203.0.113.0/24"],"ipv6":[]},"bgpRange":[],"clientAsn":65000,"infrastructureAsn":65534},"subnets":[]},"updatedAt":"2023-04-12T09:10:00Z"},"summary":"09. Partial BGP: allowed IPv4 prefix set, no BGP range"},"10-FullBgpConfiguration":{"value":{"checksum":"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6","createdAt":"2023-04-12T11:00:00Z","currentState":{"bgp":{"allowedPrefixes":{"ipv4":["203.0.113.0/24"],"ipv6":[]},"bandwidth":5000,"bgpRange":[{"cidr":"192.168.0.16/28","clientPeers":["192.168.0.20","192.168.0.21","192.168.0.22","192.168.0.23"],"infrastructurePeers":["192.168.0.17","192.168.0.18","192.168.0.19","192.168.0.27"],"subnetCidr":"192.168.0.0/24"}],"clientAsn":65000,"configurationStatus":{"status":"READY"},"iam":{"displayName":"bgp-2i5-5at-4an-678","id":"f3e7a00d-21c8-4d5c-8f6f-dcd27e1e9077","state":"OK","urn":"urn:v1:eu:resource:vrackServices:vrs-l75-h31-keg-eyt/bgp/bgp-2i5-5at-4an-678"},"id":"bgp-2i5-5at-4an-678","infrastructureAsn":65534},"configurationStatus":{"status":"READY"},"region":"eu-west-rbx","services":null,"subnets":[{"az":"eu-west-rbx-a","cidr":"192.168.0.0/24","displayName":"BgpFullSubnet","vlan":null}],"vrackId":"pn-3344556"},"currentTasks":[],"id":"vrs-l75-h31-keg-eyt","resourceStatus":"READY","targetSpec":{"bgp":{"allowedPrefixes":{"ipv4":["203.0.113.0/24"],"ipv6":[]},"bgpRange":[{"cidr":"192.168.0.16/28","clientPeers":["192.168.0.20","192.168.0.21","192.168.0.22","192.168.0.23"],"infrastructurePeers":["192.168.0.17","192.168.0.18","192.168.0.19","192.168.0.27"],"subnetCidr":"192.168.0.0/24"}],"clientAsn":65000,"infrastructureAsn":65534},"subnets":[{"az":"eu-west-rbx-a","cidr":"192.168.0.0/24","displayName":"BgpFullSubnet","vlan":null}]},"updatedAt":"2023-04-12T11:30:00Z"},"summary":"10. Full BGP configuration: allowed prefixes and BGP range"},"11-Netboot":{"value":{"checksum":"2607903bd5c35916f466a9567bea891c","createdAt":"2023-04-12T11:00:00Z","currentState":{"configurationStatus":{"status":"READY"},"region":"eu-west-rbx","services":{"serviceRange":[{"cidr":"10.120.0.0/28","dhcp":{"dedicatedServerInterfaceAssociations":[{"ip":"10.120.0.56","netboot":true,"uuid":"12345678-aaaa-eeee-ffff-1234567890ab"}],"displayName":"my_netboot"},"dhcpConfigurationStatus":{"status":"READY"},"remainingIps":11,"remainingReservedIps":3,"serviceEndpoints":[],"subnetCidr":"10.120.0.0/24","usedIps":0,"usedReservedIps":1}]},"subnets":[{"az":"eu-west-rbx-a","cidr":"10.120.0.0/24","displayName":"NetbootSubnet","vlan":null}],"vrackId":"pn-3344556"},"currentTasks":[{"id":"f2a3b4c5-6d7e-8f9a-0b1c-2d3e4f5a6b7c","link":"/v2/vrackServices/resource/vrs-aaa-111-bbb-222","status":"PENDING","type":"VrackServicesUpdate"}],"id":"vrs-aaa-111-bbb-222","resourceStatus":"UPDATING","targetSpec":{"services":{"serviceRange":[{"cidr":"10.120.0.0/28","dhcp":{"dedicatedServerInterfaceAssociations":[{"ip":"10.120.0.56","uuid":"12345678-aaaa-eeee-ffff-1234567890ab"}],"displayName":"my_netboot"},"serviceEndpoints":[],"subnetCidr":"10.120.0.0/24"}]},"subnets":[{"az":"eu-west-rbx-a","cidr":"10.120.0.0/24","displayName":"NetbootSubnet","vlan":null}]},"updatedAt":"2023-04-12T11:10:00Z"},"summary":"11. Netboot configuration in an untagged subnet"}}}}},"404":{"description":"Error 404 response","content":{"application/json":{"schema":{"type":"object","description":"Common error model","properties":{"class":{"type":"string","description":"Class of the error"},"message":{"type":"string","description":"Error message"}}},"examples":{"Client::NotFound::VrackServicesNotFound":{"value":{"class":"Client::NotFound::VrackServicesNotFound","message":"VrackServices '{{.vrackServicesID}}' not found"}}}}}}},"tags":["Resource"],"x-developer-hub-navigation":[["Network","vRack Services","Services@@@20"]],"x-badges":[{"color":"green","label":"Stable production version"}],"x-code-samples":[{"lang":"python","label":"Python","source":"'''\nFirst, install the latest release of Python wrapper: $ pip install ovh\n'''\nimport json\nimport ovh\n\n# Instantiate an OVH Client.\n# You can generate new credentials with full access to your account on\n# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\nclient = ovh.Client(\n\tendpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n\tapplication_key='xxxxxxxxxx',    # Application Key\n\tapplication_secret='xxxxxxxxxx', # Application Secret\n\tconsumer_key='xxxxxxxxxx',       # Consumer Key\n)\n\nresult = client.get(\"/v2/vrackServices/resource/{vrackServicesId}\")\n\n# Pretty print\nprint(json.dumps(result, indent=4))"},{"lang":"php","label":"PHP","source":"<?php\n/**\n * First, download the latest release of PHP wrapper on github\n * And include this script into the folder with extracted files\n */\nrequire __DIR__ . '/vendor/autoload.php';\nuse \\Ovh\\Api;\n\n/**\n * Instantiate an OVH Client.\n * You can generate new credentials with full access to your account on\n * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\n */\n$ovh = new Api('xxxxxxxxxx',  // Application Key\n               'xxxxxxxxxx',  // Application Secret\n               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n               'xxxxxxxxxx'); // Consumer Key\n\n$result = $ovh->get(\"/v2/vrackServices/resource/{vrackServicesId}\");\n\nprint_r($result);\n?>"}],"x-iam-actions":[{"name":"vrackServices:apiovh:resource/get","required":true}]},"put":{"operationId":"editVrackService","summary":"Update a vRack Services","description":"> **Beta**: BGP (`bgp`) and DHCP/netboot (`services.serviceRange[].dhcp`) are Beta features: their behaviour and payload may still change.\n\nReplaces the target specification of the vRack Services, subnets and Service Endpoints, and applies it asynchronously.\n\nIt is the unique route handling any update on the vRack Services configuration. It works as following:\n1. You define a new target specification in the request payload,\n2. If this specification is validated, you get the resource with updated `targetSpec` and `checksum` values in return,\n3. The request is processed by one or several asynchronous tasks that aims to reconciliate the `currentState` with the `targetSpec`\n\n### Asynchronous processing\n* To follow this processing, the VrackServices resource can be polled with `GET /vrackServices/resource/{vrackServicesId}`<br>As soon as its `resourceStatus` is *READY*, the requested specification can be considered as applied to the vRack Services.\n* The `checksum` helps on detecting concurrency cases on update requests. If the polled `checksum` value differs from the one returned in response of your initial request, it means that processing of your request is completed and another request is being processed.\n* In case of processing error (that is `resourceStatus` in *ERROR*), the current vRack Services configuration is still active, but modification requests will be refused until the intervention of the support.\n* An overview on the asynchronous task(s) is available via the `currentTasks` attribute.<br>More details on a task are provided by the route `GET /vrackServices/resource/{vrackServicesId}/task/{taskId}`\n\n### DHCP / netboot limits\n* Untagged subnet only (`vlan: null`): a DHCP block on a tagged subnet is rejected\n* Service range required: the DHCP block is declared on `services.serviceRange[]`\n* vRack association required to bind a dedicatedServerInterface\n* Maximum 200 dedicatedServerInterface associations per subnet\n* `netboot` is read-only, derived from the subnet VLAN: always `true` today, since only untagged subnets accept a DHCP block\n\n### Seamless configuration actions\nThe request can combine any of the following seamless actions (meaning there won't be any cut of the service while updating):\n* create a Subnet\n* delete a Subnet without any Service Endpoint\n* update a Subnet:\n  * create one or several Service Endpoints\n  * add or remove dedicatedServerInterface associations in its DHCP block\n\nNote that a Subnet with several Service Endpoints can be created in the same payload\n\n### Not seamless configuration actions\nThe modification of the Subnet characteristics listed below will result in a service cut while processing the update as they are interpreted as the deletion of the existing Subnet and creation of a new Subnet with provided characteristics. The IPs that were given to the Managed Services will be reelected and may as a result change:\n* modifications on the Subnet `ServiceRange`\n* modifications on the Subnet `Vlan`\n* modifications on the Subnet `CIDR` \n\nThe embedded Service Endpoints will be also deleted and re-created which implies a flapping accessibility in the vRack for every related managed services.  \nNote that deleting a Subnet will also delete embedded Service Endpoints\n\n**Note** that omitting `dhcp` on a Service Range that carries one **WILL** remove its DHCP/netboot configuration (netboot stops for every bound dedicatedServerInterface): always resend the `dhcp` block returned by GET.\n\nThe `vrackId` is a read-only attribute as the association vRack/vRackServices is handled by the [vRack API](console-preview/?section=%2Fvrack&branch=v1)","security":[{"oAuth2AuthCode":[]}],"parameters":[{"in":"path","name":"vrackServicesId","description":"Vrack services ID","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/vrackServices.VrackServicesInput"},"examples":{"01-CreateEmptySubnet":{"value":{"checksum":"fa7cda24e4e94031fb70956edfdfb33a","targetSpec":{"subnets":[{"az":"eu-west-par-a","cidr":"10.120.0.0/24","vlan":2}]}},"summary":"01. Create an empty Subnet"},"02-CreateServiceEndpointInSubnet":{"value":{"checksum":"4c5d68ea2231e90db7495406018a0f5e","targetSpec":{"services":{"serviceRange":[{"cidr":"192.168.0.0/28","serviceEndpoints":[{"managedServiceURN":"urn:v1:eu:resource:storageNetApp:examples-00e1-4a3d-ae89-ac145675c8bb"}],"subnetCidr":"192.168.0.0/24"}]},"subnets":[{"az":"eu-west-par-a","cidr":"192.168.0.0/24","displayName":"My.Subnet","vlan":30}]}},"summary":"02. Create a Service Endpoint in an existing Subnet"},"03-CreateSubnetWithTwoServiceEndpoints":{"value":{"checksum":"af41611d8156aca52740fbb4347a02d0","targetSpec":{"services":{"serviceRange":[{"cidr":"10.120.0.0/28","serviceEndpoints":[{"managedServiceURN":"urn:v1:eu:resource:storageNetApp:examples-00e1-4a3d-ae89-ac145675c8bb"},{"managedServiceURN":"urn:v1:eu:resource:storageNetApp:examples-a77c-478e-93ce-06aa94cbd9d1"}],"subnetCidr":"10.120.0.0/24"}]},"subnets":[{"az":"eu-west-par-a","cidr":"10.120.0.0/24","vlan":35}]}},"summary":"03. Create a Subnet with two Service Endpoints"},"04-DeleteASubnetWithItsServiceEndpoints":{"value":{"checksum":"8b70a21702a41638e32778c6400e1848","targetSpec":{"subnets":[]}},"summary":"04. Delete a Subnet with its Service Endpoints"},"05-BgpWithRangeNoPrefixes":{"value":{"checksum":"c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7","targetSpec":{"bgp":{"allowedPrefixes":{"ipv4":[],"ipv6":[]},"bgpRange":[{"cidr":"192.168.0.16/28","clientPeers":["192.168.0.20"],"infrastructurePeers":["192.168.0.17","192.168.0.18","192.168.0.19","192.168.0.27"],"subnetCidr":"192.168.0.0/24"}]},"subnets":[{"az":"eu-west-par-a","cidr":"192.168.0.0/24","displayName":"BgpMinimalSubnet","vlan":null}]}},"summary":"05. Configure partial BGP: no prefixes, default ASN, one BGP range"},"06-BgpWithPrefixesNoRanges":{"value":{"checksum":"5e8b4f1c2d3a4b5c6d7e8f9a0b1c2d3e","targetSpec":{"bgp":{"allowedPrefixes":{"ipv4":["203.0.113.0/24"],"ipv6":[]},"bgpRange":[],"clientAsn":65000,"infrastructureAsn":65534},"subnets":[]}},"summary":"06. Configure partial BGP: one IPv4 prefix, no BGP range"},"07-FullBgpConfiguration":{"value":{"checksum":"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6","targetSpec":{"bgp":{"allowedPrefixes":{"ipv4":["203.0.113.0/24"],"ipv6":[]},"bgpRange":[{"cidr":"192.168.0.16/28","clientPeers":["192.168.0.20","192.168.0.21","192.168.0.22","192.168.0.23"],"infrastructurePeers":["192.168.0.17","192.168.0.18","192.168.0.19","192.168.0.27"],"subnetCidr":"192.168.0.0/24"}],"clientAsn":65000,"infrastructureAsn":65534},"subnets":[{"az":"eu-west-par-a","cidr":"192.168.0.0/24","displayName":"BgpFullSubnet","vlan":null}]}},"summary":"07. Configure complete BGP: one prefix and one BGP range"},"08-UpdateBgpAllowedPrefixes":{"value":{"checksum":"b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7","targetSpec":{"bgp":{"allowedPrefixes":{"ipv4":["192.0.2.0/24","198.51.100.0/24"],"ipv6":[]},"bgpRange":[{"cidr":"192.168.0.16/28","clientPeers":["192.168.0.20","192.168.0.21","192.168.0.22","192.168.0.23"],"infrastructurePeers":["192.168.0.17","192.168.0.18","192.168.0.19","192.168.0.27"],"subnetCidr":"192.168.0.0/24"}],"clientAsn":65000,"infrastructureAsn":65534},"subnets":[{"az":"eu-west-par-a","cidr":"192.168.0.0/24","displayName":"BgpFullSubnet","vlan":null}]}},"summary":"08. Update BGP allowed prefixes: replace with two new IPv4"},"09-AttachIpBlockToBgp":{"value":{"checksum":"2607903bd5c35916f466a9567bea891c","targetSpec":{"bgp":{"allowedPrefixes":{"ipv4":["203.0.113.0/24"],"ipv6":[]},"bgpRange":[{"cidr":"192.168.0.16/28","clientPeers":["192.168.0.20","192.168.0.21"],"infrastructurePeers":["192.168.0.17","192.168.0.18","192.168.0.19","192.168.0.27"],"subnetCidr":"192.168.0.0/24"}],"clientAsn":64512,"infrastructureAsn":65534},"subnets":[{"az":"eu-west-par-a","cidr":"192.168.0.0/24","displayName":"BgpSubnet","vlan":null}]}},"summary":"09. Attach public IP Block to vRack Services BGP"},"10-NetbootConfigured":{"value":{"checksum":"2607903bd5c35916f466a9567bea891c","targetSpec":{"services":{"serviceRange":[{"cidr":"10.120.0.0/28","dhcp":{"dedicatedServerInterfaceAssociations":[{"ip":"10.120.0.56","uuid":"12345678-aaaa-eeee-ffff-1234567890ab"}],"displayName":"my_netboot"},"serviceEndpoints":[],"subnetCidr":"10.120.0.0/24"}]},"subnets":[{"az":"eu-west-rbx-a","cidr":"10.120.0.0/24","displayName":"NetbootSubnet","vlan":null}]}},"summary":"10. A VNIC is attached to a private IP in an untagged VLAN subnet"}}}}},"responses":{"200":{"description":"successful operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/vrackServices.VrackServices"},"examples":{"01-CreateEmptySubnet":{"value":{"checksum":"fa7cda24e4e94031fb70956edfdfb33a","createdAt":"2023-03-10T11:00:00Z","currentState":{"bgp":null,"configurationStatus":{"reason":"MISSING_VRACK_ASSOCIATION","status":"DRAFT"},"region":"eu-west-rbx","services":{"serviceRange":[]},"subnets":[],"vrackId":null},"currentTasks":[{"id":"e368bc10-6e20-46d5-a31e-57fc3f38f98f","link":"/v2/vrackServices/resource/vrs-ak0-ok0-sy5-8py","status":"PENDING","type":"VrackServicesUpdate"}],"id":"vrs-ak0-ok0-sy5-8py","resourceStatus":"UPDATING","targetSpec":{"subnets":[{"az":"eu-west-rbx-a","cidr":"10.120.0.0/24","vlan":2}]},"updatedAt":"2023-03-10T12:42:00Z"},"summary":"01. Create an empty Subnet"},"02-CreateServiceEndpointInSubnet":{"value":{"checksum":"4c5d68ea2231e90db7495406018a0f5e","createdAt":"2023-03-10T10:00:00Z","currentState":{"bgp":null,"configurationStatus":{"reason":"MISSING_VRACK_ASSOCIATION","status":"DRAFT"},"region":"eu-west-gra","services":null,"subnets":[{"az":"eu-west-gra-a","cidr":"192.168.0.0/24","displayName":"My.Subnet","vlan":30}],"vrackId":null},"currentTasks":[{"id":"3e4026f8-157e-49b4-a9fc-42433bb0ba27","link":"/v2/vrackServices/resource/vrs-ar7-72w-poh-3qe","status":"PENDING","type":"VrackServicesUpdate"}],"id":"vrs-ar7-72w-poh-3qe","resourceStatus":"UPDATING","targetSpec":{"services":{"serviceRange":[{"cidr":"192.168.0.0/28","serviceEndpoints":[{"managedServiceURN":"urn:v1:eu:resource:storageNetApp:examples-00e1-4a3d-ae89-ac145675c8bb"}],"subnetCidr":"192.168.0.0/24"}]},"subnets":[{"az":"eu-west-gra-a","cidr":"192.168.0.0/24","displayName":"My.Subnet","vlan":30}]},"updatedAt":"2023-03-10T11:22:00Z"},"summary":"02. Create a Service Endpoint in an existing Subnet"},"03-CreateSubnetWithTwoServiceEndpoints":{"value":{"checksum":"af41611d8156aca52740fbb4347a02d0","createdAt":"2023-03-10T11:00:00Z","currentState":{"bgp":null,"configurationStatus":{"reason":"MISSING_VRACK_ASSOCIATION","status":"DRAFT"},"region":"eu-west-rbx","services":{"serviceRange":[]},"subnets":[],"vrackId":null},"currentTasks":[{"id":"25ef4fba-6ca6-4848-858e-5ddb93aed760","link":"/v2/vrackServices/resource/vrs-asw-dtl-lym-wza","status":"PENDING","type":"VrackServicesUpdate"}],"id":"vrs-asw-dtl-lym-wza","resourceStatus":"UPDATING","targetSpec":{"services":{"serviceRange":[{"cidr":"10.120.0.0/28","serviceEndpoints":[{"managedServiceURN":"urn:v1:eu:resource:storageNetApp:examples-00e1-4a3d-ae89-ac145675c8bb"},{"managedServiceURN":"urn:v1:eu:resource:storageNetApp:examples-a77c-478e-93ce-06aa94cbd9d1"}],"subnetCidr":"10.120.0.0/24"}]},"subnets":[{"az":"eu-west-rbx-a","cidr":"10.120.0.0/24","vlan":35}]},"updatedAt":"2023-03-10T12:42:00Z"},"summary":"03. Create a Subnet with two Service Endpoints"},"04-DeleteASubnetWithItsServiceEndpoints":{"value":{"checksum":"8b70a21702a41638e32778c6400e1848","createdAt":"2023-03-10T08:00:00Z","currentState":{"bgp":null,"configurationStatus":{"reason":"MISSING_VRACK_ASSOCIATION","status":"DRAFT"},"region":"eu-west-rbx","services":null,"subnets":[{"az":"eu-west-rbx-a","cidr":"172.16.0.0/24","displayName":"MySub","vlan":30}],"vrackId":"pn-1234567"},"currentTasks":[{"id":"a23654a5-cec7-4c49-8c37-ba5311f0f2e8","link":"/v2/vrackServices/resource/vrs-anb-dic-dsi-raw","status":"PENDING","type":"VrackServicesUpdate"}],"id":"vrs-anb-dic-dsi-raw","resourceStatus":"UPDATING","targetSpec":{"subnets":[]},"updatedAt":"2023-06-10T08:10:00Z"},"summary":"04. Delete a Subnet with its Service Endpoints"},"05-BgpWithRangeNoPrefixes":{"value":{"checksum":"c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7","createdAt":"2023-04-12T10:00:00Z","currentState":{"bgp":{"allowedPrefixes":{"ipv4":[],"ipv6":[]},"bandwidth":5000,"bgpRange":[],"clientAsn":64512,"configurationStatus":{"reason":"MISSING_ALLOWED_PREFIX,MISSING_BGP_RANGE","status":"DRAFT"},"iam":{"displayName":"bgp-hxe-xmy-xqg-ouo","id":"f3e7a00d-21c8-4d5c-8f6f-dcd27e1e9077","state":"OK","urn":"urn:v1:eu:resource:vrackServices:vrs-0ms-ahw-d8e-k26/bgp/bgp-hxe-xmy-xqg-ouo"},"id":"bgp-hxe-xmy-xqg-ouo","infrastructureAsn":65534},"configurationStatus":{"reason":"MISSING_VRACK_ASSOCIATION","status":"DRAFT"},"region":"eu-west-rbx","services":null,"subnets":[{"az":"eu-west-rbx-a","cidr":"192.168.0.0/24","displayName":"BgpMinimalSubnet","vlan":null}],"vrackId":"pn-1122335"},"currentTasks":[{"id":"b1c2d3e4-5f6a-7b8c-9d0e-1f2a3b4c5d6e","link":"/v2/vrackServices/resource/vrs-0ms-ahw-d8e-k26","status":"PENDING","type":"VrackServicesUpdate"}],"id":"vrs-0ms-ahw-d8e-k26","resourceStatus":"UPDATING","targetSpec":{"bgp":{"allowedPrefixes":{"ipv4":[],"ipv6":[]},"bgpRange":[{"cidr":"192.168.0.16/28","clientPeers":["192.168.0.20"],"infrastructurePeers":["192.168.0.17","192.168.0.18","192.168.0.19","192.168.0.27"],"subnetCidr":"192.168.0.0/24"}]},"subnets":[{"az":"eu-west-rbx-a","cidr":"192.168.0.0/24","displayName":"BgpMinimalSubnet","vlan":null}]},"updatedAt":"2023-04-12T10:10:00Z"},"summary":"05. Configure partial BGP: no prefixes, default ASN, one BGP range"},"06-BgpWithPrefixesNoRanges":{"value":{"checksum":"5e8b4f1c2d3a4b5c6d7e8f9a0b1c2d3e","createdAt":"2023-04-12T09:00:00Z","currentState":{"bgp":null,"configurationStatus":{"status":"READY"},"region":"eu-west-rbx","services":null,"subnets":[],"vrackId":"pn-2233445"},"currentTasks":[{"id":"76e1d2c3-4b5a-4321-9876-1a2b3c4d5e6f","link":"/v2/vrackServices/resource/vrs-deu-rh5-wg2-8d7","status":"PENDING","type":"VrackServicesUpdate"}],"id":"vrs-deu-rh5-wg2-8d7","resourceStatus":"UPDATING","targetSpec":{"bgp":{"allowedPrefixes":{"ipv4":["203.0.113.0/24"],"ipv6":[]},"bgpRange":[],"clientAsn":65000,"infrastructureAsn":65534},"subnets":[]},"updatedAt":"2023-04-12T09:10:00Z"},"summary":"06. Configure partial BGP: one IPv4 prefix, no BGP range"},"07-FullBgpConfiguration":{"value":{"checksum":"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6","createdAt":"2023-04-12T11:00:00Z","currentState":{"bgp":null,"configurationStatus":{"status":"READY"},"region":"eu-west-rbx","services":null,"subnets":[{"az":"eu-west-rbx-a","cidr":"192.168.0.0/24","displayName":"BgpFullSubnet","vlan":null}],"vrackId":"pn-3344556"},"currentTasks":[{"id":"ed6c7b8a-9012-4321-abcd-fedcba987654","link":"/v2/vrackServices/resource/vrs-l75-h31-keg-eyt","status":"PENDING","type":"VrackServicesUpdate"}],"id":"vrs-l75-h31-keg-eyt","resourceStatus":"UPDATING","targetSpec":{"bgp":{"allowedPrefixes":{"ipv4":["203.0.113.0/24"],"ipv6":[]},"bgpRange":[{"cidr":"192.168.0.16/28","clientPeers":["192.168.0.20","192.168.0.21","192.168.0.22","192.168.0.23"],"infrastructurePeers":["192.168.0.17","192.168.0.18","192.168.0.19","192.168.0.27"],"subnetCidr":"192.168.0.0/24"}],"clientAsn":65000,"infrastructureAsn":65534},"subnets":[{"az":"eu-west-rbx-a","cidr":"192.168.0.0/24","displayName":"BgpFullSubnet","vlan":null}]},"updatedAt":"2023-04-12T11:30:00Z"},"summary":"07. Configure complete BGP: one prefix and one BGP range"},"08-UpdateBgpAllowedPrefixes":{"value":{"checksum":"b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7","createdAt":"2023-04-12T11:00:00Z","currentState":{"bgp":{"allowedPrefixes":{"ipv4":["203.0.113.0/24"],"ipv6":[]},"bandwidth":5000,"bgpRange":[{"cidr":"192.168.0.16/28","clientPeers":["192.168.0.20","192.168.0.21","192.168.0.22","192.168.0.23"],"infrastructurePeers":["192.168.0.17","192.168.0.18","192.168.0.19","192.168.0.27"],"subnetCidr":"192.168.0.0/24"}],"clientAsn":65000,"configurationStatus":{"status":"READY"},"iam":{"displayName":"bgp-2i5-5at-4an-678","id":"f3e7a00d-21c8-4d5c-8f6f-dcd27e1e9077","state":"OK","urn":"urn:v1:eu:resource:vrackServices:vrs-l75-h31-keg-eyt/bgp/bgp-2i5-5at-4an-678"},"id":"bgp-2i5-5at-4an-678","infrastructureAsn":65534},"configurationStatus":{"status":"READY"},"region":"eu-west-rbx","services":null,"subnets":[{"az":"eu-west-rbx-a","cidr":"192.168.0.0/24","displayName":"BgpFullSubnet","vlan":null}],"vrackId":"pn-3344556"},"currentTasks":[{"id":"f1a2b3c4-5d6e-7f8a-9b0c-1d2e3f4a5b6c","link":"/v2/vrackServices/resource/vrs-l75-h31-keg-eyt","status":"PENDING","type":"VrackServicesUpdate"}],"id":"vrs-l75-h31-keg-eyt","resourceStatus":"UPDATING","targetSpec":{"bgp":{"allowedPrefixes":{"ipv4":["192.0.2.0/24","198.51.100.0/24"],"ipv6":[]},"bgpRange":[{"cidr":"192.168.0.16/28","clientPeers":["192.168.0.20","192.168.0.21","192.168.0.22","192.168.0.23"],"infrastructurePeers":["192.168.0.17","192.168.0.18","192.168.0.19","192.168.0.27"],"subnetCidr":"192.168.0.0/24"}],"clientAsn":65000,"infrastructureAsn":65534},"subnets":[{"az":"eu-west-rbx-a","cidr":"192.168.0.0/24","displayName":"BgpFullSubnet","vlan":null}]},"updatedAt":"2023-04-12T11:30:00Z"},"summary":"08. Update BGP allowed prefixes: replace with two new IPv4"},"09-AttachIpBlockToBgp":{"value":{"checksum":"2607903bd5c35916f466a9567bea891c","createdAt":"2023-04-12T11:00:00Z","currentState":{"bgp":{"allowedPrefixes":{"ipv4":[],"ipv6":[]},"bandwidth":5000,"bgpRange":[{"cidr":"192.168.0.16/28","clientPeers":["192.168.0.20","192.168.0.21"],"infrastructurePeers":["192.168.0.17","192.168.0.18","192.168.0.19","192.168.0.27"],"subnetCidr":"192.168.0.0/24"}],"clientAsn":64512,"configurationStatus":{"status":"READY"},"iam":{"displayName":"bgp-66s-h5q-877-d0g","id":"f3e7a00d-21c8-4d5c-8f6f-dcd27e1e9077","state":"OK","urn":"urn:v1:eu:resource:vrackServices:vrs-u28-sms-ol1-try/bgp/bgp-66s-h5q-877-d0g"},"id":"bgp-66s-h5q-877-d0g","infrastructureAsn":65534},"configurationStatus":{"status":"READY"},"region":"eu-west-rbx","services":null,"subnets":[{"az":"eu-west-rbx-a","cidr":"192.168.0.0/24","displayName":"BgpSubnet","vlan":null}],"vrackId":"pn-3344556"},"currentTasks":[{"id":"f2a3b4c5-6d7e-8f9a-0b1c-2d3e4f5a6b7c","link":"/v2/vrackServices/resource/vrs-u28-sms-ol1-try","status":"PENDING","type":"VrackServicesUpdate"}],"id":"vrs-u28-sms-ol1-try","resourceStatus":"UPDATING","targetSpec":{"bgp":{"allowedPrefixes":{"ipv4":["203.0.113.0/24"],"ipv6":[]},"bgpRange":[{"cidr":"192.168.0.16/28","clientPeers":["192.168.0.20","192.168.0.21"],"infrastructurePeers":["192.168.0.17","192.168.0.18","192.168.0.19","192.168.0.27"],"subnetCidr":"192.168.0.0/24"}],"clientAsn":64512,"infrastructureAsn":65534},"subnets":[{"az":"eu-west-rbx-a","cidr":"192.168.0.0/24","displayName":"BgpSubnet","vlan":null}]},"updatedAt":"2023-04-12T11:10:00Z"},"summary":"09. Attach public IP Block to vRack Services BGP"},"10-NetbootConfigured":{"value":{"checksum":"2607903bd5c35916f466a9567bea891c","createdAt":"2023-04-12T11:00:00Z","currentState":{"configurationStatus":{"status":"READY"},"region":"eu-west-rbx","services":null,"subnets":[{"az":"eu-west-rbx-a","cidr":"10.120.0.0/24","displayName":"NetbootSubnet","vlan":null}],"vrackId":"pn-3344556"},"currentTasks":[{"id":"f2a3b4c5-6d7e-8f9a-0b1c-2d3e4f5a6b7c","link":"/v2/vrackServices/resource/vrs-ane-tbo-ot1-cfg","status":"PENDING","type":"VrackServicesUpdate"}],"id":"vrs-ane-tbo-ot1-cfg","resourceStatus":"UPDATING","targetSpec":{"services":{"serviceRange":[{"cidr":"10.120.0.0/28","dhcp":{"dedicatedServerInterfaceAssociations":[{"ip":"10.120.0.56","uuid":"12345678-aaaa-eeee-ffff-1234567890ab"}],"displayName":"my_netboot"},"serviceEndpoints":[],"subnetCidr":"10.120.0.0/24"}]},"subnets":[{"az":"eu-west-rbx-a","cidr":"10.120.0.0/24","displayName":"NetbootSubnet","vlan":null}]},"updatedAt":"2023-04-12T11:10:00Z"},"summary":"10. A VNIC is attached to a private IP in an untagged VLAN subnet, netboot mode"}}}}},"400":{"description":"Error 400 response","content":{"application/json":{"schema":{"type":"object","description":"Common error model","properties":{"class":{"type":"string","description":"Class of the error"},"message":{"type":"string","description":"Error message"}}},"examples":{"Client::BadRequest::ChecksumBadFormat":{"value":{"class":"Client::BadRequest::ChecksumBadFormat","message":"Invalid Checksum format: '{{.providedChecksum}}' is not a valid MD5 hash"}},"Client::BadRequest::DHCPAssociationIPBadFormat":{"value":{"class":"Client::BadRequest::DHCPAssociationIPBadFormat","message":"Invalid DHCP on Subnet '{{.subnetCidr}}': DHCP association IP '{{.dhcpAssociationIP}}' is not a valid IP address"}},"Client::BadRequest::DHCPAssociationIPDuplicated":{"value":{"class":"Client::BadRequest::DHCPAssociationIPDuplicated","message":"Invalid DHCP on Subnet '{{.subnetCidr}}': DHCP association IP '{{.dhcpAssociationIP}}' is duplicated within the subnet"}},"Client::BadRequest::DHCPAssociationIPInBGPRange":{"value":{"class":"Client::BadRequest::DHCPAssociationIPInBGPRange","message":"Invalid DHCP on Subnet '{{.subnetCidr}}': DHCP association IP '{{.dhcpAssociationIP}}' must not be within the BGP range CIDR '{{.bgpRangeCidr}}'"}},"Client::BadRequest::DHCPAssociationIPInServiceRange":{"value":{"class":"Client::BadRequest::DHCPAssociationIPInServiceRange","message":"Invalid DHCP on Subnet '{{.subnetCidr}}': DHCP association IP '{{.dhcpAssociationIP}}' must not be within the ServiceRange CIDR '{{.serviceRangeCidr}}'"}},"Client::BadRequest::DHCPAssociationIPNotInSubnet":{"value":{"class":"Client::BadRequest::DHCPAssociationIPNotInSubnet","message":"Invalid DHCP on Subnet '{{.subnetCidr}}': DHCP association IP '{{.dhcpAssociationIP}}' is not contained within subnet CIDR '{{.subnetCidr}}'"}},"Client::BadRequest::DHCPAssociationIPReserved":{"value":{"class":"Client::BadRequest::DHCPAssociationIPReserved","message":"Invalid DHCP on Subnet '{{.subnetCidr}}': DHCP association IP '{{.dhcpAssociationIP}}' must not be the subnet's first or last IP"}},"Client::BadRequest::DHCPAssociationLimitExceeded":{"value":{"class":"Client::BadRequest::DHCPAssociationLimitExceeded","message":"Invalid DHCP on Subnet '{{.subnetCidr}}': DHCP associations count ({{.dhcpAssociationCount}}) exceeds the maximum of {{.dhcpAssociationLimit}} per subnet"}},"Client::BadRequest::DHCPNetbootRequiresUntaggedSubnet":{"value":{"class":"Client::BadRequest::DHCPNetbootRequiresUntaggedSubnet","message":"Invalid DHCP on Subnet '{{.subnetCidr}}': DHCP/netboot requires an untagged subnet, VLAN {{.subnetVlan}} is not supported"}},"Client::BadRequest::DHCPRequiresServiceRange":{"value":{"class":"Client::BadRequest::DHCPRequiresServiceRange","message":"Invalid DHCP on Subnet '{{.subnetCidr}}': DHCP requires a service range on the subnet"}},"Client::BadRequest::DedicatedServerInterfaceAlreadyBound":{"value":{"class":"Client::BadRequest::DedicatedServerInterfaceAlreadyBound","message":"Dedicated server interface(s) '{{.dedicatedServerInterfaceUUID}}' already bound to a vRackServices: a dedicated server interface can be bound to only one vRackServices at a time"}},"Client::BadRequest::DedicatedServerInterfaceDuplicated":{"value":{"class":"Client::BadRequest::DedicatedServerInterfaceDuplicated","message":"Dedicated server interface '{{.dedicatedServerInterfaceUUID}}' is requested multiple times: a dedicated server interface can be bound only once in a vRackServices specification"}},"Client::BadRequest::DedicatedServerInterfaceNotEligible":{"value":{"class":"Client::BadRequest::DedicatedServerInterfaceNotEligible","message":"Dedicated server interface(s) '{{.dedicatedServerInterfaceUUID}}' not eligible: a dedicated server interface must be bootable, in the vRack of the vRackServices, in the AZ of its Subnet, and the requester needs the IAM action 'dedicatedServer:apiovh:vrackServices/vnicAttach' on its dedicated server to be bound to the vRackServices"}},"Client::BadRequest::DedicatedServerInterfaceUUIDEmpty":{"value":{"class":"Client::BadRequest::DedicatedServerInterfaceUUIDEmpty","message":"Invalid DHCP on Subnet '{{.subnetCidr}}': DHCP association dedicated server interface UUID must not be empty"}},"Client::BadRequest::FeatureUnavailable":{"value":{"class":"Client::BadRequest::FeatureUnavailable","message":"Feature(s) '{{.unavailableFeatures}}' unavailable: a feature can only be used where GET /vrackServices/reference/featureAvailability lists it as available"}},"Client::BadRequest::InvalidJSON":{"value":{"class":"Client::BadRequest::InvalidJSON","message":"The input that you provided isn't valid JSON or not well formatted"}},"Client::BadRequest::ManagedServiceAlreadyAttached":{"value":{"class":"Client::BadRequest::ManagedServiceAlreadyAttached","message":"Managed Service '{{.managedServiceURN}}' is already attached to VrackServices '{{.vrackServicesID}}': a Managed Service can be attached to only one vRackServices at a time"}},"Client::BadRequest::ManagedServiceDuplicated":{"value":{"class":"Client::BadRequest::ManagedServiceDuplicated","message":"Managed Service '{{.managedServiceURN}}' is requested multiple times: a Managed Service can be referenced only once in a vRackServices specification"}},"Client::BadRequest::ManagedServiceIncompatibleType":{"value":{"class":"Client::BadRequest::ManagedServiceIncompatibleType","message":"Managed Service '{{.managedServiceURN}}' has type '{{.managedServiceType}}': the type must be compatible with vRackServices"}},"Client::BadRequest::ManagedServiceNotAvailable":{"value":{"class":"Client::BadRequest::ManagedServiceNotAvailable","message":"Managed Service '{{.managedServiceURN}}' is in state '{{.managedServiceState}}': the Managed Service must be active to be attached to the vRackServices"}},"Client::BadRequest::ManagedServiceRegionMismatch":{"value":{"class":"Client::BadRequest::ManagedServiceRegionMismatch","message":"Managed Service '{{.managedServiceURN}}' is in region '{{.managedServiceRegion}}': a Managed Service must be in the vRackServices region '{{.vrackServicesRegion}}'"}},"Client::BadRequest::ManagedServiceURNBadFormat":{"value":{"class":"Client::BadRequest::ManagedServiceURNBadFormat","message":"Invalid Managed Service '{{.managedServiceURN}}': managedServiceURN must be a valid IAM resourceURN"}},"Client::BadRequest::ServiceRangeCIDRNotInSubnetCIDR":{"value":{"class":"Client::BadRequest::ServiceRangeCIDRNotInSubnetCIDR","message":"Invalid Subnet '{{.subnetCidr}}': ServiceRange CIDR '{{.serviceRangeCidr}}' is not a sub-network of the Subnet CIDR"}},"Client::BadRequest::ServiceRangeCIDRNotNetworkIP":{"value":{"class":"Client::BadRequest::ServiceRangeCIDRNotNetworkIP","message":"Invalid Subnet '{{.subnetCidr}}': ServiceRange CIDR '{{.serviceRangeCidr}}' is not a base IP (network address)"}},"Client::BadRequest::ServiceRangeCIDRNotPrivateNetwork":{"value":{"class":"Client::BadRequest::ServiceRangeCIDRNotPrivateNetwork","message":"Invalid Subnet '{{.subnetCidr}}': ServiceRange CIDR '{{.serviceRangeCidr}}' is not a private network address (see RFC1918)"}},"Client::BadRequest::ServiceRangeCIDRPrefixLengthOutOfRange":{"value":{"class":"Client::BadRequest::ServiceRangeCIDRPrefixLengthOutOfRange","message":"Invalid Subnet '{{.subnetCidr}}': ServiceRange CIDR '{{.serviceRangeCidr}}' prefix length is out of range [{{.serviceRangeCidrPrefixLengthMin}}, {{.serviceRangeCidrPrefixLengthMax}}]"}},"Client::BadRequest::ServiceRangeIPsCapacityExceeded":{"value":{"class":"Client::BadRequest::ServiceRangeIPsCapacityExceeded","message":"Invalid Subnet '{{.subnetCidr}}': requested ServiceEndpoints require {{.serviceEndpointsRequiredIPsCount}} IPs, it exceeds the ServiceRange '{{.serviceRangeCidr}}' IPs capacity ({{.serviceRangeIPsCapacity}})"}},"Client::BadRequest::SubnetCIDRNotNetworkIP":{"value":{"class":"Client::BadRequest::SubnetCIDRNotNetworkIP","message":"Invalid Subnet '{{.subnetCidr}}': Subnet CIDR '{{.subnetCidr}}' is not a base IP (network address)"}},"Client::BadRequest::SubnetCIDRNotPrivateNetwork":{"value":{"class":"Client::BadRequest::SubnetCIDRNotPrivateNetwork","message":"Invalid Subnet '{{.subnetCidr}}': Subnet CIDR '{{.subnetCidr}}' must be a private network address (see RFC 1918 for IPv4, RFC 4193 for IPv6)"}},"Client::BadRequest::SubnetCIDROverlap":{"value":{"class":"Client::BadRequest::SubnetCIDROverlap","message":"Subnet CIDR '{{.subnetCidr}}' overlaps '{{.subnetCidr2}}': Subnet CIDRs must not overlap each other"}},"Client::BadRequest::SubnetCIDRPrefixLengthIncorrect":{"value":{"class":"Client::BadRequest::SubnetCIDRPrefixLengthIncorrect","message":"Invalid Subnet '{{.subnetCidr}}': Subnet CIDR '{{.subnetCidr}}' prefix length must be between {{.subnetCidrPrefixLengthMin}} and {{.subnetCidrPrefixLengthMax}} ('{{.ipVersion}}')"}},"Client::BadRequest::SubnetDisplayNameBadFormat":{"value":{"class":"Client::BadRequest::SubnetDisplayNameBadFormat","message":"Invalid Subnet '{{.subnetCidr}}': invalid displayName, expected pattern ^[ a-zA-Z0-9-_.]{0,40}$"}},"Client::BadRequest::SubnetLimitExceeded":{"value":{"class":"Client::BadRequest::SubnetLimitExceeded","message":"Too many Subnets: at most {{.subnetLimit}} Subnets are allowed per vRackServices"}},"Client::BadRequest::SubnetVLANOutOfRange":{"value":{"class":"Client::BadRequest::SubnetVLANOutOfRange","message":"Invalid Subnet '{{.subnetCidr}}': VLAN {{.subnetVlan}} is out of range [{{.subnetVlanMin}}, {{.subnetVlanMax}}]"}},"Client::BadRequest::VrackServicesDHCPRequiresVrack":{"value":{"class":"Client::BadRequest::VrackServicesDHCPRequiresVrack","message":"VrackServices '{{.vrackServicesID}}' is not associated to a vRack: DHCP/netboot requires the vRack association"}}}}}},"404":{"description":"Error 404 response","content":{"application/json":{"schema":{"type":"object","description":"Common error model","properties":{"class":{"type":"string","description":"Class of the error"},"message":{"type":"string","description":"Error message"}}},"examples":{"Client::NotFound::ManagedServiceNotFound":{"value":{"class":"Client::NotFound::ManagedServiceNotFound","message":"Managed Service '{{.managedServiceURN}}' not found"}},"Client::NotFound::VrackServicesNotFound":{"value":{"class":"Client::NotFound::VrackServicesNotFound","message":"VrackServices '{{.vrackServicesID}}' not found"}}}}}},"412":{"description":"Error 412 response","content":{"application/json":{"schema":{"type":"object","description":"Common error model","properties":{"class":{"type":"string","description":"Class of the error"},"message":{"type":"string","description":"Error message"}}},"examples":{"Client::PreconditionFailed::ChecksumMismatch":{"value":{"class":"Client::PreconditionFailed::ChecksumMismatch","message":"Provided checksum '{{.providedChecksum}}' does not match the current one '{{.currentChecksum}}'. Please read the last state of the vRackServices again, it may have been updated"}}}}}},"423":{"description":"Error 423 response","content":{"application/json":{"schema":{"type":"object","description":"Common error model","properties":{"class":{"type":"string","description":"Class of the error"},"message":{"type":"string","description":"Error message"}}},"examples":{"Client::Locked::AllowedPrefixLocked":{"value":{"class":"Client::Locked::AllowedPrefixLocked","message":"Allowed prefix '{{.allowedPrefix}}' is already locked: an allowed prefix can be part of only one processing request at a time"}},"Client::Locked::DedicatedServerInterfaceLocked":{"value":{"class":"Client::Locked::DedicatedServerInterfaceLocked","message":"Dedicated server interface '{{.dedicatedServerInterfaceUUID}}' is already locked: a dedicated server interface can be part of only one processing request at a time"}},"Client::Locked::ManagedServiceLocked":{"value":{"class":"Client::Locked::ManagedServiceLocked","message":"Managed Service '{{.managedServiceURN}}' is already locked: a Managed Service can be part of only one processing request at a time"}},"Client::Locked::VrackServicesLocked":{"value":{"class":"Client::Locked::VrackServicesLocked","message":"VrackServices '{{.vrackServicesID}}' is already locked: a vRackServices can process only one request at a time"}}}}}}},"tags":["Resource"],"x-developer-hub-navigation":[["Network","vRack Services","Services@@@30"]],"x-badges":[{"color":"green","label":"Stable production version"}],"x-code-samples":[{"lang":"python","label":"Python","source":"'''\nFirst, install the latest release of Python wrapper: $ pip install ovh\n'''\nimport json\nimport ovh\n\n# Instantiate an OVH Client.\n# You can generate new credentials with full access to your account on\n# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\nclient = ovh.Client(\n\tendpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n\tapplication_key='xxxxxxxxxx',    # Application Key\n\tapplication_secret='xxxxxxxxxx', # Application Secret\n\tconsumer_key='xxxxxxxxxx',       # Consumer Key\n)\n\n# Request body type: vrackServices.VrackServicesInput\nresult = client.put(\"/v2/vrackServices/resource/{vrackServicesId}\",\n\tchecksum = None, # Computed hash used to control concurrent modification requests. Here, it represents the target specification value the request is based on. (type: string)\n\ttargetSpec = None, # Requested target specification (type: vrackServices.VrackServicesTargetSpec)\n)\n\n# Pretty print\nprint(json.dumps(result, indent=4))"},{"lang":"php","label":"PHP","source":"<?php\n/**\n * First, download the latest release of PHP wrapper on github\n * And include this script into the folder with extracted files\n */\nrequire __DIR__ . '/vendor/autoload.php';\nuse \\Ovh\\Api;\n\n/**\n * Instantiate an OVH Client.\n * You can generate new credentials with full access to your account on\n * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\n */\n$ovh = new Api('xxxxxxxxxx',  // Application Key\n               'xxxxxxxxxx',  // Application Secret\n               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n               'xxxxxxxxxx'); // Consumer Key\n\n// Request body type: vrackServices.VrackServicesInput\n$result = $ovh->put(\"/v2/vrackServices/resource/{vrackServicesId}\", array(\n\tchecksum => null, // Computed hash used to control concurrent modification requests. Here, it represents the target specification value the request is based on. (type: string)\n\ttargetSpec => null, // Requested target specification (type: vrackServices.VrackServicesTargetSpec)\n));\n\nprint_r($result);\n?>"}],"x-iam-actions":[{"name":"vrackServices:apiovh:resource/edit","description":"Update the vRack Services configuration","required":true},{"name":"vrackServices:apiovh:storageNetApp/attach","description":"Required to add an Enterprise File Storage into the vRack Services","required":false},{"name":"vrackServices:apiovh:storageNetApp/detach","description":"Required to remove an Enterprise File Storage from the vRack Services","required":false},{"name":"storageNetApp:apiovh:vrackServices/attach","description":"Attach an Enterprise File Storage service to a vRack Services","required":false},{"name":"vrackServices:apiovh:nasHA/attach","description":"Required to add a HA-NAS into the vRack Services","required":false},{"name":"vrackServices:apiovh:nasHA/detach","description":"Required to remove a HA-NAS from the vRack Services","required":false},{"name":"nasHA:apiovh:vrackServices/attach","description":"Attach a HA-NAS service to a vRack Services","required":false},{"name":"vrackServices:apiovh:bgp/ip/additionalIp/move","description":"Required to add a public IP Block (allowed prefix) onto the vRack Services's BGP","required":false},{"name":"ip:apiovh:move","description":"Action on the public IP block (allowed prefix) to move it onto the vRack Services's BGP","required":false},{"name":"vrackServices:apiovh:dedicatedServer/vnicAttach","description":"Required to attach a dedicated server network interface into the vRack Services","required":false},{"name":"dedicatedServer:apiovh:vrackServices/vnicAttach","description":"Action on the dedicated server to attach its network interface to the vRack Services","required":false},{"name":"vrackServices:apiovh:dedicatedServer/vnicDetach","description":"Required to detach a dedicated server network interface from the vRack Services","required":false},{"name":"dedicatedServer:apiovh:vrackServices/vnicDetach","description":"Action on the dedicated server to detach its network interface from the vRack Services","required":false}]}},"/vrackServices/resource/{vrackServicesId}/eligibleDedicatedServerInterfaces":{"get":{"operationId":"getVrackServiceEligibleDedicatedServerInterfaces","summary":"List eligible server interfaces","description":"Returns, by availability zone, the dedicated server interfaces that can be added to the vRack Services, with the server each one belongs to.","security":[{"oAuth2AuthCode":[]}],"parameters":[{"in":"header","name":"X-Pagination-Cursor","description":"Pagination cursor","schema":{"type":"string"}},{"in":"header","name":"X-Pagination-Size","description":"Pagination size","schema":{"type":"integer"}},{"in":"path","name":"vrackServicesId","description":"Vrack services ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"successful operation","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/vrackServices.EligibleDedicatedServerInterface"}},"examples":{"Example":{"value":[{"availabilityZone":"eu-west-rbx-a","dedicatedServerInterfaces":[{"serverName":"ns12345679.ip-1-2-4.eu","uuid":"12345678-aaaa-eeee-ffff-1234567890ac"},{"serverName":"ns12345680.ip-1-2-5.eu","uuid":"12345678-aaaa-eeee-ffff-1234567890ad"}]}],"summary":"Example"}}}}},"400":{"description":"Error 400 response","content":{"application/json":{"schema":{"type":"object","description":"Common error model","properties":{"class":{"type":"string","description":"Class of the error"},"message":{"type":"string","description":"Error message"}}},"examples":{"Client::BadRequest::VrackServicesDHCPRequiresVrack":{"value":{"class":"Client::BadRequest::VrackServicesDHCPRequiresVrack","message":"VrackServices '{{.vrackServicesID}}' is not associated to a vRack: DHCP/netboot requires the vRack association"}}}}}},"404":{"description":"Error 404 response","content":{"application/json":{"schema":{"type":"object","description":"Common error model","properties":{"class":{"type":"string","description":"Class of the error"},"message":{"type":"string","description":"Error message"}}},"examples":{"Client::NotFound::VrackServicesNotFound":{"value":{"class":"Client::NotFound::VrackServicesNotFound","message":"VrackServices '{{.vrackServicesID}}' not found"}}}}}}},"tags":["Resource"],"x-developer-hub-navigation":[["Network","vRack Services","Services@@@70"]],"x-badges":[{"color":"green","label":"Stable production version"}],"x-code-samples":[{"lang":"python","label":"Python","source":"'''\nFirst, install the latest release of Python wrapper: $ pip install ovh\n'''\nimport json\nimport ovh\n\n# Instantiate an OVH Client.\n# You can generate new credentials with full access to your account on\n# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\nclient = ovh.Client(\n\tendpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n\tapplication_key='xxxxxxxxxx',    # Application Key\n\tapplication_secret='xxxxxxxxxx', # Application Secret\n\tconsumer_key='xxxxxxxxxx',       # Consumer Key\n)\n\nresult = client.get(\"/v2/vrackServices/resource/{vrackServicesId}/eligibleDedicatedServerInterfaces\")\n\n# Pretty print\nprint(json.dumps(result, indent=4))"},{"lang":"php","label":"PHP","source":"<?php\n/**\n * First, download the latest release of PHP wrapper on github\n * And include this script into the folder with extracted files\n */\nrequire __DIR__ . '/vendor/autoload.php';\nuse \\Ovh\\Api;\n\n/**\n * Instantiate an OVH Client.\n * You can generate new credentials with full access to your account on\n * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\n */\n$ovh = new Api('xxxxxxxxxx',  // Application Key\n               'xxxxxxxxxx',  // Application Secret\n               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n               'xxxxxxxxxx'); // Consumer Key\n\n$result = $ovh->get(\"/v2/vrackServices/resource/{vrackServicesId}/eligibleDedicatedServerInterfaces\");\n\nprint_r($result);\n?>"}],"x-iam-actions":[{"name":"vrackServices:apiovh:resource/eligibleDedicatedServerInterfaces/get","required":true},{"name":"vrackServices:apiovh:dedicatedServer/vnicAttach","description":"Action required on a vRack Services to attach a dedicated server network interface in it","required":false},{"name":"dedicatedServer:apiovh:vrackServices/vnicAttach","description":"Action required on a dedicated server to attach its network interface into a vRack Services","required":false}]}}},"tags":[{"name":"Resource","x-tag-expanded":false,"description":"Missing description"}]}
