2022-01-27 06:37:46 +00:00
< ng-form name = "serviceForm" >
2022-01-16 19:37:46 +00:00
< div ng-if = "$ctrl.isAdmin()" class = "small text-warning" ng-show = "$ctrl.serviceType === $ctrl.KubernetesApplicationPublishingTypes.LOAD_BALANCER && !$ctrl.loadbalancerEnabled" >
< p style = "margin-top: 10px" >
< i class = "fa fa-exclamation-circle" aria-hidden = "true" > < / i > No Load balancer is available in this cluster, click
< a ui-sref = "portainer.k8sendpoint.kubernetesConfig({id: $ctrl.state.endpointId})" > here< / a > to configure load balancer.
< / p >
< / div >
< div ng-if = "!$ctrl.isAdmin()" class = "small text-warning" ng-show = "$ctrl.serviceType === $ctrl.KubernetesApplicationPublishingTypes.LOAD_BALANCER && !$ctrl.loadbalancerEnabled" >
< p style = "margin-top: 10px" > < i class = "fa fa-exclamation-circle" aria-hidden = "true" > < / i > No Load balancer is available in this cluster, contract your administrator. < / p >
< / div >
< div
ng-if="
($ctrl.serviceType === $ctrl.KubernetesApplicationPublishingTypes.LOAD_BALANCER & & $ctrl.loadbalancerEnabled) ||
$ctrl.serviceType === $ctrl.KubernetesApplicationPublishingTypes.CLUSTER_IP ||
$ctrl.serviceType === $ctrl.KubernetesApplicationPublishingTypes.NODE_PORT
"
>
< div ng-show = "!$ctrl.multiItemDisable" style = "margin-top: 5px; margin-bottom: 5px" >
< label class = "control-label text-left" > Published ports< / label >
< span class = "label label-default interactive" style = "margin-left: 10px" ng-click = "$ctrl.addPort()" data-cy = "k8sAppCreate-addNewPortButton" >
< i class = "fa fa-plus-circle" aria-hidden = "true" > < / i > publish a new port
< / span >
< / div >
< div ng-repeat = "servicePort in $ctrl.servicePorts" style = "margin-top: 10px" >
< div class = "input-group input-group-sm" >
< span class = "input-group-addon" > container port< / span >
< input
type="number"
class="form-control"
name="container_port_{{ $index }}"
ng-model="servicePort.targetPort"
placeholder="80"
ng-min="1"
ng-max="65535"
ng-change="$ctrl.servicePort($index)"
required
ng-disabled="$ctrl.originalIngresses.length === 0 || ($ctrl.serviceType === $ctrl.KubernetesApplicationPublishingTypes.LOAD_BALANCER & & !$ctrl.loadbalancerEnabled)"
ng-change="$ctrl.onChangeContainerPort()"
data-cy="k8sAppCreate-containerPort_{{ $index }}"
/>
< / div >
< div class = "input-group input-group-sm" >
< span class = "input-group-addon" > service port< / span >
< input
type="number"
class="form-control"
name="service_port_{{ $index }}"
ng-model="servicePort.port"
placeholder="80"
ng-min="1"
ng-max="65535"
required
ng-disabled="$ctrl.originalIngresses.length === 0 || ($ctrl.serviceType === $ctrl.KubernetesApplicationPublishingTypes.LOAD_BALANCER & & !$ctrl.loadbalancerEnabled)"
ng-change="$ctrl.onChangeServicePort()"
data-cy="k8sAppCreate-servicePort_{{ $index }}"
/>
< / div >
< div ng-if = "$ctrl.serviceType === $ctrl.KubernetesApplicationPublishingTypes.NODE_PORT" class = "input-group input-group-sm" >
< span class = "input-group-addon" > nodeport< / span >
< input
type="number"
class="form-control"
name="node_port_{{ $index }}"
ng-model="servicePort.nodePort"
placeholder="30080"
ng-min="30000"
ng-max="32767"
ng-change="$ctrl.onChangeNodePort()"
data-cy="k8sAppCreate-nodeportPort_{{ $index }}"
/>
< / div >
< div ng-if = "$ctrl.serviceType === $ctrl.KubernetesApplicationPublishingTypes.LOAD_BALANCER" class = "input-group input-group-sm" >
< span class = "input-group-addon" > loadbalancer port< / span >
< input
type="number"
class="form-control"
name="loadbalancer_port_{{ $index }}"
ng-model="servicePort.port"
placeholder="80"
ng-min="1"
ng-max="65535"
required
ng-disabled="$ctrl.serviceType === $ctrl.KubernetesApplicationPublishingTypes.LOAD_BALANCER & & !$ctrl.loadbalancerEnabled"
data-cy="k8sAppCreate-loadbalancerPort_{{ $index }}"
/>
< / div >
< div ng-if = "$ctrl.serviceType === $ctrl.KubernetesApplicationPublishingTypes.CLUSTER_IP && $ctrl.ingressType" class = "input-group input-group-sm" >
< span class = "input-group-addon" > ingress< / span >
< select
class="form-control"
name="ingress_port_{{ $index }}"
ng-model="servicePort.ingress.IngressName"
required
ng-disabled="$ctrl.originalIngresses.length === 0"
ng-options="ingress.Name as ingress.Name for ingress in $ctrl.originalIngresses"
data-cy="k8sAppCreate-ingressPort_{{ $index }}"
>
< option selected disabled hidden value = "" > Select an ingress< / option >
< / select >
< / div >
< div ng-if = "$ctrl.serviceType === $ctrl.KubernetesApplicationPublishingTypes.CLUSTER_IP && $ctrl.ingressType" class = "input-group input-group-sm" >
< span class = "input-group-addon" > hostname< / span >
< select
class="form-control"
name="hostname_port_{{ $index }}"
ng-model="servicePort.ingress.Host"
required
ng-disabled="$ctrl.originalIngresses.length === 0"
2022-03-30 02:50:11 +00:00
ng-options="host as host for host in ($ctrl.originalIngresses | filter:{ Name: servicePort.ingress.IngressName })[0].Hosts"
2022-01-16 19:37:46 +00:00
data-cy="k8sAppCreate-hostnamePort_{{ $index }}"
>
< option selected disabled hidden value = "" > Select a hostname< / option >
< / select >
< / div >
< div ng-if = "$ctrl.serviceType === $ctrl.KubernetesApplicationPublishingTypes.CLUSTER_IP && $ctrl.ingressType" class = "input-group input-group-sm" >
< span class = "input-group-addon" > route< / span >
< input
class="form-control"
name="ingress_route_{{ $index }}"
ng-model="servicePort.ingress.Path"
placeholder="route"
required
ng-disabled="$ctrl.originalIngresses.length === 0"
ng-pattern="/^(\/?[a-zA-Z0-9]+([a-zA-Z0-9-/_]*[a-zA-Z0-9])?|[a-zA-Z0-9]+)|(\/){1}$/"
data-cy="k8sAppCreate-route_{{ $index }}"
/>
< / div >
< div class = "input-group col-sm-2 input-group-sm" >
< div class = "btn-group btn-group-sm" >
< label
class="btn btn-primary"
ng-model="servicePort.protocol"
uib-btn-radio="'TCP'"
ng-change="ctrl.onChangePortProtocol($index)"
ng-disabled="ctrl.isProtocolOptionDisabled($index, 'TCP')"
data-cy="k8sAppCreate-TCPButton_{{ $index }}"
>TCP< /label
>
< label
class="btn btn-primary"
ng-model="servicePort.protocol"
uib-btn-radio="'UDP'"
ng-change="ctrl.onChangePortProtocol($index)"
ng-disabled="ctrl.isProtocolOptionDisabled($index, 'UDP')"
data-cy="k8sAppCreate-UDPButton_{{ $index }}"
>UDP< /label
>
< / div >
< button
ng-disabled="$ctrl.servicePorts.length === 1"
ng-show="!$ctrl.multiItemDisable"
class="btn btn-sm btn-danger"
type="button"
ng-click="$ctrl.removePort($index)"
data-cy="k8sAppCreate-rmPortButton_{{ $index }}"
>
< i class = "fa fa-trash-alt" aria-hidden = "true" > < / i >
< / button >
< / div >
< div class = "col-sm-12 input-group input-group-sm" >
< div class = "col-sm-2" >
< div class = "small text-warning" style = "margin-top: 5px" >
< p ng-if = "$ctrl.state.duplicates.targetPort.refs[$index] !== undefined" >
< i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > This container port is already used.
< / p >
< / div >
< div class = "small text-warning" ng-messages = "serviceForm['container_port_'+$index].$error" >
< p ng-message = "required" > < i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > Container port number is required.< / p >
< p ng-message = "min" > < i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > Container port number must be inside the range 1-65535.< / p >
< p ng-message = "max" > < i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > Container port number must be inside the range 1-65535.< / p >
< / div >
< / div >
< div class = "col-sm-2" >
< div class = "small text-warning" style = "margin-top: 5px" >
< p ng-if = "$ctrl.state.duplicates.servicePort.refs[$index] !== undefined" >
< i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > This service port is already used.
< / p >
< / div >
< div class = "small text-warning" style = "margin-top: 5px" >
< div ng-messages = "serviceForm['service_port_'+$index].$error" >
< p ng-message = "required" > < i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > Service port number is required.< / p >
< p ng-message = "min" > < i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > Container port number must be inside the range 1-65535.< / p >
< p ng-message = "max" > < i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > Container port number must be inside the range 1-65535.< / p >
< / div >
< / div >
< / div >
< div class = "col-sm-6" >
< div class = "small text-warning" style = "margin-top: 5px" >
< div ng-messages = "serviceForm['node_port_'+$index].$error" >
< p ng-message = "min"
>< i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > Node port number must be inside the range 30000-32767 or blank for system allocated.< /p
>
< p ng-message = "max"
>< i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > Node port number must be inside the range 30000-32767 or blank for system allocated.< /p
>
< / div >
< / div >
< / div >
< div class = "col-sm-2" >
< div class = "small text-warning" style = "margin-top: 5px" >
< div ng-messages = "serviceForm['ingress_port_'+$index].$error" >
< p ng-message = "required" > < i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > Ingress selection is required.< / p >
< / div >
< / div >
< / div >
< div class = "col-sm-2" >
< div class = "small text-warning" style = "margin-top: 5px" >
< div ng-messages = "serviceForm['hostname_port_'+$index].$error" >
< p ng-message = "required" > < i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > Host is required.< / p >
< / div >
< / div >
< / div >
< div class = "col-sm-8" ng-show = "" >
< div class = "small text-warning" style = "margin-top: 5px" >
< div ng-messages = "serviceForm['ingress_route_'+$index].$error" >
< p ng-message = "required" > < i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > Route is required.< / p >
< p ng-message = "pattern"
>< i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > This field must consist of alphanumeric characters or the special characters: '-', '_' or '/'. It
must start and end with an alphanumeric character (e.g. 'my-route', or 'route-123').< /p
>
< / div >
< / div >
< / div >
< / div >
< / div >
< / div >
2022-01-27 06:37:46 +00:00
< / ng-form >