11. Managing Application Snapshots

Application Snapshots

An application snapshot is a reference marker for an application at a particular point in time. It contains a copy of the application’s data plus the application’s current state. Snapshots provide a safeguard against application data corruption. For example, if key application data is accidentally deleted, a snapshot can be used to revert (roll back) the app to a point in time before the deletion occurred.

Taking snapshots of storage volumes has existed for decades in the industry. However, when an application is distributed and/or uses multiple storage volumes across one or more pods, orchestrating storage-only snapshots across all of them is tedious, error-prone and inconsistent. Storage-only snapshots are also unaware of the application configuration and its topology, which makes cloning, backing up or restoring cumbersome and prone to misconfiguration.

Robin allows creating application-consistent snapshots of an entire application, which capture:

  1. The entire application topology and its configuration (i.e., specs of Pod, Service, StatefulSet, Secrets, ConfigMaps, etc)

  2. Snapshots of all data volumes (PersistentVolumeClaims)

Robin snapshots at the storage layer use redirect-on-write, which means that snapshots can be taken in less than a second even for terabyte sized data volumes. Because only the changed blocks are tracked between snapshots, Robin snapshots are very space efficient.

Topics covered in this chapter:

robin snapshot create

Snapshot an entire application (data and metadata)

robin snapshot delete

Delete the snapshot of an application

robin snapshot restore

Restore a snapshot from a backup copy stored on an external storage repository

robin snapshot list

List snapshots for one or more applications

robin snapshot info

Show detailed information about a specific snapshot

robin snapshot status

Show status of snapshot pull and push operations

11.1. Create an Application Snapshot

An application snapshot is created using this command:

# robin snapshot create <snapname> <app_name>

snapname

A name that would be assigned to the snapshot being taken

app_name

Name of the application being snapshotted

Example:

# robin snapshot create mysql3 --wait
Job:  331 Name: ApplicationSnapshot  State: VALIDATED       Error: 0
Job:  331 Name: ApplicationSnapshot  State: WAITING         Error: 0
Job:  331 Name: ApplicationSnapshot  State: COMPLETED       Error: 0

# robin snapshot list --app mysql3
+----------------------------------+--------+----------+----------+----------------------------+
| Snapshot ID                      | State  | App Name | App Kind | Snapshot name              |
+----------------------------------+--------+----------+----------+----------------------------+
| b6033a5a4d6a11eab805255c7aa2236e | ONLINE | mysql3   | ROBIN    | mysql3_snapshot-1581493122 |
+----------------------------------+--------+----------+----------+----------------------------+

Creates an application snapshot.

End Point: /api/v3/robin_server/apps/<app_name>

Method: PUT

URL Parameters: None

Data Parameters:

  • action: snapshot - This mandatory field within the payload specifies the snapshot operation is to be performed.

  • snapname: <snap_name> - This mandatory field within the payload specifies the name of the snapshot.

  • quiesce: <list_of_quiesce_options> - Utilizing this parameter by specifiying a comma seperated list of quiesce options results in them being exercised in order to acheive a consistent application state. Valid values include: ‘fs’, ‘container’ and ‘all’. Note this option is only valid for ROBIN applications.

Port: RCM Port (default value is 29442)

Headers:

  • Authorization: <auth_token> : Authorization token to identify which user is sending the request. The token can be acquired from the login API.

Success Response Code: 202

Error Response Code: 500 (Internal Server Error), 404 (Not Found Error), 401 (Unauthorized Error), 400 (Invalid Api Usage Error)

Example Response:

Output
{
   "jobid":275,
   "plan":{
      "kind":"robin",
      "quiesce":[
         "fs"
      ],
      "original_app_tenant":1,
      "snapname":"snap1",
      "action":"snapshot",
      "original_app_owner":3,
      "opcode":8,
      "current_user":{
         "session_expires":"2020-09-10T10:40:27",
         "tenant_id":1,
         "tenant":"Administrators",
         "user_capabilities":[
            "AllSuperAdminCapabilities"
         ],
         "user_contexts":[
            "robin"
         ],
         "username":"robin",
         "user_permissions":{

         },
         "tenant_role":"superadmin",
         "user_context":"robin",
         "tenants":[
            "Administrators"
         ],
         "user_id":3,
         "namespace":"t001-u000003",
         "ip_addr":"172.17.0.1"
      },
      "namespace":"t001-u000003",
      "name":"custom-labels-app"
   }
}

11.2. Configuring snapshot schedules and retention policies

This is covered under the Manage Application Snapshot Schedules section of Applications chapter. See details of the command robin app snapshot-schedule.

11.3. Delete an Application Snapshot

In order to delete an application snapshot, issue the following command:

# robin snapshot delete <snapshotid>

snapshotid

Unique ID of the snapshot (obtained from the output of robin snapshot list)

Example:

# robin snapshot list --app mysql3
+----------------------------------+--------+----------+----------+----------------------------+
| Snapshot ID                      | State  | App Name | App Kind | Snapshot name              |
+----------------------------------+--------+----------+----------+----------------------------+
| b6033a5a4d6a11eab805255c7aa2236e | ONLINE | mysql3   | ROBIN    | mysql3_snapshot-1581493122 |
+----------------------------------+--------+----------+----------+----------------------------+

# robin snapshot delete b6033a5a4d6a11eab805255c7aa2236e --wait
Job:  330 Name: ApplicationDelete    State: VALIDATED       Error: 0
Job:  330 Name: ApplicationDelete    State: COMPLETED       Error: 0

# robin snapshot list --app mysql3
+-------------+--------+----------+----------+---------------+
| Snapshot ID | State  | App Name | App Kind | Snapshot name |
+-------------+--------+----------+----------+---------------+
+-------------+--------+----------+----------+---------------+

Delete an application snapshot from a Robin CNS cluster

End Point: /api/v6/robin_server/apps/<snapshot_id>?objtype=snapshot

Method: DELETE

URL Parameters: None

Data Parameters: None

Port: RCM Port (default value is 29442)

Headers:

  • Authorization: <auth_token> : Authorization token to identify which user is sending the request. The token can be acquired from the login API.

Success Response Code: 202

Error Response Code: 500 (Internal Server Error), 404 (Not Found Error), 401 (Unauthorized Error), 400 (Invalid Api Usage Error)

Example Response:

