def provision_storage_class()

in marketplace/deployer_util/provision.py [0:0]


def provision_storage_class(schema, prop, app_name, namespace, provisioner):
  if not provisioner:
    provisioner = _DEFAULT_STORAGE_CLASS_PROVISIONER
  volume_binding_mode = 'Immediate'
  if provisioner == 'kubernetes.io/vsphere-volume':
    parameters = {'diskformat': 'thin'}
  elif provisioner == 'kubernetes.io/gce-pd':
    # WaitForFirstConsumer is only available for gce-pd. See:
    # https://kubernetes.io/docs/concepts/storage/storage-classes/#volume-binding-mode
    volume_binding_mode = 'WaitForFirstConsumer'
    if prop.storage_class.ssd:
      parameters = {
          'type': 'pd-ssd',
      }
    else:
      raise Exception('Do not know how to provision for property {}'.format(
          prop.name))
  elif provisioner == 'kubernetes.io/no-provisioner':
    # local-shared storage class is already pre-provisioned
    return 'local-shared', []

  sc_name = dns1123_name('{}-{}-{}'.format(namespace, app_name, prop.name))
  manifests = [{
      'apiVersion': 'storage.k8s.io/v1',
      'kind': 'StorageClass',
      'metadata': {
          'name': sc_name,
      },
      'provisioner': provisioner,
      'parameters': parameters,
      'volumeBindingMode': volume_binding_mode
  }]
  return sc_name, add_preprovisioned_labels(manifests, prop.name)