Sample Operations

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 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:

  1. Specify an UUID
  2. 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
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 Kubernetes Cluster

Request:

POST /api/cluster/hostClusters
Accept: application/json
Authorization: NIRMATA-API <key>

{
    "name": "<name>",
    "mode" : "managed",
    "policySelector" : "<policy name>",
    "hostGroupSelector": {
        "matchLabels": {
            "name": "<host group name>"
        }
    }
}

Sample Response Body:

{
"id" : "47870870-3a08-4a2b-991a-a028be7272f0",
"service" : "Cluster",
"modelIndex" : "HostCluster",
"uri" : "/cluster/api/hostClusters/47870870-3a08-4a2b-991a-a028be7272f0",
"parent" : {
    "id" : "4bf122ed-68d8-4d98-a3de-7ec2a6f766c8",
    "service" : "Cluster",
    "modelIndex" : "Root",
    "uri" : "/cluster/api/roots/4bf122ed-68d8-4d98-a3de-7ec2a6f766c8",
    "childRelation" : "hostClusters"
},
"createdBy" : "jim@nirmata.com",
"createdOn" : 1526779036404,
"modifiedBy" : "jim@nirmata.com",
"modifiedOn" : 1526779036404,
"generation" : 0,
"ancestors" : [ {
    "uuid" : "4bf122ed-68d8-4d98-a3de-7ec2a6f766c8",
    "modelIndex" : "Root",
    "service" : "Cluster"
} ],
"labels" : {
    "nirmata.io/hostcluster.name" : "my-cluster"
},
"additionalProperties" : { },
"alarms" : [ ],
"name" : "my-cluster",
"orchestrator" : "kubernetes",
"state" : "pendingCreate",
"mode" : null,
"status" : [ ],
"action" : null,
"hostGroups" : [ {
    "service" : "config",
    "modelIndex" : "HostGroup",
    "id" : "30fe5761-4ee6-45e4-b5ea-075cd91ae04b"
} ],
"environments" : null,
"clusterEnvironment" : null,
"isDefaultCluster" : null,
"connectionState" : "notConnected",
"executionState" : null,
"hostGroupSelector" : {
    "matchLabels" : {
    "name" : "aws-demo"
    },
    "matchExpressions" : [ ]
},
"notConnectedSince" : 1526779036405,
"policySelector" : null,
"description" : null,
"adminState" : "enabled",
"isAutoscalable" : null,
"createDefaultEnvironment" : true,
"isInitialized" : false,
"lastSyncTime" : null,
"volumes" : [ ],
"kubernetesCluster" : [ {
    "id" : "8340a831-b805-4a01-9fc5-d14a673f56a7",
    "service" : "Cluster",
    "modelIndex" : "KubernetesCluster",
    "uri" : "/cluster/api/kubernetes/8340a831-b805-4a01-9fc5-d14a673f56a7"
} ],
"systemTasks" : [ ]
}
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 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"
"WebHook"
"ScalingPolicy"
"DesiredService"
"ScalingRule"
"VCloudConfig"
"ServiceInstanceAction"
"ServiceAffinityRule"
"ServiceScalingRule"
"RoutingPolicy"
"RoutingRule"
"GatewayRoute"
"GatewayPolicy"
"GatewayRule"
"AzureConfig"
"DesiredServiceAction"
"PrivateCloud"
"HealthCheck"
"ClusterNode"
"Cluster"
"UpdatePolicy"
"ImageUpdateEvent"
"GatewayConfig"
"ContainerAction"
"DesiredServiceLabelSelector"
"LabelSelectorItem"
"EnvironmentVariable"
"HostAction"
"AwsConfig"
"HostScalingRule"
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" ]
    } ]
  } ]
}