Output
{
   "plan":{
      "version":"1.15.8",
      "pvcpolicy":"create",
      "roles":[
         {
            "display_name":"nginx",
            "serviceAccountName":"{{app['name'].lower()}}-sa",
            "scaleout":"enabled",
            "name":"nginx",
            "restart_on_qoscfg":true,
            "vnodes":[
               {
                  "allocated_initContainers":[
                     {
                        "volumeMounts":[
                           {
                              "mountPath":"\/cm1",
                              "name":"vol-cm1"
                           },
                           {
                              "mountPath":"\/cm2",
                              "name":"vol-cm2"
                           },
                           {
                              "mountPath":"\/cm3",
                              "name":"vol-cm3"
                           }
                        ],
                        "name":"init",
                        "securityContext":{
                           "allowPrivilegeEscalation":true
                        },
                        "resources":{
                           "limits":{
                              "memory":"128Mi",
                              "cpu":"25m"
                           }
                        },
                        "imagePullPolicy":"IfNotPresent",
                        "image":"k8s.gcr.io\/busybox",
                        "command":[
                           "sleep",
                           "1"
                        ]
                     }
                  ],
                  "k8s_provider":"robin",
                  "bundle_object_id":"a9f229864a74f936047b1b005de391a8",
                  "allocated_volumeMounts":[
                     {
                        "mountPath":"\/cm1",
                        "name":"vol-cm1"
                     },
                     {
                        "mountPath":"\/cm2",
                        "name":"vol-cm2"
                     },
                     {
                        "mountPath":"\/cm3",
                        "name":"vol-cm3"
                     }
                  ],
                  "mem":{
                     "hugepages_2m":0,
                     "hugepages_1g":0,
                     "size":1283457024
                  },
                  "restart_num":15,
                  "bundle_path":"\/usr\/local\/robin\/collections\/file-collection-1597953097832\/1597953155269\/nginx-1.0",
                  "root_fs":"\/usr\/local\/robin\/instances\/demo-nginx-01.t001-u000003.svc.cluster.local",
                  "pod_name":"demo-nginx-01",
                  "appid":13,
                  "host_ip":"172.21.20.104",
                  "volumes":[
                     {
                        "name":"vol-cm1",
                        "configMap":{
                           "defaultMode":420,
                           "name":"{{app['name'].lower()}}-cm1"
                        }
                     },
                     {
                        "name":"vol-cm2",
                        "configMap":{
                           "defaultMode":420,
                           "name":"{{app['name'].lower()}}-cm2"
                        }
                     },
                     {
                        "name":"vol-cm3",
                        "configMap":{
                           "defaultMode":420,
                           "name":"{{app['name'].lower()}}-cm3"
                        }
                     }
                  ],
                  "service_uids":[
                     "8de44f8e-fec0-47ee-b425-970758749188",
                     "3ca02e11-24b9-4555-8386-4f1b0e5e44fc",
                     "d273da82-86c3-4be6-9b29-1b930bece779"
                  ],
                  "appname":"demo",
                  "restart_on_qoscfg":true,
                  "env":{
                     "allocated":{
                        "ROBINHOST_TAG_ROBINRPOOL":"default",
                        "ROBINHOST_TAG_KUBERNETES.IO-OS":"linux",
                        "POD_NS":"t001-u000003",
                        "POD_NAME":"demo-nginx-01",
                        "K8S_NODE":"cscale-82-140",
                        "ROBINHOST":"cscale-82-140.robinsystems.com",
                        "ROBINHOST_TAG_KUBERNETES.IO-ARCH":"amd64"
                     }
                  },
                  "serviceAccountName":"{{app['name'].lower()}}-sa",
                  "initContainers":[
                     {
                        "volumeMounts":[
                           {
                              "mountPath":"\/cm1",
                              "name":"vol-cm1"
                           },
                           {
                              "mountPath":"\/cm2",
                              "name":"vol-cm2"
                           },
                           {
                              "mountPath":"\/cm3",
                              "name":"vol-cm3"
                           }
                        ],
                        "name":"init",
                        "securityContext":{
                           "allowPrivilegeEscalation":true
                        },
                        "resources":{
                           "limits":{
                              "memory":"128Mi",
                              "cpu":"25m"
                           }
                        },
                        "imagePullPolicy":"IfNotPresent",
                        "image":"k8s.gcr.io\/busybox",
                        "command":[
                           "sleep",
                           "1"
                        ]
                     }
                  ],
                  "enable_hooklogs":true,
                  "vnodeid":13,
                  "allocated_volumes":[
                     {
                        "name":"vol-cm1",
                        "configMap":{
                           "defaultMode":420,
                           "name":"demo-cm1"
                        }
                     },
                     {
                        "name":"vol-cm2",
                        "configMap":{
                           "defaultMode":420,
                           "name":"demo-cm2"
                        }
                     },
                     {
                        "name":"vol-cm3",
                        "configMap":{
                           "defaultMode":420,
                           "name":"demo-cm3"
                        }
                     }
                  ],
                  "volume_groups":[
                     {
                        "rpoolid":1,
                        "name":"demo.nginx.01.72.1.9457505a-dcf2-4f0c-b416-9467c10342d7",
                        "media":"HDD",
                        "stormgr_id":6,
                        "layout":"round-robin",
                        "replicas":1,
                        "volumes":[
                           "demo.nginx.01.data.1.68f51300-c283-4df7-bd9e-43d7314e1a42"
                        ],
                        "device_sets":[
                           {
                              "devices":[
                                 {
                                    "host":"cscale-82-140.robinsystems.com",
                                    "tags":{

                                    },
                                    "wwn":"0x600224803bcdafde95b1f5cd27ceb5fb",
                                    "hostname":"cscale-82-140.robinsystems.com",
                                    "max_volumes_per_disk":10,
                                    "stormgr_id":2,
                                    "slices":77,
                                    "score":73,
                                    "type":"HDD",
                                    "devpath":"\/dev\/disk\/by-id\/scsi-3600224803bcdafde95b1f5cd27ceb5fb",
                                    "allocated_slices":24,
                                    "max_latency_sensitive_vols_per_disk":2,
                                    "write_unit":4096,
                                    "psize":107374182400,
                                    "reattachable":0,
                                    "pused":1107296256,
                                    "max_throughput_intensive_vols_per_disk":1,
                                    "protected":0,
                                    "role":"Storage",
                                    "aslices":50,
                                    "state":"READY",
                                    "capacity":107374182400
                                 }
                              ],
                              "name":"demo.nginx.01.72.1.9457505a-dcf2-4f0c-b416-9467c10342d7.0.a6cab386-2774-46d1-ad51-7a0f11fcdb35",
                              "stormgr_id":6
                           }
                        ]
                     }
                  ],
                  "gpu":{
                     "min":0,
                     "max":0
                  },
                  "bundleid":1,
                  "engine":"docker",
                  "annotations":{
                     "annokey1":"annovalue1",
                     "allocated":{
                        "annokey1":"annovalue1",
                        "annokey2":"annovalue2"
                     },
                     "annokey2":"annovalue2"
                  },
                  "ctime":1598453564,
                  "podSecurityContext":{
                     "runAsUser":0,
                     "allocated":{
                        "runAsUser":0
                     }
                  },
                  "hosttags":{
                     "robin.io\/robinrpool":[
                        "default"
                     ],
                     "kubernetes.io\/arch":[
                        "amd64"
                     ],
                     "kubernetes.io\/os":[
                        "linux"
                     ]
                  },
                  "allocated_host":"cscale-82-140.robinsystems.com",
                  "calico_inuse":true,
                  "image":{
                     "version":"1.15.8-alpine",
                     "registry_hostname":"",
                     "name":"nginx",
                     "engine":"docker",
                     "registry_port":""
                  },
                  "hostAliases":[
                     {
                        "hostnames":[
                           "foo.remote",
                           "bar.remote"
                        ],
                        "ip":"1.2.3.4"
                     }
                  ],
                  "readinessProbe":{
                     "exec":{
                        "command":[
                           "sleep",
                           "1"
                        ]
                     },
                     "initialDelaySeconds":5,
                     "allocated":{
                        "exec":{
                           "command":[
                              "sleep",
                              "1"
                           ]
                        },
                        "initialDelaySeconds":5
                     }
                  },
                  "rpoolid":1,
                  "role":"nginx",
                  "livenessProbe":{
                     "allocated":{
                        "periodSeconds":3,
                        "httpGet":{
                           "path":"\/",
                           "httpHeaders":[
                              {
                                 "value":"Awesome",
                                 "name":"Custom-Header"
                              }
                           ],
                           "port":80
                        },
                        "initialDelaySeconds":3
                     },
                     "periodSeconds":3,
                     "httpGet":{
                        "path":"\/",
                        "httpHeaders":[
                           {
                              "value":"Awesome",
                              "name":"Custom-Header"
                           }
                        ],
                        "port":80
                     },
                     "initialDelaySeconds":3
                  },
                  "utime":1598453564,
                  "volumeMounts":[
                     {
                        "mountPath":"\/cm1",
                        "name":"vol-cm1"
                     },
                     {
                        "mountPath":"\/cm2",
                        "name":"vol-cm2"
                     },
                     {
                        "mountPath":"\/cm3",
                        "name":"vol-cm3"
                     }
                  ],
                  "hostname":"demo-nginx-01.t001-u000003.svc.cluster.local",
                  "name":"demo.nginx.01",
                  "numa_allocations":{
                     "0":{
                        "gpu_used":0,
                        "isol_shared_cores_used":0,
                        "isol_dedicated_cores_used":0,
                        "hugepages_1g_used":0,
                        "hugepages_2m_used":0,
                        "mem_used":1283457024,
                        "non_isol_cores_used":1
                     }
                  },
                  "sidecars":[
                     {
                        "volumeMounts":[
                           {
                              "mountPath":"\/cm1",
                              "name":"vol-cm1"
                           },
                           {
                              "mountPath":"\/cm2",
                              "name":"vol-cm2"
                           },
                           {
                              "mountPath":"\/cm3",
                              "name":"vol-cm3"
                           }
                        ],
                        "name":"busyside1",
                        "securityContext":{
                           "allowPrivilegeEscalation":true
                        },
                        "resources":{
                           "requests":{
                              "memory":"100Mi"
                           },
                           "limits":{
                              "memory":"200Mi"
                           }
                        },
                        "image":"k8s.gcr.io\/busybox",
                        "command":[
                           "sleep",
                           "3000"
                        ]
                     }
                  ],
                  "storage":[
                     {
                        "faultdomain":"host",
                        "pvcpolicy":"create",
                        "compression":"disabled",
                        "vol_ns":"t001-u000003",
                        "snapname":"snap1",
                        "lvm_vol_count":"0",
                        "replication":1,
                        "name":"demo.nginx.01.data.1.68f51300-c283-4df7-bd9e-43d7314e1a42",
                        "blocksize":4096,
                        "workload":0,
                        "protection":0,
                        "type":"data",
                        "k8s_name":"demo-nginx-01-data-1-68f51300",
                        "volgrp_name":"demo.nginx.01.72.1.9457505a-dcf2-4f0c-b416-9467c10342d7",
                        "stordriver":{
                           "faultdomain":"host",
                           "protection":0,
                           "type":"das",
                           "media":"HDD"
                        },
                        "lvm_type":"None",
                        "snapshot_space_limit":4294967296,
                        "layout":"round-robin",
                        "encryption":"none",
                        "disk_tags":{

                        },
                        "mount_in_sidecars":true,
                        "allocated":{
                           "qgroupid":5,
                           "multinode_mounting":false,
                           "compression":0,
                           "genkey":1598453534287911,
                           "priority":2,
                           "snapname":"snap1",
                           "vtype":0,
                           "replication":1,
                           "current_snapshotid":1,
                           "name":"demo.nginx.01.data.1.68f51300-c283-4df7-bd9e-43d7314e1a42",
                           "params":{

                           },
                           "protection":0,
                           "appid":1,
                           "appname":"default",
                           "snapshot_space_limit":4294967296,
                           "stordriver":{
                              "faultdomain":"host",
                              "protection":0,
                              "type":"das",
                              "media":"HDD"
                           },
                           "block_size":4096,
                           "partitions":0,
                           "current_snapshot":"active_snap",
                           "grpid":6,
                           "next_snapshotid":2,
                           "next_backupid":1,
                           "media":72,
                           "size":21474836480,
                           "slice_size":1073741824,
                           "volumeid":"6",
                           "resource_poolid":1
                        },
                        "snap_reserved":20,
                        "media":"HDD",
                        "mount_in_initcontainers":true,
                        "path":"\/opt\/data",
                        "fstype":"ext4",
                        "size":21474836480
                     }
                  ],
                  "labels":{
                     "labelkey2":"labelvalue2",
                     "allocated":{
                        "labelkey2":"labelvalue2",
                        "labelkey1":"labelvalue1"
                     },
                     "labelkey1":"labelvalue1"
                  },
                  "allocated_host_type":"physical",
                  "enable_metrics":true,
                  "pod_ns":"t001-u000003",
                  "allocated_host_public_ip":"10.9.82.140",
                  "enable_portmapping":true,
                  "vnodehookargs":{

                  },
                  "cpu":{
                     "reserve":false,
                     "min":0,
                     "max":1
                  },
                  "allocated_host_public_hostname":"cscale-82-140.robinsystems.com",
                  "allocated_sidecars":[
                     {
                        "volumeMounts":[
                           {
                              "mountPath":"\/cm1",
                              "name":"vol-cm1"
                           },
                           {
                              "mountPath":"\/cm2",
                              "name":"vol-cm2"
                           },
                           {
                              "mountPath":"\/cm3",
                              "name":"vol-cm3"
                           }
                        ],
                        "name":"busyside1",
                        "securityContext":{
                           "allowPrivilegeEscalation":true
                        },
                        "resources":{
                           "requests":{
                              "memory":"100Mi"
                           },
                           "limits":{
                              "memory":"200Mi"
                           }
                        },
                        "image":"k8s.gcr.io\/busybox",
                        "command":[
                           "sleep",
                           "3000"
                        ]
                     }
                  ],
                  "cm_keys":[
                     "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCULUZ7abTGyeGhxSuXejf0VohBrk2ndhAQj0mx8whbs\/qyJmVmzenvGUVGGXSfri7m3PE++2V0xMathKizVpjcrWXoFTNZLlJKBVWog5XaCYIYRswAlow+rQU6aKJ+lP2DlUgmpZ9iG9VCae0vt+JosC2LeIDmgNm5vD6AN0aB\/rKHeQjCiJyvr90d9MbQ\/JAsh+\/1EkA4fTuTXRstlMH86gB+7JhAeCROIBz32Y7HV8hKf0SQx2fj2XFeQsRcZm8oC8n1En87qBXk+iz3qKkZBduNDp8XnKWFvhsKDQkuWGr1jUNp1SyaqNSFFZrv+EyFC1sHoORuJwAwYp8DLwyF root@cscale-82-140"
                  ],
                  "role_name":"nginx",
                  "allocated":{
                     "zonename":"default",
                     "nodeid":1,
                     "nodename":"cscale-82-140",
                     "zoneid":1597969746
                  },
                  "allocated_serviceAccountName":"demo-sa",
                  "securityContext":{
                     "allowPrivilegeEscalation":true,
                     "allocated":{
                        "allowPrivilegeEscalation":true
                     }
                  },
                  "network":[
                     {
                        "allocated_names":[
                           "eth0"
                        ],
                        "interfaces":1,
                        "allocated_netmask":"255.255.0.0",
                        "name":"robin-default",
                        "ippool":"robin-default",
                        "allocated_ip":"172.21.20.104",
                        "driver":"calico",
                        "subnet":"172.21.0.0",
                        "allocated_by":"system",
                        "allocated_prefix":16
                     }
                  ],
                  "sidecar_info":{
                     "containers":[
                        {
                           "hugepages_2m":0,
                           "name":"busyside1",
                           "cpu":0,
                           "mem":209715200,
                           "gpu":0,
                           "hugepages_1g":0
                        }
                     ],
                     "hugepages_2m":0,
                     "cpu":0,
                     "mem":209715200,
                     "gpu":0,
                     "hugepages_1g":0
                  },
                  "state":"STARTED",
                  "id":13,
                  "services":[
                     {
                        "annotations":{
                           "a1":"av1",
                           "a2":"av2"
                        },
                        "labels":{
                           "l2":"v2",
                           "namespace":"t001-u000003",
                           "robin.io\/username":"robin",
                           "scope":"vnode",
                           "robin.io\/tenant":"Administrators",
                           "robin.io\/tenant_id":"1",
                           "robin.io\/user_id":"3",
                           "l1":"v1"
                        },
                        "appname":"demo",
                        "scope":"pod",
                        "ports":[
                           {
                              "protocol":"TCP",
                              "name":"web",
                              "node_port":31574,
                              "port":80,
                              "target_port":80
                           }
                        ],
                        "cluster_ip":"172.19.64.18",
                        "vnodename":"demo-nginx-01",
                        "type":"NodePort",
                        "k8s_name":"demo-nginx-01-np-0",
                        "selectors":{
                           "robin.io\/vnode":"demo-nginx-01"
                        }
                     }
                  ]
               }
            ],
            "hostAliases":[
               {
                  "hostnames":[
                     "foo.remote",
                     "bar.remote"
                  ],
                  "ip":"1.2.3.4"
               }
            ],
            "volume_groups":[

            ],
            "image":{
               "version":"1.15.8-alpine",
               "registry_hostname":"",
               "name":"nginx",
               "engine":"docker",
               "registry_port":""
            },
            "services":[
               {
                  "rolename":"nginx",
                  "annotations":{
                     "a1":"av1",
                     "a2":"av2"
                  },
                  "ports":[
                     {
                        "protocol":"TCP",
                        "name":"web",
                        "node_port":null,
                        "port":80,
                        "target_port":80
                     }
                  ],
                  "appname":"demo",
                  "cluster_ip":"172.19.177.184",
                  "labels":{
                     "l2":"v2",
                     "namespace":"t001-u000003",
                     "robin.io\/username":"robin",
                     "scope":"role",
                     "robin.io\/tenant":"Administrators",
                     "robin.io\/tenant_id":"1",
                     "robin.io\/user_id":"3",
                     "l1":"v1"
                  },
                  "type":"ClusterIP",
                  "k8s_name":"demo-nginx-cl-0",
                  "selectors":{
                     "app":"demo",
                     "robin.io\/role":"nginx"
                  }
               },
               {
                  "rolename":"nginx",
                  "annotations":{
                     "a1":"av1",
                     "a2":"av2"
                  },
                  "ports":[
                     {
                        "protocol":"TCP",
                        "name":"web",
                        "node_port":32392,
                        "port":80,
                        "target_port":80
                     }
                  ],
                  "appname":"demo",
                  "cluster_ip":"172.19.51.165",
                  "labels":{
                     "l2":"v2",
                     "namespace":"t001-u000003",
                     "robin.io\/username":"robin",
                     "scope":"role",
                     "robin.io\/tenant":"Administrators",
                     "robin.io\/tenant_id":"1",
                     "robin.io\/user_id":"3",
                     "l1":"v1"
                  },
                  "type":"LoadBalancer",
                  "k8s_name":"demo-nginx-lb-0",
                  "selectors":{
                     "app":"demo",
                     "robin.io\/role":"nginx"
                  }
               }
            ],
            "qgroups":{
               "data":{
                  "rd_min_iops":0,
                  "rd_weight":1,
                  "enabled":false,
                  "rd_max_iops":2000000,
                  "wr_min_window":500,
                  "wr_weight":1,
                  "priority":1,
                  "wr_min_iops":0,
                  "rd_min_window":500,
                  "wr_max_iops":2000000
               }
            }
         }
      ],
      "apphooks":{
         "postdestroy":"python3 postdestroy.py",
         "allocated":{
            "postcreate":{
               "spec":{
                  "template":{
                     "spec":{
                        "containers":[
                           {
                              "volumeMounts":[
                                 {
                                    "mountPath":"\/cm1",
                                    "name":"vol-cm1"
                                 },
                                 {
                                    "mountPath":"\/cm2",
                                    "name":"vol-cm2"
                                 },
                                 {
                                    "mountPath":"\/cm3",
                                    "name":"vol-cm3"
                                 }
                              ],
                              "name":"demo-pin1",
                              "image":"k8s.gcr.io\/busybox",
                              "command":[
                                 "sleep",
                                 "1"
                              ]
                           }
                        ],
                        "backoffLimit":4,
                        "volumes":[
                           {
                              "name":"vol-cm1",
                              "configMap":{
                                 "defaultMode":420,
                                 "name":"demo-cm1"
                              }
                           },
                           {
                              "name":"vol-cm2",
                              "configMap":{
                                 "defaultMode":420,
                                 "name":"demo-cm2"
                              }
                           },
                           {
                              "name":"vol-cm3",
                              "configMap":{
                                 "defaultMode":420,
                                 "name":"demo-cm3"
                              }
                           }
                        ],
                        "restartPolicy":"Never"
                     }
                  }
               },
               "type":"job"
            },
            "precreate":"python3 precreate.py",
            "info":"python3 app_info.py",
            "preclone":"python3 precreate.py",
            "postdestroy":"python3 postdestroy.py"
         },
         "postcreate":{
            "spec":{
               "template":{
                  "spec":{
                     "containers":[
                        {
                           "volumeMounts":[
                              {
                                 "mountPath":"\/cm1",
                                 "name":"vol-cm1"
                              },
                              {
                                 "mountPath":"\/cm2",
                                 "name":"vol-cm2"
                              },
                              {
                                 "mountPath":"\/cm3",
                                 "name":"vol-cm3"
                              }
                           ],
                           "name":"{{app['name'].lower()}}-pin1",
                           "image":"k8s.gcr.io\/busybox",
                           "command":[
                              "sleep",
                              "1"
                           ]
                        }
                     ],
                     "backoffLimit":4,
                     "volumes":[
                        {
                           "name":"vol-cm1",
                           "configMap":{
                              "defaultMode":420,
                              "name":"{{app['name'].lower()}}-cm1"
                           }
                        },
                        {
                           "name":"vol-cm2",
                           "configMap":{
                              "defaultMode":420,
                              "name":"{{app['name'].lower()}}-cm2"
                           }
                        },
                        {
                           "name":"vol-cm3",
                           "configMap":{
                              "defaultMode":420,
                              "name":"{{app['name'].lower()}}-cm3"
                           }
                        }
                     ],
                     "restartPolicy":"Never"
                  }
               }
            },
            "type":"job"
         },
         "info":"python3 app_info.py",
         "preclone":"python3 precreate.py",
         "precreate":"python3 precreate.py"
      },
      "bundle_object_id":"a9f229864a74f936047b1b005de391a8",
      "clonemode":"unfenced",
      "zoneid":1597969746,
      "tenant":"Administrators",
      "from_template":null,
      "master_name":"demo",
      "parent_app_state":6,
      "parent_last_known_state":6,
      "bundle_path":"\/usr\/local\/robin\/collections\/file-collection-1597953097832\/1597953155269\/nginx-1.0",
      "rpoolid":1,
      "snapshot":"enabled",
      "appvars":{
         "var2":"{{APP_NAME}}-val2",
         "var1":"{{APP_NAME}}-val1"
      },
      "snapname":"snap1",
      "rpool":"default",
      "restart_num":15,
      "username":"robin",
      "app_ns":"t001-u000003",
      "namespace":"t001-u000003",
      "desc":"",
      "parentid":13,
      "enable_metrics":true,
      "enable_hooklogs":true,
      "allocated_appvars":{
         "var2":"demo-val2",
         "var1":"demo-val1"
      },
      "id":13,
      "robin_version":"5.3.1-230",
      "auto_relocate":true,
      "bundleid":1,
      "name":"demo_snap1",
      "content_id":"a9f229864a74f936047b1b005de391a8",
      "planid":14,
      "clone":"enabled",
      "parent_app":"demo"
   },
   "jobid":147
}

