//-
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You under the Apache License, Version 2.0
    (the "License"); you may not use this file except in compliance with
    the License.  You may obtain a copy of the License at

         http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.

include /app/helpers/jade/mixins

mixin discovery-kubernetes(modelAt = '$ctrl.clonedCluster')
    -const discoveryKind = 'Kubernetes'
    -const model = `${modelAt}.discovery.Kubernetes`

    .pc-form-grid-row&attributes(attributes=attributes)
        .pc-form-grid-col-30
            +form-field__text({
                label: 'Service name:',
                model: `${model}.serviceName`,
                name: `'${discoveryKind}ServiceName'`,
                placeholder: 'ignite',
                tip: "The name of Kubernetes service for Ignite pods' IP addresses lookup.<br/>\
                     The name of the service must be equal to the name set in service's Kubernetes configuration.<br/>\
                     If this parameter is not changed then the name of the service has to be set to 'ignite' in the corresponding Kubernetes configuration."
            })
        .pc-form-grid-col-30
            +form-field__text({
                label: 'Namespace:',
                model: `${model}.namespace`,
                name: `'${discoveryKind}Namespace'`,
                placeholder: 'default',
                tip: "The namespace the Kubernetes service belongs to.<br/>\
                      By default, it's supposed that the service is running under Kubernetes `default` namespace."
            })
        .pc-form-grid-col-60
            +form-field__url({
                label: 'Kubernetes server:',
                model: `${model}.masterUrl`,
                name: `'${discoveryKind}MasterUrl'`,
                enabled: 'true',
                placeholder: 'https://kubernetes.default.svc.cluster.local:443',
                tip: 'The host name of the Kubernetes API server'
            })
        .pc-form-grid-col-60
            +form-field__text({
                label: 'Service token file:',
                model: `${model}.accountToken`,
                name: `'${discoveryKind}AccountToken'`,
                placeholder: '/var/run/secrets/kubernetes.io/serviceaccount/token',
                tip: 'The path to the service token file'
            })
