def test_make_pvc_simple():
    """
    Test specification of the simplest possible pvc specification
    """
    assert api_client.sanitize_for_serialization(make_pvc(
        name='test',
        storage_class='',
        access_modes=[],
        storage=None,
        labels={}
    )) == {
        'kind': 'PersistentVolumeClaim',
        'apiVersion': 'v1',
        'metadata': {
            'name': 'test',
            'annotations': {},
            'labels': {}
        },
        'spec': {
            'accessModes': [],
            'resources': {
                'requests': {
                    'storage': None
                }
            }
        }
    }
def test_make_resources_all():
    """
    Test specifying all possible resource limits & guarantees
    """
    assert api_client.sanitize_for_serialization(make_pvc(
        name='test',
        storage_class='gce-standard-storage',
        access_modes=['ReadWriteOnce'],
        storage='10Gi',
        labels={'key': 'value'}
    )) == {
        'kind': 'PersistentVolumeClaim',
        'apiVersion': 'v1',
        'metadata': {
            'name': 'test',
            'annotations': {
                'volume.beta.kubernetes.io/storage-class': 'gce-standard-storage'
            },
            'labels': {
                'key': 'value'
            }
        },
        'spec': {
            'storageClassName': 'gce-standard-storage',
            'accessModes': ['ReadWriteOnce'],
            'resources': {
                'requests': {
                    'storage': '10Gi'
                }
            }
        }
    }
Exemple #3
0
    def get_pvc_manifest(self):
        """
        Make a pvc manifest that will spawn current user's pvc.
        """
        # Default set of labels, picked up from
        # https://github.com/kubernetes/helm/blob/master/docs/chart_best_practices/labels.md
        labels = {
            'heritage': 'jupyterhub',
            'app': 'jupyterhub',
            'hub.jupyter.org/userid': escapism.escape(str(self.user.id))
        }

        labels.update(self._expand_all(self.user_storage_extra_labels))
        label_selector = self._expand_all(self.user_storage_pvc_selector)
        self.log.info("SEL %s" % label_selector)
        self.log.info("HEEEEERE!")
        self.log.info("%s %s %s %s %s %s", self.pvc_name,
                      self.user_storage_class, self.user_storage_access_modes,
                      self.user_storage_capacity, labels, label_selector)
        return make_pvc(name=self.pvc_name,
                        storage_class=self.user_storage_class,
                        access_modes=self.user_storage_access_modes,
                        storage=self.user_storage_capacity,
                        labels=labels,
                        label_selector=label_selector)
def test_make_resources_all():
    """
    Test specifying all possible resource limits & guarantees
    """
    assert api_client.sanitize_for_serialization(make_pvc(
        name='test',
        storage_class='gce-standard-storage',
        access_modes=['ReadWriteOnce'],
        storage='10Gi',
        labels={'key': 'value'}
    )) == {
        'kind': 'PersistentVolumeClaim',
        'apiVersion': 'v1',
        'metadata': {
            'name': 'test',
            'annotations': {
                'volume.beta.kubernetes.io/storage-class': 'gce-standard-storage'
            },
            'labels': {
                'key': 'value'
            }
        },
        'spec': {
            'storageClassName': 'gce-standard-storage',
            'accessModes': ['ReadWriteOnce'],
            'resources': {
                'requests': {
                    'storage': '10Gi'
                }
            }
        }
    }
def test_make_pvc_simple():
    """
    Test specification of the simplest possible pvc specification
    """
    assert api_client.sanitize_for_serialization(make_pvc(
        name='test',
        storage_class='',
        access_modes=[],
        storage=None,
        labels={}
    )) == {
        'kind': 'PersistentVolumeClaim',
        'apiVersion': 'v1',
        'metadata': {
            'name': 'test',
            'annotations': {},
            'labels': {}
        },
        'spec': {
            'accessModes': [],
            'resources': {
                'requests': {
                    'storage': None
                }
            }
        }
    }
Exemple #6
0
    def get_specific_pvc_manifest(self, volume):
        """
        Make a pvc manifest for a given volume definition
        """
        labels = self._build_common_labels(self._expand_all(self.storage_extra_labels))

        annotations = self._build_common_annotations({})

        #del annotations["hub.jupyter.org/username"]

        pvcDict = {}
        pvcDict['name'] = self.pvc_name
        pvcDict['storage_class'] = self.storage_class
        pvcDict['access_modes'] = self.storage_access_modes
        pvcDict['selector'] = self.storage_selector
        pvcDict['storage'] = self.storage_capacity
        pvcDict['labels'] = labels
        pvcDict['annotations'] = annotations

        try:
            pvcDict['name'] = volume['persistentVolumeClaim']['claimName']
        except KeyError:
            pass

        try:
            pvcDict['storage_class'] = volume['storage_class']
        except KeyError:
            pass

        try:
            pvcDict['access_modes'] = volume['access_modes']
        except KeyError:
            pass

        try:
            pvcDict['storage'] = volume['storage']
        except KeyError:
            pass

        try:
            pvcDict['annotations'] = volume['annotations']
        except KeyError:
            pass

        try:
            pvcDict['labels'] = volume['labels']
        except KeyError:
            pass

        print(pvcDict)
        
        pvc = make_pvc(**pvcDict)
        pvc.spec.persistentVolumeReclaimPolicy = 'Retain'
        return pvc
Exemple #7
0
    def get_pvc_manifest(self):
        """
        Make a pvc manifest that will spawn current user's pvc.
        """
        labels = self._build_common_labels(
            self._expand_all(self.user_storage_extra_labels))

        return make_pvc(name=self.pvc_name,
                        storage_class=self.user_storage_class,
                        access_modes=self.user_storage_access_modes,
                        storage=self.user_storage_capacity,
                        labels=labels)
    def _get_pvc_manifest(self, name, storage_class, access_modes, storage,
                          labels, annotations):
        """
        Return a PVC spec based on the given parameters.

        This manifest will be used to create PVCs in the K8s cluster.
        """
        return make_pvc(name=name,
                        storage_class=storage_class,
                        access_modes=access_modes,
                        storage=storage,
                        labels=labels,
                        annotations=annotations)
Exemple #9
0
    def get_pvc_manifest(self):
        """
        Make a pvc manifest that will spawn current user's pvc.
        """
        # Default set of labels, picked up from
        # https://github.com/kubernetes/helm/blob/master/docs/chart_best_practices/labels.md
        labels = {
            'heritage': 'jupyterhub',
            'app': 'jupyterhub',
            'hub.jupyter.org/username': escapism.escape(self.user.name)
        }

        # check if a named-server servername has been set and if so, extend pvc labels.
        if self.name:
            # FIXME: make sure this is DNS safe?
            labels['hub.jupyter.org/servername'] = self.name

        labels.update(self._expand_all(self.user_storage_extra_labels))
        return make_pvc(name=self.pvc_name,
                        storage_class=self.user_storage_class,
                        access_modes=self.user_storage_access_modes,
                        storage=self.user_storage_capacity,
                        labels=labels)