11.4. Restore an Application Snapshot from a Backup

In order to restore a locally deleted snapshot from a backup copy stored in an external storage repository, issue the following command:

# robin snapshot restore <backupid>

backupid

Unique ID of a backup (obtained from the output of robin backup list)

Example:

List backups

# robin backup list
+----------------------------------+--------------------------+----------+----------------------------+--------+
| Backup ID                        | Backup Name              | Repo     | Snapshot Name              | State  |
+----------------------------------+--------------------------+----------+----------------------------+--------+
| a9a29bf44c6611ea80e52dcf1d27e528 | mysql2_backup-1581381428 | testrepo | mysql2_snapshot-1581381428 | Pushed |
+----------------------------------+--------------------------+----------+----------------------------+--------+

Verify the snapshot does not exist locally

# robin snapshot list
+----------------------------------+--------+----------+----------+------------------------------+
| Snapshot ID                      | State  | App Name | App Kind | Snapshot name                |
+----------------------------------+--------+----------+----------+------------------------------+
+----------------------------------+--------+----------+----------+------------------------------+

Restore the snapshot from the backup

# robin snapshot restore a9a29bf44c6611ea80e52dcf1d27e528 --wait
Job:  354 Name: K8SAppSnapshotRestore State: PREPARED        Error: 0
Job:  354 Name: K8SAppSnapshotRestore State: AGENT_WAIT      Error: 0
Job:  354 Name: K8SAppSnapshotRestore State: COMPLETED       Error: 0

Verify the snapshot has been restored

# robin snapshot list
+----------------------------------+--------+----------+----------+------------------------------+
| Snapshot ID                      | State  | App Name | App Kind | Snapshot name                |
+----------------------------------+--------+----------+----------+------------------------------+
| a4e900c84c6611eab476b72c237544ba | ONLINE | mysql2   | helm     | mysql2_snapshot-1581381428   |
+----------------------------------+--------+----------+----------+------------------------------+

Restores a locally deleted snapshot from a backup copy stored in an external storage repository

End Point: /v3/robin_server/snapshots/

Method: PUT

URL Parameters: None

Data Parameters:

  • action: restore - This mandatory field within the payload specifies that the restore operation is to be performed.

  • backupid: <backupid> - This mandatory field within the payload specifies which backup the snapshot should be restored from.

Port: RCM Port (default value is 29442)

Headers:

  • Authorization: <auth_token> : Authorization token to identify which user is sending the request. The token can be acquired from the login API.

Success Response Code: 202

Error Response Code: 500 (Internal Server Error), 404 (Not Found Error), 401 (Unauthorized Error), 400 (Invalid API Usage Error)

Example Response:

