Sample Operations
Example requests for common tasks. Replace <key> with your API key.
- Get all Catalog Applications
- Get Deployment Details
- Create a direct-connect host-group
- Create an Application
- Delete an Application
- Get the UUID of an Application named ‘helloworld’ in YAML format
- Get all running Applications’ IDs, names, and states
- Create a new Environment
- Run an Application in an Environment
- Find all Deployments and replica counts in running Applications
- Scale a Deployment in a running Application
- Get the image versions for a container
- Update image version for a running container
- Select a PodTemplateSpec and output as YAML
- Add Nirmata controller to a cluster
- Apply YAML updates to a running Application
- Get CPU and memory usage for all Clusters
- Get select properties of all hosts
- Create a new Direct Connect Cluster
- Query a cluster’s state
- Discover attributes and relations
- Discover the REST API schema
Get all Catalog Applications
Request:
GET /api/catalog/applications
Accept: application/json
Authorization: NIRMATA-API <key>
Get Deployment Details
The mode parameter is used to export all relations.
Request:
GET /api/catalog/deployments/fbd5098b-a096-41f0-9f95-a012b9c86d96?mode=exportDetails
Accept: application/json
Authorization: NIRMATA-API <key>
Create a direct-connect host-group
Steps-1: Find DC Cloud Credentials ID
Request:
curl -k -H "Authorization: NIRMATA-API <key>" "https://nirmata.io/config/api/cloudProviders?filter=type,equals,Other&fields=id,name,type,modelIndex"
Response:
{
"id" : "a41f0493-f6e0-45d6-b56b-41ab93d9d392",
"modelIndex" : "CloudProvider",
"type" : "Other",
"name" : "Direct Connect"
}
Step-2: Create a DC Host Group
Request:
curl -k -H "Authorization: NIRMATA-API <key>" "https://nirmata.io/config/api/cloudProviders/a41f0493-f6e0-45d6-b56b-41ab93d9d392/hostGroups" -H "Content-Type: application/json" -d "{\"name\" : \"test-dchg\"}"
Response:
"id" : "05e788fe-d03d-470c-beaa-6be342af8232",
"service" : "Config",
"modelIndex" : "HostGroup",
"uri" : "/config/api/hostGroups/05e788fe-d03d-470c-beaa-6be342af8232",
"tenantId" : "2bc8ddd6-071a-4199-8774-417e59562f97",
"parent" : {
"id" : "29536aea-4ace-4b04-9639-3677e708b786",
"service" : "Config",
"modelIndex" : "CloudProvider",
"uri" : "/config/api/cloudProviders/29536aea-4ace-4b04-9639-3677e708b786",
"childRelation" : "hostGroups"
},
"createdBy" : "anubhav@nirmata.com",
"createdOn" : 1585678177977,
"modifiedBy" : "anubhav@nirmata.com",
"modifiedOn" : 1585678177977,
"generation" : 0,
"ancestors" : [ {
"service" : "Config",
"modelIndex" : "CloudProvider",
"uuid" : "29536aea-4ace-4b04-9639-3677e708b786"
}, {
"service" : "Config",
"modelIndex" : "Root",
"uuid" : "2b39ae84-5a16-4711-a398-910891aa3c61"
} ],
"labels" : {
"nirmata.io/hostgroup.name" : "test-dchg"
},
"additionalProperties" : { },
"alarms" : [ ],
"name" : "test-dchg",
"action" : null,
"desiredCount" : 1,
"status" : [ ],
"serviceState" : null,
"state" : null,
"minHosts" : 0,
"maxHosts" : 5,
"orchestrator" : null,
"cluster" : null,
"isClusterManaged" : null,
"labels" : null,
"isAutoscalable" : null,
"hosts" : [ ],
"vSphereConfig" : [ ],
"openStackConfig" : [ ],
"vCloudConfig" : [ ],
"azureConfig" : [ ],
"awsConfig" : [ ],
"googleComputeConfig" : [ ],
"hostGroupStats" : [ ],
"actions" : [ ],
"resourceSelectionRules" : [ ]
Step-3: Attach Nodes to the Host Group
Get the Host Group ID from the response to the create. Then run this command on each node:
Request:
sudo curl -sSL https://nirmata.io/nirmata-host-agent/setup-nirmata-agent.sh | sudo sh -s -- --cloud other --hostgroup <HOST GROUP ID>
Create an Application
Request:
POST https://www.nirmata.io/api/applications/
Accept: application/json
Authorization: NIRMATA-API <key>
{
"name": "test-app",
}
Delete an Application
Request:
DELETE /api/catalog/applications/c7bf4bfa-346e-44f8-b62c-9b8fdf5c1980
Accept: application/json
Authorization: NIRMATA-API <key>
Get the UUID of an Application named ‘helloworld’ in YAML format
Request:
GET /catalog/api/applications?query={"name": "helloworld"}&fields=id&output=YAML
Accept: application/json
Authorization: NIRMATA-API <key>
Response Headers:
HTTP/1.1 200 OK
...
Response Body:
---
- id: bdf910d6-f12d-4a9d-84e6-bfbae806c558
Get all running Applications’ IDs, names, and states
Request:
GET /environments/api/applications?fields=id,name,state
Accept: application/json
Authorization: NIRMATA-API <key>
Response Headers:
HTTP/1.1 200 OK
...
Response Body:
[ {
"id" : "76e72cd9-01dd-490e-be8b-a36951a21881",
"name" : "nginx",
"state" : "running",
"run" : "nginx"
}, {
"id" : "97a1352d-4a0c-44b7-8ca6-0e264a203a59",
"name" : "shopme",
"state" : "running",
"run" : "shopme"
}, {
"id" : "6a863004-02d7-4a64-85e6-004a140a5823",
"name" : "aqua-csp",
"state" : "running",
"run" : "aqua-csp"
}, {
"id" : "bbab3d4f-17d7-45df-883a-e96d5a35def0",
"name" : "shopmek8s",
"state" : "running",
"run" : "dealsapp"
}, {
"id" : "9b559b77-4d88-42ca-8280-5145ac3fe9f3",
"name" : "shopmek8s",
"state" : "running",
"run" : "dealsapp"
}, {
"id" : "252cdc4b-69f2-4bb4-a688-170b95e516cc",
"name" : "guestbook",
"state" : "running",
"run" : "guestbook"
}, {
"id" : "829e362c-cde2-4d06-b1c2-96bef10faed9",
"name" : "guestbook",
"state" : "running",
"run" : "guestbook"
}, {
"id" : "343b46f2-6b93-45ac-b38b-bdbc2d133f1e",
"name" : "guestbook",
"state" : "running",
"run" : "guestbook-2"
} ]
Create a new Environment
Request:
POST /api/environments/
Accept: application/json
Authorization: NIRMATA-API <key>
{
"name": "dev-test",
"hostCluster": {"name" : "devtest-aks-us-east"}
}
Note the different ways you can specify a relation in the JSON. For a 1-1 relationship you can:
- Specify an UUID
- Specify a JSON object with fields that can be used to find the relation. In the example above, we use the name field to query the Cluster.
Run an Application in an Environment
Request Headers:
POST /catalog/api/applications/248ea469-50f2-4b8c-af55-f13a5527a356/run
Accept: application/json
Authorization: NIRMATA-API <key>
Request Body:
{
"run": "hello1",
"environment": "dev-test"
}
Find all Deployments and replica counts in running Applications
Request:
GET /environments/api/applications?mode=exportDetails&fields=id,name,deployments,spec,replicas
Accept: application/json
Authorization: NIRMATA-API <key>
Response Headers:
HTTP/1.1 200 OK
...
Response Body:
[
{
"id": "76e72cd9-01dd-490e-be8b-a36951a21881",
"name": "nginx"
},
{
"id": "97a1352d-4a0c-44b7-8ca6-0e264a203a59",
"name": "shopme",
"deployments": [
{
"id": "f23fb091-ec86-4b1c-aff9-744132d218b5",
"name": "payment",
"spec": [
{
"id": "8497448a-8cb0-4a38-9aac-ea941e226bce",
"replicas": 1
}
]
},
{
"id": "00979b37-05be-4b09-b5c7-7af68cb7d0c6",
"name": "deals",
"spec": [
{
"id": "1d6ef0d7-91df-452c-b8af-ebf91f3e6b09",
"replicas": 1
}
]
},
{
"id": "a01d5c5d-d5ae-4fc2-9fe9-6ee57ded98b0",
"name": "ratings",
"spec": [
{
"id": "8e0ed849-282a-40b0-8e7c-26ed7f4d8f26",
"replicas": 2
}
]
}
]
},
{
"id": "6a863004-02d7-4a64-85e6-004a140a5823",
"name": "aqua-csp",
"deployments": [
{
"id": "62a4ff2f-ad59-4479-9ba0-ee4104a13ce4",
"name": "aqua-all-in-one",
"spec": [
{
"id": "3ae07e78-0ae2-4672-b1df-56330a0c8b47",
"replicas": 1
}
]
}
]
},
{
"id": "bbab3d4f-17d7-45df-883a-e96d5a35def0",
"name": "shopmek8s",
"deployments": [
{
"id": "ec383532-8659-4a34-8d76-7eb5d85ffda3",
"name": "deals",
"spec": [
{
"id": "2da3cf04-2cee-4166-9491-566f5c9b3e27",
"replicas": 3
}
]
}
]
},
{
"id": "9b559b77-4d88-42ca-8280-5145ac3fe9f3",
"name": "shopmek8s",
"deployments": [
{
"id": "a9313032-1b82-40dd-b45a-4dabd0689102",
"name": "deals",
"spec": [
{
"id": "f9f861e8-defc-433c-b8f0-32c58d2a2fb1",
"replicas": 3
}
]
}
]
},
{
"id": "252cdc4b-69f2-4bb4-a688-170b95e516cc",
"name": "guestbook",
"deployments": [
{
"id": "27d56ae0-c58f-46a0-8b59-ca752f2fa109",
"name": "frontend",
"spec": [
{
"id": "ad1dcaf3-46fe-4c7d-8891-adfeadc1dc95",
"replicas": 3
}
]
},
{
"id": "0b4f6d2e-28ac-4411-b98b-c9fe4875fc7d",
"name": "redis-master",
"spec": [
{
"id": "6f5659de-0a4c-4dbb-8baa-62a690d8538f",
"replicas": 1
}
]
},
{
"id": "6d58b6cd-3179-4cdf-97f6-a273970540bf",
"name": "redis-slave",
"spec": [
{
"id": "7a01d526-0aaf-47ee-885d-b695a8ac8d2b",
"replicas": 2
}
]
}
]
},
{
"id": "829e362c-cde2-4d06-b1c2-96bef10faed9",
"name": "guestbook",
"deployments": [
{
"id": "1f539cf6-41cd-4739-8872-13409bba612d",
"name": "frontend",
"spec": [
{
"id": "32c81a2d-145f-4858-8be9-6669c2044079",
"replicas": 5
}
]
},
{
"id": "8cd3b93e-2994-4f11-acef-5b4e830e252c",
"name": "redis-master",
"spec": [
{
"id": "87986a72-c250-4002-b4b6-c95cdada3b42",
"replicas": 1
}
]
},
{
"id": "003bf3e2-065c-4a32-ac7b-fd2802e49a55",
"name": "redis-slave",
"spec": [
{
"id": "2069f1fd-1410-4569-9968-60cbabd140e1",
"replicas": 2
}
]
}
]
},
{
"id": "343b46f2-6b93-45ac-b38b-bdbc2d133f1e",
"name": "guestbook",
"deployments": [
{
"id": "50a1ed10-0167-4c8e-b8b1-a6319bef3cfb",
"name": "frontend",
"spec": [
{
"id": "576d2453-b139-4b38-a973-bda0afd9fa6c",
"replicas": 6
}
]
},
{
"id": "cad14b31-7d14-46c1-81db-bb1430adb300",
"name": "redis-master",
"spec": [
{
"id": "de9d4e5e-f044-46b6-b147-2e9009c07f1b",
"replicas": 1
}
]
},
{
"id": "0ef0caf9-b6ad-4a56-9f35-0e4c47a85627",
"name": "redis-slave",
"spec": [
{
"id": "1e487ab6-509a-4906-9717-49a2beb59cab",
"replicas": 2
}
]
}
]
},
{
"id": "40d39730-ea05-4b0c-b78b-5d2d0008606b",
"name": "dev-test2"
}
]
Scale a Deployment in a running Application
Request:
PUT /environments/api/deploymentSpecs/1d6ef0d7-91df-452c-b8af-ebf91f3e6b09
Accept: application/json
Authorization: NIRMATA-API <key>
Request Body:
{
"replicas" : 3
}
Response Headers:
HTTP/1.1 200 OK
...
Response Body:
{
"id" : "1d6ef0d7-91df-452c-b8af-ebf91f3e6b09",
"service" : "Environments",
"modelIndex" : "DeploymentSpec",
"uri" : "/environments/api/deploymentSpecs/1d6ef0d7-91df-452c-b8af-ebf91f3e6b09",
"parent" : {
"id" : "00979b37-05be-4b09-b5c7-7af68cb7d0c6",
"service" : "Environments",
"modelIndex" : "Deployment",
"uri" : "/environments/api/deployments/00979b37-05be-4b09-b5c7-7af68cb7d0c6",
"childRelation" : "spec"
},
"createdBy" : "ritesh@nirmata.com",
"createdOn" : 1526011140575,
"modifiedBy" : "jim@nirmata.com",
"modifiedOn" : 1526854556236,
"generation" : 1,
"ancestors" : [ {
"modelIndex" : "Deployment",
"uuid" : "00979b37-05be-4b09-b5c7-7af68cb7d0c6",
"service" : "Environments"
}, {
"modelIndex" : "Application",
"uuid" : "97a1352d-4a0c-44b7-8ca6-0e264a203a59",
"service" : "Environments"
}, {
"modelIndex" : "Environment",
"uuid" : "ca8b2b15-1920-4910-9c34-846bee4ce6fe",
"service" : "Environments"
}, {
"modelIndex" : "Root",
"uuid" : "0b02a1ac-fae0-4b49-86e9-ff7a421cdf5c",
"service" : "Environments"
} ],
"additionalProperties" : { },
"alarms" : [ ],
"additionalProperties" : { },
"minReadySeconds" : null,
"paused" : null,
"progressDeadlineSeconds" : null,
"replicas" : 3,
"revisionHistoryLimit" : 5,
"selector" : {
"matchLabels" : {
"nirmata.io/application.run" : "shopme",
"nirmata.io/environment.name" : "centos-env",
"nirmata.io/service.name" : "deals",
"nirmata.io/application.name" : "shopme",
"nirmata.io/component" : "deals"
},
"matchExpressions" : [ ]
},
"strategy" : [ {
"id" : "cdc7cb74-6f27-4908-a358-55e4d79205e8",
"service" : "Environments",
"modelIndex" : "DeploymentStrategy",
"uri" : "/environments/api/deploymentStrategies/cdc7cb74-6f27-4908-a358-55e4d79205e8"
} ],
"template" : [ {
"id" : "b53af823-dbdd-41d9-b08f-e1c37378b7e9",
"service" : "Environments",
"modelIndex" : "PodTemplateSpec",
"uri" : "/environments/api/podTemplateSpecs/b53af823-dbdd-41d9-b08f-e1c37378b7e9"
} ]
}
Get the image versions for a container
Request:
GET https://nirmata.io/environments/api/containers?fields=name,id,image&query={"name" : "php-redis"}
Accept: application/json
Authorization: NIRMATA-API <key>
Response Headers:
HTTP/1.1 200 OK
...
Response Body:
[
{
"id": "04c9ada6-8e62-408e-8bb7-4c5bc5e1db3b",
"name": "php-redis",
"image": "gcr.io/google-samples/gb-frontend:v4"
},
{
"id": "1ca543fd-f406-4591-b786-382f8d34cac1",
"name": "php-redis",
"image": "gcr.io/google-samples/gb-frontend:v4"
},
{
"id": "9f70e9b5-7aa0-4056-ac0a-1c4c6edb0c6b",
"name": "php-redis",
"image": "gcr.io/google-samples/gb-frontend:v4"
},
{
"id": "53ac22ae-5d32-4341-bf19-fc2e3a27b4f4",
"name": "php-redis",
"image": "gcr.io/google-samples/gb-frontend:v4"
},
{
"id": "24ae386e-ecc3-4b66-aab0-6e5364f06491",
"name": "php-redis",
"image": "gcr.io/google-samples/gb-frontend:v5"
},
{
"id": "c4a11f29-48f1-4184-a05d-4f8d1a1760ab",
"name": "php-redis",
"image": "gcr.io/google-samples/gb-frontend:v5"
},
{
"id": "e7f753f1-9ab6-458d-a743-3bf4f9b3e44e",
"name": "php-redis",
"image": "gcr.io/google-samples/gb-frontend:v5"
},
{
"id": "40e95708-5bac-4b70-8591-7543aea01c6b",
"name": "php-redis",
"image": "gcr.io/google-samples/gb-frontend:v5"
},
{
"id": "8cf514ca-f969-49f3-acc1-8d3dfbeef323",
"name": "php-redis",
"image": "gcr.io/google-samples/gb-frontend:v5"
},
{
"id": "cd429f72-356e-41f6-b481-7c3cb1218b79",
"name": "php-redis",
"image": "gcr.io/google-samples/gb-frontend:v5"
},
{
"id": "f33d7bb0-ecf3-403e-9d6f-5715bbe6cee4",
"name": "php-redis",
"image": "gcr.io/google-samples/gb-frontend:v5"
},
{
"id": "97ca084f-e7cb-42c5-9b8b-f3d7f4c6914c",
"name": "php-redis",
"image": "gcr.io/google-samples/gb-frontend:v5"
},
{
"id": "f4b0cb92-8aa6-4b5a-81a1-c51b7d0e3234",
"name": "php-redis",
"image": "gcr.io/google-samples/gb-frontend:v5"
},
{
"id": "ffe03a27-be3f-4e81-b3f3-068bae378451",
"name": "php-redis",
"image": "gcr.io/google-samples/gb-frontend:v5"
},
{
"id": "6b37a537-fce8-41f0-a5c1-bce980f23391",
"name": "php-redis",
"image": "gcr.io/google-samples/gb-frontend:v5"
},
{
"id": "dbc0f31c-bc02-4a08-adb1-f994e9e130df",
"name": "php-redis",
"image": "gcr.io/google-samples/gb-frontend:v5"
},
{
"id": "9bb53549-572c-499b-9bad-1d51079e13f2",
"name": "php-redis",
"image": "gcr.io/google-samples/gb-frontend:v5"
}
]
Update image version for a running container
Request Headers:
PUT /environments/api/containers/9bb53549-572c-499b-9bad-1d51079e13f2
Request Body:
{
"image" : "gcr.io/google-samples/gb-frontend:v6"
}
Response Headers:
HTTP/1.1 200 OK
...
Response Body:
{
"id" : "9bb53549-572c-499b-9bad-1d51079e13f2",
"service" : "Environments",
"modelIndex" : "Container",
"uri" : "/environments/api/containers/9bb53549-572c-499b-9bad-1d51079e13f2",
"tenantId" : "45b34043-2844-48ca-b14c-a1944d322c8c",
"parent" : {
"id" : "6f40ca06-80c7-4a56-b582-5e05586b3b49",
"service" : "Environments",
"modelIndex" : "PodSpec",
"uri" : "/environments/api/podSpecs/6f40ca06-80c7-4a56-b582-5e05586b3b49",
"childRelation" : "containers"
},
"createdBy" : "Nirmata",
"createdOn" : 1526333823626,
"modifiedBy" : "jim@nirmata.com",
"modifiedOn" : 1526855075468,
"generation" : 1,
"ancestors" : [ {
"modelIndex" : "PodSpec",
"uuid" : "6f40ca06-80c7-4a56-b582-5e05586b3b49",
"service" : "Environments"
}, {
"modelIndex" : "Pod",
"uuid" : "e0d8c535-fd4f-4a5c-a36c-2defbbc1f124",
"service" : "Environments"
}, {
"modelIndex" : "Application",
"uuid" : "343b46f2-6b93-45ac-b38b-bdbc2d133f1e",
"service" : "Environments"
}, {
"modelIndex" : "Environment",
"uuid" : "37594c41-bbb3-4ee4-a04c-a84cc2ca7a10",
"service" : "Environments"
}, {
"modelIndex" : "Root",
"uuid" : "0b02a1ac-fae0-4b49-86e9-ff7a421cdf5c",
"service" : "Environments"
} ],
"additionalProperties" : {
"envFrom" : [ ]
},
"alarms" : [ ],
"name" : "php-redis",
"image" : "gcr.io/google-samples/gb-frontend:v6",
"command" : [ ],
"args" : [ ],
"workDir" : null,
"terminationMessagePath" : "/dev/termination-log",
"terminationMessagePolicy" : "File",
"imagePullPolicy" : "IfNotPresent",
"stdin" : null,
"stdinOnce" : null,
"tty" : null,
"ports" : [ {
"id" : "964460ff-0508-432c-a0db-78390ab85e09",
"service" : "Environments",
"modelIndex" : "ContainerPort",
"uri" : "/environments/api/containerPorts/964460ff-0508-432c-a0db-78390ab85e09"
} ],
"env" : [ {
"id" : "d07dc2d5-d583-45f7-a05e-b9e249c94412",
"service" : "Environments",
"modelIndex" : "EnvVar",
"uri" : "/environments/api/envVars/d07dc2d5-d583-45f7-a05e-b9e249c94412"
} ],
"volumeMounts" : [ {
"id" : "87b4b177-88a7-4d2f-aaa1-622d4dd41ddf",
"service" : "Environments",
"modelIndex" : "VolumeMount",
"uri" : "/environments/api/volumeMounts/87b4b177-88a7-4d2f-aaa1-622d4dd41ddf"
} ],
"livenessProbe" : [ ],
"readinessProbe" : [ ],
"lifecycle" : [ ],
"resources" : [ {
"id" : "1050e112-8898-4d57-8be6-f426f1905a90",
"service" : "Environments",
"modelIndex" : "ResourceRequirements",
"uri" : "/environments/api/resourceRequirements/1050e112-8898-4d57-8be6-f426f1905a90"
} ],
"securityContext" : [ ]
}
Select a PodTemplateSpec and output as YAML
Request:
GET https://nirmata.io/environments/api/podTemplateSpecs?labelSelector="nirmata.io/environment.name=qa-environment,nirmata.io/application.run=guestbook,nirmata.io/component=redis-slave"&mode=export&output=yaml
Accept: application/json
Authorization: NIRMATA-API <key>
Response Headers:
HTTP/1.1 200 OK
Content-type: text/x-yaml;charset=UTF-8
...
Response Body:
metadata:
- labels:
app: redis
role: slave
tier: backend
nirmata.io/deployment.name: redis-slave
nirmata.io/application.run: guestbook
nirmata.io/environment.name: qa-environment
nirmata.io/service.name: redis-slave
nirmata.io/application.name: guestbook
nirmata.io/component: redis-slave
spec:
- terminationGracePeriodSeconds: 30
containers:
- name: slave
image: gcr.io/google_samples/gb-redisslave:v1
ports:
- containerPort: 6379
protocol: TCP
env:
- name: GET_HOSTS_FROM
value: dns
Add Nirmata controller to a cluster
Step-1: Fetch cluster id -
Request:
curl -H "Authorization: NIRMATA-API <token>" https://nirmata.io/cluster/api/HostClusters?fields=id,name
Response:
[ {
“id” : “0b6c69a9-d6a6-42f1-9dc0-d7eec2c40724”, “name” : “prod-demo” }, { “id” : “a9a7bb38-1a76-477b-851b-753ad8e491b8”, “name” : “dc-cluster-2” }, { “id” : “cbe0107a-e60d-49cc-8fd8-621534fa9fb7”, “name” : “test” }, { “id” : “d56215a9-f793-4dd8-81d2-f48e030958de”, “name” : “test-cluster” } ] }
Step-2: Fetch Nirmata-controller yaml
Reuqest:
Step-3: Apply to a cluster
Request:
kubectl apply -f nirmata-controller.yaml
Apply YAML updates to a running Application
Request:
curl -X POST -H "Content-type: text/yaml" -H "Authorization: NIRMATA-API $APIKEY" "https://nirmata.io/environments/api/applications/829e362c-cde2-4d06-b1c2-96bef10faed9/import" --data-binary @redis-slave.yml
Response:
{
"status" : 200,
"message" : "Success",
"changes" : {
"user" : "jim@nirmata.com",
"createdIds" : [ ],
"modifiedIds" : [ {
"modelIndex" : "Container",
"uuid" : "1dff2449-a4f3-46a8-9b85-ad97eb0926d3",
"service" : "Environments"
} ],
"deletedIds" : [ ],
"sequenceId" : "dbe828e0-c079-4cc5-9562-f8c680fd8529",
"timestamp" : 1526888853548,
"empty" : false,
"id" : "38c87ee5-0585-406e-82ac-5840551a8bef"
}
}
Get CPU and memory usage for all Clusters
Request:
GET /cluster/api/hostClusters?mode=exportDetails&fields=id,name,kubernetesCluster,clusterStats,cpuUsagePercent,memoryUsagePercent
Accept: application/json
Authorization: NIRMATA-API <key>
Response Headers:
HTTP/1.1 200 OK
...
Response Body:
[
{
"id": "b33efdd1-7c10-4ca9-9c7d-a6e6baf65c4e",
"name": "prod-cluster",
"kubernetesCluster": [
{
"id": "a6795f23-0801-4023-849c-9a7595e1e921",
"clusterStats": [
{
"id": "eafb354f-5c7e-4c6b-a6b7-e2ea0053c00f",
"cpuUsagePercent": 15.6,
"memoryUsagePercent": 59.060432
}
]
}
]
},
{
"id": "fc91f1f5-6bb8-49d0-a506-cb770515a141",
"name": "test-centos",
"kubernetesCluster": [
{
"id": "6619ae16-a8a0-4374-9ad7-baf5d0590f7d",
"clusterStats": [
{
"id": "6118e6dd-2536-43f7-9a79-1d2885a1aa7a",
"cpuUsagePercent": 8.175,
"memoryUsagePercent": 55.651302
}
]
}
]
},
{
"id": "49202821-a458-45c8-8799-1a79e012471b",
"name": "devtest-aks-us-east",
"kubernetesCluster": [
{
"id": "22259547-fd15-4a66-ba42-ae24ccb82563",
"clusterStats": [
{
"id": "286912b7-70ce-439e-8a59-0f51d9d2c0f4",
"cpuUsagePercent": 0,
"memoryUsagePercent": 0
}
]
}
]
},
{
"id": "f8aa846f-9c2d-4b2c-838f-23a8132ba78e",
"name": "prod-azure-cluster",
"kubernetesCluster": [
{
"id": "3b026363-7f11-4ef7-a418-c8f73a34f6da",
"clusterStats": [
{
"id": "dbcea04b-7263-49b8-b9cd-f610782da5f0",
"cpuUsagePercent": 3.975,
"memoryUsagePercent": 13.631612
}
]
}
]
},
{
"id": "cde8bdd5-37f4-445c-bf67-399fc22fffde",
"name": "prod-aks-us-east2",
"kubernetesCluster": [
{
"id": "e8535a60-122a-41cc-9aac-b619dc3a3b8b",
"clusterStats": [
{
"id": "3ca358c1-c21a-43e1-a24a-770438515d57",
"cpuUsagePercent": 0,
"memoryUsagePercent": 0
}
]
}
]
},
{
"id": "933951fe-da2e-4bb1-a7d5-8dd092ff4ca2",
"name": "aks-demo",
"kubernetesCluster": [
{
"id": "b4d8884d-e4c9-4881-8997-74b9a1bffa39",
"clusterStats": [
{
"id": "0dd79692-4ded-442d-a3a2-6519ee114901",
"cpuUsagePercent": 0,
"memoryUsagePercent": 0
}
]
}
]
},
{
"id": "c9bc4e81-4140-4120-afd1-4c8dc4b88574",
"name": "diamanti-cluster-1",
"kubernetesCluster": [
{
"id": "c2d32dce-9e7b-4f03-9f2c-93936635c793",
"clusterStats": [
{
"id": "f21799b0-0ad7-40e3-a999-9c61fe022b00",
"cpuUsagePercent": 0,
"memoryUsagePercent": 0
}
]
}
]
}
]
Get select properties of all hosts
Request:
GET https://nirmata.io/config/api/cloudProviders?fields=id,name,hostGroups,hosts,desiredCount,type,minHosts,maxHosts,type&mode=exportDetails
Accept: application/json
Authorization: NIRMATA-API <key>
Sample Response Body:
[
{
"id": "a41f0493-f6e0-45d6-b56b-41ab93d9d392",
"type": "Other",
"name": "Direct Connect",
"hostGroups": [
{
"id": "2d6e6890-0c7a-4339-b6d0-8550fc98766b",
"name": "baremetal",
"desiredCount": 3,
"minHosts": 0,
"maxHosts": 5,
"hosts": [
{
"id": "d5941122-8a9a-485f-a63a-f3b57bc220da",
"name": "baremetal-3"
},
{
"id": "edc8addf-756a-4427-9286-4f93aff2530a",
"name": "baremetal-2"
},
{
"id": "3901d892-b8c5-4495-a6e7-23bc71b9ba0a",
"name": "baremetal-1"
}
]
},
{
"id": "f8f978db-8047-41db-95c4-dbab4501317c",
"name": "test-centos",
"desiredCount": 1,
"minHosts": 0,
"maxHosts": 5,
"hosts": [
{
"id": "09fa7f0b-b06b-4f6d-a802-9013a16c731c",
"name": "ritesh-centos-92966"
},
{
"id": "b15a29f0-01b9-4986-bc60-da59f92ac5ab",
"name": "ritesh-centos-84460"
}
]
},
{
"id": "efbe477f-7f18-40b2-87ec-a8078602fb30",
"name": "devtest-aks-us-east-hg",
"desiredCount": 1,
"minHosts": 0,
"maxHosts": 5,
"hosts": [
{
"id": "68581e8b-66fc-4504-b8b2-00a763360dfb",
"name": "aks-nodepool1-14903811-0"
},
{
"id": "0338e6ec-2da7-4c92-9e47-0fa0601f065e",
"name": "aks-nodepool1-14903811-1"
}
]
},
{
"id": "2226c92c-ff0f-4b71-88e6-5c85d079d4d3",
"name": "prod-aks-us-east2-hg",
"desiredCount": 1,
"minHosts": 0,
"maxHosts": 5,
"hosts": [
{
"id": "f3dfab95-949c-4b17-8691-fbe45660b364",
"name": "aks-nodepool1-39911597-0"
},
{
"id": "0a1fd855-e942-4c9d-bdcd-d59c086f12d8",
"name": "aks-nodepool1-39911597-1"
}
]
},
{
"id": "b4ff6180-b0e7-4951-a4cb-29572c481061",
"name": "aks-demo-hg",
"desiredCount": 1,
"minHosts": 0,
"maxHosts": 5,
"hosts": [
{
"id": "9560d6e6-18ef-4087-9bf2-7981549d04e2",
"name": "aks-nodepool1-15724977-0"
},
{
"id": "5e7ccd73-a1e2-40b6-b0cc-2085fe8e8934",
"name": "aks-nodepool1-15724977-1"
}
]
}
]
},
{
"id": "2e0c3c81-09ba-4633-b085-555040efc2dd",
"type": "AWS",
"name": "Nirmata-AWS",
"hostGroups": [
{
"id": "30fe5761-4ee6-45e4-b5ea-075cd91ae04b",
"name": "aws-demo",
"desiredCount": 0,
"minHosts": 0,
"maxHosts": 5,
"hosts": [
{
"id": "9cfff737-b6fc-4512-8d4b-4eb3964361ed",
"name": "ip-10-10-131-70"
},
{
"id": "e1b514f1-ff4f-4df5-94f6-b0c1738c843e",
"name": "ip-10-10-130-51"
},
{
"id": "120fa82f-e70c-4d3f-b334-b06a9b655f98",
"name": "ip-10-10-130-190"
}
]
}
]
},
{
"id": "45950d43-bac0-4ddb-9165-3fe91d3c0bc4",
"type": "Azure",
"name": "nirmata-azure",
"hostGroups": [
{
"id": "e3a14d35-5245-4acc-ad11-cfbb8a8a7cf3",
"name": "prod-hostgroup",
"desiredCount": 3,
"minHosts": 0,
"maxHosts": 5,
"hosts": [
{
"id": "b3b26a3b-733d-4506-a6b0-629059ebeed9",
"name": "prod-hostgroup-72648"
},
{
"id": "b1f7c5ac-95ac-48ed-9c7e-67956db8c26b",
"name": "prod-hostgroup-35076"
}
]
},
{
"id": "cb674cab-407d-48ef-924c-c83eb0379f00",
"name": "jim-prod-az",
"desiredCount": 3,
"minHosts": 0,
"maxHosts": 5,
"hosts": [
{
"id": "f43145e8-cfb8-4bfc-ae31-69fdba133404",
"name": "jim-prod-az-12734"
},
{
"id": "7095c2af-8a51-4080-95bb-1f2d4ad107eb",
"name": "jim-prod-az-99904"
},
{
"id": "786b153f-8db0-41d7-9d6e-2963ad90f142",
"name": "jim-prod-az-11107"
}
]
}
]
},
{
"id": "ebad7359-e4b3-4225-a6cc-0ababe1ae230",
"type": "vSphere",
"name": "vsphere-private-cloud",
"hostGroups": [
{
"id": "aec50dd9-64c5-4159-a9a5-dbe8ec079188",
"name": "vsphere-new-hg",
"desiredCount": 5,
"minHosts": 0,
"maxHosts": 5,
"hosts": [
{
"id": "45ab49db-a32f-4aa3-93c1-12b10bc48df1",
"name": "vsphere-new-hg-44412"
},
{
"id": "3cc13241-2355-42f0-b912-87cdfd61a315",
"name": "vsphere-new-hg-68263"
},
{
"id": "71aa07a5-9f2e-4432-8bad-30724d0941b7",
"name": "vsphere-new-hg-23203"
},
{
"id": "f55d29f6-9855-4253-9f98-77e86b9eebd7",
"name": null
},
{
"id": "6bdb2cd2-4f8c-42fa-80b7-c36ece8a7cb6",
"name": "vsphere-new-hg-54753"
},
{
"id": "0e848355-1faa-4725-bb7a-4ee5aaceb694",
"name": "vsphere-new-hg-47703"
}
]
}
]
},
{
"id": "b3c9bd96-48ce-4666-a5ed-46f08e06331a",
"type": "Diamanti",
"name": "Diamanti",
"hostGroups": [
{
"id": "08628b4c-703d-487b-adfb-2bb5c010e050",
"name": "diamanti-cluster-1-hg",
"desiredCount": 1,
"minHosts": 0,
"maxHosts": 5,
"hosts": [
{
"id": "c0ea5a98-a810-4082-a472-e153a2f8949b",
"name": "se21"
},
{
"id": "736ec330-fc5c-4ddf-90cb-a4d68507e2aa",
"name": "se22"
},
{
"id": "619e299a-403c-4e28-b2cc-ea4a769c6062",
"name": "se23"
}
]
}
]
}
]
Create a new Direct Connect Cluster
Sample Request:
POST /cluster/api/kubernetesCluster
Accept: application/json
Authorization: NIRMATA-API <key>
{
"name": "test",
"mode": "managed",
"hostGroups": [{
"service": "config",
"modelIndex": "HostGroup",
"id": "2f2c7271-c037-4128-ab09-060d4b312cab"
}],
"typeSelector": "direct-connect-1.17.5",
}
Sample Response:
{
"id": "e03b3a5a-15bf-4120-931f-be2da6f44cd1",
"service": "Cluster",
"modelIndex": "KubernetesCluster",
"uri": "/cluster/api/kubernetes/e03b3a5a-15bf-4120-931f-be2da6f44cd1",
"parent": {
"id": "0fd4cc13-ee34-48a6-8377-374e0575c8ec",
"service": "Cluster",
"modelIndex": "Root",
"uri": "/cluster/api/roots/0fd4cc13-ee34-48a6-8377-374e0575c8ec",
"childRelation": "clusters"
},
"createdBy": "jim@nirmata.com",
"createdOn": 1599754994913,
"modifiedBy": "jim@nirmata.com",
"modifiedOn": 1599754994913,
"generation": 0,
"ancestors": [
{
"service": "Cluster",
"modelIndex": "Root",
"id": "0fd4cc13-ee34-48a6-8377-374e0575c8ec"
}
],
"labels": {
"nirmata.io/kubernetescluster.mode": "managed",
"nirmata.io/clusterspec.cloud": "Other",
"nirmata.io/clusterspec.version": "v1.17.5"
},
"additionalProperties": {},
"alarms": [],
"name": "test",
"mode": "managed",
"clusterAction": null,
"description": null,
"typeSelector": "direct-connect-1.17.5",
"state": "pendingCreate",
"status": [],
"connectionState": "notConnected",
"executionState": null,
"adminState": "enabled",
"progressState": null,
"notConnectedSince": 1599754994918,
"isInitialized": false,
"lastSyncTime": null,
"lastFailureTime": null,
"clusterEnvironment": null,
"hostGroups": [
{
"service": "config",
"modelIndex": "HostGroup",
"id": "2f2c7271-c037-4128-ab09-060d4b312cab"
}
],
"environments": null,
"masterHostSelector": [],
"nodes": [],
"namespaces": [],
"storageClasses": [],
"volumes": [],
"clusterConfig": [],
"clusterStats": [],
"pendingPods": [],
"action": [],
"componentStatuses": [],
"ingressControllers": [],
"clusterRoles": [],
"clusterRoleBindings": [],
"customResourceDefinitions": [],
"vaultSettings": [],
"clusterAddOns": [],
"resourceCounts": [],
"veleroConfig": [],
"kyvernoPolicies": [],
"kyvernoPolicyViolations": [],
"encryptionConfig": [],
"nodePools": [
{
"id": "3d56a980-aae9-409d-a3ec-dc8fe4dd15ae",
"service": "Cluster",
"modelIndex": "NodePool",
"uri": "/cluster/api/nodepools/3d56a980-aae9-409d-a3ec-dc8fe4dd15ae"
}
],
"config": [
{
"id": "2abfb7d0-1bfa-4e14-9948-1d6fadd412a4",
"service": "Cluster",
"modelIndex": "ClusterConfig",
"uri": "/cluster/api/clusterconfigs/2abfb7d0-1bfa-4e14-9948-1d6fadd412a4"
}
],
"resources": [
{
"id": "d5470e29-0e58-4437-a5d4-21c5fef39f28",
"service": "Cluster",
"modelIndex": "ClusterResources",
"uri": "/cluster/api/clusterresourceses/d5470e29-0e58-4437-a5d4-21c5fef39f28"
}
],
"addOns": [
{
"id": "4285660c-241c-476b-a716-f7ab21131b31",
"service": "Cluster",
"modelIndex": "ClusterAddOns",
"uri": "/cluster/api/clusteraddonses/4285660c-241c-476b-a716-f7ab21131b31"
}
],
"systemTasks": [
{
"id": "91322515-2ca2-4548-b212-07bec331ce1d",
"service": "Cluster",
"modelIndex": "ClusterSystemTasks",
"uri": "/cluster/api/clustersystemtaskses/91322515-2ca2-4548-b212-07bec331ce1d"
}
],
"accessControlList": [
{
"id": "6608da8f-ee64-43d3-9838-50450d3a6b0f",
"service": "Cluster",
"modelIndex": "AccessControlList",
"uri": "/cluster/api/accesscontrollists/6608da8f-ee64-43d3-9838-50450d3a6b0f"
}
]
}
Query a cluster’s state
Request:
GET https://nirmata.io/cluster/api/hostClusters?fields=id,state&query={"name" : "devtest-aks-us-east"}
Accept: application/json
Authorization: NIRMATA-API <key>
Response Headers:
HTTP/1.1 200 OK
...
Response Body:
[
{
"id": "49202821-a458-45c8-8799-1a79e012471b",
"state": "ready"
}
]
Discover attributes and relations
You can query a single class, to get its attributes and relations.
Request:
curl -X OPTIONS -H "Accept: application/json" -H "Authorization: NIRMATA-API <key>" https://nirmata.io/config/api/ContainerType
Response Body:
{
"name" : "Config",
"id" : "d05f7751-8dae-4733-9e14-601d6f3516b3",
"rootIndex" : "Root",
"modelClasses" : [ {
"modelIndex" : "ContainerType",
"uri" : "/config/api/containerTypes",
"methods" : [ "OPTIONS", "GET", "POST", "DELETE", "PUT" ],
"apiLabel" : "containerTypes",
"isDeleteable" : true,
"keyField" : "name",
"parents" : [ "Root" ],
"attributes" : [ {
"name" : "name",
"type" : "String",
"isRequired" : true,
"uniqueScope" : "PARENT",
"isKey" : false,
"length" : 0
}, {
"name" : "description",
"type" : "String",
"isRequired" : false,
"uniqueScope" : "NONE",
"isKey" : false,
"length" : 0
}, {
"name" : "cpuShares",
"type" : "Integer",
"isRequired" : false,
"uniqueScope" : "NONE",
"isKey" : false,
"min" : 0,
"max" : 1024,
"default" : 0
}, {
"name" : "memory",
"type" : "Integer",
"isRequired" : false,
"uniqueScope" : "NONE",
"isKey" : false,
"min" : 0,
"max" : 64000,
"default" : 0
} ],
"relations" : [ {
"name" : "resourceSelectionRules",
"type" : "Reference",
"relationClass" : "ResourceSelectionRule",
"cardinality" : {
"min" : 0,
"type" : "zeroOrMore"
},
"isMany" : true,
"relationField" : "containerTypes",
"isStrongReference" : false,
"uri" : "/config/api/containerTypes/{id}/resourceSelectionRules",
"methods" : [ "OPTIONS", "GET" ]
}, {
"name" : "services",
"type" : "Reference",
"relationClass" : "Service",
"cardinality" : {
"min" : 0,
"type" : "zeroOrMore"
},
"isMany" : true,
"relationField" : "containerType",
"isStrongReference" : false,
"uri" : "/config/api/containerTypes/{id}/services",
"methods" : [ "OPTIONS", "GET" ]
} ]
} ]
}
Discover the REST API schema
The Nirmata REST API schema can be queried using the HTTP OPTIONS method. Here is a query and JQ filter to obtain all endpoints (model classes):
Request:
curl -X OPTIONS -H "Accept: application/json" -H "Authorization: NIRMATA-API <key>" https://nirmata.io/config/api | jq ".modelClasses | .[] .modelIndex"
Response:
"Root"
"Application"
"EnvironmentType"
"ContainerType"
"ResourceSelectionPolicy"
"ResourceSelectionRule"
"CloudProvider"
"HostGroup"
"Host"
"Container"
"Service"
"Environment"
"ServiceInstance"
"ServicePort"
"ServiceSpec"
"Registry"
"LaunchConfiguration"
"PortRange"
"VSphereConfig"
"OpenStackConfig"
"WebHook"
"ScalingPolicy"
"DesiredService"
"ScalingRule"
"VCloudConfig"
"ServiceInstanceAction"
"ServiceAffinityRule"
"ServiceScalingRule"
"RoutingPolicy"
"RoutingRule"
"GatewayRoute"
"GatewayPolicy"
"GatewayRule"
"AzureConfig"
"DesiredServiceAction"
"PrivateCloud"
"CiscoIcfConfig"
"CiscoUcsdConfig"
"HealthCheck"
"ClusterNode"
"Cluster"
"UpdatePolicy"
"ImageUpdateEvent"
"GatewayConfig"
"ContainerAction"
"DesiredServiceLabelSelector"
"LabelSelectorItem"
"EnvironmentVariable"
"HostAction"
"DigitalOceanConfig"
"ProfitBricksConfig"
"AwsConfig"
"HostScalingRule"