type: object title: GKE Provider Configuration description: >

Defined the provider configuration options required to initialize the
provider integration

required:

- account
- project
- region

properties:

account:
  $id: '#/config/account'
  type: string
  title: Service Account Credentials JSON
  description: >
    The credentials used to speak the GCP APIs; you create a service account
    under the Cloud IAM within the project, adding the permissions 'Compute
    Admin' role to the service account via IAM tab. Once done you can create
    a key under 'Service Accounts' and copy and paste the JSON payload here.
  default: ''
  pattern: ^.*$

project:
  $id: '#/config/project'
  type: string
  title: GCP Project
  description: >
    The name of the GCP project you are provisioning the cluster done.
  default: ''
  pattern: ^.*$

region:
  $id: '#/config/region'
  type: string
  title: GCP Region
  description: >
    The GCP region you wish to the cluster to reside within.
  default: ''
  examples:
    - europe-west2
  pattern: ^.*$

type: object title: GKE Cluster configuration description: >

Provides the ability to create a fully managed GKE cluster within GCP.

required:

- description
- disk_size_gb
- enable_autoscaler
- enable_autoupgrade
- enable_binary_authorization
- enable_horizontal_pod_autoscaler
- enable_http_loadbalancer
- enable_istio
- enable_logging
- enable_monitoring
- enable_private_endpoint
- enable_private_network
- image_type
- machine_type
- maintenance_window
- network
- subnetwork
- version

properties:

authorized_master_cidrs:
  $id: '#/properties/authorized_master_cidrs'
  tag: default
  type: array
  title: Master Authorized Networks
  items:
    $id: '#/properties/authorized_master_cidrs/items'
    type: object
    title: Networks
    required:
      - name
      - cidr
    properties:
      name:
        $id: '#/properties/authorized_master_cidrs/items/properties/name'
        type: string
        title: Display Name
        default: 'allowany'
        examples:
          - any
        pattern: ^(.*)$
      cidr:
        $id: '#/properties/authorized_master_cidrs/items/properties/cidr'
        type: string
        title: Network CIDR
        default: '0.0.0.0/0'
        examples:
          - 0.0.0.0/0
        pattern: ^([\d]{1,3}\.){3}[\d]{1,3}\/[\d]{1,2}$

cluster_ipv4_cidr:
  $id: '#/properties/cluster_ipv4_cidr'
  tag: advanced
  type: string
  title: Cluster Pod Network
  default: ''
  description: >
    An optional network CIDR which is used to place the pod network on
    (else the cloud provider chooses)
  examples:
    - ''
  pattern: ^(([\d]{1,3}\.){3}[\d]{1,3}\/[\d]{1,2}|)$

create_subnetwork:
  $id: '#/properties/create_subnetwork'
  tag: advanced
  type: boolean
  title: Create Subnetwork
  description: >
    Indicates if you wish to create a new subnetwork to place the
    compute node on to.
  default: false
  examples:
    - false
    - true

description:
  $id: '#/properties/description'
  tag: default
  type: string
  title: Description
  description: >
    A summary description for this cluster.
  default: ''
  examples:
    - Dev Cluster
  pattern: ^(.*)$

disk_size_gb:
  $id: '#/properties/disk_size_gb'
  tag: default
  type: integer
  title: Compute Disk Size (GB)
  default: 100
  description: >
    Is the size of the disk used by the compute nodes
    The dns domain which the cluster is using; this mist be accessible from
    with inside the project.
  examples:
    - 100

enable_autorepair:
  $id: '#/properties/enable_autorepair'
  tag: default
  type: boolean
  title: Node Autorepair
  default: true
  description: >
    Indicates if the cluster should be configured with auto repair
    is enabled
  examples:
    - false
    - true

enable_autoscaler:
  $id: '#/properties/enable_autoscaler'
  tag: default
  type: boolean
  title: Cluster Autoscaling
  default: true
  description: >
    Indicates if the cluster should be configured with cluster autoscaling
    turned on
  examples:
    - false
    - true

enable_autoupgrade:
  $id: '#/properties/enable_autoupgrade'
  tag: default
  type: boolean
  title: Cluster Autoupgrading
  default: true
  description: >
    Indicates if the cluster should be configured with autograding
    enabled; meaning both nodes are masters are autoscated scheduled
    to upgrade during your maintenance window.
  examples:
    - false
    - true

enable_binary_authorization:
  $id: '#/properties/enable_binary_authorization'
  tag: advanced
  type: boolean
  title: Binary Authorization Service
  default: false
  description: >
    Indicates if the cluster should be configured with GKE Binary
    Authorization service enabled.
  examples:
    - false
    - true