Output
{
   "plan":{
      "snapshotid":"41c719f0e77911ea93d70b35167412fa",
      "action":"restore",
      "backupname":"bkp-1",
      "vols":{
         "pvc-098e3286-a989-42ba-9333-12d922973514":{
            "metadata":{
               "annotations":{
                  "robin.io\/fstype":"ext4",
                  "robin.io\/appid":"1",
                  "robin.io\/snapshotid":"1",
                  "volume.beta.kubernetes.io\/storage-provisioner":"robin",
                  "robin.io\/snapname":"mysql-1_s1_r-100000",
                  "robin.io\/zoneid":"1598446881",
                  "robin.io\/volumeid":"4",
                  "meta.helm.sh\/release-namespace":"t001-u000003",
                  "robin.io\/encryption":"none",
                  "robin.io\/vol_snapname":"s1_r-100000",
                  "robin.io\/backupid":"2",
                  "meta.helm.sh\/release-name":"mysql-1",
                  "robin.io\/blocksize":"4096",
                  "volume.kubernetes.io\/selected-node":"qct-07",
                  "robin.io\/volumename":"pvc-098e3286-a989-42ba-9333-12d922973514"
               },
               "labels":{
                  "app.kubernetes.io\/managed-by":"Helm",
                  "chart":"mysql-1.6.6",
                  "app":"mysql-1",
                  "heritage":"Helm",
                  "release":"mysql-1"
               },
               "namespace":"t001-u000003",
               "name":"mysql-1"
            },
            "apiVersion":"v1",
            "kind":"PersistentVolumeClaim",
            "spec":{
               "storageClassName":"workers",
               "accessModes":[
                  "ReadWriteOnce"
               ],
               "resources":{
                  "requests":{
                     "storage":"10Gi"
                  }
               },
               "volumeMode":"Filesystem"
            }
         }
      },
      "appname":"mysql-1",
      "import":false,
      "snapname":"mysql-1_s1_r-100000",
      "repo":"repo-1",
      "backupid":"b94b6db0e7c311ea9d9f49af5651f4a6",
      "job_finished":true,
      "backup_path_prefix":"1598446881\/mysql-1_1\/b94b6db0e7c311ea9d9f49af5651f4a6"
   },
   "jobid":190
}

11.5. List Application Snapshots

Issue the following command to list application snapshots the current user is entitled to view:

# robin snapshot list --app <app_name>
                      --app-kind <app_kind>
                      --verbose

--app <app_name>

Only include snapshots for the specified applicaiton instance

--app-kind <app_kind>

Filter by application kind (valid choices are ‘robin’, ‘helm’, and ‘flexapp’)

--verbose

Include additional information in the output

Example 1: List snapshots of a specific app

# robin snapshot list --app mydb

+----------------------------------+--------+----------+----------+---------------+
| Snapshot ID                      | State  | App Name | App type | Snapshot name |
+----------------------------------+--------+----------+----------+---------------+
| 861bd41c5a4e11e9b18bf189ccf1d49b | ONLINE | mydb     | helm     | mydb_snap1    |
+----------------------------------+--------+----------+----------+---------------+

Example 2: List all snapshots

# robin snapshot list

+----------------------------------+--------+----------+----------+--------------------+
| Snapshot ID                      | State  | App Name | App type | Snapshot name      |
+----------------------------------+--------+----------+----------+--------------------+
| 861bd41c5a4e11e9b18bf189ccf1d49b | ONLINE | mydb     | helm     | mydb_snap1         |
| 8d2fa8145a4f11e9b59c2d26c7e69a00 | ONLINE | mysql-1  | helm     | mysql-1_snap-mysql |
+----------------------------------+--------+----------+----------+--------------------+

Lists all application snapshots.

End Point: /api/v6/robin_server/appsview?atype=SNAPSHOT

Method: GET

URL Parameters:

  • parentapp=<app_name> : Utilizing this parameter filters the results such that only snapshots of the specified application are returned.

  • akind=[robin,helm,flexapp] : Utilizing this parameter filters the results by the kind specified. Valid values include robin, helm and flexapp.

Data Parameters: None

Port: RCM Port (default value is 29442)

Headers:

  • Authorization: <auth_token> : Authorization token to identify which user is sending the request. The token can be acquired from the login API.

Success Response Code: 200

Error Response Code: 500 (Internal Server Error)

Example Response:

