BVB Source Codes

cockpit Show test-volumes.js Source code

Return Download cockpit: download test-volumes.js Source code - Download cockpit Source code - Type:.js
  1. /*
  2.  * This file is part of Cockpit.
  3.  *
  4.  * Copyright (C) 2016 Red Hat, Inc.
  5.  *
  6.  * Cockpit is free software; you can redistribute it and/or modify it
  7.  * under the terms of the GNU Lesser General Public License as published by
  8.  * the Free Software Foundation; either version 2.1 of the License, or
  9.  * (at your option) any later version.
  10.  *
  11.  * Cockpit is distributed in the hope that it will be useful, but
  12.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14.  * Lesser General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU Lesser General Public License
  17.  * along with Cockpit; If not, see <http://www.gnu.org/licenses/>.
  18.  */
  19.  
  20. var angular = require("angular");
  21. var QUnit = require("qunit-tests");
  22.  
  23. require("./volumes");
  24. require("./kube-client-cockpit");
  25.  
  26. function suite(fixtures) {
  27.     "use strict";
  28.  
  29.     /* Filled in with a function */
  30.     var inject;
  31.     var assert = QUnit;
  32.  
  33.     var module = angular.module("kubernetes.volumes.tests", [
  34.         "kubeClient",
  35.         'kubeClient.cockpit',
  36.         "kubernetes.volumes",
  37.         "kubeUtils",
  38.     ])
  39.  
  40.     .config([
  41.         'KubeTranslateProvider',
  42.         'KubeFormatProvider',
  43.         function(KubeTranslateProvider, KubeFormatProvider) {
  44.             KubeTranslateProvider.KubeTranslateFactory = "CockpitTranslate";
  45.             KubeFormatProvider.KubeFormatFactory = "CockpitFormat";
  46.         }
  47.     ]);
  48.  
  49.     function volumesTest(name, count, fixtures, func) {
  50.         QUnit.test(name, function() {
  51.             assert.expect(count);
  52.             inject([
  53.                 "kubeLoader",
  54.                 function(loader, data) {
  55.                     loader.reset(true);
  56.                     if (fixtures)
  57.                         loader.handle(fixtures);
  58.                 }
  59.             ]);
  60.             inject(func);
  61.         });
  62.     }
  63.  
  64.     volumesTest("pods for Claim", 4, fixtures, [
  65.         "volumeData",
  66.         'kubeSelect',
  67.         function(volumeData, select) {
  68.             var claim = select().kind("PersistentVolumeClaim").name("bound-claim").one();
  69.             var pods = volumeData.podsForClaim(claim);
  70.             assert.equal(pods.length, 1, "number of pods");
  71.             assert.equal(pods.one().metadata.name, "mock-pod", "correct pod");
  72.  
  73.             pods = volumeData.podsForClaim();
  74.             assert.deepEqual(pods.length, 0, "null claim pods");
  75.  
  76.             pods = volumeData.podsForClaim({});
  77.             assert.deepEqual(pods.length, 0, "empty claim pods");
  78.         }
  79.     ]);
  80.  
  81.     volumesTest("volumes for Pod", 4, fixtures, [
  82.         "volumeData",
  83.         'kubeSelect',
  84.         function(volumeData, select) {
  85.             var pod = select().kind("Pod").one();
  86.             var volumes = volumeData.volumesForPod(pod);
  87.             assert.deepEqual(volumes, {
  88.               "default-token-luvqo": {
  89.                 "name": "default-token-luvqo",
  90.                 "secret": {
  91.                     "secretName": "default-token-luvqo"
  92.                 },
  93.                 "mounts": {
  94.                   "mock-volume-container": {
  95.                     "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
  96.                     "name": "default-token-luvqo",
  97.                     "readOnly": true
  98.                   },
  99.                   "mock-volume-container1": {
  100.                     "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
  101.                     "name": "default-token-luvqo",
  102.                     "readOnly": true
  103.                   }
  104.                 }
  105.               },
  106.               "host-tmp": {
  107.                 "mounts": {
  108.                   "mock-volume-container": {
  109.                     "mountPath": "/other",
  110.                     "name": "host-tmp"
  111.                   },
  112.                   "mock-volume-container1": {
  113.                     "mountPath": "/tmp",
  114.                     "name": "host-tmp"
  115.                   }
  116.                 },
  117.                 "name": "host-tmp",
  118.                 "persistentVolumeClaim": {
  119.                   "claimName": "bound-claim"
  120.                 }
  121.               },
  122.               "missing-claim": {
  123.                 "mounts": {
  124.                   "mock-volume-container": {
  125.                     "mountPath": "/tmp",
  126.                     "name": "missing-claim"
  127.                   }
  128.                 },
  129.                 "name": "missing-claim",
  130.                 "persistentVolumeClaim": {
  131.                   "claimName": "missing-claim"
  132.                 }
  133.               },
  134.               "missing-claim2": {
  135.                 "name": "missing-claim2",
  136.                 "persistentVolumeClaim": {
  137.                   "claimName": "missing-claim2"
  138.                 }
  139.               }
  140.             });
  141.             assert.equal(volumes, volumeData.volumesForPod(pod), "same object");
  142.  
  143.             assert.deepEqual(volumeData.volumesForPod(), {}, "No null volumes");
  144.             assert.deepEqual(volumeData.volumesForPod({}), {}, "No empty volumes");
  145.         }
  146.     ]);
  147.  
  148.     volumesTest("claim From Volume Source", 4, fixtures, [
  149.         "volumeData",
  150.         'kubeSelect',
  151.         function(volumeData, select) {
  152.             var pod = select().kind("Pod").one();
  153.             var volumes = volumeData.volumesForPod(pod);
  154.             var source = volumes["host-tmp"]["persistentVolumeClaim"];
  155.             var claim = volumeData.claimFromVolumeSource(source, "default");
  156.             assert.equal(claim.metadata.name, "bound-claim", "correct claim");
  157.             assert.equal(claim.kind, "PersistentVolumeClaim", "correct type");
  158.  
  159.             assert.deepEqual(volumeData.claimFromVolumeSource(), null, "No null volumes");
  160.             assert.deepEqual(volumeData.claimFromVolumeSource({}), null, "No empty volumes");
  161.         }
  162.     ]);
  163.  
  164.     volumesTest("claim For Volume", 5, fixtures, [
  165.         "volumeData",
  166.         'kubeSelect',
  167.         function(volumeData, select) {
  168.             var bound = select().kind("PersistentVolume").name("bound").one();
  169.             var claim = volumeData.claimForVolume(bound);
  170.  
  171.             assert.equal(claim.metadata.name, "bound-claim", "correct claim");
  172.             assert.equal(claim.kind, "PersistentVolumeClaim", "correct claim");
  173.  
  174.             var unbound = select().kind("PersistentVolume").name("unbound").one();
  175.             assert.equal(volumeData.claimForVolume(unbound), null, "no claim");
  176.  
  177.             assert.equal(volumeData.claimForVolume(), null, "null volume");
  178.             assert.equal(volumeData.claimForVolume(), null, "empty volume");
  179.         }
  180.     ]);
  181.  
  182.     volumesTest("claim phases", 2, fixtures, [
  183.         "volumeData",
  184.         'kubeSelect',
  185.         function(volumeData, select) {
  186.             var claim = select().kind("PersistentVolumeClaim").statusPhase("Bound").one();
  187.             assert.equal(claim.metadata.name, "bound-claim", "select bound claims");
  188.  
  189.             var pending = select().kind("PersistentVolumeClaim").statusPhase("Pending").one();
  190.             assert.equal(pending.metadata.name, "unbound-claim", "select unbound claims");
  191.         }
  192.     ]);
  193.  
  194.     volumesTest("volume Types", 4, fixtures, [
  195.         "volumeData",
  196.         'kubeSelect',
  197.         function(volumeData, select) {
  198.             var pv = select().kind("PersistentVolume").name("bound").one();
  199.             var volumes = volumeData.volumesForPod(select().kind("Pod").one());
  200.             assert.equal(volumeData.getVolumeType(pv.spec), "nfs", "correct type");
  201.             assert.equal(volumeData.getVolumeType(volumes["default-token-luvqo"]), "secret", "secret volume");
  202.             assert.equal(volumeData.getVolumeType(), undefined, "null volume");
  203.             assert.equal(volumeData.getVolumeType({}), undefined, "empty volume");
  204.         }
  205.     ]);
  206.  
  207.     volumesTest("volume Labels", 3, fixtures, [
  208.         "volumeData",
  209.         'kubeSelect',
  210.         function(volumeData, select) {
  211.             var pv = select().kind("PersistentVolume").name("bound").one();
  212.             assert.equal(volumeData.getVolumeLabel(), "Unknown", "null volume");
  213.             assert.equal(volumeData.getVolumeLabel({}), "Unknown", "empty volume");
  214.             assert.equal(volumeData.getVolumeLabel(pv.spec), "NFS Mount", "volume label");
  215.         }
  216.     ]);
  217.  
  218.     volumesTest("default volume build", 3, fixtures, [
  219.         "defaultVolumeFields",
  220.         "kubeSelect",
  221.         function(volumeFields, select) {
  222.             var blank_fields = {
  223.               "accessModes": {
  224.                 "ReadOnlyMany": "Read only from multiple nodes",
  225.                 "ReadWriteMany": "Read and write from multiple nodes",
  226.                 "ReadWriteOnce": "Read and write from a single node"
  227.               },
  228.               "capacity": "",
  229.               "policy": "Retain",
  230.               "reclaimPolicies": {
  231.                 "Delete": "Delete",
  232.                 "Recycle": "Recycle",
  233.                 "Retain": "Retain"
  234.               }
  235.             };
  236.  
  237.             assert.deepEqual(blank_fields, volumeFields.build(), "default fields");
  238.             assert.deepEqual(blank_fields, volumeFields.build({}), "empty fields");
  239.             assert.deepEqual({
  240.               "accessModes": {
  241.                 "ReadOnlyMany": "Read only from multiple nodes",
  242.                 "ReadWriteMany": "Read and write from multiple nodes",
  243.                 "ReadWriteOnce": "Read and write from a single node"
  244.               },
  245.               "capacity": "2Gi",
  246.               "policy": "Retain",
  247.               "ReadWriteMany": true,
  248.               "reclaimPolicies": {
  249.                 "Delete": "Delete",
  250.                 "Recycle": "Recycle",
  251.                 "Retain": "Retain"
  252.               }
  253.             }, volumeFields.build(select().name("available").one()), "default fields");
  254.         }
  255.     ]);
  256.  
  257.     volumesTest("default volume validate", 15, fixtures, [
  258.         "defaultVolumeFields",
  259.         "kubeSelect",
  260.         function(volumeFields, select) {
  261.             var result = volumeFields.validate(null, {});
  262.             assert.equal(result.data, null, "blank fields blank data");
  263.             assert.equal(result.errors.length, 4);
  264.             assert.equal(result.errors[0].target, "#last-access", "blank fields access error");
  265.             assert.equal(result.errors[1].target, "#modify-name", "blank fields name error");
  266.             assert.equal(result.errors[2].target, "#modify-capacity", "blank fields capacity error");
  267.             assert.equal(result.errors[3].target, "#last-policy", "blank fields policy error");
  268.  
  269.             var invalid = {
  270.                 "reclaimPolicies": { "policy1": "policy2" },
  271.                 "accessModes": { "mode1": "mode1" },
  272.                 "mode2": true,
  273.                 "policy" : "policy2",
  274.                 "name": "a name",
  275.                 "capacity": "invalid"
  276.             };
  277.             result = volumeFields.validate(null, invalid);
  278.             assert.equal(result.data, null, "invalid fields invalid data");
  279.             assert.equal(result.errors.length, 4);
  280.             assert.equal(result.errors[0].target, "#last-access", "invalid fields access error");
  281.             assert.equal(result.errors[1].target, "#modify-name", "invalid fields name error");
  282.             assert.equal(result.errors[2].target, "#modify-capacity", "invalid fields capacity error");
  283.             assert.equal(result.errors[3].target, "#last-policy", "invalid fields policy error");
  284.  
  285.             var valid = {
  286.                 "reclaimPolicies": { "policy1": "policy2" },
  287.                 "accessModes": { "mode1": "mode1" },
  288.                 "mode1": true,
  289.                 "policy" : "policy1",
  290.                 "name": "  name ",
  291.                 "capacity": " 2Gi "
  292.             };
  293.             var spec = {
  294.                 "accessModes": [
  295.                   "mode1"
  296.                 ],
  297.                 "capacity": {
  298.                   "storage": "2Gi"
  299.                 },
  300.                 "persistentVolumeReclaimPolicy": "policy1"
  301.             };
  302.             result = volumeFields.validate(null, valid);
  303.             assert.deepEqual(result.data, {
  304.               "kind": "PersistentVolume",
  305.               "metadata": {
  306.                 "name": "name"
  307.               },
  308.               "spec": spec
  309.             }, "no item full object");
  310.             assert.equal(result.errors.length, 0);
  311.  
  312.             result = volumeFields.validate({}, valid);
  313.             assert.deepEqual(result.data, { "spec": spec }, "with item only spec");
  314.         }
  315.     ]);
  316.  
  317.     volumesTest("gluster volume build", 3, fixtures, [
  318.         "glusterfsVolumeFields",
  319.         "kubeSelect",
  320.         function(gfs, select) {
  321.             var endpoints = select().kind("Endpoints");
  322.             var blank_fields = {
  323.               "glusterfsPath": undefined,
  324.               "endpoint": undefined,
  325.               "endpointOptions": endpoints,
  326.               "readOnly": undefined,
  327.               "reclaimPolicies": {
  328.                 "Retain": "Retain"
  329.               }
  330.             };
  331.  
  332.             assert.deepEqual(blank_fields, gfs.build(), "default gluster fields");
  333.             assert.deepEqual(blank_fields, gfs.build({}), "empty gluster fields");
  334.             assert.deepEqual({
  335.               "glusterfsPath": "kube_vo",
  336.               "endpointOptions": endpoints,
  337.               "readOnly": undefined,
  338.               "reclaimPolicies": {
  339.                 "Retain": "Retain"
  340.               },
  341.               "endpoint": "my-gluster-endpoint",
  342.             }, gfs.build(select().name("gfs-volume").one()), "gluster fields");
  343.         }
  344.     ]);
  345.  
  346.     volumesTest("gfs volume validate", 9, fixtures, [
  347.         "glusterfsVolumeFields",
  348.         function(nfsVolumeFields) {
  349.             var result = nfsVolumeFields.validate(null, {});
  350.             assert.equal(result.data, null, "blank fields blank data");
  351.             assert.equal(result.errors.length, 2);
  352.             assert.equal(result.errors[0].target, "#modify-endpoint", "blank fields endpoint error");
  353.             assert.equal(result.errors[1].target, "#modify-glusterfs-path", "blank fields path error");
  354.  
  355.             var invalid = {
  356.                 "endpoint": "bad",
  357.                 "glusterfsPath": "name"
  358.             };
  359.             result = nfsVolumeFields.validate(null, invalid);
  360.             assert.equal(result.data, null, "invalid fields invalid data");
  361.             assert.equal(result.errors.length, 1);
  362.             assert.equal(result.errors[0].target, "#modify-endpoint", "invalid endpoint error");
  363.  
  364.             var valid = {
  365.                 "endpoint": "my-gluster-endpoint",
  366.                 "glusterfsPath": "name",
  367.             };
  368.             var source = {
  369.                 "endpoints": "my-gluster-endpoint",
  370.                 "path": "name",
  371.                 "readOnly": false
  372.             };
  373.             result = nfsVolumeFields.validate(null, valid);
  374.             assert.deepEqual(result.data, source, "valid source result");
  375.             assert.equal(result.errors.length, 0, "no errors when valid");
  376.         }
  377.     ]);
  378.  
  379.     volumesTest("nfs volume build", 3, fixtures, [
  380.         "nfsVolumeFields",
  381.         "kubeSelect",
  382.         function(nfsVolumeFields, select) {
  383.             var blank_fields = {
  384.               "path": undefined,
  385.               "readOnly": undefined,
  386.               "reclaimPolicies": {
  387.                 "Recycle": "Recycle",
  388.                 "Retain": "Retain"
  389.               },
  390.               "server": undefined
  391.             };
  392.  
  393.             assert.deepEqual(blank_fields, nfsVolumeFields.build(), "default nfs fields");
  394.             assert.deepEqual(blank_fields, nfsVolumeFields.build({}), "empty nfs fields");
  395.             assert.deepEqual({
  396.               "path": "/tmp",
  397.               "readOnly": true,
  398.               "reclaimPolicies": {
  399.                 "Recycle": "Recycle",
  400.                 "Retain": "Retain"
  401.               },
  402.               "server": "host-or.ip:port",
  403.             }, nfsVolumeFields.build(select().name("bound").one()), "nfs fields");
  404.         }
  405.     ]);
  406.  
  407.     volumesTest("nfs volume validate", 10, fixtures, [
  408.         "nfsVolumeFields",
  409.         function(nfsVolumeFields) {
  410.             var result = nfsVolumeFields.validate(null, {});
  411.             assert.equal(result.data, null, "blank fields blank data");
  412.             assert.equal(result.errors.length, 2);
  413.             assert.equal(result.errors[0].target, "#nfs-modify-server", "blank fields server error");
  414.             assert.equal(result.errors[1].target, "#modify-path", "blank fields path error");
  415.  
  416.             var invalid = {
  417.                 "server": "server/bad",
  418.                 "path": "bad",
  419.             };
  420.             result = nfsVolumeFields.validate(null, invalid);
  421.             assert.equal(result.data, null, "invalid fields invalid data");
  422.             assert.equal(result.errors.length, 2);
  423.             assert.equal(result.errors[0].target, "#nfs-modify-server", "invalid fields server error");
  424.             assert.equal(result.errors[1].target, "#modify-path", "invalid fields path error");
  425.  
  426.             var valid = {
  427.                 "server": "host.or-ip:port",
  428.                 "path": "/tmp",
  429.             };
  430.             var source = {
  431.                 "server": "host.or-ip:port",
  432.                 "path": "/tmp",
  433.                 "readOnly": false
  434.             };
  435.             result = nfsVolumeFields.validate(null, valid);
  436.             assert.deepEqual(result.data, source, "valid source result");
  437.             assert.equal(result.errors.length, 0, "no errors when valid");
  438.         }
  439.     ]);
  440.  
  441.     angular.module('exceptionOverride', []).factory('$exceptionHandler', function() {
  442.         return function(exception, cause) {
  443.             exception.message += ' (caused by "' + cause + '")';
  444.             throw exception;
  445.         };
  446.     });
  447.  
  448.     module.run([
  449.         '$injector',
  450.         function($injector) {
  451.             inject = function inject(func) {
  452.                 return $injector.invoke(func);
  453.             };
  454.             QUnit.start();
  455.         }
  456.     ]);
  457.  
  458.     angular.bootstrap(document, ['kubernetes.volumes.tests']);
  459. }
  460.  
  461. /* Invoke the test suite with this data */
  462. suite([
  463. {
  464.     "kind": "PersistentVolume",
  465.     "apiVersion": "v1",
  466.     "metadata": {
  467.         "name": "iscsi-vol",
  468.         "selfLink": "/api/v1/persistentvolumes/iscsi-vol",
  469.         "uid": "3b2e0dc2-f6a4-11e5-9e36-5254009e00f2",
  470.         "resourceVersion": "1325",
  471.         "creationTimestamp": "2016-03-30T18:21:33Z"
  472.     },
  473.     "spec": {
  474.         "capacity": {
  475.             "storage": "2Gi"
  476.         },
  477.         "iscsi":{
  478.             "targetPortal": "host-or.ip:port",
  479.             "iqn": "iqn.1994-05.t.com.redhat:83ba4072bb9c",
  480.             "lun": 10,
  481.             "iscsiInterface": "custom-iface",
  482.             "fsType":"ext3",
  483.             "readOnly": true,
  484.         },
  485.         "accessModes":["ReadWriteOnce"],
  486.         "persistentVolumeReclaimPolicy": "Retain"
  487.     },
  488.     "status": {
  489.         "phase": "Available"
  490.     }
  491. },
  492. {
  493.     "kind": "PersistentVolume",
  494.     "apiVersion": "v1",
  495.     "metadata": {
  496.         "name": "available",
  497.         "selfLink": "/api/v1/persistentvolumes/available",
  498.         "uid": "3b2e0dc2-f6a4-11e5-9e36-5254009e00f1",
  499.         "resourceVersion": "1325",
  500.         "creationTimestamp": "2016-03-30T18:21:33Z"
  501.     },
  502.     "spec": {
  503.         "capacity": {
  504.             "storage": "2Gi"
  505.         },
  506.         "hostPath": {
  507.             "path": "/tmp"
  508.         },
  509.         "accessModes": [
  510.             "ReadWriteMany"
  511.         ],
  512.         "persistentVolumeReclaimPolicy": "Retain"
  513.     },
  514.     "status": {
  515.         "phase": "Available"
  516.     }
  517. },
  518. {
  519.     "kind": "PersistentVolume",
  520.     "apiVersion": "v1",
  521.     "metadata": {
  522.         "name": "bound",
  523.         "selfLink": "/api/v1/persistentvolumes/bound",
  524.         "uid": "ae3133fc-f6a4-11e5-9e36-5254009e00f1",
  525.         "resourceVersion": "1388",
  526.         "creationTimestamp": "2016-03-30T18:24:46Z"
  527.     },
  528.     "spec": {
  529.         "capacity": {
  530.             "storage": "5Gi"
  531.         },
  532.         "nfs": {
  533.             "path": "/tmp",
  534.             "server": "host-or.ip:port",
  535.             "readOnly": true
  536.         },
  537.         "accessModes": [
  538.             "ReadWriteMany"
  539.         ],
  540.         "claimRef": {
  541.             "kind": "PersistentVolumeClaim",
  542.             "namespace": "default",
  543.             "name": "bound-claim",
  544.             "uid": "43dfbea5-f6a4-11e5-9e36-5254009e00f1",
  545.             "apiVersion": "v1",
  546.             "resourceVersion": "1331"
  547.         },
  548.         "persistentVolumeReclaimPolicy": "Retain"
  549.     },
  550.     "status": {
  551.         "phase": "Bound"
  552.     }
  553. },
  554. {
  555.     "kind": "PersistentVolume",
  556.     "apiVersion": "v1",
  557.     "metadata": {
  558.         "name": "gfs-volume",
  559.         "selfLink": "/api/v1/persistentvolumes/gfs-volume",
  560.         "uid": "ae3133fc-f6a4-11e5-9e36-5254009e00cc",
  561.         "resourceVersion": "1388",
  562.         "creationTimestamp": "2016-03-30T18:24:46Z"
  563.     },
  564.     "spec": {
  565.         "capacity": {
  566.             "storage": "5Gi"
  567.         },
  568.         "glusterfs": {
  569.             "path": "kube_vo",
  570.             "endpoints": "my-gluster-endpoint"
  571.         },
  572.         "accessModes": [
  573.             "ReadWriteMany"
  574.         ],
  575.         "persistentVolumeReclaimPolicy": "Retain"
  576.     },
  577.     "status": {
  578.         "phase": "Pending"
  579.     }
  580. },
  581. {
  582.     "kind": "PersistentVolumeClaim",
  583.     "apiVersion": "v1",
  584.     "metadata": {
  585.         "name": "unbound-claim",
  586.         "namespace": "default",
  587.         "selfLink": "/api/v1/namespaces/default/persistentvolumeclaims/unbound-claim",
  588.         "uid": "3d474220-f6b3-11e5-ab0c-3b97187a9955",
  589.         "resourceVersion": "1331",
  590.         "creationTimestamp": "2016-03-30T18:21:47Z"
  591.     },
  592.     "spec": {
  593.         "accessModes": [
  594.             "ReadWriteMany"
  595.         ],
  596.         "resources": {
  597.             "requests": {
  598.                 "storage": "5Gi"
  599.             }
  600.         }
  601.     },
  602.     "status": {
  603.         "phase": "Pending"
  604.     }
  605. },
  606. {
  607.     "kind": "PersistentVolumeClaim",
  608.     "apiVersion": "v1",
  609.     "metadata": {
  610.         "name": "bound-claim",
  611.         "namespace": "default",
  612.         "selfLink": "/api/v1/namespaces/default/persistentvolumeclaims/bound-claim",
  613.         "uid": "43dfbea5-f6a4-11e5-9e36-5254009e00f1",
  614.         "resourceVersion": "1387",
  615.         "creationTimestamp": "2016-03-30T18:21:47Z"
  616.     },
  617.     "spec": {
  618.         "accessModes": [
  619.             "ReadWriteMany"
  620.         ],
  621.         "resources": {
  622.             "requests": {
  623.                 "storage": "5Gi"
  624.             }
  625.         },
  626.         "volumeName": "available"
  627.     },
  628.     "status": {
  629.         "phase": "Bound",
  630.         "accessModes": [
  631.             "ReadWriteMany"
  632.         ],
  633.         "capacity": {
  634.             "storage": "5Gi"
  635.         }
  636.     }
  637. },
  638. {
  639.     "kind": "Pod",
  640.     "apiVersion": "v1",
  641.     "metadata": {
  642.         "name": "mock-pod",
  643.         "namespace": "default",
  644.         "selfLink": "/api/v1/namespaces/default/pods/mock-pod",
  645.         "uid": "43d38e8e-f6a4-11e5-9e36-5254009e00f1",
  646.         "resourceVersion": "1328",
  647.         "creationTimestamp": "2016-03-30T18:21:47Z"
  648.     },
  649.     "spec": {
  650.         "volumes": [
  651.             {
  652.                 "name": "missing-claim",
  653.                 "persistentVolumeClaim": {
  654.                     "claimName": "missing-claim"
  655.                 }
  656.             },
  657.             {
  658.                 "name": "host-tmp",
  659.                 "persistentVolumeClaim": {
  660.                     "claimName": "bound-claim"
  661.                 }
  662.             },
  663.             {
  664.                 "name": "missing-claim2",
  665.                 "persistentVolumeClaim": {
  666.                     "claimName": "missing-claim2"
  667.                 }
  668.             },
  669.             {
  670.                 "name": "default-token-luvqo",
  671.                 "secret": {
  672.                     "secretName": "default-token-luvqo"
  673.                 }
  674.             }
  675.         ],
  676.         "containers": [
  677.             {
  678.                 "name": "mock-volume-container1",
  679.                 "image": "busybox:buildroot-2014.02",
  680.                 "command": [
  681.                     "/bin/sh",
  682.                     "-c",
  683.                     "for x in $(seq 1 1000); do echo 'HelloMessage.' \u003e\u00262; sleep 1; done"
  684.                 ],
  685.                 "ports": [
  686.                     {
  687.                         "containerPort": 9949,
  688.                         "protocol": "TCP"
  689.                     }
  690.                 ],
  691.                 "resources": {},
  692.                 "volumeMounts": [
  693.                     {
  694.                         "name": "host-tmp",
  695.                         "mountPath": "/tmp"
  696.                     },
  697.                     {
  698.                         "name": "default-token-luvqo",
  699.                         "readOnly": true,
  700.                         "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount"
  701.                     }
  702.                 ]
  703.             },
  704.             {
  705.                 "name": "mock-volume-container",
  706.                 "image": "busybox:buildroot-2014.02",
  707.                 "command": [
  708.                     "/bin/sh",
  709.                     "-c",
  710.                     "for x in $(seq 1 1000); do echo 'HelloMessage.' \u003e\u00262; sleep 1; done"
  711.                 ],
  712.                 "ports": [
  713.                     {
  714.                         "containerPort": 9949,
  715.                         "protocol": "TCP"
  716.                     }
  717.                 ],
  718.                 "resources": {},
  719.                 "volumeMounts": [
  720.                     {
  721.                         "name": "host-tmp",
  722.                         "mountPath": "/other"
  723.                     },
  724.                     {
  725.                         "name": "missing-claim",
  726.                         "mountPath": "/tmp"
  727.                     },
  728.                     {
  729.                         "name": "default-token-luvqo",
  730.                         "readOnly": true,
  731.                         "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount"
  732.                     }
  733.                 ]
  734.             }
  735.         ]
  736.     },
  737.     "status": {
  738.         "phase": "Pending"
  739.     }
  740. },
  741. {
  742.     "kind": "Endpoints",
  743.     "apiVersion": "v1",
  744.     "metadata": {
  745.         "name": "my-gluster-endpoint",
  746.         "namespace": "default",
  747.         "selfLink": "/api/v1/namespaces/default/endpoints/my-gluster-endpoint",
  748.         "uid": "498cac38-ffc0-11e5-8098-5254009e00dd",
  749.         "resourceVersion": "1078",
  750.         "creationTimestamp": "2016-04-11T08:35:03Z"
  751.     },
  752.     "subsets": [
  753.         {
  754.             "addresses": [
  755.                 {
  756.                     "ip": "172.17.0.2"
  757.                 }
  758.             ],
  759.             "ports": [
  760.                 {
  761.                     "port": 1,
  762.                     "protocol": "TCP"
  763.                 }
  764.             ]
  765.         }
  766.     ]
  767. }
  768.  
  769. ]);
  770.  