enable_horizontal_pod_autoscaler:
  $id: '#/properties/enable_horizontal_pod_autoscaler'
  tag: default
  type: boolean
  title: Horizontal Pod Autoscaler
  default: false
  description: >
    Indicates if the cluster is configured with the horizontal
    pod autoscaler addon. This automatically adjusts the cpu and
    memory resources of pods in accordances with their demand. You
    should ensure you use PodDisruptionBudgets if this is enabled.
  examples:
    - false
    - true

enable_http_loadbalancer:
  $id: '#/properties/enable_http_loadbalancer'
  tag: default
  type: boolean
  title: HTTP Ingress Controller
  default: true
  description: >
    Indicates if the cluster should be configured with the GKE
    ingress controller. When enabled GKE will autodiscover your
    ingress resources and provision load balancer on your behalf.
  examples:
    - false
    - true

enable_istio:
  $id: '#/properties/enable_istio'
  tag: default
  type: boolean
  title: Istio Service Mesh
  default: false
  description: >
    Indicates if the GKE Istio service mesh is deployed to the
    cluster; this provides a more feature rich routing and
    instrumentation.
  examples:
    - false
    - true

enable_logging:
  $id: '#/properties/enable_logging'
  tag: default
  type: boolean
  title: Stackdriver Logging
  default: false
  description: >
    Indicates if Stackdriver metrics should be enabled for the cluster
  examples:
    - false
    - true

enable_monitoring:
  $id: '#/properties/enable_monitoring'
  tag: default
  type: boolean
  title: Stackdriver Metrics
  default: false
  description: >
    Indicates if Stackdriver logging should be enabled for the cluster
  examples:
    - false
    - true

enable_private_endpoint:
  $id: '#/properties/enable_private_endpoint'
  tag: advanced
  type: boolean
  title: Private Endpoints
  default: false
  description: >
    Indicates if the master api endpoint should be accessible from private
    network only i.e. no external access
  examples:
    - false
    - true

enable_private_network:
  $id: '#/properties/enable_private_network'
  tag: advanced
  type: boolean
  title: Private Node Networking
  default: true
  description: >
    Indicates if compute nodes should have external ip addresses or use
    private networking and a cloud-nat device.
  examples:
    - false
    - true

image_type:
  $id: '#/properties/image_type'
  tag: advanced
  type: string
  title: Machine Image
  default: 'COS'
  description: >
    The operating system image the compute pool should use.
  examples:
    - COS
  pattern: ^(.*)$

machine_type:
  $id: '#/properties/machine_type'
  tag: default
  type: string
  title: Machine Type
  default: n1-standard-1
  description: >
    The GCP machine type which the default nodes pool should use.
  examples:
    - n1-standard-1
  pattern: ^(.*)$

maintenance_window:
  $id: '#/properties/maintenance_window'
  tag: default
  type: string
  title: Maintenance Window
  default: '03:00'
  description: >
    Specifies the maintenance window in hours and minutes which GKE
    is permitted to run maintenance operations.
  examples:
    - '03:00'
  pattern: ^[\d]{2}:[\d]{2}$

master_ipv4_cidr_block:
  $id: '#/properties/master_ipv4_cidr_block'
  tag: default
  type: string
  title: Master Peer Network Block
  default: '172.16.0.0/28'
  description: >
    If private networking is enabled, this is the peering subnet used
    to to GKE master api layer. Note, this must be unique within the
    network.
  examples:
    - '172.16.0.0/28'
  pattern: ^([\d]{1,3}\.){3}[\d]{1,3}\/[\d]{1,2}$

network:
  $id: '#/properties/network'
  tag: default
  type: string
  title: GCP Network
  default: 'default'
  description: >
    The GCP network which the cluster should reside on, which have
    to be unique within the GCP project and created beforehand.
  examples:
    - 'default'
  pattern: ^(.*)$

preemptible:
  $id: '#/properties/preemptible'
  tag: advanced
  type: boolean
  title: Preemptible Nodes
  default: false
  description: >
    Indicates if the default pool created should use preemptible nodes.
  examples:
    - false
    - true

services_ipv4_cidr:
  $id: '#/properties/services_ipv4_cidr'
  tag: advanced
  type: string
  title: Cluster Services CIDR
  default: ''
  description: >
    An optional network cidr configured for the cluster services,
    otherwise GCP will decide.
  examples:
    - ''
  pattern: ^(([\d]{1,3}\.){3}[\d]{1,3}\/[\d]{1,2}|)$

subnetwork:
  $id: '#/properties/subnetwork'
  tag: default
  type: string
  title: Subnetwork for Nodes
  default: 'default'
  description: >
    The name of the GCP subnetwork which the cluster nodes should reside.
  examples:
    - default
  pattern: ^(.*)$

version:
  $id: '#/properties/version'
  tag: default
  type: string
  title: Initial Kubernetes Version
  default: 'latest'
  description: >
    The initial kubernetes version which the cluster should be
    configured with.
  examples:
    - latest
    - 1.13.7-gke.8
  pattern: ^(.*)$