Output
{
   "robin":{
      "tenants":[
         {
            "name":"Administrators",
            "id":1
         }
      ],
      "rpools":[
         {
            "name":"default",
            "id":1
         }
      ],
      "zones":[
         {
            "zoneid":1597969746,
            "name":"default",
            "id":1
         }
      ],
      "vnodes":[
         {
            "nodeid":1,
            "mem":4194304,
            "userid":3,
            "zoneid":null,
            "cpu":1,
            "role":"dsbundle",
            "gpu":0,
            "hugepages_1g":0,
            "utime":1598343982,
            "hugepages_2m":0,
            "hostname":"test-app-new-dsbundle-01.t001-u000003.svc.cluster.local",
            "name":"test-app-new.dsbundle.01",
            "status":"ONLINE",
            "pod_name":"test-app-new-dsbundle-01",
            "appid":12,
            "engine":"docker",
            "tenantid":1,
            "state":"STARTED",
            "id":12,
            "desired_status":"ONLINE",
            "pod_ns":"t001-u000003"
         },
         {
            "nodeid":1,
            "mem":1283457024,
            "userid":3,
            "zoneid":null,
            "cpu":1,
            "role":"nginx",
            "gpu":0,
            "hugepages_1g":0,
            "utime":1598453564,
            "hugepages_2m":0,
            "hostname":"demo-nginx-01.t001-u000003.svc.cluster.local",
            "name":"demo.nginx.01",
            "status":"ONLINE",
            "pod_name":"demo-nginx-01",
            "appid":13,
            "engine":"docker",
            "tenantid":1,
            "state":"STARTED",
            "id":13,
            "desired_status":"ONLINE",
            "pod_ns":"t001-u000003"
         }
      ],
      "users":[
         {
            "email":null,
            "tenantid":1,
            "firstname":"Robin",
            "id":3,
            "username":"robin",
            "lastname":"Systems"
         }
      ],
      "nodes":[
         {
            "rpoolid":1,
            "memory_used":0,
            "nvnodes":0,
            "k8s_node_name":"cscale-82-140",
            "zoneid":1,
            "cpu":40,
            "mem":33555701760,
            "mem_for_storage":1073741824,
            "cpu_prov_factor":10,
            "name":"cscale-82-140.robinsystems.com",
            "cpu_cores_present":40,
            "state":"ONLINE",
            "id":1,
            "cores_used":0,
            "services":"{\"update_time\":1598470070.8638851643,\"services\":{\"stormgr-server\":{\"ActiveState\":\"active\",\"Type\":\"simple\",\"ExecMainStartTimestamp\":\"2020-08-20 10:29:43.555551\",\"MainPID\":2275,\"Id\":\"stormgr-server\"},\"consul-server\":{\"ActiveState\":\"active\",\"Type\":\"simple\",\"ExecMainStartTimestamp\":\"2020-08-20 10:28:49.778591\",\"MainPID\":566,\"Id\":\"consul-server\"},\"consul_members\":[{\"Port\":29460,\"Status\":1,\"DelegateMax\":5,\"ProtocolMin\":1,\"Tags\":{\"segment\":\"\",\"bootstrap\":\"1\",\"vsn_min\":\"2\",\"build\":\"0.9.4:40f243a+\",\"vsn_max\":\"3\",\"vsn\":\"2\",\"raft_vsn\":\"2\",\"role\":\"consul\",\"dc\":\"consul\",\"id\":\"9d550700-9fac-4de6-b6bc-1b957e82bda9\",\"wan_join_port\":\"29461\",\"port\":\"29459\"},\"Name\":\"cscale-82-140.robinsystems.com\",\"DelegateMin\":2,\"ProtocolCur\":2,\"DelegateCur\":4,\"Addr\":\"10.9.82.140\",\"ProtocolMax\":5}],\"robin-auth-server\":{\"ActiveState\":\"active\",\"Type\":\"simple\",\"ExecMainStartTimestamp\":\"2020-08-20 10:29:10.587576\",\"MainPID\":1007,\"Id\":\"robin-auth-server\"},\"robin-node-monitor\":{\"ActiveState\":\"active\",\"Type\":\"simple\",\"ExecMainStartTimestamp\":\"2020-08-20 10:29:31.387560\",\"MainPID\":1245,\"Id\":\"robin-node-monitor\"},\"robin-watchdog\":{\"ActiveState\":\"active\",\"Type\":\"simple\",\"ExecMainStartTimestamp\":\"2020-08-20 10:28:54.388588\",\"MainPID\":867,\"Id\":\"robin-watchdog\"},\"sherlock-server\":{\"ActiveState\":\"inactive\",\"Type\":\"simple\",\"ExecMainStartTimestamp\":0,\"MainPID\":0,\"Id\":\"sherlock-server\"},\"httpd\":{\"ActiveState\":\"active\",\"Type\":\"simple\",\"ExecMainStartTimestamp\":\"2020-08-20 10:29:46.799549\",\"MainPID\":2590,\"Id\":\"httpd\"},\"robin-file-server\":{\"ActiveState\":\"active\",\"Type\":\"simple\",\"ExecMainStartTimestamp\":\"2020-08-20 10:29:15.559572\",\"MainPID\":1074,\"Id\":\"robin-file-server\"},\"robin-event-server\":{\"ActiveState\":\"active\",\"Type\":\"simple\",\"ExecMainStartTimestamp\":\"2020-08-20 10:29:15.088572\",\"MainPID\":1041,\"Id\":\"robin-event-server\"},\"consul-client\":{\"ActiveState\":\"inactive\",\"Type\":\"simple\",\"ExecMainStartTimestamp\":0,\"MainPID\":0,\"Id\":\"consul-client\"},\"gui-cli\":{\"ActiveState\":\"active\",\"Type\":\"simple\",\"ExecMainStartTimestamp\":\"2020-08-20 10:29:46.964548\",\"MainPID\":2622,\"Id\":\"gui-cli\"},\"robin-agent\":{\"ActiveState\":\"active\",\"Type\":\"simple\",\"ExecMainStartTimestamp\":\"2020-08-20 10:29:38.987554\",\"MainPID\":1716,\"Id\":\"robin-agent\"},\"robin-server\":{\"ActiveState\":\"active\",\"Type\":\"simple\",\"ExecMainStartTimestamp\":\"2020-08-26 12:27:39.201277\",\"MainPID\":15116,\"Id\":\"robin-server\"},\"iomgr-server\":{\"ActiveState\":\"active\",\"Type\":\"simple\",\"ExecMainStartTimestamp\":\"2020-08-20 12:51:14.290049\",\"MainPID\":29172,\"Id\":\"iomgr-server\"},\"monitor-server\":{\"ActiveState\":\"active\",\"Type\":\"simple\",\"ExecMainStartTimestamp\":\"2020-08-20 10:29:47.114548\",\"MainPID\":2662,\"Id\":\"monitor-server\"},\"postgresql-9.6\":{\"ActiveState\":\"active\",\"Type\":\"simple\",\"ExecMainStartTimestamp\":\"2020-08-20 10:28:52.396589\",\"MainPID\":662,\"Id\":\"postgresql-9.6\"},\"consul_dns\":true}}"
         }
      ],
      "bundles":[
         {
            "version":"1.0",
            "name":"nginx",
            "share_with_all_tenants":false,
            "tenantid":1,
            "userid":3,
            "zoneid":1,
            "limitperbundle":0,
            "id":1
         },
         {
            "version":"1.0",
            "name":"tolerations",
            "share_with_all_tenants":false,
            "tenantid":1,
            "userid":3,
            "zoneid":1,
            "limitperbundle":0,
            "id":2
         },
         {
            "version":"1.0",
            "name":"dsbundle",
            "share_with_all_tenants":false,
            "tenantid":1,
            "userid":3,
            "zoneid":1,
            "limitperbundle":0,
            "id":3
         },
         {
            "version":"2.0",
            "name":"dsbundle",
            "share_with_all_tenants":false,
            "tenantid":1,
            "userid":3,
            "zoneid":1,
            "limitperbundle":0,
            "id":4
         },
         {
            "version":"3.0",
            "name":"dsbundle",
            "share_with_all_tenants":false,
            "tenantid":1,
            "userid":3,
            "zoneid":1,
            "limitperbundle":0,
            "id":5
         },
         {
            "version":"4.0",
            "name":"dsbundle",
            "share_with_all_tenants":false,
            "tenantid":1,
            "userid":3,
            "zoneid":1,
            "limitperbundle":0,
            "id":6
         },
         {
            "version":"10.0",
            "name":"dsbundle",
            "share_with_all_tenants":false,
            "tenantid":1,
            "userid":3,
            "zoneid":1,
            "limitperbundle":0,
            "id":7
         },
         {
            "version":"11.0",
            "name":"dsbundle",
            "share_with_all_tenants":false,
            "tenantid":1,
            "userid":3,
            "zoneid":1,
            "limitperbundle":0,
            "id":8
         },
         {
            "version":"12.0",
            "name":"dsbundle",
            "share_with_all_tenants":false,
            "tenantid":1,
            "userid":3,
            "zoneid":1,
            "limitperbundle":0,
            "id":9
         },
         {
            "version":"15.0",
            "name":"dsbundle",
            "share_with_all_tenants":false,
            "tenantid":1,
            "userid":3,
            "zoneid":1,
            "limitperbundle":0,
            "id":10
         },
         {
            "version":"new",
            "name":"dsbundle",
            "share_with_all_tenants":false,
            "tenantid":1,
            "userid":3,
            "zoneid":1,
            "limitperbundle":0,
            "id":11
         },
         {
            "version":"20.0",
            "name":"dsbundle",
            "share_with_all_tenants":false,
            "tenantid":1,
            "userid":3,
            "zoneid":1,
            "limitperbundle":0,
            "id":12
         }
      ],
      "apps":[
         {
            "rpoolid":1,
            "nvnodes":0,
            "zoneid":1,
            "mem":0,
            "atype":"SNAPSHOT",
            "name":"demo_snap1",
            "status":"Ready",
            "hugepages_1g":0,
            "tenantid":1,
            "error":0,
            "utime":0,
            "parentid":13,
            "userid":3,
            "cpu":0,
            "gpu":0,
            "bundleid":1,
            "hugepages_2m":0,
            "health":"Unknown",
            "ctime":1598454187,
            "unique_id":"3fb7b2c0e7ad11eaaa9ea101b344257c",
            "parent_app_type":"MASTER",
            "state":"ONLINE",
            "id":14,
            "parent_app":"demo"
         }
      ]
   },
   "k8s":[
      {
         "spec":"apiVersion: v1\ndata: {run.sh: ''}\nkind: ConfigMap\nmetadata:\n  labels: {app: ideal-giraffe-mysql, chart: mysql-1.6.6, heritage: Tiller, release: ideal-giraffe}\n  name: ideal-giraffe-mysql-test\n  namespace: t001-u000003\n---\napiVersion: v1\ndata: {mysql-password: Z0dPczVJRnc3aA==, mysql-root-password: WGdoZ0tRd0kyaQ==}\nkind: Secret\nmetadata:\n  labels: {app: ideal-giraffe-mysql, chart: mysql-1.6.6, heritage: Tiller, release: ideal-giraffe}\n  name: ideal-giraffe-mysql\n  namespace: t001-u000003\ntype: Opaque\n---\napiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n  annotations: {robin.io\/appid: '1', robin.io\/blocksize: '4096', robin.io\/encryption: none,\n    robin.io\/fstype: ext4, robin.io\/snapname: demo-helm_snap1, robin.io\/snapshotid: '1',\n    robin.io\/vol_snapname: snap1, robin.io\/volumeid: '7', robin.io\/volumename: pvc-b4d27bfb-a898-4acc-a250-071591c5da14,\n    robin.io\/zoneid: '1597969746', volume.beta.kubernetes.io\/storage-provisioner: robin,\n    volume.kubernetes.io\/selected-node: cscale-82-140}\n  labels: {app: ideal-giraffe-mysql, chart: mysql-1.6.6, heritage: Tiller, release: ideal-giraffe}\n  name: ideal-giraffe-mysql\n  namespace: t001-u000003\nspec:\n  accessModes: [ReadWriteOnce]\n  resources:\n    requests: {storage: 8Gi}\n  storageClassName: robin\n  volumeMode: Filesystem\n---\napiVersion: v1\nkind: Pod\nmetadata:\n  annotations: {cni.projectcalico.org\/podIPs: 172.21.7.204\/32, k8s.v1.cni.cncf.io\/network-status: \"[{\\n\\\n      \\    \\\"name\\\": \\\"calico\\\",\\n    \\\"ips\\\": [\\n        \\\"172.21.7.204\\\"\\n    ],\\n\\\n      \\    \\\"default\\\": true,\\n    \\\"dns\\\": {}\\n}]\", k8s.v1.cni.cncf.io\/networks-status: \"[{\\n\\\n      \\    \\\"name\\\": \\\"calico\\\",\\n    \\\"ips\\\": [\\n        \\\"172.21.7.204\\\"\\n    ],\\n\\\n      \\    \\\"default\\\": true,\\n    \\\"dns\\\": {}\\n}]\"}\n  labels: {app: ideal-giraffe-mysql, pod-template-hash: 7bdc9fd456, release: ideal-giraffe}\n  name: ideal-giraffe-mysql-7bdc9fd456-ld9mm\n  namespace: t001-u000003\nspec:\n  containers:\n  - env:\n    - name: MYSQL_ROOT_PASSWORD\n      valueFrom:\n        secretKeyRef: {key: mysql-root-password, name: ideal-giraffe-mysql}\n    - name: MYSQL_PASSWORD\n      valueFrom:\n        secretKeyRef: {key: mysql-password, name: ideal-giraffe-mysql, optional: true}\n    - {name: MYSQL_USER}\n    - {name: MYSQL_DATABASE}\n    image: mysql:5.7.30\n    imagePullPolicy: IfNotPresent\n    livenessProbe:\n      exec:\n        command: [sh, -c, 'mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}']\n      failureThreshold: 3\n      initialDelaySeconds: 30\n      periodSeconds: 10\n      successThreshold: 1\n      timeoutSeconds: 5\n    name: ideal-giraffe-mysql\n    ports:\n    - {containerPort: 3306, name: mysql, protocol: TCP}\n    readinessProbe:\n      exec:\n        command: [sh, -c, 'mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}']\n      failureThreshold: 3\n      initialDelaySeconds: 5\n      periodSeconds: 10\n      successThreshold: 1\n      timeoutSeconds: 1\n    resources:\n      requests: {cpu: 100m, memory: 256Mi}\n    terminationMessagePath: \/dev\/termination-log\n    terminationMessagePolicy: File\n    volumeMounts:\n    - {mountPath: \/var\/lib\/mysql, name: data}\n  dnsPolicy: ClusterFirst\n  initContainers:\n  - command: [rm, -fr, \/var\/lib\/mysql\/lost+found]\n    image: busybox:1.32\n    imagePullPolicy: IfNotPresent\n    name: remove-lost-found\n    resources:\n      requests: {cpu: 10m, memory: 10Mi}\n    terminationMessagePath: \/dev\/termination-log\n    terminationMessagePolicy: File\n    volumeMounts:\n    - {mountPath: \/var\/lib\/mysql, name: data}\n  nodeName: cscale-82-140\n  priority: 0\n  restartPolicy: Always\n  schedulerName: default-scheduler\n  securityContext: {}\n  serviceAccount: default\n  serviceAccountName: default\n  terminationGracePeriodSeconds: 30\n  tolerations:\n  - {effect: NoExecute, key: node.kubernetes.io\/not-ready, operator: Exists, tolerationSeconds: 300}\n  - {effect: NoExecute, key: node.kubernetes.io\/unreachable, operator: Exists, tolerationSeconds: 300}\n  volumes:\n  - name: data\n    persistentVolumeClaim: {claimName: ideal-giraffe-mysql}\n---\napiVersion: v1\nkind: Service\nmetadata:\n  labels: {app: ideal-giraffe-mysql, chart: mysql-1.6.6, heritage: Tiller, release: ideal-giraffe}\n  name: ideal-giraffe-mysql\n  namespace: t001-u000003\nspec:\n  ports:\n  - {name: mysql, port: 3306, protocol: TCP, targetPort: mysql}\n  selector: {app: ideal-giraffe-mysql}\n  sessionAffinity: None\n  type: ClusterIP\n---\napiVersion: apps\/v1\nkind: ReplicaSet\nmetadata:\n  annotations: {deployment.kubernetes.io\/desired-replicas: '1', deployment.kubernetes.io\/max-replicas: '1',\n    deployment.kubernetes.io\/revision: '1'}\n  labels: {app: ideal-giraffe-mysql, pod-template-hash: 7bdc9fd456, release: ideal-giraffe}\n  name: ideal-giraffe-mysql-7bdc9fd456\n  namespace: t001-u000003\nspec:\n  replicas: 1\n  selector:\n    matchLabels: {app: ideal-giraffe-mysql, pod-template-hash: 7bdc9fd456, release: ideal-giraffe}\n  template:\n    metadata:\n      creationTimestamp: null\n      labels: {app: ideal-giraffe-mysql, pod-template-hash: 7bdc9fd456, release: ideal-giraffe}\n    spec:\n      containers:\n      - env:\n        - name: MYSQL_ROOT_PASSWORD\n          valueFrom:\n            secretKeyRef: {key: mysql-root-password, name: ideal-giraffe-mysql}\n        - name: MYSQL_PASSWORD\n          valueFrom:\n            secretKeyRef: {key: mysql-password, name: ideal-giraffe-mysql, optional: true}\n        - {name: MYSQL_USER}\n        - {name: MYSQL_DATABASE}\n        image: mysql:5.7.30\n        imagePullPolicy: IfNotPresent\n        livenessProbe:\n          exec:\n            command: [sh, -c, 'mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}']\n          failureThreshold: 3\n          initialDelaySeconds: 30\n          periodSeconds: 10\n          successThreshold: 1\n          timeoutSeconds: 5\n        name: ideal-giraffe-mysql\n        ports:\n        - {containerPort: 3306, name: mysql, protocol: TCP}\n        readinessProbe:\n          exec:\n            command: [sh, -c, 'mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}']\n          failureThreshold: 3\n          initialDelaySeconds: 5\n          periodSeconds: 10\n          successThreshold: 1\n          timeoutSeconds: 1\n        resources:\n          requests: {cpu: 100m, memory: 256Mi}\n        terminationMessagePath: \/dev\/termination-log\n        terminationMessagePolicy: File\n        volumeMounts:\n        - {mountPath: \/var\/lib\/mysql, name: data}\n      dnsPolicy: ClusterFirst\n      initContainers:\n      - command: [rm, -fr, \/var\/lib\/mysql\/lost+found]\n        image: busybox:1.32\n        imagePullPolicy: IfNotPresent\n        name: remove-lost-found\n        resources:\n          requests: {cpu: 10m, memory: 10Mi}\n        terminationMessagePath: \/dev\/termination-log\n        terminationMessagePolicy: File\n        volumeMounts:\n        - {mountPath: \/var\/lib\/mysql, name: data}\n      restartPolicy: Always\n      schedulerName: default-scheduler\n      securityContext: {}\n      serviceAccount: default\n      serviceAccountName: default\n      terminationGracePeriodSeconds: 30\n      volumes:\n      - name: data\n        persistentVolumeClaim: {claimName: ideal-giraffe-mysql}\n---\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  annotations: {deployment.kubernetes.io\/revision: '1'}\n  labels: {app: ideal-giraffe-mysql, chart: mysql-1.6.6, heritage: Tiller, release: ideal-giraffe}\n  name: ideal-giraffe-mysql\n  namespace: t001-u000003\nspec:\n  progressDeadlineSeconds: 600\n  replicas: 1\n  revisionHistoryLimit: 10\n  selector:\n    matchLabels: {app: ideal-giraffe-mysql, release: ideal-giraffe}\n  strategy: {type: Recreate}\n  template:\n    metadata:\n      creationTimestamp: null\n      labels: {app: ideal-giraffe-mysql, release: ideal-giraffe}\n    spec:\n      containers:\n      - env:\n        - name: MYSQL_ROOT_PASSWORD\n          valueFrom:\n            secretKeyRef: {key: mysql-root-password, name: ideal-giraffe-mysql}\n        - name: MYSQL_PASSWORD\n          valueFrom:\n            secretKeyRef: {key: mysql-password, name: ideal-giraffe-mysql, optional: true}\n        - {name: MYSQL_USER}\n        - {name: MYSQL_DATABASE}\n        image: mysql:5.7.30\n        imagePullPolicy: IfNotPresent\n        livenessProbe:\n          exec:\n            command: [sh, -c, 'mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}']\n          failureThreshold: 3\n          initialDelaySeconds: 30\n          periodSeconds: 10\n          successThreshold: 1\n          timeoutSeconds: 5\n        name: ideal-giraffe-mysql\n        ports:\n        - {containerPort: 3306, name: mysql, protocol: TCP}\n        readinessProbe:\n          exec:\n            command: [sh, -c, 'mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}']\n          failureThreshold: 3\n          initialDelaySeconds: 5\n          periodSeconds: 10\n          successThreshold: 1\n          timeoutSeconds: 1\n        resources:\n          requests: {cpu: 100m, memory: 256Mi}\n        terminationMessagePath: \/dev\/termination-log\n        terminationMessagePolicy: File\n        volumeMounts:\n        - {mountPath: \/var\/lib\/mysql, name: data}\n      dnsPolicy: ClusterFirst\n      initContainers:\n      - command: [rm, -fr, \/var\/lib\/mysql\/lost+found]\n        image: busybox:1.32\n        imagePullPolicy: IfNotPresent\n        name: remove-lost-found\n        resources:\n          requests: {cpu: 10m, memory: 10Mi}\n        terminationMessagePath: \/dev\/termination-log\n        terminationMessagePolicy: File\n        volumeMounts:\n        - {mountPath: \/var\/lib\/mysql, name: data}\n      restartPolicy: Always\n      schedulerName: default-scheduler\n      securityContext: {}\n      serviceAccount: default\n      serviceAccountName: default\n      terminationGracePeriodSeconds: 30\n      volumes:\n      - name: data\n        persistentVolumeClaim: {claimName: ideal-giraffe-mysql}\n",
         "description":"",
         "kind":"helm",
         "tenant":"Administrators",
         "restored":false,
         "name":"demo-helm_snap1",
         "appname":"demo-helm",
         "create_time":1598471771,
         "state":"ONLINE",
         "id":"2e9b06e2e7d611eabebb977b67a45f3b",
         "username":"robin",
         "num_backups":0,
         "desc":"-"
      }
   ]
}

