def provision_kalm()

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


def provision_kalm(schema, version_repo, app_name, namespace, deployer_image,
                   app_params, deployer_service_account_name,
                   image_pull_secret):
  """Provisions KALM resource for installing the application."""
  if not version_repo:
    raise Exception('A valid --version_repo must be specified')

  labels = {
      'app.kubernetes.io/component': 'kalm.marketplace.cloud.google.com',
  }

  secret = make_v2_config(schema, deployer_image, namespace, app_name, labels,
                          app_params)

  repo = {
      'apiVersion': 'kalm.google.com/v1alpha1',
      'kind': 'Repository',
      'metadata': {
          'name': app_name,
          'namespace': namespace,
          'labels': labels,
      },
      'spec': {
          'type': 'Deployer',
          'url': version_repo,
      },
  }

  release = {
      'apiVersion': 'kalm.google.com/v1alpha1',
      'kind': 'Release',
      'metadata': {
          'name': app_name,
          'namespace': namespace,
          'labels': labels,
      },
      'spec': {
          'repositoryRef': {
              'name': app_name,
              'namespace': namespace,
          },
          'version': schema.x_google_marketplace.published_version,
          'applicationRef': {
              'name': app_name,
          },
          'serviceAccountName': deployer_service_account_name,
          'valuesSecretRef': {
              'name': secret['metadata']['name']
          }
      },
  }

  service_account = {
      'apiVersion': 'v1',
      'kind': 'ServiceAccount',
      'metadata': {
          'name': deployer_service_account_name,
          'namespace': namespace,
          'labels': labels,
      },
  }
  if image_pull_secret:
    service_account['imagePullSecrets'] = [{
        'name': image_pull_secret,
    }]

  role_binding = {
      'apiVersion':
          'rbac.authorization.k8s.io/v1',
      'kind':
          'RoleBinding',
      'metadata': {
          'name': '{}-deployer-rb'.format(app_name),
          'namespace': namespace,
          'labels': labels,
      },
      'roleRef': {
          'apiGroup': 'rbac.authorization.k8s.io',
          'kind': 'ClusterRole',
          'name': 'cluster-admin',
      },
      'subjects': [{
          'kind': 'ServiceAccount',
          'name': deployer_service_account_name,
      },]
  }

  return [
      repo,
      release,
      role_binding,
      secret,
      service_account,
  ]