downloadtest-volumes.js Source code - Download cockpit Source code
Related Source Codes/Software:
elasticsearch-kopf - web admin interface for elasticsearch 2017-05-07
xunlei-lixian - Thunderbolt offline download script 2017-05-07
xadmin - Drop-in replacement of Django admin comes with lot... 2017-05-07
p2pspider - DHT Spider + BitTorrent Client = P2P Spider 2017-05-07
Backbone.localStorage - A localStorage adapter for Backbone.j 2017-05-07
phenomic - 2017-05-07
shoulda - Makes tests easy on the fingers and the eyes ... 2017-05-07
mio - Metal IO library for Rust 2017-05-07
nova - OpenStack Compute (Nova) ht... 2017-05-07
gobyexample - Go by Example https://gobye... 2017-05-07
react-boilerplate - 2017-06-07
webtorrent - Streaming torrent client for the web ... 2017-06-06
machine-learning-for-software-engineers - A complete daily plan for studying to become a mac... 2017-06-06
upterm - A terminal emulator for the 21st century. 2017-06-06
huginn - Create agents that monitor and act on your behalf.... 2017-06-06
system-design-primer - Learn how to design large-scale systems. Prep for ... 2017-06-06
design-patterns-for-humans - Design Patterns for Humans - An ultra-simplified e... 2017-06-06
developer-roadmap - Roadmap to becoming a web developer in 2017 2017-06-06
nylas-mail - 2017-06-06

 Back to top