11.6. Show Information About a Specific Snapshot

In order to attain details about a specific snapshot such as its kind, the objects which are captured within it and its creation time, issue the following command:

# robin snapshot info <snapshotid>
                      --specs

snapshotid

Unique ID of the snapshot

specs

Output the spec file associated with the snapshot

Example 1: Information displayed for a Robin Bundle based application snapshot

# robin snapshot info 3fb7b2c0e7ad11eaaa9ea101b344257c
Name                   : demo_snap1
Id                     : 3fb7b2c0e7ad11eaaa9ea101b344257c
Application Name       : demo
Application Kind       : ROBIN
State                  : ONLINE
Description            : -
Number of volumes      : 1
Number of backups      : 0
Creation Time          : 26 Aug 2020 08:03:07
Restored               : FALSE

Instances:
+---------------+---------------+--------------+
| Name          | Pod Name      | Namespace    |
+---------------+---------------+--------------+
| demo.nginx.01 | demo-nginx-01 | t001-u000003 |
+---------------+---------------+--------------+

Volumes:
+-----------------------------------------------------------+-------------------------------+--------------+-----------+---------------------------+
| ROBIN Name                                                | K8s Name                      | Namespace    | Size (GB) | Snapshot Space Limit (GB) |
+-----------------------------------------------------------+-------------------------------+--------------+-----------+---------------------------+
| demo.nginx.01.data.1.68f51300-c283-4df7-bd9e-43d7314e1a42 | demo-nginx-01-data-1-68f51300 | t001-u000003 | 20G       | 4G                        |
+-----------------------------------------------------------+-------------------------------+--------------+-----------+---------------------------+

Example 2: Information displayed for a Helm based application snapshot

# robin snapshot info a4e900c84c6611eab476b72c237544ba
Name                   : mysql2_snapshot-1581381428
Id                     : a4e900c84c6611eab476b72c237544ba
Application Name       : mysql2
Application Kind       : helm
State                  : ONLINE
Description            : -
Number of volumes      : 1
Number of backups      : 0
Creation Time          : 10 Feb 2020 16:37:20
Restored               : TRUE

Spec:
+-----------------------+-------------------------------------------+--------------+
| Kind                  | Name                                      | Namespace    |
+-----------------------+-------------------------------------------+--------------+
| ConfigMap             | jaundiced-lionfish-mysql-test             | t003-u000005 |
| Secret                | jaundiced-lionfish-mysql                  | t003-u000005 |
| PersistentVolumeClaim | jaundiced-lionfish-mysql                  | t003-u000005 |
| Pod                   | jaundiced-lionfish-mysql-84bc874656-q4twd | t003-u000005 |
| Service               | jaundiced-lionfish-mysql                  | t003-u000005 |
| ReplicaSet            | jaundiced-lionfish-mysql-84bc874656       | t003-u000005 |
| Deployment            | jaundiced-lionfish-mysql                  | t003-u000005 |
+-----------------------+-------------------------------------------+--------------+

Volumes:
+------------------------------------------+-----------+--------------------+
| ROBIN Name                               | Size (GB) | Snapshot Size (GB) |
+------------------------------------------+-----------+--------------------+
| pvc-a17b6cb2-a6bb-4fc4-a0e3-97baa28ffdc6 | 8         | -                  |
+------------------------------------------+-----------+--------------------+

Returns details about a specific snapshot such as its kind, the objects which are captured within it and its creation time,

End Point: /api/v6/robin_server/apps/<snapshot_id>?objtype=snapshot

Method: GET

URL Parameters: None

Data Parameters: None

Port: RCM Port (default value is 29442)

Headers:

  • Authorization: <auth_token> : Authorization token to identify which user is sending the request. The token can be acquired from the login API.

Success Response Code: 200

Error Response Code: 500 (Internal Server Error), 404 (Not Found Error), 401 (Unauthorized Error)

Example Response:

