import requests
url = "https://platform.ankra.app/api/v1/clusters/ankracloud/preflight"
payload = {
"bastion_plan": "c1-2",
"control_plane_plan": "c2-4",
"name": "ankra-prod",
"zone": "de-fsn1"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
bastion_plan: 'c1-2',
control_plane_plan: 'c2-4',
name: 'ankra-prod',
zone: 'de-fsn1'
})
};
fetch('https://platform.ankra.app/api/v1/clusters/ankracloud/preflight', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));curl --request POST \
--url https://platform.ankra.app/api/v1/clusters/ankracloud/preflight \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"bastion_plan": "c1-2",
"control_plane_plan": "c2-4",
"name": "ankra-prod",
"zone": "de-fsn1"
}
'{
"can_proceed": true,
"items": [
{
"check": "<string>",
"message": "<string>",
"status": "pass",
"action_url": "<string>"
}
]
}{
"cluster_id": "11111111-2222-4333-8444-555555555555",
"name": "ankra-prod"
}{
"detail": "Cluster not found"
}{
"detail": "Cluster not found"
}{
"detail": "Cluster not found"
}{
"detail": "Cluster not found"
}{
"detail": "Cluster not found"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"detail": "Cluster not found"
}{
"detail": "Cluster not found"
}Preflight Ankra Cloud cluster
Bearer PAT authentication; RBAC permission clusters. RBAC permission clusters.create. Checks the create request against the account without creating anything: the credential authenticates, the zone offers compute, every plan and the template exist, an adopted network lives in the zone, and the counts are within bounds. Answers 404 while the organisation's ankra_cloud_providerfeature flag is off. With nocredential_id`, the organisation’s built-in Ankra Cloud credential is used, and the request answers 503 with Retry-After when it cannot be created or renewed right now.
import requests
url = "https://platform.ankra.app/api/v1/clusters/ankracloud/preflight"
payload = {
"bastion_plan": "c1-2",
"control_plane_plan": "c2-4",
"name": "ankra-prod",
"zone": "de-fsn1"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
bastion_plan: 'c1-2',
control_plane_plan: 'c2-4',
name: 'ankra-prod',
zone: 'de-fsn1'
})
};
fetch('https://platform.ankra.app/api/v1/clusters/ankracloud/preflight', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));curl --request POST \
--url https://platform.ankra.app/api/v1/clusters/ankracloud/preflight \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"bastion_plan": "c1-2",
"control_plane_plan": "c2-4",
"name": "ankra-prod",
"zone": "de-fsn1"
}
'{
"can_proceed": true,
"items": [
{
"check": "<string>",
"message": "<string>",
"status": "pass",
"action_url": "<string>"
}
]
}{
"cluster_id": "11111111-2222-4333-8444-555555555555",
"name": "ankra-prod"
}{
"detail": "Cluster not found"
}{
"detail": "Cluster not found"
}{
"detail": "Cluster not found"
}{
"detail": "Cluster not found"
}{
"detail": "Cluster not found"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"detail": "Cluster not found"
}{
"detail": "Cluster not found"
}Authorizations
Body
Cluster name: 1 to 53 lowercase letters, digits and hyphens, starting with a letter and ending with a letter or digit (an RFC 1035 DNS label). It prefixes every server hostname of the cluster; a create carrying any other name is refused, and nothing is created.
1 - 53^[a-z]([-a-z0-9]*[a-z0-9])?$GitOps provider of the repository the cluster is bootstrapped onto. Omitted is github, where gitops_repository is owner/name. bitbucket_cloud names the repository by gitops_workspace and gitops_repo_slug (or gitops_repository as workspace/repo_slug) and binds it as a Bitbucket Cloud repository.
github, bitbucket_cloud Install the Kubernetes Gateway API beside Traefik's Ingress: the Gateway API standard CRDs, Traefik's Gateway provider with the traefik GatewayClass and a shared traefik-gateway Gateway in the traefik namespace (a plain HTTP listener that accepts routes from every namespace), cert-manager's Gateway support, and external-dns publishing of HTTPRoute hostnames. Ingress keeps working; one Traefik serves both. Requires include_networking.
ipv6_only (default; the zone needs capabilities networking.nat64 and networking.port_forward): no router, the nodes reach IPv4 through the zone's NAT64, and the platform reaches the bastion's IPv6 through an Ankra Cloud port forward from the zone's gateway; the bastion admits SSH from that gateway, the private network and IPv6 bastion_allowed_ips only. ipv4_nat, only when asked for: a NAT router for the nodes' IPv4 egress and a bastion with a public IPv4 (a paid add-on counted against the account's public IPv4 quota) the platform dials.
ipv4_nat, ipv6_only Storage tier of each worker's root disk, and of each node group that names no disk_tier of its own. Omit it for the zone's default_storage_tier. local-nvme is the node's own disks; standard, maxiops and hdd are the zone's Ankra Storage (Ceph) tiers.
local-nvme, standard, maxiops, hdd