2022-07-06 06:08:45 +00:00
< page-header
2023-01-26 03:03:44 +00:00
ng-if="!ctrl.state.isEdit & & !ctrl.stack.IsComposeFormat & & ctrl.state.viewReady"
2022-07-06 06:08:45 +00:00
title="'Create application'"
breadcrumbs="[
{ label:'Applications', link:'kubernetes.applications' },
'Create an application'
]"
reload="true"
>
< / page-header >
< page-header
2023-01-26 03:03:44 +00:00
ng-if="ctrl.state.isEdit & & !ctrl.stack.IsComposeFormat & & ctrl.state.viewReady"
2022-07-06 06:08:45 +00:00
title="'Edit application'"
breadcrumbs="[
{ label:'Namespaces', link:'kubernetes.resourcePools' },
2022-08-12 18:22:45 +00:00
{
2022-07-06 06:08:45 +00:00
label:ctrl.application.ResourcePool,
2022-08-12 18:22:45 +00:00
link: 'kubernetes.resourcePools.resourcePool',
2022-07-06 06:08:45 +00:00
linkParams:{ id: ctrl.application.ResourcePool }
},
{ label:'Applications', link:'kubernetes.applications' },
2022-08-12 18:22:45 +00:00
{
2022-07-06 06:08:45 +00:00
label:ctrl.application.Name,
2022-08-12 18:22:45 +00:00
link: 'kubernetes.applications.application',
2022-07-06 06:08:45 +00:00
linkParams:{ name: ctrl.application.Name, namespace: ctrl.application.ResourcePool }
},
'Edit',
]"
reload="true"
>
< / page-header >
2020-07-05 23:21:03 +00:00
2023-01-26 03:03:44 +00:00
< page-header
ng-if="ctrl.stack.IsComposeFormat"
title="'View application'"
breadcrumbs="[
2023-01-30 21:03:21 +00:00
{ label:'Namespaces', link:'kubernetes.resourcePools' },
{
label:ctrl.application.ResourcePool,
link: 'kubernetes.resourcePools.resourcePool',
linkParams:{ id: ctrl.application.ResourcePool }
},
2023-01-26 03:03:44 +00:00
{ label:'Applications', link:'kubernetes.applications' },
2023-01-30 21:03:21 +00:00
{
label:ctrl.application.Name,
link: 'kubernetes.applications.application',
linkParams:{ name: ctrl.application.Name, namespace: ctrl.application.ResourcePool }
},
'View',
2023-01-26 03:03:44 +00:00
]"
reload="true"
>
< / page-header >
2020-07-05 23:21:03 +00:00
< kubernetes-view-loading view-ready = "ctrl.state.viewReady" > < / kubernetes-view-loading >
< div ng-if = "ctrl.state.viewReady" >
2022-07-11 02:05:23 +00:00
< div class = "row kubernetes-create" >
2020-07-05 23:21:03 +00:00
< div class = "col-xs-12" >
< rd-widget >
< rd-widget-body >
2023-12-19 19:54:00 +00:00
< form class = "form-horizontal mt-4" name = "kubernetesApplicationCreationForm" autocomplete = "off" novalidate >
2023-12-03 18:43:53 +00:00
< div ng-if = "ctrl.isExternalApplication()" >
< div class = "col-sm-12 form-section-title" ng-if = "ctrl.state.appType === ctrl.KubernetesDeploymentTypes.APPLICATION_FORM" > Namespace < / div >
<!-- #region NAMESPACE -->
2024-01-11 02:13:28 +00:00
< namespace-selector
values="ctrl.formValues.ResourcePool.Namespace.Name"
on-change="(ctrl.onChangeNamespaceName)"
2024-01-18 23:20:44 +00:00
validation-data="{hasQuota: ctrl.state.resourcePoolHasQuota, isResourceQuotaCapacityExceeded: ctrl.resourceQuotaCapacityExceeded(), namespaceOptionCount: ctrl.resourcePools.length, isEnvironmentAdmin: ctrl.isAdmin}"
2024-01-11 02:13:28 +00:00
is-edit="ctrl.state.isEdit"
>< / namespace-selector >
2023-12-03 18:43:53 +00:00
<!-- kubernetes services options -->
< div ng-if = "ctrl.formValues.ResourcePool" >
< kube-services-form
on-change="(ctrl.onServicesChange)"
values="ctrl.formValues.Services"
app-name="ctrl.formValues.Name"
selector="ctrl.formValues.Selector"
validation-data="{nodePortServices: ctrl.state.nodePortServices, formServices: ctrl.formValues.Services, ingressPaths: ctrl.ingressPaths, originalIngressPaths: ctrl.originalIngressPaths}"
is-edit-mode="ctrl.state.isEdit"
namespace="ctrl.formValues.ResourcePool.Namespace.Name"
>< / kube-services-form >
< / div >
<!-- kubernetes services options -->
2024-01-10 21:14:23 +00:00
2024-01-05 02:42:36 +00:00
<!-- kubernetes summary for external application -->
2024-01-10 21:14:23 +00:00
<!-- below workaround is needed because we wanted react to render it again
by hiding/showing it, but the page was fluctuating. so we added two blocks for both the conditions -->
< div ng-if = "!ctrl.isTemporaryRefresh" >
< application-summary-section
application-kind="ctrl.formValues.ApplicationType"
form-values="ctrl.formValues"
old-form-values="ctrl.savedFormValues"
ng-if="kubernetesApplicationCreationForm.$valid & & ctrl.isExternalApplication()"
>< / application-summary-section >
< / div >
< div ng-if = "ctrl.isTemporaryRefresh" >
< application-summary-section
application-kind="ctrl.formValues.ApplicationType"
form-values="ctrl.formValues"
old-form-values="ctrl.savedFormValues"
ng-if="kubernetesApplicationCreationForm.$valid & & ctrl.isExternalApplication()"
>< / application-summary-section >
< / div >
2024-01-05 02:42:36 +00:00
<!-- kubernetes summary for external application -->
2023-12-03 18:43:53 +00:00
< div class = "col-sm-12 form-section-title !mt-6" ng-if = "ctrl.state.appType !== ctrl.KubernetesDeploymentTypes.GIT" ng-hide = "ctrl.stack.IsComposeFormat" > Actions < / div >
2024-01-05 02:42:36 +00:00
<!-- #region ACTIONS -->
2023-12-03 18:43:53 +00:00
< div class = "form-group" ng-hide = "ctrl.stack.IsComposeFormat" >
< div class = "col-sm-12" >
< button
ng-if="ctrl.state.appType === ctrl.KubernetesDeploymentTypes.APPLICATION_FORM"
type="button"
class="btn btn-primary btn-sm !ml-0"
ng-disabled="!kubernetesApplicationCreationForm.$valid || ctrl.isDeployUpdateButtonDisabled() || !ctrl.imageValidityIsValid() || ctrl.hasPortErrors() || !ctrl.formValues.ResourcePool"
ng-click="ctrl.deployApplication()"
button-spinner="ctrl.state.actionInProgress"
data-cy="k8sAppCreate-deployButton"
>
< span ng-show = "!ctrl.state.isEdit && !ctrl.state.actionInProgress" > Deploy application< / span >
< span ng-show = "!ctrl.state.isEdit && ctrl.state.actionInProgress" > Deployment in progress...< / span >
< span ng-show = "ctrl.state.isEdit && !ctrl.state.actionInProgress" > Update application< / span >
< span ng-show = "ctrl.state.isEdit && ctrl.state.actionInProgress" > Update in progress...< / span >
< / button >
< button
ng-if="ctrl.state.isEdit & & !ctrl.state.actionInProgress & & ctrl.state.appType === ctrl.KubernetesDeploymentTypes.APPLICATION_FORM"
type="button"
class="btn btn-sm btn-default"
ui-sref="kubernetes.applications.application({ name: ctrl.application.Name, namespace: ctrl.application.ResourcePool })"
data-cy="k8sAppCreate-appCancelButton"
>
Cancel
< / button >
<!-- #Web editor buttons -->
< button
class="btn btn-sm btn-primary"
ng-click="ctrl.updateApplicationViaWebEditor()"
ng-if="ctrl.state.appType === ctrl.KubernetesDeploymentTypes.CONTENT || ctrl.state.updateWebEditorInProgress"
2024-02-08 00:51:06 +00:00
ng-disabled="ctrl.isUpdateApplicationViaWebEditorButtonDisabled() || !kubernetesApplicationCreationForm.$valid"
2023-12-03 18:43:53 +00:00
style="margin-top: 7px; margin-left: 0"
button-spinner="ctrl.state.updateWebEditorInProgress"
>
2024-02-08 00:51:06 +00:00
< span ng-show = "!ctrl.state.updateWebEditorInProgress" > Update application< / span >
2023-12-03 18:43:53 +00:00
< span ng-show = "ctrl.state.updateWebEditorInProgress" > Update in progress...< / span >
< / button >
< / div >
< / div >
<!-- #endregion -->
< / div >
2022-01-16 19:37:46 +00:00
< div ng-if = "!ctrl.isExternalApplication()" >
< git-form-info-panel
ng-if="ctrl.state.appType == ctrl.KubernetesDeploymentTypes.GIT"
2023-02-22 20:13:33 +00:00
class-name="'text-muted'"
2022-01-16 19:37:46 +00:00
url="ctrl.stack.GitConfig.URL"
config-file-path="ctrl.stack.GitConfig.ConfigFilePath"
additional-files="ctrl.stack.AdditionalFiles"
2023-02-22 20:13:33 +00:00
type="'application'"
2022-01-16 19:37:46 +00:00
>< / git-form-info-panel >
<!-- #region NAMESPACE -->
2024-01-11 02:13:28 +00:00
< namespace-selector
values="ctrl.formValues.ResourcePool.Namespace.Name"
on-change="(ctrl.onChangeNamespaceName)"
2024-01-21 20:30:11 +00:00
validation-data="{hasQuota: ctrl.state.resourcePoolHasQuota, isResourceQuotaCapacityExceeded: ctrl.resourceQuotaCapacityExceeded(), namespaceOptionCount: ctrl.resourcePools.length, isEnvironmentAdmin: ctrl.isAdmin}"
2024-01-11 02:13:28 +00:00
is-edit="ctrl.state.isEdit"
>< / namespace-selector >
2021-09-07 00:37:26 +00:00
<!-- #endregion -->
2020-07-05 23:21:03 +00:00
2023-10-16 01:08:06 +00:00
<!-- #region STACK -->
2024-01-11 02:13:28 +00:00
< kube-stack-name
ng-if="!ctrl.deploymentOptions.hideStacksFunctionality & & ctrl.state.appType !== ctrl.KubernetesDeploymentTypes.APPLICATION_FORM"
stack-name="ctrl.formValues.StackName"
set-stack-name="(ctrl.onChangeStackName)"
2024-02-13 20:01:02 +00:00
text-tip="'Portainer can automatically bundle multiple applications inside a stack. Enter a name of a new stack or select an existing stack in the list. Leave empty to use the application name.'"
2024-01-11 02:13:28 +00:00
stacks="ctrl.stacks"
input-class-name="'col-lg-10 col-sm-9'"
>< / kube-stack-name >
2023-10-16 01:08:06 +00:00
<!-- #endregion -->
2022-01-16 19:37:46 +00:00
<!-- #region Git repository -->
< kubernetes-redeploy-app-git-form
ng-if="ctrl.state.appType === ctrl.KubernetesDeploymentTypes.GIT"
stack="ctrl.stack"
namespace="ctrl.formValues.ResourcePool.Namespace.Name"
2024-02-19 20:23:50 +00:00
stack-name="ctrl.formValues.StackName"
2022-01-16 19:37:46 +00:00
>< / kubernetes-redeploy-app-git-form >
<!-- #endregion -->
2021-03-24 18:27:32 +00:00
2022-01-16 19:37:46 +00:00
<!-- #region web editor -->
2024-01-11 02:13:28 +00:00
< edit-yaml-form-section
2022-01-16 19:37:46 +00:00
ng-if="ctrl.state.appType === ctrl.KubernetesDeploymentTypes.CONTENT"
2024-01-11 02:13:28 +00:00
values="ctrl.stackFileContent"
2022-01-16 19:37:46 +00:00
on-change="(ctrl.onChangeFileContent)"
2024-01-11 02:13:28 +00:00
is-compose-format="ctrl.stack.IsComposeFormat"
>< / edit-yaml-form-section >
2022-01-16 19:37:46 +00:00
<!-- #endregion -->
< div ng-if = "ctrl.state.appType === ctrl.KubernetesDeploymentTypes.APPLICATION_FORM" >
<!-- #region NAME FIELD -->
2024-01-11 02:13:28 +00:00
< name-form-section
values="ctrl.formValues.Name"
on-change="(ctrl.onChangeAppName)"
is-edit="ctrl.state.isEdit"
validation-data="{existingNames: ctrl.applicationNames, isEdit: ctrl.state.isEdit, originalName: ctrl.application.Name}"
>< / name-form-section >
2021-09-22 04:01:28 +00:00
<!-- #endregion -->
2020-07-05 23:21:03 +00:00
2022-01-16 19:37:46 +00:00
<!-- #region IMAGE FIELD -->
2023-03-01 00:11:12 +00:00
< div class = "form-group mb-2" >
2021-09-22 04:01:28 +00:00
< div class = "col-sm-12" >
2022-01-16 19:37:46 +00:00
< por-image-registry
model="ctrl.formValues.ImageModel"
ng-if="ctrl.formValues.ResourcePool"
auto-complete="false"
2022-08-12 18:22:45 +00:00
label-class="col-sm-3 col-lg-2"
2024-01-11 02:13:28 +00:00
input-class="col-sm-9 col-lg-10"
2022-01-16 19:37:46 +00:00
namespace="ctrl.formValues.ResourcePool.Namespace.Name"
endpoint="ctrl.endpoint"
is-admin="ctrl.isAdmin"
check-rate-limits="true"
set-validity="ctrl.setPullImageValidity"
>< / por-image-registry >
< / div >
< / div >
2022-07-11 02:05:23 +00:00
<!-- #end region IMAGE FIELD -->
2023-03-10 03:52:09 +00:00
< div class = "col-sm-12 mb-4 !p-0" >
2023-03-01 00:11:12 +00:00
< annotations-be-teaser > < / annotations-be-teaser >
< / div >
2022-01-16 19:37:46 +00:00
< div ng-if = "ctrl.formValues.ResourcePool" >
<!-- #region STACK -->
2024-01-11 02:13:28 +00:00
< kube-stack-name
2024-02-13 20:01:02 +00:00
ng-if="!ctrl.deploymentOptions.hideStacksFunctionality"
2024-01-11 02:13:28 +00:00
stack-name="ctrl.formValues.StackName"
set-stack-name="(ctrl.onChangeStackName)"
2024-02-13 20:01:02 +00:00
text-tip="'Portainer can automatically bundle multiple applications inside a stack. Enter a name of a new stack or select an existing stack in the list. Leave empty to use the application name.'"
2024-01-11 02:13:28 +00:00
stacks="ctrl.stacks"
input-class-name="'col-lg-10 col-sm-9'"
>< / kube-stack-name >
2022-01-16 19:37:46 +00:00
<!-- #endregion -->
<!-- #region ENVIRONMENT VARIABLES -->
2024-01-16 21:13:53 +00:00
< environment-variables-form-section
values="ctrl.formValues.EnvironmentVariables"
on-change="(ctrl.onEnvironmentVariableChange)"
>< / environment-variables-form-section >
2023-03-01 00:11:12 +00:00
<!-- #endregion -->
2023-06-11 21:46:48 +00:00
<!-- #region CONFIGMAPS -->
2024-01-02 20:07:11 +00:00
< config-maps-form-section
values="ctrl.formValues.ConfigMaps"
on-change="(ctrl.onConfigMapsChange)"
namespace="ctrl.formValues.ResourcePool.Namespace.Name"
validation-data="ctrl.formValues.ConfigMaps"
>< / config-maps-form-section >
2023-06-11 21:46:48 +00:00
<!-- #region SECRETS -->
2024-01-02 20:07:11 +00:00
< secrets-form-section
values="ctrl.formValues.Secrets"
on-change="(ctrl.onSecretsChange)"
namespace="ctrl.formValues.ResourcePool.Namespace.Name"
validation-data="ctrl.formValues.Secrets"
>< / secrets-form-section >
2022-01-16 19:37:46 +00:00
<!-- #endregion -->
2021-09-22 04:01:28 +00:00
2024-01-02 20:46:26 +00:00
< persisted-folders-form-section
values="ctrl.formValues.PersistedFolders"
initial-values="ctrl.formValues.OriginalPersistedFolders"
on-change="(ctrl.onChangePersistedFolder)"
is-edit="ctrl.state.isEdit"
application-values="ctrl.formValues"
is-add-persistent-folder-button-shown="ctrl.isAddPersistentFolderButtonShown()"
available-volumes="ctrl.availableVolumes"
validation-data="{ namespaceQuotas: ctrl.formValues.ResourcePool.Quota, persistedFolders: ctrl.formValues.PersistedFolders, storageAvailabilities: ctrl.state.storages.availabilities }"
>< / persisted-folders-form-section >
2021-09-07 00:37:26 +00:00
2022-01-16 19:37:46 +00:00
<!-- #region DATA ACCESS POLICY -->
2024-01-16 19:31:22 +00:00
< access-policy-form-section
ng-if="ctrl.showDataAccessPolicySection()"
value="ctrl.formValues.DataAccessPolicy"
on-change="(ctrl.onDataAccessPolicyChange)"
is-edit="ctrl.state.isEdit"
persisted-folders-use-existing-volumes="ctrl.state.persistedFoldersUseExistingVolumes"
>< / access-policy-form-section >
2022-01-16 19:37:46 +00:00
<!-- #endregion -->
2021-09-07 00:37:26 +00:00
2024-01-02 21:03:33 +00:00
< resource-reservation-form-section
values="{memoryLimit: ctrl.formValues.MemoryLimit, cpuLimit: ctrl.formValues.CpuLimit}"
on-change="(ctrl.onChangeResourceReservation)"
namespace-has-quota="ctrl.state.resourcePoolHasQuota"
2024-01-22 22:20:24 +00:00
min-memory-limit="ctrl.state.sliders.memory.min"
min-cpu-limit="ctrl.state.sliders.cpu.min"
2024-01-02 21:03:33 +00:00
max-memory-limit="ctrl.state.sliders.memory.max"
max-cpu-limit="ctrl.state.sliders.cpu.max"
2024-01-17 03:30:30 +00:00
validation-data="{maxMemoryLimit: ctrl.state.sliders.memory.max, maxCpuLimit: ctrl.state.sliders.cpu.max, isEnvironmentAdmin: ctrl.isAdmin, nodeLimits: ctrl.nodesLimits.nodesLimits}"
2024-01-02 21:03:33 +00:00
resource-quota-capacity-exceeded="ctrl.resourceQuotaCapacityExceeded()"
>< / resource-reservation-form-section >
2021-09-07 00:37:26 +00:00
2022-01-16 19:37:46 +00:00
<!-- deployment options -->
2024-01-02 21:04:08 +00:00
< app-deployment-type-form-section
2024-01-15 00:29:35 +00:00
values="ctrl.formValues.DeploymentType"
2023-02-07 03:33:57 +00:00
on-change="(ctrl.onChangeDeploymentType)"
support-global-deployment="ctrl.supportGlobalDeployment()"
radio-name="'deploymentType'"
2024-01-15 00:29:35 +00:00
validation-data="{isQuotaExceeded: ctrl.resourceReservationsOverflow()}"
2024-01-02 21:04:08 +00:00
>< / app-deployment-type-form-section >
2020-07-05 23:21:03 +00:00
2022-01-16 19:37:46 +00:00
<!-- replica count -->
2024-01-05 02:42:36 +00:00
< div ng-if = "ctrl.formValues.DeploymentType === ctrl.ApplicationDeploymentTypes.Replicated" >
2024-01-02 21:27:38 +00:00
< replication-form-section
values="{replicaCount: ctrl.formValues.ReplicaCount}"
on-change="(ctrl.onChangeReplicaCount)"
support-scalable-replica-deployment="ctrl.supportScalableReplicaDeployment()"
memory-limit="ctrl.formValues.MemoryLimit"
cpu-limit="ctrl.formValues.CpuLimit"
resource-reservations-overflow="ctrl.resourceReservationsOverflow()"
non-scalable-storage="ctrl.getNonScalableStorage()"
validation-data="{resourceReservationsOverflow: ctrl.resourceReservationsOverflow(), quotaExceeded: ctrl.state.storages.quotaExceeded, nonScalableStorage: ctrl.getNonScalableStorage(), supportScalableReplicaDeployment: ctrl.supportScalableReplicaDeployment()}"
>< / replication-form-section >
2021-09-22 04:01:28 +00:00
< / div >
2022-01-16 19:37:46 +00:00
<!-- #endregion -->
2021-09-22 04:01:28 +00:00
2022-01-16 19:37:46 +00:00
<!-- #region AUTO SCALING -->
2024-01-05 02:42:36 +00:00
< div ng-if = "ctrl.formValues.DeploymentType !== ctrl.ApplicationDeploymentTypes.Global" >
2024-01-02 21:42:39 +00:00
< auto-scaling-form-section
2024-01-05 02:42:36 +00:00
values="ctrl.formValues.AutoScaler"
2024-01-02 21:42:39 +00:00
on-change="(ctrl.onAutoScaleChange)"
validation-data="{autoScalerOverflow: ctrl.autoScalerOverflow()}"
is-metrics-enabled="ctrl.state.useServerMetrics"
>< / auto-scaling-form-section >
2021-09-22 04:01:28 +00:00
< / div >
2022-01-16 19:37:46 +00:00
<!-- #endregion -->
2023-03-01 00:11:12 +00:00
< / div >
2020-08-12 23:30:23 +00:00
2024-01-02 22:00:50 +00:00
< div class = "mb-8" ng-if = "ctrl.formValues.ResourcePool" >
2024-01-18 23:20:44 +00:00
< placement-form-section
ng-show="ctrl.formValues.DeploymentType === ctrl.ApplicationDeploymentTypes.Replicated"
values="{placements: ctrl.formValues.Placements, placementType: ctrl.formValues.PlacementType}"
on-change="(ctrl.onChangePlacements)"
>< / placement-form-section >
<!-- kubernetes services options -->
2023-11-05 17:37:48 +00:00
< kube-services-form
on-change="(ctrl.onServicesChange)"
values="ctrl.formValues.Services"
load-balancer-enabled="ctrl.publishViaLoadBalancerEnabled()"
app-name="ctrl.formValues.Name"
selector="ctrl.formValues.Selector"
validation-data="{nodePortServices: ctrl.state.nodePortServices, formServices: ctrl.formValues.Services, ingressPaths: ctrl.ingressPaths, originalIngressPaths: ctrl.originalIngressPaths}"
is-edit-mode="ctrl.state.isEdit"
namespace="ctrl.formValues.ResourcePool.Namespace.Name"
>< / kube-services-form >
< / div >
2023-03-01 00:11:12 +00:00
<!-- kubernetes services options -->
2024-01-10 21:14:23 +00:00
<!-- application summary start -->
<!-- below workaround is needed because we wanted react to render it again
by hiding/showing it, but the page was fluctuating. so we added two blocks for both the conditions -->
< div ng-if = "!ctrl.isTemporaryRefresh" >
<!-- summary -->
< application-summary-section
application-kind="ctrl.formValues.ApplicationType"
ng-if="!(!kubernetesApplicationCreationForm.$valid || ctrl.isDeployUpdateButtonDisabled() || !ctrl.state.pullImageValidity)"
form-values="ctrl.formValues"
old-form-values="ctrl.savedFormValues"
>< / application-summary-section >
< / div >
< div ng-if = "ctrl.isTemporaryRefresh" >
<!-- summary -->
< application-summary-section
application-kind="ctrl.formValues.ApplicationType"
ng-if="!(!kubernetesApplicationCreationForm.$valid || ctrl.isDeployUpdateButtonDisabled() || !ctrl.state.pullImageValidity)"
form-values="ctrl.formValues"
old-form-values="ctrl.savedFormValues"
>< / application-summary-section >
< / div >
<!-- application summary end -->
2022-01-16 19:37:46 +00:00
< / div >
2023-12-03 18:43:53 +00:00
<!-- #region ACTIONS -->
< div class = "col-sm-12 form-section-title !mt-6" ng-if = "ctrl.state.appType !== ctrl.KubernetesDeploymentTypes.GIT" ng-hide = "ctrl.stack.IsComposeFormat" > Actions < / div >
< div class = "form-group" ng-hide = "ctrl.stack.IsComposeFormat" >
< div class = "col-sm-12" >
< button
ng-if="ctrl.state.appType === ctrl.KubernetesDeploymentTypes.APPLICATION_FORM"
type="button"
class="btn btn-primary btn-sm !ml-0"
ng-disabled="!kubernetesApplicationCreationForm.$valid || ctrl.isDeployUpdateButtonDisabled() || !ctrl.imageValidityIsValid() || ctrl.hasPortErrors() || !ctrl.formValues.ResourcePool"
ng-click="ctrl.deployApplication()"
button-spinner="ctrl.state.actionInProgress"
data-cy="k8sAppCreate-deployButton"
>
< span ng-show = "!ctrl.state.isEdit && !ctrl.state.actionInProgress" > Deploy application< / span >
< span ng-show = "!ctrl.state.isEdit && ctrl.state.actionInProgress" > Deployment in progress...< / span >
< span ng-show = "ctrl.state.isEdit && !ctrl.state.actionInProgress" > Update application< / span >
< span ng-show = "ctrl.state.isEdit && ctrl.state.actionInProgress" > Update in progress...< / span >
< / button >
< button
ng-if="ctrl.state.isEdit & & !ctrl.state.actionInProgress & & ctrl.state.appType === ctrl.KubernetesDeploymentTypes.APPLICATION_FORM"
type="button"
class="btn btn-sm btn-default"
ui-sref="kubernetes.applications.application({ name: ctrl.application.Name, namespace: ctrl.application.ResourcePool })"
data-cy="k8sAppCreate-appCancelButton"
>
Cancel
< / button >
<!-- #Web editor buttons -->
< button
class="btn btn-sm btn-primary"
ng-click="ctrl.updateApplicationViaWebEditor()"
ng-if="ctrl.state.appType === ctrl.KubernetesDeploymentTypes.CONTENT || ctrl.state.updateWebEditorInProgress"
2024-02-08 00:51:06 +00:00
ng-disabled="ctrl.isUpdateApplicationViaWebEditorButtonDisabled() || !kubernetesApplicationCreationForm.$valid"
2023-12-03 18:43:53 +00:00
style="margin-top: 7px; margin-left: 0"
button-spinner="ctrl.state.updateWebEditorInProgress"
>
2024-01-15 20:31:44 +00:00
< span ng-show = "!ctrl.state.updateWebEditorInProgress" > Update application< / span >
2023-12-03 18:43:53 +00:00
< span ng-show = "ctrl.state.updateWebEditorInProgress" > Update in progress...< / span >
< / button >
2021-09-07 00:37:26 +00:00
< / div >
2021-09-24 01:00:55 +00:00
< / div >
2020-07-05 23:21:03 +00:00
< / div >
< / form >
< / rd-widget-body >
< / rd-widget >
< / div >
< / div >
< / div >