Output
{
   "nsnapshots":0,
   "updates_available":false,
   "nvnodes":0,
   "app_kind":"robin",
   "bundle_name":"nginx",
   "zoneid":1597969746,
   "error":0,
   "mem":0,
   "gpu":0,
   "vnodes":[

   ],
   "name":"demo_snap1",
   "status":"Ready",
   "message":"",
   "resources":[

   ],
   "user_shares":[

   ],
   "rpool":"default",
   "nbackups":0,
   "backups":[

   ],
   "utime":0,
   "owner":{
      "first_name":"Robin",
      "last_name":"Systems",
      "email":null,
      "tenant_id":1,
      "username":"robin",
      "user_id":3,
      "tenant_name":"Administrators"
   },
   "restore_status":{
      "bytes_count":0,
      "bytes_skipped":0,
      "creation_end_time":0,
      "bytes_transferred":0,
      "creation_time":0
   },
   "parentid":13,
   "local_avail":true,
   "clone":false,
   "parent_app":"demo",
   "bundle_version":"1.0",
   "atype":"SNAPSHOT",
   "bundleid":1,
   "ctime":1598454187,
   "autopilot":true,
   "health":"Unknown",
   "ainstances":[

   ],
   "config":{
      "version":"1.15.8",
      "pvcpolicy":"create",
      "roles":[
         {
            "display_name":"nginx",
            "serviceAccountName":"{{app['name'].lower()}}-sa",
            "scaleout":"enabled",
            "name":"nginx",
            "restart_on_qoscfg":true,
            "vnodes":[
               {
                  "allocated_initContainers":[
                     {
                        "volumeMounts":[
                           {
                              "mountPath":"\/cm1",
                              "name":"vol-cm1"
                           },
                           {
                              "mountPath":"\/cm2",
                              "name":"vol-cm2"
                           },
                           {
                              "mountPath":"\/cm3",
                              "name":"vol-cm3"
                           }
                        ],
                        "name":"init",
                        "securityContext":{
                           "allowPrivilegeEscalation":true
                        },
                        "resources":{
                           "limits":{
                              "memory":"128Mi",
                              "cpu":"25m"
                           }
                        },
                        "imagePullPolicy":"IfNotPresent",
                        "image":"k8s.gcr.io\/busybox",
                        "command":[
                           "sleep",
                           "1"
                        ]
                     }
                  ],
                  "k8s_provider":"robin",
                  "bundle_object_id":"a9f229864a74f936047b1b005de391a8",
                  "allocated_volumeMounts":[
                     {
                        "mountPath":"\/cm1",
                        "name":"vol-cm1"
                     },
                     {
                        "mountPath":"\/cm2",
                        "name":"vol-cm2"
                     },
                     {
                        "mountPath":"\/cm3",
                        "name":"vol-cm3"
                     }
                  ],
                  "mem":{
                     "hugepages_2m":0,
                     "hugepages_1g":0,
                     "size":1283457024
                  },
                  "restart_num":15,
                  "bundle_path":"\/usr\/local\/robin\/collections\/file-collection-1597953097832\/1597953155269\/nginx-1.0",
                  "root_fs":"\/usr\/local\/robin\/instances\/demo-nginx-01.t001-u000003.svc.cluster.local",
                  "pod_name":"demo-nginx-01",
                  "appid":13,
                  "host_ip":"172.21.20.104",
                  "volumes":[
                     {
                        "name":"vol-cm1",
                        "configMap":{
                           "defaultMode":420,
                           "name":"{{app['name'].lower()}}-cm1"
                        }
                     },
                     {
                        "name":"vol-cm2",
                        "configMap":{
                           "defaultMode":420,
                           "name":"{{app['name'].lower()}}-cm2"
                        }
                     },
                     {
                        "name":"vol-cm3",
                        "configMap":{
                           "defaultMode":420,
                           "name":"{{app['name'].lower()}}-cm3"
                        }
                     }
                  ],
                  "service_uids":[
                     "8de44f8e-fec0-47ee-b425-970758749188",
                     "3ca02e11-24b9-4555-8386-4f1b0e5e44fc",
                     "d273da82-86c3-4be6-9b29-1b930bece779"
                  ],
                  "appname":"demo",
                  "restart_on_qoscfg":true,
                  "env":{
                     "allocated":{
                        "ROBINHOST_TAG_ROBINRPOOL":"default",
                        "ROBINHOST_TAG_KUBERNETES.IO-OS":"linux",
                        "POD_NS":"t001-u000003",
                        "POD_NAME":"demo-nginx-01",
                        "K8S_NODE":"cscale-82-140",
                        "ROBINHOST":"cscale-82-140.robinsystems.com",
                        "ROBINHOST_TAG_KUBERNETES.IO-ARCH":"amd64"
                     }
                  },
                  "serviceAccountName":"{{app['name'].lower()}}-sa",
                  "initContainers":[
                     {
                        "volumeMounts":[
                           {
                              "mountPath":"\/cm1",
                              "name":"vol-cm1"
                           },
                           {
                              "mountPath":"\/cm2",
                              "name":"vol-cm2"
                           },
                           {
                              "mountPath":"\/cm3",
                              "name":"vol-cm3"
                           }
                        ],
                        "name":"init",
                        "securityContext":{
                           "allowPrivilegeEscalation":true
                        },
                        "resources":{
                           "limits":{
                              "memory":"128Mi",
                              "cpu":"25m"
                           }
                        },
                        "imagePullPolicy":"IfNotPresent",
                        "image":"k8s.gcr.io\/busybox",
                        "command":[
                           "sleep",
                           "1"
                        ]
                     }
                  ],
                  "enable_hooklogs":true,
                  "vnodeid":13,
                  "allocated_volumes":[
                     {
                        "name":"vol-cm1",
                        "configMap":{
                           "defaultMode":420,
                           "name":"demo-cm1"
                        }
                     },
                     {
                        "name":"vol-cm2",
                        "configMap":{
                           "defaultMode":420,
                           "name":"demo-cm2"
                        }
                     },
                     {
                        "name":"vol-cm3",
                        "configMap":{
                           "defaultMode":420,
                           "name":"demo-cm3"
                        }
                     }
                  ],
                  "volume_groups":[
                     {
                        "rpoolid":1,
                        "name":"demo.nginx.01.72.1.9457505a-dcf2-4f0c-b416-9467c10342d7",
                        "media":"HDD",
                        "stormgr_id":6,
                        "layout":"round-robin",
                        "replicas":1,
                        "volumes":[
                           "demo.nginx.01.data.1.68f51300-c283-4df7-bd9e-43d7314e1a42"
                        ],
                        "device_sets":[
                           {
                              "devices":[
                                 {
                                    "host":"cscale-82-140.robinsystems.com",
                                    "tags":{

                                    },
                                    "wwn":"0x600224803bcdafde95b1f5cd27ceb5fb",
                                    "hostname":"cscale-82-140.robinsystems.com",
                                    "max_volumes_per_disk":10,
                                    "stormgr_id":2,
                                    "slices":77,
                                    "score":73,
                                    "type":"HDD",
                                    "devpath":"\/dev\/disk\/by-id\/scsi-3600224803bcdafde95b1f5cd27ceb5fb",
                                    "allocated_slices":24,
                                    "max_latency_sensitive_vols_per_disk":2,
                                    "write_unit":4096,
                                    "psize":107374182400,
                                    "reattachable":0,
                                    "pused":1107296256,
                                    "max_throughput_intensive_vols_per_disk":1,
                                    "protected":0,
                                    "role":"Storage",
                                    "aslices":50,
                                    "state":"READY",
                                    "capacity":107374182400
                                 }
                              ],
                              "name":"demo.nginx.01.72.1.9457505a-dcf2-4f0c-b416-9467c10342d7.0.a6cab386-2774-46d1-ad51-7a0f11fcdb35",
                              "stormgr_id":6
                           }
                        ]
                     }
                  ],
                  "gpu":{
                     "min":0,
                     "max":0
                  },
                  "bundleid":1,
                  "engine":"docker",
                  "annotations":{
                     "annokey1":"annovalue1",
                     "allocated":{
                        "annokey1":"annovalue1",
                        "annokey2":"annovalue2"
                     },
                     "annokey2":"annovalue2"
                  },
                  "ctime":1598453564,
                  "podSecurityContext":{
                     "runAsUser":0,
                     "allocated":{
                        "runAsUser":0
                     }
                  },
                  "hosttags":{
                     "robin.io\/robinrpool":[
                        "default"
                     ],
                     "kubernetes.io\/arch":[
                        "amd64"
                     ],
                     "kubernetes.io\/os":[
                        "linux"
                     ]
                  },
                  "allocated_host":"cscale-82-140.robinsystems.com",
                  "calico_inuse":true,
                  "image":{
                     "version":"1.15.8-alpine",
                     "registry_hostname":"",
                     "name":"nginx",
                     "engine":"docker",
                     "registry_port":""
                  },
                  "hostAliases":[
                     {
                        "hostnames":[
                           "foo.remote",
                           "bar.remote"
                        ],
                        "ip":"1.2.3.4"
                     }
                  ],
                  "readinessProbe":{
                     "exec":{
                        "command":[
                           "sleep",
                           "1"
                        ]
                     },
                     "initialDelaySeconds":5,
                     "allocated":{
                        "exec":{
                           "command":[
                              "sleep",
                              "1"
                           ]
                        },
                        "initialDelaySeconds":5
                     }
                  },
                  "rpoolid":1,
                  "role":"nginx",
                  "livenessProbe":{
                     "allocated":{
                        "periodSeconds":3,
                        "httpGet":{
                           "path":"\/",
                           "httpHeaders":[
                              {
                                 "value":"Awesome",
                                 "name":"Custom-Header"
                              }
                           ],
                           "port":80
                        },
                        "initialDelaySeconds":3
                     },
                     "periodSeconds":3,
                     "httpGet":{
                        "path":"\/",
                        "httpHeaders":[
                           {
                              "value":"Awesome",
                              "name":"Custom-Header"
                           }
                        ],
                        "port":80
                     },
                     "initialDelaySeconds":3
                  },
                  "utime":1598453564,
                  "volumeMounts":[
                     {
                        "mountPath":"\/cm1",
                        "name":"vol-cm1"
                     },
                     {
                        "mountPath":"\/cm2",
                        "name":"vol-cm2"
                     },
                     {
                        "mountPath":"\/cm3",
                        "name":"vol-cm3"
                     }
                  ],
                  "hostname":"demo-nginx-01.t001-u000003.svc.cluster.local",
                  "name":"demo.nginx.01",
                  "numa_allocations":{
                     "0":{
                        "gpu_used":0,
                        "isol_shared_cores_used":0,
                        "isol_dedicated_cores_used":0,
                        "hugepages_1g_used":0,
                        "hugepages_2m_used":0,
                        "mem_used":1283457024,
                        "non_isol_cores_used":1
                     }
                  },
                  "sidecars":[
                     {
                        "volumeMounts":[
                           {
                              "mountPath":"\/cm1",
                              "name":"vol-cm1"
                           },
                           {
                              "mountPath":"\/cm2",
                              "name":"vol-cm2"
                           },
                           {
                              "mountPath":"\/cm3",
                              "name":"vol-cm3"
                           }
                        ],
                        "name":"busyside1",
                        "securityContext":{
                           "allowPrivilegeEscalation":true
                        },
                        "resources":{
                           "requests":{
                              "memory":"100Mi"
                           },
                           "limits":{
                              "memory":"200Mi"
                           }
                        },
                        "image":"k8s.gcr.io\/busybox",
                        "command":[
                           "sleep",
                           "3000"
                        ]
                     }
                  ],
                  "storage":[
                     {
                        "faultdomain":"host",
                        "pvcpolicy":"create",
                        "compression":"disabled",
                        "vol_ns":"t001-u000003",
                        "snapname":"snap1",
                        "lvm_vol_count":"0",
                        "replication":1,
                        "name":"demo.nginx.01.data.1.68f51300-c283-4df7-bd9e-43d7314e1a42",
                        "blocksize":4096,
                        "workload":0,
                        "protection":0,
                        "type":"data",
                        "k8s_name":"demo-nginx-01-data-1-68f51300",
                        "volgrp_name":"demo.nginx.01.72.1.9457505a-dcf2-4f0c-b416-9467c10342d7",
                        "stordriver":{
                           "faultdomain":"host",
                           "protection":0,
                           "type":"das",
                           "media":"HDD"
                        },
                        "lvm_type":"None",
                        "snapshot_space_limit":4294967296,
                        "layout":"round-robin",
                        "encryption":"none",
                        "disk_tags":{

                        },
                        "mount_in_sidecars":true,
                        "allocated":{
                           "qgroupid":5,
                           "multinode_mounting":false,
                           "compression":0,
                           "genkey":1598453534287911,
                           "priority":2,
                           "snapname":"snap1",
                           "vtype":0,
                           "replication":1,
                           "current_snapshotid":1,
                           "name":"demo.nginx.01.data.1.68f51300-c283-4df7-bd9e-43d7314e1a42",
                           "params":{

                           },
                           "protection":0,
                           "appid":1,
                           "appname":"default",
                           "snapshot_space_limit":4294967296,
                           "stordriver":{
                              "faultdomain":"host",
                              "protection":0,
                              "type":"das",
                              "media":"HDD"
                           },
                           "block_size":4096,
                           "partitions":0,
                           "current_snapshot":"active_snap",
                           "grpid":6,
                           "next_snapshotid":2,
                           "next_backupid":1,
                           "media":72,
                           "size":21474836480,
                           "slice_size":1073741824,
                           "volumeid":"6",
                           "resource_poolid":1
                        },
                        "snap_reserved":20,
                        "media":"HDD",
                        "mount_in_initcontainers":true,
                        "path":"\/opt\/data",
                        "fstype":"ext4",
                        "size":21474836480
                     }
                  ],
                  "labels":{
                     "labelkey2":"labelvalue2",
                     "allocated":{
                        "labelkey2":"labelvalue2",
                        "labelkey1":"labelvalue1"
                     },
                     "labelkey1":"labelvalue1"
                  },
                  "allocated_host_type":"physical",
                  "enable_metrics":true,
                  "pod_ns":"t001-u000003",
                  "allocated_host_public_ip":"10.9.82.140",
                  "enable_portmapping":true,
                  "vnodehookargs":{

                  },
                  "cpu":{
                     "reserve":false,
                     "min":0,
                     "max":1
                  },
                  "allocated_host_public_hostname":"cscale-82-140.robinsystems.com",
                  "allocated_sidecars":[
                     {
                        "volumeMounts":[
                           {
                              "mountPath":"\/cm1",
                              "name":"vol-cm1"
                           },
                           {
                              "mountPath":"\/cm2",
                              "name":"vol-cm2"
                           },
                           {
                              "mountPath":"\/cm3",
                              "name":"vol-cm3"
                           }
                        ],
                        "name":"busyside1",
                        "securityContext":{
                           "allowPrivilegeEscalation":true
                        },
                        "resources":{
                           "requests":{
                              "memory":"100Mi"
                           },
                           "limits":{
                              "memory":"200Mi"
                           }
                        },
                        "image":"k8s.gcr.io\/busybox",
                        "command":[
                           "sleep",
                           "3000"
                        ]
                     }
                  ],
                  "cm_keys":[
                     "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCULUZ7abTGyeGhxSuXejf0VohBrk2ndhAQj0mx8whbs\/qyJmVmzenvGUVGGXSfri7m3PE++2V0xMathKizVpjcrWXoFTNZLlJKBVWog5XaCYIYRswAlow+rQU6aKJ+lP2DlUgmpZ9iG9VCae0vt+JosC2LeIDmgNm5vD6AN0aB\/rKHeQjCiJyvr90d9MbQ\/JAsh+\/1EkA4fTuTXRstlMH86gB+7JhAeCROIBz32Y7HV8hKf0SQx2fj2XFeQsRcZm8oC8n1En87qBXk+iz3qKkZBduNDp8XnKWFvhsKDQkuWGr1jUNp1SyaqNSFFZrv+EyFC1sHoORuJwAwYp8DLwyF root@cscale-82-140"
                  ],
                  "role_name":"nginx",
                  "allocated":{
                     "zonename":"default",
                     "nodeid":1,
                     "nodename":"cscale-82-140",
                     "zoneid":1597969746
                  },
                  "allocated_serviceAccountName":"demo-sa",
                  "securityContext":{
                     "allowPrivilegeEscalation":true,
                     "allocated":{
                        "allowPrivilegeEscalation":true
                     }
                  },
                  "network":[
                     {
                        "allocated_names":[
                           "eth0"
                        ],
                        "interfaces":1,
                        "allocated_netmask":"255.255.0.0",
                        "name":"robin-default",
                        "ippool":"robin-default",
                        "allocated_ip":"172.21.20.104",
                        "driver":"calico",
                        "subnet":"172.21.0.0",
                        "allocated_by":"system",
                        "allocated_prefix":16
                     }
                  ],
                  "sidecar_info":{
                     "containers":[
                        {
                           "hugepages_2m":0,
                           "name":"busyside1",
                           "cpu":0,
                           "mem":209715200,
                           "gpu":0,
                           "hugepages_1g":0
                        }
                     ],
                     "hugepages_2m":0,
                     "cpu":0,
                     "mem":209715200,
                     "gpu":0,
                     "hugepages_1g":0
                  },
                  "state":"STARTED",
                  "id":13,
                  "services":[
                     {
                        "annotations":{
                           "a1":"av1",
                           "a2":"av2"
                        },
                        "labels":{
                           "l2":"v2",
                           "namespace":"t001-u000003",
                           "robin.io\/username":"robin",
                           "scope":"vnode",
                           "robin.io\/tenant":"Administrators",
                           "robin.io\/tenant_id":"1",
                           "robin.io\/user_id":"3",
                           "l1":"v1"
                        },
                        "appname":"demo",
                        "scope":"pod",
                        "ports":[
                           {
                              "protocol":"TCP",
                              "name":"web",
                              "node_port":31574,
                              "port":80,
                              "target_port":80
                           }
                        ],
                        "cluster_ip":"172.19.64.18",
                        "vnodename":"demo-nginx-01",
                        "type":"NodePort",
                        "k8s_name":"demo-nginx-01-np-0",
                        "selectors":{
                           "robin.io\/vnode":"demo-nginx-01"
                        }
                     }
                  ]
               }
            ],
            "hostAliases":[
               {
                  "hostnames":[
                     "foo.remote",
                     "bar.remote"
                  ],
                  "ip":"1.2.3.4"
               }
            ],
            "volume_groups":[

            ],
            "image":{
               "version":"1.15.8-alpine",
               "registry_hostname":"",
               "name":"nginx",
               "engine":"docker",
               "registry_port":""
            },
            "services":[
               {
                  "rolename":"nginx",
                  "annotations":{
                     "a1":"av1",
                     "a2":"av2"
                  },
                  "ports":[
                     {
                        "protocol":"TCP",
                        "name":"web",
                        "node_port":null,
                        "port":80,
                        "target_port":80
                     }
                  ],
                  "appname":"demo",
                  "cluster_ip":"172.19.177.184",
                  "labels":{
                     "l2":"v2",
                     "namespace":"t001-u000003",
                     "robin.io\/username":"robin",
                     "scope":"role",
                     "robin.io\/tenant":"Administrators",
                     "robin.io\/tenant_id":"1",
                     "robin.io\/user_id":"3",
                     "l1":"v1"
                  },
                  "type":"ClusterIP",
                  "k8s_name":"demo-nginx-cl-0",
                  "selectors":{
                     "app":"demo",
                     "robin.io\/role":"nginx"
                  }
               },
               {
                  "rolename":"nginx",
                  "annotations":{
                     "a1":"av1",
                     "a2":"av2"
                  },
                  "ports":[
                     {
                        "protocol":"TCP",
                        "name":"web",
                        "node_port":32392,
                        "port":80,
                        "target_port":80
                     }
                  ],
                  "appname":"demo",
                  "cluster_ip":"172.19.51.165",
                  "labels":{
                     "l2":"v2",
                     "namespace":"t001-u000003",
                     "robin.io\/username":"robin",
                     "scope":"role",
                     "robin.io\/tenant":"Administrators",
                     "robin.io\/tenant_id":"1",
                     "robin.io\/user_id":"3",
                     "l1":"v1"
                  },
                  "type":"LoadBalancer",
                  "k8s_name":"demo-nginx-lb-0",
                  "selectors":{
                     "app":"demo",
                     "robin.io\/role":"nginx"
                  }
               }
            ],
            "qgroups":{
               "data":{
                  "rd_min_iops":0,
                  "rd_weight":1,
                  "enabled":false,
                  "rd_max_iops":2000000,
                  "wr_min_window":500,
                  "wr_weight":1,
                  "priority":1,
                  "wr_min_iops":0,
                  "rd_min_window":500,
                  "wr_max_iops":2000000
               }
            }
         }
      ],
      "apphooks":{
         "postdestroy":"python3 postdestroy.py",
         "allocated":{
            "postcreate":{
               "spec":{
                  "template":{
                     "spec":{
                        "containers":[
                           {
                              "volumeMounts":[
                                 {
                                    "mountPath":"\/cm1",
                                    "name":"vol-cm1"
                                 },
                                 {
                                    "mountPath":"\/cm2",
                                    "name":"vol-cm2"
                                 },
                                 {
                                    "mountPath":"\/cm3",
                                    "name":"vol-cm3"
                                 }
                              ],
                              "name":"demo-pin1",
                              "image":"k8s.gcr.io\/busybox",
                              "command":[
                                 "sleep",
                                 "1"
                              ]
                           }
                        ],
                        "backoffLimit":4,
                        "volumes":[
                           {
                              "name":"vol-cm1",
                              "configMap":{
                                 "defaultMode":420,
                                 "name":"demo-cm1"
                              }
                           },
                           {
                              "name":"vol-cm2",
                              "configMap":{
                                 "defaultMode":420,
                                 "name":"demo-cm2"
                              }
                           },
                           {
                              "name":"vol-cm3",
                              "configMap":{
                                 "defaultMode":420,
                                 "name":"demo-cm3"
                              }
                           }
                        ],
                        "restartPolicy":"Never"
                     }
                  }
               },
               "type":"job"
            },
            "precreate":"python3 precreate.py",
            "info":"python3 app_info.py",
            "preclone":"python3 precreate.py",
            "postdestroy":"python3 postdestroy.py"
         },
         "postcreate":{
            "spec":{
               "template":{
                  "spec":{
                     "containers":[
                        {
                           "volumeMounts":[
                              {
                                 "mountPath":"\/cm1",
                                 "name":"vol-cm1"
                              },
                              {
                                 "mountPath":"\/cm2",
                                 "name":"vol-cm2"
                              },
                              {
                                 "mountPath":"\/cm3",
                                 "name":"vol-cm3"
                              }
                           ],
                           "name":"{{app['name'].lower()}}-pin1",
                           "image":"k8s.gcr.io\/busybox",
                           "command":[
                              "sleep",
                              "1"
                           ]
                        }
                     ],
                     "backoffLimit":4,
                     "volumes":[
                        {
                           "name":"vol-cm1",
                           "configMap":{
                              "defaultMode":420,
                              "name":"{{app['name'].lower()}}-cm1"
                           }
                        },
                        {
                           "name":"vol-cm2",
                           "configMap":{
                              "defaultMode":420,
                              "name":"{{app['name'].lower()}}-cm2"
                           }
                        },
                        {
                           "name":"vol-cm3",
                           "configMap":{
                              "defaultMode":420,
                              "name":"{{app['name'].lower()}}-cm3"
                           }
                        }
                     ],
                     "restartPolicy":"Never"
                  }
               }
            },
            "type":"job"
         },
         "info":"python3 app_info.py",
         "preclone":"python3 precreate.py",
         "precreate":"python3 precreate.py"
      },
      "bundle_object_id":"a9f229864a74f936047b1b005de391a8",
      "clonemode":"unfenced",
      "zoneid":1597969746,
      "tenant":"Administrators",
      "from_template":null,
      "master_name":"demo",
      "parent_last_known_state":6,
      "bundle_path":"\/usr\/local\/robin\/collections\/file-collection-1597953097832\/1597953155269\/nginx-1.0",
      "rpoolid":1,
      "snapshot":"enabled",
      "appvars":{
         "var2":"{{APP_NAME}}-val2",
         "var1":"{{APP_NAME}}-val1"
      },
      "snapname":"snap1",
      "rpool":"default",
      "restart_num":15,
      "username":"robin",
      "app_ns":"t001-u000003",
      "namespace":"t001-u000003",
      "desc":"",
      "parentid":13,
      "enable_metrics":true,
      "enable_hooklogs":true,
      "allocated_appvars":{
         "var2":"demo-val2",
         "var1":"demo-val1"
      },
      "id":13,
      "robin_version":"5.3.1-230",
      "auto_relocate":true,
      "bundleid":1,
      "name":"demo_snap1",
      "content_id":"a9f229864a74f936047b1b005de391a8",
      "planid":14,
      "clone":"enabled"
   },
   "appcfg_autopilot":true,
   "snapshots":[

   ],
   "unique_id":"3fb7b2c0e7ad11eaaa9ea101b344257c",
   "disk":0,
   "backup_state":"Push failed",
   "state":"ONLINE",
   "id":14,
   "cpu":0,
   "repos":[

   ],
   "storagerepos":[

   ]
}