{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./app/kubernetes/models/application/models/index.js","webpack:///./app/portainer/error.js","webpack:///./app/kubernetes/models/common/params.js","webpack:///./app/kubernetes/helpers/application/index.js","webpack:///./app/portainer/models/endpoint/models.js","webpack:///./app/kubernetes/models/application/formValues.js","webpack:///./app/kubernetes/helpers/resourceReservationHelper.js","webpack:///./app/portainer/models/resourceControl/resourceControlOwnership.js","webpack:///./app/kubernetes/models/configuration/models.js","webpack:///./app/kubernetes/models/service/models.js","webpack:///./app/kubernetes/models/resource-types/models.js","webpack:///./app/kubernetes/models/resource-quota/models.js","webpack:///./app/kubernetes/rest/response/transform.js","webpack:///./app/docker/rest/response/handlers.js","webpack:///./app/kubernetes/pod/models/index.js","webpack:///./app/kubernetes/helpers/commonHelper.js","webpack:///./app/portainer/components/accessControlForm/porAccessControlFormModel.js","webpack:///./app/kubernetes/models/common/payloads.js","webpack:///./app/kubernetes/ingress/converter.js","webpack:///./app/kubernetes/helpers/formValidationHelper.js","webpack:///./app/kubernetes/models/resource-pool/formValues.js","webpack:///./app/portainer/models/resourceControl/resourceControl.js","webpack:///./app/portainer/models/registryTypes.js","webpack:///./app/kubernetes/models/config-map/models.js","webpack:///./app/kubernetes/converters/application.js","webpack:///./app/kubernetes/node/models.js","webpack:///./app/kubernetes/models/configuration/formvalues.js","webpack:///./app/kubernetes/ingress/constants.js","webpack:///./app/kubernetes/converters/configMap.js","webpack:///./app/docker/models/porImageRegistry.js","webpack:///./app/kubernetes/helpers/configurationHelper.js","webpack:///./app/kubernetes/helpers/volumeHelper.js","webpack:///./app/kubernetes/horizontal-pod-auto-scaler/converter.js","webpack:///./app/portainer/helpers/env-vars.js","webpack:///./app/kubernetes/models/stateful-set/models.js","webpack:///./app/kubernetes/models/application/payloads.js","webpack:///./app/kubernetes/models/resource-pool/models.js","webpack:///./app/kubernetes/converters/persistentVolumeClaim.js","webpack:///./app/kubernetes/node/converter.js","webpack:///./app/kubernetes/helpers/eventHelper.js","webpack:///./app/portainer/models/access.js","webpack:///./app/kubernetes/converters/resourceQuota.js","webpack:///./app/kubernetes/horizontal-pod-auto-scaler/helper.js","webpack:///./app/kubernetes/models/deploy.js","webpack:///./app/kubernetes/helpers/resourceQuotaHelper.js","webpack:///./app/integrations/storidge/models/profile.js","webpack:///./app/kubernetes/converters/resourcePool.js","webpack:///./app/kubernetes/converters/secret.js","webpack:///./app/kubernetes/models/history/models.js","webpack:///./app/portainer/models/resourceControl/resourceControlTypes.js","webpack:///./app/kubernetes/models/deployment/models.js","webpack:///./app/kubernetes/models/daemon-set/models.js","webpack:///./app/kubernetes/converters/service.js","webpack:///./app/kubernetes/pod/converter.js","webpack:///./app/kubernetes/converters/configuration.js","webpack:///./app/portainer/models/stack.js","webpack:///./app/kubernetes/models/storage-class/models.js","webpack:///./app/kubernetes/ingress/models.js","webpack:///./app/kubernetes/node/formValues.js","webpack:///./app/portainer/models/registry.js","webpack:///./app/kubernetes/models/resource-reservation/models.js","webpack:///./app/portainer/models/teamMembership.js","webpack:///./app/azure/models/container_group.js","webpack:///./app/docker/helpers/networkHelper.js","webpack:///./app/docker/models/container.js","webpack:///./app/docker/models/image.js","webpack:///./app/kubernetes/node/helper.js","webpack:///./app/portainer/models/group.js","webpack:///./app/kubernetes/pod/payloads/affinities.js","webpack:///./app/kubernetes/converters/deployment.js","webpack:///./app/kubernetes/converters/daemonSet.js","webpack:///./app/kubernetes/converters/statefulSet.js","webpack:///./app/kubernetes/models/volume/models.js","webpack:///./app/kubernetes/helpers/serviceHelper.js","webpack:///./app/portainer/services/session-storage.js","webpack:///./app/docker/models/containerCapabilities.js","webpack:///./app/portainer/models/resourceControl/resourceControlOwnershipParameters.js","webpack:///./app/agent/rest/response/browse.js","webpack:///./app/portainer/models/dockerhub.js","webpack:///./app/kubernetes/models/namespace/models.js","webpack:///./app/portainer/services/allSettled.js","webpack:///./app/portainer/helpers/tagHelper.js","webpack:///./app/portainer/components/endpointSecurity/porEndpointSecurityModel.js","webpack:///./app/docker/models/volume.js","webpack:///./app/portainer/models/schedule.js","webpack:///./app/kubernetes/models/config-map/payloads.js","webpack:///./app/kubernetes/converters/namespace.js","webpack:///./app/kubernetes/ingress/payloads.js","webpack:///./app/kubernetes/endpoint/models.js","webpack:///./app/kubernetes/helpers/configMapHelper.js","webpack:///./app/kubernetes/helpers/history/deployment.js","webpack:///./app/kubernetes/views/summary/resources/helpers.js","webpack:///./app/assets/images/logo_alt.png","webpack:///./app/azure/models/resource_group.js","webpack:///./app/azure/models/subscription.js","webpack:///./app/docker/models/config.js","webpack:///./app/docker/models/network.js","webpack:///./app/docker/models/node.js","webpack:///./app/docker/models/secret.js","webpack:///./app/docker/models/service.js","webpack:///./app/docker/models/task.js","webpack:///./app/integrations/storidge/models/drive.js","webpack:///./app/integrations/storidge/models/node.js","webpack:///./app/integrations/storidge/models/snapshot.js","webpack:///./app/integrations/storidge/models/volume.js","webpack:///./app/kubernetes/models/port/models.js","webpack:///./app/kubernetes/models/secret/payloads.js","webpack:///./app/kubernetes/models/secret/models.js","webpack:///./app/kubernetes/converters/storageClass.js","webpack:///./app/kubernetes/converters/volume.js","webpack:///./app/kubernetes/helpers/history/daemonset.js","webpack:///./app/kubernetes/helpers/history/statefulset.js","webpack:///./app/kubernetes/horizontal-pod-auto-scaler/models.js","webpack:///./app/kubernetes/node/payload.js","webpack:///./app/portainer/models/endpoint/formValues.js","webpack:///./app/portainer/models/settings.js","webpack:///./app/portainer/models/status.js","webpack:///./app/portainer/models/tag.js","webpack:///./app/portainer/models/team.js","webpack:///./app/portainer/models/user.js","webpack:///./app/portainer/rest/transform/gitlabResponseGetLink.js","webpack:///./app/kubernetes/models/application/models/constants.js","webpack:///./app/kubernetes/pod/models/affinities.js","webpack:///./app/kubernetes/templates/advancedDeploymentPanel.html","webpack:///./app/portainer/components/index.js","webpack:///./app/portainer/components/forms/git-form/index.js","webpack:///./app/portainer/components/forms/git-form/git-form.js","webpack:///./app/portainer/components/forms/git-form/git-form.controller.js","webpack:///./app/portainer/components/forms/git-form/git-form-auth-fieldset/index.js","webpack:///./app/portainer/components/forms/git-form/git-form-auth-fieldset/git-form-auth-fieldset.controller.js","webpack:///./app/portainer/components/forms/git-form/git-form-compose-path-field/index.js","webpack:///./app/portainer/components/forms/git-form/git-form-ref-field/index.js","webpack:///./app/portainer/components/forms/git-form/git-form-url-field/index.js","webpack:///./app/agent/components/file-uploader/fileUploaderController.js","webpack:///./app/agent/components/host-browser/hostBrowserController.js","webpack:///./app/agent/components/node-selector/nodeSelectorController.js","webpack:///./app/agent/components/volume-browser/volumeBrowserController.js","webpack:///./app/agent/models/agent.js","webpack:///./app/azure/models/location.js","webpack:///./app/azure/models/provider.js","webpack:///./app/azure/views/containerinstances/container-instance-details/containerInstanceDetailsController.js","webpack:///./app/constants.js","webpack:///./app/docker/components/imageRegistry/por-image-registry-rate-limits.controller.js","webpack:///./app/docker/components/network-macvlan-form/networkMacvlanFormModel.js","webpack:///./app/docker/components/volumesCIFSForm/volumesCifsFormModel.js","webpack:///./app/docker/components/volumesNFSForm/volumesNFSFormModel.js","webpack:///./app/docker/models/event.js","webpack:///./app/docker/models/imageDetails.js","webpack:///./app/docker/models/imageLayer.js","webpack:///./app/docker/models/plugin.js","webpack:///./app/docker/models/swarm.js","webpack:///./app/docker/rest/response/image.js","webpack:///./app/docker/views/docker-features-configuration/docker-features-configuration.controller.js","webpack:///./app/edge/components/associated-endpoints-datatable/associatedEndpointsDatatableController.js","webpack:///./app/edge/components/edge-job-form/edgeJobFormController.js","webpack:///./app/edge/components/edge-job-results-datatable/edgeJobResultsDatatableController.js","webpack:///./app/edge/components/edge-stack-endpoints-datatable/edgeStackEndpointsDatatableController.js","webpack:///./app/edge/components/edge-stack-status/edgeStackStatusController.js","webpack:///./app/edge/components/edit-edge-stack-form/editEdgeStackFormController.js","webpack:///./app/edge/components/group-form/groupFormController.js","webpack:///./app/edge/components/groups-datatable/groupsDatatableController.js","webpack:///./app/edge/views/edge-groups/createEdgeGroupView/createEdgeGroupViewController.js","webpack:///./app/edge/views/edge-groups/edgeGroupsView/edgeGroupsViewController.js","webpack:///./app/edge/views/edge-groups/editEdgeGroupView/editEdgeGroupViewController.js","webpack:///./app/edge/views/edge-jobs/createEdgeJobView/createEdgeJobViewController.js","webpack:///./app/edge/views/edge-jobs/edgeJob/edgeJobController.js","webpack:///./app/edge/views/edge-jobs/edgeJobsView/edgeJobsViewController.js","webpack:///./app/edge/views/edge-stacks/createEdgeStackView/createEdgeStackViewController.js","webpack:///./app/edge/views/edge-stacks/edgeStacksView/edgeStacksViewController.js","webpack:///./app/edge/views/edge-stacks/editEdgeStackView/editEdgeStackViewController.js","webpack:///./app/integrations/storidge/models/events.js","webpack:///./app/integrations/storidge/models/info.js","webpack:///./app/kubernetes/component-status/converter.js","webpack:///./app/kubernetes/component-status/models.js","webpack:///./app/kubernetes/models/deployment/payloads.js","webpack:///./app/kubernetes/models/daemon-set/payloads.js","webpack:///./app/kubernetes/models/stateful-set/payloads.js","webpack:///./app/kubernetes/models/volume/payloads.js","webpack:///./app/kubernetes/models/service/payloads.js","webpack:///./app/kubernetes/ingress/helper.js","webpack:///./app/kubernetes/converters/event.js","webpack:///./app/kubernetes/models/event/models.js","webpack:///./app/kubernetes/models/namespace/payloads.js","webpack:///./app/kubernetes/models/resource-quota/payloads.js","webpack:///./app/kubernetes/models/storage-class/payload.js","webpack:///./app/kubernetes/endpoint/converter.js","webpack:///./app/kubernetes/helpers/application/rollback.js","webpack:///./app/kubernetes/helpers/history/index.js","webpack:///./app/kubernetes/helpers/stackHelper.js","webpack:///./app/kubernetes/models/stack/models.js","webpack:///./app/kubernetes/horizontal-pod-auto-scaler/payload.js","webpack:///./app/kubernetes/pod/payloads/create.js","webpack:///./app/kubernetes/views/summary/resources/applicationResources.js","webpack:///./app/kubernetes/views/summary/resources/configurationResources.js","webpack:///./app/kubernetes/views/summary/resources/namespaceResources.js","webpack:///./app/portainer/components/accessControlPanel/porAccessControlPanelModel.js","webpack:///./app/portainer/components/associated-endpoints-selector/associatedEndpointsSelectorController.js","webpack:///./app/portainer/components/custom-template-common-fields/customTemplateCommonFieldsController.js","webpack:///./app/portainer/components/datatables/datatable-columns-visibility/datatable-columns-visibility.controller.js","webpack:///./app/portainer/components/datatables/users-datatable/usersDatatableController.js","webpack:///./app/portainer/components/endpoint-list/endpoint-item/endpoint-item-controller.js","webpack:///./app/portainer/components/environment-variables-panel/environment-variables-panel.controller.js","webpack:///./app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode-item/environment-variables-simple-mode-item.controller.js","webpack:///./app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode.controller.js","webpack:///./app/portainer/components/forms/group-form/groupFormController.js","webpack:///./app/portainer/components/forms/stack-redeploy-git-form/stack-redeploy-git-form.controller.js","webpack:///./app/portainer/helpers/genericHelper.js","webpack:///./app/portainer/models/gitlabRegistry.js","webpack:///./app/portainer/models/motd.js","webpack:///./app/portainer/models/registryRepository.js","webpack:///./app/portainer/models/template.js","webpack:///./app/portainer/models/webhook.js","webpack:///./app/portainer/rest/transform/getEndpointsTotalCount.js","webpack:///./app/portainer/views/custom-templates/create-custom-template-view/createCustomTemplateViewController.js","webpack:///./app/portainer/views/custom-templates/custom-templates-view/customTemplatesViewController.js","webpack:///./app/portainer/views/custom-templates/edit-custom-template-view/editCustomTemplateViewController.js","webpack:///./app/__module.js","webpack:///./app/assets/css/index.js","webpack:///./app/matomo-setup.js","webpack:///./app/assets/js/angulartics-matomo.js","webpack:///./app/agent/index.js","webpack:///./app/azure/_module.js","webpack:///./app/docker/__module.js","webpack:///./app/edge/__module.js","webpack:///./app/portainer/__module.js","webpack:///./app/azure/views/containerinstances/containerinstances.html","webpack:///./app/azure/views/containerinstances/create/createcontainerinstance.html","webpack:///./app/azure/views/dashboard/dashboard.html","webpack:///./app/docker/views/configs/configs.html","webpack:///./app/docker/views/configs/edit/config.html","webpack:///./app/docker/views/configs/create/createconfig.html","webpack:///./app/docker/views/containers/containers.html","webpack:///./app/docker/views/containers/edit/container.html","webpack:///./app/docker/views/containers/console/attach.html","webpack:///./app/docker/views/containers/console/exec.html","webpack:///./app/docker/views/containers/create/createcontainer.html","webpack:///./app/docker/views/containers/inspect/containerinspect.html","webpack:///./app/docker/views/containers/logs/containerlogs.html","webpack:///./app/docker/views/containers/stats/containerstats.html","webpack:///./app/docker/views/dashboard/dashboard.html","webpack:///./app/docker/views/events/events.html","webpack:///./app/docker/views/images/images.html","webpack:///./app/docker/views/images/edit/image.html","webpack:///./app/docker/views/images/build/buildimage.html","webpack:///./app/docker/views/images/import/importimage.html","webpack:///./app/docker/views/networks/networks.html","webpack:///./app/docker/views/networks/edit/network.html","webpack:///./app/docker/views/networks/create/createnetwork.html","webpack:///./app/docker/views/secrets/secrets.html","webpack:///./app/docker/views/secrets/edit/secret.html","webpack:///./app/docker/views/secrets/create/createsecret.html","webpack:///./app/docker/views/services/services.html","webpack:///./app/docker/views/services/edit/service.html","webpack:///./app/docker/views/services/create/createservice.html","webpack:///./app/docker/views/services/logs/servicelogs.html","webpack:///./app/portainer/views/stacks/stacks.html","webpack:///./app/portainer/views/stacks/edit/stack.html","webpack:///./app/portainer/views/stacks/create/createstack.html","webpack:///./app/docker/views/swarm/swarm.html","webpack:///./app/docker/views/swarm/visualizer/swarmvisualizer.html","webpack:///./app/docker/views/tasks/edit/task.html","webpack:///./app/docker/views/tasks/logs/tasklogs.html","webpack:///./app/portainer/views/templates/templates.html","webpack:///./app/docker/views/volumes/volumes.html","webpack:///./app/docker/views/volumes/edit/volume.html","webpack:///./app/docker/views/volumes/browse/browsevolume.html","webpack:///./app/docker/views/volumes/create/createvolume.html","webpack:///./app/portainer/views/sidebar/sidebar.html","webpack:///./app/assets/images/logo.png","webpack:///./app/assets/images/logo_small.png","webpack:///./app/portainer/views/account/account.html","webpack:///./app/portainer/views/auth/auth.html","webpack:///./app/portainer/views/logout/logout.html","webpack:///./app/portainer/views/endpoints/endpoints.html","webpack:///./app/portainer/views/endpoints/edit/endpoint.html","webpack:///./app/kubernetes/views/configure/configure.html","webpack:///./app/portainer/views/endpoints/create/createendpoint.html","webpack:///./app/portainer/views/endpoints/access/endpointAccess.html","webpack:///./app/portainer/views/groups/groups.html","webpack:///./app/portainer/views/groups/edit/group.html","webpack:///./app/portainer/views/groups/create/creategroup.html","webpack:///./app/portainer/views/groups/access/groupAccess.html","webpack:///./app/portainer/views/home/home.html","webpack:///./app/portainer/views/init/endpoint/initEndpoint.html","webpack:///./app/portainer/views/init/admin/initAdmin.html","webpack:///./app/portainer/views/registries/registries.html","webpack:///./app/portainer/views/registries/edit/registry.html","webpack:///./app/portainer/views/registries/create/createregistry.html","webpack:///./app/portainer/views/registries/access/registryAccess.html","webpack:///./app/portainer/views/settings/settings.html","webpack:///./app/portainer/views/settings/authentication/settingsAuthentication.html","webpack:///./app/portainer/views/tags/tags.html","webpack:///./app/portainer/views/users/users.html","webpack:///./app/portainer/views/users/edit/user.html","webpack:///./app/portainer/views/teams/teams.html","webpack:///./app/portainer/views/teams/edit/team.html","webpack:///./app/portainer/views/roles/roles.html","webpack:///./app/portainer/components/forms/git-form/git-form.html","webpack:///./app/portainer/components/forms/git-form/git-form-auth-fieldset/git-form-auth-fieldset.html","webpack:///./app/portainer/components/forms/git-form/git-form-compose-path-field/git-form-compose-path-field.html","webpack:///./app/portainer/components/forms/git-form/git-form-ref-field/git-form-ref-field.html","webpack:///./app/portainer/components/forms/git-form/git-form-url-field/git-form-url-field.html","webpack:///./app sync ^(.*\\.(js$))[^.]*$/i","webpack:///./app/agent/components/file-uploader/index.js","webpack:///./app/agent/components/file-uploader/fileUploader.html","webpack:///./app/agent/components/files-datatable/index.js","webpack:///./app/agent/components/files-datatable/filesDatatable.html","webpack:///./app/agent/components/host-browser/index.js","webpack:///./app/agent/components/host-browser/hostBrowser.html","webpack:///./app/agent/components/node-selector/index.js","webpack:///./app/agent/components/node-selector/nodeSelector.html","webpack:///./app/agent/components/volume-browser/index.js","webpack:///./app/agent/components/volume-browser/volumeBrowser.html","webpack:///./app/agent/rest/agent.js","webpack:///./app/agent/rest/browse.js","webpack:///./app/agent/rest/dockerhub.js","webpack:///./app/agent/rest/host.js","webpack:///./app/agent/rest/ping.js","webpack:///./app/agent/rest/v1/agent.js","webpack:///./app/agent/rest/v1/browse.js","webpack:///./app/agent/services/agentService.js","webpack:///./app/agent/services/hostBrowserService.js","webpack:///./app/agent/services/pingService.js","webpack:///./app/agent/services/volumeBrowserService.js","webpack:///./app/app.js","webpack:///./app/azure/components/azure-endpoint-config/azure-endpoint-config.js","webpack:///./app/azure/components/azure-endpoint-config/azureEndpointConfig.html","webpack:///./app/azure/components/azure-sidebar-content/azure-sidebar-content.js","webpack:///./app/azure/components/azure-sidebar-content/azureSidebarContent.html","webpack:///./app/azure/components/datatables/containergroups-datatable/containerGroupsDatatable.js","webpack:///./app/azure/components/datatables/containergroups-datatable/containerGroupsDatatable.html","webpack:///./app/azure/rest/azure.js","webpack:///./app/azure/rest/container_group.js","webpack:///./app/azure/rest/location.js","webpack:///./app/azure/rest/provider.js","webpack:///./app/azure/rest/resource_group.js","webpack:///./app/azure/rest/subscription.js","webpack:///./app/azure/services/azureService.js","webpack:///./app/azure/services/containerGroupService.js","webpack:///./app/azure/services/locationService.js","webpack:///./app/azure/services/providerService.js","webpack:///./app/azure/services/resourceGroupService.js","webpack:///./app/azure/services/subscriptionService.js","webpack:///./app/azure/views/containerinstances/container-instance-details/index.js","webpack:///./app/azure/views/containerinstances/container-instance-details/containerInstanceDetails.html","webpack:///./app/azure/views/containerinstances/containerInstancesController.js","webpack:///./app/azure/views/containerinstances/create/createContainerInstanceController.js","webpack:///./app/azure/views/dashboard/dashboardController.js","webpack:///./app/config.js","webpack:///./app/docker/components/container-capabilities/container-capabilities.js","webpack:///./app/docker/components/container-capabilities/containerCapabilities.html","webpack:///./app/docker/components/container-quick-actions/containerQuickActions.js","webpack:///./app/docker/components/container-quick-actions/containerQuickActions.html","webpack:///./app/docker/components/container-restart-policy/container-restart-policy-controller.js","webpack:///./app/docker/components/container-restart-policy/container-restart-policy.js","webpack:///./app/docker/components/container-restart-policy/container-restart-policy.html","webpack:///./app/docker/components/dashboard-cluster-agent-info/dashboard-cluster-agent-info.js","webpack:///./app/docker/components/dashboard-cluster-agent-info/dashboardClusterAgentInfo.html","webpack:///./app/docker/components/dashboard-cluster-agent-info/dashboardClusterAgentInfoController.js","webpack:///./app/docker/components/datatables/configs-datatable/configsDatatable.js","webpack:///./app/docker/components/datatables/configs-datatable/configsDatatable.html","webpack:///./app/docker/components/datatables/container-networks-datatable/containerNetworksDatatable.js","webpack:///./app/docker/components/datatables/container-networks-datatable/containerNetworksDatatable.html","webpack:///./app/docker/components/datatables/container-networks-datatable/containerNetworksDatatableController.js","webpack:///./app/docker/components/datatables/container-processes-datatable/containerProcessesDatatable.js","webpack:///./app/docker/components/datatables/container-processes-datatable/containerProcessesDatatable.html","webpack:///./app/docker/components/datatables/containers-datatable/actions/containersDatatableActions.js","webpack:///./app/docker/components/datatables/containers-datatable/actions/containersDatatableActions.html","webpack:///./app/docker/components/datatables/containers-datatable/actions/containersDatatableActionsController.js","webpack:///./app/docker/components/datatables/containers-datatable/containersDatatable.js","webpack:///./app/docker/components/datatables/containers-datatable/containersDatatable.html","webpack:///./app/docker/components/datatables/containers-datatable/containersDatatableController.js","webpack:///./app/docker/components/datatables/events-datatable/eventsDatatable.js","webpack:///./app/docker/components/datatables/events-datatable/eventsDatatable.html","webpack:///./app/docker/components/datatables/images-datatable/imagesDatatable.js","webpack:///./app/docker/components/datatables/images-datatable/imagesDatatable.html","webpack:///./app/docker/components/datatables/images-datatable/imagesDatatableController.js","webpack:///./app/docker/components/datatables/macvlan-nodes-datatable/macvlanNodesDatatable.js","webpack:///./app/docker/components/datatables/macvlan-nodes-datatable/macvlanNodesDatatable.html","webpack:///./app/docker/components/datatables/networks-datatable/network-row-content/networkRowContent.js","webpack:///./app/docker/components/datatables/networks-datatable/network-row-content/networkRowContent.html","webpack:///./app/docker/components/datatables/networks-datatable/networksDatatable.js","webpack:///./app/docker/components/datatables/networks-datatable/networksDatatable.html","webpack:///./app/docker/components/datatables/networks-datatable/networksDatatableController.js","webpack:///./app/docker/components/datatables/node-tasks-datatable/nodeTasksDatatable.js","webpack:///./app/docker/components/datatables/node-tasks-datatable/nodeTasksDatatable.html","webpack:///./app/docker/components/datatables/nodes-datatable/nodesDatatable.js","webpack:///./app/docker/components/datatables/nodes-datatable/nodesDatatable.html","webpack:///./app/docker/components/datatables/secrets-datatable/secretsDatatable.js","webpack:///./app/docker/components/datatables/secrets-datatable/secretsDatatable.html","webpack:///./app/docker/components/datatables/service-tasks-datatable/serviceTasksDatatable.js","webpack:///./app/docker/components/datatables/service-tasks-datatable/serviceTasksDatatable.html","webpack:///./app/docker/components/datatables/service-tasks-datatable/serviceTasksDatatableController.js","webpack:///./app/docker/components/datatables/services-datatable/actions/servicesDatatableActions.js","webpack:///./app/docker/components/datatables/services-datatable/actions/servicesDatatableActions.html","webpack:///./app/docker/components/datatables/services-datatable/actions/servicesDatatableActionsController.js","webpack:///./app/docker/components/datatables/services-datatable/servicesDatatable.js","webpack:///./app/docker/components/datatables/services-datatable/servicesDatatable.html","webpack:///./app/docker/components/datatables/services-datatable/servicesDatatableController.js","webpack:///./app/docker/components/datatables/tasks-datatable/tasksDatatable.js","webpack:///./app/docker/components/datatables/tasks-datatable/tasksDatatable.html","webpack:///./app/docker/components/datatables/tasks-datatable/tasksDatatableController.js","webpack:///./app/docker/components/datatables/volumes-datatable/volumesDatatable.js","webpack:///./app/docker/components/datatables/volumes-datatable/volumesDatatable.html","webpack:///./app/docker/components/datatables/volumes-datatable/volumesDatatableController.js","webpack:///./app/docker/components/dockerSidebarContent/docker-sidebar-content.js","webpack:///./app/docker/components/dockerSidebarContent/dockerSidebarContent.html","webpack:///./app/docker/components/host-overview/host-overview.js","webpack:///./app/docker/components/host-overview/host-overview.html","webpack:///./app/docker/components/host-view-panels/devices-panel/devices-panel.js","webpack:///./app/docker/components/host-view-panels/devices-panel/devices-panel.html","webpack:///./app/docker/components/host-view-panels/disks-panel/disks-panel.js","webpack:///./app/docker/components/host-view-panels/disks-panel/disks-panel.html","webpack:///./app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.js","webpack:///./app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html","webpack:///./app/docker/components/host-view-panels/host-details-panel/host-details-panel.js","webpack:///./app/docker/components/host-view-panels/host-details-panel/host-details-panel.html","webpack:///./app/docker/components/host-view-panels/node-availability-select/node-availability-select-controller.js","webpack:///./app/docker/components/host-view-panels/node-availability-select/node-availability-select.js","webpack:///./app/docker/components/host-view-panels/node-availability-select/node-availability-select.html","webpack:///./app/docker/components/host-view-panels/node-labels-table/node-labels-table-controller.js","webpack:///./app/docker/components/host-view-panels/node-labels-table/node-labels-table.js","webpack:///./app/docker/components/host-view-panels/node-labels-table/node-labels-table.html","webpack:///./app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js","webpack:///./app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js","webpack:///./app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html","webpack:///./app/docker/components/imageRegistry/por-image-registry-rate-limits.js","webpack:///./app/docker/components/imageRegistry/por-image-registry-rate-limits.html","webpack:///./app/docker/components/imageRegistry/por-image-registry.controller.js","webpack:///./app/docker/components/imageRegistry/por-image-registry.js","webpack:///./app/docker/components/imageRegistry/por-image-registry.html","webpack:///./app/docker/components/log-viewer/log-viewer.js","webpack:///./app/docker/components/log-viewer/logViewer.html","webpack:///./app/docker/components/log-viewer/logViewerController.js","webpack:///./app/docker/components/network-macvlan-form/network-macvlan-form.js","webpack:///./app/docker/components/network-macvlan-form/networkMacvlanForm.html","webpack:///./app/docker/components/network-macvlan-form/networkMacvlanFormController.js","webpack:///./app/docker/components/volumesCIFSForm/volumesCifsForm.js","webpack:///./app/docker/components/volumesCIFSForm/volumesCifsForm.html","webpack:///./app/docker/components/volumesNFSForm/volumes-nfs-form.js","webpack:///./app/docker/components/volumesNFSForm/volumesnfsForm.html","webpack:///./app/docker/filters/filters.js","webpack:///./app/docker/helpers/configHelper.js","webpack:///./app/docker/helpers/constraintsHelper.js","webpack:///./app/docker/helpers/containerHelper.js","webpack:///./app/docker/helpers/imageHelper.js","webpack:///./app/docker/helpers/infoHelper.js","webpack:///./app/docker/helpers/labelHelper.js","webpack:///./app/docker/helpers/logHelper.js","webpack:///./app/docker/helpers/nodeHelper.js","webpack:///./app/docker/helpers/secretHelper.js","webpack:///./app/docker/helpers/serviceHelper.js","webpack:///./app/docker/helpers/taskHelper.js","webpack:///./app/docker/helpers/volumeHelper.js","webpack:///./app/docker/interceptors/containersInterceptor.js","webpack:///./app/docker/interceptors/imagesInterceptor.js","webpack:///./app/docker/interceptors/infoInterceptor.js","webpack:///./app/docker/interceptors/networksInterceptor.js","webpack:///./app/docker/interceptors/versionInterceptor.js","webpack:///./app/docker/interceptors/volumesInterceptor.js","webpack:///./app/docker/rest/build.js","webpack:///./app/docker/rest/commit.js","webpack:///./app/docker/rest/config.js","webpack:///./app/docker/rest/container.js","webpack:///./app/docker/rest/exec.js","webpack:///./app/docker/rest/image.js","webpack:///./app/docker/rest/network.js","webpack:///./app/docker/rest/node.js","webpack:///./app/docker/rest/plugin.js","webpack:///./app/docker/rest/secret.js","webpack:///./app/docker/rest/service.js","webpack:///./app/docker/rest/swarm.js","webpack:///./app/docker/rest/system.js","webpack:///./app/docker/rest/systemEndpoint.js","webpack:///./app/docker/rest/task.js","webpack:///./app/docker/rest/volume.js","webpack:///./app/docker/services/buildService.js","webpack:///./app/docker/services/configService.js","webpack:///./app/docker/services/containerService.js","webpack:///./app/docker/services/execService.js","webpack:///./app/docker/services/imageService.js","webpack:///./app/docker/services/networkService.js","webpack:///./app/docker/services/nodeService.js","webpack:///./app/docker/services/pluginService.js","webpack:///./app/docker/services/secretService.js","webpack:///./app/docker/services/serviceService.js","webpack:///./app/docker/services/swarmService.js","webpack:///./app/docker/services/systemService.js","webpack:///./app/docker/services/taskService.js","webpack:///./app/docker/services/volumeService.js","webpack:///./app/docker/views/configs/configsController.js","webpack:///./app/docker/views/configs/create/createConfigController.js","webpack:///./app/docker/views/configs/edit/configController.js","webpack:///./app/docker/views/containers/console/containerConsoleController.js","webpack:///./app/docker/views/containers/containersController.js","webpack:///./app/docker/views/containers/create/createContainerController.js","webpack:///./app/docker/views/containers/edit/containerController.js","webpack:///./app/docker/views/containers/inspect/containerInspectController.js","webpack:///./app/docker/views/containers/logs/containerLogsController.js","webpack:///./app/docker/views/containers/stats/containerStatsController.js","webpack:///./app/docker/views/dashboard/dashboardController.js","webpack:///./app/docker/views/docker-features-configuration/index.js","webpack:///./app/docker/views/docker-features-configuration/docker-features-configuration.html","webpack:///./app/docker/views/events/eventsController.js","webpack:///./app/docker/views/host/host-browser-view/host-browser-view-controller.js","webpack:///./app/docker/views/host/host-browser-view/host-browser-view.js","webpack:///./app/docker/views/host/host-browser-view/host-browser-view.html","webpack:///./app/docker/views/host/host-view-controller.js","webpack:///./app/docker/views/host/host-view.js","webpack:///./app/docker/views/host/host-view.html","webpack:///./app/docker/views/images/build/buildImageController.js","webpack:///./app/docker/views/images/edit/imageController.js","webpack:///./app/docker/views/images/imagesController.js","webpack:///./app/docker/views/images/import/importImageController.js","webpack:///./app/docker/views/networks/create/createNetworkController.js","webpack:///./app/docker/views/networks/edit/networkController.js","webpack:///./app/docker/views/networks/networksController.js","webpack:///./app/docker/views/nodes/node-browser/node-browser-controller.js","webpack:///./app/docker/views/nodes/node-browser/node-browser.js","webpack:///./app/docker/views/nodes/node-browser/node-browser.html","webpack:///./app/docker/views/nodes/node-details/node-details-view-controller.js","webpack:///./app/docker/views/nodes/node-details/node-details-view.js","webpack:///./app/docker/views/nodes/node-details/node-details-view.html","webpack:///./app/docker/views/secrets/create/createSecretController.js","webpack:///./app/docker/views/secrets/edit/secretController.js","webpack:///./app/docker/views/secrets/secretsController.js","webpack:///./app/docker/views/services/create/createServiceController.js","webpack:///./app/docker/views/services/create/includes/update-restart.html","webpack:///./app/docker/views/services/create/includes/secret.html","webpack:///./app/docker/views/services/create/includes/config.html","webpack:///./app/docker/views/services/create/includes/resources-placement.html","webpack:///./app/docker/views/services/edit/serviceController.js","webpack:///./app/docker/views/services/edit/includes/configs.html","webpack:///./app/docker/views/services/edit/includes/constraints.html","webpack:///./app/docker/views/services/edit/includes/container-specs.html","webpack:///./app/docker/views/services/edit/includes/containerlabels.html","webpack:///./app/docker/views/services/edit/includes/environmentvariables.html","webpack:///./app/docker/views/services/edit/includes/hosts.html","webpack:///./app/docker/views/services/edit/includes/image.html","webpack:///./app/docker/views/services/edit/includes/logging.html","webpack:///./app/docker/views/services/edit/includes/mounts.html","webpack:///./app/docker/views/services/edit/includes/networks.html","webpack:///./app/docker/views/services/edit/includes/placementPreferences.html","webpack:///./app/docker/views/services/edit/includes/ports.html","webpack:///./app/docker/views/services/edit/includes/resources.html","webpack:///./app/docker/views/services/edit/includes/restart.html","webpack:///./app/docker/views/services/edit/includes/secrets.html","webpack:///./app/docker/views/services/edit/includes/servicelabels.html","webpack:///./app/docker/views/services/edit/includes/tasks.html","webpack:///./app/docker/views/services/edit/includes/updateconfig.html","webpack:///./app/docker/views/services/logs/serviceLogsController.js","webpack:///./app/docker/views/services/servicesController.js","webpack:///./app/docker/views/swarm/swarmController.js","webpack:///./app/docker/views/swarm/visualizer/swarmVisualizerController.js","webpack:///./app/docker/views/tasks/edit/taskController.js","webpack:///./app/docker/views/tasks/logs/taskLogsController.js","webpack:///./app/docker/views/volumes/browse/browseVolumeController.js","webpack:///./app/docker/views/volumes/create/createVolumeController.js","webpack:///./app/docker/views/volumes/edit/volumeController.js","webpack:///./app/docker/views/volumes/volumesController.js","webpack:///./app/edge/components/associated-endpoints-datatable/index.js","webpack:///./app/edge/components/associated-endpoints-datatable/associatedEndpointsDatatable.html","webpack:///./app/edge/components/edge-groups-selector/index.js","webpack:///./app/edge/components/edge-groups-selector/edgeGroupsSelector.html","webpack:///./app/edge/components/edge-job-form/index.js","webpack:///./app/edge/components/edge-job-form/edgeJobForm.html","webpack:///./app/edge/components/edge-job-results-datatable/index.js","webpack:///./app/edge/components/edge-job-results-datatable/edgeJobResultsDatatable.html","webpack:///./app/edge/components/edge-jobs-datatable/index.js","webpack:///./app/edge/components/edge-jobs-datatable/edgeJobsDatatable.html","webpack:///./app/edge/components/edge-stack-endpoints-datatable/index.js","webpack:///./app/edge/components/edge-stack-endpoints-datatable/edgeStackEndpointsDatatable.html","webpack:///./app/edge/components/edge-stack-status/index.js","webpack:///./app/edge/components/edge-stack-status/edgeStackStatus.html","webpack:///./app/edge/components/edge-stacks-datatable/index.js","webpack:///./app/edge/components/edge-stacks-datatable/edgeStacksDatatable.html","webpack:///./app/edge/components/edit-edge-stack-form/index.js","webpack:///./app/edge/components/edit-edge-stack-form/editEdgeStackForm.html","webpack:///./app/edge/components/group-form/index.js","webpack:///./app/edge/components/group-form/groupForm.html","webpack:///./app/edge/components/groups-datatable/index.js","webpack:///./app/edge/components/groups-datatable/groupsDatatable.html","webpack:///./app/edge/rest/edge-groups.js","webpack:///./app/edge/rest/edge-job-results.js","webpack:///./app/edge/rest/edge-jobs.js","webpack:///./app/edge/rest/edge-stacks.js","webpack:///./app/edge/rest/edge-templates.js","webpack:///./app/edge/services/edge-group.js","webpack:///./app/edge/services/edge-job.js","webpack:///./app/edge/services/edge-stack.js","webpack:///./app/edge/services/edge-template.js","webpack:///./app/edge/views/edge-groups/createEdgeGroupView/index.js","webpack:///./app/edge/views/edge-groups/createEdgeGroupView/createEdgeGroupView.html","webpack:///./app/edge/views/edge-groups/edgeGroupsView/index.js","webpack:///./app/edge/views/edge-groups/edgeGroupsView/edgeGroupsView.html","webpack:///./app/edge/views/edge-groups/editEdgeGroupView/index.js","webpack:///./app/edge/views/edge-groups/editEdgeGroupView/editEdgeGroupView.html","webpack:///./app/edge/views/edge-jobs/createEdgeJobView/index.js","webpack:///./app/edge/views/edge-jobs/createEdgeJobView/createEdgeJobView.html","webpack:///./app/edge/views/edge-jobs/edgeJob/index.js","webpack:///./app/edge/views/edge-jobs/edgeJob/edgeJob.html","webpack:///./app/edge/views/edge-jobs/edgeJobsView/index.js","webpack:///./app/edge/views/edge-jobs/edgeJobsView/edgeJobsView.html","webpack:///./app/edge/views/edge-stacks/createEdgeStackView/index.js","webpack:///./app/edge/views/edge-stacks/createEdgeStackView/createEdgeStackView.html","webpack:///./app/edge/views/edge-stacks/edgeStacksView/index.js","webpack:///./app/edge/views/edge-stacks/edgeStacksView/edgeStacksView.html","webpack:///./app/edge/views/edge-stacks/editEdgeStackView/index.js","webpack:///./app/edge/views/edge-stacks/editEdgeStackView/editEdgeStackView.html","webpack:///./app/integrations/_module.js","webpack:///./app/integrations/storidge/_module.js","webpack:///./app/integrations/storidge/views/profiles/profiles.html","webpack:///./app/integrations/storidge/views/profiles/edit/profile.html","webpack:///./app/integrations/storidge/views/drives/drives.html","webpack:///./app/integrations/storidge/views/drives/inspect/drive.html","webpack:///./app/integrations/storidge/views/snapshots/inspect/snapshot.html","webpack:///./app/integrations/storidge/views/profiles/create/createprofile.html","webpack:///./app/integrations/storidge/views/cluster/cluster.html","webpack:///./app/integrations/storidge/views/nodes/inspect/node.html","webpack:///./app/integrations/storidge/views/monitor/monitor.html","webpack:///./app/integrations/storidge/components/cluster-events-datatable/storidgeClusterEventsDatatable.js","webpack:///./app/integrations/storidge/components/cluster-events-datatable/storidgeClusterEventsDatatable.html","webpack:///./app/integrations/storidge/components/drives-datatable/storidgeDrivesDatatable.js","webpack:///./app/integrations/storidge/components/drives-datatable/storidgeDrivesDatatable.html","webpack:///./app/integrations/storidge/components/drives-datatable/storidgeDrivesDatatableController.js","webpack:///./app/integrations/storidge/components/nodes-datatable/storidgeNodesDatatable.js","webpack:///./app/integrations/storidge/components/nodes-datatable/storidgeNodesDatatable.html","webpack:///./app/integrations/storidge/components/nodes-datatable/storidgeNodesDatatableController.js","webpack:///./app/integrations/storidge/components/profileSelector/storidgeProfileSelector.js","webpack:///./app/integrations/storidge/components/profileSelector/storidgeProfileSelector.html","webpack:///./app/integrations/storidge/components/profileSelector/storidgeProfileSelectorController.js","webpack:///./app/integrations/storidge/components/profiles-datatable/storidgeProfilesDatatable.js","webpack:///./app/integrations/storidge/components/profiles-datatable/storidgeProfilesDatatable.html","webpack:///./app/integrations/storidge/components/snapshot-creation/storidgeSnapshotCreation.js","webpack:///./app/integrations/storidge/components/snapshot-creation/storidgeSnapshotCreation.html","webpack:///./app/integrations/storidge/components/snapshot-creation/storidgeSnapshotCreationController.js","webpack:///./app/integrations/storidge/components/snapshots-datatable/storidgeSnapshotsDatatable.js","webpack:///./app/integrations/storidge/components/snapshots-datatable/storidgeSnapshotsDatatable.html","webpack:///./app/integrations/storidge/components/volume-storidge-info/volumeStoridgeInfo.js","webpack:///./app/integrations/storidge/components/volume-storidge-info/volumeStoridgeInfo.html","webpack:///./app/integrations/storidge/components/volume-storidge-info/volumeStoridgeInfoController.js","webpack:///./app/integrations/storidge/filters/filters.js","webpack:///./app/integrations/storidge/rest/storidge.js","webpack:///./app/integrations/storidge/services/chartService.js","webpack:///./app/integrations/storidge/services/clusterService.js","webpack:///./app/integrations/storidge/services/driveService.js","webpack:///./app/integrations/storidge/services/nodeService.js","webpack:///./app/integrations/storidge/services/profileService.js","webpack:///./app/integrations/storidge/services/snapshotService.js","webpack:///./app/integrations/storidge/services/volumeService.js","webpack:///./app/integrations/storidge/views/cluster/clusterController.js","webpack:///./app/integrations/storidge/views/drives/drivesController.js","webpack:///./app/integrations/storidge/views/drives/inspect/driveController.js","webpack:///./app/integrations/storidge/views/monitor/monitorController.js","webpack:///./app/integrations/storidge/views/nodes/inspect/nodeController.js","webpack:///./app/integrations/storidge/views/profiles/create/createProfileController.js","webpack:///./app/integrations/storidge/views/profiles/edit/profileController.js","webpack:///./app/integrations/storidge/views/profiles/profilesController.js","webpack:///./app/integrations/storidge/views/snapshots/inspect/snapshotController.js","webpack:///./app/kubernetes/__module.js","webpack:///./app/kubernetes/component-status/rest.js","webpack:///./app/kubernetes/component-status/service.js","webpack:///./app/kubernetes/components/datatables/application/containers-datatable/containersDatatable.js","webpack:///./app/kubernetes/components/datatables/application/containers-datatable/containersDatatable.html","webpack:///./app/kubernetes/components/datatables/applications-datatable/applicationsDatatable.js","webpack:///./app/kubernetes/components/datatables/applications-datatable/applicationsDatatable.html","webpack:///./app/kubernetes/components/datatables/applications-datatable/applicationsDatatableController.js","webpack:///./app/kubernetes/components/datatables/applications-ports-datatable/applicationsPortsDatatable.js","webpack:///./app/kubernetes/components/datatables/applications-ports-datatable/applicationsPortsDatatable.html","webpack:///./app/kubernetes/components/datatables/applications-ports-datatable/applicationsPortsDatatableController.js","webpack:///./app/kubernetes/components/datatables/applications-stacks-datatable/applicationsStacksDatatable.js","webpack:///./app/kubernetes/components/datatables/applications-stacks-datatable/applicationsStacksDatatable.html","webpack:///./app/kubernetes/components/datatables/applications-stacks-datatable/applicationsStacksDatatableController.js","webpack:///./app/kubernetes/components/datatables/configurations-datatable/configurationsDatatable.js","webpack:///./app/kubernetes/components/datatables/configurations-datatable/configurationsDatatable.html","webpack:///./app/kubernetes/components/datatables/configurations-datatable/configurationsDatatableController.js","webpack:///./app/kubernetes/components/datatables/events-datatable/eventsDatatable.js","webpack:///./app/kubernetes/components/datatables/events-datatable/eventsDatatable.html","webpack:///./app/kubernetes/components/datatables/integrated-applications-datatable/integratedApplicationsDatatable.js","webpack:///./app/kubernetes/components/datatables/integrated-applications-datatable/integratedApplicationsDatatable.html","webpack:///./app/kubernetes/components/datatables/node-applications-datatable/nodeApplicationsDatatable.js","webpack:///./app/kubernetes/components/datatables/node-applications-datatable/nodeApplicationsDatatable.html","webpack:///./app/kubernetes/components/datatables/node-applications-datatable/nodeApplicationsDatatableController.js","webpack:///./app/kubernetes/components/datatables/nodes-datatable/nodesDatatable.js","webpack:///./app/kubernetes/components/datatables/nodes-datatable/nodesDatatable.html","webpack:///./app/kubernetes/components/datatables/resource-pool-applications-datatable/resourcePoolApplicationsDatatable.js","webpack:///./app/kubernetes/components/datatables/resource-pool-applications-datatable/resourcePoolApplicationsDatatable.html","webpack:///./app/kubernetes/components/datatables/resource-pool-applications-datatable/resourcePoolApplicationsDatatableController.js","webpack:///./app/kubernetes/components/datatables/resource-pools-datatable/resourcePoolsDatatable.js","webpack:///./app/kubernetes/components/datatables/resource-pools-datatable/resourcePoolsDatatable.html","webpack:///./app/kubernetes/components/datatables/resource-pools-datatable/resourcePoolsDatatableController.js","webpack:///./app/kubernetes/components/datatables/volumes-datatable/volumesDatatable.js","webpack:///./app/kubernetes/components/datatables/volumes-datatable/volumesDatatable.html","webpack:///./app/kubernetes/components/datatables/volumes-datatable/volumesDatatableController.js","webpack:///./app/kubernetes/components/kubernetes-configuration-data/kubernetesConfigurationData.js","webpack:///./app/kubernetes/components/kubernetes-configuration-data/kubernetesConfigurationData.html","webpack:///./app/kubernetes/components/kubernetes-configuration-data/kubernetesConfigurationDataController.js","webpack:///./app/kubernetes/components/kubernetes-sidebar-content/kubernetesSidebarContent.js","webpack:///./app/kubernetes/components/kubernetes-sidebar-content/kubernetesSidebarContent.html","webpack:///./app/kubernetes/components/resource-reservation/resourceReservation.js","webpack:///./app/kubernetes/components/resource-reservation/resourceReservation.html","webpack:///./app/kubernetes/components/resource-reservation/resourceReservationController.js","webpack:///./app/kubernetes/components/view-header/viewHeader.js","webpack:///./app/kubernetes/components/view-header/viewHeader.html","webpack:///./app/kubernetes/components/view-loading/viewLoading.js","webpack:///./app/kubernetes/components/view-loading/viewLoading.html","webpack:///./app/kubernetes/components/yaml-inspector/yamlInspector.js","webpack:///./app/kubernetes/components/yaml-inspector/yamlInspector.html","webpack:///./app/kubernetes/components/yaml-inspector/yamlInspectorController.js","webpack:///./app/kubernetes/endpoint/rest.js","webpack:///./app/kubernetes/endpoint/service.js","webpack:///./app/kubernetes/filters/applicationFilters.js","webpack:///./app/kubernetes/filters/configurationFilters.js","webpack:///./app/kubernetes/filters/eventFilters.js","webpack:///./app/kubernetes/filters/filters.js","webpack:///./app/kubernetes/helpers/namespaceHelper.js","webpack:///./app/kubernetes/horizontal-pod-auto-scaler/rest.js","webpack:///./app/kubernetes/horizontal-pod-auto-scaler/service.js","webpack:///./app/kubernetes/ingress/rest.js","webpack:///./app/kubernetes/ingress/service.js","webpack:///./app/kubernetes/metrics/metrics.js","webpack:///./app/kubernetes/metrics/rest.js","webpack:///./app/kubernetes/node/filters.js","webpack:///./app/kubernetes/node/rest.js","webpack:///./app/kubernetes/node/service.js","webpack:///./app/kubernetes/pod/filters.js","webpack:///./app/kubernetes/pod/service.js","webpack:///./app/kubernetes/rest/configMap.js","webpack:///./app/kubernetes/rest/controllerRevision.js","webpack:///./app/kubernetes/rest/daemonSet.js","webpack:///./app/kubernetes/rest/deployment.js","webpack:///./app/kubernetes/rest/endpoint.js","webpack:///./app/kubernetes/rest/event.js","webpack:///./app/kubernetes/rest/health.js","webpack:///./app/kubernetes/rest/namespace.js","webpack:///./app/kubernetes/rest/persistentVolumeClaim.js","webpack:///./app/kubernetes/rest/pod.js","webpack:///./app/kubernetes/rest/replicaSet.js","webpack:///./app/kubernetes/rest/resourceQuota.js","webpack:///./app/kubernetes/rest/secret.js","webpack:///./app/kubernetes/rest/service.js","webpack:///./app/kubernetes/rest/statefulSet.js","webpack:///./app/kubernetes/rest/storage.js","webpack:///./app/kubernetes/services/applicationService.js","webpack:///./app/kubernetes/services/configMapService.js","webpack:///./app/kubernetes/services/configurationService.js","webpack:///./app/kubernetes/services/controllerRevisionService.js","webpack:///./app/kubernetes/services/daemonSetService.js","webpack:///./app/kubernetes/services/deploymentService.js","webpack:///./app/kubernetes/services/eventService.js","webpack:///./app/kubernetes/services/healthService.js","webpack:///./app/kubernetes/services/historyService.js","webpack:///./app/kubernetes/services/namespaceService.js","webpack:///./app/kubernetes/services/persistentVolumeClaimService.js","webpack:///./app/kubernetes/services/replicaSetService.js","webpack:///./app/kubernetes/services/resourcePoolService.js","webpack:///./app/kubernetes/services/resourceQuotaService.js","webpack:///./app/kubernetes/services/secretService.js","webpack:///./app/kubernetes/services/serviceService.js","webpack:///./app/kubernetes/services/stackService.js","webpack:///./app/kubernetes/services/statefulSetService.js","webpack:///./app/kubernetes/services/storageService.js","webpack:///./app/kubernetes/services/volumeService.js","webpack:///./app/kubernetes/views/applications/applications.js","webpack:///./app/kubernetes/views/applications/applications.html","webpack:///./app/kubernetes/views/applications/applicationsController.js","webpack:///./app/kubernetes/views/applications/console/console.js","webpack:///./app/kubernetes/views/applications/console/console.html","webpack:///./app/kubernetes/views/applications/console/consoleController.js","webpack:///./app/kubernetes/views/applications/create/createApplication.js","webpack:///./app/kubernetes/views/applications/create/createApplication.html","webpack:///./app/kubernetes/views/applications/create/createApplicationController.js","webpack:///./app/kubernetes/views/applications/edit/application.js","webpack:///./app/kubernetes/views/applications/edit/application.html","webpack:///./app/kubernetes/views/applications/edit/applicationController.js","webpack:///./app/kubernetes/views/applications/edit/components/placements-datatable/controller.js","webpack:///./app/kubernetes/views/applications/edit/components/placements-datatable/index.js","webpack:///./app/kubernetes/views/applications/edit/components/placements-datatable/template.html","webpack:///./app/kubernetes/views/applications/logs/logs.js","webpack:///./app/kubernetes/views/applications/logs/logs.html","webpack:///./app/kubernetes/views/applications/logs/logsController.js","webpack:///./app/kubernetes/views/applications/stats/stats.js","webpack:///./app/kubernetes/views/applications/stats/stats.html","webpack:///./app/kubernetes/views/applications/stats/statsController.js","webpack:///./app/kubernetes/views/cluster/cluster.js","webpack:///./app/kubernetes/views/cluster/cluster.html","webpack:///./app/kubernetes/views/cluster/clusterController.js","webpack:///./app/kubernetes/views/cluster/node/node.js","webpack:///./app/kubernetes/views/cluster/node/node.html","webpack:///./app/kubernetes/views/cluster/node/nodeController.js","webpack:///./app/kubernetes/views/cluster/node/stats/stats.js","webpack:///./app/kubernetes/views/cluster/node/stats/stats.html","webpack:///./app/kubernetes/views/cluster/node/stats/statsController.js","webpack:///./app/kubernetes/views/configurations/configurations.js","webpack:///./app/kubernetes/views/configurations/configurations.html","webpack:///./app/kubernetes/views/configurations/configurationsController.js","webpack:///./app/kubernetes/views/configurations/create/createConfiguration.js","webpack:///./app/kubernetes/views/configurations/create/createConfiguration.html","webpack:///./app/kubernetes/views/configurations/create/createConfigurationController.js","webpack:///./app/kubernetes/views/configurations/edit/configuration.js","webpack:///./app/kubernetes/views/configurations/edit/configuration.html","webpack:///./app/kubernetes/views/configurations/edit/configurationController.js","webpack:///./app/kubernetes/views/configure/configureController.js","webpack:///./app/kubernetes/views/dashboard/dashboard.js","webpack:///./app/kubernetes/views/dashboard/dashboard.html","webpack:///./app/kubernetes/views/dashboard/dashboardController.js","webpack:///./app/kubernetes/views/deploy/deploy.js","webpack:///./app/kubernetes/views/deploy/deploy.html","webpack:///./app/kubernetes/views/deploy/deployController.js","webpack:///./app/kubernetes/views/resource-pools/access/resourcePoolAccess.js","webpack:///./app/kubernetes/views/resource-pools/access/resourcePoolAccess.html","webpack:///./app/kubernetes/views/resource-pools/access/resourcePoolAccessController.js","webpack:///./app/kubernetes/views/resource-pools/create/createResourcePool.js","webpack:///./app/kubernetes/views/resource-pools/create/createResourcePool.html","webpack:///./app/kubernetes/views/resource-pools/create/createResourcePoolController.js","webpack:///./app/kubernetes/views/resource-pools/edit/components/ingresses-datatable/controller.js","webpack:///./app/kubernetes/views/resource-pools/edit/components/ingresses-datatable/index.js","webpack:///./app/kubernetes/views/resource-pools/edit/components/ingresses-datatable/template.html","webpack:///./app/kubernetes/views/resource-pools/edit/resourcePool.js","webpack:///./app/kubernetes/views/resource-pools/edit/resourcePool.html","webpack:///./app/kubernetes/views/resource-pools/edit/resourcePoolController.js","webpack:///./app/kubernetes/views/resource-pools/resourcePools.js","webpack:///./app/kubernetes/views/resource-pools/resourcePools.html","webpack:///./app/kubernetes/views/resource-pools/resourcePoolsController.js","webpack:///./app/kubernetes/views/stacks/logs/logs.js","webpack:///./app/kubernetes/views/stacks/logs/logs.html","webpack:///./app/kubernetes/views/stacks/logs/logsController.js","webpack:///./app/kubernetes/views/summary/summary.js","webpack:///./app/kubernetes/views/summary/summary.html","webpack:///./app/kubernetes/views/summary/summaryController.js","webpack:///./app/kubernetes/views/volumes/components/volumes-storages-datatable/controller.js","webpack:///./app/kubernetes/views/volumes/components/volumes-storages-datatable/index.js","webpack:///./app/kubernetes/views/volumes/components/volumes-storages-datatable/template.html","webpack:///./app/kubernetes/views/volumes/edit/volume.js","webpack:///./app/kubernetes/views/volumes/edit/volume.html","webpack:///./app/kubernetes/views/volumes/edit/volumeController.js","webpack:///./app/kubernetes/views/volumes/volumes.js","webpack:///./app/kubernetes/views/volumes/volumes.html","webpack:///./app/kubernetes/views/volumes/volumesController.js","webpack:///./app/portainer/components/access-datatable/accessDatatable.js","webpack:///./app/portainer/components/access-datatable/accessDatatable.html","webpack:///./app/portainer/components/access-datatable/accessDatatableController.js","webpack:///./app/portainer/components/access-table/access-table.js","webpack:///./app/portainer/components/access-table/accessTable.html","webpack:///./app/portainer/components/accessControlForm/por-access-control-form.js","webpack:///./app/portainer/components/accessControlForm/porAccessControlForm.html","webpack:///./app/portainer/components/accessControlForm/porAccessControlFormController.js","webpack:///./app/portainer/components/accessControlPanel/por-access-control-panel.js","webpack:///./app/portainer/components/accessControlPanel/porAccessControlPanel.html","webpack:///./app/portainer/components/accessControlPanel/porAccessControlPanelController.js","webpack:///./app/portainer/components/accessManagement/por-access-management.js","webpack:///./app/portainer/components/accessManagement/porAccessManagement.html","webpack:///./app/portainer/components/accessManagement/porAccessManagementController.js","webpack:///./app/portainer/components/associated-endpoints-selector/associatedEndpointsSelector.js","webpack:///./app/portainer/components/associated-endpoints-selector/associatedEndpointsSelector.html","webpack:///./app/portainer/components/autofocus.js","webpack:///./app/portainer/components/beta-panel/betaPanel.js","webpack:///./app/portainer/components/beta-panel/betaPanel.html","webpack:///./app/portainer/components/buttonSpinner.js","webpack:///./app/portainer/components/code-editor/code-editor.js","webpack:///./app/portainer/components/code-editor/codeEditor.html","webpack:///./app/portainer/components/code-editor/codeEditorController.js","webpack:///./app/portainer/components/custom-template-common-fields/index.js","webpack:///./app/portainer/components/custom-template-common-fields/customTemplateCommonFields.html","webpack:///./app/portainer/components/custom-templates-list/customTemplatesListController.js","webpack:///./app/portainer/components/custom-templates-list/index.js","webpack:///./app/portainer/components/custom-templates-list/customTemplatesList.html","webpack:///./app/portainer/components/datatables/access-viewer-datatable/accessViewerDatatable.js","webpack:///./app/portainer/components/datatables/access-viewer-datatable/accessViewerDatatable.html","webpack:///./app/portainer/components/datatables/datatable-columns-visibility/index.js","webpack:///./app/portainer/components/datatables/datatable-columns-visibility/datatable-columns-visibility.html","webpack:///./app/portainer/components/datatables/endpoints-datatable/endpointsDatatable.js","webpack:///./app/portainer/components/datatables/endpoints-datatable/endpointsDatatable.html","webpack:///./app/portainer/components/datatables/endpoints-datatable/endpointsDatatableController.js","webpack:///./app/portainer/components/datatables/genericDatatableController.js","webpack:///./app/portainer/components/datatables/groups-datatable/groupsDatatable.js","webpack:///./app/portainer/components/datatables/groups-datatable/groupsDatatable.html","webpack:///./app/portainer/components/datatables/registries-datatable/registriesDatatable.js","webpack:///./app/portainer/components/datatables/registries-datatable/registriesDatatable.html","webpack:///./app/portainer/components/datatables/roles-datatable/rolesDatatable.js","webpack:///./app/portainer/components/datatables/roles-datatable/rolesDatatable.html","webpack:///./app/portainer/components/datatables/stacks-datatable/stacksDatatable.js","webpack:///./app/portainer/components/datatables/stacks-datatable/stacksDatatable.html","webpack:///./app/portainer/components/datatables/stacks-datatable/stacksDatatableController.js","webpack:///./app/portainer/components/datatables/tags-datatable/tagsDatatable.js","webpack:///./app/portainer/components/datatables/tags-datatable/tagsDatatable.html","webpack:///./app/portainer/components/datatables/teams-datatable/teamsDatatable.js","webpack:///./app/portainer/components/datatables/teams-datatable/teamsDatatable.html","webpack:///./app/portainer/components/datatables/users-datatable/usersDatatable.js","webpack:///./app/portainer/components/datatables/users-datatable/usersDatatable.html","webpack:///./app/portainer/components/endpoint-list/endpoint-item/endpointItem.js","webpack:///./app/portainer/components/endpoint-list/endpoint-item/endpointItem.html","webpack:///./app/assets/images/edge_endpoint.png","webpack:///./app/assets/images/kubernetes_endpoint.png","webpack:///./app/assets/images/kubernetes_edge_endpoint.png","webpack:///./app/portainer/components/endpoint-list/endpoint-list-controller.js","webpack:///./app/portainer/components/endpoint-list/endpoint-list.js","webpack:///./app/portainer/components/endpoint-list/endpointList.html","webpack:///./app/portainer/components/endpoint-selector/endpoint-selector.js","webpack:///./app/portainer/components/endpoint-selector/endpointSelector.html","webpack:///./app/portainer/components/endpoint-selector/endpointSelectorController.js","webpack:///./app/portainer/components/endpointSecurity/por-endpoint-security.js","webpack:///./app/portainer/components/endpointSecurity/porEndpointSecurity.html","webpack:///./app/portainer/components/endpointSecurity/porEndpointSecurityController.js","webpack:///./app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode-item/index.js","webpack:///./app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode-item/environment-variables-simple-mode-item.html","webpack:///./app/portainer/components/environment-variables-panel/environment-variables-simple-mode/index.js","webpack:///./app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode.html","webpack:///./app/portainer/components/environment-variables-panel/index.js","webpack:///./app/portainer/components/environment-variables-panel/environment-variables-panel.html","webpack:///./app/portainer/components/forms/group-form/group-form.js","webpack:///./app/portainer/components/forms/group-form/groupForm.html","webpack:///./app/portainer/components/forms/por-switch-field/por-switch-field.js","webpack:///./app/portainer/components/forms/por-switch-field/por-switch-field.html","webpack:///./app/portainer/components/forms/por-switch/por-switch.js","webpack:///./app/portainer/components/forms/por-switch/por-switch.html","webpack:///./app/portainer/components/forms/registry-form-azure/registry-form-azure.js","webpack:///./app/portainer/components/forms/registry-form-azure/registry-form-azure.html","webpack:///./app/portainer/components/forms/registry-form-custom/registry-form-custom.js","webpack:///./app/portainer/components/forms/registry-form-custom/registry-form-custom.html","webpack:///./app/portainer/components/forms/registry-form-gitlab/gitlab-projects-datatable/gitlabProjectsDatatable.js","webpack:///./app/portainer/components/forms/registry-form-gitlab/gitlab-projects-datatable/gitlabProjectsDatatable.html","webpack:///./app/portainer/components/forms/registry-form-gitlab/gitlab-projects-datatable/gitlabProjectsDatatableController.js","webpack:///./app/portainer/components/forms/registry-form-gitlab/registry-form-gitlab.js","webpack:///./app/portainer/components/forms/registry-form-gitlab/registry-form-gitlab.html","webpack:///./app/portainer/components/forms/registry-form-quay/registry-form-quay.js","webpack:///./app/portainer/components/forms/registry-form-quay/registry-form-quay.html","webpack:///./app/portainer/components/forms/stack-from-template-form/index.js","webpack:///./app/portainer/components/forms/stack-from-template-form/stackFromTemplateForm.html","webpack:///./app/portainer/components/forms/stack-redeploy-git-form/index.js","webpack:///./app/portainer/components/forms/stack-redeploy-git-form/stack-redeploy-git-form.html","webpack:///./app/portainer/components/forms/template-form/template-form.js","webpack:///./app/portainer/components/forms/template-form/templateForm.html","webpack:///./app/portainer/components/forms/template-form/templateFormController.js","webpack:///./app/portainer/components/group-association-table/group-association-table.js","webpack:///./app/portainer/components/group-association-table/groupAssociationTable.html","webpack:///./app/portainer/components/header-content.js","webpack:///./app/portainer/components/header-title.js","webpack:///./app/portainer/components/header.js","webpack:///./app/portainer/components/information-panel-offline/informationPanelOffline.js","webpack:///./app/portainer/components/information-panel-offline/informationPanelOffline.html","webpack:///./app/portainer/components/information-panel-offline/informationPanelOfflineController.js","webpack:///./app/portainer/components/information-panel/information-panel.js","webpack:///./app/portainer/components/information-panel/informationPanel.html","webpack:///./app/portainer/components/loading.js","webpack:///./app/portainer/components/motd-panel/motd-panel.js","webpack:///./app/portainer/components/motd-panel/motdPanel.html","webpack:///./app/portainer/components/onEnterKey.js","webpack:///./app/portainer/components/product-list/product-item/product-item.js","webpack:///./app/portainer/components/product-list/product-item/productItem.html","webpack:///./app/assets/images/support_1.png","webpack:///./app/assets/images/support_2.png","webpack:///./app/portainer/components/product-list/product-list.js","webpack:///./app/portainer/components/product-list/productList.html","webpack:///./app/portainer/components/slider/slider.js","webpack:///./app/portainer/components/slider/slider.html","webpack:///./app/portainer/components/slider/sliderController.js","webpack:///./app/portainer/components/stack-duplication-form/stack-duplication-form-controller.js","webpack:///./app/portainer/components/stack-duplication-form/stack-duplication-form.js","webpack:///./app/portainer/components/stack-duplication-form/stack-duplication-form.html","webpack:///./app/portainer/components/tag-selector/tag-selector.js","webpack:///./app/portainer/components/tag-selector/tagSelector.html","webpack:///./app/portainer/components/tag-selector/tagSelectorController.js","webpack:///./app/portainer/components/template-list/template-item/template-item.js","webpack:///./app/portainer/components/template-list/template-item/templateItem.html","webpack:///./app/portainer/components/template-list/template-list-controller.js","webpack:///./app/portainer/components/template-list/template-list.js","webpack:///./app/portainer/components/template-list/templateList.html","webpack:///./app/portainer/components/template-widget.js","webpack:///./app/portainer/components/tooltip.js","webpack:///./app/portainer/components/widget-body.js","webpack:///./app/portainer/components/widget-custom-header.js","webpack:///./app/portainer/components/widget-footer.js","webpack:///./app/portainer/components/widget-header.js","webpack:///./app/portainer/components/widget-taskbar.js","webpack:///./app/portainer/components/widget.js","webpack:///./app/portainer/filters/filters.js","webpack:///./app/portainer/helpers/endpointHelper.js","webpack:///./app/portainer/helpers/formHelper.js","webpack:///./app/portainer/helpers/networkHelper.js","webpack:///./app/portainer/helpers/resourceControlHelper.js","webpack:///./app/portainer/helpers/stackHelper.js","webpack:///./app/portainer/helpers/templateHelper.js","webpack:///./app/portainer/helpers/urlHelper.js","webpack:///./app/portainer/helpers/userHelper.js","webpack:///./app/portainer/helpers/webhookHelper.js","webpack:///./app/portainer/interceptors/endpointStatusInterceptor.js","webpack:///./app/portainer/models/resourceControl/resourceControlCreatePayload.js","webpack:///./app/portainer/models/resourceControl/resourceControlUpdatePayload.js","webpack:///./app/portainer/oauth/__module.js","webpack:///./app/portainer/oauth/components/oauth-providers-selector/oauth-provider-selector-controller.js","webpack:///./app/portainer/oauth/components/oauth-providers-selector/oauth-providers-selector.js","webpack:///./app/portainer/oauth/components/oauth-providers-selector/oauth-providers-selector.html","webpack:///./app/portainer/oauth/components/oauth-settings/oauth-settings-controller.js","webpack:///./app/portainer/oauth/components/oauth-settings/oauth-settings.js","webpack:///./app/portainer/oauth/components/oauth-settings/oauth-settings.html","webpack:///./app/portainer/oauth/services/rest/oauth.js","webpack:///./app/portainer/rest/auth.js","webpack:///./app/portainer/rest/backup.js","webpack:///./app/portainer/rest/customTemplate.js","webpack:///./app/portainer/rest/dockerhub.js","webpack:///./app/portainer/rest/endpoint.js","webpack:///./app/portainer/rest/gitlab.js","webpack:///./app/portainer/rest/group.js","webpack:///./app/portainer/rest/legacyExtension.js","webpack:///./app/portainer/rest/motd.js","webpack:///./app/portainer/rest/registry.js","webpack:///./app/portainer/rest/resourceControl.js","webpack:///./app/portainer/rest/settings.js","webpack:///./app/portainer/rest/stack.js","webpack:///./app/portainer/rest/status.js","webpack:///./app/portainer/rest/support.js","webpack:///./app/portainer/rest/tag.js","webpack:///./app/portainer/rest/team.js","webpack:///./app/portainer/rest/teamMembership.js","webpack:///./app/portainer/rest/template.js","webpack:///./app/portainer/rest/user.js","webpack:///./app/portainer/rest/webhooks.js","webpack:///./app/portainer/services/api/accessService.js","webpack:///./app/portainer/services/api/backupService.js","webpack:///./app/portainer/services/api/customTemplate.js","webpack:///./app/portainer/services/api/dockerhubService.js","webpack:///./app/portainer/services/api/endpointService.js","webpack:///./app/portainer/services/api/groupService.js","webpack:///./app/portainer/services/api/legacyExtensionService.js","webpack:///./app/portainer/services/api/motdService.js","webpack:///./app/portainer/services/api/registryService.js","webpack:///./app/portainer/services/api/resourceControlService.js","webpack:///./app/portainer/services/api/settingsService.js","webpack:///./app/portainer/services/api/stackService.js","webpack:///./app/portainer/services/api/statusService.js","webpack:///./app/portainer/services/api/supportService.js","webpack:///./app/portainer/services/api/tagService.js","webpack:///./app/portainer/services/api/teamMembershipService.js","webpack:///./app/portainer/services/api/teamService.js","webpack:///./app/portainer/services/api/templateService.js","webpack:///./app/portainer/services/api/userService.js","webpack:///./app/portainer/services/api/webhookService.js","webpack:///./app/portainer/services/async.js","webpack:///./app/portainer/services/authentication.js","webpack:///./app/portainer/services/chartService.js","webpack:///./app/portainer/services/codeMirror.js","webpack:///./app/portainer/services/datatableService.js","webpack:///./app/portainer/services/endpointProvider.js","webpack:///./app/portainer/services/fileUpload.js","webpack:///./app/portainer/services/formValidator.js","webpack:///./app/portainer/services/httpRequestHelper.js","webpack:///./app/portainer/services/legacyExtensionManager.js","webpack:///./app/portainer/services/localStorage.js","webpack:///./app/portainer/services/modalService.js","webpack:///./app/portainer/services/notifications.js","webpack:///./app/portainer/services/pagination.js","webpack:///./app/portainer/services/registryGitlabService.js","webpack:///./app/portainer/services/stateManager.js","webpack:///./app/portainer/views/account/accountController.js","webpack:///./app/portainer/views/auth/authController.js","webpack:///./app/portainer/views/custom-templates/create-custom-template-view/index.js","webpack:///./app/portainer/views/custom-templates/create-custom-template-view/createCustomTemplateView.html","webpack:///./app/portainer/views/custom-templates/custom-templates-view/index.js","webpack:///./app/portainer/views/custom-templates/custom-templates-view/customTemplatesView.html","webpack:///./app/portainer/views/custom-templates/edit-custom-template-view/index.js","webpack:///./app/portainer/views/custom-templates/edit-custom-template-view/editCustomTemplateView.html","webpack:///./app/portainer/views/endpoints/access/endpointAccessController.js","webpack:///./app/portainer/views/endpoints/create/createEndpointController.js","webpack:///./app/portainer/views/endpoints/edit/endpointController.js","webpack:///./app/portainer/views/endpoints/endpointsController.js","webpack:///./app/portainer/views/groups/access/groupAccessController.js","webpack:///./app/portainer/views/groups/create/createGroupController.js","webpack:///./app/portainer/views/groups/edit/groupController.js","webpack:///./app/portainer/views/groups/groupsController.js","webpack:///./app/portainer/views/home/homeController.js","webpack:///./app/portainer/views/init/admin/initAdminController.js","webpack:///./app/portainer/views/init/endpoint/initEndpointController.js","webpack:///./app/portainer/views/init/endpoint/includes/localDocker.html","webpack:///./app/portainer/views/init/endpoint/includes/localKubernetes.html","webpack:///./app/portainer/views/init/endpoint/includes/agent.html","webpack:///./app/portainer/views/logout/logoutController.js","webpack:///./app/portainer/views/main/mainController.js","webpack:///./app/portainer/views/registries/access/registryAccessController.js","webpack:///./app/portainer/views/registries/create/createRegistryController.js","webpack:///./app/portainer/views/registries/edit/registryController.js","webpack:///./app/portainer/views/registries/registriesController.js","webpack:///./app/portainer/views/settings/authentication/settingsAuthenticationController.js","webpack:///./app/portainer/views/settings/settingsController.js","webpack:///./app/portainer/views/sidebar/sidebarController.js","webpack:///./app/portainer/views/stacks/create/createStackController.js","webpack:///./app/portainer/views/stacks/edit/stackController.js","webpack:///./app/portainer/views/stacks/stacksController.js","webpack:///./app/portainer/views/tags/tagsController.js","webpack:///./app/portainer/views/teams/edit/teamController.js","webpack:///./app/portainer/views/teams/teamsController.js","webpack:///./app/portainer/views/templates/templatesController.js","webpack:///./app/portainer/views/users/edit/userController.js","webpack:///./app/portainer/views/users/usersController.js","webpack:///./app/vendors.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","0","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","_KubernetesApplication","freeze","Id","Name","StackName","ApplicationOwner","ApplicationName","ResourcePool","Image","CreationDate","Pods","Containers","Limits","ServiceType","ServiceId","ServiceName","HeadlessServiceName","undefined","LoadBalancerIPAddress","PublishedPorts","Volumes","Env","PersistedFolders","ConfigurationVolumes","DeploymentType","DataAccessPolicy","ApplicationType","RunningPodsCount","TotalPodsCount","Yaml","Note","Revisions","CurrentRevision","Raw","AutoScaler","KubernetesApplication","assign","this","JSON","parse","stringify","_KubernetesApplicationPersistedFolder","MountPath","PersistentVolumeClaimName","HostPath","KubernetesApplicationPersistedFolder","_KubernetesApplicationConfigurationVolume","fileMountPath","rootMountPath","configurationKey","configurationName","KubernetesApplicationConfigurationVolume","_KubernetesApplicationPort","IngressRules","NodePort","TargetPort","Port","Protocol","KubernetesApplicationPort","PortainerError","msg","err","KubernetesCommonParams","id","KubernetesApplicationHelper","application","pods","selector","matchLabels","app","containers","container","pf","VolumeMounts","cv","associateContainerPersistedFoldersAndConfigurations","applications","acc","mapping","KubernetesPortMapping","Ports","item","port","KubernetesPortMappingPort","KubernetesServiceTypes","NODE_PORT","envVariables","NeedsDeletion","res","KubernetesApplicationEnvPayload","Value","env","valueFrom","KubernetesApplicationEnvironmentVariableFormValue","IsNew","NameIndex","volumes","configurations","finalRes","cfg","filterCondition","Type","KubernetesConfigurationTypes","CONFIGMAP","cfgEnv","cfgVol","keys","Data","k","keyEnv","keyVol","Key","Count","Sum","EnvCount","VolCount","max","overrideThreshold","Array","KubernetesApplicationConfigurationFormValue","index","SelectedConfiguration","Overriden","OverridenKeys","fvKey","KubernetesApplicationConfigurationFormValueOverridenKey","KubernetesApplicationConfigurationFormValueOverridenKeyTypes","ENVIRONMENT","FILESYSTEM","Path","NONE","finalEnv","finalVolumes","finalMounts","config","isBasic","envKeys","KubernetesApplicationEnvConfigMapPayload","KubernetesApplicationEnvSecretPayload","configMapKeyRef","secretKeyRef","volKeys","groupedVolKeys","items","path","volumeName","KubernetesVolumeHelper","generatedApplicationConfigVolumeName","itemsMap","entry","KubernetesApplicationVolumeEntryPayload","mount","KubernetesApplicationVolumeMountPayload","volume","KubernetesApplicationVolumeConfigMapPayload","KubernetesApplicationVolumeSecretPayload","mountPath","configMap","secret","secretName","serviceType","publishedPorts","ingress","generatePort","rule","KubernetesApplicationPublishedPortFormValue","IngressName","IngressRoute","IngressHost","Host","IngressHosts","find","Hosts","ContainerPort","LOAD_BALANCER","LoadBalancerPort","LoadBalancerNodePort","autoScaler","replicasCount","KubernetesApplicationAutoScalerFormValue","IsUsed","MinReplicas","MaxReplicas","TargetCPUUtilization","ApiVersion","persistedFolders","persistentVolumeClaims","folder","pvc","KubernetesApplicationPersistedFolderFormValue","StorageClass","Size","parseInt","Storage","SizeUnit","ContainerPath","volumeClaims","volumeMount","KubernetesApplicationVolumePersistentPayload","persistentVolumeClaim","claimName","formValues","AccessModes","claims","podAffinity","nodesLabels","placements","Placements","type","PlacementType","affinity","nodeAffinity","requiredDuringSchedulingIgnoredDuringExecution","KubernetesApplicationPlacementTypes","MANDATORY","nodeSelectorTerms","term","matchExpressions","exp","placement","KubernetesApplicationPlacementFormValue","label","Label","values","preferredDuringSchedulingIgnoredDuringExecution","PREFERRED","preference","KubernetesApplicationDeploymentTypes","REPLICATED","KubernetesPodNodeAffinityPayload","expressions","KubernetesNodeSelectorRequirementPayload","operator","KubernetesPodNodeAffinityNodeSelectorRequirementOperators","IN","EXISTS","KubernetesNodeSelectorTermPayload","KubernetesPreferredSchedulingTermPayload","Affinity","KubernetesPodAffinity","PortainerEndpointTypes","DockerEnvironment","AgentOnDockerEnvironment","AzureEnvironment","EdgeAgentOnDockerEnvironment","KubernetesLocalEnvironment","AgentOnKubernetesEnvironment","EdgeAgentOnKubernetesEnvironment","PortainerEndpointCreationTypes","LocalDockerEnvironment","AgentEnvironment","EdgeAgentEnvironment","LocalKubernetesEnvironment","PortainerEndpointConnectionTypes","DOCKER_LOCAL","KUBERNETES_LOCAL","REMOTE","AZURE","AGENT","EDGE","_KubernetesApplicationFormValues","MemoryLimit","CpuLimit","ReplicaCount","EnvironmentVariables","KubernetesApplicationDataAccessPolicies","ISOLATED","Configurations","PublishingType","KubernetesApplicationPublishingTypes","INTERNAL","OriginalIngresses","KubernetesApplicationFormValues","_KubernetesApplicationConfigurationFormValueOverridenKey","_KubernetesApplicationConfigurationFormValue","_KubernetesApplicationEnvironmentVariableFormValue","IsSecret","_KubernetesApplicationPersistedFolderFormValue","ExistingVolume","UseNewVolume","storageClass","_KubernetesApplicationAutoScalerFormValue","KubernetesFormValidationReferences","refs","hasRefs","KubernetesResourceReservationHelper","pod","Requests","memory","Memory","filesizeParser","base","cpu","CPU","parseCPU","KubernetesResourceReservation","Math","floor","mem","ResourceControlOwnership","PUBLIC","PRIVATE","RESTRICTED","ADMINISTRATORS","KubernetesPortainerConfigurationOwnerLabel","KubernetesPortainerConfigurationDataAnnotation","_KubernetesConfiguration","Namespace","ConfigurationOwner","Used","Applications","KubernetesConfiguration","SECRET","KubernetesServiceHeadlessPrefix","KubernetesServiceHeadlessClusterIP","CLUSTER_IP","_KubernetesService","Headless","ClusterIP","KubernetesService","_KubernetesServicePort","targetPort","protocol","nodePort","KubernetesServicePort","KubernetesResourceTypes","NAMESPACE","RESOURCEQUOTA","DEPLOYMENT","STATEFULSET","DAEMONSET","PERSISTENT_VOLUME_CLAIM","SERVICE","INGRESS","HORIZONTAL_POD_AUTOSCALER","KubernetesResourceActions","CREATE","UPDATE","DELETE","KubernetesPortainerResourceQuotaPrefix","KubernetesPortainerResourceQuotaCPULimit","KubernetesPortainerResourceQuotaMemoryLimit","KubernetesPortainerResourceQuotaCPURequest","KubernetesPortainerResourceQuotaMemoryRequest","KubernetesResourceQuotaDefaults","KubernetesResourceQuota","namespace","KubernetesResourceQuotaHelper","generateResourceQuotaName","CpuLimitUsed","MemoryLimitUsed","ResourcePoolName","ResourcePoolOwner","rawResponse","isJSON","jsonString","e","jsonObjectsToArrayHandler","str","replace","angular","fromJson","genericHandler","response","message","logsHandler","logs","deleteImageHandler","toString","json","_KubernetesPod","Images","Status","Restarts","Node","Labels","Tolerations","NodeSelector","KubernetesPod","_KubernetesPodToleration","Operator","TolerationSeconds","Effect","KubernetesPodToleration","_KubernetesPodContainer","PodName","ImagePullPolicy","KubernetesPodContainer","_KubernetesPodEviction","apiVersion","kind","metadata","KubernetesPodEviction","KubernetesPodContainerTypes","INIT","APP","KubernetesCommonHelper","obj","owner","omission","AccessControlFormData","AccessControlEnabled","Ownership","RCO","AuthorizedUsers","AuthorizedTeams","_KubernetesCommonMetadataPayload","uid","labels","annotations","KubernetesCommonMetadataPayload","KubernetesIngressConverter","paths","spec","rules","http","ingRule","KubernetesIngressRule","backend","serviceName","host","IP","status","loadBalancer","ip","servicePort","KubernetesIngress","Annotations","IngressClassName","KubernetesIngressClassAnnotation","ingressClassName","Paths","idx","h","ingresses","copy","IngressClass","pairs","a","RewriteTarget","KubernetesIngressClassRewriteTargetAnnotations","ics","ic","fv","KubernetesResourcePoolIngressClassFormValue","Selected","WasSelected","hfv","KubernetesResourcePoolIngressClassHostFormValue","PreviousHost","rewriteKey","annotation","KubernetesResourcePoolIngressClassAnnotationFormValue","AdvancedConfig","KubernetesIngressCreatePayload","hostsWithRules","groups","updatedHost","KubernetesIngressRuleCreatePayload","assignOrDeleteIfEmpty","KubernetesIngressRulePathCreatePayload","keptHosts","hostsWithoutRules","emptyRules","oldData","newData","oldPayload","createPayload","newPayload","JsonPatch","KubernetesFormValidationHelper","names","test","groupped","KubernetesResourcePoolFormValues","defaults","HasQuota","IngressClasses","ingressClass","ResourceControlViewModel","resourceControl","ResourceId","UserAccesses","TeamAccesses","Public","System","RegistryTypes","QUAY","CUSTOM","GITLAB","KubernetesPortainerConfigMapNamespace","KubernetesPortainerConfigMapConfigName","KubernetesPortainerConfigMapAccessKey","KubernetesPortainerAccessConfigMap","_KubernetesConfigMap","KubernetesConfigMap","KubernetesApplicationConverter","service","template","initContainers","KubernetesPortainerApplicationStackNameLabel","KubernetesPortainerApplicationOwnerLabel","KubernetesPortainerApplicationNote","KubernetesPortainerApplicationNameLabel","image","creationTimestamp","associatePodsAndApplication","resources","limits","Cpu","requests","hostname","portsRefs","ports","pList","pRefs","isNaN","containerPort","_apiPortsToPublishedPorts","KubernetesIngressHelper","findSBoundServiceIngressesRules","volumeClaimTemplates","vcTemplates","vc","inexistingPVC","hostPath","volumeMounts","matchingVolumeMount","persistedFolder","configurationVolume","applicationCommon","KubernetesApplicationTypes","POD","SHARED","availableReplicas","replicas","unavailableReplicas","GLOBAL","numberAvailable","desiredNumberScheduled","numberUnavailable","readyReplicas","resourcePools","megaBytesValue","generateEnvVariablesFromEnv","generatePersistedFoldersFormValuesFromPersistedFolders","generateConfigurationFormValuesFromEnvAndVolumes","generateAutoScalerFormValueFromHorizontalPodAutoScaler","generatePublishedPortsFormValuesFromPublishedPorts","isIngress","CLUSTER","generatePlacementsFormValuesFromAffinity","ownerToLabel","headlessService","KubernetesPersistentVolumeClaimConverter","applicationFormValuesToVolumeClaims","rwx","hasRWX","deployment","statefulSet","daemonSet","KubernetesDeploymentConverter","applicationFormValuesToDeployment","KubernetesStatefulSetConverter","applicationFormValuesToStatefulSet","KubernetesDaemonSetConverter","applicationFormValuesToDaemonSet","KubernetesServiceConverter","applicationFormValuesToHeadlessService","applicationFormValuesToService","KubernetesPortainerNodeDrainLabel","_KubernetesNode","Role","Version","IPAddress","Api","Taints","Availability","KubernetesNode","_KubernetesNodeDetails","OS","Architecture","Platform","Conditions","KubernetesNodeDetails","_KubernetesNodeTaint","KubernetesNodeTaint","KubernetesNodeAvailabilities","ACTIVE","PAUSE","DRAIN","KubernetesNodeTaintEffects","NOSCHEDULE","PREFERNOSCHEDULE","NOEXECUTE","_KubernetesConfigurationFormValues","DataYaml","IsSimple","KubernetesConfigurationFormValues","_KubernetesConfigurationFormValuesEntry","IsBinary","KubernetesConfigurationFormValuesEntry","nginx","traefik","KubernetesIngressClassTypes","NGINX","TRAEFIK","KubernetesConfigMapConverter","KubernetesConfigMapCreatePayload","createAccessPayload","yaml","binaryData","configurationOwner","KubernetesConfigMapUpdatePayload","PorImageRegistryModel","UseRegistry","Registry","KubernetesConfigurationHelper","envFind","volumeFind","encoding","getUsingApplications","setConfigurationUsed","YAML","defaultOptions","customTags","oldEntry","configuration","matchingNames","PersistentVolumeClaim","uuidv4","KubernetesHorizontalPodAutoScalerConverter","KubernetesHorizontalPodAutoScaler","minReplicas","maxReplicas","targetCPUUtilizationPercentage","scaleTargetRef","TargetEntity","Kind","payload","KubernetesHorizontalPodAutoScalerCreatePayload","oldScaler","newScaler","KEY_REGEX","source","VALUE_REGEX","KEY_VALUE_REGEX","RegExp","NEWLINES_REGEX","parseDotEnvFile","src","parseArrayOfStrings","split","map","v","trim","filter","startsWith","array","variableString","includes","parsedKeyValArr","match","convertToArrayOfStrings","variable","_KubernetesStatefulSet","Secret","VolumeClaims","KubernetesStatefulSet","_KubernetesApplicationVolumeMount","readOnly","_KubernetesApplicationVolumePersistentPayload","_KubernetesApplicationVolumeConfigMapPayload","_KubernetesApplicationVolumeSecretPayload","_KubernetesApplicationVolumeEntryPayload","_KubernetesApplicationEnvPayload","_KubernetesApplicationEnvConfigMapPayload","_KubernetesApplicationEnvSecretPayload","KubernetesPortainerResourcePoolNameLabel","KubernetesPortainerResourcePoolOwnerLabel","KubernetesResourcePool","Quota","Ingresses","storageClasses","KubernetesPersistentVolumeClaim","storage","storageClassName","PreviousName","charAt","existantPVC","KubernetesPersistentVolumClaimCreatePayload","oldPVC","newPVC","KubernetesNodeConverter","hostName","addresses","address","ready","conditions","KubernetesNodeConditionTypes","READY","memoryPressure","MEMORY_PRESSURE","PIDPressure","PID_PRESSURE","diskPressure","DISK_PRESSURE","networkUnavailable","NETWORK_UNAVAILABLE","MemoryPressure","DiskPressure","NetworkUnavailable","unschedulable","allocatable","nodeInfo","kubeletVersion","internalIP","taints","taint","effect","apiToNode","architecture","operatingSystem","osImage","node","KubernetesNodeFormValues","KubernetesNodeTaintFormValues","KubernetesNodeLabelFormValues","filteredTaints","filteredLabels","KubernetesNodeCreatePayload","KubernetesNodeTaintPayload","oldNode","newNode","KubernetesEventHelper","events","event","UserAccessViewModel","Username","Inherited","Override","icon","TeamAccessViewModel","KubernetesResourceQuotaConverter","hard","used","quota","KubernetesResourceQuotaCreatePayload","assignOrDeleteIfEmptyOrZero","oldQuota","newQuota","StorageClasses","StorageRequests","bytesValue","Owner","KubernetesHorizontalPodAutoScalerHelper","sList","getApplicationTypeString","KubernetesDeployment","KubernetesApplicationTypeStrings","KubernetesDaemonSet","KubernetesDeployManifestTypes","KUBERNETES","COMPOSE","KubernetesDeployBuildMethods","GIT","WEB_EDITOR","KubernetesDeployRequestMethods","REPOSITORY","STRING","bytes","decimals","base10","dm","sizes","log","parseFloat","pow","toFixed","StoridgeProfileDefaultModel","Directory","Capacity","Redundancy","Provisioning","MinIOPS","MaxIOPS","MinBandwidth","MaxBandwidth","Filesystem","SnapshotEnabled","SnapshotInterval","SnapshotMax","EncryptionEnabled","InterfaceType","InterfaceDriver","InterfaceNetwork","InterfaceConf","StoridgeProfileListModel","Checked","StoridgeProfileModel","directory","capacity","provision","level","iops","min","bandwidth","filesystem","snapshot","enabled","interval","encryption","driver","network","conf","StoridgeCreateProfileRequest","model","KubernetesResourcePoolConverter","KubernetesNamespace","resourcePoolFormValuesToResourceQuota","ingMap","resourcePoolIngressClassFormValueToIngress","KubernetesSecretConverter","KubernetesSecretCreatePayload","stringData","KubernetesSecretUpdatePayload","KubernetesApplicationSecret","atob","KubernetesSystem_DefaultDeploymentUniqueLabelKey","KubernetesSystem_RevisionAnnotation","KubernetesSystem_RevisionHistoryAnnotation","KubernetesSystem_ChangeCauseAnnotation","KubernetesSystem_DesiredReplicasAnnotation","KubernetesSystem_MaxReplicasAnnotation","KubernetesSystem_AnnotationsToSkip","ResourceControlTypeString","CONFIG","CONTAINER","NETWORK","STACK","VOLUME","CUSTOM_TEMPLATE","CONTAINER_GROUP","ResourceControlTypeInt","_KubernetesDeployment","_KubernetesDaemonSet","VoluemMounts","publishedPort","_publishedPortToServicePort","KubernetesServiceHelper","generateHeadlessServiceName","KubernetesServiceCreatePayload","clusterIP","oldService","newService","computeContainerStatus","statuses","state","waiting","running","KubernetesPodConverter","containerStatuses","tolerations","nodeName","startTime","imagePullPolicy","computeContainers","computeAffinity","nodeSelector","tolerationSeconds","oldPod","newPod","createPayloadFactory","KubernetesConfigurationConverter","StackViewModel","EndpointId","SwarmId","ResourceControl","CreatedBy","UpdateDate","UpdatedBy","Regular","External","Orphaned","GitConfig","ExternalStackViewModel","creationDate","OrphanedStackViewModel","OrphanedRunning","_KubernetesStorageClassAccessPolicies","Description","selected","KubernetesStorageClassAccessPolicies","_KubernetesStorageClass","Provisioner","AllowVolumeExpansion","KubernetesStorageClass","KubernetesIngressClass","_KubernetesNodeFormValues","_KubernetesNodeTaintFormValues","Values","IsChanged","_KubernetesNodeLabelFormValues","RegistryViewModel","URL","Authentication","Password","UserAccessPolicies","TeamAccessPolicies","Gitlab","Quay","RegistryManagementConfigurationDefaultModel","registry","TLS","TLSSkipVerify","TLSCACertFile","TLSCertFile","TLSKeyFile","RegistryDefaultModel","RegistryCreateRequest","ProjectId","InstanceURL","ProjectPath","useOrganisation","organisationName","_KubernetesResourceReservation","TeamMembershipModel","UserId","UserID","TeamId","TeamID","ContainerGroupDefaultModel","Location","OSType","AllocatePublicIP","AccessControlData","ContainerGroupViewModel","addressPorts","properties","ipAddress","containerPorts","location","binding","osType","memoryInGB","Portainer","CreateContainerGroupRequest","DockerNetworkHelper","configs","Subnet","getIPV4Configs","createStatus","statusText","indexOf","ContainerViewModel","State","Created","Names","NetworkSettings","Networks","ImageID","Command","Mounts","PublicPort","private","PrivatePort","public","Agent","NodeName","ContainerStatsViewModel","read","preread","memory_stats","privateworkingset","MemoryUsage","MemoryCache","NumProcs","num_procs","isWindows","stats","usage","cache","PreviousCPUTotalUsage","precpu_stats","cpu_usage","total_usage","PreviousCPUSystemUsage","system_cpu_usage","CurrentCPUTotalUsage","cpu_stats","CurrentCPUSystemUsage","percpu_usage","CPUCores","networks","blkio_stats","readData","io_service_bytes_recursive","op","BytesRead","writeData","BytesWrite","noIOdata","ContainerDetailsViewModel","Model","Args","Config","HostConfig","ImageViewModel","Tag","Repository","RepoTags","RepoDigests","digest","repository","substring","VirtualSize","ContainerCount","ImageBuildModel","hasError","buildLogs","line","stream","errorDetail","KubernetesNodeHelper","isSystemLabel","nodeSelectors","nodes","EndpointGroupDefaultModel","TagIds","EndpointGroupModel","EndpointGroupCreateRequest","endpoints","AssociatedEndpoints","EndpointGroupUpdateRequest","weight","generateEnvFromEnvVariables","generateVolumesFromPersistentVolumClaims","generateEnvOrVolumesFromConfigurations","generateAffinityFromPlacements","KubernetesDeploymentCreatePayload","oldDeployment","newDeployment","KubernetesDaemonSetCreatePayload","oldDaemonSet","newDaemonSet","KubernetesStatefulSetCreatePayload","oldSFS","newSFS","_KubernetesPersistentVolumeClaim","_KubernetesVolume","KubernetesVolume","services","rawApp","clear","sessionStorage","save","setItem","getItem","capDesc","SETPCAP","MKNOD","AUDIT_WRITE","CHOWN","NET_RAW","DAC_OVERRIDE","FOWNER","FSETID","KILL","SETGID","SETUID","NET_BIND_SERVICE","SYS_CHROOT","SETFCAP","SYS_MODULE","SYS_RAWIO","SYS_PACCT","SYS_ADMIN","SYS_NICE","SYS_RESOURCE","SYS_TIME","SYS_TTY_CONFIG","AUDIT_CONTROL","MAC_ADMIN","MAC_OVERRIDE","NET_ADMIN","SYSLOG","DAC_READ_SEARCH","LINUX_IMMUTABLE","NET_BROADCAST","IPC_LOCK","IPC_OWNER","SYS_PTRACE","SYS_BOOT","LEASE","WAKE_ALARM","BLOCK_SUSPEND","ContainerCapabilities","ContainerCapability","sort","b","capability","cap","allowed","description","ResourceControlOwnershipParameters","adminOnly","publicOnly","users","teams","subResources","AdministratorsOnly","Users","Teams","SubResourceIDs","browseGetResponse","file","DockerHubViewModel","$allSettled","promises","rejected","Promise","allSettled","reason","PortainerEndpointTagHelper","tags","ids","filteredTags","tag","EndpointSecurityFormData","TLSMode","TLSCACert","TLSCert","TLSKey","VolumeViewModel","CreatedAt","Driver","Options","Mountpoint","ScheduleCreateRequest","Recurring","CronExpression","Endpoints","FileContent","File","ScheduleUpdateRequest","_KubernetesConfigMapCreatePayload","_KubernetesConfigMapUpdatePayload","KubernetesNamespaceConverter","phase","KubernetesNamespaceCreatePayload","resourcePoolOwner","KubernetesEndpointAnnotationLeader","_KubernetesEndpoint","HolderIdentity","Subsets","KubernetesEndpoint","_KubernetesEndpointSubset","Ips","KubernetesEndpointSubset","KubernetesConfigMapHelper","accesses","RoleId","KubernetesDeploymentHistoryHelper","ownerReferences","rsList","sameLabelsRS","controlledRS","_isControlledBy","rsListOriginal","current","revision","filteredRS","findCreateResources","newResources","oldResources","findDeleteResources","findUpdateResources","newResource","oldResource","patches","change","isEqual","doGetResourcesSummary","action","actionFilter","resource","getResourcesSummary","isArray","ResourceGroupViewModel","subscriptionId","SubscriptionId","SubscriptionViewModel","displayName","ConfigViewModel","ID","UpdatedAt","Index","Spec","decodeURIComponent","charCodeAt","join","b64DecodeUnicode","NetworkViewModel","Scope","Attachable","Internal","IPAM","Ingress","ConfigFrom","ConfigOnly","NodeViewModel","originalKey","originalValue","added","engineLabels","Engine","EngineLabels","Hostname","PlatformArchitecture","PlatformOS","CPUs","Resources","NanoCPUs","MemoryBytes","EngineVersion","Plugins","Addr","ManagerStatus","Leader","Reachability","ManagerAddr","SecretViewModel","ServiceViewModel","runningTasks","allTasks","Tasks","TaskTemplate","ContainerSpec","Mode","Replicated","Replicas","Running","LimitNanoCPUs","LimitMemoryBytes","Reservations","ReservationNanoCPUs","ReservationMemoryBytes","RestartPolicy","RestartCondition","Condition","RestartDelay","Delay","RestartMaxAttempts","MaxAttempts","RestartWindow","Window","LogDriver","LogDriverName","LogDriverOpts","Constraints","Placement","Preferences","Platforms","containerSpec","ContainerLabels","Arguments","Dir","User","Groups","TTY","OpenStdin","ReadOnly","StopSignal","StopGracePeriod","HealthCheck","DNSConfig","Secrets","Configs","Endpoint","Runtime","VirtualIPs","UpdateConfig","UpdateParallelism","Parallelism","UpdateDelay","UpdateFailureAction","FailureAction","UpdateOrder","Order","RollbackConfig","Scale","EditName","TaskViewModel","Updated","Slot","DesiredState","ServiceID","NodeId","NodeID","ContainerStatus","ContainerID","ContainerId","StoridgeDriveModel","driveid","Use","use","drivestatus","toLowerCase","size","Device","device","StoridgeNodeModel","role","StoridgeNodeDetailedModel","condition","Domain","domain","DomainID","domainID","FreeBandwidth","freeBandwidth","FreeCapacity","freeCapacity","FreeIOPS","freeIOPS","Hdds","hdds","MetadataVersion","metadataVersion","Nodes","ProvisionedBandwidth","provisionedBandwidth","ProvisionedCapacity","provisionedCapacity","ProvisionedIOPS","provisionedIOPS","Ssds","ssds","TotalBandwidth","totalBandwidth","TotalCapacity","totalCapacity","TotalIOPS","totalIOPS","UsedBandwidth","usedBandwidth","UsedCapacity","usedCapacity","UsedIOPS","usedIOPS","Vdisks","vdisks","StoridgeSnapshotModel","identifier","Date","date","SourceID","sourceid","Source","StoridgeVolumeModel","Allocated","allocated","IOPSMax","maximumIOPS","IOPSMin","minimumIOPS","BandwidthMin","minimumBandwidth","BandwidthMax","maximumBandwidth","LocalDriveOnly","localDriveOnly","nodeid","provisioning","redundancy","Uuid","uuid","Vdisk","vdisk","ipaddr","DriveType","driveType","Encryption","snapInterval","maximumSnapshots","StoridgeVolumeUpdateModel","opts","iopsmin","iopsmax","bandwidthmin","bandwidthmax","_KubernetesPortMappingPort","_KubernetesPortMapping","Expanded","Highlighted","_KubernetesSecretCreatePayload","_KubernetesSecretUpdatePayload","_KubernetesApplicationSecret","KubernetesStorageClassConverter","provisioner","allowVolumeExpansion","KubernetesStorageClassCreatePayload","oldStorageClass","newStorageClass","KubernetesVolumeConverter","claim","pool","KubernetesDaemonSetHistoryHelper","crList","sameLabelsCR","controlledCR","KubernetesStatefulSetHistoryHelper","_KubernetesHorizontalPodAutoScaler","_KubernetesNodeCreatePayload","_KubernetesNodeTaintPayload","PortainerEndpointInitFormValues","ConnectionType","TLSSKipClientVerify","AzureApplicationId","AzureTenantId","AzureAuthenticationKey","PortainerEndpointInitFormValueEndpointSection","title","classes","Title","Classes","PortainerEndpointInitFormValueEndpointSections","SettingsViewModel","LogoURL","BlackListedLabels","AuthenticationMethod","LDAPSettings","OAuthSettings","OAuthSettingsViewModel","TemplatesURL","EdgeAgentCheckinInterval","EnableEdgeComputeFeatures","UserSessionTimeout","EnableTelemetry","PublicSettingsViewModel","settings","OAuthLoginURI","OAuthLogoutURI","LDAPSettingsViewModel","ReaderDN","SearchSettings","GroupSearchSettings","AutoCreateUsers","LDAPSearchSettings","BaseDN","UsernameAttribute","Filter","LDAPGroupSearchSettings","GroupBaseDN","GroupAttribute","GroupFilter","ClientID","ClientSecret","AccessTokenURI","AuthorizationURI","ResourceURI","RedirectURI","UserIdentifier","Scopes","OAuthAutoCreateUsers","DefaultTeamID","SSO","LogoutURI","StatusViewModel","Snapshot","StatusVersionViewModel","UpdateAvailable","LatestVersion","TagViewModel","TeamViewModel","UserViewModel","RoleName","gitlabResponseGetLink","headers","next","error","KubernetesApplicationQuotaDefaults","NOT_IN","DOES_NOT_EXIST","GREATER_THAN","LOWER_THAN","run","put","gitFormModule","component","gitFormComposePathField","gitFormRefField","gitForm","gitFormUrlField","gitFormAuthFieldset","templateUrl","require","controller","bindings","onChange","GitFormController","onChangeField","onChangeURL","onChangeRefName","onChangeComposePath","field","GitFormComposeAuthFieldsetController","authValues","username","password","onChangeAuth","onChangeUsername","onChangePassword","auth","RepositoryUsername","RepositoryPassword","RepositoryAuthentication","FileUploaderController","$async","uploadInProgress","onFileSelected","onFileSelectedAsync","uploadFile","HostBrowserController","HostBrowserService","Notifications","FileSaver","ModalService","goToParent","browse","confirmDeleteFile","isRoot","getRelativePath","getFilesForPath","getFilesForPathAsync","downloadFile","downloadFileAsync","renameFile","renameFileAsync","deleteFile","deleteFileAsync","onFileSelectedForUpload","onFileSelectedForUploadAsync","rootPathRegex","parentPath","buildPath","ls","files","newName","filePath","newFilePath","rename","success","fileName","downloadData","Blob","saveAs","confirmDeletion","confirmed","parent","lastIndexOf","upload","onFileUploaded","refreshList","NodeSelectorController","AgentService","agents","VolumeBrowserController","HttpRequestHelper","VolumeBrowserService","renameAsync","confirmDelete","download","downloadAsync","up","$onInit","volumeId","parentFolder","setPortainerAgentTargetHeader","AgentViewModel","NodeRole","LocationViewModel","DisplayName","ContainerInstanceProviderViewModel","containerGroupType","resourceTypes","resourceType","Locations","locations","ContainerInstanceDetailsController","$state","AzureService","ContainerGroupService","ResourceGroupService","SubscriptionService","loading","subscription","resourceGroup","params","parseId","resourceGroupId","containerGroupId","containerGroup","constant","PORTAINER_FADEOUT","porImageRegistryContainerController","EndpointHelper","DockerHubService","pullRateLimits","isDockerHubRegistry","currentValue","fetchRateLimits","isAgentEndpoint","endpoint","isLocalEndpoint","checkRateLimits","setValidity","remaining","console","MacvlanFormData","SelectedNetworkConfig","DatatableState","selectedItems","ParentNetworkCard","VolumesCIFSFormData","useCIFS","serverAddress","share","version","versions","versionsNumber","VolumesNFSFormData","useNFS","mountPoint","options","EventViewModel","Time","time","Details","eventAttr","Actor","Attributes","details","Action","exitCode","createEventDetails","from","ImageDetailsViewModel","Parent","DockerVersion","Os","Author","Cmd","Entrypoint","ContainerConfig","ExposedPorts","ImageLayerViewModel","order","Comment","Tags","PluginViewModel","Enabled","SwarmViewModel","imageGetResponse","DockerFeaturesConfigurationController","EndpointService","StateManager","enableHostManagementFeatures","allowVolumeBrowserForRegularUsers","disableBindMountsForRegularUsers","disablePrivilegedModeForRegularUsers","disableHostNamespaceForRegularUsers","disableStackManagementForRegularUsers","disableDeviceMappingForRegularUsers","disableContainerCapabilitiesForRegularUsers","disableSysctlSettingForRegularUsers","isAgent","actionInProgress","securitySettings","allowBindMountsForRegularUsers","allowPrivilegedModeForRegularUsers","allowHostNamespaceForRegularUsers","allowDeviceMappingForRegularUsers","allowStackManagementForRegularUsers","allowContainerCapabilitiesForRegularUsers","allowSysctlSettingForRegularUsers","updateSecuritySettings","SecuritySettings","getState","agentProxy","checkAgent","AssociatedEndpointsDatatableController","$scope","$controller","DatatableService","PaginationService","extendGenericController","orderBy","filteredDataSet","totalFilteredDataset","pageNumber","onPageChange","paginationChanged","changePaginationLimit","onTextFilterChange","extend","setDefaults","prepareTableFromDataset","storedOrder","getDataTableOrder","tableKey","reverseOrder","reverse","textFilter","getDataTableTextFilters","storedFilters","getDataTableFilters","filters","open","updateKey","isFirstChange","newPageNumber","setPaginationLimit","paginatedItemLimit","filterValue","setDataTableTextFilters","start","retrievePage","then","totalFilteredDataSet","totalCount","EdgeJobFormController","formValidationError","scheduleValues","displayed","cron","datetime","moment","scheduleValue","cronMethod","method","cronRegex","editorUpdate","associateEndpoint","dissociateEndpoint","defaultTime","add","cronToDatetime","minutes","hours","month","formAction","cm","getValue","isEditorDirty","onChangeModel","strings","EdgeJobResultsDatatableController","repeater","autoRefresh","refreshRate","onSettingsRepeaterChange","onCollectLogsClick","dataset","onDatasetChange","anyCollecting","LogsStatus","EdgeStackEndpointsDatatableController","paginationChangedAsync","statusMap","1","2","3","EdgeStackStatusController","stackStatus","aggregateStatus","ok","acknowledged","endpointId","EditEdgeStackFormController","StackFileContent","EdgeGroupFormController","limit","getDynamicEndpointsAsync","getDynamicEndpoints","$watch","Dynamic","search","query","tagIds","tagsPartialMatch","PartialMatch","EdgeGroupsDatatableController","allowSelection","HasEdgeStack","CreateEdgeGroupController","EdgeGroupService","GroupService","TagService","loaded","createGroup","createGroupAsync","all","endpointGroups","go","EdgeGroupsController","removeAction","removeActionAsync","remove","reload","EditEdgeGroupController","updateGroup","updateGroupAsync","group","groupId","update","CreateEdgeJobViewController","$q","$window","EdgeJobService","createEdgeJob","createAsync","createEdgeJobFromFileContent","createEdgeJobFromFileUpload","confirmWebEditorDiscard","onbeforeunload","EdgeJobController","showEditorTab","updateAsync","downloadLogs","downloadLogsAsync","collectLogs","collectLogsAsync","clearLogs","clearLogsAsync","refresh","refreshAsync","showEditor","edgeJob","updateEdgeJob","logFile","logFileName","results","jobResults","endpointIds","associateEndpointsToResults","oldFileContent","tab","activeTab","getScriptFile","EdgeJobsViewController","deleteJobsAsync","deleteJobs","edgeJobs","CreateEdgeStackViewController","EdgeStackService","EdgeTemplateService","FormHelper","StackFile","RepositoryURL","RepositoryReferenceName","ComposeFilePathInRepository","Method","StackType","edgeGroups","createStack","createStackAsync","validateForm","createStackByMethod","createStackFromFileContent","createStackFromFileUpload","createStackFromGitRepository","onChangeTemplate","onChangeTemplateAsync","onChangeMethod","onChangeFormValues","noGroups","edgeTemplates","templates","selectedTemplate","edgeTemplate","fileContent","repositoryOptions","EdgeStacksViewController","stacks","getStacks","stack","EditEdgeStackViewController","deployStack","deployStackAsync","getPaginatedEndpoints","getPaginatedEndpointsAsync","stackId","stackFile","stackEndpointIds","filterStackEndpoints","EdgeGroups","originalFileContent","Prune","groupIds","updateStack","args","lastId","StoridgeEventModel","Category","category","Module","Content","content","StoridgeInfoModel","KubernetesComponentStatusConverter","KubernetesComponentStatus","ComponentName","healthyCondition","Healthy","ErrorMessage","_KubernetesComponentStatus","_KubernetesDeploymentCreatePayload","strategy","rollingUpdate","maxSurge","maxUnavailable","_KubernetesDaemonSetCreatePayload","updateStrategy","_KubernetesStatefulSetCreatePayload","partition","_KubernetesPersistentVolumClaimCreatePayload","accessModes","_KubernetesServiceCreatePayload","KubernetesEventConverter","KubernetesEvent","lastTimestamp","eventTime","Message","Involved","involvedObject","_KubernetesEvent","_KubernetesNamespaceCreatePayload","_KubernetesStorageClassCreatePayload","KubernetesEndpointConverter","leaderAnnotation","parsedJson","holderIdentity","subsets","subset","KubernetesApplicationRollbackHelper","targetRevision","_getDeploymentPayload","_getDaemonSetPayload","_getStatefulSetPayload","deploymentApp","target","_","KubernetesHistoryHelper","rawRevisions","currentRevision","revisionsList","_getDeploymentRevisions","_getDaemonSetRevisions","_getStatefulSetRevisions","appRS","filterOwnedRevisions","getCurrentRevision","filterVersionedRevisions","appCR","KubernetesStackHelper","KubernetesStack","_KubernetesStack","_KubernetesHorizontalPodAutoScalerCreatePayload","getCreatedApplicationResources","applicationFormValuesToApplication","applicationFormValuesToIngresses","getIngressUpdateSummary","persistentVolumeClaimResources","applicationFormValuesToModel","appResourceType","getApplicationResourceType","getUpdatedApplicationResources","oldFormValues","newFormValues","oldApp","oldHeadlessService","oldClaims","newApp","newHeadlessService","newClaims","oldAppResourceType","createdApplicationResourceSummary","headlessServiceUpdateResourceSummary","getServiceUpdateResourceSummary","claimSummaries","patchPayload","getVolumeClaimUpdateResourceSummary","serviceUpdateResourceSummary","oldIngresses","newIngresses","newKind","newAutoScaler","oldKind","oldAutoScaler","hpaUpdateSummary","oldHorizontalPodAutoScaler","newHorizontalPodAutoScaler","getHorizontalPodAutoScalerUpdateResourceSummary","newIng","oldIngress","newIngress","getIngressUpdateResourceSummary","resourceSummary","formValuesToResourcePool","newNamespace","oldNamespace","AccessControlPanelData","Ownership_Users","Ownership_Teams","AssoicatedEndpointsSelectorController","available","associated","getEndpoints","getEndpointsAsync","getAssociatedEndpoints","getAssociatedEndpointsAsync","loadData","getPaginationData","setTableData","noEndpoints","onAssociate","onDissociate","tableType","CustomTemplateCommonFieldsController","platformTypes","templateTypes","DatatableColumnsVisibilityController","isOpen","UsersDatatableController","EndpointItemController","editEndpoint","stopPropagation","onEdit","tagNames","idsToTagNames","isEdgeEndpoint","checkInInterval","EdgeCheckinInterval","now","LastCheckInDate","endpointTags","joinTags","isCheckInValid","calcIsCheckInValid","EnvironmentVariablesPanelController","editorText","switchEnvMode","handleSimpleChange","ngModel","EnvironmentVariablesSimpleModeItemController","formName","EnvironmentVariablesSimpleModeController","onChangeVariable","getTextFromFile","text","parsed","concat","resolve","reject","temporaryFileReader","FileReader","readAsText","onload","onerror","GroupFormController","getPaginatedEndpointsByGroup","allowCreateTag","isAdmin","pageType","associatedEndpoints","addEndpoint","reloadTablesContent","removeEndpoint","context","endpointsByGroup","availableEndpoints","StackRedeployGitFormController","StackService","inProgress","RefName","onChangeRef","confirmAsync","buttons","confirm","className","updateGit","ReferenceName","GenericHelper","child","findDeepAll","RegistryGitlabProject","project","PathWithNamespace","path_with_namespace","RegistryEnabled","container_registry_enabled","MotdViewModel","Hash","Style","ContentLayout","RegistryRepositoryViewModel","TagsCount","RegistryRepositoryGitlabViewModel","TemplateViewModel","setTemplatesV2","Error","AdministratorOnly","note","Categories","categories","platform","Logo","logo","RegistryModel","command","Network","Privileged","privileged","Interactive","interactive","restart_policy","hosts","envvar","preset","select","allowedValue","templateEnv","readonly","templateVolumes","portAndProtocol","hostAndContainerPort","hostPort","templatePorts","WebhookViewModel","Token","ResourceID","EndpointID","WebhookType","getEndpointsTotalCount","CreateCustomTemplateViewController","CustomTemplateService","FormValidator","ResourceControlService","fromStack","createCustomTemplate","createCustomTemplateAsync","createCustomTemplateByMethod","createCustomTemplateFromFileContent","createCustomTemplateFromFileUpload","createCustomTemplateFromGitRepository","customTemplate","accessControlData","userDetails","getUserDetails","userId","applyResourceControl","validateAccessControl","newValues","applicationState","endpointMode","stackType","provider","customTemplates","CustomTemplatesViewController","$anchorScroll","$rootScope","EndpointProvider","NetworkService","DOCKER_STANDALONE","DOCKER_SWARM_MODE","showAdvancedOptions","isEditorVisible","deployable","currentUser","getTemplates","getTemplatesAsync","removeTemplates","removeTemplatesAsync","selectTemplate","selectTemplateAsync","unselectTemplate","unselectTemplateAsync","getNetworks","getNetworksAsync","confirmDeleteAsync","isEditAllowed","CreatedByUserId","stackName","endpointID","createAction","createSwarmStackFromFileContent","createComposeStackFromFileContent","availableNetworks","isDeployable","customTemplateFile","templateId","confirmDeletionAsync","templateType","user","EditCustomTemplateViewController","getTemplate","getTemplateAsync","submitAction","submitActionAsync","updateCustomTemplate","req","forEach","_paq","u","document","g","createElement","getElementsByTagName","async","parentNode","insertBefore","$analyticsProvider","$windowProvider","$get","pageTracking","trackRelativePath","api","setCustomDimension","dimensionId","deleteCustomDimension","setCustomVariable","varIndex","varName","scope","deleteCustomVariable","trackSiteSearch","keyword","searchCount","isDefined","trackGoal","goalID","revenue","trackLink","url","linkType","registerSetUsername","registerPageTrack","registerEventTrack","productSKU","productName","categoryName","price","productCategory","quantity","grandTotal","orderId","subTotal","tax","shipping","discount","registerExceptionTrack","autoNgTemplateLoaderTemplate1","autoNgTemplateLoaderTemplate2","autoNgTemplateLoaderTemplate3","$stateRegistryProvider","azure","abstract","onEnter","setEndpointID","setEndpointPublicURL","PublicURL","setOfflineModeFromStatus","updateEndpointState","containerInstances","views","containerInstanceCreation","dashboard","register","autoNgTemplateLoaderTemplate4","autoNgTemplateLoaderTemplate5","autoNgTemplateLoaderTemplate6","autoNgTemplateLoaderTemplate7","autoNgTemplateLoaderTemplate8","autoNgTemplateLoaderTemplate9","autoNgTemplateLoaderTemplate10","autoNgTemplateLoaderTemplate11","autoNgTemplateLoaderTemplate12","autoNgTemplateLoaderTemplate13","autoNgTemplateLoaderTemplate14","autoNgTemplateLoaderTemplate15","autoNgTemplateLoaderTemplate16","autoNgTemplateLoaderTemplate17","autoNgTemplateLoaderTemplate18","autoNgTemplateLoaderTemplate19","autoNgTemplateLoaderTemplate20","autoNgTemplateLoaderTemplate21","autoNgTemplateLoaderTemplate22","autoNgTemplateLoaderTemplate23","autoNgTemplateLoaderTemplate24","autoNgTemplateLoaderTemplate25","autoNgTemplateLoaderTemplate26","autoNgTemplateLoaderTemplate27","autoNgTemplateLoaderTemplate28","autoNgTemplateLoaderTemplate29","autoNgTemplateLoaderTemplate30","autoNgTemplateLoaderTemplate31","autoNgTemplateLoaderTemplate32","autoNgTemplateLoaderTemplate33","autoNgTemplateLoaderTemplate34","autoNgTemplateLoaderTemplate35","autoNgTemplateLoaderTemplate36","autoNgTemplateLoaderTemplate37","autoNgTemplateLoaderTemplate38","autoNgTemplateLoaderTemplate39","docker","LegacyExtensionManager","SystemService","checkEndpointStatus","updateEndpointStatus","updateEndpoint","ping","Snapshots","Swarm","initEndpointExtensions","extensions","controllerAs","configCreation","containerAttachConsole","containerExecConsole","containerCreation","containerInspect","containerLogs","containerStats","images","imageBuild","imageImport","networkCreation","secrets","secretCreation","serviceCreation","serviceLogs","stackCreation","swarm","swarmVisualizer","task","taskLogs","volumeBrowse","volumeCreation","initAuthentication","authManager","checkAuthOnRefresh","$on","isTransitionRequiresAuthentication","transition","init","nextTransition","to","nextTransitionName","some","route","componentsModule","root","loggedIn","initialize","endpointRoot","$transition$","EdgeID","account","authentication","logout","performApiLogout","endpointKubernetesConfiguration","endpointCreation","endpointAccess","groupCreation","groupAccess","home","initEndpoint","initAdmin","registries","registryCreation","registryAccess","settingsAuthentication","team","roles","html","webpackContext","webpackContextResolve","code","titleText","titleIcon","delete","isUploadAllowed","isUploadEnabled","AgentFactory","$resource","API_ENDPOINT_ENDPOINTS","getAgentApiVersion","factory","BrowseFactory","transformResponse","responseType","AgentDockerhub","HostFactory","info","AgentPingFactory","interceptor","instance","Number","responseError","AgentServiceFactory","AgentVersion1","hostInfo","$promise","agentApiVersion","agentVersion","HostBrowserServiceFactory","Browse","Upload","newPath","CurrentFilePath","NewFilePath","onProgress","AgentPingService","AgentPing","VolumeBrowserServiceFactory","BrowseVersion1","getBrowseService","volumeID","$interval","LocalStorage","cfpLoadingBar","$transitions","defaultTitle","originalSet","set","arguments","onBefore","resetAgentHeaders","defaultErrorHandler","currentEndpoint","$","ajaxSend","jqXhr","jqOpts","hasNoContentType","contentType","setRequestHeader","getJWT","applicationId","tenantId","authenticationKey","$http","withResourceGroup","resourceGroupName","containerGroupName","providerNamespace","Azure","ProviderService","retrieveResourcesForEachSubscription","subscriptions","resourceQuery","deferred","defer","resourceQueries","promise","deleteContainerGroup","createContainerGroup","containerInstanceProvider","resourceGroups","containerGroups","aggregate","resourcesBySubcription","aggregatedResources","ContainerGroup","Provider","ResourceGroup","Subscription","deleteAction","actionCount","allResourceGroups","allProviders","newResourceGroup","updateResourceGroupsAndLocations","providers","selectedResourceGroup","currentSubLocations","selectedSubscription","changeSubscription","addPortBinding","removePortBinding","every","containerInstancesProviders","$urlRouterProvider","$httpProvider","localStorageServiceProvider","jwtOptionsProvider","$uibTooltipProvider","$compileProvider","cfpLoadingBarProvider","setPrefix","tokenGetter","interceptors","post","patch","request","portainerAgentTargetHeader","portainerAgentManagerOperation","toastr","timeOut","Terminal","applyAddon","fit","setTriggers","mouseenter","click","focus","outsideClick","includeSpinner","parentSelector","latencyThreshold","otherwise","capabilities","containerId","taskId","ctrl","editModel","maximumRetryCount","updateRestartPolicy","agentCount","refreshCallback","joinNetworkAction","joinNetworkActionInProgress","leaveNetworkActionInProgress","leaveNetworkAction","expandedItems","expandAll","expandItem","expanded","itemCanExpand","GlobalIPv6Address","hasExpandableItems","storedSettings","getDataTableSettings","headerset","selectedItemCount","noStoppedItemsSelected","noRunningItemsSelected","noPausedItemsSelected","showAddAction","ContainerService","executeActionOnContainerList","successMessage","errorMessage","startAction","startContainer","stopAction","stopContainer","restartAction","restartContainer","killAction","killContainer","pauseAction","pauseContainer","resumeAction","resumeContainer","isOneContainerRunning","confirmContainerDeletion","cleanVolumes","removeSelectedContainers","showHostColumn","offlineMode","publicURL","endpointPublicURL","truncateContainerName","containerNameTruncateSize","showQuickActionStats","showQuickActionLogs","showQuickActionExec","showQuickActionInspect","showQuickActionAttach","columnVisibility","columns","display","actions","created","ownership","onColumnVisibilityChange","setColumnVisibilitySettings","onSelectionChanged","updateSelectionState","updateSelectionStateBasedOnItemStatus","applyFilters","onStateFilterChange","filtered","onSettingsContainerNameTruncateChange","setDataTableSettings","onSettingsQuickActionChange","availableStateFilters","updateStoredFilters","datasetFilters","existingFilter","storedColumnVisibility","getColumnVisibilitySettings","downloadAction","forceRemoveAction","exportInProgress","showUsedImages","showUnusedImages","onstateFilterChange","setDataTableFilters","showIpAddressColumn","accessToNodeDetails","directive","restrict","transclude","parentCtrl","allowCheckbox","allowExpand","NetworkHelper","disableRemove","isSystemNetwork","Subs","serviceId","showTaskLogsButton","showQuickActionConsole","showUpdateAction","ServiceService","ServiceHelper","ImageHelper","WebhookService","scaleAction","serviceToConfig","webhooks","when","deleteWebhook","updateAction","confirmServiceForceUpdate","pullImage","removeDigestFromRepository","ForceUpdate","forceUpdateServices","showStackColumn","expandPreviouslyExpandedItem","storedExpandedItems","storedId","setDataTableExpandedItems","expandItems","expandedItemCount","onDataRefresh","getDataTableExpandedItems","showSlotColumn","showLogsButton","showBrowseAction","showUsedVolumes","showUnusedVolumes","dangling","endpointApiVersion","swarmManagement","standaloneManagement","adminAccess","toggle","currentRouteName","showStacks","hostDetails","engineDetails","devices","disks","refreshUrl","browseUrl","hostFeaturesEnabled","engine","isBrowseEnabled","onSave","availability","removeLabel","onChangedLabels","updateLabel","NodeService","LabelHelper","managerAddress","hasChanges","$onChanges","addLabel","nodeLabels","updateNodeLabels","updateNodeAvailability","saveChanges","originalNode","fromKeyValueToLabelHash","updateNode","cancelChanges","isAuthenticated","rateLimitExceeded","porImageRegistryController","RegistryService","ImageService","onInit","onRegistryChange","isKnownRegistry","getRegistryURL","registryImages","availableRegistries","reg","imagesWithoutKnown","imageContainsURL","availableImages","prepareAutocomplete","dockerhub","autoComplete","getUniqueTagListFromImages","pullWarning","labelClass","inputClass","onImageChange","form","displayTimestamps","logCollectionChange","sinceTimestamp","lineCount","resourceName","clipboard","availableSinceDatetime","desc","subtract","format","copySupported","supported","logCollection","autoScroll","wrapLines","filteredLogs","selectedLines","copyText","show","fadeOut","copySelection","clearSelection","selectLine","requiredNodeSelection","requiredConfigSelection","includeString","val","hash","color","hashToHexColor","strToHash","labelStyle","Dead","Ghost","Paused","imageName","ConstraintsHelper","availableNodes","matchesServiceConstraints","tasks","totalImageSize","nodeId","createdBy","fullName","versionIdx","flattenConfig","ConfigID","ConfigName","FileName","Uid","UID","Gid","GID","configConfig","ConstraintModel","patterns","nodeHostname","nodeRole","eq","neq","matchesConstraint","constraint","matchesLabel","extractValue","pop","extractCustomLabelKey","baseLabelKey","transformConstraints","constraints","transform","portPattern","parsePort","parsePortRange","portRange","stringPorts","intPorts","isValidPortRange","createPortRange","portRangeText","hostIp","colonIndex","substr","startPort","endPort","helper","splitargs","elem","NetworkMode","NetworkingConfig","EndpointsConfig","binds","containerPath","Destination","RW","Binds","portBindings","portBinding","containerPortRange","startHostPort","endHostPort","hostAndPort","hostPortRange","bindKey","HostIp","HostPort","portBindingKeys","portBindingKeysByProtocol","portKey","portBindingKeysByHostIp","sortedPortBindingKeys","previousHostPort","previousContainerPort","portKeySplit","bindingHostPort","isValidTag","createImageConfigForContainer","fromImage","fullImageName","slash","UseOrganisation","OrganisationName","getImagesNamesForDownload","ControlAvailable","fromLabelHashToKeyValue","labelKV","FOREGROUND_COLORS_BY_ANSI","black","x256","colors","red","green","yellow","blue","magenta","cyan","white","brightBlack","brightRed","brightGreen","brightYellow","brightBlue","brightMagenta","brightCyan","brightWhite","BACKGROUND_COLORS_BY_ANSI","bgBlack","bgRed","bgGreen","bgYellow","bgBlue","bgMagenta","bgCyan","bgWhite","bgBrightBlack","bgBrightRed","bgBrightGreen","bgBrightYellow","bgBrightBlue","bgBrightMagenta","bgBrightCyan","bgBrightWhite","stripEscapeCodes","cssColorFromRgb","rgb","extendedColorForToken","token","colorMode","formatLogs","skipHeaders","stripHeaders","formattedLogs","foregroundColor","backgroundColor","spans","tokenize","tokenLines","nodeToConfig","flattenSecret","SecretID","SecretName","secretConfig","otherServicesTasks","EndpointSpec","keyValuePreferences","preferences","Spread","SpreadDescriptor","keyValueConstraints","operatorIndices","indexEquals","getOperator","humanDuration","nanos","matches","duration","unit","asMilliseconds","conversionFromNano","logOptions","keyValueLogDriverOpts","option","entries","ipHostEntries","keyValue","Container","optionArray","mounts","rejection","SnapshotRaw","Info","buildImage","ignoreLoadingBar","buildImageOverride","commitContainer","repo","ContainersInterceptor","stop","restart","kill","pause","unpause","top","force","exec","inspect","prune","resize","w","ImagesInterceptor","history","insert","registryAuthenticationHeader","NetworksInterceptor","connect","disconnect","rollback","InfoInterceptor","VersionInterceptor","since","until","dataUsage","subAction","VolumesInterceptor","Build","FileUploadService","remote","dockerfile","configId","LogHelper","$timeout","resizeTTY","width","height","timeout","renameContainer","newContainerName","restartPolicy","maximumRetryCounts","MaximumRetryCount","createContainer","createAndStartContainer","removeVolumes","createExec","execConfig","stdout","stderr","timestamps","tail","parameters","containerTop","Exec","execId","imageId","withUsage","layers","imageLayer","pushImage","registryModel","authenticationDetails","encodedCredentials","setRegistryAuthenticationHeader","imageConfiguration","ignoreErrors","pullImageAndIgnoreErrors","detail","pullImageAndAcknowledgeErrors","tagImage","downloadImages","uploadImage","loadImages","deleteImage","forceRemoval","networkConfiguration","localNetworks","swarmNetworks","swarmAttachableNetworks","filteredNetworks","networkId","Force","aliases","EndpointConfig","Aliases","rawNode","getActiveManager","Plugin","servicePlugins","systemOnly","pluginType","pluginVersion","system","plugins","aggregatedPlugins","systemPlugins","plugin","Interface","Types","volumePlugins","networkPlugins","loggingPlugins","secretId","Service","TaskService","serv","SystemEndpoint","Task","Volume","VolumeHelper","driverOptions","DriverOpts","createDriverOptions","volumeConfiguration","volumeConfigurations","createVolumeQueries","createVolume","x","ConfigsController","ConfigService","getConfigs","getConfigsAsync","CreateConfigController","ConfigContent","displayCodeEditor","labelName","labelValue","configData","btoa","unescape","encodeURIComponent","prepareConfigData","prepareLabelsConfig","prepareConfiguration","removeConfig","ContainerHelper","ExecService","CONSOLE_COMMANDS_LABEL_PREFIX","socket","states","disconnected","connecting","connected","restcall","termWidth","cols","initTerm","resizeRestCall","resizefun","WebSocket","onopen","on","send","terminal_container","getElementById","setOption","onresize","$apply","setTimeout","onmessage","write","onclose","containerCommands","connectAttach","attachId","href","connectExec","isCustomCommand","customCommand","AttachStdin","AttachStdout","AttachStderr","Tty","commandStringToArray","close","dispose","autoconnectAttachView","initView","containerLabels","imageOS","getContainers","$filter","PluginService","CmdMode","prepareCmd","EntrypointMode","prepareEntrypoint","NetworkContainer","containerName","networkMode","MacAddress","IPAMConfig","IPv4Address","IPv4","IPv6Address","IPv6","fromContainer","dnsServers","DnsPrimary","DnsSecondary","Dns","ExtraHosts","prepareNetworkConfig","imageConfig","prepareImageConfig","preparePortBindings","PortBindings","Console","openStdin","tty","prepareConsole","envVarsUtils","prepareEnvironmentVariables","prepareVolumes","prepareLabels","Devices","pathOnHost","pathInContainer","PathOnHost","PathInContainer","CgroupPermissions","prepareDevices","memoryLimit","round","MemoryReservation","memoryReservation","NanoCpus","prepareResources","logOpts","LogConfig","opt","constructor","prepareLogDriver","notAllowed","getCapName","CapAdd","CapDrop","prepareCapabilities","sysctls","Sysctls","sysctl","prepareSysctls","loadFromContainerSpec","logConfig","configFromContainer","commandArrayToString","sortAndCombinePorts","loadFromContainerVolumes","netContainer","runningContainers","fromContainerMultipleNetworks","firstNetwork","extraNetworks","extraHosts","loadFromContainerNetworkConfig","loadFromContainerLabels","dev","loadFromContainerDevices","retrievePorRegistryModelFromRepository","loadFromContainerResources","hasCapability","loadFromContainerCapabilities","loadFromContainerSysctls","shouldShowDevices","showDeviceMapping","shouldShowSysctls","showSysctls","checkIfContainerCapabilitiesEnabled","areContainerCapabilitiesEnabled","isAdminOrEndpointAdmin","availableVolumes","vol1","vol2","localeCompare","availableRuntimes","Runtimes","sliderMaxCpu","NCPU","sliderMaxMemory","MemTotal","allowBindMounts","allowPrivilegedMode","loggingDrivers","availableLoggingDrivers","oldContainer","findCurrentContainer","callback","alwaysPull","pullImageIfNeeded","stopAndRenameContainer","createNewContainer","connectToExtraNetworks","removeOldContainer","onSuccess","onCreationProcessFail","restoreOldContainerName","restoreError","stopContainerIfNeeded","newContainer","newContainerId","connectionPromises","networkName","connectContainer","pullImageValidity","handleEnvVarChange","refreshSlider","$broadcast","onImageNameChange","setPullImageValidity","validity","PublishAllPorts","AutoRemove","Init","addVolume","removeVolume","addExtraHost","removeExtraHost","addDevice","removeDevice","addSysctl","removeSysctl","addLogDriverOpt","removeLogDriverOpt","resetNetworkConfig","Commit","activityTime","displayRecreateButton","commitInProgress","recreateContainerInProgress","joinNetworkInProgress","leaveNetworkInProgress","edit","StartedAt","utc","diff","humanize","FinishedAt","portMapping","inSwarm","autoRemove","admin","settingRestrictsRegularUsers","executeContainerAction","commitContainerAsync","containerLeaveNetwork","disconnectContainer","containerJoinNetwork","commit","confirmRemove","cleanAssociatedVolumes","removeContainer","recreate","confirmContainerRecreation","isRunning","networksNames","createContainerData","oldResourceControl","newResourceControl","duplicateResourceControl","recreateContainer","DisplayTextView","containerInfo","stopRepeater","cancel","setUpdateRepeater","unix","changeLogCollection","logCollectionStatus","$document","ChartService","updateNetworkChart","chart","rx","rx_bytes","tx","tx_bytes","UpdateNetworkChart","updateMemoryChart","UpdateMemoryChart","updateIOChart","noIOData","UpdateIOChart","updateCPUChart","possIntervals","valueOf","windowsCpuUsage","calculateCPUPercentWindows","cpuPercent","cpuDelta","systemDelta","calculateCPUPercentUnix","UpdateCPUChart","networkChart","cpuChart","memoryChart","ioChart","processInfo","initCharts","networkChartCtx","CreateNetworkChart","cpuChartCtx","CreateCPUChart","memoryChartCtx","CreateMemoryChart","ioChartCtx","CreateIOChart","networkStatsUnavailable","ioStatsUnavailable","startChartUpdate","changeUpdateRepeater","VolumeService","shouldShowStacks","volumeCount","networkCount","serviceCount","stackCount","Boolean","dismissInformationPanel","jobs","versionDetails","releaseVersion","rootDirectory","DockerRootDir","storageDriver","loggingDriver","LoggingDriver","buildEngineDetails","os","arch","OperatingSystem","kernelVersion","KernelVersion","totalCPU","totalMemory","agentHostInfo","PCIDevices","PhysicalDisks","BuildImageController","BuildService","buildImageBasedOnBuildType","buildType","BuildType","dockerfilePath","UploadFile","buildImageFromUpload","buildImageFromURL","dockerfileContent","DockerFileContent","buildImageFromDockerfileContent","imageNames","ImageNames","addImageName","removeImageName","validImageNames","uiCanExit","sortType","sortReverse","toggleLayerCommand","layerId","toggleClass","pushTag","hide","pullTag","removeTag","removeImage","exportImage","warning","confirmImageExport","getImages","pullRateValid","confirmRemovalAction","confirmImageForceRemoval","isAuthorizedToDownload","checkAuxiliaryAddress","excludedIP","gateway","prepareAuxiliaryAddresses","ipamConfig","ipFormValues","AuxiliaryAddresses","auxAddress","IPV4","Gateway","IPRange","IPV6","EnableIPv6","prepareIPAMConfiguration","DriverOptions","prepareDriverOptions","createNetwork","setPortainerAgentManagerOperation","managerOperation","Macvlan","availableNetworkDrivers","CheckDuplicate","addDriverOption","removeDriverOption","addIPV4AuxAddress","addIPV6AuxAddress","removeIPV4AuxAddress","IPV4AuxiliaryAddressesError","removeIPV6AuxAddress","IPV6AuxiliaryAddressesError","checkIPV4AuxiliaryAddress","checkIPV6AuxiliaryAddress","isValid","validIPV4","validIPV6","creationContext","selectedNetworkConfig","modifyNetworkConfigurationForMacvlanConfigFrom","selectedNodes","filterContainersInNetwork","containersInNetwork","containerInNetwork","removeNetwork","allowRemove","IPV4Configs","IPV6Configs","getIPV6Configs","groupSwarmNetworksManagerNodesFirst","nonSwarmNetworks","grouped","sorted","arr","agent","getRole","$stateParams","transformPlugins","pluginsList","fetchJobs","buildHostDetails","nodeDetails","buildNodeDetails","SecretService","encodeSecret","prepareSecretData","secretConfiguration","removeSecret","getSecrets","ConfigHelper","SecretHelper","commandToArray","cmd","input","Global","prepareSchedulingConfig","PublishMode","PublishedPort","preparePortsConfig","EntryPoint","WorkingDir","prepareCommandConfig","prepareEnvConfig","Target","volumeObject","VolumeOptions","DriverConfig","createMountObjectFromVolume","ExtraNetworks","prepareNetworks","hostsEntries","HostsEntries","host_ip","keyVal","prepareHostsEntries","translateHumanDurationToNanos","prepareUpdateConfig","prepareConfigConfig","overrideTarget","prepareSecretConfig","translateKeyValueToPlacementConstraints","PlacementConstraints","translateKeyValueToPlacementPreferences","PlacementPreferences","preparePlacementConfig","CpuReservation","prepareResourcesCpuConfig","MemoryLimitUnit","MemoryReservationUnit","prepareResourcesMemoryConfig","prepareRestartPolicy","prepareLogDriverConfig","checkIfAllowedBindMounts","Webhook","addExtraNetwork","removeExtraNetwork","addHostsEntry","removeHostsEntry","addConfig","addSecret","addPlacementConstraint","removePlacementConstraint","addPlacementPreference","removePlacementPreference","addContainerLabel","removeContainerLabel","volumesAreValid","rcPromise","webhookPromise","createServiceWebhook","createNewService","availableSecrets","availableConfigs","maxCpus","maxMemory","initSlidersMaxValuesBasedOnNodeData","$location","TaskHelper","WebhookHelper","updateInProgress","deletionInProgress","rollbackInProgress","lastVersion","originalService","previousServiceValues","buildChanges","ServiceLabels","ServiceContainerLabels","Editable","ServiceSecrets","ServiceConfigs","translateHostnameIPToHostsEntries","ServiceMounts","ServiceConstraints","ServicePreferences","translateKeyValueToLogDriverOpts","isUpdating","transformResources","v1","v2","translateLogDriverOptsToKeyValue","translateConstraintsToKeyValue","translatePreferencesToKeyValue","translateHostsEntriesToHostnameIP","translateServiceArrays","translateNanosToHumanDuration","transformDurations","serviceNetworks","ingressNetwork","unshift","addr","webhook","WebhookExists","webhookID","webhookURL","returnWebhookUrl","associateContainerToTask","associateTasksToService","override","updateServiceArray","goToItem","addEnvironmentVariable","onChangeEnvVars","orgEnv","orgVar","serviceConfig","updateConfig","newSecret","filename","serviceSecret","updateContainerLabel","addMount","removeMount","onChangeMountType","updateMount","addNetwork","removedElement","updateNetwork","updatePlacementConstraint","updatePlacementPreference","addPublishedPort","updatePublishedPort","removePortPublishedBinding","updateLogDriverOpt","updateLogDriverName","updateHostsEntry","updateWebhook","copyWebhook","attribute","elements","mountsAreValid","rollbackService","updateService","removeService","forceUpdateService","updateServiceAttribute","filterNetworks","serviceNetwork","getServices","extractSwarmInfo","systemStatus","SystemStatus","node_count","node_offset","extractNodeInfo","extractNodesInfo","offset","getNodes","processTotalCPUAndMemory","prepareVisualizerData","visualizerData","assignServiceInfo","assignTasksToNode","ShowInformationPanel","DisplayOnlyRunningTasks","DisplayNodeLabels","changeShowInformationPanel","storeSwarmVisualizerSettings","changeDisplayOnlyRunningTasks","changeDisplayNodeLabels","showInfoPanel","getSwarmVisualizerSettings","displayOnlyRunningTasks","displayNodeLabels","loadState","NFSData","CIFSData","availableVolumeDrivers","storidgeProfile","StoridgeProfile","prepareNFSConfiguration","versionNumber","prepareCIFSConfiguration","createVolumeConfiguration","StoridgeVolumeService","StoridgeSnapshotService","storidgeSnapshots","storidgeVolume","removeSnapshot","containerFilter","isCioDriver","volumeData","getVolumeDataFromContainer","containersUsingVolume","snapshots","getVolumes","endpointProvider","endpointRole","attached","isVolumeUsedByAService","addLabelAction","removeLabelAction","formActionLabel","onDownloadLogsClick","onClearLogsClick","API_ENDPOINT_EDGE_GROUPS","EdgeJobResultsFactory","API_ENDPOINT_EDGE_JOBS","EdgeJobsFactory","API_ENDPOINT_EDGE_STACKS","API_ENDPOINT_EDGE_TEMPLATES","EdgeJobs","EdgeJobResults","edgeJobId","createSchedule","EdgeStacks","stackFileContent","createEdgeStack","EdgeTemplates","fetch","profiles","profile","drives","drive","profileCreation","profileName","cluster","monitor","addAction","rescanAction","additionInProgress","StoridgeNodeService","addNodeAction","addInfo","copyAddNodeCommand","StoridgeProfileService","createSnapshot","initLabels","updateVolume","cancelUpdate","prepareVolume","confirmUpdate","precision","isFinite","number","rebootCluster","shutdownCluster","queryEvents","getVersion","getInfo","queryNodes","getNode","addNode","removeNode","cordonNode","uncordonNode","queryProfiles","getProfile","createProfile","updateProfile","deleteProfile","queryDrives","getDrive","addDrive","removeDrive","rescanDrives","queryVolumes","getVolume","querySnapshots","getSnapshot","bytePerSecBasedAxisLabel","filesize","CreateCapacityChart","Chart","datasets","tooltips","callbacks","tooltipItem","datasetIndex","animation","responsiveAnimationDuration","responsive","hover","animationDuration","CreateIOPSChart","fill","borderColor","pointBackgroundColor","pointBorderColor","pointRadius","borderWidth","intersect","position","scales","yAxes","ticks","beginAtZero","CreateBandwidthChart","processedValue","bytePerSecBasedTooltipLabel","yLabel","UpdateChart","UpdatePieChart","Storidge","nodeData","snapshotsData","snapshotsArray","StoridgeClusterService","shutdownInProgress","rebootInProgress","reboot","shutdown","clusterInfo","clusterVersion","clusterNodes","StoridgeDriveService","rescan","StoridgeChartService","updateIOPSChart","updateBandwithChart","updateCapacityChart","startViewUpdate","iopsChart","bandwidthChart","capacityChart","iopsChartCtx","bandwidthChartCtx","capacityChartCtx","removeNodeAction","cordonNodeAction","cordon","uncordonNodeAction","uncordon","NoLimit","LimitIOPS","LimitBandwidth","ManualInputDirectory","RedundancyOptions","RecurringSnapshotEnabled","updatedName","updatedDirectory","deleteInProgress","snapshotId","kubernetes","KubernetesHealthService","KubernetesComponentStatusService","getAsync","apiToModel","isPod","useServerMetrics","onPublishingModeClick","KubernetesNamespaceHelper","showSystem","onSettingsShowSystemChange","isExternalApplication","isSystemNamespace","isDisplayed","buildIngressRuleURL","portHasIngressRules","ruleCanBeDisplayed","isSystemToken","isSystemConfig","isExternalConfiguration","canManageAccess","KubernetesVolumesDatatableController","isUsed","isExternalVolume","isCreation","KubernetesConfigurationDataController","editorUpdateAsync","onFileLoad","onFileLoadAsync","showSimpleMode","showAdvancedMode","duplicateKeys","getDuplicates","invalidKeys","getInvalidKeys","onChangeKey","chardet","detect","Buffer","decoder","TextDecoder","isBinary","stringValue","decode","Base64","encode","readAsArrayBuffer","parseYaml","parseData","currentState","cpuLimit","KubernetesResourceReservationController","cpuUsage","memoryUsage","usageValues","viewReady","KubernetesYamlInspectorController","css","KubernetesEndpointService","KubernetesEndpoints","getAllAsync","apiToEndpoint","KUBERNETES_SYSTEM_NAMESPACES","KUBERNETES_DEFAULT_NAMESPACE","getYaml","Accept","KubernetesHorizontalPodAutoScalerService","KubernetesHorizontalPodAutoScalers","patchAsync","deleteAsync","raw","horizontalPodAutoScaler","KubernetesIngressService","KubernetesIngresses","getOne","getAll","KubernetesMetricsService","KubernetesMetrics","capabilitiesAsync","getPodAsync","getNodeAsync","podName","getPod","podUrl","KubernetesNodeService","KubernetesNodes","apiToNodeDetails","nodeFormValues","formValuesToNode","patchedNode","KubernetesPodService","KubernetesPods","logsAsync","evictionAsync","podEvictionPayload","evictionPayload","evict","KubernetesApplicationService","KubernetesDeploymentService","KubernetesDaemonSetService","KubernetesStatefulSetService","KubernetesServiceService","KubernetesSecretService","KubernetesPersistentVolumeClaimService","KubernetesNamespaceService","KubernetesHistoryService","patchPartialAsync","rollbackAsync","apiService","oldIng","autoScalers","rootItem","converterFunc","apiDeploymentToApplication","apiDaemonSetToApplication","apiStatefulSetToapplication","apiPodToApplication","boundService","findApplicationBoundService","associateContainersAndApplication","boundScaler","findApplicationBoundScaler","scaler","namespaces","convertToApplication","deployments","daemonSets","statefulSets","deploymentApplications","daemonSetApplications","statefulSetApplications","boundPods","unboundPods","nakedPodsApplications","_generateIngressPatchPromises","_getApplicationApiService","claimPromises","oldApiService","newApiService","newClaim","oldClaim","oldAppPayload","newAppPayload","oldValues","partial","servicePayload","headlessServicePayload","originalIngresses","getPatchPayload","KubernetesConfigMapService","KubernetesConfigMaps","apiToPortainerAccessConfigMap","createAccess","updateAccessPayload","rawPromise","yamlPromise","defaultConfigMap","apiToConfigMap","updatePayload","KubernetesConfigurationService","secretToConfiguration","configMapToConfiguration","configMaps","secretsConfigurations","configMapsConfigurations","configurationFormValuesToConfigMap","configurationFormValuesToSecret","KubernetesControllerRevisionService","KubernetesControllerRevisions","KubernetesDaemonSets","KubernetesDeployments","KubernetesEventService","KubernetesEvents","apiToEvent","KubernetesHealth","pingAsync","KubernetesReplicaSetService","getRevisions","KubernetesNamespaces","apiToNamespace","visibleNamespaces","KubernetesPersistentVolumeClaims","Kubernetes","Configuration","apiToPersistentVolumeClaim","KubernetesReplicaSets","KubernetesResourcePoolService","KubernetesResourceQuotaService","ingressPromises","ing","del","createPromises","delPromises","patchPromises","old","quotaAttempt","apiToResourcePool","pools","KubernetesResourceQuotas","apiToResourceQuota","KubernetesSecrets","apiToSecret","KubernetesServices","KubernetesStackService","KubernetesStatefulSets","headlessServiceName","oldStatefulSet","newStatefulSet","KubernetesStorageService","KubernetesStorage","apiToStorageClass","KubernetesVolumeService","pvcToVolume","pvcs","KubernetesApplicationsController","getApplications","getApplicationsAsync","removeStacksAction","removeStacksActionAsync","storeActiveTab","stacksFromApplications","portMappingsFromApplications","getActiveTab","currentName","$current","KubernetesApplicationConsoleController","configureSocketAndTerminal","availableCommands","applicationName","KubernetesCreateApplicationController","ApplicationDeploymentTypes","ApplicationDataAccessPolicies","ApplicationPublishingTypes","ApplicationPlacementTypes","ApplicationTypes","ApplicationConfigurationFormValueOverridenKeyTypes","ServiceTypes","updateApplicationAsync","deployApplicationAsync","existingApplication","alreadyExists","isEdit","onChangeConfigurationPath","duplicates","configurationPaths","uniqOverridenKeysPath","duplicatePaths","overridenKey","keyIndex","findPath","envVar","onChangeEnvironmentName","environmentVariables","newPf","resetDeploymentType","validatePersistedFolders","persistedFoldersUseExistingVolumes","onChangePersistedFolderPath","onChangeExistingVolumeSelection","existingVolumes","onChangePlacement","onChangePlacementLabelValidate","filteredIngresses","onChangePublishedPorts","onChangePortMappingContainerPort","onChangePortMappingNodePort","onChangePortMappingIngressRoute","onChangePortMappingLoadBalancer","onChangePortProtocol","nodePorts","ingressHostnames","ingressRoutes","newRoutes","toDelRoutes","allRoutes","loadBalancerPorts","newPorts","hasFolders","hasRWOOnly","isIsolated","storageOptions","sliders","instances","maxCpu","useLoadBalancer","changes","savedFormValues","editChanges","isEditAndStatefulSet","isEditAndExistingPersistedFolder","hasAvailableVolumes","toDelPorts","toKeepPorts","scalable","supportScalableReplicaDeployment","global","supportGlobalDeployment","replica","replicated","overflow","resourceReservationsOverflow","autoScalerOverflow","invalid","hasNoChanges","isEditAndNoChangesMade","nonScalable","isNonScalable","notInternalNoPorts","isNotInternalAndHasNoPublishedPorts","disableLoadBalancerEdit","isEditAndNotNewPublishedPort","isEditLBWithPorts","isNewAndNotFirst","resourcePoolHasQuota","minCpu","minMemory","filteredVolumes","isUnused","isRWX","publishViaIngressEnabled","refreshStacks","refreshConfigurations","refreshApplications","refreshIngresses","refreshVolumes","onChangeName","clearConfigurations","resetPersistedFolders","resetPublishedPorts","updateSliders","refreshNamespaceData","resetFormValues","availableSizeUnits","UseLoadBalancer","UseServerMetrics","resourcePool","generateNodeLabelsFromNodes","getApplication","applicationToFormValues","OriginalIngressClasses","dockerHub","isDockerAuthenticated","computePlacements","UnmatchedNodeSelectorLabels","AcceptsApplication","unmatchedTerms","unmatchedExpressions","exists","isIn","UnmatchedNodeAffinities","computeAffinities","UnmetTaints","matchKeyMatchValueMatchEffect","matchKeyAnyValueMatchEffect","matchKeyMatchValueAnyEffect","matchKeyAnyValueAnyEffect","anyKeyAnyValueAnyEffect","computeTolerations","KubernetesApplicationController","getApplicationAsync","getEvents","getEventsAsync","redeployApplicationAsync","rollbackApplicationAsync","copyLoadBalancerIP","selectTab","eventWarningCount","eventsLoading","warningCount","dataLoading","allContainers","associateAllContainersAndApplication","expandedNote","SelectedRevision","useIngress","placementWarning","DisplayedPanel","KubernetesApplicationLogsController","getApplicationLogsAsync","applicationLogs","KubernetesApplicationStatsController","CPUUsage","getStats","timestamp","nodeCPU","getMetrics","podRaw","KubernetesClusterController","getNodesAsync","getComponentStatus","getComponentStatusAsync","componentStatuses","hasUnhealthyComponentStatus","systemEndpoints","ep","kubernetesEndpoint","ips","CPULimit","applicationsLoading","nodeNames","resourceReservation","computeResourceReservation","KubernetesNodeController","updateNodeAsync","drainNodeAsync","duplicateTaintKeys","hasDuplicateTaintKeys","onChangeTaint","onChangeTaintKey","duplicateLabelKeys","hasDuplicateLabelKeys","onChangeLabel","onChangeLabelKey","availabilities","eviction","isDrainOperation","isContainPortainer","isNoChangesMade","isDrainError","nodeToFormValues","drainNode","taintsWarning","computeTaintsWarning","labelsWarning","computeLabelsWarning","cordonWarning","computeCordonWarning","drainWarning","computeDrainWarning","availableEffects","computeUsedLabels","reorderLabels","KubernetesNodeStatsController","KubernetesConfigurationsController","getConfigurations","getConfigurationsAsync","refreshCallbackAsync","configurationsLoading","setConfigurationsUsed","KubernetesCreateConfigurationController","createConfigurationAsync","filteredConfigurations","alreadyExist","uniqueCheck","isDataValid","KubernetesConfigurationController","getConfigurationAsync","updateConfiguration","updateConfigurationAsync","plural","configurationLoading","oldDataYaml","configName","usedDataKeys","flatMap","getConfiguration","tagUsedDataKeys","KubernetesConfigureController","IngressClassTypes","configureAsync","valid","onChangeIngressClass","ingressClasses","ingressesToDel","oldEndpointID","allResourcePools","isDefaultNamespace","respons","metrics","userClick","pending","isServerRunning","transformFormValues","removeIngressesAcrossNamespaces","assignFormValuesToEndpoint","storagePromises","oldStorageClasses","modifiedEndpoint","setEndpoints","displayConfigureClassPanel","availableAccessModes","sc","access","KubernetesDashboardController","KubernetesDeployController","deployAsync","getNamespacesAsync","isGitFormInvalid","BuildMethod","FilePathInRepository","isWebEditorInvalid","EditorContent","errorLog","stripAnsi","tabLogsDisabled","BuildMethods","ComposeFormat","DeployType","ManifestDeployTypes","kubernetesDeploy","displayErrorLog","getNamespaces","KubernetesResourcePoolAccessController","AccessService","authorizeAccessAsync","unauthorizeAccessAsync","unauthorizeAccess","multiselectOutput","getAccess","GroupId","endpointAccesses","initAccessConfigMap","parseJSONData","authorizedUsersAndTeams","accessConfigMap","poolAccesses","availableUsersAndTeams","newAccesses","modifiyNamespaceAccesses","updateAccess","KubernetesCreateResourcePoolController","createResourcePoolAsync","getResourcePoolsAsync","getIngressesAsync","ingressHosts","hostnames","hostnamesWithoutRemoved","allHosts","allIngresses","formDuplicates","count","hostFV","hostIdx","onChangeIngressHostname","isQuotaValid","isAlreadyExist","checkDefaults","canUseIngress","getResourcePools","getIngresses","ingressClassesToFormValues","KubernetesResourcePoolController","ResourceQuotaDefaults","createResourceQuotaAsync","updateResourcePoolAsync","otherIngresses","hostsWithoutRemoved","duplicatedHostnames","Duplicate","willBeDeleted","warnings","hasResourceQuotaBeenReduced","messages","displayedMessage","ingressesLoading","cpuUsed","memoryUsed","quotaToResourcePoolFormValues","isEditable","KubernetesResourcePoolsController","KubernetesStackLogsController","generateLogsPromise","generateAppPromise","getStackLogsAsync","Pod","Logs","Application","filteredApplications","logsPromises","Color","Line","AppName","stackLogs","dataLogs","KubernetesSummaryController","toggleSummary","generateResourceSummaryList","resourceAction","article","expandedTemplate","storeKubernetesSummaryToggle","getConfigurationResources","getNamespaceResources","getApplicationResources","toggleValue","getKubernetesSummaryToggle","KubernetesVolumeController","getVolumeAsync","updateVolumeAsync","volumeSize","volumeSizeUnit","oldVolumeSize","errors","redeploy","oldVolume","confirmRedeploy","increaseSize","volumeSharedAccessPolicy","volumeSharedAccessPolicyTooltip","policy","buildStorages","storages","formatBytes","computeSize","KubernetesVolumesController","getVolumesAsync","inheritFrom","changeOrderBy","orderField","entryClick","emptyDatasetMessage","formData","hideTitle","UserService","TeamService","availableTeams","availableUsers","retrieveOwnershipDetails","authorizedUsers","authorizedTeams","setOwnership","setAuthorizedUsersAndTeams","resourceId","disableOwnershipChange","ResourceControlHelper","RCTS","RCTI","displayAccessControlPanel","canEditOwnership","editOwnership","hasRC","inheritedVolume","inheritedContainer","inheritedFromStack","hasSpecialDisable","confirmUpdateOwnership","confirmAccessControlUpdate","applyResourceControlChange","retrieveUserPermissionsOnResource","isPartOfRestrictedUsers","isLeaderOfAnyRestrictedTeams","canChangeOwnershipToTeam","accessControlledEntity","entityType","PorAccessManagementController","entity","oldUserAccessPolicies","oldTeamAccessPolicies","updatedUserAccesses","updatedTeamAccesses","accessPolicies","generateAccessPolicies","userAccessPolicies","teamAccessPolicies","selectedUserAccesses","selectedTeamAccesses","selectedAccesses","AssociatedEndpointsSelectorController","hasBackendPagination","link","element","spinning","placeholder","yml","CodeMirrorService","editorElement","editor","applyCodeMirrorOnElement","setValue","onSelectClick","showSwarmStacks","onDeleteClick","PAGINATION_MAX_ITEMS","selectAll","displayTextFilter","resetSelectionState","setDataTableOrder","selectItem","originalEvent","shiftKey","firstClickedItem","firstItemIndex","lastItemIndex","itemsInRange","isBetween","showTextFilter","getPaginationLimit","$onDestroy","startRepeater","accessManagement","canBrowse","createEnabled","showActiveStacks","showUnactiveStacks","updated","allOrphanedStacks","onFilterChange","onSettingsAllOrphanedStacksChange","authenticationMethod","onSelect","totalFilteredEndpoints","filteredEndpoints","changesObj","handleEndpointsChange","paginationChangedAction","keywords","statusString","lowerCaseKeyword","GroupName","tagId","frontEndpointFilter","pageChangeHandler","dashboardAction","snapshotAction","showSnapshotAction","editAction","sortGroups","groupEndpoints","availableGroups","TLSConfig","CACert","cert","environmentVariablesSimpleModeItem","onRemove","onSwitchModeClick","explanation","availableTags","onCreateTag","porSwitchField","tooltip","disabled","porSwitch","disableSelection","retrieveRegistries","createRegistries","projects","resetDefaults","createTemplate","advanced","stackRedeployGitForm","showTypeSelector","collapseTemplate","collapseContainer","collapseStack","collapseEnv","addEnvVar","default","removeEnvVar","addEnvVarValue","removeEnvVarValue","changeEnvVarType","onPageChanged","paginationState","onPaginationLimitChanged","tagIdsToTagNames","groupIdToGroupName","showTags","showGroups","requires","showRefreshButton","snapshotTime","triggerSnapshot","snapshotEndpoint","dismissAction","motd","attrs","which","preventDefault","$eval","onEnterKey","goTo","products","ceil","step","SliderController","buildOptions","translate","sliderId","showSelectionBar","enforceStep","isFormValidForMigration","duplicationInProgress","migrationInProgress","isFormValidForDuplication","yamlError","duplicateStack","onDuplicate","migrateStack","onMigrate","isMigrationButtonDisabled","currentEndpointId","onCreate","allowCreate","TagSelectorController","selectedValue","selectedTags","noResult","$item","searchValue","exactTag","generateSelectedTags","tagsValue","modelValue","typeLabel","TemplateListController","TemplateService","templateFile","stackfile","selectedCategory","showContainerTemplates","updateCategories","availableCategories","filterByCategory","filterByType","duplicateTemplate","duplicateTemplateAsync","selectAction","customStyle","end","String","left","right","pair","separator","findAssociatedGroup","mapGroupNameToEndpoint","PREDEFINED_NETWORKS","userIds","teamIds","userMemberships","isTeamLeader","membership","getExternalStacksFromLabel","getExternalStacksFromContainers","getExternalStacksFromServices","validateYAML","containerNames","yamlObject","duplicateContainers","portConfiguration","exposedPorts","labelsArray","templateEnvironment","interactiveFlag","consoleConfiguration","generatedVolumesPile","getParameter","param","reduce","keyValStr","cleanParameters","origin","pathname","API_ENDPOINT_WEBHOOKS","displayPort","canBeOffline","setOfflineMode","ResourceControlCreatePayload","ResourceControlUpdatePayload","authUrl","accessTokenUrl","resourceUrl","userIdentifier","scopes","providerAuthURL","getProviderByURL","API_ENDPOINT_OAUTH","validate","API_ENDPOINT_AUTH","login","API_ENDPOINT_BACKUP","headersGetter","getS3Settings","subResource","saveS3Settings","exportS3Backup","restoreS3Backup","getBackupStatus","CustomTemplatesFactory","API_ENDPOINT_CUSTOM_TEMPLATES","API_ENDPOINT_DOCKERHUB","dockerhubLimits","API_ENDPOINT_REGISTRIES","baseUrl","repositories","API_ENDPOINT_ENDPOINT_GROUPS","deregister","API_ENDPOINT_MOTD","configure","API_ENDPOINT_RESOURCE_CONTROLS","API_ENDPOINT_SETTINGS","publicSettings","checkLDAPConnectivity","API_ENDPOINT_STACKS","associate","swarmId","orphanedRunning","external","getStackFile","migrate","API_ENDPOINT_STATUS","API_ENDPOINT_SUPPORT","API_ENDPOINT_TAGS","API_ENDPOINT_TEAMS","queryMemberships","API_ENDPOINT_TEAM_MEMBERSHIPS","API_ENDPOINT_TEMPLATES","API_ENDPOINT_USERS","updatePassword","checkAdminUser","initAdminUser","_mapAccessData","authorizedPolicies","inheritedPolicies","availableAccesses","authorizedAccesses","authorized","inherited","getAccesses","authorizedUserPolicies","authorizedTeamPolicies","inheritedUserPolicies","inheritedTeamPolicies","userAccesses","teamAccesses","userAccessData","teamAccessData","accessData","accessesAsync","selectedRoleId","newUserPolicies","newTeamPolicies","Backup","uploadBackup","CustomTemplateServiceFactory","CustomTemplates","DockerHub","endpointType","uploadTLSFilesForEndpoint","notify","groupID","endpointURL","createEndpoint","creationType","TLSSkipClientVerify","TLSCAFile","checkinInterval","createAzureEndpoint","EndpointGroups","LegacyExtensions","Motd","Registries","getURL","retrievePorRegistryModelFromRepositoryWithRegistries","lastIndex","retrievePorRegistryModelFromRepositoryAsync","credentials","serveraddress","deleteRegistry","updateRegistry","configureRegistry","registryManagementConfigurationModel","createRegistry","createGitlabRegistries","updateResourceControl","rcID","ownershipParameters","RCViewModelToOwnershipParameters","rcType","RCPanelDataToOwnershipParameters","resourceID","SubResourceIds","createResourceControl","RCFormDataToOwnershipParameters","retrieveAuthorizedUsers","retrieveAuthorizedTeams","userID","isAdministrator","memberships","Settings","Stack","StackHelper","SwarmService","gitConfig","kubernetesDeployAsync","migrateSwarmStack","targetEndpointId","SwarmID","migrateComposeStack","compose","includeOrphanedStacks","queries","composeStacks","IncludeOrphanedStacks","swarmStacks","externalSwarmStacks","externalComposeStacks","unionStacks","externalStacks","externalStack","includeExternalStacks","createComposeStackFromFileUpload","createComposeStack","createSwarmStackFromFileUpload","createSwarmStack","createComposeStackFromGitRepository","createSwarmStackFromGitRepository","Support","createTagAsync","createTag","deleteTag","TeamMemberships","teamId","TeamMembershipService","leaderIds","teamMembershipQueries","createMembership","Templates","TemplateHelper","repositoryUrl","composeFilePathInRepository","createTemplateConfiguration","containerConfiguration","getDefaultContainerConfiguration","EnvToStringArray","portArrayToPortConfiguration","getConsoleConfiguration","updateContainerConfigurationWithLabels","createContainerConfiguration","updateContainerConfigurationWithVolumes","createVolumeBindings","UserHelper","includeAdministrators","filterNonAdministratorUsers","currentPassword","newPassword","NewPassword","Webhooks","serviceID","asyncFunc","def","wrapper","Auth","OAuth","jwtHelper","initAsync","jwt","setUser","logoutAsync","clearSessionStorage","clean","cleanAuthData","storeLoginStateUUID","OAuthLoginAsync","loginAsync","storeJWT","tokenPayload","decodeToken","OAuthLogin","isTokenExpired","defaultChartOptions","pos","tooltipCallback","scalesCallback","isStacked","datasetLabel","stacked","LimitChartItems","CHART_LIMIT","byteBasedTooltipLabel","byteBasedAxisLabel","percentageBasedAxisLabel","percentageBasedTooltipLabel","CreateChart","memoryValue","cacheValue","codeMirrorGenericOptions","lineNumbers","codeMirrorYAMLOptions","gutters","lint","extraKeys","Tab","spaces","getOption","replaceSelection","yamlLint","CodeMirror","fromTextArea","setSize","DatatableServiceFactory","TEXT_FILTER_KEY_PREFIX","storeDataTableSettings","storeDataTableFilters","storeDataTableOrder","storeDataTableExpandedItems","storeColumnVisibilitySettings","setDataTableSelectedItems","storeDataTableSelectedItems","getDataTableSelectedItems","$uiRouterGlobals","getEndpointID","getEndpointPublicURL","getOfflineMode","OfflineMode","cleanEndpointData","getUrlEndpointID","storeEndpointID","storeEndpointPublicURL","storeEndpoints","isOffline","storeOfflineMode","RetryCount","RetryInterval","registryId","EndpointCreationType","GroupID","CheckinInterval","AzureApplicationID","AzureTenantID","uploadLDAPTLSFiles","queue","validator","registryAuthentication","headerValue","agentTargetQueue","agentTargetLastValue","agentManagerOperation","LegacyExtensionService","initStoridgeExtension","storidgeAPIURL","registerStoridgeExtension","registerStoridgeUsingSwarmManagerIP","deregisterStoridgeExtension","endpointAPIVersion","localStorageService","getLoginStateUUID","storeEndpointState","getEndpointState","storeApplicationState","getApplicationState","storeUIState","getUIState","deleteJWT","storePaginationLimit","storeDataTableTextFilters","storeJobImage","getJobImage","storeToolbarToggle","getToolbarToggle","storeLogoutReason","getLogoutReason","cleanLogoutReason","clearAll","$sanitize","applyBoxCSS","box","confirmButtons","customPrompt","optionToggled","bootbox","prompt","inputType","inputOptions","prepend","prop","enlargeImage","dialog","onEscape","cancelRegistryRepositoryAction","confirmEndpointSnapshot","fallbackText","paginationLimit","storedLimit","_getProjectsPage","page","projectsAsync","_getRepositoriesPage","repositoriesAsync","projectId","InfoHelper","SettingsService","StatusService","APPLICATION_CACHE_VALIDITY","$analytics","manager","UI","dismissedInfoPanels","dismissedInfoHash","loadApplicationState","enableTelemetry","snapshotInterval","enableEdgeComputeFeatures","assignStateFromStatusAndSettings","setOptOut","setVersionInfo","versionInfo","versionStatus","dismissImportantInformation","updateLogo","logoURL","updateSnapshotInterval","updateEnableEdgeComputeFeatures","updateEnableTelemetry","UIState","endpointState","Snaphosts","determineEndpointMode","endpointExtensions","assignExtensions","confirmPassword","updateUserPassword","AuthenticationController","URLHelper","showOAuthLogin","showStandardLogin","AuthenticationError","loginInProgress","OAuthProvider","checkForEndpointsAsync","checkForLatestVersionAsync","postLoginSteps","oAuthLoginAsync","internalLoginAsync","authenticateUserAsync","manageOauthCodeReturn","authEnabledFlowAsync","generateOAuthLoginURI","LoginURI","generateState","savedUUID","hasValidState","administratorExists","determineOauthProvider","EndpointAccessController","updateAccessAsync","EnvironmentType","PlatformType","deploymentTab","availableEdgeAgentCheckinOptions","deployCommands","kubeLoadBalancer","kubeNodePort","agentLinux","agentWindows","onCreateTagAsync","tagName","createRemoteEndpoint","SecurityFormData","copyAgentCommand","setDefaultPortainerInstanceURL","resetEndpointURL","addDockerEndpoint","ConnectSocket","SocketPath","createLocalEndpoint","securityData","addKubernetesEndpoint","createLocalKubernetesEndpoint","addAgentEndpoint","addEdgeAgentEndpoint","addAzureEndpoint","buildWindowsStandaloneCommand","edgeId","edgeKey","buildLinuxSwarmCommand","buildWindowsSwarmCommand","azureEndpoint","agentEndpoint","edgeEndpoint","platformType","copyEdgeAgentDeploymentCommand","randomEdgeID","EdgeKey","copyEdgeAgentKey","AzureCredentials","ApplicationID","TenantID","AuthenticationKey","evt","edgeKeyDetails","keyInformation","decodedKey","instanceURL","tunnelServerAddr","decodeEdgeKey","dockerCommands","linuxStandalone","windowsStandalone","linuxSwarm","windowsSwarm","EndpointsController","deleteEndpoint","GroupsController","deleteGroup","MotdService","connectingToEdgeEndpoint","goToEdit","goToDashboard","snapshotEndpoints","BackupService","waitPortainerRestart","ConfirmPassword","showInitPassword","showRestorePortainer","togglePanel","createAdminUser","initAdministrator","backupInProgress","BackupFile","InitEndpointController","createLocalEndpointAsync","createLocalKubernetesEndpointAsync","createAgentEndpointAsync","endpointSections","createAgentEndpoint","routeName","LogoutController","getWidth","innerWidth","newValue","toggleSidebar","RegistryGitlabService","useDefaultGitlabConfiguration","selectQuayRegistry","selectAzureRegistry","selectCustomRegistry","selectGitlabRegistry","retrieveGitlabRegistries","gitlabProjects","gitlab","overrideConfiguration","registryID","dockerHubPassword","nonBrowsableUrls","updateDockerHub","deleteSelectedRegistries","addLDAPDefaultPort","tlsEnabled","successfulConnectivityCheck","failedConnectivityCheck","connectivityCheckInProgress","availableUserSessionTimeoutOptions","AnonymousMode","StartTLS","UserNameAttribute","isOauthEnabled","addSearchConfiguration","removeSearchConfiguration","addGroupSearchConfiguration","removeGroupSearchConfiguration","LDAPConnectivityCheck","uploadRequired","saveSettings","updateSettings","customLogo","passwordProtect","removeFilteredContainerLabel","addFilteredContainerLabel","downloadBackup","saveApplicationSettings","checkPermissions","isLeader","uiVersion","removeInvalidEnvVars","uploadYamlValidationError","composeSyntaxMaxVersion","ComposeSyntaxMaxVersion","getContainerNames","editorYamlValidationError","removeEnvironmentVariable","stopStackAsync","startStackAsync","loadStack","resourcesPromise","retrieveSwarmStackResources","retrieveComposeStackResources","isSwarm","assignSwarmStackResources","assignComposeStackResources","stackFilter","loadExternalStack","loadExternalSwarmStack","loadExternalComposeStack","regular","orphaned","migrateRequest","originalEndpointId","removeStack","associateStack","stopStack","startStack","StacksController","loadCreateEnabled","TagsController","checkNameValidity","$setValidity","removeUserFromArray","pagination_count_users","pagination_count_members","sortTypeUsers","sortReverseUsers","teamMembers","leaderCount","orderUsers","changePaginationCountUsers","sortTypeGroupMembers","sortReverseGroupMembers","orderGroupMembers","changePaginationCountGroupMembers","deleteTeam","promoteToLeader","updateMembership","MembershipId","TeamRole","demoteToMember","addAllUsers","addUser","removeAllUsers","deleteMembership","removeUser","member","assignUsersAndMembers","Leaders","team_name","addTeam","teamName","createTeam","deleteSelectedTeams","userLeadingTeams","createContainerFromTemplate","templateConfiguration","generatedVolumeCount","determineRequiredGeneratedVolumeCount","generatedVolumeIds","createXAutoGeneratedLocalVolumes","createStackFromTemplate","createComposeStackFromTemplate","updatePasswordError","Administrator","deleteUser","updateUser","oldUsername","isSubmitEnabled","isDeleteDisabled","userCreationError","validUsername","checkUsernameValidity","toLocaleLowerCase","createUser","deleteSelectedUsers","assignTeamLeaders"],"mappings":"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","file":"main.c6c6209333f2cca389f5.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t0: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([498,1]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export * from './constants';\n\n/**\n * KubernetesApplication Model (Composite)\n */\nconst _KubernetesApplication = Object.freeze({\n Id: '',\n Name: '',\n StackName: '',\n ApplicationOwner: '',\n ApplicationName: '',\n ResourcePool: '',\n Image: '',\n CreationDate: 0,\n Pods: [],\n Containers: [],\n Limits: {},\n ServiceType: '',\n ServiceId: '',\n ServiceName: '',\n HeadlessServiceName: undefined, // only used for StatefulSet\n LoadBalancerIPAddress: undefined, // only filled when bound service is LoadBalancer and state is available\n PublishedPorts: [],\n Volumes: [],\n Env: [],\n PersistedFolders: [], // KubernetesApplicationPersistedFolder list\n ConfigurationVolumes: [], // KubernetesApplicationConfigurationVolume list\n DeploymentType: 'Unknown',\n DataAccessPolicy: 'Unknown',\n ApplicationType: 'Unknown',\n RunningPodsCount: 0,\n TotalPodsCount: 0,\n Yaml: '',\n Note: '',\n Revisions: undefined,\n CurrentRevision: undefined,\n Raw: undefined, // only filled when inspecting app details / create / edit view (never filled in multiple-apps views)\n AutoScaler: undefined, // only filled if the application has an HorizontalPodAutoScaler bound to it\n});\n\nexport class KubernetesApplication {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplication)));\n }\n}\n\n/**\n * KubernetesApplicationPersistedFolder Model\n */\nconst _KubernetesApplicationPersistedFolder = Object.freeze({\n MountPath: '',\n PersistentVolumeClaimName: '',\n HostPath: '',\n});\n\nexport class KubernetesApplicationPersistedFolder {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationPersistedFolder)));\n }\n}\n\n/**\n * KubernetesApplicationConfigurationVolume Model\n */\nconst _KubernetesApplicationConfigurationVolume = Object.freeze({\n fileMountPath: '',\n rootMountPath: '',\n configurationKey: '',\n configurationName: '',\n});\n\nexport class KubernetesApplicationConfigurationVolume {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationConfigurationVolume)));\n }\n}\n\n/**\n * KubernetesApplicationPort Model\n */\nconst _KubernetesApplicationPort = Object.freeze({\n IngressRules: [], // KubernetesIngressRule[]\n NodePort: 0,\n TargetPort: 0,\n Port: 0,\n Protocol: '',\n});\n\nexport class KubernetesApplicationPort {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationPort)));\n }\n}\n","export default class PortainerError {\n constructor(msg, err) {\n this.msg = msg;\n this.err = err;\n }\n}\n","/**\n * Generic params\n */\nexport function KubernetesCommonParams() {\n return {\n id: '',\n };\n}\n","import _ from 'lodash-es';\nimport { KubernetesPortMapping, KubernetesPortMappingPort } from 'Kubernetes/models/port/models';\nimport { KubernetesServiceTypes } from 'Kubernetes/models/service/models';\nimport { KubernetesConfigurationTypes } from 'Kubernetes/models/configuration/models';\nimport {\n KubernetesApplicationAutoScalerFormValue,\n KubernetesApplicationConfigurationFormValue,\n KubernetesApplicationConfigurationFormValueOverridenKey,\n KubernetesApplicationConfigurationFormValueOverridenKeyTypes,\n KubernetesApplicationEnvironmentVariableFormValue,\n KubernetesApplicationPersistedFolderFormValue,\n KubernetesApplicationPlacementFormValue,\n KubernetesApplicationPublishedPortFormValue,\n} from 'Kubernetes/models/application/formValues';\nimport {\n KubernetesApplicationEnvConfigMapPayload,\n KubernetesApplicationEnvPayload,\n KubernetesApplicationEnvSecretPayload,\n KubernetesApplicationVolumeConfigMapPayload,\n KubernetesApplicationVolumeEntryPayload,\n KubernetesApplicationVolumeMountPayload,\n KubernetesApplicationVolumePersistentPayload,\n KubernetesApplicationVolumeSecretPayload,\n} from 'Kubernetes/models/application/payloads';\nimport KubernetesVolumeHelper from 'Kubernetes/helpers/volumeHelper';\nimport { KubernetesApplicationDeploymentTypes, KubernetesApplicationPlacementTypes } from 'Kubernetes/models/application/models';\nimport { KubernetesPodAffinity, KubernetesPodNodeAffinityNodeSelectorRequirementOperators } from 'Kubernetes/pod/models';\nimport {\n KubernetesNodeSelectorRequirementPayload,\n KubernetesNodeSelectorTermPayload,\n KubernetesPodNodeAffinityPayload,\n KubernetesPreferredSchedulingTermPayload,\n} from 'Kubernetes/pod/payloads/affinities';\n\nclass KubernetesApplicationHelper {\n /* #region UTILITY FUNCTIONS */\n static isExternalApplication(application) {\n return !application.ApplicationOwner;\n }\n\n static associatePodsAndApplication(pods, selector) {\n return _.filter(pods, ['metadata.labels', selector.matchLabels]);\n }\n\n static associateContainerPersistedFoldersAndConfigurations(app, containers) {\n _.forEach(containers, (container) => {\n container.PersistedFolders = _.without(\n _.map(app.PersistedFolders, (pf) => {\n if (pf.MountPath && _.includes(_.map(container.VolumeMounts, 'mountPath'), pf.MountPath)) {\n return pf;\n }\n }),\n undefined\n );\n\n container.ConfigurationVolumes = _.without(\n _.map(app.ConfigurationVolumes, (cv) => {\n if (cv.rootMountPath && _.includes(_.map(container.VolumeMounts, 'mountPath'), cv.rootMountPath)) {\n return cv;\n }\n }),\n undefined\n );\n });\n }\n\n static associateContainersAndApplication(app) {\n if (!app.Pods || app.Pods.length === 0) {\n return [];\n }\n const containers = app.Pods[0].Containers;\n KubernetesApplicationHelper.associateContainerPersistedFoldersAndConfigurations(app, containers);\n return containers;\n }\n\n static associateAllContainersAndApplication(app) {\n const containers = _.flatMap(_.map(app.Pods, 'Containers'));\n KubernetesApplicationHelper.associateContainerPersistedFoldersAndConfigurations(app, containers);\n return containers;\n }\n\n static portMappingsFromApplications(applications) {\n const res = _.reduce(\n applications,\n (acc, app) => {\n if (app.PublishedPorts.length > 0) {\n const mapping = new KubernetesPortMapping();\n mapping.Name = app.Name;\n mapping.ResourcePool = app.ResourcePool;\n mapping.ServiceType = app.ServiceType;\n mapping.LoadBalancerIPAddress = app.LoadBalancerIPAddress;\n mapping.ApplicationOwner = app.ApplicationOwner;\n\n mapping.Ports = _.map(app.PublishedPorts, (item) => {\n const port = new KubernetesPortMappingPort();\n port.Port = mapping.ServiceType === KubernetesServiceTypes.NODE_PORT ? item.NodePort : item.Port;\n port.TargetPort = item.TargetPort;\n port.Protocol = item.Protocol;\n port.IngressRules = item.IngressRules;\n return port;\n });\n acc.push(mapping);\n }\n return acc;\n },\n []\n );\n return res;\n }\n /* #endregion */\n\n /* #region ENV VARIABLES FV <> ENV */\n static generateEnvFromEnvVariables(envVariables) {\n _.remove(envVariables, (item) => item.NeedsDeletion);\n const env = _.map(envVariables, (item) => {\n const res = new KubernetesApplicationEnvPayload();\n res.name = item.Name;\n if (item.Value === undefined) {\n delete res.value;\n } else {\n res.value = item.Value;\n }\n return res;\n });\n return env;\n }\n\n static generateEnvVariablesFromEnv(env) {\n const envVariables = _.map(env, (item) => {\n if (item.valueFrom) {\n return;\n }\n const res = new KubernetesApplicationEnvironmentVariableFormValue();\n res.Name = item.name;\n res.Value = item.value;\n res.IsNew = false;\n res.NameIndex = item.name;\n return res;\n });\n return _.without(envVariables, undefined);\n }\n /* #endregion */\n\n /* #region CONFIGURATIONS FV <> ENV & VOLUMES */\n static generateConfigurationFormValuesFromEnvAndVolumes(env, volumes, configurations) {\n const finalRes = _.flatMap(configurations, (cfg) => {\n const filterCondition = cfg.Type === KubernetesConfigurationTypes.CONFIGMAP ? 'valueFrom.configMapKeyRef.name' : 'valueFrom.secretKeyRef.name';\n\n const cfgEnv = _.filter(env, [filterCondition, cfg.Name]);\n const cfgVol = _.filter(volumes, { configurationName: cfg.Name });\n if (!cfgEnv.length && !cfgVol.length) {\n return;\n }\n const keys = _.reduce(\n _.keys(cfg.Data),\n (acc, k) => {\n const keyEnv = _.filter(cfgEnv, { name: k });\n const keyVol = _.filter(cfgVol, { configurationKey: k });\n const key = {\n Key: k,\n Count: keyEnv.length + keyVol.length,\n Sum: _.concat(keyEnv, keyVol),\n EnvCount: keyEnv.length,\n VolCount: keyVol.length,\n };\n acc.push(key);\n return acc;\n },\n []\n );\n\n const max = _.max(_.map(keys, 'Count'));\n const overrideThreshold = max - _.max(_.map(keys, 'VolCount'));\n const res = _.map(new Array(max), () => new KubernetesApplicationConfigurationFormValue());\n _.forEach(res, (item, index) => {\n item.SelectedConfiguration = cfg;\n const overriden = index >= overrideThreshold;\n if (overriden) {\n item.Overriden = true;\n item.OverridenKeys = _.map(keys, (k) => {\n const fvKey = new KubernetesApplicationConfigurationFormValueOverridenKey();\n fvKey.Key = k.Key;\n if (!k.Count) {\n // !k.Count indicates k.Key is new added to the configuration and has not been loaded to the application yet\n fvKey.Type = KubernetesApplicationConfigurationFormValueOverridenKeyTypes.NONE;\n } else if (index < k.EnvCount) {\n fvKey.Type = KubernetesApplicationConfigurationFormValueOverridenKeyTypes.ENVIRONMENT;\n } else {\n fvKey.Type = KubernetesApplicationConfigurationFormValueOverridenKeyTypes.FILESYSTEM;\n fvKey.Path = k.Sum[index].rootMountPath;\n }\n return fvKey;\n });\n }\n });\n return res;\n });\n return _.without(finalRes, undefined);\n }\n\n static generateEnvOrVolumesFromConfigurations(app, configurations) {\n let finalEnv = [];\n let finalVolumes = [];\n let finalMounts = [];\n\n _.forEach(configurations, (config) => {\n const isBasic = config.SelectedConfiguration.Type === KubernetesConfigurationTypes.CONFIGMAP;\n\n if (!config.Overriden) {\n const envKeys = _.keys(config.SelectedConfiguration.Data);\n _.forEach(envKeys, (item) => {\n const res = isBasic ? new KubernetesApplicationEnvConfigMapPayload() : new KubernetesApplicationEnvSecretPayload();\n res.name = item;\n if (isBasic) {\n res.valueFrom.configMapKeyRef.name = config.SelectedConfiguration.Name;\n res.valueFrom.configMapKeyRef.key = item;\n } else {\n res.valueFrom.secretKeyRef.name = config.SelectedConfiguration.Name;\n res.valueFrom.secretKeyRef.key = item;\n }\n finalEnv.push(res);\n });\n } else {\n const envKeys = _.filter(config.OverridenKeys, (item) => item.Type === KubernetesApplicationConfigurationFormValueOverridenKeyTypes.ENVIRONMENT);\n _.forEach(envKeys, (item) => {\n const res = isBasic ? new KubernetesApplicationEnvConfigMapPayload() : new KubernetesApplicationEnvSecretPayload();\n res.name = item.Key;\n if (isBasic) {\n res.valueFrom.configMapKeyRef.name = config.SelectedConfiguration.Name;\n res.valueFrom.configMapKeyRef.key = item.Key;\n } else {\n res.valueFrom.secretKeyRef.name = config.SelectedConfiguration.Name;\n res.valueFrom.secretKeyRef.key = item.Key;\n }\n finalEnv.push(res);\n });\n\n const volKeys = _.filter(config.OverridenKeys, (item) => item.Type === KubernetesApplicationConfigurationFormValueOverridenKeyTypes.FILESYSTEM);\n const groupedVolKeys = _.groupBy(volKeys, 'Path');\n _.forEach(groupedVolKeys, (items, path) => {\n const volumeName = KubernetesVolumeHelper.generatedApplicationConfigVolumeName(app.Name);\n const configurationName = config.SelectedConfiguration.Name;\n const itemsMap = _.map(items, (item) => {\n const entry = new KubernetesApplicationVolumeEntryPayload();\n entry.key = item.Key;\n entry.path = item.Key;\n return entry;\n });\n\n const mount = isBasic ? new KubernetesApplicationVolumeMountPayload() : new KubernetesApplicationVolumeMountPayload(true);\n const volume = isBasic ? new KubernetesApplicationVolumeConfigMapPayload() : new KubernetesApplicationVolumeSecretPayload();\n\n mount.name = volumeName;\n mount.mountPath = path;\n volume.name = volumeName;\n if (isBasic) {\n volume.configMap.name = configurationName;\n volume.configMap.items = itemsMap;\n } else {\n volume.secret.secretName = configurationName;\n volume.secret.items = itemsMap;\n }\n\n finalMounts.push(mount);\n finalVolumes.push(volume);\n });\n }\n });\n app.Env = _.concat(app.Env, finalEnv);\n app.Volumes = _.concat(app.Volumes, finalVolumes);\n app.VolumeMounts = _.concat(app.VolumeMounts, finalMounts);\n return app;\n }\n /* #endregion */\n\n /* #region PUBLISHED PORTS FV <> PUBLISHED PORTS */\n static generatePublishedPortsFormValuesFromPublishedPorts(serviceType, publishedPorts, ingress) {\n const generatePort = (port, rule) => {\n const res = new KubernetesApplicationPublishedPortFormValue();\n res.IsNew = false;\n if (rule) {\n res.IngressName = rule.IngressName;\n res.IngressRoute = rule.Path;\n res.IngressHost = rule.Host;\n res.IngressHosts = ingress && ingress.find((i) => i.Name === rule.IngressName).Hosts;\n }\n res.Protocol = port.Protocol;\n res.ContainerPort = port.TargetPort;\n if (serviceType === KubernetesServiceTypes.LOAD_BALANCER) {\n res.LoadBalancerPort = port.Port;\n res.LoadBalancerNodePort = port.NodePort;\n } else if (serviceType === KubernetesServiceTypes.NODE_PORT) {\n res.NodePort = port.NodePort;\n }\n return res;\n };\n\n const finalRes = _.flatMap(publishedPorts, (port) => {\n if (port.IngressRules.length) {\n return _.map(port.IngressRules, (rule) => generatePort(port, rule));\n }\n return generatePort(port);\n });\n return finalRes;\n }\n /* #endregion */\n\n /* #region AUTOSCALER FV <> HORIZONTAL POD AUTOSCALER */\n static generateAutoScalerFormValueFromHorizontalPodAutoScaler(autoScaler, replicasCount) {\n const res = new KubernetesApplicationAutoScalerFormValue();\n if (autoScaler) {\n res.IsUsed = true;\n res.MinReplicas = autoScaler.MinReplicas;\n res.MaxReplicas = autoScaler.MaxReplicas;\n res.TargetCPUUtilization = autoScaler.TargetCPUUtilization;\n res.ApiVersion = autoScaler.ApiVersion;\n } else {\n res.ApiVersion = 'apps/v1';\n res.MinReplicas = replicasCount;\n res.MaxReplicas = replicasCount;\n }\n return res;\n }\n\n /* #endregion */\n\n /* #region PERSISTED FOLDERS FV <> VOLUMES */\n static generatePersistedFoldersFormValuesFromPersistedFolders(persistedFolders, persistentVolumeClaims) {\n const finalRes = _.map(persistedFolders, (folder) => {\n const pvc = _.find(persistentVolumeClaims, (item) => _.startsWith(item.Name, folder.PersistentVolumeClaimName));\n const res = new KubernetesApplicationPersistedFolderFormValue(pvc.StorageClass);\n res.PersistentVolumeClaimName = folder.PersistentVolumeClaimName;\n res.Size = parseInt(pvc.Storage, 10);\n res.SizeUnit = pvc.Storage.slice(-2);\n res.ContainerPath = folder.MountPath;\n return res;\n });\n return finalRes;\n }\n\n static generateVolumesFromPersistentVolumClaims(app, volumeClaims) {\n app.VolumeMounts = [];\n app.Volumes = [];\n _.forEach(volumeClaims, (item) => {\n const volumeMount = new KubernetesApplicationVolumeMountPayload();\n const name = item.Name;\n volumeMount.name = name;\n volumeMount.mountPath = item.MountPath;\n app.VolumeMounts.push(volumeMount);\n\n const volume = new KubernetesApplicationVolumePersistentPayload();\n volume.name = name;\n volume.persistentVolumeClaim.claimName = name;\n app.Volumes.push(volume);\n });\n }\n\n static hasRWOOnly(formValues) {\n return _.find(formValues.PersistedFolders, (item) => item.StorageClass && _.isEqual(item.StorageClass.AccessModes, ['RWO']));\n }\n\n static hasRWX(claims) {\n return _.find(claims, (item) => item.StorageClass && _.includes(item.StorageClass.AccessModes, 'RWX')) !== undefined;\n }\n /* #endregion */\n\n /* #region PLACEMENTS FV <> AFFINITY */\n static generatePlacementsFormValuesFromAffinity(formValues, podAffinity, nodesLabels) {\n let placements = formValues.Placements;\n let type = formValues.PlacementType;\n const affinity = podAffinity.nodeAffinity;\n if (affinity && affinity.requiredDuringSchedulingIgnoredDuringExecution) {\n type = KubernetesApplicationPlacementTypes.MANDATORY;\n _.forEach(affinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms, (term) => {\n _.forEach(term.matchExpressions, (exp) => {\n const placement = new KubernetesApplicationPlacementFormValue();\n const label = _.find(nodesLabels, { Key: exp.key });\n placement.Label = label;\n placement.Value = exp.values[0];\n placement.IsNew = false;\n placements.push(placement);\n });\n });\n } else if (affinity && affinity.preferredDuringSchedulingIgnoredDuringExecution) {\n type = KubernetesApplicationPlacementTypes.PREFERRED;\n _.forEach(affinity.preferredDuringSchedulingIgnoredDuringExecution, (term) => {\n _.forEach(term.preference.matchExpressions, (exp) => {\n const placement = new KubernetesApplicationPlacementFormValue();\n const label = _.find(nodesLabels, { Key: exp.key });\n placement.Label = label;\n placement.Value = exp.values[0];\n placement.IsNew = false;\n placements.push(placement);\n });\n });\n }\n formValues.Placements = placements;\n formValues.PlacementType = type;\n }\n\n static generateAffinityFromPlacements(app, formValues) {\n if (formValues.DeploymentType === KubernetesApplicationDeploymentTypes.REPLICATED) {\n const placements = formValues.Placements;\n const res = new KubernetesPodNodeAffinityPayload();\n let expressions = _.map(placements, (p) => {\n if (!p.NeedsDeletion) {\n const exp = new KubernetesNodeSelectorRequirementPayload();\n exp.key = p.Label.Key;\n if (p.Value) {\n exp.operator = KubernetesPodNodeAffinityNodeSelectorRequirementOperators.IN;\n exp.values = [p.Value];\n } else {\n exp.operator = KubernetesPodNodeAffinityNodeSelectorRequirementOperators.EXISTS;\n delete exp.values;\n }\n return exp;\n }\n });\n expressions = _.without(expressions, undefined);\n if (expressions.length) {\n if (formValues.PlacementType === KubernetesApplicationPlacementTypes.MANDATORY) {\n const term = new KubernetesNodeSelectorTermPayload();\n term.matchExpressions = expressions;\n res.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.push(term);\n delete res.preferredDuringSchedulingIgnoredDuringExecution;\n } else if (formValues.PlacementType === KubernetesApplicationPlacementTypes.PREFERRED) {\n const term = new KubernetesPreferredSchedulingTermPayload();\n term.preference = new KubernetesNodeSelectorTermPayload();\n term.preference.matchExpressions = expressions;\n res.preferredDuringSchedulingIgnoredDuringExecution.push(term);\n delete res.requiredDuringSchedulingIgnoredDuringExecution;\n }\n app.Affinity = new KubernetesPodAffinity();\n app.Affinity.nodeAffinity = res;\n }\n }\n }\n /* #endregion */\n}\nexport default KubernetesApplicationHelper;\n","/**\n * JS reference of portainer.go#EndpointType iota\n */\nexport const PortainerEndpointTypes = Object.freeze({\n // DockerEnvironment represents an endpoint connected to a Docker environment\n DockerEnvironment: 1,\n // AgentOnDockerEnvironment represents an endpoint connected to a Portainer agent deployed on a Docker environment\n AgentOnDockerEnvironment: 2,\n // AzureEnvironment represents an endpoint connected to an Azure environment\n AzureEnvironment: 3,\n // EdgeAgentOnDockerEnvironment represents an endpoint connected to an Edge agent deployed on a Docker environment\n EdgeAgentOnDockerEnvironment: 4,\n // KubernetesLocalEnvironment represents an endpoint connected to a local Kubernetes environment\n KubernetesLocalEnvironment: 5,\n // AgentOnKubernetesEnvironment represents an endpoint connected to a Portainer agent deployed on a Kubernetes environment\n AgentOnKubernetesEnvironment: 6,\n // EdgeAgentOnKubernetesEnvironment represents an endpoint connected to an Edge agent deployed on a Kubernetes environment\n EdgeAgentOnKubernetesEnvironment: 7,\n});\n\n/**\n * JS reference of endpoint_create.go#EndpointCreationType iota\n */\nexport const PortainerEndpointCreationTypes = Object.freeze({\n LocalDockerEnvironment: 1,\n AgentEnvironment: 2,\n AzureEnvironment: 3,\n EdgeAgentEnvironment: 4,\n LocalKubernetesEnvironment: 5,\n});\n\nexport const PortainerEndpointConnectionTypes = Object.freeze({\n DOCKER_LOCAL: 1,\n KUBERNETES_LOCAL: 2,\n REMOTE: 3,\n AZURE: 4,\n AGENT: 5,\n EDGE: 6,\n});\n","import { KubernetesApplicationDataAccessPolicies, KubernetesApplicationDeploymentTypes, KubernetesApplicationPublishingTypes, KubernetesApplicationPlacementTypes } from './models';\n\n/**\n * KubernetesApplicationFormValues Model\n */\nconst _KubernetesApplicationFormValues = Object.freeze({\n ApplicationType: undefined, // will only exist for formValues generated from Application (app edit situation)\n ResourcePool: {},\n Name: '',\n StackName: '',\n ApplicationOwner: '',\n Image: '',\n Note: '',\n MemoryLimit: 0,\n CpuLimit: 0,\n DeploymentType: KubernetesApplicationDeploymentTypes.REPLICATED,\n ReplicaCount: 1,\n AutoScaler: {},\n Containers: [],\n EnvironmentVariables: [], // KubernetesApplicationEnvironmentVariableFormValue list\n DataAccessPolicy: KubernetesApplicationDataAccessPolicies.ISOLATED,\n PersistedFolders: [], // KubernetesApplicationPersistedFolderFormValue list\n Configurations: [], // KubernetesApplicationConfigurationFormValue list\n PublishingType: KubernetesApplicationPublishingTypes.INTERNAL,\n PublishedPorts: [], // KubernetesApplicationPublishedPortFormValue list\n PlacementType: KubernetesApplicationPlacementTypes.MANDATORY,\n Placements: [], // KubernetesApplicationPlacementFormValue list\n OriginalIngresses: undefined,\n});\n\nexport class KubernetesApplicationFormValues {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationFormValues)));\n }\n}\n\nexport const KubernetesApplicationConfigurationFormValueOverridenKeyTypes = Object.freeze({\n NONE: 0,\n ENVIRONMENT: 1,\n FILESYSTEM: 2,\n});\n\n/**\n * KubernetesApplicationConfigurationFormValueOverridenKey Model\n */\nconst _KubernetesApplicationConfigurationFormValueOverridenKey = Object.freeze({\n Key: '',\n Path: '',\n Type: KubernetesApplicationConfigurationFormValueOverridenKeyTypes.ENVIRONMENT,\n});\n\nexport class KubernetesApplicationConfigurationFormValueOverridenKey {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationConfigurationFormValueOverridenKey)));\n }\n}\n\n/**\n * KubernetesApplicationConfigurationFormValue Model\n */\nconst _KubernetesApplicationConfigurationFormValue = Object.freeze({\n SelectedConfiguration: undefined,\n Overriden: false,\n OverridenKeys: [], // KubernetesApplicationConfigurationFormValueOverridenKey list\n});\n\nexport class KubernetesApplicationConfigurationFormValue {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationConfigurationFormValue)));\n }\n}\n\n/**\n * KubernetesApplicationEnvironmentVariableFormValue Model\n */\nconst _KubernetesApplicationEnvironmentVariableFormValue = Object.freeze({\n Name: '',\n Value: '',\n IsSecret: false,\n NeedsDeletion: false,\n IsNew: true,\n NameIndex: '', // keep the original name for sorting\n});\n\nexport class KubernetesApplicationEnvironmentVariableFormValue {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationEnvironmentVariableFormValue)));\n }\n}\n\n/**\n * KubernetesApplicationPersistedFolderFormValue Model\n */\nconst _KubernetesApplicationPersistedFolderFormValue = Object.freeze({\n PersistentVolumeClaimName: '', // will be empty for new volumes (create/edit app) and filled for existing ones (edit)\n NeedsDeletion: false,\n ContainerPath: '',\n Size: '',\n SizeUnit: 'GB',\n StorageClass: {},\n ExistingVolume: null,\n UseNewVolume: true,\n});\n\nexport class KubernetesApplicationPersistedFolderFormValue {\n constructor(storageClass) {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationPersistedFolderFormValue)));\n this.StorageClass = storageClass;\n }\n}\n\n/**\n * KubernetesApplicationPublishedPortFormValue Model\n */\nexport function KubernetesApplicationPublishedPortFormValue() {\n return {\n NeedsDeletion: false,\n IsNew: true,\n ContainerPort: '',\n NodePort: '',\n LoadBalancerPort: '',\n LoadBalancerNodePort: undefined, // only filled to save existing loadbalancer nodePort and drop it when moving app exposure from LB to Internal/NodePort\n Protocol: 'TCP',\n IngressName: undefined,\n IngressRoute: undefined,\n IngressHost: undefined,\n IngressHosts: [],\n };\n}\n\nexport function KubernetesApplicationPlacementFormValue() {\n return {\n Label: {},\n Value: '',\n NeedsDeletion: false,\n IsNew: true,\n };\n}\n\n/**\n * KubernetesApplicationAutoScalerFormValue Model\n */\nconst _KubernetesApplicationAutoScalerFormValue = Object.freeze({\n MinReplicas: 0,\n MaxReplicas: 0,\n TargetCPUUtilization: 50,\n ApiVersion: '',\n IsUsed: false,\n});\n\nexport class KubernetesApplicationAutoScalerFormValue {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationAutoScalerFormValue)));\n }\n}\n\nexport function KubernetesFormValidationReferences() {\n return {\n refs: {},\n hasRefs: false,\n };\n}\n","import _ from 'lodash-es';\nimport filesizeParser from 'filesize-parser';\nimport { KubernetesResourceReservation } from 'Kubernetes/models/resource-reservation/models';\n\nclass KubernetesResourceReservationHelper {\n static computeResourceReservation(pods) {\n const containers = _.reduce(pods, (acc, pod) => _.concat(acc, pod.Containers), []);\n\n return _.reduce(\n containers,\n (acc, container) => {\n if (container.Requests) {\n if (container.Requests.memory) {\n acc.Memory += filesizeParser(container.Requests.memory, { base: 10 });\n }\n\n if (container.Requests.cpu) {\n acc.CPU += KubernetesResourceReservationHelper.parseCPU(container.Requests.cpu);\n }\n }\n\n return acc;\n },\n new KubernetesResourceReservation()\n );\n }\n\n static parseCPU(cpu) {\n let res = parseInt(cpu, 10);\n if (_.endsWith(cpu, 'm')) {\n res /= 1000;\n } else if (_.endsWith(cpu, 'n')) {\n res /= 1000000000;\n }\n return res;\n }\n\n static megaBytesValue(value) {\n return Math.floor(filesizeParser(value) / 1000 / 1000);\n }\n\n static bytesValue(mem) {\n return filesizeParser(mem) * 1000 * 1000;\n }\n}\nexport default KubernetesResourceReservationHelper;\n","export const ResourceControlOwnership = Object.freeze({\n PUBLIC: 'public',\n PRIVATE: 'private',\n RESTRICTED: 'restricted',\n ADMINISTRATORS: 'administrators',\n});\n","export const KubernetesPortainerConfigurationOwnerLabel = 'io.portainer.kubernetes.configuration.owner';\nexport const KubernetesPortainerConfigurationDataAnnotation = 'io.portainer.kubernetes.configuration.data';\n\n/**\n * Configuration Model (Composite)\n */\nconst _KubernetesConfiguration = Object.freeze({\n Id: 0,\n Name: '',\n Type: '',\n Namespace: '',\n CreationDate: '',\n ConfigurationOwner: '',\n Used: false,\n Applications: [],\n Data: {},\n});\n\nexport class KubernetesConfiguration {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesConfiguration)));\n }\n}\n\nexport const KubernetesConfigurationTypes = Object.freeze({\n CONFIGMAP: 1,\n SECRET: 2,\n});\n","export const KubernetesServiceHeadlessPrefix = 'headless-';\nexport const KubernetesServiceHeadlessClusterIP = 'None';\nexport const KubernetesServiceTypes = Object.freeze({\n LOAD_BALANCER: 'LoadBalancer',\n NODE_PORT: 'NodePort',\n CLUSTER_IP: 'ClusterIP',\n});\n\n/**\n * KubernetesService Model\n */\nconst _KubernetesService = Object.freeze({\n Headless: false,\n Namespace: '',\n Name: '',\n StackName: '',\n Ports: [],\n Type: '',\n ClusterIP: '',\n ApplicationName: '',\n ApplicationOwner: '',\n Note: '',\n});\n\nexport class KubernetesService {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesService)));\n }\n}\n\n/**\n * KubernetesServicePort Model\n */\nconst _KubernetesServicePort = Object.freeze({\n name: '',\n port: 0,\n targetPort: 0,\n protocol: '',\n nodePort: 0,\n});\n\nexport class KubernetesServicePort {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesServicePort)));\n }\n}\n","export const KubernetesResourceTypes = Object.freeze({\n NAMESPACE: 'Namespace',\n RESOURCEQUOTA: 'ResourceQuota',\n CONFIGMAP: 'ConfigMap',\n SECRET: 'Secret',\n DEPLOYMENT: 'Deployment',\n STATEFULSET: 'StatefulSet',\n DAEMONSET: 'Daemonset',\n PERSISTENT_VOLUME_CLAIM: 'PersistentVolumeClaim',\n SERVICE: 'Service',\n INGRESS: 'Ingress',\n HORIZONTAL_POD_AUTOSCALER: 'HorizontalPodAutoscaler',\n});\n\nexport const KubernetesResourceActions = Object.freeze({\n CREATE: 'Create',\n UPDATE: 'Update',\n DELETE: 'Delete',\n});\n","import KubernetesResourceQuotaHelper from 'Kubernetes/helpers/resourceQuotaHelper';\n\nexport const KubernetesPortainerResourceQuotaPrefix = 'portainer-rq-';\nexport const KubernetesPortainerResourceQuotaCPULimit = 'limits.cpu';\nexport const KubernetesPortainerResourceQuotaMemoryLimit = 'limits.memory';\nexport const KubernetesPortainerResourceQuotaCPURequest = 'requests.cpu';\nexport const KubernetesPortainerResourceQuotaMemoryRequest = 'requests.memory';\n\nexport const KubernetesResourceQuotaDefaults = {\n CpuLimit: 0,\n MemoryLimit: 0,\n};\n\nexport function KubernetesResourceQuota(namespace) {\n return {\n Id: '',\n Namespace: namespace ? namespace : '',\n Name: namespace ? KubernetesResourceQuotaHelper.generateResourceQuotaName(namespace) : '',\n CpuLimit: KubernetesResourceQuotaDefaults.CpuLimit,\n MemoryLimit: KubernetesResourceQuotaDefaults.MemoryLimit,\n CpuLimitUsed: KubernetesResourceQuotaDefaults.CpuLimit,\n MemoryLimitUsed: KubernetesResourceQuotaDefaults.MemoryLimit,\n Yaml: '',\n ResourcePoolName: '',\n ResourcePoolOwner: '',\n };\n}\n","// Returns the raw response without JSON parsing\nexport function rawResponse(data) {\n const response = {\n data: data,\n };\n return response;\n}\n","function isJSONArray(jsonString) {\n return Object.prototype.toString.call(jsonString) === '[object Array]';\n}\n\nfunction isJSON(jsonString) {\n try {\n var o = JSON.parse(jsonString);\n if (o && typeof o === 'object') {\n return o;\n }\n } catch (e) {\n //empty\n }\n return false;\n}\n\n// The Docker API often returns a list of JSON object.\n// This handler wrap the JSON objects in an array.\n// Used by the API in: Image push, Image create, Events query.\nexport function jsonObjectsToArrayHandler(data) {\n // catching empty data helps the function not to fail and prevents unwanted error message to user.\n if (!data) {\n return [];\n }\n var str = '[' + data.replace(/\\n/g, ' ').replace(/\\}\\s*\\{/g, '}, {') + ']';\n return angular.fromJson(str);\n}\n\n// The Docker API often returns an empty string or a valid JSON object on success (Docker 1.9 -> Docker 1.12).\n// On error, it returns either an error message as a string (Docker < 1.12) or a JSON object with the field message\n// container the error (Docker = 1.12)\n// This handler ensure a valid JSON object is returned in any case.\n// Used by the API in: container deletion, network deletion, network creation, volume creation,\n// container exec, exec resize.\nexport function genericHandler(data) {\n var response = {};\n // No data is returned when deletion is successful (Docker 1.9 -> 1.12)\n if (!data) {\n return response;\n }\n // A string is returned on failure (Docker < 1.12)\n else if (!isJSON(data)) {\n response.message = data;\n }\n // Docker 1.12 returns a valid JSON object when an error occurs\n else {\n response = angular.fromJson(data);\n }\n return response;\n}\n\n// The Docker API returns the logs as a single string.\n// This handler wraps the data in a JSON object under the \"logs\" property.\nexport function logsHandler(data) {\n return {\n logs: data,\n };\n}\n\n// Image delete API returns an array on success (Docker 1.9 -> Docker 1.12).\n// On error, it returns either an error message as a string (Docker < 1.12) or a JSON object with the field message\n// container the error (Docker = 1.12).\n// This handler returns the original array on success or a newly created array containing\n// only one JSON object with the field message filled with the error message on failure.\nexport function deleteImageHandler(data) {\n // A string is returned on failure (Docker < 1.12)\n var response = [];\n if (!isJSON(data)) {\n response.push({ message: data });\n }\n // A JSON object is returned on failure (Docker = 1.12)\n else if (!isJSONArray(data)) {\n var json = angular.fromJson(data);\n response.push(json);\n }\n // An array is returned on success (Docker 1.9 -> 1.12)\n else {\n response = angular.fromJson(data);\n }\n return response;\n}\n","export * from './affinities';\n\n/**\n * KubernetesPod Model\n */\nconst _KubernetesPod = Object.freeze({\n Id: '',\n Name: '',\n Namespace: '',\n Images: [],\n Status: '',\n Restarts: 0,\n Node: '',\n CreationDate: '',\n Containers: [],\n Labels: [],\n Affinity: {}, // KubernetesPodAffinity\n Tolerations: [], // KubernetesPodToleration[]\n NodeSelector: undefined,\n});\n\nexport class KubernetesPod {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesPod)));\n }\n}\n\n/**\n * KubernetesPodToleration Model\n */\nconst _KubernetesPodToleration = Object.freeze({\n Key: '',\n Operator: '',\n Value: '',\n TolerationSeconds: 0,\n Effect: '',\n});\n\nexport class KubernetesPodToleration {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesPodToleration)));\n }\n}\n\nconst _KubernetesPodContainer = Object.freeze({\n Type: 0,\n PodName: '',\n Name: '',\n Image: '',\n ImagePullPolicy: '',\n Node: '',\n CreationDate: '',\n Status: '',\n Limits: {},\n Requests: {},\n VolumeMounts: {},\n ConfigurationVolumes: [],\n PersistedFolders: [],\n Env: [],\n});\n\nexport class KubernetesPodContainer {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesPodContainer)));\n }\n}\n\nconst _KubernetesPodEviction = Object.freeze({\n apiVersion: 'policy/v1beta1',\n kind: 'Eviction',\n metadata: {\n name: '',\n namespace: '',\n },\n});\n\nexport class KubernetesPodEviction {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesPodEviction)));\n }\n}\n\nexport const KubernetesPodContainerTypes = {\n INIT: 1,\n APP: 2,\n};\n","import _ from 'lodash-es';\n\nclass KubernetesCommonHelper {\n static assignOrDeleteIfEmpty(obj, path, value) {\n if (!value || (value instanceof Array && !value.length)) {\n _.unset(obj, path);\n } else {\n _.set(obj, path, value);\n }\n }\n\n static ownerToLabel(owner) {\n let label = _.replace(owner, /[^-A-Za-z0-9_.]/g, '.');\n label = _.truncate(label, { length: 63, omission: '' });\n label = _.replace(label, /^[-_.]*/g, '');\n label = _.replace(label, /[-_.]*$/g, '');\n return label;\n }\n\n static assignOrDeleteIfEmptyOrZero(obj, path, value) {\n if (!value || value === 0 || (value instanceof Array && !value.length)) {\n _.unset(obj, path);\n } else {\n _.set(obj, path, value);\n }\n }\n}\nexport default KubernetesCommonHelper;\n","import { ResourceControlOwnership as RCO } from 'Portainer/models/resourceControl/resourceControlOwnership';\n\nexport function AccessControlFormData() {\n this.AccessControlEnabled = true;\n this.Ownership = RCO.PRIVATE;\n this.AuthorizedUsers = [];\n this.AuthorizedTeams = [];\n}\n","/**\n * Generic metadata payload\n */\nconst _KubernetesCommonMetadataPayload = Object.freeze({\n uid: '',\n name: '',\n namespace: '',\n labels: {},\n annotations: {},\n});\nexport class KubernetesCommonMetadataPayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesCommonMetadataPayload)));\n }\n}\n","import _ from 'lodash-es';\nimport * as JsonPatch from 'fast-json-patch';\n\nimport KubernetesCommonHelper from 'Kubernetes/helpers/commonHelper';\nimport {\n KubernetesResourcePoolIngressClassAnnotationFormValue,\n KubernetesResourcePoolIngressClassFormValue,\n KubernetesResourcePoolIngressClassHostFormValue,\n} from 'Kubernetes/models/resource-pool/formValues';\nimport { KubernetesIngress, KubernetesIngressRule } from './models';\nimport { KubernetesIngressCreatePayload, KubernetesIngressRuleCreatePayload, KubernetesIngressRulePathCreatePayload } from './payloads';\nimport { KubernetesIngressClassAnnotation, KubernetesIngressClassRewriteTargetAnnotations } from './constants';\n\nexport class KubernetesIngressConverter {\n static apiToModel(data) {\n const paths = _.flatMap(data.spec.rules, (rule) => {\n return !rule.http\n ? []\n : _.map(rule.http.paths, (path) => {\n const ingRule = new KubernetesIngressRule();\n ingRule.IngressName = data.metadata.name;\n ingRule.ServiceName = path.backend.serviceName;\n ingRule.Host = rule.host || '';\n ingRule.IP = data.status.loadBalancer.ingress ? data.status.loadBalancer.ingress[0].ip : undefined;\n ingRule.Port = path.backend.servicePort;\n ingRule.Path = path.path;\n return ingRule;\n });\n });\n\n const res = new KubernetesIngress();\n res.Name = data.metadata.name;\n res.Namespace = data.metadata.namespace;\n res.Annotations = data.metadata.annotations || {};\n res.IngressClassName =\n data.metadata.annotations && data.metadata.annotations[KubernetesIngressClassAnnotation]\n ? data.metadata.annotations[KubernetesIngressClassAnnotation]\n : data.spec.ingressClassName;\n res.Paths = paths;\n res.Hosts = _.uniq(_.map(data.spec.rules, 'host'));\n const idx = _.findIndex(res.Hosts, (h) => h === undefined);\n if (idx >= 0) {\n res.Hosts.splice(idx, 1, '');\n }\n return res;\n }\n\n static applicationFormValuesToIngresses(formValues, serviceName) {\n const ingresses = angular.copy(formValues.OriginalIngresses);\n _.forEach(formValues.PublishedPorts, (p) => {\n const ingress = _.find(ingresses, { Name: p.IngressName });\n if (ingress && p.NeedsDeletion) {\n const path = _.find(ingress.Paths, { Port: p.ContainerPort, ServiceName: serviceName, Path: p.IngressRoute });\n _.remove(ingress.Paths, path);\n } else if (ingress && p.IsNew) {\n const rule = new KubernetesIngressRule();\n rule.IngressName = ingress.Name;\n rule.ServiceName = serviceName;\n rule.Port = p.ContainerPort;\n rule.Path = _.startsWith(p.IngressRoute, '/') ? p.IngressRoute : '/' + p.IngressRoute;\n rule.Host = p.IngressHost;\n ingress.Paths.push(rule);\n }\n });\n return ingresses;\n }\n\n /**\n *\n * @param {KubernetesResourcePoolIngressClassFormValue} formValues\n */\n static resourcePoolIngressClassFormValueToIngress(formValues) {\n const res = new KubernetesIngress();\n res.Name = formValues.IngressClass.Name;\n res.Namespace = formValues.Namespace;\n const pairs = _.map(formValues.Annotations, (a) => [a.Key, a.Value]);\n res.Annotations = _.fromPairs(pairs);\n if (formValues.RewriteTarget) {\n _.extend(res.Annotations, KubernetesIngressClassRewriteTargetAnnotations[formValues.IngressClass.Type]);\n }\n res.Annotations[KubernetesIngressClassAnnotation] = formValues.IngressClass.Name;\n res.Hosts = formValues.Hosts;\n res.Paths = formValues.Paths;\n return res;\n }\n\n /**\n *\n * @param {KubernetesIngressClass} ics Ingress classes (saved in Portainer DB)\n * @param {KubernetesIngress[]} ingresses Existing Kubernetes ingresses. Must be empty for RP CREATE VIEW and filled for RP EDIT VIEW\n */\n static ingressClassesToFormValues(ics, ingresses) {\n const res = _.map(ics, (ic) => {\n const fv = new KubernetesResourcePoolIngressClassFormValue(ic);\n const ingress = _.find(ingresses, { Name: ic.Name });\n if (ingress) {\n fv.Selected = true;\n fv.WasSelected = true;\n fv.Hosts = _.map(ingress.Hosts, (host) => {\n const hfv = new KubernetesResourcePoolIngressClassHostFormValue();\n hfv.Host = host;\n hfv.PreviousHost = host;\n hfv.IsNew = false;\n return hfv;\n });\n const [[rewriteKey]] = _.toPairs(KubernetesIngressClassRewriteTargetAnnotations[ic.Type]);\n const annotations = _.map(_.toPairs(ingress.Annotations), ([key, value]) => {\n if (key === rewriteKey) {\n fv.RewriteTarget = true;\n } else if (key !== KubernetesIngressClassAnnotation) {\n const annotation = new KubernetesResourcePoolIngressClassAnnotationFormValue();\n annotation.Key = key;\n annotation.Value = value;\n return annotation;\n }\n });\n fv.Annotations = _.without(annotations, undefined);\n fv.AdvancedConfig = fv.Annotations.length > 0;\n fv.Paths = ingress.Paths;\n }\n return fv;\n });\n return res;\n }\n\n static createPayload(data) {\n const res = new KubernetesIngressCreatePayload();\n res.metadata.name = data.Name;\n res.metadata.namespace = data.Namespace;\n res.metadata.annotations = data.Annotations;\n if (data.Paths && data.Paths.length) {\n _.forEach(data.Paths, (p) => {\n if (p.Host === 'undefined' || p.Host === undefined) {\n p.Host = '';\n }\n });\n const hostsWithRules = [];\n const groups = _.groupBy(data.Paths, 'Host');\n let rules = _.map(groups, (paths, host) => {\n const updatedHost = _.find(data.Hosts, (h) => {\n return h === host || h.PreviousHost === host;\n });\n host = updatedHost.Host || updatedHost;\n if (updatedHost.NeedsDeletion) {\n return;\n }\n const rule = new KubernetesIngressRuleCreatePayload();\n KubernetesCommonHelper.assignOrDeleteIfEmpty(rule, 'host', host);\n rule.http.paths = _.map(paths, (p) => {\n const path = new KubernetesIngressRulePathCreatePayload();\n path.path = p.Path;\n path.backend.serviceName = p.ServiceName;\n path.backend.servicePort = p.Port;\n return path;\n });\n hostsWithRules.push(host);\n return rule;\n });\n rules = _.without(rules, undefined);\n const keptHosts = _.without(\n _.map(data.Hosts, (h) => (h.NeedsDeletion ? undefined : h.Host || h)),\n undefined\n );\n const hostsWithoutRules = _.without(keptHosts, ...hostsWithRules);\n const emptyRules = _.map(hostsWithoutRules, (host) => {\n return { host: host };\n });\n rules = _.concat(rules, emptyRules);\n KubernetesCommonHelper.assignOrDeleteIfEmpty(res, 'spec.rules', rules);\n } else if (data.Hosts) {\n res.spec.rules = [];\n _.forEach(data.Hosts, (host) => {\n if (!host.NeedsDeletion) {\n res.spec.rules.push({ host: host.Host || host });\n }\n });\n } else {\n delete res.spec.rules;\n }\n return res;\n }\n\n static patchPayload(oldData, newData) {\n const oldPayload = KubernetesIngressConverter.createPayload(oldData);\n const newPayload = KubernetesIngressConverter.createPayload(newData);\n const payload = JsonPatch.compare(oldPayload, newPayload);\n return payload;\n }\n}\n","import _ from 'lodash-es';\n\nclass KubernetesFormValidationHelper {\n static getInvalidKeys(names) {\n const res = {};\n _.forEach(names, (name, index) => {\n const valid = /^[-._a-zA-Z0-9]+$/.test(name);\n if (!valid) {\n res[index] = true;\n }\n });\n return res;\n }\n\n static getDuplicates(names) {\n const groupped = _.groupBy(names);\n const res = {};\n _.forEach(names, (name, index) => {\n if (name && groupped[name].length > 1) {\n res[index] = name;\n }\n });\n return res;\n }\n}\nexport default KubernetesFormValidationHelper;\n","export function KubernetesResourcePoolFormValues(defaults) {\n this.Name = '';\n this.MemoryLimit = defaults.MemoryLimit;\n this.CpuLimit = defaults.CpuLimit;\n this.HasQuota = false;\n this.IngressClasses = []; // KubernetesResourcePoolIngressClassFormValue\n}\n\n/**\n * @param {KubernetesIngressClass} ingressClass\n */\nexport function KubernetesResourcePoolIngressClassFormValue(ingressClass) {\n return {\n Namespace: undefined, // will be filled inside ResourcePoolService.create\n IngressClass: ingressClass,\n RewriteTarget: false,\n Annotations: [], // KubernetesResourcePoolIngressClassAnnotationFormValue\n Hosts: [],\n Selected: false,\n WasSelected: false,\n AdvancedConfig: false,\n Paths: [], // will be filled to save IngressClass.Paths inside ingressClassesToFormValues() on RP EDIT\n };\n}\n\nexport function KubernetesResourcePoolIngressClassAnnotationFormValue() {\n return {\n Key: '',\n Value: '',\n };\n}\n\nexport function KubernetesResourcePoolIngressClassHostFormValue() {\n return {\n Host: '',\n PreviousHost: '',\n NeedsDeletion: false,\n IsNew: true,\n };\n}\n","import { ResourceControlOwnership as RCO } from './resourceControlOwnership';\n\nexport function ResourceControlViewModel(data) {\n this.Id = data.Id;\n this.Type = data.Type;\n this.ResourceId = data.ResourceId;\n this.UserAccesses = data.UserAccesses;\n this.TeamAccesses = data.TeamAccesses;\n this.Public = data.Public;\n this.System = data.System;\n this.Ownership = determineOwnership(this);\n}\n\nfunction determineOwnership(resourceControl) {\n if (resourceControl.Public) {\n return RCO.PUBLIC;\n } else if (resourceControl.UserAccesses.length === 1 && resourceControl.TeamAccesses.length === 0) {\n return RCO.PRIVATE;\n } else if (resourceControl.UserAccesses.length > 1 || resourceControl.TeamAccesses.length > 0) {\n return RCO.RESTRICTED;\n } else {\n return RCO.ADMINISTRATORS;\n }\n}\n","export const RegistryTypes = Object.freeze({\n QUAY: 1,\n AZURE: 2,\n CUSTOM: 3,\n GITLAB: 4,\n});\n","export const KubernetesPortainerConfigMapNamespace = 'portainer';\nexport const KubernetesPortainerConfigMapConfigName = 'portainer-config';\nexport const KubernetesPortainerConfigMapAccessKey = 'NamespaceAccessPolicies';\n\nexport function KubernetesPortainerAccessConfigMap() {\n return {\n Id: 0,\n Name: KubernetesPortainerConfigMapConfigName,\n Namespace: KubernetesPortainerConfigMapNamespace,\n Data: {},\n };\n}\n\n/**\n * ConfigMap Model\n */\nconst _KubernetesConfigMap = Object.freeze({\n Id: 0,\n Name: '',\n Namespace: '',\n Yaml: '',\n ConfigurationOwner: '',\n Data: [],\n});\n\nexport class KubernetesConfigMap {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesConfigMap)));\n }\n}\n","import _ from 'lodash-es';\nimport filesizeParser from 'filesize-parser';\n\nimport {\n KubernetesApplication,\n KubernetesApplicationConfigurationVolume,\n KubernetesApplicationDataAccessPolicies,\n KubernetesApplicationDeploymentTypes,\n KubernetesApplicationPersistedFolder,\n KubernetesApplicationPort,\n KubernetesApplicationPublishingTypes,\n KubernetesApplicationTypes,\n KubernetesPortainerApplicationNameLabel,\n KubernetesPortainerApplicationNote,\n KubernetesPortainerApplicationOwnerLabel,\n KubernetesPortainerApplicationStackNameLabel,\n} from 'Kubernetes/models/application/models';\nimport { KubernetesServiceTypes } from 'Kubernetes/models/service/models';\nimport KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';\nimport { KubernetesApplicationFormValues } from 'Kubernetes/models/application/formValues';\nimport KubernetesApplicationHelper from 'Kubernetes/helpers/application';\n\nimport KubernetesDeploymentConverter from 'Kubernetes/converters/deployment';\nimport KubernetesDaemonSetConverter from 'Kubernetes/converters/daemonSet';\nimport KubernetesStatefulSetConverter from 'Kubernetes/converters/statefulSet';\nimport KubernetesServiceConverter from 'Kubernetes/converters/service';\nimport KubernetesPersistentVolumeClaimConverter from 'Kubernetes/converters/persistentVolumeClaim';\nimport PortainerError from 'Portainer/error';\nimport { KubernetesIngressHelper } from 'Kubernetes/ingress/helper';\nimport KubernetesCommonHelper from 'Kubernetes/helpers/commonHelper';\n\nfunction _apiPortsToPublishedPorts(pList, pRefs) {\n const ports = _.map(pList, (item) => {\n const res = new KubernetesApplicationPort();\n res.Port = item.port;\n res.TargetPort = item.targetPort;\n res.NodePort = item.nodePort;\n res.Protocol = item.protocol;\n return res;\n });\n _.forEach(ports, (port) => {\n if (isNaN(port.TargetPort)) {\n const targetPort = _.find(pRefs, { name: port.TargetPort });\n if (targetPort) {\n port.TargetPort = targetPort.containerPort;\n }\n }\n });\n return ports;\n}\n\nclass KubernetesApplicationConverter {\n static applicationCommon(res, data, pods, service, ingresses) {\n const containers = data.spec.template ? _.without(_.concat(data.spec.template.spec.containers, data.spec.template.spec.initContainers), undefined) : data.spec.containers;\n res.Id = data.metadata.uid;\n res.Name = data.metadata.name;\n res.StackName = data.metadata.labels ? data.metadata.labels[KubernetesPortainerApplicationStackNameLabel] || '-' : '-';\n res.ApplicationOwner = data.metadata.labels ? data.metadata.labels[KubernetesPortainerApplicationOwnerLabel] || '' : '';\n res.Note = data.metadata.annotations ? data.metadata.annotations[KubernetesPortainerApplicationNote] || '' : '';\n res.ApplicationName = data.metadata.labels ? data.metadata.labels[KubernetesPortainerApplicationNameLabel] || res.Name : res.Name;\n res.ResourcePool = data.metadata.namespace;\n if (containers.length) {\n res.Image = containers[0].image;\n }\n res.CreationDate = data.metadata.creationTimestamp;\n res.Env = _.without(_.flatMap(_.map(containers, 'env')), undefined);\n res.Pods = data.spec.selector ? KubernetesApplicationHelper.associatePodsAndApplication(pods, data.spec.selector) : [data];\n\n const limits = {\n Cpu: 0,\n Memory: 0,\n };\n res.Limits = _.reduce(\n containers,\n (acc, item) => {\n if (item.resources.limits && item.resources.limits.cpu) {\n acc.Cpu += KubernetesResourceReservationHelper.parseCPU(item.resources.limits.cpu);\n }\n if (item.resources.limits && item.resources.limits.memory) {\n acc.Memory += filesizeParser(item.resources.limits.memory, { base: 10 });\n }\n return acc;\n },\n limits\n );\n\n const requests = {\n Cpu: 0,\n Memory: 0,\n };\n res.Requests = _.reduce(\n containers,\n (acc, item) => {\n if (item.resources.requests && item.resources.requests.cpu) {\n acc.Cpu += KubernetesResourceReservationHelper.parseCPU(item.resources.requests.cpu);\n }\n if (item.resources.requests && item.resources.requests.memory) {\n acc.Memory += filesizeParser(item.resources.requests.memory, { base: 10 });\n }\n return acc;\n },\n requests\n );\n\n if (service) {\n const serviceType = service.spec.type;\n res.ServiceType = serviceType;\n res.ServiceId = service.metadata.uid;\n res.ServiceName = service.metadata.name;\n\n if (serviceType === KubernetesServiceTypes.LOAD_BALANCER) {\n if (service.status.loadBalancer.ingress && service.status.loadBalancer.ingress.length > 0) {\n res.LoadBalancerIPAddress = service.status.loadBalancer.ingress[0].ip || service.status.loadBalancer.ingress[0].hostname;\n }\n }\n\n const portsRefs = _.concat(..._.map(containers, (container) => container.ports));\n const ports = _apiPortsToPublishedPorts(service.spec.ports, portsRefs);\n const rules = KubernetesIngressHelper.findSBoundServiceIngressesRules(ingresses, service.metadata.name);\n _.forEach(ports, (port) => (port.IngressRules = _.filter(rules, (rule) => rule.Port === port.Port)));\n res.PublishedPorts = ports;\n }\n\n if (data.spec.template) {\n res.Volumes = data.spec.template.spec.volumes ? data.spec.template.spec.volumes : [];\n } else {\n res.Volumes = data.spec.volumes;\n }\n\n // TODO: review\n // this if() fixs direct use of PVC reference inside spec.template.spec.containers[0].volumeMounts\n // instead of referencing the PVC the \"good way\" using spec.template.spec.volumes array\n // Basically it creates an \"in-memory\" reference for the PVC, as if it was saved in\n // spec.template.spec.volumes and retrieved from here.\n //\n // FIX FOR SFS ONLY ; as far as we know it's not possible to do this with DEPLOYMENTS/DAEMONSETS\n //\n // This may lead to destructing behaviours when we will allow external apps to be edited.\n // E.G. if we try to generate the formValues and patch the app, SFS reference will be created under\n // spec.template.spec.volumes and not be referenced directly inside spec.template.spec.containers[0].volumeMounts\n // As we preserve original SFS name and try to build around it, it SHOULD be fine, but we definitely need to test this\n // before allowing external apps modification\n if (data.spec.volumeClaimTemplates) {\n const vcTemplates = _.map(data.spec.volumeClaimTemplates, (vc) => {\n return {\n name: vc.metadata.name,\n persistentVolumeClaim: { claimName: vc.metadata.name },\n };\n });\n const inexistingPVC = _.filter(vcTemplates, (vc) => {\n return !_.find(res.Volumes, { persistentVolumeClaim: { claimName: vc.persistentVolumeClaim.claimName } });\n });\n res.Volumes = _.concat(res.Volumes, inexistingPVC);\n }\n\n const persistedFolders = _.filter(res.Volumes, (volume) => volume.persistentVolumeClaim || volume.hostPath);\n\n res.PersistedFolders = _.map(persistedFolders, (volume) => {\n const volumeMounts = _.uniq(_.flatMap(_.map(containers, 'volumeMounts')), 'name');\n const matchingVolumeMount = _.find(volumeMounts, { name: volume.name });\n\n if (matchingVolumeMount) {\n const persistedFolder = new KubernetesApplicationPersistedFolder();\n persistedFolder.MountPath = matchingVolumeMount.mountPath;\n\n if (volume.persistentVolumeClaim) {\n persistedFolder.PersistentVolumeClaimName = volume.persistentVolumeClaim.claimName;\n } else {\n persistedFolder.HostPath = volume.hostPath.path;\n }\n\n return persistedFolder;\n }\n });\n\n res.PersistedFolders = _.without(res.PersistedFolders, undefined);\n\n res.ConfigurationVolumes = _.reduce(\n res.Volumes,\n (acc, volume) => {\n if (volume.configMap || volume.secret) {\n const matchingVolumeMount = _.find(_.flatMap(_.map(containers, 'volumeMounts')), { name: volume.name });\n\n if (matchingVolumeMount) {\n let items = [];\n let configurationName = '';\n\n if (volume.configMap) {\n items = volume.configMap.items;\n configurationName = volume.configMap.name;\n } else {\n items = volume.secret.items;\n configurationName = volume.secret.secretName;\n }\n\n if (!items) {\n const configurationVolume = new KubernetesApplicationConfigurationVolume();\n configurationVolume.fileMountPath = matchingVolumeMount.mountPath;\n configurationVolume.rootMountPath = matchingVolumeMount.mountPath;\n configurationVolume.configurationName = configurationName;\n\n acc.push(configurationVolume);\n } else {\n _.forEach(items, (item) => {\n const configurationVolume = new KubernetesApplicationConfigurationVolume();\n configurationVolume.fileMountPath = matchingVolumeMount.mountPath + '/' + item.path;\n configurationVolume.rootMountPath = matchingVolumeMount.mountPath;\n configurationVolume.configurationKey = item.key;\n configurationVolume.configurationName = configurationName;\n\n acc.push(configurationVolume);\n });\n }\n }\n }\n\n return acc;\n },\n []\n );\n }\n\n static apiPodToApplication(data, pods, service, ingresses) {\n const res = new KubernetesApplication();\n KubernetesApplicationConverter.applicationCommon(res, data, pods, service, ingresses);\n res.ApplicationType = KubernetesApplicationTypes.POD;\n return res;\n }\n\n static apiDeploymentToApplication(data, pods, service, ingresses) {\n const res = new KubernetesApplication();\n KubernetesApplicationConverter.applicationCommon(res, data, pods, service, ingresses);\n res.ApplicationType = KubernetesApplicationTypes.DEPLOYMENT;\n res.DeploymentType = KubernetesApplicationDeploymentTypes.REPLICATED;\n res.DataAccessPolicy = KubernetesApplicationDataAccessPolicies.SHARED;\n res.RunningPodsCount = data.status.availableReplicas || data.status.replicas - data.status.unavailableReplicas || 0;\n res.TotalPodsCount = data.spec.replicas;\n return res;\n }\n\n static apiDaemonSetToApplication(data, pods, service, ingresses) {\n const res = new KubernetesApplication();\n KubernetesApplicationConverter.applicationCommon(res, data, pods, service, ingresses);\n res.ApplicationType = KubernetesApplicationTypes.DAEMONSET;\n res.DeploymentType = KubernetesApplicationDeploymentTypes.GLOBAL;\n res.DataAccessPolicy = KubernetesApplicationDataAccessPolicies.SHARED;\n res.RunningPodsCount = data.status.numberAvailable || data.status.desiredNumberScheduled - data.status.numberUnavailable || 0;\n res.TotalPodsCount = data.status.desiredNumberScheduled;\n return res;\n }\n\n static apiStatefulSetToapplication(data, pods, service, ingresses) {\n const res = new KubernetesApplication();\n KubernetesApplicationConverter.applicationCommon(res, data, pods, service, ingresses);\n res.ApplicationType = KubernetesApplicationTypes.STATEFULSET;\n res.DeploymentType = KubernetesApplicationDeploymentTypes.REPLICATED;\n res.DataAccessPolicy = KubernetesApplicationDataAccessPolicies.ISOLATED;\n res.RunningPodsCount = data.status.readyReplicas || 0;\n res.TotalPodsCount = data.spec.replicas;\n res.HeadlessServiceName = data.spec.serviceName;\n return res;\n }\n\n static applicationToFormValues(app, resourcePools, configurations, persistentVolumeClaims, nodesLabels, ingresses) {\n const res = new KubernetesApplicationFormValues();\n res.ApplicationType = app.ApplicationType;\n res.ResourcePool = _.find(resourcePools, ['Namespace.Name', app.ResourcePool]);\n res.Name = app.Name;\n res.StackName = app.StackName;\n res.ApplicationOwner = app.ApplicationOwner;\n res.Image = app.Image;\n res.ReplicaCount = app.TotalPodsCount;\n res.MemoryLimit = KubernetesResourceReservationHelper.megaBytesValue(app.Limits.Memory);\n res.CpuLimit = app.Limits.Cpu;\n res.DeploymentType = app.DeploymentType;\n res.DataAccessPolicy = app.DataAccessPolicy;\n res.EnvironmentVariables = KubernetesApplicationHelper.generateEnvVariablesFromEnv(app.Env);\n res.PersistedFolders = KubernetesApplicationHelper.generatePersistedFoldersFormValuesFromPersistedFolders(app.PersistedFolders, persistentVolumeClaims); // generate from PVC and app.PersistedFolders\n res.Configurations = KubernetesApplicationHelper.generateConfigurationFormValuesFromEnvAndVolumes(app.Env, app.ConfigurationVolumes, configurations);\n res.AutoScaler = KubernetesApplicationHelper.generateAutoScalerFormValueFromHorizontalPodAutoScaler(app.AutoScaler, res.ReplicaCount);\n res.PublishedPorts = KubernetesApplicationHelper.generatePublishedPortsFormValuesFromPublishedPorts(app.ServiceType, app.PublishedPorts, ingresses);\n res.Containers = app.Containers;\n\n const isIngress = _.filter(res.PublishedPorts, (p) => p.IngressName).length;\n if (app.ServiceType === KubernetesServiceTypes.LOAD_BALANCER) {\n res.PublishingType = KubernetesApplicationPublishingTypes.LOAD_BALANCER;\n } else if (app.ServiceType === KubernetesServiceTypes.NODE_PORT) {\n res.PublishingType = KubernetesApplicationPublishingTypes.CLUSTER;\n } else if (app.ServiceType === KubernetesServiceTypes.CLUSTER_IP && isIngress) {\n res.PublishingType = KubernetesApplicationPublishingTypes.INGRESS;\n } else {\n res.PublishingType = KubernetesApplicationPublishingTypes.INTERNAL;\n }\n\n KubernetesApplicationHelper.generatePlacementsFormValuesFromAffinity(res, app.Pods[0].Affinity, nodesLabels);\n return res;\n }\n\n static applicationFormValuesToApplication(formValues) {\n formValues.ApplicationOwner = KubernetesCommonHelper.ownerToLabel(formValues.ApplicationOwner);\n\n const claims = KubernetesPersistentVolumeClaimConverter.applicationFormValuesToVolumeClaims(formValues);\n const rwx = KubernetesApplicationHelper.hasRWX(claims);\n\n const deployment =\n (formValues.DeploymentType === KubernetesApplicationDeploymentTypes.REPLICATED &&\n (claims.length === 0 || (claims.length > 0 && formValues.DataAccessPolicy === KubernetesApplicationDataAccessPolicies.SHARED))) ||\n formValues.ApplicationType === KubernetesApplicationTypes.DEPLOYMENT;\n\n const statefulSet =\n (formValues.DeploymentType === KubernetesApplicationDeploymentTypes.REPLICATED &&\n claims.length > 0 &&\n formValues.DataAccessPolicy === KubernetesApplicationDataAccessPolicies.ISOLATED) ||\n formValues.ApplicationType === KubernetesApplicationTypes.STATEFULSET;\n\n const daemonSet =\n (formValues.DeploymentType === KubernetesApplicationDeploymentTypes.GLOBAL &&\n (claims.length === 0 || (claims.length > 0 && formValues.DataAccessPolicy === KubernetesApplicationDataAccessPolicies.SHARED && rwx))) ||\n formValues.ApplicationType === KubernetesApplicationTypes.DAEMONSET;\n\n let app;\n if (deployment) {\n app = KubernetesDeploymentConverter.applicationFormValuesToDeployment(formValues, claims);\n } else if (statefulSet) {\n app = KubernetesStatefulSetConverter.applicationFormValuesToStatefulSet(formValues, claims);\n } else if (daemonSet) {\n app = KubernetesDaemonSetConverter.applicationFormValuesToDaemonSet(formValues, claims);\n } else {\n throw new PortainerError('Unable to determine which association to use to convert form');\n }\n\n let headlessService;\n if (statefulSet) {\n headlessService = KubernetesServiceConverter.applicationFormValuesToHeadlessService(formValues);\n }\n\n let service = KubernetesServiceConverter.applicationFormValuesToService(formValues);\n if (!service.Ports.length) {\n service = undefined;\n }\n\n return [app, headlessService, service, claims];\n }\n}\n\nexport default KubernetesApplicationConverter;\n","export const KubernetesPortainerNodeDrainLabel = 'io.portainer/node-status-drain';\n\n/**\n * KubernetesNode Model\n */\nconst _KubernetesNode = Object.freeze({\n Id: '',\n Name: '',\n Labels: {},\n Role: '',\n Status: '',\n CPU: 0,\n Memory: '',\n Version: '',\n IPAddress: '',\n Api: false,\n Taints: [],\n Port: 0,\n Availability: '',\n});\n\nexport class KubernetesNode {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesNode)));\n }\n}\n\n/**\n * KubernetesNodeDetails Model\n */\nconst _KubernetesNodeDetails = Object.freeze({\n CreationDate: '',\n OS: {\n Architecture: '',\n Platform: '',\n Image: '',\n },\n Conditions: [],\n Yaml: '',\n});\n\nexport class KubernetesNodeDetails {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesNode)));\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesNodeDetails)));\n }\n}\n\n/**\n * KubernetesNodeTaint Model\n */\nconst _KubernetesNodeTaint = Object.freeze({\n Key: '',\n Value: '',\n Effect: '',\n});\n\nexport class KubernetesNodeTaint {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesNodeTaint)));\n }\n}\n\nexport const KubernetesNodeAvailabilities = Object.freeze({\n ACTIVE: 'Active',\n PAUSE: 'Pause',\n DRAIN: 'Drain',\n});\n\nexport const KubernetesNodeTaintEffects = Object.freeze({\n NOSCHEDULE: 'NoSchedule',\n PREFERNOSCHEDULE: 'PreferNoSchedule',\n NOEXECUTE: 'NoExecute',\n});\n","import { KubernetesConfigurationTypes } from './models';\n\n/**\n * KubernetesConfigurationFormValues Model\n */\nconst _KubernetesConfigurationFormValues = Object.freeze({\n Id: '',\n ResourcePool: '',\n Name: '',\n ConfigurationOwner: '',\n Type: KubernetesConfigurationTypes.CONFIGMAP,\n Data: [],\n DataYaml: '',\n IsSimple: true,\n});\n\nexport class KubernetesConfigurationFormValues {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesConfigurationFormValues)));\n }\n}\n\nconst _KubernetesConfigurationFormValuesEntry = Object.freeze({\n Key: '',\n Value: '',\n IsBinary: false,\n});\n\nexport class KubernetesConfigurationFormValuesEntry {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesConfigurationFormValuesEntry)));\n }\n}\n","export const KubernetesIngressClassAnnotation = 'kubernetes.io/ingress.class';\n\n// keys must match KubernetesIngressClassTypes values to map them quickly using the ingress type\n// KubernetesIngressClassRewriteTargetAnnotations[KubernetesIngressClassTypes.NGINX] for example\nexport const KubernetesIngressClassRewriteTargetAnnotations = Object.freeze({\n nginx: { 'nginx.ingress.kubernetes.io/rewrite-target': '/' },\n traefik: { 'traefik.ingress.kubernetes.io/rewrite-target': '/' },\n});\n\nexport const KubernetesIngressClassTypes = Object.freeze({\n NGINX: 'nginx',\n TRAEFIK: 'traefik',\n});\n","import _ from 'lodash-es';\nimport { KubernetesConfigMap, KubernetesPortainerAccessConfigMap } from 'Kubernetes/models/config-map/models';\nimport { KubernetesConfigMapCreatePayload, KubernetesConfigMapUpdatePayload } from 'Kubernetes/models/config-map/payloads';\nimport { KubernetesPortainerConfigurationOwnerLabel } from 'Kubernetes/models/configuration/models';\nimport { KubernetesConfigurationFormValuesEntry } from 'Kubernetes/models/configuration/formvalues';\n\nclass KubernetesConfigMapConverter {\n static apiToPortainerAccessConfigMap(data) {\n const res = new KubernetesPortainerAccessConfigMap();\n res.Id = data.metadata.uid;\n res.Data = data.data;\n return res;\n }\n\n static createAccessPayload(data) {\n const res = new KubernetesConfigMapCreatePayload();\n _.unset(res, 'binaryData');\n res.metadata.name = data.Name;\n res.metadata.namespace = data.Namespace;\n res.data = data.Data;\n return res;\n }\n\n static updateAccessPayload(data) {\n const res = KubernetesConfigMapConverter.createAccessPayload(data);\n res.metadata.uid = data.Id;\n return res;\n }\n\n /**\n * API ConfigMap to front ConfigMap\n */\n static apiToConfigMap(data, yaml) {\n const res = new KubernetesConfigMap();\n res.Id = data.metadata.uid;\n res.Name = data.metadata.name;\n res.Namespace = data.metadata.namespace;\n res.ConfigurationOwner = data.metadata.labels ? data.metadata.labels[KubernetesPortainerConfigurationOwnerLabel] : '';\n res.CreationDate = data.metadata.creationTimestamp;\n res.Yaml = yaml ? yaml.data : '';\n\n res.Data = _.concat(\n _.map(data.data, (value, key) => {\n const entry = new KubernetesConfigurationFormValuesEntry();\n entry.Key = key;\n entry.Value = value;\n return entry;\n }),\n _.map(data.binaryData, (value, key) => {\n const entry = new KubernetesConfigurationFormValuesEntry();\n entry.Key = key;\n entry.Value = value;\n entry.IsBinary = true;\n return entry;\n })\n );\n\n return res;\n }\n\n /**\n * Generate a default ConfigMap Model\n * with ID = 0 (showing it's a default)\n * but setting his Namespace and Name\n */\n static defaultConfigMap(namespace, name) {\n const res = new KubernetesConfigMap();\n res.Name = name;\n res.Namespace = namespace;\n return res;\n }\n\n /**\n * CREATE payload\n */\n static createPayload(data) {\n const res = new KubernetesConfigMapCreatePayload();\n res.metadata.name = data.Name;\n res.metadata.namespace = data.Namespace;\n const configurationOwner = _.truncate(data.ConfigurationOwner, { length: 63, omission: '' });\n res.metadata.labels[KubernetesPortainerConfigurationOwnerLabel] = configurationOwner;\n\n _.forEach(data.Data, (entry) => {\n if (entry.IsBinary) {\n res.binaryData[entry.Key] = entry.Value;\n } else {\n res.data[entry.Key] = entry.Value;\n }\n });\n return res;\n }\n\n /**\n * UPDATE payload\n */\n static updatePayload(data) {\n const res = new KubernetesConfigMapUpdatePayload();\n res.metadata.uid = data.Id;\n res.metadata.name = data.Name;\n res.metadata.namespace = data.Namespace;\n res.metadata.labels[KubernetesPortainerConfigurationOwnerLabel] = data.ConfigurationOwner;\n _.forEach(data.Data, (entry) => {\n if (entry.IsBinary) {\n res.binaryData[entry.Key] = entry.Value;\n } else {\n res.data[entry.Key] = entry.Value;\n }\n });\n return res;\n }\n\n static configurationFormValuesToConfigMap(formValues) {\n const res = new KubernetesConfigMap();\n res.Id = formValues.Id;\n res.Name = formValues.Name;\n res.Namespace = formValues.ResourcePool.Namespace.Name;\n res.ConfigurationOwner = formValues.ConfigurationOwner;\n res.Data = formValues.Data;\n return res;\n }\n}\n\nexport default KubernetesConfigMapConverter;\n","/**\n * This model should be used with por-image-registry component\n * And bound to the 'model' attribute\n *\n * // viewController.js\n *\n * this.imageModel = new PorImageRegistryModel();\n *\n * // view.html\n * \n */\nexport function PorImageRegistryModel() {\n this.UseRegistry = true;\n this.Registry = {};\n this.Image = '';\n}\n","import { KubernetesConfigurationTypes } from 'Kubernetes/models/configuration/models';\nimport { KubernetesConfigurationFormValuesEntry } from 'Kubernetes/models/configuration/formvalues';\nimport _ from 'lodash-es';\nimport YAML from 'yaml';\n\nclass KubernetesConfigurationHelper {\n static getUsingApplications(config, applications) {\n return _.filter(applications, (app) => {\n let envFind;\n let volumeFind;\n if (config.Type === KubernetesConfigurationTypes.CONFIGMAP) {\n envFind = _.find(app.Env, { valueFrom: { configMapKeyRef: { name: config.Name } } });\n volumeFind = _.find(app.Volumes, { configMap: { name: config.Name } });\n } else {\n envFind = _.find(app.Env, { valueFrom: { secretKeyRef: { name: config.Name } } });\n volumeFind = _.find(app.Volumes, { secret: { secretName: config.Name } });\n }\n return envFind || volumeFind;\n });\n }\n\n static isSystemToken(config) {\n return _.startsWith(config.Name, 'default-token-');\n }\n\n static isBinary(encoding) {\n return encoding !== '' && !_.includes(encoding, 'ISO') && !_.includes(encoding, 'UTF');\n }\n\n static setConfigurationUsed(config) {\n config.Used = config.Applications && config.Applications.length !== 0;\n }\n\n static setConfigurationsUsed(configurations, applications) {\n _.forEach(configurations, (config) => {\n config.Applications = KubernetesConfigurationHelper.getUsingApplications(config, applications);\n KubernetesConfigurationHelper.setConfigurationUsed(config);\n });\n }\n\n static parseYaml(formValues) {\n YAML.defaultOptions.customTags = ['binary'];\n const data = _.map(YAML.parse(formValues.DataYaml), (value, key) => {\n const entry = new KubernetesConfigurationFormValuesEntry();\n entry.Key = key;\n entry.Value = value;\n const oldEntry = _.find(formValues.Data, { Key: entry.Key });\n entry.IsBinary = oldEntry ? oldEntry.IsBinary : false;\n return entry;\n });\n return data;\n }\n\n static parseData(formValues) {\n if (!formValues.Data.length) return '';\n\n const data = _.reduce(\n formValues.Data,\n (acc, entry) => {\n acc[entry.Key] = entry.Value;\n return acc;\n },\n {}\n );\n return YAML.stringify(data);\n }\n\n static isExternalConfiguration(configuration) {\n return !configuration.ConfigurationOwner;\n }\n}\n\nexport default KubernetesConfigurationHelper;\n","import _ from 'lodash-es';\nimport uuidv4 from 'uuid/v4';\nimport { KubernetesApplicationTypes } from 'Kubernetes/models/application/models';\n\nclass KubernetesVolumeHelper {\n // TODO: review\n // the following condition\n // && (app.ApplicationType === KubernetesApplicationTypes.STATEFULSET ? _.includes(volume.PersistentVolumeClaim.Name, app.Name) : true);\n // is made to enforce finding the good SFS when multiple SFS in the same namespace\n // are referencing an internal PVC using the same internal name\n // (PVC are not exposed to other apps so they can have the same name in differents SFS)\n static getUsingApplications(volume, applications) {\n return _.filter(applications, (app) => {\n const names = _.without(_.map(app.Volumes, 'persistentVolumeClaim.claimName'), undefined);\n const matchingNames = _.filter(names, (name) => _.startsWith(volume.PersistentVolumeClaim.Name, name));\n return (\n volume.ResourcePool.Namespace.Name === app.ResourcePool &&\n matchingNames.length &&\n (app.ApplicationType === KubernetesApplicationTypes.STATEFULSET ? _.includes(volume.PersistentVolumeClaim.Name, app.Name) : true)\n );\n });\n }\n\n static isUsed(item) {\n return item.Applications.length !== 0;\n }\n\n static generatedApplicationConfigVolumeName(name) {\n return 'config-' + name + '-' + uuidv4();\n }\n\n static isExternalVolume(volume) {\n return !volume.PersistentVolumeClaim.ApplicationOwner;\n }\n}\n\nexport default KubernetesVolumeHelper;\n","import * as JsonPatch from 'fast-json-patch';\nimport { KubernetesHorizontalPodAutoScaler } from './models';\nimport { KubernetesHorizontalPodAutoScalerCreatePayload } from './payload';\n\nexport class KubernetesHorizontalPodAutoScalerConverter {\n /**\n * Convert API data to KubernetesHorizontalPodAutoScaler model\n */\n static apiToModel(data, yaml) {\n const res = new KubernetesHorizontalPodAutoScaler();\n res.Id = data.metadata.uid;\n res.Namespace = data.metadata.namespace;\n res.Name = data.metadata.name;\n res.MinReplicas = data.spec.minReplicas;\n res.MaxReplicas = data.spec.maxReplicas;\n res.TargetCPUUtilization = data.spec.targetCPUUtilizationPercentage;\n\n if (data.spec.scaleTargetRef) {\n res.TargetEntity.ApiVersion = data.spec.scaleTargetRef.apiVersion;\n res.TargetEntity.Kind = data.spec.scaleTargetRef.kind;\n res.TargetEntity.Name = data.spec.scaleTargetRef.name;\n }\n res.Yaml = yaml ? yaml.data : '';\n return res;\n }\n\n static createPayload(data) {\n const payload = new KubernetesHorizontalPodAutoScalerCreatePayload();\n payload.metadata.namespace = data.Namespace;\n payload.metadata.name = data.TargetEntity.Name;\n payload.spec.minReplicas = data.MinReplicas;\n payload.spec.maxReplicas = data.MaxReplicas;\n payload.spec.targetCPUUtilizationPercentage = data.TargetCPUUtilization;\n payload.spec.scaleTargetRef.apiVersion = data.TargetEntity.ApiVersion;\n payload.spec.scaleTargetRef.kind = data.TargetEntity.Kind;\n payload.spec.scaleTargetRef.name = data.TargetEntity.Name;\n return payload;\n }\n\n static patchPayload(oldScaler, newScaler) {\n const oldPayload = KubernetesHorizontalPodAutoScalerConverter.createPayload(oldScaler);\n const newPayload = KubernetesHorizontalPodAutoScalerConverter.createPayload(newScaler);\n const payload = JsonPatch.compare(oldPayload, newPayload);\n return payload;\n }\n\n static applicationFormValuesToModel(formValues, kind) {\n const res = new KubernetesHorizontalPodAutoScaler();\n res.Name = formValues.Name;\n res.Namespace = formValues.ResourcePool.Namespace.Name;\n res.MinReplicas = formValues.AutoScaler.MinReplicas;\n res.MaxReplicas = formValues.AutoScaler.MaxReplicas;\n res.TargetCPUUtilization = formValues.AutoScaler.TargetCPUUtilization;\n res.TargetEntity.Name = formValues.Name;\n res.TargetEntity.Kind = kind;\n res.TargetEntity.ApiVersion = formValues.AutoScaler.ApiVersion;\n return res;\n }\n\n /**\n * Convertion functions to use with v2beta2 model\n */\n\n // static apiToModel(data, yaml) {\n // const res = new KubernetesHorizontalPodAutoScaler();\n // res.Id = data.metadata.uid;\n // res.Namespace = data.metadata.namespace;\n // res.Name = data.metadata.name;\n // res.MinReplicas = data.spec.minReplicas;\n // res.MaxReplicas = data.spec.maxReplicas;\n // res.TargetCPUUtilization = data.spec.targetCPUUtilization;\n\n // _.forEach(data.spec.metrics, (metric) => {\n // if (metric.type === 'Resource') {\n // if (metric.resource.name === 'cpu') {\n // res.TargetCPUUtilization = metric.resource.target.averageUtilization;\n // }\n // if (metric.resource.name === 'memory') {\n // res.TargetMemoryValue = parseFloat(metric.resource.target.averageValue) / 1000;\n // }\n // }\n // });\n\n // if (data.spec.scaleTargetRef) {\n // res.TargetEntity.ApiVersion = data.spec.scaleTargetRef.apiVersion;\n // res.TargetEntity.Kind = data.spec.scaleTargetRef.kind;\n // res.TargetEntity.Name = data.spec.scaleTargetRef.name;\n // }\n // res.Yaml = yaml ? yaml.data : '';\n // return res;\n // }\n\n // static createPayload(data) {\n // const payload = new KubernetesHorizontalPodAutoScalerCreatePayload();\n // payload.metadata.namespace = data.Namespace;\n // payload.metadata.name = data.TargetEntity.Name;\n // payload.spec.minReplicas = data.MinReplicas;\n // payload.spec.maxReplicas = data.MaxReplicas;\n\n // if (data.TargetMemoryValue) {\n // const memoryMetric = new KubernetesHorizontalPodAutoScalerMemoryMetric();\n // memoryMetric.resource.target.averageValue = data.TargetMemoryValue;\n // payload.spec.metrics.push(memoryMetric);\n // }\n\n // if (data.TargetCPUUtilization) {\n // const cpuMetric = new KubernetesHorizontalPodAutoScalerCPUMetric();\n // cpuMetric.resource.target.averageUtilization = data.TargetCPUUtilization;\n // payload.spec.metrics.push(cpuMetric);\n // }\n\n // payload.spec.scaleTargetRef.apiVersion = data.TargetEntity.ApiVersion;\n // payload.spec.scaleTargetRef.kind = data.TargetEntity.Kind;\n // payload.spec.scaleTargetRef.name = data.TargetEntity.Name;\n\n // return payload;\n // }\n\n // static applicationFormValuesToModel(formValues, kind) {\n // const res = new KubernetesHorizontalPodAutoScaler();\n // res.Name = formValues.Name;\n // res.Namespace = formValues.ResourcePool.Namespace.Name;\n // res.MinReplicas = formValues.AutoScaler.MinReplicas;\n // res.MaxReplicas = formValues.AutoScaler.MaxReplicas;\n // res.TargetCPUUtilization = formValues.AutoScaler.TargetCPUUtilization;\n // if (formValues.AutoScaler.TargetMemoryValue) {\n // res.TargetMemoryValue = formValues.AutoScaler.TargetMemoryValue + 'M';\n // }\n // res.TargetEntity.Name = formValues.Name;\n // res.TargetEntity.Kind = kind;\n // return res;\n // }\n}\n","import _ from 'lodash-es';\n\nexport const KEY_REGEX = /(.+)/.source;\nexport const VALUE_REGEX = /(.*)?/.source;\n\nconst KEY_VALUE_REGEX = new RegExp(`^(${KEY_REGEX})\\\\s*=(${VALUE_REGEX})$`);\nconst NEWLINES_REGEX = /\\n|\\r|\\r\\n/;\n\n/**\n * @param {string} src the source of the .env file\n *\n * @returns {[{name: string, value: string}]} array of {name, value}\n */\nexport function parseDotEnvFile(src) {\n return parseArrayOfStrings(\n _.compact(src.split(NEWLINES_REGEX))\n .map((v) => v.trim())\n .filter((v) => !v.startsWith('#') && v !== '')\n );\n}\n\n/**\n * parses an array of name=value to array of {name, value}\n *\n * @param {[string]} array array of strings in format name=value\n *\n * @returns {[{name: string, value: string}]} array of {name, value}\n */\nexport function parseArrayOfStrings(array) {\n if (!array) {\n return [];\n }\n\n return _.compact(\n array.map((variableString) => {\n if (!variableString.includes('=')) {\n return { name: variableString };\n }\n\n const parsedKeyValArr = variableString.trim().match(KEY_VALUE_REGEX);\n if (parsedKeyValArr != null && parsedKeyValArr.length > 4) {\n return { name: parsedKeyValArr[1].trim(), value: parsedKeyValArr[3].trim() || '' };\n }\n })\n );\n}\n/**\n * converts an array of {name, value} to array of `name=value`, name is always defined\n *\n * @param {[{name, value}]} array array of {name, value}\n *\n * @returns {[string]} array of `name=value`\n */\nexport function convertToArrayOfStrings(array) {\n if (!array) {\n return [];\n }\n\n return array.filter((variable) => variable.name).map(({ name, value }) => (value || value === '' ? `${name}=${value}` : name));\n}\n","/**\n * KubernetesStatefulSet Model\n */\nconst _KubernetesStatefulSet = Object.freeze({\n Namespace: '',\n Name: '',\n StackName: '',\n ReplicaCount: 0,\n Image: '',\n Env: [],\n CpuLimit: '',\n MemoryLimit: '',\n VolumeMounts: [],\n Volumes: [],\n Secret: undefined,\n VolumeClaims: [],\n ServiceName: '',\n ApplicationName: '',\n ApplicationOwner: '',\n Note: '',\n Affinity: undefined, // KubernetesPodAffinity\n});\n\nexport class KubernetesStatefulSet {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesStatefulSet)));\n }\n}\n","/////////////////////////// VOLUME MOUNT ///////////////////////////////\n/**\n * KubernetesApplicationVolumeMount Model\n */\nconst _KubernetesApplicationVolumeMount = Object.freeze({\n name: '',\n mountPath: '',\n readOnly: false,\n});\n\nexport class KubernetesApplicationVolumeMountPayload {\n constructor(readOnly) {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationVolumeMount)));\n if (readOnly) {\n this.readOnly = true;\n } else {\n delete this.readOnly;\n }\n }\n}\n\n///////////////////////////////// PVC /////////////////////////////////\n/**\n * KubernetesApplicationVolumePersistentPayload Model\n */\nconst _KubernetesApplicationVolumePersistentPayload = Object.freeze({\n name: '',\n persistentVolumeClaim: {\n claimName: '',\n },\n});\n\nexport class KubernetesApplicationVolumePersistentPayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationVolumePersistentPayload)));\n }\n}\n\n/////////////////////////////// CONFIG AS VOLUME ////////////////////////\n/**\n * KubernetesApplicationVolumeConfigMapPayload Model\n */\nconst _KubernetesApplicationVolumeConfigMapPayload = Object.freeze({\n name: '',\n configMap: {\n name: '',\n items: [], // KubernetesApplicationVolumeEntryPayload\n },\n});\n\nexport class KubernetesApplicationVolumeConfigMapPayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationVolumeConfigMapPayload)));\n }\n}\n\n//////////////////// SECRET AS VOLUME /////////////////////////////////////\n/**\n * KubernetesApplicationVolumeSecretPayload Model\n */\nconst _KubernetesApplicationVolumeSecretPayload = Object.freeze({\n name: '',\n secret: {\n secretName: '',\n items: [], // KubernetesApplicationVolumeEntryPayload\n },\n});\n\nexport class KubernetesApplicationVolumeSecretPayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationVolumeSecretPayload)));\n }\n}\n\n/**\n * KubernetesApplicationVolumeEntryPayload Model\n */\nconst _KubernetesApplicationVolumeEntryPayload = Object.freeze({\n key: '',\n path: '',\n});\n\nexport class KubernetesApplicationVolumeEntryPayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationVolumeEntryPayload)));\n }\n}\n\n//////////////////////////// ENV ENTRY //////////////////////////////\n/**\n * KubernetesApplicationEnvPayload Model\n */\nconst _KubernetesApplicationEnvPayload = Object.freeze({\n name: '',\n value: '',\n});\n\nexport class KubernetesApplicationEnvPayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationEnvPayload)));\n }\n}\n\n///////////////////////// CONFIG AS ENV ////////////////////////////////\n/**\n * KubernetesApplicationEnvConfigMapPayload Model\n */\nconst _KubernetesApplicationEnvConfigMapPayload = Object.freeze({\n name: '',\n valueFrom: {\n configMapKeyRef: {\n name: '',\n key: '',\n },\n },\n});\n\nexport class KubernetesApplicationEnvConfigMapPayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationEnvConfigMapPayload)));\n }\n}\n\n//////////////////////// SECRET AS ENV //////////////////////////////////\n/**\n * KubernetesApplicationEnvSecretPayload Model\n */\nconst _KubernetesApplicationEnvSecretPayload = Object.freeze({\n name: '',\n valueFrom: {\n secretKeyRef: {\n name: '',\n key: '',\n },\n },\n});\n\nexport class KubernetesApplicationEnvSecretPayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationEnvSecretPayload)));\n }\n}\n","export const KubernetesPortainerResourcePoolNameLabel = 'io.portainer.kubernetes.resourcepool.name';\n\nexport const KubernetesPortainerResourcePoolOwnerLabel = 'io.portainer.kubernetes.resourcepool.owner';\n\n/**\n * KubernetesResourcePool Model\n */\nexport function KubernetesResourcePool() {\n return {\n Namespace: {}, // KubernetesNamespace\n Quota: undefined, // KubernetesResourceQuota,\n Ingresses: [], // KubernetesIngress[]\n Yaml: '',\n };\n}\n","import _ from 'lodash-es';\nimport * as JsonPatch from 'fast-json-patch';\n\nimport { KubernetesPersistentVolumeClaim } from 'Kubernetes/models/volume/models';\nimport { KubernetesPersistentVolumClaimCreatePayload } from 'Kubernetes/models/volume/payloads';\nimport { KubernetesPortainerApplicationOwnerLabel, KubernetesPortainerApplicationNameLabel } from 'Kubernetes/models/application/models';\n\nclass KubernetesPersistentVolumeClaimConverter {\n static apiToPersistentVolumeClaim(data, storageClasses, yaml) {\n const res = new KubernetesPersistentVolumeClaim();\n res.Id = data.metadata.uid;\n res.Name = data.metadata.name;\n res.Namespace = data.metadata.namespace;\n res.CreationDate = data.metadata.creationTimestamp;\n res.Storage = `${data.spec.resources.requests.storage}B`;\n res.StorageClass = _.find(storageClasses, { Name: data.spec.storageClassName });\n res.Yaml = yaml ? yaml.data : '';\n res.ApplicationOwner = data.metadata.labels ? data.metadata.labels[KubernetesPortainerApplicationOwnerLabel] : '';\n res.ApplicationName = data.metadata.labels ? data.metadata.labels[KubernetesPortainerApplicationNameLabel] : '';\n return res;\n }\n\n /**\n * Generate KubernetesPersistentVolumeClaim list from KubernetesApplicationFormValues\n * @param {KubernetesApplicationFormValues} formValues\n */\n static applicationFormValuesToVolumeClaims(formValues) {\n _.remove(formValues.PersistedFolders, (item) => item.NeedsDeletion);\n const res = _.map(formValues.PersistedFolders, (item) => {\n const pvc = new KubernetesPersistentVolumeClaim();\n if (!_.isEmpty(item.ExistingVolume)) {\n const existantPVC = item.ExistingVolume.PersistentVolumeClaim;\n pvc.Name = existantPVC.Name;\n if (item.PersistentVolumeClaimName) {\n pvc.PreviousName = item.PersistentVolumeClaimName;\n }\n pvc.StorageClass = existantPVC.StorageClass;\n pvc.Storage = existantPVC.Storage.charAt(0);\n pvc.CreationDate = existantPVC.CreationDate;\n pvc.Id = existantPVC.Id;\n } else {\n if (item.PersistentVolumeClaimName) {\n pvc.Name = item.PersistentVolumeClaimName;\n pvc.PreviousName = item.PersistentVolumeClaimName;\n } else {\n pvc.Name = formValues.Name + '-' + pvc.Name;\n }\n pvc.Storage = '' + item.Size + item.SizeUnit.charAt(0);\n pvc.StorageClass = item.StorageClass;\n }\n pvc.MountPath = item.ContainerPath;\n pvc.Namespace = formValues.ResourcePool.Namespace.Name;\n pvc.ApplicationOwner = formValues.ApplicationOwner;\n pvc.ApplicationName = formValues.Name;\n return pvc;\n });\n return res;\n }\n\n static createPayload(pvc) {\n const res = new KubernetesPersistentVolumClaimCreatePayload();\n res.metadata.name = pvc.Name;\n res.metadata.namespace = pvc.Namespace;\n res.spec.resources.requests.storage = pvc.Storage;\n res.spec.storageClassName = pvc.StorageClass ? pvc.StorageClass.Name : '';\n res.metadata.labels.app = pvc.ApplicationName;\n res.metadata.labels[KubernetesPortainerApplicationOwnerLabel] = pvc.ApplicationOwner;\n res.metadata.labels[KubernetesPortainerApplicationNameLabel] = pvc.ApplicationName;\n return res;\n }\n\n static patchPayload(oldPVC, newPVC) {\n const oldPayload = KubernetesPersistentVolumeClaimConverter.createPayload(oldPVC);\n const newPayload = KubernetesPersistentVolumeClaimConverter.createPayload(newPVC);\n const payload = JsonPatch.compare(oldPayload, newPayload);\n return payload;\n }\n}\n\nexport default KubernetesPersistentVolumeClaimConverter;\n","import _ from 'lodash-es';\n\nimport { KubernetesNode, KubernetesNodeDetails, KubernetesNodeTaint, KubernetesNodeAvailabilities, KubernetesPortainerNodeDrainLabel } from 'Kubernetes/node/models';\nimport KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';\nimport { KubernetesNodeFormValues, KubernetesNodeTaintFormValues, KubernetesNodeLabelFormValues } from 'Kubernetes/node/formValues';\nimport { KubernetesNodeCreatePayload, KubernetesNodeTaintPayload } from 'Kubernetes/node/payload';\nimport * as JsonPatch from 'fast-json-patch';\n\nclass KubernetesNodeConverter {\n static apiToNode(data, res) {\n if (!res) {\n res = new KubernetesNode();\n }\n res.Id = data.metadata.uid;\n const hostName = _.find(data.status.addresses, { type: 'Hostname' });\n res.Name = hostName ? hostName.address : data.metadata.Name;\n res.Labels = data.metadata.labels;\n res.Role = _.has(data.metadata.labels, 'node-role.kubernetes.io/master') ? 'Master' : 'Worker';\n\n const ready = _.find(data.status.conditions, { type: KubernetesNodeConditionTypes.READY });\n const memoryPressure = _.find(data.status.conditions, { type: KubernetesNodeConditionTypes.MEMORY_PRESSURE });\n const PIDPressure = _.find(data.status.conditions, { type: KubernetesNodeConditionTypes.PID_PRESSURE });\n const diskPressure = _.find(data.status.conditions, { type: KubernetesNodeConditionTypes.DISK_PRESSURE });\n const networkUnavailable = _.find(data.status.conditions, { type: KubernetesNodeConditionTypes.NETWORK_UNAVAILABLE });\n\n res.Conditions = {\n MemoryPressure: memoryPressure && memoryPressure.status === 'True',\n PIDPressure: PIDPressure && PIDPressure.status === 'True',\n DiskPressure: diskPressure && diskPressure.status === 'True',\n NetworkUnavailable: networkUnavailable && networkUnavailable.status === 'True',\n };\n\n res.Availability = KubernetesNodeAvailabilities.ACTIVE;\n if (data.spec.unschedulable === true) {\n res.Availability = _.has(data.metadata.labels, KubernetesPortainerNodeDrainLabel) ? KubernetesNodeAvailabilities.DRAIN : KubernetesNodeAvailabilities.PAUSE;\n }\n\n if (ready.status === 'False') {\n res.Status = 'Unhealthy';\n } else if (ready.status === 'Unknown' || res.Conditions.MemoryPressure || res.Conditions.PIDPressure || res.Conditions.DiskPressure || res.Conditions.NetworkUnavailable) {\n res.Status = 'Warning';\n } else {\n res.Status = 'Ready';\n }\n\n res.CPU = KubernetesResourceReservationHelper.parseCPU(data.status.allocatable.cpu);\n res.Memory = data.status.allocatable.memory;\n res.Version = data.status.nodeInfo.kubeletVersion;\n const internalIP = _.find(data.status.addresses, { type: 'InternalIP' });\n res.IPAddress = internalIP ? internalIP.address : '-';\n res.Taints = _.map(data.spec.taints, (taint) => {\n const res = new KubernetesNodeTaint();\n res.Key = taint.key;\n res.Value = taint.value;\n res.Effect = taint.effect;\n return res;\n });\n return res;\n }\n\n static apiToNodeDetails(data, yaml) {\n let res = new KubernetesNodeDetails();\n res = KubernetesNodeConverter.apiToNode(data, res);\n res.CreationDate = data.metadata.creationTimestamp;\n res.OS.Architecture = data.status.nodeInfo.architecture;\n res.OS.Platform = data.status.nodeInfo.operatingSystem;\n res.OS.Image = data.status.nodeInfo.osImage;\n res.Yaml = yaml ? yaml.data : '';\n return res;\n }\n\n static nodeToFormValues(node) {\n const res = new KubernetesNodeFormValues();\n\n res.Availability = node.Availability;\n\n res.Taints = _.map(node.Taints, (taint) => {\n const res = new KubernetesNodeTaintFormValues();\n res.Key = taint.Key;\n res.Value = taint.Value;\n res.Effect = taint.Effect;\n res.NeedsDeletion = false;\n res.IsNew = false;\n return res;\n });\n\n res.Labels = _.map(node.Labels, (value, key) => {\n const res = new KubernetesNodeLabelFormValues();\n res.Key = key;\n res.Value = value;\n res.NeedsDeletion = false;\n res.IsNew = false;\n return res;\n });\n\n return res;\n }\n\n static formValuesToNode(node, formValues) {\n const res = angular.copy(node);\n\n res.Availability = formValues.Availability;\n\n const filteredTaints = _.filter(formValues.Taints, (taint) => !taint.NeedsDeletion);\n res.Taints = _.map(filteredTaints, (item) => {\n const taint = new KubernetesNodeTaint();\n taint.Key = item.Key;\n taint.Value = item.Value;\n taint.Effect = item.Effect;\n return taint;\n });\n\n const filteredLabels = _.filter(formValues.Labels, (label) => !label.NeedsDeletion);\n res.Labels = _.reduce(\n filteredLabels,\n (acc, item) => {\n acc[item.Key] = item.Value ? item.Value : '';\n return acc;\n },\n {}\n );\n\n return res;\n }\n\n static createPayload(node) {\n const payload = new KubernetesNodeCreatePayload();\n payload.metadata.name = node.Name;\n\n const taints = _.map(node.Taints, (taint) => {\n const res = new KubernetesNodeTaintPayload();\n res.key = taint.Key;\n res.value = taint.Value;\n res.effect = taint.Effect;\n return res;\n });\n\n payload.spec.taints = taints.length ? taints : undefined;\n\n payload.metadata.labels = node.Labels;\n\n if (node.Availability !== KubernetesNodeAvailabilities.ACTIVE) {\n payload.spec.unschedulable = true;\n if (node.Availability === KubernetesNodeAvailabilities.DRAIN) {\n payload.metadata.labels[KubernetesPortainerNodeDrainLabel] = '';\n } else {\n delete payload.metadata.labels[KubernetesPortainerNodeDrainLabel];\n }\n }\n\n return payload;\n }\n\n static patchPayload(oldNode, newNode) {\n const oldPayload = KubernetesNodeConverter.createPayload(oldNode);\n const newPayload = KubernetesNodeConverter.createPayload(newNode);\n const payload = JsonPatch.compare(oldPayload, newPayload);\n return payload;\n }\n}\n\nexport const KubernetesNodeConditionTypes = Object.freeze({\n READY: 'Ready',\n MEMORY_PRESSURE: 'MemoryPressure',\n PID_PRESSURE: 'PIDPressure',\n DISK_PRESSURE: 'DiskPressure',\n NETWORK_UNAVAILABLE: 'NetworkUnavailable',\n});\n\nexport default KubernetesNodeConverter;\n","import _ from 'lodash-es';\n\nclass KubernetesEventHelper {\n static warningCount(events) {\n const warnings = _.filter(events, (event) => event.Type === 'Warning');\n return warnings.length;\n }\n}\n\nexport default KubernetesEventHelper;\n","// create UserAccessViewModel from UserViewModel\nexport function UserAccessViewModel(data) {\n this.Id = data.Id;\n this.Name = data.Username;\n this.Type = 'user';\n this.Inherited = false;\n this.Override = false;\n this.Role = { Id: 0, Name: '-' };\n this.icon = '';\n}\n\n// create TeamAccessViewModel from TeamViewModel\nexport function TeamAccessViewModel(data) {\n this.Id = data.Id;\n this.Name = data.Name;\n this.Type = 'team';\n this.Inherited = false;\n this.Override = false;\n this.Role = { Id: 0, Name: '-' };\n this.icon = '';\n}\n","import * as JsonPatch from 'fast-json-patch';\nimport filesizeParser from 'filesize-parser';\n\nimport {\n KubernetesResourceQuota,\n KubernetesPortainerResourceQuotaCPULimit,\n KubernetesPortainerResourceQuotaMemoryLimit,\n KubernetesPortainerResourceQuotaCPURequest,\n KubernetesPortainerResourceQuotaMemoryRequest,\n KubernetesResourceQuotaDefaults,\n} from 'Kubernetes/models/resource-quota/models';\nimport { KubernetesResourceQuotaCreatePayload } from 'Kubernetes/models/resource-quota/payloads';\nimport KubernetesResourceQuotaHelper from 'Kubernetes/helpers/resourceQuotaHelper';\nimport { KubernetesPortainerResourcePoolNameLabel, KubernetesPortainerResourcePoolOwnerLabel } from 'Kubernetes/models/resource-pool/models';\nimport KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';\nimport KubernetesCommonHelper from 'Kubernetes/helpers/commonHelper';\nimport { KubernetesResourcePoolFormValues } from 'Kubernetes/models/resource-pool/formValues';\n\nclass KubernetesResourceQuotaConverter {\n static apiToResourceQuota(data, yaml) {\n const res = new KubernetesResourceQuota();\n res.Id = data.metadata.uid;\n res.Namespace = data.metadata.namespace;\n res.Name = data.metadata.name;\n res.CpuLimit = 0;\n res.MemoryLimit = 0;\n if (data.spec.hard && data.spec.hard[KubernetesPortainerResourceQuotaCPULimit]) {\n res.CpuLimit = KubernetesResourceReservationHelper.parseCPU(data.spec.hard[KubernetesPortainerResourceQuotaCPULimit]);\n }\n if (data.spec.hard && data.spec.hard[KubernetesPortainerResourceQuotaMemoryLimit]) {\n res.MemoryLimit = filesizeParser(data.spec.hard[KubernetesPortainerResourceQuotaMemoryLimit], { base: 10 });\n }\n\n res.MemoryLimitUsed = 0;\n if (data.status.used && data.status.used[KubernetesPortainerResourceQuotaMemoryLimit]) {\n res.MemoryLimitUsed = filesizeParser(data.status.used[KubernetesPortainerResourceQuotaMemoryLimit], { base: 10 });\n }\n\n res.CpuLimitUsed = 0;\n if (data.status.used && data.status.used[KubernetesPortainerResourceQuotaCPULimit]) {\n res.CpuLimitUsed = KubernetesResourceReservationHelper.parseCPU(data.status.used[KubernetesPortainerResourceQuotaCPULimit]);\n }\n res.Yaml = yaml ? yaml.data : '';\n res.ResourcePoolName = data.metadata.labels ? data.metadata.labels[KubernetesPortainerResourcePoolNameLabel] : '';\n res.ResourcePoolOwner = data.metadata.labels ? data.metadata.labels[KubernetesPortainerResourcePoolOwnerLabel] : '';\n return res;\n }\n\n static createPayload(quota) {\n const res = new KubernetesResourceQuotaCreatePayload();\n res.metadata.name = KubernetesResourceQuotaHelper.generateResourceQuotaName(quota.Namespace);\n res.metadata.namespace = quota.Namespace;\n KubernetesCommonHelper.assignOrDeleteIfEmptyOrZero(res, `spec.hard['${KubernetesPortainerResourceQuotaCPURequest}']`, quota.CpuLimit);\n KubernetesCommonHelper.assignOrDeleteIfEmptyOrZero(res, `spec.hard['${KubernetesPortainerResourceQuotaMemoryRequest}']`, quota.MemoryLimit);\n KubernetesCommonHelper.assignOrDeleteIfEmptyOrZero(res, `spec.hard['${KubernetesPortainerResourceQuotaCPULimit}']`, quota.CpuLimit);\n KubernetesCommonHelper.assignOrDeleteIfEmptyOrZero(res, `spec.hard['${KubernetesPortainerResourceQuotaMemoryLimit}']`, quota.MemoryLimit);\n res.metadata.labels[KubernetesPortainerResourcePoolNameLabel] = quota.ResourcePoolName;\n if (quota.ResourcePoolOwner) {\n res.metadata.labels[KubernetesPortainerResourcePoolOwnerLabel] = quota.ResourcePoolOwner;\n }\n return res;\n }\n\n static updatePayload(quota) {\n const res = KubernetesResourceQuotaConverter.createPayload(quota);\n res.metadata.uid = quota.Id;\n return res;\n }\n\n static patchPayload(oldQuota, newQuota) {\n const oldPayload = KubernetesResourceQuotaConverter.createPayload(oldQuota);\n const newPayload = KubernetesResourceQuotaConverter.createPayload(newQuota);\n const payload = JsonPatch.compare(oldPayload, newPayload);\n return payload;\n }\n\n static quotaToResourcePoolFormValues(quota) {\n const res = new KubernetesResourcePoolFormValues(KubernetesResourceQuotaDefaults);\n res.Name = quota.Namespace;\n res.CpuLimit = quota.CpuLimit;\n res.MemoryLimit = KubernetesResourceReservationHelper.megaBytesValue(quota.MemoryLimit);\n if (res.CpuLimit || res.MemoryLimit) {\n res.HasQuota = true;\n }\n res.StorageClasses = quota.StorageRequests;\n return res;\n }\n\n static resourcePoolFormValuesToResourceQuota(formValues) {\n if (formValues.HasQuota) {\n const quota = new KubernetesResourceQuota(formValues.Name);\n if (formValues.HasQuota) {\n quota.CpuLimit = formValues.CpuLimit;\n quota.MemoryLimit = KubernetesResourceReservationHelper.bytesValue(formValues.MemoryLimit);\n }\n quota.ResourcePoolName = formValues.Name;\n quota.ResourcePoolOwner = formValues.Owner;\n return quota;\n }\n }\n}\n\nexport default KubernetesResourceQuotaConverter;\n","import _ from 'lodash-es';\nimport PortainerError from 'Portainer/error';\nimport { KubernetesApplication, KubernetesApplicationTypes, KubernetesApplicationTypeStrings } from 'Kubernetes/models/application/models';\nimport { KubernetesDeployment } from 'Kubernetes/models/deployment/models';\nimport { KubernetesStatefulSet } from 'Kubernetes/models/stateful-set/models';\nimport { KubernetesDaemonSet } from 'Kubernetes/models/daemon-set/models';\n\nexport class KubernetesHorizontalPodAutoScalerHelper {\n static findApplicationBoundScaler(sList, app) {\n const kind = KubernetesHorizontalPodAutoScalerHelper.getApplicationTypeString(app);\n return _.find(sList, (item) => item.TargetEntity.Kind === kind && item.TargetEntity.Name === app.Name);\n }\n\n static getApplicationTypeString(app) {\n if ((app instanceof KubernetesApplication && app.ApplicationType === KubernetesApplicationTypes.DEPLOYMENT) || app instanceof KubernetesDeployment) {\n return KubernetesApplicationTypeStrings.DEPLOYMENT;\n } else if ((app instanceof KubernetesApplication && app.ApplicationType === KubernetesApplicationTypes.DAEMONSET) || app instanceof KubernetesDaemonSet) {\n return KubernetesApplicationTypeStrings.DAEMONSET;\n } else if ((app instanceof KubernetesApplication && app.ApplicationType === KubernetesApplicationTypes.STATEFULSET) || app instanceof KubernetesStatefulSet) {\n return KubernetesApplicationTypeStrings.STATEFULSET;\n } else if (app instanceof KubernetesApplication && app.ApplicationType === KubernetesApplicationTypes.POD) {\n return KubernetesApplicationTypeStrings.POD;\n } else {\n throw new PortainerError('Unable to determine application type');\n }\n }\n}\n","export const KubernetesDeployManifestTypes = Object.freeze({\n KUBERNETES: 1,\n COMPOSE: 2,\n});\n\nexport const KubernetesDeployBuildMethods = Object.freeze({\n GIT: 1,\n WEB_EDITOR: 2,\n});\n\nexport const KubernetesDeployRequestMethods = Object.freeze({\n REPOSITORY: 'repository',\n STRING: 'string',\n});\n","import { KubernetesPortainerResourceQuotaPrefix } from 'Kubernetes/models/resource-quota/models';\n\nclass KubernetesResourceQuotaHelper {\n static generateResourceQuotaName(name) {\n return KubernetesPortainerResourceQuotaPrefix + name;\n }\n\n static formatBytes(bytes, decimals = 0, base10 = true) {\n const res = {\n Size: 0,\n SizeUnit: 'B',\n };\n\n if (bytes === 0) {\n return res;\n }\n\n const k = base10 ? 1000 : 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return {\n Size: parseFloat((bytes / Math.pow(k, i)).toFixed(dm)),\n SizeUnit: sizes[i],\n };\n }\n}\n\nexport default KubernetesResourceQuotaHelper;\n","export function StoridgeProfileDefaultModel() {\n this.Directory = '/cio/';\n this.Capacity = 20;\n this.Redundancy = 2;\n this.Provisioning = 'thin';\n this.Type = 'ssd';\n this.MinIOPS = 100;\n this.MaxIOPS = 2000;\n this.MinBandwidth = 1;\n this.MaxBandwidth = 100;\n this.Filesystem = 'btrfs';\n this.SnapshotEnabled = false;\n this.SnapshotInterval = 1440;\n this.SnapshotMax = 1;\n this.EncryptionEnabled = false;\n this.InterfaceType = '';\n this.InterfaceDriver = '';\n this.InterfaceNetwork = '';\n this.InterfaceConf = '';\n this.Labels = [];\n}\n\nexport function StoridgeProfileListModel(data) {\n this.Name = data;\n this.Checked = false;\n}\n\nexport function StoridgeProfileModel(name, data) {\n this.Name = name;\n this.Directory = data.directory;\n this.Capacity = data.capacity;\n this.Provisioning = data.provision;\n this.Type = data.type;\n this.Redundancy = data.level;\n\n if (data.iops) {\n this.MinIOPS = data.iops.min;\n this.MaxIOPS = data.iops.max;\n }\n\n if (data.bandwidth) {\n this.MinBandwidth = data.bandwidth.min;\n this.MaxBandwidth = data.bandwidth.max;\n }\n\n if (data.filesystem) {\n this.Filesystem = data.filesystem.type;\n }\n // this.Filesystem = data.filesystem;\n\n var service = data.service;\n\n if (service.snapshot) {\n this.SnapshotEnabled = service.snapshot.enabled;\n this.SnapshotInterval = service.snapshot.interval;\n this.SnapshotMax = service.snapshot.max;\n } else {\n this.SnapshotEnabled = false;\n }\n\n if (service.encryption) {\n this.EncryptionEnabled = service.encryption.enabled;\n } else {\n this.EncryptionEnabled = false;\n }\n\n if (data.interface) {\n this.InterfaceType = data.interface.type;\n this.InterfaceDriver = data.interface.driver;\n this.InterfaceNetwork = data.interface.network;\n this.InterfaceConf = data.interface.conf;\n }\n\n if (data.label) {\n this.Labels = data.label;\n } else {\n this.Labels = [];\n }\n}\n\nexport function StoridgeCreateProfileRequest(model) {\n this.name = model.Name;\n this.capacity = model.Capacity;\n this.directory = model.Directory;\n this.provision = model.Provisioning;\n this.type = model.Type;\n this.level = model.Redundancy;\n if (model.MinIOPS && model.MaxIOPS) {\n this.iops = {\n min: model.MinIOPS,\n max: model.MaxIOPS,\n };\n }\n\n if (model.MinBandwidth && model.MaxBandwidth) {\n this.bandwidth = {\n min: model.MinBandwidth,\n max: model.MaxBandwidth,\n };\n }\n\n this.filesystem = {\n type: model.Filesystem,\n };\n\n var service = {};\n\n service.snapshot = {\n enabled: model.SnapshotEnabled,\n };\n if (model.SnapshotEnabled) {\n service.snapshot.interval = model.SnapshotInterval;\n service.snapshot.max = model.SnapshotMax;\n }\n\n service.encryption = {\n enabled: model.EncryptionEnabled,\n };\n\n this.service = service;\n\n this.interface = {\n driver: model.InterfaceDriver,\n network: model.InterfaceNetwork,\n conf: model.InterfaceConf,\n };\n\n if (model.InterfaceType) {\n this.interface.type = model.InterfaceType;\n }\n\n this.label = model.Labels;\n}\n","import _ from 'lodash-es';\n\nimport { KubernetesResourcePool } from 'Kubernetes/models/resource-pool/models';\nimport { KubernetesNamespace } from 'Kubernetes/models/namespace/models';\nimport { KubernetesIngressConverter } from 'Kubernetes/ingress/converter';\nimport KubernetesResourceQuotaConverter from './resourceQuota';\n\nclass KubernetesResourcePoolConverter {\n static apiToResourcePool(namespace) {\n const res = new KubernetesResourcePool();\n res.Namespace = namespace;\n res.Yaml = namespace.Yaml;\n return res;\n }\n\n static formValuesToResourcePool(formValues) {\n const namespace = new KubernetesNamespace();\n namespace.Name = formValues.Name;\n namespace.ResourcePoolName = formValues.Name;\n namespace.ResourcePoolOwner = formValues.Owner;\n\n const quota = KubernetesResourceQuotaConverter.resourcePoolFormValuesToResourceQuota(formValues);\n\n const ingMap = _.map(formValues.IngressClasses, (c) => {\n if (c.Selected) {\n c.Namespace = namespace.Name;\n return KubernetesIngressConverter.resourcePoolIngressClassFormValueToIngress(c);\n }\n });\n const ingresses = _.without(ingMap, undefined);\n return [namespace, quota, ingresses];\n }\n}\n\nexport default KubernetesResourcePoolConverter;\n","import { KubernetesSecretCreatePayload, KubernetesSecretUpdatePayload } from 'Kubernetes/models/secret/payloads';\nimport { KubernetesApplicationSecret } from 'Kubernetes/models/secret/models';\nimport { KubernetesPortainerConfigurationDataAnnotation } from 'Kubernetes/models/configuration/models';\nimport _ from 'lodash-es';\nimport { KubernetesPortainerConfigurationOwnerLabel } from 'Kubernetes/models/configuration/models';\nimport { KubernetesConfigurationFormValuesEntry } from 'Kubernetes/models/configuration/formvalues';\n\nclass KubernetesSecretConverter {\n static createPayload(secret) {\n const res = new KubernetesSecretCreatePayload();\n res.metadata.name = secret.Name;\n res.metadata.namespace = secret.Namespace;\n const configurationOwner = _.truncate(secret.ConfigurationOwner, { length: 63, omission: '' });\n res.metadata.labels[KubernetesPortainerConfigurationOwnerLabel] = configurationOwner;\n\n let annotation = '';\n _.forEach(secret.Data, (entry) => {\n if (entry.IsBinary) {\n res.data[entry.Key] = entry.Value;\n annotation += annotation !== '' ? '|' + entry.Key : entry.Key;\n } else {\n res.stringData[entry.Key] = entry.Value;\n }\n });\n if (annotation !== '') {\n res.metadata.annotations[KubernetesPortainerConfigurationDataAnnotation] = annotation;\n }\n return res;\n }\n\n static updatePayload(secret) {\n const res = new KubernetesSecretUpdatePayload();\n res.metadata.name = secret.Name;\n res.metadata.namespace = secret.Namespace;\n res.metadata.labels[KubernetesPortainerConfigurationOwnerLabel] = secret.ConfigurationOwner;\n\n let annotation = '';\n _.forEach(secret.Data, (entry) => {\n if (entry.IsBinary) {\n res.data[entry.Key] = entry.Value;\n annotation += annotation !== '' ? '|' + entry.Key : entry.Key;\n } else {\n res.stringData[entry.Key] = entry.Value;\n }\n });\n if (annotation !== '') {\n res.metadata.annotations[KubernetesPortainerConfigurationDataAnnotation] = annotation;\n }\n return res;\n }\n\n static apiToSecret(payload, yaml) {\n const res = new KubernetesApplicationSecret();\n res.Id = payload.metadata.uid;\n res.Name = payload.metadata.name;\n res.Namespace = payload.metadata.namespace;\n res.ConfigurationOwner = payload.metadata.labels ? payload.metadata.labels[KubernetesPortainerConfigurationOwnerLabel] : '';\n res.CreationDate = payload.metadata.creationTimestamp;\n res.Yaml = yaml ? yaml.data : '';\n\n res.Data = _.map(payload.data, (value, key) => {\n const annotations = payload.metadata.annotations ? payload.metadata.annotations[KubernetesPortainerConfigurationDataAnnotation] : '';\n const entry = new KubernetesConfigurationFormValuesEntry();\n entry.Key = key;\n entry.IsBinary = _.includes(annotations, entry.Key);\n\n if (!entry.IsBinary) {\n entry.Value = atob(value);\n } else {\n entry.Value = value;\n }\n return entry;\n });\n\n return res;\n }\n\n static configurationFormValuesToSecret(formValues) {\n const res = new KubernetesApplicationSecret();\n res.Name = formValues.Name;\n res.Namespace = formValues.ResourcePool.Namespace.Name;\n res.ConfigurationOwner = formValues.ConfigurationOwner;\n res.Data = formValues.Data;\n return res;\n }\n}\n\nexport default KubernetesSecretConverter;\n","export const KubernetesSystem_DefaultDeploymentUniqueLabelKey = 'pod-template-hash';\nexport const KubernetesSystem_RevisionAnnotation = 'deployment.kubernetes.io/revision';\nexport const KubernetesSystem_RevisionHistoryAnnotation = 'deployment.kubernetes.io/revision-history';\nexport const KubernetesSystem_ChangeCauseAnnotation = 'kubernetes.io/change-cause';\nexport const KubernetesSystem_DesiredReplicasAnnotation = 'deployment.kubernetes.io/desired-replicas';\nexport const KubernetesSystem_MaxReplicasAnnotation = 'deployment.kubernetes.io/max-replicas';\n\n// annotationsToSkip lists the annotations that should be preserved from the deployment and not\n// copied from the replicaset when rolling a deployment back\n// var annotationsToSkip = map[string]bool{\n// corev1.LastAppliedConfigAnnotation: true,\n// deploymentutil.RevisionAnnotation: true,\n// deploymentutil.RevisionHistoryAnnotation: true,\n// deploymentutil.DesiredReplicasAnnotation: true,\n// deploymentutil.MaxReplicasAnnotation: true,\n// appsv1.DeprecatedRollbackTo: true,\n// }\n\n// LastAppliedConfigAnnotation is the annotation used to store the previous\n// configuration of a resource for use in a three way diff by UpdateApplyAnnotation.\nconst LastAppliedConfigAnnotation = 'kubectl.kubernetes.io/last-applied-configuration';\n\nconst DeprecatedRollbackTo = 'deprecated.deployment.rollback.to';\n\nexport const KubernetesSystem_AnnotationsToSkip = {\n [LastAppliedConfigAnnotation]: true,\n [KubernetesSystem_RevisionAnnotation]: true,\n [KubernetesSystem_RevisionHistoryAnnotation]: true,\n [KubernetesSystem_DesiredReplicasAnnotation]: true,\n [KubernetesSystem_MaxReplicasAnnotation]: true,\n [DeprecatedRollbackTo]: true,\n};\n","export const ResourceControlTypeString = Object.freeze({\n CONFIG: 'config',\n CONTAINER: 'container',\n NETWORK: 'network',\n SECRET: 'secret',\n SERVICE: 'service',\n STACK: 'stack',\n VOLUME: 'volume',\n CUSTOM_TEMPLATE: 'custom-template',\n CONTAINER_GROUP: 'container-group',\n});\n\n/**\n * ResourceType int defined in portainer.go as ResourceControlType\n */\nexport const ResourceControlTypeInt = Object.freeze({\n CONTAINER: 1,\n SERVICE: 2,\n VOLUME: 3,\n NETWORK: 4,\n SECRET: 5,\n STACK: 6,\n CONFIG: 7,\n CUSTOM_TEMPLATE: 8,\n CONTAINER_GROUP: 9,\n});\n","/**\n * KubernetesDeployment Model\n */\nconst _KubernetesDeployment = Object.freeze({\n Namespace: '',\n Name: '',\n StackName: '',\n ReplicaCount: 0,\n Image: '',\n Env: [],\n CpuLimit: 0,\n MemoryLimit: 0,\n VolumeMounts: [],\n Volumes: [],\n Secret: undefined,\n ApplicationName: '',\n ApplicationOwner: '',\n Note: '',\n Affinity: undefined, // KubernetesPodAffinity\n});\n\nexport class KubernetesDeployment {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesDeployment)));\n }\n}\n","/**\n * KubernetesDaemonSet Model\n */\nconst _KubernetesDaemonSet = Object.freeze({\n Namespace: '',\n Name: '',\n StackName: '',\n Image: '',\n Env: [],\n CpuLimit: 0,\n MemoryLimit: 0,\n VoluemMounts: [],\n Volumes: [],\n Secret: undefined,\n ApplicationName: '',\n ApplicationOwner: '',\n Note: '',\n Affinity: undefined, // KubernetesPodAffinity\n});\n\nexport class KubernetesDaemonSet {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesDaemonSet)));\n }\n}\n","import _ from 'lodash-es';\nimport * as JsonPatch from 'fast-json-patch';\n\nimport { KubernetesServiceCreatePayload } from 'Kubernetes/models/service/payloads';\nimport {\n KubernetesApplicationPublishingTypes,\n KubernetesPortainerApplicationNameLabel,\n KubernetesPortainerApplicationOwnerLabel,\n KubernetesPortainerApplicationStackNameLabel,\n} from 'Kubernetes/models/application/models';\nimport { KubernetesService, KubernetesServiceHeadlessClusterIP, KubernetesServicePort, KubernetesServiceTypes } from 'Kubernetes/models/service/models';\nimport KubernetesServiceHelper from 'Kubernetes/helpers/serviceHelper';\n\nfunction _publishedPortToServicePort(formValues, publishedPort, type) {\n if (publishedPort.IsNew || !publishedPort.NeedsDeletion) {\n const name = formValues.Name;\n const res = new KubernetesServicePort();\n res.name = _.toLower(name + '-' + publishedPort.ContainerPort + '-' + publishedPort.Protocol);\n res.port = type === KubernetesServiceTypes.LOAD_BALANCER ? publishedPort.LoadBalancerPort : publishedPort.ContainerPort;\n res.targetPort = publishedPort.ContainerPort;\n res.protocol = publishedPort.Protocol;\n if (type === KubernetesServiceTypes.NODE_PORT && publishedPort.NodePort) {\n res.nodePort = publishedPort.NodePort;\n } else if (type === KubernetesServiceTypes.LOAD_BALANCER && publishedPort.LoadBalancerNodePort) {\n res.nodePort = publishedPort.LoadBalancerNodePort;\n } else {\n delete res.nodePort;\n }\n return res;\n }\n}\n\nclass KubernetesServiceConverter {\n /**\n * Generate KubernetesService from KubernetesApplicationFormValues\n * @param {KubernetesApplicationFormValues} formValues\n */\n static applicationFormValuesToService(formValues) {\n const res = new KubernetesService();\n res.Namespace = formValues.ResourcePool.Namespace.Name;\n res.Name = formValues.Name;\n res.StackName = formValues.StackName ? formValues.StackName : formValues.Name;\n res.ApplicationOwner = formValues.ApplicationOwner;\n res.ApplicationName = formValues.Name;\n if (formValues.PublishingType === KubernetesApplicationPublishingTypes.CLUSTER) {\n res.Type = KubernetesServiceTypes.NODE_PORT;\n } else if (formValues.PublishingType === KubernetesApplicationPublishingTypes.LOAD_BALANCER) {\n res.Type = KubernetesServiceTypes.LOAD_BALANCER;\n }\n const ports = _.map(formValues.PublishedPorts, (item) => _publishedPortToServicePort(formValues, item, res.Type));\n res.Ports = _.uniqBy(_.without(ports, undefined), (p) => p.targetPort + p.protocol);\n return res;\n }\n\n static applicationFormValuesToHeadlessService(formValues) {\n const res = KubernetesServiceConverter.applicationFormValuesToService(formValues);\n res.Name = KubernetesServiceHelper.generateHeadlessServiceName(formValues.Name);\n res.Headless = true;\n return res;\n }\n\n /**\n * Generate CREATE payload from Service\n * @param {KubernetesService} model Service to genereate payload from\n */\n static createPayload(service) {\n const payload = new KubernetesServiceCreatePayload();\n payload.metadata.name = service.Name;\n payload.metadata.namespace = service.Namespace;\n payload.metadata.labels[KubernetesPortainerApplicationStackNameLabel] = service.StackName;\n payload.metadata.labels[KubernetesPortainerApplicationNameLabel] = service.ApplicationName;\n payload.metadata.labels[KubernetesPortainerApplicationOwnerLabel] = service.ApplicationOwner;\n payload.spec.ports = service.Ports;\n payload.spec.selector.app = service.ApplicationName;\n if (service.Headless) {\n payload.spec.clusterIP = KubernetesServiceHeadlessClusterIP;\n delete payload.spec.ports;\n } else if (service.Type) {\n payload.spec.type = service.Type;\n }\n return payload;\n }\n\n static patchPayload(oldService, newService) {\n const oldPayload = KubernetesServiceConverter.createPayload(oldService);\n const newPayload = KubernetesServiceConverter.createPayload(newService);\n const payload = JsonPatch.compare(oldPayload, newPayload);\n return payload;\n }\n}\n\nexport default KubernetesServiceConverter;\n","import * as JsonPatch from 'fast-json-patch';\nimport _ from 'lodash-es';\n\nimport KubernetesCommonHelper from 'Kubernetes/helpers/commonHelper';\nimport {\n KubernetesPortainerApplicationStackNameLabel,\n KubernetesPortainerApplicationNameLabel,\n KubernetesPortainerApplicationOwnerLabel,\n KubernetesPortainerApplicationNote,\n} from 'Kubernetes/models/application/models';\n\nimport { KubernetesPod, KubernetesPodToleration, KubernetesPodAffinity, KubernetesPodContainer, KubernetesPodContainerTypes, KubernetesPodEviction } from 'Kubernetes/pod/models';\nimport { createPayloadFactory } from './payloads/create';\n\nfunction computeStatus(statuses) {\n const containerStatuses = _.map(statuses, 'state');\n const running = _.filter(containerStatuses, (s) => s.running).length;\n const waiting = _.filter(containerStatuses, (s) => s.waiting).length;\n if (waiting) {\n return 'Waiting';\n } else if (!running) {\n return 'Terminated';\n }\n return 'Running';\n}\n\nfunction computeContainerStatus(statuses, name) {\n const status = _.find(statuses, { name: name });\n if (!status) {\n return 'Terminated';\n }\n const state = status.state;\n if (state.waiting) {\n return 'Waiting';\n }\n if (!state.running) {\n return 'Terminated';\n }\n return 'Running';\n}\n\nfunction computeAffinity(affinity) {\n const res = new KubernetesPodAffinity();\n if (affinity) {\n res.nodeAffinity = affinity.nodeAffinity || {};\n }\n return res;\n}\n\nfunction computeTolerations(tolerations) {\n return _.map(tolerations, (item) => {\n const res = new KubernetesPodToleration();\n res.Key = item.key;\n res.Operator = item.operator;\n res.Value = item.value;\n res.TolerationSeconds = item.tolerationSeconds;\n res.Effect = item.effect;\n return res;\n });\n}\n\nfunction computeContainers(data) {\n const containers = data.spec.containers;\n const initContainers = data.spec.initContainers;\n\n return _.concat(\n _.map(containers, (item) => {\n const res = new KubernetesPodContainer();\n res.Type = KubernetesPodContainerTypes.APP;\n res.PodName = data.metadata.name;\n res.Name = item.name;\n res.Image = item.image;\n res.ImagePullPolicy = item.imagePullPolicy;\n res.Node = data.spec.nodeName;\n res.CreationDate = data.status.startTime;\n res.Status = computeContainerStatus(data.status.containerStatuses, item.name);\n res.Limits = item.resources.limits;\n res.Requests = item.resources.requests;\n res.VolumeMounts = item.volumeMounts;\n res.Env = item.env;\n return res;\n }),\n _.map(initContainers, (item) => {\n const res = new KubernetesPodContainer();\n res.Type = KubernetesPodContainerTypes.INIT;\n res.PodName = data.metadata.name;\n res.Name = item.name;\n res.Image = item.image;\n res.Node = data.spec.nodeName;\n res.CreationDate = data.status.startTime;\n res.Status = computeContainerStatus(data.status.containerStatuses, item.name);\n res.Limits = item.resources.limits;\n res.Requests = item.resources.requests;\n res.VolumeMounts = item.volumeMounts;\n res.Env = item.env;\n return res;\n })\n );\n}\n\nexport default class KubernetesPodConverter {\n static apiToModel(data) {\n const res = new KubernetesPod();\n res.Id = data.metadata.uid;\n res.Name = data.metadata.name;\n res.Namespace = data.metadata.namespace;\n res.Images = _.map(data.spec.containers, 'image');\n res.Status = computeStatus(data.status.containerStatuses);\n res.Restarts = _.sumBy(data.status.containerStatuses, 'restartCount');\n res.Node = data.spec.nodeName;\n res.CreationDate = data.status.startTime;\n res.Containers = computeContainers(data);\n res.Labels = data.metadata.labels;\n res.Affinity = computeAffinity(data.spec.affinity);\n res.NodeSelector = data.spec.nodeSelector;\n res.Tolerations = computeTolerations(data.spec.tolerations);\n return res;\n }\n\n static evictionPayload(pod) {\n const res = new KubernetesPodEviction();\n res.metadata.name = pod.Name;\n res.metadata.namespace = pod.Namespace;\n return res;\n }\n\n static patchPayload(oldPod, newPod) {\n const oldPayload = createPayload(oldPod);\n const newPayload = createPayload(newPod);\n const payload = JsonPatch.compare(oldPayload, newPayload);\n return payload;\n }\n}\n\nfunction createPayload(pod) {\n const payload = createPayloadFactory();\n payload.metadata.name = pod.Name;\n payload.metadata.namespace = pod.Namespace;\n payload.metadata.labels[KubernetesPortainerApplicationStackNameLabel] = pod.StackName;\n payload.metadata.labels[KubernetesPortainerApplicationNameLabel] = pod.ApplicationName;\n payload.metadata.labels[KubernetesPortainerApplicationOwnerLabel] = pod.ApplicationOwner;\n if (pod.Note) {\n payload.metadata.annotations[KubernetesPortainerApplicationNote] = pod.Note;\n } else {\n payload.metadata.annotations = undefined;\n }\n\n payload.spec.replicas = pod.ReplicaCount;\n payload.spec.selector.matchLabels.app = pod.Name;\n payload.spec.template.metadata.labels.app = pod.Name;\n payload.spec.template.metadata.labels[KubernetesPortainerApplicationNameLabel] = pod.ApplicationName;\n payload.spec.template.spec.containers[0].name = pod.Name;\n payload.spec.template.spec.containers[0].image = pod.Image;\n payload.spec.template.spec.affinity = pod.Affinity;\n KubernetesCommonHelper.assignOrDeleteIfEmpty(payload, 'spec.template.spec.containers[0].env', pod.Env);\n KubernetesCommonHelper.assignOrDeleteIfEmpty(payload, 'spec.template.spec.containers[0].volumeMounts', pod.VolumeMounts);\n KubernetesCommonHelper.assignOrDeleteIfEmpty(payload, 'spec.template.spec.volumes', pod.Volumes);\n if (pod.MemoryLimit) {\n payload.spec.template.spec.containers[0].resources.limits.memory = pod.MemoryLimit;\n payload.spec.template.spec.containers[0].resources.requests.memory = pod.MemoryLimit;\n }\n if (pod.CpuLimit) {\n payload.spec.template.spec.containers[0].resources.limits.cpu = pod.CpuLimit;\n payload.spec.template.spec.containers[0].resources.requests.cpu = pod.CpuLimit;\n }\n if (!pod.CpuLimit && !pod.MemoryLimit) {\n delete payload.spec.template.spec.containers[0].resources;\n }\n return payload;\n}\n","import _ from 'lodash-es';\nimport { KubernetesConfiguration, KubernetesConfigurationTypes } from 'Kubernetes/models/configuration/models';\n\nclass KubernetesConfigurationConverter {\n static secretToConfiguration(secret) {\n const res = new KubernetesConfiguration();\n res.Type = KubernetesConfigurationTypes.SECRET;\n res.Id = secret.Id;\n res.Name = secret.Name;\n res.Namespace = secret.Namespace;\n res.CreationDate = secret.CreationDate;\n res.Yaml = secret.Yaml;\n _.forEach(secret.Data, (entry) => {\n res.Data[entry.Key] = entry.Value;\n });\n res.ConfigurationOwner = secret.ConfigurationOwner;\n return res;\n }\n\n static configMapToConfiguration(configMap) {\n const res = new KubernetesConfiguration();\n res.Type = KubernetesConfigurationTypes.CONFIGMAP;\n res.Id = configMap.Id;\n res.Name = configMap.Name;\n res.Namespace = configMap.Namespace;\n res.CreationDate = configMap.CreationDate;\n res.Yaml = configMap.Yaml;\n _.forEach(configMap.Data, (entry) => {\n res.Data[entry.Key] = entry.Value;\n });\n res.ConfigurationOwner = configMap.ConfigurationOwner;\n return res;\n }\n}\n\nexport default KubernetesConfigurationConverter;\n","import { ResourceControlViewModel } from 'Portainer/models/resourceControl/resourceControl';\n\nexport function StackViewModel(data) {\n this.Id = data.Id;\n this.Type = data.Type;\n this.Name = data.Name;\n this.EndpointId = data.EndpointId;\n this.SwarmId = data.SwarmId;\n this.Env = data.Env ? data.Env : [];\n if (data.ResourceControl && data.ResourceControl.Id !== 0) {\n this.ResourceControl = new ResourceControlViewModel(data.ResourceControl);\n }\n this.Status = data.Status;\n this.CreationDate = data.CreationDate;\n this.CreatedBy = data.CreatedBy;\n this.UpdateDate = data.UpdateDate;\n this.UpdatedBy = data.UpdatedBy;\n this.Regular = true;\n this.External = false;\n this.Orphaned = false;\n this.Checked = false;\n this.GitConfig = data.GitConfig;\n}\n\nexport function ExternalStackViewModel(name, type, creationDate) {\n this.Name = name;\n this.Type = type;\n this.CreationDate = creationDate;\n\n this.Regular = false;\n this.External = true;\n this.Orphaned = false;\n this.Checked = false;\n}\n\nexport function OrphanedStackViewModel(data) {\n this.Id = data.Id;\n this.Type = data.Type;\n this.Name = data.Name;\n this.EndpointId = data.EndpointId;\n this.SwarmId = data.SwarmId;\n this.Env = data.Env ? data.Env : [];\n if (data.ResourceControl && data.ResourceControl.Id !== 0) {\n this.ResourceControl = new ResourceControlViewModel(data.ResourceControl);\n }\n this.Status = data.Status;\n this.CreationDate = data.CreationDate;\n this.CreatedBy = data.CreatedBy;\n this.UpdateDate = data.UpdateDate;\n this.UpdatedBy = data.UpdatedBy;\n\n this.Regular = false;\n this.External = false;\n this.Orphaned = true;\n this.OrphanedRunning = false;\n this.Checked = false;\n}\n","/**\n * KubernetesStorageClassAccessPolicies Model\n */\nconst _KubernetesStorageClassAccessPolicies = Object.freeze([\n {\n Name: 'RWO',\n Description: 'Allow read-write from a single pod only (RWO)',\n selected: true,\n },\n {\n Name: 'RWX',\n Description: 'Allow read-write access from one or more pods concurrently (RWX)',\n selected: false,\n },\n]);\n\nexport function KubernetesStorageClassAccessPolicies() {\n return JSON.parse(JSON.stringify(_KubernetesStorageClassAccessPolicies));\n}\n\n/**\n * KubernetesStorageClass Model\n */\nconst _KubernetesStorageClass = Object.freeze({\n Name: '',\n AccessModes: [],\n Provisioner: '',\n AllowVolumeExpansion: false,\n});\n\nexport class KubernetesStorageClass {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesStorageClass)));\n }\n}\n","export function KubernetesIngress() {\n return {\n Name: '',\n Namespace: '',\n Annotations: {},\n // Host: undefined,\n Hosts: [],\n // PreviousHost: undefined, // only use for RP ingress host edit\n Paths: [],\n IngressClassName: '',\n };\n}\n\n// TODO: refactor @LP\n// rename this model to KubernetesIngressPath (and all it's references)\n// as it's conceptually not an ingress rule (element of ingress.spec.rules)\n// but a path (element of ingress.spec.rules[].paths)\nexport function KubernetesIngressRule() {\n return {\n IngressName: '',\n ServiceName: '',\n Host: '',\n IP: '',\n Port: '',\n Path: '',\n };\n}\n\nexport function KubernetesIngressClass() {\n return {\n Name: '',\n Type: undefined,\n NeedsDeletion: false,\n IsNew: true,\n };\n}\n","const _KubernetesNodeFormValues = Object.freeze({\n Taints: [],\n Labels: [],\n Availability: '',\n});\n\nexport class KubernetesNodeFormValues {\n constructor() {\n Object.assign(JSON.parse(JSON.stringify(_KubernetesNodeFormValues)));\n }\n}\n\nconst _KubernetesNodeTaintFormValues = Object.freeze({\n Key: '',\n Values: '',\n Effect: '',\n NeedsDeletion: false,\n IsNew: false,\n IsChanged: false,\n});\n\nexport class KubernetesNodeTaintFormValues {\n constructor() {\n Object.assign(JSON.parse(JSON.stringify(_KubernetesNodeTaintFormValues)));\n }\n}\n\nconst _KubernetesNodeLabelFormValues = Object.freeze({\n Key: '',\n Values: '',\n NeedsDeletion: false,\n IsNew: false,\n IsUsed: false,\n IsChanged: false,\n});\n\nexport class KubernetesNodeLabelFormValues {\n constructor() {\n Object.assign(JSON.parse(JSON.stringify(_KubernetesNodeLabelFormValues)));\n }\n}\n","import _ from 'lodash-es';\nimport { RegistryTypes } from '@/portainer/models/registryTypes';\n\nexport function RegistryViewModel(data) {\n this.Id = data.Id;\n this.Type = data.Type;\n this.Name = data.Name;\n this.URL = data.URL;\n this.Authentication = data.Authentication;\n this.Username = data.Username;\n this.Password = data.Password;\n this.AuthorizedUsers = data.AuthorizedUsers;\n this.AuthorizedTeams = data.AuthorizedTeams;\n this.UserAccessPolicies = data.UserAccessPolicies;\n this.TeamAccessPolicies = data.TeamAccessPolicies;\n this.Checked = false;\n this.Gitlab = data.Gitlab;\n this.Quay = data.Quay;\n}\n\nexport function RegistryManagementConfigurationDefaultModel(registry) {\n this.Authentication = false;\n this.Password = '';\n this.TLS = false;\n this.TLSSkipVerify = false;\n this.TLSCACertFile = null;\n this.TLSCertFile = null;\n this.TLSKeyFile = null;\n\n if (registry.Type === RegistryTypes.QUAY || registry.Type === RegistryTypes.AZURE) {\n this.Authentication = true;\n this.Username = registry.Username;\n this.TLS = true;\n }\n\n if (registry.Type === RegistryTypes.CUSTOM && registry.Authentication) {\n this.Authentication = true;\n this.Username = registry.Username;\n }\n}\n\nexport function RegistryDefaultModel() {\n this.Type = RegistryTypes.CUSTOM;\n this.URL = '';\n this.Name = '';\n this.Authentication = false;\n this.Username = '';\n this.Password = '';\n}\n\nexport function RegistryCreateRequest(model) {\n this.Name = model.Name;\n this.Type = model.Type;\n this.URL = _.replace(model.URL, /^https?\\:\\/\\//i, '');\n this.URL = _.replace(this.URL, /\\/$/, '');\n this.Authentication = model.Authentication;\n if (model.Authentication) {\n this.Username = model.Username;\n this.Password = model.Password;\n }\n if (model.Type === RegistryTypes.GITLAB) {\n this.Gitlab = {\n ProjectId: model.Gitlab.ProjectId,\n InstanceURL: model.Gitlab.InstanceURL,\n ProjectPath: model.Gitlab.ProjectPath,\n };\n }\n if (model.Type === RegistryTypes.QUAY) {\n this.Quay = {\n useOrganisation: model.Quay.useOrganisation,\n organisationName: model.Quay.organisationName,\n };\n }\n}\n","/**\n * KubernetesResourceReservation Model\n */\nconst _KubernetesResourceReservation = Object.freeze({\n Memory: 0,\n CPU: 0,\n});\n\nexport class KubernetesResourceReservation {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesResourceReservation)));\n }\n}\n","export function TeamMembershipModel(data) {\n this.Id = data.Id;\n this.UserId = data.UserID;\n this.TeamId = data.TeamID;\n this.Role = data.Role;\n}\n","import { AccessControlFormData } from 'Portainer/components/accessControlForm/porAccessControlFormModel';\nimport { ResourceControlViewModel } from 'Portainer/models/resourceControl/resourceControl';\n\nexport function ContainerGroupDefaultModel() {\n this.Location = '';\n this.OSType = 'Linux';\n this.Name = '';\n this.Image = '';\n this.AllocatePublicIP = true;\n this.Ports = [\n {\n container: 80,\n host: 80,\n protocol: 'TCP',\n },\n ];\n this.CPU = 1;\n this.Memory = 1;\n this.AccessControlData = new AccessControlFormData();\n}\n\nexport function ContainerGroupViewModel(data) {\n const addressPorts = data.properties.ipAddress ? data.properties.ipAddress.ports : [];\n const container = data.properties.containers.length ? data.properties.containers[0] : {};\n const containerPorts = container ? container.properties.ports : [];\n\n this.Id = data.id;\n this.Name = data.name;\n this.Location = data.location;\n this.IPAddress = data.properties.ipAddress ? data.properties.ipAddress.ip : '';\n this.Ports = addressPorts.length ? addressPorts.map((binding, index) => ({ container: containerPorts[index].port, host: binding.port, protocol: binding.protocol })) : [];\n this.Image = container.properties.image || '';\n this.OSType = data.properties.osType;\n this.AllocatePublicIP = data.properties.ipAddress && data.properties.ipAddress.type === 'Public';\n this.CPU = container.properties.resources.requests.cpu;\n this.Memory = container.properties.resources.requests.memoryInGB;\n\n if (data.Portainer && data.Portainer.ResourceControl) {\n this.ResourceControl = new ResourceControlViewModel(data.Portainer.ResourceControl);\n }\n}\n\nexport function CreateContainerGroupRequest(model) {\n this.location = model.Location;\n\n var containerPorts = [];\n var addressPorts = [];\n for (var i = 0; i < model.Ports.length; i++) {\n var binding = model.Ports[i];\n if (!binding.container || !binding.host) {\n continue;\n }\n\n containerPorts.push({\n port: binding.container,\n });\n\n addressPorts.push({\n port: binding.host,\n protocol: binding.protocol,\n });\n }\n\n this.properties = {\n osType: model.OSType,\n containers: [\n {\n name: model.Name,\n properties: {\n image: model.Image,\n ports: containerPorts,\n resources: {\n requests: {\n cpu: model.CPU,\n memoryInGB: model.Memory,\n },\n },\n },\n },\n ],\n ipAddress: {\n type: model.AllocatePublicIP ? 'Public' : 'Private',\n ports: addressPorts,\n },\n };\n}\n","import _ from 'lodash-es';\n\nclass DockerNetworkHelper {\n static getIPV4Configs(configs) {\n return _.filter(configs, (config) => /^([0-9]{1,3}\\.){3}[0-9]{1,3}(\\/([0-9]|[1-2][0-9]|3[0-2]))?$/.test(config.Subnet));\n }\n\n static getIPV6Configs(configs) {\n return _.without(configs, ...DockerNetworkHelper.getIPV4Configs(configs));\n }\n}\n\nexport default DockerNetworkHelper;\n","import _ from 'lodash-es';\nimport { ResourceControlViewModel } from 'Portainer/models/resourceControl/resourceControl';\n\nexport function createStatus(statusText) {\n var status = _.toLower(statusText);\n\n if (status.indexOf('paused') > -1) {\n return 'paused';\n } else if (status.indexOf('dead') > -1) {\n return 'dead';\n } else if (status.indexOf('created') > -1) {\n return 'created';\n } else if (status.indexOf('exited') > -1) {\n return 'stopped';\n } else if (status.indexOf('(healthy)') > -1) {\n return 'healthy';\n } else if (status.indexOf('(unhealthy)') > -1) {\n return 'unhealthy';\n } else if (status.indexOf('(health: starting)') > -1) {\n return 'starting';\n }\n return 'running';\n}\n\nexport function ContainerViewModel(data) {\n this.Id = data.Id;\n this.Status = createStatus(data.Status);\n this.State = data.State;\n this.Created = data.Created;\n this.Names = data.Names;\n // Unavailable in Docker < 1.10\n if (data.NetworkSettings && !_.isEmpty(data.NetworkSettings.Networks)) {\n this.IP = data.NetworkSettings.Networks[Object.keys(data.NetworkSettings.Networks)[0]].IPAddress;\n }\n this.NetworkSettings = data.NetworkSettings;\n this.Image = data.Image;\n this.ImageID = data.ImageID;\n this.Command = data.Command;\n this.Checked = false;\n this.Labels = data.Labels;\n if (this.Labels && this.Labels['com.docker.compose.project']) {\n this.StackName = this.Labels['com.docker.compose.project'];\n } else if (this.Labels && this.Labels['com.docker.stack.namespace']) {\n this.StackName = this.Labels['com.docker.stack.namespace'];\n }\n this.Mounts = data.Mounts;\n\n this.Ports = [];\n if (data.Ports) {\n for (var i = 0; i < data.Ports.length; ++i) {\n var p = data.Ports[i];\n if (p.PublicPort) {\n this.Ports.push({ host: p.IP, private: p.PrivatePort, public: p.PublicPort });\n }\n }\n }\n\n if (data.Portainer) {\n if (data.Portainer.ResourceControl) {\n this.ResourceControl = new ResourceControlViewModel(data.Portainer.ResourceControl);\n }\n if (data.Portainer.Agent && data.Portainer.Agent.NodeName) {\n this.NodeName = data.Portainer.Agent.NodeName;\n }\n }\n}\n\nexport function ContainerStatsViewModel(data) {\n this.read = data.read;\n this.preread = data.preread;\n if (data.memory_stats.privateworkingset !== undefined) {\n // Windows\n this.MemoryUsage = data.memory_stats.privateworkingset;\n this.MemoryCache = 0;\n this.NumProcs = data.num_procs;\n this.isWindows = true;\n } else {\n // Linux\n if (data.memory_stats.stats === undefined || data.memory_stats.usage === undefined) {\n this.MemoryUsage = this.MemoryCache = 0;\n } else {\n this.MemoryUsage = data.memory_stats.usage - data.memory_stats.stats.cache;\n this.MemoryCache = data.memory_stats.stats.cache;\n }\n }\n this.PreviousCPUTotalUsage = data.precpu_stats.cpu_usage.total_usage;\n this.PreviousCPUSystemUsage = data.precpu_stats.system_cpu_usage;\n this.CurrentCPUTotalUsage = data.cpu_stats.cpu_usage.total_usage;\n this.CurrentCPUSystemUsage = data.cpu_stats.system_cpu_usage;\n if (data.cpu_stats.cpu_usage.percpu_usage) {\n this.CPUCores = data.cpu_stats.cpu_usage.percpu_usage.length;\n }\n this.Networks = _.values(data.networks);\n if (data.blkio_stats !== undefined) {\n //TODO: take care of multiple block devices\n var readData = data.blkio_stats.io_service_bytes_recursive.find((d) => d.op === 'Read');\n if (readData !== undefined) {\n this.BytesRead = readData.value;\n }\n var writeData = data.blkio_stats.io_service_bytes_recursive.find((d) => d.op === 'Write');\n if (writeData !== undefined) {\n this.BytesWrite = writeData.value;\n }\n } else {\n //no IO related data is available\n this.noIOdata = true;\n }\n}\n\nexport function ContainerDetailsViewModel(data) {\n this.Model = data;\n this.Id = data.Id;\n this.State = data.State;\n this.Created = data.Created;\n this.Name = data.Name;\n this.NetworkSettings = data.NetworkSettings;\n this.Args = data.Args;\n this.Image = data.Image;\n this.Config = data.Config;\n this.HostConfig = data.HostConfig;\n this.Mounts = data.Mounts;\n if (data.Portainer && data.Portainer.ResourceControl) {\n this.ResourceControl = new ResourceControlViewModel(data.Portainer.ResourceControl);\n }\n}\n","export function ImageViewModel(data) {\n this.Id = data.Id;\n this.Tag = data.Tag;\n this.Repository = data.Repository;\n this.Created = data.Created;\n this.Checked = false;\n this.RepoTags = data.RepoTags;\n if (!this.RepoTags && data.RepoDigests) {\n this.RepoTags = [];\n for (var i = 0; i < data.RepoDigests.length; i++) {\n var digest = data.RepoDigests[i];\n var repository = digest.substring(0, digest.indexOf('@'));\n this.RepoTags.push(repository + ':');\n }\n }\n\n this.VirtualSize = data.VirtualSize;\n this.ContainerCount = data.ContainerCount;\n\n if (data.Portainer && data.Portainer.Agent && data.Portainer.Agent.NodeName) {\n this.NodeName = data.Portainer.Agent.NodeName;\n }\n this.Labels = data.Labels;\n}\n\nexport function ImageBuildModel(data) {\n this.hasError = false;\n var buildLogs = [];\n\n for (var i = 0; i < data.length; i++) {\n var line = data[i];\n\n if (line.stream) {\n line = line.stream.replace(/[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, '');\n buildLogs.push(line);\n }\n\n if (line.errorDetail) {\n buildLogs.push(line.errorDetail.message);\n this.hasError = true;\n }\n }\n\n this.buildLogs = buildLogs;\n}\n","import _ from 'lodash-es';\n\nexport class KubernetesNodeHelper {\n static isSystemLabel(label) {\n return !label.IsNew && (_.startsWith(label.Key, 'beta.kubernetes.io') || _.startsWith(label.Key, 'kubernetes.io') || label.Key === 'node-role.kubernetes.io/master');\n }\n\n static reorderLabels(labels) {\n return _.sortBy(labels, (label) => {\n return !KubernetesNodeHelper.isSystemLabel(label);\n });\n }\n\n static computeUsedLabels(applications, labels) {\n const pods = _.flatten(_.map(applications, 'Pods'));\n const nodeSelectors = _.uniq(_.flatten(_.map(pods, 'NodeSelector')));\n\n return _.map(labels, (label) => {\n label.IsUsed = _.find(nodeSelectors, (ns) => ns && ns[label.Key] === label.Value) ? true : false;\n return label;\n });\n }\n\n static generateNodeLabelsFromNodes(nodes) {\n const pairs = _.flatMap(nodes, (node) => {\n return _.map(_.toPairs(node.Labels), ([k, v]) => {\n return { key: k, value: v };\n });\n });\n return _.map(_.groupBy(pairs, 'key'), (values, key) => {\n return { Key: key, Values: _.uniq(_.map(values, 'value')) };\n });\n }\n}\n","export function EndpointGroupDefaultModel() {\n this.Name = '';\n this.Description = '';\n this.TagIds = [];\n}\n\nexport function EndpointGroupModel(data) {\n this.Id = data.Id;\n this.Name = data.Name;\n this.Description = data.Description;\n this.TagIds = data.TagIds;\n this.AuthorizedUsers = data.AuthorizedUsers;\n this.AuthorizedTeams = data.AuthorizedTeams;\n this.UserAccessPolicies = data.UserAccessPolicies;\n this.TeamAccessPolicies = data.TeamAccessPolicies;\n}\n\nexport function EndpointGroupCreateRequest(model, endpoints) {\n this.Name = model.Name;\n this.Description = model.Description;\n this.TagIds = model.TagIds;\n this.AssociatedEndpoints = endpoints;\n}\n\nexport function EndpointGroupUpdateRequest(model, endpoints) {\n this.id = model.Id;\n this.Name = model.Name;\n this.Description = model.Description;\n this.TagIds = model.TagIds;\n this.AssociatedEndpoints = endpoints;\n this.UserAccessPolicies = model.UserAccessPolicies;\n this.TeamAccessPolicies = model.TeamAccessPolicies;\n}\n","export function KubernetesPodNodeAffinityPayload() {\n return {\n requiredDuringSchedulingIgnoredDuringExecution: {\n nodeSelectorTerms: [], // []KubernetesNodeSelectorTermPayload\n },\n preferredDuringSchedulingIgnoredDuringExecution: [], // []KubernetesPreferredSchedulingTermPayload\n };\n}\n\nexport function KubernetesPreferredSchedulingTermPayload() {\n return {\n weight: 1,\n preference: {}, // KubernetesNodeSelectorTermPayload\n };\n}\n\nexport function KubernetesNodeSelectorTermPayload() {\n return {\n matchExpressions: [], // []KubernetesNodeSelectorRequirementPayload\n };\n}\n\nexport function KubernetesNodeSelectorRequirementPayload() {\n return {\n key: '', // string\n operator: '', // KubernetesPodNodeAffinityNodeSelectorRequirementOperators\n values: [], // []string\n };\n}\n","import * as JsonPatch from 'fast-json-patch';\nimport { KubernetesDeployment } from 'Kubernetes/models/deployment/models';\nimport { KubernetesDeploymentCreatePayload } from 'Kubernetes/models/deployment/payloads';\nimport {\n KubernetesPortainerApplicationStackNameLabel,\n KubernetesPortainerApplicationNameLabel,\n KubernetesPortainerApplicationOwnerLabel,\n KubernetesPortainerApplicationNote,\n} from 'Kubernetes/models/application/models';\n\nimport KubernetesApplicationHelper from 'Kubernetes/helpers/application';\nimport KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';\nimport KubernetesCommonHelper from 'Kubernetes/helpers/commonHelper';\n\nclass KubernetesDeploymentConverter {\n /**\n * Generate KubernetesDeployment from KubernetesApplicationFormValues\n * @param {KubernetesApplicationFormValues} formValues\n */\n static applicationFormValuesToDeployment(formValues, volumeClaims) {\n const res = new KubernetesDeployment();\n res.Namespace = formValues.ResourcePool.Namespace.Name;\n res.Name = formValues.Name;\n res.StackName = formValues.StackName ? formValues.StackName : formValues.Name;\n res.ApplicationOwner = formValues.ApplicationOwner;\n res.ApplicationName = formValues.Name;\n res.ReplicaCount = formValues.ReplicaCount;\n res.Image = formValues.Image;\n res.CpuLimit = formValues.CpuLimit;\n res.MemoryLimit = KubernetesResourceReservationHelper.bytesValue(formValues.MemoryLimit);\n res.Env = KubernetesApplicationHelper.generateEnvFromEnvVariables(formValues.EnvironmentVariables);\n res.Containers = formValues.Containers;\n KubernetesApplicationHelper.generateVolumesFromPersistentVolumClaims(res, volumeClaims);\n KubernetesApplicationHelper.generateEnvOrVolumesFromConfigurations(res, formValues.Configurations);\n KubernetesApplicationHelper.generateAffinityFromPlacements(res, formValues);\n return res;\n }\n\n /**\n * Generate CREATE payload from Deployment\n * @param {KubernetesDeploymentPayload} model Deployment to genereate payload from\n */\n static createPayload(deployment) {\n const payload = new KubernetesDeploymentCreatePayload();\n payload.metadata.name = deployment.Name;\n payload.metadata.namespace = deployment.Namespace;\n payload.metadata.labels[KubernetesPortainerApplicationStackNameLabel] = deployment.StackName;\n payload.metadata.labels[KubernetesPortainerApplicationNameLabel] = deployment.ApplicationName;\n payload.metadata.labels[KubernetesPortainerApplicationOwnerLabel] = deployment.ApplicationOwner;\n payload.metadata.annotations[KubernetesPortainerApplicationNote] = deployment.Note;\n payload.spec.replicas = deployment.ReplicaCount;\n payload.spec.selector.matchLabels.app = deployment.Name;\n payload.spec.template.metadata.labels.app = deployment.Name;\n payload.spec.template.metadata.labels[KubernetesPortainerApplicationNameLabel] = deployment.ApplicationName;\n payload.spec.template.spec.containers[0].name = deployment.Name;\n payload.spec.template.spec.containers[0].image = deployment.Image;\n payload.spec.template.spec.affinity = deployment.Affinity;\n KubernetesCommonHelper.assignOrDeleteIfEmpty(payload, 'spec.template.spec.containers[0].env', deployment.Env);\n KubernetesCommonHelper.assignOrDeleteIfEmpty(payload, 'spec.template.spec.containers[0].volumeMounts', deployment.VolumeMounts);\n KubernetesCommonHelper.assignOrDeleteIfEmpty(payload, 'spec.template.spec.volumes', deployment.Volumes);\n if (deployment.MemoryLimit) {\n payload.spec.template.spec.containers[0].resources.limits.memory = deployment.MemoryLimit;\n payload.spec.template.spec.containers[0].resources.requests.memory = deployment.MemoryLimit;\n }\n if (deployment.CpuLimit) {\n payload.spec.template.spec.containers[0].resources.limits.cpu = deployment.CpuLimit;\n payload.spec.template.spec.containers[0].resources.requests.cpu = deployment.CpuLimit;\n }\n if (!deployment.CpuLimit && !deployment.MemoryLimit) {\n delete payload.spec.template.spec.containers[0].resources;\n }\n return payload;\n }\n\n static patchPayload(oldDeployment, newDeployment) {\n const oldPayload = KubernetesDeploymentConverter.createPayload(oldDeployment);\n const newPayload = KubernetesDeploymentConverter.createPayload(newDeployment);\n const payload = JsonPatch.compare(oldPayload, newPayload);\n return payload;\n }\n}\n\nexport default KubernetesDeploymentConverter;\n","import * as JsonPatch from 'fast-json-patch';\nimport { KubernetesDaemonSet } from 'Kubernetes/models/daemon-set/models';\nimport { KubernetesDaemonSetCreatePayload } from 'Kubernetes/models/daemon-set/payloads';\nimport {\n KubernetesPortainerApplicationStackNameLabel,\n KubernetesPortainerApplicationNameLabel,\n KubernetesPortainerApplicationNote,\n KubernetesPortainerApplicationOwnerLabel,\n} from 'Kubernetes/models/application/models';\nimport KubernetesApplicationHelper from 'Kubernetes/helpers/application';\nimport KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';\nimport KubernetesCommonHelper from 'Kubernetes/helpers/commonHelper';\n\nclass KubernetesDaemonSetConverter {\n /**\n * Generate KubernetesDaemonSet from KubenetesApplicationFormValues\n * @param {KubernetesApplicationFormValues} formValues\n */\n static applicationFormValuesToDaemonSet(formValues, volumeClaims) {\n const res = new KubernetesDaemonSet();\n res.Namespace = formValues.ResourcePool.Namespace.Name;\n res.Name = formValues.Name;\n res.StackName = formValues.StackName ? formValues.StackName : formValues.Name;\n res.ApplicationOwner = formValues.ApplicationOwner;\n res.ApplicationName = formValues.Name;\n res.Image = formValues.Image;\n res.CpuLimit = formValues.CpuLimit;\n res.MemoryLimit = KubernetesResourceReservationHelper.bytesValue(formValues.MemoryLimit);\n res.Env = KubernetesApplicationHelper.generateEnvFromEnvVariables(formValues.EnvironmentVariables);\n KubernetesApplicationHelper.generateVolumesFromPersistentVolumClaims(res, volumeClaims);\n KubernetesApplicationHelper.generateEnvOrVolumesFromConfigurations(res, formValues.Configurations);\n KubernetesApplicationHelper.generateAffinityFromPlacements(res, formValues);\n return res;\n }\n\n /**\n * Generate CREATE payload from DaemonSet\n * @param {KubernetesDaemonSetPayload} model DaemonSet to genereate payload from\n */\n static createPayload(daemonSet) {\n const payload = new KubernetesDaemonSetCreatePayload();\n payload.metadata.name = daemonSet.Name;\n payload.metadata.namespace = daemonSet.Namespace;\n payload.metadata.labels[KubernetesPortainerApplicationStackNameLabel] = daemonSet.StackName;\n payload.metadata.labels[KubernetesPortainerApplicationNameLabel] = daemonSet.ApplicationName;\n payload.metadata.labels[KubernetesPortainerApplicationOwnerLabel] = daemonSet.ApplicationOwner;\n payload.metadata.annotations[KubernetesPortainerApplicationNote] = daemonSet.Note;\n payload.spec.replicas = daemonSet.ReplicaCount;\n payload.spec.selector.matchLabels.app = daemonSet.Name;\n payload.spec.template.metadata.labels.app = daemonSet.Name;\n payload.spec.template.metadata.labels[KubernetesPortainerApplicationNameLabel] = daemonSet.ApplicationName;\n payload.spec.template.spec.containers[0].name = daemonSet.Name;\n payload.spec.template.spec.containers[0].image = daemonSet.Image;\n payload.spec.template.spec.affinity = daemonSet.Affinity;\n KubernetesCommonHelper.assignOrDeleteIfEmpty(payload, 'spec.template.spec.containers[0].env', daemonSet.Env);\n KubernetesCommonHelper.assignOrDeleteIfEmpty(payload, 'spec.template.spec.containers[0].volumeMounts', daemonSet.VolumeMounts);\n KubernetesCommonHelper.assignOrDeleteIfEmpty(payload, 'spec.template.spec.volumes', daemonSet.Volumes);\n if (daemonSet.MemoryLimit) {\n payload.spec.template.spec.containers[0].resources.limits.memory = daemonSet.MemoryLimit;\n payload.spec.template.spec.containers[0].resources.requests.memory = daemonSet.MemoryLimit;\n }\n if (daemonSet.CpuLimit) {\n payload.spec.template.spec.containers[0].resources.limits.cpu = daemonSet.CpuLimit;\n payload.spec.template.spec.containers[0].resources.requests.cpu = daemonSet.CpuLimit;\n }\n if (!daemonSet.CpuLimit && !daemonSet.MemoryLimit) {\n delete payload.spec.template.spec.containers[0].resources;\n }\n return payload;\n }\n\n static patchPayload(oldDaemonSet, newDaemonSet) {\n const oldPayload = KubernetesDaemonSetConverter.createPayload(oldDaemonSet);\n const newPayload = KubernetesDaemonSetConverter.createPayload(newDaemonSet);\n const payload = JsonPatch.compare(oldPayload, newPayload);\n return payload;\n }\n}\n\nexport default KubernetesDaemonSetConverter;\n","import _ from 'lodash-es';\nimport * as JsonPatch from 'fast-json-patch';\n\nimport { KubernetesStatefulSet } from 'Kubernetes/models/stateful-set/models';\nimport { KubernetesStatefulSetCreatePayload } from 'Kubernetes/models/stateful-set/payloads';\nimport {\n KubernetesPortainerApplicationStackNameLabel,\n KubernetesPortainerApplicationNameLabel,\n KubernetesPortainerApplicationOwnerLabel,\n KubernetesPortainerApplicationNote,\n} from 'Kubernetes/models/application/models';\nimport KubernetesApplicationHelper from 'Kubernetes/helpers/application';\nimport KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';\nimport KubernetesCommonHelper from 'Kubernetes/helpers/commonHelper';\nimport KubernetesPersistentVolumeClaimConverter from './persistentVolumeClaim';\n\nclass KubernetesStatefulSetConverter {\n /**\n * Generate KubernetesStatefulSet from KubernetesApplicationFormValues\n * @param {KubernetesApplicationFormValues} formValues\n */\n static applicationFormValuesToStatefulSet(formValues, volumeClaims) {\n const res = new KubernetesStatefulSet();\n res.Namespace = formValues.ResourcePool.Namespace.Name;\n res.Name = formValues.Name;\n res.StackName = formValues.StackName ? formValues.StackName : formValues.Name;\n res.ApplicationOwner = formValues.ApplicationOwner;\n res.ApplicationName = formValues.Name;\n res.ReplicaCount = formValues.ReplicaCount;\n res.Image = formValues.Image;\n res.CpuLimit = formValues.CpuLimit;\n res.MemoryLimit = KubernetesResourceReservationHelper.bytesValue(formValues.MemoryLimit);\n res.Env = KubernetesApplicationHelper.generateEnvFromEnvVariables(formValues.EnvironmentVariables);\n KubernetesApplicationHelper.generateVolumesFromPersistentVolumClaims(res, volumeClaims);\n KubernetesApplicationHelper.generateEnvOrVolumesFromConfigurations(res, formValues.Configurations);\n KubernetesApplicationHelper.generateAffinityFromPlacements(res, formValues);\n return res;\n }\n\n /**\n * Generate CREATE payload from StatefulSet\n * @param {KubernetesStatefulSetPayload} model StatefulSet to genereate payload from\n */\n static createPayload(statefulSet) {\n const payload = new KubernetesStatefulSetCreatePayload();\n payload.metadata.name = statefulSet.Name;\n payload.metadata.namespace = statefulSet.Namespace;\n payload.metadata.labels[KubernetesPortainerApplicationStackNameLabel] = statefulSet.StackName;\n payload.metadata.labels[KubernetesPortainerApplicationNameLabel] = statefulSet.ApplicationName;\n payload.metadata.labels[KubernetesPortainerApplicationOwnerLabel] = statefulSet.ApplicationOwner;\n payload.metadata.annotations[KubernetesPortainerApplicationNote] = statefulSet.Note;\n payload.spec.replicas = statefulSet.ReplicaCount;\n payload.spec.serviceName = statefulSet.ServiceName;\n payload.spec.selector.matchLabels.app = statefulSet.Name;\n payload.spec.volumeClaimTemplates = _.map(statefulSet.VolumeClaims, (item) => KubernetesPersistentVolumeClaimConverter.createPayload(item));\n payload.spec.template.metadata.labels.app = statefulSet.Name;\n payload.spec.template.metadata.labels[KubernetesPortainerApplicationNameLabel] = statefulSet.ApplicationName;\n payload.spec.template.spec.containers[0].name = statefulSet.Name;\n payload.spec.template.spec.containers[0].image = statefulSet.Image;\n payload.spec.template.spec.affinity = statefulSet.Affinity;\n KubernetesCommonHelper.assignOrDeleteIfEmpty(payload, 'spec.template.spec.containers[0].env', statefulSet.Env);\n KubernetesCommonHelper.assignOrDeleteIfEmpty(payload, 'spec.template.spec.containers[0].volumeMounts', statefulSet.VolumeMounts);\n KubernetesCommonHelper.assignOrDeleteIfEmpty(payload, 'spec.template.spec.volumes', statefulSet.Volumes);\n if (statefulSet.MemoryLimit) {\n payload.spec.template.spec.containers[0].resources.limits.memory = statefulSet.MemoryLimit;\n payload.spec.template.spec.containers[0].resources.requests.memory = statefulSet.MemoryLimit;\n }\n if (statefulSet.CpuLimit) {\n payload.spec.template.spec.containers[0].resources.limits.cpu = statefulSet.CpuLimit;\n payload.spec.template.spec.containers[0].resources.requests.cpu = statefulSet.CpuLimit;\n }\n if (!statefulSet.CpuLimit && !statefulSet.MemoryLimit) {\n delete payload.spec.template.spec.containers[0].resources;\n }\n return payload;\n }\n\n static patchPayload(oldSFS, newSFS) {\n const oldPayload = KubernetesStatefulSetConverter.createPayload(oldSFS);\n const newPayload = KubernetesStatefulSetConverter.createPayload(newSFS);\n const payload = JsonPatch.compare(oldPayload, newPayload);\n return payload;\n }\n}\n\nexport default KubernetesStatefulSetConverter;\n","import uuidv4 from 'uuid/v4';\n/**\n * KubernetesPersistentVolumeClaim Model\n */\nconst _KubernetesPersistentVolumeClaim = Object.freeze({\n Id: '',\n Name: '',\n PreviousName: '',\n Namespace: '',\n Storage: 0,\n StorageClass: {}, // KubernetesStorageClass\n CreationDate: '',\n ApplicationOwner: '',\n ApplicationName: '',\n MountPath: '', // used for Application creation from ApplicationFormValues | not used from API conversion\n Yaml: '',\n});\n\nexport class KubernetesPersistentVolumeClaim {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesPersistentVolumeClaim)));\n this.Name = uuidv4();\n }\n}\n\n/**\n * KubernetesVolume Model (Composite)\n */\nconst _KubernetesVolume = Object.freeze({\n ResourcePool: {}, // KubernetesResourcePool\n PersistentVolumeClaim: {}, // KubernetesPersistentVolumeClaim\n Applications: [], // KubernetesApplication\n});\n\nexport class KubernetesVolume {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesVolume)));\n }\n}\n","import _ from 'lodash-es';\nimport { KubernetesServiceHeadlessPrefix } from 'Kubernetes/models/service/models';\n\nclass KubernetesServiceHelper {\n static generateHeadlessServiceName(name) {\n return KubernetesServiceHeadlessPrefix + name;\n }\n\n static findApplicationBoundService(services, rawApp) {\n if (!rawApp.spec.template) {\n return undefined;\n }\n return _.find(services, (item) => item.spec.selector && _.isMatch(rawApp.spec.template.metadata.labels, item.spec.selector));\n }\n}\nexport default KubernetesServiceHelper;\n","/**\n * clears the sessionStorage\n */\nexport function clear() {\n sessionStorage.clear();\n}\n\n/**\n * stores `value` as string in `sessionStorage[key]`\n *\n * @param {string} key the key to store value at\n * @param {any} value the value to store - will be stringified using JSON.stringify\n *\n */\nexport function save(key, value) {\n sessionStorage.setItem(key, JSON.stringify(value));\n}\n\n/**\n * get parses the value stored in sessionStorage[key], if it's not available returns undefined\n *\n * @param {string} key\n */\nexport function get(key) {\n try {\n const value = sessionStorage.getItem(key);\n return JSON.parse(value);\n } catch (e) {\n return;\n }\n}\n","var capDesc = {\n SETPCAP: 'Modify process capabilities.',\n MKNOD: 'Create special files using mknod(2).',\n AUDIT_WRITE: 'Write records to kernel auditing log.',\n CHOWN: 'Make arbitrary changes to file UIDs and GIDs (see chown(2)).',\n NET_RAW: 'Use RAW and PACKET sockets.',\n DAC_OVERRIDE: 'Bypass file read, write, and execute permission checks.',\n FOWNER: 'Bypass permission checks on operations that normally require the file system UID of the process to match the UID of the file.',\n FSETID: 'Don’t clear set-user-ID and set-group-ID permission bits when a file is modified.',\n KILL: 'Bypass permission checks for sending signals.',\n SETGID: 'Make arbitrary manipulations of process GIDs and supplementary GID list.',\n SETUID: 'Make arbitrary manipulations of process UIDs.',\n NET_BIND_SERVICE: 'Bind a socket to internet domain privileged ports (port numbers less than 1024).',\n SYS_CHROOT: 'Use chroot(2), change root directory.',\n SETFCAP: 'Set file capabilities.',\n SYS_MODULE: 'Load and unload kernel modules.',\n SYS_RAWIO: 'Perform I/O port operations (iopl(2) and ioperm(2)).',\n SYS_PACCT: 'Use acct(2), switch process accounting on or off.',\n SYS_ADMIN: 'Perform a range of system administration operations.',\n SYS_NICE: 'Raise process nice value (nice(2), setpriority(2)) and change the nice value for arbitrary processes.',\n SYS_RESOURCE: 'Override resource Limits.',\n SYS_TIME: 'Set system clock (settimeofday(2), stime(2), adjtimex(2)); set real-time (hardware) clock.',\n SYS_TTY_CONFIG: 'Use vhangup(2); employ various privileged ioctl(2) operations on virtual terminals.',\n AUDIT_CONTROL: 'Enable and disable kernel auditing; change auditing filter rules; retrieve auditing status and filtering rules.',\n MAC_ADMIN: 'Allow MAC configuration or state changes. Implemented for the Smack LSM.',\n MAC_OVERRIDE: 'Override Mandatory Access Control (MAC). Implemented for the Smack Linux Security Module (LSM).',\n NET_ADMIN: 'Perform various network-related operations.',\n SYSLOG: 'Perform privileged syslog(2) operations.',\n DAC_READ_SEARCH: 'Bypass file read permission checks and directory read and execute permission checks.',\n LINUX_IMMUTABLE: 'Set the FS_APPEND_FL and FS_IMMUTABLE_FL i-node flags.',\n NET_BROADCAST: 'Make socket broadcasts, and listen to multicasts.',\n IPC_LOCK: 'Lock memory (mlock(2), mlockall(2), mmap(2), shmctl(2)).',\n IPC_OWNER: 'Bypass permission checks for operations on System V IPC objects.',\n SYS_PTRACE: 'Trace arbitrary processes using ptrace(2).',\n SYS_BOOT: 'Use reboot(2) and kexec_load(2), reboot and load a new kernel for later execution.',\n LEASE: 'Establish leases on arbitrary files (see fcntl(2)).',\n WAKE_ALARM: 'Trigger something that will wake up the system.',\n BLOCK_SUSPEND: 'Employ features that can block system suspend.',\n};\n\nexport function ContainerCapabilities() {\n // all capabilities can be found at https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities\n return [\n new ContainerCapability('SETPCAP', true),\n new ContainerCapability('MKNOD', true),\n new ContainerCapability('AUDIT_WRITE', true),\n new ContainerCapability('CHOWN', true),\n new ContainerCapability('NET_RAW', true),\n new ContainerCapability('DAC_OVERRIDE', true),\n new ContainerCapability('FOWNER', true),\n new ContainerCapability('FSETID', true),\n new ContainerCapability('KILL', true),\n new ContainerCapability('SETGID', true),\n new ContainerCapability('SETUID', true),\n new ContainerCapability('NET_BIND_SERVICE', true),\n new ContainerCapability('SYS_CHROOT', true),\n new ContainerCapability('SETFCAP', true),\n new ContainerCapability('SYS_MODULE', false),\n new ContainerCapability('SYS_RAWIO', false),\n new ContainerCapability('SYS_PACCT', false),\n new ContainerCapability('SYS_ADMIN', false),\n new ContainerCapability('SYS_NICE', false),\n new ContainerCapability('SYS_RESOURCE', false),\n new ContainerCapability('SYS_TIME', false),\n new ContainerCapability('SYS_TTY_CONFIG', false),\n new ContainerCapability('AUDIT_CONTROL', false),\n new ContainerCapability('MAC_ADMIN', false),\n new ContainerCapability('MAC_OVERRIDE', false),\n new ContainerCapability('NET_ADMIN', false),\n new ContainerCapability('SYSLOG', false),\n new ContainerCapability('DAC_READ_SEARCH', false),\n new ContainerCapability('LINUX_IMMUTABLE', false),\n new ContainerCapability('NET_BROADCAST', false),\n new ContainerCapability('IPC_LOCK', false),\n new ContainerCapability('IPC_OWNER', false),\n new ContainerCapability('SYS_PTRACE', false),\n new ContainerCapability('SYS_BOOT', false),\n new ContainerCapability('LEASE', false),\n new ContainerCapability('WAKE_ALARM', false),\n new ContainerCapability('BLOCK_SUSPEND', false),\n ].sort(function (a, b) {\n return a.capability < b.capability ? -1 : 1;\n });\n}\n\nexport function ContainerCapability(cap, allowed) {\n this.capability = cap;\n this.allowed = allowed;\n this.description = capDesc[cap];\n}\n","/**\n * Transcient type from view data to payload\n * @param {bool} adminOnly is ResourceControl restricted to admin only\n * @param {bool} publicOnly is ResourceControl exposed to public\n * @param {[]int} users Authorized UserIDs array\n * @param {[]int} teams Authorized TeamIDs array\n * @param {[]int} subResources subResourceIDs array\n */\nexport function ResourceControlOwnershipParameters(adminOnly = false, publicOnly = false, users = [], teams = [], subResources = []) {\n this.AdministratorsOnly = adminOnly;\n this.Public = publicOnly;\n this.Users = users;\n this.Teams = teams;\n this.SubResourceIDs = subResources;\n}\n","// The get action of the Browse service returns a file.\n// ngResource will transform it as an array of chars.\n// This functions simply creates a response object and assign\n// the data to a field.\nexport function browseGetResponse(data) {\n const response = {};\n response.file = data;\n return response;\n}\n","export function DockerHubViewModel(data) {\n this.Name = 'DockerHub';\n this.URL = '';\n this.Authentication = data.Authentication;\n this.Username = data.Username;\n this.Password = data.Password;\n}\n","export function KubernetesNamespace() {\n return {\n Id: '',\n Name: '',\n CreationDate: '',\n Status: '',\n Yaml: '',\n ResourcePoolName: '',\n ResourcePoolOwner: '',\n };\n}\n","import _ from 'lodash-es';\n\n/**\n *\n * @param {any[]} promises\n */\nexport default async function $allSettled(promises) {\n const res = {\n fulfilled: [],\n rejected: [],\n };\n const data = await Promise.allSettled(promises);\n res.fulfilled = _.reduce(\n data,\n (acc, item) => {\n if (item.status === 'fulfilled') {\n acc.push(item.value);\n }\n return acc;\n },\n []\n );\n res.rejected = _.reduce(\n data,\n (acc, item) => {\n if (item.status === 'rejected') {\n acc.push(item.reason);\n }\n return acc;\n },\n []\n );\n return res;\n}\n","import _ from 'lodash';\n\nexport default class PortainerEndpointTagHelper {\n static idsToTagNames(tags, ids) {\n const filteredTags = _.filter(tags, (tag) => _.includes(ids, tag.Id));\n const tagNames = _.map(filteredTags, 'Name');\n return tagNames;\n }\n}\n","export function EndpointSecurityFormData() {\n this.TLS = false;\n this.TLSMode = 'tls_client_ca';\n this.TLSCACert = null;\n this.TLSCert = null;\n this.TLSKey = null;\n}\n","import { ResourceControlViewModel } from 'Portainer/models/resourceControl/resourceControl';\n\nexport function VolumeViewModel(data) {\n this.Id = data.Name;\n this.CreatedAt = data.CreatedAt;\n this.Driver = data.Driver;\n this.Options = data.Options;\n this.Labels = data.Labels;\n if (this.Labels && this.Labels['com.docker.compose.project']) {\n this.StackName = this.Labels['com.docker.compose.project'];\n } else if (this.Labels && this.Labels['com.docker.stack.namespace']) {\n this.StackName = this.Labels['com.docker.stack.namespace'];\n }\n this.Mountpoint = data.Mountpoint;\n\n if (data.Portainer) {\n if (data.Portainer.ResourceControl) {\n this.ResourceControl = new ResourceControlViewModel(data.Portainer.ResourceControl);\n }\n if (data.Portainer.Agent && data.Portainer.Agent.NodeName) {\n this.NodeName = data.Portainer.Agent.NodeName;\n }\n }\n}\n","export function ScheduleCreateRequest(model) {\n this.Name = model.Name;\n this.Recurring = model.Recurring;\n this.CronExpression = model.CronExpression;\n this.Endpoints = model.Endpoints;\n this.FileContent = model.FileContent;\n this.File = model.File;\n}\n\nexport function ScheduleUpdateRequest(model) {\n this.id = model.Id;\n this.Name = model.Name;\n this.Recurring = model.Recurring;\n this.CronExpression = model.CronExpression;\n this.Endpoints = model.Endpoints;\n this.FileContent = model.FileContent;\n}\n","import { KubernetesCommonMetadataPayload } from 'Kubernetes/models/common/payloads';\n\n/**\n * Payload for CREATE\n */\nconst _KubernetesConfigMapCreatePayload = Object.freeze({\n metadata: new KubernetesCommonMetadataPayload(),\n data: {},\n binaryData: {},\n});\nexport class KubernetesConfigMapCreatePayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesConfigMapCreatePayload)));\n }\n}\n\n/**\n * Payload for UPDATE\n */\nconst _KubernetesConfigMapUpdatePayload = Object.freeze({\n metadata: new KubernetesCommonMetadataPayload(),\n data: {},\n binaryData: {},\n});\nexport class KubernetesConfigMapUpdatePayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesConfigMapUpdatePayload)));\n }\n}\n","import _ from 'lodash-es';\nimport { KubernetesNamespace } from 'Kubernetes/models/namespace/models';\nimport { KubernetesNamespaceCreatePayload } from 'Kubernetes/models/namespace/payloads';\nimport { KubernetesPortainerResourcePoolNameLabel, KubernetesPortainerResourcePoolOwnerLabel } from 'Kubernetes/models/resource-pool/models';\n\nclass KubernetesNamespaceConverter {\n static apiToNamespace(data, yaml) {\n const res = new KubernetesNamespace();\n res.Id = data.metadata.uid;\n res.Name = data.metadata.name;\n res.CreationDate = data.metadata.creationTimestamp;\n res.Status = data.status.phase;\n res.Yaml = yaml ? yaml.data : '';\n res.ResourcePoolName = data.metadata.labels ? data.metadata.labels[KubernetesPortainerResourcePoolNameLabel] : '';\n res.ResourcePoolOwner = data.metadata.labels ? data.metadata.labels[KubernetesPortainerResourcePoolOwnerLabel] : '';\n return res;\n }\n\n static createPayload(namespace) {\n const res = new KubernetesNamespaceCreatePayload();\n res.metadata.name = namespace.Name;\n res.metadata.labels[KubernetesPortainerResourcePoolNameLabel] = namespace.ResourcePoolName;\n if (namespace.ResourcePoolOwner) {\n const resourcePoolOwner = _.truncate(namespace.ResourcePoolOwner, { length: 63, omission: '' });\n res.metadata.labels[KubernetesPortainerResourcePoolOwnerLabel] = resourcePoolOwner;\n }\n return res;\n }\n}\n\nexport default KubernetesNamespaceConverter;\n","import { KubernetesCommonMetadataPayload } from 'Kubernetes/models/common/payloads';\n\nexport function KubernetesIngressCreatePayload() {\n return {\n metadata: new KubernetesCommonMetadataPayload(),\n spec: {\n rules: [],\n },\n };\n}\n\nexport function KubernetesIngressRuleCreatePayload() {\n return {\n host: '',\n http: {\n paths: [],\n },\n };\n}\n\nexport function KubernetesIngressRulePathCreatePayload() {\n return {\n backend: {\n serviceName: '',\n servicePort: 0,\n },\n path: '',\n };\n}\n","export const KubernetesEndpointAnnotationLeader = 'control-plane.alpha.kubernetes.io/leader';\n\n/**\n * KubernetesEndpoint Model\n */\nconst _KubernetesEndpoint = Object.freeze({\n Id: '',\n Name: '',\n Namespace: '',\n HolderIdentity: '',\n Subsets: [],\n});\n\nexport class KubernetesEndpoint {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesEndpoint)));\n }\n}\n\nconst _KubernetesEndpointSubset = Object.freeze({\n Ips: [],\n Port: 0,\n});\n\nexport class KubernetesEndpointSubset {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesEndpointSubset)));\n }\n}\n","import _ from 'lodash-es';\n\nimport { KubernetesPortainerConfigMapAccessKey } from 'Kubernetes/models/config-map/models';\nimport { UserAccessViewModel, TeamAccessViewModel } from 'Portainer/models/access';\n\nclass KubernetesConfigMapHelper {\n static parseJSONData(configMap) {\n _.forIn(configMap.Data, (value, key) => {\n try {\n configMap.Data[key] = JSON.parse(value);\n } catch (err) {\n configMap.Data[key] = value;\n }\n });\n return configMap;\n }\n\n static modifiyNamespaceAccesses(configMap, namespace, accesses) {\n configMap.Data[KubernetesPortainerConfigMapAccessKey][namespace] = {\n UserAccessPolicies: {},\n TeamAccessPolicies: {},\n };\n _.forEach(accesses, (item) => {\n if (item instanceof UserAccessViewModel) {\n configMap.Data[KubernetesPortainerConfigMapAccessKey][namespace].UserAccessPolicies[item.Id] = { RoleId: 0 };\n } else if (item instanceof TeamAccessViewModel) {\n configMap.Data[KubernetesPortainerConfigMapAccessKey][namespace].TeamAccessPolicies[item.Id] = { RoleId: 0 };\n }\n });\n _.forIn(configMap.Data, (value, key) => {\n configMap.Data[key] = JSON.stringify(value);\n });\n return configMap;\n }\n}\nexport default KubernetesConfigMapHelper;\n","import _ from 'lodash-es';\nimport angular from 'angular';\nimport { KubernetesSystem_DefaultDeploymentUniqueLabelKey, KubernetesSystem_RevisionAnnotation } from 'Kubernetes/models/history/models';\n\nclass KubernetesDeploymentHistoryHelper {\n static _isControlledBy(deployment) {\n return (item) => _.find(item.metadata.ownerReferences, { uid: deployment.metadata.uid }) !== undefined;\n }\n\n static filterOwnedRevisions(rsList, deployment) {\n // filter RS that has the same selector as the Deployment\n // NOTE : this should be done in HTTP request based on deployment.spec.selector\n // instead of getting all RS and filtering them here\n const sameLabelsRS = _.filter(rsList, ['spec.selector', deployment.spec.selector]);\n // Only include the RS whose ControllerRef matches the Deployment.\n const controlledRS = _.filter(sameLabelsRS, KubernetesDeploymentHistoryHelper._isControlledBy(deployment));\n // sorts the list of ReplicaSet by creation timestamp, using the names as a tie breaker (old to new)\n const sortedList = _.sortBy(controlledRS, ['metadata.creationTimestamp', 'metadata.name']);\n return sortedList;\n }\n\n // getCurrentRS returns the new RS the given deployment targets (the one with the same pod template).\n static getCurrentRevision(rsListOriginal, deployment) {\n const rsList = angular.copy(rsListOriginal);\n\n // In rare cases, such as after cluster upgrades, Deployment may end up with\n // having more than one new ReplicaSets that have the same template as its template,\n // see https://github.com/kubernetes/kubernetes/issues/40415\n // We deterministically choose the oldest new ReplicaSet (first match)\n const current = _.find(rsList, (item) => {\n // returns true if two given template.spec are equal, ignoring the diff in value of Labels[pod-template-hash]\n // We ignore pod-template-hash because:\n // 1. The hash result would be different upon podTemplateSpec API changes\n // (e.g. the addition of a new field will cause the hash code to change)\n // 2. The deployment template won't have hash labels\n delete item.spec.template.metadata.labels[KubernetesSystem_DefaultDeploymentUniqueLabelKey];\n return _.isEqual(deployment.spec.template, item.spec.template);\n });\n current.revision = current.metadata.annotations[KubernetesSystem_RevisionAnnotation];\n return current;\n }\n\n // filters the RSList to drop all RS that have never been a version of the Deployment\n // also add the revision as a field inside the RS\n // Note: this should not impact rollback process as we only patch\n // metadata.annotations and spec.template\n static filterVersionedRevisions(rsList) {\n const filteredRS = _.filter(rsList, (item) => item.metadata.annotations[KubernetesSystem_RevisionAnnotation] !== undefined);\n return _.map(filteredRS, (item) => {\n item.revision = item.metadata.annotations[KubernetesSystem_RevisionAnnotation];\n return item;\n });\n }\n}\n\nexport default KubernetesDeploymentHistoryHelper;\n","import _ from 'lodash-es';\nimport * as JsonPatch from 'fast-json-patch';\nimport { KubernetesResourceActions } from 'Kubernetes/models/resource-types/models';\n\nfunction findCreateResources(newResources, oldResources) {\n return _.differenceBy(newResources, oldResources, 'Name');\n}\n\nfunction findDeleteResources(newResources, oldResources) {\n return _.differenceBy(oldResources, newResources, 'Name');\n}\n\nfunction findUpdateResources(newResources, oldResources) {\n const updateResources = _.intersectionWith(newResources, oldResources, (newResource, oldResource) => {\n // find out resources with same name but content changed\n if (newResource.Name != oldResource.Name) {\n return false;\n }\n return !isEqual(newResource, oldResource);\n });\n\n return updateResources;\n}\n\nfunction isEqual(newResource, oldResource) {\n let patches = JsonPatch.compare(newResource, oldResource);\n patches = _.filter(patches, (change) => {\n return !_.includes(change.path, '$$hashKey') && !_.includes(change.path, 'Duplicate');\n });\n\n return !patches.length;\n}\n\nfunction doGetResourcesSummary(newResources, oldResources, kind, action, actionFilter) {\n const filteredResources = actionFilter(newResources, oldResources);\n const summary = filteredResources.map((resource) => ({ name: resource.Name, action, kind }));\n\n return summary;\n}\n\nexport function getResourcesSummary(newResources, oldResources, kind) {\n if (!Array.isArray(newResources)) {\n newResources = newResources ? [newResources] : [];\n oldResources = oldResources ? [oldResources] : [];\n }\n\n const summary = [\n ...doGetResourcesSummary(newResources, oldResources, kind, KubernetesResourceActions.CREATE, findCreateResources),\n ...doGetResourcesSummary(newResources, oldResources, kind, KubernetesResourceActions.UPDATE, findUpdateResources),\n ...doGetResourcesSummary(newResources, oldResources, kind, KubernetesResourceActions.DELETE, findDeleteResources),\n ];\n\n return summary;\n}\n","module.exports = __webpack_public_path__ + \"5da83cfb4883a59354abeff852cb7394.png\";","export function ResourceGroupViewModel(data, subscriptionId) {\n this.Id = data.id;\n this.SubscriptionId = subscriptionId;\n this.Name = data.name;\n this.Location = data.location;\n}\n","export function SubscriptionViewModel(data) {\n this.Id = data.subscriptionId;\n this.Name = data.displayName;\n}\n","import { ResourceControlViewModel } from 'Portainer/models/resourceControl/resourceControl';\n\nfunction b64DecodeUnicode(str) {\n try {\n return decodeURIComponent(\n atob(str)\n .split('')\n .map(function (c) {\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n })\n .join('')\n );\n } catch (err) {\n return atob(str);\n }\n}\n\nexport function ConfigViewModel(data) {\n this.Id = data.ID;\n this.CreatedAt = data.CreatedAt;\n this.UpdatedAt = data.UpdatedAt;\n this.Version = data.Version.Index;\n this.Name = data.Spec.Name;\n this.Labels = data.Spec.Labels;\n this.Data = b64DecodeUnicode(data.Spec.Data);\n\n if (data.Portainer && data.Portainer.ResourceControl) {\n this.ResourceControl = new ResourceControlViewModel(data.Portainer.ResourceControl);\n }\n}\n","import { ResourceControlViewModel } from 'Portainer/models/resourceControl/resourceControl';\n\nexport function NetworkViewModel(data) {\n this.Id = data.Id;\n this.Name = data.Name;\n this.Scope = data.Scope;\n this.Driver = data.Driver;\n this.Attachable = data.Attachable;\n this.Internal = data.Internal;\n this.IPAM = data.IPAM;\n this.Containers = data.Containers;\n this.Options = data.Options;\n this.Ingress = data.Ingress;\n\n this.Labels = data.Labels;\n if (this.Labels && this.Labels['com.docker.compose.project']) {\n this.StackName = this.Labels['com.docker.compose.project'];\n } else if (this.Labels && this.Labels['com.docker.stack.namespace']) {\n this.StackName = this.Labels['com.docker.stack.namespace'];\n }\n\n if (data.Portainer) {\n if (data.Portainer.ResourceControl) {\n this.ResourceControl = new ResourceControlViewModel(data.Portainer.ResourceControl);\n }\n if (data.Portainer.Agent && data.Portainer.Agent.NodeName) {\n this.NodeName = data.Portainer.Agent.NodeName;\n }\n }\n\n this.ConfigFrom = data.ConfigFrom;\n this.ConfigOnly = data.ConfigOnly;\n}\n","export function NodeViewModel(data) {\n this.Model = data;\n this.Id = data.ID;\n this.Version = data.Version.Index;\n this.Name = data.Spec.Name;\n this.Role = data.Spec.Role;\n this.CreatedAt = data.CreatedAt;\n this.UpdatedAt = data.UpdatedAt;\n this.Availability = data.Spec.Availability;\n\n var labels = data.Spec.Labels;\n if (labels) {\n this.Labels = Object.keys(labels).map(function (key) {\n return { key: key, value: labels[key], originalKey: key, originalValue: labels[key], added: true };\n });\n } else {\n this.Labels = [];\n }\n\n var engineLabels = data.Description.Engine.Labels;\n if (engineLabels) {\n this.EngineLabels = Object.keys(engineLabels).map(function (key) {\n return { key: key, value: engineLabels[key] };\n });\n } else {\n this.EngineLabels = [];\n }\n\n this.Hostname = data.Description.Hostname;\n this.PlatformArchitecture = data.Description.Platform.Architecture;\n this.PlatformOS = data.Description.Platform.OS;\n this.CPUs = data.Description.Resources.NanoCPUs;\n this.Memory = data.Description.Resources.MemoryBytes;\n this.EngineVersion = data.Description.Engine.EngineVersion;\n this.Plugins = data.Description.Engine.Plugins;\n this.Status = data.Status.State;\n\n if (data.Status.Addr) {\n this.Addr = data.Status.Addr;\n }\n\n if (data.ManagerStatus) {\n this.Leader = data.ManagerStatus.Leader;\n this.Reachability = data.ManagerStatus.Reachability;\n this.ManagerAddr = data.ManagerStatus.Addr;\n }\n}\n","import { ResourceControlViewModel } from 'Portainer/models/resourceControl/resourceControl';\n\nexport function SecretViewModel(data) {\n this.Id = data.ID;\n this.CreatedAt = data.CreatedAt;\n this.UpdatedAt = data.UpdatedAt;\n this.Version = data.Version.Index;\n this.Name = data.Spec.Name;\n this.Labels = data.Spec.Labels;\n\n if (data.Portainer) {\n if (data.Portainer.ResourceControl) {\n this.ResourceControl = new ResourceControlViewModel(data.Portainer.ResourceControl);\n }\n }\n}\n","import { ResourceControlViewModel } from 'Portainer/models/resourceControl/resourceControl';\n\nexport function ServiceViewModel(data, runningTasks, allTasks) {\n this.Model = data;\n this.Id = data.ID;\n this.Tasks = [];\n this.Name = data.Spec.Name;\n this.CreatedAt = data.CreatedAt;\n this.UpdatedAt = data.UpdatedAt;\n this.Image = data.Spec.TaskTemplate.ContainerSpec.Image;\n this.Version = data.Version.Index;\n if (data.Spec.Mode.Replicated) {\n this.Mode = 'replicated';\n this.Replicas = data.Spec.Mode.Replicated.Replicas;\n } else {\n this.Mode = 'global';\n if (allTasks) {\n this.Replicas = allTasks.length;\n }\n }\n if (runningTasks) {\n this.Running = runningTasks.length;\n }\n if (data.Spec.TaskTemplate.Resources) {\n if (data.Spec.TaskTemplate.Resources.Limits) {\n this.LimitNanoCPUs = data.Spec.TaskTemplate.Resources.Limits.NanoCPUs;\n this.LimitMemoryBytes = data.Spec.TaskTemplate.Resources.Limits.MemoryBytes;\n }\n if (data.Spec.TaskTemplate.Resources.Reservations) {\n this.ReservationNanoCPUs = data.Spec.TaskTemplate.Resources.Reservations.NanoCPUs;\n this.ReservationMemoryBytes = data.Spec.TaskTemplate.Resources.Reservations.MemoryBytes;\n }\n }\n\n if (data.Spec.TaskTemplate.RestartPolicy) {\n this.RestartCondition = data.Spec.TaskTemplate.RestartPolicy.Condition || 'any';\n this.RestartDelay = data.Spec.TaskTemplate.RestartPolicy.Delay || 5000000000;\n this.RestartMaxAttempts = data.Spec.TaskTemplate.RestartPolicy.MaxAttempts || 0;\n this.RestartWindow = data.Spec.TaskTemplate.RestartPolicy.Window || 0;\n } else {\n this.RestartCondition = 'any';\n this.RestartDelay = 5000000000;\n this.RestartMaxAttempts = 0;\n this.RestartWindow = 0;\n }\n\n if (data.Spec.TaskTemplate.LogDriver) {\n this.LogDriverName = data.Spec.TaskTemplate.LogDriver.Name || '';\n this.LogDriverOpts = data.Spec.TaskTemplate.LogDriver.Options || [];\n } else {\n this.LogDriverName = '';\n this.LogDriverOpts = [];\n }\n\n this.Constraints = data.Spec.TaskTemplate.Placement ? data.Spec.TaskTemplate.Placement.Constraints || [] : [];\n this.Preferences = data.Spec.TaskTemplate.Placement ? data.Spec.TaskTemplate.Placement.Preferences || [] : [];\n this.Platforms = data.Spec.TaskTemplate.Placement ? data.Spec.TaskTemplate.Placement.Platforms || [] : [];\n this.Labels = data.Spec.Labels;\n if (this.Labels && this.Labels['com.docker.stack.namespace']) {\n this.StackName = this.Labels['com.docker.stack.namespace'];\n }\n\n var containerSpec = data.Spec.TaskTemplate.ContainerSpec;\n if (containerSpec) {\n this.ContainerLabels = containerSpec.Labels;\n this.Command = containerSpec.Command;\n this.Arguments = containerSpec.Args;\n this.Hostname = containerSpec.Hostname;\n this.Env = containerSpec.Env;\n this.Dir = containerSpec.Dir;\n this.User = containerSpec.User;\n this.Groups = containerSpec.Groups;\n this.TTY = containerSpec.TTY;\n this.OpenStdin = containerSpec.OpenStdin;\n this.ReadOnly = containerSpec.ReadOnly;\n this.Mounts = containerSpec.Mounts || [];\n this.StopSignal = containerSpec.StopSignal;\n this.StopGracePeriod = containerSpec.StopGracePeriod;\n this.HealthCheck = containerSpec.HealthCheck || {};\n this.Hosts = containerSpec.Hosts;\n this.DNSConfig = containerSpec.DNSConfig;\n this.Secrets = containerSpec.Secrets;\n this.Configs = containerSpec.Configs;\n }\n if (data.Endpoint) {\n this.Ports = data.Endpoint.Ports;\n }\n\n this.LogDriver = data.Spec.TaskTemplate.LogDriver;\n this.Runtime = data.Spec.TaskTemplate.Runtime;\n\n this.VirtualIPs = data.Endpoint ? data.Endpoint.VirtualIPs : [];\n\n if (data.Spec.UpdateConfig) {\n this.UpdateParallelism = typeof data.Spec.UpdateConfig.Parallelism !== undefined ? data.Spec.UpdateConfig.Parallelism || 0 : 1;\n this.UpdateDelay = data.Spec.UpdateConfig.Delay || 0;\n this.UpdateFailureAction = data.Spec.UpdateConfig.FailureAction || 'pause';\n this.UpdateOrder = data.Spec.UpdateConfig.Order || 'stop-first';\n } else {\n this.UpdateParallelism = 1;\n this.UpdateDelay = 0;\n this.UpdateFailureAction = 'pause';\n this.UpdateOrder = 'stop-first';\n }\n\n this.RollbackConfig = data.Spec.RollbackConfig;\n\n this.Checked = false;\n this.Scale = false;\n this.EditName = false;\n\n if (data.Portainer) {\n if (data.Portainer.ResourceControl) {\n this.ResourceControl = new ResourceControlViewModel(data.Portainer.ResourceControl);\n }\n }\n}\n","export function TaskViewModel(data) {\n this.Id = data.ID;\n this.Created = data.CreatedAt;\n this.Updated = data.UpdatedAt;\n this.Slot = data.Slot;\n this.Spec = data.Spec;\n this.Status = data.Status;\n this.DesiredState = data.DesiredState;\n this.ServiceId = data.ServiceID;\n this.NodeId = data.NodeID;\n if (data.Status && data.Status.ContainerStatus && data.Status.ContainerStatus.ContainerID) {\n this.ContainerId = data.Status.ContainerStatus.ContainerID;\n }\n}\n","export function StoridgeDriveModel(data) {\n this.Id = data.driveid;\n this.Node = data.node;\n this.Use = data.use;\n this.Status = data.drivestatus.toLowerCase();\n this.Size = data.size;\n this.Type = data.type;\n this.Device = data.device;\n}\n","export function StoridgeNodeModel(name, data) {\n this.Name = name;\n this.IP = data.ip;\n this.Role = data.role;\n this.Status = data.status;\n}\n\nexport function StoridgeNodeDetailedModel(name, properties) {\n this.Name = name;\n this.Condition = properties.condition;\n this.Domain = properties.domain;\n this.DomainID = properties.domainID;\n this.FreeBandwidth = properties.freeBandwidth;\n this.FreeCapacity = properties.freeCapacity;\n this.FreeIOPS = properties.freeIOPS;\n this.Hdds = properties.hdds;\n this.MetadataVersion = properties.metadataVersion;\n this.Nodes = properties.nodes;\n this.ProvisionedBandwidth = properties.provisionedBandwidth;\n this.ProvisionedCapacity = properties.provisionedCapacity;\n this.ProvisionedIOPS = properties.provisionedIOPS;\n this.Ssds = properties.ssds;\n this.Status = properties.status;\n this.TotalBandwidth = properties.totalBandwidth;\n this.TotalCapacity = properties.totalCapacity;\n this.TotalIOPS = properties.totalIOPS;\n this.UsedBandwidth = properties.usedBandwidth;\n this.UsedCapacity = properties.usedCapacity;\n this.UsedIOPS = properties.usedIOPS;\n this.Vdisks = properties.vdisks;\n}\n","export function StoridgeSnapshotModel(data) {\n this.Id = data.identifier;\n this.Date = data.date;\n this.Description = data.description;\n this.SourceID = data.sourceid;\n this.Type = data.type;\n this.Directory = data.directory;\n this.Source = data.source;\n}\n","export function StoridgeVolumeModel(data) {\n this.Allocated = data.allocated;\n this.Capacity = data.capacity;\n this.Directory = data.directory;\n this.IOPSMax = data.maximumIOPS;\n this.IOPSMin = data.minimumIOPS;\n this.BandwidthMin = data.minimumBandwidth;\n this.BandwidthMax = data.maximumBandwidth;\n this.LocalDriveOnly = data.localDriveOnly;\n this.Name = data.name;\n this.Node = data.node;\n this.NodeID = data.nodeid;\n this.Provisioning = data.provisioning;\n this.Redundancy = data.redundancy;\n this.Uuid = data.uuid;\n this.Vdisk = data.vdisk;\n this.Labels = data.labels;\n\n this.IP = data.ipaddr;\n this.DriveType = data.driveType;\n this.Encryption = data.encryption;\n this.SnapshotEnabled = data.snapshot;\n this.SnapshotInterval = data.snapInterval;\n this.SnapshotMax = data.maximumSnapshots;\n this.Filesystem = data.filesystem;\n}\n\nexport function StoridgeVolumeUpdateModel(data) {\n this.name = data.Name;\n this.opts = {\n node: data.Node,\n nodeid: data.NodeID,\n capacity: data.Capacity,\n iopsmin: data.IOPSMin,\n iopsmax: data.IOPSMax,\n bandwidthmin: data.BandwidthMin,\n bandwidthmax: data.BandwidthMax,\n };\n this.labels = data.Labels;\n}\n","/**\n * PortMappingPort Model\n */\nconst _KubernetesPortMappingPort = Object.freeze({\n Port: 0,\n TargetPort: 0,\n Protocol: '',\n IngressRules: [], // KubernetesIngressRule[]\n});\n\nexport class KubernetesPortMappingPort {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesPortMappingPort)));\n }\n}\n\n/**\n * PortMapping Model\n */\nconst _KubernetesPortMapping = Object.freeze({\n Expanded: false,\n Highlighted: false,\n ResourcePool: '',\n ServiceType: '',\n ApplicationOwner: '',\n LoadBalancerIPAddress: '',\n Ports: [],\n});\n\nexport class KubernetesPortMapping {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesPortMapping)));\n }\n}\n","import { KubernetesCommonMetadataPayload } from 'Kubernetes/models/common/payloads';\n\n/**\n * KubernetesSecretCreatePayload Model\n */\nconst _KubernetesSecretCreatePayload = Object.freeze({\n metadata: new KubernetesCommonMetadataPayload(),\n type: 'Opaque',\n data: {},\n stringData: {},\n});\n\nexport class KubernetesSecretCreatePayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesSecretCreatePayload)));\n }\n}\n\n/**\n * KubernetesSecretUpdatePayload Model\n */\nconst _KubernetesSecretUpdatePayload = Object.freeze({\n metadata: new KubernetesCommonMetadataPayload(),\n type: 'Opaque',\n data: {},\n stringData: {},\n});\n\nexport class KubernetesSecretUpdatePayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesSecretUpdatePayload)));\n }\n}\n","/**\n * KubernetesApplicationSecret Model\n */\nconst _KubernetesApplicationSecret = Object.freeze({\n Id: 0,\n Name: '',\n Namespace: '',\n CreationDate: '',\n ConfigurationOwner: '',\n Yaml: '',\n Data: [],\n});\n\nexport class KubernetesApplicationSecret {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationSecret)));\n }\n}\n","import * as JsonPatch from 'fast-json-patch';\n\nimport { KubernetesStorageClass } from 'Kubernetes/models/storage-class/models';\nimport { KubernetesStorageClassCreatePayload } from 'Kubernetes/models/storage-class/payload';\n\nclass KubernetesStorageClassConverter {\n /**\n * API StorageClass to front StorageClass\n */\n static apiToStorageClass(data) {\n const res = new KubernetesStorageClass();\n res.Name = data.metadata.name;\n res.Provisioner = data.provisioner;\n res.AllowVolumeExpansion = data.allowVolumeExpansion;\n return res;\n }\n\n static createPayload(storageClass) {\n const res = new KubernetesStorageClassCreatePayload();\n res.metadata.name = storageClass.Name;\n res.provisioner = storageClass.Provisioner;\n res.allowVolumeExpansion = storageClass.AllowVolumeExpansion;\n return res;\n }\n\n static patchPayload(oldStorageClass, newStorageClass) {\n const oldPayload = KubernetesStorageClassConverter.createPayload(oldStorageClass);\n const newPayload = KubernetesStorageClassConverter.createPayload(newStorageClass);\n const payload = JsonPatch.compare(oldPayload, newPayload);\n return payload;\n }\n}\n\nexport default KubernetesStorageClassConverter;\n","import { KubernetesVolume } from 'Kubernetes/models/volume/models';\n\nclass KubernetesVolumeConverter {\n static pvcToVolume(claim, pool) {\n const res = new KubernetesVolume();\n res.PersistentVolumeClaim = claim;\n res.ResourcePool = pool;\n return res;\n }\n}\n\nexport default KubernetesVolumeConverter;\n","import _ from 'lodash-es';\n\nclass KubernetesDaemonSetHistoryHelper {\n static _isControlledBy(daemonSet) {\n return (item) => _.find(item.metadata.ownerReferences, { uid: daemonSet.metadata.uid }) !== undefined;\n }\n\n static filterOwnedRevisions(crList, daemonSet) {\n // filter ControllerRevisions that has the same selector as the DaemonSet\n // NOTE : this should be done in HTTP request based on daemonSet.spec.selector.matchLabels\n // instead of getting all CR and filtering them here\n const sameLabelsCR = _.filter(crList, ['metadata.labels', daemonSet.spec.selector.matchLabels]);\n // Only include the RS whose ControllerRef matches the DaemonSet.\n const controlledCR = _.filter(sameLabelsCR, KubernetesDaemonSetHistoryHelper._isControlledBy(daemonSet));\n // sorts the list of ControllerRevisions by revision, using the creationTimestamp as a tie breaker (old to new)\n const sortedList = _.sortBy(controlledCR, ['revision', 'metadata.creationTimestamp']);\n return sortedList;\n }\n\n // getCurrentRS returns the newest CR the given daemonSet targets (latest version)\n static getCurrentRevision(crList) {\n const current = _.last(crList);\n return current;\n }\n}\n\nexport default KubernetesDaemonSetHistoryHelper;\n","import _ from 'lodash-es';\n\nclass KubernetesStatefulSetHistoryHelper {\n static _isControlledBy(statefulSet) {\n return (item) => _.find(item.metadata.ownerReferences, { uid: statefulSet.metadata.uid }) !== undefined;\n }\n\n static filterOwnedRevisions(crList, statefulSet) {\n // filter ControllerRevisions that has the same selector as the StatefulSet\n // NOTE : this should be done in HTTP request based on statefulSet.spec.selector.matchLabels\n // instead of getting all CR and filtering them here\n const sameLabelsCR = _.filter(crList, ['metadata.labels', statefulSet.spec.selector.matchLabels]);\n // Only include the RS whose ControllerRef matches the StatefulSet.\n const controlledCR = _.filter(sameLabelsCR, KubernetesStatefulSetHistoryHelper._isControlledBy(statefulSet));\n // sorts the list of ControllerRevisions by revision, using the creationTimestamp as a tie breaker (old to new)\n const sortedList = _.sortBy(controlledCR, ['revision', 'metadata.creationTimestamp']);\n return sortedList;\n }\n\n // getCurrentRS returns the newest CR the given statefulSet targets (latest version)\n static getCurrentRevision(crList) {\n const current = _.last(crList);\n return current;\n }\n}\n\nexport default KubernetesStatefulSetHistoryHelper;\n","/**\n * KubernetesHorizontalPodAutoScaler Model\n */\nconst _KubernetesHorizontalPodAutoScaler = Object.freeze({\n Id: '',\n Namespace: '',\n Name: '',\n MinReplicas: 1,\n MaxReplicas: 1,\n TargetCPUUtilization: 0,\n TargetEntity: {\n ApiVersion: '',\n Kind: '',\n Name: '',\n },\n Yaml: '',\n});\n\nexport class KubernetesHorizontalPodAutoScaler {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesHorizontalPodAutoScaler)));\n }\n}\n","/**\n * KubernetesNode Create Payload Model\n * Note: The current payload is here just to create patch payload.\n */\nconst _KubernetesNodeCreatePayload = Object.freeze({\n metadata: {\n name: '',\n labels: {},\n },\n spec: {\n taints: undefined,\n },\n});\n\nexport class KubernetesNodeCreatePayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesNodeCreatePayload)));\n }\n}\n\nconst _KubernetesNodeTaintPayload = Object.freeze({\n key: '',\n value: '',\n effect: '',\n});\n\nexport class KubernetesNodeTaintPayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesNodeTaintPayload)));\n }\n}\n","import { PortainerEndpointConnectionTypes } from 'Portainer/models/endpoint/models';\n\nexport class PortainerEndpointInitFormValues {\n constructor() {\n this.ConnectionType = PortainerEndpointConnectionTypes.KUBERNETES_LOCAL;\n this.Name = '';\n this.URL = '';\n this.TLS = false;\n this.TLSSkipVerify = false;\n this.TLSSKipClientVerify = false;\n this.TLSCACert = null;\n this.TLSCert = null;\n this.TLSKey = null;\n this.AzureApplicationId = '';\n this.AzureTenantId = '';\n this.AzureAuthenticationKey = '';\n }\n}\n\nclass PortainerEndpointInitFormValueEndpointSection {\n constructor(value, title, classes, description) {\n this.Id = value;\n this.Value = value;\n this.Title = title;\n this.Classes = classes;\n this.Description = description;\n }\n}\n\nexport const PortainerEndpointInitFormValueEndpointSections = Object.freeze([\n new PortainerEndpointInitFormValueEndpointSection(PortainerEndpointConnectionTypes.DOCKER_LOCAL, 'Docker', 'fab fa-docker', 'Manage the local Docker environment'),\n new PortainerEndpointInitFormValueEndpointSection(\n PortainerEndpointConnectionTypes.KUBERNETES_LOCAL,\n 'Kubernetes',\n 'fas fa-dharmachakra',\n 'Manage the local Kubernetes environment'\n ),\n new PortainerEndpointInitFormValueEndpointSection(PortainerEndpointConnectionTypes.AGENT, 'Agent', 'fa fa-bolt', 'Connect to a Portainer agent'),\n]);\n","export function SettingsViewModel(data) {\n this.LogoURL = data.LogoURL;\n this.BlackListedLabels = data.BlackListedLabels;\n this.AuthenticationMethod = data.AuthenticationMethod;\n this.LDAPSettings = data.LDAPSettings;\n this.OAuthSettings = new OAuthSettingsViewModel(data.OAuthSettings);\n this.SnapshotInterval = data.SnapshotInterval;\n this.TemplatesURL = data.TemplatesURL;\n this.EdgeAgentCheckinInterval = data.EdgeAgentCheckinInterval;\n this.EnableEdgeComputeFeatures = data.EnableEdgeComputeFeatures;\n this.UserSessionTimeout = data.UserSessionTimeout;\n this.EnableTelemetry = data.EnableTelemetry;\n}\n\nexport function PublicSettingsViewModel(settings) {\n this.AuthenticationMethod = settings.AuthenticationMethod;\n this.EnableEdgeComputeFeatures = settings.EnableEdgeComputeFeatures;\n this.LogoURL = settings.LogoURL;\n this.OAuthLoginURI = settings.OAuthLoginURI;\n this.EnableTelemetry = settings.EnableTelemetry;\n this.OAuthLogoutURI = settings.OAuthLogoutURI;\n}\n\nexport function LDAPSettingsViewModel(data) {\n this.ReaderDN = data.ReaderDN;\n this.Password = data.Password;\n this.URL = data.URL;\n this.SearchSettings = data.SearchSettings;\n this.GroupSearchSettings = data.GroupSearchSettings;\n this.AutoCreateUsers = data.AutoCreateUsers;\n}\n\nexport function LDAPSearchSettings(BaseDN, UsernameAttribute, Filter) {\n this.BaseDN = BaseDN;\n this.UsernameAttribute = UsernameAttribute;\n this.Filter = Filter;\n}\n\nexport function LDAPGroupSearchSettings(GroupBaseDN, GroupAttribute, GroupFilter) {\n this.GroupBaseDN = GroupBaseDN;\n this.GroupAttribute = GroupAttribute;\n this.GroupFilter = GroupFilter;\n}\n\nexport function OAuthSettingsViewModel(data) {\n this.ClientID = data.ClientID;\n this.ClientSecret = data.ClientSecret;\n this.AccessTokenURI = data.AccessTokenURI;\n this.AuthorizationURI = data.AuthorizationURI;\n this.ResourceURI = data.ResourceURI;\n this.RedirectURI = data.RedirectURI;\n this.UserIdentifier = data.UserIdentifier;\n this.Scopes = data.Scopes;\n this.OAuthAutoCreateUsers = data.OAuthAutoCreateUsers;\n this.DefaultTeamID = data.DefaultTeamID;\n this.SSO = data.SSO;\n this.LogoutURI = data.LogoutURI;\n}\n","export function StatusViewModel(data) {\n this.Authentication = data.Authentication;\n this.Snapshot = data.Snapshot;\n this.Version = data.Version;\n}\n\nexport function StatusVersionViewModel(data) {\n this.UpdateAvailable = data.UpdateAvailable;\n this.LatestVersion = data.LatestVersion;\n}\n","export function TagViewModel(data) {\n this.Id = data.ID;\n this.Name = data.Name;\n}\n","export function TeamViewModel(data) {\n this.Id = data.Id;\n this.Name = data.Name;\n this.Checked = false;\n}\n","export function UserViewModel(data) {\n this.Id = data.Id;\n this.Username = data.Username;\n this.Role = data.Role;\n if (data.Role === 1) {\n this.RoleName = 'administrator';\n } else {\n this.RoleName = 'user';\n }\n this.AuthenticationMethod = data.AuthenticationMethod;\n this.Checked = false;\n}\n","export default function gitlabResponseGetLink(data, headers) {\n let response = {};\n try {\n response.data = angular.fromJson(data);\n response.next = headers('X-Next-Page');\n } catch (error) {\n response = data;\n }\n return response;\n}\n","export const KubernetesApplicationDeploymentTypes = Object.freeze({\n REPLICATED: 1,\n GLOBAL: 2,\n});\n\nexport const KubernetesApplicationDataAccessPolicies = Object.freeze({\n SHARED: 1,\n ISOLATED: 2,\n});\n\nexport const KubernetesApplicationTypes = Object.freeze({\n DEPLOYMENT: 1,\n DAEMONSET: 2,\n STATEFULSET: 3,\n POD: 4,\n});\n\nexport const KubernetesApplicationTypeStrings = Object.freeze({\n DEPLOYMENT: 'Deployment',\n DAEMONSET: 'DaemonSet',\n STATEFULSET: 'StatefulSet',\n POD: 'Pod',\n});\n\nexport const KubernetesApplicationPublishingTypes = Object.freeze({\n INTERNAL: 1,\n CLUSTER: 2,\n LOAD_BALANCER: 3,\n INGRESS: 4,\n});\n\nexport const KubernetesApplicationPlacementTypes = Object.freeze({\n PREFERRED: 1,\n MANDATORY: 2,\n});\n\nexport const KubernetesApplicationQuotaDefaults = {\n CpuLimit: 0.1,\n MemoryLimit: 64, // MB\n};\n\nexport const KubernetesPortainerApplicationStackNameLabel = 'io.portainer.kubernetes.application.stack';\n\nexport const KubernetesPortainerApplicationNameLabel = 'io.portainer.kubernetes.application.name';\n\nexport const KubernetesPortainerApplicationOwnerLabel = 'io.portainer.kubernetes.application.owner';\n\nexport const KubernetesPortainerApplicationNote = 'io.portainer.kubernetes.application.note';\n","export const KubernetesPodNodeAffinityNodeSelectorRequirementOperators = Object.freeze({\n IN: 'In',\n NOT_IN: 'NotIn',\n EXISTS: 'Exists',\n DOES_NOT_EXIST: 'DoesNotExist',\n GREATER_THAN: 'Gt',\n LOWER_THAN: 'Lt',\n});\n\n/**\n * KubernetesPodAffinity Model\n */\n// this model will contain non transformed data (raw payload data)\n// either during creation flow (model > api)\n// than during reading flow (api > model)\nexport function KubernetesPodAffinity() {\n return {\n nodeAffinity: {}, // KubernetesPodNodeAffinityPayload\n // podAffinity: {},\n // podAntiAffinity: {},\n };\n}\n","var path = 'app/kubernetes/templates/advancedDeploymentPanel.html';\nvar html = \"\\n \\n

\\n \\n Advanced deployment allows you to deploy any Kubernetes manifest inside your cluster.\\n

\\n

\\n \\n

\\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\n\nimport gitFormModule from './forms/git-form';\n\nexport default angular.module('portainer.app.components', [gitFormModule]).name;\n","import angular from 'angular';\n\nimport { gitForm } from './git-form';\nimport { gitFormAuthFieldset } from './git-form-auth-fieldset';\nimport { gitFormComposePathField } from './git-form-compose-path-field';\nimport { gitFormRefField } from './git-form-ref-field';\nimport { gitFormUrlField } from './git-form-url-field';\n\nexport default angular\n .module('portainer.app.components.forms.git', [])\n .component('gitFormComposePathField', gitFormComposePathField)\n .component('gitFormRefField', gitFormRefField)\n .component('gitForm', gitForm)\n .component('gitFormUrlField', gitFormUrlField)\n .component('gitFormAuthFieldset', gitFormAuthFieldset).name;\n","const autoNgTemplateLoaderTemplate1 = require('./git-form.html');\n\nimport controller from './git-form.controller.js';\n\nexport const gitForm = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n model: '<',\n onChange: '<',\n },\n};\n","export default class GitFormController {\n /* @ngInject */\n constructor() {\n this.onChangeField = this.onChangeField.bind(this);\n this.onChangeURL = this.onChangeField('RepositoryURL');\n this.onChangeRefName = this.onChangeField('RepositoryReferenceName');\n this.onChangeComposePath = this.onChangeField('ComposeFilePathInRepository');\n }\n\n onChangeField(field) {\n return (value) => {\n this.onChange({\n ...this.model,\n [field]: value,\n });\n };\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./git-form-auth-fieldset.html');\n\nimport controller from './git-form-auth-fieldset.controller.js';\n\nexport const gitFormAuthFieldset = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n model: '<',\n onChange: '<',\n },\n};\n","class GitFormComposeAuthFieldsetController {\n /* @ngInject */\n constructor() {\n this.authValues = {\n username: '',\n password: '',\n };\n\n this.onChangeField = this.onChangeField.bind(this);\n this.onChangeAuth = this.onChangeAuth.bind(this);\n this.onChangeUsername = this.onChangeField('RepositoryUsername');\n this.onChangePassword = this.onChangeField('RepositoryPassword');\n }\n\n onChangeField(field) {\n return (value) => {\n this.onChange({\n ...this.model,\n [field]: value,\n });\n };\n }\n\n onChangeAuth(auth) {\n if (!auth) {\n this.authValues.username = this.model.RepositoryUsername;\n this.authValues.password = this.model.RepositoryPassword;\n this.onChange({\n ...this.model,\n RepositoryAuthentication: true,\n RepositoryUsername: '',\n RepositoryPassword: '',\n });\n\n return;\n }\n\n this.onChange({\n ...this.model,\n RepositoryAuthentication: false,\n RepositoryUsername: this.authValues.username,\n RepositoryPassword: this.authValues.password,\n });\n }\n\n $onInit() {\n if (this.model.RepositoryAuthentication) {\n this.authValues.username = this.model.RepositoryUsername;\n this.authValues.password = this.model.RepositoryPassword;\n }\n }\n}\n\nexport default GitFormComposeAuthFieldsetController;\n","const autoNgTemplateLoaderTemplate1 = require('./git-form-compose-path-field.html');\n\nexport const gitFormComposePathField = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n value: '<',\n onChange: '<',\n },\n};\n","const autoNgTemplateLoaderTemplate1 = require('./git-form-ref-field.html');\n\nexport const gitFormRefField = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n value: '<',\n onChange: '<',\n },\n};\n","const autoNgTemplateLoaderTemplate1 = require('./git-form-url-field.html');\n\nexport const gitFormUrlField = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n value: '<',\n onChange: '<',\n },\n};\n","export class FileUploaderController {\n /* @ngInject */\n constructor($async) {\n Object.assign(this, { $async });\n\n this.state = {\n uploadInProgress: false,\n };\n\n this.onFileSelected = this.onFileSelected.bind(this);\n this.onFileSelectedAsync = this.onFileSelectedAsync.bind(this);\n }\n\n onFileSelected(file) {\n return this.$async(this.onFileSelectedAsync, file);\n }\n\n async onFileSelectedAsync(file) {\n if (!file) {\n return;\n }\n\n this.state.uploadInProgress = true;\n try {\n await this.uploadFile(file);\n } finally {\n this.state.uploadInProgress = false;\n }\n }\n}\n","import _ from 'lodash-es';\n\nconst ROOT_PATH = '/host';\n\nexport class HostBrowserController {\n /* @ngInject */\n constructor($async, HostBrowserService, Notifications, FileSaver, ModalService) {\n Object.assign(this, { $async, HostBrowserService, Notifications, FileSaver, ModalService });\n\n this.state = {\n path: ROOT_PATH,\n };\n\n this.goToParent = this.goToParent.bind(this);\n this.browse = this.browse.bind(this);\n this.confirmDeleteFile = this.confirmDeleteFile.bind(this);\n this.isRoot = this.isRoot.bind(this);\n this.getRelativePath = this.getRelativePath.bind(this);\n this.getFilesForPath = this.getFilesForPath.bind(this);\n this.getFilesForPathAsync = this.getFilesForPathAsync.bind(this);\n this.downloadFile = this.downloadFile.bind(this);\n this.downloadFileAsync = this.downloadFileAsync.bind(this);\n this.renameFile = this.renameFile.bind(this);\n this.renameFileAsync = this.renameFileAsync.bind(this);\n this.deleteFile = this.deleteFile.bind(this);\n this.deleteFileAsync = this.deleteFileAsync.bind(this);\n this.onFileSelectedForUpload = this.onFileSelectedForUpload.bind(this);\n this.onFileSelectedForUploadAsync = this.onFileSelectedForUploadAsync.bind(this);\n }\n\n getRelativePath(path) {\n path = path || this.state.path;\n const rootPathRegex = new RegExp(`^${ROOT_PATH}/?`);\n const relativePath = path.replace(rootPathRegex, '/');\n return relativePath;\n }\n\n goToParent() {\n this.getFilesForPath(this.parentPath(this.state.path));\n }\n\n isRoot() {\n return this.state.path === ROOT_PATH;\n }\n\n browse(folder) {\n this.getFilesForPath(this.buildPath(this.state.path, folder));\n }\n\n getFilesForPath(path) {\n return this.$async(this.getFilesForPathAsync, path);\n }\n async getFilesForPathAsync(path) {\n try {\n const files = await this.HostBrowserService.ls(path);\n this.state.path = path;\n this.files = files;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to browse');\n }\n }\n\n renameFile(name, newName) {\n return this.$async(this.renameFileAsync, name, newName);\n }\n async renameFileAsync(name, newName) {\n const filePath = this.buildPath(this.state.path, name);\n const newFilePath = this.buildPath(this.state.path, newName);\n try {\n await this.HostBrowserService.rename(filePath, newFilePath);\n this.Notifications.success('File successfully renamed', this.getRelativePath(newFilePath));\n const files = await this.HostBrowserService.ls(this.state.path);\n this.files = files;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to rename file');\n }\n }\n\n downloadFile(fileName) {\n return this.$async(this.downloadFileAsync, fileName);\n }\n async downloadFileAsync(fileName) {\n const filePath = this.buildPath(this.state.path, fileName);\n try {\n const { file } = await this.HostBrowserService.get(filePath);\n const downloadData = new Blob([file], {\n type: 'text/plain;charset=utf-8',\n });\n this.FileSaver.saveAs(downloadData, fileName);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to download file');\n }\n }\n\n confirmDeleteFile(name) {\n const filePath = this.buildPath(this.state.path, name);\n\n this.ModalService.confirmDeletion(`Are you sure that you want to delete ${this.getRelativePath(filePath)} ?`, (confirmed) => {\n if (!confirmed) {\n return;\n }\n return this.deleteFile(filePath);\n });\n }\n\n deleteFile(path) {\n this.$async(this.deleteFileAsync, path);\n }\n async deleteFileAsync(path) {\n try {\n await this.HostBrowserService.delete(path);\n this.Notifications.success('File successfully deleted', this.getRelativePath(path));\n const files = await this.HostBrowserService.ls(this.state.path);\n this.files = files;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to delete file');\n }\n }\n\n $onInit() {\n this.getFilesForPath(ROOT_PATH);\n }\n\n parentPath(path) {\n if (path === ROOT_PATH) {\n return ROOT_PATH;\n }\n\n const split = _.split(path, '/');\n return _.join(_.slice(split, 0, split.length - 1), '/');\n }\n\n buildPath(parent, file) {\n if (parent.lastIndexOf('/') === parent.length - 1) {\n return parent + file;\n }\n return parent + '/' + file;\n }\n\n onFileSelectedForUpload(file) {\n return this.$async(this.onFileSelectedForUploadAsync, file);\n }\n async onFileSelectedForUploadAsync(file) {\n try {\n await this.HostBrowserService.upload(this.state.path, file);\n this.onFileUploaded();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to upload file');\n }\n }\n\n onFileUploaded() {\n this.refreshList();\n }\n\n refreshList() {\n this.getFilesForPath(this.state.path);\n }\n}\n","export class NodeSelectorController {\n /* @ngInject */\n constructor(AgentService, Notifications) {\n Object.assign(this, { AgentService, Notifications });\n }\n\n async $onInit() {\n try {\n const agents = await this.AgentService.agents();\n this.agents = agents;\n if (!this.model) {\n this.model = agents[0].NodeName;\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to load agents');\n }\n }\n}\n","import _ from 'lodash-es';\n\nexport class VolumeBrowserController {\n /* @ngInject */\n constructor($async, HttpRequestHelper, VolumeBrowserService, FileSaver, Blob, ModalService, Notifications) {\n Object.assign(this, { $async, HttpRequestHelper, VolumeBrowserService, FileSaver, Blob, ModalService, Notifications });\n this.state = {\n path: '/',\n };\n\n this.rename = this.rename.bind(this);\n this.renameAsync = this.renameAsync.bind(this);\n this.confirmDelete = this.confirmDelete.bind(this);\n this.download = this.download.bind(this);\n this.downloadAsync = this.downloadAsync.bind(this);\n this.up = this.up.bind(this);\n this.browse = this.browse.bind(this);\n this.deleteFile = this.deleteFile.bind(this);\n this.deleteFileAsync = this.deleteFileAsync.bind(this);\n this.getFilesForPath = this.getFilesForPath.bind(this);\n this.getFilesForPathAsync = this.getFilesForPathAsync.bind(this);\n this.onFileSelectedForUpload = this.onFileSelectedForUpload.bind(this);\n this.onFileSelectedForUploadAsync = this.onFileSelectedForUploadAsync.bind(this);\n this.parentPath = this.parentPath.bind(this);\n this.buildPath = this.buildPath.bind(this);\n this.$onInit = this.$onInit.bind(this);\n this.onFileUploaded = this.onFileUploaded.bind(this);\n this.refreshList = this.refreshList.bind(this);\n }\n\n rename(file, newName) {\n return this.$async(this.renameAsync, file, newName);\n }\n async renameAsync(file, newName) {\n const filePath = this.state.path === '/' ? file : `${this.state.path}/${file}`;\n const newFilePath = this.state.path === '/' ? newName : `${this.state.path}/${newName}`;\n\n try {\n await this.VolumeBrowserService.rename(this.volumeId, filePath, newFilePath);\n this.Notifications.success('File successfully renamed', newFilePath);\n this.files = await this.VolumeBrowserService.ls(this.volumeId, this.state.path);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to rename file');\n }\n }\n\n confirmDelete(file) {\n const filePath = this.state.path === '/' ? file : `${this.state.path}/${file}`;\n\n this.ModalService.confirmDeletion(`Are you sure that you want to delete ${filePath} ?`, (confirmed) => {\n if (!confirmed) {\n return;\n }\n this.deleteFile(filePath);\n });\n }\n\n download(file) {\n return this.$async(this.downloadAsync, file);\n }\n async downloadAsync(file) {\n const filePath = this.state.path === '/' ? file : `${this.state.path}/${file}`;\n\n try {\n const data = await this.VolumeBrowserService.get(this.volumeId, filePath);\n const downloadData = new Blob([data.file]);\n this.FileSaver.saveAs(downloadData, file);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to download file');\n }\n }\n\n up() {\n const parentFolder = this.parentPath(this.state.path);\n this.getFilesForPath(parentFolder);\n }\n\n browse(folder) {\n const path = this.buildPath(this.state.path, folder);\n this.getFilesForPath(path);\n }\n\n deleteFile(file) {\n return this.$async(this.deleteFileAsync, file);\n }\n async deleteFileAsync(file) {\n try {\n await this.VolumeBrowserService.delete(this.volumeId, file);\n this.Notifications.success('File successfully deleted', file);\n this.files = await this.VolumeBrowserService.ls(this.volumeId, this.state.path);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to delete file');\n }\n }\n\n getFilesForPath(path) {\n return this.$async(this.getFilesForPathAsync, path);\n }\n async getFilesForPathAsync(path) {\n try {\n const files = await this.VolumeBrowserService.ls(this.volumeId, path);\n this.state.path = path;\n this.files = files;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to browse volume');\n }\n }\n\n onFileSelectedForUpload(file) {\n return this.$async(this.onFileSelectedForUploadAsync, file);\n }\n async onFileSelectedForUploadAsync(file) {\n try {\n await this.VolumeBrowserService.upload(this.state.path, file, this.volumeId);\n this.onFileUploaded();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to upload file');\n }\n }\n\n parentPath(path) {\n if (path.lastIndexOf('/') === 0) {\n return '/';\n }\n\n const split = _.split(path, '/');\n return _.join(_.slice(split, 0, split.length - 1), '/');\n }\n\n buildPath(parent, file) {\n if (parent === '/') {\n return parent + file;\n }\n return `${parent}/${file}`;\n }\n\n onFileUploaded() {\n this.refreshList();\n }\n\n refreshList() {\n this.getFilesForPath(this.state.path);\n }\n\n async $onInit() {\n this.HttpRequestHelper.setPortainerAgentTargetHeader(this.nodeName);\n try {\n this.files = await this.VolumeBrowserService.ls(this.volumeId, this.state.path);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to browse volume');\n }\n }\n}\n","export class AgentViewModel {\n constructor(data) {\n this.IPAddress = data.IPAddress;\n this.NodeName = data.NodeName;\n this.NodeRole = data.NodeRole;\n }\n}\n","export function LocationViewModel(data) {\n this.Id = data.id;\n this.SubscriptionId = data.subscriptionId;\n this.DisplayName = data.displayName;\n this.Name = data.name;\n}\n","import _ from 'lodash-es';\n\nexport function ContainerInstanceProviderViewModel(data) {\n this.Id = data.id;\n this.Namespace = data.namespace;\n\n var containerGroupType = _.find(data.resourceTypes, { resourceType: 'containerGroups' });\n this.Locations = containerGroupType.locations;\n}\n","class ContainerInstanceDetailsController {\n /* @ngInject */\n constructor($state, AzureService, ContainerGroupService, Notifications, ResourceGroupService, SubscriptionService) {\n Object.assign(this, { $state, AzureService, ContainerGroupService, Notifications, ResourceGroupService, SubscriptionService });\n\n this.state = {\n loading: false,\n };\n\n this.container = null;\n this.subscription = null;\n this.resourceGroup = null;\n }\n\n async $onInit() {\n this.state.loading = true;\n const { id } = this.$state.params;\n const { subscriptionId, resourceGroupId, containerGroupId } = parseId(id);\n try {\n this.subscription = await this.SubscriptionService.subscription(subscriptionId);\n this.container = await this.ContainerGroupService.containerGroup(subscriptionId, resourceGroupId, containerGroupId);\n this.resourceGroup = await this.ResourceGroupService.resourceGroup(subscriptionId, resourceGroupId);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrive container instance details');\n }\n this.state.loading = false;\n }\n}\n\nfunction parseId(id) {\n const [, subscriptionId, resourceGroupId, , containerGroupId] = id.match(/^\\/subscriptions\\/(.+)\\/resourceGroups\\/(.+)\\/providers\\/(.+)\\/containerGroups\\/(.+)$/);\n\n return { subscriptionId, resourceGroupId, containerGroupId };\n}\n\nexport default ContainerInstanceDetailsController;\n","angular\n .module('portainer')\n .constant('API_ENDPOINT_AUTH', 'api/auth')\n .constant('API_ENDPOINT_DOCKERHUB', 'api/dockerhub')\n .constant('API_ENDPOINT_CUSTOM_TEMPLATES', 'api/custom_templates')\n .constant('API_ENDPOINT_EDGE_GROUPS', 'api/edge_groups')\n .constant('API_ENDPOINT_EDGE_JOBS', 'api/edge_jobs')\n .constant('API_ENDPOINT_EDGE_STACKS', 'api/edge_stacks')\n .constant('API_ENDPOINT_EDGE_TEMPLATES', 'api/edge_templates')\n .constant('API_ENDPOINT_ENDPOINTS', 'api/endpoints')\n .constant('API_ENDPOINT_ENDPOINT_GROUPS', 'api/endpoint_groups')\n .constant('API_ENDPOINT_MOTD', 'api/motd')\n .constant('API_ENDPOINT_REGISTRIES', 'api/registries')\n .constant('API_ENDPOINT_RESOURCE_CONTROLS', 'api/resource_controls')\n .constant('API_ENDPOINT_SETTINGS', 'api/settings')\n .constant('API_ENDPOINT_STACKS', 'api/stacks')\n .constant('API_ENDPOINT_STATUS', 'api/status')\n .constant('API_ENDPOINT_SUPPORT', 'api/support')\n .constant('API_ENDPOINT_USERS', 'api/users')\n .constant('API_ENDPOINT_TAGS', 'api/tags')\n .constant('API_ENDPOINT_TEAMS', 'api/teams')\n .constant('API_ENDPOINT_TEAM_MEMBERSHIPS', 'api/team_memberships')\n .constant('API_ENDPOINT_TEMPLATES', 'api/templates')\n .constant('API_ENDPOINT_WEBHOOKS', 'api/webhooks')\n .constant('API_ENDPOINT_BACKUP', 'api/backup')\n .constant('DEFAULT_TEMPLATES_URL', 'https://raw.githubusercontent.com/portainer/templates/master/templates.json')\n .constant('PAGINATION_MAX_ITEMS', 10)\n .constant('APPLICATION_CACHE_VALIDITY', 3600)\n .constant('CONSOLE_COMMANDS_LABEL_PREFIX', 'io.portainer.commands.')\n .constant('PREDEFINED_NETWORKS', ['host', 'bridge', 'none'])\n .constant('KUBERNETES_DEFAULT_NAMESPACE', 'default')\n .constant('KUBERNETES_SYSTEM_NAMESPACES', ['kube-system', 'kube-public', 'kube-node-lease', 'portainer']);\n\nexport const PORTAINER_FADEOUT = 1500;\n","export default class porImageRegistryContainerController {\n /* @ngInject */\n constructor(EndpointHelper, DockerHubService, Notifications) {\n this.EndpointHelper = EndpointHelper;\n this.DockerHubService = DockerHubService;\n this.Notifications = Notifications;\n\n this.pullRateLimits = null;\n }\n\n $onChanges({ isDockerHubRegistry }) {\n if (isDockerHubRegistry && isDockerHubRegistry.currentValue) {\n this.fetchRateLimits();\n }\n }\n\n async fetchRateLimits() {\n this.pullRateLimits = null;\n if (this.EndpointHelper.isAgentEndpoint(this.endpoint) || this.EndpointHelper.isLocalEndpoint(this.endpoint)) {\n try {\n this.pullRateLimits = await this.DockerHubService.checkRateLimits(this.endpoint);\n this.setValidity(this.pullRateLimits.remaining >= 0);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Failed loading DockerHub pull rate limits', e);\n this.setValidity(true);\n }\n } else {\n this.setValidity(true);\n }\n }\n}\n","export function MacvlanFormData() {\n this.Scope = 'local';\n this.SelectedNetworkConfig = null;\n this.DatatableState = {\n selectedItems: [],\n };\n this.ParentNetworkCard = '';\n}\n","export function VolumesCIFSFormData() {\n this.useCIFS = false;\n this.serverAddress = '';\n this.share = '';\n this.version = 'CIFS v2.0 (Used by Windows Vista / Server 2008)';\n this.versions = [\n 'CIFS v1.0 (Used by Windows XP / Server 2003 and earlier)',\n 'CIFS v2.0 (Used by Windows Vista / Server 2008)',\n 'CIFS v2.1 (Used by Windows 7 / Server 2008 R2)',\n 'CIFS 3.0 (Used by Windows 8 / Server 2012 and newer)',\n ];\n this.versionsNumber = ['1.0', '2.0', '2.1', '3.0'];\n this.username = '';\n this.password = '';\n}\n","export function VolumesNFSFormData() {\n this.useNFS = false;\n this.serverAddress = '';\n this.mountPoint = '';\n this.version = 'NFS4';\n this.options = 'rw,noatime,rsize=8192,wsize=8192,tcp,timeo=14';\n this.versions = ['NFS4', 'NFS'];\n}\n","function createEventDetails(event) {\n var eventAttr = event.Actor.Attributes;\n var details = '';\n switch (event.Type) {\n case 'container':\n switch (event.Action) {\n case 'stop':\n details = 'Container ' + eventAttr.name + ' stopped';\n break;\n case 'destroy':\n details = 'Container ' + eventAttr.name + ' deleted';\n break;\n case 'create':\n details = 'Container ' + eventAttr.name + ' created';\n break;\n case 'start':\n details = 'Container ' + eventAttr.name + ' started';\n break;\n case 'kill':\n details = 'Container ' + eventAttr.name + ' killed';\n break;\n case 'die':\n details = 'Container ' + eventAttr.name + ' exited with status code ' + eventAttr.exitCode;\n break;\n case 'commit':\n details = 'Container ' + eventAttr.name + ' committed';\n break;\n case 'restart':\n details = 'Container ' + eventAttr.name + ' restarted';\n break;\n case 'pause':\n details = 'Container ' + eventAttr.name + ' paused';\n break;\n case 'unpause':\n details = 'Container ' + eventAttr.name + ' unpaused';\n break;\n case 'attach':\n details = 'Container ' + eventAttr.name + ' attached';\n break;\n case 'detach':\n details = 'Container ' + eventAttr.name + ' detached';\n break;\n case 'copy':\n details = 'Container ' + eventAttr.name + ' copied';\n break;\n case 'export':\n details = 'Container ' + eventAttr.name + ' exported';\n break;\n case 'health_status':\n details = 'Container ' + eventAttr.name + ' executed health status';\n break;\n case 'oom':\n details = 'Container ' + eventAttr.name + ' goes in out of memory';\n break;\n case 'rename':\n details = 'Container ' + eventAttr.name + ' renamed';\n break;\n case 'resize':\n details = 'Container ' + eventAttr.name + ' resized';\n break;\n case 'top':\n details = 'Showed running processes for container ' + eventAttr.name;\n break;\n case 'update':\n details = 'Container ' + eventAttr.name + ' updated';\n break;\n default:\n if (event.Action.indexOf('exec_create') === 0) {\n details = 'Exec instance created';\n } else if (event.Action.indexOf('exec_start') === 0) {\n details = 'Exec instance started';\n } else {\n details = 'Unsupported event';\n }\n }\n break;\n case 'image':\n switch (event.Action) {\n case 'delete':\n details = 'Image deleted';\n break;\n case 'import':\n details = 'Image ' + event.Actor.ID + ' imported';\n break;\n case 'load':\n details = 'Image ' + event.Actor.ID + ' loaded';\n break;\n case 'tag':\n details = 'New tag created for ' + eventAttr.name;\n break;\n case 'untag':\n details = 'Image untagged';\n break;\n case 'save':\n details = 'Image ' + event.Actor.ID + ' saved';\n break;\n case 'pull':\n details = 'Image ' + event.Actor.ID + ' pulled';\n break;\n case 'push':\n details = 'Image ' + event.Actor.ID + ' pushed';\n break;\n default:\n details = 'Unsupported event';\n }\n break;\n case 'network':\n switch (event.Action) {\n case 'create':\n details = 'Network ' + eventAttr.name + ' created';\n break;\n case 'destroy':\n details = 'Network ' + eventAttr.name + ' deleted';\n break;\n case 'remove':\n details = 'Network ' + eventAttr.name + ' removed';\n break;\n case 'connect':\n details = 'Container connected to ' + eventAttr.name + ' network';\n break;\n case 'disconnect':\n details = 'Container disconnected from ' + eventAttr.name + ' network';\n break;\n default:\n details = 'Unsupported event';\n }\n break;\n case 'volume':\n switch (event.Action) {\n case 'create':\n details = 'Volume ' + event.Actor.ID + ' created';\n break;\n case 'destroy':\n details = 'Volume ' + event.Actor.ID + ' deleted';\n break;\n case 'mount':\n details = 'Volume ' + event.Actor.ID + ' mounted';\n break;\n case 'unmount':\n details = 'Volume ' + event.Actor.ID + ' unmounted';\n break;\n default:\n details = 'Unsupported event';\n }\n break;\n default:\n details = 'Unsupported event';\n }\n return details;\n}\n\nexport function EventViewModel(data) {\n // Type, Action, Actor unavailable in Docker < 1.10\n this.Time = data.time;\n if (data.Type) {\n this.Type = data.Type;\n this.Details = createEventDetails(data);\n } else {\n this.Type = data.status;\n this.Details = data.from;\n }\n}\n","export function ImageDetailsViewModel(data) {\n this.Id = data.Id;\n this.Tag = data.Tag;\n this.Parent = data.Parent;\n this.Repository = data.Repository;\n this.Created = data.Created;\n this.Checked = false;\n this.RepoTags = data.RepoTags;\n this.VirtualSize = data.VirtualSize;\n this.DockerVersion = data.DockerVersion;\n this.Os = data.Os;\n this.Architecture = data.Architecture;\n this.Author = data.Author;\n this.Command = data.Config.Cmd;\n this.Entrypoint = data.ContainerConfig.Entrypoint ? data.ContainerConfig.Entrypoint : '';\n this.ExposedPorts = data.ContainerConfig.ExposedPorts ? Object.keys(data.ContainerConfig.ExposedPorts) : [];\n this.Volumes = data.ContainerConfig.Volumes ? Object.keys(data.ContainerConfig.Volumes) : [];\n this.Env = data.ContainerConfig.Env ? data.ContainerConfig.Env : [];\n this.Labels = data.ContainerConfig.Labels;\n}\n","export function ImageLayerViewModel(order, data) {\n this.Order = order;\n this.Id = data.Id;\n this.Created = data.Created;\n this.CreatedBy = data.CreatedBy;\n this.Size = data.Size;\n this.Comment = data.Comment;\n this.Tags = data.Tags;\n}\n","// This model is based on https://github.com/moby/moby/blob/0ac25dfc751fa4304ab45afd5cd8705c2235d101/api/types/plugin.go#L8-L31\n// instead of the official documentation.\n// See: https://github.com/moby/moby/issues/34241\nexport function PluginViewModel(data) {\n this.Id = data.Id;\n this.Name = data.Name;\n this.Enabled = data.Enabled;\n this.Config = data.Config;\n}\n","export function SwarmViewModel(data) {\n this.Id = data.ID;\n}\n","// The get action of the Image service returns a file.\n// ngResource will transform it as an array of chars.\n// This functions simply creates a response object and assign\n// the data to a field.\nexport function imageGetResponse(data) {\n var response = {};\n response.file = data;\n return response;\n}\n","export default class DockerFeaturesConfigurationController {\n /* @ngInject */\n constructor($async, EndpointService, Notifications, StateManager) {\n this.$async = $async;\n this.EndpointService = EndpointService;\n this.Notifications = Notifications;\n this.StateManager = StateManager;\n\n this.formValues = {\n enableHostManagementFeatures: false,\n allowVolumeBrowserForRegularUsers: false,\n disableBindMountsForRegularUsers: false,\n disablePrivilegedModeForRegularUsers: false,\n disableHostNamespaceForRegularUsers: false,\n disableStackManagementForRegularUsers: false,\n disableDeviceMappingForRegularUsers: false,\n disableContainerCapabilitiesForRegularUsers: false,\n disableSysctlSettingForRegularUsers: false,\n };\n\n this.isAgent = false;\n\n this.state = {\n actionInProgress: false,\n };\n\n this.save = this.save.bind(this);\n }\n\n isContainerEditDisabled() {\n const {\n disableBindMountsForRegularUsers,\n disableHostNamespaceForRegularUsers,\n disablePrivilegedModeForRegularUsers,\n disableDeviceMappingForRegularUsers,\n disableContainerCapabilitiesForRegularUsers,\n disableSysctlSettingForRegularUsers,\n } = this.formValues;\n return (\n disableBindMountsForRegularUsers ||\n disableHostNamespaceForRegularUsers ||\n disablePrivilegedModeForRegularUsers ||\n disableDeviceMappingForRegularUsers ||\n disableContainerCapabilitiesForRegularUsers ||\n disableSysctlSettingForRegularUsers\n );\n }\n\n async save() {\n return this.$async(async () => {\n try {\n this.state.actionInProgress = true;\n const securitySettings = {\n enableHostManagementFeatures: this.formValues.enableHostManagementFeatures,\n allowBindMountsForRegularUsers: !this.formValues.disableBindMountsForRegularUsers,\n allowPrivilegedModeForRegularUsers: !this.formValues.disablePrivilegedModeForRegularUsers,\n allowVolumeBrowserForRegularUsers: this.formValues.allowVolumeBrowserForRegularUsers,\n allowHostNamespaceForRegularUsers: !this.formValues.disableHostNamespaceForRegularUsers,\n allowDeviceMappingForRegularUsers: !this.formValues.disableDeviceMappingForRegularUsers,\n allowStackManagementForRegularUsers: !this.formValues.disableStackManagementForRegularUsers,\n allowContainerCapabilitiesForRegularUsers: !this.formValues.disableContainerCapabilitiesForRegularUsers,\n allowSysctlSettingForRegularUsers: !this.formValues.disableSysctlSettingForRegularUsers,\n };\n\n await this.EndpointService.updateSecuritySettings(this.endpoint.Id, securitySettings);\n\n this.endpoint.SecuritySettings = securitySettings;\n this.Notifications.success('Saved settings successfully');\n } catch (e) {\n this.Notifications.error('Failure', e, 'Failed saving settings');\n }\n this.state.actionInProgress = false;\n });\n }\n\n checkAgent() {\n const applicationState = this.StateManager.getState();\n return applicationState.endpoint.mode.agentProxy;\n }\n\n $onInit() {\n const securitySettings = this.endpoint.SecuritySettings;\n\n const isAgent = this.checkAgent();\n this.isAgent = isAgent;\n\n this.formValues = {\n enableHostManagementFeatures: isAgent && securitySettings.enableHostManagementFeatures,\n allowVolumeBrowserForRegularUsers: isAgent && securitySettings.allowVolumeBrowserForRegularUsers,\n disableBindMountsForRegularUsers: !securitySettings.allowBindMountsForRegularUsers,\n disablePrivilegedModeForRegularUsers: !securitySettings.allowPrivilegedModeForRegularUsers,\n disableHostNamespaceForRegularUsers: !securitySettings.allowHostNamespaceForRegularUsers,\n disableDeviceMappingForRegularUsers: !securitySettings.allowDeviceMappingForRegularUsers,\n disableStackManagementForRegularUsers: !securitySettings.allowStackManagementForRegularUsers,\n disableContainerCapabilitiesForRegularUsers: !securitySettings.allowContainerCapabilitiesForRegularUsers,\n disableSysctlSettingForRegularUsers: !securitySettings.allowSysctlSettingForRegularUsers,\n };\n }\n}\n","import angular from 'angular';\n\nexport class AssociatedEndpointsDatatableController {\n /* @ngInject */\n constructor($scope, $controller, DatatableService, PaginationService) {\n this.extendGenericController($controller, $scope);\n this.DatatableService = DatatableService;\n this.PaginationService = PaginationService;\n\n this.state = Object.assign(this.state, {\n orderBy: this.orderBy,\n loading: true,\n filteredDataSet: [],\n totalFilteredDataset: 0,\n pageNumber: 1,\n });\n\n this.onPageChange = this.onPageChange.bind(this);\n this.paginationChanged = this.paginationChanged.bind(this);\n }\n\n extendGenericController($controller, $scope) {\n // extending the controller overrides the current controller functions\n const $onInit = this.$onInit.bind(this);\n const changePaginationLimit = this.changePaginationLimit.bind(this);\n const onTextFilterChange = this.onTextFilterChange.bind(this);\n angular.extend(this, $controller('GenericDatatableController', { $scope }));\n this.$onInit = $onInit;\n this.changePaginationLimit = changePaginationLimit;\n this.onTextFilterChange = onTextFilterChange;\n }\n\n $onInit() {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n var storedOrder = this.DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = this.DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = this.DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n this.paginationChanged();\n }\n\n $onChanges({ updateKey }) {\n if (updateKey.currentValue && !updateKey.isFirstChange()) {\n this.paginationChanged();\n }\n }\n\n onPageChange(newPageNumber) {\n this.state.pageNumber = newPageNumber;\n this.paginationChanged();\n }\n\n /**\n * Overridden\n */\n changePaginationLimit() {\n this.PaginationService.setPaginationLimit(this.tableKey, this.state.paginatedItemLimit);\n this.paginationChanged();\n }\n\n /**\n * Overridden\n */\n onTextFilterChange() {\n var filterValue = this.state.textFilter;\n this.DatatableService.setDataTableTextFilters(this.tableKey, filterValue);\n this.paginationChanged();\n }\n\n paginationChanged() {\n this.state.loading = true;\n this.state.filteredDataSet = [];\n const start = (this.state.pageNumber - 1) * this.state.paginatedItemLimit + 1;\n this.retrievePage(start, this.state.paginatedItemLimit, this.state.textFilter)\n .then((data) => {\n this.state.filteredDataSet = data.endpoints;\n this.state.totalFilteredDataSet = data.totalCount;\n })\n .finally(() => {\n this.state.loading = false;\n });\n }\n}\n","import _ from 'lodash-es';\nimport moment from 'moment';\n\nexport class EdgeJobFormController {\n /* @ngInject */\n constructor() {\n this.state = {\n formValidationError: '',\n };\n\n this.scheduleValues = [\n {\n displayed: 'Every hour',\n cron: '0 * * * *',\n },\n {\n displayed: 'Every 2 hours',\n cron: '0 */2 * * *',\n },\n {\n displayed: 'Every day',\n cron: '0 0 * * *',\n },\n ];\n\n this.formValues = {\n datetime: moment(),\n scheduleValue: this.scheduleValues[0],\n cronMethod: 'basic',\n method: 'editor',\n };\n\n // see https://regexr.com/573i2\n this.cronRegex = /(@(annually|yearly|monthly|weekly|daily|hourly|reboot))|(@every (\\d+(ns|us|µs|ms|s|m|h))+)|((((\\d+,)+\\d+|(\\d+(\\/|-)\\d+)|\\d+|\\*) ){4,6}((\\d+,)+\\d+|(\\d+(\\/|-)\\d+)|\\d+|\\*))/;\n\n this.action = this.action.bind(this);\n this.editorUpdate = this.editorUpdate.bind(this);\n this.associateEndpoint = this.associateEndpoint.bind(this);\n this.dissociateEndpoint = this.dissociateEndpoint.bind(this);\n }\n\n onChangeModel(model) {\n const defaultTime = moment().add('hours', 1);\n this.formValues = {\n datetime: model.CronExpression ? cronToDatetime(model.CronExpression, defaultTime) : defaultTime,\n scheduleValue: this.formValues.scheduleValue,\n cronMethod: model.Recurring ? 'advanced' : 'basic',\n method: this.formValues.method,\n };\n }\n\n action() {\n this.state.formValidationError = '';\n\n if (this.formValues.method === 'editor' && this.model.FileContent === '') {\n this.state.formValidationError = 'Script file content must not be empty';\n return;\n }\n\n if (this.formValues.cronMethod === 'basic') {\n if (!this.model.Recurring) {\n this.model.CronExpression = datetimeToCron(this.formValues.datetime);\n } else {\n this.model.CronExpression = this.formValues.scheduleValue.cron;\n }\n } else {\n this.model.Recurring = true;\n }\n\n this.formAction(this.formValues.method);\n }\n\n editorUpdate(cm) {\n this.model.FileContent = cm.getValue();\n this.isEditorDirty = true;\n }\n\n associateEndpoint(endpoint) {\n if (!_.includes(this.model.Endpoints, endpoint.Id)) {\n this.model.Endpoints = [...this.model.Endpoints, endpoint.Id];\n }\n }\n\n dissociateEndpoint(endpoint) {\n this.model.Endpoints = _.filter(this.model.Endpoints, (id) => id !== endpoint.Id);\n }\n\n $onInit() {\n this.onChangeModel(this.model);\n }\n}\n\nfunction cronToDatetime(cron, defaultTime = moment()) {\n var strings = cron.split(' ');\n if (strings.length > 4) {\n strings = strings.slice(0, 4);\n } else {\n return defaultTime;\n }\n return moment(cron, 'm H D M');\n}\n\nfunction datetimeToCron(datetime) {\n var date = moment(datetime);\n return [date.minutes(), date.hours(), date.date(), date.month() + 1, '*'].join(' ');\n}\n","import angular from 'angular';\nimport _ from 'lodash-es';\n\nexport class EdgeJobResultsDatatableController {\n /* @ngInject */\n constructor($controller, $scope, $state) {\n this.$state = $state;\n angular.extend(this, $controller('GenericDatatableController', { $scope }));\n }\n\n collectLogs(...args) {\n this.settings.repeater.autoRefresh = true;\n this.settings.repeater.refreshRate = '5';\n this.onSettingsRepeaterChange();\n this.onCollectLogsClick(...args);\n }\n\n $onChanges({ dataset }) {\n if (dataset && dataset.currentValue) {\n this.onDatasetChange(dataset.currentValue);\n }\n }\n\n onDatasetChange(dataset) {\n const anyCollecting = _.some(dataset, (item) => item.LogsStatus === 2);\n this.settings.repeater.autoRefresh = anyCollecting;\n this.settings.repeater.refreshRate = '5';\n this.onSettingsRepeaterChange();\n }\n}\n","import angular from 'angular';\n\nexport class EdgeStackEndpointsDatatableController {\n /* @ngInject */\n constructor($async, $scope, $controller, DatatableService, PaginationService, Notifications) {\n this.extendGenericController($controller, $scope);\n this.DatatableService = DatatableService;\n this.PaginationService = PaginationService;\n this.Notifications = Notifications;\n this.$async = $async;\n\n this.state = Object.assign(this.state, {\n orderBy: this.orderBy,\n loading: true,\n filteredDataSet: [],\n totalFilteredDataset: 0,\n pageNumber: 1,\n });\n\n this.onPageChange = this.onPageChange.bind(this);\n this.paginationChanged = this.paginationChanged.bind(this);\n this.paginationChangedAsync = this.paginationChangedAsync.bind(this);\n\n this.statusMap = {\n 1: 'OK',\n 2: 'Error',\n 3: 'Acknowledged',\n };\n }\n\n extendGenericController($controller, $scope) {\n // extending the controller overrides the current controller functions\n const $onInit = this.$onInit.bind(this);\n const changePaginationLimit = this.changePaginationLimit.bind(this);\n const onTextFilterChange = this.onTextFilterChange.bind(this);\n angular.extend(this, $controller('GenericDatatableController', { $scope }));\n this.$onInit = $onInit;\n this.changePaginationLimit = changePaginationLimit;\n this.onTextFilterChange = onTextFilterChange;\n }\n\n $onInit() {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n var storedOrder = this.DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = this.DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = this.DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n this.paginationChanged();\n }\n\n onPageChange(newPageNumber) {\n this.state.pageNumber = newPageNumber;\n this.paginationChanged();\n }\n\n /**\n * Overridden\n */\n changePaginationLimit() {\n this.PaginationService.setPaginationLimit(this.tableKey, this.state.paginatedItemLimit);\n this.paginationChanged();\n }\n\n /**\n * Overridden\n */\n onTextFilterChange() {\n var filterValue = this.state.textFilter;\n this.DatatableService.setDataTableTextFilters(this.tableKey, filterValue);\n this.paginationChanged();\n }\n\n paginationChanged() {\n this.$async(this.paginationChangedAsync);\n }\n\n async paginationChangedAsync() {\n this.state.loading = true;\n this.state.filteredDataSet = [];\n const start = (this.state.pageNumber - 1) * this.state.paginatedItemLimit + 1;\n try {\n const { endpoints, totalCount } = await this.retrievePage(start, this.state.paginatedItemLimit, this.state.textFilter);\n this.state.filteredDataSet = endpoints;\n this.state.totalFilteredDataSet = totalCount;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve endpoints');\n } finally {\n this.state.loading = false;\n }\n }\n}\n","const statusMap = {\n 1: 'ok',\n 2: 'error',\n 3: 'acknowledged',\n};\n\nexport class EdgeStackStatusController {\n $onChanges({ stackStatus }) {\n if (!stackStatus || !stackStatus.currentValue) {\n return;\n }\n const aggregateStatus = { ok: 0, error: 0, acknowledged: 0 };\n for (let endpointId in stackStatus.currentValue) {\n const endpoint = stackStatus.currentValue[endpointId];\n const endpointStatusKey = statusMap[endpoint.Type];\n aggregateStatus[endpointStatusKey]++;\n }\n this.status = aggregateStatus;\n }\n}\n","export class EditEdgeStackFormController {\n /* @ngInject */\n constructor() {\n this.editorUpdate = this.editorUpdate.bind(this);\n }\n\n editorUpdate(cm) {\n if (this.model.StackFileContent.replace(/(\\r\\n|\\n|\\r)/gm, '') !== cm.getValue().replace(/(\\r\\n|\\n|\\r)/gm, '')) {\n this.model.StackFileContent = cm.getValue();\n this.isEditorDirty = true;\n }\n }\n}\n","import _ from 'lodash-es';\n\nexport class EdgeGroupFormController {\n /* @ngInject */\n constructor(EndpointService, $async, $scope) {\n this.EndpointService = EndpointService;\n this.$async = $async;\n\n this.endpoints = {\n state: {\n limit: '10',\n filter: '',\n pageNumber: 1,\n totalCount: 0,\n },\n value: null,\n };\n\n this.associateEndpoint = this.associateEndpoint.bind(this);\n this.dissociateEndpoint = this.dissociateEndpoint.bind(this);\n this.getDynamicEndpointsAsync = this.getDynamicEndpointsAsync.bind(this);\n this.getDynamicEndpoints = this.getDynamicEndpoints.bind(this);\n\n $scope.$watch(\n () => this.model,\n () => {\n if (this.model.Dynamic) {\n this.getDynamicEndpoints();\n }\n },\n true\n );\n }\n\n associateEndpoint(endpoint) {\n if (!_.includes(this.model.Endpoints, endpoint.Id)) {\n this.model.Endpoints = [...this.model.Endpoints, endpoint.Id];\n }\n }\n\n dissociateEndpoint(endpoint) {\n this.model.Endpoints = _.filter(this.model.Endpoints, (id) => id !== endpoint.Id);\n }\n\n getDynamicEndpoints() {\n return this.$async(this.getDynamicEndpointsAsync);\n }\n\n async getDynamicEndpointsAsync() {\n const { pageNumber, limit, search } = this.endpoints.state;\n const start = (pageNumber - 1) * limit + 1;\n const query = { search, type: 4, tagIds: this.model.TagIds, tagsPartialMatch: this.model.PartialMatch };\n\n const response = await this.EndpointService.endpoints(start, limit, query);\n\n const totalCount = parseInt(response.totalCount, 10);\n this.endpoints.value = response.value;\n this.endpoints.state.totalCount = totalCount;\n }\n}\n","import angular from 'angular';\n\nexport class EdgeGroupsDatatableController {\n /* @ngInject */\n constructor($scope, $controller) {\n const allowSelection = this.allowSelection;\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n this.allowSelection = allowSelection.bind(this);\n }\n\n /**\n * Override this method to allow/deny selection\n */\n allowSelection(item) {\n return !item.HasEdgeStack;\n }\n}\n","export class CreateEdgeGroupController {\n /* @ngInject */\n constructor(EdgeGroupService, GroupService, TagService, Notifications, $state, $async) {\n this.EdgeGroupService = EdgeGroupService;\n this.GroupService = GroupService;\n this.TagService = TagService;\n this.Notifications = Notifications;\n this.$state = $state;\n this.$async = $async;\n\n this.state = {\n actionInProgress: false,\n loaded: false,\n };\n\n this.model = {\n Name: '',\n Endpoints: [],\n Dynamic: false,\n TagIds: [],\n PartialMatch: false,\n };\n\n this.createGroup = this.createGroup.bind(this);\n this.createGroupAsync = this.createGroupAsync.bind(this);\n }\n\n async $onInit() {\n const [tags, endpointGroups] = await Promise.all([this.TagService.tags(), this.GroupService.groups()]);\n this.tags = tags;\n this.endpointGroups = endpointGroups;\n this.state.loaded = true;\n }\n\n createGroup() {\n return this.$async(this.createGroupAsync);\n }\n\n async createGroupAsync() {\n this.state.actionInProgress = true;\n try {\n await this.EdgeGroupService.create(this.model);\n this.Notifications.success('Edge group successfully created');\n this.$state.go('edge.groups');\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to create edge group');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n}\n","import _ from 'lodash-es';\n\nexport class EdgeGroupsController {\n /* @ngInject */\n constructor($async, $state, EdgeGroupService, Notifications) {\n this.$async = $async;\n this.$state = $state;\n this.EdgeGroupService = EdgeGroupService;\n this.Notifications = Notifications;\n\n this.removeAction = this.removeAction.bind(this);\n this.removeActionAsync = this.removeActionAsync.bind(this);\n }\n\n async $onInit() {\n try {\n this.items = await this.EdgeGroupService.groups();\n } catch (err) {\n this.items = [];\n this.Notifications.error('Failure', err, 'Unable to retrieve Edge groups');\n }\n }\n\n removeAction(selectedItems) {\n return this.$async(this.removeActionAsync, selectedItems);\n }\n\n async removeActionAsync(selectedItems) {\n for (let item of selectedItems) {\n try {\n await this.EdgeGroupService.remove(item.Id);\n\n this.Notifications.success('Edge Group successfully removed', item.Name);\n _.remove(this.items, item);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to remove Edge Group');\n }\n }\n\n this.$state.reload();\n }\n}\n","export class EditEdgeGroupController {\n /* @ngInject */\n constructor(EdgeGroupService, GroupService, TagService, Notifications, $state, $async, EndpointService, EndpointHelper) {\n this.EdgeGroupService = EdgeGroupService;\n this.GroupService = GroupService;\n this.TagService = TagService;\n this.Notifications = Notifications;\n this.$state = $state;\n this.$async = $async;\n this.EndpointService = EndpointService;\n this.EndpointHelper = EndpointHelper;\n\n this.state = {\n actionInProgress: false,\n loaded: false,\n };\n\n this.updateGroup = this.updateGroup.bind(this);\n this.updateGroupAsync = this.updateGroupAsync.bind(this);\n }\n\n async $onInit() {\n const [tags, endpointGroups, group] = await Promise.all([this.TagService.tags(), this.GroupService.groups(), this.EdgeGroupService.group(this.$state.params.groupId)]);\n\n if (!group) {\n this.Notifications.error('Failed to find edge group', {});\n this.$state.go('edge.groups');\n }\n this.tags = tags;\n this.endpointGroups = endpointGroups;\n this.model = group;\n this.state.loaded = true;\n }\n\n updateGroup() {\n return this.$async(this.updateGroupAsync);\n }\n\n async updateGroupAsync() {\n this.state.actionInProgress = true;\n try {\n await this.EdgeGroupService.update(this.model);\n this.Notifications.success('Edge group successfully updated');\n this.$state.go('edge.groups');\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to update edge group');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n}\n","export class CreateEdgeJobViewController {\n /* @ngInject */\n constructor($async, $q, $state, $window, ModalService, EdgeJobService, GroupService, Notifications, TagService) {\n this.state = {\n actionInProgress: false,\n isEditorDirty: false,\n };\n\n this.model = {\n Name: '',\n Recurring: false,\n CronExpression: '',\n Endpoints: [],\n FileContent: '',\n File: null,\n };\n\n this.$async = $async;\n this.$q = $q;\n this.$state = $state;\n this.$window = $window;\n this.ModalService = ModalService;\n this.Notifications = Notifications;\n this.GroupService = GroupService;\n this.EdgeJobService = EdgeJobService;\n this.TagService = TagService;\n\n this.create = this.create.bind(this);\n this.createEdgeJob = this.createEdgeJob.bind(this);\n this.createAsync = this.createAsync.bind(this);\n }\n\n create(method) {\n return this.$async(this.createAsync, method);\n }\n\n async createAsync(method) {\n this.state.actionInProgress = true;\n\n try {\n await this.createEdgeJob(method, this.model);\n this.Notifications.success('Edge job successfully created');\n this.state.isEditorDirty = false;\n this.$state.go('edge.jobs', {}, { reload: true });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to create Edge job');\n }\n\n this.state.actionInProgress = false;\n }\n\n createEdgeJob(method, model) {\n if (method === 'editor') {\n return this.EdgeJobService.createEdgeJobFromFileContent(model);\n }\n return this.EdgeJobService.createEdgeJobFromFileUpload(model);\n }\n\n async uiCanExit() {\n if (this.model.FileContent && this.state.isEditorDirty) {\n return this.ModalService.confirmWebEditorDiscard();\n }\n }\n\n async $onInit() {\n try {\n const [groups, tags] = await Promise.all([this.GroupService.groups(), this.TagService.tags()]);\n this.groups = groups;\n this.tags = tags;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve page data');\n }\n\n this.$window.onbeforeunload = () => {\n if (this.model.FileContent && this.state.isEditorDirty) {\n return '';\n }\n };\n }\n}\n","import _ from 'lodash-es';\n\nexport class EdgeJobController {\n /* @ngInject */\n constructor($async, $q, $state, $window, ModalService, EdgeJobService, EndpointService, FileSaver, GroupService, HostBrowserService, Notifications, TagService) {\n this.state = {\n actionInProgress: false,\n showEditorTab: false,\n isEditorDirty: false,\n };\n\n this.$async = $async;\n this.$q = $q;\n this.$state = $state;\n this.$window = $window;\n this.ModalService = ModalService;\n this.EdgeJobService = EdgeJobService;\n this.EndpointService = EndpointService;\n this.FileSaver = FileSaver;\n this.GroupService = GroupService;\n this.HostBrowserService = HostBrowserService;\n this.Notifications = Notifications;\n this.TagService = TagService;\n\n this.update = this.update.bind(this);\n this.updateAsync = this.updateAsync.bind(this);\n this.downloadLogs = this.downloadLogs.bind(this);\n this.downloadLogsAsync = this.downloadLogsAsync.bind(this);\n this.collectLogs = this.collectLogs.bind(this);\n this.collectLogsAsync = this.collectLogsAsync.bind(this);\n this.clearLogs = this.clearLogs.bind(this);\n this.clearLogsAsync = this.clearLogsAsync.bind(this);\n this.refresh = this.refresh.bind(this);\n this.refreshAsync = this.refreshAsync.bind(this);\n this.showEditor = this.showEditor.bind(this);\n }\n\n update() {\n return this.$async(this.updateAsync);\n }\n\n async updateAsync() {\n const model = this.edgeJob;\n this.state.actionInProgress = true;\n\n try {\n await this.EdgeJobService.updateEdgeJob(model);\n this.Notifications.success('Edge job successfully updated');\n this.state.isEditorDirty = false;\n this.$state.go('edge.jobs', {}, { reload: true });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to update Edge job');\n }\n\n this.state.actionInProgress = false;\n }\n\n downloadLogs(endpointId) {\n return this.$async(this.downloadLogsAsync, endpointId);\n }\n async downloadLogsAsync(endpointId) {\n try {\n const data = await this.EdgeJobService.logFile(this.edgeJob.Id, endpointId);\n const downloadData = new Blob([data.FileContent], {\n type: 'text/plain;charset=utf-8',\n });\n const logFileName = `job_${this.edgeJob.Id}_task_${endpointId}.log`;\n this.FileSaver.saveAs(downloadData, logFileName);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to download file');\n }\n }\n\n associateEndpointsToResults(results, endpoints) {\n return _.map(results, (result) => {\n const endpoint = _.find(endpoints, (endpoint) => endpoint.Id === result.EndpointId);\n result.Endpoint = endpoint;\n return result;\n });\n }\n\n collectLogs(endpointId) {\n return this.$async(this.collectLogsAsync, endpointId);\n }\n\n async collectLogsAsync(endpointId) {\n try {\n await this.EdgeJobService.collectLogs(this.edgeJob.Id, endpointId);\n const result = _.find(this.results, (result) => result.EndpointId === endpointId);\n result.LogsStatus = 2;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to collect logs');\n }\n }\n\n clearLogs(endpointId) {\n return this.$async(this.clearLogsAsync, endpointId);\n }\n async clearLogsAsync(endpointId) {\n try {\n await this.EdgeJobService.clearLogs(this.edgeJob.Id, endpointId);\n const result = _.find(this.results, (result) => result.EndpointId === endpointId);\n result.LogsStatus = 1;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to clear logs');\n }\n }\n\n refresh() {\n return this.$async(this.refreshAsync);\n }\n async refreshAsync() {\n const { id } = this.$state.params;\n const results = await this.EdgeJobService.jobResults(id);\n if (results.length > 0) {\n const endpointIds = _.map(results, (result) => result.EndpointId);\n const endpoints = await this.EndpointService.endpoints(undefined, undefined, { endpointIds });\n this.results = this.associateEndpointsToResults(results, endpoints.value);\n } else {\n this.results = results;\n }\n }\n\n showEditor() {\n this.state.showEditorTab = true;\n }\n\n async uiCanExit() {\n if (this.edgeJob.FileContent !== this.oldFileContent && this.state.isEditorDirty) {\n return this.ModalService.confirmWebEditorDiscard();\n }\n }\n\n async $onInit() {\n const { id, tab } = this.$state.params;\n this.state.activeTab = tab;\n if (!tab || tab === 0) {\n this.state.showEditorTab = true;\n }\n\n try {\n const [edgeJob, file, results, groups, tags] = await Promise.all([\n this.EdgeJobService.edgeJob(id),\n this.EdgeJobService.getScriptFile(id),\n this.EdgeJobService.jobResults(id),\n this.GroupService.groups(),\n this.TagService.tags(),\n ]);\n\n edgeJob.FileContent = file.FileContent;\n this.oldFileContent = edgeJob.FileContent;\n this.edgeJob = edgeJob;\n this.groups = groups;\n this.tags = tags;\n\n if (results.length > 0) {\n const endpointIds = _.map(results, (result) => result.EndpointId);\n const endpoints = await this.EndpointService.endpoints(undefined, undefined, { endpointIds });\n this.results = this.associateEndpointsToResults(results, endpoints.value);\n } else {\n this.results = results;\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve endpoint list');\n }\n\n this.$window.onbeforeunload = () => {\n if (this.edgeJob.FileContent !== this.oldFileContent && this.state.isEditorDirty) {\n return '';\n }\n };\n }\n}\n","import _ from 'lodash-es';\n\nexport class EdgeJobsViewController {\n /* @ngInject */\n constructor($async, $state, EdgeJobService, ModalService, Notifications) {\n this.$async = $async;\n this.$state = $state;\n this.EdgeJobService = EdgeJobService;\n this.ModalService = ModalService;\n this.Notifications = Notifications;\n\n this.removeAction = this.removeAction.bind(this);\n this.deleteJobsAsync = this.deleteJobsAsync.bind(this);\n this.deleteJobs = this.deleteJobs.bind(this);\n }\n\n removeAction(selectedItems) {\n this.ModalService.confirmDeletion('Do you want to remove the selected edge job(s) ?', (confirmed) => {\n if (!confirmed) {\n return;\n }\n this.deleteJobs(selectedItems);\n });\n }\n\n deleteJobs(edgeJobs) {\n return this.$async(this.deleteJobsAsync, edgeJobs);\n }\n\n async deleteJobsAsync(edgeJobs) {\n for (let edgeJob of edgeJobs) {\n try {\n await this.EdgeJobService.remove(edgeJob.Id);\n this.Notifications.success('Stack successfully removed', edgeJob.Name);\n _.remove(this.edgeJobs, edgeJob);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to remove Edge job ' + edgeJob.Name);\n }\n }\n\n this.$state.reload();\n }\n\n async $onInit() {\n try {\n const edgeJobs = await this.EdgeJobService.edgeJobs();\n this.edgeJobs = edgeJobs;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve Edge jobs');\n this.edgeJobs = [];\n }\n }\n}\n","import _ from 'lodash-es';\n\nexport class CreateEdgeStackViewController {\n /* @ngInject */\n constructor($state, $window, ModalService, EdgeStackService, EdgeGroupService, EdgeTemplateService, Notifications, FormHelper, $async) {\n Object.assign(this, { $state, $window, ModalService, EdgeStackService, EdgeGroupService, EdgeTemplateService, Notifications, FormHelper, $async });\n\n this.formValues = {\n Name: '',\n StackFileContent: '',\n StackFile: null,\n RepositoryURL: '',\n RepositoryReferenceName: '',\n RepositoryAuthentication: false,\n RepositoryUsername: '',\n RepositoryPassword: '',\n Env: [],\n ComposeFilePathInRepository: 'docker-compose.yml',\n Groups: [],\n };\n\n this.state = {\n Method: 'editor',\n formValidationError: '',\n actionInProgress: false,\n StackType: null,\n isEditorDirty: false,\n };\n\n this.edgeGroups = null;\n\n this.createStack = this.createStack.bind(this);\n this.createStackAsync = this.createStackAsync.bind(this);\n this.validateForm = this.validateForm.bind(this);\n this.createStackByMethod = this.createStackByMethod.bind(this);\n this.createStackFromFileContent = this.createStackFromFileContent.bind(this);\n this.createStackFromFileUpload = this.createStackFromFileUpload.bind(this);\n this.createStackFromGitRepository = this.createStackFromGitRepository.bind(this);\n this.editorUpdate = this.editorUpdate.bind(this);\n this.onChangeTemplate = this.onChangeTemplate.bind(this);\n this.onChangeTemplateAsync = this.onChangeTemplateAsync.bind(this);\n this.onChangeMethod = this.onChangeMethod.bind(this);\n this.onChangeFormValues = this.onChangeFormValues.bind(this);\n }\n\n async uiCanExit() {\n if (this.state.Method === 'editor' && this.formValues.StackFileContent && this.state.isEditorDirty) {\n return this.ModalService.confirmWebEditorDiscard();\n }\n }\n\n async $onInit() {\n try {\n this.edgeGroups = await this.EdgeGroupService.groups();\n this.noGroups = this.edgeGroups.length === 0;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve Edge groups');\n }\n\n try {\n const templates = await this.EdgeTemplateService.edgeTemplates();\n this.templates = _.map(templates, (template) => ({ ...template, label: `${template.title} - ${template.description}` }));\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve Templates');\n }\n\n this.$window.onbeforeunload = () => {\n if (this.state.Method === 'editor' && this.formValues.StackFileContent && this.state.isEditorDirty) {\n return '';\n }\n };\n }\n\n createStack() {\n return this.$async(this.createStackAsync);\n }\n\n onChangeMethod() {\n this.formValues.StackFileContent = '';\n this.selectedTemplate = null;\n }\n\n onChangeTemplate(template) {\n return this.$async(this.onChangeTemplateAsync, template);\n }\n\n async onChangeTemplateAsync(template) {\n this.formValues.StackFileContent = '';\n try {\n const fileContent = await this.EdgeTemplateService.edgeTemplate(template);\n this.formValues.StackFileContent = fileContent;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve Template');\n }\n }\n\n async createStackAsync() {\n const name = this.formValues.Name;\n let method = this.state.Method;\n\n if (method === 'template') {\n method = 'editor';\n }\n\n if (!this.validateForm(method)) {\n return;\n }\n\n this.state.actionInProgress = true;\n try {\n await this.createStackByMethod(name, method);\n\n this.Notifications.success('Stack successfully deployed');\n this.state.isEditorDirty = false;\n this.$state.go('edge.stacks');\n } catch (err) {\n this.Notifications.error('Deployment error', err, 'Unable to deploy stack');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n validateForm(method) {\n this.state.formValidationError = '';\n\n if (method === 'editor' && this.formValues.StackFileContent === '') {\n this.state.formValidationError = 'Stack file content must not be empty';\n return;\n }\n\n return true;\n }\n\n createStackByMethod(name, method) {\n switch (method) {\n case 'editor':\n return this.createStackFromFileContent(name);\n case 'upload':\n return this.createStackFromFileUpload(name);\n case 'repository':\n return this.createStackFromGitRepository(name);\n }\n }\n\n createStackFromFileContent(name) {\n return this.EdgeStackService.createStackFromFileContent(name, this.formValues.StackFileContent, this.formValues.Groups);\n }\n\n createStackFromFileUpload(name) {\n return this.EdgeStackService.createStackFromFileUpload(name, this.formValues.StackFile, this.formValues.Groups);\n }\n\n createStackFromGitRepository(name) {\n const repositoryOptions = {\n RepositoryURL: this.formValues.RepositoryURL,\n RepositoryReferenceName: this.formValues.RepositoryReferenceName,\n ComposeFilePathInRepository: this.formValues.ComposeFilePathInRepository,\n RepositoryAuthentication: this.formValues.RepositoryAuthentication,\n RepositoryUsername: this.formValues.RepositoryUsername,\n RepositoryPassword: this.formValues.RepositoryPassword,\n };\n return this.EdgeStackService.createStackFromGitRepository(name, repositoryOptions, this.formValues.Groups);\n }\n\n onChangeFormValues(values) {\n this.formValues = values;\n }\n\n editorUpdate(cm) {\n this.formValues.StackFileContent = cm.getValue();\n this.state.isEditorDirty = true;\n }\n}\n","import _ from 'lodash-es';\n\nexport class EdgeStacksViewController {\n /* @ngInject */\n constructor($state, Notifications, EdgeStackService, $scope, $async) {\n this.$state = $state;\n this.Notifications = Notifications;\n this.EdgeStackService = EdgeStackService;\n this.$scope = $scope;\n this.$async = $async;\n\n this.stacks = undefined;\n\n this.getStacks = this.getStacks.bind(this);\n this.removeAction = this.removeAction.bind(this);\n this.removeActionAsync = this.removeActionAsync.bind(this);\n }\n\n $onInit() {\n this.getStacks();\n }\n\n removeAction(stacks) {\n return this.$async(this.removeActionAsync, stacks);\n }\n\n async removeActionAsync(stacks) {\n for (let stack of stacks) {\n try {\n await this.EdgeStackService.remove(stack.Id);\n this.Notifications.success('Stack successfully removed', stack.Name);\n _.remove(this.stacks, stack);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to remove stack ' + stack.Name);\n }\n }\n\n this.$state.reload();\n }\n\n async getStacks() {\n try {\n this.stacks = await this.EdgeStackService.stacks();\n } catch (err) {\n this.stacks = [];\n this.Notifications.error('Failure', err, 'Unable to retrieve stacks');\n }\n }\n}\n","import _ from 'lodash-es';\n\nexport class EditEdgeStackViewController {\n /* @ngInject */\n constructor($async, $state, $window, ModalService, EdgeGroupService, EdgeStackService, EndpointService, Notifications) {\n this.$async = $async;\n this.$state = $state;\n this.$window = $window;\n this.ModalService = ModalService;\n this.EdgeGroupService = EdgeGroupService;\n this.EdgeStackService = EdgeStackService;\n this.EndpointService = EndpointService;\n this.Notifications = Notifications;\n\n this.stack = null;\n this.edgeGroups = null;\n\n this.state = {\n actionInProgress: false,\n activeTab: 0,\n isEditorDirty: false,\n };\n\n this.deployStack = this.deployStack.bind(this);\n this.deployStackAsync = this.deployStackAsync.bind(this);\n this.getPaginatedEndpoints = this.getPaginatedEndpoints.bind(this);\n this.getPaginatedEndpointsAsync = this.getPaginatedEndpointsAsync.bind(this);\n }\n\n async $onInit() {\n const { stackId, tab } = this.$state.params;\n this.state.activeTab = tab;\n try {\n const [edgeGroups, model, file] = await Promise.all([this.EdgeGroupService.groups(), this.EdgeStackService.stack(stackId), this.EdgeStackService.stackFile(stackId)]);\n this.edgeGroups = edgeGroups;\n this.stack = model;\n this.stackEndpointIds = this.filterStackEndpoints(model.EdgeGroups, edgeGroups);\n this.originalFileContent = file;\n this.formValues = {\n StackFileContent: file,\n EdgeGroups: this.stack.EdgeGroups,\n Prune: this.stack.Prune,\n };\n this.oldFileContent = this.formValues.StackFileContent;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve stack data');\n }\n\n this.$window.onbeforeunload = () => {\n if (this.formValues.StackFileContent !== this.oldFileContent && this.state.isEditorDirty) {\n return '';\n }\n };\n }\n\n async uiCanExit() {\n if (this.formValues.StackFileContent !== this.oldFileContent && this.state.isEditorDirty) {\n return this.ModalService.confirmWebEditorDiscard();\n }\n }\n\n filterStackEndpoints(groupIds, groups) {\n return _.flatten(\n _.map(groupIds, (Id) => {\n const group = _.find(groups, { Id });\n return group.Endpoints;\n })\n );\n }\n\n deployStack() {\n return this.$async(this.deployStackAsync);\n }\n\n async deployStackAsync() {\n this.state.actionInProgress = true;\n try {\n if (this.originalFileContent != this.formValues.StackFileContent) {\n this.formValues.Version = this.stack.Version + 1;\n }\n await this.EdgeStackService.updateStack(this.stack.Id, this.formValues);\n this.Notifications.success('Stack successfully deployed');\n this.state.isEditorDirty = false;\n this.$state.go('edge.stacks');\n } catch (err) {\n this.Notifications.error('Deployment error', err, 'Unable to deploy stack');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n getPaginatedEndpoints(...args) {\n return this.$async(this.getPaginatedEndpointsAsync, ...args);\n }\n\n async getPaginatedEndpointsAsync(lastId, limit, search) {\n try {\n const query = { search, type: 4, endpointIds: this.stackEndpointIds };\n const { value, totalCount } = await this.EndpointService.endpoints(lastId, limit, query);\n const endpoints = _.map(value, (endpoint) => {\n const status = this.stack.Status[endpoint.Id];\n endpoint.Status = status;\n return endpoint;\n });\n return { endpoints, totalCount };\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve endpoint information');\n }\n }\n}\n","export function StoridgeEventModel(data) {\n this.Time = data.time;\n this.Category = data.category;\n this.Module = data.module;\n this.Content = data.content;\n}\n","export function StoridgeInfoModel(data) {\n this.Domain = data.domain;\n this.Nodes = data.nodes;\n this.Condition = data.condition;\n this.ProvisionedBandwidth = data.provisionedBandwidth;\n this.UsedBandwidth = data.usedBandwidth;\n this.FreeBandwidth = data.freeBandwidth;\n this.TotalBandwidth = data.totalBandwidth;\n this.ProvisionedIOPS = data.provisionedIOPS;\n this.UsedIOPS = data.usedIOPS;\n this.FreeIOPS = data.freeIOPS;\n this.TotalIOPS = data.totalIOPS;\n this.ProvisionedCapacity = data.provisionedCapacity;\n this.UsedCapacity = data.usedCapacity;\n this.FreeCapacity = data.freeCapacity;\n this.TotalCapacity = data.totalCapacity;\n}\n","import _ from 'lodash-es';\nimport { KubernetesComponentStatus } from './models';\n\nexport class KubernetesComponentStatusConverter {\n /**\n * Convert API data to KubernetesComponentStatus model\n */\n static apiToModel(data) {\n const res = new KubernetesComponentStatus();\n res.ComponentName = data.metadata.name;\n\n const healthyCondition = _.find(data.conditions, { type: 'Healthy' });\n if (healthyCondition && healthyCondition.status === 'True') {\n res.Healthy = true;\n } else if (healthyCondition && healthyCondition.status === 'False') {\n res.ErrorMessage = healthyCondition.message;\n }\n\n return res;\n }\n}\n","/**\n * KubernetesComponentStatus Model\n */\nconst _KubernetesComponentStatus = Object.freeze({\n ComponentName: '',\n Healthy: false,\n ErrorMessage: '',\n});\n\nexport class KubernetesComponentStatus {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesComponentStatus)));\n }\n}\n","import { KubernetesCommonMetadataPayload } from 'Kubernetes/models/common/payloads';\n\n/**\n * KubernetesDeploymentCreatePayload Model\n */\nconst _KubernetesDeploymentCreatePayload = Object.freeze({\n metadata: new KubernetesCommonMetadataPayload(),\n spec: {\n replicas: 0,\n selector: {\n matchLabels: {\n app: '',\n },\n },\n strategy: {\n type: 'RollingUpdate',\n rollingUpdate: {\n maxSurge: 0,\n maxUnavailable: '100%',\n },\n },\n template: {\n metadata: {\n labels: {\n app: '',\n },\n },\n spec: {\n affinity: {},\n containers: [\n {\n name: '',\n image: '',\n env: [],\n resources: {\n limits: {},\n requests: {},\n },\n volumeMounts: [],\n },\n ],\n volumes: [],\n },\n },\n },\n});\n\nexport class KubernetesDeploymentCreatePayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesDeploymentCreatePayload)));\n }\n}\n","import { KubernetesCommonMetadataPayload } from 'Kubernetes/models/common/payloads';\n\n/**\n * KubernetesDaemonSetCreatePayload Model\n */\nconst _KubernetesDaemonSetCreatePayload = Object.freeze({\n metadata: new KubernetesCommonMetadataPayload(),\n spec: {\n replicas: 0,\n selector: {\n matchLabels: {\n app: '',\n },\n },\n updateStrategy: {\n type: 'RollingUpdate',\n rollingUpdate: {\n maxUnavailable: 1,\n },\n },\n template: {\n metadata: {\n labels: {\n app: '',\n },\n },\n spec: {\n containers: [\n {\n name: '',\n image: '',\n env: [],\n resources: {\n limits: {},\n requests: {},\n },\n volumeMounts: [],\n },\n ],\n volumes: [],\n },\n },\n },\n});\n\nexport class KubernetesDaemonSetCreatePayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesDaemonSetCreatePayload)));\n }\n}\n","import { KubernetesCommonMetadataPayload } from 'Kubernetes/models/common/payloads';\n\n/**\n * KubernetesStatefulSetCreatePayload Model\n */\nconst _KubernetesStatefulSetCreatePayload = Object.freeze({\n metadata: new KubernetesCommonMetadataPayload(),\n spec: {\n replicas: 0,\n serviceName: '',\n selector: {\n matchLabels: {\n app: '',\n },\n },\n volumeClaimTemplates: [],\n updateStrategy: {\n type: 'RollingUpdate',\n rollingUpdate: {\n partition: 0,\n },\n },\n template: {\n metadata: {\n labels: {\n app: '',\n },\n },\n spec: {\n containers: [\n {\n name: '',\n image: '',\n env: [],\n resources: {\n limits: {},\n requests: {},\n },\n volumeMounts: [],\n },\n ],\n volumes: [],\n },\n },\n },\n});\n\nexport class KubernetesStatefulSetCreatePayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesStatefulSetCreatePayload)));\n }\n}\n","import { KubernetesCommonMetadataPayload } from 'Kubernetes/models/common/payloads';\n\n/**\n * KubernetesPersistentVolumClaimCreatePayload Model\n */\nconst _KubernetesPersistentVolumClaimCreatePayload = Object.freeze({\n metadata: new KubernetesCommonMetadataPayload(),\n spec: {\n accessModes: ['ReadWriteOnce'],\n resources: {\n requests: {\n storage: '',\n },\n },\n storageClassName: '',\n },\n});\n\nexport class KubernetesPersistentVolumClaimCreatePayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesPersistentVolumClaimCreatePayload)));\n }\n}\n","import { KubernetesCommonMetadataPayload } from 'Kubernetes/models/common/payloads';\n\n/**\n * KubernetesServiceCreatePayload Model\n */\nconst _KubernetesServiceCreatePayload = Object.freeze({\n metadata: new KubernetesCommonMetadataPayload(),\n spec: {\n ports: [],\n selector: {\n app: '',\n },\n type: '',\n clusterIP: '',\n },\n});\n\nexport class KubernetesServiceCreatePayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesServiceCreatePayload)));\n }\n}\n","import _ from 'lodash-es';\n\nexport class KubernetesIngressHelper {\n static findSBoundServiceIngressesRules(ingresses, serviceName) {\n const rules = _.flatMap(ingresses, 'Paths');\n return _.filter(rules, { ServiceName: serviceName });\n }\n}\n","import { KubernetesEvent } from 'Kubernetes/models/event/models';\n\nclass KubernetesEventConverter {\n static apiToEvent(data) {\n const res = new KubernetesEvent();\n res.Id = data.metadata.uid;\n res.Date = data.lastTimestamp || data.eventTime;\n res.Type = data.type;\n res.Message = data.message;\n res.Involved = data.involvedObject;\n return res;\n }\n}\n\nexport default KubernetesEventConverter;\n","/**\n * KubernetesEvent Model\n */\nconst _KubernetesEvent = Object.freeze({\n Id: '',\n Date: 0,\n Type: '',\n Message: '',\n Involved: {},\n});\n\nexport class KubernetesEvent {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesEvent)));\n }\n}\n","import { KubernetesCommonMetadataPayload } from '../common/payloads';\n\n/**\n * KubernetesNamespaceCreatePayload Model\n */\nconst _KubernetesNamespaceCreatePayload = Object.freeze({\n metadata: new KubernetesCommonMetadataPayload(),\n});\n\nexport class KubernetesNamespaceCreatePayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesNamespaceCreatePayload)));\n }\n}\n","import { KubernetesCommonMetadataPayload } from 'Kubernetes/models/common/payloads';\nimport {\n KubernetesPortainerResourceQuotaCPURequest,\n KubernetesPortainerResourceQuotaMemoryRequest,\n KubernetesPortainerResourceQuotaCPULimit,\n KubernetesPortainerResourceQuotaMemoryLimit,\n} from './models';\n\nexport function KubernetesResourceQuotaCreatePayload() {\n return {\n metadata: new KubernetesCommonMetadataPayload(),\n spec: {\n hard: {\n [KubernetesPortainerResourceQuotaCPURequest]: 0,\n [KubernetesPortainerResourceQuotaMemoryRequest]: 0,\n [KubernetesPortainerResourceQuotaCPULimit]: 0,\n [KubernetesPortainerResourceQuotaMemoryLimit]: 0,\n },\n },\n };\n}\n","import { KubernetesCommonMetadataPayload } from 'Kubernetes/models/common/payloads';\n\n/**\n * KubernetesStorageClassCreatePayload Model\n */\nconst _KubernetesStorageClassCreatePayload = Object.freeze({\n metadata: new KubernetesCommonMetadataPayload(),\n provisioner: '',\n allowVolumeExpansion: false,\n});\n\nexport class KubernetesStorageClassCreatePayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesStorageClassCreatePayload)));\n }\n}\n","import { KubernetesEndpoint, KubernetesEndpointAnnotationLeader, KubernetesEndpointSubset } from 'Kubernetes/endpoint/models';\nimport _ from 'lodash-es';\n\nclass KubernetesEndpointConverter {\n static apiToEndpoint(data) {\n const res = new KubernetesEndpoint();\n res.Id = data.metadata.uid;\n res.Name = data.metadata.name;\n res.Namespace = data.metadata.namespace;\n const leaderAnnotation = data.metadata.annotations ? data.metadata.annotations[KubernetesEndpointAnnotationLeader] : '';\n if (leaderAnnotation) {\n const parsedJson = JSON.parse(leaderAnnotation);\n const split = _.split(parsedJson.holderIdentity, '_');\n res.HolderIdentity = split[0];\n }\n\n if (data.subsets) {\n res.Subsets = _.map(data.subsets, (item) => {\n const subset = new KubernetesEndpointSubset();\n subset.Ips = _.map(item.addresses, 'ip');\n const port = _.find(item.ports, { name: 'https' });\n subset.Port = port ? port.port : undefined;\n return subset;\n });\n }\n return res;\n }\n}\n\nexport default KubernetesEndpointConverter;\n","import angular from 'angular';\nimport _ from 'lodash-es';\nimport PortainerError from 'Portainer/error';\n\nimport { KubernetesApplicationTypes } from 'Kubernetes/models/application/models';\nimport { KubernetesSystem_DefaultDeploymentUniqueLabelKey, KubernetesSystem_AnnotationsToSkip } from 'Kubernetes/models/history/models';\n\nclass KubernetesApplicationRollbackHelper {\n static getPatchPayload(application, targetRevision) {\n let result;\n\n switch (application.ApplicationType) {\n case KubernetesApplicationTypes.DEPLOYMENT:\n result = KubernetesApplicationRollbackHelper._getDeploymentPayload(application, targetRevision);\n break;\n case KubernetesApplicationTypes.DAEMONSET:\n result = KubernetesApplicationRollbackHelper._getDaemonSetPayload(application, targetRevision);\n break;\n case KubernetesApplicationTypes.STATEFULSET:\n result = KubernetesApplicationRollbackHelper._getStatefulSetPayload(application, targetRevision);\n break;\n default:\n throw new PortainerError('Unable to determine which association to use to convert patch');\n }\n return result;\n }\n\n static _getDeploymentPayload(deploymentApp, targetRevision) {\n const target = angular.copy(targetRevision);\n const deployment = deploymentApp.Raw;\n\n // remove hash label before patching back into the deployment\n delete target.spec.template.metadata.labels[KubernetesSystem_DefaultDeploymentUniqueLabelKey];\n\n // compute deployment annotations\n const annotations = {};\n _.forEach(KubernetesSystem_AnnotationsToSkip, (_, k) => {\n const v = deployment.metadata.annotations[k];\n if (v) {\n annotations[k] = v;\n }\n });\n _.forEach(target.metadata.annotations, (v, k) => {\n if (!KubernetesSystem_AnnotationsToSkip[k]) {\n annotations[k] = v;\n }\n });\n // Create a patch of the Deployment that replaces spec.template\n const patch = [\n {\n op: 'replace',\n path: '/spec/template',\n value: target.spec.template,\n },\n {\n op: 'replace',\n path: '/metadata/annotations',\n value: annotations,\n },\n ];\n\n return patch;\n }\n\n static _getDaemonSetPayload(daemonSet, targetRevision) {\n void daemonSet;\n return targetRevision.data;\n }\n\n static _getStatefulSetPayload(statefulSet, targetRevision) {\n void statefulSet;\n return targetRevision.data;\n }\n}\n\nexport default KubernetesApplicationRollbackHelper;\n","import _ from 'lodash-es';\nimport PortainerError from 'Portainer/error';\n\nimport KubernetesDeploymentHistoryHelper from 'Kubernetes/helpers/history/deployment';\nimport KubernetesDaemonSetHistoryHelper from 'Kubernetes/helpers/history/daemonset';\nimport KubernetesStatefulSetHistoryHelper from 'Kubernetes/helpers/history/statefulset';\nimport { KubernetesApplicationTypes } from 'Kubernetes/models/application/models';\n\nclass KubernetesHistoryHelper {\n static getRevisions(rawRevisions, application) {\n let currentRevision, revisionsList;\n\n switch (application.ApplicationType) {\n case KubernetesApplicationTypes.DEPLOYMENT:\n [currentRevision, revisionsList] = KubernetesHistoryHelper._getDeploymentRevisions(rawRevisions, application.Raw);\n break;\n case KubernetesApplicationTypes.DAEMONSET:\n [currentRevision, revisionsList] = KubernetesHistoryHelper._getDaemonSetRevisions(rawRevisions, application.Raw);\n break;\n case KubernetesApplicationTypes.STATEFULSET:\n [currentRevision, revisionsList] = KubernetesHistoryHelper._getStatefulSetRevisions(rawRevisions, application.Raw);\n break;\n default:\n throw new PortainerError('Unable to determine which association to use to get revisions');\n }\n revisionsList = _.sortBy(revisionsList, 'revision');\n return [currentRevision, revisionsList];\n }\n\n static _getDeploymentRevisions(rsList, deployment) {\n const appRS = KubernetesDeploymentHistoryHelper.filterOwnedRevisions(rsList, deployment);\n const currentRS = KubernetesDeploymentHistoryHelper.getCurrentRevision(appRS, deployment);\n const versionedRS = KubernetesDeploymentHistoryHelper.filterVersionedRevisions(appRS);\n return [currentRS, versionedRS];\n }\n\n static _getDaemonSetRevisions(crList, daemonSet) {\n const appCR = KubernetesDaemonSetHistoryHelper.filterOwnedRevisions(crList, daemonSet);\n const currentCR = KubernetesDaemonSetHistoryHelper.getCurrentRevision(appCR, daemonSet);\n return [currentCR, appCR];\n }\n\n static _getStatefulSetRevisions(crList, statefulSet) {\n const appCR = KubernetesStatefulSetHistoryHelper.filterOwnedRevisions(crList, statefulSet);\n const currentCR = KubernetesStatefulSetHistoryHelper.getCurrentRevision(appCR, statefulSet);\n return [currentCR, appCR];\n }\n}\n\nexport default KubernetesHistoryHelper;\n","import _ from 'lodash-es';\nimport { KubernetesStack } from 'Kubernetes/models/stack/models';\n\nclass KubernetesStackHelper {\n static stacksFromApplications(applications) {\n const res = _.reduce(\n applications,\n (acc, app) => {\n if (app.StackName !== '-') {\n let stack = _.find(acc, { Name: app.StackName, ResourcePool: app.ResourcePool });\n if (!stack) {\n stack = new KubernetesStack();\n stack.Name = app.StackName;\n stack.ResourcePool = app.ResourcePool;\n acc.push(stack);\n }\n stack.Applications.push(app);\n }\n return acc;\n },\n []\n );\n return res;\n }\n}\nexport default KubernetesStackHelper;\n","/**\n * Stack Model\n */\nconst _KubernetesStack = Object.freeze({\n Name: '',\n ResourcePool: '',\n Applications: [],\n});\n\nexport class KubernetesStack {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesStack)));\n }\n}\n","/**\n * KubernetesHorizontalPodAutoScaler Create Payload Model\n */\nconst _KubernetesHorizontalPodAutoScalerCreatePayload = Object.freeze({\n metadata: {\n namespace: '',\n name: '',\n },\n spec: {\n maxReplicas: 0,\n minReplicas: 0,\n targetCPUUtilizationPercentage: 0,\n scaleTargetRef: {\n kind: '',\n name: '',\n },\n },\n});\n\nexport class KubernetesHorizontalPodAutoScalerCreatePayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesHorizontalPodAutoScalerCreatePayload)));\n }\n}\n\n/**\n * KubernetesHorizontalPodAutoScaler Create Payload Model for v2beta2\n * Include support of memory usage\n */\n\n// const _KubernetesHorizontalPodAutoScalerCreatePayload = Object.freeze({\n// metadata: {\n// namespace: '',\n// name: ''\n// },\n// spec: {\n// maxReplicas: 0,\n// minReplicas: 0,\n// targetCPUUtilizationPercentage: 0,\n// scaleTargetRef: {\n// kind: '',\n// name: ''\n// },\n// metrics: []\n// }\n// });\n\n// export class KubernetesHorizontalPodAutoScalerCreatePayload {\n// constructor() {\n// Object.assign(this, JSON.parse(JSON.stringify(_KubernetesHorizontalPodAutoScalerCreatePayload)));\n// }\n// }\n\n// const _KubernetesHorizontalPodAutoScalerCPUMetric = Object.freeze({\n// type: 'Resource',\n// resource: {\n// name: 'cpu',\n// target: {\n// type: 'Utilization',\n// averageUtilization: 0\n// }\n// }\n// });\n\n// export class KubernetesHorizontalPodAutoScalerCPUMetric {\n// constructor() {\n// Object.assign(this, JSON.parse(JSON.stringify(_KubernetesHorizontalPodAutoScalerCPUMetric)));\n// }\n// }\n\n// const _KubernetesHorizontalPodAutoScalerMemoryMetric = Object.freeze({\n// type: 'Resource',\n// resource: {\n// name: 'memory',\n// target: {\n// type: 'AverageValue',\n// averageValue: ''\n// }\n// }\n// });\n\n// export class KubernetesHorizontalPodAutoScalerMemoryMetric {\n// constructor() {\n// Object.assign(this, JSON.parse(JSON.stringify(_KubernetesHorizontalPodAutoScalerMemoryMetric)));\n// }\n// }\n","import { KubernetesCommonMetadataPayload } from 'Kubernetes/models/common/payloads';\n\nexport function createPayloadFactory() {\n return {\n metadata: new KubernetesCommonMetadataPayload(),\n spec: {\n replicas: 0,\n selector: {\n matchLabels: {\n app: '',\n },\n },\n strategy: {\n type: 'RollingUpdate',\n rollingUpdate: {\n maxSurge: 0,\n maxUnavailable: '100%',\n },\n },\n template: {\n metadata: {\n labels: {\n app: '',\n },\n },\n spec: {\n affinity: {},\n containers: [\n {\n name: '',\n image: '',\n env: [],\n resources: {\n limits: {},\n requests: {},\n },\n volumeMounts: [],\n },\n ],\n volumes: [],\n },\n },\n },\n };\n}\n","import _ from 'lodash-es';\nimport { KubernetesResourceTypes, KubernetesResourceActions } from 'Kubernetes/models/resource-types/models';\nimport { KubernetesApplicationFormValues } from 'Kubernetes/models/application/formValues';\nimport { KubernetesDeployment } from 'Kubernetes/models/deployment/models';\nimport { KubernetesStatefulSet } from 'Kubernetes/models/stateful-set/models';\nimport { KubernetesDaemonSet } from 'Kubernetes/models/daemon-set/models';\nimport { KubernetesServiceTypes } from 'Kubernetes/models/service/models';\nimport {\n KubernetesApplication,\n KubernetesApplicationDeploymentTypes,\n KubernetesApplicationPublishingTypes,\n KubernetesApplicationTypes,\n} from 'Kubernetes/models/application/models';\nimport { KubernetesHorizontalPodAutoScalerHelper } from 'Kubernetes/horizontal-pod-auto-scaler/helper';\nimport { KubernetesHorizontalPodAutoScalerConverter } from 'Kubernetes/horizontal-pod-auto-scaler/converter';\nimport KubernetesApplicationConverter from 'Kubernetes/converters/application';\nimport KubernetesServiceConverter from 'Kubernetes/converters/service';\nimport { KubernetesIngressConverter } from 'Kubernetes/ingress/converter';\nimport KubernetesPersistentVolumeClaimConverter from 'Kubernetes/converters/persistentVolumeClaim';\n\nconst { CREATE, UPDATE, DELETE } = KubernetesResourceActions;\n\n/**\n * Get summary of Kubernetes resources to be created, updated or deleted\n * @param {KubernetesApplicationFormValues} formValues\n */\nexport default function (formValues, oldFormValues = {}) {\n if (oldFormValues instanceof KubernetesApplicationFormValues) {\n const resourceSummary = getUpdatedApplicationResources(oldFormValues, formValues);\n return resourceSummary;\n }\n const resourceSummary = getCreatedApplicationResources(formValues);\n return resourceSummary;\n}\n\n/**\n * Get summary of Kubernetes resources to be created\n * @param {KubernetesApplicationFormValues} formValues\n */\nfunction getCreatedApplicationResources(formValues) {\n const resources = [];\n\n let [app, headlessService, service, claims] = KubernetesApplicationConverter.applicationFormValuesToApplication(formValues);\n\n if (service) {\n // Service\n resources.push({ action: CREATE, kind: KubernetesResourceTypes.SERVICE, name: service.Name, type: service.Type || KubernetesServiceTypes.CLUSTER_IP });\n if (formValues.PublishingType === KubernetesApplicationPublishingTypes.INGRESS) {\n // Ingress\n const ingresses = KubernetesIngressConverter.applicationFormValuesToIngresses(formValues, service.Name);\n resources.push(...getIngressUpdateSummary(formValues.OriginalIngresses, ingresses));\n }\n }\n\n if (app instanceof KubernetesStatefulSet) {\n // Service\n resources.push({ action: CREATE, kind: KubernetesResourceTypes.SERVICE, name: headlessService.Name, type: headlessService.Type || KubernetesServiceTypes.CLUSTER_IP });\n } else {\n // Persistent volume claims\n const persistentVolumeClaimResources = claims\n .filter((pvc) => !pvc.PreviousName && !pvc.Id)\n .map((pvc) => ({ action: CREATE, kind: KubernetesResourceTypes.PERSISTENT_VOLUME_CLAIM, name: pvc.Name }));\n resources.push(...persistentVolumeClaimResources);\n }\n\n // Horizontal pod autoscalers\n if (formValues.AutoScaler.IsUsed && formValues.DeploymentType !== KubernetesApplicationDeploymentTypes.GLOBAL) {\n const kind = KubernetesHorizontalPodAutoScalerHelper.getApplicationTypeString(app);\n const autoScaler = KubernetesHorizontalPodAutoScalerConverter.applicationFormValuesToModel(formValues, kind);\n resources.push({ action: CREATE, kind: KubernetesResourceTypes.HORIZONTAL_POD_AUTOSCALER, name: autoScaler.Name });\n }\n\n // Deployment\n const appResourceType = getApplicationResourceType(app);\n if (appResourceType !== null) {\n resources.push({ action: CREATE, kind: appResourceType, name: app.Name });\n }\n\n return resources;\n}\n\n/**\n * Get summary of Kubernetes resources to be created, updated and/or deleted\n * @param {KubernetesApplicationFormValues} oldFormValues\n * @param {KubernetesApplicationFormValues} newFormValues\n */\nfunction getUpdatedApplicationResources(oldFormValues, newFormValues) {\n const resources = [];\n\n const [oldApp, oldHeadlessService, oldService, oldClaims] = KubernetesApplicationConverter.applicationFormValuesToApplication(oldFormValues);\n const [newApp, newHeadlessService, newService, newClaims] = KubernetesApplicationConverter.applicationFormValuesToApplication(newFormValues);\n\n const oldAppResourceType = getApplicationResourceType(oldApp);\n const newAppResourceType = getApplicationResourceType(newApp);\n\n if (oldAppResourceType !== newAppResourceType) {\n // Deployment\n resources.push({ action: DELETE, kind: oldAppResourceType, name: oldApp.Name });\n if (oldService) {\n // Service\n resources.push({ action: DELETE, kind: KubernetesResourceTypes.SERVICE, name: oldService.Name, type: oldService.Type || KubernetesServiceTypes.CLUSTER_IP });\n }\n // re-creation of resources\n const createdApplicationResourceSummary = getCreatedApplicationResources(newFormValues);\n resources.push(...createdApplicationResourceSummary);\n return resources;\n }\n\n if (newApp instanceof KubernetesStatefulSet) {\n const headlessServiceUpdateResourceSummary = getServiceUpdateResourceSummary(oldHeadlessService, newHeadlessService);\n if (headlessServiceUpdateResourceSummary) {\n resources.push(headlessServiceUpdateResourceSummary);\n }\n } else {\n // Persistent volume claims\n const claimSummaries = newClaims\n .map((pvc) => {\n if (!pvc.PreviousName && !pvc.Id) {\n return { action: CREATE, kind: KubernetesResourceTypes.PERSISTENT_VOLUME_CLAIM, name: pvc.Name };\n } else if (!pvc.Id) {\n const oldClaim = _.find(oldClaims, { Name: pvc.PreviousName });\n return getVolumeClaimUpdateResourceSummary(oldClaim, pvc);\n }\n })\n .filter((pvc) => pvc); // remove nulls\n resources.push(...claimSummaries);\n }\n\n // Deployment\n resources.push({ action: UPDATE, kind: oldAppResourceType, name: oldApp.Name });\n\n if (oldService && newService) {\n // Service\n const serviceUpdateResourceSummary = getServiceUpdateResourceSummary(oldService, newService);\n if (serviceUpdateResourceSummary) {\n resources.push(serviceUpdateResourceSummary);\n }\n\n if (newFormValues.PublishingType === KubernetesApplicationPublishingTypes.INGRESS || oldFormValues.PublishingType === KubernetesApplicationPublishingTypes.INGRESS) {\n // Ingress\n const oldIngresses = KubernetesIngressConverter.applicationFormValuesToIngresses(oldFormValues, oldService.Name);\n const newIngresses = KubernetesIngressConverter.applicationFormValuesToIngresses(newFormValues, newService.Name);\n resources.push(...getIngressUpdateSummary(oldIngresses, newIngresses));\n }\n } else if (!oldService && newService) {\n // Service\n resources.push({ action: CREATE, kind: KubernetesResourceTypes.SERVICE, name: newService.Name, type: newService.Type || KubernetesServiceTypes.CLUSTER_IP });\n if (newFormValues.PublishingType === KubernetesApplicationPublishingTypes.INGRESS) {\n // Ingress\n const ingresses = KubernetesIngressConverter.applicationFormValuesToIngresses(newFormValues, newService.Name);\n resources.push(...getIngressUpdateSummary(newFormValues.OriginalIngresses, ingresses));\n }\n } else if (oldService && !newService) {\n // Service\n resources.push({ action: DELETE, kind: KubernetesResourceTypes.SERVICE, name: oldService.Name, type: oldService.Type || KubernetesServiceTypes.CLUSTER_IP });\n if (oldFormValues.PublishingType === KubernetesApplicationPublishingTypes.INGRESS) {\n // Ingress\n const ingresses = KubernetesIngressConverter.applicationFormValuesToIngresses(newFormValues, oldService.Name);\n resources.push(...getIngressUpdateSummary(oldFormValues.OriginalIngresses, ingresses));\n }\n }\n\n const newKind = KubernetesHorizontalPodAutoScalerHelper.getApplicationTypeString(newApp);\n const newAutoScaler = KubernetesHorizontalPodAutoScalerConverter.applicationFormValuesToModel(newFormValues, newKind);\n if (!oldFormValues.AutoScaler.IsUsed) {\n if (newFormValues.AutoScaler.IsUsed) {\n // Horizontal pod autoscalers\n resources.push({ action: CREATE, kind: KubernetesResourceTypes.HORIZONTAL_POD_AUTOSCALER, name: newAutoScaler.Name });\n }\n } else {\n // Horizontal pod autoscalers\n const oldKind = KubernetesHorizontalPodAutoScalerHelper.getApplicationTypeString(oldApp);\n const oldAutoScaler = KubernetesHorizontalPodAutoScalerConverter.applicationFormValuesToModel(oldFormValues, oldKind);\n if (newFormValues.AutoScaler.IsUsed) {\n const hpaUpdateSummary = getHorizontalPodAutoScalerUpdateResourceSummary(oldAutoScaler, newAutoScaler);\n if (hpaUpdateSummary) {\n resources.push(hpaUpdateSummary);\n }\n } else {\n resources.push({ action: DELETE, kind: KubernetesResourceTypes.HORIZONTAL_POD_AUTOSCALER, name: oldAutoScaler.Name });\n }\n }\n\n return resources;\n}\n\nfunction getApplicationResourceType(app) {\n if (app instanceof KubernetesDeployment || (app instanceof KubernetesApplication && app.ApplicationType === KubernetesApplicationTypes.DEPLOYMENT)) {\n return KubernetesResourceTypes.DEPLOYMENT;\n } else if (app instanceof KubernetesDaemonSet || (app instanceof KubernetesApplication && app.ApplicationType === KubernetesApplicationTypes.DAEMONSET)) {\n return KubernetesResourceTypes.DAEMONSET;\n } else if (app instanceof KubernetesStatefulSet || (app instanceof KubernetesApplication && app.ApplicationType === KubernetesApplicationTypes.STATEFULSET)) {\n return KubernetesResourceTypes.STATEFULSET;\n }\n return null;\n}\n\nfunction getIngressUpdateSummary(oldIngresses, newIngresses) {\n const ingressesSummaries = newIngresses\n .map((newIng) => {\n const oldIng = _.find(oldIngresses, { Name: newIng.Name });\n return getIngressUpdateResourceSummary(oldIng, newIng);\n })\n .filter((s) => s); // remove nulls\n return ingressesSummaries;\n}\n\n// getIngressUpdateResourceSummary replicates KubernetesIngressService.patch\nfunction getIngressUpdateResourceSummary(oldIngress, newIngress) {\n const payload = KubernetesIngressConverter.patchPayload(oldIngress, newIngress);\n if (payload.length) {\n return { action: UPDATE, kind: KubernetesResourceTypes.INGRESS, name: oldIngress.Name };\n }\n return null;\n}\n\n// getVolumeClaimUpdateResourceSummary replicates KubernetesPersistentVolumeClaimService.patch\nfunction getVolumeClaimUpdateResourceSummary(oldPVC, newPVC) {\n const payload = KubernetesPersistentVolumeClaimConverter.patchPayload(oldPVC, newPVC);\n if (payload.length) {\n return { action: UPDATE, kind: KubernetesResourceTypes.PERSISTENT_VOLUME_CLAIM, name: oldPVC.Name };\n }\n return null;\n}\n\n// getServiceUpdateResourceSummary replicates KubernetesServiceService.patch\nfunction getServiceUpdateResourceSummary(oldService, newService) {\n const payload = KubernetesServiceConverter.patchPayload(oldService, newService);\n if (payload.length) {\n return { action: UPDATE, kind: KubernetesResourceTypes.SERVICE, name: oldService.Name, type: oldService.Type || KubernetesServiceTypes.CLUSTER_IP };\n }\n return null;\n}\n\n// getHorizontalPodAutoScalerUpdateResourceSummary replicates KubernetesHorizontalPodAutoScalerService.patch\nfunction getHorizontalPodAutoScalerUpdateResourceSummary(oldHorizontalPodAutoScaler, newHorizontalPodAutoScaler) {\n const payload = KubernetesHorizontalPodAutoScalerConverter.patchPayload(oldHorizontalPodAutoScaler, newHorizontalPodAutoScaler);\n if (payload.length) {\n return { action: UPDATE, kind: KubernetesResourceTypes.HORIZONTAL_POD_AUTOSCALER, name: oldHorizontalPodAutoScaler.Name };\n }\n return null;\n}\n","import { KubernetesResourceTypes, KubernetesResourceActions } from 'Kubernetes/models/resource-types/models';\nimport { KubernetesConfigurationTypes } from 'Kubernetes/models/configuration/models';\n\nconst { CREATE, UPDATE } = KubernetesResourceActions;\n\nexport default function (formValues) {\n const action = formValues.Id ? UPDATE : CREATE;\n if (formValues.Type === KubernetesConfigurationTypes.CONFIGMAP) {\n return [{ action, kind: KubernetesResourceTypes.CONFIGMAP, name: formValues.Name }];\n } else if (formValues.Type === KubernetesConfigurationTypes.SECRET) {\n return [{ action, kind: KubernetesResourceTypes.SECRET, name: formValues.Name }];\n }\n}\n","import KubernetesResourcePoolConverter from 'Kubernetes/converters/resourcePool';\nimport { KubernetesResourcePoolFormValues } from 'Kubernetes/models/resource-pool/formValues';\nimport { KubernetesResourceQuotaDefaults } from 'Kubernetes/models/resource-quota/models';\nimport { KubernetesResourceTypes } from 'Kubernetes/models/resource-types/models';\nimport { getResourcesSummary } from 'Kubernetes/views/summary/resources/helpers';\n\nexport default function (newFormValues, oldFormValues) {\n const [newNamespace, newQuota, newIngresses] = KubernetesResourcePoolConverter.formValuesToResourcePool(newFormValues);\n\n if (!(oldFormValues instanceof KubernetesResourcePoolFormValues)) {\n oldFormValues = new KubernetesResourcePoolFormValues(KubernetesResourceQuotaDefaults);\n }\n\n const [oldNamespace, oldQuota, oldIngresses] = KubernetesResourcePoolConverter.formValuesToResourcePool(oldFormValues);\n\n const resources = [\n ...getResourcesSummary(newNamespace, oldNamespace, KubernetesResourceTypes.NAMESPACE),\n ...getResourcesSummary(newQuota, oldQuota, KubernetesResourceTypes.RESOURCEQUOTA),\n ...getResourcesSummary(newIngresses, oldIngresses, KubernetesResourceTypes.INGRESS),\n ];\n\n return resources;\n}\n","import { ResourceControlOwnership } from 'Portainer/models/resourceControl/resourceControlOwnership';\n\nexport function AccessControlPanelData() {\n this.Ownership = ResourceControlOwnership.ADMINISTRATORS;\n this.Ownership_Users = [];\n this.Ownership_Teams = [];\n}\n","import angular from 'angular';\nimport _ from 'lodash-es';\n\nclass AssoicatedEndpointsSelectorController {\n /* @ngInject */\n constructor($async, EndpointService) {\n this.$async = $async;\n this.EndpointService = EndpointService;\n\n this.state = {\n available: {\n limit: '10',\n filter: '',\n pageNumber: 1,\n totalCount: 0,\n },\n associated: {\n limit: '10',\n filter: '',\n pageNumber: 1,\n totalCount: 0,\n },\n };\n\n this.endpoints = {\n associated: [],\n available: null,\n };\n\n this.getEndpoints = this.getEndpoints.bind(this);\n this.getEndpointsAsync = this.getEndpointsAsync.bind(this);\n this.getAssociatedEndpoints = this.getAssociatedEndpoints.bind(this);\n this.getAssociatedEndpointsAsync = this.getAssociatedEndpointsAsync.bind(this);\n this.associateEndpoint = this.associateEndpoint.bind(this);\n this.dissociateEndpoint = this.dissociateEndpoint.bind(this);\n }\n\n $onInit() {\n this.loadData();\n }\n\n $onChanges({ endpointIds }) {\n if (endpointIds && endpointIds.currentValue) {\n this.loadData();\n }\n }\n\n loadData() {\n this.getAssociatedEndpoints();\n this.getEndpoints();\n }\n\n getEndpoints() {\n return this.$async(this.getEndpointsAsync);\n }\n\n async getEndpointsAsync() {\n const { start, search, limit } = this.getPaginationData('available');\n const query = { search, type: 4 };\n\n const response = await this.EndpointService.endpoints(start, limit, query);\n\n const endpoints = _.filter(response.value, (endpoint) => !_.includes(this.endpointIds, endpoint.Id));\n this.setTableData('available', endpoints, response.totalCount);\n this.noEndpoints = this.state.available.totalCount === 0;\n }\n\n getAssociatedEndpoints() {\n return this.$async(this.getAssociatedEndpointsAsync);\n }\n\n async getAssociatedEndpointsAsync() {\n let response = { value: [], totalCount: 0 };\n if (this.endpointIds.length > 0) {\n const { start, search, limit } = this.getPaginationData('associated');\n const query = { search, type: 4, endpointIds: this.endpointIds };\n\n response = await this.EndpointService.endpoints(start, limit, query);\n }\n\n this.setTableData('associated', response.value, response.totalCount);\n }\n\n associateEndpoint(endpoint) {\n this.onAssociate(endpoint);\n }\n\n dissociateEndpoint(endpoint) {\n this.onDissociate(endpoint);\n }\n\n getPaginationData(tableType) {\n const { pageNumber, limit, search } = this.state[tableType];\n const start = (pageNumber - 1) * limit + 1;\n\n return { start, search, limit };\n }\n\n setTableData(tableType, endpoints, totalCount) {\n this.endpoints[tableType] = endpoints;\n this.state[tableType].totalCount = parseInt(totalCount, 10);\n }\n}\n\nangular.module('portainer.app').controller('AssoicatedEndpointsSelectorController', AssoicatedEndpointsSelectorController);\nexport default AssoicatedEndpointsSelectorController;\n","class CustomTemplateCommonFieldsController {\n /* @ngInject */\n constructor() {\n this.platformTypes = [\n { label: 'Linux', value: 1 },\n { label: 'Windows', value: 2 },\n ];\n\n this.templateTypes = [\n { label: 'Swarm', value: 1 },\n { label: 'Standalone', value: 2 },\n ];\n }\n}\n\nexport default CustomTemplateCommonFieldsController;\n","export default class DatatableColumnsVisibilityController {\n constructor() {\n this.state = {\n isOpen: false,\n };\n }\n}\n","export default class UsersDatatableController {\n /* @ngInject*/\n constructor($controller, $scope) {\n const allowSelection = this.allowSelection;\n angular.extend(this, $controller('GenericDatatableController', { $scope }));\n this.allowSelection = allowSelection.bind(this);\n }\n\n /**\n * Override this method to allow/deny selection\n */\n allowSelection(item) {\n return item.Id !== 1;\n }\n}\n","import angular from 'angular';\nimport _ from 'lodash-es';\nimport PortainerEndpointTagHelper from 'Portainer/helpers/tagHelper';\n\nclass EndpointItemController {\n /* @ngInject */\n constructor() {\n this.editEndpoint = this.editEndpoint.bind(this);\n }\n\n editEndpoint(event) {\n event.stopPropagation();\n this.onEdit(this.model.Id);\n }\n\n joinTags() {\n if (!this.tags) {\n return 'Loading tags...';\n }\n\n if (!this.model.TagIds || !this.model.TagIds.length) {\n return '';\n }\n\n const tagNames = PortainerEndpointTagHelper.idsToTagNames(this.tags, this.model.TagIds);\n return _.join(tagNames, ',');\n }\n\n isEdgeEndpoint() {\n return this.model.Type === 4 || this.model.Type === 7;\n }\n\n calcIsCheckInValid() {\n if (!this.isEdgeEndpoint()) {\n return false;\n }\n const checkInInterval = this.model.EdgeCheckinInterval;\n const now = Math.floor(Date.now() / 1000);\n\n // give checkIn some wiggle room\n return now - this.model.LastCheckInDate <= checkInInterval * 2;\n }\n\n $onInit() {\n this.endpointTags = this.joinTags();\n this.isCheckInValid = this.calcIsCheckInValid();\n }\n\n $onChanges({ tags, model }) {\n if ((!tags && !model) || (!tags.currentValue && !model.currentValue)) {\n return;\n }\n this.endpointTags = this.joinTags();\n\n if (model) {\n this.isCheckInValid = this.calcIsCheckInValid();\n }\n }\n}\n\nangular.module('portainer.app').controller('EndpointItemController', EndpointItemController);\nexport default EndpointItemController;\n","import { parseDotEnvFile, convertToArrayOfStrings } from '@/portainer/helpers/env-vars';\n\nexport default class EnvironmentVariablesPanelController {\n /* @ngInject */\n constructor() {\n this.mode = 'simple';\n this.editorText = '';\n\n this.switchEnvMode = this.switchEnvMode.bind(this);\n this.editorUpdate = this.editorUpdate.bind(this);\n this.handleSimpleChange = this.handleSimpleChange.bind(this);\n }\n\n switchEnvMode() {\n if (this.mode === 'simple') {\n const editorText = convertToArrayOfStrings(this.ngModel).join('\\n');\n\n this.editorText = editorText;\n\n this.mode = 'advanced';\n } else {\n this.mode = 'simple';\n }\n }\n\n handleSimpleChange(value) {\n this.onChange(value);\n }\n\n editorUpdate(cm) {\n this.editorText = cm.getValue();\n this.onChange(parseDotEnvFile(this.editorText));\n }\n}\n","class EnvironmentVariablesSimpleModeItemController {\n onChangeName(name) {\n const fieldIsInvalid = typeof name === 'undefined';\n if (fieldIsInvalid) {\n return;\n }\n\n this.onChange(this.index, { ...this.variable, name });\n }\n\n onChangeValue(value) {\n const fieldIsInvalid = typeof value === 'undefined';\n if (fieldIsInvalid) {\n return;\n }\n\n this.onChange(this.index, { ...this.variable, value });\n }\n\n hasValue() {\n return typeof this.variable.value !== 'undefined';\n }\n\n removeValue() {\n this.onChange(this.index, { name: this.variable.name });\n }\n\n $onInit() {\n this.formName = `variableForm${this.index}`;\n }\n}\n\nexport default EnvironmentVariablesSimpleModeItemController;\n","import { parseDotEnvFile } from '@/portainer/helpers/env-vars';\n\nexport default class EnvironmentVariablesSimpleModeController {\n /* @ngInject */\n constructor($async) {\n this.$async = $async;\n\n this.onChangeVariable = this.onChangeVariable.bind(this);\n this.remove = this.remove.bind(this);\n }\n\n add() {\n this.onChange([...this.ngModel, { name: '', value: '' }]);\n }\n\n remove(index) {\n this.onChange(this.ngModel.filter((_, i) => i !== index));\n }\n\n addFromFile(file) {\n return this.$async(async () => {\n if (!file) {\n return;\n }\n const text = await this.getTextFromFile(file);\n const parsed = parseDotEnvFile(text);\n this.onChange(this.ngModel.concat(parsed));\n });\n }\n\n getTextFromFile(file) {\n return new Promise((resolve, reject) => {\n const temporaryFileReader = new FileReader();\n temporaryFileReader.readAsText(file);\n temporaryFileReader.onload = (event) => resolve(event.target.result);\n temporaryFileReader.onerror = (error) => reject(error);\n });\n }\n\n onChangeVariable(index, variable) {\n this.onChange(this.ngModel.map((v, i) => (i !== index ? v : variable)));\n }\n}\n","import _ from 'lodash-es';\nimport angular from 'angular';\n\nclass GroupFormController {\n /* @ngInject */\n constructor($q, EndpointService, GroupService, Notifications, Authentication) {\n this.$q = $q;\n this.EndpointService = EndpointService;\n this.GroupService = GroupService;\n this.Notifications = Notifications;\n this.Authentication = Authentication;\n\n this.associateEndpoint = this.associateEndpoint.bind(this);\n this.dissociateEndpoint = this.dissociateEndpoint.bind(this);\n this.getPaginatedEndpointsByGroup = this.getPaginatedEndpointsByGroup.bind(this);\n }\n\n $onInit() {\n this.state = {\n available: {\n limit: '10',\n filter: '',\n pageNumber: 1,\n totalCount: 0,\n },\n associated: {\n limit: '10',\n filter: '',\n pageNumber: 1,\n totalCount: 0,\n },\n allowCreateTag: this.Authentication.isAdmin(),\n };\n }\n associateEndpoint(endpoint) {\n if (this.pageType === 'create' && !_.includes(this.associatedEndpoints, endpoint)) {\n this.associatedEndpoints.push(endpoint);\n } else if (this.pageType === 'edit') {\n this.GroupService.addEndpoint(this.model.Id, endpoint)\n .then(() => {\n this.Notifications.success('Success', 'Endpoint successfully added to group');\n this.reloadTablesContent();\n })\n .catch((err) => this.Notifications.error('Error', err, 'Unable to add endpoint to group'));\n }\n }\n\n dissociateEndpoint(endpoint) {\n if (this.pageType === 'create') {\n _.remove(this.associatedEndpoints, (item) => item.Id === endpoint.Id);\n } else if (this.pageType === 'edit') {\n this.GroupService.removeEndpoint(this.model.Id, endpoint.Id)\n .then(() => {\n this.Notifications.success('Success', 'Endpoint successfully removed from group');\n this.reloadTablesContent();\n })\n .catch((err) => this.Notifications.error('Error', err, 'Unable to remove endpoint from group'));\n }\n }\n\n reloadTablesContent() {\n this.getPaginatedEndpointsByGroup(this.pageType, 'available');\n this.getPaginatedEndpointsByGroup(this.pageType, 'associated');\n this.GroupService.group(this.model.Id).then((data) => {\n this.model = data;\n });\n }\n\n getPaginatedEndpointsByGroup(pageType, tableType) {\n if (tableType === 'available') {\n const context = this.state.available;\n const start = (context.pageNumber - 1) * context.limit + 1;\n this.EndpointService.endpointsByGroup(start, context.limit, context.filter, 1).then((data) => {\n this.availableEndpoints = data.value;\n this.state.available.totalCount = data.totalCount;\n });\n } else if (tableType === 'associated' && pageType === 'edit') {\n const groupId = this.model.Id ? this.model.Id : 1;\n const context = this.state.associated;\n const start = (context.pageNumber - 1) * context.limit + 1;\n this.EndpointService.endpointsByGroup(start, context.limit, context.filter, groupId).then((data) => {\n this.associatedEndpoints = data.value;\n this.state.associated.totalCount = data.totalCount;\n });\n }\n // ignore (associated + create) group as there is no backend pagination for this table\n }\n}\n\nangular.module('portainer.app').controller('GroupFormController', GroupFormController);\nexport default GroupFormController;\n","class StackRedeployGitFormController {\n /* @ngInject */\n constructor($async, $state, StackService, ModalService, Notifications) {\n this.$async = $async;\n this.$state = $state;\n this.StackService = StackService;\n this.ModalService = ModalService;\n this.Notifications = Notifications;\n\n this.state = {\n inProgress: false,\n };\n\n this.formValues = {\n RefName: '',\n RepositoryAuthentication: false,\n RepositoryUsername: '',\n RepositoryPassword: '',\n };\n\n this.onChange = this.onChange.bind(this);\n this.onChangeRef = this.onChangeRef.bind(this);\n }\n\n onChangeRef(value) {\n this.onChange({ RefName: value });\n }\n\n onChange(values) {\n this.formValues = {\n ...this.formValues,\n ...values,\n };\n }\n\n async submit() {\n return this.$async(async () => {\n try {\n const confirmed = await this.ModalService.confirmAsync({\n title: 'Are you sure?',\n message: 'Any changes to this stack made locally in Portainer will be overridden by the definition in git and may cause a service interruption. Do you wish to continue',\n buttons: {\n confirm: {\n label: 'Update',\n className: 'btn-warning',\n },\n },\n });\n if (!confirmed) {\n return;\n }\n\n this.state.inProgress = true;\n\n await this.StackService.updateGit(this.stack.Id, this.stack.EndpointId, [], false, this.formValues);\n\n await this.$state.reload();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Failed redeploying stack');\n } finally {\n this.state.inProgress = false;\n }\n });\n }\n\n isSubmitButtonDisabled() {\n return this.state.inProgress;\n }\n\n $onInit() {\n this.formValues.RefName = this.model.ReferenceName;\n }\n}\n\nexport default StackRedeployGitFormController;\n","import _ from 'lodash-es';\n\nclass GenericHelper {\n static findDeepAll(obj, target, res = []) {\n if (typeof obj === 'object') {\n _.forEach(obj, (child, key) => {\n if (key === target) res.push(child);\n if (typeof child === 'object') GenericHelper.findDeepAll(child, target, res);\n });\n }\n return res;\n }\n}\n\nexport default GenericHelper;\n","export function RegistryGitlabProject(project) {\n this.Id = project.id;\n this.Description = project.description;\n this.Name = project.name;\n this.Namespace = project.namespace ? project.namespace.name : '';\n this.PathWithNamespace = project.path_with_namespace;\n this.RegistryEnabled = project.container_registry_enabled;\n}\n","export function MotdViewModel(data) {\n this.Title = data.Title;\n this.Message = data.Message;\n this.Hash = data.Hash;\n this.Style = data.Style;\n this.ContentLayout = data.ContentLayout;\n}\n","import _ from 'lodash-es';\n\nexport function RegistryRepositoryViewModel(item) {\n if (item.name && item.tags) {\n this.Name = item.name;\n this.TagsCount = _.without(item.tags, null).length;\n } else {\n this.Name = item;\n this.TagsCount = 0;\n }\n}\n\nexport function RegistryRepositoryGitlabViewModel(data) {\n this.Name = data.path;\n this.TagsCount = data.tags.length;\n}\n","import _ from 'lodash-es';\nimport { PorImageRegistryModel } from 'Docker/models/porImageRegistry';\n\nexport class TemplateViewModel {\n constructor(data, version) {\n switch (version) {\n case '2':\n this.setTemplatesV2(data);\n break;\n default:\n throw new Error('Unsupported template version');\n }\n }\n\n setTemplatesV2(data) {\n this.Id = data.Id;\n this.Title = data.title;\n this.Type = data.type;\n this.Description = data.description;\n this.AdministratorOnly = data.AdministratorOnly;\n this.Name = data.name;\n this.Note = data.note;\n this.Categories = data.categories ? data.categories : [];\n this.Platform = data.platform ? data.platform : '';\n this.Logo = data.logo;\n this.Repository = data.repository;\n this.Hostname = data.hostname;\n this.RegistryModel = new PorImageRegistryModel();\n this.RegistryModel.Image = data.image;\n this.RegistryModel.Registry.URL = data.registry || '';\n this.Command = data.command ? data.command : '';\n this.Network = data.network ? data.network : '';\n this.Privileged = data.privileged ? data.privileged : false;\n this.Interactive = data.interactive ? data.interactive : false;\n this.RestartPolicy = data.restart_policy ? data.restart_policy : 'always';\n this.Labels = data.labels ? data.labels : [];\n this.Hosts = data.hosts ? data.hosts : [];\n this.Env = templateEnv(data);\n this.Volumes = templateVolumes(data);\n this.Ports = templatePorts(data);\n }\n}\n\nfunction templatePorts(data) {\n var ports = [];\n\n if (data.ports) {\n ports = data.ports.map(function (p) {\n var portAndProtocol = _.split(p, '/');\n var hostAndContainerPort = _.split(portAndProtocol[0], ':');\n\n return {\n hostPort: hostAndContainerPort.length > 1 ? hostAndContainerPort[0] : undefined,\n containerPort: hostAndContainerPort.length > 1 ? hostAndContainerPort[1] : hostAndContainerPort[0],\n protocol: portAndProtocol[1],\n };\n });\n }\n\n return ports;\n}\n\nfunction templateVolumes(data) {\n var volumes = [];\n\n if (data.volumes) {\n volumes = data.volumes.map(function (v) {\n return {\n container: v.container,\n readonly: v.readonly || false,\n type: v.bind ? 'bind' : 'auto',\n bind: v.bind ? v.bind : null,\n };\n });\n }\n\n return volumes;\n}\n\nfunction templateEnv(data) {\n var env = [];\n\n if (data.env) {\n env = data.env.map(function (envvar) {\n envvar.type = 2;\n envvar.value = envvar.default ? envvar.default : '';\n\n if (envvar.preset) {\n envvar.type = 1;\n }\n\n if (envvar.select) {\n envvar.type = 3;\n for (var i = 0; i < envvar.select.length; i++) {\n var allowedValue = envvar.select[i];\n if (allowedValue.default) {\n envvar.value = allowedValue.value;\n break;\n }\n }\n }\n return envvar;\n });\n }\n\n return env;\n}\n","export function WebhookViewModel(data) {\n this.Id = data.Id;\n this.Token = data.Token;\n this.ResourceId = data.ResourceID;\n this.EndpointId = data.EndpointID;\n this.WebhookType = data.WebhookType;\n}\n","export default function getEndpointsTotalCount(data, headers) {\n const response = {};\n response.value = angular.fromJson(data);\n response.totalCount = headers('X-Total-Count');\n return response;\n}\n","import _ from 'lodash';\nimport { AccessControlFormData } from 'Portainer/components/accessControlForm/porAccessControlFormModel';\n\nclass CreateCustomTemplateViewController {\n /* @ngInject */\n constructor($async, $state, $window, Authentication, ModalService, CustomTemplateService, FormValidator, Notifications, ResourceControlService, StackService, StateManager) {\n Object.assign(this, {\n $async,\n $state,\n $window,\n Authentication,\n ModalService,\n CustomTemplateService,\n FormValidator,\n Notifications,\n ResourceControlService,\n StackService,\n StateManager,\n });\n\n this.formValues = {\n Title: '',\n FileContent: '',\n File: null,\n RepositoryURL: '',\n RepositoryReferenceName: '',\n RepositoryAuthentication: false,\n RepositoryUsername: '',\n RepositoryPassword: '',\n ComposeFilePathInRepository: 'docker-compose.yml',\n Description: '',\n Note: '',\n Platform: 1,\n Type: 1,\n AccessControlData: new AccessControlFormData(),\n };\n\n this.state = {\n Method: 'editor',\n formValidationError: '',\n actionInProgress: false,\n fromStack: false,\n loading: true,\n isEditorDirty: false,\n };\n this.templates = [];\n\n this.createCustomTemplate = this.createCustomTemplate.bind(this);\n this.createCustomTemplateAsync = this.createCustomTemplateAsync.bind(this);\n this.validateForm = this.validateForm.bind(this);\n this.createCustomTemplateByMethod = this.createCustomTemplateByMethod.bind(this);\n this.createCustomTemplateFromFileContent = this.createCustomTemplateFromFileContent.bind(this);\n this.createCustomTemplateFromFileUpload = this.createCustomTemplateFromFileUpload.bind(this);\n this.createCustomTemplateFromGitRepository = this.createCustomTemplateFromGitRepository.bind(this);\n this.editorUpdate = this.editorUpdate.bind(this);\n this.onChangeMethod = this.onChangeMethod.bind(this);\n this.onChangeFormValues = this.onChangeFormValues.bind(this);\n }\n\n createCustomTemplate() {\n return this.$async(this.createCustomTemplateAsync);\n }\n\n onChangeMethod() {\n this.formValues.FileContent = '';\n this.selectedTemplate = null;\n }\n\n async createCustomTemplateAsync() {\n let method = this.state.Method;\n\n if (method === 'template') {\n method = 'editor';\n }\n\n if (!this.validateForm(method)) {\n return;\n }\n\n this.state.actionInProgress = true;\n try {\n const customTemplate = await this.createCustomTemplateByMethod(method);\n\n const accessControlData = this.formValues.AccessControlData;\n const userDetails = this.Authentication.getUserDetails();\n const userId = userDetails.ID;\n await this.ResourceControlService.applyResourceControl(userId, accessControlData, customTemplate.ResourceControl);\n\n this.Notifications.success('Custom template successfully created');\n this.state.isEditorDirty = false;\n this.$state.go('docker.templates.custom');\n } catch (err) {\n this.Notifications.error('Failure', err, 'A template with the same name already exists');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n validateForm(method) {\n this.state.formValidationError = '';\n\n if (method === 'editor' && this.formValues.FileContent === '') {\n this.state.formValidationError = 'Template file content must not be empty';\n return false;\n }\n\n const title = this.formValues.Title;\n const isNotUnique = _.some(this.templates, (template) => template.Title === title);\n if (isNotUnique) {\n this.state.formValidationError = 'A template with the same name already exists';\n return false;\n }\n\n const isAdmin = this.Authentication.isAdmin();\n const accessControlData = this.formValues.AccessControlData;\n const error = this.FormValidator.validateAccessControl(accessControlData, isAdmin);\n\n if (error) {\n this.state.formValidationError = error;\n return false;\n }\n\n return true;\n }\n\n createCustomTemplateByMethod(method) {\n switch (method) {\n case 'editor':\n return this.createCustomTemplateFromFileContent();\n case 'upload':\n return this.createCustomTemplateFromFileUpload();\n case 'repository':\n return this.createCustomTemplateFromGitRepository();\n }\n }\n\n createCustomTemplateFromFileContent() {\n return this.CustomTemplateService.createCustomTemplateFromFileContent(this.formValues);\n }\n\n createCustomTemplateFromFileUpload() {\n return this.CustomTemplateService.createCustomTemplateFromFileUpload(this.formValues);\n }\n\n createCustomTemplateFromGitRepository() {\n return this.CustomTemplateService.createCustomTemplateFromGitRepository(this.formValues);\n }\n\n editorUpdate(cm) {\n this.formValues.FileContent = cm.getValue();\n this.state.isEditorDirty = true;\n }\n\n onChangeFormValues(newValues) {\n this.formValues = newValues;\n }\n\n async $onInit() {\n const applicationState = this.StateManager.getState();\n\n this.state.endpointMode = applicationState.endpoint.mode;\n let stackType = 0;\n if (this.state.endpointMode.provider === 'DOCKER_STANDALONE') {\n stackType = 2;\n } else if (this.state.endpointMode.provider === 'DOCKER_SWARM_MODE') {\n stackType = 1;\n }\n this.formValues.Type = stackType;\n\n const { fileContent, type } = this.$state.params;\n\n this.formValues.FileContent = fileContent;\n if (type) {\n this.formValues.Type = +type;\n }\n\n try {\n this.templates = await this.CustomTemplateService.customTemplates();\n } catch (err) {\n this.Notifications.error('Failure loading', err, 'Failed loading custom templates');\n }\n\n this.state.loading = false;\n\n this.$window.onbeforeunload = () => {\n if (this.state.Method === 'editor' && this.formValues.FileContent && this.state.isEditorDirty) {\n return '';\n }\n };\n }\n\n async uiCanExit() {\n if (this.state.Method === 'editor' && this.formValues.FileContent && this.state.isEditorDirty) {\n return this.ModalService.confirmWebEditorDiscard();\n }\n }\n}\n\nexport default CreateCustomTemplateViewController;\n","import _ from 'lodash-es';\nimport { AccessControlFormData } from 'Portainer/components/accessControlForm/porAccessControlFormModel';\n\nclass CustomTemplatesViewController {\n /* @ngInject */\n constructor(\n $anchorScroll,\n $async,\n $rootScope,\n $state,\n Authentication,\n CustomTemplateService,\n EndpointProvider,\n FormValidator,\n ModalService,\n NetworkService,\n Notifications,\n ResourceControlService,\n StackService,\n StateManager\n ) {\n this.$anchorScroll = $anchorScroll;\n this.$async = $async;\n this.$rootScope = $rootScope;\n this.$state = $state;\n this.Authentication = Authentication;\n this.CustomTemplateService = CustomTemplateService;\n this.EndpointProvider = EndpointProvider;\n this.FormValidator = FormValidator;\n this.ModalService = ModalService;\n this.NetworkService = NetworkService;\n this.Notifications = Notifications;\n this.ResourceControlService = ResourceControlService;\n this.StateManager = StateManager;\n this.StackService = StackService;\n\n this.DOCKER_STANDALONE = 'DOCKER_STANDALONE';\n this.DOCKER_SWARM_MODE = 'DOCKER_SWARM_MODE';\n\n this.state = {\n selectedTemplate: null,\n showAdvancedOptions: false,\n formValidationError: '',\n actionInProgress: false,\n isEditorVisible: false,\n deployable: false,\n };\n\n this.currentUser = {\n isAdmin: false,\n id: null,\n };\n\n this.formValues = {\n network: '',\n name: '',\n fileContent: '',\n AccessControlData: new AccessControlFormData(),\n };\n\n this.getTemplates = this.getTemplates.bind(this);\n this.getTemplatesAsync = this.getTemplatesAsync.bind(this);\n this.removeTemplates = this.removeTemplates.bind(this);\n this.removeTemplatesAsync = this.removeTemplatesAsync.bind(this);\n this.validateForm = this.validateForm.bind(this);\n this.createStack = this.createStack.bind(this);\n this.createStackAsync = this.createStackAsync.bind(this);\n this.selectTemplate = this.selectTemplate.bind(this);\n this.selectTemplateAsync = this.selectTemplateAsync.bind(this);\n this.unselectTemplate = this.unselectTemplate.bind(this);\n this.unselectTemplateAsync = this.unselectTemplateAsync.bind(this);\n this.getNetworks = this.getNetworks.bind(this);\n this.getNetworksAsync = this.getNetworksAsync.bind(this);\n this.confirmDelete = this.confirmDelete.bind(this);\n this.confirmDeleteAsync = this.confirmDeleteAsync.bind(this);\n this.editorUpdate = this.editorUpdate.bind(this);\n this.isEditAllowed = this.isEditAllowed.bind(this);\n }\n\n isEditAllowed(template) {\n return this.currentUser.isAdmin || this.currentUser.id === template.CreatedByUserId;\n }\n\n getTemplates(endpointMode) {\n return this.$async(this.getTemplatesAsync, endpointMode);\n }\n async getTemplatesAsync({ provider, role }) {\n try {\n let stackType = 2;\n if (provider === 'DOCKER_SWARM_MODE' && role === 'MANAGER') {\n stackType = 1;\n }\n this.templates = await this.CustomTemplateService.customTemplates(stackType);\n } catch (err) {\n this.Notifications.error('Failed loading templates', err, 'Unable to load custom templates');\n }\n }\n\n removeTemplates(templates) {\n return this.$async(this.removeTemplatesAsync, templates);\n }\n async removeTemplatesAsync(templates) {\n for (let template of templates) {\n try {\n await this.CustomTemplateService.remove(template.id);\n this.Notifications.success('Removed template successfully');\n _.remove(this.templates, template);\n } catch (err) {\n this.Notifications.error('Failed removing template', err, 'Unable to remove custom template');\n }\n }\n }\n\n validateForm(accessControlData, isAdmin) {\n this.state.formValidationError = '';\n const error = this.FormValidator.validateAccessControl(accessControlData, isAdmin);\n\n if (error) {\n this.state.formValidationError = error;\n return false;\n }\n return true;\n }\n\n createStack() {\n return this.$async(this.createStackAsync);\n }\n async createStackAsync() {\n const userId = this.currentUser.id;\n const accessControlData = this.formValues.AccessControlData;\n\n if (!this.validateForm(accessControlData, this.currentUser.isAdmin)) {\n return;\n }\n const stackName = this.formValues.name;\n\n const endpointId = this.EndpointProvider.endpointID();\n\n this.state.actionInProgress = true;\n\n try {\n const file = this.formValues.fileContent;\n const createAction = this.state.selectedTemplate.Type === 1 ? this.StackService.createSwarmStackFromFileContent : this.StackService.createComposeStackFromFileContent;\n const { ResourceControl: resourceControl } = await createAction(stackName, file, [], endpointId);\n await this.ResourceControlService.applyResourceControl(userId, accessControlData, resourceControl);\n this.Notifications.success('Stack successfully deployed');\n this.$state.go('docker.stacks');\n } catch (err) {\n this.Notifications.error('Deployment error', err, 'Failed to deploy stack');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n unselectTemplate(template) {\n // wrapping unselect with async to make a digest cycle run between unselect to select\n return this.$async(this.unselectTemplateAsync, template);\n }\n async unselectTemplateAsync(template) {\n template.Selected = false;\n this.state.selectedTemplate = null;\n\n this.formValues = {\n network: '',\n name: '',\n fileContent: '',\n AccessControlData: new AccessControlFormData(),\n };\n }\n\n selectTemplate(template) {\n return this.$async(this.selectTemplateAsync, template);\n }\n async selectTemplateAsync(template) {\n if (this.state.selectedTemplate) {\n await this.unselectTemplate(this.state.selectedTemplate);\n }\n\n template.Selected = true;\n\n this.formValues.network = _.find(this.availableNetworks, function (o) {\n return o.Name === 'bridge';\n });\n\n this.formValues.name = template.Title ? template.Title : '';\n this.state.selectedTemplate = template;\n this.$anchorScroll('view-top');\n const applicationState = this.StateManager.getState();\n this.state.deployable = this.isDeployable(applicationState.endpoint, template.Type);\n const file = await this.CustomTemplateService.customTemplateFile(template.Id);\n this.formValues.fileContent = file;\n }\n\n getNetworks(provider, apiVersion) {\n return this.$async(this.getNetworksAsync, provider, apiVersion);\n }\n async getNetworksAsync(provider, apiVersion) {\n try {\n const networks = await this.NetworkService.networks(\n provider === 'DOCKER_STANDALONE' || provider === 'DOCKER_SWARM_MODE',\n false,\n provider === 'DOCKER_SWARM_MODE' && apiVersion >= 1.25\n );\n this.availableNetworks = networks;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Failed to load networks.');\n }\n }\n\n confirmDelete(templateId) {\n return this.$async(this.confirmDeleteAsync, templateId);\n }\n async confirmDeleteAsync(templateId) {\n const confirmed = await this.ModalService.confirmDeletionAsync('Are you sure that you want to delete this template?');\n if (!confirmed) {\n return;\n }\n\n try {\n await this.CustomTemplateService.remove(templateId);\n _.remove(this.templates, { Id: templateId });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Failed to delete template');\n }\n }\n\n editorUpdate(cm) {\n this.formValues.fileContent = cm.getValue();\n }\n\n isDeployable(endpoint, templateType) {\n let deployable = false;\n switch (templateType) {\n case 1:\n deployable = endpoint.mode.provider === this.DOCKER_SWARM_MODE;\n break;\n case 2:\n deployable = endpoint.mode.provider === this.DOCKER_STANDALONE;\n break;\n\n }\n\n return deployable;\n }\n\n $onInit() {\n const applicationState = this.StateManager.getState();\n\n const {\n endpoint: { mode: endpointMode },\n apiVersion,\n } = applicationState;\n\n this.getTemplates(endpointMode);\n this.getNetworks(endpointMode.provider, apiVersion);\n\n this.currentUser.isAdmin = this.Authentication.isAdmin();\n const user = this.Authentication.getUserDetails();\n this.currentUser.id = user.ID;\n }\n}\n\nexport default CustomTemplatesViewController;\n","import _ from 'lodash';\n\nimport { AccessControlFormData } from 'Portainer/components/accessControlForm/porAccessControlFormModel';\nimport { ResourceControlViewModel } from 'Portainer/models/resourceControl/resourceControl';\n\nclass EditCustomTemplateViewController {\n /* @ngInject */\n constructor($async, $state, $window, ModalService, Authentication, CustomTemplateService, FormValidator, Notifications, ResourceControlService) {\n Object.assign(this, { $async, $state, $window, ModalService, Authentication, CustomTemplateService, FormValidator, Notifications, ResourceControlService });\n\n this.formValues = null;\n this.state = {\n formValidationError: '',\n isEditorDirty: false,\n };\n this.templates = [];\n\n this.getTemplate = this.getTemplate.bind(this);\n this.getTemplateAsync = this.getTemplateAsync.bind(this);\n this.submitAction = this.submitAction.bind(this);\n this.submitActionAsync = this.submitActionAsync.bind(this);\n this.editorUpdate = this.editorUpdate.bind(this);\n }\n\n getTemplate() {\n return this.$async(this.getTemplateAsync);\n }\n async getTemplateAsync() {\n try {\n const [template, file] = await Promise.all([\n this.CustomTemplateService.customTemplate(this.$state.params.id),\n this.CustomTemplateService.customTemplateFile(this.$state.params.id),\n ]);\n template.FileContent = file;\n this.formValues = template;\n this.oldFileContent = this.formValues.FileContent;\n this.formValues.ResourceControl = new ResourceControlViewModel(template.ResourceControl);\n this.formValues.AccessControlData = new AccessControlFormData();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve custom template data');\n }\n }\n\n validateForm() {\n this.state.formValidationError = '';\n\n if (!this.formValues.FileContent) {\n this.state.formValidationError = 'Template file content must not be empty';\n return false;\n }\n\n const title = this.formValues.Title;\n const id = this.$state.params.id;\n const isNotUnique = _.some(this.templates, (template) => template.Title === title && template.Id != id);\n if (isNotUnique) {\n this.state.formValidationError = `A template with the name ${title} already exists`;\n return false;\n }\n\n const isAdmin = this.Authentication.isAdmin();\n const accessControlData = this.formValues.AccessControlData;\n const error = this.FormValidator.validateAccessControl(accessControlData, isAdmin);\n\n if (error) {\n this.state.formValidationError = error;\n return false;\n }\n\n return true;\n }\n\n submitAction() {\n return this.$async(this.submitActionAsync);\n }\n async submitActionAsync() {\n if (!this.validateForm()) {\n return;\n }\n\n this.actionInProgress = true;\n try {\n await this.CustomTemplateService.updateCustomTemplate(this.formValues.Id, this.formValues);\n\n const userDetails = this.Authentication.getUserDetails();\n const userId = userDetails.ID;\n await this.ResourceControlService.applyResourceControl(userId, this.formValues.AccessControlData, this.formValues.ResourceControl);\n\n this.Notifications.success('Custom template successfully updated');\n this.state.isEditorDirty = false;\n this.$state.go('docker.templates.custom');\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to update custom template');\n } finally {\n this.actionInProgress = false;\n }\n }\n\n editorUpdate(cm) {\n if (this.formValues.FileContent.replace(/(\\r\\n|\\n|\\r)/gm, '') !== cm.getValue().replace(/(\\r\\n|\\n|\\r)/gm, '')) {\n this.formValues.FileContent = cm.getValue();\n this.state.isEditorDirty = true;\n }\n }\n\n async uiCanExit() {\n if (this.formValues.FileContent !== this.oldFileContent && this.state.isEditorDirty) {\n return this.ModalService.confirmWebEditorDiscard();\n }\n }\n\n async $onInit() {\n this.getTemplate();\n\n try {\n this.templates = await this.CustomTemplateService.customTemplates();\n } catch (err) {\n this.Notifications.error('Failure loading', err, 'Failed loading custom templates');\n }\n\n this.$window.onbeforeunload = () => {\n if (this.formValues.FileContent !== this.oldFileContent && this.state.isEditorDirty) {\n return '';\n }\n };\n }\n}\n\nexport default EditCustomTemplateViewController;\n","import './assets/css';\nimport '@babel/polyfill';\n\nimport angular from 'angular';\n\nimport './matomo-setup';\nimport './assets/js/angulartics-matomo';\n\nimport './agent';\nimport './azure/_module';\nimport './docker/__module';\nimport './edge/__module';\nimport './portainer/__module';\n\nangular.module('portainer', [\n 'ui.bootstrap',\n 'ui.router',\n 'ui.select',\n 'isteven-multi-select',\n 'ngSanitize',\n 'ngFileUpload',\n 'ngMessages',\n 'ngResource',\n 'angularUtils.directives.dirPagination',\n 'LocalStorageModule',\n 'angular-jwt',\n 'angular-json-tree',\n 'angular-loading-bar',\n 'angular-clipboard',\n 'ngFileSaver',\n 'luegg.directives',\n 'portainer.app',\n 'portainer.agent',\n 'portainer.azure',\n 'portainer.docker',\n 'portainer.kubernetes',\n 'portainer.edge',\n 'portainer.integrations',\n 'rzModule',\n 'moment-picker',\n 'angulartics',\n 'angulartics.matomo',\n]);\n\nif (require) {\n var req = require.context('./', true, /^(.*\\.(js$))[^.]*$/im);\n req.keys().forEach(function (key) {\n req(key);\n });\n}\n","import './rdash.css';\nimport './app.css';\n","const _paq = (window._paq = window._paq || []);\n/* tracker methods like \"setCustomDimension\" should be called before \"trackPageView\" */\n_paq.push(['enableLinkTracking']);\n\nvar u = 'https://portainer-ce.matomo.cloud/';\n_paq.push(['setTrackerUrl', u + 'matomo.php']);\n_paq.push(['setSiteId', '1']);\nvar d = document,\n g = d.createElement('script'),\n s = d.getElementsByTagName('script')[0];\ng.type = 'text/javascript';\ng.async = true;\ng.src = '//cdn.matomo.cloud/portainer-ce.matomo.cloud/matomo.js';\ns.parentNode.insertBefore(g, s);\n","import angular from 'angular';\n\n// forked from https://github.com/angulartics/angulartics-piwik/blob/master/src/angulartics-piwik.js\n\n/* global _paq */\n/**\n * @ngdoc overview\n * @name angulartics.piwik\n * Enables analytics support for Piwik/Matomo (http://piwik.org/docs/tracking-api/)\n */\nangular.module('angulartics.matomo', ['angulartics']).config([\n '$analyticsProvider',\n '$windowProvider',\n function ($analyticsProvider, $windowProvider) {\n var $window = $windowProvider.$get();\n\n $analyticsProvider.settings.pageTracking.trackRelativePath = true;\n\n // Add piwik specific trackers to angulartics API\n\n // Requires the CustomDimensions plugin for Piwik.\n $analyticsProvider.api.setCustomDimension = function (dimensionId, value) {\n if ($window._paq) {\n $window._paq.push(['setCustomDimension', dimensionId, value]);\n }\n };\n\n // Requires the CustomDimensions plugin for Piwik.\n $analyticsProvider.api.deleteCustomDimension = function (dimensionId) {\n if ($window._paq) {\n $window._paq.push(['deleteCustomDimension', dimensionId]);\n }\n };\n\n // scope: visit or page. Defaults to 'page'\n $analyticsProvider.api.setCustomVariable = function (varIndex, varName, value, scope) {\n if ($window._paq) {\n scope = scope || 'page';\n $window._paq.push(['setCustomVariable', varIndex, varName, value, scope]);\n }\n };\n\n // scope: visit or page. Defaults to 'page'\n $analyticsProvider.api.deleteCustomVariable = function (varIndex, scope) {\n if ($window._paq) {\n scope = scope || 'page';\n $window._paq.push(['deleteCustomVariable', varIndex, scope]);\n }\n };\n\n // trackSiteSearch(keyword, category, [searchCount])\n $analyticsProvider.api.trackSiteSearch = function (keyword, category, searchCount) {\n // keyword is required\n if ($window._paq && keyword) {\n var params = ['trackSiteSearch', keyword, category || false];\n\n // searchCount is optional\n if (angular.isDefined(searchCount)) {\n params.push(searchCount);\n }\n\n $window._paq.push(params);\n }\n };\n\n // logs a conversion for goal 1. revenue is optional\n // trackGoal(goalID, [revenue]);\n $analyticsProvider.api.trackGoal = function (goalID, revenue) {\n if ($window._paq) {\n _paq.push(['trackGoal', goalID, revenue || 0]);\n }\n };\n\n // track outlink or download\n // linkType is 'link' or 'download', 'link' by default\n // trackLink(url, [linkType]);\n $analyticsProvider.api.trackLink = function (url, linkType) {\n var type = linkType || 'link';\n if ($window._paq) {\n $window._paq.push(['trackLink', url, type]);\n }\n };\n\n // Set default angulartics page and event tracking\n\n $analyticsProvider.registerSetUsername(function (username) {\n if ($window._paq) {\n $window._paq.push(['setUserId', username]);\n }\n });\n\n // locationObj is the angular $location object\n $analyticsProvider.registerPageTrack(function (path) {\n if ($window._paq) {\n $window._paq.push(['setDocumentTitle', $window.document.title]);\n $window._paq.push(['setReferrerUrl', '']);\n $window._paq.push(['setCustomUrl', 'http://portainer-ce.app' + path]);\n $window._paq.push(['trackPageView']);\n }\n });\n\n /**\n * @name eventTrack\n * Track a basic event in Piwik, or send an ecommerce event.\n *\n * @param {string} action A string corresponding to the type of event that needs to be tracked.\n * @param {object} properties The properties that need to be logged with the event.\n */\n $analyticsProvider.registerEventTrack(function (action, properties) {\n if ($window._paq) {\n properties = properties || {};\n\n switch (action) {\n /**\n * @description Sets the current page view as a product or category page view. When you call\n * setEcommerceView it must be followed by a call to trackPageView to record the product or\n * category page view.\n *\n * @link https://piwik.org/docs/ecommerce-analytics/#tracking-product-page-views-category-page-views-optional\n * @link https://developer.piwik.org/api-reference/tracking-javascript#ecommerce\n *\n * @property productSKU (required) SKU: Product unique identifier\n * @property productName (optional) Product name\n * @property categoryName (optional) Product category, or array of up to 5 categories\n * @property price (optional) Product Price as displayed on the page\n */\n case 'setEcommerceView':\n $window._paq.push(['setEcommerceView', properties.productSKU, properties.productName, properties.categoryName, properties.price]);\n break;\n\n /**\n * @description Adds a product into the ecommerce order. Must be called for each product in\n * the order.\n *\n * @link https://piwik.org/docs/ecommerce-analytics/#tracking-ecommerce-orders-items-purchased-required\n * @link https://developer.piwik.org/api-reference/tracking-javascript#ecommerce\n *\n * @property productSKU (required) SKU: Product unique identifier\n * @property productName (optional) Product name\n * @property categoryName (optional) Product category, or array of up to 5 categories\n * @property price (recommended) Product price\n * @property quantity (optional, default to 1) Product quantity\n */\n case 'addEcommerceItem':\n $window._paq.push(['addEcommerceItem', properties.productSKU, properties.productName, properties.productCategory, properties.price, properties.quantity]);\n break;\n\n /**\n * @description Tracks a shopping cart. Call this javascript function every time a user is\n * adding, updating or deleting a product from the cart.\n *\n * @link https://piwik.org/docs/ecommerce-analytics/#tracking-add-to-cart-items-added-to-the-cart-optional\n * @link https://developer.piwik.org/api-reference/tracking-javascript#ecommerce\n *\n * @property grandTotal (required) Cart amount\n */\n case 'trackEcommerceCartUpdate':\n $window._paq.push(['trackEcommerceCartUpdate', properties.grandTotal]);\n break;\n\n /**\n * @description Tracks an Ecommerce order, including any ecommerce item previously added to\n * the order. orderId and grandTotal (ie. revenue) are required parameters.\n *\n * @link https://piwik.org/docs/ecommerce-analytics/#tracking-ecommerce-orders-items-purchased-required\n * @link https://developer.piwik.org/api-reference/tracking-javascript#ecommerce\n *\n * @property orderId (required) Unique Order ID\n * @property grandTotal (required) Order Revenue grand total (includes tax, shipping, and subtracted discount)\n * @property subTotal (optional) Order sub total (excludes shipping)\n * @property tax (optional) Tax amount\n * @property shipping (optional) Shipping amount\n * @property discount (optional) Discount offered (set to false for unspecified parameter)\n */\n case 'trackEcommerceOrder':\n $window._paq.push(['trackEcommerceOrder', properties.orderId, properties.grandTotal, properties.subTotal, properties.tax, properties.shipping, properties.discount]);\n break;\n\n /**\n * @description Logs an event with an event category (Videos, Music, Games...), an event\n * action (Play, Pause, Duration, Add Playlist, Downloaded, Clicked...), and an optional\n * event name and optional numeric value.\n *\n * @link https://piwik.org/docs/event-tracking/\n * @link https://developer.piwik.org/api-reference/tracking-javascript#using-the-tracker-object\n *\n * @property category\n * @property action\n * @property name (optional, recommended)\n * @property value (optional)\n */\n default:\n // PAQ requires that eventValue be an integer, see: http://piwik.org/docs/event-tracking\n if (properties.value) {\n var parsed = parseInt(properties.value, 10);\n properties.value = isNaN(parsed) ? 0 : parsed;\n }\n\n $window._paq.push([\n 'trackEvent',\n properties.category,\n action,\n properties.name || properties.label, // Changed in favour of Piwik documentation. Added fallback so it's backwards compatible.\n properties.value,\n ]);\n }\n }\n });\n\n /**\n * @name exceptionTrack\n * Sugar on top of the eventTrack method for easily handling errors\n *\n * @param {object} error An Error object to track: error.toString() used for event 'action', error.stack used for event 'label'.\n * @param {object} cause The cause of the error given from $exceptionHandler, not used.\n */\n $analyticsProvider.registerExceptionTrack(function (error) {\n if ($window._paq) {\n $window._paq.push(['trackEvent', 'Exceptions', error.toString(), error.stack, 0]);\n }\n });\n },\n]);\n","import angular from 'angular';\n\nangular.module('portainer.agent', []);\n","const autoNgTemplateLoaderTemplate1 = require('./views/containerinstances/containerinstances.html');\nconst autoNgTemplateLoaderTemplate2 = require('./views/containerinstances/create/createcontainerinstance.html');\nconst autoNgTemplateLoaderTemplate3 = require('./views/dashboard/dashboard.html');\n\nangular.module('portainer.azure', ['portainer.app']).config([\n '$stateRegistryProvider',\n function ($stateRegistryProvider) {\n 'use strict';\n\n var azure = {\n name: 'azure',\n url: '/azure',\n parent: 'endpoint',\n abstract: true,\n onEnter: /* @ngInject */ function onEnter($async, $state, endpoint, EndpointProvider, Notifications, StateManager) {\n return $async(async () => {\n if (endpoint.Type !== 3) {\n $state.go('portainer.home');\n return;\n }\n try {\n EndpointProvider.setEndpointID(endpoint.Id);\n EndpointProvider.setEndpointPublicURL(endpoint.PublicURL);\n EndpointProvider.setOfflineModeFromStatus(endpoint.Status);\n await StateManager.updateEndpointState(endpoint, []);\n } catch (e) {\n Notifications.error('Failed loading endpoint', e);\n $state.go('portainer.home', {}, { reload: true });\n }\n });\n },\n };\n\n var containerInstances = {\n name: 'azure.containerinstances',\n url: '/containerinstances',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'AzureContainerInstancesController',\n },\n },\n };\n\n var containerInstance = {\n name: 'azure.containerinstances.container',\n url: '/:id',\n views: {\n 'content@': {\n component: 'containerInstanceDetails',\n },\n },\n };\n\n var containerInstanceCreation = {\n name: 'azure.containerinstances.new',\n url: '/new/',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate2,\n controller: 'AzureCreateContainerInstanceController',\n },\n },\n };\n\n var dashboard = {\n name: 'azure.dashboard',\n url: '/dashboard',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate3,\n controller: 'AzureDashboardController',\n },\n },\n };\n\n $stateRegistryProvider.register(azure);\n $stateRegistryProvider.register(containerInstances);\n $stateRegistryProvider.register(containerInstance);\n $stateRegistryProvider.register(containerInstanceCreation);\n $stateRegistryProvider.register(dashboard);\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./views/configs/configs.html');\nconst autoNgTemplateLoaderTemplate2 = require('./views/configs/edit/config.html');\nconst autoNgTemplateLoaderTemplate3 = require('./views/configs/create/createconfig.html');\nconst autoNgTemplateLoaderTemplate4 = require('./views/containers/containers.html');\nconst autoNgTemplateLoaderTemplate5 = require('./views/containers/edit/container.html');\nconst autoNgTemplateLoaderTemplate6 = require('./views/containers/console/attach.html');\nconst autoNgTemplateLoaderTemplate7 = require('./views/containers/console/exec.html');\nconst autoNgTemplateLoaderTemplate8 = require('./views/containers/create/createcontainer.html');\nconst autoNgTemplateLoaderTemplate9 = require('./views/containers/inspect/containerinspect.html');\nconst autoNgTemplateLoaderTemplate10 = require('./views/containers/logs/containerlogs.html');\nconst autoNgTemplateLoaderTemplate11 = require('./views/containers/stats/containerstats.html');\nconst autoNgTemplateLoaderTemplate12 = require('./views/dashboard/dashboard.html');\nconst autoNgTemplateLoaderTemplate13 = require('./views/events/events.html');\nconst autoNgTemplateLoaderTemplate14 = require('./views/images/images.html');\nconst autoNgTemplateLoaderTemplate15 = require('./views/images/edit/image.html');\nconst autoNgTemplateLoaderTemplate16 = require('./views/images/build/buildimage.html');\nconst autoNgTemplateLoaderTemplate17 = require('./views/images/import/importimage.html');\nconst autoNgTemplateLoaderTemplate18 = require('./views/networks/networks.html');\nconst autoNgTemplateLoaderTemplate19 = require('./views/networks/edit/network.html');\nconst autoNgTemplateLoaderTemplate20 = require('./views/networks/create/createnetwork.html');\nconst autoNgTemplateLoaderTemplate21 = require('./views/secrets/secrets.html');\nconst autoNgTemplateLoaderTemplate22 = require('./views/secrets/edit/secret.html');\nconst autoNgTemplateLoaderTemplate23 = require('./views/secrets/create/createsecret.html');\nconst autoNgTemplateLoaderTemplate24 = require('./views/services/services.html');\nconst autoNgTemplateLoaderTemplate25 = require('./views/services/edit/service.html');\nconst autoNgTemplateLoaderTemplate26 = require('./views/services/create/createservice.html');\nconst autoNgTemplateLoaderTemplate27 = require('./views/services/logs/servicelogs.html');\nconst autoNgTemplateLoaderTemplate28 = require('Portainer/views/stacks/stacks.html');\nconst autoNgTemplateLoaderTemplate29 = require('Portainer/views/stacks/edit/stack.html');\nconst autoNgTemplateLoaderTemplate30 = require('Portainer/views/stacks/create/createstack.html');\nconst autoNgTemplateLoaderTemplate31 = require('./views/swarm/swarm.html');\nconst autoNgTemplateLoaderTemplate32 = require('./views/swarm/visualizer/swarmvisualizer.html');\nconst autoNgTemplateLoaderTemplate33 = require('./views/tasks/edit/task.html');\nconst autoNgTemplateLoaderTemplate34 = require('./views/tasks/logs/tasklogs.html');\nconst autoNgTemplateLoaderTemplate35 = require('Portainer/views/templates/templates.html');\nconst autoNgTemplateLoaderTemplate36 = require('./views/volumes/volumes.html');\nconst autoNgTemplateLoaderTemplate37 = require('./views/volumes/edit/volume.html');\nconst autoNgTemplateLoaderTemplate38 = require('./views/volumes/browse/browsevolume.html');\nconst autoNgTemplateLoaderTemplate39 = require('./views/volumes/create/createvolume.html');\n\nangular.module('portainer.docker', ['portainer.app']).config([\n '$stateRegistryProvider',\n function ($stateRegistryProvider) {\n 'use strict';\n\n var docker = {\n name: 'docker',\n parent: 'endpoint',\n url: '/docker',\n abstract: true,\n onEnter: /* @ngInject */ function onEnter(endpoint, $async, $state, EndpointService, EndpointProvider, LegacyExtensionManager, Notifications, StateManager, SystemService) {\n return $async(async () => {\n if (![1, 2, 4].includes(endpoint.Type)) {\n $state.go('portainer.home');\n return;\n }\n try {\n const status = await checkEndpointStatus(endpoint);\n\n if (endpoint.Type !== 4) {\n await updateEndpointStatus(endpoint, status);\n }\n endpoint.Status = status;\n\n if (status === 2) {\n if (!endpoint.Snapshots[0]) {\n throw new Error('Endpoint is unreachable and there is no snapshot available for offline browsing.');\n }\n if (endpoint.Snapshots[0].Swarm) {\n throw new Error('Endpoint is unreachable. Connect to another swarm manager.');\n }\n }\n\n EndpointProvider.setEndpointID(endpoint.Id);\n EndpointProvider.setEndpointPublicURL(endpoint.PublicURL);\n EndpointProvider.setOfflineModeFromStatus(endpoint.Status);\n\n const extensions = await LegacyExtensionManager.initEndpointExtensions(endpoint);\n await StateManager.updateEndpointState(endpoint, extensions);\n } catch (e) {\n Notifications.error('Failed loading endpoint', e);\n $state.go('portainer.home', {}, { reload: true });\n }\n\n async function checkEndpointStatus(endpoint) {\n try {\n await SystemService.ping(endpoint.Id);\n return 1;\n } catch (e) {\n return 2;\n }\n }\n\n async function updateEndpointStatus(endpoint, status) {\n if (endpoint.Status === status) {\n return;\n }\n await EndpointService.updateEndpoint(endpoint.Id, { Status: status });\n }\n });\n },\n };\n\n var configs = {\n name: 'docker.configs',\n url: '/configs',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'ConfigsController',\n controllerAs: 'ctrl',\n },\n },\n };\n\n var config = {\n name: 'docker.configs.config',\n url: '/:id',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate2,\n controller: 'ConfigController',\n },\n },\n };\n\n var configCreation = {\n name: 'docker.configs.new',\n url: '/new?id',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate3,\n controller: 'CreateConfigController',\n controllerAs: 'ctrl',\n },\n },\n };\n\n var containers = {\n name: 'docker.containers',\n url: '/containers',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate4,\n controller: 'ContainersController',\n },\n },\n };\n\n var container = {\n name: 'docker.containers.container',\n url: '/:id?nodeName',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate5,\n controller: 'ContainerController',\n },\n },\n };\n\n var containerAttachConsole = {\n name: 'docker.containers.container.attach',\n url: '/attach',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate6,\n controller: 'ContainerConsoleController',\n },\n },\n };\n\n var containerExecConsole = {\n name: 'docker.containers.container.exec',\n url: '/exec',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate7,\n controller: 'ContainerConsoleController',\n },\n },\n };\n\n var containerCreation = {\n name: 'docker.containers.new',\n url: '/new?nodeName&from',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate8,\n controller: 'CreateContainerController',\n },\n },\n };\n\n var containerInspect = {\n name: 'docker.containers.container.inspect',\n url: '/inspect',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate9,\n controller: 'ContainerInspectController',\n },\n },\n };\n\n var containerLogs = {\n name: 'docker.containers.container.logs',\n url: '/logs',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate10,\n controller: 'ContainerLogsController',\n },\n },\n };\n\n var containerStats = {\n name: 'docker.containers.container.stats',\n url: '/stats',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate11,\n controller: 'ContainerStatsController',\n },\n },\n };\n\n const customTemplates = {\n name: 'docker.templates.custom',\n url: '/custom',\n\n views: {\n 'content@': {\n component: 'customTemplatesView',\n },\n },\n };\n\n const customTemplatesNew = {\n name: 'docker.templates.custom.new',\n url: '/new?fileContent&type',\n\n views: {\n 'content@': {\n component: 'createCustomTemplateView',\n },\n },\n params: {\n fileContent: '',\n type: '',\n },\n };\n\n const customTemplatesEdit = {\n name: 'docker.templates.custom.edit',\n url: '/:id',\n\n views: {\n 'content@': {\n component: 'editCustomTemplateView',\n },\n },\n };\n\n var dashboard = {\n name: 'docker.dashboard',\n url: '/dashboard',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate12,\n controller: 'DashboardController',\n },\n },\n };\n\n var host = {\n name: 'docker.host',\n url: '/host',\n views: {\n 'content@': {\n component: 'hostView',\n },\n },\n };\n\n var hostBrowser = {\n name: 'docker.host.browser',\n url: '/browser',\n views: {\n 'content@': {\n component: 'hostBrowserView',\n },\n },\n };\n\n var events = {\n name: 'docker.events',\n url: '/events',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate13,\n controller: 'EventsController',\n },\n },\n };\n\n var images = {\n name: 'docker.images',\n url: '/images',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate14,\n controller: 'ImagesController',\n },\n },\n };\n\n var image = {\n name: 'docker.images.image',\n url: '/:id?nodeName',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate15,\n controller: 'ImageController',\n },\n },\n };\n\n var imageBuild = {\n name: 'docker.images.build',\n url: '/build',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate16,\n controller: 'BuildImageController',\n },\n },\n };\n\n var imageImport = {\n name: 'docker.images.import',\n url: '/import',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate17,\n controller: 'ImportImageController',\n },\n },\n };\n\n var networks = {\n name: 'docker.networks',\n url: '/networks',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate18,\n controller: 'NetworksController',\n },\n },\n };\n\n var network = {\n name: 'docker.networks.network',\n url: '/:id?nodeName',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate19,\n controller: 'NetworkController',\n },\n },\n };\n\n var networkCreation = {\n name: 'docker.networks.new',\n url: '/new',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate20,\n controller: 'CreateNetworkController',\n },\n },\n };\n\n var nodes = {\n name: 'docker.nodes',\n url: '/nodes',\n abstract: true,\n };\n\n var node = {\n name: 'docker.nodes.node',\n url: '/:id',\n views: {\n 'content@': {\n component: 'nodeDetailsView',\n },\n },\n };\n\n var nodeBrowser = {\n name: 'docker.nodes.node.browse',\n url: '/browse',\n views: {\n 'content@': {\n component: 'nodeBrowserView',\n },\n },\n };\n\n var secrets = {\n name: 'docker.secrets',\n url: '/secrets',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate21,\n controller: 'SecretsController',\n },\n },\n };\n\n var secret = {\n name: 'docker.secrets.secret',\n url: '/:id',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate22,\n controller: 'SecretController',\n },\n },\n };\n\n var secretCreation = {\n name: 'docker.secrets.new',\n url: '/new',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate23,\n controller: 'CreateSecretController',\n },\n },\n };\n\n var services = {\n name: 'docker.services',\n url: '/services',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate24,\n controller: 'ServicesController',\n },\n },\n };\n\n var service = {\n name: 'docker.services.service',\n url: '/:id',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate25,\n controller: 'ServiceController',\n },\n },\n };\n\n var serviceCreation = {\n name: 'docker.services.new',\n url: '/new',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate26,\n controller: 'CreateServiceController',\n },\n },\n };\n\n var serviceLogs = {\n name: 'docker.services.service.logs',\n url: '/logs',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate27,\n controller: 'ServiceLogsController',\n },\n },\n };\n\n var stacks = {\n name: 'docker.stacks',\n url: '/stacks',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate28,\n controller: 'StacksController',\n },\n },\n };\n\n var stack = {\n name: 'docker.stacks.stack',\n url: '/:name?id&type®ular&external&orphaned&orphanedRunning',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate29,\n controller: 'StackController',\n },\n },\n };\n\n var stackCreation = {\n name: 'docker.stacks.newstack',\n url: '/newstack',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate30,\n controller: 'CreateStackController',\n },\n },\n };\n\n var swarm = {\n name: 'docker.swarm',\n url: '/swarm',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate31,\n controller: 'SwarmController',\n },\n },\n };\n\n var swarmVisualizer = {\n name: 'docker.swarm.visualizer',\n url: '/visualizer',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate32,\n controller: 'SwarmVisualizerController',\n },\n },\n };\n\n var tasks = {\n name: 'docker.tasks',\n url: '/tasks',\n abstract: true,\n };\n\n var task = {\n name: 'docker.tasks.task',\n url: '/:id',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate33,\n controller: 'TaskController',\n },\n },\n };\n\n var taskLogs = {\n name: 'docker.tasks.task.logs',\n url: '/logs',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate34,\n controller: 'TaskLogsController',\n },\n },\n };\n\n var templates = {\n name: 'docker.templates',\n url: '/templates',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate35,\n controller: 'TemplatesController',\n },\n },\n };\n\n var volumes = {\n name: 'docker.volumes',\n url: '/volumes',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate36,\n controller: 'VolumesController',\n },\n },\n };\n\n var volume = {\n name: 'docker.volumes.volume',\n url: '/:id?nodeName',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate37,\n controller: 'VolumeController',\n },\n },\n };\n\n var volumeBrowse = {\n name: 'docker.volumes.volume.browse',\n url: '/browse',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate38,\n controller: 'BrowseVolumeController',\n },\n },\n };\n\n var volumeCreation = {\n name: 'docker.volumes.new',\n url: '/new',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate39,\n controller: 'CreateVolumeController',\n },\n },\n };\n\n const dockerFeaturesConfiguration = {\n name: 'docker.featuresConfiguration',\n url: '/feat-config',\n views: {\n 'content@': {\n component: 'dockerFeaturesConfigurationView',\n },\n },\n };\n\n $stateRegistryProvider.register(configs);\n $stateRegistryProvider.register(config);\n $stateRegistryProvider.register(configCreation);\n $stateRegistryProvider.register(containers);\n $stateRegistryProvider.register(container);\n $stateRegistryProvider.register(containerExecConsole);\n $stateRegistryProvider.register(containerAttachConsole);\n $stateRegistryProvider.register(containerCreation);\n $stateRegistryProvider.register(containerInspect);\n $stateRegistryProvider.register(containerLogs);\n $stateRegistryProvider.register(containerStats);\n $stateRegistryProvider.register(customTemplates);\n $stateRegistryProvider.register(customTemplatesNew);\n $stateRegistryProvider.register(customTemplatesEdit);\n $stateRegistryProvider.register(docker);\n $stateRegistryProvider.register(dashboard);\n $stateRegistryProvider.register(host);\n $stateRegistryProvider.register(hostBrowser);\n $stateRegistryProvider.register(events);\n $stateRegistryProvider.register(images);\n $stateRegistryProvider.register(image);\n $stateRegistryProvider.register(imageBuild);\n $stateRegistryProvider.register(imageImport);\n $stateRegistryProvider.register(networks);\n $stateRegistryProvider.register(network);\n $stateRegistryProvider.register(networkCreation);\n $stateRegistryProvider.register(nodes);\n $stateRegistryProvider.register(node);\n $stateRegistryProvider.register(nodeBrowser);\n $stateRegistryProvider.register(secrets);\n $stateRegistryProvider.register(secret);\n $stateRegistryProvider.register(secretCreation);\n $stateRegistryProvider.register(services);\n $stateRegistryProvider.register(service);\n $stateRegistryProvider.register(serviceCreation);\n $stateRegistryProvider.register(serviceLogs);\n $stateRegistryProvider.register(stacks);\n $stateRegistryProvider.register(stack);\n $stateRegistryProvider.register(stackCreation);\n $stateRegistryProvider.register(swarm);\n $stateRegistryProvider.register(swarmVisualizer);\n $stateRegistryProvider.register(tasks);\n $stateRegistryProvider.register(task);\n $stateRegistryProvider.register(taskLogs);\n $stateRegistryProvider.register(templates);\n $stateRegistryProvider.register(volumes);\n $stateRegistryProvider.register(volume);\n $stateRegistryProvider.register(volumeBrowse);\n $stateRegistryProvider.register(volumeCreation);\n $stateRegistryProvider.register(dockerFeaturesConfiguration);\n },\n]);\n","import angular from 'angular';\n\nangular.module('portainer.edge', []).config(function config($stateRegistryProvider) {\n const edge = {\n name: 'edge',\n url: '/edge',\n parent: 'root',\n abstract: true,\n };\n\n const groups = {\n name: 'edge.groups',\n url: '/groups',\n views: {\n 'content@': {\n component: 'edgeGroupsView',\n },\n },\n };\n\n const groupsNew = {\n name: 'edge.groups.new',\n url: '/new',\n views: {\n 'content@': {\n component: 'createEdgeGroupView',\n },\n },\n };\n\n const groupsEdit = {\n name: 'edge.groups.edit',\n url: '/:groupId',\n views: {\n 'content@': {\n component: 'editEdgeGroupView',\n },\n },\n };\n\n const stacks = {\n name: 'edge.stacks',\n url: '/stacks',\n views: {\n 'content@': {\n component: 'edgeStacksView',\n },\n },\n };\n\n const stacksNew = {\n name: 'edge.stacks.new',\n url: '/new',\n views: {\n 'content@': {\n component: 'createEdgeStackView',\n },\n },\n };\n\n const stacksEdit = {\n name: 'edge.stacks.edit',\n url: '/:stackId',\n views: {\n 'content@': {\n component: 'editEdgeStackView',\n },\n },\n params: {\n tab: 0,\n },\n };\n\n const edgeJobs = {\n name: 'edge.jobs',\n url: '/jobs',\n views: {\n 'content@': {\n component: 'edgeJobsView',\n },\n },\n };\n\n const edgeJob = {\n name: 'edge.jobs.job',\n url: '/:id',\n views: {\n 'content@': {\n component: 'edgeJobView',\n },\n },\n params: {\n tab: 0,\n },\n };\n\n const edgeJobCreation = {\n name: 'edge.jobs.new',\n url: '/new',\n views: {\n 'content@': {\n component: 'createEdgeJobView',\n },\n },\n };\n\n $stateRegistryProvider.register(edge);\n\n $stateRegistryProvider.register(groups);\n $stateRegistryProvider.register(groupsNew);\n $stateRegistryProvider.register(groupsEdit);\n\n $stateRegistryProvider.register(stacks);\n $stateRegistryProvider.register(stacksNew);\n $stateRegistryProvider.register(stacksEdit);\n\n $stateRegistryProvider.register(edgeJobs);\n $stateRegistryProvider.register(edgeJob);\n $stateRegistryProvider.register(edgeJobCreation);\n});\n","const autoNgTemplateLoaderTemplate1 = require('./views/sidebar/sidebar.html');\nconst autoNgTemplateLoaderTemplate2 = require('./views/account/account.html');\nconst autoNgTemplateLoaderTemplate3 = require('./views/auth/auth.html');\nconst autoNgTemplateLoaderTemplate4 = require('./views/logout/logout.html');\nconst autoNgTemplateLoaderTemplate5 = require('./views/endpoints/endpoints.html');\nconst autoNgTemplateLoaderTemplate6 = require('./views/endpoints/edit/endpoint.html');\nconst autoNgTemplateLoaderTemplate7 = require('../kubernetes/views/configure/configure.html');\nconst autoNgTemplateLoaderTemplate8 = require('./views/endpoints/create/createendpoint.html');\nconst autoNgTemplateLoaderTemplate9 = require('./views/endpoints/access/endpointAccess.html');\nconst autoNgTemplateLoaderTemplate10 = require('./views/groups/groups.html');\nconst autoNgTemplateLoaderTemplate11 = require('./views/groups/edit/group.html');\nconst autoNgTemplateLoaderTemplate12 = require('./views/groups/create/creategroup.html');\nconst autoNgTemplateLoaderTemplate13 = require('./views/groups/access/groupAccess.html');\nconst autoNgTemplateLoaderTemplate14 = require('./views/home/home.html');\nconst autoNgTemplateLoaderTemplate15 = require('./views/init/endpoint/initEndpoint.html');\nconst autoNgTemplateLoaderTemplate16 = require('./views/init/admin/initAdmin.html');\nconst autoNgTemplateLoaderTemplate17 = require('./views/registries/registries.html');\nconst autoNgTemplateLoaderTemplate18 = require('./views/registries/edit/registry.html');\nconst autoNgTemplateLoaderTemplate19 = require('./views/registries/create/createregistry.html');\nconst autoNgTemplateLoaderTemplate20 = require('./views/registries/access/registryAccess.html');\nconst autoNgTemplateLoaderTemplate21 = require('./views/settings/settings.html');\nconst autoNgTemplateLoaderTemplate22 = require('./views/settings/authentication/settingsAuthentication.html');\nconst autoNgTemplateLoaderTemplate23 = require('./views/tags/tags.html');\nconst autoNgTemplateLoaderTemplate24 = require('./views/users/users.html');\nconst autoNgTemplateLoaderTemplate25 = require('./views/users/edit/user.html');\nconst autoNgTemplateLoaderTemplate26 = require('./views/teams/teams.html');\nconst autoNgTemplateLoaderTemplate27 = require('./views/teams/edit/team.html');\nconst autoNgTemplateLoaderTemplate28 = require('./views/roles/roles.html');\n\nimport _ from 'lodash-es';\n\nimport componentsModule from './components';\n\nasync function initAuthentication(authManager, Authentication, $rootScope, $state) {\n authManager.checkAuthOnRefresh();\n // The unauthenticated event is broadcasted by the jwtInterceptor when\n // hitting a 401. We're using this instead of the usual combination of\n // authManager.redirectWhenUnauthenticated() + unauthenticatedRedirector\n // to have more controls on which URL should trigger the unauthenticated state.\n $rootScope.$on('unauthenticated', function (event, data) {\n if (!_.includes(data.config.url, '/v2/') && !_.includes(data.config.url, '/api/v4/') && isTransitionRequiresAuthentication($state.transition)) {\n $state.go('portainer.logout', { error: 'Your session has expired' });\n }\n });\n\n return await Authentication.init();\n}\n\nangular.module('portainer.app', ['portainer.oauth', componentsModule]).config([\n '$stateRegistryProvider',\n function ($stateRegistryProvider) {\n 'use strict';\n\n var root = {\n name: 'root',\n abstract: true,\n onEnter: /* @ngInject */ function onEnter($async, StateManager, Authentication, Notifications, authManager, $rootScope, $state) {\n return $async(async () => {\n const appState = StateManager.getState();\n if (!appState.loading) {\n return;\n }\n try {\n const loggedIn = await initAuthentication(authManager, Authentication, $rootScope, $state);\n await StateManager.initialize();\n if (!loggedIn && isTransitionRequiresAuthentication($state.transition)) {\n $state.go('portainer.logout');\n return Promise.reject('Unauthenticated');\n }\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to retrieve application settings');\n throw err;\n }\n });\n },\n views: {\n 'sidebar@': {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'SidebarController',\n },\n },\n };\n\n var endpointRoot = {\n name: 'endpoint',\n url: '/:endpointId',\n parent: 'root',\n abstract: true,\n resolve: {\n endpoint: /* @ngInject */ function endpoint($async, $state, $transition$, EndpointService, Notifications) {\n return $async(async () => {\n try {\n const endpointId = +$transition$.params().endpointId;\n\n const endpoint = await EndpointService.endpoint(endpointId);\n if ((endpoint.Type === 4 || endpoint.Type === 7) && !endpoint.EdgeID) {\n $state.go('portainer.endpoints.endpoint', { id: endpoint.Id });\n return;\n }\n\n return endpoint;\n } catch (e) {\n Notifications.error('Failed loading endpoint', e);\n $state.go('portainer.home', {}, { reload: true });\n return;\n }\n });\n },\n },\n };\n\n var portainer = {\n name: 'portainer',\n parent: 'root',\n abstract: true,\n };\n\n var account = {\n name: 'portainer.account',\n url: '/account',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate2,\n controller: 'AccountController',\n },\n },\n };\n\n var authentication = {\n name: 'portainer.auth',\n url: '/auth',\n params: {\n reload: false,\n },\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate3,\n controller: 'AuthenticationController',\n controllerAs: 'ctrl',\n },\n 'sidebar@': {},\n },\n };\n const logout = {\n name: 'portainer.logout',\n url: '/logout',\n params: {\n error: '',\n performApiLogout: false,\n },\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate4,\n controller: 'LogoutController',\n controllerAs: 'ctrl',\n },\n 'sidebar@': {},\n },\n };\n\n var endpoints = {\n name: 'portainer.endpoints',\n url: '/endpoints',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate5,\n controller: 'EndpointsController',\n },\n },\n };\n\n var endpoint = {\n name: 'portainer.endpoints.endpoint',\n url: '/:id',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate6,\n controller: 'EndpointController',\n },\n },\n };\n\n const endpointKubernetesConfiguration = {\n name: 'portainer.endpoints.endpoint.kubernetesConfig',\n url: '/configure',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate7,\n controller: 'KubernetesConfigureController',\n controllerAs: 'ctrl',\n },\n },\n };\n\n var endpointCreation = {\n name: 'portainer.endpoints.new',\n url: '/new',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate8,\n controller: 'CreateEndpointController',\n },\n },\n };\n\n var endpointAccess = {\n name: 'portainer.endpoints.endpoint.access',\n url: '/access',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate9,\n controller: 'EndpointAccessController',\n controllerAs: 'ctrl',\n },\n },\n };\n\n var groups = {\n name: 'portainer.groups',\n url: '/groups',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate10,\n controller: 'GroupsController',\n },\n },\n };\n\n var group = {\n name: 'portainer.groups.group',\n url: '/:id',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate11,\n controller: 'GroupController',\n },\n },\n };\n\n var groupCreation = {\n name: 'portainer.groups.new',\n url: '/new',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate12,\n controller: 'CreateGroupController',\n },\n },\n };\n\n var groupAccess = {\n name: 'portainer.groups.group.access',\n url: '/access',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate13,\n controller: 'GroupAccessController',\n },\n },\n };\n\n var home = {\n name: 'portainer.home',\n url: '/home',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate14,\n controller: 'HomeController',\n },\n },\n };\n\n var init = {\n name: 'portainer.init',\n abstract: true,\n url: '/init',\n views: {\n 'sidebar@': {},\n },\n };\n\n var initEndpoint = {\n name: 'portainer.init.endpoint',\n url: '/endpoint',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate15,\n controller: 'InitEndpointController',\n controllerAs: 'ctrl',\n },\n },\n };\n\n var initAdmin = {\n name: 'portainer.init.admin',\n url: '/admin',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate16,\n controller: 'InitAdminController',\n },\n },\n };\n\n var registries = {\n name: 'portainer.registries',\n url: '/registries',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate17,\n controller: 'RegistriesController',\n },\n },\n };\n\n var registry = {\n name: 'portainer.registries.registry',\n url: '/:id',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate18,\n controller: 'RegistryController',\n },\n },\n };\n\n var registryCreation = {\n name: 'portainer.registries.new',\n url: '/new',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate19,\n controller: 'CreateRegistryController',\n },\n },\n };\n\n var registryAccess = {\n name: 'portainer.registries.registry.access',\n url: '/access',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate20,\n controller: 'RegistryAccessController',\n },\n },\n };\n\n var settings = {\n name: 'portainer.settings',\n url: '/settings',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate21,\n controller: 'SettingsController',\n },\n },\n };\n\n var settingsAuthentication = {\n name: 'portainer.settings.authentication',\n url: '/auth',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate22,\n controller: 'SettingsAuthenticationController',\n },\n },\n };\n\n var tags = {\n name: 'portainer.tags',\n url: '/tags',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate23,\n controller: 'TagsController',\n },\n },\n };\n\n var users = {\n name: 'portainer.users',\n url: '/users',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate24,\n controller: 'UsersController',\n },\n },\n };\n\n var user = {\n name: 'portainer.users.user',\n url: '/:id',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate25,\n controller: 'UserController',\n },\n },\n };\n\n var teams = {\n name: 'portainer.teams',\n url: '/teams',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate26,\n controller: 'TeamsController',\n },\n },\n };\n\n var team = {\n name: 'portainer.teams.team',\n url: '/:id',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate27,\n controller: 'TeamController',\n },\n },\n };\n\n var roles = {\n name: 'portainer.roles',\n url: '/roles',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate28,\n },\n },\n };\n\n $stateRegistryProvider.register(root);\n $stateRegistryProvider.register(endpointRoot);\n $stateRegistryProvider.register(portainer);\n $stateRegistryProvider.register(account);\n $stateRegistryProvider.register(authentication);\n $stateRegistryProvider.register(logout);\n $stateRegistryProvider.register(endpoints);\n $stateRegistryProvider.register(endpoint);\n $stateRegistryProvider.register(endpointAccess);\n $stateRegistryProvider.register(endpointCreation);\n $stateRegistryProvider.register(endpointKubernetesConfiguration);\n $stateRegistryProvider.register(groups);\n $stateRegistryProvider.register(group);\n $stateRegistryProvider.register(groupAccess);\n $stateRegistryProvider.register(groupCreation);\n $stateRegistryProvider.register(home);\n $stateRegistryProvider.register(init);\n $stateRegistryProvider.register(initEndpoint);\n $stateRegistryProvider.register(initAdmin);\n $stateRegistryProvider.register(registries);\n $stateRegistryProvider.register(registry);\n $stateRegistryProvider.register(registryAccess);\n $stateRegistryProvider.register(registryCreation);\n $stateRegistryProvider.register(settings);\n $stateRegistryProvider.register(settingsAuthentication);\n $stateRegistryProvider.register(tags);\n $stateRegistryProvider.register(users);\n $stateRegistryProvider.register(user);\n $stateRegistryProvider.register(teams);\n $stateRegistryProvider.register(team);\n $stateRegistryProvider.register(roles);\n },\n]);\n\nfunction isTransitionRequiresAuthentication(transition) {\n const UNAUTHENTICATED_ROUTES = ['portainer.logout', 'portainer.auth'];\n if (!transition) {\n return true;\n }\n const nextTransition = transition && transition.to();\n const nextTransitionName = nextTransition ? nextTransition.name : '';\n return !UNAUTHENTICATED_ROUTES.some((route) => nextTransitionName.startsWith(route));\n}\n","var path = 'app/azure/views/containerinstances/containerinstances.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Container instances\\n\\n\\n
\\n
\\n \\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/azure/views/containerinstances/create/createcontainerinstance.html';\nvar html = \"\\n \\n Container instances > Add container \\n\\n\\n
\\n
\\n \\n \\n
\\n
\\n Azure settings\\n
\\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n
\\n Container configuration\\n
\\n \\n
\\n \\n
\\n \\n
\\n
\\n
\\n
\\n
\\n

Name is required.

\\n
\\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n
\\n
\\n
\\n

Image is required.

\\n
\\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n map additional port\\n \\n
\\n \\n
\\n
\\n \\n
\\n host\\n \\n
\\n \\n \\n \\n \\n \\n
\\n container\\n \\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n \\n
\\n
This will automatically deploy a container with a public IP address
\\n
\\n \\n\\n
\\n Container resources\\n
\\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n \\n \\n \\n
\\n Actions\\n
\\n
\\n
\\n \\n {{ state.formValidationError }}\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/azure/views/dashboard/dashboard.html';\nvar html = \"\\n \\n Dashboard\\n\\n\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/configs/configs.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Configs\\n\\n\\n
\\n
\\n \\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/configs/edit/config.html';\nvar html = \"\\n \\n \\n \\n \\n \\n \\n Configs > {{ config.Name }}\\n \\n\\n\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
Name{{ config.Name }}
ID\\n {{ config.Id }}\\n
Created{{ config.CreatedAt | getisodate }}
Last updated{{ config.UpdatedAt | getisodate }}
Labels\\n \\n \\n \\n \\n \\n
{{ k }}{{ v }}
\\n
\\n
\\n
\\n
\\n
\\n\\n\\n \\n\\n\\n
\\n
\\n \\n \\n \\n
\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/configs/create/createconfig.html';\nvar html = \"\\n \\n Configs > Add config \\n\\n\\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n add label\\n \\n
\\n \\n
\\n
\\n
\\n name\\n \\n
\\n
\\n value\\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n \\n \\n \\n \\n
\\n Actions\\n
\\n
\\n
\\n \\n {{ ctrl.state.formValidationError }}\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/containers/containers.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Containers\\n\\n\\n
\\n
\\n \\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/containers/edit/container.html';\nvar html = \"\\n \\n \\n Containers > {{ container.Name | trimcontainername }}\\n \\n\\n\\n\\n
\\n \\n \\n \\n
\\n
\\n
\\n \\n Recreate\\n Recreation in progress...\\n \\n Duplicate/Edit\\n
\\n
\\n
\\n
\\n\\n\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
ID{{ container.Id }}
Name\\n {{ container.Name | trimcontainername }}\\n \\n \\n
\\n \\n \\n \\n
\\n
IP address{{ container.NetworkSettings.IPAddress }}
Status\\n \\n \\n {{ container.State | getstatetext }} for {{ activityTime\\n }} with exit code {{ container.State.ExitCode }}\\n
Created{{ container.Created | getisodate }}
Start time{{ container.State.StartedAt | getisodate }}
Finished{{ container.State.FinishedAt | getisodate }}
\\n \\n
\\n
\\n
\\n
\\n
\\n\\n\\n \\n\\n\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
Status\\n \\n {{ container.State.Health.Status }}\\n
Failure count{{ container.State.Health.FailingStreak }}
Last output{{ container.State.Health.Log[container.State.Health.Log.length - 1].Output }}
\\n
\\n
\\n
\\n
\\n\\n
\\n
\\n \\n \\n \\n
\\n \\n
\\n
\\n \\n You can create an image from this container, this allows you to backup important data or save helpful configurations. You'll be able to spin up another container\\n based on this image afterward.\\n \\n
\\n
\\n \\n \\n \\n \\n \\n
\\n
\\n Note: if you don't specify the tag in the image name, latest will be used.\\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n {{ container.Config.Image }}@{{ container.Image }}\\n \\n 0\\\">\\n \\n \\n \\n \\n \\n {{ container.Config.Cmd | command }}\\n \\n \\n \\n {{ container.Config.Entrypoint ? (container.Config.Entrypoint | command) : 'null' }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
Image
Port configuration\\n
{{ portMapping.host }} {{ portMapping.container }}
\\n
CMD
ENTRYPOINT
ENV\\n \\n \\n \\n \\n \\n
{{ var|key: '=' }}{{ var|value: '=' }}
\\n
Labels\\n \\n \\n \\n \\n \\n
{{ k }}{{ v }}
\\n
Restart policies\\n \\n \\n
Sysctls\\n \\n \\n \\n \\n \\n
{{ k }}{{ v }}
\\n
\\n
\\n
\\n
\\n
\\n\\n
0\\\">\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
Host/volumePath in container
{{ vol.Source }}{{ vol.Name }}\\n {{ vol.Destination }}
\\n
\\n
\\n
\\n
\\n\\n
\\n
\\n \\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/containers/console/attach.html';\nvar html = \"\\n \\n \\n Containers > {{ container.Name | trimcontainername }} > Console\\n \\n\\n\\n
\\n
\\n \\n \\n \\n
\\n

\\n \\n The interactive-flag is not set. You might not be able to use the console properly.\\n

\\n
\\n\\n
\\n

\\n \\n The TTY-flag is not set. You might not be able to use the console properly.\\n

\\n
\\n\\n
\\n

\\n \\n The container is not running.\\n

\\n
\\n\\n \\n Attach to Container\\n Detach\\n Attaching...\\n \\n
\\n
\\n
\\n
\\n\\n
\\n
\\n
\\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/containers/console/exec.html';\nvar html = \"\\n \\n \\n Containers > {{ container.Name | trimcontainername }} > Console\\n \\n\\n\\n
\\n
\\n \\n \\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n \\n \\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n
\\n
\\n \\n \\n \\n The container is not running.\\n \\n
\\n
\\n
\\n
\\n Exec into container as {{ ::formValues.user || 'default user' }} using command\\n {{ formValues.isCustomCommand ? formValues.customCommand : formValues.command }}\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n\\n
\\n
\\n
\\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/containers/create/createcontainer.html';\nvar html = \"\\n \\n Containers > Add container \\n\\n\\n\\n \\n

\\n \\n The new container may fail to start if the image is changed, and settings from the previous container aren't compatible. Common causes include entrypoint, cmd or\\n other settings set by an image.\\n

\\n
\\n
\\n\\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n
\\n Image configuration\\n
\\n
\\n \\n \\n The Docker registry for the {{ config.Image }} image is not registered inside Portainer, you will not be able to create a container. Please register that\\n registry first.\\n \\n
\\n
\\n \\n \\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n \\n
\\n
\\n Network ports configuration\\n
\\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n publish a new network port\\n \\n
\\n \\n
\\n
\\n \\n
\\n host\\n \\n
\\n \\n \\n \\n \\n \\n
\\n container\\n \\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n Deployment\\n
\\n \\n \\n \\n
\\n \\n \\n \\n \\n
\\n Actions\\n
\\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n
\\n
\\n \\n Deploy the container\\n Deployment in progress...\\n \\n {{ state.formValidationError }}\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n\\n
\\n
\\n \\n \\n \\n \\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n
\\n \\n \\n
\\n \\n
\\n
\\n
\\n \\n \\n
\\n \\n
\\n
\\n
\\n \\n \\n
\\n \\n
\\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n \\n\\n
\\n Logging\\n
\\n \\n
\\n \\n
\\n \\n
\\n
\\n

\\n Logging driver that will override the default docker daemon driver. Select Default logging driver if you don't want to override it. Supported logging drivers\\n can be found in the Docker documentation.\\n

\\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n add logging driver option\\n \\n
\\n \\n
\\n
\\n
\\n option\\n \\n
\\n
\\n value\\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n map additional volume\\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n
\\n container\\n \\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n \\n \\n
\\n \\n \\n
\\n volume\\n \\n
\\n \\n \\n
\\n host\\n \\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n
\\n
\\n You don't have any shared networks. Head over to the networks view to create one.\\n
\\n
\\n \\n
\\n \\n
\\n \\n \\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n add additional entry\\n \\n
\\n \\n
\\n
\\n
\\n value\\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n add label\\n \\n
\\n \\n
\\n
\\n
\\n name\\n \\n
\\n
\\n value\\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n
\\n \\n \\n \\n \\n
\\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n Runtime\\n
\\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n
= 1.37\\\">\\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n add device\\n \\n
\\n \\n
\\n
\\n
\\n host\\n \\n
\\n
\\n container\\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n \\n add sysctl\\n \\n
\\n \\n
\\n
\\n
\\n name\\n \\n
\\n
\\n value\\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n
\\n Resources\\n
\\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n
\\n
\\n

\\n Memory soft limit (MB)\\n

\\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n
\\n
\\n

\\n Memory limit (MB)\\n

\\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n

\\n Maximum CPU usage\\n

\\n
\\n
\\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n
\\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/containers/inspect/containerinspect.html';\nvar html = \"\\n \\n \\n Containers > {{ containerInfo.Name | trimcontainername }} >\\n Inspect\\n \\n\\n\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n
{{ containerInfo | json: 4 }}
\\n \\n
\\n
\\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/containers/logs/containerlogs.html';\nvar html = \"\\n \\n \\n Containers > {{ container.Name | trimcontainername }} > Logs\\n \\n\\n\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/containers/stats/containerstats.html';\nvar html = \"\\n \\n \\n Containers > {{ container.Name | trimcontainername }} > Stats\\n \\n\\n\\n
\\n
\\n \\n \\n \\n
\\n
\\n
\\n \\n This view displays real-time statistics about the container {{ container.Name | trimcontainername }} as well as a list of the running processes inside this\\n container.\\n \\n
\\n
\\n
\\n \\n
\\n \\n
\\n \\n \\n \\n
\\n
\\n
\\n Network stats are unavailable for this container. \\n
\\n
\\n
\\n
\\n I/O stats are unavailable for this container. \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n\\n
\\n
\\n \\n \\n \\n
\\n \\n
\\n
\\n
\\n
\\n\\n
\\n \\n \\n \\n
\\n \\n
\\n
\\n
\\n
\\n\\n
\\n \\n \\n \\n
\\n \\n
\\n
\\n
\\n
\\n\\n
\\n \\n \\n \\n
\\n \\n
\\n
\\n
\\n
\\n
\\n\\n
\\n
\\n \\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/dashboard/dashboard.html';\nvar html = \"\\n \\n Endpoint summary\\n\\n\\n
\\n
\\n \\n
\\n
\\n\\n\\n \\n

\\n \\n Portainer is connected to a node that is part of a Swarm cluster. Some resources located on other nodes in the cluster might not be available for management, have a look at\\n our agent setup for more details.\\n

\\n

\\n \\n Portainer is connected to a worker node. Swarm management features will not be available.\\n

\\n
\\n\\n\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
Endpoint\\n {{ endpoint.Name }}\\n \\n {{ endpoint.Snapshots[0].TotalCPU }} {{ endpoint.Snapshots[0].TotalMemory | humansize }}\\n \\n \\n - {{ info.Swarm && info.Swarm.NodeID !== '' ? 'Swarm' : 'Standalone' }} {{ info.ServerVersion }}\\n + Agent\\n
URL{{ endpoint.URL | stripprotocol }}
Tags{{ endpointTags }}
\\n \\n
\\n
\\n
\\n
\\n
\\n\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/events/events.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Events\\n\\n\\n
\\n
\\n \\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/images/images.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Images\\n\\n\\n
\\n
\\n \\n \\n \\n
\\n \\n \\n
\\n
\\n Deployment\\n
\\n \\n \\n \\n
\\n
\\n
\\n \\n Pull the image\\n Download in progress...\\n \\n
\\n
\\n \\n \\n \\n
\\n
\\n
\\n
\\n\\n
\\n
\\n \\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/images/edit/image.html';\nvar html = \"\\n \\n \\n Images > {{ image.Id }}\\n \\n\\n\\n
0\\\">\\n
\\n \\n \\n \\n
\\n
\\n
\\n
\\n
\\n {{ tag }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\n Note: you can click on the upload icon to push an image or on the download icon\\n to pull an image or on the trash icon to delete a\\n tag.\\n \\n
\\n
\\n \\n Download in progress...\\n \\n \\n \\n Upload in progress...\\n \\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n\\n
\\n
\\n \\n \\n \\n
\\n \\n \\n \\n \\n
\\n
\\n Note: if you don't specify the tag in the image name, latest will be used.\\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ image.Parent }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
ID\\n {{ image.Id }}\\n \\n
Parent
Size{{ image.VirtualSize | humansize }}
Created{{ image.Created | getisodate }}
BuildDocker {{ image.DockerVersion }} on {{ image.Os }}, {{ image.Architecture }}
Labels\\n \\n \\n \\n \\n \\n
{{ k }}{{ v }}
\\n
Author{{ image.Author }}
\\n
\\n
\\n
\\n
\\n\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n {{ image.Command | command }}\\n \\n \\n \\n {{ image.Entrypoint | command }}\\n \\n 0\\\">\\n \\n \\n \\n 0\\\">\\n \\n \\n \\n 0\\\">\\n \\n \\n \\n \\n
CMD
ENTRYPOINT
EXPOSE\\n \\n {{ port }}\\n \\n
VOLUME\\n \\n {{ volume }}\\n \\n
ENV\\n \\n \\n \\n \\n \\n
{{ var|key: '=' }}{{ var|value: '=' }}
\\n
\\n
\\n
\\n
\\n
\\n
0\\\">\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n Order\\n \\n \\n \\n \\n \\n Size\\n \\n \\n \\n \\n \\n Layer\\n \\n \\n \\n
\\n {{ layer.Order }}\\n \\n {{ layer.Size | humansize }}\\n \\n
130\\\">\\n \\n {{ layer.CreatedBy | imagelayercommand }}\\n \\n \\n {{ layer.CreatedBy | imagelayercommand | truncate: 130 }}\\n 130\\\" style=\\\"margin-left: 5px;\\\">\\n \\n \\n \\n \\n \\n
\\n
\\n \\n {{ layer.CreatedBy | imagelayercommand }}\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/images/build/buildimage.html';\nvar html = \"\\n \\n Images > Build image \\n\\n\\n
\\n
\\n \\n \\n \\n \\n Builder \\n
\\n
\\n Naming\\n
\\n \\n
\\n \\n You can specify multiple names to your image.\\n \\n
\\n
\\n
\\n \\n \\n add additional name\\n \\n
\\n
\\n \\n
\\n \\n You must specify at least one name for the image.\\n \\n
\\n \\n
0\\\">\\n
\\n \\n A name must be specified in one of the following formats: name:tag, repository/name:tag or\\n registryfqdn:port/repository/name:tag format. If you omit the tag the default latest value is assumed.\\n \\n
\\n
\\n
\\n
\\n
\\n \\n
\\n name\\n \\n \\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n
\\n
\\n
\\n \\n \\n
\\n Build method\\n
\\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n
\\n
\\n \\n \\n
\\n
\\n Web editor\\n
\\n
\\n \\n You can get more information about Dockerfile format in the\\n official documentation.\\n \\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\n \\n
\\n
\\n Upload\\n
\\n
\\n \\n You can upload a Dockerfile or a tar archive containing a Dockerfile from your computer. When using a tarball, the root folder will be used as the build\\n context.\\n \\n
\\n
\\n
\\n \\n \\n {{ formValues.UploadFile.name }}\\n \\n \\n
\\n
\\n
\\n
\\n \\n Indicate the path to the Dockerfile within the tarball.\\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n URL\\n
\\n
\\n \\n Specify the URL to a Dockerfile, a tarball or a public Git repository (suffixed by .git). When using a tarball or a Git repository URL, the root folder\\n will be used as the build context.\\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n
\\n \\n Indicate the path to the Dockerfile within the tarball/repository (ignored when using a Dockerfile).\\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n
\\n \\n
\\n
\\n Deployment\\n
\\n \\n \\n \\n
\\n \\n
\\n Actions\\n
\\n
\\n
\\n \\n Build the image\\n Image building in progress...\\n \\n {{ state.formValidationError }}\\n
\\n
\\n \\n \\n
\\n \\n Output \\n
\\n              

{{ line }}

\\n

No build output available.

\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/images/import/importimage.html';\nvar html = \"\\n \\n Images > Import image \\n\\n\\n
\\n
\\n \\n \\n
\\n \\n
\\n Upload\\n
\\n
\\n \\n You can upload a tar archive containing your images.\\n \\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n Deployment\\n
\\n \\n \\n \\n
\\n \\n
\\n Actions\\n
\\n
\\n
\\n \\n Upload\\n Images uploading in progress...\\n \\n {{ state.formValidationError }}\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/networks/networks.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Networks\\n\\n\\n
\\n
\\n \\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/networks/edit/network.html';\nvar html = \"\\n \\n \\n Networks > {{ network.Name }}\\n \\n\\n\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n 0\\\" ng-repeat-start=\\\"config in network.IPAM.IPV4Configs\\\">\\n \\n \\n \\n 0\\\" ng-repeat-end>\\n \\n IPV4 Excluded Ips - {{ auxAddress }}\\n \\n 0\\\" ng-repeat-start=\\\"config in network.IPAM.IPV6Configs\\\">\\n \\n \\n \\n 0\\\" ng-repeat-end>\\n \\n IPV6 Excluded Ips - {{ auxAddress }}\\n \\n \\n
Name{{ network.Name }}
ID\\n {{ network.Id }}\\n
Driver{{ network.Driver }}
Scope{{ network.Scope }}
Attachable{{ network.Attachable }}
Internal{{ network.Internal }}
IPV4 Subnet - {{ config.Subnet }}IPV4 Gateway - {{ config.Gateway }}
IPV4 IP range - {{ config.IPRange }}
IPV6 Subnet - {{ config.Subnet }}IPV6 Gateway - {{ config.Gateway }}
IPV6 IP range - {{ config.IPRange }}
\\n
\\n
\\n
\\n
\\n\\n\\n\\n\\n\\n\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
{{ key }}{{ value }}
\\n
\\n
\\n
\\n
\\n\\n
0\\\">\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ container.Name }}\\n \\n \\n \\n \\n \\n \\n
Container NameIPv4 AddressIPv6 AddressMacAddressActions
{{ container.IPv4Address || '-' }}{{ container.IPv6Address || '-' }}{{ container.MacAddress || '-' }}\\n
\\n
\\n
\\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/networks/create/createnetwork.html';\nvar html = \"\\n \\n Networks > Add network \\n\\n\\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n
\\n Driver configuration\\n
\\n \\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n add driver option\\n \\n
\\n \\n
\\n
\\n
\\n name\\n \\n
\\n
\\n value\\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n \\n \\n \\n
\\n
\\n IPV4 Network configuration\\n
\\n \\n
\\n \\n
\\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n
\\n \\n
\\n \\n
\\n \\n
\\n

Exclude ip cannot be the same as gateway.

\\n
\\n
\\n \\n
\\n \\n add excluded IP\\n \\n
\\n
\\n
\\n
\\n IPV6 Network configuration\\n
\\n \\n
\\n \\n
\\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n
\\n \\n
\\n \\n
\\n \\n
\\n

Exclude ip cannot be the same as gateway.

\\n
\\n
\\n \\n
\\n \\n add excluded IP\\n \\n
\\n
\\n
\\n Advanced configuration\\n
\\n \\n
\\n
\\n \\n add label \\n
\\n \\n
\\n
\\n
\\n name\\n \\n
\\n
\\n value\\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n Deployment\\n
\\n \\n \\n \\n
\\n \\n \\n \\n \\n
\\n Actions\\n
\\n
\\n
\\n \\n Create the network\\n Creating network...\\n \\n \\n {{ state.formValidationError }}\\n
\\n
\\n \\n \\n \\n \\n
\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/secrets/secrets.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Secrets\\n\\n\\n
\\n
\\n \\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/secrets/edit/secret.html';\nvar html = \"\\n \\n \\n \\n \\n \\n \\n Secrets > {{ secret.Name }}\\n \\n\\n\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
Name{{ secret.Name }}
ID\\n {{ secret.Id }}\\n
Created{{ secret.CreatedAt | getisodate }}
Last updated{{ secret.UpdatedAt | getisodate }}
Labels\\n \\n \\n \\n \\n \\n
{{ k }}{{ v }}
\\n
\\n
\\n
\\n
\\n
\\n\\n\\n \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/secrets/create/createsecret.html';\nvar html = \"\\n \\n Secrets > Add secret \\n\\n\\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n add label \\n
\\n \\n
\\n
\\n
\\n name\\n \\n
\\n
\\n value\\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n \\n \\n \\n \\n
\\n Actions\\n
\\n
\\n
\\n \\n Create the secret\\n Creating secret...\\n \\n {{ state.formValidationError }}\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/services/services.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Services\\n\\n\\n
\\n
\\n = 1.25\\\"\\n show-task-logs-button=\\\"applicationState.endpoint.apiVersion >= 1.30\\\"\\n show-add-action=\\\"true\\\"\\n show-stack-column=\\\"true\\\"\\n refresh-callback=\\\"getServices\\\"\\n >\\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/services/edit/service.html';\nvar html = \"\\n \\n \\n \\n \\n \\n \\n Services > {{ service.Name }}\\n \\n\\n\\n
\\n
\\n
\\n

This service is being updated. Editing this service is currently disabled.

\\n Refresh to see if this service has finished updated.\\n
\\n
\\n
\\n\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
Name\\n \\n = 1.25\\\">\\n {{ service.Name }}\\n
ID\\n {{ service.Id }}\\n
Created at{{ service.CreatedAt | getisodate }}
Last updated at{{ service.UpdatedAt | getisodate }}
Version{{ service.Version }}
Scheduling mode{{ service.Mode }}
Replicas\\n \\n \\n \\n
Image{{ service.Image }}
\\n Service webhook\\n \\n \\n \\n {{ webhookURL | truncatelr }}\\n \\n \\n \\n \\n
\\n

\\n Note: you can only rollback one level of changes. Clicking the rollback button without making a new change will undo your previous rollback

\\n = 1.3\\\"\\n class=\\\"btn btn-primary btn-sm\\\"\\n type=\\\"button\\\"\\n ui-sref=\\\"docker.services.service.logs({id: service.Id})\\\"\\n >Service logs\\n = 1.25\\\"\\n >\\n Update the service\\n Update in progress...\\n \\n = 1.25\\\"\\n >\\n Rollback the service\\n Rollback in progress...\\n \\n \\n Delete the service\\n Deletion in progress...\\n \\n

\\n
\\n
\\n \\n

\\n Do you need help? View the Docker Service documentation here.\\n

\\n
\\n
\\n \\n \\n
\\n
\\n
\\n
\\n
\\n\\n \\n
\\n\\n\\n \\n\\n\\n
\\n
\\n
\\n

Container specification

\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n\\n
\\n
\\n
\\n

Networks & ports

\\n
\\n
\\n
\\n
\\n
\\n\\n
\\n
\\n
\\n

Service specification

\\n
\\n
\\n = 1.3\\\"\\n class=\\\"padding-top\\\"\\n ng-include=\\\"'app/docker/views/services/edit/includes/placementPreferences.html'\\\"\\n >
\\n
\\n
\\n
\\n
\\n
\\n
= 1.25\\\" class=\\\"padding-top\\\" ng-include=\\\"'app/docker/views/services/edit/includes/secrets.html'\\\">
\\n
\\n
\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/services/create/createservice.html';\nvar html = \"\\n \\n Services > Add service \\n\\n\\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n
\\n Image configuration\\n
\\n \\n \\n \\n \\n
\\n Scheduling\\n
\\n \\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n \\n
\\n Ports configuration\\n
\\n \\n
\\n
\\n \\n \\n map additional port\\n \\n
\\n
\\n
\\n \\n
\\n host\\n \\n
\\n \\n \\n \\n \\n \\n
\\n container\\n \\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n Webhooks\\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n \\n \\n \\n \\n \\n
\\n Actions\\n
\\n
\\n
\\n \\n Create the service\\n Creating service...\\n \\n {{ state.formValidationError }}\\n
\\n
\\n \\n \\n
\\n
\\n
\\n
\\n\\n
\\n
\\n \\n \\n \\n \\n
\\n \\n
\\n
\\n
\\n Command\\n
\\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n
\\n Logging\\n
\\n \\n
\\n \\n
\\n \\n
\\n
\\n

\\n Logging driver for service that will override the default docker daemon driver. Select Default logging driver if you don't want to override it. Supported\\n logging drivers can be found\\n in the Docker documentation.\\n

\\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n add logging driver option\\n \\n
\\n \\n
\\n
\\n
\\n option\\n \\n
\\n
\\n value\\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n map additional volume\\n \\n
\\n \\n
\\n
\\n
\\n \\n
\\n \\n
\\n
\\n container\\n \\n
\\n
Target is required.
\\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n volume\\n \\n \\n \\n
\\n
Source is required.
\\n
\\n \\n \\n
\\n
\\n host\\n \\n
\\n
Source is required.
\\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n
\\n \\n
\\n \\n
\\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n add extra network\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n
\\n \\n \\n
= 1.25\\\">\\n
\\n \\n \\n add additional entry\\n \\n
\\n \\n
\\n
\\n
\\n value\\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n
\\n
\\n \\n \\n add service label\\n \\n
\\n \\n
\\n
\\n
\\n name\\n \\n
\\n
\\n value\\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n \\n add container label\\n \\n
\\n \\n
\\n
\\n
\\n name\\n \\n
\\n
\\n value\\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n \\n \\n
= 1.25\\\" ng-include=\\\"'app/docker/views/services/create/includes/secret.html'\\\">
\\n \\n \\n
= 1.3\\\" ng-include=\\\"'app/docker/views/services/create/includes/config.html'\\\">
\\n \\n \\n
\\n \\n
\\n
\\n
\\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/services/logs/servicelogs.html';\nvar html = \"\\n \\n \\n Services > {{ service.Name }} > Logs\\n \\n\\n\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/stacks/stacks.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Stacks\\n\\n\\n
\\n
\\n \\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/stacks/edit/stack.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Stacks > {{ stackName }} \\n\\n\\n
\\n
\\n \\n \\n \\n \\n \\n Stack \\n
\\n \\n
\\n
\\n Information\\n
\\n
\\n \\n

\\n \\n This stack was created outside of Portainer. Control over this stack is limited.\\n This stack is orphaned. You can reassociate it with the current environment using the \\\"Associate to this endpoint\\\" feature.\\n

\\n
\\n
\\n
\\n \\n \\n
\\n
\\n Stack details\\n
\\n
\\n {{ stackName }}\\n\\n \\n \\n Start this stack\\n \\n\\n \\n \\n Stop this stack\\n \\n\\n \\n\\n \\n \\n Create template from stack\\n \\n
\\n
\\n \\n\\n \\n
\\n
\\n Associate to this endpoint\\n
\\n

\\n This feature allows you to reassociate this stack to the current endpoint.\\n

\\n
\\n \\n
\\n
\\n \\n \\n Associate\\n Association in progress...\\n \\n {{ state.formValidationError }}\\n
\\n
\\n
\\n
\\n \\n\\n \\n 0\\\"\\n endpoints=\\\"endpoints\\\"\\n groups=\\\"groups\\\"\\n current-endpoint-id=\\\"currentEndpointId\\\"\\n on-duplicate=\\\"duplicateStack(name, endpointId)\\\"\\n on-migrate=\\\"migrateStack(name, endpointId)\\\"\\n yaml-error=\\\"state.yamlError\\\"\\n >\\n \\n
\\n
\\n \\n \\n \\n Editor \\n
\\n
\\n \\n This stack will be deployed using the equivalent of docker-compose. Only Compose file format version 2 is supported at the moment.\\n \\n 2\\\">\\n This stack will be deployed using docker-compose.\\n \\n \\n You can get more information about Compose file format in the official documentation.\\n \\n
\\n
\\n
\\n \\n
\\n
\\n \\n
\\n \\n
\\n \\n \\n
= 1.27\\\" authorization=\\\"PortainerStackUpdate\\\">\\n
\\n Options\\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n \\n
\\n
\\n Actions\\n
\\n
\\n
\\n \\n Update the stack\\n Deployment in progress...\\n \\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n\\n
\\n
\\n \\n
\\n
\\n\\n
\\n
\\n = 1.25\\\"\\n show-task-logs-button=\\\"applicationState.endpoint.apiVersion >= 1.30\\\"\\n show-add-action=\\\"false\\\"\\n show-stack-column=\\\"false\\\"\\n >\\n
\\n
\\n\\n\\n\\n\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/stacks/create/createstack.html';\nvar html = \"\\n \\n Stacks > Add stack \\n\\n\\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n This stack will be deployed using the equivalent of the docker stack deploy command.\\n \\n
\\n
\\n This stack will be deployed using the equivalent of docker-compose. Only Compose file format version 2 is supported at the moment.\\n
\\n \\n Note: Due to a limitation of libcompose, the name of the stack will be standardized to remove all special characters and uppercase letters.\\n
\\n 2\\\">\\n This stack will be deployed using docker-compose.\\n \\n
\\n \\n
\\n Build method\\n
\\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n
\\n
\\n \\n \\n
\\n
\\n Web editor\\n
\\n
\\n \\n You can get more information about Compose file format in the official documentation.\\n \\n
{{ state.editorYamlValidationError }}\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\n \\n
\\n
\\n Upload\\n
\\n
\\n \\n You can upload a Compose file from your computer.\\n \\n
{{ state.uploadYamlValidationError }}\\n
\\n
\\n
\\n \\n \\n {{ formValues.StackFile.name }}\\n \\n \\n
\\n
\\n
\\n \\n \\n \\n
\\n
\\n \\n
\\n \\n \\n \\n \\n No custom templates are available. Head over to the custom template view to create one.\\n \\n
\\n
\\n \\n
\\n
\\n Information\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n Web editor\\n
\\n
\\n
{{ state.editorYamlValidationError }}\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n
\\n Actions\\n
\\n
\\n
\\n \\n Deploy the stack\\n Deployment in progress...\\n \\n {{ state.formValidationError }}\\n
\\n
\\n \\n \\n \\n \\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/swarm/swarm.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Swarm\\n\\n\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
Nodes{{ info.Swarm.Nodes }}
Docker API version{{ docker.ApiVersion }}
Total CPU{{ totalCPU }}
Total memory{{ totalMemory | humansize: 2 }}
\\n \\n
\\n
\\n
\\n
\\n
\\n\\n
\\n
\\n = 1.25\\\"\\n access-to-node-details=\\\"isAdmin\\\"\\n refresh-callback=\\\"getNodes\\\"\\n >\\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/swarm/visualizer/swarmvisualizer.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Swarm > Cluster visualizer \\n\\n\\n
\\n
\\n \\n \\n
\\n \\n \\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
Nodes{{ nodes.length }}
Services{{ services.length }}
Tasks{{ tasks.length }}
\\n
\\n
\\n Options\\n
\\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n
\\n
\\n
\\n
\\n Refresh\\n
\\n
\\n \\n
\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n\\n
\\n
\\n \\n \\n \\n
\\n
\\n
\\n
\\n
\\n {{ node.Name || node.Hostname }}\\n \\n \\n \\n \\n
\\n
\\n
{{ node.Role }}
\\n
CPU: {{ node.CPUs / 1000000000 }}
\\n
Memory: {{ node.Memory | humansize: 2 }}
\\n {{ node.Status }}\\n
0 && state.DisplayNodeLabels\\\">\\n
Labels
\\n
\\n \\n {{ label.key }}\\n \\n = {{ label.value }} \\n
\\n
\\n
\\n
\\n \\n
{{ task.ServiceName }}
\\n
Image: {{ task.Spec.ContainerSpec.Image | hideshasum }}
\\n
Status: {{ task.Status.State }}
\\n
Update: {{ task.Updated | getisodate }}
\\n
Memory limit: {{ task.Spec.Resources.Limits.MemoryBytes | humansize: 2:2 }}
\\n
CPU limit: {{ task.Spec.Resources.Limits.NanoCPUs / 1000000000 }}
\\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/tasks/edit/task.html';\nvar html = \"\\n \\n \\n Services > {{ service.Name }} > {{ task.Id }}\\n \\n\\n\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ task.Status.State }}\\n \\n \\n \\n \\n \\n \\n \\n {{ task.Status.Err }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n = 1.3 && task.Status.State | taskhaslogs\\\">\\n \\n \\n
ID{{ task.Id }}
State
State Message{{ task.Status.Message }}
Error message
Image{{ task.Spec.ContainerSpec.Image | hideshasum }}
Slot{{ task.Slot }}
Created{{ task.Created | getisodate }}
Container ID{{ task.Status.ContainerStatus.ContainerID }}
Task logs\\n
\\n
\\n
\\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/tasks/logs/tasklogs.html';\nvar html = \"\\n \\n \\n Services > {{ service.Name }} >\\n {{ task.Id }} > Logs\\n \\n\\n\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/templates/templates.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Templates\\n\\n\\n
\\n \\n \\n \\n \\n \\n
\\n \\n \\n \\n
\\n \\n
\\n
\\n Information\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n Configuration\\n
\\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n \\n \\n \\n \\n
\\n \\n
\\n
\\n \\n \\n map additional port\\n \\n
\\n
0\\\">\\n Portainer will automatically assign a port if you leave the host port empty.\\n
\\n \\n \\n
\\n
\\n
\\n \\n
\\n host\\n \\n
\\n \\n \\n \\n \\n \\n
\\n container\\n \\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n map additional volume\\n \\n
\\n
0\\\">\\n Portainer will automatically create and map a local volume when using the auto option.\\n
\\n
\\n
\\n \\n
\\n \\n
\\n container\\n \\n
\\n \\n \\n
\\n
\\n \\n \\n \\n
\\n \\n
\\n \\n
\\n \\n \\n
\\n \\n \\n
\\n
\\n volume\\n
\\n \\n
\\n
\\n
\\n \\n \\n
\\n host\\n \\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n add additional entry\\n \\n
\\n \\n
\\n
\\n
\\n
\\n value\\n \\n
\\n \\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n add label\\n \\n
\\n \\n
\\n
\\n
\\n
\\n name\\n \\n
\\n
\\n value\\n \\n
\\n \\n
\\n
\\n
\\n \\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n \\n
\\n Actions\\n
\\n
\\n
\\n \\n Deploy the container\\n Deployment in progress...\\n \\n \\n {{ state.formValidationError }}\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n \\n
\\n\\n
\\n
\\n = 1.25\\\"\\n >\\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/volumes/volumes.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Volumes\\n\\n\\n
\\n
\\n \\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/volumes/edit/volume.html';\nvar html = \"\\n \\n \\n Volumes > {{ volume.Id }}\\n \\n\\n\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
ID\\n {{ volume.Id }}\\n
Created{{ volume.CreatedAt | getisodate }}
Mount path{{ volume.Mountpoint }}
Driver{{ volume.Driver }}
Labels\\n \\n \\n \\n \\n \\n
{{ k }}{{ v }}
\\n
\\n
\\n
\\n
\\n
\\n\\n
\\n
\\n \\n
\\n
\\n\\n
\\n
\\n \\n
\\n
\\n\\n
\\n
\\n \\n \\n
\\n
\\n\\n\\n \\n\\n\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
{{ key }}{{ value }}
\\n
\\n
\\n
\\n
\\n
0\\\">\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ container | containername }}\\n \\n \\n \\n \\n
Container NameMounted AtRead-only
{{ container.volumeData.Destination }}{{ !container.volumeData.RW }}
\\n
\\n
\\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/volumes/browse/browsevolume.html';\nvar html = \"\\n \\n \\n Volumes > {{ volumeId }} > browse\\n \\n\\n\\n
\\n
\\n 1\\\">\\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/volumes/create/createvolume.html';\nvar html = \"\\n \\n Volumes > Add volume \\n\\n\\n
\\n
\\n \\n \\n
\\n \\n
\\n \\n
\\n \\n
\\n
\\n \\n
\\n Driver configuration\\n
\\n \\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n add driver option\\n \\n
\\n \\n
\\n
\\n
\\n name\\n \\n
\\n
\\n value\\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n \\n
\\n \\n \\n
Ensure nfs-utils are installed on your hosts.
\\n
\\n \\n \\n \\n
\\n \\n \\n
Ensure cifs-utils are installed on your hosts.
\\n
\\n \\n \\n \\n
\\n
\\n Storidge\\n
\\n \\n
\\n \\n
\\n
\\n Deployment\\n
\\n \\n \\n \\n
\\n \\n \\n \\n \\n
\\n Actions\\n
\\n
\\n
\\n \\n Create the volume\\n Creating volume...\\n \\n {{ state.formValidationError }}\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/sidebar/sidebar.html';\nvar html = \"\\n
\\n
\\n \\n \\n \\\"Portainer\\\"\\n \\n \\n
\\n
\\n
    \\n
  • \\n Home \\n
  • \\n
  • {{ applicationState.endpoint.name }}
  • \\n \\n \\n \\n \\n
  • 0\\\">\\n Integrations\\n
  • \\n \\n Storidge \\n \\n Monitor\\n
\\n \\n Profiles\\n
\\n \\n Drives\\n
\\n \\n
  • \\n Edge Compute\\n
  • \\n
  • \\n Edge Groups \\n
  • \\n
  • \\n Edge Stacks \\n
  • \\n
  • \\n Edge Jobs \\n
  • \\n
  • \\n Settings\\n
  • \\n
  • \\n Users \\n \\n Teams\\n
  • \\n \\n Roles\\n \\n \\n
  • \\n Endpoints \\n \\n Groups\\n \\n \\n Tags\\n \\n
  • \\n
  • \\n Registries \\n
  • \\n
  • \\n Settings \\n
    \\n Authentication\\n
    \\n Help / About\\n
    \\n
  • \\n \\n \\n \\n\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","module.exports = __webpack_public_path__ + \"f461b0cc3c2692b7b8475389b6a051ec.png\";","module.exports = __webpack_public_path__ + \"24b23490023e318f9c08cf94253542a0.png\";","var path = 'app/portainer/views/account/account.html';\nvar html = \"\\n \\n User settings\\n\\n\\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n = 8]\\\" aria-hidden=\\\"true\\\">\\n Your new password must be at least 8 characters long\\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n Update password\\n \\n \\n You cannot change your password when using LDAP authentication.\\n \\n \\n \\n You cannot change your password when using OAuth authentication.\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/auth/auth.html';\nvar html = \"
    \\n \\n
    \\n
    \\n \\n
    \\n \\\"Portainer\\\"\\n \\n
    \\n \\n\\n \\n
    \\n
    \\n \\n
    \\n \\n\\n \\n
    \\n
    \\n
    or
    \\n
    \\n
    \\n\\n \\n
    \\n
    \\n
    \\n Use internal authentication\\n
    \\n
    \\n
    \\n\\n \\n
    \\n \\n \\n
    \\n\\n \\n
    \\n \\n \\n
    \\n\\n
    \\n \\n
    \\n \\n Login\\n Login in progress...\\n \\n
    \\n
    \\n
    \\n \\n\\n \\n
    \\n \\n {{ ctrl.state.AuthenticationError }}\\n
    \\n
    \\n
    \\n\\n \\n
    \\n
    \\n
    \\n Authentication in progress... \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/logout/logout.html';\nvar html = \"
    \\n \\n
    \\n
    \\n \\n
    \\n \\\"Portainer\\\"\\n \\n
    \\n
    \\n Logout in progress...\\n \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/endpoints/endpoints.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Endpoint management\\n\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/endpoints/edit/endpoint.html';\nvar html = \"\\n \\n \\n \\n \\n \\n \\n Endpoints > {{ endpoint.Name }}\\n \\n\\n\\n
    \\n \\n \\n

    \\n \\n This Edge endpoint is associated to an Edge environment {{ state.kubernetesEndpoint ? '(Kubernetes)' : '(Docker)' }}.\\n

    \\n

    \\n Edge key: {{ endpoint.EdgeKey }}\\n

    \\n

    \\n Edge identifier: {{ endpoint.EdgeID }}\\n

    \\n
    \\n
    \\n \\n \\n

    \\n \\n Refer to the platform related command below to deploy the Edge agent in your remote cluster.\\n

    \\n

    \\n The agent will communicate with Portainer via {{ edgeKeyDetails.instanceURL }} and tcp://{{ edgeKeyDetails.tunnelServerAddr }}\\n

    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n curl https://downloads.portainer.io/portainer-edge-agent-setup.sh | sudo bash -s -- {{ randomEdgeID }} {{ endpoint.EdgeKey }}\\n \\n \\n {{ dockerCommands.linuxSwarm }}\\n {{ dockerCommands.windowsSwarm }}\\n \\n \\n {{ dockerCommands.linuxStandalone }}\\n {{ dockerCommands.windowsStandalone }}\\n \\n \\n
    \\n Copy command\\n copied \\n
    \\n
    \\n
    \\n Join token\\n
    \\n

    \\n \\n For those prestaging the edge agent, use the following join token to associate the Edge agent with this endpoint.\\n

    \\n

    You can read more about pre-staging in the userguide available here.

    \\n
    \\n \\n {{ endpoint.EdgeKey }}\\n \\n
    \\n Copy token\\n copied \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n You should configure the features available in this Kubernetes environment in the\\n Kubernetes configuration view.\\n \\n \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n Configuration\\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n Metadata\\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n Security\\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n Update endpoint\\n Updating endpoint...\\n \\n Cancel\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/kubernetes/views/configure/configure.html';\nvar html = \"\\n Endpoints > {{ ctrl.endpoint.Name }} > Kubernetes configuration\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n Networking\\n
    \\n\\n
    \\n \\n Enabling the load balancer feature will allow users to expose application they deploy over an external IP address assigned by cloud provider.\\n

    \\n \\n Ensure that your cloud provider allows you to create load balancers if you want to use this feature. Might incur costs.\\n

    \\n
    \\n\\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n \\n Configuring ingress controllers will allow users to expose application they deploy over a HTTP route.
    \\n

    \\n \\n Ingress classes must be manually specified for each controller you want to use in the cluster. Make sure that each controller is running inside your cluster.\\n

    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n configure ingress controller\\n \\n
    \\n\\n
    \\n
    \\n
    \\n Ingress class\\n \\n
    \\n
    \\n Type\\n \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n \\n
    \\n \\n
    \\n

    Ingress class name is required.

    \\n

    This field must consist of lower case alphanumeric characters or '-', start with an\\n alphabetic character, and end with an alphanumeric character (e.g. 'my-name', or 'abc-123').\\n

    \\n

    \\n This ingress class is already defined.\\n

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    Ingress class type is required.

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n \\n

    \\n \\n Traefik support is experimental.\\n

    \\n
    \\n
    \\n\\n
    \\n Security\\n
    \\n\\n
    \\n \\n By default, all the users have access to the default namespace. Enable this option to set accesses on the default namespace.\\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n This feature is available in Portainer Business Edition.\\n \\n
    \\n
    \\n\\n
    \\n Resources and Metrics\\n
    \\n\\n
    \\n \\n By ENABLING resource over-commit, you are able to assign more resources to namespaces than is physically available in the cluster. This may lead to unexpected\\n deployment failures if there is insufficient resource to service demand.\\n

    \\n \\n By DISABLING resource over-commit (highly recommended), you are only able to assign resources to namespaces that are less (in aggregate) than the cluster total\\n minus any system resource reservation.\\n

    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n This feature is available in Portainer Business Edition.\\n \\n
    \\n
    \\n\\n
    \\n \\n Enabling this feature will allow users to use specific features that leverage the metrics server component.\\n

    \\n \\n Ensure that metrics server is\\n running inside your cluster.\\n

    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n Checking metrics API... \\n
    \\n \\n Successfully reached metrics API\\n
    \\n \\n Unable to reach metrics API, make sure metrics server is properly deployed inside\\n that cluster.\\n
    \\n \\n\\n
    \\n Available storage options\\n
    \\n\\n
    \\n
    \\n \\n Unable to detect any storage class available to persist data. Users won't be able to persist application data inside this cluster.\\n
    \\n
    \\n\\n
    \\n \\n

    \\n Select which storage options will be available for use when deploying applications. Have a look at your storage driver documentation to figure out which access\\n policy to configure and if the volume expansion capability is supported.\\n

    \\n

    \\n You can find more information about access modes\\n in the official Kubernetes documentation.\\n

    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    StorageShared access policyVolume expansion
    \\n
    \\n \\n {{ class.Name }}\\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n Shared access policy configuration required\\n \\n
    \\n
    \\n\\n
    \\n Actions\\n
    \\n \\n
    \\n
    \\n \\n Save configuration\\n Saving configuration...\\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/endpoints/create/createendpoint.html';\nvar html = \"\\n \\n Endpoints > Add endpoint \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n Environment type\\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n Important notice\\n
    \\n
    \\n

    \\n You can connect Portainer to a Docker environment via socket or via TCP. You can find more information about how to expose the Docker API over TCP\\n in the Docker documentation.\\n

    \\n\\n

    \\n When using the socket, ensure that you have started the Portainer container with the following Docker flag\\n -v \\\"/var/run/docker.sock:/var/run/docker.sock\\\" \\n (on Linux) or\\n -v \\\\.\\\\pipe\\\\docker_engine:\\\\.\\\\pipe\\\\docker_engine \\n (on Windows).\\n

    \\n
    \\n
    \\n
    \\n
    \\n Information\\n
    \\n
    \\n \\n Ensure that you have deployed the Portainer agent in your cluster first. Refer to the platform related command below to deploy it.\\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n {{ deployCommands.kubeLoadBalancer }}\\n \\n\\n \\n {{ deployCommands.kubeNodePort }}\\n \\n\\n \\n {{ deployCommands.agentLinux }}\\n {{ deployCommands.agentWindows }}\\n \\n \\n
    \\n Copy command\\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Information\\n
    \\n
    \\n \\n

    \\n Allows you to create an endpoint that can be registered with an Edge agent. The Edge agent will initiate the communications with the Portainer instance. All the\\n required information on how to connect an Edge agent to this endpoint will be available after endpoint creation.\\n

    \\n

    You can read more about the Edge agent in the userguide available here.

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Important notice\\n
    \\n
    \\n

    \\n This will allow you to manage the Kubernetes environment where Portainer is running.\\n

    \\n\\n

    \\n \\n In order to manage a remote Kubernetes environment, please use the Agent or Edge agent options.\\n

    \\n
    \\n
    \\n
    \\n
    \\n Information\\n
    \\n
    \\n
    \\n \\n

    This feature is experimental.

    \\n

    \\n Connect to Microsoft Azure to manage Azure Container Instances (ACI).\\n

    \\n

    \\n \\n Have a look at\\n the Azure documentation\\n to retrieve the credentials required below.\\n

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Environment details\\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n\\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n \\n \\n \\n
    \\n Metadata\\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n \\n
    \\n \\n
    \\n Actions\\n
    \\n \\n
    \\n
    \\n \\n Add endpoint\\n Creating endpoint...\\n \\n \\n Add endpoint\\n Creating endpoint...\\n \\n \\n Add endpoint\\n Creating endpoint...\\n \\n \\n Add endpoint\\n Creating endpoint...\\n \\n \\n Add endpoint\\n Creating endpoint...\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/endpoints/access/endpointAccess.html';\nvar html = \"\\n \\n \\n Endpoints > {{ ctrl.endpoint.Name }} > Access management\\n \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Name\\n {{ ctrl.endpoint.Name }}\\n
    URL\\n {{ ctrl.endpoint.URL | stripprotocol }}\\n
    Group\\n {{ ctrl.group.Name }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/groups/groups.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Endpoint group management\\n\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/groups/edit/group.html';\nvar html = \"\\n \\n Groups > {{ ::group.Name }} \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/groups/create/creategroup.html';\nvar html = \"\\n \\n Endpoint groups > Add group \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/groups/access/groupAccess.html';\nvar html = \"\\n \\n \\n Groups > {{ group.Name }} > Access management\\n \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Name\\n {{ group.Name }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/home/home.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Endpoints\\n\\n\\n\\n\\n\\n\\n\\n\\n \\n

    \\n \\n You do not have access to any environment. Please contact your administrator.\\n

    \\n
    \\n
    \\n\\n\\n Connecting to the Edge endpoint...\\n \\n\\n\\n\\n \\n

    \\n \\n No environment available for management. Please head over the\\n endpoints view \\n to add an endpoint.\\n

    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/init/endpoint/initEndpoint.html';\nvar html = \"
    \\n \\n
    \\n
    \\n \\n
    \\n \\n \\\"Portainer\\\"\\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n Connect Portainer to the container environment you want to manage.\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n Connect\\n Connecting...\\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/init/admin/initAdmin.html';\nvar html = \"
    \\n \\n
    \\n
    \\n \\n
    \\n \\n \\\"Portainer\\\"\\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n\\n \\n
    \\n \\n
    \\n
    \\n \\n Please create the initial administrator user.\\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n = 8]\\\" aria-hidden=\\\"true\\\">\\n The password must be at least 8 characters long\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n Create user\\n Creating user...\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n Allow collection of anonymous statistics. You can find more information about this in our\\n privacy policy.\\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n\\n \\n
    \\n
    \\n \\n \\n \\n\\n \\n
    \\n \\n
    \\n
    \\n \\n This will restore the Portainer metadata which contains information about the endpoints, stacks and applications, as well as the configured users.\\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n You can upload a backup file from your computer.\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n {{ formValues.BackupFile.name }}\\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n You are about to restore Portainer from this backup.\\n \\n
    \\n
    \\n \\n After restoring has completed, please log in as a user that was known by the Portainer that was restored.\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n Restore Portainer\\n Restoring Portainer...\\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/registries/registries.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Registry management\\n\\n\\n\\n \\n

    \\n \\n DockerHub credentials and registries can only be used with Docker endpoints at the time.\\n

    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n \\n The DockerHub registry can be used by any user. You can specify the credentials that will be used to push & pull images here.\\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n Update\\n Updating DockerHub settings...\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/registries/edit/registry.html';\nvar html = \"\\n \\n \\n Registries > {{ registry.Name }}\\n \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n\\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n Update registry\\n Updating registry...\\n \\n Cancel\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/registries/create/createregistry.html';\nvar html = \"\\n \\n Registries > Add registry \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n Registry provider\\n
    \\n\\n
    \\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\\n \\n\\n \\n\\n \\n\\n \\n \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/registries/access/registryAccess.html';\nvar html = \"\\n \\n \\n Registries > {{ registry.Name }} > Access management\\n \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Name\\n {{ registry.Name }}\\n
    URL\\n {{ registry.URL }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/settings/settings.html';\nvar html = \"\\n \\n Settings\\n\\n\\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n You can find more information about this in our\\n privacy policy.\\n
    \\n
    \\n
    \\n
    \\n \\n You can specify the URL to your logo here. For an optimal display, logo dimensions should be 155px by 55px.\\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n App Templates\\n
    \\n
    \\n
    \\n \\n You can specify the URL to your own template definitions file here. See\\n Portainer documentation for more details.\\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n\\n \\n
    \\n Edge Compute\\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n Save settings\\n Saving...\\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n \\n You can hide containers with specific labels from Portainer UI. You need to specify the label name and value.\\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    NameValue
    {{ label.name }}{{ label.value }}
    No filter available.
    Loading...
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n Backup configuration\\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Security settings\\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n\\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n\\n \\n
    \\n
    \\n \\n Download backup\\n Downloading backup\\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/settings/authentication/settingsAuthentication.html';\nvar html = \"\\n \\n Settings > Authentication \\n\\n\\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n Configuration\\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n Changing from default is only recommended if you have additional layers of authentication in front of Portainer.\\n \\n
    \\n
    \\n Authentication method\\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n Information\\n
    \\n
    \\n When using internal authentication, Portainer will encrypt user passwords and store credentials locally.\\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n Information\\n
    \\n
    \\n When using LDAP authentication, Portainer will delegate user authentication to a LDAP server and fallback to internal authentication if LDAP authentication fails.\\n
    \\n
    \\n\\n
    \\n LDAP configuration\\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n\\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n Test connectivity\\n Testing connectivity...\\n \\n
    \\n
    \\n\\n
    \\n LDAP security\\n
    \\n\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n\\n \\n
    \\n \\n
    \\n \\n
    \\n \\n \\n {{ formValues.TLSCACert.name }}\\n \\n \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n\\n
    \\n \\n
    \\n Test connectivity\\n \\n
    \\n
    \\n\\n
    \\n Automatic user provisioning\\n
    \\n
    \\n \\n With automatic user provisioning enabled, Portainer will create user(s) automatically with standard user role and assign them to team(s) which matches to LDAP group\\n name(s). If disabled, users must be created in Portainer beforehand.\\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n User search configurations\\n
    \\n\\n \\n
    \\n
    0\\\">\\n \\n Extra search configuration\\n \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n\\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    0\\\">\\n \\n
    \\n
    \\n\\n
    \\n \\n add user search configuration\\n \\n
    \\n
    \\n \\n\\n
    \\n Group search configurations\\n
    \\n\\n \\n
    \\n
    0\\\">\\n \\n Extra search configuration\\n \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n\\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    0\\\">\\n \\n
    \\n
    \\n\\n
    \\n \\n add group search configuration\\n \\n
    \\n
    \\n \\n
    \\n\\n
    \\n
    \\n Provider\\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\\n \\n\\n \\n
    \\n Actions\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/tags/tags.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Tag management\\n\\n\\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n

    This tag already exists.

    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n Create tag\\n Creating tag...\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/users/users.html';\nvar html = \"\\n \\n \\n \\n \\n \\n User management\\n\\n\\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n You don't seem to have any teams to add users into. Head over to the Teams view to create some.\\n \\n 0\\\"\\n input-model=\\\"teams\\\"\\n output-model=\\\"formValues.Teams\\\"\\n button-label=\\\"Name\\\"\\n item-label=\\\"Name\\\"\\n tick-property=\\\"ticked\\\"\\n helper-elements=\\\"filter\\\"\\n search-property=\\\"Name\\\"\\n translation=\\\"{nothingSelected: 'Select one or more teams', search: 'Search...'}\\\"\\n style=\\\"margin-left: 20px;\\\"\\n >\\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n Note: non-administrator users who aren't in a team don't have access to any endpoints by default. Head over to the\\n Endpoints view to manage their accesses.\\n \\n
    \\n
    \\n
    \\n
    \\n \\n Create user\\n Creating user...\\n \\n \\n {{ state.userCreationError }}\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/users/edit/user.html';\nvar html = \"\\n \\n \\n Users > {{ formValues.username }}\\n \\n\\n\\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n Update password\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/teams/teams.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Teams management\\n\\n\\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n

    This team already exists.

    \\n
    \\n
    \\n
    \\n \\n \\n
    0\\\">\\n
    \\n \\n 0\\\"\\n input-model=\\\"users\\\"\\n output-model=\\\"formValues.Leaders\\\"\\n button-label=\\\"Username\\\"\\n item-label=\\\"Username\\\"\\n tick-property=\\\"ticked\\\"\\n helper-elements=\\\"filter\\\"\\n search-property=\\\"Username\\\"\\n translation=\\\"{nothingSelected: 'Select one or more team leaders', search: 'Search...'}\\\"\\n style=\\\"margin-left: 20px;\\\"\\n >\\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n Create team\\n Creating team...\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/teams/edit/team.html';\nvar html = \"\\n \\n \\n Teams > {{ team.Name }}\\n \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Name\\n {{ team.Name }}\\n
    Leaders{{ leaderCount }}
    Total users in team{{ teamMembers.length }}
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n Items per page:\\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Name\\n \\n \\n \\n
    \\n {{ user.Username }}\\n \\n Add\\n \\n
    Loading...
    No users.
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n Items per page:\\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Name\\n \\n \\n \\n \\n \\n Team Role\\n \\n \\n \\n
    \\n {{ user.Username }}\\n \\n Remove\\n \\n \\n \\n \\n {{ user.TeamRole }}\\n \\n Leader\\n Member\\n \\n
    Loading...
    No team members.
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/roles/roles.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Role management\\n\\n\\n\\n \\n

    \\n \\n This feature is available in Portainer Business Edition.\\n

    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n User\\n
    \\n
    \\n
    \\n \\n No user available\\n \\n
    \\n
    \\n\\n
    \\n Access\\n
    \\n
    \\n
    \\n \\n Effective role for each endpoint will be displayed for the selected user\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/components/forms/git-form/git-form.html';\nvar html = \"
    \\n
    \\n Git repository\\n
    \\n \\n \\n \\n \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/components/forms/git-form/git-form-auth-fieldset/git-form-auth-fieldset.html';\nvar html = \"
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n If your git account has 2FA enabled, you may receive an authentication required error when deploying your stack. In this case, you will need to provide a\\n personal-access token instead of your password.\\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/components/forms/git-form/git-form-compose-path-field/git-form-compose-path-field.html';\nvar html = \"
    \\n \\n Indicate the path to the Compose file from the root of your repository.\\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/components/forms/git-form/git-form-ref-field/git-form-ref-field.html';\nvar html = \"
    \\n \\n Specify a reference of the repository using the following syntax: branches with refs/heads/branch_name or tags with refs/tags/tag_name. If not\\n specified, will use the default HEAD reference normally the master branch.\\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/components/forms/git-form/git-form-url-field/git-form-url-field.html';\nvar html = \"
    \\n \\n You can use the URL of a git repository.\\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var map = {\n\t\"./__module.js\": 498,\n\t\"./agent/components/file-uploader/fileUploaderController.js\": 407,\n\t\"./agent/components/file-uploader/index.js\": 853,\n\t\"./agent/components/files-datatable/index.js\": 855,\n\t\"./agent/components/host-browser/hostBrowserController.js\": 408,\n\t\"./agent/components/host-browser/index.js\": 857,\n\t\"./agent/components/node-selector/index.js\": 859,\n\t\"./agent/components/node-selector/nodeSelectorController.js\": 409,\n\t\"./agent/components/volume-browser/index.js\": 861,\n\t\"./agent/components/volume-browser/volumeBrowserController.js\": 410,\n\t\"./agent/index.js\": 530,\n\t\"./agent/models/agent.js\": 411,\n\t\"./agent/rest/agent.js\": 863,\n\t\"./agent/rest/browse.js\": 864,\n\t\"./agent/rest/dockerhub.js\": 865,\n\t\"./agent/rest/host.js\": 866,\n\t\"./agent/rest/ping.js\": 867,\n\t\"./agent/rest/response/browse.js\": 247,\n\t\"./agent/rest/v1/agent.js\": 868,\n\t\"./agent/rest/v1/browse.js\": 869,\n\t\"./agent/services/agentService.js\": 870,\n\t\"./agent/services/hostBrowserService.js\": 871,\n\t\"./agent/services/pingService.js\": 872,\n\t\"./agent/services/volumeBrowserService.js\": 873,\n\t\"./app.js\": 874,\n\t\"./assets/css/index.js\": 527,\n\t\"./assets/js/angulartics-matomo.js\": 529,\n\t\"./azure/_module.js\": 531,\n\t\"./azure/components/azure-endpoint-config/azure-endpoint-config.js\": 875,\n\t\"./azure/components/azure-sidebar-content/azure-sidebar-content.js\": 877,\n\t\"./azure/components/datatables/containergroups-datatable/containerGroupsDatatable.js\": 879,\n\t\"./azure/models/container_group.js\": 183,\n\t\"./azure/models/location.js\": 412,\n\t\"./azure/models/provider.js\": 413,\n\t\"./azure/models/resource_group.js\": 306,\n\t\"./azure/models/subscription.js\": 307,\n\t\"./azure/rest/azure.js\": 881,\n\t\"./azure/rest/container_group.js\": 882,\n\t\"./azure/rest/location.js\": 883,\n\t\"./azure/rest/provider.js\": 884,\n\t\"./azure/rest/resource_group.js\": 885,\n\t\"./azure/rest/subscription.js\": 886,\n\t\"./azure/services/azureService.js\": 887,\n\t\"./azure/services/containerGroupService.js\": 888,\n\t\"./azure/services/locationService.js\": 889,\n\t\"./azure/services/providerService.js\": 890,\n\t\"./azure/services/resourceGroupService.js\": 891,\n\t\"./azure/services/subscriptionService.js\": 892,\n\t\"./azure/views/containerinstances/container-instance-details/containerInstanceDetailsController.js\": 414,\n\t\"./azure/views/containerinstances/container-instance-details/index.js\": 893,\n\t\"./azure/views/containerinstances/containerInstancesController.js\": 895,\n\t\"./azure/views/containerinstances/create/createContainerInstanceController.js\": 896,\n\t\"./azure/views/dashboard/dashboardController.js\": 897,\n\t\"./config.js\": 898,\n\t\"./constants.js\": 415,\n\t\"./docker/__module.js\": 532,\n\t\"./docker/components/container-capabilities/container-capabilities.js\": 936,\n\t\"./docker/components/container-quick-actions/containerQuickActions.js\": 938,\n\t\"./docker/components/container-restart-policy/container-restart-policy-controller.js\": 940,\n\t\"./docker/components/container-restart-policy/container-restart-policy.js\": 941,\n\t\"./docker/components/dashboard-cluster-agent-info/dashboard-cluster-agent-info.js\": 943,\n\t\"./docker/components/dashboard-cluster-agent-info/dashboardClusterAgentInfoController.js\": 945,\n\t\"./docker/components/datatables/configs-datatable/configsDatatable.js\": 946,\n\t\"./docker/components/datatables/container-networks-datatable/containerNetworksDatatable.js\": 948,\n\t\"./docker/components/datatables/container-networks-datatable/containerNetworksDatatableController.js\": 950,\n\t\"./docker/components/datatables/container-processes-datatable/containerProcessesDatatable.js\": 951,\n\t\"./docker/components/datatables/containers-datatable/actions/containersDatatableActions.js\": 953,\n\t\"./docker/components/datatables/containers-datatable/actions/containersDatatableActionsController.js\": 955,\n\t\"./docker/components/datatables/containers-datatable/containersDatatable.js\": 956,\n\t\"./docker/components/datatables/containers-datatable/containersDatatableController.js\": 958,\n\t\"./docker/components/datatables/events-datatable/eventsDatatable.js\": 959,\n\t\"./docker/components/datatables/images-datatable/imagesDatatable.js\": 961,\n\t\"./docker/components/datatables/images-datatable/imagesDatatableController.js\": 963,\n\t\"./docker/components/datatables/macvlan-nodes-datatable/macvlanNodesDatatable.js\": 964,\n\t\"./docker/components/datatables/networks-datatable/network-row-content/networkRowContent.js\": 966,\n\t\"./docker/components/datatables/networks-datatable/networksDatatable.js\": 968,\n\t\"./docker/components/datatables/networks-datatable/networksDatatableController.js\": 970,\n\t\"./docker/components/datatables/node-tasks-datatable/nodeTasksDatatable.js\": 971,\n\t\"./docker/components/datatables/nodes-datatable/nodesDatatable.js\": 973,\n\t\"./docker/components/datatables/secrets-datatable/secretsDatatable.js\": 975,\n\t\"./docker/components/datatables/service-tasks-datatable/serviceTasksDatatable.js\": 977,\n\t\"./docker/components/datatables/service-tasks-datatable/serviceTasksDatatableController.js\": 979,\n\t\"./docker/components/datatables/services-datatable/actions/servicesDatatableActions.js\": 980,\n\t\"./docker/components/datatables/services-datatable/actions/servicesDatatableActionsController.js\": 982,\n\t\"./docker/components/datatables/services-datatable/servicesDatatable.js\": 983,\n\t\"./docker/components/datatables/services-datatable/servicesDatatableController.js\": 985,\n\t\"./docker/components/datatables/tasks-datatable/tasksDatatable.js\": 986,\n\t\"./docker/components/datatables/tasks-datatable/tasksDatatableController.js\": 988,\n\t\"./docker/components/datatables/volumes-datatable/volumesDatatable.js\": 989,\n\t\"./docker/components/datatables/volumes-datatable/volumesDatatableController.js\": 991,\n\t\"./docker/components/dockerSidebarContent/docker-sidebar-content.js\": 992,\n\t\"./docker/components/host-overview/host-overview.js\": 994,\n\t\"./docker/components/host-view-panels/devices-panel/devices-panel.js\": 996,\n\t\"./docker/components/host-view-panels/disks-panel/disks-panel.js\": 998,\n\t\"./docker/components/host-view-panels/engine-details-panel/engine-details-panel.js\": 1000,\n\t\"./docker/components/host-view-panels/host-details-panel/host-details-panel.js\": 1002,\n\t\"./docker/components/host-view-panels/node-availability-select/node-availability-select-controller.js\": 1004,\n\t\"./docker/components/host-view-panels/node-availability-select/node-availability-select.js\": 1005,\n\t\"./docker/components/host-view-panels/node-labels-table/node-labels-table-controller.js\": 1007,\n\t\"./docker/components/host-view-panels/node-labels-table/node-labels-table.js\": 1008,\n\t\"./docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js\": 1010,\n\t\"./docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js\": 1011,\n\t\"./docker/components/imageRegistry/por-image-registry-rate-limits.controller.js\": 416,\n\t\"./docker/components/imageRegistry/por-image-registry-rate-limits.js\": 1013,\n\t\"./docker/components/imageRegistry/por-image-registry.controller.js\": 1015,\n\t\"./docker/components/imageRegistry/por-image-registry.js\": 1016,\n\t\"./docker/components/log-viewer/log-viewer.js\": 1018,\n\t\"./docker/components/log-viewer/logViewerController.js\": 1020,\n\t\"./docker/components/network-macvlan-form/network-macvlan-form.js\": 1022,\n\t\"./docker/components/network-macvlan-form/networkMacvlanFormController.js\": 1024,\n\t\"./docker/components/network-macvlan-form/networkMacvlanFormModel.js\": 417,\n\t\"./docker/components/volumesCIFSForm/volumesCifsForm.js\": 1025,\n\t\"./docker/components/volumesCIFSForm/volumesCifsFormModel.js\": 418,\n\t\"./docker/components/volumesNFSForm/volumes-nfs-form.js\": 1027,\n\t\"./docker/components/volumesNFSForm/volumesNFSFormModel.js\": 419,\n\t\"./docker/filters/filters.js\": 1029,\n\t\"./docker/helpers/configHelper.js\": 1030,\n\t\"./docker/helpers/constraintsHelper.js\": 1031,\n\t\"./docker/helpers/containerHelper.js\": 1032,\n\t\"./docker/helpers/imageHelper.js\": 1033,\n\t\"./docker/helpers/infoHelper.js\": 1034,\n\t\"./docker/helpers/labelHelper.js\": 1035,\n\t\"./docker/helpers/logHelper.js\": 1036,\n\t\"./docker/helpers/networkHelper.js\": 187,\n\t\"./docker/helpers/nodeHelper.js\": 1041,\n\t\"./docker/helpers/secretHelper.js\": 1042,\n\t\"./docker/helpers/serviceHelper.js\": 1043,\n\t\"./docker/helpers/taskHelper.js\": 1044,\n\t\"./docker/helpers/volumeHelper.js\": 1045,\n\t\"./docker/interceptors/containersInterceptor.js\": 1046,\n\t\"./docker/interceptors/imagesInterceptor.js\": 1047,\n\t\"./docker/interceptors/infoInterceptor.js\": 1048,\n\t\"./docker/interceptors/networksInterceptor.js\": 1049,\n\t\"./docker/interceptors/versionInterceptor.js\": 1050,\n\t\"./docker/interceptors/volumesInterceptor.js\": 1051,\n\t\"./docker/models/config.js\": 314,\n\t\"./docker/models/container.js\": 188,\n\t\"./docker/models/containerCapabilities.js\": 231,\n\t\"./docker/models/event.js\": 420,\n\t\"./docker/models/image.js\": 189,\n\t\"./docker/models/imageDetails.js\": 421,\n\t\"./docker/models/imageLayer.js\": 422,\n\t\"./docker/models/network.js\": 315,\n\t\"./docker/models/node.js\": 316,\n\t\"./docker/models/plugin.js\": 423,\n\t\"./docker/models/porImageRegistry.js\": 75,\n\t\"./docker/models/secret.js\": 317,\n\t\"./docker/models/service.js\": 318,\n\t\"./docker/models/swarm.js\": 424,\n\t\"./docker/models/task.js\": 319,\n\t\"./docker/models/volume.js\": 254,\n\t\"./docker/rest/build.js\": 1052,\n\t\"./docker/rest/commit.js\": 1053,\n\t\"./docker/rest/config.js\": 1054,\n\t\"./docker/rest/container.js\": 1055,\n\t\"./docker/rest/exec.js\": 1056,\n\t\"./docker/rest/image.js\": 1057,\n\t\"./docker/rest/network.js\": 1058,\n\t\"./docker/rest/node.js\": 1059,\n\t\"./docker/rest/plugin.js\": 1060,\n\t\"./docker/rest/response/handlers.js\": 28,\n\t\"./docker/rest/response/image.js\": 425,\n\t\"./docker/rest/secret.js\": 1061,\n\t\"./docker/rest/service.js\": 1062,\n\t\"./docker/rest/swarm.js\": 1063,\n\t\"./docker/rest/system.js\": 1064,\n\t\"./docker/rest/systemEndpoint.js\": 1065,\n\t\"./docker/rest/task.js\": 1066,\n\t\"./docker/rest/volume.js\": 1067,\n\t\"./docker/services/buildService.js\": 1068,\n\t\"./docker/services/configService.js\": 1069,\n\t\"./docker/services/containerService.js\": 1070,\n\t\"./docker/services/execService.js\": 1071,\n\t\"./docker/services/imageService.js\": 1072,\n\t\"./docker/services/networkService.js\": 1073,\n\t\"./docker/services/nodeService.js\": 1074,\n\t\"./docker/services/pluginService.js\": 1075,\n\t\"./docker/services/secretService.js\": 1076,\n\t\"./docker/services/serviceService.js\": 1077,\n\t\"./docker/services/swarmService.js\": 1078,\n\t\"./docker/services/systemService.js\": 1079,\n\t\"./docker/services/taskService.js\": 1080,\n\t\"./docker/services/volumeService.js\": 1081,\n\t\"./docker/views/configs/configsController.js\": 1082,\n\t\"./docker/views/configs/create/createConfigController.js\": 1083,\n\t\"./docker/views/configs/edit/configController.js\": 1084,\n\t\"./docker/views/containers/console/containerConsoleController.js\": 1085,\n\t\"./docker/views/containers/containersController.js\": 1086,\n\t\"./docker/views/containers/create/createContainerController.js\": 1087,\n\t\"./docker/views/containers/edit/containerController.js\": 1088,\n\t\"./docker/views/containers/inspect/containerInspectController.js\": 1089,\n\t\"./docker/views/containers/logs/containerLogsController.js\": 1090,\n\t\"./docker/views/containers/stats/containerStatsController.js\": 1091,\n\t\"./docker/views/dashboard/dashboardController.js\": 1092,\n\t\"./docker/views/docker-features-configuration/docker-features-configuration.controller.js\": 426,\n\t\"./docker/views/docker-features-configuration/index.js\": 1135,\n\t\"./docker/views/events/eventsController.js\": 1137,\n\t\"./docker/views/host/host-browser-view/host-browser-view-controller.js\": 1138,\n\t\"./docker/views/host/host-browser-view/host-browser-view.js\": 1139,\n\t\"./docker/views/host/host-view-controller.js\": 1141,\n\t\"./docker/views/host/host-view.js\": 1142,\n\t\"./docker/views/images/build/buildImageController.js\": 1144,\n\t\"./docker/views/images/edit/imageController.js\": 1145,\n\t\"./docker/views/images/imagesController.js\": 1146,\n\t\"./docker/views/images/import/importImageController.js\": 1147,\n\t\"./docker/views/networks/create/createNetworkController.js\": 1148,\n\t\"./docker/views/networks/edit/networkController.js\": 1149,\n\t\"./docker/views/networks/networksController.js\": 1150,\n\t\"./docker/views/nodes/node-browser/node-browser-controller.js\": 1151,\n\t\"./docker/views/nodes/node-browser/node-browser.js\": 1152,\n\t\"./docker/views/nodes/node-details/node-details-view-controller.js\": 1154,\n\t\"./docker/views/nodes/node-details/node-details-view.js\": 1155,\n\t\"./docker/views/secrets/create/createSecretController.js\": 1157,\n\t\"./docker/views/secrets/edit/secretController.js\": 1158,\n\t\"./docker/views/secrets/secretsController.js\": 1159,\n\t\"./docker/views/services/create/createServiceController.js\": 1160,\n\t\"./docker/views/services/edit/serviceController.js\": 1165,\n\t\"./docker/views/services/logs/serviceLogsController.js\": 1184,\n\t\"./docker/views/services/servicesController.js\": 1185,\n\t\"./docker/views/swarm/swarmController.js\": 1186,\n\t\"./docker/views/swarm/visualizer/swarmVisualizerController.js\": 1187,\n\t\"./docker/views/tasks/edit/taskController.js\": 1188,\n\t\"./docker/views/tasks/logs/taskLogsController.js\": 1189,\n\t\"./docker/views/volumes/browse/browseVolumeController.js\": 1190,\n\t\"./docker/views/volumes/create/createVolumeController.js\": 1191,\n\t\"./docker/views/volumes/edit/volumeController.js\": 1192,\n\t\"./docker/views/volumes/volumesController.js\": 1193,\n\t\"./edge/__module.js\": 533,\n\t\"./edge/components/associated-endpoints-datatable/associatedEndpointsDatatableController.js\": 427,\n\t\"./edge/components/associated-endpoints-datatable/index.js\": 1194,\n\t\"./edge/components/edge-groups-selector/index.js\": 1196,\n\t\"./edge/components/edge-job-form/edgeJobFormController.js\": 428,\n\t\"./edge/components/edge-job-form/index.js\": 1198,\n\t\"./edge/components/edge-job-results-datatable/edgeJobResultsDatatableController.js\": 429,\n\t\"./edge/components/edge-job-results-datatable/index.js\": 1200,\n\t\"./edge/components/edge-jobs-datatable/index.js\": 1203,\n\t\"./edge/components/edge-stack-endpoints-datatable/edgeStackEndpointsDatatableController.js\": 430,\n\t\"./edge/components/edge-stack-endpoints-datatable/index.js\": 1205,\n\t\"./edge/components/edge-stack-status/edgeStackStatusController.js\": 431,\n\t\"./edge/components/edge-stack-status/index.js\": 1207,\n\t\"./edge/components/edge-stacks-datatable/index.js\": 1210,\n\t\"./edge/components/edit-edge-stack-form/editEdgeStackFormController.js\": 432,\n\t\"./edge/components/edit-edge-stack-form/index.js\": 1212,\n\t\"./edge/components/group-form/groupFormController.js\": 433,\n\t\"./edge/components/group-form/index.js\": 1214,\n\t\"./edge/components/groups-datatable/groupsDatatableController.js\": 434,\n\t\"./edge/components/groups-datatable/index.js\": 1216,\n\t\"./edge/rest/edge-groups.js\": 1218,\n\t\"./edge/rest/edge-job-results.js\": 1219,\n\t\"./edge/rest/edge-jobs.js\": 1220,\n\t\"./edge/rest/edge-stacks.js\": 1221,\n\t\"./edge/rest/edge-templates.js\": 1222,\n\t\"./edge/services/edge-group.js\": 1223,\n\t\"./edge/services/edge-job.js\": 1224,\n\t\"./edge/services/edge-stack.js\": 1225,\n\t\"./edge/services/edge-template.js\": 1226,\n\t\"./edge/views/edge-groups/createEdgeGroupView/createEdgeGroupViewController.js\": 435,\n\t\"./edge/views/edge-groups/createEdgeGroupView/index.js\": 1227,\n\t\"./edge/views/edge-groups/edgeGroupsView/edgeGroupsViewController.js\": 436,\n\t\"./edge/views/edge-groups/edgeGroupsView/index.js\": 1229,\n\t\"./edge/views/edge-groups/editEdgeGroupView/editEdgeGroupViewController.js\": 437,\n\t\"./edge/views/edge-groups/editEdgeGroupView/index.js\": 1231,\n\t\"./edge/views/edge-jobs/createEdgeJobView/createEdgeJobViewController.js\": 438,\n\t\"./edge/views/edge-jobs/createEdgeJobView/index.js\": 1233,\n\t\"./edge/views/edge-jobs/edgeJob/edgeJobController.js\": 439,\n\t\"./edge/views/edge-jobs/edgeJob/index.js\": 1235,\n\t\"./edge/views/edge-jobs/edgeJobsView/edgeJobsViewController.js\": 440,\n\t\"./edge/views/edge-jobs/edgeJobsView/index.js\": 1237,\n\t\"./edge/views/edge-stacks/createEdgeStackView/createEdgeStackViewController.js\": 441,\n\t\"./edge/views/edge-stacks/createEdgeStackView/index.js\": 1239,\n\t\"./edge/views/edge-stacks/edgeStacksView/edgeStacksViewController.js\": 442,\n\t\"./edge/views/edge-stacks/edgeStacksView/index.js\": 1241,\n\t\"./edge/views/edge-stacks/editEdgeStackView/editEdgeStackViewController.js\": 443,\n\t\"./edge/views/edge-stacks/editEdgeStackView/index.js\": 1243,\n\t\"./integrations/_module.js\": 1245,\n\t\"./integrations/storidge/_module.js\": 1246,\n\t\"./integrations/storidge/components/cluster-events-datatable/storidgeClusterEventsDatatable.js\": 1256,\n\t\"./integrations/storidge/components/drives-datatable/storidgeDrivesDatatable.js\": 1258,\n\t\"./integrations/storidge/components/drives-datatable/storidgeDrivesDatatableController.js\": 1260,\n\t\"./integrations/storidge/components/nodes-datatable/storidgeNodesDatatable.js\": 1261,\n\t\"./integrations/storidge/components/nodes-datatable/storidgeNodesDatatableController.js\": 1263,\n\t\"./integrations/storidge/components/profileSelector/storidgeProfileSelector.js\": 1264,\n\t\"./integrations/storidge/components/profileSelector/storidgeProfileSelectorController.js\": 1266,\n\t\"./integrations/storidge/components/profiles-datatable/storidgeProfilesDatatable.js\": 1267,\n\t\"./integrations/storidge/components/snapshot-creation/storidgeSnapshotCreation.js\": 1269,\n\t\"./integrations/storidge/components/snapshot-creation/storidgeSnapshotCreationController.js\": 1271,\n\t\"./integrations/storidge/components/snapshots-datatable/storidgeSnapshotsDatatable.js\": 1272,\n\t\"./integrations/storidge/components/volume-storidge-info/volumeStoridgeInfo.js\": 1274,\n\t\"./integrations/storidge/components/volume-storidge-info/volumeStoridgeInfoController.js\": 1276,\n\t\"./integrations/storidge/filters/filters.js\": 1277,\n\t\"./integrations/storidge/models/drive.js\": 324,\n\t\"./integrations/storidge/models/events.js\": 444,\n\t\"./integrations/storidge/models/info.js\": 445,\n\t\"./integrations/storidge/models/node.js\": 325,\n\t\"./integrations/storidge/models/profile.js\": 131,\n\t\"./integrations/storidge/models/snapshot.js\": 326,\n\t\"./integrations/storidge/models/volume.js\": 327,\n\t\"./integrations/storidge/rest/storidge.js\": 1278,\n\t\"./integrations/storidge/services/chartService.js\": 1279,\n\t\"./integrations/storidge/services/clusterService.js\": 1327,\n\t\"./integrations/storidge/services/driveService.js\": 1328,\n\t\"./integrations/storidge/services/nodeService.js\": 1329,\n\t\"./integrations/storidge/services/profileService.js\": 1330,\n\t\"./integrations/storidge/services/snapshotService.js\": 1331,\n\t\"./integrations/storidge/services/volumeService.js\": 1332,\n\t\"./integrations/storidge/views/cluster/clusterController.js\": 1333,\n\t\"./integrations/storidge/views/drives/drivesController.js\": 1334,\n\t\"./integrations/storidge/views/drives/inspect/driveController.js\": 1335,\n\t\"./integrations/storidge/views/monitor/monitorController.js\": 1336,\n\t\"./integrations/storidge/views/nodes/inspect/nodeController.js\": 1337,\n\t\"./integrations/storidge/views/profiles/create/createProfileController.js\": 1338,\n\t\"./integrations/storidge/views/profiles/edit/profileController.js\": 1339,\n\t\"./integrations/storidge/views/profiles/profilesController.js\": 1340,\n\t\"./integrations/storidge/views/snapshots/inspect/snapshotController.js\": 1341,\n\t\"./kubernetes/__module.js\": 1342,\n\t\"./kubernetes/component-status/converter.js\": 446,\n\t\"./kubernetes/component-status/models.js\": 447,\n\t\"./kubernetes/component-status/rest.js\": 1343,\n\t\"./kubernetes/component-status/service.js\": 1344,\n\t\"./kubernetes/components/datatables/application/containers-datatable/containersDatatable.js\": 1345,\n\t\"./kubernetes/components/datatables/applications-datatable/applicationsDatatable.js\": 1347,\n\t\"./kubernetes/components/datatables/applications-datatable/applicationsDatatableController.js\": 1349,\n\t\"./kubernetes/components/datatables/applications-ports-datatable/applicationsPortsDatatable.js\": 1352,\n\t\"./kubernetes/components/datatables/applications-ports-datatable/applicationsPortsDatatableController.js\": 1354,\n\t\"./kubernetes/components/datatables/applications-stacks-datatable/applicationsStacksDatatable.js\": 1355,\n\t\"./kubernetes/components/datatables/applications-stacks-datatable/applicationsStacksDatatableController.js\": 1357,\n\t\"./kubernetes/components/datatables/configurations-datatable/configurationsDatatable.js\": 1358,\n\t\"./kubernetes/components/datatables/configurations-datatable/configurationsDatatableController.js\": 1360,\n\t\"./kubernetes/components/datatables/events-datatable/eventsDatatable.js\": 1365,\n\t\"./kubernetes/components/datatables/integrated-applications-datatable/integratedApplicationsDatatable.js\": 1367,\n\t\"./kubernetes/components/datatables/node-applications-datatable/nodeApplicationsDatatable.js\": 1369,\n\t\"./kubernetes/components/datatables/node-applications-datatable/nodeApplicationsDatatableController.js\": 1371,\n\t\"./kubernetes/components/datatables/nodes-datatable/nodesDatatable.js\": 1372,\n\t\"./kubernetes/components/datatables/resource-pool-applications-datatable/resourcePoolApplicationsDatatable.js\": 1374,\n\t\"./kubernetes/components/datatables/resource-pool-applications-datatable/resourcePoolApplicationsDatatableController.js\": 1376,\n\t\"./kubernetes/components/datatables/resource-pools-datatable/resourcePoolsDatatable.js\": 1377,\n\t\"./kubernetes/components/datatables/resource-pools-datatable/resourcePoolsDatatableController.js\": 1379,\n\t\"./kubernetes/components/datatables/volumes-datatable/volumesDatatable.js\": 1380,\n\t\"./kubernetes/components/datatables/volumes-datatable/volumesDatatableController.js\": 1382,\n\t\"./kubernetes/components/kubernetes-configuration-data/kubernetesConfigurationData.js\": 1383,\n\t\"./kubernetes/components/kubernetes-configuration-data/kubernetesConfigurationDataController.js\": 1385,\n\t\"./kubernetes/components/kubernetes-sidebar-content/kubernetesSidebarContent.js\": 1392,\n\t\"./kubernetes/components/resource-reservation/resourceReservation.js\": 1394,\n\t\"./kubernetes/components/resource-reservation/resourceReservationController.js\": 1396,\n\t\"./kubernetes/components/view-header/viewHeader.js\": 1397,\n\t\"./kubernetes/components/view-loading/viewLoading.js\": 1399,\n\t\"./kubernetes/components/yaml-inspector/yamlInspector.js\": 1401,\n\t\"./kubernetes/components/yaml-inspector/yamlInspectorController.js\": 1403,\n\t\"./kubernetes/converters/application.js\": 67,\n\t\"./kubernetes/converters/configMap.js\": 73,\n\t\"./kubernetes/converters/configuration.js\": 148,\n\t\"./kubernetes/converters/daemonSet.js\": 220,\n\t\"./kubernetes/converters/deployment.js\": 219,\n\t\"./kubernetes/converters/event.js\": 454,\n\t\"./kubernetes/converters/namespace.js\": 258,\n\t\"./kubernetes/converters/persistentVolumeClaim.js\": 105,\n\t\"./kubernetes/converters/resourcePool.js\": 132,\n\t\"./kubernetes/converters/resourceQuota.js\": 115,\n\t\"./kubernetes/converters/secret.js\": 133,\n\t\"./kubernetes/converters/service.js\": 145,\n\t\"./kubernetes/converters/statefulSet.js\": 221,\n\t\"./kubernetes/converters/storageClass.js\": 332,\n\t\"./kubernetes/converters/volume.js\": 333,\n\t\"./kubernetes/endpoint/converter.js\": 459,\n\t\"./kubernetes/endpoint/models.js\": 260,\n\t\"./kubernetes/endpoint/rest.js\": 1404,\n\t\"./kubernetes/endpoint/service.js\": 1405,\n\t\"./kubernetes/filters/applicationFilters.js\": 1406,\n\t\"./kubernetes/filters/configurationFilters.js\": 1407,\n\t\"./kubernetes/filters/eventFilters.js\": 1408,\n\t\"./kubernetes/filters/filters.js\": 1409,\n\t\"./kubernetes/helpers/application/index.js\": 13,\n\t\"./kubernetes/helpers/application/rollback.js\": 460,\n\t\"./kubernetes/helpers/commonHelper.js\": 37,\n\t\"./kubernetes/helpers/configMapHelper.js\": 261,\n\t\"./kubernetes/helpers/configurationHelper.js\": 77,\n\t\"./kubernetes/helpers/eventHelper.js\": 110,\n\t\"./kubernetes/helpers/formValidationHelper.js\": 54,\n\t\"./kubernetes/helpers/history/daemonset.js\": 334,\n\t\"./kubernetes/helpers/history/deployment.js\": 263,\n\t\"./kubernetes/helpers/history/index.js\": 461,\n\t\"./kubernetes/helpers/history/statefulset.js\": 335,\n\t\"./kubernetes/helpers/namespaceHelper.js\": 1410,\n\t\"./kubernetes/helpers/resourceQuotaHelper.js\": 130,\n\t\"./kubernetes/helpers/resourceReservationHelper.js\": 17,\n\t\"./kubernetes/helpers/serviceHelper.js\": 223,\n\t\"./kubernetes/helpers/stackHelper.js\": 462,\n\t\"./kubernetes/helpers/volumeHelper.js\": 80,\n\t\"./kubernetes/horizontal-pod-auto-scaler/converter.js\": 82,\n\t\"./kubernetes/horizontal-pod-auto-scaler/helper.js\": 116,\n\t\"./kubernetes/horizontal-pod-auto-scaler/models.js\": 336,\n\t\"./kubernetes/horizontal-pod-auto-scaler/payload.js\": 464,\n\t\"./kubernetes/horizontal-pod-auto-scaler/rest.js\": 1411,\n\t\"./kubernetes/horizontal-pod-auto-scaler/service.js\": 1412,\n\t\"./kubernetes/ingress/constants.js\": 72,\n\t\"./kubernetes/ingress/converter.js\": 46,\n\t\"./kubernetes/ingress/helper.js\": 453,\n\t\"./kubernetes/ingress/models.js\": 168,\n\t\"./kubernetes/ingress/payloads.js\": 259,\n\t\"./kubernetes/ingress/rest.js\": 1413,\n\t\"./kubernetes/ingress/service.js\": 1414,\n\t\"./kubernetes/metrics/metrics.js\": 1415,\n\t\"./kubernetes/metrics/rest.js\": 1416,\n\t\"./kubernetes/models/application/formValues.js\": 16,\n\t\"./kubernetes/models/application/models/constants.js\": 387,\n\t\"./kubernetes/models/application/models/index.js\": 3,\n\t\"./kubernetes/models/application/payloads.js\": 87,\n\t\"./kubernetes/models/common/params.js\": 11,\n\t\"./kubernetes/models/common/payloads.js\": 43,\n\t\"./kubernetes/models/config-map/models.js\": 66,\n\t\"./kubernetes/models/config-map/payloads.js\": 257,\n\t\"./kubernetes/models/configuration/formvalues.js\": 71,\n\t\"./kubernetes/models/configuration/models.js\": 21,\n\t\"./kubernetes/models/daemon-set/models.js\": 142,\n\t\"./kubernetes/models/daemon-set/payloads.js\": 449,\n\t\"./kubernetes/models/deploy.js\": 117,\n\t\"./kubernetes/models/deployment/models.js\": 141,\n\t\"./kubernetes/models/deployment/payloads.js\": 448,\n\t\"./kubernetes/models/event/models.js\": 455,\n\t\"./kubernetes/models/history/models.js\": 134,\n\t\"./kubernetes/models/namespace/models.js\": 249,\n\t\"./kubernetes/models/namespace/payloads.js\": 456,\n\t\"./kubernetes/models/port/models.js\": 328,\n\t\"./kubernetes/models/resource-pool/formValues.js\": 55,\n\t\"./kubernetes/models/resource-pool/models.js\": 95,\n\t\"./kubernetes/models/resource-quota/models.js\": 25,\n\t\"./kubernetes/models/resource-quota/payloads.js\": 457,\n\t\"./kubernetes/models/resource-reservation/models.js\": 181,\n\t\"./kubernetes/models/resource-types/models.js\": 23,\n\t\"./kubernetes/models/secret/models.js\": 331,\n\t\"./kubernetes/models/secret/payloads.js\": 330,\n\t\"./kubernetes/models/service/models.js\": 22,\n\t\"./kubernetes/models/service/payloads.js\": 452,\n\t\"./kubernetes/models/stack/models.js\": 463,\n\t\"./kubernetes/models/stateful-set/models.js\": 86,\n\t\"./kubernetes/models/stateful-set/payloads.js\": 450,\n\t\"./kubernetes/models/storage-class/models.js\": 163,\n\t\"./kubernetes/models/storage-class/payload.js\": 458,\n\t\"./kubernetes/models/volume/models.js\": 222,\n\t\"./kubernetes/models/volume/payloads.js\": 451,\n\t\"./kubernetes/node/converter.js\": 106,\n\t\"./kubernetes/node/filters.js\": 1417,\n\t\"./kubernetes/node/formValues.js\": 169,\n\t\"./kubernetes/node/helper.js\": 190,\n\t\"./kubernetes/node/models.js\": 68,\n\t\"./kubernetes/node/payload.js\": 337,\n\t\"./kubernetes/node/rest.js\": 1418,\n\t\"./kubernetes/node/service.js\": 1419,\n\t\"./kubernetes/pod/converter.js\": 146,\n\t\"./kubernetes/pod/filters.js\": 1420,\n\t\"./kubernetes/pod/models/affinities.js\": 388,\n\t\"./kubernetes/pod/models/index.js\": 35,\n\t\"./kubernetes/pod/payloads/affinities.js\": 192,\n\t\"./kubernetes/pod/payloads/create.js\": 465,\n\t\"./kubernetes/pod/service.js\": 1421,\n\t\"./kubernetes/rest/configMap.js\": 1422,\n\t\"./kubernetes/rest/controllerRevision.js\": 1423,\n\t\"./kubernetes/rest/daemonSet.js\": 1424,\n\t\"./kubernetes/rest/deployment.js\": 1425,\n\t\"./kubernetes/rest/endpoint.js\": 1426,\n\t\"./kubernetes/rest/event.js\": 1427,\n\t\"./kubernetes/rest/health.js\": 1428,\n\t\"./kubernetes/rest/namespace.js\": 1429,\n\t\"./kubernetes/rest/persistentVolumeClaim.js\": 1430,\n\t\"./kubernetes/rest/pod.js\": 1431,\n\t\"./kubernetes/rest/replicaSet.js\": 1432,\n\t\"./kubernetes/rest/resourceQuota.js\": 1433,\n\t\"./kubernetes/rest/response/transform.js\": 26,\n\t\"./kubernetes/rest/secret.js\": 1434,\n\t\"./kubernetes/rest/service.js\": 1435,\n\t\"./kubernetes/rest/statefulSet.js\": 1436,\n\t\"./kubernetes/rest/storage.js\": 1437,\n\t\"./kubernetes/services/applicationService.js\": 1438,\n\t\"./kubernetes/services/configMapService.js\": 1439,\n\t\"./kubernetes/services/configurationService.js\": 1440,\n\t\"./kubernetes/services/controllerRevisionService.js\": 1441,\n\t\"./kubernetes/services/daemonSetService.js\": 1442,\n\t\"./kubernetes/services/deploymentService.js\": 1443,\n\t\"./kubernetes/services/eventService.js\": 1444,\n\t\"./kubernetes/services/healthService.js\": 1445,\n\t\"./kubernetes/services/historyService.js\": 1446,\n\t\"./kubernetes/services/namespaceService.js\": 1447,\n\t\"./kubernetes/services/persistentVolumeClaimService.js\": 1448,\n\t\"./kubernetes/services/replicaSetService.js\": 1449,\n\t\"./kubernetes/services/resourcePoolService.js\": 1450,\n\t\"./kubernetes/services/resourceQuotaService.js\": 1451,\n\t\"./kubernetes/services/secretService.js\": 1452,\n\t\"./kubernetes/services/serviceService.js\": 1453,\n\t\"./kubernetes/services/stackService.js\": 1454,\n\t\"./kubernetes/services/statefulSetService.js\": 1455,\n\t\"./kubernetes/services/storageService.js\": 1456,\n\t\"./kubernetes/services/volumeService.js\": 1457,\n\t\"./kubernetes/views/applications/applications.js\": 1458,\n\t\"./kubernetes/views/applications/applicationsController.js\": 1460,\n\t\"./kubernetes/views/applications/console/console.js\": 1461,\n\t\"./kubernetes/views/applications/console/consoleController.js\": 1463,\n\t\"./kubernetes/views/applications/create/createApplication.js\": 1464,\n\t\"./kubernetes/views/applications/create/createApplicationController.js\": 1466,\n\t\"./kubernetes/views/applications/edit/application.js\": 1467,\n\t\"./kubernetes/views/applications/edit/applicationController.js\": 1469,\n\t\"./kubernetes/views/applications/edit/components/placements-datatable/controller.js\": 1470,\n\t\"./kubernetes/views/applications/edit/components/placements-datatable/index.js\": 1471,\n\t\"./kubernetes/views/applications/logs/logs.js\": 1473,\n\t\"./kubernetes/views/applications/logs/logsController.js\": 1475,\n\t\"./kubernetes/views/applications/stats/stats.js\": 1476,\n\t\"./kubernetes/views/applications/stats/statsController.js\": 1478,\n\t\"./kubernetes/views/cluster/cluster.js\": 1479,\n\t\"./kubernetes/views/cluster/clusterController.js\": 1481,\n\t\"./kubernetes/views/cluster/node/node.js\": 1482,\n\t\"./kubernetes/views/cluster/node/nodeController.js\": 1484,\n\t\"./kubernetes/views/cluster/node/stats/stats.js\": 1485,\n\t\"./kubernetes/views/cluster/node/stats/statsController.js\": 1487,\n\t\"./kubernetes/views/configurations/configurations.js\": 1488,\n\t\"./kubernetes/views/configurations/configurationsController.js\": 1490,\n\t\"./kubernetes/views/configurations/create/createConfiguration.js\": 1491,\n\t\"./kubernetes/views/configurations/create/createConfigurationController.js\": 1493,\n\t\"./kubernetes/views/configurations/edit/configuration.js\": 1494,\n\t\"./kubernetes/views/configurations/edit/configurationController.js\": 1496,\n\t\"./kubernetes/views/configure/configureController.js\": 1497,\n\t\"./kubernetes/views/dashboard/dashboard.js\": 1498,\n\t\"./kubernetes/views/dashboard/dashboardController.js\": 1500,\n\t\"./kubernetes/views/deploy/deploy.js\": 1501,\n\t\"./kubernetes/views/deploy/deployController.js\": 1503,\n\t\"./kubernetes/views/resource-pools/access/resourcePoolAccess.js\": 1505,\n\t\"./kubernetes/views/resource-pools/access/resourcePoolAccessController.js\": 1507,\n\t\"./kubernetes/views/resource-pools/create/createResourcePool.js\": 1508,\n\t\"./kubernetes/views/resource-pools/create/createResourcePoolController.js\": 1510,\n\t\"./kubernetes/views/resource-pools/edit/components/ingresses-datatable/controller.js\": 1511,\n\t\"./kubernetes/views/resource-pools/edit/components/ingresses-datatable/index.js\": 1512,\n\t\"./kubernetes/views/resource-pools/edit/resourcePool.js\": 1514,\n\t\"./kubernetes/views/resource-pools/edit/resourcePoolController.js\": 1516,\n\t\"./kubernetes/views/resource-pools/resourcePools.js\": 1517,\n\t\"./kubernetes/views/resource-pools/resourcePoolsController.js\": 1519,\n\t\"./kubernetes/views/stacks/logs/logs.js\": 1520,\n\t\"./kubernetes/views/stacks/logs/logsController.js\": 1522,\n\t\"./kubernetes/views/summary/resources/applicationResources.js\": 466,\n\t\"./kubernetes/views/summary/resources/configurationResources.js\": 467,\n\t\"./kubernetes/views/summary/resources/helpers.js\": 264,\n\t\"./kubernetes/views/summary/resources/namespaceResources.js\": 468,\n\t\"./kubernetes/views/summary/summary.js\": 1523,\n\t\"./kubernetes/views/summary/summaryController.js\": 1525,\n\t\"./kubernetes/views/volumes/components/volumes-storages-datatable/controller.js\": 1526,\n\t\"./kubernetes/views/volumes/components/volumes-storages-datatable/index.js\": 1527,\n\t\"./kubernetes/views/volumes/edit/volume.js\": 1529,\n\t\"./kubernetes/views/volumes/edit/volumeController.js\": 1531,\n\t\"./kubernetes/views/volumes/volumes.js\": 1532,\n\t\"./kubernetes/views/volumes/volumesController.js\": 1534,\n\t\"./matomo-setup.js\": 528,\n\t\"./portainer/__module.js\": 534,\n\t\"./portainer/components/access-datatable/accessDatatable.js\": 1535,\n\t\"./portainer/components/access-datatable/accessDatatableController.js\": 1537,\n\t\"./portainer/components/access-table/access-table.js\": 1538,\n\t\"./portainer/components/accessControlForm/por-access-control-form.js\": 1540,\n\t\"./portainer/components/accessControlForm/porAccessControlFormController.js\": 1542,\n\t\"./portainer/components/accessControlForm/porAccessControlFormModel.js\": 40,\n\t\"./portainer/components/accessControlPanel/por-access-control-panel.js\": 1543,\n\t\"./portainer/components/accessControlPanel/porAccessControlPanelController.js\": 1545,\n\t\"./portainer/components/accessControlPanel/porAccessControlPanelModel.js\": 469,\n\t\"./portainer/components/accessManagement/por-access-management.js\": 1546,\n\t\"./portainer/components/accessManagement/porAccessManagementController.js\": 1548,\n\t\"./portainer/components/associated-endpoints-selector/associatedEndpointsSelector.js\": 1549,\n\t\"./portainer/components/associated-endpoints-selector/associatedEndpointsSelectorController.js\": 470,\n\t\"./portainer/components/autofocus.js\": 1551,\n\t\"./portainer/components/beta-panel/betaPanel.js\": 1552,\n\t\"./portainer/components/buttonSpinner.js\": 1554,\n\t\"./portainer/components/code-editor/code-editor.js\": 1555,\n\t\"./portainer/components/code-editor/codeEditorController.js\": 1557,\n\t\"./portainer/components/custom-template-common-fields/customTemplateCommonFieldsController.js\": 471,\n\t\"./portainer/components/custom-template-common-fields/index.js\": 1558,\n\t\"./portainer/components/custom-templates-list/customTemplatesListController.js\": 1560,\n\t\"./portainer/components/custom-templates-list/index.js\": 1561,\n\t\"./portainer/components/datatables/access-viewer-datatable/accessViewerDatatable.js\": 1563,\n\t\"./portainer/components/datatables/datatable-columns-visibility/datatable-columns-visibility.controller.js\": 472,\n\t\"./portainer/components/datatables/datatable-columns-visibility/index.js\": 1565,\n\t\"./portainer/components/datatables/endpoints-datatable/endpointsDatatable.js\": 1567,\n\t\"./portainer/components/datatables/endpoints-datatable/endpointsDatatableController.js\": 1569,\n\t\"./portainer/components/datatables/genericDatatableController.js\": 1570,\n\t\"./portainer/components/datatables/groups-datatable/groupsDatatable.js\": 1572,\n\t\"./portainer/components/datatables/registries-datatable/registriesDatatable.js\": 1574,\n\t\"./portainer/components/datatables/roles-datatable/rolesDatatable.js\": 1576,\n\t\"./portainer/components/datatables/stacks-datatable/stacksDatatable.js\": 1578,\n\t\"./portainer/components/datatables/stacks-datatable/stacksDatatableController.js\": 1580,\n\t\"./portainer/components/datatables/tags-datatable/tagsDatatable.js\": 1581,\n\t\"./portainer/components/datatables/teams-datatable/teamsDatatable.js\": 1583,\n\t\"./portainer/components/datatables/users-datatable/usersDatatable.js\": 1585,\n\t\"./portainer/components/datatables/users-datatable/usersDatatableController.js\": 473,\n\t\"./portainer/components/endpoint-list/endpoint-item/endpoint-item-controller.js\": 474,\n\t\"./portainer/components/endpoint-list/endpoint-item/endpointItem.js\": 1591,\n\t\"./portainer/components/endpoint-list/endpoint-list-controller.js\": 1596,\n\t\"./portainer/components/endpoint-list/endpoint-list.js\": 1597,\n\t\"./portainer/components/endpoint-selector/endpoint-selector.js\": 1599,\n\t\"./portainer/components/endpoint-selector/endpointSelectorController.js\": 1601,\n\t\"./portainer/components/endpointSecurity/por-endpoint-security.js\": 1602,\n\t\"./portainer/components/endpointSecurity/porEndpointSecurityController.js\": 1604,\n\t\"./portainer/components/endpointSecurity/porEndpointSecurityModel.js\": 252,\n\t\"./portainer/components/environment-variables-panel/environment-variables-panel.controller.js\": 475,\n\t\"./portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode-item/environment-variables-simple-mode-item.controller.js\": 476,\n\t\"./portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode-item/index.js\": 1605,\n\t\"./portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode.controller.js\": 477,\n\t\"./portainer/components/environment-variables-panel/environment-variables-simple-mode/index.js\": 1607,\n\t\"./portainer/components/environment-variables-panel/index.js\": 1610,\n\t\"./portainer/components/forms/git-form/git-form-auth-fieldset/git-form-auth-fieldset.controller.js\": 403,\n\t\"./portainer/components/forms/git-form/git-form-auth-fieldset/index.js\": 402,\n\t\"./portainer/components/forms/git-form/git-form-compose-path-field/index.js\": 404,\n\t\"./portainer/components/forms/git-form/git-form-ref-field/index.js\": 405,\n\t\"./portainer/components/forms/git-form/git-form-url-field/index.js\": 406,\n\t\"./portainer/components/forms/git-form/git-form.controller.js\": 401,\n\t\"./portainer/components/forms/git-form/git-form.js\": 400,\n\t\"./portainer/components/forms/git-form/index.js\": 399,\n\t\"./portainer/components/forms/group-form/group-form.js\": 1613,\n\t\"./portainer/components/forms/group-form/groupFormController.js\": 478,\n\t\"./portainer/components/forms/por-switch-field/por-switch-field.js\": 1615,\n\t\"./portainer/components/forms/por-switch/por-switch.js\": 1618,\n\t\"./portainer/components/forms/registry-form-azure/registry-form-azure.js\": 1620,\n\t\"./portainer/components/forms/registry-form-custom/registry-form-custom.js\": 1622,\n\t\"./portainer/components/forms/registry-form-gitlab/gitlab-projects-datatable/gitlabProjectsDatatable.js\": 1624,\n\t\"./portainer/components/forms/registry-form-gitlab/gitlab-projects-datatable/gitlabProjectsDatatableController.js\": 1626,\n\t\"./portainer/components/forms/registry-form-gitlab/registry-form-gitlab.js\": 1627,\n\t\"./portainer/components/forms/registry-form-quay/registry-form-quay.js\": 1629,\n\t\"./portainer/components/forms/stack-from-template-form/index.js\": 1631,\n\t\"./portainer/components/forms/stack-redeploy-git-form/index.js\": 1633,\n\t\"./portainer/components/forms/stack-redeploy-git-form/stack-redeploy-git-form.controller.js\": 479,\n\t\"./portainer/components/forms/template-form/template-form.js\": 1635,\n\t\"./portainer/components/forms/template-form/templateFormController.js\": 1637,\n\t\"./portainer/components/group-association-table/group-association-table.js\": 1638,\n\t\"./portainer/components/header-content.js\": 1640,\n\t\"./portainer/components/header-title.js\": 1641,\n\t\"./portainer/components/header.js\": 1642,\n\t\"./portainer/components/index.js\": 398,\n\t\"./portainer/components/information-panel-offline/informationPanelOffline.js\": 1643,\n\t\"./portainer/components/information-panel-offline/informationPanelOfflineController.js\": 1645,\n\t\"./portainer/components/information-panel/information-panel.js\": 1646,\n\t\"./portainer/components/loading.js\": 1648,\n\t\"./portainer/components/motd-panel/motd-panel.js\": 1649,\n\t\"./portainer/components/onEnterKey.js\": 1651,\n\t\"./portainer/components/product-list/product-item/product-item.js\": 1652,\n\t\"./portainer/components/product-list/product-list.js\": 1656,\n\t\"./portainer/components/slider/slider.js\": 1658,\n\t\"./portainer/components/slider/sliderController.js\": 1660,\n\t\"./portainer/components/stack-duplication-form/stack-duplication-form-controller.js\": 1661,\n\t\"./portainer/components/stack-duplication-form/stack-duplication-form.js\": 1662,\n\t\"./portainer/components/tag-selector/tag-selector.js\": 1664,\n\t\"./portainer/components/tag-selector/tagSelectorController.js\": 1666,\n\t\"./portainer/components/template-list/template-item/template-item.js\": 1667,\n\t\"./portainer/components/template-list/template-list-controller.js\": 1670,\n\t\"./portainer/components/template-list/template-list.js\": 1671,\n\t\"./portainer/components/template-widget.js\": 1673,\n\t\"./portainer/components/tooltip.js\": 1674,\n\t\"./portainer/components/widget-body.js\": 1675,\n\t\"./portainer/components/widget-custom-header.js\": 1676,\n\t\"./portainer/components/widget-footer.js\": 1677,\n\t\"./portainer/components/widget-header.js\": 1678,\n\t\"./portainer/components/widget-taskbar.js\": 1679,\n\t\"./portainer/components/widget.js\": 1680,\n\t\"./portainer/error.js\": 8,\n\t\"./portainer/filters/filters.js\": 1681,\n\t\"./portainer/helpers/endpointHelper.js\": 1682,\n\t\"./portainer/helpers/env-vars.js\": 85,\n\t\"./portainer/helpers/formHelper.js\": 1683,\n\t\"./portainer/helpers/genericHelper.js\": 480,\n\t\"./portainer/helpers/networkHelper.js\": 1684,\n\t\"./portainer/helpers/resourceControlHelper.js\": 1685,\n\t\"./portainer/helpers/stackHelper.js\": 1686,\n\t\"./portainer/helpers/tagHelper.js\": 251,\n\t\"./portainer/helpers/templateHelper.js\": 1687,\n\t\"./portainer/helpers/urlHelper.js\": 1688,\n\t\"./portainer/helpers/userHelper.js\": 1689,\n\t\"./portainer/helpers/webhookHelper.js\": 1690,\n\t\"./portainer/interceptors/endpointStatusInterceptor.js\": 1691,\n\t\"./portainer/models/access.js\": 113,\n\t\"./portainer/models/dockerhub.js\": 248,\n\t\"./portainer/models/endpoint/formValues.js\": 340,\n\t\"./portainer/models/endpoint/models.js\": 14,\n\t\"./portainer/models/gitlabRegistry.js\": 481,\n\t\"./portainer/models/group.js\": 191,\n\t\"./portainer/models/motd.js\": 482,\n\t\"./portainer/models/registry.js\": 170,\n\t\"./portainer/models/registryRepository.js\": 483,\n\t\"./portainer/models/registryTypes.js\": 60,\n\t\"./portainer/models/resourceControl/resourceControl.js\": 58,\n\t\"./portainer/models/resourceControl/resourceControlCreatePayload.js\": 1692,\n\t\"./portainer/models/resourceControl/resourceControlOwnership.js\": 18,\n\t\"./portainer/models/resourceControl/resourceControlOwnershipParameters.js\": 233,\n\t\"./portainer/models/resourceControl/resourceControlTypes.js\": 135,\n\t\"./portainer/models/resourceControl/resourceControlUpdatePayload.js\": 1693,\n\t\"./portainer/models/schedule.js\": 255,\n\t\"./portainer/models/settings.js\": 341,\n\t\"./portainer/models/stack.js\": 149,\n\t\"./portainer/models/status.js\": 342,\n\t\"./portainer/models/tag.js\": 343,\n\t\"./portainer/models/team.js\": 344,\n\t\"./portainer/models/teamMembership.js\": 182,\n\t\"./portainer/models/template.js\": 484,\n\t\"./portainer/models/user.js\": 345,\n\t\"./portainer/models/webhook.js\": 485,\n\t\"./portainer/oauth/__module.js\": 1694,\n\t\"./portainer/oauth/components/oauth-providers-selector/oauth-provider-selector-controller.js\": 1695,\n\t\"./portainer/oauth/components/oauth-providers-selector/oauth-providers-selector.js\": 1696,\n\t\"./portainer/oauth/components/oauth-settings/oauth-settings-controller.js\": 1698,\n\t\"./portainer/oauth/components/oauth-settings/oauth-settings.js\": 1699,\n\t\"./portainer/oauth/services/rest/oauth.js\": 1701,\n\t\"./portainer/rest/auth.js\": 1702,\n\t\"./portainer/rest/backup.js\": 1703,\n\t\"./portainer/rest/customTemplate.js\": 1704,\n\t\"./portainer/rest/dockerhub.js\": 1705,\n\t\"./portainer/rest/endpoint.js\": 1706,\n\t\"./portainer/rest/gitlab.js\": 1707,\n\t\"./portainer/rest/group.js\": 1708,\n\t\"./portainer/rest/legacyExtension.js\": 1709,\n\t\"./portainer/rest/motd.js\": 1710,\n\t\"./portainer/rest/registry.js\": 1711,\n\t\"./portainer/rest/resourceControl.js\": 1712,\n\t\"./portainer/rest/settings.js\": 1713,\n\t\"./portainer/rest/stack.js\": 1714,\n\t\"./portainer/rest/status.js\": 1715,\n\t\"./portainer/rest/support.js\": 1716,\n\t\"./portainer/rest/tag.js\": 1717,\n\t\"./portainer/rest/team.js\": 1718,\n\t\"./portainer/rest/teamMembership.js\": 1719,\n\t\"./portainer/rest/template.js\": 1720,\n\t\"./portainer/rest/transform/getEndpointsTotalCount.js\": 486,\n\t\"./portainer/rest/transform/gitlabResponseGetLink.js\": 346,\n\t\"./portainer/rest/user.js\": 1721,\n\t\"./portainer/rest/webhooks.js\": 1722,\n\t\"./portainer/services/allSettled.js\": 250,\n\t\"./portainer/services/api/accessService.js\": 1723,\n\t\"./portainer/services/api/backupService.js\": 1724,\n\t\"./portainer/services/api/customTemplate.js\": 1725,\n\t\"./portainer/services/api/dockerhubService.js\": 1726,\n\t\"./portainer/services/api/endpointService.js\": 1727,\n\t\"./portainer/services/api/groupService.js\": 1728,\n\t\"./portainer/services/api/legacyExtensionService.js\": 1729,\n\t\"./portainer/services/api/motdService.js\": 1730,\n\t\"./portainer/services/api/registryService.js\": 1731,\n\t\"./portainer/services/api/resourceControlService.js\": 1732,\n\t\"./portainer/services/api/settingsService.js\": 1733,\n\t\"./portainer/services/api/stackService.js\": 1734,\n\t\"./portainer/services/api/statusService.js\": 1735,\n\t\"./portainer/services/api/supportService.js\": 1736,\n\t\"./portainer/services/api/tagService.js\": 1737,\n\t\"./portainer/services/api/teamMembershipService.js\": 1738,\n\t\"./portainer/services/api/teamService.js\": 1739,\n\t\"./portainer/services/api/templateService.js\": 1740,\n\t\"./portainer/services/api/userService.js\": 1741,\n\t\"./portainer/services/api/webhookService.js\": 1742,\n\t\"./portainer/services/async.js\": 1743,\n\t\"./portainer/services/authentication.js\": 1744,\n\t\"./portainer/services/chartService.js\": 1745,\n\t\"./portainer/services/codeMirror.js\": 1746,\n\t\"./portainer/services/datatableService.js\": 1772,\n\t\"./portainer/services/endpointProvider.js\": 1773,\n\t\"./portainer/services/fileUpload.js\": 1774,\n\t\"./portainer/services/formValidator.js\": 1775,\n\t\"./portainer/services/httpRequestHelper.js\": 1776,\n\t\"./portainer/services/legacyExtensionManager.js\": 1777,\n\t\"./portainer/services/localStorage.js\": 1778,\n\t\"./portainer/services/modalService.js\": 1779,\n\t\"./portainer/services/notifications.js\": 1780,\n\t\"./portainer/services/pagination.js\": 1781,\n\t\"./portainer/services/registryGitlabService.js\": 1782,\n\t\"./portainer/services/session-storage.js\": 225,\n\t\"./portainer/services/stateManager.js\": 1783,\n\t\"./portainer/views/account/accountController.js\": 1784,\n\t\"./portainer/views/auth/authController.js\": 1785,\n\t\"./portainer/views/custom-templates/create-custom-template-view/createCustomTemplateViewController.js\": 487,\n\t\"./portainer/views/custom-templates/create-custom-template-view/index.js\": 1788,\n\t\"./portainer/views/custom-templates/custom-templates-view/customTemplatesViewController.js\": 488,\n\t\"./portainer/views/custom-templates/custom-templates-view/index.js\": 1790,\n\t\"./portainer/views/custom-templates/edit-custom-template-view/editCustomTemplateViewController.js\": 489,\n\t\"./portainer/views/custom-templates/edit-custom-template-view/index.js\": 1792,\n\t\"./portainer/views/endpoints/access/endpointAccessController.js\": 1794,\n\t\"./portainer/views/endpoints/create/createEndpointController.js\": 1795,\n\t\"./portainer/views/endpoints/edit/endpointController.js\": 1796,\n\t\"./portainer/views/endpoints/endpointsController.js\": 1797,\n\t\"./portainer/views/groups/access/groupAccessController.js\": 1798,\n\t\"./portainer/views/groups/create/createGroupController.js\": 1799,\n\t\"./portainer/views/groups/edit/groupController.js\": 1800,\n\t\"./portainer/views/groups/groupsController.js\": 1801,\n\t\"./portainer/views/home/homeController.js\": 1802,\n\t\"./portainer/views/init/admin/initAdminController.js\": 1803,\n\t\"./portainer/views/init/endpoint/initEndpointController.js\": 1804,\n\t\"./portainer/views/logout/logoutController.js\": 1808,\n\t\"./portainer/views/main/mainController.js\": 1809,\n\t\"./portainer/views/registries/access/registryAccessController.js\": 1810,\n\t\"./portainer/views/registries/create/createRegistryController.js\": 1811,\n\t\"./portainer/views/registries/edit/registryController.js\": 1812,\n\t\"./portainer/views/registries/registriesController.js\": 1813,\n\t\"./portainer/views/settings/authentication/settingsAuthenticationController.js\": 1814,\n\t\"./portainer/views/settings/settingsController.js\": 1815,\n\t\"./portainer/views/sidebar/sidebarController.js\": 1816,\n\t\"./portainer/views/stacks/create/createStackController.js\": 1817,\n\t\"./portainer/views/stacks/edit/stackController.js\": 1818,\n\t\"./portainer/views/stacks/stacksController.js\": 1819,\n\t\"./portainer/views/tags/tagsController.js\": 1820,\n\t\"./portainer/views/teams/edit/teamController.js\": 1821,\n\t\"./portainer/views/teams/teamsController.js\": 1822,\n\t\"./portainer/views/templates/templatesController.js\": 1823,\n\t\"./portainer/views/users/edit/userController.js\": 1824,\n\t\"./portainer/views/users/usersController.js\": 1825,\n\t\"./vendors.js\": 1826\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 852;","const autoNgTemplateLoaderTemplate1 = require('./fileUploader.html');\n\nimport angular from 'angular';\nimport { FileUploaderController } from './fileUploaderController';\n\nangular.module('portainer.agent').component('fileUploader', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: FileUploaderController,\n bindings: {\n uploadFile: '\\n \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./filesDatatable.html');\n\nimport angular from 'angular';\n\nangular.module('portainer.agent').component('filesDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n\n isRoot: '<',\n goToParent: '&',\n browse: '&',\n rename: '&',\n download: '&',\n delete: '&',\n\n isUploadAllowed: '<',\n onFileSelectedForUpload: '<',\n },\n});\n","var path = 'app/agent/components/files-datatable/filesDatatable.html';\nvar html = \"
    \\n \\n \\n \\n \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Name\\n \\n \\n \\n \\n \\n Size\\n \\n \\n \\n \\n \\n Last modification\\n \\n \\n \\n \\n Actions\\n
    \\n Go to parent\\n
    \\n \\n \\n \\n \\n \\n \\n {{ item.Name }}\\n \\n {{ item.Name }} \\n {{ item.Size | humansize }}\\n {{ item.ModTime | getisodatefromtimestamp }}\\n \\n \\n Download\\n \\n \\n Rename\\n \\n \\n Delete\\n \\n
    Loading...
    No files found.
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./hostBrowser.html');\n\nimport angular from 'angular';\nimport { HostBrowserController } from './hostBrowserController';\n\nangular.module('portainer.agent').component('hostBrowser', {\n controller: HostBrowserController,\n templateUrl: autoNgTemplateLoaderTemplate1,\n});\n","var path = 'app/agent/components/host-browser/hostBrowser.html';\nvar html = \"\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./nodeSelector.html');\n\nimport angular from 'angular';\n\nimport { NodeSelectorController } from './nodeSelectorController';\n\nangular.module('portainer.agent').component('nodeSelector', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: NodeSelectorController,\n bindings: {\n model: '=',\n },\n});\n","var path = 'app/agent/components/node-selector/nodeSelector.html';\nvar html = \"
    \\n \\n
    \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./volumeBrowser.html');\n\nimport angular from 'angular';\n\nimport { VolumeBrowserController } from './volumeBrowserController';\n\nangular.module('portainer.agent').component('volumeBrowser', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: VolumeBrowserController,\n bindings: {\n volumeId: '<',\n nodeName: '<',\n isUploadEnabled: '<',\n },\n});\n","var path = 'app/agent/components/volume-browser/volumeBrowser.html';\nvar html = \"\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\n\nangular.module('portainer.agent').factory('Agent', AgentFactory);\n\nfunction AgentFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider, StateManager) {\n return $resource(\n `${API_ENDPOINT_ENDPOINTS}/:endpointId/docker/v:version/agents`,\n {\n endpointId: EndpointProvider.endpointID,\n version: StateManager.getAgentApiVersion,\n },\n {\n query: { method: 'GET', isArray: true },\n }\n );\n}\n","import angular from 'angular';\n\nimport { browseGetResponse } from './response/browse';\n\nangular.module('portainer.agent').factory('Browse', BrowseFactory);\n\nfunction BrowseFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider, StateManager) {\n return $resource(\n `${API_ENDPOINT_ENDPOINTS}/:endpointId/docker/v:version/browse/:action`,\n {\n endpointId: EndpointProvider.endpointID,\n version: StateManager.getAgentApiVersion,\n },\n {\n ls: {\n method: 'GET',\n isArray: true,\n params: { action: 'ls' },\n },\n get: {\n method: 'GET',\n params: { action: 'get' },\n transformResponse: browseGetResponse,\n responseType: 'arraybuffer',\n },\n delete: {\n method: 'DELETE',\n params: { action: 'delete' },\n },\n rename: {\n method: 'PUT',\n params: { action: 'rename' },\n },\n }\n );\n}\n","import angular from 'angular';\n\nangular.module('portainer.agent').factory('AgentDockerhub', AgentDockerhub);\n\nfunction AgentDockerhub($resource, API_ENDPOINT_ENDPOINTS) {\n return $resource(\n `${API_ENDPOINT_ENDPOINTS}/:endpointId/:endpointType/v2/dockerhub`,\n {},\n {\n limits: { method: 'GET' },\n }\n );\n}\n","import angular from 'angular';\n\nangular.module('portainer.agent').factory('Host', HostFactory);\n\nfunction HostFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider, StateManager) {\n return $resource(\n `${API_ENDPOINT_ENDPOINTS}/:endpointId/docker/v:version/host/:action`,\n {\n endpointId: EndpointProvider.endpointID,\n version: StateManager.getAgentApiVersion,\n },\n {\n info: { method: 'GET', params: { action: 'info' } },\n }\n );\n}\n","import angular from 'angular';\n\nangular.module('portainer.agent').factory('AgentPing', AgentPingFactory);\n\nfunction AgentPingFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider, $q) {\n return $resource(\n `${API_ENDPOINT_ENDPOINTS}/:endpointId/docker/ping`,\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n ping: {\n method: 'GET',\n interceptor: {\n response: function versionInterceptor(response) {\n const instance = response.resource;\n const version = response.headers('Portainer-Agent-Api-Version') || 1;\n instance.version = Number(version);\n return instance;\n },\n responseError: function versionResponseError(error) {\n // 404 - agent is up - set version to 1\n if (error.status === 404) {\n return { version: 1 };\n }\n return $q.reject(error);\n },\n },\n },\n }\n );\n}\n","import angular from 'angular';\n\nangular.module('portainer.agent').factory('AgentVersion1', AgentFactory);\n\nfunction AgentFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n return $resource(\n `${API_ENDPOINT_ENDPOINTS}/:endpointId/docker/agents`,\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n query: { method: 'GET', isArray: true },\n }\n );\n}\n","import angular from 'angular';\n\nimport { browseGetResponse } from '../response/browse';\n\nangular.module('portainer.agent').factory('BrowseVersion1', BrowseFactory);\n\nfunction BrowseFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n return $resource(\n `${API_ENDPOINT_ENDPOINTS}/:endpointId/docker/browse/:volumeID/:action`,\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n ls: {\n method: 'GET',\n isArray: true,\n params: { action: 'ls' },\n },\n get: {\n method: 'GET',\n params: { action: 'get' },\n transformResponse: browseGetResponse,\n responseType: 'arraybuffer',\n },\n delete: {\n method: 'DELETE',\n params: { action: 'delete' },\n },\n rename: {\n method: 'PUT',\n params: { action: 'rename' },\n },\n }\n );\n}\n","import angular from 'angular';\n\nimport { AgentViewModel } from '../models/agent';\n\nangular.module('portainer.agent').factory('AgentService', AgentServiceFactory);\n\nfunction AgentServiceFactory(Agent, AgentVersion1, HttpRequestHelper, Host, StateManager) {\n return {\n agents,\n hostInfo,\n };\n\n function getAgentApiVersion() {\n const state = StateManager.getState();\n return state.endpoint.agentApiVersion;\n }\n\n function hostInfo(nodeName) {\n HttpRequestHelper.setPortainerAgentTargetHeader(nodeName);\n return Host.info().$promise;\n }\n\n async function agents() {\n const agentVersion = getAgentApiVersion();\n const service = agentVersion > 1 ? Agent : AgentVersion1;\n try {\n const agents = await service.query({ version: agentVersion }).$promise;\n return agents.map(function (item) {\n return new AgentViewModel(item);\n });\n } catch (err) {\n throw { msg: 'Unable to retrieve agents', err };\n }\n }\n}\n","import angular from 'angular';\n\nangular.module('portainer.agent').factory('HostBrowserService', HostBrowserServiceFactory);\n\nfunction HostBrowserServiceFactory(Browse, Upload, API_ENDPOINT_ENDPOINTS, EndpointProvider, StateManager) {\n return { ls, get, delete: deletePath, rename, upload };\n\n function ls(path) {\n return Browse.ls({ path: path }).$promise;\n }\n\n function get(path) {\n return Browse.get({ path: path }).$promise;\n }\n\n function deletePath(path) {\n return Browse.delete({ path: path }).$promise;\n }\n\n function rename(path, newPath) {\n const payload = {\n CurrentFilePath: path,\n NewFilePath: newPath,\n };\n return Browse.rename({}, payload).$promise;\n }\n\n function upload(path, file, onProgress) {\n const agentVersion = StateManager.getAgentApiVersion();\n const url = `${API_ENDPOINT_ENDPOINTS}/${EndpointProvider.endpointID()}/docker${agentVersion > 1 ? '/v' + agentVersion : ''}/browse/put`;\n\n return new Promise((resolve, reject) => {\n Upload.upload({\n url: url,\n data: { file: file, Path: path },\n }).then(resolve, reject, onProgress);\n });\n }\n}\n","import angular from 'angular';\n\nangular.module('portainer.agent').service('AgentPingService', AgentPingService);\n\nfunction AgentPingService(AgentPing) {\n return { ping };\n\n function ping() {\n return AgentPing.ping().$promise;\n }\n}\n","import angular from 'angular';\n\nangular.module('portainer.agent').factory('VolumeBrowserService', VolumeBrowserServiceFactory);\n\nfunction VolumeBrowserServiceFactory(StateManager, Browse, BrowseVersion1, API_ENDPOINT_ENDPOINTS, EndpointProvider, Upload) {\n return {\n ls,\n get,\n delete: deletePath,\n rename,\n upload,\n };\n\n function getAgentApiVersion() {\n const state = StateManager.getState();\n return state.endpoint.agentApiVersion;\n }\n\n function getBrowseService() {\n const agentVersion = getAgentApiVersion();\n return agentVersion > 1 ? Browse : BrowseVersion1;\n }\n\n function ls(volumeId, path) {\n return getBrowseService().ls({ volumeID: volumeId, path, version: getAgentApiVersion() }).$promise;\n }\n\n function get(volumeId, path) {\n return getBrowseService().get({ volumeID: volumeId, path, version: getAgentApiVersion() }).$promise;\n }\n\n function deletePath(volumeId, path) {\n return getBrowseService().delete({ volumeID: volumeId, path, version: getAgentApiVersion() }).$promise;\n }\n\n function rename(volumeId, path, newPath) {\n const payload = {\n CurrentFilePath: path,\n NewFilePath: newPath,\n };\n return getBrowseService().rename({ volumeID: volumeId, version: getAgentApiVersion() }, payload).$promise;\n }\n\n function upload(path, file, volumeId, onProgress) {\n const agentVersion = StateManager.getAgentApiVersion();\n if (agentVersion < 2) {\n throw new Error('upload is not supported on this agent version');\n }\n\n const url = `${API_ENDPOINT_ENDPOINTS}/${EndpointProvider.endpointID()}/docker/v${agentVersion}/browse/put?volumeID=${volumeId}`;\n\n return new Promise((resolve, reject) => {\n Upload.upload({\n url: url,\n data: { file, Path: path },\n }).then(resolve, reject, onProgress);\n });\n }\n}\n","import $ from 'jquery';\n\nangular.module('portainer').run([\n '$rootScope',\n '$state',\n '$interval',\n 'LocalStorage',\n 'EndpointProvider',\n 'SystemService',\n 'cfpLoadingBar',\n '$transitions',\n 'HttpRequestHelper',\n function ($rootScope, $state, $interval, LocalStorage, EndpointProvider, SystemService, cfpLoadingBar, $transitions, HttpRequestHelper) {\n 'use strict';\n\n EndpointProvider.initialize();\n\n $rootScope.$state = $state;\n $rootScope.defaultTitle = document.title;\n\n // Workaround to prevent the loading bar from going backward\n // https://github.com/chieffancypants/angular-loading-bar/issues/273\n var originalSet = cfpLoadingBar.set;\n cfpLoadingBar.set = function overrideSet(n) {\n if (n > cfpLoadingBar.status()) {\n originalSet.apply(cfpLoadingBar, arguments);\n }\n };\n\n $transitions.onBefore({}, function () {\n HttpRequestHelper.resetAgentHeaders();\n });\n\n $state.defaultErrorHandler(function () {\n // Do not log transitionTo errors\n });\n\n // Keep-alive Edge endpoints by sending a ping request every minute\n $interval(function () {\n ping(EndpointProvider, SystemService);\n }, 60 * 1000);\n\n $(document).ajaxSend(function (event, jqXhr, jqOpts) {\n const type = jqOpts.type === 'POST' || jqOpts.type === 'PUT' || jqOpts.type === 'PATCH';\n const hasNoContentType = jqOpts.contentType !== 'application/json' && jqOpts.headers && !jqOpts.headers['Content-Type'];\n if (type && hasNoContentType) {\n jqXhr.setRequestHeader('Content-Type', 'application/json');\n }\n jqXhr.setRequestHeader('Authorization', 'Bearer ' + LocalStorage.getJWT());\n });\n },\n]);\n\nfunction ping(EndpointProvider, SystemService) {\n let endpoint = EndpointProvider.currentEndpoint();\n if (endpoint !== undefined && endpoint.Type === 4) {\n SystemService.ping(endpoint.Id);\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./azureEndpointConfig.html');\n\nangular.module('portainer.azure').component('azureEndpointConfig', {\n bindings: {\n applicationId: '=',\n tenantId: '=',\n authenticationKey: '=',\n },\n templateUrl: autoNgTemplateLoaderTemplate1,\n});\n","var path = 'app/azure/components/azure-endpoint-config/azureEndpointConfig.html';\nvar html = \"
    \\n
    \\n Azure configuration\\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./azureSidebarContent.html');\n\nimport angular from 'angular';\n\nangular.module('portainer.azure').component('azureSidebarContent', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n endpointId: '<',\n },\n});\n","var path = 'app/azure/components/azure-sidebar-content/azureSidebarContent.html';\nvar html = \"
  • \\n Dashboard \\n
  • \\n
  • \\n Container instances \\n
  • \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./containerGroupsDatatable.html');\n\nangular.module('portainer.azure').component('containergroupsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n },\n});\n","var path = 'app/azure/components/datatables/containergroups-datatable/containerGroupsDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Location\\n \\n \\n \\n \\n Published Ports\\n \\n \\n Ownership\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ item.Name | truncate: 50 }}\\n {{ item.Location }}\\n 0\\\" ng-repeat=\\\"p in item.Ports\\\" class=\\\"image-tag\\\" ng-href=\\\"http://{{ item.IPAddress }}:{{ p.host }}\\\" target=\\\"_blank\\\">\\n {{ item.IPAddress }}:{{ p.host }}\\n \\n -\\n \\n \\n \\n {{ item.ResourceControl.Ownership ? item.ResourceControl.Ownership : item.ResourceControl.Ownership = $ctrl.RCO.ADMINISTRATORS }}\\n \\n
    Loading...
    No container available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.azure').factory('Azure', [\n '$http',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function AzureFactory($http, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n\n var service = {};\n\n service.delete = function (id, apiVersion) {\n var url = API_ENDPOINT_ENDPOINTS + '/' + EndpointProvider.endpointID() + '/azure' + id + '?api-version=' + apiVersion;\n return $http({\n method: 'DELETE',\n url: url,\n });\n };\n\n return service;\n },\n]);\n","angular.module('portainer.azure').factory('ContainerGroup', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function ContainerGroupFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n\n var resource = {};\n\n var base = $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/azure/subscriptions/:subscriptionId/providers/Microsoft.ContainerInstance/containerGroups',\n {\n endpointId: EndpointProvider.endpointID,\n 'api-version': '2018-04-01',\n },\n {\n query: { method: 'GET', params: { subscriptionId: '@subscriptionId' } },\n }\n );\n\n var withResourceGroup = $resource(\n API_ENDPOINT_ENDPOINTS +\n '/:endpointId/azure/subscriptions/:subscriptionId/resourceGroups/:resourceGroupName/providers/Microsoft.ContainerInstance/containerGroups/:containerGroupName',\n {\n endpointId: EndpointProvider.endpointID,\n 'api-version': '2018-04-01',\n },\n {\n create: {\n method: 'PUT',\n params: {\n subscriptionId: '@subscriptionId',\n resourceGroupName: '@resourceGroupName',\n containerGroupName: '@containerGroupName',\n },\n },\n get: {\n method: 'GET',\n },\n }\n );\n\n resource.query = base.query;\n resource.create = withResourceGroup.create;\n resource.get = withResourceGroup.get;\n return resource;\n },\n]);\n","angular.module('portainer.azure').factory('Location', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function LocationFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/azure/subscriptions/:subscriptionId/locations',\n {\n endpointId: EndpointProvider.endpointID,\n 'api-version': '2016-06-01',\n },\n {\n query: { method: 'GET', params: { subscriptionId: '@subscriptionId' } },\n }\n );\n },\n]);\n","angular.module('portainer.azure').factory('Provider', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function ProviderFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/azure/subscriptions/:subscriptionId/providers/:providerNamespace',\n {\n endpointId: EndpointProvider.endpointID,\n 'api-version': '2018-02-01',\n },\n {\n get: { method: 'GET', params: { subscriptionId: '@subscriptionId', providerNamespace: '@providerNamespace' } },\n }\n );\n },\n]);\n","angular.module('portainer.azure').factory('ResourceGroup', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function ResourceGroupFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/azure/subscriptions/:subscriptionId/resourcegroups/:resourceGroupName',\n {\n endpointId: EndpointProvider.endpointID,\n 'api-version': '2018-02-01',\n },\n {\n query: { method: 'GET', params: { subscriptionId: '@subscriptionId' } },\n get: { method: 'GET' },\n }\n );\n },\n]);\n","angular.module('portainer.azure').factory('Subscription', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function SubscriptionFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/azure/subscriptions/:id',\n {\n endpointId: EndpointProvider.endpointID,\n 'api-version': '2016-06-01',\n },\n {\n query: { method: 'GET' },\n get: { method: 'GET', params: { id: '@id' } },\n }\n );\n },\n]);\n","angular.module('portainer.azure').factory('AzureService', [\n '$q',\n 'Azure',\n 'SubscriptionService',\n 'ResourceGroupService',\n 'ContainerGroupService',\n 'ProviderService',\n function AzureServiceFactory($q, Azure, SubscriptionService, ResourceGroupService, ContainerGroupService, ProviderService) {\n 'use strict';\n var service = {};\n\n service.deleteContainerGroup = function (id) {\n return Azure.delete(id, '2018-04-01');\n };\n\n service.createContainerGroup = function (model, subscriptionId, resourceGroupName) {\n return ContainerGroupService.create(model, subscriptionId, resourceGroupName);\n };\n\n service.subscriptions = function () {\n return SubscriptionService.subscriptions();\n };\n\n service.containerInstanceProvider = function (subscriptions) {\n return retrieveResourcesForEachSubscription(subscriptions, ProviderService.containerInstanceProvider);\n };\n\n service.resourceGroups = function (subscriptions) {\n return retrieveResourcesForEachSubscription(subscriptions, ResourceGroupService.resourceGroups);\n };\n\n service.containerGroups = function (subscriptions) {\n return retrieveResourcesForEachSubscription(subscriptions, ContainerGroupService.containerGroups);\n };\n\n service.aggregate = function (resourcesBySubcription) {\n var aggregatedResources = [];\n Object.keys(resourcesBySubcription).forEach(function (key) {\n aggregatedResources = aggregatedResources.concat(resourcesBySubcription[key]);\n });\n return aggregatedResources;\n };\n\n function retrieveResourcesForEachSubscription(subscriptions, resourceQuery) {\n var deferred = $q.defer();\n\n var resources = {};\n\n var resourceQueries = [];\n for (var i = 0; i < subscriptions.length; i++) {\n var subscription = subscriptions[i];\n resourceQueries.push(resourceQuery(subscription.Id));\n }\n\n $q.all(resourceQueries)\n .then(function success(data) {\n for (var i = 0; i < data.length; i++) {\n var result = data[i];\n resources[subscriptions[i].Id] = result;\n }\n deferred.resolve(resources);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve resources', err: err });\n });\n\n return deferred.promise;\n }\n\n return service;\n },\n]);\n","import { ContainerGroupViewModel, CreateContainerGroupRequest } from '../models/container_group';\n\nangular.module('portainer.azure').factory('ContainerGroupService', [\n '$q',\n 'ContainerGroup',\n function ContainerGroupServiceFactory($q, ContainerGroup) {\n 'use strict';\n var service = {};\n\n service.containerGroups = function (subscriptionId) {\n var deferred = $q.defer();\n\n ContainerGroup.query({ subscriptionId: subscriptionId })\n .$promise.then(function success(data) {\n var containerGroups = data.value.map(function (item) {\n return new ContainerGroupViewModel(item);\n });\n deferred.resolve(containerGroups);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve container groups', err: err });\n });\n\n return deferred.promise;\n };\n\n service.containerGroup = containerGroup;\n async function containerGroup(subscriptionId, resourceGroupName, containerGroupName) {\n const containerGroup = await ContainerGroup.get({ subscriptionId, resourceGroupName, containerGroupName }).$promise;\n return new ContainerGroupViewModel(containerGroup);\n }\n\n service.create = function (model, subscriptionId, resourceGroupName) {\n var payload = new CreateContainerGroupRequest(model);\n return ContainerGroup.create(\n {\n subscriptionId: subscriptionId,\n resourceGroupName: resourceGroupName,\n containerGroupName: model.Name,\n },\n payload\n ).$promise;\n };\n\n return service;\n },\n]);\n","import { LocationViewModel } from '../models/location';\n\nangular.module('portainer.azure').factory('LocationService', [\n '$q',\n 'Location',\n function LocationServiceFactory($q, Location) {\n 'use strict';\n var service = {};\n\n service.locations = function (subscriptionId) {\n var deferred = $q.defer();\n\n Location.query({ subscriptionId: subscriptionId })\n .$promise.then(function success(data) {\n var locations = data.value.map(function (item) {\n return new LocationViewModel(item);\n });\n deferred.resolve(locations);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve locations', err: err });\n });\n\n return deferred.promise;\n };\n\n return service;\n },\n]);\n","import { ContainerInstanceProviderViewModel } from '../models/provider';\n\nangular.module('portainer.azure').factory('ProviderService', [\n '$q',\n 'Provider',\n function ProviderServiceFactory($q, Provider) {\n 'use strict';\n var service = {};\n\n service.containerInstanceProvider = function (subscriptionId) {\n var deferred = $q.defer();\n\n Provider.get({ subscriptionId: subscriptionId, providerNamespace: 'Microsoft.ContainerInstance' })\n .$promise.then(function success(data) {\n var provider = new ContainerInstanceProviderViewModel(data);\n deferred.resolve(provider);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve provider', err: err });\n });\n\n return deferred.promise;\n };\n\n return service;\n },\n]);\n","import { ResourceGroupViewModel } from '../models/resource_group';\n\nangular.module('portainer.azure').factory('ResourceGroupService', [\n '$q',\n 'ResourceGroup',\n function ResourceGroupServiceFactory($q, ResourceGroup) {\n 'use strict';\n var service = {};\n\n service.resourceGroups = function (subscriptionId) {\n var deferred = $q.defer();\n\n ResourceGroup.query({ subscriptionId: subscriptionId })\n .$promise.then(function success(data) {\n var resourceGroups = data.value.map(function (item) {\n return new ResourceGroupViewModel(item, subscriptionId);\n });\n deferred.resolve(resourceGroups);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve resource groups', err: err });\n });\n\n return deferred.promise;\n };\n\n service.resourceGroup = resourceGroup;\n async function resourceGroup(subscriptionId, resourceGroupName) {\n const group = await ResourceGroup.get({ subscriptionId, resourceGroupName }).$promise;\n return new ResourceGroupViewModel(group);\n }\n\n return service;\n },\n]);\n","import { SubscriptionViewModel } from '../models/subscription';\n\nangular.module('portainer.azure').factory('SubscriptionService', [\n '$q',\n 'Subscription',\n function SubscriptionServiceFactory($q, Subscription) {\n 'use strict';\n var service = {};\n\n service.subscriptions = function () {\n var deferred = $q.defer();\n\n Subscription.query({})\n .$promise.then(function success(data) {\n var subscriptions = data.value.map(function (item) {\n return new SubscriptionViewModel(item);\n });\n deferred.resolve(subscriptions);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve subscriptions', err: err });\n });\n\n return deferred.promise;\n };\n\n service.subscription = subscription;\n async function subscription(id) {\n const subscription = await Subscription.get({ id }).$promise;\n return new SubscriptionViewModel(subscription);\n }\n\n return service;\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./containerInstanceDetails.html');\n\nimport ContainerInstanceDetailsController from './containerInstanceDetailsController.js';\n\nangular.module('portainer.azure').component('containerInstanceDetails', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: ContainerInstanceDetailsController,\n});\n","var path = 'app/azure/views/containerinstances/container-instance-details/containerInstanceDetails.html';\nvar html = \"\\n \\n Container instances > {{ $ctrl.container.Name }} \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n Azure settings\\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n Container configuration\\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    0\\\">\\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n host\\n \\n
    \\n \\n \\n \\n \\n \\n
    \\n container\\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n Container resources\\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.azure').controller('AzureContainerInstancesController', [\n '$scope',\n '$state',\n 'AzureService',\n 'Notifications',\n function ($scope, $state, AzureService, Notifications) {\n function initView() {\n AzureService.subscriptions()\n .then(function success(data) {\n var subscriptions = data;\n return AzureService.containerGroups(subscriptions);\n })\n .then(function success(data) {\n $scope.containerGroups = AzureService.aggregate(data);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to load container groups');\n });\n }\n\n $scope.deleteAction = function (selectedItems) {\n var actionCount = selectedItems.length;\n angular.forEach(selectedItems, function (item) {\n AzureService.deleteContainerGroup(item.Id)\n .then(function success() {\n Notifications.success('Container group successfully removed', item.Name);\n var index = $scope.containerGroups.indexOf(item);\n $scope.containerGroups.splice(index, 1);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove container group');\n })\n .finally(function final() {\n --actionCount;\n if (actionCount === 0) {\n $state.reload();\n }\n });\n });\n };\n\n initView();\n },\n]);\n","import { ContainerGroupDefaultModel } from '../../../models/container_group';\n\nangular.module('portainer.azure').controller('AzureCreateContainerInstanceController', [\n '$q',\n '$scope',\n '$state',\n 'AzureService',\n 'Notifications',\n 'Authentication',\n 'ResourceControlService',\n 'FormValidator',\n function ($q, $scope, $state, AzureService, Notifications, Authentication, ResourceControlService, FormValidator) {\n var allResourceGroups = [];\n var allProviders = [];\n\n $scope.state = {\n actionInProgress: false,\n selectedSubscription: null,\n selectedResourceGroup: null,\n formValidationError: '',\n };\n\n $scope.changeSubscription = function () {\n var selectedSubscription = $scope.state.selectedSubscription;\n updateResourceGroupsAndLocations(selectedSubscription, allResourceGroups, allProviders);\n };\n\n $scope.addPortBinding = function () {\n $scope.model.Ports.push({ host: '', container: '', protocol: 'TCP' });\n };\n\n $scope.removePortBinding = function (index) {\n $scope.model.Ports.splice(index, 1);\n };\n\n $scope.create = function () {\n var model = $scope.model;\n var subscriptionId = $scope.state.selectedSubscription.Id;\n var resourceGroupName = $scope.state.selectedResourceGroup.Name;\n\n $scope.state.formValidationError = validateForm(model);\n if ($scope.state.formValidationError) {\n return false;\n }\n\n $scope.state.actionInProgress = true;\n AzureService.createContainerGroup(model, subscriptionId, resourceGroupName)\n .then(applyResourceControl)\n .then(() => {\n Notifications.success('Container successfully created', model.Name);\n $state.go('azure.containerinstances');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create container');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n\n function applyResourceControl(newResourceGroup) {\n const userId = Authentication.getUserDetails().ID;\n const resourceControl = newResourceGroup.Portainer.ResourceControl;\n const accessControlData = $scope.model.AccessControlData;\n\n return ResourceControlService.applyResourceControl(userId, accessControlData, resourceControl);\n }\n\n function validateForm(model) {\n if (!model.Ports || !model.Ports.length || model.Ports.every((port) => !port.host || !port.container)) {\n return 'At least one port binding is required';\n }\n\n const error = FormValidator.validateAccessControl(model.AccessControlData, Authentication.isAdmin());\n if (error !== '') {\n return error;\n }\n\n return null;\n }\n\n function updateResourceGroupsAndLocations(subscription, resourceGroups, providers) {\n $scope.state.selectedResourceGroup = resourceGroups[subscription.Id][0];\n $scope.resourceGroups = resourceGroups[subscription.Id];\n\n var currentSubLocations = providers[subscription.Id].Locations;\n $scope.model.Location = currentSubLocations[0];\n $scope.locations = currentSubLocations;\n }\n\n function initView() {\n $scope.model = new ContainerGroupDefaultModel();\n\n AzureService.subscriptions()\n .then(function success(data) {\n var subscriptions = data;\n $scope.state.selectedSubscription = subscriptions[0];\n $scope.subscriptions = subscriptions;\n\n return $q.all({\n resourceGroups: AzureService.resourceGroups(subscriptions),\n containerInstancesProviders: AzureService.containerInstanceProvider(subscriptions),\n });\n })\n .then(function success(data) {\n var resourceGroups = data.resourceGroups;\n allResourceGroups = resourceGroups;\n\n var containerInstancesProviders = data.containerInstancesProviders;\n allProviders = containerInstancesProviders;\n\n var selectedSubscription = $scope.state.selectedSubscription;\n updateResourceGroupsAndLocations(selectedSubscription, resourceGroups, containerInstancesProviders);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve Azure resources');\n });\n }\n\n initView();\n },\n]);\n","angular.module('portainer.azure').controller('AzureDashboardController', [\n '$scope',\n 'AzureService',\n 'Notifications',\n function ($scope, AzureService, Notifications) {\n function initView() {\n AzureService.subscriptions()\n .then(function success(data) {\n var subscriptions = data;\n $scope.subscriptions = subscriptions;\n return AzureService.resourceGroups(subscriptions);\n })\n .then(function success(data) {\n $scope.resourceGroups = AzureService.aggregate(data);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to load dashboard data');\n });\n }\n\n initView();\n },\n]);\n","import toastr from 'toastr';\nimport { Terminal } from 'xterm';\nimport * as fit from 'xterm/lib/addons/fit/fit';\n\nangular.module('portainer').config([\n '$urlRouterProvider',\n '$httpProvider',\n 'localStorageServiceProvider',\n 'jwtOptionsProvider',\n '$uibTooltipProvider',\n '$compileProvider',\n 'cfpLoadingBarProvider',\n function ($urlRouterProvider, $httpProvider, localStorageServiceProvider, jwtOptionsProvider, $uibTooltipProvider, $compileProvider, cfpLoadingBarProvider) {\n 'use strict';\n\n var environment = '@@ENVIRONMENT';\n if (environment === 'production') {\n $compileProvider.debugInfoEnabled(false);\n }\n\n localStorageServiceProvider.setPrefix('portainer');\n\n jwtOptionsProvider.config({\n tokenGetter: [\n 'LocalStorage',\n function (LocalStorage) {\n return LocalStorage.getJWT();\n },\n ],\n });\n $httpProvider.interceptors.push('jwtInterceptor');\n $httpProvider.interceptors.push('EndpointStatusInterceptor');\n $httpProvider.defaults.headers.post['Content-Type'] = 'application/json';\n $httpProvider.defaults.headers.put['Content-Type'] = 'application/json';\n $httpProvider.defaults.headers.patch['Content-Type'] = 'application/json';\n\n $httpProvider.interceptors.push([\n 'HttpRequestHelper',\n function (HttpRequestHelper) {\n return {\n request: function (config) {\n if (config.url.indexOf('/docker/') > -1) {\n config.headers['X-PortainerAgent-Target'] = HttpRequestHelper.portainerAgentTargetHeader();\n if (HttpRequestHelper.portainerAgentManagerOperation()) {\n config.headers['X-PortainerAgent-ManagerOperation'] = '1';\n }\n }\n return config;\n },\n };\n },\n ]);\n\n toastr.options.timeOut = 3000;\n\n Terminal.applyAddon(fit);\n\n $uibTooltipProvider.setTriggers({\n mouseenter: 'mouseleave',\n click: 'click',\n focus: 'blur',\n outsideClick: 'outsideClick',\n });\n\n cfpLoadingBarProvider.includeSpinner = false;\n cfpLoadingBarProvider.parentSelector = '#loadingbar-placeholder';\n cfpLoadingBarProvider.latencyThreshold = 600;\n\n $urlRouterProvider.otherwise('/auth');\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./containerCapabilities.html');\n\nangular.module('portainer.docker').component('containerCapabilities', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n capabilities: '=',\n },\n});\n","var path = 'app/docker/components/container-capabilities/containerCapabilities.html';\nvar html = \"
    \\n
    \\n Container capabilities\\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./containerQuickActions.html');\n\nangular.module('portainer.docker').component('containerQuickActions', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n containerId: '<',\n nodeName: '<',\n status: '<',\n state: '<',\n taskId: '<',\n },\n});\n","var path = 'app/docker/components/container-quick-actions/containerQuickActions.html';\nvar html = \"
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.docker').controller('ContainerRestartPolicyController', [\n function ContainerRestartPolicyController() {\n var ctrl = this;\n\n this.state = {\n editModel: {},\n };\n\n ctrl.save = save;\n\n function save() {\n if (ctrl.state.editModel.name === ctrl.name && ctrl.state.editModel.maximumRetryCount === ctrl.maximumRetryCount) {\n return;\n }\n ctrl.updateRestartPolicy(ctrl.state.editModel);\n }\n\n this.$onInit = function () {\n ctrl.state.editModel = {\n name: ctrl.name ? ctrl.name : 'no',\n maximumRetryCount: ctrl.maximumRetryCount,\n };\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./container-restart-policy.html');\n\nangular.module('portainer.docker').component('containerRestartPolicy', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'ContainerRestartPolicyController',\n bindings: {\n name: '<',\n maximumRetryCount: '<',\n updateRestartPolicy: '&',\n },\n});\n","var path = 'app/docker/components/container-restart-policy/container-restart-policy.html';\nvar html = \"
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n Name\\n \\n \\n \\n \\n
    Maximum Retry Count\\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./dashboardClusterAgentInfo.html');\n\nangular.module('portainer.docker').component('dashboardClusterAgentInfo', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'DashboardClusterAgentInfoController',\n});\n","var path = 'app/docker/components/dashboard-cluster-agent-info/dashboardClusterAgentInfo.html';\nvar html = \"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Nodes in the cluster{{ $ctrl.agentCount }}
    \\n \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.docker').controller('DashboardClusterAgentInfoController', [\n 'AgentService',\n 'Notifications',\n function (AgentService, Notifications) {\n var ctrl = this;\n\n this.$onInit = function () {\n AgentService.agents()\n .then(function success(data) {\n ctrl.agentCount = data.length;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve agent information');\n });\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./configsDatatable.html');\n\nangular.module('portainer.docker').component('configsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n refreshCallback: '<',\n },\n});\n","var path = 'app/docker/components/datatables/configs-datatable/configsDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n Settings\\n
    \\n
    \\n
    \\n Table settings\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Remove\\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Creation Date\\n \\n \\n \\n \\n \\n Ownership\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ item.Name }}\\n {{ item.CreatedAt | getisodate }}\\n \\n \\n {{ item.ResourceControl.Ownership ? item.ResourceControl.Ownership : item.ResourceControl.Ownership = $ctrl.RCO.ADMINISTRATORS }}\\n \\n
    Loading...
    No config available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./containerNetworksDatatable.html');\n\nangular.module('portainer.docker').component('containerNetworksDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'ContainerNetworksDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n container: '<',\n availableNetworks: '<',\n joinNetworkAction: '<',\n joinNetworkActionInProgress: '<',\n leaveNetworkActionInProgress: '<',\n leaveNetworkAction: '<',\n nodeName: '<',\n },\n});\n","var path = 'app/docker/components/datatables/container-networks-datatable/containerNetworksDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n Join network\\n Joining network...\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Network\\n IP Address\\n \\n \\n \\n GatewayMAC AddressActions
    \\n \\n \\n \\n {{ key }}\\n {{ value.IPAddress || '-' }}{{ value.Gateway || '-' }}{{ value.MacAddress || '-' }}\\n \\n Leave network\\n Leaving network...\\n \\n
    \\n {{ value.GlobalIPv6Address }}\\n \\n {{ value.IPv6Gateway || '-' }}\\n
    Loading...
    No network available.
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import _ from 'lodash-es';\n\nangular.module('portainer.docker').controller('ContainerNetworksDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n function ($scope, $controller, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n this.state = Object.assign(this.state, {\n expandedItems: [],\n expandAll: true,\n });\n\n this.expandItem = function (item, expanded) {\n if (!this.itemCanExpand(item)) {\n return;\n }\n\n item.Expanded = expanded;\n if (!expanded) {\n item.Highlighted = false;\n }\n if (!item.Expanded) {\n this.state.expandAll = false;\n }\n };\n\n this.itemCanExpand = function (item) {\n return item.GlobalIPv6Address !== '';\n };\n\n this.hasExpandableItems = function () {\n return _.filter(this.dataset, (item) => this.itemCanExpand(item)).length;\n };\n\n this.expandAll = function () {\n this.state.expandAll = !this.state.expandAll;\n _.forEach(this.dataset, (item) => {\n if (this.itemCanExpand(item)) {\n this.expandItem(item, this.state.expandAll);\n }\n });\n };\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n\n _.forEach(this.dataset, (item) => {\n item.Expanded = true;\n item.Highlighted = true;\n });\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./containerProcessesDatatable.html');\n\nangular.module('portainer.docker').component('containerProcessesDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '=',\n headerset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n },\n});\n","var path = 'app/docker/components/datatables/container-processes-datatable/containerProcessesDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n {{ header }}\\n
    {{ info }}
    Loading...
    No process available.
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./containersDatatableActions.html');\n\nangular.module('portainer.docker').component('containersDatatableActions', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'ContainersDatatableActionsController',\n bindings: {\n selectedItems: '=',\n selectedItemCount: '=',\n noStoppedItemsSelected: '=',\n noRunningItemsSelected: '=',\n noPausedItemsSelected: '=',\n showAddAction: '<',\n },\n});\n","var path = 'app/docker/components/datatables/containers-datatable/actions/containersDatatableActions.html';\nvar html = \"\\n
    \\n \\n Start\\n \\n \\n Stop\\n \\n \\n Kill\\n \\n \\n Restart\\n \\n \\n Pause\\n \\n \\n Resume\\n \\n \\n Remove\\n \\n
    \\n \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.docker').controller('ContainersDatatableActionsController', [\n '$state',\n 'ContainerService',\n 'ModalService',\n 'Notifications',\n 'HttpRequestHelper',\n function ($state, ContainerService, ModalService, Notifications, HttpRequestHelper) {\n this.startAction = function (selectedItems) {\n var successMessage = 'Container successfully started';\n var errorMessage = 'Unable to start container';\n executeActionOnContainerList(selectedItems, ContainerService.startContainer, successMessage, errorMessage);\n };\n\n this.stopAction = function (selectedItems) {\n var successMessage = 'Container successfully stopped';\n var errorMessage = 'Unable to stop container';\n executeActionOnContainerList(selectedItems, ContainerService.stopContainer, successMessage, errorMessage);\n };\n\n this.restartAction = function (selectedItems) {\n var successMessage = 'Container successfully restarted';\n var errorMessage = 'Unable to restart container';\n executeActionOnContainerList(selectedItems, ContainerService.restartContainer, successMessage, errorMessage);\n };\n\n this.killAction = function (selectedItems) {\n var successMessage = 'Container successfully killed';\n var errorMessage = 'Unable to kill container';\n executeActionOnContainerList(selectedItems, ContainerService.killContainer, successMessage, errorMessage);\n };\n\n this.pauseAction = function (selectedItems) {\n var successMessage = 'Container successfully paused';\n var errorMessage = 'Unable to pause container';\n executeActionOnContainerList(selectedItems, ContainerService.pauseContainer, successMessage, errorMessage);\n };\n\n this.resumeAction = function (selectedItems) {\n var successMessage = 'Container successfully resumed';\n var errorMessage = 'Unable to resume container';\n executeActionOnContainerList(selectedItems, ContainerService.resumeContainer, successMessage, errorMessage);\n };\n\n this.removeAction = function (selectedItems) {\n var isOneContainerRunning = false;\n for (var i = 0; i < selectedItems.length; i++) {\n var container = selectedItems[i];\n if (container.State === 'running') {\n isOneContainerRunning = true;\n break;\n }\n }\n\n var title = 'You are about to remove one or more container.';\n if (isOneContainerRunning) {\n title = 'You are about to remove one or more running container.';\n }\n\n ModalService.confirmContainerDeletion(title, function (result) {\n if (!result) {\n return;\n }\n var cleanVolumes = false;\n if (result[0]) {\n cleanVolumes = true;\n }\n removeSelectedContainers(selectedItems, cleanVolumes);\n });\n };\n\n function executeActionOnContainerList(containers, action, successMessage, errorMessage) {\n var actionCount = containers.length;\n angular.forEach(containers, function (container) {\n HttpRequestHelper.setPortainerAgentTargetHeader(container.NodeName);\n action(container.Id)\n .then(function success() {\n Notifications.success(successMessage, container.Names[0]);\n })\n .catch(function error(err) {\n errorMessage = errorMessage + ':' + container.Names[0];\n Notifications.error('Failure', err, errorMessage);\n })\n .finally(function final() {\n --actionCount;\n if (actionCount === 0) {\n $state.reload();\n }\n });\n });\n }\n\n function removeSelectedContainers(containers, cleanVolumes) {\n var actionCount = containers.length;\n angular.forEach(containers, function (container) {\n HttpRequestHelper.setPortainerAgentTargetHeader(container.NodeName);\n ContainerService.remove(container, cleanVolumes)\n .then(function success() {\n Notifications.success('Container successfully removed', container.Names[0]);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove container');\n })\n .finally(function final() {\n --actionCount;\n if (actionCount === 0) {\n $state.reload();\n }\n });\n });\n }\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./containersDatatable.html');\n\nangular.module('portainer.docker').component('containersDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'ContainersDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n showHostColumn: '<',\n showAddAction: '<',\n offlineMode: '<',\n refreshCallback: '<',\n },\n});\n","var path = 'app/docker/components/datatables/containers-datatable/containersDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n\\n \\n Settings\\n
    \\n
    \\n
    \\n Table settings\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n Quick actions\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n Quick actions\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n State\\n \\n \\n \\n
    \\n Filter \\n Filter \\n
    \\n
    \\n
    \\n
    \\n Filter by state\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n \\n Stack\\n \\n \\n \\n \\n \\n Image\\n \\n \\n \\n \\n \\n \\n \\n Created\\n \\n \\n \\n IP Address\\n \\n \\n \\n \\n \\n Host\\n \\n \\n \\n \\n \\n Published Ports\\n \\n \\n \\n \\n \\n Ownership\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{\\n item | containername | truncate: $ctrl.settings.containerNameTruncateSize\\n }}\\n {{ item | containername | truncate: $ctrl.settings.containerNameTruncateSize }}\\n \\n {{ item.Status }}\\n {{ item.Status }}\\n {{ item.StackName ? item.StackName : '-' }}\\n {{ item.Image | trimshasum }}\\n {{ item.Image | trimshasum }}\\n \\n {{ item.Created | getisodatefromtimestamp }}\\n {{ item.IP ? item.IP : '-' }}{{ item.NodeName ? item.NodeName : '-' }}\\n 0\\\"\\n ng-repeat=\\\"p in item.Ports\\\"\\n class=\\\"image-tag\\\"\\n ng-href=\\\"http://{{ $ctrl.state.publicURL || p.host }}:{{ p.public }}\\\"\\n target=\\\"_blank\\\"\\n >\\n {{ p.public }}:{{ p.private }}\\n \\n -\\n \\n \\n \\n {{ item.ResourceControl.Ownership ? item.ResourceControl.Ownership : item.ResourceControl.Ownership = $ctrl.RCO.ADMINISTRATORS }}\\n \\n
    Loading...
    No container available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import _ from 'lodash-es';\n\nangular.module('portainer.docker').controller('ContainersDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n 'EndpointProvider',\n function ($scope, $controller, DatatableService, EndpointProvider) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n var ctrl = this;\n\n this.state = Object.assign(this.state, {\n noStoppedItemsSelected: true,\n noRunningItemsSelected: true,\n noPausedItemsSelected: true,\n publicURL: EndpointProvider.endpointPublicURL(),\n });\n\n this.settings = Object.assign(this.settings, {\n truncateContainerName: true,\n containerNameTruncateSize: 32,\n showQuickActionStats: true,\n showQuickActionLogs: true,\n showQuickActionExec: true,\n showQuickActionInspect: true,\n showQuickActionAttach: false,\n });\n\n this.filters = {\n state: {\n open: false,\n enabled: false,\n values: [],\n },\n };\n\n this.columnVisibility = {\n columns: {\n state: {\n label: 'State',\n display: true,\n },\n actions: {\n label: 'Quick Actions',\n display: true,\n },\n stack: {\n label: 'Stack',\n display: true,\n },\n image: {\n label: 'Image',\n display: true,\n },\n created: {\n label: 'Created',\n display: true,\n },\n ip: {\n label: 'IP Address',\n display: true,\n },\n host: {\n label: 'Host',\n display: true,\n },\n ports: {\n label: 'Published Ports',\n display: true,\n },\n ownership: {\n label: 'Ownership',\n display: true,\n },\n },\n };\n\n this.onColumnVisibilityChange = onColumnVisibilityChange.bind(this);\n function onColumnVisibilityChange(columns) {\n this.columnVisibility.columns = columns;\n DatatableService.setColumnVisibilitySettings(this.tableKey, this.columnVisibility);\n }\n\n this.onSelectionChanged = function () {\n this.updateSelectionState();\n };\n\n this.updateSelectionState = function () {\n this.state.noStoppedItemsSelected = true;\n this.state.noRunningItemsSelected = true;\n this.state.noPausedItemsSelected = true;\n\n for (var i = 0; i < this.dataset.length; i++) {\n var item = this.dataset[i];\n if (item.Checked) {\n this.updateSelectionStateBasedOnItemStatus(item);\n }\n }\n };\n\n this.updateSelectionStateBasedOnItemStatus = function (item) {\n if (item.Status === 'paused') {\n this.state.noPausedItemsSelected = false;\n } else if (['stopped', 'created'].indexOf(item.Status) !== -1) {\n this.state.noStoppedItemsSelected = false;\n } else if (['running', 'healthy', 'unhealthy', 'starting'].indexOf(item.Status) !== -1) {\n this.state.noRunningItemsSelected = false;\n }\n };\n\n this.applyFilters = function (value) {\n var container = value;\n var filters = ctrl.filters;\n for (var i = 0; i < filters.state.values.length; i++) {\n var filter = filters.state.values[i];\n if (container.Status === filter.label && filter.display) {\n return true;\n }\n }\n return false;\n };\n\n this.onStateFilterChange = function () {\n var filters = this.filters.state.values;\n var filtered = false;\n for (var i = 0; i < filters.length; i++) {\n var filter = filters[i];\n if (!filter.display) {\n filtered = true;\n }\n }\n this.filters.state.enabled = filtered;\n };\n\n this.onSettingsContainerNameTruncateChange = function () {\n if (this.settings.truncateContainerName) {\n this.settings.containerNameTruncateSize = 32;\n } else {\n this.settings.containerNameTruncateSize = 256;\n }\n DatatableService.setDataTableSettings(this.tableKey, this.settings);\n };\n\n this.onSettingsQuickActionChange = function () {\n DatatableService.setDataTableSettings(this.tableKey, this.settings);\n };\n\n this.prepareTableFromDataset = function () {\n var availableStateFilters = [];\n for (var i = 0; i < this.dataset.length; i++) {\n var item = this.dataset[i];\n availableStateFilters.push({ label: item.Status, display: true });\n }\n this.filters.state.values = _.uniqBy(availableStateFilters, 'label');\n };\n\n this.updateStoredFilters = function (storedFilters) {\n var datasetFilters = this.filters.state.values;\n\n for (var i = 0; i < datasetFilters.length; i++) {\n var filter = datasetFilters[i];\n var existingFilter = _.find(storedFilters, ['label', filter.label]);\n if (existingFilter && !existingFilter.display) {\n filter.display = existingFilter.display;\n this.filters.state.enabled = true;\n }\n }\n };\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n this.filters.state.open = false;\n this.updateStoredFilters(storedFilters.state.values);\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n\n var storedColumnVisibility = DatatableService.getColumnVisibilitySettings(this.tableKey);\n if (storedColumnVisibility !== null) {\n this.columnVisibility = storedColumnVisibility;\n }\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./eventsDatatable.html');\n\nangular.module('portainer.docker').component('eventsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n },\n});\n","var path = 'app/docker/components/datatables/events-datatable/eventsDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Date\\n \\n \\n \\n \\n \\n Category\\n \\n \\n \\n \\n \\n Details\\n \\n \\n \\n
    {{ item.Time | getisodatefromtimestamp }}{{ item.Type }}{{ item.Details }}
    Loading...
    No event available.
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./imagesDatatable.html');\n\nangular.module('portainer.docker').component('imagesDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'ImagesDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n showHostColumn: '<',\n removeAction: '<',\n downloadAction: '<',\n forceRemoveAction: '<',\n exportInProgress: '<',\n offlineMode: '<',\n refreshCallback: '<',\n },\n});\n","var path = 'app/docker/components/datatables/images-datatable/imagesDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n Settings\\n
    \\n
    \\n
    \\n Table settings\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n Toggle Dropdown\\n \\n \\n
    \\n \\n
    \\n \\n \\n \\n Export\\n Export in progress...\\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Id\\n \\n \\n \\n
    \\n Filter \\n Filter \\n
    \\n
    \\n
    \\n
    \\n Filter by usage\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n \\n Tags\\n \\n \\n \\n \\n \\n Size\\n \\n \\n \\n \\n \\n Created\\n \\n \\n \\n \\n \\n Host\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{\\n item.Id | truncate: 40\\n }}\\n {{ item.Id | truncate: 40 }}\\n Unused\\n \\n {{ tag }}\\n {{ item.VirtualSize | humansize }}{{ item.Created | getisodatefromtimestamp }}{{ item.NodeName ? item.NodeName : '-' }}
    Loading...
    No image available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.docker').controller('ImagesDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n function ($scope, $controller, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n var ctrl = this;\n\n this.filters = {\n state: {\n open: false,\n enabled: false,\n showUsedImages: true,\n showUnusedImages: true,\n },\n };\n\n this.applyFilters = function (value) {\n var image = value;\n var filters = ctrl.filters;\n if ((image.ContainerCount === 0 && filters.state.showUnusedImages) || (image.ContainerCount !== 0 && filters.state.showUsedImages)) {\n return true;\n }\n return false;\n };\n\n this.onstateFilterChange = function () {\n var filters = this.filters.state;\n var filtered = false;\n if (!filters.showUsedImages || !filters.showUnusedImages) {\n filtered = true;\n }\n this.filters.state.enabled = filtered;\n DatatableService.setDataTableFilters(this.tableKey, this.filters);\n };\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./macvlanNodesDatatable.html');\n\nangular.module('portainer.docker').component('macvlanNodesDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n showIpAddressColumn: '<',\n accessToNodeDetails: '<',\n state: '=',\n },\n});\n","var path = 'app/docker/components/datatables/macvlan-nodes-datatable/macvlanNodesDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Role\\n \\n \\n \\n \\n \\n Engine\\n \\n \\n \\n \\n \\n IP Address\\n \\n \\n \\n \\n \\n Status\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ item.Hostname }}\\n {{ item.Hostname }}\\n {{ item.Role }}{{ item.EngineVersion }}{{ item.Addr }}\\n {{ item.Status }}\\n
    Loading...
    No node available.
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./networkRowContent.html');\n\nimport { ResourceControlOwnership as RCO } from 'Portainer/models/resourceControl/resourceControlOwnership';\n\nangular.module('portainer.docker').directive('networkRowContent', [\n function networkRowContent() {\n var directive = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n restrict: 'A',\n transclude: true,\n scope: {\n item: '<',\n parentCtrl: '<',\n allowCheckbox: '<',\n allowExpand: '<',\n },\n controller: ($scope) => {\n $scope.RCO = RCO;\n },\n };\n return directive;\n },\n]);\n","var path = 'app/docker/components/datatables/networks-datatable/network-row-content/networkRowContent.html';\nvar html = \"\\n \\n \\n \\n \\n \\n\\n\\n\\n {{ item.Name | truncate: 40 }}\\n {{ item.Name | truncate: 40 }}\\n System\\n\\n{{ item.StackName ? item.StackName : '-' }}\\n{{ item.Driver }}\\n{{ item.Attachable }}\\n{{ item.IPAM.Driver }}\\n{{ item.IPAM.IPV4Configs[0].Subnet ? item.IPAM.IPV4Configs[0].Subnet : '-' }}\\n{{ item.IPAM.IPV4Configs[0].Gateway ? item.IPAM.IPV4Configs[0].Gateway : '-' }}\\n{{ item.IPAM.IPV6Configs[0].Subnet ? item.IPAM.IPV6Configs[0].Subnet : '-' }}\\n{{ item.IPAM.IPV6Configs[0].Gateway ? item.IPAM.IPV6Configs[0].Gateway : '-' }}\\n{{ item.NodeName ? item.NodeName : '-' }}\\n\\n \\n \\n {{ item.ResourceControl.Ownership ? item.ResourceControl.Ownership : item.ResourceControl.Ownership = RCO.ADMINISTRATORS }}\\n \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./networksDatatable.html');\n\nangular.module('portainer.docker').component('networksDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'NetworksDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n showHostColumn: '<',\n removeAction: '<',\n offlineMode: '<',\n refreshCallback: '<',\n },\n});\n","var path = 'app/docker/components/datatables/networks-datatable/networksDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n Settings\\n
    \\n
    \\n
    \\n Table settings\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Remove\\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Stack\\n \\n \\n \\n \\n \\n Driver\\n \\n \\n \\n \\n \\n Attachable\\n \\n \\n \\n \\n \\n IPAM Driver\\n \\n \\n \\n \\n \\n IPV4 IPAM Subnet\\n \\n \\n \\n \\n \\n IPV4 IPAM Gateway\\n \\n \\n \\n \\n \\n IPV6 IPAM Subnet\\n \\n \\n \\n \\n \\n IPV6 IPAM Gateway\\n \\n \\n \\n \\n \\n Host\\n \\n \\n \\n \\n \\n Ownership\\n \\n \\n \\n
    Loading...
    No network available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import _ from 'lodash-es';\n\nangular.module('portainer.docker').controller('NetworksDatatableController', [\n '$scope',\n '$controller',\n 'NetworkHelper',\n 'DatatableService',\n function ($scope, $controller, NetworkHelper, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n this.disableRemove = function (item) {\n return NetworkHelper.isSystemNetwork(item);\n };\n\n this.state = Object.assign(this.state, {\n expandedItems: [],\n });\n\n /**\n * Do not allow system networks to be selected\n */\n this.allowSelection = function (item) {\n return !this.disableRemove(item);\n };\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n\n this.expandItem = function (item, expanded) {\n item.Expanded = expanded;\n };\n\n this.itemCanExpand = function (item) {\n return item.Subs.length > 0;\n };\n\n this.hasExpandableItems = function () {\n return _.filter(this.state.filteredDataSet, (item) => this.itemCanExpand(item)).length;\n };\n\n this.expandAll = function () {\n this.state.expandAll = !this.state.expandAll;\n _.forEach(this.state.filteredDataSet, (item) => {\n if (this.itemCanExpand(item)) {\n this.expandItem(item, this.state.expandAll);\n }\n });\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./nodeTasksDatatable.html');\n\nangular.module('portainer.docker').component('nodeTasksDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n },\n});\n","var path = 'app/docker/components/datatables/node-tasks-datatable/nodeTasksDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ item.Id }}\\n {{ item.Status.State }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Id\\n \\n \\n \\n \\n \\n Status\\n \\n \\n \\n \\n \\n Slot\\n \\n \\n \\n \\n \\n Image\\n \\n \\n \\n \\n \\n Last Update\\n \\n \\n \\n
    {{ item.Slot ? item.Slot : '-' }}{{ item.Spec.ContainerSpec.Image | hideshasum }}{{ item.Updated | getisodate }}
    Loading...
    No task available.
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./nodesDatatable.html');\n\nangular.module('portainer.docker').component('nodesDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n showIpAddressColumn: '<',\n accessToNodeDetails: '<',\n refreshCallback: '<',\n },\n});\n","var path = 'app/docker/components/datatables/nodes-datatable/nodesDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n Settings\\n
    \\n
    \\n
    \\n Table settings\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ item.Status }}\\n {{ item.Availability }}\\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Name\\n \\n \\n \\n \\n \\n Role\\n \\n \\n \\n \\n \\n CPU\\n \\n \\n \\n \\n \\n Memory\\n \\n \\n \\n \\n \\n Engine\\n \\n \\n \\n \\n \\n IP Address\\n \\n \\n \\n \\n \\n Status\\n \\n \\n \\n \\n \\n Availability\\n \\n \\n \\n
    \\n {{ item.Name || item.Hostname }}\\n {{ item.Name || item.Hostname }}\\n {{ item.Role }}{{ item.CPUs / 1000000000 }}{{ item.Memory | humansize }}{{ item.EngineVersion }}{{ item.Addr }}
    Loading...
    No node available.
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./secretsDatatable.html');\n\nangular.module('portainer.docker').component('secretsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n refreshCallback: '<',\n },\n});\n","var path = 'app/docker/components/datatables/secrets-datatable/secretsDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n Settings\\n
    \\n
    \\n
    \\n Table settings\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Remove\\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Creation Date\\n \\n \\n \\n \\n \\n Ownership\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ item.Name }}\\n {{ item.CreatedAt | getisodate }}\\n \\n \\n {{ item.ResourceControl.Ownership ? item.ResourceControl.Ownership : item.ResourceControl.Ownership = $ctrl.RCO.ADMINISTRATORS }}\\n \\n
    Loading...
    No secret available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./serviceTasksDatatable.html');\n\nangular.module('portainer.docker').component('serviceTasksDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'ServiceTasksDatatableController',\n bindings: {\n dataset: '<',\n serviceId: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n nodes: '<',\n agentProxy: '<',\n textFilter: '=',\n showTaskLogsButton: '<',\n },\n});\n","var path = 'app/docker/components/datatables/service-tasks-datatable/serviceTasksDatatable.html';\nvar html = \"
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Status\\n \\n \\n \\n \\n Filter \\n Filter \\n \\n
    \\n
    \\n
    \\n Filter by state\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    TaskActions\\n \\n Slot\\n \\n \\n \\n \\n \\n Node\\n \\n \\n \\n \\n \\n Last Update\\n \\n \\n \\n
    \\n {{ item.Status.State }}\\n \\n {{ item.Id }}\\n {{\\n item.Id\\n }}\\n \\n \\n \\n {{ item.Slot ? item.Slot : '-' }}{{ item.NodeId | tasknodename: $ctrl.nodes }}{{ item.Updated | getisodate }}
    No task matching filter.
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import _ from 'lodash-es';\n\nangular.module('portainer.docker').controller('ServiceTasksDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n function ($scope, $controller, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n var ctrl = this;\n\n this.state = Object.assign(this.state, {\n showQuickActionStats: true,\n showQuickActionLogs: true,\n showQuickActionConsole: true,\n showQuickActionInspect: true,\n showQuickActionExec: true,\n showQuickActionAttach: false,\n });\n\n this.filters = {\n state: {\n open: false,\n enabled: false,\n values: [],\n },\n };\n\n this.applyFilters = function (item) {\n var filters = ctrl.filters;\n for (var i = 0; i < filters.state.values.length; i++) {\n var filter = filters.state.values[i];\n if (item.Status.State === filter.label && filter.display) {\n return true;\n }\n }\n return false;\n };\n\n this.onStateFilterChange = function () {\n var filters = this.filters.state.values;\n var filtered = false;\n for (var i = 0; i < filters.length; i++) {\n var filter = filters[i];\n if (!filter.display) {\n filtered = true;\n }\n }\n this.filters.state.enabled = filtered;\n };\n\n this.prepareTableFromDataset = function () {\n var availableStateFilters = [];\n for (var i = 0; i < this.dataset.length; i++) {\n var item = this.dataset[i];\n availableStateFilters.push({ label: item.Status.State, display: true });\n }\n this.filters.state.values = _.uniqBy(availableStateFilters, 'label');\n };\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./servicesDatatableActions.html');\n\nangular.module('portainer.docker').component('servicesDatatableActions', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'ServicesDatatableActionsController',\n bindings: {\n selectedItems: '=',\n selectedItemCount: '=',\n showUpdateAction: '<',\n showAddAction: '<',\n },\n});\n","var path = 'app/docker/components/datatables/services-datatable/actions/servicesDatatableActions.html';\nvar html = \"
    \\n
    \\n \\n Update\\n \\n \\n Remove\\n \\n
    \\n \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.docker').controller('ServicesDatatableActionsController', [\n '$q',\n '$state',\n 'ServiceService',\n 'ServiceHelper',\n 'Notifications',\n 'ModalService',\n 'ImageHelper',\n 'WebhookService',\n 'EndpointProvider',\n function ($q, $state, ServiceService, ServiceHelper, Notifications, ModalService, ImageHelper, WebhookService, EndpointProvider) {\n this.scaleAction = function scaleService(service) {\n var config = ServiceHelper.serviceToConfig(service.Model);\n config.Mode.Replicated.Replicas = service.Replicas;\n ServiceService.update(service, config)\n .then(function success() {\n Notifications.success('Service successfully scaled', 'New replica count: ' + service.Replicas);\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to scale service');\n service.Scale = false;\n service.Replicas = service.ReplicaCount;\n });\n };\n\n this.removeAction = function (selectedItems) {\n ModalService.confirmDeletion(\n 'Do you want to remove the selected service(s)? All the containers associated to the selected service(s) will be removed too.',\n function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n removeServices(selectedItems);\n }\n );\n };\n\n this.updateAction = function (selectedItems) {\n ModalService.confirmServiceForceUpdate(\n 'Do you want to force an update of the selected service(s)? All the tasks associated to the selected service(s) will be recreated.',\n function (result) {\n if (!result) {\n return;\n }\n var pullImage = false;\n if (result[0]) {\n pullImage = true;\n }\n forceUpdateServices(selectedItems, pullImage);\n }\n );\n };\n\n function forceUpdateServices(services, pullImage) {\n var actionCount = services.length;\n angular.forEach(services, function (service) {\n var config = ServiceHelper.serviceToConfig(service.Model);\n if (pullImage) {\n config.TaskTemplate.ContainerSpec.Image = ImageHelper.removeDigestFromRepository(config.TaskTemplate.ContainerSpec.Image);\n }\n\n // As explained in https://github.com/docker/swarmkit/issues/2364 ForceUpdate can accept a random\n // value or an increment of the counter value to force an update.\n config.TaskTemplate.ForceUpdate++;\n ServiceService.update(service, config)\n .then(function success() {\n Notifications.success('Service successfully updated', service.Name);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to force update service', service.Name);\n })\n .finally(function final() {\n --actionCount;\n if (actionCount === 0) {\n $state.reload();\n }\n });\n });\n }\n\n function removeServices(services) {\n var actionCount = services.length;\n angular.forEach(services, function (service) {\n ServiceService.remove(service)\n .then(function success() {\n return WebhookService.webhooks(service.Id, EndpointProvider.endpointID());\n })\n .then(function success(data) {\n return $q.when(data.length !== 0 && WebhookService.deleteWebhook(data[0].Id));\n })\n .then(function success() {\n Notifications.success('Service successfully removed', service.Name);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove service');\n })\n .finally(function final() {\n --actionCount;\n if (actionCount === 0) {\n $state.reload();\n }\n });\n });\n }\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./servicesDatatable.html');\n\nangular.module('portainer.docker').component('servicesDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'ServicesDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n nodes: '<',\n agentProxy: '<',\n showUpdateAction: '<',\n showAddAction: '<',\n showStackColumn: '<',\n showTaskLogsButton: '<',\n refreshCallback: '<',\n },\n});\n","var path = 'app/docker/components/datatables/services-datatable/servicesDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n Settings\\n
    \\n
    \\n
    \\n Table settings\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Stack\\n \\n \\n \\n \\n \\n Image\\n \\n \\n \\n \\n \\n Scheduling Mode\\n \\n \\n \\n \\n \\n Published Ports\\n \\n \\n \\n \\n \\n Last Update\\n \\n \\n \\n \\n \\n Ownership\\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n \\n {{ item.Name }}\\n {{ item.StackName ? item.StackName : '-' }}{{ item.Image | hideshasum }}\\n {{ item.Mode }}\\n {{ item.Tasks | runningtaskscount }} / {{ item.Mode === 'replicated' ? item.Replicas : ($ctrl.nodes | availablenodecount: item) }}\\n \\n \\n Scale\\n \\n \\n \\n \\n \\n \\n \\n \\n 0 && p.PublishedPort\\\"\\n ng-repeat=\\\"p in item.Ports\\\"\\n class=\\\"image-tag\\\"\\n ng-href=\\\"http://{{ $ctrl.state.publicURL }}:{{ p.PublishedPort }}\\\"\\n target=\\\"_blank\\\"\\n ng-click=\\\"$event.stopPropagation();\\\"\\n >\\n {{ p.PublishedPort }}:{{ p.TargetPort }}\\n \\n -\\n {{ item.UpdatedAt | getisodate }}\\n \\n \\n {{ item.ResourceControl.Ownership ? item.ResourceControl.Ownership : item.ResourceControl.Ownership = $ctrl.RCO.ADMINISTRATORS }}\\n \\n
    \\n \\n
    Loading...
    No service available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import _ from 'lodash-es';\n\nangular.module('portainer.docker').controller('ServicesDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n 'EndpointProvider',\n function ($scope, $controller, DatatableService, EndpointProvider) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n var ctrl = this;\n\n this.state = Object.assign(this.state, {\n expandAll: false,\n expandedItems: [],\n publicURL: EndpointProvider.endpointPublicURL(),\n });\n\n this.expandAll = function () {\n this.state.expandAll = !this.state.expandAll;\n for (var i = 0; i < this.state.filteredDataSet.length; i++) {\n var item = this.state.filteredDataSet[i];\n this.expandItem(item, this.state.expandAll);\n }\n };\n\n this.expandItem = function (item, expanded) {\n item.Expanded = expanded;\n if (item.Expanded) {\n if (this.state.expandedItems.indexOf(item.Id) === -1) {\n this.state.expandedItems.push(item.Id);\n }\n } else {\n var index = this.state.expandedItems.indexOf(item.Id);\n if (index > -1) {\n this.state.expandedItems.splice(index, 1);\n }\n }\n DatatableService.setDataTableExpandedItems(this.tableKey, this.state.expandedItems);\n };\n\n function expandPreviouslyExpandedItem(item, storedExpandedItems) {\n var expandedItem = _.find(storedExpandedItems, function (storedId) {\n return item.Id === storedId;\n });\n\n if (expandedItem) {\n ctrl.expandItem(item, true);\n }\n }\n\n this.expandItems = function (storedExpandedItems) {\n var expandedItemCount = 0;\n this.state.expandedItems = storedExpandedItems;\n\n for (var i = 0; i < this.dataset.length; i++) {\n var item = this.dataset[i];\n expandPreviouslyExpandedItem(item, storedExpandedItems);\n if (item.Expanded) {\n ++expandedItemCount;\n }\n }\n\n if (expandedItemCount === this.dataset.length) {\n this.state.expandAll = true;\n }\n };\n\n this.onDataRefresh = function () {\n var storedExpandedItems = DatatableService.getDataTableExpandedItems(this.tableKey);\n if (storedExpandedItems !== null) {\n this.expandItems(storedExpandedItems);\n }\n };\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedExpandedItems = DatatableService.getDataTableExpandedItems(this.tableKey);\n if (storedExpandedItems !== null) {\n this.expandItems(storedExpandedItems);\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./tasksDatatable.html');\n\nangular.module('portainer.docker').component('tasksDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'TasksDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n nodes: '<',\n showSlotColumn: '<',\n showLogsButton: '<',\n agentProxy: '<',\n },\n});\n","var path = 'app/docker/components/datatables/tasks-datatable/tasksDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ item.Status.State }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Status\\n \\n \\n \\n \\n \\n Id\\n \\n \\n \\n Actions\\n \\n Slot\\n \\n \\n \\n \\n \\n Node\\n \\n \\n \\n \\n \\n Last Update\\n \\n \\n \\n
    \\n {{ item.ServiceName }}{{ item.Slot ? '.' + item.Slot : '' }}{{ '.' + item.Id }}\\n {{ item.ServiceName }}{{ item.Slot ? '.' + item.Slot : '' }}{{ '.' + item.Id }}\\n \\n \\n \\n {{ item.Slot ? item.Slot : '-' }}{{ item.NodeId | tasknodename: $ctrl.nodes }}{{ item.Updated | getisodate }}
    Loading...
    No task available.
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.docker').controller('TasksDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n function ($scope, $controller, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n this.state = Object.assign(this.state, {\n showQuickActionStats: true,\n showQuickActionLogs: true,\n showQuickActionExec: true,\n showQuickActionInspect: true,\n showQuickActionAttach: false,\n });\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./volumesDatatable.html');\n\nangular.module('portainer.docker').component('volumesDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'VolumesDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n showHostColumn: '<',\n removeAction: '<',\n showBrowseAction: '<',\n offlineMode: '<',\n refreshCallback: '<',\n },\n});\n","var path = 'app/docker/components/datatables/volumes-datatable/volumesDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n Settings\\n
    \\n
    \\n
    \\n Table settings\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Remove\\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n
    \\n Filter \\n Filter \\n
    \\n
    \\n
    \\n
    \\n Filter by usage\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n \\n Stack\\n \\n \\n \\n \\n \\n Driver\\n \\n \\n \\n \\n \\n Mount point\\n \\n \\n \\n \\n \\n Created\\n \\n \\n \\n \\n \\n Host\\n \\n \\n \\n \\n \\n Ownership\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{\\n item.Id | truncate: 40\\n }}\\n {{ item.Id | truncate: 40 }}\\n \\n \\n browse\\n \\n \\n Unused\\n {{ item.StackName ? item.StackName : '-' }}{{ item.Driver }}{{ item.Mountpoint | truncatelr }}{{ item.CreatedAt | getisodate }}{{ item.NodeName ? item.NodeName : '-' }}\\n \\n \\n {{ item.ResourceControl.Ownership ? item.ResourceControl.Ownership : item.ResourceControl.Ownership = $ctrl.RCO.ADMINISTRATORS }}\\n \\n
    Loading...
    No volume available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.docker').controller('VolumesDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n function ($scope, $controller, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n var ctrl = this;\n\n this.filters = {\n state: {\n open: false,\n enabled: false,\n showUsedVolumes: true,\n showUnusedVolumes: true,\n },\n };\n\n this.applyFilters = function (value) {\n var volume = value;\n var filters = ctrl.filters;\n if ((volume.dangling && filters.state.showUnusedVolumes) || (!volume.dangling && filters.state.showUsedVolumes)) {\n return true;\n }\n return false;\n };\n\n this.onstateFilterChange = function () {\n var filters = this.filters.state;\n var filtered = false;\n if (!filters.showUsedVolumes || !filters.showUnusedVolumes) {\n filtered = true;\n }\n this.filters.state.enabled = filtered;\n DatatableService.setDataTableFilters(this.tableKey, this.filters);\n };\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./dockerSidebarContent.html');\n\nangular.module('portainer.docker').component('dockerSidebarContent', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n endpointApiVersion: '<',\n swarmManagement: '<',\n standaloneManagement: '<',\n adminAccess: '<',\n offlineMode: '<',\n toggle: '<',\n currentRouteName: '<',\n endpointId: '<',\n showStacks: '<',\n },\n});\n","var path = 'app/docker/components/dockerSidebarContent/dockerSidebarContent.html';\nvar html = \"
  • \\n Dashboard \\n
  • \\n
  • \\n App Templates \\n\\n \\n
  • \\n
  • \\n Stacks \\n
  • \\n
  • \\n Services \\n
  • \\n
  • \\n Containers \\n
  • \\n
  • \\n Images \\n
  • \\n
  • \\n Networks \\n
  • \\n
  • \\n Volumes \\n
  • \\n
  • = 1.3 && $ctrl.swarmManagement\\\">\\n Configs \\n
  • \\n
  • = 1.25 && $ctrl.swarmManagement\\\">\\n Secrets \\n
  • \\n
  • \\n Events \\n
  • \\n
  • \\n Swarm \\n\\n
    \\n Setup\\n
    \\n
  • \\n
  • \\n Host \\n\\n
    \\n Setup\\n
    \\n
  • \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./host-overview.html');\n\nangular.module('portainer.docker').component('hostOverview', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n hostDetails: '<',\n engineDetails: '<',\n devices: '<',\n disks: '<',\n isAgent: '<',\n offlineMode: '<',\n agentApiVersion: '<',\n refreshUrl: '@',\n browseUrl: '@',\n hostFeaturesEnabled: '<',\n },\n transclude: true,\n});\n","var path = 'app/docker/components/host-overview/host-overview.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Docker\\n\\n\\n\\n\\n 1 && !$ctrl.offlineMode && $ctrl.hostFeaturesEnabled\\\"\\n browse-url=\\\"{{ $ctrl.browseUrl }}\\\"\\n>\\n\\n\\n\\n 1 && !$ctrl.offlineMode && $ctrl.hostFeaturesEnabled\\\" devices=\\\"$ctrl.devices\\\">\\n 1 && !$ctrl.offlineMode && $ctrl.hostFeaturesEnabled\\\" disks=\\\"$ctrl.disks\\\">\\n\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./devices-panel.html');\n\nangular.module('portainer.docker').component('devicesPanel', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n devices: '<',\n },\n});\n","var path = 'app/docker/components/host-view-panels/devices-panel/devices-panel.html';\nvar html = \"
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    NameVendor
    {{ device.Name }}{{ device.Vendor }}
    Loading...
    \\n No device available.\\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./disks-panel.html');\n\nangular.module('portainer.docker').component('disksPanel', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n disks: '<',\n },\n});\n","var path = 'app/docker/components/host-view-panels/disks-panel/disks-panel.html';\nvar html = \"
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    VendorSize
    {{ disk.Vendor }}{{ disk.Size | humansize }}
    Loading...
    \\n No disks available.\\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./engine-details-panel.html');\n\nangular.module('portainer.docker').component('engineDetailsPanel', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n engine: '<',\n },\n});\n","var path = 'app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html';\nvar html = \"
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n {{ $ctrl.engine.releaseVersion }} (API: {{ $ctrl.engine.apiVersion }})\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Version
    Root directory{{ $ctrl.engine.rootDirectory }}
    Storage Driver{{ $ctrl.engine.storageDriver }}
    Logging Driver{{ $ctrl.engine.loggingDriver }}
    Volume Plugins{{ $ctrl.engine.volumePlugins | arraytostr: ', ' }}
    Network Plugins{{ $ctrl.engine.networkPlugins | arraytostr: ', ' }}
    Engine Labels{{ $ctrl.engine.engineLabels | labelsToStr: ', ' }}
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./host-details-panel.html');\n\nangular.module('portainer.docker').component('hostDetailsPanel', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n host: '<',\n isBrowseEnabled: '<',\n browseUrl: '@',\n },\n});\n","var path = 'app/docker/components/host-view-panels/host-details-panel/host-details-panel.html';\nvar html = \"
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Hostname{{ $ctrl.host.name }}
    OS Information{{ $ctrl.host.os.type }} {{ $ctrl.host.os.arch }} {{ $ctrl.host.os.name }}
    Kernel Version{{ $ctrl.host.kernelVersion }}
    Total CPU{{ $ctrl.host.totalCPU }}
    Total memory{{ $ctrl.host.totalMemory | humansize }}
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.docker').controller('NodeAvailabilitySelectController', [\n function NodeAvailabilitySelectController() {\n this.onChange = onChange;\n\n function onChange() {\n this.onSave({ availability: this.availability });\n }\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./node-availability-select.html');\n\nangular.module('portainer.docker').component('nodeAvailabilitySelect', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'NodeAvailabilitySelectController',\n bindings: {\n availability: '<',\n originalValue: '<',\n onSave: '&',\n },\n});\n","var path = 'app/docker/components/host-view-panels/node-availability-select/node-availability-select.html';\nvar html = \"
    \\n \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.docker').controller('NodeLabelsTableController', [\n function NodeLabelsTableController() {\n var ctrl = this;\n ctrl.removeLabel = removeLabel;\n ctrl.updateLabel = updateLabel;\n\n function removeLabel(index) {\n var label = ctrl.labels.splice(index, 1);\n if (label !== null) {\n ctrl.onChangedLabels({ labels: ctrl.labels });\n }\n }\n\n function updateLabel(label) {\n if (label.value !== label.originalValue || label.key !== label.originalKey) {\n ctrl.onChangedLabels({ labels: ctrl.labels });\n }\n }\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./node-labels-table.html');\n\nangular.module('portainer.docker').component('nodeLabelsTable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'NodeLabelsTableController',\n bindings: {\n labels: '<',\n onChangedLabels: '&',\n },\n});\n","var path = 'app/docker/components/host-view-panels/node-labels-table/node-labels-table.html';\nvar html = \"
    \\n There are no labels for this node.\\n
    \\n\\n
    \\n
    \\n
    \\n name\\n \\n
    \\n
    \\n value\\n \\n
    \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.docker').controller('SwarmNodeDetailsPanelController', [\n 'NodeService',\n 'LabelHelper',\n 'Notifications',\n '$state',\n function SwarmNodeDetailsPanelController(NodeService, LabelHelper, Notifications, $state) {\n var ctrl = this;\n ctrl.state = {\n managerAddress: '',\n hasChanges: false,\n };\n ctrl.$onChanges = $onChanges;\n ctrl.addLabel = addLabel;\n ctrl.updateNodeLabels = updateNodeLabels;\n ctrl.updateNodeAvailability = updateNodeAvailability;\n ctrl.saveChanges = saveChanges;\n ctrl.cancelChanges = cancelChanges;\n\n var managerRole = 'manager';\n\n function $onChanges() {\n if (!ctrl.details) {\n return;\n }\n if (ctrl.details.role === managerRole) {\n ctrl.state.managerAddress = '(' + ctrl.details.managerAddress + ')';\n }\n }\n\n function addLabel() {\n ctrl.details.nodeLabels.push({\n key: '',\n value: '',\n originalValue: '',\n originalKey: '',\n });\n }\n\n function updateNodeLabels(labels) {\n ctrl.details.nodeLabels = labels;\n ctrl.state.hasChanges = true;\n }\n\n function updateNodeAvailability(availability) {\n ctrl.details.availability = availability;\n ctrl.state.hasChanges = true;\n }\n\n function saveChanges() {\n var originalNode = ctrl.originalNode;\n var config = {\n Name: originalNode.Name,\n Availability: ctrl.details.availability,\n Role: originalNode.Role,\n Labels: LabelHelper.fromKeyValueToLabelHash(ctrl.details.nodeLabels),\n Id: originalNode.Id,\n Version: originalNode.Version,\n };\n\n NodeService.updateNode(config).then(onUpdateSuccess).catch(notifyOnError);\n\n function onUpdateSuccess() {\n Notifications.success('Node successfully updated', 'Node updated');\n $state.go('docker.nodes.node', { id: originalNode.Id }, { reload: true });\n }\n\n function notifyOnError(error) {\n Notifications.error('Failure', error, 'Failed to update node');\n }\n }\n\n function cancelChanges() {\n cancelLabelChanges();\n ctrl.details.availability = ctrl.originalNode.Availability;\n ctrl.state.hasChanges = false;\n }\n\n function cancelLabelChanges() {\n ctrl.details.nodeLabels = ctrl.details.nodeLabels\n .filter(function (label) {\n return label.originalValue || label.originalKey;\n })\n .map(function (label) {\n return Object.assign(label, {\n value: label.originalValue,\n key: label.originalKey,\n });\n });\n }\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./swarm-node-details-panel.html');\n\nangular.module('portainer.docker').component('swarmNodeDetailsPanel', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'SwarmNodeDetailsPanelController',\n bindings: {\n details: '<',\n originalNode: '<',\n },\n});\n","var path = 'app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html';\nvar html = \"
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ $ctrl.details.status }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Node name{{ $ctrl.details.name }}
    Role{{ $ctrl.details.role }} {{ $ctrl.state.managerAddress }}
    Availability\\n \\n \\n
    Status
    \\n
    \\n label \\n
    \\n Node Labels\\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./por-image-registry-rate-limits.html');\n\nimport angular from 'angular';\n\nimport controller from './por-image-registry-rate-limits.controller';\n\nangular.module('portainer.docker').component('porImageRegistryRateLimits', {\n bindings: {\n endpoint: '<',\n setValidity: '<',\n isAdmin: '<',\n isDockerHubRegistry: '<',\n isAuthenticated: '<',\n },\n controller,\n transclude: {\n rateLimitExceeded: '?porImageRegistryRateLimitExceeded',\n },\n templateUrl: autoNgTemplateLoaderTemplate1,\n});\n","var path = 'app/docker/components/imageRegistry/por-image-registry-rate-limits.html';\nvar html = \"
    \\n
    \\n
    0\\\" class=\\\"text-muted\\\">\\n \\n \\n You are currently using a free account to pull images from DockerHub and will be limited to 200 pulls every 6 hours. Remaining pulls:\\n {{ $ctrl.pullRateLimits.remaining }}/{{ $ctrl.pullRateLimits.limit }}\\n \\n \\n \\n You are currently using an anonymous account to pull images from DockerHub and will be limited to 100 pulls every 6 hours. You can configure DockerHub authentication in\\n the\\n Registries View. Remaining pulls:\\n {{ $ctrl.pullRateLimits.remaining }}/{{ $ctrl.pullRateLimits.limit }}\\n \\n \\n You are currently using an anonymous account to pull images from DockerHub and will be limited to 100 pulls every 6 hours. Contact your administrator to configure\\n DockerHub authentication. Remaining pulls: {{ $ctrl.pullRateLimits.remaining }}/{{ $ctrl.pullRateLimits.limit }}\\n \\n \\n
    \\n
    \\n \\n \\n Your authorized pull count quota as a free user is now exceeded.\\n You will not be able to pull any image from the DockerHub registry.\\n \\n \\n Your authorized pull count quota as an anonymous user is now exceeded.\\n You will not be able to pull any image from the DockerHub registry.\\n \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\nimport _ from 'lodash-es';\nimport { DockerHubViewModel } from 'Portainer/models/dockerhub';\nimport { RegistryTypes } from '@/portainer/models/registryTypes';\n\nclass porImageRegistryController {\n /* @ngInject */\n constructor($async, $scope, ImageHelper, RegistryService, DockerHubService, ImageService, Notifications) {\n this.$async = $async;\n this.$scope = $scope;\n this.ImageHelper = ImageHelper;\n this.RegistryService = RegistryService;\n this.DockerHubService = DockerHubService;\n this.ImageService = ImageService;\n this.Notifications = Notifications;\n\n this.onInit = this.onInit.bind(this);\n this.onRegistryChange = this.onRegistryChange.bind(this);\n\n this.$scope.$watch(() => this.model.Registry, this.onRegistryChange);\n }\n\n isKnownRegistry(registry) {\n return !(registry instanceof DockerHubViewModel) && registry.URL;\n }\n\n getRegistryURL(registry) {\n let url = registry.URL;\n if (registry.Type === RegistryTypes.GITLAB) {\n url = registry.URL + '/' + registry.Gitlab.ProjectPath;\n }\n return url;\n }\n\n prepareAutocomplete() {\n let images = [];\n const registry = this.model.Registry;\n if (this.isKnownRegistry(registry)) {\n const url = this.getRegistryURL(registry);\n const registryImages = _.filter(this.images, (image) => _.includes(image, url));\n images = _.map(registryImages, (image) => _.replace(image, new RegExp(url + '/?'), ''));\n } else {\n const registries = _.filter(this.availableRegistries, (reg) => this.isKnownRegistry(reg));\n const registryImages = _.flatMap(registries, (registry) => _.filter(this.images, (image) => _.includes(image, registry.URL)));\n const imagesWithoutKnown = _.difference(this.images, registryImages);\n images = _.filter(imagesWithoutKnown, (image) => !this.ImageHelper.imageContainsURL(image));\n }\n this.availableImages = images;\n }\n\n isDockerHubRegistry() {\n return this.model.UseRegistry && this.model.Registry.Name === 'DockerHub';\n }\n\n async onRegistryChange() {\n this.prepareAutocomplete();\n if (this.model.Registry.Type === RegistryTypes.GITLAB && this.model.Image) {\n this.model.Image = _.replace(this.model.Image, this.model.Registry.Gitlab.ProjectPath, '');\n }\n }\n\n displayedRegistryURL() {\n return this.getRegistryURL(this.model.Registry) || 'docker.io';\n }\n\n async onInit() {\n try {\n const [registries, dockerhub, images] = await Promise.all([\n this.RegistryService.registries(),\n this.DockerHubService.dockerhub(),\n this.autoComplete ? this.ImageService.images() : [],\n ]);\n this.images = this.ImageService.getUniqueTagListFromImages(images);\n this.availableRegistries = _.concat(dockerhub, registries);\n\n const id = this.model.Registry.Id;\n if (!id) {\n this.model.Registry = dockerhub;\n } else {\n this.model.Registry = _.find(this.availableRegistries, { Id: id });\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve registries');\n }\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n}\n\nexport default porImageRegistryController;\nangular.module('portainer.docker').controller('porImageRegistryController', porImageRegistryController);\n","const autoNgTemplateLoaderTemplate1 = require('./por-image-registry.html');\n\nangular.module('portainer.docker').component('porImageRegistry', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'porImageRegistryController',\n bindings: {\n model: '=', // must be of type PorImageRegistryModel\n pullWarning: '<',\n autoComplete: '<',\n labelClass: '@',\n inputClass: '@',\n endpoint: '<',\n isAdmin: '<',\n checkRateLimits: '<',\n onImageChange: '&',\n setValidity: '<',\n },\n require: {\n form: '^form',\n },\n transclude: true,\n});\n","var path = 'app/docker/components/imageRegistry/por-image-registry.html';\nvar html = \"\\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n {{ $ctrl.displayedRegistryURL() }}\\n \\n \\n \\n Search\\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n

    \\n \\n When using advanced mode, image and repository must be publicly available.\\n

    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n

    \\n Image name is required.\\n Tag must be specified otherwise Portainer will pull all tags associated to the image.\\n

    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n\\n
    \\n\\n \\n \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./logViewer.html');\n\nangular.module('portainer.docker').component('logViewer', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'LogViewerController',\n bindings: {\n data: '=',\n displayTimestamps: '=',\n logCollectionChange: '<',\n sinceTimestamp: '=',\n lineCount: '=',\n resourceName: '<',\n },\n});\n","var path = 'app/docker/components/log-viewer/logViewer.html';\nvar html = \"
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n Copy\\n Copy selected lines\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n      

    -1 }\\\">{{ span.text }}

    \\n

    No log line matching the '{{ $ctrl.state.search }}' filter

    \\n

    No logs available

    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import moment from 'moment';\nimport _ from 'lodash-es';\n\nangular.module('portainer.docker').controller('LogViewerController', [\n 'clipboard',\n 'Blob',\n 'FileSaver',\n function (clipboard, Blob, FileSaver) {\n this.state = {\n availableSinceDatetime: [\n { desc: 'Last day', value: moment().subtract(1, 'days').format() },\n { desc: 'Last 4 hours', value: moment().subtract(4, 'hours').format() },\n { desc: 'Last hour', value: moment().subtract(1, 'hours').format() },\n { desc: 'Last 10 minutes', value: moment().subtract(10, 'minutes').format() },\n ],\n copySupported: clipboard.supported,\n logCollection: true,\n autoScroll: true,\n wrapLines: true,\n search: '',\n filteredLogs: [],\n selectedLines: [],\n };\n\n this.copy = function () {\n clipboard.copyText(this.state.filteredLogs.map((log) => log.line));\n $('#refreshRateChange').show();\n $('#refreshRateChange').fadeOut(2000);\n };\n\n this.copySelection = function () {\n clipboard.copyText(this.state.selectedLines);\n $('#refreshRateChange').show();\n $('#refreshRateChange').fadeOut(2000);\n };\n\n this.clearSelection = function () {\n this.state.selectedLines = [];\n };\n\n this.selectLine = function (line) {\n var idx = this.state.selectedLines.indexOf(line);\n if (idx === -1) {\n this.state.selectedLines.push(line);\n } else {\n this.state.selectedLines.splice(idx, 1);\n }\n };\n\n this.downloadLogs = function () {\n const data = new Blob([_.reduce(this.state.filteredLogs, (acc, log) => acc + '\\n' + log.line, '')]);\n FileSaver.saveAs(data, this.resourceName + '_logs.txt');\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./networkMacvlanForm.html');\n\nangular.module('portainer.docker').component('networkMacvlanForm', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'NetworkMacvlanFormController',\n bindings: {\n data: '=',\n applicationState: '<',\n },\n});\n","var path = 'app/docker/components/network-macvlan-form/networkMacvlanForm.html';\nvar html = \"
    \\n
    \\n Macvlan configuration\\n
    \\n \\n
    \\n \\n \\n To create a MACVLAN network you need to create a configuration, then create the network from this configuration.\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n\\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    Parent network card must be specified.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n = 1.25\\\"\\n access-to-node-details=\\\"$ctrl.isAdmin\\\"\\n name=\\\"node_selector\\\"\\n ng-model=\\\"tmp\\\"\\n ng-required=\\\"$ctrl.requiredNodeSelection()\\\"\\n >\\n
    \\n
    \\n
    \\n
    \\n
    \\n

    At least one node must be selected.

    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n

    Select a configuration network.

    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.docker').controller('NetworkMacvlanFormController', [\n '$q',\n 'NodeService',\n 'NetworkService',\n 'Notifications',\n 'StateManager',\n 'Authentication',\n function ($q, NodeService, NetworkService, Notifications, StateManager, Authentication) {\n var ctrl = this;\n\n ctrl.requiredNodeSelection = function () {\n if (ctrl.data.Scope !== 'local' || ctrl.data.DatatableState === undefined) {\n return false;\n }\n return ctrl.data.DatatableState.selectedItemCount === 0;\n };\n\n ctrl.requiredConfigSelection = function () {\n if (ctrl.data.Scope !== 'swarm') {\n return false;\n }\n return !ctrl.data.SelectedNetworkConfig;\n };\n\n this.$onInit = $onInit;\n function $onInit() {\n var isAdmin = Authentication.isAdmin();\n ctrl.isAdmin = isAdmin;\n\n var provider = ctrl.applicationState.endpoint.mode.provider;\n var apiVersion = ctrl.applicationState.endpoint.apiVersion;\n $q.all({\n nodes: provider !== 'DOCKER_SWARM_MODE' || NodeService.nodes(),\n networks: NetworkService.networks(provider === 'DOCKER_STANDALONE' || provider === 'DOCKER_SWARM_MODE', false, provider === 'DOCKER_SWARM_MODE' && apiVersion >= 1.25),\n })\n .then(function success(data) {\n if (data.nodes !== true) {\n ctrl.nodes = data.nodes;\n }\n ctrl.availableNetworks = data.networks.filter(function (item) {\n return item.ConfigOnly === true;\n });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve informations for macvlan');\n });\n }\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./volumesCifsForm.html');\n\nangular.module('portainer.docker').component('volumesCifsForm', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n data: '=',\n },\n});\n","var path = 'app/docker/components/volumesCIFSForm/volumesCifsForm.html';\nvar html = \"\\n
    \\n \\n
    \\n CIFS Settings\\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./volumesnfsForm.html');\n\nangular.module('portainer.docker').component('volumesNfsForm', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n data: '=',\n },\n});\n","var path = 'app/docker/components/volumesNFSForm/volumesnfsForm.html';\nvar html = \"\\n
    \\n \\n
    \\n NFS Settings\\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import _ from 'lodash-es';\n\nfunction includeString(text, values) {\n return values.some(function (val) {\n return text.indexOf(val) !== -1;\n });\n}\n\nfunction strToHash(str) {\n var hash = 0;\n for (var i = 0; i < str.length; i++) {\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\n }\n return hash;\n}\n\nfunction hashToHexColor(hash) {\n var color = '#';\n for (var i = 0; i < 3; ) {\n color += ('00' + ((hash >> (i++ * 8)) & 0xff).toString(16)).slice(-2);\n }\n return color;\n}\n\nangular\n .module('portainer.docker')\n .filter('visualizerTask', function () {\n 'use strict';\n return function (text) {\n var status = _.toLower(text);\n if (includeString(status, ['new', 'allocated', 'assigned', 'accepted', 'complete', 'preparing'])) {\n return 'info';\n } else if (includeString(status, ['pending'])) {\n return 'warning';\n } else if (includeString(status, ['shutdown', 'failed', 'rejected'])) {\n return 'stopped';\n }\n return 'running';\n };\n })\n .filter('visualizerTaskBorderColor', function () {\n 'use strict';\n return function (str) {\n var hash = strToHash(str);\n var color = hashToHexColor(hash);\n return color;\n };\n })\n .filter('taskstatusbadge', function () {\n 'use strict';\n return function (text) {\n var status = _.toLower(text);\n var labelStyle = 'default';\n if (includeString(status, ['new', 'allocated', 'assigned', 'accepted', 'preparing', 'ready', 'starting', 'remove'])) {\n labelStyle = 'info';\n } else if (includeString(status, ['pending'])) {\n labelStyle = 'warning';\n } else if (includeString(status, ['shutdown', 'failed', 'rejected', 'orphaned'])) {\n labelStyle = 'danger';\n } else if (includeString(status, ['complete'])) {\n labelStyle = 'primary';\n } else if (includeString(status, ['running'])) {\n labelStyle = 'success';\n }\n return labelStyle;\n };\n })\n .filter('taskhaslogs', function () {\n 'use strict';\n return function (state) {\n var validState = ['running', 'complete', 'failed', 'shutdown'];\n if (validState.indexOf(state) > -1) {\n return true;\n }\n return false;\n };\n })\n .filter('containerstatusbadge', function () {\n 'use strict';\n return function (text) {\n var status = _.toLower(text);\n if (includeString(status, ['paused', 'starting', 'unhealthy'])) {\n return 'warning';\n } else if (includeString(status, ['created'])) {\n return 'info';\n } else if (includeString(status, ['stopped', 'dead', 'exited'])) {\n return 'danger';\n }\n return 'success';\n };\n })\n .filter('nodestatusbadge', function () {\n 'use strict';\n return function (text) {\n if (text === 'down' || text === 'Unhealthy') {\n return 'danger';\n }\n return 'success';\n };\n })\n .filter('dockerNodeAvailabilityBadge', function () {\n 'use strict';\n return function (text) {\n if (text === 'pause') {\n return 'warning';\n } else if (text === 'drain') {\n return 'danger';\n }\n return 'success';\n };\n })\n .filter('trimcontainername', function () {\n 'use strict';\n return function (name) {\n if (name) {\n return name.indexOf('/') === 0 ? name.replace('/', '') : name;\n }\n return '';\n };\n })\n .filter('getstatetext', function () {\n 'use strict';\n return function (state) {\n if (state === undefined) {\n return '';\n }\n if (state.Dead) {\n return 'Dead';\n }\n if (state.Ghost && state.Running) {\n return 'Ghost';\n }\n if (state.Running && state.Paused) {\n return 'Running (Paused)';\n }\n if (state.Running) {\n return 'Running';\n }\n if (state.Status === 'created') {\n return 'Created';\n }\n return 'Stopped';\n };\n })\n .filter('getstatelabel', function () {\n 'use strict';\n return function (state) {\n if (state === undefined) {\n return 'label-default';\n }\n if (state.Ghost && state.Running) {\n return 'label-important';\n }\n if (state.Running) {\n return 'label-success';\n }\n return 'label-default';\n };\n })\n .filter('containername', function () {\n 'use strict';\n return function (container) {\n var name = container.Names[0];\n return name.substring(1, name.length);\n };\n })\n .filter('swarmversion', function () {\n 'use strict';\n return function (text) {\n return _.split(text, '/')[1];\n };\n })\n .filter('swarmhostname', function () {\n 'use strict';\n return function (container) {\n return _.split(container.Names[0], '/')[1];\n };\n })\n .filter('repotags', function () {\n 'use strict';\n return function (image) {\n if (image.RepoTags && image.RepoTags.length > 0) {\n var tag = image.RepoTags[0];\n if (tag === ':') {\n return [];\n }\n return image.RepoTags;\n }\n return [];\n };\n })\n .filter('command', function () {\n 'use strict';\n return function (command) {\n if (command) {\n return command.join(' ');\n }\n };\n })\n .filter('hideshasum', function () {\n 'use strict';\n return function (imageName) {\n if (imageName) {\n return imageName.split('@sha')[0];\n }\n return '';\n };\n })\n .filter('availablenodecount', [\n 'ConstraintsHelper',\n function (ConstraintsHelper) {\n 'use strict';\n return function (nodes, service) {\n var availableNodes = 0;\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n if (node.Availability === 'active' && node.Status === 'ready' && ConstraintsHelper.matchesServiceConstraints(service, node)) {\n availableNodes++;\n }\n }\n return availableNodes;\n };\n },\n ])\n .filter('runningtaskscount', function () {\n 'use strict';\n return function (tasks) {\n var runningTasks = 0;\n for (var i = 0; i < tasks.length; i++) {\n var task = tasks[i];\n if (task.Status.State === 'running' && task.DesiredState === 'running') {\n runningTasks++;\n }\n }\n return runningTasks;\n };\n })\n .filter('runningcontainers', function () {\n 'use strict';\n return function runningContainersFilter(containers) {\n return containers.filter(function (container) {\n return container.State === 'running';\n }).length;\n };\n })\n .filter('stoppedcontainers', function () {\n 'use strict';\n return function stoppedContainersFilter(containers) {\n return containers.filter(function (container) {\n return container.State === 'exited';\n }).length;\n };\n })\n .filter('healthycontainers', function () {\n 'use strict';\n return function healthyContainersFilter(containers) {\n return containers.filter(function (container) {\n return container.Status === 'healthy';\n }).length;\n };\n })\n .filter('unhealthycontainers', function () {\n 'use strict';\n return function unhealthyContainersFilter(containers) {\n return containers.filter(function (container) {\n return container.Status === 'unhealthy';\n }).length;\n };\n })\n .filter('imagestotalsize', function () {\n 'use strict';\n return function (images) {\n var totalImageSize = 0;\n for (var i = 0; i < images.length; i++) {\n var item = images[i];\n totalImageSize += item.VirtualSize;\n }\n return totalImageSize;\n };\n })\n .filter('tasknodename', function () {\n 'use strict';\n return function (nodeId, nodes) {\n var node = _.find(nodes, { Id: nodeId });\n if (node) {\n return node.Hostname;\n }\n return '';\n };\n })\n .filter('imagelayercommand', function () {\n 'use strict';\n return function (createdBy) {\n return createdBy.replace('/bin/sh -c #(nop) ', '').replace('/bin/sh -c ', 'RUN ');\n };\n })\n .filter('trimshasum', function () {\n 'use strict';\n return function (imageName) {\n if (!imageName) {\n return;\n }\n if (imageName.indexOf('sha256:') === 0) {\n return imageName.substring(7, 19);\n }\n return _.split(imageName, '@sha256')[0];\n };\n })\n .filter('trimversiontag', function () {\n 'use strict';\n return function trimversiontag(fullName) {\n if (!fullName) {\n return fullName;\n }\n var versionIdx = fullName.lastIndexOf(':');\n if (versionIdx < 0) {\n return fullName;\n }\n var hostIdx = fullName.indexOf('/');\n if (hostIdx > versionIdx) {\n return fullName;\n }\n return fullName.substring(0, versionIdx);\n };\n });\n","angular.module('portainer.docker').factory('ConfigHelper', [\n function ConfigHelperFactory() {\n 'use strict';\n return {\n flattenConfig: function (config) {\n if (config) {\n return {\n Id: config.ConfigID,\n Name: config.ConfigName,\n FileName: config.File.Name,\n Uid: config.File.UID,\n Gid: config.File.GID,\n Mode: config.File.Mode,\n };\n }\n return {};\n },\n configConfig: function (config) {\n if (config) {\n return {\n ConfigID: config.Id,\n ConfigName: config.Name,\n File: {\n Name: config.FileName || config.Name,\n UID: config.Uid || '0',\n GID: config.Gid || '0',\n Mode: config.Mode || 292,\n },\n };\n }\n return {};\n },\n };\n },\n]);\n","import _ from 'lodash-es';\n\nfunction ConstraintModel(op, key, value) {\n this.op = op;\n this.value = value;\n this.key = key;\n}\n\nvar patterns = {\n id: {\n nodeId: 'node.id',\n nodeHostname: 'node.hostname',\n nodeRole: 'node.role',\n nodeLabels: 'node.labels.',\n engineLabels: 'engine.labels.',\n },\n op: {\n eq: '==',\n neq: '!=',\n },\n};\n\nfunction matchesConstraint(value, constraint) {\n if (!constraint || (constraint.op === patterns.op.eq && value === constraint.value) || (constraint.op === patterns.op.neq && value !== constraint.value)) {\n return true;\n }\n return false;\n}\n\nfunction matchesLabel(labels, constraint) {\n if (!constraint) {\n return true;\n }\n var found = _.find(labels, function (label) {\n return label.key === constraint.key && label.value === constraint.value;\n });\n return found !== undefined;\n}\n\nfunction extractValue(constraint, op) {\n return constraint.split(op).pop().trim();\n}\n\nfunction extractCustomLabelKey(constraint, op, baseLabelKey) {\n return constraint.split(op).shift().trim().replace(baseLabelKey, '');\n}\n\nangular.module('portainer.docker').factory('ConstraintsHelper', [\n function ConstraintsHelperFactory() {\n 'use strict';\n return {\n transformConstraints: function (constraints) {\n var transform = {};\n for (var i = 0; i < constraints.length; i++) {\n var constraint = constraints[i];\n\n var op;\n if (constraint.includes(patterns.op.eq)) {\n op = patterns.op.eq;\n } else if (constraint.includes(patterns.op.neq)) {\n op = patterns.op.neq;\n }\n\n var value = extractValue(constraint, op);\n var key = '';\n switch (true) {\n case constraint.includes(patterns.id.nodeId):\n transform.nodeId = new ConstraintModel(op, key, value);\n break;\n case constraint.includes(patterns.id.nodeHostname):\n transform.nodeHostname = new ConstraintModel(op, key, value);\n break;\n case constraint.includes(patterns.id.nodeRole):\n transform.nodeRole = new ConstraintModel(op, key, value);\n break;\n case constraint.includes(patterns.id.nodeLabels):\n key = extractCustomLabelKey(constraint, op, patterns.id.nodeLabels);\n transform.nodeLabels = new ConstraintModel(op, key, value);\n break;\n case constraint.includes(patterns.id.engineLabels):\n key = extractCustomLabelKey(constraint, op, patterns.id.engineLabels);\n transform.engineLabels = new ConstraintModel(op, key, value);\n break;\n default:\n break;\n }\n }\n return transform;\n },\n matchesServiceConstraints: function (service, node) {\n if (service.Constraints === undefined || service.Constraints.length === 0) {\n return true;\n }\n var constraints = this.transformConstraints(angular.copy(service.Constraints));\n if (\n matchesConstraint(node.Id, constraints.nodeId) &&\n matchesConstraint(node.Hostname, constraints.nodeHostname) &&\n matchesConstraint(node.Role, constraints.nodeRole) &&\n matchesLabel(node.Labels, constraints.nodeLabels) &&\n matchesLabel(node.EngineLabels, constraints.engineLabels)\n ) {\n return true;\n }\n return false;\n },\n };\n },\n]);\n","import _ from 'lodash-es';\nimport splitargs from 'splitargs/src/splitargs';\n\nconst portPattern = /^([1-9]|[1-5]?[0-9]{2,4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/m;\n\nfunction parsePort(port) {\n if (portPattern.test(port)) {\n return parseInt(port, 10);\n } else {\n return 0;\n }\n}\n\nfunction parsePortRange(portRange) {\n if (typeof portRange !== 'string') {\n portRange = portRange.toString();\n }\n\n // Split the range and convert to integers\n const stringPorts = _.split(portRange, '-', 2);\n const intPorts = _.map(stringPorts, parsePort);\n\n // If it's not a range, we still make sure that we return two ports (start & end)\n if (intPorts.length == 1) {\n intPorts.push(intPorts[0]);\n }\n\n return intPorts;\n}\n\nfunction isValidPortRange(portRange) {\n if (typeof portRange === 'string') {\n portRange = parsePortRange();\n }\n\n return Array.isArray(portRange) && portRange.length === 2 && portRange[0] > 0 && portRange[1] >= portRange[0];\n}\n\nfunction createPortRange(portRangeText, port) {\n if (typeof portRangeText !== 'string') {\n portRangeText = portRangeText.toString();\n }\n\n let hostIp = null;\n const colonIndex = portRangeText.indexOf(':');\n if (colonIndex >= 0) {\n hostIp = portRangeText.substr(0, colonIndex);\n portRangeText = portRangeText.substr(colonIndex + 1);\n }\n\n port = typeof port === 'number' ? port : parsePort(port);\n const portRange = parsePortRange(portRangeText);\n const startPort = Math.min(portRange[0], port);\n const endPort = Math.max(portRange[1], port);\n\n if (hostIp) {\n return hostIp + ':' + startPort + '-' + endPort;\n } else {\n return startPort + '-' + endPort;\n }\n}\n\nangular.module('portainer.docker').factory('ContainerHelper', [\n function ContainerHelperFactory() {\n 'use strict';\n var helper = {};\n\n helper.commandStringToArray = function (command) {\n return splitargs(command);\n };\n\n helper.commandArrayToString = function (array) {\n return array\n .map(function (elem) {\n return \"'\" + elem + \"'\";\n })\n .join(' ');\n };\n\n helper.configFromContainer = function (container) {\n var config = container.Config;\n // HostConfig\n config.HostConfig = container.HostConfig;\n // Name\n config.name = container.Name.replace(/^\\//g, '');\n // Network\n var mode = config.HostConfig.NetworkMode;\n config.NetworkingConfig = {\n EndpointsConfig: {},\n };\n config.NetworkingConfig.EndpointsConfig = container.NetworkSettings.Networks;\n\n if (config.ExposedPorts === undefined) {\n config.ExposedPorts = {};\n }\n\n if (mode.indexOf('container:') !== -1) {\n delete config.Hostname;\n delete config.ExposedPorts;\n }\n // Set volumes\n var binds = [];\n var volumes = {};\n for (var v in container.Mounts) {\n if ({}.hasOwnProperty.call(container.Mounts, v)) {\n var mount = container.Mounts[v];\n var name = mount.Name || mount.Source;\n var containerPath = mount.Destination;\n if (name && containerPath) {\n var bind = name + ':' + containerPath;\n volumes[containerPath] = {};\n if (mount.RW === false) {\n bind += ':ro';\n }\n binds.push(bind);\n }\n }\n }\n config.HostConfig.Binds = binds;\n config.Volumes = volumes;\n return config;\n };\n\n helper.preparePortBindings = function (portBindings) {\n const bindings = {};\n _.forEach(portBindings, (portBinding) => {\n if (!portBinding.containerPort) {\n return;\n }\n\n let hostPort = portBinding.hostPort;\n const containerPortRange = parsePortRange(portBinding.containerPort);\n if (!isValidPortRange(containerPortRange)) {\n throw new Error('Invalid port specification: ' + portBinding.containerPort);\n }\n\n const startPort = containerPortRange[0];\n const endPort = containerPortRange[1];\n let hostIp = undefined;\n let startHostPort = 0;\n let endHostPort = 0;\n if (hostPort) {\n if (hostPort.indexOf('[') > -1) {\n const hostAndPort = _.split(hostPort, ']:');\n\n if (hostAndPort.length < 2) {\n throw new Error('Invalid port specification: ' + portBinding.containerPort);\n }\n\n hostIp = hostAndPort[0].replace('[', '');\n hostPort = hostAndPort[1];\n } else {\n if (hostPort.indexOf(':') > -1) {\n const hostAndPort = _.split(hostPort, ':');\n hostIp = hostAndPort[0];\n hostPort = hostAndPort[1];\n }\n }\n\n const hostPortRange = parsePortRange(hostPort);\n if (!isValidPortRange(hostPortRange)) {\n throw new Error('Invalid port specification: ' + hostPort);\n }\n\n startHostPort = hostPortRange[0];\n endHostPort = hostPortRange[1];\n if (endPort !== startPort && endPort - startPort !== endHostPort - startHostPort) {\n throw new Error('Invalid port specification: ' + hostPort);\n }\n }\n\n for (let i = 0; i <= endPort - startPort; i++) {\n const containerPort = (startPort + i).toString();\n if (startHostPort > 0) {\n hostPort = (startHostPort + i).toString();\n }\n if (startPort === endPort && startHostPort !== endHostPort) {\n hostPort += '-' + endHostPort.toString();\n }\n\n const bindKey = containerPort + '/' + portBinding.protocol;\n if (bindings[bindKey]) {\n bindings[bindKey].push({ HostIp: hostIp, HostPort: hostPort });\n } else {\n bindings[bindKey] = [{ HostIp: hostIp, HostPort: hostPort }];\n }\n }\n });\n return bindings;\n };\n\n helper.sortAndCombinePorts = function (portBindings) {\n const bindings = [];\n const portBindingKeys = _.keys(portBindings);\n\n // Group the port bindings by protocol\n const portBindingKeysByProtocol = _.groupBy(portBindingKeys, (portKey) => {\n return _.split(portKey, '/')[1];\n });\n\n _.forEach(portBindingKeysByProtocol, (portBindingKeys, protocol) => {\n // Group the port bindings by host IP\n const portBindingKeysByHostIp = {};\n for (const portKey of portBindingKeys) {\n for (const portBinding of portBindings[portKey]) {\n portBindingKeysByHostIp[portBinding.HostIp] = portBindingKeysByHostIp[portBinding.HostIp] || [];\n portBindingKeysByHostIp[portBinding.HostIp].push(portKey);\n }\n }\n\n _.forEach(portBindingKeysByHostIp, (portBindingKeys, ip) => {\n // Sort by host port\n const sortedPortBindingKeys = _.orderBy(portBindingKeys, (portKey) => {\n return parseInt(_.split(portKey, '/')[0], 10);\n });\n\n let previousHostPort = -1;\n let previousContainerPort = -1;\n _.forEach(sortedPortBindingKeys, (portKey) => {\n const portKeySplit = _.split(portKey, '/');\n const containerPort = parseInt(portKeySplit[0], 10);\n const portBinding = portBindings[portKey][0];\n portBindings[portKey].shift();\n const hostPort = parsePort(portBinding.HostPort);\n\n // We only combine single ports, and skip the host port ranges on one container port\n if (hostPort > 0) {\n // If we detect consecutive ports, we create a range of them\n if (bindings.length > 0 && previousHostPort === hostPort - 1 && previousContainerPort === containerPort - 1) {\n bindings[bindings.length - 1].hostPort = createPortRange(bindings[bindings.length - 1].hostPort, hostPort);\n bindings[bindings.length - 1].containerPort = createPortRange(bindings[bindings.length - 1].containerPort, containerPort);\n previousHostPort = hostPort;\n previousContainerPort = containerPort;\n return;\n }\n\n previousHostPort = hostPort;\n previousContainerPort = containerPort;\n } else {\n previousHostPort = -1;\n previousContainerPort = -1;\n }\n\n let bindingHostPort = portBinding.HostPort.toString();\n if (ip) {\n bindingHostPort = `${ip}:${bindingHostPort}`;\n }\n\n const binding = {\n hostPort: bindingHostPort,\n containerPort: containerPort,\n protocol: protocol,\n };\n bindings.push(binding);\n });\n });\n });\n\n return bindings;\n };\n\n helper.getContainerNames = function (containers) {\n return _.map(_.flatten(_.map(containers, 'Names')), (name) => _.trimStart(name, '/'));\n };\n\n return helper;\n },\n]);\n","import _ from 'lodash-es';\nimport { RegistryTypes } from '@/portainer/models/registryTypes';\n\nangular.module('portainer.docker').factory('ImageHelper', [\n function ImageHelperFactory() {\n 'use strict';\n\n var helper = {};\n\n helper.isValidTag = isValidTag;\n helper.createImageConfigForContainer = createImageConfigForContainer;\n helper.getImagesNamesForDownload = getImagesNamesForDownload;\n helper.removeDigestFromRepository = removeDigestFromRepository;\n helper.imageContainsURL = imageContainsURL;\n\n function isValidTag(tag) {\n return tag.match(/^(?![\\.\\-])([a-zA-Z0-9\\_\\.\\-])+$/g);\n }\n\n function getImagesNamesForDownload(images) {\n var names = images.map(function (image) {\n return image.RepoTags[0] !== ':' ? image.RepoTags[0] : image.Id;\n });\n return {\n names: names,\n };\n }\n\n /**\n *\n * @param {PorImageRegistryModel} registry\n */\n function createImageConfigForContainer(registry) {\n const data = {\n fromImage: '',\n };\n let fullImageName = '';\n\n if (registry.UseRegistry) {\n if (registry.Registry.Type === RegistryTypes.GITLAB) {\n const slash = _.startsWith(registry.Image, ':') ? '' : '/';\n fullImageName = registry.Registry.URL + '/' + registry.Registry.Gitlab.ProjectPath + slash + registry.Image;\n } else if (registry.Registry.Type === RegistryTypes.QUAY) {\n const name = registry.Registry.Quay.UseOrganisation ? registry.Registry.Quay.OrganisationName : registry.Registry.Username;\n const url = registry.Registry.URL ? registry.Registry.URL + '/' : '';\n fullImageName = url + name + '/' + registry.Image;\n } else {\n const url = registry.Registry.URL ? registry.Registry.URL + '/' : '';\n fullImageName = url + registry.Image;\n }\n if (!_.includes(registry.Image, ':')) {\n fullImageName += ':latest';\n }\n } else {\n fullImageName = registry.Image;\n }\n\n data.fromImage = fullImageName;\n return data;\n }\n\n function imageContainsURL(image) {\n const split = _.split(image, '/');\n const url = split[0];\n if (split.length > 1) {\n return _.includes(url, '.') || _.includes(url, ':');\n }\n return false;\n }\n\n function removeDigestFromRepository(repository) {\n return repository.split('@sha')[0];\n }\n\n return helper;\n },\n]);\n","import _ from 'lodash-es';\n\nangular.module('portainer.docker').factory('InfoHelper', [\n function InfoHelperFactory() {\n 'use strict';\n\n var helper = {};\n\n helper.determineEndpointMode = function (info, type) {\n var mode = {\n provider: '',\n role: '',\n agentProxy: false,\n };\n\n if (type === 2 || type === 4) {\n mode.agentProxy = true;\n }\n\n if (!info.Swarm || _.isEmpty(info.Swarm.NodeID)) {\n mode.provider = 'DOCKER_STANDALONE';\n } else {\n mode.provider = 'DOCKER_SWARM_MODE';\n if (info.Swarm.ControlAvailable) {\n mode.role = 'MANAGER';\n } else {\n mode.role = 'WORKER';\n }\n }\n return mode;\n };\n\n return helper;\n },\n]);\n","angular.module('portainer.docker').factory('LabelHelper', [\n function LabelHelperFactory() {\n 'use strict';\n return {\n fromLabelHashToKeyValue: function (labels) {\n if (labels) {\n return Object.keys(labels).map(function (key) {\n return { key: key, value: labels[key], originalKey: key, originalValue: labels[key], added: true };\n });\n }\n return [];\n },\n fromKeyValueToLabelHash: function (labelKV) {\n var labels = {};\n if (labelKV) {\n labelKV.forEach(function (label) {\n if (label.key) {\n labels[label.key] = label.value;\n }\n });\n }\n return labels;\n },\n };\n },\n]);\n","import tokenize from '@nxmix/tokenize-ansi';\nimport x256 from 'x256';\n\nconst FOREGROUND_COLORS_BY_ANSI = {\n black: x256.colors[0],\n red: x256.colors[1],\n green: x256.colors[2],\n yellow: x256.colors[3],\n blue: x256.colors[4],\n magenta: x256.colors[5],\n cyan: x256.colors[6],\n white: x256.colors[7],\n brightBlack: x256.colors[8],\n brightRed: x256.colors[9],\n brightGreen: x256.colors[10],\n brightYellow: x256.colors[11],\n brightBlue: x256.colors[12],\n brightMagenta: x256.colors[13],\n brightCyan: x256.colors[14],\n brightWhite: x256.colors[15],\n};\n\nconst BACKGROUND_COLORS_BY_ANSI = {\n bgBlack: x256.colors[0],\n bgRed: x256.colors[1],\n bgGreen: x256.colors[2],\n bgYellow: x256.colors[3],\n bgBlue: x256.colors[4],\n bgMagenta: x256.colors[5],\n bgCyan: x256.colors[6],\n bgWhite: x256.colors[7],\n bgBrightBlack: x256.colors[8],\n bgBrightRed: x256.colors[9],\n bgBrightGreen: x256.colors[10],\n bgBrightYellow: x256.colors[11],\n bgBrightBlue: x256.colors[12],\n bgBrightMagenta: x256.colors[13],\n bgBrightCyan: x256.colors[14],\n bgBrightWhite: x256.colors[15],\n};\n\nangular.module('portainer.docker').factory('LogHelper', [\n function LogHelperFactory() {\n 'use strict';\n var helper = {};\n\n function stripHeaders(logs) {\n logs = logs.substring(8);\n logs = logs.replace(/\\n(.{8})/g, '\\n\\r');\n\n return logs;\n }\n\n function stripEscapeCodes(logs) {\n return logs.replace(/[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, '');\n }\n\n function cssColorFromRgb(rgb) {\n const [r, g, b] = rgb;\n\n return `rgb(${r}, ${g}, ${b})`;\n }\n\n function extendedColorForToken(token) {\n const colorMode = token[1];\n\n if (colorMode === 2) {\n return cssColorFromRgb(token.slice(2));\n }\n\n if (colorMode === 5 && x256.colors[token[2]]) {\n return cssColorFromRgb(x256.colors[token[2]]);\n }\n\n return '';\n }\n\n // Return an array with each log including a line and styled spans for each entry.\n // If the skipHeaders param is specified, it will strip the 8 first characters of each line.\n helper.formatLogs = function (logs, skipHeaders) {\n if (skipHeaders) {\n logs = stripHeaders(logs);\n }\n\n const tokens = tokenize(logs);\n const formattedLogs = [];\n\n let foregroundColor = null;\n let backgroundColor = null;\n let line = '';\n let spans = [];\n\n for (const token of tokens) {\n const type = token[0];\n\n if (FOREGROUND_COLORS_BY_ANSI[type]) {\n foregroundColor = cssColorFromRgb(FOREGROUND_COLORS_BY_ANSI[type]);\n } else if (type === 'moreColor') {\n foregroundColor = extendedColorForToken(token);\n } else if (type === 'fgDefault') {\n foregroundColor = null;\n } else if (BACKGROUND_COLORS_BY_ANSI[type]) {\n backgroundColor = cssColorFromRgb(BACKGROUND_COLORS_BY_ANSI[type]);\n } else if (type === 'bgMoreColor') {\n backgroundColor = extendedColorForToken(token);\n } else if (type === 'bgDefault') {\n backgroundColor = null;\n } else if (type === 'reset') {\n foregroundColor = null;\n backgroundColor = null;\n } else if (type === 'text') {\n const tokenLines = token[1].split('\\n');\n\n for (let i = 0; i < tokenLines.length; i++) {\n if (i !== 0) {\n formattedLogs.push({ line, spans });\n\n line = '';\n spans = [];\n }\n\n const text = stripEscapeCodes(tokenLines[i]);\n\n line += text;\n spans.push({ foregroundColor, backgroundColor, text });\n }\n }\n }\n\n if (line) {\n formattedLogs.push({ line, spans });\n }\n\n return formattedLogs;\n };\n\n return helper;\n },\n]);\n","angular.module('portainer.docker').factory('NodeHelper', [\n function NodeHelperFactory() {\n 'use strict';\n return {\n nodeToConfig: function (node) {\n return {\n Name: node.Spec.Name,\n Role: node.Spec.Role,\n Labels: node.Spec.Labels,\n Availability: node.Spec.Availability,\n };\n },\n };\n },\n]);\n","angular.module('portainer.docker').factory('SecretHelper', [\n function SecretHelperFactory() {\n 'use strict';\n return {\n flattenSecret: function (secret) {\n if (secret) {\n return {\n Id: secret.SecretID,\n Name: secret.SecretName,\n FileName: secret.File.Name,\n Uid: secret.File.UID,\n Gid: secret.File.GID,\n Mode: secret.File.Mode,\n };\n }\n return {};\n },\n secretConfig: function (secret) {\n if (secret) {\n return {\n SecretID: secret.Id,\n SecretName: secret.Name,\n File: {\n Name: secret.FileName,\n UID: secret.Uid || '0',\n GID: secret.Gid || '0',\n Mode: secret.Mode || 444,\n },\n };\n }\n return {};\n },\n };\n },\n]);\n","import moment from 'moment';\n\nangular.module('portainer.docker').factory('ServiceHelper', [\n function ServiceHelperFactory() {\n 'use strict';\n\n var helper = {};\n\n helper.associateTasksToService = function (service, tasks) {\n service.Tasks = [];\n var otherServicesTasks = [];\n for (var i = 0; i < tasks.length; i++) {\n var task = tasks[i];\n if (task.ServiceId === service.Id) {\n service.Tasks.push(task);\n task.ServiceName = service.Name;\n } else {\n otherServicesTasks.push(task);\n }\n }\n tasks = otherServicesTasks;\n };\n\n helper.serviceToConfig = function (service) {\n return {\n Name: service.Spec.Name,\n Labels: service.Spec.Labels,\n TaskTemplate: service.Spec.TaskTemplate,\n Mode: service.Spec.Mode,\n UpdateConfig: service.Spec.UpdateConfig,\n Networks: service.Spec.Networks,\n EndpointSpec: service.Spec.EndpointSpec,\n };\n };\n\n helper.translateKeyValueToPlacementPreferences = function (keyValuePreferences) {\n if (keyValuePreferences) {\n var preferences = [];\n keyValuePreferences.forEach(function (preference) {\n if (preference.strategy && preference.strategy !== '' && preference.value && preference.value !== '') {\n switch (preference.strategy.toLowerCase()) {\n case 'spread':\n preferences.push({\n Spread: {\n SpreadDescriptor: preference.value,\n },\n });\n break;\n }\n }\n });\n return preferences;\n }\n return [];\n };\n\n helper.translateKeyValueToPlacementConstraints = function (keyValueConstraints) {\n if (keyValueConstraints) {\n var constraints = [];\n keyValueConstraints.forEach(function (constraint) {\n if (constraint.key && constraint.key !== '' && constraint.value && constraint.value !== '') {\n constraints.push(constraint.key + constraint.operator + constraint.value);\n }\n });\n return constraints;\n }\n return [];\n };\n\n helper.translatePreferencesToKeyValue = function (preferences) {\n if (preferences) {\n var keyValuePreferences = [];\n preferences.forEach(function (preference) {\n if (preference.Spread) {\n keyValuePreferences.push({\n strategy: 'Spread',\n value: preference.Spread.SpreadDescriptor,\n });\n }\n });\n return keyValuePreferences;\n }\n return [];\n };\n\n helper.translateConstraintsToKeyValue = function (constraints) {\n function getOperator(constraint) {\n var indexEquals = constraint.indexOf('==');\n if (indexEquals >= 0) {\n return [indexEquals, '=='];\n }\n return [constraint.indexOf('!='), '!='];\n }\n if (constraints) {\n var keyValueConstraints = [];\n constraints.forEach(function (constraint) {\n var operatorIndices = getOperator(constraint);\n\n var key = constraint.slice(0, operatorIndices[0]);\n var operator = operatorIndices[1];\n var value = constraint.slice(operatorIndices[0] + 2);\n\n keyValueConstraints.push({\n key: key,\n value: value,\n operator: operator,\n originalKey: key,\n originalValue: value,\n });\n });\n return keyValueConstraints;\n }\n };\n\n helper.translateHumanDurationToNanos = function (humanDuration) {\n var nanos;\n var regex = /^([0-9]+)(h|m|s|ms|us|ns)$/i;\n var matches = humanDuration.match(regex);\n\n if (matches !== null && matches.length === 3) {\n var duration = parseInt(matches[1], 10);\n var unit = matches[2];\n // Moment.js cannot use micro or nanoseconds\n switch (unit) {\n case 'ns':\n nanos = duration;\n break;\n case 'us':\n nanos = duration * 1000;\n break;\n default:\n nanos = moment.duration(duration, unit).asMilliseconds() * 1000000;\n }\n }\n return nanos;\n };\n\n // Convert nanoseconds to the higher unit possible\n // e.g 1840 nanoseconds = 1804ns\n // e.g 300000000000 nanoseconds = 5m\n // e.g 3510000000000 nanoseconds = 3510s\n // e.g 3540000000000 nanoseconds = 59m\n // e.g 3600000000000 nanoseconds = 1h\n\n helper.translateNanosToHumanDuration = function (nanos) {\n var humanDuration = '0s';\n var conversionFromNano = {};\n conversionFromNano['ns'] = 1;\n conversionFromNano['us'] = conversionFromNano['ns'] * 1000;\n conversionFromNano['ms'] = conversionFromNano['us'] * 1000;\n conversionFromNano['s'] = conversionFromNano['ms'] * 1000;\n conversionFromNano['m'] = conversionFromNano['s'] * 60;\n conversionFromNano['h'] = conversionFromNano['m'] * 60;\n\n Object.keys(conversionFromNano).forEach(function (unit) {\n if (nanos % conversionFromNano[unit] === 0 && nanos / conversionFromNano[unit] > 0) {\n humanDuration = nanos / conversionFromNano[unit] + unit;\n }\n });\n return humanDuration;\n };\n\n helper.translateLogDriverOptsToKeyValue = function (logOptions) {\n var options = [];\n if (logOptions) {\n Object.keys(logOptions).forEach(function (key) {\n options.push({\n key: key,\n value: logOptions[key],\n originalKey: key,\n originalValue: logOptions[key],\n added: true,\n });\n });\n }\n return options;\n };\n\n helper.translateKeyValueToLogDriverOpts = function (keyValueLogDriverOpts) {\n var options = {};\n if (keyValueLogDriverOpts) {\n keyValueLogDriverOpts.forEach(function (option) {\n if (option.key && option.key !== '' && option.value && option.value !== '') {\n options[option.key] = option.value;\n }\n });\n }\n return options;\n };\n\n helper.translateHostsEntriesToHostnameIP = function (entries) {\n var ipHostEntries = [];\n if (entries) {\n entries.forEach(function (entry) {\n if (entry.indexOf(' ') && entry.split(' ').length === 2) {\n var keyValue = entry.split(' ');\n ipHostEntries.push({ hostname: keyValue[1], ip: keyValue[0] });\n }\n });\n }\n return ipHostEntries;\n };\n\n helper.translateHostnameIPToHostsEntries = function (entries) {\n var ipHostEntries = [];\n if (entries) {\n entries.forEach(function (entry) {\n if (entry.ip && entry.hostname) {\n ipHostEntries.push(entry.ip + ' ' + entry.hostname);\n }\n });\n }\n return ipHostEntries;\n };\n\n return helper;\n },\n]);\n","angular.module('portainer.docker').factory('TaskHelper', [\n function TaskHelperFactory() {\n 'use strict';\n\n var helper = {};\n\n helper.associateContainerToTask = function (task, containers) {\n for (var i = 0; i < containers.length; i++) {\n var container = containers[i];\n if (task.ContainerId === container.Id) {\n task.Container = container;\n break;\n }\n }\n };\n\n return helper;\n },\n]);\n","angular.module('portainer.docker').factory('VolumeHelper', [\n function VolumeHelperFactory() {\n 'use strict';\n var helper = {};\n\n helper.createDriverOptions = function (optionArray) {\n var options = {};\n optionArray.forEach(function (option) {\n options[option.name] = option.value;\n });\n return options;\n };\n\n helper.isVolumeUsedByAService = function (volume, services) {\n for (var i = 0; i < services.length; i++) {\n var service = services[i];\n var mounts = service.Mounts;\n for (var j = 0; j < mounts.length; j++) {\n var mount = mounts[j];\n if (mount.Source === volume.Id) {\n return true;\n }\n }\n }\n\n return false;\n };\n\n return helper;\n },\n]);\n","angular.module('portainer.app').factory('ContainersInterceptor', [\n '$q',\n 'EndpointProvider',\n function ($q, EndpointProvider) {\n 'use strict';\n var interceptor = {};\n\n interceptor.responseError = responseErrorInterceptor;\n\n function responseErrorInterceptor(rejection) {\n if (rejection.status === 502 || rejection.status === 503 || rejection.status === -1) {\n var endpoint = EndpointProvider.currentEndpoint();\n if (endpoint !== undefined) {\n var data = endpoint.Snapshots[0].SnapshotRaw.Containers;\n if (data !== undefined) {\n return data;\n }\n }\n }\n return $q.reject(rejection);\n }\n return interceptor;\n },\n]);\n","angular.module('portainer.app').factory('ImagesInterceptor', [\n '$q',\n 'EndpointProvider',\n function ($q, EndpointProvider) {\n 'use strict';\n var interceptor = {};\n\n interceptor.responseError = responseErrorInterceptor;\n\n function responseErrorInterceptor(rejection) {\n if (rejection.status === 502 || rejection.status === 503 || rejection.status === -1) {\n var endpoint = EndpointProvider.currentEndpoint();\n if (endpoint !== undefined) {\n var data = endpoint.Snapshots[0].SnapshotRaw.Images;\n if (data !== undefined) {\n return data;\n }\n }\n }\n return $q.reject(rejection);\n }\n return interceptor;\n },\n]);\n","angular.module('portainer.app').factory('InfoInterceptor', [\n '$q',\n 'EndpointProvider',\n function ($q, EndpointProvider) {\n 'use strict';\n var interceptor = {};\n\n interceptor.responseError = responseErrorInterceptor;\n\n function responseErrorInterceptor(rejection) {\n if (rejection.status === 502 || rejection.status === 503 || rejection.status === -1) {\n var endpoint = EndpointProvider.currentEndpoint();\n if (endpoint !== undefined && endpoint.Snapshots.length && endpoint.Snapshots[0].SnapshotRaw) {\n var data = endpoint.Snapshots[0].SnapshotRaw.Info;\n if (data !== undefined) {\n return data;\n }\n }\n }\n return $q.reject(rejection);\n }\n return interceptor;\n },\n]);\n","angular.module('portainer.app').factory('NetworksInterceptor', [\n '$q',\n 'EndpointProvider',\n function ($q, EndpointProvider) {\n 'use strict';\n var interceptor = {};\n\n interceptor.responseError = responseErrorInterceptor;\n\n function responseErrorInterceptor(rejection) {\n if (rejection.status === 502 || rejection.status === 503 || rejection.status === -1) {\n var endpoint = EndpointProvider.currentEndpoint();\n if (endpoint !== undefined) {\n var data = endpoint.Snapshots[0].SnapshotRaw.Networks;\n if (data !== undefined) {\n return data;\n }\n }\n }\n return $q.reject(rejection);\n }\n return interceptor;\n },\n]);\n","angular.module('portainer.app').factory('VersionInterceptor', [\n '$q',\n 'EndpointProvider',\n function ($q, EndpointProvider) {\n 'use strict';\n var interceptor = {};\n\n interceptor.responseError = responseErrorInterceptor;\n\n function responseErrorInterceptor(rejection) {\n if (rejection.status === 502 || rejection.status === 503 || rejection.status === -1) {\n var endpoint = EndpointProvider.currentEndpoint();\n if (endpoint !== undefined && endpoint.Snapshots.length && endpoint.Snapshots[0].SnapshotRaw) {\n var data = endpoint.Snapshots[0].SnapshotRaw.Version;\n if (data !== undefined) {\n return data;\n }\n }\n }\n return $q.reject(rejection);\n }\n return interceptor;\n },\n]);\n","angular.module('portainer.app').factory('VolumesInterceptor', [\n '$q',\n 'EndpointProvider',\n function ($q, EndpointProvider) {\n 'use strict';\n var interceptor = {};\n\n interceptor.responseError = responseErrorInterceptor;\n\n function responseErrorInterceptor(rejection) {\n if (rejection.status === 502 || rejection.status === 503 || rejection.status === -1) {\n var endpoint = EndpointProvider.currentEndpoint();\n if (endpoint !== undefined) {\n var data = endpoint.Snapshots[0].SnapshotRaw.Volumes;\n if (data !== undefined) {\n return data;\n }\n }\n }\n return $q.reject(rejection);\n }\n return interceptor;\n },\n]);\n","import { jsonObjectsToArrayHandler } from './response/handlers';\n\nangular.module('portainer.docker').factory('Build', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function BuildFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/build',\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n buildImage: {\n method: 'POST',\n ignoreLoadingBar: true,\n transformResponse: jsonObjectsToArrayHandler,\n isArray: true,\n headers: { 'Content-Type': 'application/x-tar' },\n },\n buildImageOverride: {\n method: 'POST',\n ignoreLoadingBar: true,\n transformResponse: jsonObjectsToArrayHandler,\n isArray: true,\n },\n }\n );\n },\n]);\n","angular.module('portainer.docker').factory('Commit', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function CommitFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/commit',\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n commitContainer: { method: 'POST', params: { container: '@id', repo: '@repo' }, ignoreLoadingBar: true },\n }\n );\n },\n]);\n","angular.module('portainer.docker').factory('Config', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function ConfigFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/configs/:id/:action',\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n get: { method: 'GET', params: { id: '@id' } },\n query: { method: 'GET', isArray: true },\n create: { method: 'POST', params: { action: 'create' }, ignoreLoadingBar: true },\n remove: { method: 'DELETE', params: { id: '@id' } },\n }\n );\n },\n]);\n","import { genericHandler, logsHandler } from './response/handlers';\n\nangular.module('portainer.docker').factory('Container', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n 'ContainersInterceptor',\n function ContainerFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider, ContainersInterceptor) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/containers/:id/:action',\n {\n name: '@name',\n endpointId: EndpointProvider.endpointID,\n },\n {\n query: {\n method: 'GET',\n params: { all: 0, action: 'json', filters: '@filters' },\n isArray: true,\n interceptor: ContainersInterceptor,\n },\n get: {\n method: 'GET',\n params: { action: 'json' },\n },\n stop: {\n method: 'POST',\n params: { id: '@id', action: 'stop' },\n },\n restart: {\n method: 'POST',\n params: { id: '@id', action: 'restart' },\n },\n kill: {\n method: 'POST',\n params: { id: '@id', action: 'kill' },\n },\n pause: {\n method: 'POST',\n params: { id: '@id', action: 'pause' },\n },\n unpause: {\n method: 'POST',\n params: { id: '@id', action: 'unpause' },\n },\n logs: {\n method: 'GET',\n params: { id: '@id', action: 'logs' },\n ignoreLoadingBar: true,\n transformResponse: logsHandler,\n },\n stats: {\n method: 'GET',\n params: { id: '@id', stream: false, action: 'stats' },\n ignoreLoadingBar: true,\n },\n top: {\n method: 'GET',\n params: { id: '@id', action: 'top' },\n ignoreLoadingBar: true,\n },\n start: {\n method: 'POST',\n params: { id: '@id', action: 'start' },\n transformResponse: genericHandler,\n },\n create: {\n method: 'POST',\n params: { action: 'create' },\n transformResponse: genericHandler,\n ignoreLoadingBar: true,\n },\n remove: {\n method: 'DELETE',\n params: { id: '@id', v: '@v', force: '@force' },\n transformResponse: genericHandler,\n },\n rename: {\n method: 'POST',\n params: { id: '@id', action: 'rename', name: '@name' },\n transformResponse: genericHandler,\n },\n exec: {\n method: 'POST',\n params: { id: '@id', action: 'exec' },\n transformResponse: genericHandler,\n ignoreLoadingBar: true,\n },\n inspect: {\n method: 'GET',\n params: { id: '@id', action: 'json' },\n },\n update: {\n method: 'POST',\n params: { id: '@id', action: 'update' },\n },\n prune: {\n method: 'POST',\n params: { action: 'prune', filters: '@filters' },\n },\n resize: {\n method: 'POST',\n params: { id: '@id', action: 'resize', h: '@height', w: '@width' },\n transformResponse: genericHandler,\n ignoreLoadingBar: true,\n },\n }\n );\n },\n]);\n","import { genericHandler } from './response/handlers';\n\nangular.module('portainer.docker').factory('Exec', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function ExecFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/exec/:id/:action',\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n resize: {\n method: 'POST',\n params: { id: '@id', action: 'resize', h: '@height', w: '@width' },\n transformResponse: genericHandler,\n ignoreLoadingBar: true,\n },\n }\n );\n },\n]);\n","import { deleteImageHandler, jsonObjectsToArrayHandler } from './response/handlers';\nimport { imageGetResponse } from './response/image';\n\nangular.module('portainer.docker').factory('Image', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n 'HttpRequestHelper',\n 'ImagesInterceptor',\n function ImageFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider, HttpRequestHelper, ImagesInterceptor) {\n 'use strict';\n\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/images/:id/:action',\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n query: { method: 'GET', params: { all: 0, action: 'json' }, isArray: true, interceptor: ImagesInterceptor },\n get: { method: 'GET', params: { action: 'json' } },\n search: { method: 'GET', params: { action: 'search' } },\n history: { method: 'GET', params: { action: 'history' }, isArray: true },\n insert: { method: 'POST', params: { id: '@id', action: 'insert' } },\n tag: { method: 'POST', params: { id: '@id', action: 'tag', force: 0, repo: '@repo' }, ignoreLoadingBar: true },\n inspect: { method: 'GET', params: { id: '@id', action: 'json' } },\n push: {\n method: 'POST',\n params: { action: 'push', id: '@imageName' },\n isArray: true,\n transformResponse: jsonObjectsToArrayHandler,\n headers: { 'X-Registry-Auth': HttpRequestHelper.registryAuthenticationHeader },\n ignoreLoadingBar: true,\n },\n create: {\n method: 'POST',\n params: { action: 'create', fromImage: '@fromImage' },\n isArray: true,\n transformResponse: jsonObjectsToArrayHandler,\n headers: { 'X-Registry-Auth': HttpRequestHelper.registryAuthenticationHeader },\n ignoreLoadingBar: true,\n },\n download: {\n method: 'GET',\n params: { action: 'get', names: '@names' },\n transformResponse: imageGetResponse,\n responseType: 'blob',\n ignoreLoadingBar: true,\n },\n remove: {\n method: 'DELETE',\n params: { id: '@id', force: '@force' },\n isArray: true,\n transformResponse: deleteImageHandler,\n },\n }\n );\n },\n]);\n","import { genericHandler } from './response/handlers';\n\nangular.module('portainer.docker').factory('Network', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n 'NetworksInterceptor',\n function NetworkFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider, NetworksInterceptor) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/networks/:id/:action',\n {\n id: '@id',\n endpointId: EndpointProvider.endpointID,\n },\n {\n query: {\n method: 'GET',\n isArray: true,\n interceptor: NetworksInterceptor,\n },\n get: {\n method: 'GET',\n },\n create: {\n method: 'POST',\n params: { action: 'create' },\n transformResponse: genericHandler,\n ignoreLoadingBar: true,\n },\n remove: {\n method: 'DELETE',\n transformResponse: genericHandler,\n },\n connect: {\n method: 'POST',\n params: { action: 'connect' },\n },\n disconnect: {\n method: 'POST',\n params: { action: 'disconnect' },\n },\n }\n );\n },\n]);\n","angular.module('portainer.docker').factory('Node', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function NodeFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/nodes/:id/:action',\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n query: { method: 'GET', isArray: true },\n get: { method: 'GET', params: { id: '@id' } },\n update: { method: 'POST', params: { id: '@id', action: 'update', version: '@version' } },\n remove: { method: 'DELETE', params: { id: '@id' } },\n }\n );\n },\n]);\n","angular.module('portainer.docker').factory('Plugin', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function PluginFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/plugins/:id/:action',\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n query: { method: 'GET', isArray: true },\n }\n );\n },\n]);\n","angular.module('portainer.docker').factory('Secret', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function SecretFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/secrets/:id/:action',\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n get: { method: 'GET', params: { id: '@id' } },\n query: { method: 'GET', isArray: true },\n create: { method: 'POST', params: { action: 'create' }, ignoreLoadingBar: true },\n remove: { method: 'DELETE', params: { id: '@id' } },\n }\n );\n },\n]);\n","import { logsHandler } from './response/handlers';\n\nangular.module('portainer.docker').factory('Service', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n 'HttpRequestHelper',\n function ServiceFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider, HttpRequestHelper) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/services/:id/:action',\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n get: { method: 'GET', params: { id: '@id' } },\n query: { method: 'GET', isArray: true, params: { filters: '@filters' } },\n create: {\n method: 'POST',\n params: { action: 'create' },\n headers: {\n 'X-Registry-Auth': HttpRequestHelper.registryAuthenticationHeader,\n version: '1.29',\n },\n ignoreLoadingBar: true,\n },\n update: {\n method: 'POST',\n params: { id: '@id', action: 'update', version: '@version', rollback: '@rollback' },\n headers: {\n version: '1.29',\n },\n },\n remove: { method: 'DELETE', params: { id: '@id' } },\n logs: {\n method: 'GET',\n params: { id: '@id', action: 'logs' },\n ignoreLoadingBar: true,\n transformResponse: logsHandler,\n },\n }\n );\n },\n]);\n","angular.module('portainer.docker').factory('Swarm', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function SwarmFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/swarm',\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n get: { method: 'GET' },\n }\n );\n },\n]);\n","import { jsonObjectsToArrayHandler } from './response/handlers';\n\nangular.module('portainer.docker').factory('System', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n 'InfoInterceptor',\n 'VersionInterceptor',\n function SystemFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider, InfoInterceptor, VersionInterceptor) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/:action/:subAction',\n {\n name: '@name',\n endpointId: EndpointProvider.endpointID,\n },\n {\n info: {\n method: 'GET',\n params: { action: 'info' },\n interceptor: InfoInterceptor,\n },\n version: { method: 'GET', params: { action: 'version' }, interceptor: VersionInterceptor },\n events: {\n method: 'GET',\n params: { action: 'events', since: '@since', until: '@until' },\n isArray: true,\n transformResponse: jsonObjectsToArrayHandler,\n },\n auth: { method: 'POST', params: { action: 'auth' } },\n dataUsage: { method: 'GET', params: { action: 'system', subAction: 'df' } },\n }\n );\n },\n]);\n","angular.module('portainer.docker').factory('SystemEndpoint', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n function SystemEndpointFactory($resource, API_ENDPOINT_ENDPOINTS) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/:action/:subAction',\n {\n name: '@name',\n },\n {\n ping: {\n method: 'GET',\n params: { action: '_ping', endpointId: '@endpointId' },\n },\n }\n );\n },\n]);\n","import { logsHandler } from './response/handlers';\n\nangular.module('portainer.docker').factory('Task', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function TaskFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/tasks/:id/:action',\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n get: { method: 'GET', params: { id: '@id' } },\n query: { method: 'GET', isArray: true, params: { filters: '@filters' } },\n logs: {\n method: 'GET',\n params: { id: '@id', action: 'logs' },\n ignoreLoadingBar: true,\n transformResponse: logsHandler,\n },\n }\n );\n },\n]);\n","import { genericHandler } from './response/handlers';\n\nangular.module('portainer.docker').factory('Volume', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n 'VolumesInterceptor',\n function VolumeFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider, VolumesInterceptor) {\n 'use strict';\n\n function addVolumeNameToHeader(config) {\n return config.data.Name || '';\n }\n\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/volumes/:id/:action',\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n query: { method: 'GET', interceptor: VolumesInterceptor },\n get: { method: 'GET', params: { id: '@id' } },\n create: {\n method: 'POST',\n params: { action: 'create' },\n transformResponse: genericHandler,\n ignoreLoadingBar: true,\n headers: { 'X-Portainer-VolumeName': addVolumeNameToHeader },\n },\n remove: {\n method: 'DELETE',\n transformResponse: genericHandler,\n params: { id: '@id' },\n },\n }\n );\n },\n]);\n","import { ImageBuildModel } from '../models/image';\n\nangular.module('portainer.docker').factory('BuildService', [\n '$q',\n 'Build',\n 'FileUploadService',\n function BuildServiceFactory($q, Build, FileUploadService) {\n 'use strict';\n var service = {};\n\n service.buildImageFromUpload = function (names, file, path) {\n var deferred = $q.defer();\n\n FileUploadService.buildImage(names, file, path)\n .then(function success(response) {\n var model = new ImageBuildModel(response.data);\n deferred.resolve(model);\n })\n .catch(function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n };\n\n service.buildImageFromURL = function (names, url, path) {\n var params = {\n t: names,\n remote: url,\n dockerfile: path,\n };\n\n var deferred = $q.defer();\n\n Build.buildImage(params, {})\n .$promise.then(function success(data) {\n var model = new ImageBuildModel(data);\n deferred.resolve(model);\n })\n .catch(function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n };\n\n service.buildImageFromDockerfileContent = function (names, content) {\n var params = {\n t: names,\n };\n var payload = {\n content: content,\n };\n\n var deferred = $q.defer();\n\n Build.buildImageOverride(params, payload)\n .$promise.then(function success(data) {\n var model = new ImageBuildModel(data);\n deferred.resolve(model);\n })\n .catch(function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n };\n\n return service;\n },\n]);\n","import { ConfigViewModel } from '../models/config';\n\nangular.module('portainer.docker').factory('ConfigService', [\n '$q',\n 'Config',\n function ConfigServiceFactory($q, Config) {\n 'use strict';\n var service = {};\n\n service.config = function (configId) {\n var deferred = $q.defer();\n\n Config.get({ id: configId })\n .$promise.then(function success(data) {\n var config = new ConfigViewModel(data);\n deferred.resolve(config);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve config details', err: err });\n });\n\n return deferred.promise;\n };\n\n service.configs = function () {\n var deferred = $q.defer();\n\n Config.query({})\n .$promise.then(function success(data) {\n var configs = data.map(function (item) {\n return new ConfigViewModel(item);\n });\n deferred.resolve(configs);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve configs', err: err });\n });\n\n return deferred.promise;\n };\n\n service.remove = function (configId) {\n var deferred = $q.defer();\n\n Config.remove({ id: configId })\n .$promise.then(function success(data) {\n if (data.message) {\n deferred.reject({ msg: data.message });\n } else {\n deferred.resolve();\n }\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to remove config', err: err });\n });\n\n return deferred.promise;\n };\n\n service.create = function (config) {\n return Config.create(config).$promise;\n };\n\n return service;\n },\n]);\n","import { ContainerDetailsViewModel, ContainerStatsViewModel, ContainerViewModel } from '../models/container';\n\nangular.module('portainer.docker').factory('ContainerService', [\n '$q',\n 'Container',\n 'ResourceControlService',\n 'LogHelper',\n '$timeout',\n function ContainerServiceFactory($q, Container, ResourceControlService, LogHelper, $timeout) {\n 'use strict';\n var service = {};\n\n service.container = function (id) {\n var deferred = $q.defer();\n\n Container.get({ id: id })\n .$promise.then(function success(data) {\n var container = new ContainerDetailsViewModel(data);\n deferred.resolve(container);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve container information', err: err });\n });\n\n return deferred.promise;\n };\n\n service.containers = function (all, filters) {\n var deferred = $q.defer();\n Container.query({ all: all, filters: filters })\n .$promise.then(function success(data) {\n var containers = data.map(function (item) {\n return new ContainerViewModel(item);\n });\n deferred.resolve(containers);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve containers', err: err });\n });\n\n return deferred.promise;\n };\n\n service.resizeTTY = function (id, width, height, timeout) {\n var deferred = $q.defer();\n\n $timeout(function () {\n Container.resize({}, { id: id, height: height, width: width })\n .$promise.then(function success(data) {\n if (data.message) {\n deferred.reject({ msg: 'Unable to resize tty of container ' + id, err: data.message });\n } else {\n deferred.resolve(data);\n }\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to resize tty of container ' + id, err: err });\n });\n }, timeout);\n\n return deferred.promise;\n };\n\n service.startContainer = function (id) {\n return Container.start({ id: id }, {}).$promise;\n };\n\n service.stopContainer = function (id) {\n return Container.stop({ id: id }, {}).$promise;\n };\n\n service.restartContainer = function (id) {\n return Container.restart({ id: id }, {}).$promise;\n };\n\n service.killContainer = function (id) {\n return Container.kill({ id: id }, {}).$promise;\n };\n\n service.pauseContainer = function (id) {\n return Container.pause({ id: id }, {}).$promise;\n };\n\n service.resumeContainer = function (id) {\n return Container.unpause({ id: id }, {}).$promise;\n };\n\n service.renameContainer = function (id, newContainerName) {\n return Container.rename({ id: id, name: newContainerName }, {}).$promise;\n };\n\n service.updateRestartPolicy = updateRestartPolicy;\n\n function updateRestartPolicy(id, restartPolicy, maximumRetryCounts) {\n return Container.update({ id: id }, { RestartPolicy: { Name: restartPolicy, MaximumRetryCount: maximumRetryCounts } }).$promise;\n }\n\n service.createContainer = function (configuration) {\n var deferred = $q.defer();\n Container.create(configuration)\n .$promise.then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to create container', err: err });\n });\n return deferred.promise;\n };\n\n service.createAndStartContainer = function (configuration) {\n var deferred = $q.defer();\n var container;\n service\n .createContainer(configuration)\n .then(function success(data) {\n container = data;\n return service.startContainer(container.Id);\n })\n .then(function success() {\n deferred.resolve(container);\n })\n .catch(function error(err) {\n deferred.reject(err);\n });\n return deferred.promise;\n };\n\n service.remove = function (container, removeVolumes) {\n var deferred = $q.defer();\n\n Container.remove({ id: container.Id, v: removeVolumes ? 1 : 0, force: true })\n .$promise.then(function success(data) {\n if (data.message) {\n deferred.reject({ msg: data.message, err: data.message });\n } else {\n deferred.resolve();\n }\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to remove container', err: err });\n });\n\n return deferred.promise;\n };\n\n service.createExec = function (execConfig) {\n var deferred = $q.defer();\n\n Container.exec({}, execConfig)\n .$promise.then(function success(data) {\n if (data.message) {\n deferred.reject({ msg: data.message, err: data.message });\n } else {\n deferred.resolve(data);\n }\n })\n .catch(function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n };\n\n service.logs = function (id, stdout, stderr, timestamps, since, tail, stripHeaders) {\n var deferred = $q.defer();\n\n var parameters = {\n id: id,\n stdout: stdout || 0,\n stderr: stderr || 0,\n timestamps: timestamps || 0,\n since: since || 0,\n tail: tail || 'all',\n };\n\n Container.logs(parameters)\n .$promise.then(function success(data) {\n var logs = LogHelper.formatLogs(data.logs, stripHeaders);\n deferred.resolve(logs);\n })\n .catch(function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n };\n\n service.containerStats = function (id) {\n var deferred = $q.defer();\n\n Container.stats({ id: id })\n .$promise.then(function success(data) {\n var containerStats = new ContainerStatsViewModel(data);\n deferred.resolve(containerStats);\n })\n .catch(function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n };\n\n service.containerTop = function (id) {\n return Container.top({ id: id }).$promise;\n };\n\n service.inspect = function (id) {\n return Container.inspect({ id: id }).$promise;\n };\n\n service.prune = function (filters) {\n return Container.prune({ filters: filters }).$promise;\n };\n\n return service;\n },\n]);\n","angular.module('portainer.docker').factory('ExecService', [\n '$q',\n '$timeout',\n 'Exec',\n function ExecServiceFactory($q, $timeout, Exec) {\n 'use strict';\n var service = {};\n\n service.resizeTTY = function (execId, width, height, timeout) {\n var deferred = $q.defer();\n\n $timeout(function () {\n Exec.resize({}, { id: execId, height: height, width: width })\n .$promise.then(function success(data) {\n if (data.message) {\n deferred.reject({ msg: 'Unable to resize tty of exec', err: data.message });\n } else {\n deferred.resolve(data);\n }\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to resize tty of exec', err: err });\n });\n }, timeout);\n\n return deferred.promise;\n };\n\n return service;\n },\n]);\n","import _ from 'lodash-es';\nimport { ImageViewModel } from '../models/image';\nimport { ImageDetailsViewModel } from '../models/imageDetails';\nimport { ImageLayerViewModel } from '../models/imageLayer';\n\nangular.module('portainer.docker').factory('ImageService', [\n '$q',\n 'Image',\n 'ImageHelper',\n 'RegistryService',\n 'HttpRequestHelper',\n 'ContainerService',\n 'FileUploadService',\n function ImageServiceFactory($q, Image, ImageHelper, RegistryService, HttpRequestHelper, ContainerService, FileUploadService) {\n 'use strict';\n var service = {};\n\n service.image = function (imageId) {\n var deferred = $q.defer();\n Image.get({ id: imageId })\n .$promise.then(function success(data) {\n if (data.message) {\n deferred.reject({ msg: data.message });\n } else {\n var image = new ImageDetailsViewModel(data);\n deferred.resolve(image);\n }\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve image details', err: err });\n });\n return deferred.promise;\n };\n\n service.images = function (withUsage) {\n var deferred = $q.defer();\n\n $q.all({\n containers: withUsage ? ContainerService.containers(1) : [],\n images: Image.query({}).$promise,\n })\n .then(function success(data) {\n var containers = data.containers;\n\n var images = data.images.map(function (item) {\n item.ContainerCount = 0;\n for (var i = 0; i < containers.length; i++) {\n var container = containers[i];\n if (container.ImageID === item.Id) {\n item.ContainerCount++;\n }\n }\n return new ImageViewModel(item);\n });\n\n deferred.resolve(images);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve images', err: err });\n });\n return deferred.promise;\n };\n\n service.history = function (imageId) {\n var deferred = $q.defer();\n Image.history({ id: imageId })\n .$promise.then(function success(data) {\n if (data.message) {\n deferred.reject({ msg: data.message });\n } else {\n var layers = [];\n var order = data.length;\n angular.forEach(data, function (imageLayer) {\n layers.push(new ImageLayerViewModel(order, imageLayer));\n order--;\n });\n deferred.resolve(layers);\n }\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve image details', err: err });\n });\n return deferred.promise;\n };\n\n service.pushImage = pushImage;\n /**\n *\n * @param {PorImageRegistryModel} registryModel\n */\n function pushImage(registryModel) {\n var deferred = $q.defer();\n\n var authenticationDetails = registryModel.Registry.Authentication ? RegistryService.encodedCredentials(registryModel.Registry) : '';\n HttpRequestHelper.setRegistryAuthenticationHeader(authenticationDetails);\n\n const imageConfiguration = ImageHelper.createImageConfigForContainer(registryModel);\n\n Image.push({ imageName: imageConfiguration.fromImage })\n .$promise.then(function success(data) {\n if (data[data.length - 1].error) {\n deferred.reject({ msg: data[data.length - 1].error });\n } else {\n deferred.resolve();\n }\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to push image tag', err: err });\n });\n return deferred.promise;\n }\n\n /**\n * PULL IMAGE\n */\n\n function pullImageAndIgnoreErrors(imageConfiguration) {\n var deferred = $q.defer();\n\n Image.create({}, imageConfiguration)\n .$promise.catch(() => {\n // left empty to ignore errors\n })\n .finally(function final() {\n deferred.resolve();\n });\n\n return deferred.promise;\n }\n\n function pullImageAndAcknowledgeErrors(imageConfiguration) {\n var deferred = $q.defer();\n\n Image.create({}, imageConfiguration)\n .$promise.then(function success(data) {\n var err = data.length > 0 && data[data.length - 1].hasOwnProperty('message');\n if (err) {\n var detail = data[data.length - 1];\n deferred.reject({ msg: detail.message });\n } else {\n deferred.resolve(data);\n }\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to pull image', err: err });\n });\n\n return deferred.promise;\n }\n\n service.pullImage = pullImage;\n\n /**\n *\n * @param {PorImageRegistryModel} registry\n * @param {bool} ignoreErrors\n */\n function pullImage(registry, ignoreErrors) {\n var authenticationDetails = registry.Registry.Authentication ? RegistryService.encodedCredentials(registry.Registry) : '';\n HttpRequestHelper.setRegistryAuthenticationHeader(authenticationDetails);\n\n var imageConfiguration = ImageHelper.createImageConfigForContainer(registry);\n\n if (ignoreErrors) {\n return pullImageAndIgnoreErrors(imageConfiguration);\n }\n return pullImageAndAcknowledgeErrors(imageConfiguration);\n }\n\n /**\n * ! PULL IMAGE\n */\n\n service.tagImage = function (id, image) {\n return Image.tag({ id: id, repo: image }).$promise;\n };\n\n service.downloadImages = function (images) {\n var names = ImageHelper.getImagesNamesForDownload(images);\n return Image.download(names).$promise;\n };\n\n service.uploadImage = function (file) {\n return FileUploadService.loadImages(file);\n };\n\n service.deleteImage = function (id, forceRemoval) {\n var deferred = $q.defer();\n Image.remove({ id: id, force: forceRemoval })\n .$promise.then(function success(data) {\n if (data[0].message) {\n deferred.reject({ msg: data[0].message });\n } else {\n deferred.resolve();\n }\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to remove image', err: err });\n });\n return deferred.promise;\n };\n\n service.getUniqueTagListFromImages = function (availableImages) {\n return _.uniq(\n _.flatMap(availableImages, function (image) {\n _.remove(image.RepoTags, function (item) {\n return item.indexOf('') !== -1;\n });\n return image.RepoTags ? _.uniqWith(image.RepoTags, _.isEqual) : [];\n })\n );\n };\n\n return service;\n },\n]);\n","import { NetworkViewModel } from '../models/network';\n\nangular.module('portainer.docker').factory('NetworkService', [\n '$q',\n 'Network',\n function NetworkServiceFactory($q, Network) {\n 'use strict';\n var service = {};\n\n service.create = function (networkConfiguration) {\n var deferred = $q.defer();\n\n Network.create(networkConfiguration)\n .$promise.then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to create network', err: err });\n });\n return deferred.promise;\n };\n\n service.network = function (id) {\n var deferred = $q.defer();\n\n Network.get({ id: id })\n .$promise.then(function success(data) {\n var network = new NetworkViewModel(data);\n deferred.resolve(network);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve network details', err: err });\n });\n\n return deferred.promise;\n };\n\n service.networks = function (localNetworks, swarmNetworks, swarmAttachableNetworks, filters) {\n var deferred = $q.defer();\n\n Network.query({ filters: filters })\n .$promise.then(function success(data) {\n var networks = data;\n var filteredNetworks = networks\n .filter(function (network) {\n if (localNetworks && network.Scope === 'local') {\n return network;\n }\n if (swarmNetworks && network.Scope === 'swarm') {\n return network;\n }\n if (swarmAttachableNetworks && network.Scope === 'swarm' && network.Attachable === true) {\n return network;\n }\n })\n .map(function (item) {\n return new NetworkViewModel(item);\n });\n\n deferred.resolve(filteredNetworks);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve networks', err: err });\n });\n\n return deferred.promise;\n };\n\n service.remove = function (id) {\n return Network.remove({ id: id }).$promise;\n };\n\n service.disconnectContainer = function (networkId, containerId, force) {\n return Network.disconnect({ id: networkId }, { Container: containerId, Force: force }).$promise;\n };\n\n service.connectContainer = function (networkId, containerId, aliases) {\n var payload = {\n Container: containerId,\n };\n if (aliases) {\n payload.EndpointConfig = {\n Aliases: aliases,\n };\n }\n return Network.connect({ id: networkId }, payload).$promise;\n };\n\n return service;\n },\n]);\n","import { NodeViewModel } from '../models/node';\n\nangular.module('portainer.docker').factory('NodeService', [\n '$q',\n 'Node',\n function NodeServiceFactory($q, Node) {\n 'use strict';\n var service = {};\n\n service.nodes = nodes;\n service.node = node;\n service.updateNode = updateNode;\n service.getActiveManager = getActiveManager;\n\n function node(id) {\n var deferred = $q.defer();\n Node.get({ id: id })\n .$promise.then(function onNodeLoaded(rawNode) {\n var node = new NodeViewModel(rawNode);\n return deferred.resolve(node);\n })\n .catch(function onFailed(err) {\n deferred.reject({ msg: 'Unable to retrieve node', err: err });\n });\n\n return deferred.promise;\n }\n\n function nodes() {\n var deferred = $q.defer();\n\n Node.query({})\n .$promise.then(function success(data) {\n var nodes = data.map(function (item) {\n return new NodeViewModel(item);\n });\n deferred.resolve(nodes);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve nodes', err: err });\n });\n\n return deferred.promise;\n }\n\n function updateNode(node) {\n return Node.update({ id: node.Id, version: node.Version }, node).$promise;\n }\n\n function getActiveManager() {\n var deferred = $q.defer();\n\n service\n .nodes()\n .then(function success(data) {\n for (var i = 0; i < data.length; ++i) {\n var node = data[i];\n if (node.Role === 'manager' && node.Availability === 'active' && node.Status === 'ready' && node.Addr !== '0.0.0.0') {\n deferred.resolve(node);\n break;\n }\n }\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve nodes', err: err });\n });\n\n return deferred.promise;\n }\n\n return service;\n },\n]);\n","import _ from 'lodash-es';\nimport { PluginViewModel } from '../models/plugin';\n\nangular.module('portainer.docker').factory('PluginService', [\n '$q',\n 'Plugin',\n 'SystemService',\n function PluginServiceFactory($q, Plugin, SystemService) {\n 'use strict';\n var service = {};\n\n service.plugins = function () {\n var deferred = $q.defer();\n var plugins = [];\n\n Plugin.query({})\n .$promise.then(function success(data) {\n for (var i = 0; i < data.length; i++) {\n var plugin = new PluginViewModel(data[i]);\n plugins.push(plugin);\n }\n })\n .finally(function final() {\n deferred.resolve(plugins);\n });\n\n return deferred.promise;\n };\n\n function servicePlugins(systemOnly, pluginType, pluginVersion) {\n var deferred = $q.defer();\n\n $q.all({\n system: SystemService.plugins(),\n plugins: systemOnly ? [] : service.plugins(),\n })\n .then(function success(data) {\n var aggregatedPlugins = [];\n var systemPlugins = data.system;\n var plugins = data.plugins;\n\n if (systemPlugins[pluginType]) {\n aggregatedPlugins = aggregatedPlugins.concat(systemPlugins[pluginType]);\n }\n\n for (var i = 0; i < plugins.length; i++) {\n var plugin = plugins[i];\n if (plugin.Enabled && _.includes(plugin.Config.Interface.Types, pluginVersion)) {\n aggregatedPlugins.push(plugin.Name);\n }\n }\n\n deferred.resolve(aggregatedPlugins);\n })\n .catch(function error(err) {\n deferred.reject({ msg: err.msg, err: err });\n });\n\n return deferred.promise;\n }\n\n service.volumePlugins = function (systemOnly) {\n return servicePlugins(systemOnly, 'Volume', 'docker.volumedriver/1.0');\n };\n\n service.networkPlugins = function (systemOnly) {\n return servicePlugins(systemOnly, 'Network', 'docker.networkdriver/1.0');\n };\n\n service.loggingPlugins = function (systemOnly) {\n return servicePlugins(systemOnly, 'Log', 'docker.logdriver/1.0');\n };\n\n return service;\n },\n]);\n","import { SecretViewModel } from '../models/secret';\n\nangular.module('portainer.docker').factory('SecretService', [\n '$q',\n 'Secret',\n function SecretServiceFactory($q, Secret) {\n 'use strict';\n var service = {};\n\n service.secret = function (secretId) {\n var deferred = $q.defer();\n\n Secret.get({ id: secretId })\n .$promise.then(function success(data) {\n var secret = new SecretViewModel(data);\n deferred.resolve(secret);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve secret details', err: err });\n });\n\n return deferred.promise;\n };\n\n service.secrets = function () {\n var deferred = $q.defer();\n\n Secret.query({})\n .$promise.then(function success(data) {\n var secrets = data.map(function (item) {\n return new SecretViewModel(item);\n });\n deferred.resolve(secrets);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve secrets', err: err });\n });\n\n return deferred.promise;\n };\n\n service.remove = function (secretId) {\n var deferred = $q.defer();\n\n Secret.remove({ id: secretId })\n .$promise.then(function success(data) {\n if (data.message) {\n deferred.reject({ msg: data.message });\n } else {\n deferred.resolve();\n }\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to remove secret', err: err });\n });\n\n return deferred.promise;\n };\n\n service.create = function (secretConfig) {\n return Secret.create(secretConfig).$promise;\n };\n\n return service;\n },\n]);\n","import { ServiceViewModel } from '../models/service';\n\nangular.module('portainer.docker').factory('ServiceService', [\n '$q',\n 'Service',\n 'ServiceHelper',\n 'TaskService',\n 'ResourceControlService',\n 'LogHelper',\n function ServiceServiceFactory($q, Service, ServiceHelper, TaskService, ResourceControlService, LogHelper) {\n 'use strict';\n var service = {};\n\n service.services = function (filters) {\n var deferred = $q.defer();\n\n Service.query({ filters: filters ? filters : {} })\n .$promise.then(function success(data) {\n var services = data.map(function (item) {\n return new ServiceViewModel(item);\n });\n deferred.resolve(services);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve services', err: err });\n });\n\n return deferred.promise;\n };\n\n service.service = function (id) {\n var deferred = $q.defer();\n\n Service.get({ id: id })\n .$promise.then(function success(data) {\n var service = new ServiceViewModel(data);\n deferred.resolve(service);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve service details', err: err });\n });\n\n return deferred.promise;\n };\n\n service.remove = function (service) {\n var deferred = $q.defer();\n\n Service.remove({ id: service.Id })\n .$promise.then(function success(data) {\n if (data.message) {\n deferred.reject({ msg: data.message, err: data.message });\n } else {\n deferred.resolve();\n }\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to remove service', err: err });\n });\n\n return deferred.promise;\n };\n\n service.update = function (serv, config, rollback) {\n return service.service(serv.Id).then((data) => {\n const params = {\n id: serv.Id,\n version: data.Version,\n };\n if (rollback) {\n params.rollback = rollback;\n }\n return Service.update(params, config).$promise;\n });\n };\n\n service.logs = function (id, stdout, stderr, timestamps, since, tail) {\n var deferred = $q.defer();\n\n var parameters = {\n id: id,\n stdout: stdout || 0,\n stderr: stderr || 0,\n timestamps: timestamps || 0,\n since: since || 0,\n tail: tail || 'all',\n };\n\n Service.logs(parameters)\n .$promise.then(function success(data) {\n var logs = LogHelper.formatLogs(data.logs, true);\n deferred.resolve(logs);\n })\n .catch(function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n };\n\n return service;\n },\n]);\n","import { SwarmViewModel } from '../models/swarm';\n\nangular.module('portainer.docker').factory('SwarmService', [\n '$q',\n 'Swarm',\n function SwarmServiceFactory($q, Swarm) {\n 'use strict';\n var service = {};\n\n service.swarm = function () {\n var deferred = $q.defer();\n\n Swarm.get()\n .$promise.then(function success(data) {\n var swarm = new SwarmViewModel(data);\n deferred.resolve(swarm);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve Swarm details', err: err });\n });\n\n return deferred.promise;\n };\n\n return service;\n },\n]);\n","import { EventViewModel } from '../models/event';\n\nangular.module('portainer.docker').factory('SystemService', [\n '$q',\n 'System',\n 'SystemEndpoint',\n function SystemServiceFactory($q, System, SystemEndpoint) {\n 'use strict';\n var service = {};\n\n service.plugins = function () {\n var deferred = $q.defer();\n System.info({})\n .$promise.then(function success(data) {\n var plugins = data.Plugins;\n deferred.resolve(plugins);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve plugins information from system', err: err });\n });\n return deferred.promise;\n };\n\n service.info = function () {\n return System.info({}).$promise;\n };\n\n service.ping = function (endpointId) {\n return SystemEndpoint.ping({ endpointId: endpointId }).$promise;\n };\n\n service.version = function () {\n return System.version({}).$promise;\n };\n\n service.events = function (from, to) {\n var deferred = $q.defer();\n\n System.events({ since: from, until: to })\n .$promise.then(function success(data) {\n var events = data.map(function (item) {\n return new EventViewModel(item);\n });\n deferred.resolve(events);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve engine events', err: err });\n });\n\n return deferred.promise;\n };\n\n service.dataUsage = function () {\n return System.dataUsage().$promise;\n };\n\n return service;\n },\n]);\n","import { TaskViewModel } from '../models/task';\n\nangular.module('portainer.docker').factory('TaskService', [\n '$q',\n 'Task',\n 'LogHelper',\n function TaskServiceFactory($q, Task, LogHelper) {\n 'use strict';\n var service = {};\n\n service.task = function (id) {\n var deferred = $q.defer();\n\n Task.get({ id: id })\n .$promise.then(function success(data) {\n var task = new TaskViewModel(data);\n deferred.resolve(task);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve task details', err: err });\n });\n\n return deferred.promise;\n };\n\n service.tasks = function (filters) {\n var deferred = $q.defer();\n\n Task.query({ filters: filters ? filters : {} })\n .$promise.then(function success(data) {\n var tasks = data.map(function (item) {\n return new TaskViewModel(item);\n });\n deferred.resolve(tasks);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve tasks', err: err });\n });\n\n return deferred.promise;\n };\n\n service.logs = function (id, stdout, stderr, timestamps, since, tail) {\n var deferred = $q.defer();\n\n var parameters = {\n id: id,\n stdout: stdout || 0,\n stderr: stderr || 0,\n timestamps: timestamps || 0,\n since: since || 0,\n tail: tail || 'all',\n };\n\n Task.logs(parameters)\n .$promise.then(function success(data) {\n var logs = LogHelper.formatLogs(data.logs, true);\n deferred.resolve(logs);\n })\n .catch(function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n };\n\n return service;\n },\n]);\n","import { VolumeViewModel } from '../models/volume';\n\nangular.module('portainer.docker').factory('VolumeService', [\n '$q',\n 'Volume',\n 'VolumeHelper',\n function VolumeServiceFactory($q, Volume, VolumeHelper) {\n 'use strict';\n var service = {};\n\n service.volumes = function (params) {\n var deferred = $q.defer();\n Volume.query(params)\n .$promise.then(function success(data) {\n var volumes = data.Volumes || [];\n volumes = volumes.map(function (item) {\n return new VolumeViewModel(item);\n });\n deferred.resolve(volumes);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve volumes', err: err });\n });\n return deferred.promise;\n };\n\n service.volume = function (id) {\n var deferred = $q.defer();\n Volume.get({ id: id })\n .$promise.then(function success(data) {\n var volume = new VolumeViewModel(data);\n deferred.resolve(volume);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve volume details', err: err });\n });\n return deferred.promise;\n };\n\n service.getVolumes = function () {\n return Volume.query({}).$promise;\n };\n\n service.remove = function (volume) {\n var deferred = $q.defer();\n\n Volume.remove({ id: volume.Id })\n .$promise.then(function success(data) {\n if (data.message) {\n deferred.reject({ msg: data.message, err: data.message });\n } else {\n deferred.resolve();\n }\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to remove volume', err: err });\n });\n\n return deferred.promise;\n };\n\n service.createVolumeConfiguration = function (name, driver, driverOptions) {\n var volumeConfiguration = {\n Name: name,\n Driver: driver,\n DriverOpts: VolumeHelper.createDriverOptions(driverOptions),\n };\n return volumeConfiguration;\n };\n\n service.createVolume = function (volumeConfiguration) {\n var deferred = $q.defer();\n Volume.create(volumeConfiguration)\n .$promise.then(function success(data) {\n if (data.message) {\n deferred.reject({ msg: data.message });\n } else {\n var volume = new VolumeViewModel(data);\n deferred.resolve(volume);\n }\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to create volume', err: err });\n });\n return deferred.promise;\n };\n\n service.createVolumes = function (volumeConfigurations) {\n var createVolumeQueries = volumeConfigurations.map(function (volumeConfiguration) {\n return service.createVolume(volumeConfiguration);\n });\n return $q.all(createVolumeQueries);\n };\n\n service.createXAutoGeneratedLocalVolumes = function (x) {\n var createVolumeQueries = [];\n for (var i = 0; i < x; i++) {\n createVolumeQueries.push(service.createVolume({ Driver: 'local' }));\n }\n return $q.all(createVolumeQueries);\n };\n\n return service;\n },\n]);\n","import angular from 'angular';\n\nclass ConfigsController {\n /* @ngInject */\n constructor($state, ConfigService, Notifications, $async) {\n this.$state = $state;\n this.ConfigService = ConfigService;\n this.Notifications = Notifications;\n this.$async = $async;\n\n this.removeAction = this.removeAction.bind(this);\n this.removeActionAsync = this.removeActionAsync.bind(this);\n this.getConfigs = this.getConfigs.bind(this);\n this.getConfigsAsync = this.getConfigsAsync.bind(this);\n }\n\n getConfigs() {\n return this.$async(this.getConfigsAsync);\n }\n\n async getConfigsAsync() {\n try {\n this.configs = await this.ConfigService.configs();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve configs');\n }\n }\n\n async $onInit() {\n this.configs = [];\n this.getConfigs();\n }\n\n removeAction(selectedItems) {\n return this.$async(this.removeActionAsync, selectedItems);\n }\n\n async removeActionAsync(selectedItems) {\n let actionCount = selectedItems.length;\n for (const config of selectedItems) {\n try {\n await this.ConfigService.remove(config.Id);\n this.Notifications.success('Config successfully removed', config.Name);\n const index = this.configs.indexOf(config);\n this.configs.splice(index, 1);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to remove config');\n } finally {\n --actionCount;\n if (actionCount === 0) {\n this.$state.reload();\n }\n }\n }\n }\n}\nexport default ConfigsController;\nangular.module('portainer.docker').controller('ConfigsController', ConfigsController);\n","import _ from 'lodash-es';\nimport { AccessControlFormData } from 'Portainer/components/accessControlForm/porAccessControlFormModel';\n\nimport angular from 'angular';\n\nclass CreateConfigController {\n /* @ngInject */\n constructor($async, $state, $transition$, $window, ModalService, Notifications, ConfigService, Authentication, FormValidator, ResourceControlService) {\n this.$state = $state;\n this.$transition$ = $transition$;\n this.$window = $window;\n this.ModalService = ModalService;\n this.Notifications = Notifications;\n this.ConfigService = ConfigService;\n this.Authentication = Authentication;\n this.FormValidator = FormValidator;\n this.ResourceControlService = ResourceControlService;\n this.$async = $async;\n\n this.formValues = {\n Name: '',\n Labels: [],\n AccessControlData: new AccessControlFormData(),\n ConfigContent: '',\n };\n\n this.state = {\n formValidationError: '',\n isEditorDirty: false,\n };\n\n this.editorUpdate = this.editorUpdate.bind(this);\n this.createAsync = this.createAsync.bind(this);\n }\n\n async $onInit() {\n this.$window.onbeforeunload = () => {\n if (this.formValues.displayCodeEditor && this.formValues.ConfigContent && this.state.isEditorDirty) {\n return '';\n }\n };\n\n if (!this.$transition$.params().id) {\n this.formValues.displayCodeEditor = true;\n return;\n }\n\n try {\n let data = await this.ConfigService.config(this.$transition$.params().id);\n this.formValues.Name = data.Name + '_copy';\n this.formValues.Data = data.Data;\n let labels = _.keys(data.Labels);\n for (let i = 0; i < labels.length; i++) {\n let labelName = labels[i];\n let labelValue = data.Labels[labelName];\n this.formValues.Labels.push({ name: labelName, value: labelValue });\n }\n this.formValues.displayCodeEditor = true;\n } catch (err) {\n this.formValues.displayCodeEditor = true;\n this.Notifications.error('Failure', err, 'Unable to clone config');\n }\n }\n\n async uiCanExit() {\n if (this.formValues.displayCodeEditor && this.formValues.ConfigContent && this.state.isEditorDirty) {\n return this.ModalService.confirmWebEditorDiscard();\n }\n }\n\n addLabel() {\n this.formValues.Labels.push({ name: '', value: '' });\n }\n\n removeLabel(index) {\n this.formValues.Labels.splice(index, 1);\n }\n\n prepareLabelsConfig(config) {\n let labels = {};\n this.formValues.Labels.forEach(function (label) {\n if (label.name && label.value) {\n labels[label.name] = label.value;\n }\n });\n config.Labels = labels;\n }\n\n prepareConfigData(config) {\n let configData = this.formValues.ConfigContent;\n config.Data = btoa(unescape(encodeURIComponent(configData)));\n }\n\n prepareConfiguration() {\n let config = {};\n config.Name = this.formValues.Name;\n this.prepareConfigData(config);\n this.prepareLabelsConfig(config);\n return config;\n }\n\n validateForm(accessControlData, isAdmin) {\n this.state.formValidationError = '';\n let error = '';\n error = this.FormValidator.validateAccessControl(accessControlData, isAdmin);\n\n if (error) {\n this.state.formValidationError = error;\n return false;\n }\n return true;\n }\n\n create() {\n return this.$async(this.createAsync);\n }\n\n async createAsync() {\n const accessControlData = this.formValues.AccessControlData;\n const userDetails = this.Authentication.getUserDetails();\n const isAdmin = this.Authentication.isAdmin();\n\n if (this.formValues.ConfigContent === '') {\n this.state.formValidationError = 'Config content must not be empty';\n return;\n }\n\n if (!this.validateForm(accessControlData, isAdmin)) {\n return;\n }\n\n const config = this.prepareConfiguration();\n\n try {\n const data = await this.ConfigService.create(config);\n const resourceControl = data.Portainer.ResourceControl;\n const userId = userDetails.ID;\n await this.ResourceControlService.applyResourceControl(userId, accessControlData, resourceControl);\n this.Notifications.success('Config successfully created');\n this.state.isEditorDirty = false;\n this.$state.go('docker.configs', {}, { reload: true });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to create config');\n }\n }\n\n editorUpdate(cm) {\n this.formValues.ConfigContent = cm.getValue();\n this.state.isEditorDirty = true;\n }\n}\n\nexport default CreateConfigController;\nangular.module('portainer.docker').controller('CreateConfigController', CreateConfigController);\n","angular.module('portainer.docker').controller('ConfigController', [\n '$scope',\n '$transition$',\n '$state',\n 'ConfigService',\n 'Notifications',\n function ($scope, $transition$, $state, ConfigService, Notifications) {\n $scope.removeConfig = function removeConfig(configId) {\n ConfigService.remove(configId)\n .then(function success() {\n Notifications.success('Config successfully removed');\n $state.go('docker.configs', {});\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove config');\n });\n };\n\n function initView() {\n ConfigService.config($transition$.params().id)\n .then(function success(data) {\n $scope.config = data;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve config details');\n });\n }\n\n initView();\n },\n]);\n","import { Terminal } from 'xterm';\n\nangular.module('portainer.docker').controller('ContainerConsoleController', [\n '$scope',\n '$transition$',\n 'ContainerService',\n 'ImageService',\n 'EndpointProvider',\n 'Notifications',\n 'ContainerHelper',\n 'ExecService',\n 'HttpRequestHelper',\n 'LocalStorage',\n 'CONSOLE_COMMANDS_LABEL_PREFIX',\n function (\n $scope,\n $transition$,\n ContainerService,\n ImageService,\n EndpointProvider,\n Notifications,\n ContainerHelper,\n ExecService,\n HttpRequestHelper,\n LocalStorage,\n CONSOLE_COMMANDS_LABEL_PREFIX\n ) {\n var socket, term;\n\n let states = Object.freeze({\n disconnected: 0,\n connecting: 1,\n connected: 2,\n });\n\n $scope.loaded = false;\n $scope.states = states;\n $scope.state = states.disconnected;\n\n $scope.formValues = {};\n $scope.containerCommands = [];\n\n // Ensure the socket is closed before leaving the view\n $scope.$on('$stateChangeStart', function () {\n $scope.disconnect();\n });\n\n $scope.connectAttach = function () {\n if ($scope.state > states.disconnected) {\n return;\n }\n\n $scope.state = states.connecting;\n\n let attachId = $transition$.params().id;\n\n ContainerService.container(attachId)\n .then((details) => {\n if (!details.State.Running) {\n Notifications.error('Failure', details, 'Container ' + attachId + ' is not running!');\n $scope.disconnect();\n return;\n }\n\n const params = {\n token: LocalStorage.getJWT(),\n endpointId: EndpointProvider.endpointID(),\n id: attachId,\n };\n\n var url =\n window.location.href.split('#')[0] +\n 'api/websocket/attach?' +\n Object.keys(params)\n .map((k) => k + '=' + params[k])\n .join('&');\n\n initTerm(url, ContainerService.resizeTTY.bind(this, attachId));\n })\n .catch(function error(err) {\n Notifications.error('Error', err, 'Unable to retrieve container details');\n $scope.disconnect();\n });\n };\n\n $scope.connectExec = function () {\n if ($scope.state > states.disconnected) {\n return;\n }\n\n $scope.state = states.connecting;\n var command = $scope.formValues.isCustomCommand ? $scope.formValues.customCommand : $scope.formValues.command;\n var execConfig = {\n id: $transition$.params().id,\n AttachStdin: true,\n AttachStdout: true,\n AttachStderr: true,\n Tty: true,\n User: $scope.formValues.user,\n Cmd: ContainerHelper.commandStringToArray(command),\n };\n\n ContainerService.createExec(execConfig)\n .then(function success(data) {\n const params = {\n token: LocalStorage.getJWT(),\n endpointId: EndpointProvider.endpointID(),\n id: data.Id,\n };\n\n var url =\n window.location.href.split('#')[0] +\n 'api/websocket/exec?' +\n Object.keys(params)\n .map((k) => k + '=' + params[k])\n .join('&');\n\n initTerm(url, ExecService.resizeTTY.bind(this, params.id));\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to exec into container');\n $scope.disconnect();\n });\n };\n\n $scope.disconnect = function () {\n if (socket) {\n socket.close();\n }\n if ($scope.state > states.disconnected) {\n $scope.state = states.disconnected;\n if (term) {\n term.write('\\n\\r(connection closed)');\n term.dispose();\n }\n }\n };\n\n $scope.autoconnectAttachView = function () {\n return $scope.initView().then(function success() {\n if ($scope.container.State.Running) {\n $scope.connectAttach();\n }\n });\n };\n\n function resize(restcall, add) {\n add = add || 0;\n\n term.fit();\n var termWidth = term.cols;\n var termHeight = 30;\n term.resize(termWidth, termHeight);\n\n restcall(termWidth + add, termHeight + add, 1);\n }\n\n function initTerm(url, resizeRestCall) {\n let resizefun = resize.bind(this, resizeRestCall);\n\n if ($transition$.params().nodeName) {\n url += '&nodeName=' + $transition$.params().nodeName;\n }\n if (url.indexOf('https') > -1) {\n url = url.replace('https://', 'wss://');\n } else {\n url = url.replace('http://', 'ws://');\n }\n\n socket = new WebSocket(url);\n\n socket.onopen = function () {\n $scope.state = states.connected;\n term = new Terminal();\n\n term.on('data', function (data) {\n socket.send(data);\n });\n var terminal_container = document.getElementById('terminal-container');\n term.open(terminal_container);\n term.focus();\n term.setOption('cursorBlink', true);\n\n window.onresize = function () {\n resizefun();\n $scope.$apply();\n };\n\n $scope.$watch('toggle', function () {\n setTimeout(resizefun, 400);\n });\n\n socket.onmessage = function (e) {\n term.write(e.data);\n };\n socket.onerror = function (err) {\n $scope.disconnect();\n $scope.$apply();\n Notifications.error('Failure', err, 'Connection error');\n };\n socket.onclose = function () {\n $scope.disconnect();\n $scope.$apply();\n };\n\n resizefun(1);\n $scope.$apply();\n };\n }\n\n $scope.initView = function () {\n HttpRequestHelper.setPortainerAgentTargetHeader($transition$.params().nodeName);\n return ContainerService.container($transition$.params().id)\n .then(function success(data) {\n var container = data;\n $scope.container = container;\n return ImageService.image(container.Image);\n })\n .then(function success(data) {\n var image = data;\n var containerLabels = $scope.container.Config.Labels;\n $scope.imageOS = image.Os;\n $scope.formValues.command = image.Os === 'windows' ? 'powershell' : 'bash';\n $scope.containerCommands = Object.keys(containerLabels)\n .filter(function (label) {\n return label.indexOf(CONSOLE_COMMANDS_LABEL_PREFIX) === 0;\n })\n .map(function (label) {\n return {\n title: label.replace(CONSOLE_COMMANDS_LABEL_PREFIX, ''),\n command: containerLabels[label],\n };\n });\n $scope.loaded = true;\n })\n .catch(function error(err) {\n Notifications.error('Error', err, 'Unable to retrieve container details');\n });\n };\n },\n]);\n","angular.module('portainer.docker').controller('ContainersController', [\n '$scope',\n 'ContainerService',\n 'Notifications',\n 'EndpointProvider',\n function ($scope, ContainerService, Notifications, EndpointProvider) {\n $scope.offlineMode = false;\n\n $scope.getContainers = getContainers;\n\n function getContainers() {\n ContainerService.containers(1)\n .then(function success(data) {\n $scope.containers = data;\n $scope.offlineMode = EndpointProvider.offlineMode();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve containers');\n $scope.containers = [];\n });\n }\n\n function initView() {\n getContainers();\n }\n\n initView();\n },\n]);\n","import _ from 'lodash-es';\n\nimport * as envVarsUtils from '@/portainer/helpers/env-vars';\nimport { PorImageRegistryModel } from 'Docker/models/porImageRegistry';\n\nimport { ContainerCapabilities, ContainerCapability } from '../../../models/containerCapabilities';\nimport { AccessControlFormData } from '../../../../portainer/components/accessControlForm/porAccessControlFormModel';\nimport { ContainerDetailsViewModel } from '../../../models/container';\n\nangular.module('portainer.docker').controller('CreateContainerController', [\n '$q',\n '$scope',\n '$async',\n '$state',\n '$timeout',\n '$transition$',\n '$filter',\n 'Container',\n 'ContainerHelper',\n 'Image',\n 'ImageHelper',\n 'Volume',\n 'NetworkService',\n 'ResourceControlService',\n 'Authentication',\n 'Notifications',\n 'ContainerService',\n 'ImageService',\n 'FormValidator',\n 'ModalService',\n 'RegistryService',\n 'SystemService',\n 'PluginService',\n 'HttpRequestHelper',\n 'endpoint',\n function (\n $q,\n $scope,\n $async,\n $state,\n $timeout,\n $transition$,\n $filter,\n Container,\n ContainerHelper,\n Image,\n ImageHelper,\n Volume,\n NetworkService,\n ResourceControlService,\n Authentication,\n Notifications,\n ContainerService,\n ImageService,\n FormValidator,\n ModalService,\n RegistryService,\n SystemService,\n PluginService,\n HttpRequestHelper,\n endpoint\n ) {\n $scope.create = create;\n $scope.endpoint = endpoint;\n\n $scope.formValues = {\n alwaysPull: true,\n Console: 'none',\n Volumes: [],\n NetworkContainer: null,\n Labels: [],\n ExtraHosts: [],\n MacAddress: '',\n IPv4: '',\n IPv6: '',\n DnsPrimary: '',\n DnsSecondary: '',\n AccessControlData: new AccessControlFormData(),\n CpuLimit: 0,\n MemoryLimit: 0,\n MemoryReservation: 0,\n CmdMode: 'default',\n EntrypointMode: 'default',\n Env: [],\n NodeName: null,\n capabilities: [],\n Sysctls: [],\n LogDriverName: '',\n LogDriverOpts: [],\n RegistryModel: new PorImageRegistryModel(),\n };\n\n $scope.extraNetworks = {};\n\n $scope.state = {\n formValidationError: '',\n actionInProgress: false,\n mode: '',\n pullImageValidity: true,\n };\n\n $scope.handleEnvVarChange = handleEnvVarChange;\n function handleEnvVarChange(value) {\n $scope.formValues.Env = value;\n }\n\n $scope.refreshSlider = function () {\n $timeout(function () {\n $scope.$broadcast('rzSliderForceRender');\n });\n };\n\n $scope.onImageNameChange = function () {\n $scope.formValues.CmdMode = 'default';\n $scope.formValues.EntrypointMode = 'default';\n };\n\n $scope.setPullImageValidity = setPullImageValidity;\n function setPullImageValidity(validity) {\n if (!validity) {\n $scope.formValues.alwaysPull = false;\n }\n $scope.state.pullImageValidity = validity;\n }\n\n $scope.config = {\n Image: '',\n Env: [],\n Cmd: '',\n MacAddress: '',\n ExposedPorts: {},\n Entrypoint: '',\n HostConfig: {\n RestartPolicy: {\n Name: 'no',\n },\n PortBindings: [],\n PublishAllPorts: false,\n Binds: [],\n AutoRemove: false,\n NetworkMode: 'bridge',\n Privileged: false,\n Init: false,\n Runtime: null,\n ExtraHosts: [],\n Devices: [],\n CapAdd: [],\n CapDrop: [],\n Sysctls: {},\n },\n NetworkingConfig: {\n EndpointsConfig: {},\n },\n Labels: {},\n };\n\n $scope.addVolume = function () {\n $scope.formValues.Volumes.push({ name: '', containerPath: '', readOnly: false, type: 'volume' });\n };\n\n $scope.removeVolume = function (index) {\n $scope.formValues.Volumes.splice(index, 1);\n };\n\n $scope.addPortBinding = function () {\n $scope.config.HostConfig.PortBindings.push({ hostPort: '', containerPort: '', protocol: 'tcp' });\n };\n\n $scope.removePortBinding = function (index) {\n $scope.config.HostConfig.PortBindings.splice(index, 1);\n };\n\n $scope.addLabel = function () {\n $scope.formValues.Labels.push({ name: '', value: '' });\n };\n\n $scope.removeLabel = function (index) {\n $scope.formValues.Labels.splice(index, 1);\n };\n\n $scope.addExtraHost = function () {\n $scope.formValues.ExtraHosts.push({ value: '' });\n };\n\n $scope.removeExtraHost = function (index) {\n $scope.formValues.ExtraHosts.splice(index, 1);\n };\n\n $scope.addDevice = function () {\n $scope.config.HostConfig.Devices.push({ pathOnHost: '', pathInContainer: '' });\n };\n\n $scope.removeDevice = function (index) {\n $scope.config.HostConfig.Devices.splice(index, 1);\n };\n\n $scope.addSysctl = function () {\n $scope.formValues.Sysctls.push({ name: '', value: '' });\n };\n\n $scope.removeSysctl = function (index) {\n $scope.formValues.Sysctls.splice(index, 1);\n };\n\n $scope.addLogDriverOpt = function () {\n $scope.formValues.LogDriverOpts.push({ name: '', value: '' });\n };\n\n $scope.removeLogDriverOpt = function (index) {\n $scope.formValues.LogDriverOpts.splice(index, 1);\n };\n\n $scope.fromContainerMultipleNetworks = false;\n\n function prepareImageConfig(config) {\n const imageConfig = ImageHelper.createImageConfigForContainer($scope.formValues.RegistryModel);\n config.Image = imageConfig.fromImage;\n }\n\n function preparePortBindings(config) {\n const bindings = ContainerHelper.preparePortBindings(config.HostConfig.PortBindings);\n config.ExposedPorts = {};\n _.forEach(bindings, (_, key) => (config.ExposedPorts[key] = {}));\n config.HostConfig.PortBindings = bindings;\n }\n\n function prepareConsole(config) {\n var value = $scope.formValues.Console;\n var openStdin = true;\n var tty = true;\n if (value === 'tty') {\n openStdin = false;\n } else if (value === 'interactive') {\n tty = false;\n } else if (value === 'none') {\n openStdin = false;\n tty = false;\n }\n config.OpenStdin = openStdin;\n config.Tty = tty;\n }\n\n function prepareCmd(config) {\n if (_.isEmpty(config.Cmd) || $scope.formValues.CmdMode == 'default') {\n delete config.Cmd;\n } else {\n config.Cmd = ContainerHelper.commandStringToArray(config.Cmd);\n }\n }\n\n function prepareEntrypoint(config) {\n if ($scope.formValues.EntrypointMode == 'default' || (_.isEmpty(config.Cmd) && _.isEmpty(config.Entrypoint))) {\n config.Entrypoint = null;\n }\n }\n\n function prepareEnvironmentVariables(config) {\n config.Env = envVarsUtils.convertToArrayOfStrings($scope.formValues.Env);\n }\n\n function prepareVolumes(config) {\n var binds = [];\n var volumes = {};\n\n $scope.formValues.Volumes.forEach(function (volume) {\n var name = volume.name;\n var containerPath = volume.containerPath;\n if (name && containerPath) {\n var bind = name + ':' + containerPath;\n volumes[containerPath] = {};\n if (volume.readOnly) {\n bind += ':ro';\n }\n binds.push(bind);\n }\n });\n config.HostConfig.Binds = binds;\n config.Volumes = volumes;\n }\n\n function prepareNetworkConfig(config) {\n var mode = config.HostConfig.NetworkMode;\n var container = $scope.formValues.NetworkContainer;\n var containerName = container;\n if (container && typeof container === 'object') {\n containerName = $filter('trimcontainername')(container.Names[0]);\n }\n var networkMode = mode;\n if (containerName) {\n networkMode += ':' + containerName;\n config.Hostname = '';\n }\n config.HostConfig.NetworkMode = networkMode;\n config.MacAddress = $scope.formValues.MacAddress;\n\n config.NetworkingConfig.EndpointsConfig[networkMode] = {\n IPAMConfig: {\n IPv4Address: $scope.formValues.IPv4,\n IPv6Address: $scope.formValues.IPv6,\n },\n };\n\n if (networkMode && _.get($scope.config.NetworkingConfig.EndpointsConfig[networkMode], 'Aliases')) {\n var aliases = $scope.config.NetworkingConfig.EndpointsConfig[networkMode].Aliases;\n config.NetworkingConfig.EndpointsConfig[networkMode].Aliases = _.filter(aliases, (o) => {\n return !_.startsWith($scope.fromContainer.Id, o);\n });\n }\n\n var dnsServers = [];\n if ($scope.formValues.DnsPrimary) {\n dnsServers.push($scope.formValues.DnsPrimary);\n }\n if ($scope.formValues.DnsSecondary) {\n dnsServers.push($scope.formValues.DnsSecondary);\n }\n config.HostConfig.Dns = dnsServers;\n\n config.HostConfig.ExtraHosts = _.map(\n _.filter($scope.formValues.ExtraHosts, (v) => v.value),\n 'value'\n );\n }\n\n function prepareLabels(config) {\n var labels = {};\n $scope.formValues.Labels.forEach(function (label) {\n if (label.name) {\n if (label.value) {\n labels[label.name] = label.value;\n } else {\n labels[label.name] = '';\n }\n }\n });\n config.Labels = labels;\n }\n\n function prepareDevices(config) {\n var path = [];\n config.HostConfig.Devices.forEach(function (p) {\n if (p.pathOnHost) {\n if (p.pathInContainer === '') {\n p.pathInContainer = p.pathOnHost;\n }\n path.push({ PathOnHost: p.pathOnHost, PathInContainer: p.pathInContainer, CgroupPermissions: 'rwm' });\n }\n });\n config.HostConfig.Devices = path;\n }\n\n function prepareSysctls(config) {\n var sysctls = {};\n $scope.formValues.Sysctls.forEach(function (sysctl) {\n if (sysctl.name && sysctl.value) {\n sysctls[sysctl.name] = sysctl.value;\n }\n });\n config.HostConfig.Sysctls = sysctls;\n }\n\n function prepareResources(config) {\n // Memory Limit - Round to 0.125\n if ($scope.formValues.MemoryLimit >= 0) {\n var memoryLimit = (Math.round($scope.formValues.MemoryLimit * 8) / 8).toFixed(3);\n memoryLimit *= 1024 * 1024;\n config.HostConfig.Memory = memoryLimit;\n }\n\n // Memory Resevation - Round to 0.125\n if ($scope.formValues.MemoryReservation >= 0) {\n var memoryReservation = (Math.round($scope.formValues.MemoryReservation * 8) / 8).toFixed(3);\n memoryReservation *= 1024 * 1024;\n config.HostConfig.MemoryReservation = memoryReservation;\n }\n\n // CPU Limit\n if ($scope.formValues.CpuLimit >= 0) {\n config.HostConfig.NanoCpus = $scope.formValues.CpuLimit * 1000000000;\n }\n }\n\n function prepareLogDriver(config) {\n var logOpts = {};\n if ($scope.formValues.LogDriverName) {\n config.HostConfig.LogConfig = { Type: $scope.formValues.LogDriverName };\n if ($scope.formValues.LogDriverName !== 'none') {\n $scope.formValues.LogDriverOpts.forEach(function (opt) {\n if (opt.name) {\n logOpts[opt.name] = opt.value;\n }\n });\n if (Object.keys(logOpts).length !== 0 && logOpts.constructor === Object) {\n config.HostConfig.LogConfig.Config = logOpts;\n }\n }\n }\n }\n\n function prepareCapabilities(config) {\n var allowed = $scope.formValues.capabilities.filter(function (item) {\n return item.allowed === true;\n });\n var notAllowed = $scope.formValues.capabilities.filter(function (item) {\n return item.allowed === false;\n });\n\n var getCapName = function (item) {\n return item.capability;\n };\n config.HostConfig.CapAdd = allowed.map(getCapName);\n config.HostConfig.CapDrop = notAllowed.map(getCapName);\n }\n\n function prepareConfiguration() {\n var config = angular.copy($scope.config);\n prepareCmd(config);\n prepareEntrypoint(config);\n prepareNetworkConfig(config);\n prepareImageConfig(config);\n preparePortBindings(config);\n prepareConsole(config);\n prepareEnvironmentVariables(config);\n prepareVolumes(config);\n prepareLabels(config);\n prepareDevices(config);\n prepareResources(config);\n prepareLogDriver(config);\n prepareCapabilities(config);\n prepareSysctls(config);\n return config;\n }\n\n function loadFromContainerCmd() {\n if ($scope.config.Cmd) {\n $scope.config.Cmd = ContainerHelper.commandArrayToString($scope.config.Cmd);\n $scope.formValues.CmdMode = 'override';\n }\n }\n\n function loadFromContainerEntrypoint() {\n if (_.has($scope.config, 'Entrypoint')) {\n if ($scope.config.Entrypoint == null) {\n $scope.config.Entrypoint = '';\n }\n $scope.formValues.EntrypointMode = 'override';\n }\n }\n\n function loadFromContainerPortBindings() {\n const bindings = ContainerHelper.sortAndCombinePorts($scope.config.HostConfig.PortBindings);\n $scope.config.HostConfig.PortBindings = bindings;\n }\n\n function loadFromContainerVolumes(d) {\n for (var v in d.Mounts) {\n if ({}.hasOwnProperty.call(d.Mounts, v)) {\n var mount = d.Mounts[v];\n var volume = {\n type: mount.Type,\n name: mount.Name || mount.Source,\n containerPath: mount.Destination,\n readOnly: mount.RW === false,\n };\n $scope.formValues.Volumes.push(volume);\n }\n }\n }\n\n $scope.resetNetworkConfig = function () {\n $scope.config.NetworkingConfig = {\n EndpointsConfig: {},\n };\n };\n\n function loadFromContainerNetworkConfig(d) {\n $scope.config.NetworkingConfig = {\n EndpointsConfig: {},\n };\n var networkMode = d.HostConfig.NetworkMode;\n if (networkMode === 'default') {\n $scope.config.HostConfig.NetworkMode = 'bridge';\n if (!_.find($scope.availableNetworks, { Name: 'bridge' })) {\n $scope.config.HostConfig.NetworkMode = 'nat';\n }\n }\n if ($scope.config.HostConfig.NetworkMode.indexOf('container:') === 0) {\n var netContainer = $scope.config.HostConfig.NetworkMode.split(/^container:/)[1];\n $scope.config.HostConfig.NetworkMode = 'container';\n for (var c in $scope.runningContainers) {\n if ($scope.runningContainers[c].Id == netContainer) {\n $scope.formValues.NetworkContainer = $scope.runningContainers[c];\n }\n }\n }\n $scope.fromContainerMultipleNetworks = Object.keys(d.NetworkSettings.Networks).length >= 2;\n if (d.NetworkSettings.Networks[$scope.config.HostConfig.NetworkMode]) {\n if (d.NetworkSettings.Networks[$scope.config.HostConfig.NetworkMode].IPAMConfig) {\n if (d.NetworkSettings.Networks[$scope.config.HostConfig.NetworkMode].IPAMConfig.IPv4Address) {\n $scope.formValues.IPv4 = d.NetworkSettings.Networks[$scope.config.HostConfig.NetworkMode].IPAMConfig.IPv4Address;\n }\n if (d.NetworkSettings.Networks[$scope.config.HostConfig.NetworkMode].IPAMConfig.IPv6Address) {\n $scope.formValues.IPv6 = d.NetworkSettings.Networks[$scope.config.HostConfig.NetworkMode].IPAMConfig.IPv6Address;\n }\n }\n }\n $scope.config.NetworkingConfig.EndpointsConfig[$scope.config.HostConfig.NetworkMode] = d.NetworkSettings.Networks[$scope.config.HostConfig.NetworkMode];\n if (Object.keys(d.NetworkSettings.Networks).length > 1) {\n var firstNetwork = d.NetworkSettings.Networks[Object.keys(d.NetworkSettings.Networks)[0]];\n $scope.config.NetworkingConfig.EndpointsConfig[$scope.config.HostConfig.NetworkMode] = firstNetwork;\n $scope.extraNetworks = angular.copy(d.NetworkSettings.Networks);\n delete $scope.extraNetworks[Object.keys(d.NetworkSettings.Networks)[0]];\n }\n $scope.formValues.MacAddress = d.Config.MacAddress;\n\n if (d.HostConfig.Dns && d.HostConfig.Dns[0]) {\n $scope.formValues.DnsPrimary = d.HostConfig.Dns[0];\n if (d.HostConfig.Dns[1]) {\n $scope.formValues.DnsSecondary = d.HostConfig.Dns[1];\n }\n }\n\n // ExtraHosts\n if ($scope.config.HostConfig.ExtraHosts) {\n var extraHosts = $scope.config.HostConfig.ExtraHosts;\n for (var i = 0; i < extraHosts.length; i++) {\n var host = extraHosts[i];\n $scope.formValues.ExtraHosts.push({ value: host });\n }\n $scope.config.HostConfig.ExtraHosts = [];\n }\n }\n\n function loadFromContainerEnvironmentVariables() {\n $scope.formValues.Env = envVarsUtils.parseArrayOfStrings($scope.config.Env);\n }\n\n function loadFromContainerLabels() {\n for (var l in $scope.config.Labels) {\n if ({}.hasOwnProperty.call($scope.config.Labels, l)) {\n $scope.formValues.Labels.push({ name: l, value: $scope.config.Labels[l] });\n }\n }\n }\n\n function loadFromContainerConsole() {\n if ($scope.config.OpenStdin && $scope.config.Tty) {\n $scope.formValues.Console = 'both';\n } else if (!$scope.config.OpenStdin && $scope.config.Tty) {\n $scope.formValues.Console = 'tty';\n } else if ($scope.config.OpenStdin && !$scope.config.Tty) {\n $scope.formValues.Console = 'interactive';\n } else if (!$scope.config.OpenStdin && !$scope.config.Tty) {\n $scope.formValues.Console = 'none';\n }\n }\n\n function loadFromContainerDevices() {\n var path = [];\n for (var dev in $scope.config.HostConfig.Devices) {\n if ({}.hasOwnProperty.call($scope.config.HostConfig.Devices, dev)) {\n var device = $scope.config.HostConfig.Devices[dev];\n path.push({ pathOnHost: device.PathOnHost, pathInContainer: device.PathInContainer });\n }\n }\n $scope.config.HostConfig.Devices = path;\n }\n\n function loadFromContainerSysctls() {\n for (var s in $scope.config.HostConfig.Sysctls) {\n if ({}.hasOwnProperty.call($scope.config.HostConfig.Sysctls, s)) {\n $scope.formValues.Sysctls.push({ name: s, value: $scope.config.HostConfig.Sysctls[s] });\n }\n }\n }\n\n function loadFromContainerImageConfig() {\n RegistryService.retrievePorRegistryModelFromRepository($scope.config.Image)\n .then((model) => {\n $scope.formValues.RegistryModel = model;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrive registry');\n });\n }\n\n function loadFromContainerResources(d) {\n if (d.HostConfig.NanoCpus) {\n $scope.formValues.CpuLimit = d.HostConfig.NanoCpus / 1000000000;\n }\n if (d.HostConfig.Memory) {\n $scope.formValues.MemoryLimit = d.HostConfig.Memory / 1024 / 1024;\n }\n if (d.HostConfig.MemoryReservation) {\n $scope.formValues.MemoryReservation = d.HostConfig.MemoryReservation / 1024 / 1024;\n }\n }\n\n function loadFromContainerCapabilities(d) {\n if (d.HostConfig.CapAdd) {\n d.HostConfig.CapAdd.forEach(function (cap) {\n $scope.formValues.capabilities.push(new ContainerCapability(cap, true));\n });\n }\n if (d.HostConfig.CapDrop) {\n d.HostConfig.CapDrop.forEach(function (cap) {\n $scope.formValues.capabilities.push(new ContainerCapability(cap, false));\n });\n }\n\n function hasCapability(item) {\n return item.capability === cap.capability;\n }\n\n var capabilities = new ContainerCapabilities();\n for (var i = 0; i < capabilities.length; i++) {\n var cap = capabilities[i];\n if (!_.find($scope.formValues.capabilities, hasCapability)) {\n $scope.formValues.capabilities.push(cap);\n }\n }\n\n $scope.formValues.capabilities.sort(function (a, b) {\n return a.capability < b.capability ? -1 : 1;\n });\n }\n\n function loadFromContainerSpec() {\n // Get container\n Container.get({ id: $transition$.params().from })\n .$promise.then(function success(d) {\n var fromContainer = new ContainerDetailsViewModel(d);\n if (fromContainer.ResourceControl && fromContainer.ResourceControl.Public) {\n $scope.formValues.AccessControlData.AccessControlEnabled = false;\n }\n $scope.fromContainer = fromContainer;\n $scope.state.mode = 'duplicate';\n $scope.config = ContainerHelper.configFromContainer(fromContainer.Model);\n loadFromContainerCmd(d);\n loadFromContainerEntrypoint(d);\n loadFromContainerLogging(d);\n loadFromContainerPortBindings(d);\n loadFromContainerVolumes(d);\n loadFromContainerNetworkConfig(d);\n loadFromContainerEnvironmentVariables(d);\n loadFromContainerLabels(d);\n loadFromContainerConsole(d);\n loadFromContainerDevices(d);\n loadFromContainerImageConfig(d);\n loadFromContainerResources(d);\n loadFromContainerCapabilities(d);\n loadFromContainerSysctls(d);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve container');\n });\n }\n\n function loadFromContainerLogging(config) {\n var logConfig = config.HostConfig.LogConfig;\n $scope.formValues.LogDriverName = logConfig.Type;\n $scope.formValues.LogDriverOpts = _.map(logConfig.Config, function (value, name) {\n return {\n name: name,\n value: value,\n };\n });\n }\n\n async function initView() {\n var nodeName = $transition$.params().nodeName;\n $scope.formValues.NodeName = nodeName;\n HttpRequestHelper.setPortainerAgentTargetHeader(nodeName);\n\n $scope.isAdmin = Authentication.isAdmin();\n $scope.showDeviceMapping = await shouldShowDevices();\n $scope.showSysctls = await shouldShowSysctls();\n $scope.areContainerCapabilitiesEnabled = await checkIfContainerCapabilitiesEnabled();\n $scope.isAdminOrEndpointAdmin = Authentication.isAdmin();\n\n Volume.query(\n {},\n function (d) {\n $scope.availableVolumes = d.Volumes.sort((vol1, vol2) => {\n return vol1.Name.localeCompare(vol2.Name);\n });\n },\n function (e) {\n Notifications.error('Failure', e, 'Unable to retrieve volumes');\n }\n );\n\n var provider = $scope.applicationState.endpoint.mode.provider;\n var apiVersion = $scope.applicationState.endpoint.apiVersion;\n NetworkService.networks(provider === 'DOCKER_STANDALONE' || provider === 'DOCKER_SWARM_MODE', false, provider === 'DOCKER_SWARM_MODE' && apiVersion >= 1.25)\n .then(function success(networks) {\n networks.push({ Name: 'container' });\n $scope.availableNetworks = networks.sort((a, b) => a.Name.localeCompare(b.Name));\n\n if (_.find(networks, { Name: 'nat' })) {\n $scope.config.HostConfig.NetworkMode = 'nat';\n }\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve networks');\n });\n\n Container.query(\n {},\n function (d) {\n var containers = d;\n $scope.runningContainers = containers;\n if ($transition$.params().from) {\n loadFromContainerSpec();\n } else {\n $scope.fromContainer = {};\n $scope.formValues.capabilities = $scope.areContainerCapabilitiesEnabled ? new ContainerCapabilities() : [];\n }\n },\n function (e) {\n Notifications.error('Failure', e, 'Unable to retrieve running containers');\n }\n );\n\n SystemService.info()\n .then(function success(data) {\n $scope.availableRuntimes = data.Runtimes ? Object.keys(data.Runtimes) : [];\n $scope.state.sliderMaxCpu = 32;\n if (data.NCPU) {\n $scope.state.sliderMaxCpu = data.NCPU;\n }\n $scope.state.sliderMaxMemory = 32768;\n if (data.MemTotal) {\n $scope.state.sliderMaxMemory = Math.floor(data.MemTotal / 1000 / 1000);\n }\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve engine details');\n });\n\n $scope.allowBindMounts = $scope.isAdminOrEndpointAdmin || endpoint.SecuritySettings.allowBindMountsForRegularUsers;\n $scope.allowPrivilegedMode = endpoint.SecuritySettings.allowPrivilegedModeForRegularUsers;\n\n PluginService.loggingPlugins(apiVersion < 1.25).then(function success(loggingDrivers) {\n $scope.availableLoggingDrivers = loggingDrivers;\n });\n }\n\n function validateForm(accessControlData, isAdmin) {\n $scope.state.formValidationError = '';\n var error = '';\n error = FormValidator.validateAccessControl(accessControlData, isAdmin);\n\n if (error) {\n $scope.state.formValidationError = error;\n return false;\n }\n return true;\n }\n\n function create() {\n var oldContainer = null;\n HttpRequestHelper.setPortainerAgentTargetHeader($scope.formValues.NodeName);\n return findCurrentContainer().then(setOldContainer).then(confirmCreateContainer).then(startCreationProcess).catch(notifyOnError).finally(final);\n\n function final() {\n $scope.state.actionInProgress = false;\n }\n\n function setOldContainer(container) {\n oldContainer = container;\n return container;\n }\n\n function findCurrentContainer() {\n return Container.query({ all: 1, filters: { name: ['^/' + $scope.config.name + '$'] } })\n .$promise.then(function onQuerySuccess(containers) {\n if (!containers.length) {\n return;\n }\n return containers[0];\n })\n .catch(notifyOnError);\n\n function notifyOnError(err) {\n Notifications.error('Failure', err, 'Unable to retrieve containers');\n }\n }\n\n function startCreationProcess(confirmed) {\n if (!confirmed) {\n return $q.when();\n }\n if (!validateAccessControl()) {\n return $q.when();\n }\n $scope.state.actionInProgress = true;\n return pullImageIfNeeded()\n .then(stopAndRenameContainer)\n .then(createNewContainer)\n .then(applyResourceControl)\n .then(connectToExtraNetworks)\n .then(removeOldContainer)\n .then(onSuccess)\n .catch(onCreationProcessFail);\n }\n\n function onCreationProcessFail(error) {\n var deferred = $q.defer();\n removeNewContainer()\n .then(restoreOldContainerName)\n .then(function () {\n deferred.reject(error);\n })\n .catch(function (restoreError) {\n deferred.reject(restoreError);\n });\n return deferred.promise;\n }\n\n function removeNewContainer() {\n return findCurrentContainer().then(function onContainerLoaded(container) {\n if (container && (!oldContainer || container.Id !== oldContainer.Id)) {\n return ContainerService.remove(container, true);\n }\n });\n }\n\n function restoreOldContainerName() {\n if (!oldContainer) {\n return;\n }\n return ContainerService.renameContainer(oldContainer.Id, oldContainer.Names[0].substring(1));\n }\n\n function confirmCreateContainer(container) {\n if (!container) {\n return $q.when(true);\n }\n\n return showConfirmationModal();\n\n function showConfirmationModal() {\n var deferred = $q.defer();\n\n ModalService.confirm({\n title: 'Are you sure ?',\n message: 'A container with the same name already exists. Portainer can automatically remove it and re-create one. Do you want to replace it?',\n buttons: {\n confirm: {\n label: 'Replace',\n className: 'btn-danger',\n },\n },\n callback: function onConfirm(confirmed) {\n deferred.resolve(confirmed);\n },\n });\n\n return deferred.promise;\n }\n }\n\n function stopAndRenameContainer() {\n if (!oldContainer) {\n return $q.when();\n }\n return stopContainerIfNeeded(oldContainer).then(renameContainer);\n }\n\n function stopContainerIfNeeded(oldContainer) {\n if (oldContainer.State !== 'running') {\n return $q.when();\n }\n return ContainerService.stopContainer(oldContainer.Id);\n }\n\n function renameContainer() {\n return ContainerService.renameContainer(oldContainer.Id, oldContainer.Names[0].substring(1) + '-old');\n }\n\n function pullImageIfNeeded() {\n return $q.when($scope.formValues.alwaysPull && ImageService.pullImage($scope.formValues.RegistryModel, true));\n }\n\n function createNewContainer() {\n return $async(async () => {\n const config = prepareConfiguration();\n return await ContainerService.createAndStartContainer(config);\n });\n }\n\n function applyResourceControl(newContainer) {\n const userId = Authentication.getUserDetails().ID;\n const resourceControl = newContainer.Portainer.ResourceControl;\n const containerId = newContainer.Id;\n const accessControlData = $scope.formValues.AccessControlData;\n\n return ResourceControlService.applyResourceControl(userId, accessControlData, resourceControl).then(function onApplyResourceControlSuccess() {\n return containerId;\n });\n }\n\n function connectToExtraNetworks(newContainerId) {\n if (!$scope.extraNetworks) {\n return $q.when();\n }\n\n var connectionPromises = _.forOwn($scope.extraNetworks, function (network, networkName) {\n if (_.has(network, 'Aliases')) {\n var aliases = _.filter(network.Aliases, (o) => {\n return !_.startsWith($scope.fromContainer.Id, o);\n });\n }\n return NetworkService.connectContainer(networkName, newContainerId, aliases);\n });\n\n return $q.all(connectionPromises);\n }\n\n function removeOldContainer() {\n var deferred = $q.defer();\n\n if (!oldContainer) {\n deferred.resolve();\n return;\n }\n\n ContainerService.remove(oldContainer, true).then(notifyOnRemoval).catch(notifyOnRemoveError);\n\n return deferred.promise;\n\n function notifyOnRemoval() {\n Notifications.success('Container Removed', oldContainer.Id);\n deferred.resolve();\n }\n\n function notifyOnRemoveError(err) {\n deferred.reject({ msg: 'Unable to remove container', err: err });\n }\n }\n\n function notifyOnError(err) {\n Notifications.error('Failure', err, 'Unable to create container');\n }\n\n function validateAccessControl() {\n var accessControlData = $scope.formValues.AccessControlData;\n return validateForm(accessControlData, $scope.isAdmin);\n }\n\n function onSuccess() {\n Notifications.success('Container successfully created');\n $state.go('docker.containers', {}, { reload: true });\n }\n }\n\n async function shouldShowDevices() {\n return endpoint.SecuritySettings.allowDeviceMappingForRegularUsers || Authentication.isAdmin();\n }\n\n async function shouldShowSysctls() {\n return endpoint.SecuritySettings.allowSysctlSettingForRegularUsers || Authentication.isAdmin();\n }\n\n async function checkIfContainerCapabilitiesEnabled() {\n return endpoint.SecuritySettings.allowContainerCapabilitiesForRegularUsers || Authentication.isAdmin();\n }\n\n initView();\n },\n]);\n","import moment from 'moment';\nimport _ from 'lodash-es';\nimport { PorImageRegistryModel } from 'Docker/models/porImageRegistry';\n\nangular.module('portainer.docker').controller('ContainerController', [\n '$q',\n '$scope',\n '$state',\n '$transition$',\n '$filter',\n '$async',\n 'Commit',\n 'ContainerHelper',\n 'ContainerService',\n 'ImageHelper',\n 'NetworkService',\n 'Notifications',\n 'ModalService',\n 'ResourceControlService',\n 'RegistryService',\n 'ImageService',\n 'HttpRequestHelper',\n 'Authentication',\n 'StateManager',\n 'endpoint',\n function (\n $q,\n $scope,\n $state,\n $transition$,\n $filter,\n $async,\n Commit,\n ContainerHelper,\n ContainerService,\n ImageHelper,\n NetworkService,\n Notifications,\n ModalService,\n ResourceControlService,\n RegistryService,\n ImageService,\n HttpRequestHelper,\n Authentication,\n StateManager,\n endpoint\n ) {\n $scope.activityTime = 0;\n $scope.portBindings = [];\n $scope.displayRecreateButton = false;\n\n $scope.config = {\n RegistryModel: new PorImageRegistryModel(),\n commitInProgress: false,\n };\n\n $scope.state = {\n recreateContainerInProgress: false,\n joinNetworkInProgress: false,\n leaveNetworkInProgress: false,\n };\n\n $scope.updateRestartPolicy = updateRestartPolicy;\n\n var update = function () {\n var nodeName = $transition$.params().nodeName;\n HttpRequestHelper.setPortainerAgentTargetHeader(nodeName);\n $scope.nodeName = nodeName;\n\n ContainerService.container($transition$.params().id)\n .then(function success(data) {\n var container = data;\n $scope.container = container;\n $scope.container.edit = false;\n $scope.container.newContainerName = $filter('trimcontainername')(container.Name);\n\n if (container.State.Running) {\n $scope.activityTime = moment.duration(moment(container.State.StartedAt).utc().diff(moment().utc())).humanize();\n } else if (container.State.Status === 'created') {\n $scope.activityTime = moment.duration(moment(container.Created).utc().diff(moment().utc())).humanize();\n } else {\n $scope.activityTime = moment.duration(moment().utc().diff(moment(container.State.FinishedAt).utc())).humanize();\n }\n\n $scope.portBindings = [];\n if (container.NetworkSettings.Ports) {\n _.forEach(Object.keys(container.NetworkSettings.Ports), function (key) {\n if (container.NetworkSettings.Ports[key]) {\n _.forEach(container.NetworkSettings.Ports[key], (portMapping) => {\n const mapping = {};\n mapping.container = key;\n mapping.host = `${portMapping.HostIp}:${portMapping.HostPort}`;\n $scope.portBindings.push(mapping);\n });\n }\n });\n }\n\n $scope.container.Config.Env = _.sortBy($scope.container.Config.Env, _.toLower);\n const inSwarm = $scope.container.Config.Labels['com.docker.swarm.service.id'];\n const autoRemove = $scope.container.HostConfig.AutoRemove;\n const admin = Authentication.isAdmin();\n const {\n allowContainerCapabilitiesForRegularUsers,\n allowHostNamespaceForRegularUsers,\n allowDeviceMappingForRegularUsers,\n allowSysctlSettingForRegularUsers,\n allowBindMountsForRegularUsers,\n allowPrivilegedModeForRegularUsers,\n } = endpoint.SecuritySettings;\n\n const settingRestrictsRegularUsers =\n !allowContainerCapabilitiesForRegularUsers ||\n !allowBindMountsForRegularUsers ||\n !allowDeviceMappingForRegularUsers ||\n !allowSysctlSettingForRegularUsers ||\n !allowHostNamespaceForRegularUsers ||\n !allowPrivilegedModeForRegularUsers;\n\n $scope.displayRecreateButton = !inSwarm && !autoRemove && (admin || !settingRestrictsRegularUsers);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve container info');\n });\n };\n\n function executeContainerAction(id, action, successMessage, errorMessage) {\n action(id)\n .then(function success() {\n Notifications.success(successMessage, id);\n update();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, errorMessage);\n });\n }\n\n $scope.start = function () {\n var successMessage = 'Container successfully started';\n var errorMessage = 'Unable to start container';\n executeContainerAction($transition$.params().id, ContainerService.startContainer, successMessage, errorMessage);\n };\n\n $scope.stop = function () {\n var successMessage = 'Container successfully stopped';\n var errorMessage = 'Unable to stop container';\n executeContainerAction($transition$.params().id, ContainerService.stopContainer, successMessage, errorMessage);\n };\n\n $scope.kill = function () {\n var successMessage = 'Container successfully killed';\n var errorMessage = 'Unable to kill container';\n executeContainerAction($transition$.params().id, ContainerService.killContainer, successMessage, errorMessage);\n };\n\n $scope.pause = function () {\n var successMessage = 'Container successfully paused';\n var errorMessage = 'Unable to pause container';\n executeContainerAction($transition$.params().id, ContainerService.pauseContainer, successMessage, errorMessage);\n };\n\n $scope.unpause = function () {\n var successMessage = 'Container successfully resumed';\n var errorMessage = 'Unable to resume container';\n executeContainerAction($transition$.params().id, ContainerService.resumeContainer, successMessage, errorMessage);\n };\n\n $scope.restart = function () {\n var successMessage = 'Container successfully restarted';\n var errorMessage = 'Unable to restart container';\n executeContainerAction($transition$.params().id, ContainerService.restartContainer, successMessage, errorMessage);\n };\n\n $scope.renameContainer = function () {\n var container = $scope.container;\n ContainerService.renameContainer($transition$.params().id, container.newContainerName)\n .then(function success() {\n container.Name = container.newContainerName;\n Notifications.success('Container successfully renamed', container.Name);\n })\n .catch(function error(err) {\n container.newContainerName = container.Name;\n Notifications.error('Failure', err, 'Unable to rename container');\n })\n .finally(function final() {\n $scope.container.edit = false;\n });\n };\n\n $scope.containerLeaveNetwork = function containerLeaveNetwork(container, networkId) {\n $scope.state.leaveNetworkInProgress = true;\n NetworkService.disconnectContainer(networkId, container.Id, false)\n .then(function success() {\n Notifications.success('Container left network', container.Id);\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to disconnect container from network');\n })\n .finally(function final() {\n $scope.state.leaveNetworkInProgress = false;\n });\n };\n\n $scope.containerJoinNetwork = function containerJoinNetwork(container, networkId) {\n $scope.state.joinNetworkInProgress = true;\n NetworkService.connectContainer(networkId, container.Id)\n .then(function success() {\n Notifications.success('Container joined network', container.Id);\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to connect container to network');\n })\n .finally(function final() {\n $scope.state.joinNetworkInProgress = false;\n });\n };\n\n async function commitContainerAsync() {\n $scope.config.commitInProgress = true;\n const registryModel = $scope.config.RegistryModel;\n const imageConfig = ImageHelper.createImageConfigForContainer(registryModel);\n try {\n await Commit.commitContainer({ id: $transition$.params().id, repo: imageConfig.fromImage }).$promise;\n Notifications.success('Image created', $transition$.params().id);\n $state.reload();\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to create image');\n $scope.config.commitInProgress = false;\n }\n }\n\n $scope.commit = function () {\n return $async(commitContainerAsync);\n };\n\n $scope.confirmRemove = function () {\n var title = 'You are about to remove a container.';\n if ($scope.container.State.Running) {\n title = 'You are about to remove a running container.';\n }\n ModalService.confirmContainerDeletion(title, function (result) {\n if (!result) {\n return;\n }\n var cleanAssociatedVolumes = false;\n if (result[0]) {\n cleanAssociatedVolumes = true;\n }\n removeContainer(cleanAssociatedVolumes);\n });\n };\n\n function removeContainer(cleanAssociatedVolumes) {\n ContainerService.remove($scope.container, cleanAssociatedVolumes)\n .then(function success() {\n Notifications.success('Container successfully removed');\n $state.go('docker.containers', {}, { reload: true });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove container');\n });\n }\n\n function recreateContainer(pullImage) {\n var container = $scope.container;\n var config = ContainerHelper.configFromContainer(container.Model);\n $scope.state.recreateContainerInProgress = true;\n var isRunning = container.State.Running;\n\n return pullImageIfNeeded()\n .then(stopContainerIfNeeded)\n .then(renameContainer)\n .then(setMainNetworkAndCreateContainer)\n .then(connectContainerToOtherNetworks)\n .then(startContainerIfNeeded)\n .then(createResourceControl)\n .then(deleteOldContainer)\n .then(notifyAndChangeView)\n .catch(notifyOnError);\n\n function stopContainerIfNeeded() {\n if (!isRunning) {\n return $q.when();\n }\n return ContainerService.stopContainer(container.Id);\n }\n\n function renameContainer() {\n return ContainerService.renameContainer(container.Id, container.Name + '-old');\n }\n\n function pullImageIfNeeded() {\n if (!pullImage) {\n return $q.when();\n }\n return RegistryService.retrievePorRegistryModelFromRepository(container.Config.Image).then(function pullImage(registryModel) {\n return ImageService.pullImage(registryModel, true);\n });\n }\n\n function setMainNetworkAndCreateContainer() {\n var networks = config.NetworkingConfig.EndpointsConfig;\n var networksNames = Object.keys(networks);\n if (networksNames.length > 1) {\n config.NetworkingConfig.EndpointsConfig = {};\n config.NetworkingConfig.EndpointsConfig[networksNames[0]] = networks[0];\n }\n return $q.all([ContainerService.createContainer(config), networks]);\n }\n\n function connectContainerToOtherNetworks(createContainerData) {\n var newContainer = createContainerData[0];\n var networks = createContainerData[1];\n var networksNames = Object.keys(networks);\n var connectionPromises = networksNames.map(function connectToNetwork(name) {\n NetworkService.connectContainer(name, newContainer.Id);\n });\n return $q.all(connectionPromises).then(function onConnectToNetworkSuccess() {\n return newContainer;\n });\n }\n\n function deleteOldContainer(newContainer) {\n return ContainerService.remove(container, true).then(function onRemoveSuccess() {\n return newContainer;\n });\n }\n\n function startContainerIfNeeded(newContainer) {\n if (!isRunning) {\n return $q.when(newContainer);\n }\n return ContainerService.startContainer(newContainer.Id).then(function onStartSuccess() {\n return newContainer;\n });\n }\n\n function createResourceControl(newContainer) {\n const userId = Authentication.getUserDetails().ID;\n const oldResourceControl = container.ResourceControl;\n const newResourceControl = newContainer.Portainer.ResourceControl;\n return ResourceControlService.duplicateResourceControl(userId, oldResourceControl, newResourceControl);\n }\n\n function notifyAndChangeView() {\n Notifications.success('Container successfully re-created');\n $state.go('docker.containers', {}, { reload: true });\n }\n\n function notifyOnError(err) {\n Notifications.error('Failure', err, 'Unable to re-create container');\n $scope.state.recreateContainerInProgress = false;\n }\n }\n\n $scope.recreate = function () {\n ModalService.confirmContainerRecreation(function (result) {\n if (!result) {\n return;\n }\n var pullImage = false;\n if (result[0]) {\n pullImage = true;\n }\n recreateContainer(pullImage);\n });\n };\n\n function updateRestartPolicy(restartPolicy, maximumRetryCount) {\n maximumRetryCount = restartPolicy === 'on-failure' ? maximumRetryCount : undefined;\n\n return ContainerService.updateRestartPolicy($scope.container.Id, restartPolicy, maximumRetryCount).then(onUpdateSuccess).catch(notifyOnError);\n\n function onUpdateSuccess() {\n $scope.container.HostConfig.RestartPolicy = {\n Name: restartPolicy,\n MaximumRetryCount: maximumRetryCount,\n };\n Notifications.success('Restart policy updated');\n }\n\n function notifyOnError(err) {\n Notifications.error('Failure', err, 'Unable to update restart policy');\n return $q.reject(err);\n }\n }\n\n var provider = $scope.applicationState.endpoint.mode.provider;\n var apiVersion = $scope.applicationState.endpoint.apiVersion;\n NetworkService.networks(provider === 'DOCKER_STANDALONE' || provider === 'DOCKER_SWARM_MODE', false, provider === 'DOCKER_SWARM_MODE' && apiVersion >= 1.25)\n .then(function success(data) {\n var networks = data;\n $scope.availableNetworks = networks;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve networks');\n });\n\n update();\n },\n]);\n","angular.module('portainer.docker').controller('ContainerInspectController', [\n '$scope',\n '$transition$',\n 'Notifications',\n 'ContainerService',\n 'HttpRequestHelper',\n function ($scope, $transition$, Notifications, ContainerService, HttpRequestHelper) {\n $scope.state = {\n DisplayTextView: false,\n };\n $scope.containerInfo = {};\n\n function initView() {\n HttpRequestHelper.setPortainerAgentTargetHeader($transition$.params().nodeName);\n ContainerService.inspect($transition$.params().id)\n .then(function success(d) {\n $scope.containerInfo = d;\n })\n .catch(function error(e) {\n Notifications.error('Failure', e, 'Unable to inspect container');\n });\n }\n\n initView();\n },\n]);\n","import moment from 'moment';\n\nangular.module('portainer.docker').controller('ContainerLogsController', [\n '$scope',\n '$transition$',\n '$interval',\n 'ContainerService',\n 'Notifications',\n 'HttpRequestHelper',\n function ($scope, $transition$, $interval, ContainerService, Notifications, HttpRequestHelper) {\n $scope.state = {\n refreshRate: 3,\n lineCount: 100,\n sinceTimestamp: '',\n displayTimestamps: false,\n };\n\n $scope.changeLogCollection = function (logCollectionStatus) {\n if (!logCollectionStatus) {\n stopRepeater();\n } else {\n setUpdateRepeater(!$scope.container.Config.Tty);\n }\n };\n\n $scope.$on('$destroy', function () {\n stopRepeater();\n });\n\n function stopRepeater() {\n var repeater = $scope.repeater;\n if (angular.isDefined(repeater)) {\n $interval.cancel(repeater);\n repeater = null;\n }\n }\n\n function setUpdateRepeater(skipHeaders) {\n var refreshRate = $scope.state.refreshRate;\n $scope.repeater = $interval(function () {\n ContainerService.logs(\n $transition$.params().id,\n 1,\n 1,\n $scope.state.displayTimestamps ? 1 : 0,\n moment($scope.state.sinceTimestamp).unix(),\n $scope.state.lineCount,\n skipHeaders\n )\n .then(function success(data) {\n $scope.logs = data;\n })\n .catch(function error(err) {\n stopRepeater();\n Notifications.error('Failure', err, 'Unable to retrieve container logs');\n });\n }, refreshRate * 1000);\n }\n\n function startLogPolling(skipHeaders) {\n ContainerService.logs($transition$.params().id, 1, 1, $scope.state.displayTimestamps ? 1 : 0, moment($scope.state.sinceTimestamp).unix(), $scope.state.lineCount, skipHeaders)\n .then(function success(data) {\n $scope.logs = data;\n setUpdateRepeater(skipHeaders);\n })\n .catch(function error(err) {\n stopRepeater();\n Notifications.error('Failure', err, 'Unable to retrieve container logs');\n });\n }\n\n function initView() {\n HttpRequestHelper.setPortainerAgentTargetHeader($transition$.params().nodeName);\n ContainerService.container($transition$.params().id)\n .then(function success(data) {\n var container = data;\n $scope.container = container;\n startLogPolling(!container.Config.Tty);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve container information');\n });\n }\n\n initView();\n },\n]);\n","import moment from 'moment';\n\nangular.module('portainer.docker').controller('ContainerStatsController', [\n '$q',\n '$scope',\n '$transition$',\n '$document',\n '$interval',\n 'ContainerService',\n 'ChartService',\n 'Notifications',\n 'HttpRequestHelper',\n function ($q, $scope, $transition$, $document, $interval, ContainerService, ChartService, Notifications, HttpRequestHelper) {\n $scope.state = {\n refreshRate: '5',\n networkStatsUnavailable: false,\n ioStatsUnavailable: false,\n };\n\n $scope.$on('$destroy', function () {\n stopRepeater();\n });\n\n function stopRepeater() {\n var repeater = $scope.repeater;\n if (angular.isDefined(repeater)) {\n $interval.cancel(repeater);\n repeater = null;\n }\n }\n\n function updateNetworkChart(stats, chart) {\n if (stats.Networks.length > 0) {\n var rx = stats.Networks[0].rx_bytes;\n var tx = stats.Networks[0].tx_bytes;\n var label = moment(stats.read).format('HH:mm:ss');\n\n ChartService.UpdateNetworkChart(label, rx, tx, chart);\n }\n }\n\n function updateMemoryChart(stats, chart) {\n var label = moment(stats.read).format('HH:mm:ss');\n\n ChartService.UpdateMemoryChart(label, stats.MemoryUsage, stats.MemoryCache, chart);\n }\n\n function updateIOChart(stats, chart) {\n var label = moment(stats.read).format('HH:mm:ss');\n if (stats.noIOData !== true) {\n ChartService.UpdateIOChart(label, stats.BytesRead, stats.BytesWrite, chart);\n }\n }\n\n function updateCPUChart(stats, chart) {\n var label = moment(stats.read).format('HH:mm:ss');\n var value = stats.isWindows ? calculateCPUPercentWindows(stats) : calculateCPUPercentUnix(stats);\n\n ChartService.UpdateCPUChart(label, value, chart);\n }\n\n function calculateCPUPercentUnix(stats) {\n var cpuPercent = 0.0;\n var cpuDelta = stats.CurrentCPUTotalUsage - stats.PreviousCPUTotalUsage;\n var systemDelta = stats.CurrentCPUSystemUsage - stats.PreviousCPUSystemUsage;\n\n if (systemDelta > 0.0 && cpuDelta > 0.0) {\n cpuPercent = (cpuDelta / systemDelta) * stats.CPUCores * 100.0;\n }\n\n return cpuPercent;\n }\n\n function calculateCPUPercentWindows(stats) {\n var possIntervals =\n stats.NumProcs * parseFloat(moment(stats.read, 'YYYY-MM-DDTHH:mm:ss.SSSSSSSSSZ').valueOf() - moment(stats.preread, 'YYYY-MM-DDTHH:mm:ss.SSSSSSSSSZ').valueOf());\n var windowsCpuUsage = 0.0;\n if (possIntervals > 0) {\n windowsCpuUsage = parseFloat(stats.CurrentCPUTotalUsage - stats.PreviousCPUTotalUsage) / parseFloat(possIntervals * 100);\n }\n return windowsCpuUsage;\n }\n\n $scope.changeUpdateRepeater = function () {\n var networkChart = $scope.networkChart;\n var cpuChart = $scope.cpuChart;\n var memoryChart = $scope.memoryChart;\n var ioChart = $scope.ioChart;\n\n stopRepeater();\n setUpdateRepeater(networkChart, cpuChart, memoryChart, ioChart);\n $('#refreshRateChange').show();\n $('#refreshRateChange').fadeOut(1500);\n };\n\n function startChartUpdate(networkChart, cpuChart, memoryChart, ioChart) {\n $q.all({\n stats: ContainerService.containerStats($transition$.params().id),\n top: ContainerService.containerTop($transition$.params().id),\n })\n .then(function success(data) {\n var stats = data.stats;\n $scope.processInfo = data.top;\n if (stats.Networks.length === 0) {\n $scope.state.networkStatsUnavailable = true;\n }\n if (stats.noIOData === true) {\n $scope.state.ioStatsUnavailable = true;\n }\n updateNetworkChart(stats, networkChart);\n updateMemoryChart(stats, memoryChart);\n updateCPUChart(stats, cpuChart);\n updateIOChart(stats, ioChart);\n setUpdateRepeater(networkChart, cpuChart, memoryChart, ioChart);\n })\n .catch(function error(err) {\n stopRepeater();\n Notifications.error('Failure', err, 'Unable to retrieve container statistics');\n });\n }\n\n function setUpdateRepeater(networkChart, cpuChart, memoryChart, ioChart) {\n var refreshRate = $scope.state.refreshRate;\n $scope.repeater = $interval(function () {\n $q.all({\n stats: ContainerService.containerStats($transition$.params().id),\n top: ContainerService.containerTop($transition$.params().id),\n })\n .then(function success(data) {\n var stats = data.stats;\n $scope.processInfo = data.top;\n updateNetworkChart(stats, networkChart);\n updateMemoryChart(stats, memoryChart);\n updateCPUChart(stats, cpuChart);\n updateIOChart(stats, ioChart);\n })\n .catch(function error(err) {\n stopRepeater();\n Notifications.error('Failure', err, 'Unable to retrieve container statistics');\n });\n }, refreshRate * 1000);\n }\n\n function initCharts() {\n var networkChartCtx = $('#networkChart');\n var networkChart = ChartService.CreateNetworkChart(networkChartCtx);\n $scope.networkChart = networkChart;\n\n var cpuChartCtx = $('#cpuChart');\n var cpuChart = ChartService.CreateCPUChart(cpuChartCtx);\n $scope.cpuChart = cpuChart;\n\n var memoryChartCtx = $('#memoryChart');\n var memoryChart = ChartService.CreateMemoryChart(memoryChartCtx);\n $scope.memoryChart = memoryChart;\n\n var ioChartCtx = $('#ioChart');\n var ioChart = ChartService.CreateIOChart(ioChartCtx);\n $scope.ioChart = ioChart;\n\n startChartUpdate(networkChart, cpuChart, memoryChart, ioChart);\n }\n\n function initView() {\n HttpRequestHelper.setPortainerAgentTargetHeader($transition$.params().nodeName);\n ContainerService.container($transition$.params().id)\n .then(function success(data) {\n $scope.container = data;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve container information');\n });\n\n $document.ready(function () {\n initCharts();\n });\n }\n\n initView();\n },\n]);\n","import angular from 'angular';\nimport _ from 'lodash';\n\nangular.module('portainer.docker').controller('DashboardController', [\n '$scope',\n '$q',\n 'Authentication',\n 'ContainerService',\n 'ImageService',\n 'NetworkService',\n 'VolumeService',\n 'SystemService',\n 'ServiceService',\n 'StackService',\n 'EndpointService',\n 'Notifications',\n 'EndpointProvider',\n 'StateManager',\n 'TagService',\n 'endpoint',\n function (\n $scope,\n $q,\n Authentication,\n ContainerService,\n ImageService,\n NetworkService,\n VolumeService,\n SystemService,\n ServiceService,\n StackService,\n EndpointService,\n Notifications,\n EndpointProvider,\n StateManager,\n TagService,\n endpoint\n ) {\n $scope.dismissInformationPanel = function (id) {\n StateManager.dismissInformationPanel(id);\n };\n\n $scope.offlineMode = false;\n $scope.showStacks = false;\n\n async function initView() {\n const endpointMode = $scope.applicationState.endpoint.mode;\n const endpointId = EndpointProvider.endpointID();\n $scope.endpointId = endpointId;\n\n $scope.showStacks = await shouldShowStacks();\n\n $q.all({\n containers: ContainerService.containers(1),\n images: ImageService.images(false),\n volumes: VolumeService.volumes(),\n networks: NetworkService.networks(true, true, true),\n services: endpointMode.provider === 'DOCKER_SWARM_MODE' && endpointMode.role === 'MANAGER' ? ServiceService.services() : [],\n stacks: StackService.stacks(true, endpointMode.provider === 'DOCKER_SWARM_MODE' && endpointMode.role === 'MANAGER', endpointId),\n info: SystemService.info(),\n endpoint: EndpointService.endpoint(endpointId),\n tags: TagService.tags(),\n })\n .then(function success(data) {\n $scope.containers = data.containers;\n $scope.images = data.images;\n $scope.volumeCount = data.volumes.length;\n $scope.networkCount = data.networks.length;\n $scope.serviceCount = data.services.length;\n $scope.stackCount = data.stacks.length;\n $scope.info = data.info;\n $scope.endpoint = data.endpoint;\n $scope.endpointTags = $scope.endpoint.TagIds.length\n ? _.join(\n _.filter(\n _.map($scope.endpoint.TagIds, (id) => {\n const tag = data.tags.find((tag) => tag.Id === id);\n return tag ? tag.Name : '';\n }),\n Boolean\n ),\n ', '\n )\n : '-';\n $scope.offlineMode = EndpointProvider.offlineMode();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to load dashboard data');\n });\n }\n\n async function shouldShowStacks() {\n const isAdmin = Authentication.isAdmin();\n\n return isAdmin || endpoint.SecuritySettings.allowStackManagementForRegularUsers;\n }\n\n initView();\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./docker-features-configuration.html');\n\nimport angular from 'angular';\n\nimport controller from './docker-features-configuration.controller';\n\nangular.module('portainer.docker').component('dockerFeaturesConfigurationView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n endpoint: '<',\n },\n});\n","var path = 'app/docker/views/docker-features-configuration/docker-features-configuration.html';\nvar html = \"\\n \\n Docker configuration\\n\\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n Host and Filesystem\\n
    \\n
    \\n \\n \\n These features are only available for an Agent enabled endpoints.\\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n Docker Security Settings\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n \\n Note: The recreate/duplicate/edit feature is currently disabled (for non-admin users) by one or more security settings.\\n \\n
    \\n \\n\\n \\n
    \\n Actions\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import moment from 'moment';\n\nangular.module('portainer.docker').controller('EventsController', [\n '$scope',\n 'Notifications',\n 'SystemService',\n function ($scope, Notifications, SystemService) {\n function initView() {\n var from = moment().subtract(24, 'hour').unix();\n var to = moment().unix();\n\n SystemService.events(from, to)\n .then(function success(data) {\n $scope.events = data;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to load events');\n });\n }\n\n initView();\n },\n]);\n","angular.module('portainer.docker').controller('HostBrowserViewController', [\n 'SystemService',\n 'Notifications',\n function HostBrowserViewController(SystemService, Notifications) {\n var ctrl = this;\n ctrl.$onInit = $onInit;\n\n function $onInit() {\n SystemService.info()\n .then(function onInfoLoaded(host) {\n ctrl.host = host;\n })\n .catch(function onError(err) {\n Notifications.error('Unable to retrieve host information', err);\n });\n }\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./host-browser-view.html');\n\nangular.module('portainer.docker').component('hostBrowserView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'HostBrowserViewController',\n});\n","var path = 'app/docker/views/host/host-browser-view/host-browser-view.html';\nvar html = \"\\n \\n \\n Host > {{ $ctrl.host.Name }} > browse\\n \\n\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.docker').controller('HostViewController', [\n '$q',\n 'SystemService',\n 'Notifications',\n 'StateManager',\n 'AgentService',\n 'ContainerService',\n 'Authentication',\n 'EndpointProvider',\n function HostViewController($q, SystemService, Notifications, StateManager, AgentService, ContainerService, Authentication, EndpointProvider) {\n var ctrl = this;\n\n this.$onInit = initView;\n\n ctrl.state = {\n isAgent: false,\n isAdmin: false,\n offlineMode: false,\n };\n\n this.engineDetails = {};\n this.hostDetails = {};\n this.devices = null;\n this.disks = null;\n\n function initView() {\n var applicationState = StateManager.getState();\n ctrl.state.isAgent = applicationState.endpoint.mode.agentProxy;\n ctrl.state.isAdmin = Authentication.isAdmin();\n var agentApiVersion = applicationState.endpoint.agentApiVersion;\n ctrl.state.agentApiVersion = agentApiVersion;\n ctrl.state.enableHostManagementFeatures = ctrl.endpoint.SecuritySettings.enableHostManagementFeatures;\n\n $q.all({\n version: SystemService.version(),\n info: SystemService.info(),\n jobs: ctrl.state.isAdmin ? ContainerService.containers(true, { label: ['io.portainer.job.endpoint'] }) : [],\n })\n .then(function success(data) {\n ctrl.engineDetails = buildEngineDetails(data);\n ctrl.hostDetails = buildHostDetails(data.info);\n ctrl.state.offlineMode = EndpointProvider.offlineMode();\n ctrl.jobs = data.jobs;\n\n if (ctrl.state.isAgent && agentApiVersion > 1) {\n return AgentService.hostInfo(data.info.Hostname).then(function onHostInfoLoad(agentHostInfo) {\n ctrl.devices = agentHostInfo.PCIDevices;\n ctrl.disks = agentHostInfo.PhysicalDisks;\n });\n }\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve engine details');\n });\n }\n\n function buildEngineDetails(data) {\n var versionDetails = data.version;\n var info = data.info;\n return {\n releaseVersion: versionDetails.Version,\n apiVersion: versionDetails.ApiVersion,\n rootDirectory: info.DockerRootDir,\n storageDriver: info.Driver,\n loggingDriver: info.LoggingDriver,\n volumePlugins: info.Plugins.Volume,\n networkPlugins: info.Plugins.Network,\n };\n }\n\n function buildHostDetails(info) {\n return {\n os: {\n arch: info.Architecture,\n type: info.OSType,\n name: info.OperatingSystem,\n },\n name: info.Name,\n kernelVersion: info.KernelVersion,\n totalCPU: info.NCPU,\n totalMemory: info.MemTotal,\n };\n }\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./host-view.html');\n\nangular.module('portainer.docker').component('hostView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'HostViewController',\n bindings: {\n endpoint: '<',\n },\n});\n","var path = 'app/docker/views/host/host-view.html';\nvar html = \"\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.docker').controller('BuildImageController', BuildImageController);\n\nfunction BuildImageController($scope, $async, $window, ModalService, BuildService, Notifications, HttpRequestHelper) {\n $scope.state = {\n BuildType: 'editor',\n actionInProgress: false,\n activeTab: 0,\n isEditorDirty: false,\n };\n\n $scope.formValues = {\n ImageNames: [{ Name: '' }],\n UploadFile: null,\n DockerFileContent: '',\n URL: '',\n Path: 'Dockerfile',\n NodeName: null,\n };\n\n $window.onbeforeunload = () => {\n if ($scope.state.BuildType === 'editor' && $scope.formValues.DockerFileContent && $scope.state.isEditorDirty) {\n return '';\n }\n };\n\n $scope.addImageName = function () {\n $scope.formValues.ImageNames.push({ Name: '' });\n };\n\n $scope.removeImageName = function (index) {\n $scope.formValues.ImageNames.splice(index, 1);\n };\n\n function buildImageBasedOnBuildType(method, names) {\n var buildType = $scope.state.BuildType;\n var dockerfilePath = $scope.formValues.Path;\n\n if (buildType === 'upload') {\n var file = $scope.formValues.UploadFile;\n return BuildService.buildImageFromUpload(names, file, dockerfilePath);\n } else if (buildType === 'url') {\n var URL = $scope.formValues.URL;\n return BuildService.buildImageFromURL(names, URL, dockerfilePath);\n } else {\n var dockerfileContent = $scope.formValues.DockerFileContent;\n return BuildService.buildImageFromDockerfileContent(names, dockerfileContent);\n }\n }\n\n $scope.buildImage = buildImage;\n\n async function buildImage() {\n return $async(async () => {\n var buildType = $scope.state.BuildType;\n\n if (buildType === 'editor' && $scope.formValues.DockerFileContent === '') {\n $scope.state.formValidationError = 'Dockerfile content must not be empty';\n return;\n }\n\n $scope.state.actionInProgress = true;\n\n var imageNames = $scope.formValues.ImageNames.filter(function filterNull(x) {\n return x.Name;\n }).map(function getNames(x) {\n return x.Name;\n });\n\n var nodeName = $scope.formValues.NodeName;\n HttpRequestHelper.setPortainerAgentTargetHeader(nodeName);\n\n try {\n const data = await buildImageBasedOnBuildType(buildType, imageNames);\n $scope.buildLogs = data.buildLogs;\n $scope.state.activeTab = 1;\n if (data.hasError) {\n Notifications.error('An error occurred during build', { msg: 'Please check build logs output' });\n } else {\n Notifications.success('Image successfully built');\n $scope.state.isEditorDirty = false;\n }\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to build image');\n } finally {\n $scope.state.actionInProgress = false;\n }\n });\n }\n\n $scope.validImageNames = function () {\n for (var i = 0; i < $scope.formValues.ImageNames.length; i++) {\n var item = $scope.formValues.ImageNames[i];\n if (item.Name !== '') {\n return true;\n }\n }\n return false;\n };\n\n $scope.editorUpdate = function (cm) {\n $scope.formValues.DockerFileContent = cm.getValue();\n $scope.state.isEditorDirty = true;\n };\n\n this.uiCanExit = async function () {\n if ($scope.state.BuildType === 'editor' && $scope.formValues.DockerFileContent && $scope.state.isEditorDirty) {\n return ModalService.confirmWebEditorDiscard();\n }\n };\n}\n","import _ from 'lodash-es';\nimport { PorImageRegistryModel } from 'Docker/models/porImageRegistry';\n\nangular.module('portainer.docker').controller('ImageController', [\n '$q',\n '$scope',\n '$transition$',\n '$state',\n '$timeout',\n 'ImageService',\n 'ImageHelper',\n 'RegistryService',\n 'Notifications',\n 'HttpRequestHelper',\n 'ModalService',\n 'FileSaver',\n 'Blob',\n function ($q, $scope, $transition$, $state, $timeout, ImageService, ImageHelper, RegistryService, Notifications, HttpRequestHelper, ModalService, FileSaver, Blob) {\n $scope.formValues = {\n RegistryModel: new PorImageRegistryModel(),\n };\n\n $scope.state = {\n exportInProgress: false,\n };\n\n $scope.sortType = 'Order';\n $scope.sortReverse = false;\n\n $scope.order = function (sortType) {\n $scope.sortReverse = $scope.sortType === sortType ? !$scope.sortReverse : false;\n $scope.sortType = sortType;\n };\n\n $scope.toggleLayerCommand = function (layerId) {\n $('#layer-command-expander' + layerId + ' span').toggleClass('glyphicon-plus-sign glyphicon-minus-sign');\n $('#layer-command-' + layerId + '-short').toggle();\n $('#layer-command-' + layerId + '-full').toggle();\n };\n\n $scope.tagImage = function () {\n const registryModel = $scope.formValues.RegistryModel;\n\n const image = ImageHelper.createImageConfigForContainer(registryModel);\n\n ImageService.tagImage($transition$.params().id, image.fromImage)\n .then(function success() {\n Notifications.success('Image successfully tagged');\n $state.go('docker.images.image', { id: $transition$.params().id }, { reload: true });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to tag image');\n });\n };\n\n $scope.pushTag = function (repository) {\n $('#uploadResourceHint').show();\n RegistryService.retrievePorRegistryModelFromRepository(repository)\n .then(function success(registryModel) {\n return ImageService.pushImage(registryModel);\n })\n .then(function success() {\n Notifications.success('Image successfully pushed', repository);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to push image to repository');\n })\n .finally(function final() {\n $('#uploadResourceHint').hide();\n });\n };\n\n $scope.pullTag = function (repository) {\n $('#downloadResourceHint').show();\n RegistryService.retrievePorRegistryModelFromRepository(repository)\n .then(function success(registryModel) {\n return ImageService.pullImage(registryModel, false);\n })\n .then(function success() {\n Notifications.success('Image successfully pulled', repository);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to pull image');\n })\n .finally(function final() {\n $('#downloadResourceHint').hide();\n });\n };\n\n $scope.removeTag = function (repository) {\n ImageService.deleteImage(repository, false)\n .then(function success() {\n if ($scope.image.RepoTags.length === 1) {\n Notifications.success('Image successfully deleted', repository);\n $state.go('docker.images', {}, { reload: true });\n } else {\n Notifications.success('Tag successfully deleted', repository);\n $state.go('docker.images.image', { id: $transition$.params().id }, { reload: true });\n }\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove image');\n });\n };\n\n $scope.removeImage = function (id) {\n ImageService.deleteImage(id, false)\n .then(function success() {\n Notifications.success('Image successfully deleted', id);\n $state.go('docker.images', {}, { reload: true });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove image');\n });\n };\n\n function exportImage(image) {\n HttpRequestHelper.setPortainerAgentTargetHeader(image.NodeName);\n $scope.state.exportInProgress = true;\n ImageService.downloadImages([image])\n .then(function success(data) {\n var downloadData = new Blob([data.file], { type: 'application/x-tar' });\n FileSaver.saveAs(downloadData, 'images.tar');\n Notifications.success('Image successfully downloaded');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to download image');\n })\n .finally(function final() {\n $scope.state.exportInProgress = false;\n });\n }\n\n $scope.exportImage = function (image) {\n if (image.RepoTags.length === 0 || _.includes(image.RepoTags, '')) {\n Notifications.warning('', 'Cannot download a untagged image');\n return;\n }\n\n ModalService.confirmImageExport(function (confirmed) {\n if (!confirmed) {\n return;\n }\n exportImage(image);\n });\n };\n\n function initView() {\n HttpRequestHelper.setPortainerAgentTargetHeader($transition$.params().nodeName);\n $q.all({\n image: ImageService.image($transition$.params().id),\n history: ImageService.history($transition$.params().id),\n })\n .then(function success(data) {\n $scope.image = data.image;\n $scope.history = data.history;\n $scope.image.Env = _.sortBy($scope.image.Env, _.toLower);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve image details');\n $state.go('docker.images');\n });\n }\n\n initView();\n },\n]);\n","import _ from 'lodash-es';\nimport { PorImageRegistryModel } from 'Docker/models/porImageRegistry';\n\nangular.module('portainer.docker').controller('ImagesController', [\n '$scope',\n '$state',\n 'Authentication',\n 'ImageService',\n 'Notifications',\n 'ModalService',\n 'HttpRequestHelper',\n 'FileSaver',\n 'Blob',\n 'EndpointProvider',\n 'endpoint',\n function ($scope, $state, Authentication, ImageService, Notifications, ModalService, HttpRequestHelper, FileSaver, Blob, EndpointProvider, endpoint) {\n $scope.endpoint = endpoint;\n $scope.isAdmin = Authentication.isAdmin();\n\n $scope.state = {\n actionInProgress: false,\n exportInProgress: false,\n pullRateValid: false,\n };\n\n $scope.formValues = {\n RegistryModel: new PorImageRegistryModel(),\n NodeName: null,\n };\n\n $scope.pullImage = function () {\n const registryModel = $scope.formValues.RegistryModel;\n\n var nodeName = $scope.formValues.NodeName;\n HttpRequestHelper.setPortainerAgentTargetHeader(nodeName);\n\n $scope.state.actionInProgress = true;\n ImageService.pullImage(registryModel, false)\n .then(function success() {\n Notifications.success('Image successfully pulled', registryModel.Image);\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to pull image');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n\n $scope.confirmRemovalAction = function (selectedItems, force) {\n ModalService.confirmImageForceRemoval(function (confirmed) {\n if (!confirmed) {\n return;\n }\n $scope.removeAction(selectedItems, force);\n });\n };\n\n function isAuthorizedToDownload(selectedItems) {\n for (var i = 0; i < selectedItems.length; i++) {\n var image = selectedItems[i];\n\n var untagged = _.find(image.RepoTags, function (item) {\n return item.indexOf('') > -1;\n });\n\n if (untagged) {\n Notifications.warning('', 'Cannot download a untagged image');\n return false;\n }\n }\n\n if (_.uniqBy(selectedItems, 'NodeName').length > 1) {\n Notifications.warning('', 'Cannot download images from different nodes at the same time');\n return false;\n }\n\n return true;\n }\n\n function exportImages(images) {\n HttpRequestHelper.setPortainerAgentTargetHeader(images[0].NodeName);\n $scope.state.exportInProgress = true;\n ImageService.downloadImages(images)\n .then(function success(data) {\n var downloadData = new Blob([data.file], { type: 'application/x-tar' });\n FileSaver.saveAs(downloadData, 'images.tar');\n Notifications.success('Image(s) successfully downloaded');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to download image(s)');\n })\n .finally(function final() {\n $scope.state.exportInProgress = false;\n });\n }\n\n $scope.downloadAction = function (selectedItems) {\n if (!isAuthorizedToDownload(selectedItems)) {\n return;\n }\n\n ModalService.confirmImageExport(function (confirmed) {\n if (!confirmed) {\n return;\n }\n exportImages(selectedItems);\n });\n };\n\n $scope.removeAction = function (selectedItems, force) {\n var actionCount = selectedItems.length;\n angular.forEach(selectedItems, function (image) {\n HttpRequestHelper.setPortainerAgentTargetHeader(image.NodeName);\n ImageService.deleteImage(image.Id, force)\n .then(function success() {\n Notifications.success('Image successfully removed', image.Id);\n var index = $scope.images.indexOf(image);\n $scope.images.splice(index, 1);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove image');\n })\n .finally(function final() {\n --actionCount;\n if (actionCount === 0) {\n $state.reload();\n }\n });\n });\n };\n\n $scope.offlineMode = false;\n\n $scope.getImages = getImages;\n function getImages() {\n ImageService.images(true)\n .then(function success(data) {\n $scope.images = data;\n $scope.offlineMode = EndpointProvider.offlineMode();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve images');\n $scope.images = [];\n });\n }\n\n $scope.setPullImageValidity = setPullImageValidity;\n function setPullImageValidity(validity) {\n $scope.state.pullRateValid = validity;\n }\n\n function initView() {\n getImages();\n }\n\n initView();\n },\n]);\n","angular.module('portainer.docker').controller('ImportImageController', [\n '$scope',\n '$state',\n 'ImageService',\n 'Notifications',\n 'HttpRequestHelper',\n function ($scope, $state, ImageService, Notifications, HttpRequestHelper) {\n $scope.state = {\n actionInProgress: false,\n };\n\n $scope.formValues = {\n UploadFile: null,\n NodeName: null,\n };\n\n $scope.uploadImage = function () {\n $scope.state.actionInProgress = true;\n\n var nodeName = $scope.formValues.NodeName;\n HttpRequestHelper.setPortainerAgentTargetHeader(nodeName);\n var file = $scope.formValues.UploadFile;\n ImageService.uploadImage(file)\n .then(function success() {\n Notifications.success('Images successfully uploaded');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to upload image');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n },\n]);\n","import _ from 'lodash-es';\nimport { AccessControlFormData } from '../../../../portainer/components/accessControlForm/porAccessControlFormModel';\nimport { MacvlanFormData } from '../../../components/network-macvlan-form/networkMacvlanFormModel';\n\nangular.module('portainer.docker').controller('CreateNetworkController', [\n '$q',\n '$scope',\n '$state',\n 'PluginService',\n 'Notifications',\n 'NetworkService',\n 'LabelHelper',\n 'Authentication',\n 'ResourceControlService',\n 'FormValidator',\n 'HttpRequestHelper',\n function ($q, $scope, $state, PluginService, Notifications, NetworkService, LabelHelper, Authentication, ResourceControlService, FormValidator, HttpRequestHelper) {\n $scope.formValues = {\n DriverOptions: [],\n IPV4: {\n Subnet: '',\n Gateway: '',\n IPRange: '',\n AuxiliaryAddresses: [],\n },\n IPV6: {\n Subnet: '',\n Gateway: '',\n IPRange: '',\n AuxiliaryAddresses: [],\n },\n Labels: [],\n AccessControlData: new AccessControlFormData(),\n NodeName: null,\n Macvlan: new MacvlanFormData(),\n };\n\n $scope.state = {\n formValidationError: '',\n actionInProgress: false,\n };\n\n $scope.availableNetworkDrivers = [];\n\n $scope.config = {\n Driver: 'bridge',\n CheckDuplicate: true,\n Internal: false,\n Attachable: false,\n EnableIPv6: false,\n // Force IPAM Driver to 'default', should not be required.\n // See: https://github.com/docker/docker/issues/25735\n IPAM: {\n Driver: 'default',\n Config: [],\n },\n Labels: {},\n };\n\n $scope.addDriverOption = function () {\n $scope.formValues.DriverOptions.push({\n name: '',\n value: '',\n });\n };\n\n $scope.removeDriverOption = function (index) {\n $scope.formValues.DriverOptions.splice(index, 1);\n };\n\n $scope.addLabel = function () {\n $scope.formValues.Labels.push({\n key: '',\n value: '',\n });\n };\n\n $scope.removeLabel = function (index) {\n $scope.formValues.Labels.splice(index, 1);\n };\n\n $scope.addIPV4AuxAddress = function () {\n $scope.formValues.IPV4.AuxiliaryAddresses.push('');\n };\n\n $scope.addIPV6AuxAddress = function () {\n $scope.formValues.IPV6.AuxiliaryAddresses.push('');\n };\n\n $scope.removeIPV4AuxAddress = function (index) {\n $scope.formValues.IPV4.AuxiliaryAddresses.splice(index, 1);\n $scope.state.IPV4AuxiliaryAddressesError.splice(index, 1);\n };\n\n $scope.removeIPV6AuxAddress = function (index) {\n $scope.formValues.IPV6.AuxiliaryAddresses.splice(index, 1);\n $scope.state.IPV6AuxiliaryAddressesError.splice(index, 1);\n };\n\n function checkAuxiliaryAddress(excludedIP, gateway) {\n const split = _.split(excludedIP, '=');\n\n if (split.length === 2) {\n return split[1] === gateway;\n }\n return excludedIP === gateway;\n }\n\n $scope.checkIPV4AuxiliaryAddress = function (index) {\n $scope.state.IPV4AuxiliaryAddressesError[index] = checkAuxiliaryAddress($scope.formValues.IPV4.AuxiliaryAddresses[index], $scope.formValues.IPV4.Gateway);\n };\n\n $scope.checkIPV6AuxiliaryAddress = function (index) {\n $scope.state.IPV6AuxiliaryAddressesError[index] = checkAuxiliaryAddress($scope.formValues.IPV6.AuxiliaryAddresses[index], $scope.formValues.IPV6.Gateway);\n };\n\n $scope.isValid = function () {\n const validIPV4 = !_.reduce($scope.state.IPV4AuxiliaryAddressesError, (acc, item) => acc || item, false);\n const validIPV6 = !_.reduce($scope.state.IPV6AuxiliaryAddressesError, (acc, item) => acc || item, false);\n return validIPV4 && validIPV6;\n };\n\n function prepareAuxiliaryAddresses(ipamConfig, ipFormValues) {\n ipamConfig.AuxiliaryAddresses = {};\n _.forEach(ipFormValues.AuxiliaryAddresses, (auxAddress, index) => {\n const split = _.split(auxAddress, '=');\n if (split.length === 2) {\n ipamConfig.AuxiliaryAddresses[split[0]] = split[1];\n } else {\n ipamConfig.AuxiliaryAddresses['device' + index] = auxAddress;\n }\n });\n }\n\n function prepareIPAMConfiguration(config) {\n if ($scope.formValues.IPV4.Subnet) {\n let ipamConfig = {};\n ipamConfig.Subnet = $scope.formValues.IPV4.Subnet;\n if ($scope.formValues.IPV4.Gateway) {\n ipamConfig.Gateway = $scope.formValues.IPV4.Gateway;\n }\n if ($scope.formValues.IPV4.IPRange) {\n ipamConfig.IPRange = $scope.formValues.IPV4.IPRange;\n }\n if ($scope.formValues.IPV4.AuxiliaryAddresses.length) {\n prepareAuxiliaryAddresses(ipamConfig, $scope.formValues.IPV4);\n }\n config.IPAM.Config.push(ipamConfig);\n }\n if ($scope.formValues.IPV6.Subnet) {\n let ipamConfig = {};\n ipamConfig.Subnet = $scope.formValues.IPV6.Subnet;\n if ($scope.formValues.IPV6.Gateway) {\n ipamConfig.Gateway = $scope.formValues.IPV6.Gateway;\n }\n if ($scope.formValues.IPV6.IPRange) {\n ipamConfig.IPRange = $scope.formValues.IPV6.IPRange;\n }\n if ($scope.formValues.IPV6.AuxiliaryAddresses.length) {\n prepareAuxiliaryAddresses(ipamConfig, $scope.formValues.IPV6);\n }\n config.EnableIPv6 = true;\n config.IPAM.Config.push(ipamConfig);\n }\n }\n\n function prepareDriverOptions(config) {\n var options = {};\n $scope.formValues.DriverOptions.forEach(function (option) {\n options[option.name] = option.value;\n });\n config.Options = options;\n }\n\n function prepareLabelsConfig(config) {\n config.Labels = LabelHelper.fromKeyValueToLabelHash($scope.formValues.Labels);\n }\n\n function prepareConfiguration() {\n var config = angular.copy($scope.config);\n prepareIPAMConfiguration(config);\n prepareDriverOptions(config);\n prepareLabelsConfig(config);\n return config;\n }\n\n function modifyNetworkConfigurationForMacvlanConfigOnly(config) {\n config.Internal = null;\n config.Attachable = null;\n config.ConfigOnly = true;\n config.Options.parent = $scope.formValues.Macvlan.ParentNetworkCard;\n }\n\n function modifyNetworkConfigurationForMacvlanConfigFrom(config, selectedNetworkConfig) {\n config.ConfigFrom = {\n Network: selectedNetworkConfig.Name,\n };\n if ($scope.applicationState.endpoint.mode.provider === 'DOCKER_SWARM_MODE') {\n config.Scope = 'swarm';\n } else {\n config.Scope = 'local';\n }\n }\n\n function validateForm(accessControlData, isAdmin) {\n $scope.state.formValidationError = '';\n var error = '';\n error = FormValidator.validateAccessControl(accessControlData, isAdmin);\n\n if (error) {\n $scope.state.formValidationError = error;\n return false;\n }\n return true;\n }\n\n function createNetwork(context) {\n HttpRequestHelper.setPortainerAgentTargetHeader(context.nodeName);\n HttpRequestHelper.setPortainerAgentManagerOperation(context.managerOperation);\n\n $scope.state.actionInProgress = true;\n NetworkService.create(context.networkConfiguration)\n .then(function success(data) {\n const userId = context.userDetails.ID;\n const accessControlData = context.accessControlData;\n const resourceControl = data.Portainer.ResourceControl;\n return ResourceControlService.applyResourceControl(userId, accessControlData, resourceControl);\n })\n .then(function success() {\n Notifications.success('Network successfully created');\n if (context.reload) {\n $state.go(\n 'docker.networks',\n {},\n {\n reload: true,\n }\n );\n }\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'An error occured during network creation');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n }\n\n $scope.create = function () {\n var networkConfiguration = prepareConfiguration();\n var accessControlData = $scope.formValues.AccessControlData;\n var userDetails = Authentication.getUserDetails();\n var isAdmin = Authentication.isAdmin();\n\n if (!validateForm(accessControlData, isAdmin)) {\n return;\n }\n\n var creationContext = {\n nodeName: $scope.formValues.NodeName,\n managerOperation: false,\n networkConfiguration: networkConfiguration,\n userDetails: userDetails,\n accessControlData: accessControlData,\n reload: true,\n };\n\n if ($scope.applicationState.endpoint.mode.agentProxy && $scope.applicationState.endpoint.mode.provider === 'DOCKER_SWARM_MODE' && $scope.config.Driver === 'overlay') {\n creationContext.managerOperation = true;\n }\n\n if ($scope.config.Driver === 'macvlan') {\n if ($scope.formValues.Macvlan.Scope === 'local') {\n modifyNetworkConfigurationForMacvlanConfigOnly(networkConfiguration);\n } else if ($scope.formValues.Macvlan.Scope === 'swarm') {\n var selectedNetworkConfig = $scope.formValues.Macvlan.SelectedNetworkConfig;\n modifyNetworkConfigurationForMacvlanConfigFrom(networkConfiguration, selectedNetworkConfig);\n creationContext.nodeName = selectedNetworkConfig.NodeName;\n }\n }\n\n if (\n $scope.config.Driver === 'macvlan' &&\n $scope.formValues.Macvlan.Scope === 'local' &&\n $scope.applicationState.endpoint.mode.agentProxy &&\n $scope.applicationState.endpoint.mode.provider === 'DOCKER_SWARM_MODE'\n ) {\n var selectedNodes = $scope.formValues.Macvlan.DatatableState.selectedItems;\n selectedNodes.forEach(function (node, idx) {\n creationContext.nodeName = node.Hostname;\n creationContext.reload = idx === selectedNodes.length - 1 ? true : false;\n createNetwork(creationContext);\n });\n } else {\n createNetwork(creationContext);\n }\n };\n\n function initView() {\n var apiVersion = $scope.applicationState.endpoint.apiVersion;\n $scope.state.IPV4AuxiliaryAddressesError = [];\n $scope.state.IPV6AuxiliaryAddressesError = [];\n\n PluginService.networkPlugins(apiVersion < 1.25)\n .then(function success(data) {\n $scope.availableNetworkDrivers = data;\n $scope.availableNetworkDrivers = _.filter($scope.availableNetworkDrivers, (driver) => driver !== 'host' && driver !== 'null');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve network drivers');\n });\n }\n\n initView();\n },\n]);\n","import DockerNetworkHelper from 'Docker/helpers/networkHelper';\n\nangular.module('portainer.docker').controller('NetworkController', [\n '$scope',\n '$state',\n '$transition$',\n '$filter',\n 'NetworkService',\n 'Container',\n 'Notifications',\n 'HttpRequestHelper',\n 'NetworkHelper',\n function ($scope, $state, $transition$, $filter, NetworkService, Container, Notifications, HttpRequestHelper, NetworkHelper) {\n $scope.removeNetwork = function removeNetwork() {\n NetworkService.remove($transition$.params().id, $transition$.params().id)\n .then(function success() {\n Notifications.success('Network removed', $transition$.params().id);\n $state.go('docker.networks', {});\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove network');\n });\n };\n\n $scope.containerLeaveNetwork = function containerLeaveNetwork(network, container) {\n HttpRequestHelper.setPortainerAgentTargetHeader(container.NodeName);\n NetworkService.disconnectContainer($transition$.params().id, container.Id, false)\n .then(function success() {\n Notifications.success('Container left network', $transition$.params().id);\n $state.go('docker.networks.network', { id: network.Id }, { reload: true });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to disconnect container from network');\n });\n };\n\n $scope.isSystemNetwork = function () {\n return $scope.network && NetworkHelper.isSystemNetwork($scope.network);\n };\n\n $scope.allowRemove = function () {\n return !$scope.isSystemNetwork();\n };\n\n function filterContainersInNetwork(network, containers) {\n var containersInNetwork = [];\n containers.forEach(function (container) {\n var containerInNetwork = network.Containers[container.Id];\n if (containerInNetwork) {\n containerInNetwork.Id = container.Id;\n // Name is not available in Docker 1.9\n if (!containerInNetwork.Name) {\n containerInNetwork.Name = $filter('trimcontainername')(container.Names[0]);\n }\n containersInNetwork.push(containerInNetwork);\n }\n });\n $scope.containersInNetwork = containersInNetwork;\n }\n\n function getContainersInNetwork(network) {\n var apiVersion = $scope.applicationState.endpoint.apiVersion;\n if (network.Containers) {\n if (apiVersion < 1.24) {\n Container.query(\n {},\n function success(data) {\n var containersInNetwork = data.filter(function filter(container) {\n if (container.HostConfig.NetworkMode === network.Name) {\n return container;\n }\n });\n filterContainersInNetwork(network, containersInNetwork);\n },\n function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve containers in network');\n }\n );\n } else {\n Container.query(\n {\n filters: { network: [$transition$.params().id] },\n },\n function success(data) {\n filterContainersInNetwork(network, data);\n },\n function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve containers in network');\n }\n );\n }\n }\n }\n\n function initView() {\n var nodeName = $transition$.params().nodeName;\n HttpRequestHelper.setPortainerAgentTargetHeader(nodeName);\n $scope.nodeName = nodeName;\n NetworkService.network($transition$.params().id)\n .then(function success(data) {\n $scope.network = data;\n getContainersInNetwork(data);\n $scope.network.IPAM.IPV4Configs = DockerNetworkHelper.getIPV4Configs($scope.network.IPAM.Config);\n $scope.network.IPAM.IPV6Configs = DockerNetworkHelper.getIPV6Configs($scope.network.IPAM.Config);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve network info');\n });\n }\n\n initView();\n },\n]);\n","import _ from 'lodash-es';\nimport DockerNetworkHelper from 'Docker/helpers/networkHelper';\n\nangular.module('portainer.docker').controller('NetworksController', [\n '$q',\n '$scope',\n '$state',\n 'NetworkService',\n 'Notifications',\n 'HttpRequestHelper',\n 'EndpointProvider',\n 'AgentService',\n function ($q, $scope, $state, NetworkService, Notifications, HttpRequestHelper, EndpointProvider, AgentService) {\n $scope.removeAction = function (selectedItems) {\n var actionCount = selectedItems.length;\n angular.forEach(selectedItems, function (network) {\n HttpRequestHelper.setPortainerAgentTargetHeader(network.NodeName);\n NetworkService.remove(network.Id)\n .then(function success() {\n Notifications.success('Network successfully removed', network.Name);\n var index = $scope.networks.indexOf(network);\n $scope.networks.splice(index, 1);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove network');\n })\n .finally(function final() {\n --actionCount;\n if (actionCount === 0) {\n $state.reload();\n }\n });\n });\n };\n\n $scope.offlineMode = false;\n\n $scope.getNetworks = getNetworks;\n\n function groupSwarmNetworksManagerNodesFirst(networks, agents) {\n const getRole = (item) => _.find(agents, (agent) => agent.NodeName === item.NodeName).NodeRole;\n\n const nonSwarmNetworks = _.remove(networks, (item) => item.Scope !== 'swarm');\n const grouped = _.toArray(_.groupBy(networks, (item) => item.Id));\n const sorted = _.map(grouped, (arr) => _.sortBy(arr, (item) => getRole(item)));\n const arr = _.map(sorted, (a) => {\n const item = a[0];\n for (let i = 1; i < a.length; i++) {\n item.Subs.push(a[i]);\n }\n return item;\n });\n const res = _.concat(arr, ...nonSwarmNetworks);\n return res;\n }\n\n function getNetworks() {\n const req = {\n networks: NetworkService.networks(true, true, true),\n };\n\n if ($scope.applicationState.endpoint.mode.agentProxy && $scope.applicationState.endpoint.mode.provider === 'DOCKER_SWARM_MODE') {\n req.agents = AgentService.agents();\n }\n\n $q.all(req)\n .then((data) => {\n $scope.offlineMode = EndpointProvider.offlineMode();\n const networks = _.forEach(data.networks, (item) => (item.Subs = []));\n if ($scope.applicationState.endpoint.mode.agentProxy && $scope.applicationState.endpoint.mode.provider === 'DOCKER_SWARM_MODE') {\n $scope.networks = groupSwarmNetworksManagerNodesFirst(data.networks, data.agents);\n } else {\n $scope.networks = networks;\n }\n\n _.forEach($scope.networks, (network) => {\n network.IPAM.IPV4Configs = DockerNetworkHelper.getIPV4Configs(network.IPAM.Config);\n network.IPAM.IPV6Configs = DockerNetworkHelper.getIPV6Configs(network.IPAM.Config);\n });\n })\n .catch((err) => {\n $scope.networks = [];\n Notifications.error('Failure', err, 'Unable to retrieve networks');\n });\n }\n\n function initView() {\n getNetworks();\n }\n\n initView();\n },\n]);\n","angular.module('portainer.docker').controller('NodeBrowserController', [\n '$stateParams',\n 'NodeService',\n 'HttpRequestHelper',\n 'Notifications',\n function NodeBrowserController($stateParams, NodeService, HttpRequestHelper, Notifications) {\n var ctrl = this;\n ctrl.$onInit = $onInit;\n\n function $onInit() {\n ctrl.nodeId = $stateParams.id;\n\n NodeService.node(ctrl.nodeId)\n .then(function onNodeLoaded(node) {\n HttpRequestHelper.setPortainerAgentTargetHeader(node.Hostname);\n ctrl.node = node;\n })\n .catch(function onError(err) {\n Notifications.error('Unable to retrieve host information', err);\n });\n }\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./node-browser.html');\n\nangular.module('portainer.docker').component('nodeBrowserView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'NodeBrowserController',\n});\n","var path = 'app/docker/views/nodes/node-browser/node-browser.html';\nvar html = \"\\n \\n \\n Swarm > {{ $ctrl.node.Hostname }} > browse\\n \\n\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.docker').controller('NodeDetailsViewController', [\n '$q',\n '$stateParams',\n 'NodeService',\n 'StateManager',\n 'AgentService',\n 'ContainerService',\n 'Authentication',\n function NodeDetailsViewController($q, $stateParams, NodeService, StateManager, AgentService, ContainerService, Authentication) {\n var ctrl = this;\n\n ctrl.$onInit = initView;\n\n ctrl.state = {\n isAgent: false,\n isAdmin: false,\n };\n\n function initView() {\n var applicationState = StateManager.getState();\n ctrl.state.isAgent = applicationState.endpoint.mode.agentProxy;\n ctrl.state.isAdmin = Authentication.isAdmin();\n ctrl.state.enableHostManagementFeatures = ctrl.endpoint.SecuritySettings.enableHostManagementFeatures;\n\n var fetchJobs = ctrl.state.isAdmin && ctrl.state.isAgent;\n\n var nodeId = $stateParams.id;\n $q.all({\n node: NodeService.node(nodeId),\n jobs: fetchJobs ? ContainerService.containers(true, { label: ['io.portainer.job.endpoint'] }) : [],\n }).then(function (data) {\n var node = data.node;\n ctrl.originalNode = node;\n ctrl.hostDetails = buildHostDetails(node);\n ctrl.engineDetails = buildEngineDetails(node);\n ctrl.nodeDetails = buildNodeDetails(node);\n ctrl.jobs = data.jobs;\n if (ctrl.state.isAgent) {\n var agentApiVersion = applicationState.endpoint.agentApiVersion;\n ctrl.state.agentApiVersion = agentApiVersion;\n if (agentApiVersion < 2) {\n return;\n }\n\n AgentService.hostInfo(node.Hostname).then(function onHostInfoLoad(agentHostInfo) {\n ctrl.devices = agentHostInfo.PCIDevices;\n ctrl.disks = agentHostInfo.PhysicalDisks;\n });\n }\n });\n }\n\n function buildHostDetails(node) {\n return {\n os: {\n arch: node.PlatformArchitecture,\n type: node.PlatformOS,\n },\n name: node.Hostname,\n totalCPU: node.CPUs / 1e9,\n totalMemory: node.Memory,\n };\n }\n\n function buildEngineDetails(node) {\n return {\n releaseVersion: node.EngineVersion,\n volumePlugins: transformPlugins(node.Plugins, 'Volume'),\n networkPlugins: transformPlugins(node.Plugins, 'Network'),\n engineLabels: node.EngineLabels,\n };\n }\n\n function buildNodeDetails(node) {\n return {\n name: node.Name,\n role: node.Role,\n managerAddress: node.ManagerAddr,\n availability: node.Availability,\n status: node.Status,\n nodeLabels: node.Labels,\n };\n }\n\n function transformPlugins(pluginsList, type) {\n return pluginsList\n .filter(function (plugin) {\n return plugin.Type === type;\n })\n .map(function (plugin) {\n return plugin.Name;\n });\n }\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./node-details-view.html');\n\nangular.module('portainer.docker').component('nodeDetailsView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'NodeDetailsViewController',\n bindings: {\n endpoint: '<',\n },\n});\n","var path = 'app/docker/views/nodes/node-details/node-details-view.html';\nvar html = \"\\n \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import { AccessControlFormData } from '../../../../portainer/components/accessControlForm/porAccessControlFormModel';\n\nangular.module('portainer.docker').controller('CreateSecretController', [\n '$scope',\n '$state',\n 'Notifications',\n 'SecretService',\n 'LabelHelper',\n 'Authentication',\n 'ResourceControlService',\n 'FormValidator',\n function ($scope, $state, Notifications, SecretService, LabelHelper, Authentication, ResourceControlService, FormValidator) {\n $scope.formValues = {\n Name: '',\n Data: '',\n Labels: [],\n encodeSecret: true,\n AccessControlData: new AccessControlFormData(),\n };\n\n $scope.state = {\n formValidationError: '',\n actionInProgress: false,\n };\n\n $scope.addLabel = function () {\n $scope.formValues.Labels.push({ key: '', value: '' });\n };\n\n $scope.removeLabel = function (index) {\n $scope.formValues.Labels.splice(index, 1);\n };\n\n function prepareLabelsConfig(config) {\n config.Labels = LabelHelper.fromKeyValueToLabelHash($scope.formValues.Labels);\n }\n\n function prepareSecretData(config) {\n if ($scope.formValues.encodeSecret) {\n config.Data = btoa(unescape(encodeURIComponent($scope.formValues.Data)));\n } else {\n config.Data = $scope.formValues.Data;\n }\n }\n\n function prepareConfiguration() {\n var config = {};\n config.Name = $scope.formValues.Name;\n prepareSecretData(config);\n prepareLabelsConfig(config);\n return config;\n }\n\n function validateForm(accessControlData, isAdmin) {\n $scope.state.formValidationError = '';\n var error = '';\n error = FormValidator.validateAccessControl(accessControlData, isAdmin);\n\n if (error) {\n $scope.state.formValidationError = error;\n return false;\n }\n return true;\n }\n\n $scope.create = function () {\n const accessControlData = $scope.formValues.AccessControlData;\n const userDetails = Authentication.getUserDetails();\n const isAdmin = Authentication.isAdmin();\n\n if (!validateForm(accessControlData, isAdmin)) {\n return;\n }\n\n $scope.state.actionInProgress = true;\n var secretConfiguration = prepareConfiguration();\n SecretService.create(secretConfiguration)\n .then(function success(data) {\n const userId = userDetails.ID;\n const resourceControl = data.Portainer.ResourceControl;\n return ResourceControlService.applyResourceControl(userId, accessControlData, resourceControl);\n })\n .then(function success() {\n Notifications.success('Secret successfully created');\n $state.go('docker.secrets', {}, { reload: true });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create secret');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n },\n]);\n","angular.module('portainer.docker').controller('SecretController', [\n '$scope',\n '$transition$',\n '$state',\n 'SecretService',\n 'Notifications',\n function ($scope, $transition$, $state, SecretService, Notifications) {\n $scope.removeSecret = function removeSecret(secretId) {\n SecretService.remove(secretId)\n .then(function success() {\n Notifications.success('Secret successfully removed');\n $state.go('docker.secrets', {});\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove secret');\n });\n };\n\n function initView() {\n SecretService.secret($transition$.params().id)\n .then(function success(data) {\n $scope.secret = data;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve secret details');\n });\n }\n\n initView();\n },\n]);\n","angular.module('portainer.docker').controller('SecretsController', [\n '$scope',\n '$state',\n 'SecretService',\n 'Notifications',\n function ($scope, $state, SecretService, Notifications) {\n $scope.removeAction = function (selectedItems) {\n var actionCount = selectedItems.length;\n angular.forEach(selectedItems, function (secret) {\n SecretService.remove(secret.Id)\n .then(function success() {\n Notifications.success('Secret successfully removed', secret.Name);\n var index = $scope.secrets.indexOf(secret);\n $scope.secrets.splice(index, 1);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove secret');\n })\n .finally(function final() {\n --actionCount;\n if (actionCount === 0) {\n $state.reload();\n }\n });\n });\n };\n\n $scope.getSecrets = getSecrets;\n\n function getSecrets() {\n SecretService.secrets()\n .then(function success(data) {\n $scope.secrets = data;\n })\n .catch(function error(err) {\n $scope.secrets = [];\n Notifications.error('Failure', err, 'Unable to retrieve secrets');\n });\n }\n\n function initView() {\n getSecrets();\n }\n\n initView();\n },\n]);\n","import _ from 'lodash-es';\n\nimport * as envVarsUtils from '@/portainer/helpers/env-vars';\nimport { PorImageRegistryModel } from 'Docker/models/porImageRegistry';\nimport { AccessControlFormData } from '../../../../portainer/components/accessControlForm/porAccessControlFormModel';\n\nrequire('./includes/update-restart.html');\nrequire('./includes/secret.html');\nrequire('./includes/config.html');\nrequire('./includes/resources-placement.html');\n\nangular.module('portainer.docker').controller('CreateServiceController', [\n '$q',\n '$scope',\n '$state',\n '$timeout',\n 'Service',\n 'ServiceHelper',\n 'ConfigService',\n 'ConfigHelper',\n 'SecretHelper',\n 'SecretService',\n 'VolumeService',\n 'NetworkService',\n 'ImageHelper',\n 'LabelHelper',\n 'Authentication',\n 'ResourceControlService',\n 'Notifications',\n 'FormValidator',\n 'PluginService',\n 'RegistryService',\n 'HttpRequestHelper',\n 'NodeService',\n 'WebhookService',\n 'endpoint',\n function (\n $q,\n $scope,\n $state,\n $timeout,\n Service,\n ServiceHelper,\n ConfigService,\n ConfigHelper,\n SecretHelper,\n SecretService,\n VolumeService,\n NetworkService,\n ImageHelper,\n LabelHelper,\n Authentication,\n ResourceControlService,\n Notifications,\n FormValidator,\n PluginService,\n RegistryService,\n HttpRequestHelper,\n NodeService,\n WebhookService,\n endpoint\n ) {\n $scope.endpoint = endpoint;\n\n $scope.formValues = {\n Name: '',\n RegistryModel: new PorImageRegistryModel(),\n Mode: 'replicated',\n Replicas: 1,\n Command: '',\n EntryPoint: '',\n WorkingDir: '',\n User: '',\n Env: [],\n Labels: [],\n ContainerLabels: [],\n Volumes: [],\n Network: '',\n ExtraNetworks: [],\n HostsEntries: [],\n Ports: [],\n Parallelism: 1,\n PlacementConstraints: [],\n PlacementPreferences: [],\n UpdateDelay: '0s',\n UpdateOrder: 'stop-first',\n FailureAction: 'pause',\n Secrets: [],\n Configs: [],\n AccessControlData: new AccessControlFormData(),\n CpuLimit: 0,\n CpuReservation: 0,\n MemoryLimit: 0,\n MemoryReservation: 0,\n MemoryLimitUnit: 'MB',\n MemoryReservationUnit: 'MB',\n RestartCondition: 'any',\n RestartDelay: '5s',\n RestartMaxAttempts: 0,\n RestartWindow: '0s',\n LogDriverName: '',\n LogDriverOpts: [],\n Webhook: false,\n };\n\n $scope.state = {\n formValidationError: '',\n actionInProgress: false,\n pullImageValidity: false,\n };\n\n $scope.allowBindMounts = false;\n\n $scope.handleEnvVarChange = handleEnvVarChange;\n function handleEnvVarChange(value) {\n $scope.formValues.Env = value;\n }\n\n $scope.refreshSlider = function () {\n $timeout(function () {\n $scope.$broadcast('rzSliderForceRender');\n });\n };\n\n $scope.setPullImageValidity = setPullImageValidity;\n function setPullImageValidity(validity) {\n $scope.state.pullImageValidity = validity;\n }\n\n $scope.addPortBinding = function () {\n $scope.formValues.Ports.push({ PublishedPort: '', TargetPort: '', Protocol: 'tcp', PublishMode: 'ingress' });\n };\n\n $scope.removePortBinding = function (index) {\n $scope.formValues.Ports.splice(index, 1);\n };\n\n $scope.addExtraNetwork = function () {\n $scope.formValues.ExtraNetworks.push({ Name: '' });\n };\n\n $scope.removeExtraNetwork = function (index) {\n $scope.formValues.ExtraNetworks.splice(index, 1);\n };\n\n $scope.addHostsEntry = function () {\n $scope.formValues.HostsEntries.push({});\n };\n\n $scope.removeHostsEntry = function (index) {\n $scope.formValues.HostsEntries.splice(index, 1);\n };\n\n $scope.addVolume = function () {\n $scope.formValues.Volumes.push({ Source: null, Target: '', ReadOnly: false, Type: 'volume' });\n };\n\n $scope.removeVolume = function (index) {\n $scope.formValues.Volumes.splice(index, 1);\n };\n\n $scope.addConfig = function () {\n $scope.formValues.Configs.push({});\n };\n\n $scope.removeConfig = function (index) {\n $scope.formValues.Configs.splice(index, 1);\n };\n\n $scope.addSecret = function () {\n $scope.formValues.Secrets.push({ overrideTarget: false });\n };\n\n $scope.removeSecret = function (index) {\n $scope.formValues.Secrets.splice(index, 1);\n };\n\n $scope.addPlacementConstraint = function () {\n $scope.formValues.PlacementConstraints.push({ key: '', operator: '==', value: '' });\n };\n\n $scope.removePlacementConstraint = function (index) {\n $scope.formValues.PlacementConstraints.splice(index, 1);\n };\n\n $scope.addPlacementPreference = function () {\n $scope.formValues.PlacementPreferences.push({ strategy: 'spread', value: '' });\n };\n\n $scope.removePlacementPreference = function (index) {\n $scope.formValues.PlacementPreferences.splice(index, 1);\n };\n\n $scope.addLabel = function () {\n $scope.formValues.Labels.push({ key: '', value: '' });\n };\n\n $scope.removeLabel = function (index) {\n $scope.formValues.Labels.splice(index, 1);\n };\n\n $scope.addContainerLabel = function () {\n $scope.formValues.ContainerLabels.push({ key: '', value: '' });\n };\n\n $scope.removeContainerLabel = function (index) {\n $scope.formValues.ContainerLabels.splice(index, 1);\n };\n\n $scope.addLogDriverOpt = function () {\n $scope.formValues.LogDriverOpts.push({ name: '', value: '' });\n };\n\n $scope.removeLogDriverOpt = function (index) {\n $scope.formValues.LogDriverOpts.splice(index, 1);\n };\n\n function prepareImageConfig(config, input) {\n var imageConfig = ImageHelper.createImageConfigForContainer(input.RegistryModel);\n config.TaskTemplate.ContainerSpec.Image = imageConfig.fromImage;\n }\n\n function preparePortsConfig(config, input) {\n let ports = [];\n input.Ports.forEach(function (binding) {\n const port = {\n Protocol: binding.Protocol,\n PublishMode: binding.PublishMode,\n };\n if (binding.TargetPort) {\n port.TargetPort = +binding.TargetPort;\n if (binding.PublishedPort) {\n port.PublishedPort = +binding.PublishedPort;\n }\n ports.push(port);\n }\n });\n config.EndpointSpec.Ports = ports;\n }\n\n function prepareSchedulingConfig(config, input) {\n if (input.Mode === 'replicated') {\n config.Mode.Replicated = {\n Replicas: input.Replicas,\n };\n } else {\n config.Mode.Global = {};\n }\n }\n\n function commandToArray(cmd) {\n var tokens = [].concat\n .apply(\n [],\n cmd.split(\"'\").map(function (v, i) {\n return i % 2 ? v : v.split(' ');\n })\n )\n .filter(Boolean);\n return tokens;\n }\n\n function prepareCommandConfig(config, input) {\n if (input.EntryPoint) {\n config.TaskTemplate.ContainerSpec.Command = commandToArray(input.EntryPoint);\n }\n if (input.Command) {\n config.TaskTemplate.ContainerSpec.Args = commandToArray(input.Command);\n }\n if (input.User) {\n config.TaskTemplate.ContainerSpec.User = input.User;\n }\n if (input.WorkingDir) {\n config.TaskTemplate.ContainerSpec.Dir = input.WorkingDir;\n }\n }\n\n function prepareEnvConfig(config, input) {\n config.TaskTemplate.ContainerSpec.Env = envVarsUtils.convertToArrayOfStrings(input.Env);\n }\n\n function prepareLabelsConfig(config, input) {\n config.Labels = LabelHelper.fromKeyValueToLabelHash(input.Labels);\n config.TaskTemplate.ContainerSpec.Labels = LabelHelper.fromKeyValueToLabelHash(input.ContainerLabels);\n }\n\n function createMountObjectFromVolume(volumeObject, target, readonly) {\n return {\n Target: target,\n Source: volumeObject.Id,\n Type: 'volume',\n ReadOnly: readonly,\n VolumeOptions: {\n Labels: volumeObject.Labels,\n DriverConfig: {\n Name: volumeObject.Driver,\n Options: volumeObject.Options,\n },\n },\n };\n }\n\n function prepareVolumes(config, input) {\n input.Volumes.forEach(function (volume) {\n if (volume.Source && volume.Target) {\n if (volume.Type !== 'volume') {\n config.TaskTemplate.ContainerSpec.Mounts.push(volume);\n } else {\n var volumeObject = volume.Source;\n var mount = createMountObjectFromVolume(volumeObject, volume.Target, volume.ReadOnly);\n config.TaskTemplate.ContainerSpec.Mounts.push(mount);\n }\n }\n });\n }\n\n function prepareNetworks(config, input) {\n var networks = [];\n if (input.Network) {\n networks.push({ Target: input.Network });\n }\n input.ExtraNetworks.forEach(function (network) {\n networks.push({ Target: network.Name });\n });\n config.Networks = _.uniqWith(networks, _.isEqual);\n }\n\n function prepareHostsEntries(config, input) {\n var hostsEntries = [];\n if (input.HostsEntries) {\n input.HostsEntries.forEach(function (host_ip) {\n if (host_ip.value && host_ip.value.indexOf(':') && host_ip.value.split(':').length === 2) {\n var keyVal = host_ip.value.split(':');\n // Hosts file format, IP_address canonical_hostname\n hostsEntries.push(keyVal[1] + ' ' + keyVal[0]);\n }\n });\n if (hostsEntries.length > 0) {\n config.TaskTemplate.ContainerSpec.Hosts = hostsEntries;\n }\n }\n }\n\n function prepareUpdateConfig(config, input) {\n config.UpdateConfig = {\n Parallelism: input.Parallelism || 0,\n Delay: ServiceHelper.translateHumanDurationToNanos(input.UpdateDelay) || 0,\n FailureAction: input.FailureAction,\n Order: input.UpdateOrder,\n };\n }\n\n function prepareRestartPolicy(config, input) {\n config.TaskTemplate.RestartPolicy = {\n Condition: input.RestartCondition || 'any',\n Delay: ServiceHelper.translateHumanDurationToNanos(input.RestartDelay) || 5000000000,\n MaxAttempts: input.RestartMaxAttempts || 0,\n Window: ServiceHelper.translateHumanDurationToNanos(input.RestartWindow) || 0,\n };\n }\n\n function preparePlacementConfig(config, input) {\n config.TaskTemplate.Placement.Constraints = ServiceHelper.translateKeyValueToPlacementConstraints(input.PlacementConstraints);\n config.TaskTemplate.Placement.Preferences = ServiceHelper.translateKeyValueToPlacementPreferences(input.PlacementPreferences);\n }\n\n function prepareConfigConfig(config, input) {\n if (input.Configs) {\n var configs = [];\n angular.forEach(input.Configs, function (config) {\n if (config.model) {\n var s = ConfigHelper.configConfig(config.model);\n s.File.Name = config.FileName || s.File.Name;\n configs.push(s);\n }\n });\n config.TaskTemplate.ContainerSpec.Configs = configs;\n }\n }\n\n function prepareSecretConfig(config, input) {\n if (input.Secrets) {\n var secrets = [];\n angular.forEach(input.Secrets, function (secret) {\n if (secret.model) {\n var s = SecretHelper.secretConfig(secret.model);\n s.File.Name = s.SecretName;\n if (secret.overrideTarget && secret.target && secret.target !== '') {\n s.File.Name = secret.target;\n }\n secrets.push(s);\n }\n });\n config.TaskTemplate.ContainerSpec.Secrets = secrets;\n }\n }\n\n function prepareResourcesCpuConfig(config, input) {\n // CPU Limit\n if (input.CpuLimit > 0) {\n config.TaskTemplate.Resources.Limits.NanoCPUs = input.CpuLimit * 1000000000;\n }\n // CPU Reservation\n if (input.CpuReservation > 0) {\n config.TaskTemplate.Resources.Reservations.NanoCPUs = input.CpuReservation * 1000000000;\n }\n }\n\n function prepareResourcesMemoryConfig(config, input) {\n // Memory Limit - Round to 0.125\n var memoryLimit = (Math.round(input.MemoryLimit * 8) / 8).toFixed(3);\n memoryLimit *= 1024 * 1024;\n if (input.MemoryLimitUnit === 'GB') {\n memoryLimit *= 1024;\n }\n if (memoryLimit > 0) {\n config.TaskTemplate.Resources.Limits.MemoryBytes = memoryLimit;\n }\n // Memory Resevation - Round to 0.125\n var memoryReservation = (Math.round(input.MemoryReservation * 8) / 8).toFixed(3);\n memoryReservation *= 1024 * 1024;\n if (input.MemoryReservationUnit === 'GB') {\n memoryReservation *= 1024;\n }\n if (memoryReservation > 0) {\n config.TaskTemplate.Resources.Reservations.MemoryBytes = memoryReservation;\n }\n }\n\n function prepareLogDriverConfig(config, input) {\n var logOpts = {};\n if (input.LogDriverName) {\n config.TaskTemplate.LogDriver = { Name: input.LogDriverName };\n if (input.LogDriverName !== 'none') {\n input.LogDriverOpts.forEach(function (opt) {\n if (opt.name) {\n logOpts[opt.name] = opt.value;\n }\n });\n if (Object.keys(logOpts).length !== 0 && logOpts.constructor === Object) {\n config.TaskTemplate.LogDriver.Options = logOpts;\n }\n }\n }\n }\n\n function prepareConfiguration() {\n var input = $scope.formValues;\n var config = {\n Name: input.Name,\n TaskTemplate: {\n ContainerSpec: {\n Mounts: [],\n },\n Placement: {},\n Resources: {\n Limits: {},\n Reservations: {},\n },\n },\n Mode: {},\n EndpointSpec: {},\n };\n prepareSchedulingConfig(config, input);\n prepareImageConfig(config, input);\n preparePortsConfig(config, input);\n prepareCommandConfig(config, input);\n prepareEnvConfig(config, input);\n prepareLabelsConfig(config, input);\n prepareVolumes(config, input);\n prepareNetworks(config, input);\n prepareHostsEntries(config, input);\n prepareUpdateConfig(config, input);\n prepareConfigConfig(config, input);\n prepareSecretConfig(config, input);\n preparePlacementConfig(config, input);\n prepareResourcesCpuConfig(config, input);\n prepareResourcesMemoryConfig(config, input);\n prepareRestartPolicy(config, input);\n prepareLogDriverConfig(config, input);\n return config;\n }\n\n function createNewService(config, accessControlData) {\n const registryModel = $scope.formValues.RegistryModel;\n var authenticationDetails = registryModel.Registry.Authentication ? RegistryService.encodedCredentials(registryModel.Registry) : '';\n HttpRequestHelper.setRegistryAuthenticationHeader(authenticationDetails);\n\n Service.create(config)\n .$promise.then(function success(data) {\n const serviceId = data.ID;\n const resourceControl = data.Portainer.ResourceControl;\n const userId = Authentication.getUserDetails().ID;\n const rcPromise = ResourceControlService.applyResourceControl(userId, accessControlData, resourceControl);\n const webhookPromise = $q.when(endpoint.Type !== 4 && $scope.formValues.Webhook && WebhookService.createServiceWebhook(serviceId, endpoint.Id));\n return $q.all([rcPromise, webhookPromise]);\n })\n .then(function success() {\n Notifications.success('Service successfully created');\n $state.go('docker.services', {}, { reload: true });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create service');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n }\n\n function validateForm(accessControlData, isAdmin) {\n $scope.state.formValidationError = '';\n var error = '';\n error = FormValidator.validateAccessControl(accessControlData, isAdmin);\n\n if (error) {\n $scope.state.formValidationError = error;\n return false;\n }\n return true;\n }\n\n $scope.volumesAreValid = volumesAreValid;\n function volumesAreValid() {\n const volumes = $scope.formValues.Volumes;\n return volumes.every((volume) => volume.Target && volume.Source);\n }\n\n $scope.create = function createService() {\n var accessControlData = $scope.formValues.AccessControlData;\n\n if (!validateForm(accessControlData, $scope.isAdmin)) {\n return;\n }\n\n $scope.state.actionInProgress = true;\n var config = prepareConfiguration();\n createNewService(config, accessControlData);\n };\n\n function initSlidersMaxValuesBasedOnNodeData(nodes) {\n var maxCpus = 0;\n var maxMemory = 0;\n for (var n in nodes) {\n if (nodes[n].CPUs && nodes[n].CPUs > maxCpus) {\n maxCpus = nodes[n].CPUs;\n }\n if (nodes[n].Memory && nodes[n].Memory > maxMemory) {\n maxMemory = nodes[n].Memory;\n }\n }\n if (maxCpus > 0) {\n $scope.state.sliderMaxCpu = maxCpus / 1000000000;\n } else {\n $scope.state.sliderMaxCpu = 32;\n }\n if (maxMemory > 0) {\n $scope.state.sliderMaxMemory = Math.floor(maxMemory / 1000 / 1000);\n } else {\n $scope.state.sliderMaxMemory = 32768;\n }\n }\n\n function initView() {\n var apiVersion = $scope.applicationState.endpoint.apiVersion;\n\n $q.all({\n volumes: VolumeService.volumes(),\n networks: NetworkService.networks(true, true, false),\n secrets: apiVersion >= 1.25 ? SecretService.secrets() : [],\n configs: apiVersion >= 1.3 ? ConfigService.configs() : [],\n nodes: NodeService.nodes(),\n availableLoggingDrivers: PluginService.loggingPlugins(apiVersion < 1.25),\n allowBindMounts: checkIfAllowedBindMounts(),\n })\n .then(function success(data) {\n $scope.availableVolumes = data.volumes;\n $scope.availableNetworks = data.networks;\n $scope.availableSecrets = data.secrets;\n $scope.availableConfigs = data.configs;\n $scope.availableLoggingDrivers = data.availableLoggingDrivers;\n initSlidersMaxValuesBasedOnNodeData(data.nodes);\n $scope.isAdmin = Authentication.isAdmin();\n $scope.allowBindMounts = data.allowBindMounts;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to initialize view');\n });\n }\n\n initView();\n\n async function checkIfAllowedBindMounts() {\n const isAdmin = Authentication.isAdmin();\n\n const { allowBindMountsForRegularUsers } = endpoint.SecuritySettings;\n\n return isAdmin || allowBindMountsForRegularUsers;\n }\n },\n]);\n","var path = 'app/docker/views/services/create/includes/update-restart.html';\nvar html = \"
    \\n
    \\n Update config\\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n

    \\n Maximum number of tasks to be updated simultaneously (0 to update all at once).\\n

    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n

    \\n Amount of time between updates expressed by a number followed by unit (ns|us|ms|s|m|h). Default value is 0s, 0 seconds.\\n

    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n

    \\n Action taken on failure to start after update.\\n

    \\n
    \\n
    \\n \\n \\n
    = 1.29\\\">\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n

    \\n Operation order on failure.\\n

    \\n
    \\n
    \\n \\n\\n
    \\n Restart policy\\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n

    \\n Restart when condition is met (default condition \\\"any\\\").\\n

    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n

    \\n Delay between restart attempts expressed by a number followed by unit (ns|us|ms|s|m|h). Default value is 5s, 5 seconds.\\n

    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n

    \\n Maximum attempts to restart a given task before giving up (default value is 0, which means unlimited).\\n

    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n

    \\n Time window to evaluate restart attempts expressed by a number followed by unit (ns|us|ms|s|m|h). Default value is 0 seconds, which is unbounded.\\n

    \\n
    \\n
    \\n \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/services/create/includes/secret.html';\nvar html = \"
    \\n
    \\n
    \\n By default, secrets will be available under /run/secrets/$SECRET_NAME in containers (Linux) or\\n C:\\\\ProgramData\\\\Docker\\\\secrets\\\\$SECRET_NAME (Windows).\\n
    \\n
    \\n
    \\n \\n add a secret \\n
    \\n
    \\n
    \\n
    \\n secret\\n \\n
    \\n
    = 1.3 && secret.overrideTarget\\\">\\n target\\n \\n
    \\n
    \\n
    = 1.3\\\">\\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/services/create/includes/config.html';\nvar html = \"
    \\n
    \\n
    \\n \\n add a config \\n
    \\n
    \\n
    \\n
    \\n config\\n \\n
    \\n
    \\n Path in container\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/services/create/includes/resources-placement.html';\nvar html = \"
    \\n
    \\n Resources\\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n

    \\n Minimum memory available on a node to run a task (MB)\\n

    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n

    \\n Maximum memory usage per task (MB)\\n

    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n

    \\n Minimum CPU available on a node to run a task\\n

    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n

    \\n Maximum CPU usage per task\\n

    \\n
    \\n
    \\n \\n
    \\n Placement\\n
    \\n \\n
    \\n
    \\n \\n \\n placement constraint\\n \\n
    \\n
    \\n
    \\n
    \\n name\\n \\n
    \\n
    \\n \\n
    \\n
    \\n value\\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    = 1.3\\\">\\n
    \\n \\n \\n placement preference\\n \\n
    \\n
    \\n
    \\n
    \\n strategy\\n \\n
    \\n
    \\n value\\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","require('./includes/configs.html');\nrequire('./includes/constraints.html');\nrequire('./includes/container-specs.html');\nrequire('./includes/containerlabels.html');\nrequire('./includes/environmentvariables.html');\nrequire('./includes/hosts.html');\nrequire('./includes/image.html');\nrequire('./includes/logging.html');\nrequire('./includes/mounts.html');\nrequire('./includes/networks.html');\nrequire('./includes/placementPreferences.html');\nrequire('./includes/ports.html');\nrequire('./includes/resources.html');\nrequire('./includes/restart.html');\nrequire('./includes/secrets.html');\nrequire('./includes/servicelabels.html');\nrequire('./includes/tasks.html');\nrequire('./includes/updateconfig.html');\n\nimport _ from 'lodash-es';\n\nimport * as envVarsUtils from '@/portainer/helpers/env-vars';\n\nimport { PorImageRegistryModel } from 'Docker/models/porImageRegistry';\n\nangular.module('portainer.docker').controller('ServiceController', [\n '$q',\n '$scope',\n '$transition$',\n '$state',\n '$location',\n '$timeout',\n '$anchorScroll',\n 'ServiceService',\n 'ConfigService',\n 'ConfigHelper',\n 'SecretService',\n 'ImageService',\n 'SecretHelper',\n 'ServiceHelper',\n 'LabelHelper',\n 'TaskService',\n 'NodeService',\n 'ContainerService',\n 'TaskHelper',\n 'Notifications',\n 'ModalService',\n 'PluginService',\n 'Authentication',\n 'VolumeService',\n 'ImageHelper',\n 'WebhookService',\n 'EndpointProvider',\n 'clipboard',\n 'WebhookHelper',\n 'NetworkService',\n 'endpoint',\n function (\n $q,\n $scope,\n $transition$,\n $state,\n $location,\n $timeout,\n $anchorScroll,\n ServiceService,\n ConfigService,\n ConfigHelper,\n SecretService,\n ImageService,\n SecretHelper,\n ServiceHelper,\n LabelHelper,\n TaskService,\n NodeService,\n ContainerService,\n TaskHelper,\n Notifications,\n ModalService,\n PluginService,\n Authentication,\n VolumeService,\n ImageHelper,\n WebhookService,\n EndpointProvider,\n clipboard,\n WebhookHelper,\n NetworkService,\n endpoint\n ) {\n $scope.endpoint = endpoint;\n\n $scope.state = {\n updateInProgress: false,\n deletionInProgress: false,\n rollbackInProgress: false,\n };\n\n $scope.formValues = {\n RegistryModel: new PorImageRegistryModel(),\n };\n\n $scope.tasks = [];\n $scope.availableImages = [];\n\n $scope.lastVersion = 0;\n\n var originalService = {};\n var previousServiceValues = [];\n\n $scope.goToItem = function (hash) {\n if ($location.hash() !== hash) {\n $location.hash(hash);\n } else {\n $anchorScroll();\n }\n };\n\n $scope.addEnvironmentVariable = function addEnvironmentVariable(service) {\n service.EnvironmentVariables.push({ name: '', value: '' });\n updateServiceArray(service, 'EnvironmentVariables', service.EnvironmentVariables);\n };\n\n $scope.onChangeEnvVars = onChangeEnvVars;\n\n function onChangeEnvVars(env) {\n const service = $scope.service;\n\n const orgEnv = service.EnvironmentVariables;\n service.EnvironmentVariables = env.map((v) => {\n const orgVar = orgEnv.find(({ name }) => v.name === name);\n const added = orgVar && orgVar.added;\n return { ...v, added };\n });\n\n updateServiceArray(service, 'EnvironmentVariables', service.EnvironmentVariables);\n }\n\n $scope.addConfig = function addConfig(service, config) {\n if (\n config &&\n service.ServiceConfigs.filter(function (serviceConfig) {\n return serviceConfig.Id === config.Id;\n }).length === 0\n ) {\n service.ServiceConfigs.push({ Id: config.Id, Name: config.Name, FileName: config.Name, Uid: '0', Gid: '0', Mode: 292 });\n updateServiceArray(service, 'ServiceConfigs', service.ServiceConfigs);\n }\n };\n $scope.removeConfig = function removeSecret(service, index) {\n var removedElement = service.ServiceConfigs.splice(index, 1);\n if (removedElement !== null) {\n updateServiceArray(service, 'ServiceConfigs', service.ServiceConfigs);\n }\n };\n $scope.updateConfig = function updateConfig(service) {\n updateServiceArray(service, 'ServiceConfigs', service.ServiceConfigs);\n };\n $scope.addSecret = function addSecret(service, newSecret) {\n if (newSecret.secret) {\n var filename = newSecret.secret.Name;\n if (newSecret.override) {\n filename = newSecret.target;\n }\n if (\n service.ServiceSecrets.filter(function (serviceSecret) {\n return serviceSecret.Id === newSecret.secret.Id && serviceSecret.FileName === filename;\n }).length === 0\n ) {\n service.ServiceSecrets.push({ Id: newSecret.secret.Id, Name: newSecret.secret.Name, FileName: filename, Uid: '0', Gid: '0', Mode: 444 });\n updateServiceArray(service, 'ServiceSecrets', service.ServiceSecrets);\n }\n }\n };\n $scope.removeSecret = function removeSecret(service, index) {\n var removedElement = service.ServiceSecrets.splice(index, 1);\n if (removedElement !== null) {\n updateServiceArray(service, 'ServiceSecrets', service.ServiceSecrets);\n }\n };\n $scope.addLabel = function addLabel(service) {\n service.ServiceLabels.push({ key: '', value: '', originalValue: '' });\n updateServiceArray(service, 'ServiceLabels', service.ServiceLabels);\n };\n $scope.removeLabel = function removeLabel(service, index) {\n var removedElement = service.ServiceLabels.splice(index, 1);\n if (removedElement !== null) {\n updateServiceArray(service, 'ServiceLabels', service.ServiceLabels);\n }\n };\n $scope.updateLabel = function updateLabel(service, label) {\n if (label.value !== label.originalValue || label.key !== label.originalKey) {\n updateServiceArray(service, 'ServiceLabels', service.ServiceLabels);\n }\n };\n $scope.addContainerLabel = function addContainerLabel(service) {\n service.ServiceContainerLabels.push({ key: '', value: '', originalValue: '' });\n updateServiceArray(service, 'ServiceContainerLabels', service.ServiceContainerLabels);\n };\n $scope.removeContainerLabel = function removeLabel(service, index) {\n var removedElement = service.ServiceContainerLabels.splice(index, 1);\n if (removedElement !== null) {\n updateServiceArray(service, 'ServiceContainerLabels', service.ServiceContainerLabels);\n }\n };\n $scope.updateContainerLabel = function updateLabel(service, label) {\n if (label.value !== label.originalValue || label.key !== label.originalKey) {\n updateServiceArray(service, 'ServiceContainerLabels', service.ServiceContainerLabels);\n }\n };\n $scope.addMount = function addMount(service) {\n service.ServiceMounts.push({ Type: 'volume', Source: null, Target: '', ReadOnly: false });\n updateServiceArray(service, 'ServiceMounts', service.ServiceMounts);\n };\n $scope.removeMount = function removeMount(service, index) {\n var removedElement = service.ServiceMounts.splice(index, 1);\n if (removedElement !== null) {\n updateServiceArray(service, 'ServiceMounts', service.ServiceMounts);\n }\n };\n\n $scope.onChangeMountType = function onChangeMountType(service, mount) {\n mount.Source = null;\n $scope.updateMount(service, mount);\n };\n\n $scope.updateMount = function updateMount(service) {\n updateServiceArray(service, 'ServiceMounts', service.ServiceMounts);\n };\n\n $scope.addNetwork = function addNetwork(service) {\n if (!service.Networks) {\n service.Networks = [];\n }\n service.Networks.push({ Editable: true });\n };\n\n $scope.removeNetwork = function removeNetwork(service, index) {\n var removedElement = service.Networks.splice(index, 1);\n if (removedElement && removedElement.length && removedElement[0].Id) {\n updateServiceArray(service, 'Networks', service.Networks);\n }\n };\n\n $scope.updateNetwork = function updateNetwork(service) {\n updateServiceArray(service, 'Networks', service.Networks);\n };\n\n $scope.addPlacementConstraint = function addPlacementConstraint(service) {\n service.ServiceConstraints.push({ key: '', operator: '==', value: '' });\n updateServiceArray(service, 'ServiceConstraints', service.ServiceConstraints);\n };\n $scope.removePlacementConstraint = function removePlacementConstraint(service, index) {\n var removedElement = service.ServiceConstraints.splice(index, 1);\n if (removedElement !== null) {\n updateServiceArray(service, 'ServiceConstraints', service.ServiceConstraints);\n }\n };\n $scope.updatePlacementConstraint = function (service) {\n updateServiceArray(service, 'ServiceConstraints', service.ServiceConstraints);\n };\n\n $scope.addPlacementPreference = function (service) {\n service.ServicePreferences.push({ strategy: 'spread', value: '' });\n updateServiceArray(service, 'ServicePreferences', service.ServicePreferences);\n };\n $scope.removePlacementPreference = function (service, index) {\n var removedElement = service.ServicePreferences.splice(index, 1);\n if (removedElement !== null) {\n updateServiceArray(service, 'ServicePreferences', service.ServicePreferences);\n }\n };\n $scope.updatePlacementPreference = function (service) {\n updateServiceArray(service, 'ServicePreferences', service.ServicePreferences);\n };\n\n $scope.addPublishedPort = function addPublishedPort(service) {\n if (!service.Ports) {\n service.Ports = [];\n }\n service.Ports.push({ PublishedPort: '', TargetPort: '', Protocol: 'tcp', PublishMode: 'ingress' });\n };\n $scope.updatePublishedPort = function updatePublishedPort(service) {\n updateServiceArray(service, 'Ports', service.Ports);\n };\n $scope.removePortPublishedBinding = function removePortPublishedBinding(service, index) {\n var removedElement = service.Ports.splice(index, 1);\n if (removedElement !== null) {\n updateServiceArray(service, 'Ports', service.Ports);\n }\n };\n\n $scope.addLogDriverOpt = function addLogDriverOpt(service) {\n service.LogDriverOpts.push({ key: '', value: '', originalValue: '' });\n updateServiceArray(service, 'LogDriverOpts', service.LogDriverOpts);\n };\n $scope.removeLogDriverOpt = function removeLogDriverOpt(service, index) {\n var removedElement = service.LogDriverOpts.splice(index, 1);\n if (removedElement !== null) {\n updateServiceArray(service, 'LogDriverOpts', service.LogDriverOpts);\n }\n };\n $scope.updateLogDriverOpt = function updateLogDriverOpt(service, variable) {\n if (variable.value !== variable.originalValue || variable.key !== variable.originalKey) {\n updateServiceArray(service, 'LogDriverOpts', service.LogDriverOpts);\n }\n };\n $scope.updateLogDriverName = function updateLogDriverName(service) {\n updateServiceArray(service, 'LogDriverName', service.LogDriverName);\n };\n\n $scope.addHostsEntry = function (service) {\n if (!service.Hosts) {\n service.Hosts = [];\n }\n service.Hosts.push({ hostname: '', ip: '' });\n };\n $scope.removeHostsEntry = function (service, index) {\n var removedElement = service.Hosts.splice(index, 1);\n if (removedElement !== null) {\n updateServiceArray(service, 'Hosts', service.Hosts);\n }\n };\n $scope.updateHostsEntry = function (service) {\n updateServiceArray(service, 'Hosts', service.Hosts);\n };\n\n $scope.updateWebhook = function updateWebhook(service) {\n if ($scope.WebhookExists) {\n WebhookService.deleteWebhook($scope.webhookID)\n .then(function success() {\n $scope.webhookURL = null;\n $scope.webhookID = null;\n $scope.WebhookExists = false;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to delete webhook');\n });\n } else {\n WebhookService.createServiceWebhook(service.Id, EndpointProvider.endpointID())\n .then(function success(data) {\n $scope.WebhookExists = true;\n $scope.webhookID = data.Id;\n $scope.webhookURL = WebhookHelper.returnWebhookUrl(data.Token);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create webhook');\n });\n }\n };\n\n $scope.copyWebhook = function copyWebhook() {\n clipboard.copyText($scope.webhookURL);\n $('#copyNotification').show();\n $('#copyNotification').fadeOut(2000);\n };\n\n $scope.cancelChanges = function cancelChanges(service, keys) {\n if (keys) {\n // clean out the keys only from the list of modified keys\n keys.forEach(function (key) {\n if (key === 'Image') {\n $scope.formValues.RegistryModel.Image = '';\n } else {\n var index = previousServiceValues.indexOf(key);\n if (index >= 0) {\n previousServiceValues.splice(index, 1);\n }\n }\n });\n } else {\n // clean out all changes\n $scope.formValues.RegistryModel.Image = '';\n keys = Object.keys(service);\n previousServiceValues = [];\n }\n keys.forEach(function (attribute) {\n service[attribute] = originalService[attribute]; // reset service values\n });\n service.hasChanges = false;\n };\n\n $scope.hasChanges = function (service, elements) {\n var hasChanges = false;\n elements.forEach(function (key) {\n if (key === 'Image') {\n hasChanges = hasChanges || $scope.formValues.RegistryModel.Image ? true : false;\n } else {\n hasChanges = hasChanges || previousServiceValues.indexOf(key) >= 0;\n }\n });\n return hasChanges;\n };\n\n $scope.mountsAreValid = mountsAreValid;\n function mountsAreValid() {\n const mounts = $scope.service.ServiceMounts;\n return mounts.every((mount) => mount.Source && mount.Target);\n }\n\n function buildChanges(service) {\n var config = ServiceHelper.serviceToConfig(service.Model);\n config.Name = service.Name;\n config.Labels = LabelHelper.fromKeyValueToLabelHash(service.ServiceLabels);\n config.TaskTemplate.ContainerSpec.Env = envVarsUtils.convertToArrayOfStrings(service.EnvironmentVariables);\n config.TaskTemplate.ContainerSpec.Labels = LabelHelper.fromKeyValueToLabelHash(service.ServiceContainerLabels);\n\n if ($scope.hasChanges(service, ['Image'])) {\n const image = ImageHelper.createImageConfigForContainer($scope.formValues.RegistryModel);\n config.TaskTemplate.ContainerSpec.Image = image.fromImage;\n } else {\n config.TaskTemplate.ContainerSpec.Image = service.Image;\n }\n\n if ($scope.hasChanges(service, ['Networks'])) {\n config.Networks = _.map(\n _.filter(service.Networks, (item) => item.Id && item.Editable),\n (item) => ({ Target: item.Id })\n );\n config.TaskTemplate.Networks = config.Networks;\n }\n\n config.TaskTemplate.ContainerSpec.Secrets = service.ServiceSecrets ? service.ServiceSecrets.map(SecretHelper.secretConfig) : [];\n config.TaskTemplate.ContainerSpec.Configs = service.ServiceConfigs ? service.ServiceConfigs.map(ConfigHelper.configConfig) : [];\n config.TaskTemplate.ContainerSpec.Hosts = service.Hosts ? ServiceHelper.translateHostnameIPToHostsEntries(service.Hosts) : [];\n\n if (service.Mode === 'replicated') {\n config.Mode.Replicated.Replicas = service.Replicas;\n }\n config.TaskTemplate.ContainerSpec.Mounts = service.ServiceMounts;\n if (typeof config.TaskTemplate.Placement === 'undefined') {\n config.TaskTemplate.Placement = {};\n }\n config.TaskTemplate.Placement.Constraints = ServiceHelper.translateKeyValueToPlacementConstraints(service.ServiceConstraints);\n config.TaskTemplate.Placement.Preferences = ServiceHelper.translateKeyValueToPlacementPreferences(service.ServicePreferences);\n\n if ($scope.hasChanges(service, ['LimitNanoCPUs', 'LimitMemoryBytes', 'ReservationNanoCPUs', 'ReservationMemoryBytes'])) {\n // Round memory values to 0.125 and convert MB to B\n var memoryLimit = (Math.round(service.LimitMemoryBytes * 8) / 8).toFixed(3);\n memoryLimit *= 1024 * 1024;\n var memoryReservation = (Math.round(service.ReservationMemoryBytes * 8) / 8).toFixed(3);\n memoryReservation *= 1024 * 1024;\n config.TaskTemplate.Resources = {\n Limits: {\n NanoCPUs: service.LimitNanoCPUs * 1000000000,\n MemoryBytes: memoryLimit,\n },\n Reservations: {\n NanoCPUs: service.ReservationNanoCPUs * 1000000000,\n MemoryBytes: memoryReservation,\n },\n };\n }\n\n if ($scope.hasChanges(service, ['UpdateFailureAction', 'UpdateDelay', 'UpdateParallelism', 'UpdateOrder'])) {\n config.UpdateConfig = {\n Parallelism: service.UpdateParallelism,\n Delay: ServiceHelper.translateHumanDurationToNanos(service.UpdateDelay) || 0,\n FailureAction: service.UpdateFailureAction,\n Order: service.UpdateOrder,\n };\n }\n\n if ($scope.hasChanges(service, ['RestartCondition', 'RestartDelay', 'RestartMaxAttempts', 'RestartWindow'])) {\n config.TaskTemplate.RestartPolicy = {\n Condition: service.RestartCondition,\n Delay: ServiceHelper.translateHumanDurationToNanos(service.RestartDelay) || 5000000000,\n MaxAttempts: service.RestartMaxAttempts,\n Window: ServiceHelper.translateHumanDurationToNanos(service.RestartWindow) || 0,\n };\n }\n\n config.TaskTemplate.LogDriver = null;\n if (service.LogDriverName) {\n config.TaskTemplate.LogDriver = { Name: service.LogDriverName };\n if (service.LogDriverName !== 'none') {\n var logOpts = ServiceHelper.translateKeyValueToLogDriverOpts(service.LogDriverOpts);\n if (Object.keys(logOpts).length !== 0 && logOpts.constructor === Object) {\n config.TaskTemplate.LogDriver.Options = logOpts;\n }\n }\n }\n\n if (service.Ports) {\n service.Ports.forEach(function (binding) {\n if (binding.PublishedPort === null || binding.PublishedPort === '') {\n delete binding.PublishedPort;\n }\n });\n }\n\n config.EndpointSpec = {\n Mode: (config.EndpointSpec && config.EndpointSpec.Mode) || 'vip',\n Ports: service.Ports,\n };\n return service, config;\n }\n\n function rollbackService(service) {\n $scope.state.rollbackInProgress = true;\n let config = {};\n service, (config = buildChanges(service));\n ServiceService.update(service, config, 'previous')\n .then(function (data) {\n if (data.message && data.message.match(/^rpc error:/)) {\n Notifications.error(data.message, 'Error');\n } else {\n Notifications.success('Success', 'Service successfully rolled back');\n $scope.cancelChanges({});\n initView();\n }\n })\n .catch(function (e) {\n if (e.data.message && e.data.message.includes('does not have a previous spec')) {\n Notifications.error('Failure', { message: 'No previous config to rollback to.' });\n } else {\n Notifications.error('Failure', e, 'Unable to rollback service');\n }\n })\n .finally(function () {\n $scope.state.rollbackInProgress = false;\n });\n }\n\n $scope.rollbackService = function (service) {\n ModalService.confirm({\n title: 'Rollback service',\n message: 'Are you sure you want to rollback?',\n buttons: {\n confirm: {\n label: 'Yes',\n className: 'btn-danger',\n },\n },\n callback: function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n rollbackService(service);\n },\n });\n };\n\n $scope.setPullImageValidity = setPullImageValidity;\n function setPullImageValidity(validity) {\n $scope.state.pullImageValidity = validity;\n }\n\n $scope.updateService = function updateService(service) {\n let config = {};\n service, (config = buildChanges(service));\n ServiceService.update(service, config).then(\n function (data) {\n if (data.message && data.message.match(/^rpc error:/)) {\n Notifications.error(data.message, 'Error');\n } else {\n Notifications.success('Service successfully updated', 'Service updated');\n }\n $scope.cancelChanges({});\n initView();\n },\n function (e) {\n Notifications.error('Failure', e, 'Unable to update service');\n }\n );\n };\n\n $scope.removeService = function () {\n ModalService.confirmDeletion('Do you want to remove this service? All the containers associated to this service will be removed too.', function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n removeService();\n });\n };\n\n function removeService() {\n $scope.state.deletionInProgress = true;\n ServiceService.remove($scope.service)\n .then(function success() {\n return $q.when($scope.webhookID && WebhookService.deleteWebhook($scope.webhookID));\n })\n .then(function success() {\n Notifications.success('Service successfully deleted');\n $state.go('docker.services', {});\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove service');\n })\n .finally(function final() {\n $scope.state.deletionInProgress = false;\n });\n }\n\n $scope.forceUpdateService = function (service) {\n ModalService.confirmServiceForceUpdate('Do you want to force an update of the service? All the tasks associated to the service will be recreated.', function (result) {\n if (!result) {\n return;\n }\n var pullImage = false;\n if (result[0]) {\n pullImage = true;\n }\n forceUpdateService(service, pullImage);\n });\n };\n\n function forceUpdateService(service, pullImage) {\n var config = ServiceHelper.serviceToConfig(service.Model);\n if (pullImage) {\n config.TaskTemplate.ContainerSpec.Image = ImageHelper.removeDigestFromRepository(config.TaskTemplate.ContainerSpec.Image);\n }\n\n // As explained in https://github.com/docker/swarmkit/issues/2364 ForceUpdate can accept a random\n // value or an increment of the counter value to force an update.\n config.TaskTemplate.ForceUpdate++;\n $scope.state.updateInProgress = true;\n ServiceService.update(service, config)\n .then(function success() {\n Notifications.success('Service successfully updated', service.Name);\n $scope.cancelChanges({});\n initView();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to force update service', service.Name);\n })\n .finally(function final() {\n $scope.state.updateInProgress = false;\n });\n }\n\n function translateServiceArrays(service) {\n service.ServiceSecrets = service.Secrets ? service.Secrets.map(SecretHelper.flattenSecret) : [];\n service.ServiceConfigs = service.Configs ? service.Configs.map(ConfigHelper.flattenConfig) : [];\n service.EnvironmentVariables = envVarsUtils\n .parseArrayOfStrings(service.Env)\n .map((v) => ({ ...v, added: true }))\n .sort((v1, v2) => (v1.name > v2.name ? 1 : -1));\n service.LogDriverOpts = ServiceHelper.translateLogDriverOptsToKeyValue(service.LogDriverOpts);\n service.ServiceLabels = LabelHelper.fromLabelHashToKeyValue(service.Labels);\n service.ServiceContainerLabels = LabelHelper.fromLabelHashToKeyValue(service.ContainerLabels);\n service.ServiceMounts = angular.copy(service.Mounts);\n service.ServiceConstraints = ServiceHelper.translateConstraintsToKeyValue(service.Constraints);\n service.ServicePreferences = ServiceHelper.translatePreferencesToKeyValue(service.Preferences);\n service.Hosts = ServiceHelper.translateHostsEntriesToHostnameIP(service.Hosts);\n }\n\n function transformResources(service) {\n service.LimitNanoCPUs = service.LimitNanoCPUs / 1000000000 || 0;\n service.ReservationNanoCPUs = service.ReservationNanoCPUs / 1000000000 || 0;\n service.LimitMemoryBytes = service.LimitMemoryBytes / 1024 / 1024 || 0;\n service.ReservationMemoryBytes = service.ReservationMemoryBytes / 1024 / 1024 || 0;\n }\n\n function transformDurations(service) {\n service.RestartDelay = ServiceHelper.translateNanosToHumanDuration(service.RestartDelay) || '5s';\n service.RestartWindow = ServiceHelper.translateNanosToHumanDuration(service.RestartWindow) || '0s';\n service.UpdateDelay = ServiceHelper.translateNanosToHumanDuration(service.UpdateDelay) || '0s';\n service.StopGracePeriod = service.StopGracePeriod ? ServiceHelper.translateNanosToHumanDuration(service.StopGracePeriod) : '';\n }\n\n function initView() {\n var apiVersion = $scope.applicationState.endpoint.apiVersion;\n var agentProxy = $scope.applicationState.endpoint.mode.agentProxy;\n\n var service = null;\n ServiceService.service($transition$.params().id)\n .then(function success(data) {\n service = data;\n $scope.isUpdating = $scope.lastVersion >= service.Version;\n if (!$scope.isUpdating) {\n $scope.lastVersion = service.Version;\n }\n\n transformResources(service);\n translateServiceArrays(service);\n transformDurations(service);\n $scope.service = service;\n originalService = angular.copy(service);\n\n return $q.all({\n volumes: VolumeService.volumes(),\n tasks: TaskService.tasks({ service: [service.Name] }),\n containers: agentProxy ? ContainerService.containers() : [],\n nodes: NodeService.nodes(),\n secrets: apiVersion >= 1.25 ? SecretService.secrets() : [],\n configs: apiVersion >= 1.3 ? ConfigService.configs() : [],\n availableImages: ImageService.images(),\n availableLoggingDrivers: PluginService.loggingPlugins(apiVersion < 1.25),\n availableNetworks: NetworkService.networks(true, true, apiVersion >= 1.25),\n webhooks: WebhookService.webhooks(service.Id, EndpointProvider.endpointID()),\n });\n })\n .then(async function success(data) {\n $scope.nodes = data.nodes;\n $scope.configs = data.configs;\n $scope.secrets = data.secrets;\n $scope.availableImages = ImageService.getUniqueTagListFromImages(data.availableImages);\n $scope.availableLoggingDrivers = data.availableLoggingDrivers;\n $scope.availableVolumes = data.volumes;\n $scope.allowBindMounts = endpoint.SecuritySettings.allowBindMountsForRegularUsers;\n $scope.isAdmin = Authentication.isAdmin();\n $scope.availableNetworks = data.availableNetworks;\n $scope.swarmNetworks = _.filter($scope.availableNetworks, (network) => network.Scope === 'swarm');\n\n const serviceNetworks = _.uniqBy(_.concat($scope.service.Model.Spec.Networks || [], $scope.service.Model.Spec.TaskTemplate.Networks || []), 'Target');\n const networks = _.filter(\n _.map(serviceNetworks, ({ Target }) => _.find(data.availableNetworks, { Id: Target })),\n Boolean\n );\n\n if (_.some($scope.service.Ports, (port) => port.PublishMode === 'ingress')) {\n const ingressNetwork = _.find($scope.availableNetworks, (network) => network.Ingress);\n if (ingressNetwork) {\n networks.unshift(ingressNetwork);\n }\n }\n\n $scope.service.Networks = await Promise.all(\n _.map(networks, async (item) => {\n let addr = '';\n if (item.IPAM.Config.length) {\n addr = item.IPAM.Config[0].Subnet;\n } else {\n const network = await NetworkService.network(item.Id);\n addr = (network && network.IPAM && network.IPAM.Config && network.IPAM.Config.length && network.IPAM.Config[0].Subnet) || '';\n }\n return { Id: item.Id, Name: item.Name, Addr: addr, Editable: !item.Ingress };\n })\n );\n\n originalService.Networks = angular.copy($scope.service.Networks);\n\n if (data.webhooks.length > 0) {\n var webhook = data.webhooks[0];\n $scope.WebhookExists = true;\n $scope.webhookID = webhook.Id;\n $scope.webhookURL = WebhookHelper.returnWebhookUrl(webhook.Token);\n }\n\n var tasks = data.tasks;\n\n if (agentProxy) {\n var containers = data.containers;\n for (var i = 0; i < tasks.length; i++) {\n var task = tasks[i];\n TaskHelper.associateContainerToTask(task, containers);\n }\n }\n\n ServiceHelper.associateTasksToService(service, tasks);\n\n $scope.tasks = data.tasks;\n\n // Set max cpu value\n var maxCpus = 0;\n for (var n in data.nodes) {\n if (data.nodes[n].CPUs && data.nodes[n].CPUs > maxCpus) {\n maxCpus = data.nodes[n].CPUs;\n }\n }\n if (maxCpus > 0) {\n $scope.state.sliderMaxCpu = maxCpus / 1000000000;\n } else {\n $scope.state.sliderMaxCpu = 32;\n }\n\n // Default values\n $scope.state.addSecret = { override: false };\n\n $timeout(function () {\n $anchorScroll();\n });\n })\n .catch(function error(err) {\n $scope.secrets = [];\n $scope.configs = [];\n Notifications.error('Failure', err, 'Unable to retrieve service details');\n });\n }\n\n $scope.updateServiceAttribute = updateServiceAttribute;\n function updateServiceAttribute(service, name) {\n if (service[name] !== originalService[name] || !(name in originalService)) {\n service.hasChanges = true;\n }\n previousServiceValues.push(name);\n }\n\n $scope.filterNetworks = filterNetworks;\n function filterNetworks(networks, current) {\n return networks.filter((network) => !network.Ingress && (network.Id === current.Id || $scope.service.Networks.every((serviceNetwork) => network.Id !== serviceNetwork.Id)));\n }\n\n function updateServiceArray(service, name) {\n previousServiceValues.push(name);\n service.hasChanges = true;\n }\n\n initView();\n },\n]);\n","var path = 'app/docker/views/services/edit/includes/configs.html';\nvar html = \"
    = 1.3\\\" id=\\\"service-configs\\\" ng-submit=\\\"updateService(service)\\\">\\n \\n \\n \\n
    \\n Add a config:\\n \\n add config \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ config.Name }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    NamePath in containerUIDGIDMode
    \\n \\n {{ config.Uid }}{{ config.Gid }}{{ config.Mode }}\\n \\n
    No configs associated to this service.
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/services/edit/includes/constraints.html';\nvar html = \"
    \\n \\n \\n \\n \\n \\n

    There are no placement constraints for this service.

    \\n
    \\n 0\\\" classes=\\\"no-padding\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    NameOperatorValue
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/services/edit/includes/container-specs.html';\nvar html = \"
    \\n \\n \\n \\n \\n \\n \\n \\n {{ service.Command | command }}\\n \\n \\n \\n \\n {{ service.Arguments }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    CMD\\n

    \\n Command to execute.\\n

    \\n
    Args\\n

    \\n Arguments passed to command in container.\\n

    \\n
    User{{ service.User }}\\n

    \\n Username or UID.\\n

    \\n
    Working directory{{ service.Dir }}\\n

    \\n Working directory inside the container.\\n

    \\n
    Stop grace period{{ service.StopGracePeriod }}\\n

    \\n Time to wait before force killing a container (default none).\\n

    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/services/edit/includes/containerlabels.html';\nvar html = \"
    \\n \\n \\n \\n \\n \\n

    There are no container labels for this service.

    \\n
    \\n 0\\\" classes=\\\"no-padding\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    LabelValue
    \\n
    \\n name\\n \\n
    \\n
    \\n
    \\n value\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/services/edit/includes/environmentvariables.html';\nvar html = \"\\n \\n \\n \\n \\n \\n

    There are no environment variables for this service.

    \\n
    \\n 0\\\">\\n \\n \\n \\n
    \\n
    \\n \\n Apply changes\\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/services/edit/includes/hosts.html';\nvar html = \"
    \\n \\n \\n \\n \\n \\n

    The Hosts file has no extra entries.

    \\n
    \\n 0\\\" classes=\\\"no-padding\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    HostnameIP
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/services/edit/includes/image.html';\nvar html = \"
    \\n \\n \\n \\n
    \\n \\n \\n \\n
    \\n \\n

    Image modification is disabled while service is updating.

    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/services/edit/includes/logging.html';\nvar html = \"
    \\n \\n \\n \\n
    \\n Driver:\\n \\n \\n add logging driver option\\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    OptionValue
    \\n
    \\n name\\n \\n
    \\n
    \\n
    \\n value\\n \\n \\n \\n \\n
    \\n
    No options associated to this logging driver.
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/services/edit/includes/mounts.html';\nvar html = \"
    \\n \\n \\n \\n \\n \\n

    There are no mounts for this service.

    \\n
    \\n 0\\\" classes=\\\"no-padding\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    TypeSourceTargetRead onlyActions
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Source is required.
    \\n
    \\n \\n
    Target is required.
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/services/edit/includes/networks.html';\nvar html = \"
    \\n \\n \\n \\n \\n \\n

    This service is not connected to any networks.

    \\n
    \\n 0\\\" classes=\\\"no-padding\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    NameIDIP addressActions
    \\n \\n \\n \\n {{ network.Name }}\\n \\n {{ network.Id }}\\n \\n {{ network.Addr }}\\n \\n \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/services/edit/includes/placementPreferences.html';\nvar html = \"
    \\n \\n \\n \\n \\n \\n

    There are no placement preferences for this service.

    \\n
    \\n 0\\\" classes=\\\"no-padding\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    StrategyValue
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/services/edit/includes/ports.html';\nvar html = \"
    \\n \\n \\n \\n \\n \\n

    This service has no ports published.

    \\n
    \\n 0\\\" classes=\\\"no-padding\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Host portContainer portProtocolPublish modeActions
    \\n
    \\n host\\n \\n
    \\n
    \\n
    \\n container\\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/services/edit/includes/resources.html';\nvar html = \"
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n Memory reservation (MB)\\n \\n \\n \\n

    \\n Minimum memory available on a node to run a task (set to 0 for unlimited)\\n

    \\n
    \\n Memory limit (MB)\\n \\n \\n \\n

    \\n Maximum memory usage per task (set to 0 for unlimited)\\n

    \\n
    \\n
    \\n CPU reservation\\n
    \\n
    \\n \\n \\n

    \\n Minimum CPU available on a node to run a task\\n

    \\n
    \\n
    \\n CPU limit\\n
    \\n
    \\n \\n \\n

    \\n Maximum CPU usage per task\\n

    \\n
    \\n
    \\n \\n
    \\n
    \\n Apply changes\\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/services/edit/includes/restart.html';\nvar html = \"
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Restart condition\\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n

    \\n Condition for restart.\\n

    \\n
    Restart delay\\n \\n \\n

    \\n Delay between restart attempts expressed by a number followed by unit (ns|us|ms|s|m|h). Default value is 5s, 5 seconds.\\n

    \\n
    Restart max attempts\\n \\n \\n

    \\n Maximum attempts to restart a given task before giving up (default value is 0, which means unlimited).\\n

    \\n
    Restart window\\n \\n \\n

    \\n Time window to evaluate restart attempts expressed by a number followed by unit (ns|us|ms|s|m|h). Default value is 0 seconds, which is unbounded.\\n

    \\n
    \\n
    \\n \\n
    \\n
    \\n Apply changes\\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/services/edit/includes/secrets.html';\nvar html = \"
    = 1.25\\\" id=\\\"service-secrets\\\">\\n \\n \\n \\n
    \\n Add a secret:\\n \\n
    = 1.3 && state.addSecret.override\\\">\\n Target:\\n \\n
    \\n
    = 1.3\\\">\\n \\n \\n
    \\n add secret \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ secret.Name }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    NameFile nameUIDGIDMode
    {{ secret.FileName }}{{ secret.Uid }}{{ secret.Gid }}{{ secret.Mode }}\\n \\n
    No secrets associated to this service.
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/services/edit/includes/servicelabels.html';\nvar html = \"
    \\n \\n \\n \\n \\n \\n

    There are no labels for this service.

    \\n
    \\n 0\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n Label\\n \\n Value\\n
    \\n
    \\n name\\n \\n
    \\n
    \\n
    \\n value\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/services/edit/includes/tasks.html';\nvar html = \"
    0 && nodes\\\" id=\\\"service-tasks\\\">\\n = 1.30\\\"\\n agent-proxy=\\\"applicationState.endpoint.mode.agentProxy\\\"\\n >\\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/docker/views/services/edit/includes/updateconfig.html';\nvar html = \"
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n = 1.29\\\">\\n \\n \\n \\n \\n \\n
    Update Parallelism\\n \\n \\n

    \\n Maximum number of tasks to be updated simultaneously (0 to update all at once).\\n

    \\n
    Update Delay\\n \\n \\n

    \\n Amount of time between updates expressed by a number followed by unit (ns|us|ms|s|m|h). Example: 1m.\\n

    \\n
    Update Failure Action\\n
    \\n \\n \\n
    \\n
    \\n

    \\n Action taken on failure to start after update.\\n

    \\n
    Order\\n
    \\n \\n \\n
    \\n
    \\n

    \\n Operation order on failure.\\n

    \\n
    \\n
    \\n \\n
    \\n
    \\n Apply changes\\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import moment from 'moment';\n\nangular.module('portainer.docker').controller('ServiceLogsController', [\n '$scope',\n '$transition$',\n '$interval',\n 'ServiceService',\n 'Notifications',\n function ($scope, $transition$, $interval, ServiceService, Notifications) {\n $scope.state = {\n refreshRate: 3,\n lineCount: 100,\n sinceTimestamp: '',\n displayTimestamps: false,\n };\n\n $scope.changeLogCollection = function (logCollectionStatus) {\n if (!logCollectionStatus) {\n stopRepeater();\n } else {\n setUpdateRepeater();\n }\n };\n\n $scope.$on('$destroy', function () {\n stopRepeater();\n });\n\n function stopRepeater() {\n var repeater = $scope.repeater;\n if (angular.isDefined(repeater)) {\n $interval.cancel(repeater);\n repeater = null;\n }\n }\n\n function setUpdateRepeater() {\n var refreshRate = $scope.state.refreshRate;\n $scope.repeater = $interval(function () {\n ServiceService.logs($transition$.params().id, 1, 1, $scope.state.displayTimestamps ? 1 : 0, moment($scope.state.sinceTimestamp).unix(), $scope.state.lineCount)\n .then(function success(data) {\n $scope.logs = data;\n })\n .catch(function error(err) {\n stopRepeater();\n Notifications.error('Failure', err, 'Unable to retrieve service logs');\n });\n }, refreshRate * 1000);\n }\n\n function startLogPolling() {\n ServiceService.logs($transition$.params().id, 1, 1, $scope.state.displayTimestamps ? 1 : 0, moment($scope.state.sinceTimestamp).unix(), $scope.state.lineCount)\n .then(function success(data) {\n $scope.logs = data;\n setUpdateRepeater();\n })\n .catch(function error(err) {\n stopRepeater();\n Notifications.error('Failure', err, 'Unable to retrieve service logs');\n });\n }\n\n function initView() {\n ServiceService.service($transition$.params().id)\n .then(function success(data) {\n $scope.service = data;\n startLogPolling();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve service information');\n });\n }\n\n initView();\n },\n]);\n","angular.module('portainer.docker').controller('ServicesController', [\n '$q',\n '$scope',\n 'ServiceService',\n 'ServiceHelper',\n 'Notifications',\n 'TaskService',\n 'TaskHelper',\n 'NodeService',\n 'ContainerService',\n function ($q, $scope, ServiceService, ServiceHelper, Notifications, TaskService, TaskHelper, NodeService, ContainerService) {\n $scope.getServices = getServices;\n function getServices() {\n var agentProxy = $scope.applicationState.endpoint.mode.agentProxy;\n\n return $q\n .all({\n services: ServiceService.services(),\n tasks: TaskService.tasks(),\n containers: agentProxy ? ContainerService.containers(1) : [],\n nodes: NodeService.nodes(),\n })\n .then(function success(data) {\n var services = data.services;\n var tasks = data.tasks;\n\n if (agentProxy) {\n var containers = data.containers;\n for (var j = 0; j < tasks.length; j++) {\n var task = tasks[j];\n TaskHelper.associateContainerToTask(task, containers);\n }\n }\n\n for (var i = 0; i < services.length; i++) {\n var service = services[i];\n ServiceHelper.associateTasksToService(service, tasks);\n }\n\n $scope.nodes = data.nodes;\n $scope.tasks = tasks;\n $scope.services = services;\n })\n .catch(function error(err) {\n $scope.services = [];\n Notifications.error('Failure', err, 'Unable to retrieve services');\n });\n }\n\n function initView() {\n getServices();\n }\n\n initView();\n },\n]);\n","angular.module('portainer.docker').controller('SwarmController', [\n '$q',\n '$scope',\n 'SystemService',\n 'NodeService',\n 'Notifications',\n 'StateManager',\n 'Authentication',\n function ($q, $scope, SystemService, NodeService, Notifications, StateManager, Authentication) {\n $scope.info = {};\n $scope.docker = {};\n $scope.swarm = {};\n $scope.totalCPU = 0;\n $scope.totalMemory = 0;\n\n function extractSwarmInfo(info) {\n // Swarm info is available in SystemStatus object\n var systemStatus = info.SystemStatus;\n // Swarm strategy\n $scope.swarm[systemStatus[1][0]] = systemStatus[1][1];\n // Swarm filters\n $scope.swarm[systemStatus[2][0]] = systemStatus[2][1];\n // Swarm node count\n var nodes = systemStatus[0][1] === 'primary' ? systemStatus[3][1] : systemStatus[4][1];\n var node_count = parseInt(nodes, 10);\n $scope.swarm[systemStatus[3][0]] = node_count;\n\n $scope.swarm.Status = [];\n extractNodesInfo(systemStatus, node_count);\n }\n\n function extractNodesInfo(info, node_count) {\n // First information for node1 available at element #4 of SystemStatus if connected to a primary\n // If connected to a replica, information for node1 is available at element #5\n // The next 10 elements are information related to the node\n var node_offset = info[0][1] === 'primary' ? 4 : 5;\n for (let i = 0; i < node_count; i++) {\n extractNodeInfo(info, node_offset);\n node_offset += 9;\n }\n }\n\n function extractNodeInfo(info, offset) {\n var node = {};\n node.name = info[offset][0];\n node.ip = info[offset][1];\n node.Id = info[offset + 1][1];\n node.status = info[offset + 2][1];\n node.containers = info[offset + 3][1];\n node.cpu = info[offset + 4][1].split('/')[1];\n node.memory = info[offset + 5][1].split('/')[1];\n node.labels = info[offset + 6][1];\n node.version = info[offset + 8][1];\n $scope.swarm.Status.push(node);\n }\n\n function processTotalCPUAndMemory(nodes) {\n var CPU = 0,\n memory = 0;\n angular.forEach(nodes, function (node) {\n CPU += node.CPUs;\n memory += node.Memory;\n });\n $scope.totalCPU = CPU / 1000000000;\n $scope.totalMemory = memory;\n }\n\n $scope.getNodes = getNodes;\n function getNodes() {\n var provider = $scope.applicationState.endpoint.mode.provider;\n if (provider === 'DOCKER_SWARM_MODE') {\n NodeService.nodes()\n .then(function (data) {\n var nodes = data;\n processTotalCPUAndMemory(nodes);\n $scope.nodes = nodes;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve cluster details');\n });\n }\n }\n\n function initView() {\n $scope.isAdmin = Authentication.isAdmin();\n\n var provider = $scope.applicationState.endpoint.mode.provider;\n $q.all({\n version: SystemService.version(),\n info: SystemService.info(),\n })\n .then(function success(data) {\n $scope.docker = data.version;\n $scope.info = data.info;\n if (provider === 'DOCKER_SWARM_MODE') {\n getNodes();\n } else {\n extractSwarmInfo(data.info);\n }\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve cluster details');\n });\n }\n\n initView();\n },\n]);\n","angular.module('portainer.docker').controller('SwarmVisualizerController', [\n '$q',\n '$scope',\n '$document',\n '$interval',\n 'NodeService',\n 'ServiceService',\n 'TaskService',\n 'Notifications',\n 'LocalStorage',\n function ($q, $scope, $document, $interval, NodeService, ServiceService, TaskService, Notifications, LocalStorage) {\n $scope.state = {\n ShowInformationPanel: true,\n DisplayOnlyRunningTasks: false,\n DisplayNodeLabels: false,\n refreshRate: '5',\n };\n\n $scope.$on('$destroy', function () {\n stopRepeater();\n });\n\n $scope.changeShowInformationPanel = function (value) {\n $scope.state.ShowInformationPanel = value;\n LocalStorage.storeSwarmVisualizerSettings('show_info_panel', value);\n };\n\n $scope.changeDisplayOnlyRunningTasks = function () {\n var value = $scope.state.DisplayOnlyRunningTasks;\n LocalStorage.storeSwarmVisualizerSettings('display_only_running_tasks', value);\n };\n\n $scope.changeDisplayNodeLabels = function () {\n var value = $scope.state.DisplayNodeLabels;\n LocalStorage.storeSwarmVisualizerSettings('display_node_labels', value);\n };\n\n $scope.changeUpdateRepeater = function () {\n stopRepeater();\n setUpdateRepeater();\n $('#refreshRateChange').show();\n $('#refreshRateChange').fadeOut(1500);\n LocalStorage.storeSwarmVisualizerSettings('refresh_rate', $scope.state.refreshRate);\n };\n\n function stopRepeater() {\n var repeater = $scope.repeater;\n if (angular.isDefined(repeater)) {\n $interval.cancel(repeater);\n repeater = null;\n }\n }\n\n function setUpdateRepeater() {\n var refreshRate = $scope.state.refreshRate;\n $scope.repeater = $interval(function () {\n $q.all({\n nodes: NodeService.nodes(),\n services: ServiceService.services(),\n tasks: TaskService.tasks(),\n })\n .then(function success(data) {\n var nodes = data.nodes;\n $scope.nodes = nodes;\n var services = data.services;\n $scope.services = services;\n var tasks = data.tasks;\n $scope.tasks = tasks;\n prepareVisualizerData(nodes, services, tasks);\n })\n .catch(function error(err) {\n stopRepeater();\n Notifications.error('Failure', err, 'Unable to retrieve cluster information');\n });\n }, refreshRate * 1000);\n }\n\n function assignServiceInfo(services, tasks) {\n for (var i = 0; i < services.length; i++) {\n var service = services[i];\n\n for (var j = 0; j < tasks.length; j++) {\n var task = tasks[j];\n\n if (task.ServiceId === service.Id) {\n task.ServiceName = service.Name;\n }\n }\n }\n }\n\n function assignTasksToNode(nodes, tasks) {\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n node.Tasks = [];\n\n for (var j = 0; j < tasks.length; j++) {\n var task = tasks[j];\n\n if (task.NodeId === node.Id) {\n node.Tasks.push(task);\n }\n }\n }\n }\n\n function prepareVisualizerData(nodes, services, tasks) {\n var visualizerData = {};\n\n assignServiceInfo(services, tasks);\n assignTasksToNode(nodes, tasks);\n\n visualizerData.nodes = nodes;\n $scope.visualizerData = visualizerData;\n }\n\n function loadState() {\n var showInfoPanel = LocalStorage.getSwarmVisualizerSettings('show_info_panel');\n if (showInfoPanel !== undefined && showInfoPanel !== null) $scope.state.ShowInformationPanel = showInfoPanel;\n\n var displayOnlyRunningTasks = LocalStorage.getSwarmVisualizerSettings('display_only_running_tasks');\n if (displayOnlyRunningTasks !== undefined && displayOnlyRunningTasks !== null) $scope.state.DisplayOnlyRunningTasks = displayOnlyRunningTasks;\n\n var displayNodeLabels = LocalStorage.getSwarmVisualizerSettings('display_node_labels');\n if (displayNodeLabels !== undefined && displayNodeLabels !== null) $scope.state.DisplayNodeLabels = displayNodeLabels;\n\n var refreshRate = LocalStorage.getSwarmVisualizerSettings('refresh_rate');\n if (refreshRate !== undefined && refreshRate !== null) $scope.state.refreshRate = refreshRate;\n }\n\n function initView() {\n $q.all({\n nodes: NodeService.nodes(),\n services: ServiceService.services(),\n tasks: TaskService.tasks(),\n })\n .then(function success(data) {\n var nodes = data.nodes;\n $scope.nodes = nodes;\n var services = data.services;\n $scope.services = services;\n var tasks = data.tasks;\n $scope.tasks = tasks;\n prepareVisualizerData(nodes, services, tasks);\n setUpdateRepeater();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to initialize cluster visualizer');\n });\n\n loadState();\n }\n\n initView();\n },\n]);\n","angular.module('portainer.docker').controller('TaskController', [\n '$scope',\n '$transition$',\n 'TaskService',\n 'ServiceService',\n 'Notifications',\n function ($scope, $transition$, TaskService, ServiceService, Notifications) {\n function initView() {\n TaskService.task($transition$.params().id)\n .then(function success(data) {\n var task = data;\n $scope.task = task;\n return ServiceService.service(task.ServiceId);\n })\n .then(function success(data) {\n var service = data;\n $scope.service = service;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve task details');\n });\n }\n\n initView();\n },\n]);\n","import moment from 'moment';\n\nangular.module('portainer.docker').controller('TaskLogsController', [\n '$scope',\n '$transition$',\n '$interval',\n 'TaskService',\n 'ServiceService',\n 'Notifications',\n function ($scope, $transition$, $interval, TaskService, ServiceService, Notifications) {\n $scope.state = {\n refreshRate: 3,\n lineCount: 100,\n sinceTimestamp: '',\n displayTimestamps: false,\n };\n\n $scope.changeLogCollection = function (logCollectionStatus) {\n if (!logCollectionStatus) {\n stopRepeater();\n } else {\n setUpdateRepeater();\n }\n };\n\n $scope.$on('$destroy', function () {\n stopRepeater();\n });\n\n function stopRepeater() {\n var repeater = $scope.repeater;\n if (angular.isDefined(repeater)) {\n $interval.cancel(repeater);\n repeater = null;\n }\n }\n\n function setUpdateRepeater() {\n var refreshRate = $scope.state.refreshRate;\n $scope.repeater = $interval(function () {\n TaskService.logs($transition$.params().id, 1, 1, $scope.state.displayTimestamps ? 1 : 0, moment($scope.state.sinceTimestamp).unix(), $scope.state.lineCount)\n .then(function success(data) {\n $scope.logs = data;\n })\n .catch(function error(err) {\n stopRepeater();\n Notifications.error('Failure', err, 'Unable to retrieve task logs');\n });\n }, refreshRate * 1000);\n }\n\n function startLogPolling() {\n TaskService.logs($transition$.params().id, 1, 1, $scope.state.displayTimestamps ? 1 : 0, moment($scope.state.sinceTimestamp).unix(), $scope.state.lineCount)\n .then(function success(data) {\n $scope.logs = data;\n setUpdateRepeater();\n })\n .catch(function error(err) {\n stopRepeater();\n Notifications.error('Failure', err, 'Unable to retrieve task logs');\n });\n }\n\n function initView() {\n TaskService.task($transition$.params().id)\n .then(function success(data) {\n var task = data;\n $scope.task = task;\n return ServiceService.service(task.ServiceId);\n })\n .then(function success(data) {\n var service = data;\n $scope.service = service;\n startLogPolling();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve task details');\n });\n }\n\n initView();\n },\n]);\n","angular.module('portainer.docker').controller('BrowseVolumeController', [\n '$scope',\n '$transition$',\n 'StateManager',\n function ($scope, $transition$, StateManager) {\n function initView() {\n $scope.volumeId = $transition$.params().id;\n $scope.nodeName = $transition$.params().nodeName;\n $scope.agentApiVersion = StateManager.getAgentApiVersion();\n }\n\n initView();\n },\n]);\n","import { AccessControlFormData } from '../../../../portainer/components/accessControlForm/porAccessControlFormModel';\nimport { VolumesNFSFormData } from '../../../components/volumesNFSForm/volumesNFSFormModel';\nimport { VolumesCIFSFormData } from '../../../components/volumesCIFSForm/volumesCifsFormModel';\n\nangular.module('portainer.docker').controller('CreateVolumeController', [\n '$q',\n '$scope',\n '$state',\n 'VolumeService',\n 'PluginService',\n 'ResourceControlService',\n 'Authentication',\n 'Notifications',\n 'FormValidator',\n 'HttpRequestHelper',\n function ($q, $scope, $state, VolumeService, PluginService, ResourceControlService, Authentication, Notifications, FormValidator, HttpRequestHelper) {\n $scope.formValues = {\n Driver: 'local',\n DriverOptions: [],\n AccessControlData: new AccessControlFormData(),\n NodeName: null,\n NFSData: new VolumesNFSFormData(),\n CIFSData: new VolumesCIFSFormData(),\n };\n\n $scope.state = {\n formValidationError: '',\n actionInProgress: false,\n };\n\n $scope.availableVolumeDrivers = [];\n\n $scope.addDriverOption = function () {\n $scope.formValues.DriverOptions.push({ name: '', value: '' });\n };\n\n $scope.removeDriverOption = function (index) {\n $scope.formValues.DriverOptions.splice(index, 1);\n };\n\n function validateForm(accessControlData, isAdmin) {\n $scope.state.formValidationError = '';\n var error = '';\n error = FormValidator.validateAccessControl(accessControlData, isAdmin);\n\n if (error) {\n $scope.state.formValidationError = error;\n return false;\n }\n return true;\n }\n\n function prepareCIFSConfiguration(driverOptions) {\n const data = $scope.formValues.CIFSData;\n\n driverOptions.push({ name: 'type', value: 'cifs' });\n\n let share = data.share.replace('\\\\', '/');\n if (share[0] !== '/') {\n share = '/' + share;\n }\n const device = '//' + data.serverAddress + share;\n driverOptions.push({ name: 'device', value: device });\n\n const versionNumber = data.versionsNumber[data.versions.indexOf(data.version)];\n const options = 'username=' + data.username + ',password=' + data.password + ',vers=' + versionNumber;\n driverOptions.push({ name: 'o', value: options });\n }\n\n function prepareNFSConfiguration(driverOptions) {\n var data = $scope.formValues.NFSData;\n\n driverOptions.push({ name: 'type', value: 'nfs' });\n\n var options = 'addr=' + data.serverAddress + ',' + data.options;\n if (data.version === 'NFS4') {\n options = options + ',nfsvers=4';\n }\n driverOptions.push({ name: 'o', value: options });\n\n var mountPoint = data.mountPoint[0] === ':' ? data.mountPoint : ':' + data.mountPoint;\n driverOptions.push({ name: 'device', value: mountPoint });\n }\n\n $scope.create = function () {\n var name = $scope.formValues.Name;\n var driver = $scope.formValues.Driver;\n var driverOptions = $scope.formValues.DriverOptions;\n var storidgeProfile = $scope.formValues.StoridgeProfile;\n\n if (driver === 'cio:latest' && storidgeProfile) {\n driverOptions.push({ name: 'profile', value: storidgeProfile.Name });\n }\n\n if ($scope.formValues.NFSData.useNFS) {\n prepareNFSConfiguration(driverOptions);\n }\n\n if ($scope.formValues.CIFSData.useCIFS) {\n prepareCIFSConfiguration(driverOptions);\n }\n\n var volumeConfiguration = VolumeService.createVolumeConfiguration(name, driver, driverOptions);\n var accessControlData = $scope.formValues.AccessControlData;\n var userDetails = Authentication.getUserDetails();\n var isAdmin = Authentication.isAdmin();\n\n if (!validateForm(accessControlData, isAdmin)) {\n return;\n }\n\n var nodeName = $scope.formValues.NodeName;\n HttpRequestHelper.setPortainerAgentTargetHeader(nodeName);\n\n $scope.state.actionInProgress = true;\n VolumeService.createVolume(volumeConfiguration)\n .then(function success(data) {\n const userId = userDetails.ID;\n const resourceControl = data.ResourceControl;\n return ResourceControlService.applyResourceControl(userId, accessControlData, resourceControl);\n })\n .then(function success() {\n Notifications.success('Volume successfully created');\n $state.go('docker.volumes', {}, { reload: true });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'An error occured during volume creation');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n\n function initView() {\n var apiVersion = $scope.applicationState.endpoint.apiVersion;\n\n PluginService.volumePlugins(apiVersion < 1.25)\n .then(function success(data) {\n $scope.availableVolumeDrivers = data;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve volume drivers');\n });\n }\n\n initView();\n },\n]);\n","angular.module('portainer.docker').controller('VolumeController', [\n '$scope',\n '$state',\n '$transition$',\n '$q',\n 'ModalService',\n 'VolumeService',\n 'ContainerService',\n 'Notifications',\n 'HttpRequestHelper',\n 'StoridgeVolumeService',\n 'StoridgeSnapshotService',\n function ($scope, $state, $transition$, $q, ModalService, VolumeService, ContainerService, Notifications, HttpRequestHelper, StoridgeVolumeService, StoridgeSnapshotService) {\n $scope.storidgeSnapshots = [];\n $scope.storidgeVolume = {};\n\n $scope.removeSnapshot = function (selectedItems) {\n ModalService.confirm({\n title: 'Are you sure?',\n message: 'Do you want really want to remove this snapshot?',\n buttons: {\n confirm: {\n label: 'Remove',\n className: 'btn-danger',\n },\n },\n callback: function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n var actionCount = selectedItems.length;\n angular.forEach(selectedItems, function (item) {\n StoridgeSnapshotService.remove(item.Id)\n .then(function success() {\n Notifications.success('Snapshot successfully removed', item.Id);\n var index = $scope.storidgeSnapshots.indexOf(item);\n $scope.storidgeSnapshots.splice(index, 1);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove snapshot');\n })\n .finally(function final() {\n --actionCount;\n if (actionCount === 0) {\n $state.reload();\n }\n });\n });\n },\n });\n };\n\n $scope.removeVolume = function removeVolume() {\n ModalService.confirmDeletion('Do you want to remove this volume?', (confirmed) => {\n if (confirmed) {\n VolumeService.remove($scope.volume)\n .then(function success() {\n Notifications.success('Volume successfully removed', $transition$.params().id);\n $state.go('docker.volumes', {});\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove volume');\n });\n }\n });\n };\n\n function getVolumeDataFromContainer(container, volumeId) {\n return container.Mounts.find(function (volume) {\n return volume.Name === volumeId;\n });\n }\n\n function initView() {\n HttpRequestHelper.setPortainerAgentTargetHeader($transition$.params().nodeName);\n\n VolumeService.volume($transition$.params().id)\n .then(function success(data) {\n var volume = data;\n $scope.volume = volume;\n var containerFilter = { volume: [volume.Id] };\n\n $scope.isCioDriver = volume.Driver.includes('cio');\n if ($scope.isCioDriver) {\n return $q.all({\n containers: ContainerService.containers(1, containerFilter),\n storidgeVolume: StoridgeVolumeService.volume($transition$.params().id),\n });\n } else {\n return ContainerService.containers(1, containerFilter);\n }\n })\n .then(function success(data) {\n var dataContainers = $scope.isCioDriver ? data.containers : data;\n\n var containers = dataContainers.map(function (container) {\n container.volumeData = getVolumeDataFromContainer(container, $scope.volume.Id);\n return container;\n });\n $scope.containersUsingVolume = containers;\n\n if ($scope.isCioDriver) {\n $scope.storidgeVolume = data.storidgeVolume;\n if ($scope.storidgeVolume.SnapshotEnabled) {\n return StoridgeSnapshotService.snapshots(data.storidgeVolume.Vdisk);\n }\n }\n })\n .then(function success(data) {\n $scope.storidgeSnapshots = data;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve volume details');\n });\n }\n\n initView();\n },\n]);\n","angular.module('portainer.docker').controller('VolumesController', [\n '$q',\n '$scope',\n '$state',\n 'VolumeService',\n 'ServiceService',\n 'VolumeHelper',\n 'Notifications',\n 'HttpRequestHelper',\n 'EndpointProvider',\n 'Authentication',\n 'ModalService',\n 'endpoint',\n function ($q, $scope, $state, VolumeService, ServiceService, VolumeHelper, Notifications, HttpRequestHelper, EndpointProvider, Authentication, ModalService, endpoint) {\n $scope.removeAction = function (selectedItems) {\n ModalService.confirmDeletion('Do you want to remove the selected volume(s)?', (confirmed) => {\n if (confirmed) {\n var actionCount = selectedItems.length;\n angular.forEach(selectedItems, function (volume) {\n HttpRequestHelper.setPortainerAgentTargetHeader(volume.NodeName);\n VolumeService.remove(volume)\n .then(function success() {\n Notifications.success('Volume successfully removed', volume.Id);\n var index = $scope.volumes.indexOf(volume);\n $scope.volumes.splice(index, 1);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove volume');\n })\n .finally(function final() {\n --actionCount;\n if (actionCount === 0) {\n $state.reload();\n }\n });\n });\n }\n });\n };\n\n $scope.offlineMode = false;\n\n $scope.getVolumes = getVolumes;\n function getVolumes() {\n var endpointProvider = $scope.applicationState.endpoint.mode.provider;\n var endpointRole = $scope.applicationState.endpoint.mode.role;\n\n $q.all({\n attached: VolumeService.volumes({ filters: { dangling: ['false'] } }),\n dangling: VolumeService.volumes({ filters: { dangling: ['true'] } }),\n services: endpointProvider === 'DOCKER_SWARM_MODE' && endpointRole === 'MANAGER' ? ServiceService.services() : [],\n })\n .then(function success(data) {\n var services = data.services;\n $scope.offlineMode = EndpointProvider.offlineMode();\n $scope.volumes = data.attached\n .map(function (volume) {\n volume.dangling = false;\n return volume;\n })\n .concat(\n data.dangling.map(function (volume) {\n volume.dangling = true;\n if (VolumeHelper.isVolumeUsedByAService(volume, services)) {\n volume.dangling = false;\n }\n return volume;\n })\n );\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve volumes');\n });\n }\n\n function initView() {\n getVolumes();\n\n $scope.showBrowseAction = $scope.applicationState.endpoint.mode.agentProxy && (Authentication.isAdmin() || endpoint.SecuritySettings.allowVolumeBrowserForRegularUsers);\n }\n\n initView();\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./associatedEndpointsDatatable.html');\n\nimport angular from 'angular';\n\nimport { AssociatedEndpointsDatatableController } from './associatedEndpointsDatatableController';\n\nangular.module('portainer.edge').component('associatedEndpointsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: AssociatedEndpointsDatatableController,\n bindings: {\n titleText: '@',\n titleIcon: '@',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n retrievePage: '<',\n updateKey: '<',\n },\n});\n","var path = 'app/edge/components/associated-endpoints-datatable/associatedEndpointsDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Name\\n \\n \\n \\n \\n \\n Group\\n \\n \\n \\n
    \\n {{ item.Name }}\\n {{ item.GroupName }}
    Loading...
    No endpoint available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./edgeGroupsSelector.html');\n\nimport angular from 'angular';\n\nangular.module('portainer.edge').component('edgeGroupsSelector', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n model: '=',\n items: '<',\n },\n});\n","var path = 'app/edge/components/edge-groups-selector/edgeGroupsSelector.html';\nvar html = \"\\n \\n \\n {{ $item.Name }}\\n \\n \\n \\n \\n {{ item.Name }}\\n \\n \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./edgeJobForm.html');\n\nimport angular from 'angular';\n\nimport { EdgeJobFormController } from './edgeJobFormController';\n\nangular.module('portainer.edge').component('edgeJobForm', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EdgeJobFormController,\n bindings: {\n model: '=',\n groups: '<',\n tags: '<',\n addLabelAction: '<',\n removeLabelAction: '<',\n formAction: '<',\n formActionLabel: '@',\n actionInProgress: '<',\n isEditorDirty: '=',\n },\n});\n","var path = 'app/edge/components/edge-job-form/edgeJobForm.html';\nvar html = \"
    \\n
    \\n Edge job configuration\\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n

    Allowed characters are: [a-zA-Z0-9_.-]

    \\n
    \\n
    \\n
    \\n \\n \\n \\n
    \\n Edge job configuration\\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n Time should be set according to the chosen endpoints' timezone.\\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n Time should be set according to the chosen endpoints' timezone.\\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n

    This field format is invalid.

    \\n
    \\n
    \\n
    \\n
    \\n \\n\\n \\n
    \\n
    \\n Job content\\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n Web editor\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n Upload\\n
    \\n
    \\n \\n You can upload a script file from your computer.\\n \\n
    \\n
    \\n
    \\n \\n \\n {{ $ctrl.model.File.name }}\\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n Target endpoints\\n
    \\n \\n \\n \\n \\n
    \\n Actions\\n
    \\n
    \\n
    \\n \\n {{ $ctrl.formActionLabel }}\\n In progress...\\n \\n \\n {{ $ctrl.state.formValidationError }}\\n \\n
    \\n
    \\n \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./edgeJobResultsDatatable.html');\n\nimport angular from 'angular';\n\nimport { EdgeJobResultsDatatableController } from './edgeJobResultsDatatableController';\nimport './edgeJobResultsDatatable.css';\n\nangular.module('portainer.edge').component('edgeJobResultsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EdgeJobResultsDatatableController,\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n onDownloadLogsClick: '<',\n onCollectLogsClick: '<',\n onClearLogsClick: '<',\n refreshCallback: '<',\n },\n});\n","var path = 'app/edge/components/edge-job-results-datatable/edgeJobResultsDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    \\n \\n {{ $ctrl.titleText }}\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n Endpoint\\n \\n \\n Actions\\n
    \\n {{ item.Endpoint.Name }}\\n \\n \\n \\n \\n \\n Logs marked for collection, please wait until the logs are available.\\n \\n
    Loading...
    No result available.
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./edgeJobsDatatable.html');\n\nimport angular from 'angular';\n\nangular.module('portainer.edge').component('edgeJobsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n },\n});\n","var path = 'app/edge/components/edge-jobs-datatable/edgeJobsDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Cron expression\\n \\n \\n \\n \\n \\n Created\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ item.Name }}\\n \\n {{ item.CronExpression }}\\n {{ item.Created | getisodatefromtimestamp }}
    Loading...
    No Edge job available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./edgeStackEndpointsDatatable.html');\n\nimport angular from 'angular';\n\nimport { EdgeStackEndpointsDatatableController } from './edgeStackEndpointsDatatableController';\n\nangular.module('portainer.edge').component('edgeStackEndpointsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EdgeStackEndpointsDatatableController,\n bindings: {\n titleText: '@',\n titleIcon: '@',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n retrievePage: '<',\n },\n});\n","var path = 'app/edge/components/edge-stack-endpoints-datatable/edgeStackEndpointsDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Name\\n \\n \\n \\n \\n \\n Status\\n \\n \\n \\n \\n \\n Error\\n \\n \\n \\n
    {{ item.Name }}{{ $ctrl.statusMap[item.Status.Type] || 'Pending' }}{{ item.Status.Error ? item.Status.Error : '-' }}
    Loading...
    No endpoint available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./edgeStackStatus.html');\n\nimport angular from 'angular';\n\nimport { EdgeStackStatusController } from './edgeStackStatusController';\nimport './edgeStackStatus.css';\n\nangular.module('portainer.edge').component('edgeStackStatus', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EdgeStackStatusController,\n bindings: {\n stackStatus: '<',\n },\n});\n","var path = 'app/edge/components/edge-stack-status/edgeStackStatus.html';\nvar html = \"{{ $ctrl.status.acknowledged || 0 }}\\n{{ $ctrl.status.ok || 0 }}\\n{{ $ctrl.status.error || 0 }}\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./edgeStacksDatatable.html');\n\nimport angular from 'angular';\n\nangular.module('portainer.edge').component('edgeStacksDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n refreshCallback: '<',\n },\n});\n","var path = 'app/edge/components/edge-stacks-datatable/edgeStacksDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    \\n \\n Edge Stacks\\n
    \\n
    \\n \\n Settings \\n
    \\n
    \\n
    \\n Table settings\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n Status\\n \\n \\n Creation Date\\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n {{ item.Name }}\\n \\n {{ item.CreationDate | getisodatefromtimestamp }}
    Loading...
    \\n No stack available.\\n
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./editEdgeStackForm.html');\n\nimport angular from 'angular';\n\nimport { EditEdgeStackFormController } from './editEdgeStackFormController';\n\nangular.module('portainer.edge').component('editEdgeStackForm', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EditEdgeStackFormController,\n bindings: {\n model: '<',\n actionInProgress: '<',\n submitAction: '<',\n edgeGroups: '<',\n isEditorDirty: '=',\n },\n});\n","var path = 'app/edge/components/edit-edge-stack-form/editEdgeStackForm.html';\nvar html = \"
    \\n
    \\n Edge Groups\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n\\n \\n
    \\n Web editor\\n
    \\n
    \\n \\n You can get more information about Compose file format in the\\n \\n official documentation\\n \\n .\\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n\\n
    \\n Options\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n \\n
    \\n Actions\\n
    \\n
    \\n
    \\n \\n Update the stack\\n Update in progress...\\n \\n
    \\n
    \\n \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./groupForm.html');\n\nimport angular from 'angular';\n\nimport { EdgeGroupFormController } from './groupFormController';\n\nangular.module('portainer.edge').component('edgeGroupForm', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EdgeGroupFormController,\n bindings: {\n model: '<',\n groups: '<',\n tags: '<',\n formActionLabel: '@',\n formAction: '<',\n actionInProgress: '<',\n loaded: '<',\n pageType: '@',\n },\n});\n","var path = 'app/edge/components/group-form/groupForm.html';\nvar html = \"
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    \\n \\n This field is required.\\n

    \\n
    \\n
    \\n
    \\n\\n
    \\n Group type\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\\n \\n
    \\n
    \\n \\n
    \\n Associated endpoints\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    No Edge endpoints are available. Head over to the Endpoints view to add endpoints.
    \\n
    \\n
    \\n \\n\\n \\n
    \\n
    \\n Tags\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n No tags available. Head over to the Tags view to add tags\\n
    \\n
    \\n
    \\n Associated endpoints by tags\\n
    \\n
    \\n \\n
    \\n
    \\n \\n\\n \\n
    \\n Actions\\n
    \\n
    \\n
    \\n \\n {{ $ctrl.formActionLabel }}\\n In progress...\\n \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./groupsDatatable.html');\n\nimport angular from 'angular';\n\nimport { EdgeGroupsDatatableController } from './groupsDatatableController';\n\nangular.module('portainer.edge').component('edgeGroupsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EdgeGroupsDatatableController,\n bindings: {\n dataset: '<',\n titleIcon: '@',\n tableKey: '@',\n orderBy: '@',\n removeAction: '<',\n updateAction: '<',\n reverseOrder: '<',\n },\n});\n","var path = 'app/edge/components/groups-datatable/groupsDatatable.html';\nvar html = \"
    \\n \\n \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Endpoints Count\\n \\n \\n \\n \\n \\n Group Type\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ item.Name }}\\n in use\\n {{ item.Endpoints.length }}{{ item.Dynamic ? 'Dynamic' : 'Static' }}
    Loading...
    \\n No Edge group available.\\n
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\n\nangular.module('portainer.edge').factory('EdgeGroups', function EdgeGroupsFactory($resource, API_ENDPOINT_EDGE_GROUPS) {\n return $resource(\n API_ENDPOINT_EDGE_GROUPS + '/:id/:action',\n {},\n {\n create: { method: 'POST', ignoreLoadingBar: true },\n query: { method: 'GET', isArray: true },\n get: { method: 'GET', params: { id: '@id' } },\n update: { method: 'PUT', params: { id: '@Id' } },\n remove: { method: 'DELETE', params: { id: '@id' } },\n }\n );\n});\n","angular.module('portainer.edge').factory('EdgeJobResults', EdgeJobResultsFactory);\n\nfunction EdgeJobResultsFactory($resource, API_ENDPOINT_EDGE_JOBS) {\n return $resource(\n API_ENDPOINT_EDGE_JOBS + '/:id/tasks/:taskId/:action',\n {},\n {\n query: { method: 'GET', isArray: true, params: { id: '@id' } },\n logFile: { method: 'GET', params: { id: '@id', taskId: '@taskId', action: 'logs' } },\n clearLogs: { method: 'DELETE', params: { id: '@id', taskId: '@taskId', action: 'logs' } },\n collectLogs: { method: 'POST', params: { id: '@id', taskId: '@taskId', action: 'logs' } },\n }\n );\n}\n","angular.module('portainer.edge').factory('EdgeJobs', EdgeJobsFactory);\n\nfunction EdgeJobsFactory($resource, API_ENDPOINT_EDGE_JOBS) {\n return $resource(\n API_ENDPOINT_EDGE_JOBS + '/:id/:action',\n {},\n {\n create: { method: 'POST' },\n query: { method: 'GET', isArray: true },\n get: { method: 'GET', params: { id: '@id' } },\n update: { method: 'PUT', params: { id: '@id' } },\n remove: { method: 'DELETE', params: { id: '@id' } },\n file: { method: 'GET', params: { id: '@id', action: 'file' } },\n tasks: { method: 'GET', isArray: true, params: { id: '@id', action: 'tasks' } },\n }\n );\n}\n","import angular from 'angular';\n\nangular.module('portainer.edge').factory('EdgeStacks', function EdgeStacksFactory($resource, API_ENDPOINT_EDGE_STACKS) {\n return $resource(\n API_ENDPOINT_EDGE_STACKS + '/:id/:action',\n {},\n {\n create: { method: 'POST', ignoreLoadingBar: true },\n query: { method: 'GET', isArray: true },\n get: { method: 'GET', params: { id: '@id' } },\n update: { method: 'PUT', params: { id: '@id' } },\n remove: { method: 'DELETE', params: { id: '@id' } },\n file: { method: 'GET', params: { id: '@id', action: 'file' } },\n }\n );\n});\n","import angular from 'angular';\n\nangular.module('portainer.edge').factory('EdgeTemplates', function EdgeStacksFactory($resource, API_ENDPOINT_EDGE_TEMPLATES) {\n return $resource(\n API_ENDPOINT_EDGE_TEMPLATES,\n {},\n {\n query: { method: 'GET', isArray: true },\n }\n );\n});\n","import angular from 'angular';\n\nangular.module('portainer.edge').factory('EdgeGroupService', function EdgeGroupServiceFactory(EdgeGroups) {\n var service = {};\n\n service.group = function group(groupId) {\n return EdgeGroups.get({ id: groupId }).$promise;\n };\n\n service.groups = function groups() {\n return EdgeGroups.query({}).$promise;\n };\n\n service.remove = function remove(groupId) {\n return EdgeGroups.remove({ id: groupId }).$promise;\n };\n\n service.create = function create(group) {\n return EdgeGroups.create(group).$promise;\n };\n\n service.update = function update(group) {\n return EdgeGroups.update(group).$promise;\n };\n\n return service;\n});\n","import angular from 'angular';\n\nimport { ScheduleCreateRequest, ScheduleUpdateRequest } from 'Portainer/models/schedule';\n\nfunction EdgeJobService(EdgeJobs, EdgeJobResults, FileUploadService) {\n var service = {};\n\n service.edgeJob = edgeJob;\n async function edgeJob(edgeJobId) {\n try {\n return await EdgeJobs.get({ id: edgeJobId }).$promise;\n } catch (err) {\n throw { msg: 'Unable to retrieve edgeJob', err: err };\n }\n }\n\n service.edgeJobs = edgeJobs;\n async function edgeJobs() {\n try {\n return await EdgeJobs.query().$promise;\n } catch (err) {\n throw { msg: 'Unable to retrieve edgeJobs', err: err };\n }\n }\n\n service.jobResults = jobResults;\n async function jobResults(edgeJobId) {\n try {\n return await EdgeJobResults.query({ id: edgeJobId }).$promise;\n } catch (err) {\n throw { msg: 'Unable to retrieve results associated to the edgeJob', err: err };\n }\n }\n\n service.logFile = logFile;\n function logFile(id, taskId) {\n return EdgeJobResults.logFile({ id, taskId }).$promise;\n }\n\n service.collectLogs = collectLogs;\n function collectLogs(id, taskId) {\n return EdgeJobResults.collectLogs({ id, taskId }).$promise;\n }\n\n service.clearLogs = clearLogs;\n function clearLogs(id, taskId) {\n return EdgeJobResults.clearLogs({ id, taskId }).$promise;\n }\n\n service.createEdgeJobFromFileContent = function (model) {\n var payload = new ScheduleCreateRequest(model);\n return EdgeJobs.create({ method: 'string' }, payload).$promise;\n };\n\n service.createEdgeJobFromFileUpload = function (model) {\n var payload = new ScheduleCreateRequest(model);\n return FileUploadService.createSchedule(payload);\n };\n\n service.updateEdgeJob = function (model) {\n var payload = new ScheduleUpdateRequest(model);\n return EdgeJobs.update(payload).$promise;\n };\n\n service.remove = function (edgeJobId) {\n return EdgeJobs.remove({ id: edgeJobId }).$promise;\n };\n\n service.getScriptFile = function (edgeJobId) {\n return EdgeJobs.file({ id: edgeJobId }).$promise;\n };\n\n return service;\n}\n\nangular.module('portainer.edge').factory('EdgeJobService', EdgeJobService);\n","import angular from 'angular';\n\nangular.module('portainer.edge').factory('EdgeStackService', function EdgeStackServiceFactory(EdgeStacks, FileUploadService) {\n var service = {};\n\n service.stack = function stack(id) {\n return EdgeStacks.get({ id }).$promise;\n };\n\n service.stacks = function stacks() {\n return EdgeStacks.query({}).$promise;\n };\n\n service.remove = function remove(id) {\n return EdgeStacks.remove({ id }).$promise;\n };\n\n service.stackFile = async function stackFile(id) {\n try {\n const { StackFileContent } = await EdgeStacks.file({ id }).$promise;\n return StackFileContent;\n } catch (err) {\n throw { msg: 'Unable to retrieve stack content', err };\n }\n };\n\n service.updateStack = async function updateStack(id, stack) {\n return EdgeStacks.update({ id }, stack);\n };\n\n service.createStackFromFileContent = async function createStackFromFileContent(name, stackFileContent, edgeGroups) {\n var payload = {\n Name: name,\n StackFileContent: stackFileContent,\n EdgeGroups: edgeGroups,\n };\n try {\n return await EdgeStacks.create({ method: 'string' }, payload).$promise;\n } catch (err) {\n throw { msg: 'Unable to create the stack', err };\n }\n };\n\n service.createStackFromFileUpload = async function createStackFromFileUpload(name, stackFile, edgeGroups) {\n try {\n return await FileUploadService.createEdgeStack(name, stackFile, edgeGroups);\n } catch (err) {\n throw { msg: 'Unable to create the stack', err };\n }\n };\n\n service.createStackFromGitRepository = async function createStackFromGitRepository(name, repositoryOptions, edgeGroups) {\n var payload = {\n Name: name,\n RepositoryURL: repositoryOptions.RepositoryURL,\n RepositoryReferenceName: repositoryOptions.RepositoryReferenceName,\n ComposeFilePathInRepository: repositoryOptions.ComposeFilePathInRepository,\n RepositoryAuthentication: repositoryOptions.RepositoryAuthentication,\n RepositoryUsername: repositoryOptions.RepositoryUsername,\n RepositoryPassword: repositoryOptions.RepositoryPassword,\n EdgeGroups: edgeGroups,\n };\n try {\n return await EdgeStacks.create({ method: 'repository' }, payload).$promise;\n } catch (err) {\n throw { msg: 'Unable to create the stack', err };\n }\n };\n\n service.update = function update(stack) {\n return EdgeStacks.update(stack).$promise;\n };\n\n return service;\n});\n","import angular from 'angular';\n\nclass EdgeTemplateService {\n /* @ngInject */\n constructor(EdgeTemplates) {\n this.EdgeTemplates = EdgeTemplates;\n }\n\n edgeTemplates() {\n return this.EdgeTemplates.query().$promise;\n }\n\n async edgeTemplate(template) {\n const response = await fetch(template.stackFile);\n if (!response.ok) {\n throw new Error(response.statusText);\n }\n\n return response.text();\n }\n}\n\nangular.module('portainer.edge').service('EdgeTemplateService', EdgeTemplateService);\n","const autoNgTemplateLoaderTemplate1 = require('./createEdgeGroupView.html');\n\nimport angular from 'angular';\n\nimport { CreateEdgeGroupController } from './createEdgeGroupViewController';\n\nangular.module('portainer.edge').component('createEdgeGroupView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: CreateEdgeGroupController,\n});\n","var path = 'app/edge/views/edge-groups/createEdgeGroupView/createEdgeGroupView.html';\nvar html = \"\\n \\n Edge groups > Add edge group \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./edgeGroupsView.html');\n\nimport angular from 'angular';\n\nimport { EdgeGroupsController } from './edgeGroupsViewController';\n\nangular.module('portainer.edge').component('edgeGroupsView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EdgeGroupsController,\n});\n","var path = 'app/edge/views/edge-groups/edgeGroupsView/edgeGroupsView.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Edge Groups\\n\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./editEdgeGroupView.html');\n\nimport angular from 'angular';\n\nimport { EditEdgeGroupController } from './editEdgeGroupViewController';\n\nangular.module('portainer.edge').component('editEdgeGroupView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EditEdgeGroupController,\n});\n","var path = 'app/edge/views/edge-groups/editEdgeGroupView/editEdgeGroupView.html';\nvar html = \"\\n \\n Edge Groups > {{ $ctrl.model.Name }} \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./createEdgeJobView.html');\n\nimport angular from 'angular';\nimport { CreateEdgeJobViewController } from './createEdgeJobViewController';\n\nangular.module('portainer.edge').component('createEdgeJobView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: CreateEdgeJobViewController,\n});\n","var path = 'app/edge/views/edge-jobs/createEdgeJobView/createEdgeJobView.html';\nvar html = \"\\n \\n Edge Jobs > Create Edge job \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./edgeJob.html');\n\nimport angular from 'angular';\nimport { EdgeJobController } from './edgeJobController';\n\nangular.module('portainer.edge').component('edgeJobView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EdgeJobController,\n});\n","var path = 'app/edge/views/edge-jobs/edgeJob/edgeJob.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Edge jobs > {{ ::$ctrl.edgeJob.Name }} \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n Configuration \\n\\n \\n \\n\\n \\n Results \\n\\n \\n \\n \\n \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./edgeJobsView.html');\n\nimport angular from 'angular';\nimport { EdgeJobsViewController } from './edgeJobsViewController';\n\nangular.module('portainer.edge').component('edgeJobsView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EdgeJobsViewController,\n});\n","var path = 'app/edge/views/edge-jobs/edgeJobsView/edgeJobsView.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Edge Jobs\\n\\n\\n\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./createEdgeStackView.html');\n\nimport angular from 'angular';\n\nimport { CreateEdgeStackViewController } from './createEdgeStackViewController';\n\nangular.module('portainer.edge').component('createEdgeStackView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: CreateEdgeStackViewController,\n});\n","var path = 'app/edge/views/edge-stacks/createEdgeStackView/createEdgeStackView.html';\nvar html = \"\\n \\n Edge Stacks > Create Edge stack \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n This stack will be deployed using the equivalent of the\\n docker stack deploy command.\\n \\n
    \\n
    \\n Edge Groups\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n No Edge groups are available. Head over to the Edge groups view to create one.\\n
    \\n
    \\n \\n
    \\n Build method\\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n Web editor\\n
    \\n
    \\n \\n You can get more information about Compose file format in the\\n \\n official documentation\\n \\n .\\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n Upload\\n
    \\n
    \\n \\n You can upload a Compose file from your computer.\\n \\n
    \\n
    \\n
    \\n \\n \\n {{ $ctrl.formValues.StackFile.name }}\\n \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n Information\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n Web editor\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n
    \\n Actions\\n
    \\n
    \\n
    \\n \\n Deploy the stack\\n Deployment in progress...\\n \\n \\n {{ $ctrl.state.formValidationError }}\\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./edgeStacksView.html');\n\nimport angular from 'angular';\n\nimport { EdgeStacksViewController } from './edgeStacksViewController';\n\nangular.module('portainer.edge').component('edgeStacksView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EdgeStacksViewController,\n});\n","var path = 'app/edge/views/edge-stacks/edgeStacksView/edgeStacksView.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Edge Stacks\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./editEdgeStackView.html');\n\nimport angular from 'angular';\n\nimport { EditEdgeStackViewController } from './editEdgeStackViewController';\n\nangular.module('portainer.edge').component('editEdgeStackView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EditEdgeStackViewController,\n});\n","var path = 'app/edge/views/edge-stacks/editEdgeStackView/editEdgeStackView.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Edge Stacks > {{ $ctrl.stack.Name }} \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n Stack\\n\\n
    \\n \\n
    \\n
    \\n \\n Endpoints\\n\\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.integrations', ['portainer.integrations.storidge']);\n","const autoNgTemplateLoaderTemplate1 = require('./views/profiles/profiles.html');\nconst autoNgTemplateLoaderTemplate2 = require('./views/profiles/edit/profile.html');\nconst autoNgTemplateLoaderTemplate3 = require('./views/drives/drives.html');\nconst autoNgTemplateLoaderTemplate4 = require('./views/drives/inspect/drive.html');\nconst autoNgTemplateLoaderTemplate5 = require('./views/snapshots/inspect/snapshot.html');\nconst autoNgTemplateLoaderTemplate6 = require('./views/profiles/create/createprofile.html');\nconst autoNgTemplateLoaderTemplate7 = require('./views/cluster/cluster.html');\nconst autoNgTemplateLoaderTemplate8 = require('./views/nodes/inspect/node.html');\nconst autoNgTemplateLoaderTemplate9 = require('./views/monitor/monitor.html');\n\n// TODO: legacy extension management\n\nangular.module('portainer.integrations.storidge', []).config([\n '$stateRegistryProvider',\n function ($stateRegistryProvider) {\n 'use strict';\n\n var storidge = {\n name: 'storidge',\n parent: 'root',\n abstract: true,\n url: '/storidge',\n };\n\n var profiles = {\n name: 'storidge.profiles',\n url: '/profiles',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'StoridgeProfilesController',\n },\n },\n };\n\n var profile = {\n name: 'storidge.profiles.profile',\n url: '/:id',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate2,\n controller: 'StoridgeProfileController',\n },\n },\n };\n\n var drives = {\n name: 'storidge.drives',\n url: '/drives',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate3,\n controller: 'StoridgeDrivesController',\n },\n },\n };\n\n var drive = {\n name: 'storidge.drives.drive',\n url: '/:id',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate4,\n controller: 'StoridgeDriveController',\n },\n },\n };\n\n var snapshot = {\n name: 'docker.volumes.volume.snapshot',\n url: '/:snapshotId',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate5,\n controller: 'StoridgeSnapshotController',\n },\n },\n };\n\n var profileCreation = {\n name: 'storidge.profiles.new',\n url: '/new',\n params: {\n profileName: '',\n },\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate6,\n controller: 'StoridgeCreateProfileController',\n },\n },\n };\n\n var cluster = {\n name: 'storidge.cluster',\n url: '/cluster',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate7,\n controller: 'StoridgeClusterController',\n },\n },\n };\n\n var node = {\n name: 'storidge.cluster.node',\n url: '/:name',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate8,\n controller: 'StoridgeNodeController',\n },\n },\n };\n\n var monitor = {\n name: 'storidge.monitor',\n url: '/events',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate9,\n controller: 'StoridgeMonitorController',\n },\n },\n };\n\n $stateRegistryProvider.register(storidge);\n $stateRegistryProvider.register(drives);\n $stateRegistryProvider.register(drive);\n $stateRegistryProvider.register(snapshot);\n $stateRegistryProvider.register(profiles);\n $stateRegistryProvider.register(profile);\n $stateRegistryProvider.register(profileCreation);\n $stateRegistryProvider.register(cluster);\n $stateRegistryProvider.register(node);\n $stateRegistryProvider.register(monitor);\n },\n]);\n","var path = 'app/integrations/storidge/views/profiles/profiles.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Storidge > Profiles \\n\\n\\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n Note: The profile will be created using the default properties.\\n
    \\n
    \\n \\n
    \\n
    \\n \\n Create the profile\\n Creating profile...\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/integrations/storidge/views/profiles/edit/profile.html';\nvar html = \"\\n \\n Storidge > Profiles > {{ profile.Name }} \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n Profile configuration\\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n

    Minimum value for capacity: 1.

    \\n

    Maximum value for capacity: 64000.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n

    \\n Snapshot max (count)\\n

    \\n
    \\n
    \\n \\n \\n
    \\n \\n \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n

    \\n Snapshot interval (minutes)\\n

    \\n
    \\n
    \\n \\n \\n
    \\n \\n \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n add label \\n
    \\n \\n
    \\n
    \\n
    \\n name\\n \\n
    \\n
    \\n value\\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n IOPS\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    A value is required for Min IOPS.

    \\n

    Minimum value for Min IOPS: 30.

    \\n

    Maximum value for Min IOPS: 999999.

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    A value is required for Max IOPS.

    \\n

    Minimum value for Max IOPS: 30.

    \\n

    Maximum value for Max IOPS: 999999.

    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n Bandwidth\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    A value is required for Min bandwidth.

    \\n

    Minimum value for Min bandwidth: 1.

    \\n

    Maximum value for Min bandwidth: 5000.

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    A value is required for Max bandwidth.

    \\n

    Minimum value for Max bandwidth: 1.

    \\n

    Maximum value for Max bandwidth: 5000.

    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n Actions\\n
    \\n
    \\n
    \\n \\n Update the profile\\n Updating profile...\\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/integrations/storidge/views/drives/drives.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Storidge > Drives \\n\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/integrations/storidge/views/drives/inspect/drive.html';\nvar html = \"\\n \\n \\n Storidge > Drives > {{ drive.Id }}\\n \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    ID\\n {{ drive.Id }}\\n \\n
    Node{{ drive.Node }}
    Device{{ drive.Device }}
    Size{{ drive.Size }}
    Use{{ drive.Use }}
    Type{{ drive.Type }}
    Status\\n {{ drive.Status | capitalize }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/integrations/storidge/views/snapshots/inspect/snapshot.html';\nvar html = \"\\n \\n \\n Volumes > {{ volumeId }} > Snapshots >\\n {{ snapshot.Id }}\\n \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    ID\\n {{ snapshot.Id }}\\n \\n
    Date{{ snapshot.Date }}
    Description{{ snapshot.Description }}
    SourceID{{ snapshot.SourceID }}
    Type{{ snapshot.Type }}
    Directory{{ snapshot.Directory }}
    Source{{ snapshot.Source }}
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/integrations/storidge/views/profiles/create/createprofile.html';\nvar html = \"\\n \\n Storidge > Profiles > Add profile \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n
    \\n Profile configuration\\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n

    Minimum value for capacity: 1.

    \\n

    Maximum value for capacity: 64000.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n

    \\n Snapshot max (count)\\n

    \\n
    \\n
    \\n \\n \\n
    \\n \\n \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n

    \\n Snapshot interval (minutes)\\n

    \\n
    \\n
    \\n \\n \\n
    \\n \\n \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n add label \\n
    \\n \\n
    \\n
    \\n
    \\n name\\n \\n
    \\n
    \\n value\\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n IOPS\\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    A value is required for Min IOPS.

    \\n

    Minimum value for Min IOPS: 30.

    \\n

    Maximum value for Min IOPS: 999999.

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    A value is required for Max IOPS.

    \\n

    Minimum value for Max IOPS: 30.

    \\n

    Maximum value for Max IOPS: 999999.

    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n Bandwidth\\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    A value is required for Min bandwidth.

    \\n

    Minimum value for Min bandwidth: 1.

    \\n

    Maximum value for Min bandwidth: 5000.

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    A value is required for Max bandwidth.

    \\n

    Minimum value for Max bandwidth: 1.

    \\n

    Maximum value for Max bandwidth: 5000.

    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n Actions\\n
    \\n
    \\n
    \\n \\n Create the profile\\n Creating profile...\\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/integrations/storidge/views/cluster/cluster.html';\nvar html = \"\\n \\n \\n \\n \\n \\n \\n Storidge\\n \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ clusterInfo.Condition }}\\n \\n \\n \\n \\n \\n \\n \\n
    Domain{{ clusterInfo.Domain }}
    Condition
    Version{{ clusterVersion }}
    \\n
    \\n
    \\n Actions\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/integrations/storidge/views/nodes/inspect/node.html';\nvar html = \"\\n \\n \\n Storidge > {{ node.Name }}\\n \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Name{{ node.Name }}
    Domain{{ node.Domain }}
    Domain ID{{ node.DomainID }}
    Node status\\n \\n {{ node.Status }}\\n
    Operating condition\\n \\n {{ node.Condition }}\\n
    Metadata version{{ node.MetadataVersion }}
    Nodes{{ node.Nodes }}
    HDDs{{ node.Hdds }}
    SSDs{{ node.Ssds }}
    VDisks{{ node.Vdisks }}
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Free{{ node.FreeBandwidth }}
    Used{{ node.UsedBandwidth }}
    Provisioned{{ node.ProvisionedBandwidth }}
    Total{{ node.TotalBandwidth }}
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Free{{ node.FreeCapacity | bytes }}
    Used{{ node.UsedCapacity | bytes }}
    Provisioned{{ node.ProvisionedCapacity | bytes }}
    Total{{ node.TotalCapacity | bytes }}
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Free{{ node.FreeIOPS }}
    Used{{ node.UsedIOPS }}
    Provisioned{{ node.ProvisionedIOPS }}
    Total{{ node.TotalIOPS }}
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/integrations/storidge/views/monitor/monitor.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Storidge > Cluster monitoring \\n\\n\\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Capacity available{{ ((info.FreeCapacity * 100) / info.TotalCapacity).toFixed(1) }}%
    Provisioned capacity\\n {{ info.ProvisionedCapacity | humansize }}\\n = +info.TotalCapacity\\\">\\n \\n \\n
    Total capacity{{ info.TotalCapacity | humansize }}
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    IOPS available{{ ((info.FreeIOPS * 100) / info.TotalIOPS).toFixed(1) }}%
    Provisioned IOPS\\n {{ info.ProvisionedIOPS | number }}\\n = +info.TotalIOPS\\\">\\n \\n \\n
    Total IOPS{{ info.TotalIOPS | number }}
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Bandwidth available{{ ((info.FreeBandwidth * 100) / info.TotalBandwidth).toFixed(1) }}%
    Provisioned bandwidth\\n {{ info.ProvisionedBandwidth | humansize }}\\n = +info.TotalBandwidth\\\">\\n \\n \\n
    Total bandwidth{{ info.TotalBandwidth | humansize }} /s
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./storidgeClusterEventsDatatable.html');\n\nangular.module('portainer.integrations.storidge').component('storidgeClusterEventsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n },\n});\n","var path = 'app/integrations/storidge/components/cluster-events-datatable/storidgeClusterEventsDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Date\\n \\n \\n \\n \\n \\n Category\\n \\n \\n \\n \\n \\n Module\\n \\n \\n \\n \\n \\n Content\\n \\n \\n \\n
    {{ item.Time }}{{ item.Category }}{{ item.Module }}{{ item.Content }}
    Loading...
    No events available.
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./storidgeDrivesDatatable.html');\n\nangular.module('portainer.integrations.storidge').component('storidgeDrivesDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'StoridgeDrivesDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n addAction: '<',\n rescanAction: '<',\n actionInProgress: '<',\n additionInProgress: '<',\n },\n});\n","var path = 'app/integrations/storidge/components/drives-datatable/storidgeDrivesDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Id\\n \\n \\n \\n \\n \\n Node\\n \\n \\n \\n \\n \\n Device\\n \\n \\n \\n \\n \\n Size\\n \\n \\n \\n \\n \\n Use\\n \\n \\n \\n \\n \\n Type\\n \\n \\n \\n \\n \\n Status\\n \\n \\n \\n \\n Actions\\n
    \\n {{ item.Id }}\\n {{ item.Node }}{{ item.Device }}{{ item.Size }}{{ item.Use }}{{ item.Type }}\\n {{ item.Status | capitalize }}\\n \\n \\n Add to storage pool\\n Addition in progress...\\n \\n
    Loading...
    No drives available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.docker').controller('StoridgeDrivesDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n function ($scope, $controller, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n this.allowSelection = function (item) {\n return item.Status !== 'normal';\n };\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./storidgeNodesDatatable.html');\n\nangular.module('portainer.integrations.storidge').component('storidgeNodesDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'StoridgeNodesDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n },\n});\n","var path = 'app/integrations/storidge/components/nodes-datatable/storidgeNodesDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n To add a node to this cluster, run the following command on your new node\\n \\n {{ $ctrl.addInfo }}\\n \\n Copy\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Name\\n \\n \\n \\n \\n \\n IP Address\\n \\n \\n \\n \\n \\n Role\\n \\n \\n \\n \\n \\n Status\\n \\n \\n \\n
    \\n {{ item.Name }}\\n {{ item.IP }}{{ item.Role }}\\n \\n {{ item.Status }}\\n
    Loading...
    No nodes available.
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.integrations.storidge').controller('StoridgeNodesDatatableController', [\n '$scope',\n '$controller',\n 'clipboard',\n 'Notifications',\n 'StoridgeNodeService',\n 'DatatableService',\n function ($scope, $controller, clipboard, Notifications, StoridgeNodeService, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n var ctrl = this;\n\n this.addNodeAction = function () {\n StoridgeNodeService.add()\n .then(function sucess(data) {\n ctrl.addInfo = data.content;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve the \"add node\" command');\n });\n };\n\n this.copyAddNodeCommand = function () {\n clipboard.copyText(ctrl.addInfo);\n $('#copyNotification').show();\n $('#copyNotification').fadeOut(2000);\n };\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./storidgeProfileSelector.html');\n\nangular.module('portainer.integrations.storidge').component('storidgeProfileSelector', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'StoridgeProfileSelectorController',\n bindings: {\n storidgeProfile: '=',\n },\n});\n","var path = 'app/integrations/storidge/components/profileSelector/storidgeProfileSelector.html';\nvar html = \"
    \\n \\n
    \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.integrations.storidge').controller('StoridgeProfileSelectorController', [\n 'StoridgeProfileService',\n 'Notifications',\n function (StoridgeProfileService, Notifications) {\n var ctrl = this;\n\n this.$onInit = $onInit;\n function $onInit() {\n StoridgeProfileService.profiles()\n .then(function success(data) {\n ctrl.profiles = data;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve Storidge profiles');\n });\n }\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./storidgeProfilesDatatable.html');\n\nangular.module('portainer.integrations.storidge').component('storidgeProfilesDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n },\n});\n","var path = 'app/integrations/storidge/components/profiles-datatable/storidgeProfilesDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ item.Name }}\\n
    Loading...
    No profile available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./storidgeSnapshotCreation.html');\n\nangular.module('portainer.docker').component('storidgeSnapshotCreation', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'StoridgeSnapshotCreationController',\n bindings: {\n volumeId: '<',\n },\n});\n","var path = 'app/integrations/storidge/components/snapshot-creation/storidgeSnapshotCreation.html';\nvar html = \"\\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n Create snapshot\\n Creating snapshot...\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.docker').controller('StoridgeSnapshotCreationController', [\n 'StoridgeSnapshotService',\n 'Notifications',\n '$state',\n function (StoridgeSnapshotService, Notifications, $state) {\n var ctrl = this;\n\n this.formValues = {};\n this.state = {\n actionInProgress: false,\n };\n\n this.createSnapshot = function () {\n ctrl.state.actionInProgress = true;\n StoridgeSnapshotService.create(ctrl.volumeId, ctrl.formValues.Description)\n .then(function success() {\n Notifications.success('Success', 'Snapshot successfully created');\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create snapshot');\n })\n .finally(function final() {\n ctrl.state.actionInProgress = false;\n });\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./storidgeSnapshotsDatatable.html');\n\nangular.module('portainer.integrations.storidge').component('storidgeSnapshotsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n },\n});\n","var path = 'app/integrations/storidge/components/snapshots-datatable/storidgeSnapshotsDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Id\\n \\n \\n \\n \\n \\n Date\\n \\n \\n \\n \\n \\n Description\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ item.Id }}\\n {{ item.Date }}{{ item.Description }}
    Loading...
    No snapshots available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./volumeStoridgeInfo.html');\n\nangular.module('portainer.docker').component('volumeStoridgeInfo', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'VolumeStoridgeInfoController',\n bindings: {\n volume: '<',\n },\n});\n","var path = 'app/integrations/storidge/components/volume-storidge-info/volumeStoridgeInfo.html';\nvar html = \"\\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Name{{ $ctrl.volume.Name }}
    UUID{{ $ctrl.volume.Uuid }}
    Node{{ $ctrl.volume.Node }}
    Node ID{{ $ctrl.volume.NodeID }}
    Directory{{ $ctrl.volume.Directory }}
    Capacity{{ $ctrl.volume.Capacity }}
    Allocated{{ $ctrl.volume.Allocated }}
    IOPS Min{{ $ctrl.volume.IOPSMin }}
    IOPS Max{{ $ctrl.volume.IOPSMax }}
    Bandwidth Min{{ $ctrl.volume.BandwidthMin }}
    Bandwidth Max{{ $ctrl.volume.BandwidthMax }}
    Local Drive Only{{ $ctrl.volume.LocalDriveOnly }}
    Provisioning{{ $ctrl.volume.Provisioning }}
    Redundancy{{ $ctrl.volume.Redundancy }}
    Vdisk{{ $ctrl.volume.Vdisk }}
    IP{{ $ctrl.volume.IP }}
    Drive Type{{ $ctrl.volume.DriveType }}
    Encryption{{ $ctrl.volume.Encryption }}
    Snapshot Enabled{{ $ctrl.volume.SnapshotEnabled }}
    Snapshot Interval{{ $ctrl.volume.SnapshotInterval }} minute(s)
    Max Snapshots{{ $ctrl.volume.SnapshotMax }}
    Filesystem{{ $ctrl.volume.Filesystem }}
    Labels\\n \\n \\n \\n \\n \\n
    {{ var|key: '=' }}{{ var|value: '=' }}
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n add label\\n \\n
    \\n \\n
    \\n
    \\n
    \\n name\\n \\n
    \\n
    \\n value\\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.docker').controller('VolumeStoridgeInfoController', [\n '$state',\n 'StoridgeVolumeService',\n 'Notifications',\n function ($state, StoridgeVolumeService, Notifications) {\n var ctrl = this;\n\n this.state = {\n updateInProgress: false,\n isUpdating: false,\n };\n\n this.addLabel = function () {\n this.formValues.Labels.push({ name: '', value: '' });\n };\n\n this.removeLabel = function (index) {\n this.formValues.Labels.splice(index, 1);\n };\n\n this.initLabels = function () {\n var labels = this.volume.Labels;\n if (labels) {\n this.formValues.Labels = Object.keys(labels).map(function (key) {\n return { name: key, value: labels[key] };\n });\n }\n };\n\n this.updateVolume = function () {\n this.state.updateInProgress = true;\n this.formValues = {\n IOPSMin: this.volume.IOPSMin,\n IOPSMax: this.volume.IOPSMax,\n Node: this.volume.Node,\n Capacity: this.volume.Capacity,\n BandwidthMin: this.volume.BandwidthMin,\n BandwidthMax: this.volume.BandwidthMax,\n Labels: [],\n };\n this.initLabels();\n };\n\n this.cancelUpdate = function () {\n this.state.updateInProgress = false;\n this.formValues = {};\n };\n\n this.prepareLabels = function (volume) {\n var labels = {};\n this.formValues.Labels.forEach(function (label) {\n if (label.name && label.value) {\n labels[label.name] = label.value;\n }\n });\n volume.Labels = labels;\n };\n\n this.prepareVolume = function () {\n var volume = angular.copy(this.formValues);\n var data = this.volume;\n\n if (volume.Node === data.Node || !volume.Node) {\n delete volume.Node;\n }\n if (volume.Capacity === data.Capacity || !volume.Capacity) {\n delete volume.Capacity;\n }\n if (volume.IOPSMin === data.IOPSMin || !volume.IOPSMin) {\n delete volume.IOPSMin;\n } else {\n volume.IOPSMin = volume.IOPSMin.toString();\n }\n if (volume.IOPSMax === data.IOPSMax || !volume.IOPSMax) {\n delete volume.IOPSMax;\n } else {\n volume.IOPSMax = volume.IOPSMax.toString();\n }\n if (volume.BandwidthMin === data.BandwidthMin || !volume.BandwidthMin) {\n delete volume.BandwidthMin;\n }\n if (volume.BandwidthMax === data.BandwidthMax || !volume.BandwidthMax) {\n delete volume.BandwidthMax;\n }\n this.prepareLabels(volume);\n return volume;\n };\n\n this.confirmUpdate = function () {\n this.state.isUpdating = true;\n\n var volume = this.prepareVolume();\n volume.Name = this.volume.Name;\n StoridgeVolumeService.update(volume)\n .then(function success() {\n Notifications.success('Volume successfully updated');\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update volume');\n ctrl.state.isUpdating = false;\n });\n };\n },\n]);\n","import _ from 'lodash-es';\n\nangular\n .module('portainer.integrations.storidge')\n .filter('drivestatusbadge', function () {\n 'use strict';\n return function (text) {\n var status = text ? _.toLower(text) : '';\n if (status === 'available') {\n return 'info';\n } else if (status === 'faulty') {\n return 'danger';\n }\n return 'success';\n };\n })\n .filter('storidgeNodeStatusBadge', function () {\n 'use strict';\n return function (text) {\n var status = text ? _.toLower(text) : '';\n if (status === 'cordoned' || status === 'maintenance') {\n return 'orange-icon';\n } else if (status === 'leaving' || status === 'failed') {\n return 'red-icon';\n }\n return 'green-icon';\n };\n })\n .filter('storidgeClusterConditionBadge', function () {\n 'use strict';\n return function (text) {\n var status = text ? _.toLower(text) : '';\n if (status === 'alert') {\n return 'red-icon';\n } else if (status === 'warning') {\n return 'orange-icon';\n }\n return 'green-icon';\n };\n })\n .filter('bytes', function () {\n return function (bytes, precision) {\n bytes = parseFloat(bytes);\n if (isNaN(bytes) || !isFinite(bytes)) return '-';\n if (!precision) precision = 1;\n var units = ['B', 'kB', 'MB', 'GB', 'TB', 'PB'];\n var number = Math.floor(Math.log(bytes) / Math.log(1024));\n if (bytes === 0) {\n return '0 B';\n }\n return (bytes / Math.pow(1024, Math.floor(number))).toFixed(precision) + ' ' + units[number];\n };\n });\n","angular.module('portainer.integrations.storidge').factory('Storidge', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function StoridgeFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/storidge/:resource/:id/:action',\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n rebootCluster: { method: 'POST', params: { resource: 'clusters', action: 'reboot' } },\n shutdownCluster: { method: 'POST', params: { resource: 'clusters', action: 'shutdown' } },\n queryEvents: { method: 'GET', params: { resource: 'clusters', action: 'events' }, ignoreLoadingBar: true, isArray: true },\n getVersion: { method: 'GET', params: { resource: 'clusters', action: 'version' } },\n getInfo: { method: 'GET', params: { resource: 'clusters', action: 'info' }, ignoreLoadingBar: true },\n\n queryNodes: { method: 'GET', params: { resource: 'nodes' } },\n getNode: { method: 'GET', params: { resource: 'nodes', id: '@id' } },\n addNode: { method: 'POST', params: { resource: 'nodes' } },\n removeNode: { method: 'DELETE', params: { resource: 'nodes', id: '@id' } },\n cordonNode: { method: 'POST', params: { resource: 'nodes', action: 'cordon', id: '@id' } },\n uncordonNode: { method: 'POST', params: { resource: 'nodes', action: 'uncordon', id: '@id' } },\n\n queryProfiles: { method: 'GET', params: { resource: 'profiles' } },\n getProfile: { method: 'GET', params: { resource: 'profiles' } },\n createProfile: { method: 'POST', params: { resource: 'profiles' } },\n updateProfile: { method: 'PUT', params: { resource: 'profiles', id: '@name' } },\n deleteProfile: { method: 'DELETE', params: { resource: 'profiles' } },\n\n queryDrives: { method: 'GET', params: { resource: 'drives' } },\n getDrive: { method: 'GET', params: { resource: 'drives', id: '@id' } },\n addDrive: { method: 'POST', params: { resource: 'drives' } },\n removeDrive: { method: 'DELETE', params: { resource: 'drives', id: '@id' } },\n rescanDrives: { method: 'POST', params: { resource: 'drives', action: 'rescan' } },\n\n queryVolumes: { method: 'GET', params: { resource: 'volumes' } },\n createVolume: { method: 'POST', params: { resource: 'volumes' } },\n getVolume: { method: 'GET', params: { resource: 'volumes', id: '@id' } },\n updateVolume: { method: 'POST', params: { resource: 'volumes', id: '@name' } },\n removeVolume: { method: 'DELETE', params: { resource: 'volumes', id: '@id' } },\n\n querySnapshots: { method: 'GET', params: { resource: 'volumes', id: '@id', action: 'snapshots' } },\n createSnapshot: { method: 'POST', params: { resource: 'volumes', id: '@id', action: 'snapshot' } },\n getSnapshot: { method: 'GET', params: { resource: 'snapshots', id: '@id' } },\n removeSnapshot: { method: 'DELETE', params: { resource: 'snapshots', id: '@id' } },\n }\n );\n },\n]);\n","import Chart from 'chart.js';\nimport filesize from 'filesize';\n\nangular.module('portainer.integrations.storidge').factory('StoridgeChartService', [\n function StoridgeChartService() {\n 'use strict';\n\n // Max. number of items to display on a chart\n var CHART_LIMIT = 600;\n\n var service = {};\n\n service.CreateCapacityChart = function (context) {\n return new Chart(context, {\n type: 'doughnut',\n data: {\n datasets: [\n {\n data: [],\n backgroundColor: ['rgba(171, 213, 255, 0.7)', 'rgba(229, 57, 53, 0.7)'],\n },\n ],\n labels: [],\n },\n options: {\n tooltips: {\n callbacks: {\n label: function (tooltipItem, data) {\n var dataset = data.datasets[tooltipItem.datasetIndex];\n var label = data.labels[tooltipItem.index];\n var value = dataset.data[tooltipItem.index];\n return label + ': ' + filesize(value, { base: 10, round: 1 });\n },\n },\n },\n animation: {\n duration: 0,\n },\n responsiveAnimationDuration: 0,\n responsive: true,\n hover: {\n animationDuration: 0,\n },\n },\n });\n };\n\n service.CreateIOPSChart = function (context) {\n return new Chart(context, {\n type: 'line',\n data: {\n labels: [],\n datasets: [\n {\n label: 'IOPS',\n data: [],\n fill: true,\n backgroundColor: 'rgba(151,187,205,0.4)',\n borderColor: 'rgba(151,187,205,0.6)',\n pointBackgroundColor: 'rgba(151,187,205,1)',\n pointBorderColor: 'rgba(151,187,205,1)',\n pointRadius: 2,\n borderWidth: 2,\n },\n ],\n },\n options: {\n animation: {\n duration: 0,\n },\n responsiveAnimationDuration: 0,\n responsive: true,\n tooltips: {\n mode: 'index',\n intersect: false,\n position: 'nearest',\n },\n hover: {\n animationDuration: 0,\n },\n scales: {\n yAxes: [\n {\n ticks: {\n beginAtZero: true,\n },\n },\n ],\n },\n },\n });\n };\n\n service.CreateBandwidthChart = function (context) {\n return new Chart(context, {\n type: 'line',\n data: {\n labels: [],\n datasets: [\n {\n label: 'Bandwidth',\n data: [],\n fill: true,\n backgroundColor: 'rgba(151,187,205,0.4)',\n borderColor: 'rgba(151,187,205,0.6)',\n pointBackgroundColor: 'rgba(151,187,205,1)',\n pointBorderColor: 'rgba(151,187,205,1)',\n pointRadius: 2,\n borderWidth: 2,\n },\n ],\n },\n options: {\n animation: {\n duration: 0,\n },\n responsiveAnimationDuration: 0,\n responsive: true,\n tooltips: {\n mode: 'index',\n intersect: false,\n position: 'nearest',\n callbacks: {\n label: function (tooltipItem, data) {\n var datasetLabel = data.datasets[tooltipItem.datasetIndex].label;\n return bytePerSecBasedTooltipLabel(datasetLabel, tooltipItem.yLabel);\n },\n },\n },\n hover: {\n animationDuration: 0,\n },\n scales: {\n yAxes: [\n {\n ticks: {\n beginAtZero: true,\n callback: bytePerSecBasedAxisLabel,\n },\n },\n ],\n },\n },\n });\n };\n\n service.UpdateChart = function (label, value, chart) {\n chart.data.labels.push(label);\n chart.data.datasets[0].data.push(value);\n\n if (chart.data.datasets[0].data.length > CHART_LIMIT) {\n chart.data.labels.pop();\n chart.data.datasets[0].data.pop();\n }\n\n chart.update(0);\n };\n\n service.UpdatePieChart = function (label, value, chart) {\n var idx = chart.data.labels.indexOf(label);\n if (idx > -1) {\n chart.data.datasets[0].data[idx] = value;\n } else {\n chart.data.labels.push(label);\n chart.data.datasets[0].data.push(value);\n }\n\n chart.update(0);\n };\n\n function bytePerSecBasedTooltipLabel(label, value) {\n var processedValue = 0;\n if (value > 5) {\n processedValue = filesize(value, { base: 10, round: 1 });\n } else {\n processedValue = value.toFixed(1) + 'B';\n }\n return label + ': ' + processedValue + '/s';\n }\n\n function bytePerSecBasedAxisLabel(value) {\n if (value > 5) {\n return filesize(value, { base: 10, round: 1 });\n }\n return value.toFixed(1) + 'B/s';\n }\n\n return service;\n },\n]);\n","import { StoridgeInfoModel } from '../models/info';\nimport { StoridgeEventModel } from '../models/events';\n\nangular.module('portainer.integrations.storidge').factory('StoridgeClusterService', [\n '$q',\n 'Storidge',\n function StoridgeClusterServiceFactory($q, Storidge) {\n 'use strict';\n var service = {};\n\n service.reboot = function () {\n return Storidge.rebootCluster().$promise;\n };\n\n service.shutdown = function () {\n return Storidge.shutdownCluster().$promise;\n };\n\n service.info = function () {\n var deferred = $q.defer();\n\n Storidge.getInfo()\n .$promise.then(function success(data) {\n var info = new StoridgeInfoModel(data);\n deferred.resolve(info);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve Storidge information', err: err });\n });\n\n return deferred.promise;\n };\n\n service.version = function () {\n var deferred = $q.defer();\n\n Storidge.getVersion()\n .$promise.then(function success(data) {\n var version = data.version;\n deferred.resolve(version);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve Storidge version', err: err });\n });\n\n return deferred.promise;\n };\n\n service.events = function () {\n var deferred = $q.defer();\n\n Storidge.queryEvents()\n .$promise.then(function success(data) {\n var events = data.map(function (item) {\n return new StoridgeEventModel(item);\n });\n deferred.resolve(events);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve Storidge events', err: err });\n });\n\n return deferred.promise;\n };\n\n return service;\n },\n]);\n","import { StoridgeDriveModel } from '../models/drive';\n\nangular.module('portainer.integrations.storidge').factory('StoridgeDriveService', [\n '$q',\n 'Storidge',\n function StoridgeDriveServiceFactory($q, Storidge) {\n 'use strict';\n var service = {};\n\n service.drives = function () {\n var deferred = $q.defer();\n\n Storidge.queryDrives()\n .$promise.then(function success(data) {\n var driveData = data.drives;\n var drives = driveData.map(function (drive) {\n return new StoridgeDriveModel(drive);\n });\n\n deferred.resolve(drives);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve Storidge drives', err: err });\n });\n\n return deferred.promise;\n };\n\n service.drive = function (id) {\n var deferred = $q.defer();\n\n Storidge.getDrive({ id: id })\n .$promise.then(function success(data) {\n var drive = new StoridgeDriveModel(data);\n Storidge.getNode({ id: data.nodeid }).$promise.then(function (data) {\n drive.Node = data.name;\n deferred.resolve(drive);\n });\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve Storidge drive', err: err });\n });\n\n return deferred.promise;\n };\n\n service.add = function (device, node) {\n var deferred = $q.defer();\n\n Storidge.addDrive({ device: device, node: node })\n .$promise.then(function success() {\n deferred.resolve();\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to add Storidge drive', err: err });\n });\n\n return deferred.promise;\n };\n\n service.remove = function (id) {\n var deferred = $q.defer();\n\n Storidge.removeDrive({ id: id })\n .$promise.then(function success() {\n deferred.resolve();\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to remove Storidge drive', err: err });\n });\n\n return deferred.promise;\n };\n\n service.rescan = function () {\n return Storidge.rescanDrives().$promise;\n };\n\n return service;\n },\n]);\n","import { StoridgeNodeModel, StoridgeNodeDetailedModel } from '../models/node';\n\nangular.module('portainer.integrations.storidge').factory('StoridgeNodeService', [\n '$q',\n 'Storidge',\n function StoridgeNodeServiceFactory($q, Storidge) {\n 'use strict';\n var service = {};\n\n service.nodes = function () {\n var deferred = $q.defer();\n\n Storidge.queryNodes()\n .$promise.then(function success(data) {\n var nodeData = data.nodes;\n var nodes = [];\n\n for (var key in nodeData) {\n if (nodeData.hasOwnProperty(key)) {\n nodes.push(new StoridgeNodeModel(key, nodeData[key]));\n }\n }\n\n deferred.resolve(nodes);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve Storidge nodes', err: err });\n });\n\n return deferred.promise;\n };\n\n service.node = function (id) {\n var deferred = $q.defer();\n\n Storidge.getNode({ id: id })\n .$promise.then(function success(data) {\n var node = new StoridgeNodeDetailedModel(data.name, data.properties);\n deferred.resolve(node);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve Storidge node', err: err });\n });\n\n return deferred.promise;\n };\n\n service.add = function () {\n return Storidge.addNode().$promise;\n };\n\n service.cordon = function (id) {\n return Storidge.cordonNode({ id: id }).$promise;\n };\n\n service.uncordon = function (id) {\n return Storidge.uncordonNode({ id: id }).$promise;\n };\n\n service.remove = function (id) {\n return Storidge.removeNode({ id: id }).$promise;\n };\n\n return service;\n },\n]);\n","import { StoridgeCreateProfileRequest, StoridgeProfileListModel, StoridgeProfileModel } from '../models/profile';\n\nangular.module('portainer.integrations.storidge').factory('StoridgeProfileService', [\n '$q',\n 'Storidge',\n function StoridgeProfileServiceFactory($q, Storidge) {\n 'use strict';\n var service = {};\n\n service.create = function (model) {\n var payload = new StoridgeCreateProfileRequest(model);\n return Storidge.createProfile(payload).$promise;\n };\n\n service.update = function (model) {\n var payload = new StoridgeCreateProfileRequest(model);\n return Storidge.updateProfile(payload).$promise;\n };\n\n service.delete = function (profileName) {\n return Storidge.deleteProfile({ id: profileName }).$promise;\n };\n\n service.profile = function (profileName) {\n var deferred = $q.defer();\n\n Storidge.getProfile({ id: profileName })\n .$promise.then(function success(data) {\n var profile = new StoridgeProfileModel(profileName, data);\n deferred.resolve(profile);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve Storidge profile details', err: err });\n });\n\n return deferred.promise;\n };\n\n service.profiles = function () {\n var deferred = $q.defer();\n\n Storidge.queryProfiles()\n .$promise.then(function success(data) {\n var profiles = data.profiles.map(function (item) {\n return new StoridgeProfileListModel(item);\n });\n deferred.resolve(profiles);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve Storidge profiles', err: err });\n });\n\n return deferred.promise;\n };\n\n return service;\n },\n]);\n","import { StoridgeSnapshotModel } from '../models/snapshot';\n\nangular.module('portainer.integrations.storidge').factory('StoridgeSnapshotService', [\n '$q',\n 'Storidge',\n function StoridgeSnapshotServiceFactory($q, Storidge) {\n 'use strict';\n var service = {};\n\n service.snapshots = snapshots;\n service.snapshot = snapshot;\n service.create = create;\n service.remove = remove;\n\n function snapshots(volumeId) {\n var deferred = $q.defer();\n\n Storidge.querySnapshots({ id: volumeId })\n .$promise.then(function success(data) {\n var snapshotsData = data.snapshots;\n let snapshotsArray = [];\n for (const key in snapshotsData) {\n if (snapshotsData.hasOwnProperty(key)) {\n snapshotsArray.push(snapshotsData[key]);\n }\n }\n var snapshots = snapshotsArray.map(function (snapshot) {\n return new StoridgeSnapshotModel(snapshot);\n });\n deferred.resolve(snapshots);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve Storidge snapshots', err: err });\n });\n\n return deferred.promise;\n }\n\n function snapshot(id) {\n var deferred = $q.defer();\n\n Storidge.getSnapshot({ id: id })\n .$promise.then(function success(data) {\n var snapshot = new StoridgeSnapshotModel(data.snapshot);\n deferred.resolve(snapshot);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve Storidge snapshot', err: err });\n });\n\n return deferred.promise;\n }\n\n function create(volumeId, description) {\n var deferred = $q.defer();\n Storidge.createSnapshot({ id: volumeId, opts: { description: description } })\n .$promise.then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to create Storidge volume snapshot', err: err });\n });\n\n return deferred.promise;\n }\n\n function remove(id) {\n var deferred = $q.defer();\n\n Storidge.removeSnapshot({ id: id })\n .$promise.then(function success() {\n deferred.resolve();\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to remove Storidge volume snapshot', err: err });\n });\n\n return deferred.promise;\n }\n\n return service;\n },\n]);\n","import { StoridgeVolumeModel, StoridgeVolumeUpdateModel } from '../models/volume';\n\nangular.module('portainer.integrations.storidge').factory('StoridgeVolumeService', [\n '$q',\n 'Storidge',\n function StoridgeVolumeServiceFactory($q, Storidge) {\n 'use strict';\n var service = {};\n\n service.volume = function (id) {\n var deferred = $q.defer();\n\n Storidge.getVolume({ id: id })\n .$promise.then(function success(data) {\n var volume = new StoridgeVolumeModel(data);\n deferred.resolve(volume);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve Storidge volume', err: err });\n });\n\n return deferred.promise;\n };\n\n service.update = function (data) {\n var deferred = $q.defer();\n var volume = new StoridgeVolumeUpdateModel(data);\n Storidge.updateVolume(volume)\n .$promise.then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to update Storidge volume', err: err });\n });\n\n return deferred.promise;\n };\n\n return service;\n },\n]);\n","angular.module('portainer.integrations.storidge').controller('StoridgeClusterController', [\n '$q',\n '$scope',\n '$state',\n 'Notifications',\n 'StoridgeClusterService',\n 'StoridgeNodeService',\n 'ModalService',\n function ($q, $scope, $state, Notifications, StoridgeClusterService, StoridgeNodeService, ModalService) {\n $scope.state = {\n shutdownInProgress: false,\n rebootInProgress: false,\n };\n\n $scope.rebootCluster = function () {\n ModalService.confirm({\n title: 'Are you sure?',\n message: 'All the nodes in the cluster will reboot during the process. Do you want to reboot the Storidge cluster?',\n buttons: {\n confirm: {\n label: 'Reboot',\n className: 'btn-danger',\n },\n },\n callback: function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n rebootCluster();\n },\n });\n };\n\n function rebootCluster() {\n $scope.state.rebootInProgress = true;\n StoridgeClusterService.reboot().finally(function final() {\n $scope.state.rebootInProgress = false;\n Notifications.success('Cluster successfully rebooted');\n $state.reload();\n });\n }\n\n $scope.shutdownCluster = function () {\n ModalService.confirm({\n title: 'Are you sure?',\n message: 'All the nodes in the cluster will shutdown. Do you want to shutdown the Storidge cluster?',\n buttons: {\n confirm: {\n label: 'Shutdown',\n className: 'btn-danger',\n },\n },\n callback: function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n shutdownCluster();\n },\n });\n };\n\n function shutdownCluster() {\n $scope.state.shutdownInProgress = true;\n StoridgeClusterService.shutdown().finally(function final() {\n $scope.state.shutdownInProgress = false;\n Notifications.success('Cluster successfully shutdown');\n $state.go('docker.dashboard');\n });\n }\n\n function initView() {\n $q.all({\n info: StoridgeClusterService.info(),\n version: StoridgeClusterService.version(),\n nodes: StoridgeNodeService.nodes(),\n })\n .then(function success(data) {\n $scope.clusterInfo = data.info;\n $scope.clusterVersion = data.version;\n $scope.clusterNodes = data.nodes;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve cluster information');\n });\n }\n\n initView();\n },\n]);\n","angular.module('portainer.integrations.storidge').controller('StoridgeDrivesController', [\n '$scope',\n '$state',\n 'Notifications',\n 'StoridgeDriveService',\n function ($scope, $state, Notifications, StoridgeDriveService) {\n $scope.state = {\n additionInProgress: [],\n actionInProgress: false,\n };\n\n $scope.addAction = function (drive, idx) {\n $scope.state.additionInProgress[idx] = true;\n $scope.state.actionInProgress = true;\n StoridgeDriveService.add(drive.Device, drive.Node)\n .then(function success() {\n Notifications.success('Drive ' + drive.Device + ' successfully added on node ' + drive.Node);\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to add drive');\n })\n .finally(function final() {\n $scope.state.additionInProgress[idx] = false;\n $scope.state.actionInProgress = false;\n });\n };\n\n $scope.rescanAction = function () {\n StoridgeDriveService.rescan()\n .then(function sucess() {\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to scan drives');\n });\n };\n\n function initView() {\n StoridgeDriveService.drives()\n .then(function success(data) {\n $scope.drives = data;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve drives');\n });\n }\n\n initView();\n },\n]);\n","angular.module('portainer.integrations.storidge').controller('StoridgeDriveController', [\n '$scope',\n '$state',\n '$transition$',\n 'Notifications',\n 'ModalService',\n 'StoridgeDriveService',\n function ($scope, $state, $transition$, Notifications, ModalService, StoridgeDriveService) {\n $scope.actionInProgress = false;\n\n $scope.removeDrive = function () {\n ModalService.confirm({\n title: 'Are you sure?',\n message: 'Do you want really want to remove this drive from the storage pool?',\n buttons: {\n confirm: {\n label: 'Remove',\n className: 'btn-danger',\n },\n },\n callback: function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n $scope.actionInProgress = true;\n StoridgeDriveService.remove($scope.drive.Id)\n .then(function () {\n Notifications.success('Success', 'Drive removed from storage pool');\n $state.go('storidge.drives', {}, { reload: true });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove drive from storage pool');\n })\n .finally(function final() {\n $scope.actionInProgress = false;\n });\n },\n });\n };\n\n function initView() {\n $scope.id = $transition$.params().id;\n\n StoridgeDriveService.drive($scope.id)\n .then(function success(data) {\n $scope.drive = data;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve drive details');\n });\n }\n\n initView();\n },\n]);\n","import moment from 'moment';\n\nangular.module('portainer.integrations.storidge').controller('StoridgeMonitorController', [\n '$q',\n '$scope',\n '$interval',\n '$document',\n 'Notifications',\n 'StoridgeClusterService',\n 'StoridgeChartService',\n function ($q, $scope, $interval, $document, Notifications, StoridgeClusterService, StoridgeChartService) {\n $scope.$on('$destroy', function () {\n stopRepeater();\n });\n\n function stopRepeater() {\n var repeater = $scope.repeater;\n if (angular.isDefined(repeater)) {\n $interval.cancel(repeater);\n repeater = null;\n }\n }\n\n function updateIOPSChart(info, chart) {\n var usedIOPS = info.UsedIOPS;\n var label = moment(new Date()).format('HH:mm:ss');\n\n StoridgeChartService.UpdateChart(label, usedIOPS, chart);\n }\n\n function updateBandwithChart(info, chart) {\n var usedBandwidth = info.UsedBandwidth;\n var label = moment(new Date()).format('HH:mm:ss');\n\n StoridgeChartService.UpdateChart(label, usedBandwidth, chart);\n }\n\n function updateCapacityChart(info, chart) {\n var usedCapacity = info.UsedCapacity;\n var freeCapacity = info.FreeCapacity;\n\n StoridgeChartService.UpdatePieChart('Free', freeCapacity, chart);\n StoridgeChartService.UpdatePieChart('Used', usedCapacity, chart);\n }\n\n function setUpdateRepeater(iopsChart, bandwidthChart, capacityChart) {\n var refreshRate = 5000;\n $scope.repeater = $interval(function () {\n $q.all({\n events: StoridgeClusterService.events(),\n info: StoridgeClusterService.info(),\n })\n .then(function success(data) {\n $scope.events = data.events;\n var info = data.info;\n $scope.info = info;\n updateIOPSChart(info, iopsChart);\n updateBandwithChart(info, bandwidthChart);\n updateCapacityChart(info, capacityChart);\n })\n .catch(function error(err) {\n stopRepeater();\n Notifications.error('Failure', err, 'Unable to retrieve cluster information');\n });\n }, refreshRate);\n }\n\n function startViewUpdate(iopsChart, bandwidthChart, capacityChart) {\n $q.all({\n events: StoridgeClusterService.events(),\n info: StoridgeClusterService.info(),\n })\n .then(function success(data) {\n $scope.events = data.events;\n var info = data.info;\n $scope.info = info;\n updateIOPSChart(info, iopsChart);\n updateBandwithChart(info, bandwidthChart);\n updateCapacityChart(info, capacityChart);\n setUpdateRepeater(iopsChart, bandwidthChart, capacityChart);\n })\n .catch(function error(err) {\n stopRepeater();\n Notifications.error('Failure', err, 'Unable to retrieve cluster information');\n });\n }\n\n function initCharts() {\n var iopsChartCtx = $('#iopsChart');\n var iopsChart = StoridgeChartService.CreateIOPSChart(iopsChartCtx);\n\n var bandwidthChartCtx = $('#bandwithChart');\n var bandwidthChart = StoridgeChartService.CreateBandwidthChart(bandwidthChartCtx);\n\n var capacityChartCtx = $('#capacityChart');\n var capacityChart = StoridgeChartService.CreateCapacityChart(capacityChartCtx);\n\n startViewUpdate(iopsChart, bandwidthChart, capacityChart);\n }\n\n function initView() {\n $document.ready(function () {\n initCharts();\n });\n }\n\n initView();\n },\n]);\n","angular.module('portainer.integrations.storidge').controller('StoridgeNodeController', [\n '$scope',\n '$state',\n '$transition$',\n 'Notifications',\n 'StoridgeNodeService',\n 'ModalService',\n function ($scope, $state, $transition$, Notifications, StoridgeNodeService, ModalService) {\n $scope.removeNodeAction = function (selectedItems) {\n ModalService.confirm({\n title: 'Are you sure?',\n message: 'Do you want really want to remove the node from the cluster?',\n buttons: {\n confirm: {\n label: 'Remove',\n className: 'btn-danger',\n },\n },\n callback: function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n remove(selectedItems);\n },\n });\n };\n\n function remove() {\n StoridgeNodeService.remove($scope.node.Name)\n .then(function success() {\n Notifications.success('Node successfully removed', $scope.node.Name);\n $state.go('storidge.cluster');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove node');\n });\n }\n\n $scope.cordonNodeAction = function (selectedItems) {\n ModalService.confirm({\n title: 'Are you sure?',\n message: 'Do you want really want to put the node in maintenance mode?',\n buttons: {\n confirm: {\n label: 'Enter maintenance',\n className: 'btn-danger',\n },\n },\n callback: function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n cordonNode(selectedItems);\n },\n });\n };\n\n function cordonNode() {\n StoridgeNodeService.cordon($scope.node.Name)\n .then(function success() {\n Notifications.success('Node successfully put in maintenance');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to put node in maintenance mode');\n })\n .finally(function final() {\n $state.reload();\n });\n }\n\n $scope.uncordonNodeAction = function (selectedItems) {\n ModalService.confirm({\n title: 'Are you sure?',\n message: 'Do you want really want to bring the nodes out of maintenance mode?',\n buttons: {\n confirm: {\n label: 'Exit maintenance',\n className: 'btn-danger',\n },\n },\n callback: function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n uncordonNode(selectedItems);\n },\n });\n };\n\n function uncordonNode() {\n StoridgeNodeService.uncordon($scope.node.Name)\n .then(function success() {\n Notifications.success('Node successfully bringed back');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to put node out of maintenance mode');\n })\n .finally(function final() {\n $state.reload();\n });\n }\n\n function initView() {\n $scope.name = $transition$.params().name;\n\n StoridgeNodeService.node($scope.name)\n .then(function success(data) {\n $scope.node = data;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve node details');\n });\n }\n\n initView();\n },\n]);\n","import _ from 'lodash-es';\nimport { StoridgeProfileDefaultModel } from '../../../models/profile';\n\nangular.module('portainer.integrations.storidge').controller('StoridgeCreateProfileController', [\n '$scope',\n '$state',\n '$transition$',\n 'Notifications',\n 'StoridgeProfileService',\n function ($scope, $state, $transition$, Notifications, StoridgeProfileService) {\n $scope.formValues = {\n Labels: [],\n };\n\n $scope.state = {\n NoLimit: true,\n LimitIOPS: false,\n LimitBandwidth: false,\n ManualInputDirectory: false,\n actionInProgress: false,\n };\n\n $scope.RedundancyOptions = [\n { value: 2, label: '2-copy' },\n { value: 3, label: '3-copy' },\n ];\n\n $scope.addLabel = function () {\n $scope.formValues.Labels.push({ name: '', value: '' });\n };\n\n $scope.removeLabel = function (index) {\n $scope.formValues.Labels.splice(index, 1);\n };\n\n function prepareLabels(profile) {\n var labels = {};\n $scope.formValues.Labels.forEach(function (label) {\n if (label.name && label.value) {\n labels[label.name] = label.value;\n }\n });\n profile.Labels = labels;\n }\n\n $scope.create = function () {\n var profile = $scope.model;\n\n if (!$scope.state.LimitIOPS) {\n delete profile.MinIOPS;\n delete profile.MaxIOPS;\n }\n\n if (!$scope.state.LimitBandwidth) {\n delete profile.MinBandwidth;\n delete profile.MaxBandwidth;\n }\n\n if (profile.SnapshotEnabled) {\n if (!profile.SnapshotMax || profile.SnapshotMax <= 0) {\n profile.SnapshotMax = 1;\n }\n if (!$scope.state.RecurringSnapshotEnabled) {\n delete profile.SnapshotInterval;\n }\n if ($scope.state.RecurringSnapshotEnabled && (!profile.SnapshotInterval || profile.SnapshotInterval <= 0)) {\n profile.SnapshotInterval = 1440;\n }\n } else {\n delete profile.SnapshotMax;\n delete profile.SnapshotInterval;\n }\n\n prepareLabels(profile);\n\n $scope.state.actionInProgress = true;\n StoridgeProfileService.create(profile)\n .then(function success() {\n Notifications.success('Profile successfully created');\n $state.go('storidge.profiles');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create profile');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n\n $scope.updatedName = function () {\n if (!$scope.state.ManualInputDirectory) {\n var profile = $scope.model;\n profile.Directory = '/cio/' + (profile.Name ? _.toLower(profile.Name) : '');\n }\n };\n\n $scope.updatedDirectory = function () {\n if (!$scope.state.ManualInputDirectory) {\n $scope.state.ManualInputDirectory = true;\n }\n };\n\n function initView() {\n var profile = new StoridgeProfileDefaultModel();\n profile.Name = $transition$.params().profileName;\n profile.Directory = profile.Directory + _.toLower(profile.Name);\n $scope.model = profile;\n }\n\n initView();\n },\n]);\n","angular.module('portainer.integrations.storidge').controller('StoridgeProfileController', [\n '$scope',\n '$state',\n '$transition$',\n 'Notifications',\n 'StoridgeProfileService',\n 'ModalService',\n function ($scope, $state, $transition$, Notifications, StoridgeProfileService, ModalService) {\n $scope.formValues = {\n Labels: [],\n };\n\n $scope.state = {\n NoLimit: false,\n LimitIOPS: false,\n LimitBandwidth: false,\n updateInProgress: false,\n deleteInProgress: false,\n RecurringSnapshotEnabled: false,\n };\n\n $scope.addLabel = function () {\n $scope.formValues.Labels.push({ name: '', value: '' });\n };\n\n $scope.removeLabel = function (index) {\n $scope.formValues.Labels.splice(index, 1);\n };\n\n function prepareLabels(profile) {\n var labels = {};\n $scope.formValues.Labels.forEach(function (label) {\n if (label.name && label.value) {\n labels[label.name] = label.value;\n }\n });\n profile.Labels = labels;\n }\n\n function initLabels(labels) {\n $scope.formValues.Labels = Object.keys(labels).map(function (key) {\n return { name: key, value: labels[key] };\n });\n }\n\n $scope.RedundancyOptions = [\n { value: 2, label: '2-copy' },\n { value: 3, label: '3-copy' },\n ];\n\n $scope.update = function () {\n var profile = $scope.profile;\n\n if (!$scope.state.LimitIOPS) {\n delete profile.MinIOPS;\n delete profile.MaxIOPS;\n }\n\n if (!$scope.state.LimitBandwidth) {\n delete profile.MinBandwidth;\n delete profile.MaxBandwidth;\n }\n\n if (profile.SnapshotEnabled) {\n if (!profile.SnapshotMax || profile.SnapshotMax <= 0) {\n profile.SnapshotMax = 1;\n }\n if (!$scope.state.RecurringSnapshotEnabled) {\n delete profile.SnapshotInterval;\n }\n if ($scope.state.RecurringSnapshotEnabled && (!profile.SnapshotInterval || profile.SnapshotInterval <= 0)) {\n profile.SnapshotInterval = 1440;\n }\n } else {\n delete profile.SnapshotMax;\n delete profile.SnapshotInterval;\n }\n\n prepareLabels(profile);\n\n $scope.state.updateInProgress = true;\n StoridgeProfileService.update(profile)\n .then(function success() {\n Notifications.success('Profile successfully updated');\n $state.go('storidge.profiles');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update profile');\n })\n .finally(function final() {\n $scope.state.updateInProgress = false;\n });\n };\n\n $scope.delete = function () {\n ModalService.confirmDeletion('Do you want to remove this profile?', function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n deleteProfile();\n });\n };\n\n function deleteProfile() {\n var profile = $scope.profile;\n\n $scope.state.deleteInProgress = true;\n StoridgeProfileService.delete(profile.Name)\n .then(function success() {\n Notifications.success('Profile successfully deleted');\n $state.go('storidge.profiles');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to delete profile');\n })\n .finally(function final() {\n $scope.state.deleteInProgress = false;\n });\n }\n\n function initView() {\n StoridgeProfileService.profile($transition$.params().id)\n .then(function success(data) {\n var profile = data;\n if ((profile.MinIOPS && profile.MinIOPS !== 0) || (profile.MaxIOPS && profile.MaxIOPS !== 0)) {\n $scope.state.LimitIOPS = true;\n } else if ((profile.MinBandwidth && profile.MinBandwidth !== 0) || (profile.MaxBandwidth && profile.MaxBandwidth !== 0)) {\n $scope.state.LimitBandwidth = true;\n } else {\n $scope.state.NoLimit = true;\n }\n if (profile.SnapshotEnabled && profile.SnapshotInterval !== 0) {\n $scope.state.RecurringSnapshotEnabled = true;\n }\n initLabels(profile.Labels);\n $scope.profile = profile;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve profile details');\n });\n }\n\n initView();\n },\n]);\n","import _ from 'lodash-es';\nimport { StoridgeProfileDefaultModel } from '../../models/profile';\n\nangular.module('portainer.integrations.storidge').controller('StoridgeProfilesController', [\n '$q',\n '$scope',\n '$state',\n 'Notifications',\n 'StoridgeProfileService',\n function ($q, $scope, $state, Notifications, StoridgeProfileService) {\n $scope.state = {\n actionInProgress: false,\n };\n\n $scope.formValues = {\n Name: '',\n };\n\n $scope.removeAction = function (selectedItems) {\n var actionCount = selectedItems.length;\n angular.forEach(selectedItems, function (profile) {\n StoridgeProfileService.delete(profile.Name)\n .then(function success() {\n Notifications.success('Profile successfully removed', profile.Name);\n var index = $scope.profiles.indexOf(profile);\n $scope.profiles.splice(index, 1);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove profile');\n })\n .finally(function final() {\n --actionCount;\n if (actionCount === 0) {\n $state.reload();\n }\n });\n });\n };\n\n $scope.create = function () {\n var model = new StoridgeProfileDefaultModel();\n model.Labels = {};\n model.Name = $scope.formValues.Name;\n model.Directory = model.Directory + _.toLower(model.Name);\n delete model.MinBandwidth;\n delete model.MaxBandwidth;\n delete model.MinIOPS;\n delete model.MaxIOPS;\n\n $scope.state.actionInProgress = true;\n StoridgeProfileService.create(model)\n .then(function success() {\n Notifications.success('Profile successfully created');\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create profile');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n\n function initView() {\n StoridgeProfileService.profiles()\n .then(function success(data) {\n $scope.profiles = data;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve profiles');\n });\n }\n\n initView();\n },\n]);\n","angular.module('portainer.integrations.storidge').controller('StoridgeSnapshotController', [\n '$scope',\n '$state',\n '$transition$',\n 'Notifications',\n 'ModalService',\n 'StoridgeSnapshotService',\n function ($scope, $state, $transition$, Notifications, ModalService, StoridgeSnapshotService) {\n $scope.removeSnapshot = function () {\n ModalService.confirm({\n title: 'Are you sure?',\n message: 'Do you want really want to remove this snapshot?',\n buttons: {\n confirm: {\n label: 'Remove',\n className: 'btn-danger',\n },\n },\n callback: function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n StoridgeSnapshotService.remove($scope.snapshot.Id)\n .then(function () {\n Notifications.success('Success', 'Snapshot removed');\n $state.go('portainer.volumes.volume', { id: $scope.volumeId });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove snapshot');\n });\n },\n });\n };\n\n function initView() {\n $scope.volumeId = $transition$.params().id;\n $scope.snapshotId = $transition$.params().snapshotId;\n\n StoridgeSnapshotService.snapshot($scope.snapshotId)\n .then(function success(data) {\n $scope.snapshot = data;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve snapshot details');\n });\n }\n\n initView();\n },\n]);\n","angular.module('portainer.kubernetes', ['portainer.app']).config([\n '$stateRegistryProvider',\n function ($stateRegistryProvider) {\n 'use strict';\n\n const kubernetes = {\n name: 'kubernetes',\n url: '/kubernetes',\n parent: 'endpoint',\n abstract: true,\n\n onEnter: /* @ngInject */ function onEnter($async, $state, endpoint, EndpointProvider, KubernetesHealthService, Notifications, StateManager) {\n return $async(async () => {\n if (![5, 6, 7].includes(endpoint.Type)) {\n $state.go('portainer.home');\n return;\n }\n try {\n if (endpoint.Type === 7) {\n //edge\n try {\n await KubernetesHealthService.ping(endpoint.Id);\n endpoint.Status = 1;\n } catch (e) {\n endpoint.Status = 2;\n }\n }\n\n EndpointProvider.setEndpointID(endpoint.Id);\n await StateManager.updateEndpointState(endpoint, []);\n\n if (endpoint.Type === 7 && endpoint.Status === 2) {\n throw new Error('Unable to contact Edge agent, please ensure that the agent is properly running on the remote environment.');\n }\n } catch (e) {\n Notifications.error('Failed loading endpoint', e);\n $state.go('portainer.home', {}, { reload: true });\n }\n });\n },\n };\n\n const applications = {\n name: 'kubernetes.applications',\n url: '/applications',\n views: {\n 'content@': {\n component: 'kubernetesApplicationsView',\n },\n },\n };\n\n const applicationCreation = {\n name: 'kubernetes.applications.new',\n url: '/new',\n views: {\n 'content@': {\n component: 'kubernetesCreateApplicationView',\n },\n },\n };\n\n const application = {\n name: 'kubernetes.applications.application',\n url: '/:namespace/:name',\n views: {\n 'content@': {\n component: 'kubernetesApplicationView',\n },\n },\n };\n\n const applicationEdit = {\n name: 'kubernetes.applications.application.edit',\n url: '/edit',\n views: {\n 'content@': {\n component: 'kubernetesCreateApplicationView',\n },\n },\n };\n\n const applicationConsole = {\n name: 'kubernetes.applications.application.console',\n url: '/:pod/:container/console',\n views: {\n 'content@': {\n component: 'kubernetesApplicationConsoleView',\n },\n },\n };\n\n const applicationLogs = {\n name: 'kubernetes.applications.application.logs',\n url: '/:pod/:container/logs',\n views: {\n 'content@': {\n component: 'kubernetesApplicationLogsView',\n },\n },\n };\n\n const applicationStats = {\n name: 'kubernetes.applications.application.stats',\n url: '/:pod/:container/stats',\n views: {\n 'content@': {\n component: 'kubernetesApplicationStatsView',\n },\n },\n };\n\n const stacks = {\n name: 'kubernetes.stacks',\n url: '/stacks',\n abstract: true,\n };\n\n const stack = {\n name: 'kubernetes.stacks.stack',\n url: '/:namespace/:name',\n abstract: true,\n };\n\n const stackLogs = {\n name: 'kubernetes.stacks.stack.logs',\n url: '/logs',\n views: {\n 'content@': {\n component: 'kubernetesStackLogsView',\n },\n },\n };\n\n const configurations = {\n name: 'kubernetes.configurations',\n url: '/configurations',\n views: {\n 'content@': {\n component: 'kubernetesConfigurationsView',\n },\n },\n };\n\n const configurationCreation = {\n name: 'kubernetes.configurations.new',\n url: '/new',\n views: {\n 'content@': {\n component: 'kubernetesCreateConfigurationView',\n },\n },\n };\n\n const configuration = {\n name: 'kubernetes.configurations.configuration',\n url: '/:namespace/:name',\n views: {\n 'content@': {\n component: 'kubernetesConfigurationView',\n },\n },\n };\n\n const cluster = {\n name: 'kubernetes.cluster',\n url: '/cluster',\n views: {\n 'content@': {\n component: 'kubernetesClusterView',\n },\n },\n };\n\n const node = {\n name: 'kubernetes.cluster.node',\n url: '/:name',\n views: {\n 'content@': {\n component: 'kubernetesNodeView',\n },\n },\n };\n\n const nodeStats = {\n name: 'kubernetes.cluster.node.stats',\n url: '/stats',\n views: {\n 'content@': {\n component: 'kubernetesNodeStatsView',\n },\n },\n };\n\n const dashboard = {\n name: 'kubernetes.dashboard',\n url: '/dashboard',\n views: {\n 'content@': {\n component: 'kubernetesDashboardView',\n },\n },\n };\n\n const deploy = {\n name: 'kubernetes.deploy',\n url: '/deploy',\n views: {\n 'content@': {\n component: 'kubernetesDeployView',\n },\n },\n };\n\n const resourcePools = {\n name: 'kubernetes.resourcePools',\n url: '/pools',\n views: {\n 'content@': {\n component: 'kubernetesResourcePoolsView',\n },\n },\n };\n\n const resourcePoolCreation = {\n name: 'kubernetes.resourcePools.new',\n url: '/new',\n views: {\n 'content@': {\n component: 'kubernetesCreateResourcePoolView',\n },\n },\n };\n\n const resourcePool = {\n name: 'kubernetes.resourcePools.resourcePool',\n url: '/:id',\n views: {\n 'content@': {\n component: 'kubernetesResourcePoolView',\n },\n },\n };\n\n const resourcePoolAccess = {\n name: 'kubernetes.resourcePools.resourcePool.access',\n url: '/access',\n views: {\n 'content@': {\n component: 'kubernetesResourcePoolAccessView',\n },\n },\n };\n\n const volumes = {\n name: 'kubernetes.volumes',\n url: '/volumes',\n views: {\n 'content@': {\n component: 'kubernetesVolumesView',\n },\n },\n };\n\n const volume = {\n name: 'kubernetes.volumes.volume',\n url: '/:namespace/:name',\n views: {\n 'content@': {\n component: 'kubernetesVolumeView',\n },\n },\n };\n\n $stateRegistryProvider.register(kubernetes);\n $stateRegistryProvider.register(applications);\n $stateRegistryProvider.register(applicationCreation);\n $stateRegistryProvider.register(application);\n $stateRegistryProvider.register(applicationEdit);\n $stateRegistryProvider.register(applicationConsole);\n $stateRegistryProvider.register(applicationLogs);\n $stateRegistryProvider.register(applicationStats);\n $stateRegistryProvider.register(stacks);\n $stateRegistryProvider.register(stack);\n $stateRegistryProvider.register(stackLogs);\n $stateRegistryProvider.register(configurations);\n $stateRegistryProvider.register(configurationCreation);\n $stateRegistryProvider.register(configuration);\n $stateRegistryProvider.register(cluster);\n $stateRegistryProvider.register(dashboard);\n $stateRegistryProvider.register(deploy);\n $stateRegistryProvider.register(node);\n $stateRegistryProvider.register(nodeStats);\n $stateRegistryProvider.register(resourcePools);\n $stateRegistryProvider.register(resourcePoolCreation);\n $stateRegistryProvider.register(resourcePool);\n $stateRegistryProvider.register(resourcePoolAccess);\n $stateRegistryProvider.register(volumes);\n $stateRegistryProvider.register(volume);\n },\n]);\n","angular.module('portainer.kubernetes').factory('KubernetesComponentStatus', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesComponentStatusFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function () {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/api/v1' + '/componentstatuses/:id';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n }\n );\n };\n },\n]);\n","import angular from 'angular';\nimport PortainerError from 'Portainer/error';\nimport _ from 'lodash-es';\nimport { KubernetesComponentStatusConverter } from './converter';\n\nclass KubernetesComponentStatusService {\n /* @ngInject */\n constructor($async, KubernetesComponentStatus) {\n this.$async = $async;\n this.KubernetesComponentStatus = KubernetesComponentStatus;\n\n this.getAsync = this.getAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAsync() {\n try {\n const data = await this.KubernetesComponentStatus().get().$promise;\n const res = _.map(data.items, (item) => KubernetesComponentStatusConverter.apiToModel(item));\n return res;\n } catch (err) {\n throw new PortainerError('Unable to retrieve cluster status', err);\n }\n }\n\n get() {\n return this.$async(this.getAsync);\n }\n}\n\nexport default KubernetesComponentStatusService;\nangular.module('portainer.kubernetes').service('KubernetesComponentStatusService', KubernetesComponentStatusService);\n","const autoNgTemplateLoaderTemplate1 = require('./containersDatatable.html');\n\nangular.module('portainer.kubernetes').component('kubernetesContainersDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n refreshCallback: '<',\n isPod: '<',\n useServerMetrics: '<',\n },\n});\n","var path = 'app/kubernetes/components/datatables/application/containers-datatable/containersDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n Table settings\\n
    \\n
    \\n
    \\n Table settings\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ item.Status }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Pod\\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Image\\n \\n \\n \\n \\n \\n Image Pull Policy\\n \\n \\n \\n \\n \\n Status\\n \\n \\n \\n \\n \\n Node\\n \\n \\n \\n \\n \\n Creation date\\n \\n \\n \\n Actions
    {{ item.PodName }}{{ item.Name }}{{ item.Image | truncate: 64 }}{{ item.ImagePullPolicy }}\\n \\n \\n {{ item.Node }}\\n \\n \\n -\\n {{ item.CreationDate | getisodate }}\\n \\n Stats\\n \\n Logs \\n \\n Console\\n \\n
    Loading...
    No pod available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./applicationsDatatable.html');\n\nangular.module('portainer.kubernetes').component('kubernetesApplicationsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesApplicationsDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n refreshCallback: '<',\n onPublishingModeClick: '<',\n },\n});\n","var path = 'app/kubernetes/components/datatables/applications-datatable/applicationsDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n \\n \\n System resources are hidden, this can be changed in the table settings.\\n \\n
    \\n \\n Table settings\\n
    \\n
    \\n
    \\n Table settings\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Stack\\n \\n \\n \\n \\n \\n Namespace\\n \\n \\n \\n \\n \\n Image\\n \\n \\n \\n \\n \\n Application Type\\n \\n \\n \\n \\n Status\\n \\n Publishing mode\\n \\n \\n Created\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ item.Name }}\\n system\\n external\\n {{ item.StackName }}\\n {{ item.ResourcePool }}\\n {{ item.Image | truncate: 64 }} 1\\\">+ {{ item.Containers.length - 1 }}\\n {{ item.ApplicationType | kubernetesApplicationTypeText }}\\n Replicated\\n Global\\n {{ item.RunningPodsCount }} / {{ item.TotalPodsCount }}\\n \\n {{ item.Pods[0].Status }}\\n \\n \\n \\n \\n \\n {{ item.ServiceType | kubernetesApplicationServiceTypeText }}\\n \\n \\n \\n -\\n {{ item.CreationDate | getisodate }} {{ item.ApplicationOwner ? 'by ' + item.ApplicationOwner : '' }}
    Loading...
    No application available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import { KubernetesApplicationDeploymentTypes, KubernetesApplicationTypes } from 'Kubernetes/models/application/models';\nimport KubernetesApplicationHelper from 'Kubernetes/helpers/application';\n\nangular.module('portainer.docker').controller('KubernetesApplicationsDatatableController', [\n '$scope',\n '$controller',\n 'KubernetesNamespaceHelper',\n 'DatatableService',\n 'Authentication',\n function ($scope, $controller, KubernetesNamespaceHelper, DatatableService, Authentication) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n var ctrl = this;\n\n this.settings = Object.assign(this.settings, {\n showSystem: false,\n });\n\n this.onSettingsShowSystemChange = function () {\n DatatableService.setDataTableSettings(this.tableKey, this.settings);\n };\n\n this.isExternalApplication = function (item) {\n return KubernetesApplicationHelper.isExternalApplication(item);\n };\n\n this.isSystemNamespace = function (item) {\n return KubernetesNamespaceHelper.isSystemNamespace(item.ResourcePool);\n };\n\n this.isDisplayed = function (item) {\n return !ctrl.isSystemNamespace(item) || ctrl.settings.showSystem;\n };\n\n /**\n * Do not allow applications in system namespaces to be selected\n */\n this.allowSelection = function (item) {\n return !this.isSystemNamespace(item);\n };\n\n this.$onInit = function () {\n this.isAdmin = Authentication.isAdmin();\n this.KubernetesApplicationDeploymentTypes = KubernetesApplicationDeploymentTypes;\n this.KubernetesApplicationTypes = KubernetesApplicationTypes;\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./applicationsPortsDatatable.html');\n\nangular.module('portainer.kubernetes').component('kubernetesApplicationsPortsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesApplicationsPortsDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n refreshCallback: '<',\n },\n});\n","var path = 'app/kubernetes/components/datatables/applications-ports-datatable/applicationsPortsDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n \\n \\n System resources are hidden, this can be changed in the table settings.\\n \\n
    \\n \\n Table settings\\n
    \\n
    \\n
    \\n Table settings\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Application\\n \\n \\n \\n \\n Publishing mode\\n \\n \\n Exposed port\\n \\n \\n \\n \\n \\n Container port\\n \\n \\n \\n \\n HTTP route\\n
    \\n \\n \\n \\n \\n {{ item.Name }}\\n system\\n external\\n \\n \\n \\n Load balancer \\n \\n {{ item.LoadBalancerIPAddress }}\\n pending\\n \\n \\n \\n \\n Internal\\n \\n \\n Cluster \\n \\n \\n {{ item.Ports[0].Port }}\\n \\n access\\n \\n \\n \\n {{ item.Ports[0].TargetPort }}/{{ item.Ports[0].Protocol }} \\n \\n \\n -\\n \\n pending\\n \\n \\n \\n {{ $ctrl.buildIngressRuleURL(item.Ports[0].IngressRules[0]) | stripprotocol }}\\n \\n \\n \\n \\n
    --\\n {{ port.Port }}\\n \\n access\\n \\n {{ port.TargetPort }}/{{ port.Protocol }}-
    --\\n {{ port.Port }}\\n \\n access\\n \\n {{ port.TargetPort }}/{{ port.Protocol }}\\n pending\\n \\n \\n \\n {{ $ctrl.buildIngressRuleURL(rule) | stripprotocol }}\\n \\n \\n
    Loading...
    No application port mapping available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import _ from 'lodash-es';\nimport { KubernetesApplicationDeploymentTypes } from 'Kubernetes/models/application/models';\nimport KubernetesApplicationHelper from 'Kubernetes/helpers/application';\nimport { KubernetesServiceTypes } from 'Kubernetes/models/service/models';\n\nangular.module('portainer.docker').controller('KubernetesApplicationsPortsDatatableController', [\n '$scope',\n '$controller',\n 'KubernetesNamespaceHelper',\n 'DatatableService',\n 'Authentication',\n function ($scope, $controller, KubernetesNamespaceHelper, DatatableService, Authentication) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n this.state = Object.assign(this.state, {\n expandedItems: [],\n expandAll: false,\n });\n\n var ctrl = this;\n this.KubernetesServiceTypes = KubernetesServiceTypes;\n\n this.settings = Object.assign(this.settings, {\n showSystem: false,\n });\n\n this.onSettingsShowSystemChange = function () {\n DatatableService.setDataTableSettings(this.tableKey, this.settings);\n };\n\n this.isExternalApplication = function (item) {\n return KubernetesApplicationHelper.isExternalApplication(item);\n };\n\n this.isSystemNamespace = function (item) {\n return KubernetesNamespaceHelper.isSystemNamespace(item.ResourcePool);\n };\n\n this.isDisplayed = function (item) {\n return !ctrl.isSystemNamespace(item) || ctrl.settings.showSystem;\n };\n\n this.expandItem = function (item, expanded) {\n if (!this.itemCanExpand(item)) {\n return;\n }\n\n item.Expanded = expanded;\n if (!expanded) {\n item.Highlighted = false;\n }\n };\n\n this.itemCanExpand = function (item) {\n return item.Ports.length > 1 || item.Ports[0].IngressRules.length > 1;\n };\n\n this.buildIngressRuleURL = function (rule) {\n const hostname = rule.Host ? rule.Host : rule.IP;\n return 'http://' + hostname + rule.Path;\n };\n\n this.portHasIngressRules = function (port) {\n return port.IngressRules.length > 0;\n };\n\n this.ruleCanBeDisplayed = function (rule) {\n return !rule.Host && !rule.IP ? false : true;\n };\n\n this.hasExpandableItems = function () {\n return _.filter(this.state.filteredDataSet, (item) => this.itemCanExpand(item)).length;\n };\n\n this.expandAll = function () {\n this.state.expandAll = !this.state.expandAll;\n _.forEach(this.state.filteredDataSet, (item) => {\n if (this.itemCanExpand(item)) {\n this.expandItem(item, this.state.expandAll);\n }\n });\n };\n\n this.$onInit = function () {\n this.isAdmin = Authentication.isAdmin();\n this.KubernetesApplicationDeploymentTypes = KubernetesApplicationDeploymentTypes;\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./applicationsStacksDatatable.html');\n\nangular.module('portainer.kubernetes').component('kubernetesApplicationsStacksDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesApplicationsStacksDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n refreshCallback: '<',\n removeAction: '<',\n },\n});\n","var path = 'app/kubernetes/components/datatables/applications-stacks-datatable/applicationsStacksDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n \\n \\n System resources are hidden, this can be changed in the table settings.\\n \\n
    \\n \\n Table settings\\n
    \\n
    \\n
    \\n Table settings\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n Stack\\n \\n \\n \\n \\n \\n Namespace\\n \\n \\n \\n \\n \\n Applications\\n \\n \\n \\n \\n Actions\\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ item.Name }}\\n \\n {{ item.ResourcePool }}\\n system\\n {{ item.Applications.length }}\\n Logs \\n
    \\n {{ app.Name }}\\n external\\n
    Loading...
    No stack available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import _ from 'lodash-es';\nimport { KubernetesApplicationDeploymentTypes } from 'Kubernetes/models/application/models';\nimport KubernetesApplicationHelper from 'Kubernetes/helpers/application';\n\nangular.module('portainer.docker').controller('KubernetesApplicationsStacksDatatableController', [\n '$scope',\n '$controller',\n 'KubernetesNamespaceHelper',\n 'DatatableService',\n 'Authentication',\n function ($scope, $controller, KubernetesNamespaceHelper, DatatableService, Authentication) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n this.state = Object.assign(this.state, {\n expandedItems: [],\n expandAll: false,\n });\n\n var ctrl = this;\n\n this.settings = Object.assign(this.settings, {\n showSystem: false,\n });\n\n this.onSettingsShowSystemChange = function () {\n DatatableService.setDataTableSettings(this.tableKey, this.settings);\n };\n\n this.isExternalApplication = function (item) {\n return KubernetesApplicationHelper.isExternalApplication(item);\n };\n\n /**\n * Do not allow applications in system namespaces to be selected\n */\n this.allowSelection = function (item) {\n return !this.isSystemNamespace(item);\n };\n\n this.isSystemNamespace = function (item) {\n return KubernetesNamespaceHelper.isSystemNamespace(item.ResourcePool);\n };\n\n this.isDisplayed = function (item) {\n return !ctrl.isSystemNamespace(item) || ctrl.settings.showSystem;\n };\n\n this.expandItem = function (item, expanded) {\n if (!this.itemCanExpand(item)) {\n return;\n }\n\n item.Expanded = expanded;\n if (!expanded) {\n item.Highlighted = false;\n }\n };\n\n this.itemCanExpand = function (item) {\n return item.Applications.length > 0;\n };\n\n this.hasExpandableItems = function () {\n return _.filter(this.state.filteredDataSet, (item) => this.itemCanExpand(item)).length;\n };\n\n this.expandAll = function () {\n this.state.expandAll = !this.state.expandAll;\n _.forEach(this.state.filteredDataSet, (item) => {\n if (this.itemCanExpand(item)) {\n this.expandItem(item, this.state.expandAll);\n }\n });\n };\n\n this.$onInit = function () {\n this.isAdmin = Authentication.isAdmin();\n this.KubernetesApplicationDeploymentTypes = KubernetesApplicationDeploymentTypes;\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./configurationsDatatable.html');\n\nangular.module('portainer.kubernetes').component('kubernetesConfigurationsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesConfigurationsDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n refreshCallback: '<',\n removeAction: '<',\n },\n});\n","var path = 'app/kubernetes/components/datatables/configurations-datatable/configurationsDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n \\n \\n System resources are hidden, this can be changed in the table settings.\\n \\n
    \\n \\n Table settings\\n
    \\n
    \\n
    \\n Table settings\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Namespace\\n \\n \\n \\n \\n \\n Type\\n \\n \\n \\n \\n \\n Created\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ item.Name }}\\n external\\n unused\\n system\\n \\n {{ item.Namespace }}\\n {{ item.Type | kubernetesConfigurationTypeText }}{{ item.CreationDate | getisodate }} {{ item.ConfigurationOwner ? 'by ' + item.ConfigurationOwner : '' }}
    Loading...
    No configuration available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import KubernetesConfigurationHelper from 'Kubernetes/helpers/configurationHelper';\n\nangular.module('portainer.docker').controller('KubernetesConfigurationsDatatableController', [\n '$scope',\n '$controller',\n 'KubernetesNamespaceHelper',\n 'DatatableService',\n 'Authentication',\n function ($scope, $controller, KubernetesNamespaceHelper, DatatableService, Authentication) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n const ctrl = this;\n\n this.settings = Object.assign(this.settings, {\n showSystem: false,\n });\n\n this.onSettingsShowSystemChange = function () {\n DatatableService.setDataTableSettings(this.tableKey, this.settings);\n };\n\n this.isSystemNamespace = function (item) {\n return KubernetesNamespaceHelper.isSystemNamespace(item.Namespace);\n };\n\n this.isSystemToken = function (item) {\n return KubernetesConfigurationHelper.isSystemToken(item);\n };\n\n this.isSystemConfig = function (item) {\n return ctrl.isSystemNamespace(item) || ctrl.isSystemToken(item);\n };\n\n this.isExternalConfiguration = function (item) {\n return KubernetesConfigurationHelper.isExternalConfiguration(item);\n };\n\n this.isDisplayed = function (item) {\n return !ctrl.isSystemConfig(item) || (ctrl.settings.showSystem && ctrl.isAdmin);\n };\n\n /**\n * Do not allow configurations in system namespaces to be selected\n */\n this.allowSelection = function (item) {\n return !this.isSystemConfig(item) && !item.Used;\n };\n\n this.$onInit = function () {\n this.isAdmin = Authentication.isAdmin();\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./eventsDatatable.html');\n\nangular.module('portainer.kubernetes').component('kubernetesEventsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n loading: '<',\n refreshCallback: '<',\n },\n});\n","var path = 'app/kubernetes/components/datatables/events-datatable/eventsDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n Table settings\\n
    \\n
    \\n
    \\n Table settings\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ item.Type }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Date\\n \\n \\n \\n \\n \\n Kind\\n \\n \\n \\n \\n \\n Type\\n \\n \\n \\n \\n \\n Message\\n \\n \\n \\n
    {{ item.Date | getisodate }}{{ item.Involved.kind }}{{ item.Message }}
    Loading...
    No event available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./integratedApplicationsDatatable.html');\n\nangular.module('portainer.kubernetes').component('kubernetesIntegratedApplicationsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n refreshCallback: '<',\n },\n});\n","var path = 'app/kubernetes/components/datatables/integrated-applications-datatable/integratedApplicationsDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    \\n \\n {{ $ctrl.titleText }}\\n
    \\n
    \\n \\n Table settings \\n
    \\n
    \\n
    \\n Table settings\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ item.Name }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Name\\n \\n \\n \\n \\n \\n Stack\\n \\n \\n \\n \\n \\n Image\\n \\n \\n \\n
    {{ item.StackName }}{{ item.Image | truncate: 64 }}
    Loading...
    No application available.
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./nodeApplicationsDatatable.html');\n\nangular.module('portainer.kubernetes').component('kubernetesNodeApplicationsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesNodeApplicationsDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n refreshCallback: '<',\n },\n});\n","var path = 'app/kubernetes/components/datatables/node-applications-datatable/nodeApplicationsDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    \\n \\n {{ $ctrl.titleText }}\\n
    \\n
    \\n \\n Table settings \\n
    \\n
    \\n
    \\n Table settings\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Name\\n \\n \\n \\n \\n \\n Stack\\n \\n \\n \\n \\n \\n Namespace\\n \\n \\n \\n \\n \\n Image\\n \\n \\n \\n \\n \\n CPU reservation\\n \\n \\n \\n \\n \\n Memory reservation\\n \\n \\n \\n
    \\n {{ item.Name }}\\n system\\n external\\n {{ item.StackName }}\\n {{ item.ResourcePool }}\\n {{ item.Image | truncate: 64 }} 1\\\">+ {{ item.Containers.length - 1 }}\\n {{ item.CPU | kubernetesApplicationCPUValue }}{{ item.Memory | humansize }}
    Loading...
    No stack available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import { KubernetesApplicationDeploymentTypes } from 'Kubernetes/models/application/models';\nimport KubernetesApplicationHelper from 'Kubernetes/helpers/application';\n\nangular.module('portainer.docker').controller('KubernetesNodeApplicationsDatatableController', [\n '$scope',\n '$controller',\n 'KubernetesNamespaceHelper',\n 'DatatableService',\n function ($scope, $controller, KubernetesNamespaceHelper, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n this.isSystemNamespace = function (item) {\n return KubernetesNamespaceHelper.isSystemNamespace(item.ResourcePool);\n };\n\n this.isExternalApplication = function (item) {\n return KubernetesApplicationHelper.isExternalApplication(item);\n };\n\n this.$onInit = function () {\n this.KubernetesApplicationDeploymentTypes = KubernetesApplicationDeploymentTypes;\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./nodesDatatable.html');\n\nangular.module('portainer.kubernetes').component('kubernetesNodesDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n refreshCallback: '<',\n isAdmin: '<',\n useServerMetrics: '<',\n },\n});\n","var path = 'app/kubernetes/components/datatables/nodes-datatable/nodesDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n Table settings\\n
    \\n
    \\n
    \\n Table settings\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ item.Status }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Name\\n \\n \\n \\n \\n \\n Role\\n \\n \\n \\n \\n \\n Status\\n \\n \\n \\n \\n \\n CPU\\n \\n \\n \\n \\n \\n Memory\\n \\n \\n \\n \\n \\n Version\\n \\n \\n \\n \\n \\n IP Address\\n \\n \\n \\n \\n Actions\\n
    \\n \\n {{ item.Name }}\\n \\n api\\n {{ item.Name }}{{ item.Role }}{{ item.CPU }}{{ item.Memory | humansize }}{{ item.Version }}{{ item.IPAddress }}\\n Stats \\n
    Loading...
    No node available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./resourcePoolApplicationsDatatable.html');\n\nangular.module('portainer.kubernetes').component('kubernetesResourcePoolApplicationsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesResourcePoolApplicationsDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n refreshCallback: '<',\n },\n});\n","var path = 'app/kubernetes/components/datatables/resource-pool-applications-datatable/resourcePoolApplicationsDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    \\n \\n {{ $ctrl.titleText }}\\n
    \\n
    \\n \\n Table settings \\n
    \\n
    \\n
    \\n Table settings\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Name\\n \\n \\n \\n \\n \\n Stack\\n \\n \\n \\n \\n \\n Image\\n \\n \\n \\n \\n \\n CPU reservation\\n \\n \\n \\n \\n \\n Memory reservation\\n \\n \\n \\n
    \\n {{ item.Name }}\\n external\\n {{ item.StackName }}{{ item.Image | truncate: 64 }} 1\\\">+ {{ item.Containers.length - 1 }}\\n {{ item.CPU | kubernetesApplicationCPUValue }}{{ item.Memory | humansize }}
    Loading...
    No application available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import KubernetesApplicationHelper from 'Kubernetes/helpers/application';\n\nangular.module('portainer.docker').controller('KubernetesResourcePoolApplicationsDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n function ($scope, $controller, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n this.isExternalApplication = function (item) {\n return KubernetesApplicationHelper.isExternalApplication(item);\n };\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./resourcePoolsDatatable.html');\n\nangular.module('portainer.kubernetes').component('kubernetesResourcePoolsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesResourcePoolsDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n refreshCallback: '<',\n },\n});\n","var path = 'app/kubernetes/components/datatables/resource-pools-datatable/resourcePoolsDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n \\n \\n System resources are hidden, this can be changed in the table settings.\\n \\n
    \\n \\n Table settings\\n
    \\n
    \\n
    \\n Table settings\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Quota\\n \\n \\n \\n \\n \\n Created\\n \\n \\n \\n \\n Actions\\n
    \\n \\n \\n \\n \\n {{ item.Namespace.Name }}\\n system\\n {{ item.Quota ? 'Yes' : 'No' }} {{ item.Namespace.CreationDate | getisodate }} {{ item.Namespace.ResourcePoolOwner ? 'by ' + item.Namespace.ResourcePoolOwner : '' }}\\n \\n Manage access\\n \\n -\\n
    Loading...
    No namespace available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.docker').controller('KubernetesResourcePoolsDatatableController', [\n '$scope',\n '$controller',\n 'Authentication',\n 'KubernetesNamespaceHelper',\n 'DatatableService',\n function ($scope, $controller, Authentication, KubernetesNamespaceHelper, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n var ctrl = this;\n\n this.settings = Object.assign(this.settings, {\n showSystem: false,\n });\n\n this.onSettingsShowSystemChange = function () {\n DatatableService.setDataTableSettings(this.tableKey, this.settings);\n };\n\n this.canManageAccess = function (item) {\n return item.Namespace.Name !== 'default' && !this.isSystemNamespace(item);\n };\n\n this.disableRemove = function (item) {\n return KubernetesNamespaceHelper.isSystemNamespace(item.Namespace.Name) || item.Namespace.Name === 'default';\n };\n\n this.isSystemNamespace = function (item) {\n return KubernetesNamespaceHelper.isSystemNamespace(item.Namespace.Name);\n };\n\n this.isDisplayed = function (item) {\n return !ctrl.isSystemNamespace(item) || (ctrl.settings.showSystem && ctrl.isAdmin);\n };\n\n /**\n * Do not allow system namespaces to be selected\n */\n this.allowSelection = function (item) {\n return !this.disableRemove(item);\n };\n\n this.$onInit = function () {\n this.isAdmin = Authentication.isAdmin();\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./volumesDatatable.html');\n\nangular.module('portainer.kubernetes').component('kubernetesVolumesDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesVolumesDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n refreshCallback: '<',\n },\n});\n","var path = 'app/kubernetes/components/datatables/volumes-datatable/volumesDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n \\n \\n System resources are hidden, this can be changed in the table settings.\\n \\n
    \\n \\n Table settings\\n
    \\n
    \\n
    \\n Table settings\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Namespace\\n \\n \\n \\n \\n \\n Used by\\n \\n \\n \\n \\n \\n Storage\\n \\n \\n \\n \\n \\n Size\\n \\n \\n \\n \\n \\n Created\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{\\n item.PersistentVolumeClaim.Name\\n }}\\n system\\n external\\n unused\\n \\n {{ item.ResourcePool.Namespace.Name }}\\n \\n {{ item.Applications[0].Name }}\\n 1\\\"> + {{ item.Applications.length - 1 }}\\n -\\n \\n {{ item.PersistentVolumeClaim.StorageClass.Name }}\\n \\n {{ item.PersistentVolumeClaim.Storage }}\\n \\n {{ item.PersistentVolumeClaim.CreationDate | getisodate }}\\n {{ item.PersistentVolumeClaim.ApplicationOwner ? 'by ' + item.PersistentVolumeClaim.ApplicationOwner : '' }}\\n
    Loading...
    No volume available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\nimport KubernetesVolumeHelper from 'Kubernetes/helpers/volumeHelper';\n\n// TODO: review - refactor to use `extends GenericDatatableController`\nclass KubernetesVolumesDatatableController {\n /* @ngInject */\n constructor($async, $controller, Authentication, KubernetesNamespaceHelper, DatatableService) {\n this.$async = $async;\n this.$controller = $controller;\n this.Authentication = Authentication;\n this.KubernetesNamespaceHelper = KubernetesNamespaceHelper;\n this.DatatableService = DatatableService;\n\n this.onInit = this.onInit.bind(this);\n this.allowSelection = this.allowSelection.bind(this);\n this.isDisplayed = this.isDisplayed.bind(this);\n }\n\n onSettingsShowSystemChange() {\n this.DatatableService.setDataTableSettings(this.tableKey, this.settings);\n }\n\n disableRemove(item) {\n return this.isSystemNamespace(item) || this.isUsed(item);\n }\n\n isUsed(item) {\n return KubernetesVolumeHelper.isUsed(item);\n }\n\n isSystemNamespace(item) {\n return this.KubernetesNamespaceHelper.isSystemNamespace(item.ResourcePool.Namespace.Name);\n }\n\n isDisplayed(item) {\n return !this.isSystemNamespace(item) || this.settings.showSystem;\n }\n\n isExternalVolume(item) {\n return KubernetesVolumeHelper.isExternalVolume(item);\n }\n\n allowSelection(item) {\n return !this.disableRemove(item);\n }\n\n async onInit() {\n this.setDefaults();\n this.prepareTableFromDataset();\n this.isAdmin = this.Authentication.isAdmin();\n this.settings.showSystem = false;\n\n this.state.orderBy = this.orderBy;\n var storedOrder = this.DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = this.DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = this.DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = this.DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n }\n\n $onInit() {\n const ctrl = angular.extend({}, this.$controller('GenericDatatableController'), this);\n angular.extend(this, ctrl);\n return this.$async(this.onInit);\n }\n}\n\nexport default KubernetesVolumesDatatableController;\nangular.module('portainer.kubernetes').controller('KubernetesVolumesDatatableController', KubernetesVolumesDatatableController);\n","const autoNgTemplateLoaderTemplate1 = require('./kubernetesConfigurationData.html');\n\nangular.module('portainer.kubernetes').component('kubernetesConfigurationData', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesConfigurationDataController',\n bindings: {\n formValues: '=',\n isValid: '=',\n isCreation: '=',\n isEditorDirty: '=',\n },\n});\n","var path = 'app/kubernetes/components/kubernetes-configuration-data/kubernetesConfigurationData.html';\nvar html = \"\\n
    \\n Data\\n
    \\n\\n
    \\n \\n
    \\n \\n Switch to advanced mode to copy and paste multiple key/values\\n
    \\n
    \\n \\n Generate a configuration entry per line, use YAML format\\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n \\n

    This field is required.

    \\n
    \\n

    This key is already defined.

    \\n

    This key is invalid. A valid key must consist of alphanumeric characters, '-', '_' or '.'\\n

    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n\\n
    \\n \\n
    Binary data
    \\n
    \\n\\n
    \\n
    \\n
    \\n \\n \\n \\n This key is currently used by one or more applications\\n \\n
    \\n
    \\n
    \\n\\n
    \\n \\n \\n
    \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\nimport _ from 'lodash-es';\nimport chardet from 'chardet';\nimport { Base64 } from 'js-base64';\nimport KubernetesFormValidationHelper from 'Kubernetes/helpers/formValidationHelper';\nimport KubernetesConfigurationHelper from 'Kubernetes/helpers/configurationHelper';\nimport { KubernetesConfigurationFormValuesEntry } from 'Kubernetes/models/configuration/formvalues';\n\nclass KubernetesConfigurationDataController {\n /* @ngInject */\n constructor($async) {\n this.$async = $async;\n\n this.editorUpdate = this.editorUpdate.bind(this);\n this.editorUpdateAsync = this.editorUpdateAsync.bind(this);\n this.onFileLoad = this.onFileLoad.bind(this);\n this.onFileLoadAsync = this.onFileLoadAsync.bind(this);\n this.showSimpleMode = this.showSimpleMode.bind(this);\n this.showAdvancedMode = this.showAdvancedMode.bind(this);\n }\n\n onChangeKey(entry) {\n if (entry && entry.Used) {\n return;\n }\n\n this.state.duplicateKeys = KubernetesFormValidationHelper.getDuplicates(_.map(this.formValues.Data, (data) => data.Key));\n this.state.invalidKeys = KubernetesFormValidationHelper.getInvalidKeys(_.map(this.formValues.Data, (data) => data.Key));\n this.isValid = Object.keys(this.state.duplicateKeys).length === 0 && Object.keys(this.state.invalidKeys).length === 0;\n }\n\n addEntry() {\n this.formValues.Data.push(new KubernetesConfigurationFormValuesEntry());\n }\n\n removeEntry(index, entry) {\n if (entry.Used) {\n return;\n }\n\n this.formValues.Data.splice(index, 1);\n this.onChangeKey();\n }\n\n async editorUpdateAsync(cm) {\n if (this.formValues.DataYaml !== cm.getValue()) {\n this.formValues.DataYaml = cm.getValue();\n this.isEditorDirty = true;\n }\n }\n\n editorUpdate(cm) {\n return this.$async(this.editorUpdateAsync, cm);\n }\n\n async onFileLoadAsync(event) {\n const entry = new KubernetesConfigurationFormValuesEntry();\n const encoding = chardet.detect(Buffer.from(event.target.result));\n const decoder = new TextDecoder(encoding);\n\n entry.Key = event.target.fileName;\n entry.IsBinary = KubernetesConfigurationHelper.isBinary(encoding);\n\n if (!entry.IsBinary) {\n entry.Value = decoder.decode(event.target.result);\n } else {\n const stringValue = decoder.decode(event.target.result);\n entry.Value = Base64.encode(stringValue);\n }\n\n this.formValues.Data.push(entry);\n this.onChangeKey();\n }\n\n onFileLoad(event) {\n return this.$async(this.onFileLoadAsync, event);\n }\n\n addEntryFromFile(file) {\n if (file) {\n const temporaryFileReader = new FileReader();\n temporaryFileReader.fileName = file.name;\n temporaryFileReader.onload = this.onFileLoad;\n temporaryFileReader.readAsArrayBuffer(file);\n }\n }\n\n showSimpleMode() {\n this.formValues.IsSimple = true;\n this.formValues.Data = KubernetesConfigurationHelper.parseYaml(this.formValues);\n this.onChangeKey();\n }\n\n showAdvancedMode() {\n this.formValues.IsSimple = false;\n this.formValues.DataYaml = KubernetesConfigurationHelper.parseData(this.formValues);\n }\n\n $onInit() {\n this.state = {\n duplicateKeys: [],\n invalidKeys: {},\n };\n }\n}\n\nexport default KubernetesConfigurationDataController;\nangular.module('portainer.kubernetes').controller('KubernetesConfigurationDataController', KubernetesConfigurationDataController);\n","const autoNgTemplateLoaderTemplate1 = require('./kubernetesSidebarContent.html');\n\nangular.module('portainer.kubernetes').component('kubernetesSidebarContent', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n adminAccess: '<',\n endpointId: '<',\n currentState: '<',\n },\n});\n","var path = 'app/kubernetes/components/kubernetes-sidebar-content/kubernetesSidebarContent.html';\nvar html = \"
  • \\n Dashboard \\n
  • \\n
  • \\n Namespaces \\n
  • \\n
  • \\n Applications \\n
  • \\n
  • \\n Configurations \\n
  • \\n
  • \\n Volumes \\n
  • \\n
  • \\n Cluster \\n
    \\n Setup\\n
    \\n
  • \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./resourceReservation.html');\n\nangular.module('portainer.kubernetes').component('kubernetesResourceReservation', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesResourceReservationController',\n bindings: {\n description: '@',\n cpu: '<',\n cpuLimit: '<',\n memory: '<',\n memoryLimit: '<',\n },\n});\n","var path = 'app/kubernetes/components/resource-reservation/resourceReservation.html';\nvar html = \"
    \\n
    \\n Resource reservation\\n
    \\n
    \\n \\n

    \\n {{ $ctrl.description }}\\n

    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n {{ $ctrl.memory }} / {{ $ctrl.memoryLimit }} MB - {{ $ctrl.memoryUsage }}% \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n {{ $ctrl.cpu | kubernetesApplicationCPUValue }} / {{ $ctrl.cpuLimit }} - {{ $ctrl.cpuUsage }}% \\n \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\n\nclass KubernetesResourceReservationController {\n usageValues() {\n if (this.cpuLimit) {\n this.cpuUsage = Math.round((this.cpu / this.cpuLimit) * 100);\n }\n if (this.memoryLimit) {\n this.memoryUsage = Math.round((this.memory / this.memoryLimit) * 100);\n }\n }\n\n $onInit() {\n this.usageValues();\n }\n\n $onChanges() {\n this.usageValues();\n }\n}\n\nexport default KubernetesResourceReservationController;\nangular.module('portainer.kubernetes').controller('KubernetesResourceReservationController', KubernetesResourceReservationController);\n","const autoNgTemplateLoaderTemplate1 = require('./viewHeader.html');\n\nangular.module('portainer.kubernetes').component('kubernetesViewHeader', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n transclude: true,\n bindings: {\n viewReady: '<',\n title: '@',\n state: '@',\n },\n});\n","var path = 'app/kubernetes/components/view-header/viewHeader.html';\nvar html = \"\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./viewLoading.html');\n\nangular.module('portainer.kubernetes').component('kubernetesViewLoading', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n viewReady: '<',\n },\n});\n","var path = 'app/kubernetes/components/view-loading/viewLoading.html';\nvar html = \"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./yamlInspector.html');\n\nangular.module('portainer.kubernetes').component('kubernetesYamlInspector', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesYamlInspectorController',\n bindings: {\n key: '@',\n data: '<',\n },\n});\n","var path = 'app/kubernetes/components/yaml-inspector/yamlInspector.html';\nvar html = \"
    \\n \\n
    \\n Copy to clipboard\\n \\n {{ $ctrl.expanded ? 'Collapse' : 'Expand' }}\\n copied \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\n\nclass KubernetesYamlInspectorController {\n /* @ngInject */\n\n constructor(clipboard) {\n this.clipboard = clipboard;\n this.expanded = false;\n }\n\n copyYAML() {\n this.clipboard.copyText(this.data);\n $('#copyNotificationYAML').show().fadeOut(2500);\n }\n\n toggleYAMLInspectorExpansion() {\n let selector = 'kubernetes-yaml-inspector code-editor > div.CodeMirror';\n let height = this.expanded ? '500px' : '80vh';\n $(selector).css({ height: height });\n this.expanded = !this.expanded;\n }\n}\n\nexport default KubernetesYamlInspectorController;\nangular.module('portainer.kubernetes').controller('KubernetesYamlInspectorController', KubernetesYamlInspectorController);\n","angular.module('portainer.kubernetes').factory('KubernetesEndpoints', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesEndpointsFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/api/v1' + (namespace ? '/namespaces/:namespace' : '') + '/endpoints/:id';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n }\n );\n };\n },\n]);\n","import _ from 'lodash-es';\nimport angular from 'angular';\nimport PortainerError from 'Portainer/error';\nimport KubernetesEndpointConverter from 'Kubernetes/endpoint/converter';\n\nclass KubernetesEndpointService {\n /* @ngInject */\n constructor($async, KubernetesEndpoints) {\n this.$async = $async;\n this.KubernetesEndpoints = KubernetesEndpoints;\n\n this.getAllAsync = this.getAllAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAllAsync(namespace) {\n try {\n const data = await this.KubernetesEndpoints(namespace).get().$promise;\n return _.map(data.items, (item) => KubernetesEndpointConverter.apiToEndpoint(item));\n } catch (err) {\n throw new PortainerError('Unable to retrieve endpoints', err);\n }\n }\n\n get(namespace) {\n return this.$async(this.getAllAsync, namespace);\n }\n}\n\nexport default KubernetesEndpointService;\nangular.module('portainer.kubernetes').service('KubernetesEndpointService', KubernetesEndpointService);\n","import _ from 'lodash-es';\nimport { KubernetesApplicationDataAccessPolicies } from 'Kubernetes/models/application/models';\nimport { KubernetesServiceTypes } from 'Kubernetes/models/service/models';\nimport { KubernetesApplicationTypes, KubernetesApplicationTypeStrings } from 'Kubernetes/models/application/models';\nimport { KubernetesPodNodeAffinityNodeSelectorRequirementOperators } from 'Kubernetes/pod/models';\n\nangular\n .module('portainer.kubernetes')\n .filter('kubernetesApplicationServiceTypeIcon', function () {\n 'use strict';\n return function (text) {\n var status = _.toLower(text);\n switch (status) {\n case 'loadbalancer':\n return 'fa-project-diagram';\n case 'clusterip':\n return 'fa-list-alt';\n case 'nodeport':\n return 'fa-list';\n }\n };\n })\n .filter('kubernetesApplicationServiceTypeText', function () {\n 'use strict';\n return function (text) {\n var status = _.toLower(text);\n switch (status) {\n case 'loadbalancer':\n return 'Load balancer';\n case 'clusterip':\n return 'Internal';\n case 'nodeport':\n return 'Cluster';\n }\n };\n })\n .filter('kubernetesApplicationPortsTableHeaderText', function () {\n 'use strict';\n return function (serviceType) {\n switch (serviceType) {\n case KubernetesServiceTypes.LOAD_BALANCER:\n return 'Load balancer';\n case KubernetesServiceTypes.CLUSTER_IP:\n return 'Application';\n case KubernetesServiceTypes.NODE_PORT:\n return 'Cluster node';\n }\n };\n })\n .filter('kubernetesApplicationTypeText', function () {\n 'use strict';\n return function (type) {\n switch (type) {\n case KubernetesApplicationTypes.DEPLOYMENT:\n return KubernetesApplicationTypeStrings.DEPLOYMENT;\n case KubernetesApplicationTypes.DAEMONSET:\n return KubernetesApplicationTypeStrings.DAEMONSET;\n case KubernetesApplicationTypes.STATEFULSET:\n return KubernetesApplicationTypeStrings.STATEFULSET;\n case KubernetesApplicationTypes.POD:\n return KubernetesApplicationTypeStrings.POD;\n default:\n return '-';\n }\n };\n })\n .filter('kubernetesApplicationCPUValue', function () {\n 'use strict';\n return function (value) {\n return _.round(value, 2);\n };\n })\n .filter('kubernetesApplicationDataAccessPolicyIcon', function () {\n 'use strict';\n return function (value) {\n switch (value) {\n case KubernetesApplicationDataAccessPolicies.ISOLATED:\n return 'fa-cubes';\n case KubernetesApplicationDataAccessPolicies.SHARED:\n return 'fa-cube';\n }\n };\n })\n .filter('kubernetesApplicationDataAccessPolicyText', function () {\n 'use strict';\n return function (value) {\n switch (value) {\n case KubernetesApplicationDataAccessPolicies.ISOLATED:\n return 'Isolated';\n case KubernetesApplicationDataAccessPolicies.SHARED:\n return 'Shared';\n }\n };\n })\n .filter('kubernetesApplicationDataAccessPolicyTooltip', function () {\n 'use strict';\n return function (value) {\n switch (value) {\n case KubernetesApplicationDataAccessPolicies.ISOLATED:\n return 'All the instances of this application are using their own data.';\n case KubernetesApplicationDataAccessPolicies.SHARED:\n return 'All the instances of this application are sharing the same data.';\n }\n };\n })\n .filter('kubernetesApplicationConstraintNodeAffinityValue', function () {\n 'use strict';\n return function (values, operator) {\n if (operator === KubernetesPodNodeAffinityNodeSelectorRequirementOperators.IN || operator === KubernetesPodNodeAffinityNodeSelectorRequirementOperators.NOT_IN) {\n return values;\n } else if (\n operator === KubernetesPodNodeAffinityNodeSelectorRequirementOperators.EXISTS ||\n operator === KubernetesPodNodeAffinityNodeSelectorRequirementOperators.DOES_NOT_EXIST\n ) {\n return '';\n } else if (\n operator === KubernetesPodNodeAffinityNodeSelectorRequirementOperators.GREATER_THAN ||\n operator === KubernetesPodNodeAffinityNodeSelectorRequirementOperators.LOWER_THAN\n ) {\n return values[0];\n }\n return '';\n };\n })\n .filter('kubernetesNodeLabelHumanReadbleText', function () {\n 'use strict';\n return function (text) {\n const values = {\n 'kubernetes.io/os': 'Operating system',\n 'kubernetes.io/arch': 'Architecture',\n 'kubernetes.io/hostname': 'Node',\n };\n return values[text] || text;\n };\n })\n .filter('kubernetesApplicationIngressEmptyHostname', function () {\n 'use strict';\n return function (value) {\n if (value === '') {\n return '';\n } else {\n return value;\n }\n };\n });\n","import { KubernetesConfigurationTypes } from 'Kubernetes/models/configuration/models';\n\nangular.module('portainer.kubernetes').filter('kubernetesConfigurationTypeText', function () {\n 'use strict';\n return function (type) {\n switch (type) {\n case KubernetesConfigurationTypes.SECRET:\n return 'Sensitive';\n case KubernetesConfigurationTypes.CONFIGMAP:\n return 'Non-sensitive';\n }\n };\n});\n","import _ from 'lodash-es';\n\nangular.module('portainer.kubernetes').filter('kubernetesEventTypeColor', function () {\n 'use strict';\n return function (text) {\n var status = _.toLower(text);\n switch (status) {\n case 'normal':\n return 'info';\n case 'warning':\n return 'warning';\n default:\n return 'danger';\n }\n };\n});\n","angular.module('portainer.kubernetes').filter('kubernetesUsageLevelInfo', function () {\n return function (usage) {\n if (usage >= 80) {\n return 'danger';\n } else if (usage > 50 && usage < 80) {\n return 'warning';\n } else {\n return 'success';\n }\n };\n});\n","import _ from 'lodash-es';\nimport angular from 'angular';\n\nclass KubernetesNamespaceHelper {\n /* @ngInject */\n constructor(KUBERNETES_SYSTEM_NAMESPACES, KUBERNETES_DEFAULT_NAMESPACE) {\n this.KUBERNETES_SYSTEM_NAMESPACES = KUBERNETES_SYSTEM_NAMESPACES;\n this.KUBERNETES_DEFAULT_NAMESPACE = KUBERNETES_DEFAULT_NAMESPACE;\n }\n\n isSystemNamespace(namespace) {\n return _.includes(this.KUBERNETES_SYSTEM_NAMESPACES, namespace);\n }\n\n isDefaultNamespace(namespace) {\n return namespace === this.KUBERNETES_DEFAULT_NAMESPACE;\n }\n}\n\nexport default KubernetesNamespaceHelper;\nangular.module('portainer.app').service('KubernetesNamespaceHelper', KubernetesNamespaceHelper);\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesHorizontalPodAutoScalers', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesHorizontalPodAutoScalersFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/apis/autoscaling/v1' + (namespace ? '/namespaces/:namespace' : '') + '/horizontalpodautoscalers/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n patch: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n rollback: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n delete: { method: 'DELETE' },\n }\n );\n };\n },\n]);\n","import angular from 'angular';\nimport _ from 'lodash-es';\nimport PortainerError from 'Portainer/error';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\nimport { KubernetesHorizontalPodAutoScalerConverter } from './converter';\n\nclass KubernetesHorizontalPodAutoScalerService {\n /* @ngInject */\n constructor($async, KubernetesHorizontalPodAutoScalers) {\n this.$async = $async;\n this.KubernetesHorizontalPodAutoScalers = KubernetesHorizontalPodAutoScalers;\n\n this.getAsync = this.getAsync.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n this.createAsync = this.createAsync.bind(this);\n this.patchAsync = this.patchAsync.bind(this);\n // this.rollbackAsync = this.rollbackAsync.bind(this);\n this.deleteAsync = this.deleteAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAsync(namespace, name) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n const [raw, yaml] = await Promise.all([\n this.KubernetesHorizontalPodAutoScalers(namespace).get(params).$promise,\n this.KubernetesHorizontalPodAutoScalers(namespace).getYaml(params).$promise,\n ]);\n const res = KubernetesHorizontalPodAutoScalerConverter.apiToModel(raw, yaml);\n return res;\n } catch (err) {\n throw new PortainerError('Unable to retrieve HorizontalPodAutoScaler', err);\n }\n }\n\n async getAllAsync(namespace) {\n try {\n const data = await this.KubernetesHorizontalPodAutoScalers(namespace).get().$promise;\n const res = _.map(data.items, (item) => KubernetesHorizontalPodAutoScalerConverter.apiToModel(item));\n return res;\n } catch (err) {\n throw new PortainerError('Unable to retrieve HorizontalPodAutoScalers', err);\n }\n }\n\n get(namespace, name) {\n if (name) {\n return this.$async(this.getAsync, namespace, name);\n }\n return this.$async(this.getAllAsync, namespace);\n }\n\n /**\n * CREATE\n */\n async createAsync(horizontalPodAutoScaler) {\n try {\n const params = {};\n const payload = KubernetesHorizontalPodAutoScalerConverter.createPayload(horizontalPodAutoScaler);\n const namespace = payload.metadata.namespace;\n const data = await this.KubernetesHorizontalPodAutoScalers(namespace).create(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to create horizontalPodAutoScaler', err);\n }\n }\n\n create(horizontalPodAutoScaler) {\n return this.$async(this.createAsync, horizontalPodAutoScaler);\n }\n\n /**\n * PATCH\n */\n async patchAsync(oldHorizontalPodAutoScaler, newHorizontalPodAutoScaler) {\n try {\n const params = new KubernetesCommonParams();\n params.id = newHorizontalPodAutoScaler.Name;\n const namespace = newHorizontalPodAutoScaler.Namespace;\n const payload = KubernetesHorizontalPodAutoScalerConverter.patchPayload(oldHorizontalPodAutoScaler, newHorizontalPodAutoScaler);\n if (!payload.length) {\n return;\n }\n const data = await this.KubernetesHorizontalPodAutoScalers(namespace).patch(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to patch horizontalPodAutoScaler', err);\n }\n }\n\n patch(oldHorizontalPodAutoScaler, newHorizontalPodAutoScaler) {\n return this.$async(this.patchAsync, oldHorizontalPodAutoScaler, newHorizontalPodAutoScaler);\n }\n\n /**\n * DELETE\n */\n async deleteAsync(horizontalPodAutoScaler) {\n try {\n const params = new KubernetesCommonParams();\n params.id = horizontalPodAutoScaler.Name;\n const namespace = horizontalPodAutoScaler.Namespace;\n await this.KubernetesHorizontalPodAutoScalers(namespace).delete(params).$promise;\n } catch (err) {\n throw new PortainerError('Unable to remove horizontalPodAutoScaler', err);\n }\n }\n\n delete(horizontalPodAutoScaler) {\n return this.$async(this.deleteAsync, horizontalPodAutoScaler);\n }\n\n // /**\n // * ROLLBACK\n // */\n // async rollbackAsync(namespace, name, payload) {\n // try {\n // const params = new KubernetesCommonParams();\n // params.id = name;\n // await this.KubernetesHorizontalPodAutoScalers(namespace).rollback(params, payload).$promise;\n // } catch (err) {\n // throw new PortainerError('Unable to rollback horizontalPodAutoScaler', err);\n // }\n // }\n\n // rollback(namespace, name, payload) {\n // return this.$async(this.rollbackAsync, namespace, name, payload);\n // }\n}\n\nexport default KubernetesHorizontalPodAutoScalerService;\nangular.module('portainer.kubernetes').service('KubernetesHorizontalPodAutoScalerService', KubernetesHorizontalPodAutoScalerService);\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesIngresses', factory);\n\nfunction factory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = `${API_ENDPOINT_ENDPOINTS}/:endpointId/kubernetes/apis/networking.k8s.io/v1beta1${namespace ? '/namespaces/:namespace' : ''}/ingresses/:id/:action`;\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n patch: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n rollback: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n delete: { method: 'DELETE' },\n }\n );\n };\n}\n","import _ from 'lodash-es';\nimport angular from 'angular';\nimport PortainerError from 'Portainer/error';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\nimport { KubernetesIngressConverter } from './converter';\n\n/* @ngInject */\nexport function KubernetesIngressService($async, KubernetesIngresses) {\n return {\n get,\n create,\n patch,\n delete: _delete,\n };\n\n async function getOne(namespace, name) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n const [raw, yaml] = await Promise.all([KubernetesIngresses(namespace).get(params).$promise, KubernetesIngresses(namespace).getYaml(params).$promise]);\n const res = {\n Raw: KubernetesIngressConverter.apiToModel(raw),\n Yaml: yaml.data,\n };\n return res;\n } catch (err) {\n throw new PortainerError('Unable to retrieve Ingress', err);\n }\n }\n\n async function getAll(namespace) {\n try {\n const data = await KubernetesIngresses(namespace).get().$promise;\n const res = _.reduce(data.items, (arr, item) => _.concat(arr, KubernetesIngressConverter.apiToModel(item)), []);\n return res;\n } catch (err) {\n throw new PortainerError('Unable to retrieve Ingresses', err);\n }\n }\n\n function get(namespace, name) {\n if (name) {\n return $async(getOne, namespace, name);\n }\n return $async(getAll, namespace);\n }\n\n function create(ingress) {\n return $async(async () => {\n try {\n const params = {};\n const payload = KubernetesIngressConverter.createPayload(ingress);\n const namespace = payload.metadata.namespace;\n const data = await KubernetesIngresses(namespace).create(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to create ingress', err);\n }\n });\n }\n\n function patch(oldIngress, newIngress) {\n return $async(async () => {\n try {\n const params = new KubernetesCommonParams();\n params.id = newIngress.Name;\n const namespace = newIngress.Namespace;\n const payload = KubernetesIngressConverter.patchPayload(oldIngress, newIngress);\n if (!payload.length) {\n return;\n }\n const data = await KubernetesIngresses(namespace).patch(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to patch ingress', err);\n }\n });\n }\n\n function _delete(namespace, ingressClassName) {\n return $async(async () => {\n try {\n const params = new KubernetesCommonParams();\n params.id = ingressClassName;\n await KubernetesIngresses(namespace).delete(params).$promise;\n } catch (err) {\n throw new PortainerError('Unable to delete ingress', err);\n }\n });\n }\n}\n\nangular.module('portainer.kubernetes').service('KubernetesIngressService', KubernetesIngressService);\n","import angular from 'angular';\nimport PortainerError from 'Portainer/error';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\n\nclass KubernetesMetricsService {\n /* @ngInject */\n constructor($async, KubernetesMetrics) {\n this.$async = $async;\n this.KubernetesMetrics = KubernetesMetrics;\n\n this.capabilitiesAsync = this.capabilitiesAsync.bind(this);\n this.getPodAsync = this.getPodAsync.bind(this);\n this.getNodeAsync = this.getNodeAsync.bind(this);\n }\n\n /**\n * GET\n */\n async capabilitiesAsync(endpointID) {\n try {\n await this.KubernetesMetrics().capabilities({ endpointId: endpointID }).$promise;\n } catch (err) {\n throw new PortainerError('Unable to retrieve metrics', err);\n }\n }\n\n capabilities(endpointID) {\n return this.$async(this.capabilitiesAsync, endpointID);\n }\n\n /**\n * Stats of Node\n *\n * @param {string} nodeName\n */\n async getNodeAsync(nodeName) {\n try {\n const params = new KubernetesCommonParams();\n params.id = nodeName;\n const data = await this.KubernetesMetrics().getNode(params).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to retrieve node stats', err);\n }\n }\n\n getNode(nodeName) {\n return this.$async(this.getNodeAsync, nodeName);\n }\n\n /**\n * Stats\n *\n * @param {string} namespace\n * @param {string} podName\n */\n async getPodAsync(namespace, podName) {\n try {\n const params = new KubernetesCommonParams();\n params.id = podName;\n const data = await this.KubernetesMetrics(namespace).getPod(params).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to retrieve pod stats', err);\n }\n }\n\n getPod(namespace, podName) {\n return this.$async(this.getPodAsync, namespace, podName);\n }\n}\n\nexport default KubernetesMetricsService;\nangular.module('portainer.kubernetes').service('KubernetesMetricsService', KubernetesMetricsService);\n","angular.module('portainer.kubernetes').factory('KubernetesMetrics', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesMetrics($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/apis/metrics.k8s.io/v1beta1';\n const podUrl = `${url}${namespace ? '/namespaces/:namespace' : ''}/pods/:id`;\n\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n capabilities: { method: 'GET' },\n getPod: {\n method: 'GET',\n url: podUrl,\n },\n getNode: {\n method: 'GET',\n url: `${url}/nodes/:id`,\n },\n }\n );\n };\n },\n]);\n","import _ from 'lodash-es';\n\nangular\n .module('portainer.kubernetes')\n .filter('kubernetesNodeStatusColor', function () {\n 'use strict';\n return function (text) {\n var status = _.toLower(text);\n switch (status) {\n case 'ready':\n return 'success';\n case 'warning':\n return 'warning';\n default:\n return 'danger';\n }\n };\n })\n .filter('kubernetesNodeConditionsMessage', function () {\n 'use strict';\n return function (conditions) {\n if (conditions.MemoryPressure) {\n return 'Node memory is running low';\n }\n if (conditions.PIDPressure) {\n return 'Too many processes running on the node';\n }\n if (conditions.DiskPressure) {\n return 'Node disk capacity is running low';\n }\n if (conditions.NetworkUnavailable) {\n return 'Incorrect node network configuration';\n }\n };\n });\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesNodes', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesNodesFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function () {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/api/v1/nodes/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n patch: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n delete: { method: 'DELETE' },\n }\n );\n };\n },\n]);\n","import angular from 'angular';\nimport _ from 'lodash-es';\n\nimport PortainerError from 'Portainer/error';\nimport KubernetesNodeConverter from 'Kubernetes/node/converter';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\n\nclass KubernetesNodeService {\n /* @ngInject */\n constructor($async, KubernetesNodes) {\n this.$async = $async;\n this.KubernetesNodes = KubernetesNodes;\n\n this.getAsync = this.getAsync.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n this.patchAsync = this.patchAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAsync(name) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n const [details, yaml] = await Promise.all([this.KubernetesNodes().get(params).$promise, this.KubernetesNodes().getYaml(params).$promise]);\n return KubernetesNodeConverter.apiToNodeDetails(details, yaml);\n } catch (err) {\n throw new PortainerError('Unable to retrieve node details', err);\n }\n }\n\n async getAllAsync() {\n try {\n const data = await this.KubernetesNodes().get().$promise;\n return _.map(data.items, (item) => KubernetesNodeConverter.apiToNode(item));\n } catch (err) {\n throw { msg: 'Unable to retrieve nodes', err: err };\n }\n }\n\n get(name) {\n if (name) {\n return this.$async(this.getAsync, name);\n }\n return this.$async(this.getAllAsync);\n }\n\n /**\n * PATCH\n */\n\n async patchAsync(node, nodeFormValues) {\n try {\n const params = new KubernetesCommonParams();\n params.id = node.Name;\n const newNode = KubernetesNodeConverter.formValuesToNode(node, nodeFormValues);\n const payload = KubernetesNodeConverter.patchPayload(node, newNode);\n const data = await this.KubernetesNodes().patch(params, payload).$promise;\n const patchedNode = KubernetesNodeConverter.apiToNodeDetails(data);\n return patchedNode;\n } catch (err) {\n throw { msg: 'Unable to patch node', err: err };\n }\n }\n\n patch(node, nodeFormValues) {\n return this.$async(this.patchAsync, node, nodeFormValues);\n }\n}\n\nexport default KubernetesNodeService;\nangular.module('portainer.kubernetes').service('KubernetesNodeService', KubernetesNodeService);\n","import _ from 'lodash-es';\n\nangular\n .module('portainer.kubernetes')\n .filter('kubernetesPodStatusColor', function () {\n 'use strict';\n return function (text) {\n var status = _.toLower(text);\n switch (status) {\n case 'running':\n return 'success';\n case 'waiting':\n return 'warning';\n case 'terminated':\n return 'info';\n default:\n return 'danger';\n }\n };\n })\n .filter('kubernetesPodConditionStatusBadge', function () {\n 'use strict';\n return function (status, type) {\n switch (type) {\n case 'Unschedulable':\n switch (status) {\n case 'True':\n return 'fa-exclamation-triangle red-icon';\n case 'False':\n return 'fa-check green-icon';\n case 'Unknown':\n return 'fa-exclamation-circle orange-icon';\n }\n break;\n case 'PodScheduled':\n case 'Ready':\n case 'Initialized':\n case 'ContainersReady':\n switch (status) {\n case 'True':\n return 'fa-check green-icon';\n case 'False':\n return 'fa-exclamation-triangle red-icon';\n case 'Unknown':\n return 'fa-exclamation-circle orange-icon';\n }\n break;\n default:\n return 'fa-question-circle red-icon';\n }\n };\n })\n .filter('kubernetesPodConditionStatusText', function () {\n 'use strict';\n return function (status, type) {\n switch (type) {\n case 'Unschedulable':\n switch (status) {\n case 'True':\n return 'Alert';\n case 'False':\n return 'OK';\n case 'Unknown':\n return 'Warning';\n }\n break;\n case 'PodScheduled':\n case 'Ready':\n case 'Initialized':\n case 'ContainersReady':\n switch (status) {\n case 'True':\n return 'Ok';\n case 'False':\n return 'Alert';\n case 'Unknown':\n return 'Warning';\n }\n break;\n default:\n return 'Unknown';\n }\n };\n });\n","import angular from 'angular';\nimport PortainerError from 'Portainer/error';\n\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\nimport KubernetesPodConverter from 'Kubernetes/pod/converter';\n\nclass KubernetesPodService {\n /* @ngInject */\n constructor($async, KubernetesPods) {\n this.$async = $async;\n this.KubernetesPods = KubernetesPods;\n\n this.getAsync = this.getAsync.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n this.logsAsync = this.logsAsync.bind(this);\n this.deleteAsync = this.deleteAsync.bind(this);\n this.patchAsync = this.patchAsync.bind(this);\n this.evictionAsync = this.evictionAsync.bind(this);\n }\n\n async getAsync(namespace, name) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n const [raw, yaml] = await Promise.all([this.KubernetesPods(namespace).get(params).$promise, this.KubernetesPods(namespace).getYaml(params).$promise]);\n const res = {\n Raw: raw,\n Yaml: yaml.data,\n };\n return res;\n } catch (err) {\n throw new PortainerError('Unable to retrieve pod', err);\n }\n }\n\n /**\n * GET ALL\n */\n async getAllAsync(namespace) {\n try {\n const data = await this.KubernetesPods(namespace).get().$promise;\n return data.items;\n } catch (err) {\n throw new PortainerError('Unable to retrieve pods', err);\n }\n }\n\n get(namespace, name) {\n if (name) {\n return this.$async(this.getAsync, namespace, name);\n }\n return this.$async(this.getAllAsync, namespace);\n }\n\n /**\n * Logs\n *\n * @param {string} namespace\n * @param {string} podName\n * @param {string} containerName\n */\n async logsAsync(namespace, podName, containerName) {\n try {\n const params = new KubernetesCommonParams();\n params.id = podName;\n if (containerName) {\n params.container = containerName;\n }\n const data = await this.KubernetesPods(namespace).logs(params).$promise;\n return data.logs.length === 0 ? [] : data.logs.split('\\n');\n } catch (err) {\n throw new PortainerError('Unable to retrieve pod logs', err);\n }\n }\n\n logs(namespace, podName, containerName) {\n return this.$async(this.logsAsync, namespace, podName, containerName);\n }\n\n /**\n * PATCH\n */\n async patchAsync(oldPod, newPod) {\n try {\n const params = new KubernetesCommonParams();\n params.id = newPod.Name;\n const namespace = newPod.Namespace;\n const payload = KubernetesPodConverter.patchPayload(oldPod, newPod);\n if (!payload.length) {\n return;\n }\n const data = await this.KubernetesPods(namespace).patch(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to patch pod', err);\n }\n }\n\n patch(oldPod, newPod) {\n return this.$async(this.patchAsync, oldPod, newPod);\n }\n\n /**\n * DELETE\n */\n async deleteAsync(pod) {\n try {\n const params = new KubernetesCommonParams();\n params.id = pod.Name;\n const namespace = pod.Namespace;\n await this.KubernetesPods(namespace).delete(params).$promise;\n } catch (err) {\n throw new PortainerError('Unable to remove pod', err);\n }\n }\n\n delete(pod) {\n return this.$async(this.deleteAsync, pod);\n }\n\n /**\n * EVICT\n */\n async evictionAsync(pod) {\n try {\n const params = new KubernetesCommonParams();\n params.id = pod.Name;\n params.action = 'eviction';\n const namespace = pod.Namespace;\n const podEvictionPayload = KubernetesPodConverter.evictionPayload(pod);\n await this.KubernetesPods(namespace).evict(params, podEvictionPayload).$promise;\n } catch (err) {\n throw new PortainerError('Unable to evict pod', err);\n }\n }\n\n eviction(pod) {\n return this.$async(this.evictionAsync, pod);\n }\n}\n\nexport default KubernetesPodService;\nangular.module('portainer.kubernetes').service('KubernetesPodService', KubernetesPodService);\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesConfigMaps', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesConfigMapsFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/api/v1' + (namespace ? '/namespaces/:namespace' : '') + '/configmaps/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n delete: { method: 'DELETE' },\n }\n );\n };\n },\n]);\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesControllerRevisions', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesControllerRevisionsFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/apis/apps/v1' + (namespace ? '/namespaces/:namespace' : '') + '/controllerrevisions/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n patch: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n delete: { method: 'DELETE' },\n }\n );\n };\n },\n]);\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesDaemonSets', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesDaemonSetsFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/apis/apps/v1' + (namespace ? '/namespaces/:namespace' : '') + '/daemonsets/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n patch: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n rollback: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/strategic-merge-patch+json',\n },\n },\n delete: { method: 'DELETE' },\n }\n );\n };\n },\n]);\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesDeployments', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesDeploymentsFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/apis/apps/v1' + (namespace ? '/namespaces/:namespace' : '') + '/deployments/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n patch: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n rollback: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n delete: { method: 'DELETE' },\n }\n );\n };\n },\n]);\n","angular.module('portainer.kubernetes').factory('KubernetesEndpoints', function KubernetesEndpointsFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/api/v1' + (namespace ? '/namespaces/:namespace' : '') + '/endpoints/:id';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n }\n );\n };\n});\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesEvents', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesEventsFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/api/v1' + (namespace ? '/namespaces/:namespace' : '') + '/events/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n delete: { method: 'DELETE' },\n }\n );\n };\n },\n]);\n","angular.module('portainer.kubernetes').factory('KubernetesHealth', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n function KubernetesHealthFactory($resource, API_ENDPOINT_ENDPOINTS) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:id/kubernetes/healthz',\n {},\n {\n ping: { method: 'GET', params: { id: 'id' } },\n }\n );\n },\n]);\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesNamespaces', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesNamespacesFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function () {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/api/v1/namespaces/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n delete: { method: 'DELETE' },\n status: {\n method: 'GET',\n params: { action: 'status' },\n ignoreLoadingBar: true,\n },\n }\n );\n };\n },\n]);\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesPersistentVolumeClaims', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesPersistentVolumeClaimsFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/api/v1' + (namespace ? '/namespaces/:namespace' : '') + '/persistentvolumeclaims/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n patch: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n delete: { method: 'DELETE' },\n }\n );\n };\n },\n]);\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\nimport { logsHandler } from 'Docker/rest/response/handlers';\n\nangular.module('portainer.kubernetes').factory('KubernetesPods', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesPodsFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/api/v1' + (namespace ? '/namespaces/:namespace' : '') + '/pods/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n delete: { method: 'DELETE' },\n patch: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n logs: {\n method: 'GET',\n params: { action: 'log' },\n transformResponse: logsHandler,\n },\n evict: { method: 'POST' },\n }\n );\n };\n },\n]);\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesReplicaSets', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesReplicaSetsFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/apis/apps/v1' + (namespace ? '/namespaces/:namespace' : '') + '/replicasets/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n patch: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n delete: { method: 'DELETE' },\n }\n );\n };\n },\n]);\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesResourceQuotas', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesResourceQuotasFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/api/v1' + (namespace ? '/namespaces/:namespace' : '') + '/resourcequotas/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n patch: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n delete: { method: 'DELETE' },\n }\n );\n };\n },\n]);\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesSecrets', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesSecretsFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/api/v1' + (namespace ? '/namespaces/:namespace' : '') + '/secrets/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n delete: { method: 'DELETE' },\n }\n );\n };\n },\n]);\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesServices', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesServicesFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/api/v1' + (namespace ? '/namespaces/:namespace' : '') + '/services/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n patch: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n delete: { method: 'DELETE' },\n }\n );\n };\n },\n]);\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesStatefulSets', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesStatefulSetsFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/apis/apps/v1' + (namespace ? '/namespaces/:namespace' : '') + '/statefulsets/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n patch: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n rollback: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/strategic-merge-patch+json',\n },\n },\n delete: { method: 'DELETE' },\n }\n );\n };\n },\n]);\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesStorage', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesStorageFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function () {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/apis/storage.k8s.io/v1/storageclasses/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n patch: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n delete: { method: 'DELETE' },\n }\n );\n };\n },\n]);\n","import _ from 'lodash-es';\nimport angular from 'angular';\nimport PortainerError from 'Portainer/error';\n\nimport {\n KubernetesApplication,\n KubernetesApplicationDeploymentTypes,\n KubernetesApplicationPublishingTypes,\n KubernetesApplicationTypes,\n} from 'Kubernetes/models/application/models';\nimport KubernetesApplicationHelper from 'Kubernetes/helpers/application';\nimport KubernetesApplicationRollbackHelper from 'Kubernetes/helpers/application/rollback';\nimport KubernetesApplicationConverter from 'Kubernetes/converters/application';\nimport { KubernetesDeployment } from 'Kubernetes/models/deployment/models';\nimport { KubernetesStatefulSet } from 'Kubernetes/models/stateful-set/models';\nimport { KubernetesDaemonSet } from 'Kubernetes/models/daemon-set/models';\nimport KubernetesServiceHelper from 'Kubernetes/helpers/serviceHelper';\nimport { KubernetesHorizontalPodAutoScalerHelper } from 'Kubernetes/horizontal-pod-auto-scaler/helper';\nimport { KubernetesHorizontalPodAutoScalerConverter } from 'Kubernetes/horizontal-pod-auto-scaler/converter';\nimport { KubernetesIngressConverter } from 'Kubernetes/ingress/converter';\nimport KubernetesPodConverter from 'Kubernetes/pod/converter';\n\nclass KubernetesApplicationService {\n /* #region CONSTRUCTOR */\n /* @ngInject */\n constructor(\n $async,\n Authentication,\n KubernetesDeploymentService,\n KubernetesDaemonSetService,\n KubernetesStatefulSetService,\n KubernetesServiceService,\n KubernetesSecretService,\n KubernetesPersistentVolumeClaimService,\n KubernetesNamespaceService,\n KubernetesPodService,\n KubernetesHistoryService,\n KubernetesHorizontalPodAutoScalerService,\n KubernetesIngressService\n ) {\n this.$async = $async;\n this.Authentication = Authentication;\n this.KubernetesDeploymentService = KubernetesDeploymentService;\n this.KubernetesDaemonSetService = KubernetesDaemonSetService;\n this.KubernetesStatefulSetService = KubernetesStatefulSetService;\n this.KubernetesServiceService = KubernetesServiceService;\n this.KubernetesSecretService = KubernetesSecretService;\n this.KubernetesPersistentVolumeClaimService = KubernetesPersistentVolumeClaimService;\n this.KubernetesNamespaceService = KubernetesNamespaceService;\n this.KubernetesPodService = KubernetesPodService;\n this.KubernetesHistoryService = KubernetesHistoryService;\n this.KubernetesHorizontalPodAutoScalerService = KubernetesHorizontalPodAutoScalerService;\n this.KubernetesIngressService = KubernetesIngressService;\n\n this.getAsync = this.getAsync.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n this.createAsync = this.createAsync.bind(this);\n this.patchAsync = this.patchAsync.bind(this);\n this.patchPartialAsync = this.patchPartialAsync.bind(this);\n this.rollbackAsync = this.rollbackAsync.bind(this);\n this.deleteAsync = this.deleteAsync.bind(this);\n }\n /* #endregion */\n\n /* #region UTILS */\n _getApplicationApiService(app) {\n let apiService;\n if (app instanceof KubernetesDeployment || (app instanceof KubernetesApplication && app.ApplicationType === KubernetesApplicationTypes.DEPLOYMENT)) {\n apiService = this.KubernetesDeploymentService;\n } else if (app instanceof KubernetesDaemonSet || (app instanceof KubernetesApplication && app.ApplicationType === KubernetesApplicationTypes.DAEMONSET)) {\n apiService = this.KubernetesDaemonSetService;\n } else if (app instanceof KubernetesStatefulSet || (app instanceof KubernetesApplication && app.ApplicationType === KubernetesApplicationTypes.STATEFULSET)) {\n apiService = this.KubernetesStatefulSetService;\n } else if (app instanceof KubernetesApplication && app.ApplicationType === KubernetesApplicationTypes.POD) {\n apiService = this.KubernetesPodService;\n } else {\n throw new PortainerError('Unable to determine which association to use to retrieve API Service');\n }\n return apiService;\n }\n\n _generateIngressPatchPromises(oldIngresses, newIngresses) {\n return _.map(newIngresses, (newIng) => {\n const oldIng = _.find(oldIngresses, { Name: newIng.Name });\n return this.KubernetesIngressService.patch(oldIng, newIng);\n });\n }\n /* #endregion */\n\n /* #region GET */\n async getAsync(namespace, name) {\n try {\n const [deployment, daemonSet, statefulSet, pod, pods, autoScalers, ingresses] = await Promise.allSettled([\n this.KubernetesDeploymentService.get(namespace, name),\n this.KubernetesDaemonSetService.get(namespace, name),\n this.KubernetesStatefulSetService.get(namespace, name),\n this.KubernetesPodService.get(namespace, name),\n this.KubernetesPodService.get(namespace),\n this.KubernetesHorizontalPodAutoScalerService.get(namespace),\n this.KubernetesIngressService.get(namespace),\n ]);\n\n // const pod = _.find(pods.value, ['metadata.namespace', namespace, 'metadata.name', name]);\n\n let rootItem;\n let converterFunc;\n if (deployment.status === 'fulfilled') {\n rootItem = deployment;\n converterFunc = KubernetesApplicationConverter.apiDeploymentToApplication;\n } else if (daemonSet.status === 'fulfilled') {\n rootItem = daemonSet;\n converterFunc = KubernetesApplicationConverter.apiDaemonSetToApplication;\n } else if (statefulSet.status === 'fulfilled') {\n rootItem = statefulSet;\n converterFunc = KubernetesApplicationConverter.apiStatefulSetToapplication;\n } else if (pod.status === 'fulfilled') {\n rootItem = pod;\n converterFunc = KubernetesApplicationConverter.apiPodToApplication;\n } else {\n throw new PortainerError('Unable to determine which association to use to convert application');\n }\n\n const services = await this.KubernetesServiceService.get(namespace);\n const boundService = KubernetesServiceHelper.findApplicationBoundService(services, rootItem.value.Raw);\n const service = boundService ? await this.KubernetesServiceService.get(namespace, boundService.metadata.name) : {};\n\n const application = converterFunc(rootItem.value.Raw, pods.value, service.Raw, ingresses.value);\n application.Yaml = rootItem.value.Yaml;\n application.Raw = rootItem.value.Raw;\n application.Pods = _.map(application.Pods, (item) => KubernetesPodConverter.apiToModel(item));\n application.Containers = KubernetesApplicationHelper.associateContainersAndApplication(application);\n\n const boundScaler = KubernetesHorizontalPodAutoScalerHelper.findApplicationBoundScaler(autoScalers.value, application);\n const scaler = boundScaler ? await this.KubernetesHorizontalPodAutoScalerService.get(namespace, boundScaler.Name) : undefined;\n application.AutoScaler = scaler;\n\n await this.KubernetesHistoryService.get(application);\n\n if (service.Yaml) {\n application.Yaml += '---\\n' + service.Yaml;\n }\n if (scaler && scaler.Yaml) {\n application.Yaml += '---\\n' + scaler.Yaml;\n }\n // TODO: refactor @LP\n // append ingress yaml ?\n return application;\n } catch (err) {\n throw err;\n }\n }\n\n async getAllAsync(namespace) {\n try {\n const namespaces = namespace ? [namespace] : _.map(await this.KubernetesNamespaceService.get(), 'Name');\n\n const convertToApplication = (item, converterFunc, services, pods, ingresses) => {\n const service = KubernetesServiceHelper.findApplicationBoundService(services, item);\n const application = converterFunc(item, pods, service, ingresses);\n application.Containers = KubernetesApplicationHelper.associateContainersAndApplication(application);\n return application;\n };\n\n const res = await Promise.all(\n _.map(namespaces, async (ns) => {\n const [deployments, daemonSets, statefulSets, services, pods, ingresses, autoScalers] = await Promise.all([\n this.KubernetesDeploymentService.get(ns),\n this.KubernetesDaemonSetService.get(ns),\n this.KubernetesStatefulSetService.get(ns),\n this.KubernetesServiceService.get(ns),\n this.KubernetesPodService.get(ns),\n this.KubernetesIngressService.get(ns),\n this.KubernetesHorizontalPodAutoScalerService.get(ns),\n ]);\n\n const deploymentApplications = _.map(deployments, (item) =>\n convertToApplication(item, KubernetesApplicationConverter.apiDeploymentToApplication, services, pods, ingresses)\n );\n const daemonSetApplications = _.map(daemonSets, (item) =>\n convertToApplication(item, KubernetesApplicationConverter.apiDaemonSetToApplication, services, pods, ingresses)\n );\n const statefulSetApplications = _.map(statefulSets, (item) =>\n convertToApplication(item, KubernetesApplicationConverter.apiStatefulSetToapplication, services, pods, ingresses)\n );\n\n const boundPods = _.concat(_.flatMap(deploymentApplications, 'Pods'), _.flatMap(daemonSetApplications, 'Pods'), _.flatMap(statefulSetApplications, 'Pods'));\n const unboundPods = _.without(pods, ...boundPods);\n const nakedPodsApplications = _.map(unboundPods, (item) => convertToApplication(item, KubernetesApplicationConverter.apiPodToApplication, services, pods, ingresses));\n\n const applications = _.concat(deploymentApplications, daemonSetApplications, statefulSetApplications, nakedPodsApplications);\n _.forEach(applications, (app) => {\n app.Pods = _.map(app.Pods, (item) => KubernetesPodConverter.apiToModel(item));\n });\n await Promise.all(\n _.forEach(applications, async (application) => {\n const boundScaler = KubernetesHorizontalPodAutoScalerHelper.findApplicationBoundScaler(autoScalers, application);\n const scaler = boundScaler ? await this.KubernetesHorizontalPodAutoScalerService.get(ns, boundScaler.Name) : undefined;\n application.AutoScaler = scaler;\n })\n );\n return applications;\n })\n );\n return _.flatten(res);\n } catch (err) {\n throw err;\n }\n }\n\n get(namespace, name) {\n if (name) {\n return this.$async(this.getAsync, namespace, name);\n }\n return this.$async(this.getAllAsync, namespace);\n }\n /* #endregion */\n\n /* #region CREATE */\n // TODO: review\n // resource creation flow\n // should we keep formValues > Resource_1 || Resource_2\n // or should we switch to formValues > Composite > Resource_1 || Resource_2\n /**\n * NOTE: Keep this method flow in sync with `getCreatedApplicationResources` method in the `applicationService` file\n * To synchronise with kubernetes resource creation summary output, any new resources created in this method should\n * also be displayed in the summary output (getCreatedApplicationResources)\n */\n async createAsync(formValues) {\n try {\n let [app, headlessService, service, claims] = KubernetesApplicationConverter.applicationFormValuesToApplication(formValues);\n\n if (service) {\n await this.KubernetesServiceService.create(service);\n if (formValues.PublishingType === KubernetesApplicationPublishingTypes.INGRESS) {\n const ingresses = KubernetesIngressConverter.applicationFormValuesToIngresses(formValues, service.Name);\n await Promise.all(this._generateIngressPatchPromises(formValues.OriginalIngresses, ingresses));\n }\n }\n\n const apiService = this._getApplicationApiService(app);\n\n if (app instanceof KubernetesStatefulSet) {\n app.VolumeClaims = claims;\n headlessService = await this.KubernetesServiceService.create(headlessService);\n app.ServiceName = headlessService.metadata.name;\n } else {\n const claimPromises = _.map(claims, (item) => {\n if (!item.PreviousName && !item.Id) {\n return this.KubernetesPersistentVolumeClaimService.create(item);\n }\n });\n await Promise.all(_.without(claimPromises, undefined));\n }\n\n if (formValues.AutoScaler.IsUsed && formValues.DeploymentType !== KubernetesApplicationDeploymentTypes.GLOBAL) {\n const kind = KubernetesHorizontalPodAutoScalerHelper.getApplicationTypeString(app);\n const autoScaler = KubernetesHorizontalPodAutoScalerConverter.applicationFormValuesToModel(formValues, kind);\n await this.KubernetesHorizontalPodAutoScalerService.create(autoScaler);\n }\n\n await apiService.create(app);\n } catch (err) {\n throw err;\n }\n }\n\n create(formValues) {\n return this.$async(this.createAsync, formValues);\n }\n /* #endregion */\n\n /* #region PATCH */\n // this function accepts KubernetesApplicationFormValues as parameters\n /**\n * NOTE: Keep this method flow in sync with `getUpdatedApplicationResources` method in the `applicationService` file\n * To synchronise with kubernetes resource creation, update and delete summary output, any new resources created\n * in this method should also be displayed in the summary output (getUpdatedApplicationResources)\n */\n async patchAsync(oldFormValues, newFormValues) {\n try {\n const [oldApp, oldHeadlessService, oldService, oldClaims] = KubernetesApplicationConverter.applicationFormValuesToApplication(oldFormValues);\n const [newApp, newHeadlessService, newService, newClaims] = KubernetesApplicationConverter.applicationFormValuesToApplication(newFormValues);\n const oldApiService = this._getApplicationApiService(oldApp);\n const newApiService = this._getApplicationApiService(newApp);\n\n if (oldApiService !== newApiService) {\n await this.delete(oldApp);\n if (oldService) {\n await this.KubernetesServiceService.delete(oldService);\n }\n return await this.create(newFormValues);\n }\n\n if (newApp instanceof KubernetesStatefulSet) {\n await this.KubernetesServiceService.patch(oldHeadlessService, newHeadlessService);\n } else {\n const claimPromises = _.map(newClaims, (newClaim) => {\n if (!newClaim.PreviousName && !newClaim.Id) {\n return this.KubernetesPersistentVolumeClaimService.create(newClaim);\n } else if (!newClaim.Id) {\n const oldClaim = _.find(oldClaims, { Name: newClaim.PreviousName });\n return this.KubernetesPersistentVolumeClaimService.patch(oldClaim, newClaim);\n }\n });\n await Promise.all(claimPromises);\n }\n\n await newApiService.patch(oldApp, newApp);\n\n if (oldService && newService) {\n await this.KubernetesServiceService.patch(oldService, newService);\n if (newFormValues.PublishingType === KubernetesApplicationPublishingTypes.INGRESS || oldFormValues.PublishingType === KubernetesApplicationPublishingTypes.INGRESS) {\n const oldIngresses = KubernetesIngressConverter.applicationFormValuesToIngresses(oldFormValues, oldService.Name);\n const newIngresses = KubernetesIngressConverter.applicationFormValuesToIngresses(newFormValues, newService.Name);\n await Promise.all(this._generateIngressPatchPromises(oldIngresses, newIngresses));\n }\n } else if (!oldService && newService) {\n await this.KubernetesServiceService.create(newService);\n if (newFormValues.PublishingType === KubernetesApplicationPublishingTypes.INGRESS) {\n const ingresses = KubernetesIngressConverter.applicationFormValuesToIngresses(newFormValues, newService.Name);\n await Promise.all(this._generateIngressPatchPromises(newFormValues.OriginalIngresses, ingresses));\n }\n } else if (oldService && !newService) {\n await this.KubernetesServiceService.delete(oldService);\n if (oldFormValues.PublishingType === KubernetesApplicationPublishingTypes.INGRESS) {\n const ingresses = KubernetesIngressConverter.applicationFormValuesToIngresses(newFormValues, oldService.Name);\n await Promise.all(this._generateIngressPatchPromises(oldFormValues.OriginalIngresses, ingresses));\n }\n }\n\n const newKind = KubernetesHorizontalPodAutoScalerHelper.getApplicationTypeString(newApp);\n const newAutoScaler = KubernetesHorizontalPodAutoScalerConverter.applicationFormValuesToModel(newFormValues, newKind);\n if (!oldFormValues.AutoScaler.IsUsed) {\n if (newFormValues.AutoScaler.IsUsed) {\n await this.KubernetesHorizontalPodAutoScalerService.create(newAutoScaler);\n }\n } else {\n const oldKind = KubernetesHorizontalPodAutoScalerHelper.getApplicationTypeString(oldApp);\n const oldAutoScaler = KubernetesHorizontalPodAutoScalerConverter.applicationFormValuesToModel(oldFormValues, oldKind);\n if (newFormValues.AutoScaler.IsUsed) {\n await this.KubernetesHorizontalPodAutoScalerService.patch(oldAutoScaler, newAutoScaler);\n } else {\n await this.KubernetesHorizontalPodAutoScalerService.delete(oldAutoScaler);\n }\n }\n } catch (err) {\n throw err;\n }\n }\n\n // this function accepts KubernetesApplication as parameters\n async patchPartialAsync(oldApp, newApp) {\n try {\n const oldAppPayload = {\n Name: oldApp.Name,\n Namespace: oldApp.ResourcePool,\n StackName: oldApp.StackName,\n Note: oldApp.Note,\n };\n const newAppPayload = {\n Name: newApp.Name,\n Namespace: newApp.ResourcePool,\n StackName: newApp.StackName,\n Note: newApp.Note,\n };\n const apiService = this._getApplicationApiService(oldApp);\n await apiService.patch(oldAppPayload, newAppPayload);\n } catch (err) {\n throw err;\n }\n }\n\n // accept either formValues or applications as parameters\n // depending on partial value\n // true = KubernetesApplication\n // false = KubernetesApplicationFormValues\n patch(oldValues, newValues, partial = false) {\n if (partial) {\n return this.$async(this.patchPartialAsync, oldValues, newValues);\n }\n return this.$async(this.patchAsync, oldValues, newValues);\n }\n /* #endregion */\n\n /* #region DELETE */\n async deleteAsync(application) {\n try {\n const payload = {\n Namespace: application.ResourcePool || application.Namespace,\n Name: application.Name,\n };\n const servicePayload = angular.copy(payload);\n servicePayload.Name = application.Name;\n\n const apiService = this._getApplicationApiService(application);\n await apiService.delete(payload);\n\n if (apiService === this.KubernetesStatefulSetService) {\n const headlessServicePayload = angular.copy(payload);\n headlessServicePayload.Name = application instanceof KubernetesStatefulSet ? application.ServiceName : application.HeadlessServiceName;\n await this.KubernetesServiceService.delete(headlessServicePayload);\n }\n\n if (application.ServiceType) {\n await this.KubernetesServiceService.delete(servicePayload);\n const isIngress = _.filter(application.PublishedPorts, (p) => p.IngressRules.length).length;\n if (isIngress) {\n const originalIngresses = await this.KubernetesIngressService.get(payload.Namespace);\n const formValues = {\n OriginalIngresses: originalIngresses,\n PublishedPorts: KubernetesApplicationHelper.generatePublishedPortsFormValuesFromPublishedPorts(application.ServiceType, application.PublishedPorts),\n };\n _.forEach(formValues.PublishedPorts, (p) => (p.NeedsDeletion = true));\n const ingresses = KubernetesIngressConverter.applicationFormValuesToIngresses(formValues, servicePayload.Name);\n await Promise.all(this._generateIngressPatchPromises(formValues.OriginalIngresses, ingresses));\n }\n }\n if (!_.isEmpty(application.AutoScaler)) {\n await this.KubernetesHorizontalPodAutoScalerService.delete(application.AutoScaler);\n }\n } catch (err) {\n throw err;\n }\n }\n\n delete(application) {\n return this.$async(this.deleteAsync, application);\n }\n /* #endregion */\n\n /* #region ROLLBACK */\n async rollbackAsync(application, targetRevision) {\n try {\n const payload = KubernetesApplicationRollbackHelper.getPatchPayload(application, targetRevision);\n const apiService = this._getApplicationApiService(application);\n await apiService.rollback(application.ResourcePool, application.Name, payload);\n } catch (err) {\n throw err;\n }\n }\n\n rollback(application, targetRevision) {\n return this.$async(this.rollbackAsync, application, targetRevision);\n }\n /* #endregion */\n}\n\nexport default KubernetesApplicationService;\nangular.module('portainer.kubernetes').service('KubernetesApplicationService', KubernetesApplicationService);\n","import angular from 'angular';\nimport _ from 'lodash-es';\nimport PortainerError from 'Portainer/error';\nimport KubernetesConfigMapConverter from 'Kubernetes/converters/configMap';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\nimport { KubernetesPortainerAccessConfigMap } from 'Kubernetes/models/config-map/models';\n\nclass KubernetesConfigMapService {\n /* @ngInject */\n constructor($async, KubernetesConfigMaps) {\n this.$async = $async;\n this.KubernetesConfigMaps = KubernetesConfigMaps;\n\n this.getAsync = this.getAsync.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n this.createAsync = this.createAsync.bind(this);\n this.updateAsync = this.updateAsync.bind(this);\n this.deleteAsync = this.deleteAsync.bind(this);\n }\n\n getAccess(namespace, name) {\n return this.$async(async () => {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n const raw = await this.KubernetesConfigMaps(namespace).get(params).$promise;\n return KubernetesConfigMapConverter.apiToPortainerAccessConfigMap(raw);\n } catch (err) {\n if (err.status === 404) {\n return new KubernetesPortainerAccessConfigMap();\n }\n throw new PortainerError('Unable to retrieve Portainer accesses', err);\n }\n });\n }\n\n createAccess(config) {\n return this.$async(async () => {\n try {\n const payload = KubernetesConfigMapConverter.createAccessPayload(config);\n const params = {};\n const namespace = payload.metadata.namespace;\n const data = await this.KubernetesConfigMaps(namespace).create(params, payload).$promise;\n return KubernetesConfigMapConverter.apiToPortainerAccessConfigMap(data);\n } catch (err) {\n throw new PortainerError('Unable to create Portainer accesses', err);\n }\n });\n }\n\n updateAccess(config) {\n return this.$async(async () => {\n try {\n if (!config.Id) {\n return await this.createAccess(config);\n }\n const payload = KubernetesConfigMapConverter.updateAccessPayload(config);\n const params = new KubernetesCommonParams();\n params.id = payload.metadata.name;\n const namespace = payload.metadata.namespace;\n const data = await this.KubernetesConfigMaps(namespace).update(params, payload).$promise;\n return KubernetesConfigMapConverter.apiToPortainerAccessConfigMap(data);\n } catch (err) {\n throw new PortainerError('Unable to update Portainer accesses', err);\n }\n });\n }\n\n /**\n * GET\n */\n async getAsync(namespace, name) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n const [rawPromise, yamlPromise] = await Promise.allSettled([\n this.KubernetesConfigMaps(namespace).get(params).$promise,\n this.KubernetesConfigMaps(namespace).getYaml(params).$promise,\n ]);\n\n if (_.get(rawPromise, 'reason.status') === 404 && _.get(yamlPromise, 'reason.status') === 404) {\n return KubernetesConfigMapConverter.defaultConfigMap(namespace, name);\n }\n\n // Saving binary data to 'data' field in configMap Object is not allowed by kubernetes and getYaml() may get\n // an error. We should keep binary data to 'binaryData' field instead of 'data'. Before that, we\n // use response from get() and ignore 500 error as a workaround.\n if (rawPromise.value) {\n return KubernetesConfigMapConverter.apiToConfigMap(rawPromise.value, yamlPromise.value);\n }\n\n throw new PortainerError('Unable to retrieve config map ', name);\n } catch (err) {\n if (err.status === 404) {\n return KubernetesConfigMapConverter.defaultConfigMap(namespace, name);\n }\n throw new PortainerError('Unable to retrieve config map', err);\n }\n }\n\n async getAllAsync(namespace) {\n try {\n const data = await this.KubernetesConfigMaps(namespace).get().$promise;\n return _.map(data.items, (item) => KubernetesConfigMapConverter.apiToConfigMap(item));\n } catch (err) {\n throw new PortainerError('Unable to retrieve config maps', err);\n }\n }\n\n get(namespace, name) {\n if (name) {\n return this.$async(this.getAsync, namespace, name);\n }\n return this.$async(this.getAllAsync, namespace);\n }\n\n /**\n * CREATE\n */\n async createAsync(config) {\n try {\n const payload = KubernetesConfigMapConverter.createPayload(config);\n const params = {};\n const namespace = payload.metadata.namespace;\n const data = await this.KubernetesConfigMaps(namespace).create(params, payload).$promise;\n return KubernetesConfigMapConverter.apiToConfigMap(data);\n } catch (err) {\n throw new PortainerError('Unable to create config map', err);\n }\n }\n\n create(config) {\n return this.$async(this.createAsync, config);\n }\n\n /**\n * UPDATE\n */\n async updateAsync(config) {\n try {\n if (!config.Id) {\n return await this.create(config);\n }\n const payload = KubernetesConfigMapConverter.updatePayload(config);\n const params = new KubernetesCommonParams();\n params.id = payload.metadata.name;\n const namespace = payload.metadata.namespace;\n const data = await this.KubernetesConfigMaps(namespace).update(params, payload).$promise;\n return KubernetesConfigMapConverter.apiToConfigMap(data);\n } catch (err) {\n throw new PortainerError('Unable to update config map', err);\n }\n }\n update(config) {\n return this.$async(this.updateAsync, config);\n }\n\n /**\n * DELETE\n */\n async deleteAsync(config) {\n try {\n const params = new KubernetesCommonParams();\n params.id = config.Name;\n const namespace = config.Namespace;\n await this.KubernetesConfigMaps(namespace).delete(params).$promise;\n } catch (err) {\n throw new PortainerError('Unable to delete config map', err);\n }\n }\n\n delete(config) {\n return this.$async(this.deleteAsync, config);\n }\n}\n\nexport default KubernetesConfigMapService;\nangular.module('portainer.kubernetes').service('KubernetesConfigMapService', KubernetesConfigMapService);\n","import angular from 'angular';\nimport _ from 'lodash-es';\nimport KubernetesConfigurationConverter from 'Kubernetes/converters/configuration';\nimport KubernetesConfigMapConverter from 'Kubernetes/converters/configMap';\nimport KubernetesSecretConverter from 'Kubernetes/converters/secret';\nimport { KubernetesConfigurationTypes } from 'Kubernetes/models/configuration/models';\nimport KubernetesCommonHelper from 'Kubernetes/helpers/commonHelper';\n\nclass KubernetesConfigurationService {\n /* @ngInject */\n constructor($async, Authentication, KubernetesNamespaceService, KubernetesConfigMapService, KubernetesSecretService) {\n this.$async = $async;\n this.Authentication = Authentication;\n this.KubernetesNamespaceService = KubernetesNamespaceService;\n this.KubernetesConfigMapService = KubernetesConfigMapService;\n this.KubernetesSecretService = KubernetesSecretService;\n\n this.getAsync = this.getAsync.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n this.createAsync = this.createAsync.bind(this);\n this.updateAsync = this.updateAsync.bind(this);\n this.deleteAsync = this.deleteAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAsync(namespace, name) {\n try {\n const [configMap, secret] = await Promise.allSettled([this.KubernetesConfigMapService.get(namespace, name), this.KubernetesSecretService.get(namespace, name)]);\n let configuration;\n if (secret.status === 'fulfilled') {\n configuration = KubernetesConfigurationConverter.secretToConfiguration(secret.value);\n return configuration;\n }\n configuration = KubernetesConfigurationConverter.configMapToConfiguration(configMap.value);\n return configuration;\n } catch (err) {\n throw err;\n }\n }\n\n async getAllAsync(namespace) {\n try {\n const namespaces = namespace ? [namespace] : _.map(await this.KubernetesNamespaceService.get(), 'Name');\n const res = await Promise.all(\n _.map(namespaces, async (ns) => {\n const [configMaps, secrets] = await Promise.all([this.KubernetesConfigMapService.get(ns), this.KubernetesSecretService.get(ns)]);\n const secretsConfigurations = _.map(secrets, (secret) => KubernetesConfigurationConverter.secretToConfiguration(secret));\n const configMapsConfigurations = _.map(configMaps, (configMap) => KubernetesConfigurationConverter.configMapToConfiguration(configMap));\n return _.concat(configMapsConfigurations, secretsConfigurations);\n })\n );\n return _.flatten(res);\n } catch (err) {\n throw err;\n }\n }\n\n get(namespace, name) {\n if (name) {\n return this.$async(this.getAsync, namespace, name);\n }\n return this.$async(this.getAllAsync, namespace);\n }\n\n /**\n * CREATE\n */\n async createAsync(formValues) {\n formValues.ConfigurationOwner = KubernetesCommonHelper.ownerToLabel(formValues.ConfigurationOwner);\n\n try {\n if (formValues.Type === KubernetesConfigurationTypes.CONFIGMAP) {\n const configMap = KubernetesConfigMapConverter.configurationFormValuesToConfigMap(formValues);\n await this.KubernetesConfigMapService.create(configMap);\n } else {\n const secret = KubernetesSecretConverter.configurationFormValuesToSecret(formValues);\n await this.KubernetesSecretService.create(secret);\n }\n } catch (err) {\n throw err;\n }\n }\n\n create(formValues) {\n return this.$async(this.createAsync, formValues);\n }\n\n /**\n * UPDATE\n */\n async updateAsync(formValues, configuration) {\n try {\n if (formValues.Type === KubernetesConfigurationTypes.CONFIGMAP) {\n const configMap = KubernetesConfigMapConverter.configurationFormValuesToConfigMap(formValues);\n configMap.ConfigurationOwner = configuration.ConfigurationOwner;\n await this.KubernetesConfigMapService.update(configMap);\n } else {\n const secret = KubernetesSecretConverter.configurationFormValuesToSecret(formValues);\n secret.ConfigurationOwner = configuration.ConfigurationOwner;\n await this.KubernetesSecretService.update(secret);\n }\n } catch (err) {\n throw err;\n }\n }\n\n update(formValues, configuration) {\n return this.$async(this.updateAsync, formValues, configuration);\n }\n\n /**\n * DELETE\n */\n async deleteAsync(config) {\n try {\n if (config.Type === KubernetesConfigurationTypes.CONFIGMAP) {\n await this.KubernetesConfigMapService.delete(config);\n } else {\n await this.KubernetesSecretService.delete(config);\n }\n } catch (err) {\n throw err;\n }\n }\n\n delete(config) {\n return this.$async(this.deleteAsync, config);\n }\n}\n\nexport default KubernetesConfigurationService;\nangular.module('portainer.kubernetes').service('KubernetesConfigurationService', KubernetesConfigurationService);\n","import angular from 'angular';\nimport PortainerError from 'Portainer/error';\n\nclass KubernetesControllerRevisionService {\n /* @ngInject */\n constructor($async, KubernetesControllerRevisions) {\n this.$async = $async;\n this.KubernetesControllerRevisions = KubernetesControllerRevisions;\n\n this.getAllAsync = this.getAllAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAllAsync(namespace) {\n try {\n const data = await this.KubernetesControllerRevisions(namespace).get().$promise;\n return data.items;\n } catch (err) {\n throw new PortainerError('Unable to retrieve ControllerRevisions', err);\n }\n }\n\n get(namespace) {\n return this.$async(this.getAllAsync, namespace);\n }\n}\n\nexport default KubernetesControllerRevisionService;\nangular.module('portainer.kubernetes').service('KubernetesControllerRevisionService', KubernetesControllerRevisionService);\n","import angular from 'angular';\nimport PortainerError from 'Portainer/error';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\nimport KubernetesDaemonSetConverter from 'Kubernetes/converters/daemonSet';\n\nclass KubernetesDaemonSetService {\n /* @ngInject */\n constructor($async, KubernetesDaemonSets) {\n this.$async = $async;\n this.KubernetesDaemonSets = KubernetesDaemonSets;\n\n this.getAsync = this.getAsync.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n this.createAsync = this.createAsync.bind(this);\n this.patchAsync = this.patchAsync.bind(this);\n this.rollbackAsync = this.rollbackAsync.bind(this);\n this.deleteAsync = this.deleteAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAsync(namespace, name) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n const [raw, yaml] = await Promise.all([this.KubernetesDaemonSets(namespace).get(params).$promise, this.KubernetesDaemonSets(namespace).getYaml(params).$promise]);\n const res = {\n Raw: raw,\n Yaml: yaml.data,\n };\n return res;\n } catch (err) {\n throw new PortainerError('Unable to retrieve DaemonSet', err);\n }\n }\n\n async getAllAsync(namespace) {\n try {\n const data = await this.KubernetesDaemonSets(namespace).get().$promise;\n return data.items;\n } catch (err) {\n throw new PortainerError('Unable to retrieve DaemonSets', err);\n }\n }\n\n get(namespace, name) {\n if (name) {\n return this.$async(this.getAsync, namespace, name);\n }\n return this.$async(this.getAllAsync, namespace);\n }\n\n /**\n * CREATE\n */\n async createAsync(daemonSet) {\n try {\n const params = {};\n const payload = KubernetesDaemonSetConverter.createPayload(daemonSet);\n const namespace = payload.metadata.namespace;\n const data = await this.KubernetesDaemonSets(namespace).create(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to create daemonset', err);\n }\n }\n\n create(daemonSet) {\n return this.$async(this.createAsync, daemonSet);\n }\n\n /**\n * PATCH\n */\n async patchAsync(oldDaemonSet, newDaemonSet) {\n try {\n const params = new KubernetesCommonParams();\n params.id = newDaemonSet.Name;\n const namespace = newDaemonSet.Namespace;\n const payload = KubernetesDaemonSetConverter.patchPayload(oldDaemonSet, newDaemonSet);\n if (!payload.length) {\n return;\n }\n const data = await this.KubernetesDaemonSets(namespace).patch(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to patch daemonSet', err);\n }\n }\n\n patch(oldDaemonSet, newDaemonSet) {\n return this.$async(this.patchAsync, oldDaemonSet, newDaemonSet);\n }\n\n /**\n * DELETE\n */\n async deleteAsync(daemonSet) {\n try {\n const params = new KubernetesCommonParams();\n params.id = daemonSet.Name;\n const namespace = daemonSet.Namespace;\n await this.KubernetesDaemonSets(namespace).delete(params).$promise;\n } catch (err) {\n throw new PortainerError('Unable to remove daemonset', err);\n }\n }\n\n delete(daemonSet) {\n return this.$async(this.deleteAsync, daemonSet);\n }\n\n /**\n * ROLLBACK\n */\n async rollbackAsync(namespace, name, payload) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n await this.KubernetesDaemonSets(namespace).rollback(params, payload).$promise;\n } catch (err) {\n throw new PortainerError('Unable to rollback daemonset', err);\n }\n }\n\n rollback(namespace, name, payload) {\n return this.$async(this.rollbackAsync, namespace, name, payload);\n }\n}\n\nexport default KubernetesDaemonSetService;\nangular.module('portainer.kubernetes').service('KubernetesDaemonSetService', KubernetesDaemonSetService);\n","import angular from 'angular';\nimport PortainerError from 'Portainer/error';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\nimport KubernetesDeploymentConverter from 'Kubernetes/converters/deployment';\n\nclass KubernetesDeploymentService {\n /* @ngInject */\n constructor($async, KubernetesDeployments) {\n this.$async = $async;\n this.KubernetesDeployments = KubernetesDeployments;\n\n this.getAsync = this.getAsync.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n this.createAsync = this.createAsync.bind(this);\n this.patchAsync = this.patchAsync.bind(this);\n this.rollbackAsync = this.rollbackAsync.bind(this);\n this.deleteAsync = this.deleteAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAsync(namespace, name) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n const [raw, yaml] = await Promise.all([this.KubernetesDeployments(namespace).get(params).$promise, this.KubernetesDeployments(namespace).getYaml(params).$promise]);\n const res = {\n Raw: raw,\n Yaml: yaml.data,\n };\n return res;\n } catch (err) {\n throw new PortainerError('Unable to retrieve Deployment', err);\n }\n }\n\n async getAllAsync(namespace) {\n try {\n const data = await this.KubernetesDeployments(namespace).get().$promise;\n return data.items;\n } catch (err) {\n throw new PortainerError('Unable to retrieve Deployments', err);\n }\n }\n\n get(namespace, name) {\n if (name) {\n return this.$async(this.getAsync, namespace, name);\n }\n return this.$async(this.getAllAsync, namespace);\n }\n\n /**\n * CREATE\n */\n async createAsync(deployment) {\n try {\n const params = {};\n const payload = KubernetesDeploymentConverter.createPayload(deployment);\n const namespace = payload.metadata.namespace;\n const data = await this.KubernetesDeployments(namespace).create(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to create deployment', err);\n }\n }\n\n create(deployment) {\n return this.$async(this.createAsync, deployment);\n }\n\n /**\n * PATCH\n */\n async patchAsync(oldDeployment, newDeployment) {\n try {\n const params = new KubernetesCommonParams();\n params.id = newDeployment.Name;\n const namespace = newDeployment.Namespace;\n const payload = KubernetesDeploymentConverter.patchPayload(oldDeployment, newDeployment);\n if (!payload.length) {\n return;\n }\n const data = await this.KubernetesDeployments(namespace).patch(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to patch deployment', err);\n }\n }\n\n patch(oldDeployment, newDeployment) {\n return this.$async(this.patchAsync, oldDeployment, newDeployment);\n }\n\n /**\n * DELETE\n */\n async deleteAsync(deployment) {\n try {\n const params = new KubernetesCommonParams();\n params.id = deployment.Name;\n const namespace = deployment.Namespace;\n await this.KubernetesDeployments(namespace).delete(params).$promise;\n } catch (err) {\n throw new PortainerError('Unable to remove deployment', err);\n }\n }\n\n delete(deployment) {\n return this.$async(this.deleteAsync, deployment);\n }\n\n /**\n * ROLLBACK\n */\n async rollbackAsync(namespace, name, payload) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n await this.KubernetesDeployments(namespace).rollback(params, payload).$promise;\n } catch (err) {\n throw new PortainerError('Unable to rollback deployment', err);\n }\n }\n\n rollback(namespace, name, payload) {\n return this.$async(this.rollbackAsync, namespace, name, payload);\n }\n}\n\nexport default KubernetesDeploymentService;\nangular.module('portainer.kubernetes').service('KubernetesDeploymentService', KubernetesDeploymentService);\n","import _ from 'lodash-es';\nimport angular from 'angular';\nimport PortainerError from 'Portainer/error';\nimport KubernetesEventConverter from 'Kubernetes/converters/event';\n\nclass KubernetesEventService {\n /* @ngInject */\n constructor($async, KubernetesEvents) {\n this.$async = $async;\n this.KubernetesEvents = KubernetesEvents;\n\n this.getAllAsync = this.getAllAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAllAsync(namespace) {\n try {\n const data = await this.KubernetesEvents(namespace).get().$promise;\n const res = _.map(data.items, (item) => KubernetesEventConverter.apiToEvent(item));\n return res;\n } catch (err) {\n throw new PortainerError('Unable to retrieve events', err);\n }\n }\n\n get(namespace) {\n return this.$async(this.getAllAsync, namespace);\n }\n}\n\nexport default KubernetesEventService;\nangular.module('portainer.kubernetes').service('KubernetesEventService', KubernetesEventService);\n","import angular from 'angular';\nimport PortainerError from 'Portainer/error';\n\nclass KubernetesHealthService {\n /* @ngInject */\n constructor($async, KubernetesHealth) {\n this.$async = $async;\n this.KubernetesHealth = KubernetesHealth;\n\n this.pingAsync = this.pingAsync.bind(this);\n }\n\n /**\n * PING\n */\n async pingAsync(endpointID) {\n try {\n return await this.KubernetesHealth.ping({ id: endpointID }).$promise;\n } catch (err) {\n throw new PortainerError('Unable to retrieve environment health', err);\n }\n }\n\n ping(endpointID) {\n return this.$async(this.pingAsync, endpointID);\n }\n}\n\nexport default KubernetesHealthService;\nangular.module('portainer.kubernetes').service('KubernetesHealthService', KubernetesHealthService);\n","import angular from 'angular';\nimport PortainerError from 'Portainer/error';\n\nimport KubernetesHistoryHelper from 'Kubernetes/helpers/history';\nimport { KubernetesApplicationTypes } from 'Kubernetes/models/application/models';\n\nclass KubernetesHistoryService {\n /* @ngInject */\n constructor($async, KubernetesReplicaSetService, KubernetesControllerRevisionService) {\n this.$async = $async;\n this.KubernetesReplicaSetService = KubernetesReplicaSetService;\n this.KubernetesControllerRevisionService = KubernetesControllerRevisionService;\n\n this.getAsync = this.getAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAsync(application) {\n try {\n const namespace = application.ResourcePool;\n let rawRevisions;\n\n switch (application.ApplicationType) {\n case KubernetesApplicationTypes.DEPLOYMENT:\n rawRevisions = await this.KubernetesReplicaSetService.get(namespace);\n break;\n case KubernetesApplicationTypes.DAEMONSET:\n rawRevisions = await this.KubernetesControllerRevisionService.get(namespace);\n break;\n case KubernetesApplicationTypes.STATEFULSET:\n rawRevisions = await this.KubernetesControllerRevisionService.get(namespace);\n break;\n case KubernetesApplicationTypes.POD:\n rawRevisions = [];\n break;\n default:\n throw new PortainerError('Unable to determine which association to use for history');\n }\n if (rawRevisions.length) {\n const [currentRevision, revisionsList] = KubernetesHistoryHelper.getRevisions(rawRevisions, application);\n application.CurrentRevision = currentRevision;\n application.Revisions = revisionsList;\n }\n return application;\n } catch (err) {\n throw new PortainerError('', err);\n }\n }\n\n get(application) {\n return this.$async(this.getAsync, application);\n }\n}\n\nexport default KubernetesHistoryService;\nangular.module('portainer.kubernetes').service('KubernetesHistoryService', KubernetesHistoryService);\n","import _ from 'lodash-es';\n\nimport angular from 'angular';\nimport PortainerError from 'Portainer/error';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\nimport KubernetesNamespaceConverter from 'Kubernetes/converters/namespace';\nimport $allSettled from 'Portainer/services/allSettled';\n\nclass KubernetesNamespaceService {\n /* @ngInject */\n constructor($async, KubernetesNamespaces) {\n this.$async = $async;\n this.KubernetesNamespaces = KubernetesNamespaces;\n\n this.getAsync = this.getAsync.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n this.createAsync = this.createAsync.bind(this);\n this.deleteAsync = this.deleteAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAsync(name) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n await this.KubernetesNamespaces().status(params).$promise;\n const [raw, yaml] = await Promise.all([this.KubernetesNamespaces().get(params).$promise, this.KubernetesNamespaces().getYaml(params).$promise]);\n return KubernetesNamespaceConverter.apiToNamespace(raw, yaml);\n } catch (err) {\n throw new PortainerError('Unable to retrieve namespace', err);\n }\n }\n\n async getAllAsync() {\n try {\n const data = await this.KubernetesNamespaces().get().$promise;\n const promises = _.map(data.items, (item) => this.KubernetesNamespaces().status({ id: item.metadata.name }).$promise);\n const namespaces = await $allSettled(promises);\n const visibleNamespaces = _.map(namespaces.fulfilled, (item) => {\n if (item.status.phase !== 'Terminating') {\n return KubernetesNamespaceConverter.apiToNamespace(item);\n }\n });\n return _.without(visibleNamespaces, undefined);\n } catch (err) {\n throw new PortainerError('Unable to retrieve namespaces', err);\n }\n }\n\n get(name) {\n if (name) {\n return this.$async(this.getAsync, name);\n }\n return this.$async(this.getAllAsync);\n }\n\n /**\n * CREATE\n */\n async createAsync(namespace) {\n try {\n const payload = KubernetesNamespaceConverter.createPayload(namespace);\n const params = {};\n const data = await this.KubernetesNamespaces().create(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to create namespace', err);\n }\n }\n\n create(namespace) {\n return this.$async(this.createAsync, namespace);\n }\n\n /**\n * DELETE\n */\n async deleteAsync(namespace) {\n try {\n const params = new KubernetesCommonParams();\n params.id = namespace.Name;\n await this.KubernetesNamespaces().delete(params).$promise;\n } catch (err) {\n throw new PortainerError('Unable to delete namespace', err);\n }\n }\n\n delete(namespace) {\n return this.$async(this.deleteAsync, namespace);\n }\n}\n\nexport default KubernetesNamespaceService;\nangular.module('portainer.kubernetes').service('KubernetesNamespaceService', KubernetesNamespaceService);\n","import angular from 'angular';\nimport _ from 'lodash-es';\nimport PortainerError from 'Portainer/error';\nimport KubernetesPersistentVolumeClaimConverter from 'Kubernetes/converters/persistentVolumeClaim';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\n\nclass KubernetesPersistentVolumeClaimService {\n /* @ngInject */\n constructor($async, EndpointProvider, KubernetesPersistentVolumeClaims) {\n this.$async = $async;\n this.EndpointProvider = EndpointProvider;\n this.KubernetesPersistentVolumeClaims = KubernetesPersistentVolumeClaims;\n\n this.getAsync = this.getAsync.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n this.createAsync = this.createAsync.bind(this);\n this.patchAsync = this.patchAsync.bind(this);\n this.deleteAsync = this.deleteAsync.bind(this);\n }\n\n async getAsync(namespace, name) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n const [raw, yaml] = await Promise.all([\n this.KubernetesPersistentVolumeClaims(namespace).get(params).$promise,\n this.KubernetesPersistentVolumeClaims(namespace).getYaml(params).$promise,\n ]);\n const storageClasses = this.EndpointProvider.currentEndpoint().Kubernetes.Configuration.StorageClasses;\n return KubernetesPersistentVolumeClaimConverter.apiToPersistentVolumeClaim(raw, storageClasses, yaml);\n } catch (err) {\n throw new PortainerError('Unable to retrieve persistent volume claim', err);\n }\n }\n\n async getAllAsync(namespace) {\n try {\n const data = await this.KubernetesPersistentVolumeClaims(namespace).get().$promise;\n const storageClasses = this.EndpointProvider.currentEndpoint().Kubernetes.Configuration.StorageClasses;\n return _.map(data.items, (item) => KubernetesPersistentVolumeClaimConverter.apiToPersistentVolumeClaim(item, storageClasses));\n } catch (err) {\n throw new PortainerError('Unable to retrieve persistent volume claims', err);\n }\n }\n\n get(namespace, name) {\n if (name) {\n return this.$async(this.getAsync, namespace, name);\n }\n return this.$async(this.getAllAsync, namespace);\n }\n\n /**\n * CREATE\n */\n async createAsync(claim) {\n try {\n const params = {};\n const payload = KubernetesPersistentVolumeClaimConverter.createPayload(claim);\n const namespace = payload.metadata.namespace;\n const data = await this.KubernetesPersistentVolumeClaims(namespace).create(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to create persistent volume claim', err);\n }\n }\n\n create(claim) {\n return this.$async(this.createAsync, claim);\n }\n\n /**\n * PATCH\n */\n async patchAsync(oldPVC, newPVC) {\n try {\n const params = new KubernetesCommonParams();\n params.id = newPVC.Name;\n const namespace = newPVC.Namespace;\n const payload = KubernetesPersistentVolumeClaimConverter.patchPayload(oldPVC, newPVC);\n if (!payload.length) {\n return;\n }\n const data = await this.KubernetesPersistentVolumeClaims(namespace).patch(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to patch persistent volume claim', err);\n }\n }\n\n patch(oldPVC, newPVC) {\n return this.$async(this.patchAsync, oldPVC, newPVC);\n }\n\n /**\n * DELETE\n */\n async deleteAsync(pvc) {\n try {\n const params = new KubernetesCommonParams();\n params.id = pvc.Name;\n const namespace = pvc.Namespace;\n await this.KubernetesPersistentVolumeClaims(namespace).delete(params).$promise;\n } catch (err) {\n throw new PortainerError('Unable to delete persistent volume claim', err);\n }\n }\n\n delete(pvc) {\n return this.$async(this.deleteAsync, pvc);\n }\n}\n\nexport default KubernetesPersistentVolumeClaimService;\nangular.module('portainer.kubernetes').service('KubernetesPersistentVolumeClaimService', KubernetesPersistentVolumeClaimService);\n","import angular from 'angular';\nimport PortainerError from 'Portainer/error';\n\nclass KubernetesReplicaSetService {\n /* @ngInject */\n constructor($async, KubernetesReplicaSets) {\n this.$async = $async;\n this.KubernetesReplicaSets = KubernetesReplicaSets;\n\n this.getAllAsync = this.getAllAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAllAsync(namespace) {\n try {\n const data = await this.KubernetesReplicaSets(namespace).get().$promise;\n return data.items;\n } catch (err) {\n throw new PortainerError('Unable to retrieve ReplicaSets', err);\n }\n }\n\n get(namespace) {\n return this.$async(this.getAllAsync, namespace);\n }\n}\n\nexport default KubernetesReplicaSetService;\nangular.module('portainer.kubernetes').service('KubernetesReplicaSetService', KubernetesReplicaSetService);\n","import _ from 'lodash-es';\n\nimport angular from 'angular';\nimport KubernetesResourcePoolConverter from 'Kubernetes/converters/resourcePool';\nimport KubernetesResourceQuotaHelper from 'Kubernetes/helpers/resourceQuotaHelper';\n\n/* @ngInject */\nexport function KubernetesResourcePoolService($async, KubernetesNamespaceService, KubernetesResourceQuotaService, KubernetesIngressService) {\n return {\n get,\n create,\n patch,\n delete: _delete,\n };\n\n async function getOne(name) {\n try {\n const namespace = await KubernetesNamespaceService.get(name);\n const [quotaAttempt] = await Promise.allSettled([KubernetesResourceQuotaService.get(name, KubernetesResourceQuotaHelper.generateResourceQuotaName(name))]);\n const pool = KubernetesResourcePoolConverter.apiToResourcePool(namespace);\n if (quotaAttempt.status === 'fulfilled') {\n pool.Quota = quotaAttempt.value;\n pool.Yaml += '---\\n' + quotaAttempt.value.Yaml;\n }\n return pool;\n } catch (err) {\n throw err;\n }\n }\n\n async function getAll() {\n try {\n const namespaces = await KubernetesNamespaceService.get();\n const pools = await Promise.all(\n _.map(namespaces, async (namespace) => {\n const name = namespace.Name;\n const [quotaAttempt] = await Promise.allSettled([KubernetesResourceQuotaService.get(name, KubernetesResourceQuotaHelper.generateResourceQuotaName(name))]);\n const pool = KubernetesResourcePoolConverter.apiToResourcePool(namespace);\n if (quotaAttempt.status === 'fulfilled') {\n pool.Quota = quotaAttempt.value;\n pool.Yaml += '---\\n' + quotaAttempt.value.Yaml;\n }\n return pool;\n })\n );\n return pools;\n } catch (err) {\n throw err;\n }\n }\n\n function get(name) {\n if (name) {\n return $async(getOne, name);\n }\n return $async(getAll);\n }\n\n function create(formValues) {\n return $async(async () => {\n try {\n const [namespace, quota, ingresses] = KubernetesResourcePoolConverter.formValuesToResourcePool(formValues);\n await KubernetesNamespaceService.create(namespace);\n\n if (quota) {\n await KubernetesResourceQuotaService.create(quota);\n }\n const ingressPromises = _.map(ingresses, (i) => KubernetesIngressService.create(i));\n await Promise.all(ingressPromises);\n } catch (err) {\n throw err;\n }\n });\n }\n\n function patch(oldFormValues, newFormValues) {\n return $async(async () => {\n try {\n const [oldNamespace, oldQuota, oldIngresses] = KubernetesResourcePoolConverter.formValuesToResourcePool(oldFormValues);\n const [newNamespace, newQuota, newIngresses] = KubernetesResourcePoolConverter.formValuesToResourcePool(newFormValues);\n void oldNamespace, newNamespace;\n\n if (oldQuota && newQuota) {\n await KubernetesResourceQuotaService.patch(oldQuota, newQuota);\n } else if (!oldQuota && newQuota) {\n await KubernetesResourceQuotaService.create(newQuota);\n } else if (oldQuota && !newQuota) {\n await KubernetesResourceQuotaService.delete(oldQuota);\n }\n\n const create = _.filter(newIngresses, (ing) => !_.find(oldIngresses, { Name: ing.Name }));\n const del = _.filter(oldIngresses, (ing) => !_.find(newIngresses, { Name: ing.Name }));\n const patch = _.without(newIngresses, ...create);\n\n const createPromises = _.map(create, (i) => KubernetesIngressService.create(i));\n const delPromises = _.map(del, (i) => KubernetesIngressService.delete(i.Namespace, i.Name));\n const patchPromises = _.map(patch, (ing) => {\n const old = _.find(oldIngresses, { Name: ing.Name });\n ing.Paths = angular.copy(old.Paths);\n ing.PreviousHost = old.Host;\n return KubernetesIngressService.patch(old, ing);\n });\n\n const promises = _.flatten([createPromises, delPromises, patchPromises]);\n await Promise.all(promises);\n } catch (err) {\n throw err;\n }\n });\n }\n\n function _delete(pool) {\n return $async(async () => {\n try {\n await KubernetesNamespaceService.delete(pool.Namespace);\n } catch (err) {\n throw err;\n }\n });\n }\n}\n\nangular.module('portainer.kubernetes').service('KubernetesResourcePoolService', KubernetesResourcePoolService);\n","import _ from 'lodash-es';\n\nimport angular from 'angular';\nimport PortainerError from 'Portainer/error';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\nimport KubernetesResourceQuotaConverter from 'Kubernetes/converters/resourceQuota';\n\n/* @ngInject */\nexport function KubernetesResourceQuotaService($async, KubernetesResourceQuotas) {\n return {\n get,\n create,\n patch,\n delete: _delete,\n };\n\n async function getOne(namespace, name) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n const [raw, yaml] = await Promise.all([KubernetesResourceQuotas(namespace).get(params).$promise, KubernetesResourceQuotas(namespace).getYaml(params).$promise]);\n return KubernetesResourceQuotaConverter.apiToResourceQuota(raw, yaml);\n } catch (err) {\n throw new PortainerError('Unable to retrieve resource quota', err);\n }\n }\n\n async function getAll(namespace) {\n try {\n const data = await KubernetesResourceQuotas(namespace).get().$promise;\n return _.map(data.items, (item) => KubernetesResourceQuotaConverter.apiToResourceQuota(item));\n } catch (err) {\n throw new PortainerError('Unable to retrieve resource quotas', err);\n }\n }\n\n function get(namespace, name) {\n if (name) {\n return $async(getOne, namespace, name);\n }\n return $async(getAll, namespace);\n }\n\n function create(quota) {\n return $async(async () => {\n try {\n const payload = KubernetesResourceQuotaConverter.createPayload(quota);\n const namespace = payload.metadata.namespace;\n const params = {};\n const data = await KubernetesResourceQuotas(namespace).create(params, payload).$promise;\n return KubernetesResourceQuotaConverter.apiToResourceQuota(data);\n } catch (err) {\n throw new PortainerError('Unable to create quota', err);\n }\n });\n }\n\n function patch(oldQuota, newQuota) {\n return $async(async () => {\n try {\n const params = new KubernetesCommonParams();\n params.id = newQuota.Name;\n const namespace = newQuota.Namespace;\n const payload = KubernetesResourceQuotaConverter.patchPayload(oldQuota, newQuota);\n if (!payload.length) {\n return;\n }\n const data = await KubernetesResourceQuotas(namespace).patch(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to update resource quota', err);\n }\n });\n }\n\n function _delete(quota) {\n return $async(async () => {\n try {\n const params = new KubernetesCommonParams();\n params.id = quota.Name;\n await KubernetesResourceQuotas(quota.Namespace).delete(params).$promise;\n } catch (err) {\n throw new PortainerError('Unable to delete quota', err);\n }\n });\n }\n}\n\nangular.module('portainer.kubernetes').service('KubernetesResourceQuotaService', KubernetesResourceQuotaService);\n","import angular from 'angular';\nimport _ from 'lodash-es';\nimport PortainerError from 'Portainer/error';\nimport KubernetesSecretConverter from 'Kubernetes/converters/secret';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\n\nclass KubernetesSecretService {\n /* @ngInject */\n constructor($async, KubernetesSecrets) {\n this.$async = $async;\n this.KubernetesSecrets = KubernetesSecrets;\n\n this.getAsync = this.getAsync.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n this.createAsync = this.createAsync.bind(this);\n this.updateAsync = this.updateAsync.bind(this);\n this.deleteAsync = this.deleteAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAsync(namespace, name) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n const [raw, yaml] = await Promise.all([this.KubernetesSecrets(namespace).get(params).$promise, this.KubernetesSecrets(namespace).getYaml(params).$promise]);\n const secret = KubernetesSecretConverter.apiToSecret(raw, yaml);\n return secret;\n } catch (err) {\n throw new PortainerError('Unable to retrieve secret', err);\n }\n }\n\n async getAllAsync(namespace) {\n try {\n const data = await this.KubernetesSecrets(namespace).get().$promise;\n return _.map(data.items, (item) => KubernetesSecretConverter.apiToSecret(item));\n } catch (err) {\n throw new PortainerError('Unable to retrieve secrets', err);\n }\n }\n\n get(namespace, name) {\n if (name) {\n return this.$async(this.getAsync, namespace, name);\n }\n return this.$async(this.getAllAsync, namespace);\n }\n\n /**\n * CREATE\n */\n async createAsync(secret) {\n try {\n const payload = KubernetesSecretConverter.createPayload(secret);\n const namespace = payload.metadata.namespace;\n const params = {};\n const data = await this.KubernetesSecrets(namespace).create(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to create secret', err);\n }\n }\n\n create(secret) {\n return this.$async(this.createAsync, secret);\n }\n\n /**\n * UPDATE\n */\n async updateAsync(secret) {\n try {\n const payload = KubernetesSecretConverter.updatePayload(secret);\n const params = new KubernetesCommonParams();\n params.id = payload.metadata.name;\n const namespace = payload.metadata.namespace;\n const data = await this.KubernetesSecrets(namespace).update(params, payload).$promise;\n return KubernetesSecretConverter.apiToSecret(data);\n } catch (err) {\n throw new PortainerError('Unable to update secret', err);\n }\n }\n\n update(secret) {\n return this.$async(this.updateAsync, secret);\n }\n\n /**\n * DELETE\n */\n async deleteAsync(secret) {\n try {\n const params = new KubernetesCommonParams();\n params.id = secret.Name;\n const namespace = secret.Namespace;\n await this.KubernetesSecrets(namespace).delete(params).$promise;\n } catch (err) {\n throw new PortainerError('Unable to delete secret', err);\n }\n }\n\n delete(secret) {\n return this.$async(this.deleteAsync, secret);\n }\n}\n\nexport default KubernetesSecretService;\nangular.module('portainer.kubernetes').service('KubernetesSecretService', KubernetesSecretService);\n","import angular from 'angular';\nimport PortainerError from 'Portainer/error';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\nimport KubernetesServiceConverter from 'Kubernetes/converters/service';\n\nclass KubernetesServiceService {\n /* @ngInject */\n constructor($async, KubernetesServices) {\n this.$async = $async;\n this.KubernetesServices = KubernetesServices;\n\n this.getAsync = this.getAsync.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n this.createAsync = this.createAsync.bind(this);\n this.patchAsync = this.patchAsync.bind(this);\n this.deleteAsync = this.deleteAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAsync(namespace, name) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n const [raw, yaml] = await Promise.all([this.KubernetesServices(namespace).get(params).$promise, this.KubernetesServices(namespace).getYaml(params).$promise]);\n const res = {\n Raw: raw,\n Yaml: yaml.data,\n };\n return res;\n } catch (err) {\n throw new PortainerError('Unable to retrieve service', err);\n }\n }\n\n async getAllAsync(namespace) {\n try {\n const data = await this.KubernetesServices(namespace).get().$promise;\n return data.items;\n } catch (err) {\n throw new PortainerError('Unable to retrieve services', err);\n }\n }\n\n get(namespace, name) {\n if (name) {\n return this.$async(this.getAsync, namespace, name);\n }\n return this.$async(this.getAllAsync, namespace);\n }\n\n /**\n * CREATE\n */\n async createAsync(service) {\n try {\n const params = {};\n const payload = KubernetesServiceConverter.createPayload(service);\n const namespace = payload.metadata.namespace;\n const data = await this.KubernetesServices(namespace).create(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to create service', err);\n }\n }\n\n create(service) {\n return this.$async(this.createAsync, service);\n }\n\n /**\n * PATCH\n */\n async patchAsync(oldService, newService) {\n try {\n const params = new KubernetesCommonParams();\n params.id = newService.Name;\n const namespace = newService.Namespace;\n const payload = KubernetesServiceConverter.patchPayload(oldService, newService);\n if (!payload.length) {\n return;\n }\n const data = await this.KubernetesServices(namespace).patch(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to patch service', err);\n }\n }\n\n patch(oldService, newService) {\n return this.$async(this.patchAsync, oldService, newService);\n }\n\n /**\n * DELETE\n */\n async deleteAsync(service) {\n try {\n const params = new KubernetesCommonParams();\n params.id = service.Name;\n const namespace = service.Namespace;\n await this.KubernetesServices(namespace).delete(params).$promise;\n } catch (err) {\n throw new PortainerError('Unable to remove service', err);\n }\n }\n\n delete(service) {\n return this.$async(this.deleteAsync, service);\n }\n}\n\nexport default KubernetesServiceService;\nangular.module('portainer.kubernetes').service('KubernetesServiceService', KubernetesServiceService);\n","import _ from 'lodash-es';\nimport angular from 'angular';\n\nclass KubernetesStackService {\n /* @ngInject */\n constructor($async, KubernetesApplicationService) {\n this.$async = $async;\n this.KubernetesApplicationService = KubernetesApplicationService;\n\n this.getAllAsync = this.getAllAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAllAsync(namespace) {\n try {\n const applications = await this.KubernetesApplicationService.get(namespace);\n const stacks = _.map(applications, (item) => item.StackName);\n return _.uniq(_.without(stacks, '-'));\n } catch (err) {\n throw err;\n }\n }\n\n get(namespace) {\n return this.$async(this.getAllAsync, namespace);\n }\n}\n\nexport default KubernetesStackService;\nangular.module('portainer.kubernetes').service('KubernetesStackService', KubernetesStackService);\n","import angular from 'angular';\nimport PortainerError from 'Portainer/error';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\nimport KubernetesStatefulSetConverter from 'Kubernetes/converters/statefulSet';\n\nclass KubernetesStatefulSetService {\n /* @ngInject */\n constructor($async, KubernetesStatefulSets, KubernetesServiceService) {\n this.$async = $async;\n this.KubernetesStatefulSets = KubernetesStatefulSets;\n this.KubernetesServiceService = KubernetesServiceService;\n\n this.getAsync = this.getAsync.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n this.createAsync = this.createAsync.bind(this);\n this.patchAsync = this.patchAsync.bind(this);\n this.rollbackAsync = this.rollbackAsync.bind(this);\n this.deleteAsync = this.deleteAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAsync(namespace, name) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n const [raw, yaml] = await Promise.all([this.KubernetesStatefulSets(namespace).get(params).$promise, this.KubernetesStatefulSets(namespace).getYaml(params).$promise]);\n const res = {\n Raw: raw,\n Yaml: yaml.data,\n };\n const headlessServiceName = raw.spec.serviceName;\n if (headlessServiceName) {\n try {\n const headlessService = await this.KubernetesServiceService.get(namespace, headlessServiceName);\n res.Yaml += '---\\n' + headlessService.Yaml;\n } catch (error) {\n // if has error means headless service does not exist\n // skip error as we don't care in this case\n }\n }\n return res;\n } catch (err) {\n throw new PortainerError('Unable to retrieve StatefulSet', err);\n }\n }\n\n async getAllAsync(namespace) {\n try {\n const data = await this.KubernetesStatefulSets(namespace).get().$promise;\n return data.items;\n } catch (err) {\n throw new PortainerError('Unable to retrieve StatefulSets', err);\n }\n }\n\n get(namespace, name) {\n if (name) {\n return this.$async(this.getAsync, namespace, name);\n }\n return this.$async(this.getAllAsync, namespace);\n }\n\n /**\n * CREATE\n */\n async createAsync(statefulSet) {\n try {\n const params = {};\n const payload = KubernetesStatefulSetConverter.createPayload(statefulSet);\n const namespace = payload.metadata.namespace;\n const data = await this.KubernetesStatefulSets(namespace).create(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to create statefulSet', err);\n }\n }\n\n create(statefulSet) {\n return this.$async(this.createAsync, statefulSet);\n }\n\n /**\n * PATCH\n */\n async patchAsync(oldStatefulSet, newStatefulSet) {\n try {\n const params = new KubernetesCommonParams();\n params.id = newStatefulSet.Name;\n const namespace = newStatefulSet.Namespace;\n const payload = KubernetesStatefulSetConverter.patchPayload(oldStatefulSet, newStatefulSet);\n if (!payload.length) {\n return;\n }\n const data = await this.KubernetesStatefulSets(namespace).patch(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to patch statefulSet', err);\n }\n }\n\n patch(oldStatefulSet, newStatefulSet) {\n return this.$async(this.patchAsync, oldStatefulSet, newStatefulSet);\n }\n\n /**\n * DELETE\n */\n async deleteAsync(statefulSet) {\n try {\n const params = new KubernetesCommonParams();\n params.id = statefulSet.Name;\n const namespace = statefulSet.Namespace;\n await this.KubernetesStatefulSets(namespace).delete(params).$promise;\n } catch (err) {\n throw new PortainerError('Unable to remove statefulSet', err);\n }\n }\n\n delete(statefulSet) {\n return this.$async(this.deleteAsync, statefulSet);\n }\n\n /**\n * ROLLBACK\n */\n async rollbackAsync(namespace, name, payload) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n await this.KubernetesStatefulSets(namespace).rollback(params, payload).$promise;\n } catch (err) {\n throw new PortainerError('Unable to rollback statefulSet', err);\n }\n }\n\n rollback(namespace, name, payload) {\n return this.$async(this.rollbackAsync, namespace, name, payload);\n }\n}\n\nexport default KubernetesStatefulSetService;\nangular.module('portainer.kubernetes').service('KubernetesStatefulSetService', KubernetesStatefulSetService);\n","import angular from 'angular';\nimport _ from 'lodash-es';\nimport PortainerError from 'Portainer/error';\nimport KubernetesStorageClassConverter from 'Kubernetes/converters/storageClass';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\n\nclass KubernetesStorageService {\n /* @ngInject */\n constructor($async, KubernetesStorage) {\n this.$async = $async;\n this.KubernetesStorage = KubernetesStorage;\n\n this.getAsync = this.getAsync.bind(this);\n this.patchAsync = this.patchAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAsync(endpointId) {\n try {\n const params = {\n endpointId: endpointId,\n };\n const classes = await this.KubernetesStorage().get(params).$promise;\n const res = _.map(classes.items, (item) => KubernetesStorageClassConverter.apiToStorageClass(item));\n return res;\n } catch (err) {\n throw new PortainerError('Unable to retrieve storage classes', err);\n }\n }\n\n get(endpointId) {\n return this.$async(this.getAsync, endpointId);\n }\n\n /**\n * PATCH\n */\n async patchAsync(endpointId, oldStorageClass, newStorageClass) {\n try {\n const params = new KubernetesCommonParams();\n params.id = newStorageClass.Name;\n params.endpointId = endpointId;\n const payload = KubernetesStorageClassConverter.patchPayload(oldStorageClass, newStorageClass);\n await this.KubernetesStorage().patch(params, payload).$promise;\n } catch (err) {\n throw new PortainerError('Unable to patch storage class', err);\n }\n }\n\n patch(endpointId, oldStorageClass, newStorageClass) {\n return this.$async(this.patchAsync, endpointId, oldStorageClass, newStorageClass);\n }\n}\n\nexport default KubernetesStorageService;\nangular.module('portainer.kubernetes').service('KubernetesStorageService', KubernetesStorageService);\n","import angular from 'angular';\nimport _ from 'lodash-es';\n\nimport KubernetesVolumeConverter from 'Kubernetes/converters/volume';\n\nclass KubernetesVolumeService {\n /* @ngInject */\n constructor($async, KubernetesResourcePoolService, KubernetesApplicationService, KubernetesPersistentVolumeClaimService) {\n this.$async = $async;\n this.KubernetesResourcePoolService = KubernetesResourcePoolService;\n this.KubernetesApplicationService = KubernetesApplicationService;\n this.KubernetesPersistentVolumeClaimService = KubernetesPersistentVolumeClaimService;\n\n this.getAsync = this.getAsync.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n this.deleteAsync = this.deleteAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAsync(namespace, name) {\n try {\n const [pvc, pool] = await Promise.all([this.KubernetesPersistentVolumeClaimService.get(namespace, name), this.KubernetesResourcePoolService.get(namespace)]);\n return KubernetesVolumeConverter.pvcToVolume(pvc, pool);\n } catch (err) {\n throw err;\n }\n }\n\n async getAllAsync(namespace) {\n try {\n const data = await this.KubernetesResourcePoolService.get(namespace);\n const pools = data instanceof Array ? data : [data];\n const res = await Promise.all(\n _.map(pools, async (pool) => {\n const pvcs = await this.KubernetesPersistentVolumeClaimService.get(pool.Namespace.Name);\n return _.map(pvcs, (pvc) => KubernetesVolumeConverter.pvcToVolume(pvc, pool));\n })\n );\n return _.flatten(res);\n } catch (err) {\n throw err;\n }\n }\n\n get(namespace, name) {\n if (name) {\n return this.$async(this.getAsync, namespace, name);\n }\n return this.$async(this.getAllAsync, namespace);\n }\n\n /**\n * DELETE\n */\n async deleteAsync(volume) {\n try {\n await this.KubernetesPersistentVolumeClaimService.delete(volume.PersistentVolumeClaim);\n } catch (err) {\n throw err;\n }\n }\n\n delete(volume) {\n return this.$async(this.deleteAsync, volume);\n }\n}\n\nexport default KubernetesVolumeService;\nangular.module('portainer.kubernetes').service('KubernetesVolumeService', KubernetesVolumeService);\n","const autoNgTemplateLoaderTemplate1 = require('./applications.html');\n\nangular.module('portainer.kubernetes').component('kubernetesApplicationsView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesApplicationsController',\n controllerAs: 'ctrl',\n bindings: {\n $transition$: '<',\n },\n});\n","var path = 'app/kubernetes/views/applications/applications.html';\nvar html = \"\\n Applications\\n\\n\\n\\n\\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n Applications \\n \\n \\n \\n \\n Port mappings \\n \\n \\n \\n \\n Stacks \\n \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","require('../../templates/advancedDeploymentPanel.html');\n\nimport angular from 'angular';\nimport _ from 'lodash-es';\nimport KubernetesStackHelper from 'Kubernetes/helpers/stackHelper';\nimport KubernetesApplicationHelper from 'Kubernetes/helpers/application';\n\nclass KubernetesApplicationsController {\n /* @ngInject */\n constructor($async, $state, Notifications, KubernetesApplicationService, Authentication, ModalService, LocalStorage) {\n this.$async = $async;\n this.$state = $state;\n this.Notifications = Notifications;\n this.KubernetesApplicationService = KubernetesApplicationService;\n\n this.Authentication = Authentication;\n this.ModalService = ModalService;\n this.LocalStorage = LocalStorage;\n\n this.onInit = this.onInit.bind(this);\n this.getApplications = this.getApplications.bind(this);\n this.getApplicationsAsync = this.getApplicationsAsync.bind(this);\n this.removeAction = this.removeAction.bind(this);\n this.removeActionAsync = this.removeActionAsync.bind(this);\n this.removeStacksAction = this.removeStacksAction.bind(this);\n this.removeStacksActionAsync = this.removeStacksActionAsync.bind(this);\n this.onPublishingModeClick = this.onPublishingModeClick.bind(this);\n }\n\n selectTab(index) {\n this.LocalStorage.storeActiveTab('applications', index);\n }\n\n async removeStacksActionAsync(selectedItems) {\n let actionCount = selectedItems.length;\n for (const stack of selectedItems) {\n try {\n const promises = _.map(stack.Applications, (app) => this.KubernetesApplicationService.delete(app));\n await Promise.all(promises);\n this.Notifications.success('Stack successfully removed', stack.Name);\n _.remove(this.stacks, { Name: stack.Name });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to remove stack');\n } finally {\n --actionCount;\n if (actionCount === 0) {\n this.$state.reload();\n }\n }\n }\n }\n\n removeStacksAction(selectedItems) {\n this.ModalService.confirmDeletion(\n 'Are you sure that you want to remove the selected stack(s) ? This will remove all the applications associated to the stack(s).',\n (confirmed) => {\n if (confirmed) {\n return this.$async(this.removeStacksActionAsync, selectedItems);\n }\n }\n );\n }\n\n async removeActionAsync(selectedItems) {\n let actionCount = selectedItems.length;\n for (const application of selectedItems) {\n try {\n await this.KubernetesApplicationService.delete(application);\n this.Notifications.success('Application successfully removed', application.Name);\n const index = this.applications.indexOf(application);\n this.applications.splice(index, 1);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to remove application');\n } finally {\n --actionCount;\n if (actionCount === 0) {\n this.$state.reload();\n }\n }\n }\n }\n\n removeAction(selectedItems) {\n this.ModalService.confirmDeletion('Do you want to remove the selected application(s)?', (confirmed) => {\n if (confirmed) {\n return this.$async(this.removeActionAsync, selectedItems);\n }\n });\n }\n\n onPublishingModeClick(application) {\n this.state.activeTab = 1;\n _.forEach(this.ports, (item) => {\n item.Expanded = false;\n item.Highlighted = false;\n if (item.Name === application.Name && item.Ports.length > 1) {\n item.Expanded = true;\n item.Highlighted = true;\n }\n });\n }\n\n async getApplicationsAsync() {\n try {\n const applications = await this.KubernetesApplicationService.get();\n this.applications = applications;\n this.stacks = KubernetesStackHelper.stacksFromApplications(applications);\n this.ports = KubernetesApplicationHelper.portMappingsFromApplications(applications);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve applications');\n }\n }\n\n getApplications() {\n return this.$async(this.getApplicationsAsync);\n }\n\n async onInit() {\n this.state = {\n activeTab: this.LocalStorage.getActiveTab('applications'),\n currentName: this.$state.$current.name,\n isAdmin: this.Authentication.isAdmin(),\n viewReady: false,\n };\n\n await this.getApplications();\n\n this.state.viewReady = true;\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n\n $onDestroy() {\n if (this.state.currentName !== this.$state.$current.name) {\n this.LocalStorage.storeActiveTab('applications', 0);\n }\n }\n}\n\nexport default KubernetesApplicationsController;\nangular.module('portainer.kubernetes').controller('KubernetesApplicationsController', KubernetesApplicationsController);\n","const autoNgTemplateLoaderTemplate1 = require('./console.html');\n\nangular.module('portainer.kubernetes').component('kubernetesApplicationConsoleView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesApplicationConsoleController',\n controllerAs: 'ctrl',\n bindings: {\n $transition$: '<',\n },\n});\n","var path = 'app/kubernetes/views/applications/console/console.html';\nvar html = \"\\n Namespaces >\\n {{ ctrl.application.ResourcePool }} >\\n Applications >\\n {{ ctrl.application.Name }} > Pods >\\n {{ ctrl.podName }} > Containers > {{ ctrl.containerName }} > Console\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n Console\\n
    \\n \\n
    \\n \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n Connect\\n Connection in progress...\\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\nimport { Terminal } from 'xterm';\n\nclass KubernetesApplicationConsoleController {\n /* @ngInject */\n constructor($async, $state, Notifications, KubernetesApplicationService, EndpointProvider, LocalStorage) {\n this.$async = $async;\n this.$state = $state;\n this.Notifications = Notifications;\n this.KubernetesApplicationService = KubernetesApplicationService;\n this.EndpointProvider = EndpointProvider;\n this.LocalStorage = LocalStorage;\n\n this.onInit = this.onInit.bind(this);\n }\n\n disconnect() {\n this.state.socket.close();\n this.state.term.dispose();\n this.state.connected = false;\n }\n\n configureSocketAndTerminal(socket, term) {\n socket.onopen = function () {\n const terminal_container = document.getElementById('terminal-container');\n term.open(terminal_container);\n term.setOption('cursorBlink', true);\n term.focus();\n };\n\n term.on('data', function (data) {\n socket.send(data);\n });\n\n socket.onmessage = function (msg) {\n term.write(msg.data);\n };\n\n socket.onerror = function (err) {\n this.disconnect();\n this.Notifications.error('Failure', err, 'Websocket connection error');\n }.bind(this);\n\n this.state.socket.onclose = function () {\n this.disconnect();\n }.bind(this);\n\n this.state.connected = true;\n }\n\n connectConsole() {\n const params = {\n token: this.LocalStorage.getJWT(),\n endpointId: this.EndpointProvider.endpointID(),\n namespace: this.application.ResourcePool,\n podName: this.podName,\n containerName: this.containerName,\n command: this.state.command,\n };\n\n let url =\n window.location.href.split('#')[0] +\n 'api/websocket/pod?' +\n Object.keys(params)\n .map((k) => k + '=' + params[k])\n .join('&');\n if (url.indexOf('https') > -1) {\n url = url.replace('https://', 'wss://');\n } else {\n url = url.replace('http://', 'ws://');\n }\n\n this.state.socket = new WebSocket(url);\n this.state.term = new Terminal();\n\n this.configureSocketAndTerminal(this.state.socket, this.state.term);\n }\n\n async onInit() {\n const availableCommands = ['/bin/bash', '/bin/sh'];\n\n this.state = {\n actionInProgress: false,\n availableCommands: availableCommands,\n command: availableCommands[1],\n connected: false,\n socket: null,\n term: null,\n viewReady: false,\n };\n\n const podName = this.$transition$.params().pod;\n const applicationName = this.$transition$.params().name;\n const namespace = this.$transition$.params().namespace;\n const containerName = this.$transition$.params().container;\n\n this.podName = podName;\n this.containerName = containerName;\n\n try {\n this.application = await this.KubernetesApplicationService.get(namespace, applicationName);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve application logs');\n } finally {\n this.state.viewReady = true;\n }\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n}\n\nexport default KubernetesApplicationConsoleController;\nangular.module('portainer.kubernetes').controller('KubernetesApplicationConsoleController', KubernetesApplicationConsoleController);\n","const autoNgTemplateLoaderTemplate1 = require('./createApplication.html');\n\nangular.module('portainer.kubernetes').component('kubernetesCreateApplicationView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesCreateApplicationController',\n controllerAs: 'ctrl',\n bindings: {\n $transition$: '<',\n endpoint: '<',\n },\n});\n","var path = 'app/kubernetes/views/applications/create/createApplication.html';\nvar html = \"\\n Applications > Create an application\\n\\n\\n Namespaces >\\n {{ ctrl.application.ResourcePool }} >\\n Applications >\\n {{ ctrl.application.Name }} > Edit\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n

    This field must consist of lower case alphanumeric characters or '-', start with an alphabetic\\n character, and end with an alphanumeric character (e.g. 'my-name', or 'abc-123').\\n

    \\n

    An application with the same name already exists inside the selected namespace.\\n

    \\n
    \\n \\n\\n \\n\\n
    \\n \\n
    \\n 1\\\"\\n />\\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n \\n\\n
    \\n Namespace\\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n This namespace has exhausted its resource capacity and you will not be able to deploy the application. Contact your administrator to expand the capacity of the\\n namespace.\\n
    \\n
    \\n \\n\\n
    \\n Stack\\n
    \\n \\n
    \\n
    \\n \\n 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\\n application name.\\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n\\n
    \\n Environment\\n
    \\n \\n
    \\n
    \\n \\n \\n add environment variable\\n \\n
    \\n\\n
    \\n
    \\n
    \\n
    \\n
    \\n name\\n 1\\\"\\n required\\n />\\n
    \\n
    \\n\\n
    \\n value\\n 1\\\"\\n />\\n
    \\n\\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n

    Environment variable name is required.

    \\n

    This field must consist of alphabetic characters, digits, '_', '-', or '.', and must not\\n start with a digit (e.g. 'my.env-name', or 'MY_ENV.NAME', or 'MyEnvName1'.\\n \\n

    This environment variable is already defined.\\n

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n\\n
    \\n Configurations\\n
    \\n \\n
    \\n
    \\n \\n \\n add configuration\\n \\n
    \\n
    \\n \\n Portainer will automatically expose all the keys of a configuration as environment variables. This behavior can be overriden to filesystem mounts for each key via\\n the override button.\\n
    \\n
    \\n\\n \\n
    \\n \\n
    \\n 1\\\"\\n >\\n
    \\n
    \\n 1\\\"\\n >\\n Override\\n \\n 1\\\"\\n >\\n Auto\\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n The following keys will be loaded from the {{ config.SelectedConfiguration.Name }} configuration as environment variables:\\n \\n {{ key }}{{ $last ? '' : ', ' }}\\n \\n
    \\n
    \\n \\n\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n configuration key\\n \\n
    \\n\\n
    \\n
    \\n path on disk\\n 1\\\"\\n required\\n ng-change=\\\"ctrl.onChangeConfigurationPath()\\\"\\n />\\n
    \\n
    \\n\\n
    \\n \\n \\n
    \\n
    \\n\\n \\n
    \\n
    \\n
    \\n \\n \\n

    Path is required.

    \\n
    \\n

    This path is already used.\\n

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n\\n
    \\n Persisting data\\n
    \\n \\n
    \\n
    \\n \\n No storage option is available to persist data, contact your administrator to enable a storage option.\\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n add persisted folder\\n \\n
    \\n\\n
    \\n
    \\n
    \\n path in container\\n 1\\\"\\n placeholder=\\\"/data\\\"\\n required\\n />\\n
    \\n\\n
    \\n \\n New volume\\n Existing volume\\n \\n
    \\n\\n
    \\n requested size\\n 1\\\"\\n />\\n \\n 1\\\"\\n >\\n \\n
    \\n\\n
    \\n storage\\n 1\\\"\\n >\\n \\n
    \\n\\n
    \\n volume\\n 1\\\"\\n required\\n >\\n \\n \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\\n \\n
    \\n \\n \\n

    Path is required.

    \\n
    \\n

    This path is already defined.\\n

    \\n
    \\n\\n
    \\n\\n
    \\n
    \\n \\n

    Size is required.

    \\n

    This value must be greater than zero.

    \\n
    \\n
    \\n \\n \\n

    Volume is required.

    \\n
    \\n

    This volume is already used.\\n

    \\n
    \\n\\n
    \\n \\n \\n \\n \\n\\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n Specify how the data will be used across instances.\\n
    \\n
    \\n\\n \\n
    \\n
    \\n \\n \\n \\n
    \\n \\n \\n \\n
    \\n \\n Isolated\\n
    \\n

    Application will be deployed as a StatefulSet with each instantiating their own data

    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n Shared\\n
    \\n

    Application will be deployed as a Deployment with a shared storage access

    \\n \\n
    \\n
    \\n \\n \\n \\n \\n\\n
    \\n Resource reservations\\n
    \\n \\n
    \\n
    \\n \\n Resource reservations are applied per instance of the application.\\n
    \\n
    \\n\\n
    \\n
    \\n \\n A resource quota is set on this namespace, you must specify resource reservations. Resource reservations are applied per instance of the application. Maximums are\\n inherited from the namespace quota.\\n
    \\n
    \\n\\n
    \\n
    \\n \\n This namespace has exhausted its resource capacity and you will not be able to deploy the application. Contact your administrator to expand the capacity of the\\n namespace.\\n
    \\n
    \\n\\n \\n \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n

    \\n Maximum memory usage (MB)\\n

    \\n
    \\n \\n
    \\n
    \\n
    \\n Value must be between {{ ctrl.state.sliders.memory.min }} and\\n {{ ctrl.state.sliders.memory.max }}\\n

    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n

    \\n Maximum CPU usage\\n

    \\n
    \\n \\n \\n \\n\\n
    \\n Deployment\\n
    \\n \\n
    \\n
    \\n Select how you want to deploy your application inside the cluster.\\n
    \\n
    \\n\\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n Global\\n
    \\n

    Application will be deployed as a DaemonSet with an instance on each node of the cluster

    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n

    Instance count is required.

    \\n

    Instance count must be greater than 0.

    \\n
    \\n
    \\n
    \\n \\n\\n 1 && (ctrl.formValues.CpuLimit !== 0 || ctrl.formValues.MemoryLimit !== 0)\\\"\\n >\\n
    \\n \\n This application will reserve the following resources:\\n {{ ctrl.formValues.CpuLimit * ctrl.formValues.ReplicaCount | kubernetesApplicationCPUValue }} CPU and\\n {{ ctrl.formValues.MemoryLimit * ctrl.formValues.ReplicaCount }} MB of memory.\\n
    \\n \\n\\n
    \\n
    \\n \\n This application would exceed available resources. Please review resource reservations or the instance count.\\n
    \\n
    \\n\\n
    \\n
    \\n \\n The following storage option(s) do not support concurrent access from multiples instances: {{ ctrl.getNonScalableStorage() }}. You will not be able to scale that application.\\n
    \\n
    \\n \\n\\n \\n
    \\n Auto-scaling\\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n

    \\n This feature is currently disabled and must be enabled by an administrator user.\\n

    \\n

    \\n Server metrics features must be enabled in the\\n endpoint configuration view.\\n

    \\n
    \\n
    \\n\\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Minimum instancesMaximum instances\\n Target CPU usage (%)\\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n

    Minimum instances is required.

    \\n

    Minimum instances must be greater than 0.

    \\n

    Minimum instances must be smaller than maximum instances.

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n

    Maximum instances is required.

    \\n

    Maximum instances must be greater than minimum instances.

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n

    Target CPU usage is required.

    \\n

    Target CPU usage must be greater than 0.

    \\n

    Target CPU usage must be smaller than 100.

    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n This application would exceed available resources. Please review resource reservations or the maximum instance count of the auto-scaling policy.\\n
    \\n
    \\n
    \\n \\n\\n
    \\n
    \\n Placement preferences and constraints\\n
    \\n\\n \\n
    \\n
    \\n \\n \\n add rule\\n \\n
    \\n\\n
    0\\\" style=\\\"margin-top: 10px;\\\">\\n \\n Deploy this application on nodes that respect ALL of the following placement rules. Placement rules are based on node labels.\\n
    \\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n\\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    \\n This label is already defined.\\n

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n Specify the policy associated to the placement rules.\\n
    \\n
    \\n\\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n\\n
    \\n Publishing the application\\n
    \\n \\n
    \\n
    \\n Select how you want to publish your application.\\n
    \\n
    \\n\\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n Internal\\n
    \\n

    Internal communications inside the cluster only

    \\n \\n \\n
    \\n \\n Internal\\n
    \\n

    Internal communications inside the cluster only

    \\n \\n
    \\n\\n
    \\n \\n \\n
    \\n \\n Cluster\\n
    \\n

    Publish this application via a port on all nodes of the cluster

    \\n \\n \\n
    \\n \\n Cluster\\n
    \\n

    Publish this application via a port on all nodes of the cluster

    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n Ingress\\n
    \\n

    Publish this application via a HTTP route

    \\n \\n \\n
    \\n \\n Ingress\\n
    \\n

    Publish this application via a HTTP route

    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n Load balancer\\n
    \\n

    Publish this application via a load balancer

    \\n \\n \\n
    \\n \\n Load balancer\\n
    \\n

    Publish this application via a load balancer

    \\n \\n
    \\n
    \\n
    \\n \\n\\n \\n
    \\n
    \\n \\n \\n publish a new port\\n \\n
    \\n\\n 0\\\"\\n >\\n \\n When publishing a port in cluster mode, the node port is optional. If left empty Kubernetes will use a random port number. If you wish to specify a port, use a port\\n number inside the default range 30000-32767.\\n
    \\n
    \\n At least one published port must be defined.\\n
    \\n\\n
    \\n \\n \\n \\n container port\\n \\n
    \\n\\n \\n node port\\n \\n \\n\\n \\n load balancer port\\n \\n \\n\\n \\n ingress\\n \\n \\n \\n \\n\\n \\n hostname\\n \\n \\n \\n \\n\\n \\n route\\n \\n \\n\\n
    \\n
    \\n TCP\\n UDP\\n
    \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n\\n \\n \\n
    \\n \\n
    \\n

    Container port number is required.

    \\n

    Container port number must be inside the range 1-65535.

    \\n

    Container port number must be inside the range 1-65535.

    \\n
    \\n

    \\n This port is already used.\\n

    \\n
    \\n \\n\\n
    \\n \\n
    \\n

    Node port number must be inside the range 30000-32767.

    \\n

    Node port number must be inside the range 30000-32767.

    \\n
    \\n

    \\n This port is already used.\\n

    \\n
    \\n \\n\\n
    \\n
    \\n
    \\n

    Ingress selection is required.

    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n

    Route is required.

    \\n

    This field must consist of alphanumeric characters or the special characters: '-', '_' or\\n '/'. It must start and end with an alphanumeric character (e.g. 'my-route', or 'route-123').\\n

    \\n

    \\n This route is already used.\\n

    \\n
    \\n \\n\\n
    \\n \\n
    \\n

    Load balancer port number is required.

    \\n

    Load balancer port number must be inside the range 1-65535.

    \\n

    Load balancer port number must be inside the range 1-65535.

    \\n
    \\n

    \\n \\n This port is already used.\\n

    \\n
    \\n \\n\\n
    \\n \\n \\n \\n \\n \\n\\n \\n \\n\\n
    \\n Actions\\n
    \\n\\n \\n
    \\n
    \\n \\n Deploy application\\n Deployment in progress...\\n Update application\\n Update in progress...\\n \\n \\n Cancel\\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\nimport _ from 'lodash-es';\nimport filesizeParser from 'filesize-parser';\nimport * as JsonPatch from 'fast-json-patch';\n\nimport {\n KubernetesApplicationDataAccessPolicies,\n KubernetesApplicationDeploymentTypes,\n KubernetesApplicationPublishingTypes,\n KubernetesApplicationQuotaDefaults,\n KubernetesApplicationTypes,\n KubernetesApplicationPlacementTypes,\n} from 'Kubernetes/models/application/models';\nimport {\n KubernetesApplicationConfigurationFormValue,\n KubernetesApplicationConfigurationFormValueOverridenKey,\n KubernetesApplicationConfigurationFormValueOverridenKeyTypes,\n KubernetesApplicationEnvironmentVariableFormValue,\n KubernetesApplicationFormValues,\n KubernetesApplicationPersistedFolderFormValue,\n KubernetesApplicationPublishedPortFormValue,\n KubernetesApplicationPlacementFormValue,\n KubernetesFormValidationReferences,\n} from 'Kubernetes/models/application/formValues';\nimport KubernetesFormValidationHelper from 'Kubernetes/helpers/formValidationHelper';\nimport KubernetesApplicationConverter from 'Kubernetes/converters/application';\nimport KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';\nimport { KubernetesServiceTypes } from 'Kubernetes/models/service/models';\nimport KubernetesApplicationHelper from 'Kubernetes/helpers/application/index';\nimport KubernetesVolumeHelper from 'Kubernetes/helpers/volumeHelper';\nimport { KubernetesNodeHelper } from 'Kubernetes/node/helper';\n\nclass KubernetesCreateApplicationController {\n /* #region CONSTRUCTOR */\n\n /* @ngInject */\n constructor(\n $async,\n $state,\n Notifications,\n EndpointProvider,\n Authentication,\n DockerHubService,\n ModalService,\n KubernetesResourcePoolService,\n KubernetesApplicationService,\n KubernetesStackService,\n KubernetesConfigurationService,\n KubernetesNodeService,\n KubernetesIngressService,\n KubernetesPersistentVolumeClaimService,\n KubernetesNamespaceHelper,\n KubernetesVolumeService\n ) {\n this.$async = $async;\n this.$state = $state;\n this.Notifications = Notifications;\n this.EndpointProvider = EndpointProvider;\n this.Authentication = Authentication;\n this.DockerHubService = DockerHubService;\n this.ModalService = ModalService;\n this.KubernetesResourcePoolService = KubernetesResourcePoolService;\n this.KubernetesApplicationService = KubernetesApplicationService;\n this.KubernetesStackService = KubernetesStackService;\n this.KubernetesConfigurationService = KubernetesConfigurationService;\n this.KubernetesNodeService = KubernetesNodeService;\n this.KubernetesVolumeService = KubernetesVolumeService;\n this.KubernetesIngressService = KubernetesIngressService;\n this.KubernetesPersistentVolumeClaimService = KubernetesPersistentVolumeClaimService;\n this.KubernetesNamespaceHelper = KubernetesNamespaceHelper;\n\n this.ApplicationDeploymentTypes = KubernetesApplicationDeploymentTypes;\n this.ApplicationDataAccessPolicies = KubernetesApplicationDataAccessPolicies;\n this.ApplicationPublishingTypes = KubernetesApplicationPublishingTypes;\n this.ApplicationPlacementTypes = KubernetesApplicationPlacementTypes;\n this.ApplicationTypes = KubernetesApplicationTypes;\n this.ApplicationConfigurationFormValueOverridenKeyTypes = KubernetesApplicationConfigurationFormValueOverridenKeyTypes;\n this.ServiceTypes = KubernetesServiceTypes;\n\n this.updateApplicationAsync = this.updateApplicationAsync.bind(this);\n this.deployApplicationAsync = this.deployApplicationAsync.bind(this);\n this.setPullImageValidity = this.setPullImageValidity.bind(this);\n }\n /* #endregion */\n\n setPullImageValidity(validity) {\n this.state.pullImageValidity = validity;\n }\n\n onChangeName() {\n const existingApplication = _.find(this.applications, { Name: this.formValues.Name });\n this.state.alreadyExists = (this.state.isEdit && existingApplication && this.application.Id !== existingApplication.Id) || (!this.state.isEdit && existingApplication);\n }\n\n /* #region AUTO SCALER UI MANAGEMENT */\n unselectAutoScaler() {\n if (this.formValues.DeploymentType === this.ApplicationDeploymentTypes.GLOBAL) {\n this.formValues.AutoScaler.IsUsed = false;\n }\n }\n /* #endregion */\n\n /* #region CONFIGURATION UI MANAGEMENT */\n addConfiguration() {\n let config = new KubernetesApplicationConfigurationFormValue();\n config.SelectedConfiguration = this.configurations[0];\n this.formValues.Configurations.push(config);\n }\n\n removeConfiguration(index) {\n this.formValues.Configurations.splice(index, 1);\n this.onChangeConfigurationPath();\n }\n\n overrideConfiguration(index) {\n const config = this.formValues.Configurations[index];\n config.Overriden = true;\n config.OverridenKeys = _.map(_.keys(config.SelectedConfiguration.Data), (key) => {\n const res = new KubernetesApplicationConfigurationFormValueOverridenKey();\n res.Key = key;\n return res;\n });\n }\n\n resetConfiguration(index) {\n const config = this.formValues.Configurations[index];\n config.Overriden = false;\n config.OverridenKeys = [];\n this.onChangeConfigurationPath();\n }\n\n clearConfigurations() {\n this.formValues.Configurations = [];\n }\n\n onChangeConfigurationPath() {\n this.state.duplicates.configurationPaths.refs = [];\n\n const paths = _.reduce(\n this.formValues.Configurations,\n (result, config) => {\n const uniqOverridenKeysPath = _.uniq(_.map(config.OverridenKeys, 'Path'));\n return _.concat(result, uniqOverridenKeysPath);\n },\n []\n );\n\n const duplicatePaths = KubernetesFormValidationHelper.getDuplicates(paths);\n\n _.forEach(this.formValues.Configurations, (config, index) => {\n _.forEach(config.OverridenKeys, (overridenKey, keyIndex) => {\n const findPath = _.find(duplicatePaths, (path) => path === overridenKey.Path);\n if (findPath) {\n this.state.duplicates.configurationPaths.refs[index + '_' + keyIndex] = findPath;\n }\n });\n });\n\n this.state.duplicates.configurationPaths.hasRefs = Object.keys(this.state.duplicates.configurationPaths.refs).length > 0;\n }\n /* #endregion */\n\n /* #region ENVIRONMENT UI MANAGEMENT */\n addEnvironmentVariable() {\n this.formValues.EnvironmentVariables.push(new KubernetesApplicationEnvironmentVariableFormValue());\n }\n\n restoreEnvironmentVariable(item) {\n item.NeedsDeletion = false;\n }\n\n removeEnvironmentVariable(item) {\n const index = this.formValues.EnvironmentVariables.indexOf(item);\n if (index !== -1) {\n const envVar = this.formValues.EnvironmentVariables[index];\n if (!envVar.IsNew) {\n envVar.NeedsDeletion = true;\n } else {\n this.formValues.EnvironmentVariables.splice(index, 1);\n }\n }\n this.onChangeEnvironmentName();\n }\n\n onChangeEnvironmentName() {\n this.state.duplicates.environmentVariables.refs = KubernetesFormValidationHelper.getDuplicates(_.map(this.formValues.EnvironmentVariables, 'Name'));\n this.state.duplicates.environmentVariables.hasRefs = Object.keys(this.state.duplicates.environmentVariables.refs).length > 0;\n }\n /* #endregion */\n\n /* #region PERSISTENT FOLDERS UI MANAGEMENT */\n addPersistedFolder() {\n let storageClass = {};\n if (this.storageClasses.length > 0) {\n storageClass = this.storageClasses[0];\n }\n\n const newPf = new KubernetesApplicationPersistedFolderFormValue(storageClass);\n this.formValues.PersistedFolders.push(newPf);\n this.resetDeploymentType();\n }\n\n restorePersistedFolder(index) {\n this.formValues.PersistedFolders[index].NeedsDeletion = false;\n this.validatePersistedFolders();\n }\n\n resetPersistedFolders() {\n this.formValues.PersistedFolders = _.forEach(this.formValues.PersistedFolders, (persistedFolder) => {\n persistedFolder.ExistingVolume = null;\n persistedFolder.UseNewVolume = true;\n });\n this.validatePersistedFolders();\n }\n\n removePersistedFolder(index) {\n if (this.state.isEdit && this.formValues.PersistedFolders[index].PersistentVolumeClaimName) {\n this.formValues.PersistedFolders[index].NeedsDeletion = true;\n } else {\n this.formValues.PersistedFolders.splice(index, 1);\n }\n this.validatePersistedFolders();\n }\n\n useNewVolume(index) {\n this.formValues.PersistedFolders[index].UseNewVolume = true;\n this.formValues.PersistedFolders[index].ExistingVolume = null;\n this.state.persistedFoldersUseExistingVolumes = !_.reduce(this.formValues.PersistedFolders, (acc, pf) => acc && pf.UseNewVolume, true);\n this.validatePersistedFolders();\n }\n\n useExistingVolume(index) {\n this.formValues.PersistedFolders[index].UseNewVolume = false;\n this.state.persistedFoldersUseExistingVolumes = _.find(this.formValues.PersistedFolders, { UseNewVolume: false }) ? true : false;\n if (this.formValues.DataAccessPolicy === this.ApplicationDataAccessPolicies.ISOLATED) {\n this.formValues.DataAccessPolicy = this.ApplicationDataAccessPolicies.SHARED;\n this.resetDeploymentType();\n }\n this.validatePersistedFolders();\n }\n /* #endregion */\n\n /* #region PERSISTENT FOLDERS ON CHANGE VALIDATION */\n validatePersistedFolders() {\n this.onChangePersistedFolderPath();\n this.onChangeExistingVolumeSelection();\n }\n\n onChangePersistedFolderPath() {\n this.state.duplicates.persistedFolders.refs = KubernetesFormValidationHelper.getDuplicates(\n _.map(this.formValues.PersistedFolders, (persistedFolder) => {\n if (persistedFolder.NeedsDeletion) {\n return undefined;\n }\n return persistedFolder.ContainerPath;\n })\n );\n this.state.duplicates.persistedFolders.hasRefs = Object.keys(this.state.duplicates.persistedFolders.refs).length > 0;\n }\n\n onChangeExistingVolumeSelection() {\n this.state.duplicates.existingVolumes.refs = KubernetesFormValidationHelper.getDuplicates(\n _.map(this.formValues.PersistedFolders, (persistedFolder) => {\n if (persistedFolder.NeedsDeletion) {\n return undefined;\n }\n return persistedFolder.ExistingVolume ? persistedFolder.ExistingVolume.PersistentVolumeClaim.Name : '';\n })\n );\n this.state.duplicates.existingVolumes.hasRefs = Object.keys(this.state.duplicates.existingVolumes.refs).length > 0;\n }\n /* #endregion */\n\n /* #region PLACEMENT UI MANAGEMENT */\n addPlacement() {\n const placement = new KubernetesApplicationPlacementFormValue();\n const label = this.nodesLabels[0];\n placement.Label = label;\n placement.Value = label.Values[0];\n this.formValues.Placements.push(placement);\n this.onChangePlacement();\n }\n\n restorePlacement(index) {\n this.formValues.Placements[index].NeedsDeletion = false;\n this.onChangePlacement();\n }\n\n removePlacement(index) {\n if (this.state.isEdit && !this.formValues.Placements[index].IsNew) {\n this.formValues.Placements[index].NeedsDeletion = true;\n } else {\n this.formValues.Placements.splice(index, 1);\n }\n this.onChangePlacement();\n }\n\n // call all validation functions when a placement is added/removed/restored\n onChangePlacement() {\n this.onChangePlacementLabelValidate();\n }\n\n onChangePlacementLabel(index) {\n this.formValues.Placements[index].Value = this.formValues.Placements[index].Label.Values[0];\n this.onChangePlacementLabelValidate();\n }\n\n onChangePlacementLabelValidate() {\n const state = this.state.duplicates.placements;\n const source = _.map(this.formValues.Placements, (p) => (p.NeedsDeletion ? undefined : p.Label.Key));\n const duplicates = KubernetesFormValidationHelper.getDuplicates(source);\n state.refs = duplicates;\n state.hasRefs = Object.keys(duplicates).length > 0;\n }\n\n /* #endregion */\n\n /* #region PUBLISHED PORTS UI MANAGEMENT */\n addPublishedPort() {\n const p = new KubernetesApplicationPublishedPortFormValue();\n const ingresses = this.filteredIngresses;\n p.IngressName = ingresses && ingresses.length ? ingresses[0].Name : undefined;\n p.IngressHost = ingresses && ingresses.length ? ingresses[0].Hosts[0] : undefined;\n p.IngressHosts = ingresses && ingresses.length ? ingresses[0].Hosts : undefined;\n if (this.formValues.PublishedPorts.length) {\n p.Protocol = this.formValues.PublishedPorts[0].Protocol;\n }\n this.formValues.PublishedPorts.push(p);\n }\n\n resetPublishedPorts() {\n const ingresses = this.filteredIngresses;\n _.forEach(this.formValues.PublishedPorts, (p) => {\n p.IngressName = ingresses && ingresses.length ? ingresses[0].Name : undefined;\n p.IngressHost = ingresses && ingresses.length ? ingresses[0].Hosts[0] : undefined;\n });\n }\n\n restorePublishedPort(index) {\n this.formValues.PublishedPorts[index].NeedsDeletion = false;\n this.onChangePublishedPorts();\n }\n\n removePublishedPort(index) {\n if (this.state.isEdit && !this.formValues.PublishedPorts[index].IsNew) {\n this.formValues.PublishedPorts[index].NeedsDeletion = true;\n } else {\n this.formValues.PublishedPorts.splice(index, 1);\n }\n this.onChangePublishedPorts();\n }\n /* #endregion */\n\n /* #region PUBLISHED PORTS ON CHANGE VALIDATION */\n onChangePublishedPorts() {\n this.onChangePortMappingContainerPort();\n this.onChangePortMappingNodePort();\n this.onChangePortMappingIngressRoute();\n this.onChangePortMappingLoadBalancer();\n this.onChangePortProtocol();\n }\n\n onChangePortMappingContainerPort() {\n const state = this.state.duplicates.publishedPorts.containerPorts;\n if (this.formValues.PublishingType !== KubernetesApplicationPublishingTypes.INGRESS) {\n const source = _.map(this.formValues.PublishedPorts, (p) => (p.NeedsDeletion ? undefined : p.ContainerPort + p.Protocol));\n const duplicates = KubernetesFormValidationHelper.getDuplicates(source);\n state.refs = duplicates;\n state.hasRefs = Object.keys(duplicates).length > 0;\n } else {\n state.refs = {};\n state.hasRefs = false;\n }\n }\n\n onChangePortMappingNodePort() {\n const state = this.state.duplicates.publishedPorts.nodePorts;\n if (this.formValues.PublishingType === KubernetesApplicationPublishingTypes.CLUSTER) {\n const source = _.map(this.formValues.PublishedPorts, (p) => (p.NeedsDeletion ? undefined : p.NodePort));\n const duplicates = KubernetesFormValidationHelper.getDuplicates(source);\n state.refs = duplicates;\n state.hasRefs = Object.keys(duplicates).length > 0;\n } else {\n state.refs = {};\n state.hasRefs = false;\n }\n }\n\n onChangePortMappingIngress(index) {\n const publishedPort = this.formValues.PublishedPorts[index];\n const ingress = _.find(this.filteredIngresses, { Name: publishedPort.IngressName });\n publishedPort.IngressHosts = ingress.Hosts;\n this.ingressHostnames = ingress.Hosts;\n publishedPort.IngressHost = this.ingressHostnames.length ? this.ingressHostnames[0] : [];\n this.onChangePublishedPorts();\n }\n\n onChangePortMappingIngressRoute() {\n const state = this.state.duplicates.publishedPorts.ingressRoutes;\n\n if (this.formValues.PublishingType === KubernetesApplicationPublishingTypes.INGRESS) {\n const newRoutes = _.map(this.formValues.PublishedPorts, (p) => (p.IsNew && p.IngressRoute ? `${p.IngressHost || p.IngressName}${p.IngressRoute}` : undefined));\n const toDelRoutes = _.map(this.formValues.PublishedPorts, (p) => (p.NeedsDeletion && p.IngressRoute ? `${p.IngressHost || p.IngressName}${p.IngressRoute}` : undefined));\n const allRoutes = _.flatMap(this.ingresses, (i) => _.map(i.Paths, (p) => `${p.Host || i.Name}${p.Path}`));\n const duplicates = KubernetesFormValidationHelper.getDuplicates(newRoutes);\n _.forEach(newRoutes, (route, idx) => {\n if (_.includes(allRoutes, route) && !_.includes(toDelRoutes, route)) {\n duplicates[idx] = route;\n }\n });\n state.refs = duplicates;\n state.hasRefs = Object.keys(duplicates).length > 0;\n } else {\n state.refs = {};\n state.hasRefs = false;\n }\n }\n\n onChangePortMappingLoadBalancer() {\n const state = this.state.duplicates.publishedPorts.loadBalancerPorts;\n if (this.formValues.PublishingType === KubernetesApplicationPublishingTypes.LOAD_BALANCER) {\n const source = _.map(this.formValues.PublishedPorts, (p) => (p.NeedsDeletion ? undefined : p.LoadBalancerPort));\n const duplicates = KubernetesFormValidationHelper.getDuplicates(source);\n state.refs = duplicates;\n state.hasRefs = Object.keys(duplicates).length > 0;\n } else {\n state.refs = {};\n state.hasRefs = false;\n }\n }\n\n onChangePortProtocol(index) {\n if (this.formValues.PublishingType === KubernetesApplicationPublishingTypes.LOAD_BALANCER) {\n const newPorts = _.filter(this.formValues.PublishedPorts, { IsNew: true });\n _.forEach(newPorts, (port) => {\n port.Protocol = index ? this.formValues.PublishedPorts[index].Protocol : newPorts[0].Protocol;\n });\n this.onChangePortMappingLoadBalancer();\n }\n this.onChangePortMappingContainerPort();\n }\n /* #endregion */\n\n /* #region STATE VALIDATION FUNCTIONS */\n isValid() {\n return (\n !this.state.alreadyExists &&\n !this.state.duplicates.environmentVariables.hasRefs &&\n !this.state.duplicates.persistedFolders.hasRefs &&\n !this.state.duplicates.configurationPaths.hasRefs &&\n !this.state.duplicates.existingVolumes.hasRefs &&\n !this.state.duplicates.publishedPorts.containerPorts.hasRefs &&\n !this.state.duplicates.publishedPorts.nodePorts.hasRefs &&\n !this.state.duplicates.publishedPorts.ingressRoutes.hasRefs &&\n !this.state.duplicates.publishedPorts.loadBalancerPorts.hasRefs\n );\n }\n\n storageClassAvailable() {\n return this.storageClasses && this.storageClasses.length > 0;\n }\n\n hasMultipleStorageClassesAvailable() {\n return this.storageClasses && this.storageClasses.length > 1;\n }\n\n resetDeploymentType() {\n this.formValues.DeploymentType = this.ApplicationDeploymentTypes.REPLICATED;\n }\n\n // The data access policy panel is not shown when:\n // * There is not persisted folder specified\n showDataAccessPolicySection() {\n return this.formValues.PersistedFolders.length !== 0;\n }\n\n // A global deployment is not available when either:\n // * For each persisted folder specified, if one of the storage object only supports the RWO access mode\n // * The data access policy is set to ISOLATED\n supportGlobalDeployment() {\n const hasFolders = this.formValues.PersistedFolders.length !== 0;\n const hasRWOOnly = KubernetesApplicationHelper.hasRWOOnly(this.formValues);\n const isIsolated = this.formValues.DataAccessPolicy === this.ApplicationDataAccessPolicies.ISOLATED;\n\n if (hasFolders && (hasRWOOnly || isIsolated)) {\n return false;\n }\n return true;\n }\n\n // A StatefulSet is defined by DataAccessPolicy === ISOLATED\n isEditAndStatefulSet() {\n return this.state.isEdit && this.formValues.DataAccessPolicy === this.ApplicationDataAccessPolicies.ISOLATED;\n }\n\n // A scalable deployment is available when either:\n // * No persisted folders are specified\n // * The access policy is set to shared and for each persisted folders specified, all the associated\n // storage objects support at least RWX access mode (no RWO only)\n // * The access policy is set to isolated\n supportScalableReplicaDeployment() {\n const hasFolders = this.formValues.PersistedFolders.length !== 0;\n const hasRWOOnly = KubernetesApplicationHelper.hasRWOOnly(this.formValues);\n const isIsolated = this.formValues.DataAccessPolicy === this.ApplicationDataAccessPolicies.ISOLATED;\n\n if (!hasFolders || isIsolated || (hasFolders && !hasRWOOnly)) {\n return true;\n }\n return false;\n }\n\n // For each persisted folders, returns the non scalable deployments options (storage class that only supports RWO)\n getNonScalableStorage() {\n let storageOptions = [];\n\n for (let i = 0; i < this.formValues.PersistedFolders.length; i++) {\n const folder = this.formValues.PersistedFolders[i];\n\n if (folder.StorageClass && _.isEqual(folder.StorageClass.AccessModes, ['RWO'])) {\n storageOptions.push(folder.StorageClass.Name);\n } else {\n storageOptions.push('');\n }\n }\n\n return _.uniq(storageOptions).join(', ');\n }\n\n enforceReplicaCountMinimum() {\n if (this.formValues.ReplicaCount === null) {\n this.formValues.ReplicaCount = 1;\n }\n }\n\n resourceQuotaCapacityExceeded() {\n return !this.state.sliders.memory.max || !this.state.sliders.cpu.max;\n }\n\n resourceReservationsOverflow() {\n const instances = this.formValues.ReplicaCount;\n const cpu = this.formValues.CpuLimit;\n const maxCpu = this.state.sliders.cpu.max;\n const memory = this.formValues.MemoryLimit;\n const maxMemory = this.state.sliders.memory.max;\n\n if (cpu * instances > maxCpu) {\n return true;\n }\n\n if (memory * instances > maxMemory) {\n return true;\n }\n\n return false;\n }\n\n autoScalerOverflow() {\n const instances = this.formValues.AutoScaler.MaxReplicas;\n const cpu = this.formValues.CpuLimit;\n const maxCpu = this.state.sliders.cpu.max;\n const memory = this.formValues.MemoryLimit;\n const maxMemory = this.state.sliders.memory.max;\n\n if (cpu * instances > maxCpu) {\n return true;\n }\n\n if (memory * instances > maxMemory) {\n return true;\n }\n\n return false;\n }\n\n publishViaLoadBalancerEnabled() {\n return this.state.useLoadBalancer;\n }\n\n publishViaIngressEnabled() {\n return this.filteredIngresses.length;\n }\n\n isEditAndNoChangesMade() {\n if (!this.state.isEdit) return false;\n const changes = JsonPatch.compare(this.savedFormValues, this.formValues);\n this.editChanges = _.filter(changes, (change) => !_.includes(change.path, '$$hashKey') && change.path !== '/ApplicationType');\n return !this.editChanges.length;\n }\n\n /* #region PERSISTED FOLDERS */\n /* #region BUTTONS STATES */\n isAddPersistentFolderButtonShowed() {\n return !this.isEditAndStatefulSet() && this.formValues.Containers.length <= 1;\n }\n\n isNewVolumeButtonDisabled(index) {\n return this.isEditAndExistingPersistedFolder(index);\n }\n\n isExistingVolumeButtonDisabled() {\n return !this.hasAvailableVolumes() || (this.isEdit && this.application.ApplicationType === this.ApplicationTypes.STATEFULSET);\n }\n /* #endregion */\n\n hasAvailableVolumes() {\n return this.availableVolumes.length > 0;\n }\n\n isEditAndExistingPersistedFolder(index) {\n return this.state.isEdit && this.formValues.PersistedFolders[index].PersistentVolumeClaimName;\n }\n /* #endregion */\n\n isEditAndNotNewPublishedPort(index) {\n return this.state.isEdit && !this.formValues.PublishedPorts[index].IsNew;\n }\n\n isNotInternalAndHasNoPublishedPorts() {\n const toDelPorts = _.filter(this.formValues.PublishedPorts, { NeedsDeletion: true });\n const toKeepPorts = _.without(this.formValues.PublishedPorts, ...toDelPorts);\n return this.formValues.PublishingType !== KubernetesApplicationPublishingTypes.INTERNAL && toKeepPorts.length === 0;\n }\n\n isEditAndNotNewPlacement(index) {\n return this.state.isEdit && !this.formValues.Placements[index].IsNew;\n }\n\n isNewAndNotFirst(index) {\n return !this.state.isEdit && index !== 0;\n }\n\n showPlacementPolicySection() {\n const placements = _.filter(this.formValues.Placements, { NeedsDeletion: false });\n return placements.length !== 0;\n }\n\n isNonScalable() {\n const scalable = this.supportScalableReplicaDeployment();\n const global = this.supportGlobalDeployment();\n const replica = this.formValues.ReplicaCount > 1;\n const replicated = this.formValues.DeploymentType === this.ApplicationDeploymentTypes.REPLICATED;\n const res = (replicated && !scalable && replica) || (!replicated && !global);\n return res;\n }\n\n isDeployUpdateButtonDisabled() {\n const overflow = this.resourceReservationsOverflow();\n const autoScalerOverflow = this.autoScalerOverflow();\n const inProgress = this.state.actionInProgress;\n const invalid = !this.isValid();\n const hasNoChanges = this.isEditAndNoChangesMade();\n const nonScalable = this.isNonScalable();\n const notInternalNoPorts = this.isNotInternalAndHasNoPublishedPorts();\n return overflow || autoScalerOverflow || inProgress || invalid || hasNoChanges || nonScalable || notInternalNoPorts;\n }\n\n disableLoadBalancerEdit() {\n return (\n this.state.isEdit &&\n this.application.ServiceType === this.ServiceTypes.LOAD_BALANCER &&\n !this.application.LoadBalancerIPAddress &&\n this.formValues.PublishingType === this.ApplicationPublishingTypes.LOAD_BALANCER\n );\n }\n\n isPublishingTypeEditDisabled() {\n const ports = _.filter(this.formValues.PublishedPorts, { IsNew: false, NeedsDeletion: false });\n return this.state.isEdit && this.formValues.PublishedPorts.length > 0 && ports.length > 0;\n }\n\n isEditLBWithPorts() {\n return this.formValues.PublishingType === KubernetesApplicationPublishingTypes.LOAD_BALANCER && _.filter(this.formValues.PublishedPorts, { IsNew: false }).length;\n }\n\n isProtocolOptionDisabled(index, protocol) {\n return (\n this.disableLoadBalancerEdit() ||\n (this.isEditAndNotNewPublishedPort(index) && this.formValues.PublishedPorts[index].Protocol !== protocol) ||\n (this.isEditLBWithPorts() && this.formValues.PublishedPorts[index].Protocol !== protocol) ||\n (this.isNewAndNotFirst(index) && this.formValues.PublishedPorts[index].Protocol !== protocol)\n );\n }\n\n /* #endregion */\n\n /* #region DATA AUTO REFRESH */\n updateSliders() {\n this.state.resourcePoolHasQuota = false;\n\n const quota = this.formValues.ResourcePool.Quota;\n let minCpu,\n maxCpu,\n minMemory,\n maxMemory = 0;\n if (quota) {\n if (quota.CpuLimit) {\n this.state.resourcePoolHasQuota = true;\n minCpu = KubernetesApplicationQuotaDefaults.CpuLimit;\n maxCpu = quota.CpuLimit - quota.CpuLimitUsed;\n if (this.state.isEdit && this.savedFormValues.CpuLimit) {\n maxCpu += this.savedFormValues.CpuLimit * this.savedFormValues.ReplicaCount;\n }\n } else {\n minCpu = 0;\n maxCpu = this.state.nodes.cpu;\n }\n if (quota.MemoryLimit) {\n this.state.resourcePoolHasQuota = true;\n minMemory = KubernetesApplicationQuotaDefaults.MemoryLimit;\n maxMemory = quota.MemoryLimit - quota.MemoryLimitUsed;\n if (this.state.isEdit && this.savedFormValues.MemoryLimit) {\n maxMemory += KubernetesResourceReservationHelper.bytesValue(this.savedFormValues.MemoryLimit) * this.savedFormValues.ReplicaCount;\n }\n } else {\n minMemory = 0;\n maxMemory = this.state.nodes.memory;\n }\n } else {\n minCpu = 0;\n maxCpu = this.state.nodes.cpu;\n minMemory = 0;\n maxMemory = this.state.nodes.memory;\n }\n this.state.sliders.memory.min = minMemory;\n this.state.sliders.memory.max = KubernetesResourceReservationHelper.megaBytesValue(maxMemory);\n this.state.sliders.cpu.min = minCpu;\n this.state.sliders.cpu.max = _.round(maxCpu, 2);\n if (!this.state.isEdit) {\n this.formValues.CpuLimit = minCpu;\n this.formValues.MemoryLimit = minMemory;\n }\n }\n\n refreshStacks(namespace) {\n return this.$async(async () => {\n try {\n this.stacks = await this.KubernetesStackService.get(namespace);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve stacks');\n }\n });\n }\n\n refreshConfigurations(namespace) {\n return this.$async(async () => {\n try {\n this.configurations = await this.KubernetesConfigurationService.get(namespace);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve configurations');\n }\n });\n }\n\n refreshApplications(namespace) {\n return this.$async(async () => {\n try {\n this.applications = await this.KubernetesApplicationService.get(namespace);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve applications');\n }\n });\n }\n\n refreshVolumes(namespace) {\n return this.$async(async () => {\n try {\n const volumes = await this.KubernetesVolumeService.get(namespace);\n _.forEach(volumes, (volume) => {\n volume.Applications = KubernetesVolumeHelper.getUsingApplications(volume, this.applications);\n });\n this.volumes = volumes;\n const filteredVolumes = _.filter(this.volumes, (volume) => {\n const isUnused = !KubernetesVolumeHelper.isUsed(volume);\n const isRWX = volume.PersistentVolumeClaim.StorageClass && _.includes(volume.PersistentVolumeClaim.StorageClass.AccessModes, 'RWX');\n return isUnused || isRWX;\n });\n this.availableVolumes = filteredVolumes;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve volumes');\n }\n });\n }\n\n refreshIngresses(namespace) {\n this.filteredIngresses = _.filter(this.ingresses, { Namespace: namespace });\n this.ingressHostnames = this.filteredIngresses.length ? this.filteredIngresses[0].Hosts : [];\n if (!this.publishViaIngressEnabled()) {\n if (this.savedFormValues) {\n this.formValues.PublishingType = this.savedFormValues.PublishingType;\n } else {\n this.formValues.PublishingType = this.ApplicationPublishingTypes.INTERNAL;\n }\n }\n this.formValues.OriginalIngresses = this.filteredIngresses;\n }\n\n refreshNamespaceData(namespace) {\n return this.$async(async () => {\n await Promise.all([\n this.refreshStacks(namespace),\n this.refreshConfigurations(namespace),\n this.refreshApplications(namespace),\n this.refreshIngresses(namespace),\n this.refreshVolumes(namespace),\n ]);\n this.onChangeName();\n });\n }\n\n resetFormValues() {\n this.clearConfigurations();\n this.resetPersistedFolders();\n this.resetPublishedPorts();\n }\n\n onResourcePoolSelectionChange() {\n return this.$async(async () => {\n const namespace = this.formValues.ResourcePool.Namespace.Name;\n this.updateSliders();\n await this.refreshNamespaceData(namespace);\n this.resetFormValues();\n });\n }\n /* #endregion */\n\n /* #region ACTIONS */\n async deployApplicationAsync() {\n this.state.actionInProgress = true;\n try {\n this.formValues.ApplicationOwner = this.Authentication.getUserDetails().username;\n _.remove(this.formValues.Configurations, (item) => item.SelectedConfiguration === undefined);\n await this.KubernetesApplicationService.create(this.formValues);\n this.Notifications.success('Application successfully deployed', this.formValues.Name);\n this.$state.go('kubernetes.applications');\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to create application');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n async updateApplicationAsync() {\n try {\n this.state.actionInProgress = true;\n await this.KubernetesApplicationService.patch(this.savedFormValues, this.formValues);\n this.Notifications.success('Application successfully updated');\n this.$state.go('kubernetes.applications.application', { name: this.application.Name, namespace: this.application.ResourcePool });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to update application');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n deployApplication() {\n if (this.state.isEdit) {\n this.ModalService.confirmUpdate('Updating the application may cause a service interruption. Do you wish to continue?', (confirmed) => {\n if (confirmed) {\n return this.$async(this.updateApplicationAsync);\n }\n });\n } else {\n return this.$async(this.deployApplicationAsync);\n }\n }\n /* #endregion */\n\n /* #region APPLICATION - used on edit context only */\n getApplication() {\n return this.$async(async () => {\n try {\n const namespace = this.state.params.namespace;\n [this.application, this.persistentVolumeClaims] = await Promise.all([\n this.KubernetesApplicationService.get(namespace, this.state.params.name),\n this.KubernetesPersistentVolumeClaimService.get(namespace),\n ]);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve application details');\n }\n });\n }\n /* #endregion */\n\n /* #region ON INIT */\n $onInit() {\n return this.$async(async () => {\n try {\n this.state = {\n actionInProgress: false,\n useLoadBalancer: false,\n useServerMetrics: false,\n sliders: {\n cpu: {\n min: 0,\n max: 0,\n },\n memory: {\n min: 0,\n max: 0,\n },\n },\n nodes: {\n memory: 0,\n cpu: 0,\n },\n resourcePoolHasQuota: false,\n viewReady: false,\n availableSizeUnits: ['MB', 'GB', 'TB'],\n alreadyExists: false,\n duplicates: {\n environmentVariables: new KubernetesFormValidationReferences(),\n persistedFolders: new KubernetesFormValidationReferences(),\n configurationPaths: new KubernetesFormValidationReferences(),\n existingVolumes: new KubernetesFormValidationReferences(),\n publishedPorts: {\n containerPorts: new KubernetesFormValidationReferences(),\n nodePorts: new KubernetesFormValidationReferences(),\n ingressRoutes: new KubernetesFormValidationReferences(),\n loadBalancerPorts: new KubernetesFormValidationReferences(),\n },\n placements: new KubernetesFormValidationReferences(),\n },\n isEdit: false,\n params: {\n namespace: this.$transition$.params().namespace,\n name: this.$transition$.params().name,\n },\n persistedFoldersUseExistingVolumes: false,\n pullImageValidity: false,\n };\n\n this.isAdmin = this.Authentication.isAdmin();\n\n this.editChanges = [];\n\n if (this.state.params.namespace && this.state.params.name) {\n this.state.isEdit = true;\n }\n\n const endpoint = this.EndpointProvider.currentEndpoint();\n this.endpoint = endpoint;\n this.storageClasses = endpoint.Kubernetes.Configuration.StorageClasses;\n this.state.useLoadBalancer = endpoint.Kubernetes.Configuration.UseLoadBalancer;\n this.state.useServerMetrics = endpoint.Kubernetes.Configuration.UseServerMetrics;\n\n this.formValues = new KubernetesApplicationFormValues();\n\n const [resourcePools, nodes, ingresses] = await Promise.all([\n this.KubernetesResourcePoolService.get(),\n this.KubernetesNodeService.get(),\n this.KubernetesIngressService.get(),\n ]);\n this.ingresses = ingresses;\n\n this.resourcePools = _.filter(resourcePools, (resourcePool) => !this.KubernetesNamespaceHelper.isSystemNamespace(resourcePool.Namespace.Name));\n this.formValues.ResourcePool = this.resourcePools[0];\n if (!this.formValues.ResourcePool) {\n return;\n }\n\n _.forEach(nodes, (item) => {\n this.state.nodes.memory += filesizeParser(item.Memory);\n this.state.nodes.cpu += item.CPU;\n });\n this.nodesLabels = KubernetesNodeHelper.generateNodeLabelsFromNodes(nodes);\n\n const namespace = this.state.isEdit ? this.state.params.namespace : this.formValues.ResourcePool.Namespace.Name;\n await this.refreshNamespaceData(namespace);\n\n if (this.state.isEdit) {\n await this.getApplication();\n this.formValues = KubernetesApplicationConverter.applicationToFormValues(\n this.application,\n this.resourcePools,\n this.configurations,\n this.persistentVolumeClaims,\n this.nodesLabels,\n this.filteredIngresses\n );\n this.formValues.OriginalIngresses = this.filteredIngresses;\n this.savedFormValues = angular.copy(this.formValues);\n delete this.formValues.ApplicationType;\n\n if (this.application.ApplicationType !== KubernetesApplicationTypes.STATEFULSET) {\n _.forEach(this.formValues.PersistedFolders, (persistedFolder) => {\n const volume = _.find(this.availableVolumes, ['PersistentVolumeClaim.Name', persistedFolder.PersistentVolumeClaimName]);\n if (volume) {\n persistedFolder.UseNewVolume = false;\n persistedFolder.ExistingVolume = volume;\n }\n });\n }\n await this.refreshNamespaceData(namespace);\n } else {\n this.formValues.AutoScaler = KubernetesApplicationHelper.generateAutoScalerFormValueFromHorizontalPodAutoScaler(null, this.formValues.ReplicaCount);\n this.formValues.OriginalIngressClasses = angular.copy(this.ingresses);\n }\n\n this.updateSliders();\n\n const dockerHub = await this.DockerHubService.dockerhub();\n this.state.isDockerAuthenticated = dockerHub.Authentication;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to load view data');\n } finally {\n this.state.viewReady = true;\n }\n });\n }\n\n /* #endregion */\n}\n\nexport default KubernetesCreateApplicationController;\nangular.module('portainer.kubernetes').controller('KubernetesCreateApplicationController', KubernetesCreateApplicationController);\n","const autoNgTemplateLoaderTemplate1 = require('./application.html');\n\nangular.module('portainer.kubernetes').component('kubernetesApplicationView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesApplicationController',\n controllerAs: 'ctrl',\n bindings: {\n $transition$: '<',\n },\n});\n","var path = 'app/kubernetes/views/applications/edit/application.html';\nvar html = \"\\n Namespaces >\\n {{ ctrl.application.ResourcePool }} >\\n Applications > {{ ctrl.application.Name }}\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n \\n \\n Application \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Name\\n {{ ctrl.application.Name }}\\n external\\n
    Stack{{ ctrl.application.StackName }}
    Namespace\\n {{ ctrl.application.ResourcePool }}\\n system\\n
    Application Type\\n {{ ctrl.application.ApplicationType | kubernetesApplicationTypeText }}\\n
    Status\\n Replicated\\n Global\\n {{ ctrl.application.RunningPodsCount }} / {{ ctrl.application.TotalPodsCount }}\\n \\n {{ ctrl.application.Pods[0].Status }}\\n
    \\n
    Resource reservations
    \\n
    per instance
    \\n
    \\n
    CPU {{ ctrl.application.Requests.Cpu | kubernetesApplicationCPUValue }}
    \\n
    Memory {{ ctrl.application.Requests.Memory | humansize }}
    \\n
    Creation\\n {{ ctrl.application.ApplicationOwner }} \\n {{ ctrl.application.CreationDate | getisodate }} \\n
    \\n
    \\n
    \\n
    \\n Note\\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n {{ ctrl.application.Note ? 'Update' : 'Save' }} note\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\\n \\n \\n Placement\\n
    \\n \\n warning\\n
    \\n
    \\n
    \\n \\n The placement component helps you understand whether or not this application can be deployed on a specific node.\\n
    \\n \\n
    \\n\\n \\n \\n Events\\n
    \\n \\n {{ ctrl.state.eventWarningCount }} warning(s)\\n
    \\n
    \\n \\n
    \\n\\n \\n YAML \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n \\n Edit this application\\n \\n \\n Redeploy\\n \\n \\n Rollback to previous configuration\\n \\n
    \\n\\n \\n
    \\n Accessing the application\\n
    \\n\\n
    \\n \\n This application is not exposing any port.\\n
    \\n\\n
    0\\\">\\n \\n
    \\n
    \\n \\n This application is exposed through an external load balancer. Use the links below to access the different ports exposed.\\n
    \\n
    \\n \\n

    Load balancer status: pending

    \\n

    \\n what does the \\\"pending\\\" status means?\\n \\n \\n

    \\n
    \\n \\n

    Load balancer status: available

    \\n

    \\n Load balancer IP address: {{ ctrl.application.LoadBalancerIPAddress }}\\n \\n Copy\\n \\n \\n copied\\n \\n

    \\n
    \\n
    \\n
    \\n\\n \\n
    \\n
    \\n \\n This application is exposed globally on all nodes of your cluster. It can be reached using the IP address of any node in your cluster using the port configuration\\n below.\\n
    \\n
    \\n\\n \\n
    \\n
    \\n \\n This application is only available for internal usage inside the cluster via the application name {{ ctrl.application.ServiceName }}\\n Copy\\n copied\\n
    \\n
    \\n

    Refer to the below port configuration to access the application.

    \\n
    \\n
    \\n\\n \\n
    \\n
    \\n

    \\n \\n This application is available for internal usage inside the cluster via the application name {{ ctrl.application.ServiceName }}\\n Copy\\n copied\\n

    \\n

    It can also be accessed via specific HTTP route(s).

    \\n
    \\n
    \\n

    Refer to the below port configuration to access the application.

    \\n
    \\n
    \\n\\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Container port{{ ctrl.application.ServiceType | kubernetesApplicationPortsTableHeaderText }} portHTTP route
    {{ port.TargetPort }}/{{ port.Protocol }}\\n \\n {{ port.NodePort }}\\n \\n \\n {{ port.Port }}\\n \\n \\n access\\n \\n -
    {{ port.TargetPort }}/{{ port.Protocol }}\\n \\n {{ port.NodePort }}\\n \\n \\n {{ port.Port }}\\n \\n \\n access\\n \\n \\n pending\\n \\n \\n \\n {{ ctrl.buildIngressRuleURL(rule) | stripprotocol }}\\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    Auto-scaling
    \\n\\n
    \\n \\n This application does not have an autoscaling policy defined.\\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Minimum instancesMaximum instances\\n Target CPU usage\\n \\n \\n
    {{ ctrl.application.AutoScaler.MinReplicas }}{{ ctrl.application.AutoScaler.MaxReplicas }}{{ ctrl.application.AutoScaler.TargetCPUUtilization }}%
    \\n
    \\n
    \\n \\n\\n \\n
    Configuration
    \\n\\n
    0 && !ctrl.hasVolumeConfiguration()\\\" style=\\\"margin-bottom: 15px;\\\">\\n \\n This application is not using any environment variable or configuration.\\n
    \\n\\n 0\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    ContainerEnvironment variableValueConfiguration
    \\n {{ container.Name }}\\n {{ envvar.valueFrom.fieldRef.fieldPath }} (init container)\\n {{ envvar.name }}\\n {{ envvar.value }}\\n {{ envvar.valueFrom.configMapKeyRef.key }}\\n {{ envvar.valueFrom.secretKeyRef.key }}\\n {{ envvar.valueFrom.fieldRef.fieldPath }} (downward API)\\n -\\n \\n -\\n {{ envvar.valueFrom.configMapKeyRef.name }}\\n {{ envvar.valueFrom.secretKeyRef.name }}\\n
    \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    ContainerConfiguration pathValueConfiguration
    \\n {{ container.Name }}\\n {{ envvar.valueFrom.fieldRef.fieldPath }} (init container)\\n \\n {{ volume.fileMountPath }}\\n {{ volume.configurationKey ? volume.configurationKey : '-' }} \\n {{ volume.configurationName }}\\n
    \\n \\n\\n \\n
    \\n Data persistence\\n
    \\n\\n
    \\n \\n This application has no persisted folders.\\n
    \\n\\n
    \\n
    \\n Data access policy: \\n {{ ctrl.application.DataAccessPolicy | kubernetesApplicationDataAccessPolicyText }}\\n \\n
    \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Persisted folderPersistence
    \\n {{ volume.MountPath }}\\n \\n {{ volume.PersistentVolumeClaimName }}\\n {{ volume.HostPath }} on host filesystem
    \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Container namePod namePersisted folderPersistence
    \\n {{ container.Name }}\\n {{ envvar.valueFrom.fieldRef.fieldPath }} (init container)\\n {{ container.PodName }}\\n {{ volume.MountPath }}\\n \\n \\n {{ volume.PersistentVolumeClaimName + '-' + container.PodName }}\\n {{ volume.HostPath }} on host filesystem
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\nimport _ from 'lodash-es';\nimport * as JsonPatch from 'fast-json-patch';\nimport { KubernetesApplicationDataAccessPolicies, KubernetesApplicationDeploymentTypes, KubernetesApplicationTypes } from 'Kubernetes/models/application/models';\nimport KubernetesEventHelper from 'Kubernetes/helpers/eventHelper';\nimport KubernetesApplicationHelper from 'Kubernetes/helpers/application';\nimport { KubernetesServiceTypes } from 'Kubernetes/models/service/models';\nimport { KubernetesPodNodeAffinityNodeSelectorRequirementOperators } from 'Kubernetes/pod/models';\nimport { KubernetesPodContainerTypes } from 'Kubernetes/pod/models/index';\n\nfunction computeTolerations(nodes, application) {\n const pod = application.Pods[0];\n _.forEach(nodes, (n) => {\n n.AcceptsApplication = true;\n n.Expanded = false;\n if (!pod) {\n return;\n }\n n.UnmetTaints = [];\n _.forEach(n.Taints, (t) => {\n const matchKeyMatchValueMatchEffect = _.find(pod.Tolerations, { Key: t.Key, Operator: 'Equal', Value: t.Value, Effect: t.Effect });\n const matchKeyAnyValueMatchEffect = _.find(pod.Tolerations, { Key: t.Key, Operator: 'Exists', Effect: t.Effect });\n const matchKeyMatchValueAnyEffect = _.find(pod.Tolerations, { Key: t.Key, Operator: 'Equal', Value: t.Value, Effect: '' });\n const matchKeyAnyValueAnyEffect = _.find(pod.Tolerations, { Key: t.Key, Operator: 'Exists', Effect: '' });\n const anyKeyAnyValueAnyEffect = _.find(pod.Tolerations, { Key: '', Operator: 'Exists', Effect: '' });\n\n if (!matchKeyMatchValueMatchEffect && !matchKeyAnyValueMatchEffect && !matchKeyMatchValueAnyEffect && !matchKeyAnyValueAnyEffect && !anyKeyAnyValueAnyEffect) {\n n.AcceptsApplication = false;\n n.UnmetTaints.push(t);\n } else {\n n.AcceptsApplication = true;\n }\n });\n });\n return nodes;\n}\n\n// For node requirement format depending on operator value\n// see https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#nodeselectorrequirement-v1-core\n// Some operators require empty \"values\" field, some only one element in \"values\" field, etc\n\nfunction computeAffinities(nodes, application) {\n if (!application.Pods || application.Pods.length === 0) {\n return nodes;\n }\n\n const pod = application.Pods[0];\n _.forEach(nodes, (n) => {\n if (pod.NodeSelector) {\n const patch = JsonPatch.compare(n.Labels, pod.NodeSelector);\n _.remove(patch, { op: 'remove' });\n n.UnmatchedNodeSelectorLabels = _.map(patch, (i) => {\n return { key: _.trimStart(i.path, '/'), value: i.value };\n });\n if (n.UnmatchedNodeSelectorLabels.length) {\n n.AcceptsApplication = false;\n }\n }\n\n if (pod.Affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution) {\n const unmatchedTerms = _.map(pod.Affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms, (t) => {\n const unmatchedExpressions = _.map(t.matchExpressions, (e) => {\n const exists = {}.hasOwnProperty.call(n.Labels, e.key);\n const isIn = exists && _.includes(e.values, n.Labels[e.key]);\n if (\n (e.operator === KubernetesPodNodeAffinityNodeSelectorRequirementOperators.EXISTS && exists) ||\n (e.operator === KubernetesPodNodeAffinityNodeSelectorRequirementOperators.DOES_NOT_EXIST && !exists) ||\n (e.operator === KubernetesPodNodeAffinityNodeSelectorRequirementOperators.IN && isIn) ||\n (e.operator === KubernetesPodNodeAffinityNodeSelectorRequirementOperators.NOT_IN && !isIn) ||\n (e.operator === KubernetesPodNodeAffinityNodeSelectorRequirementOperators.GREATER_THAN && exists && parseInt(n.Labels[e.key], 10) > parseInt(e.values[0], 10)) ||\n (e.operator === KubernetesPodNodeAffinityNodeSelectorRequirementOperators.LOWER_THAN && exists && parseInt(n.Labels[e.key], 10) < parseInt(e.values[0], 10))\n ) {\n return;\n }\n return e;\n });\n return _.without(unmatchedExpressions, undefined);\n });\n _.remove(unmatchedTerms, (i) => i.length === 0);\n n.UnmatchedNodeAffinities = unmatchedTerms;\n if (n.UnmatchedNodeAffinities.length) {\n n.AcceptsApplication = false;\n }\n }\n });\n return nodes;\n}\n\nfunction computePlacements(nodes, application) {\n nodes = computeTolerations(nodes, application);\n nodes = computeAffinities(nodes, application);\n return nodes;\n}\n\nclass KubernetesApplicationController {\n /* @ngInject */\n constructor(\n $async,\n $state,\n clipboard,\n Notifications,\n LocalStorage,\n ModalService,\n KubernetesApplicationService,\n KubernetesEventService,\n KubernetesStackService,\n KubernetesPodService,\n KubernetesNodeService,\n KubernetesNamespaceHelper,\n EndpointProvider\n ) {\n this.$async = $async;\n this.$state = $state;\n this.clipboard = clipboard;\n this.Notifications = Notifications;\n this.LocalStorage = LocalStorage;\n this.ModalService = ModalService;\n\n this.KubernetesApplicationService = KubernetesApplicationService;\n this.KubernetesEventService = KubernetesEventService;\n this.KubernetesStackService = KubernetesStackService;\n this.KubernetesPodService = KubernetesPodService;\n this.KubernetesNodeService = KubernetesNodeService;\n\n this.KubernetesNamespaceHelper = KubernetesNamespaceHelper;\n\n this.KubernetesApplicationDeploymentTypes = KubernetesApplicationDeploymentTypes;\n this.KubernetesApplicationTypes = KubernetesApplicationTypes;\n this.EndpointProvider = EndpointProvider;\n\n this.ApplicationDataAccessPolicies = KubernetesApplicationDataAccessPolicies;\n this.KubernetesServiceTypes = KubernetesServiceTypes;\n this.KubernetesPodContainerTypes = KubernetesPodContainerTypes;\n\n this.onInit = this.onInit.bind(this);\n this.getApplication = this.getApplication.bind(this);\n this.getApplicationAsync = this.getApplicationAsync.bind(this);\n this.getEvents = this.getEvents.bind(this);\n this.getEventsAsync = this.getEventsAsync.bind(this);\n this.updateApplicationAsync = this.updateApplicationAsync.bind(this);\n this.redeployApplicationAsync = this.redeployApplicationAsync.bind(this);\n this.rollbackApplicationAsync = this.rollbackApplicationAsync.bind(this);\n this.copyLoadBalancerIP = this.copyLoadBalancerIP.bind(this);\n }\n\n selectTab(index) {\n this.LocalStorage.storeActiveTab('application', index);\n }\n\n showEditor() {\n this.state.showEditorTab = true;\n this.selectTab(3);\n }\n\n isSystemNamespace() {\n return this.KubernetesNamespaceHelper.isSystemNamespace(this.application.ResourcePool);\n }\n\n isExternalApplication() {\n return KubernetesApplicationHelper.isExternalApplication(this.application);\n }\n\n copyLoadBalancerIP() {\n this.clipboard.copyText(this.application.LoadBalancerIPAddress);\n $('#copyNotificationLB').show().fadeOut(2500);\n }\n\n copyApplicationName() {\n this.clipboard.copyText(this.application.Name);\n $('#copyNotificationApplicationName').show().fadeOut(2500);\n }\n\n hasPersistedFolders() {\n return this.application && this.application.PersistedFolders.length;\n }\n\n hasVolumeConfiguration() {\n return this.application && this.application.ConfigurationVolumes.length;\n }\n\n hasEventWarnings() {\n return this.state.eventWarningCount;\n }\n\n buildIngressRuleURL(rule) {\n const hostname = rule.Host ? rule.Host : rule.IP;\n return 'http://' + hostname + rule.Path;\n }\n\n portHasIngressRules(port) {\n return port.IngressRules.length > 0;\n }\n\n ruleCanBeDisplayed(rule) {\n return !rule.Host && !rule.IP ? false : true;\n }\n\n /**\n * ROLLBACK\n */\n async rollbackApplicationAsync() {\n try {\n // await this.KubernetesApplicationService.rollback(this.application, this.formValues.SelectedRevision);\n const revision = _.nth(this.application.Revisions, -2);\n await this.KubernetesApplicationService.rollback(this.application, revision);\n this.Notifications.success('Application successfully rolled back');\n this.$state.reload();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to rollback the application');\n }\n }\n\n rollbackApplication() {\n this.ModalService.confirmUpdate('Rolling back the application to a previous configuration may cause a service interruption. Do you wish to continue?', (confirmed) => {\n if (confirmed) {\n return this.$async(this.rollbackApplicationAsync);\n }\n });\n }\n /**\n * REDEPLOY\n */\n async redeployApplicationAsync() {\n try {\n const promises = _.map(this.application.Pods, (item) => this.KubernetesPodService.delete(item));\n await Promise.all(promises);\n this.Notifications.success('Application successfully redeployed');\n this.$state.reload();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to redeploy the application');\n }\n }\n\n redeployApplication() {\n this.ModalService.confirmUpdate('Redeploying the application may cause a service interruption. Do you wish to continue?', (confirmed) => {\n if (confirmed) {\n return this.$async(this.redeployApplicationAsync);\n }\n });\n }\n\n /**\n * UPDATE\n */\n async updateApplicationAsync() {\n try {\n const application = angular.copy(this.application);\n application.Note = this.formValues.Note;\n await this.KubernetesApplicationService.patch(this.application, application, true);\n this.Notifications.success('Application successfully updated');\n this.$state.reload();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to update application');\n }\n }\n\n updateApplication() {\n return this.$async(this.updateApplicationAsync);\n }\n\n /**\n * EVENTS\n */\n async getEventsAsync() {\n try {\n this.state.eventsLoading = true;\n const events = await this.KubernetesEventService.get(this.state.params.namespace);\n this.events = _.filter(\n events,\n (event) =>\n event.Involved.uid === this.application.Id ||\n event.Involved.uid === this.application.ServiceId ||\n _.find(this.application.Pods, (pod) => pod.Id === event.Involved.uid) !== undefined\n );\n this.state.eventWarningCount = KubernetesEventHelper.warningCount(this.events);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve application related events');\n } finally {\n this.state.eventsLoading = false;\n }\n }\n\n getEvents() {\n return this.$async(this.getEventsAsync);\n }\n\n /**\n * APPLICATION\n */\n async getApplicationAsync() {\n try {\n this.state.dataLoading = true;\n const [application, nodes] = await Promise.all([\n this.KubernetesApplicationService.get(this.state.params.namespace, this.state.params.name),\n this.KubernetesNodeService.get(),\n ]);\n this.application = application;\n this.allContainers = KubernetesApplicationHelper.associateAllContainersAndApplication(application);\n this.formValues.Note = this.application.Note;\n if (this.application.Note) {\n this.state.expandedNote = true;\n }\n if (this.application.CurrentRevision) {\n this.formValues.SelectedRevision = _.find(this.application.Revisions, { revision: this.application.CurrentRevision.revision });\n }\n\n this.state.useIngress = _.find(application.PublishedPorts, (p) => {\n return this.portHasIngressRules(p);\n });\n\n this.placements = computePlacements(nodes, this.application);\n this.state.placementWarning = _.find(this.placements, { AcceptsApplication: true }) ? false : true;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve application details');\n } finally {\n this.state.dataLoading = false;\n }\n }\n\n getApplication() {\n return this.$async(this.getApplicationAsync);\n }\n\n async onInit() {\n this.state = {\n activeTab: 0,\n currentName: this.$state.$current.name,\n showEditorTab: false,\n DisplayedPanel: 'pods',\n eventsLoading: true,\n dataLoading: true,\n viewReady: false,\n params: {\n namespace: this.$transition$.params().namespace,\n name: this.$transition$.params().name,\n },\n eventWarningCount: 0,\n placementWarning: false,\n expandedNote: false,\n useIngress: false,\n useServerMetrics: this.EndpointProvider.currentEndpoint().Kubernetes.Configuration.UseServerMetrics,\n };\n\n this.state.activeTab = this.LocalStorage.getActiveTab('application');\n\n this.formValues = {\n Note: '',\n SelectedRevision: undefined,\n };\n\n await this.getApplication();\n await this.getEvents();\n this.state.viewReady = true;\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n\n $onDestroy() {\n if (this.state.currentName !== this.$state.$current.name) {\n this.LocalStorage.storeActiveTab('application', 0);\n }\n }\n}\n\nexport default KubernetesApplicationController;\nangular.module('portainer.kubernetes').controller('KubernetesApplicationController', KubernetesApplicationController);\n","import _ from 'lodash-es';\n\nangular.module('portainer.docker').controller('KubernetesApplicationPlacementsDatatableController', function ($scope, $controller, DatatableService, Authentication) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n this.state = Object.assign(this.state, {\n expandedItems: [],\n expandAll: false,\n });\n\n this.expandItem = function (item, expanded) {\n if (!this.itemCanExpand(item)) {\n return;\n }\n\n item.Expanded = expanded;\n if (!expanded) {\n item.Highlighted = false;\n }\n };\n\n this.itemCanExpand = function (item) {\n return !item.AcceptsApplication;\n };\n\n this.hasExpandableItems = function () {\n return _.filter(this.state.filteredDataSet, (item) => this.itemCanExpand(item)).length;\n };\n\n this.expandAll = function () {\n this.state.expandAll = !this.state.expandAll;\n _.forEach(this.state.filteredDataSet, (item) => {\n if (this.itemCanExpand(item)) {\n this.expandItem(item, this.state.expandAll);\n }\n });\n };\n\n this.$onInit = function () {\n this.isAdmin = Authentication.isAdmin();\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n});\n","const autoNgTemplateLoaderTemplate1 = require('./template.html');\n\nangular.module('portainer.kubernetes').component('kubernetesApplicationPlacementsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesApplicationPlacementsDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n refreshCallback: '<',\n loading: '<',\n removeAction: '<',\n },\n});\n","var path = 'app/kubernetes/views/applications/edit/components/placements-datatable/template.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n Table settings\\n
    \\n
    \\n
    \\n Table settings\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Node\\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n \\n {{ item.Name }}\\n
    \\n This application is missing a toleration for the taint {{ taint.Key }}{{ taint.Value ? '=' + taint.Value : '' }}:{{ taint.Effect }}\\n
    \\n Placement constraint not respected for that node.\\n
    \\n This application can only be scheduled on a node where the label {{ label.key }} is set to {{ label.value }}\\n
    \\n Placement label not respected for that node.\\n
    \\n This application can only be scheduled on nodes respecting one of the following labels combination:\\n
    \\n \\n {{ term.key }} {{ term.operator }} {{ term.values | kubernetesApplicationConstraintNodeAffinityValue: term.operator }}\\n \\n {{ $last ? '' : ' + ' }}\\n
    Loading...
    No node available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./logs.html');\n\nangular.module('portainer.kubernetes').component('kubernetesApplicationLogsView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesApplicationLogsController',\n controllerAs: 'ctrl',\n bindings: {\n $transition$: '<',\n },\n});\n","var path = 'app/kubernetes/views/applications/logs/logs.html';\nvar html = \"\\n Namespaces >\\n {{ ctrl.application.ResourcePool }} >\\n Applications >\\n {{ ctrl.application.Name }} > Pods >\\n {{ ctrl.podName }} > Containers > {{ ctrl.containerName }} > Logs\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n Actions\\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n

    {{ line }}

    No log line matching the '{{ ctrl.state.search }}' filter

    No logs available

    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\nimport _ from 'lodash-es';\n\nclass KubernetesApplicationLogsController {\n /* @ngInject */\n constructor($async, $state, $interval, Notifications, KubernetesApplicationService, KubernetesPodService, Blob, FileSaver) {\n this.$async = $async;\n this.$state = $state;\n this.$interval = $interval;\n this.Notifications = Notifications;\n this.KubernetesApplicationService = KubernetesApplicationService;\n this.KubernetesPodService = KubernetesPodService;\n this.Blob = Blob;\n this.FileSaver = FileSaver;\n\n this.onInit = this.onInit.bind(this);\n this.stopRepeater = this.stopRepeater.bind(this);\n this.getApplicationLogsAsync = this.getApplicationLogsAsync.bind(this);\n }\n\n updateAutoRefresh() {\n if (this.state.autoRefresh) {\n this.setUpdateRepeater();\n return;\n }\n\n this.stopRepeater();\n }\n\n stopRepeater() {\n if (angular.isDefined(this.repeater)) {\n this.$interval.cancel(this.repeater);\n this.repeater = null;\n }\n }\n\n setUpdateRepeater() {\n this.repeater = this.$interval(this.getApplicationLogsAsync, this.state.refreshRate);\n }\n\n downloadLogs() {\n const data = new this.Blob([_.reduce(this.applicationLogs, (acc, log) => acc + '\\n' + log, '')]);\n this.FileSaver.saveAs(data, this.podName + '_logs.txt');\n }\n\n async getApplicationLogsAsync() {\n try {\n this.applicationLogs = await this.KubernetesPodService.logs(this.application.ResourcePool, this.podName, this.containerName);\n } catch (err) {\n this.stopRepeater();\n this.Notifications.error('Failure', err, 'Unable to retrieve application logs');\n }\n }\n\n async onInit() {\n this.state = {\n autoRefresh: false,\n refreshRate: 5000, // 5 seconds\n search: '',\n viewReady: false,\n };\n\n const podName = this.$transition$.params().pod;\n const applicationName = this.$transition$.params().name;\n const namespace = this.$transition$.params().namespace;\n const containerName = this.$transition$.params().container;\n\n this.applicationLogs = [];\n this.podName = podName;\n this.containerName = containerName;\n\n try {\n const [application, applicationLogs] = await Promise.all([\n this.KubernetesApplicationService.get(namespace, applicationName),\n this.KubernetesPodService.logs(namespace, podName, containerName),\n ]);\n\n this.application = application;\n this.applicationLogs = applicationLogs;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve application logs');\n } finally {\n this.state.viewReady = true;\n }\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n\n $onDestroy() {\n this.stopRepeater();\n }\n}\n\nexport default KubernetesApplicationLogsController;\nangular.module('portainer.kubernetes').controller('KubernetesApplicationLogsController', KubernetesApplicationLogsController);\n","const autoNgTemplateLoaderTemplate1 = require('./stats.html');\n\nangular.module('portainer.kubernetes').component('kubernetesApplicationStatsView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesApplicationStatsController',\n controllerAs: 'ctrl',\n bindings: {\n $transition$: '<',\n },\n});\n","var path = 'app/kubernetes/views/applications/stats/stats.html';\nvar html = \"\\n Namespaces >\\n {{ ctrl.state.transition.namespace }} >\\n Applications >\\n {{\\n ctrl.state.transition.applicationName\\n }}\\n > Pods > {{ ctrl.state.transition.podName }} > Containers > {{ ctrl.state.transition.containerName }} > Stats\\n\\n\\n\\n\\n
    \\n \\n \\n \\n Portainer was unable to retrieve any metrics associated to that container. Please contact your administrator to ensure that the Kubernetes metrics feature is properly\\n configured.\\n \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n This view displays real-time statistics about the container {{ ctrl.state.transition.containerName | trimcontainername }}.\\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n Network stats are unavailable for this container. \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\nimport moment from 'moment';\nimport _ from 'lodash-es';\nimport filesizeParser from 'filesize-parser';\nimport KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';\nimport KubernetesPodConverter from 'Kubernetes/pod/converter';\n\nclass KubernetesApplicationStatsController {\n /* @ngInject */\n constructor($async, $state, $interval, $document, Notifications, KubernetesPodService, KubernetesNodeService, KubernetesMetricsService, ChartService) {\n this.$async = $async;\n this.$state = $state;\n this.$interval = $interval;\n this.$document = $document;\n this.Notifications = Notifications;\n this.KubernetesPodService = KubernetesPodService;\n this.KubernetesNodeService = KubernetesNodeService;\n this.KubernetesMetricsService = KubernetesMetricsService;\n this.ChartService = ChartService;\n\n this.onInit = this.onInit.bind(this);\n }\n\n changeUpdateRepeater() {\n var cpuChart = this.cpuChart;\n var memoryChart = this.memoryChart;\n\n this.stopRepeater();\n this.setUpdateRepeater(cpuChart, memoryChart);\n $('#refreshRateChange').show();\n $('#refreshRateChange').fadeOut(1500);\n }\n\n updateCPUChart() {\n const label = moment(this.stats.read).format('HH:mm:ss');\n\n this.ChartService.UpdateCPUChart(label, this.stats.CPUUsage, this.cpuChart);\n }\n\n updateMemoryChart() {\n const label = moment(this.stats.read).format('HH:mm:ss');\n\n this.ChartService.UpdateMemoryChart(label, this.stats.MemoryUsage, this.stats.MemoryCache, this.memoryChart);\n }\n\n stopRepeater() {\n var repeater = this.repeater;\n if (angular.isDefined(repeater)) {\n this.$interval.cancel(repeater);\n repeater = undefined;\n }\n }\n\n setUpdateRepeater() {\n const refreshRate = this.state.refreshRate;\n\n this.repeater = this.$interval(async () => {\n try {\n await this.getStats();\n\n this.updateCPUChart();\n this.updateMemoryChart();\n } catch (error) {\n this.stopRepeater();\n this.Notifications.error('Failure', error);\n }\n }, refreshRate * 1000);\n }\n\n initCharts() {\n const cpuChartCtx = $('#cpuChart');\n const cpuChart = this.ChartService.CreateCPUChart(cpuChartCtx);\n this.cpuChart = cpuChart;\n\n const memoryChartCtx = $('#memoryChart');\n const memoryChart = this.ChartService.CreateMemoryChart(memoryChartCtx);\n this.memoryChart = memoryChart;\n\n this.updateCPUChart();\n this.updateMemoryChart();\n this.setUpdateRepeater();\n }\n\n getStats() {\n return this.$async(async () => {\n try {\n const stats = await this.KubernetesMetricsService.getPod(this.state.transition.namespace, this.state.transition.podName);\n const container = _.find(stats.containers, { name: this.state.transition.containerName });\n if (container) {\n const memory = filesizeParser(container.usage.memory);\n const cpu = KubernetesResourceReservationHelper.parseCPU(container.usage.cpu);\n this.stats = {\n read: stats.timestamp,\n preread: '',\n MemoryCache: 0,\n MemoryUsage: memory,\n NumProcs: '',\n isWindows: false,\n PreviousCPUTotalUsage: 0,\n CPUUsage: (cpu / this.nodeCPU) * 100,\n CPUCores: 0,\n };\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve application stats');\n }\n });\n }\n\n $onDestroy() {\n this.stopRepeater();\n }\n\n async onInit() {\n this.state = {\n autoRefresh: false,\n refreshRate: '30',\n viewReady: false,\n transition: {\n podName: this.$transition$.params().pod,\n containerName: this.$transition$.params().container,\n namespace: this.$transition$.params().namespace,\n applicationName: this.$transition$.params().name,\n },\n getMetrics: false,\n };\n\n try {\n await this.KubernetesMetricsService.getPod(this.state.transition.namespace, this.state.transition.podName);\n } catch (error) {\n this.state.getMetrics = false;\n this.state.viewReady = true;\n return;\n }\n\n try {\n const podRaw = await this.KubernetesPodService.get(this.state.transition.namespace, this.state.transition.podName);\n const pod = KubernetesPodConverter.apiToModel(podRaw.Raw);\n if (pod) {\n const node = await this.KubernetesNodeService.get(pod.Node);\n this.nodeCPU = node.CPU;\n } else {\n throw new Error('Unable to find pod');\n }\n await this.getStats();\n this.state.getMetrics = true;\n\n this.$document.ready(() => {\n this.initCharts();\n });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve application stats');\n } finally {\n this.state.viewReady = true;\n }\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n}\n\nexport default KubernetesApplicationStatsController;\nangular.module('portainer.kubernetes').controller('KubernetesApplicationStatsController', KubernetesApplicationStatsController);\n","const autoNgTemplateLoaderTemplate1 = require('./cluster.html');\n\nangular.module('portainer.kubernetes').component('kubernetesClusterView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesClusterController',\n controllerAs: 'ctrl',\n});\n","var path = 'app/kubernetes/views/cluster/cluster.html';\nvar html = \"\\n Cluster information\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n \\n
    \\n \\n \\n \\n \\n\\n \\n
    \\n Cluster status\\n
    \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    ComponentStatusError
    \\n {{ cs.ComponentName }}\\n \\n healthy\\n unhealthy\\n \\n {{ cs.ErrorMessage !== '' ? cs.ErrorMessage : '-' }}\\n
    \\n \\n\\n \\n
    0\\\">\\n
    \\n Leader status\\n
    \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    ComponentLeader node
    \\n {{ ep.Name }}\\n \\n {{ ep.HolderIdentity }}\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\nimport _ from 'lodash-es';\nimport filesizeParser from 'filesize-parser';\nimport KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';\nimport { KubernetesResourceReservation } from 'Kubernetes/models/resource-reservation/models';\n\nclass KubernetesClusterController {\n /* @ngInject */\n constructor(\n $async,\n $state,\n Authentication,\n Notifications,\n LocalStorage,\n KubernetesNodeService,\n KubernetesApplicationService,\n KubernetesComponentStatusService,\n KubernetesEndpointService,\n EndpointProvider\n ) {\n this.$async = $async;\n this.$state = $state;\n this.Authentication = Authentication;\n this.Notifications = Notifications;\n this.LocalStorage = LocalStorage;\n this.KubernetesNodeService = KubernetesNodeService;\n this.KubernetesApplicationService = KubernetesApplicationService;\n this.KubernetesComponentStatusService = KubernetesComponentStatusService;\n this.KubernetesEndpointService = KubernetesEndpointService;\n this.EndpointProvider = EndpointProvider;\n\n this.onInit = this.onInit.bind(this);\n this.getNodes = this.getNodes.bind(this);\n this.getNodesAsync = this.getNodesAsync.bind(this);\n this.getApplicationsAsync = this.getApplicationsAsync.bind(this);\n this.getComponentStatus = this.getComponentStatus.bind(this);\n this.getComponentStatusAsync = this.getComponentStatusAsync.bind(this);\n this.getEndpointsAsync = this.getEndpointsAsync.bind(this);\n }\n\n async getComponentStatusAsync() {\n try {\n this.componentStatuses = await this.KubernetesComponentStatusService.get();\n this.hasUnhealthyComponentStatus = _.find(this.componentStatuses, { Healthy: false }) ? true : false;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve cluster component statuses');\n }\n }\n\n getComponentStatus() {\n return this.$async(this.getComponentStatusAsync);\n }\n\n async getEndpointsAsync() {\n try {\n const endpoints = await this.KubernetesEndpointService.get();\n const systemEndpoints = _.filter(endpoints, { Namespace: 'kube-system' });\n this.systemEndpoints = _.filter(systemEndpoints, (ep) => ep.HolderIdentity);\n\n const kubernetesEndpoint = _.find(endpoints, { Name: 'kubernetes' });\n if (kubernetesEndpoint && kubernetesEndpoint.Subsets) {\n const ips = _.flatten(_.map(kubernetesEndpoint.Subsets, 'Ips'));\n _.forEach(this.nodes, (node) => {\n node.Api = _.includes(ips, node.IPAddress);\n });\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve endpoints');\n }\n }\n\n getEndpoints() {\n return this.$async(this.getEndpointsAsync);\n }\n\n async getNodesAsync() {\n try {\n const nodes = await this.KubernetesNodeService.get();\n _.forEach(nodes, (node) => (node.Memory = filesizeParser(node.Memory)));\n this.nodes = nodes;\n this.CPULimit = _.reduce(this.nodes, (acc, node) => node.CPU + acc, 0);\n this.MemoryLimit = _.reduce(this.nodes, (acc, node) => KubernetesResourceReservationHelper.megaBytesValue(node.Memory) + acc, 0);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve nodes');\n }\n }\n\n getNodes() {\n return this.$async(this.getNodesAsync);\n }\n\n async getApplicationsAsync() {\n try {\n this.state.applicationsLoading = true;\n this.applications = await this.KubernetesApplicationService.get();\n const nodeNames = _.map(this.nodes, (node) => node.Name);\n this.resourceReservation = _.reduce(\n this.applications,\n (acc, app) => {\n app.Pods = _.filter(app.Pods, (pod) => nodeNames.includes(pod.Node));\n const resourceReservation = KubernetesResourceReservationHelper.computeResourceReservation(app.Pods);\n acc.CPU += resourceReservation.CPU;\n acc.Memory += resourceReservation.Memory;\n return acc;\n },\n new KubernetesResourceReservation()\n );\n this.resourceReservation.Memory = KubernetesResourceReservationHelper.megaBytesValue(this.resourceReservation.Memory);\n } catch (err) {\n this.Notifications.error('Failure', 'Unable to retrieve applications', err);\n } finally {\n this.state.applicationsLoading = false;\n }\n }\n\n getApplications() {\n return this.$async(this.getApplicationsAsync);\n }\n\n async onInit() {\n this.state = {\n applicationsLoading: true,\n viewReady: false,\n hasUnhealthyComponentStatus: false,\n };\n\n this.isAdmin = this.Authentication.isAdmin();\n\n await this.getNodes();\n if (this.isAdmin) {\n await this.getEndpoints();\n await this.getComponentStatus();\n await this.getApplications();\n }\n\n this.state.viewReady = true;\n this.state.useServerMetrics = this.EndpointProvider.currentEndpoint().Kubernetes.Configuration.UseServerMetrics;\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n}\n\nexport default KubernetesClusterController;\nangular.module('portainer.kubernetes').controller('KubernetesClusterController', KubernetesClusterController);\n","const autoNgTemplateLoaderTemplate1 = require('./node.html');\n\nangular.module('portainer.kubernetes').component('kubernetesNodeView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesNodeController',\n controllerAs: 'ctrl',\n bindings: {\n $transition$: '<',\n },\n});\n","var path = 'app/kubernetes/views/cluster/node/node.html';\nvar html = \"\\n Cluster > {{ ctrl.node.Name }}\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n \\n \\n Node \\n\\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Hostname\\n {{ ctrl.node.Name }}\\n api\\n
    \\n Kubernetes API\\n {{ ctrl.node.IPAddress }}:{{ ctrl.node.Port }}
    Role{{ ctrl.node.Role }}
    Kubelet version{{ ctrl.node.Version }}
    Creation date{{ ctrl.node.CreationDate | getisodate }}
    Status\\n \\n {{ ctrl.node.Status }}\\n \\n \\n {{ ctrl.node.Conditions | kubernetesNodeConditionsMessage }}\\n \\n
    \\n Availability\\n \\n \\n \\n \\n Cannot use this action while another node is currently being drained.\\n \\n \\n \\n Cannot drain a node where this Portainer instance is running.\\n \\n
    \\n\\n
    \\n \\n \\n
    \\n\\n
    \\n \\n
    \\n Labels\\n
    \\n\\n
    \\n add label \\n
    \\n\\n
    \\n
    \\n Key\\n \\n
    \\n
    \\n Value\\n \\n
    \\n
    \\n
    \\n \\n \\n used\\n system\\n
    \\n
    \\n \\n \\n

    Label key is required.

    \\n
    \\n

    This label key is already defined.\\n

    \\n
    \\n\\n \\n\\n \\n\\n
    \\n Taints\\n
    \\n\\n
    \\n add taint \\n
    \\n\\n
    \\n
    \\n Key\\n \\n
    \\n
    \\n Value\\n \\n
    \\n
    \\n Effect\\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n

    Taint key is required.

    \\n
    \\n

    This taint key is already defined.\\n

    \\n
    \\n\\n \\n\\n \\n\\n
    \\n Actions\\n
    \\n\\n
    \\n
    \\n \\n Update node\\n \\n \\n
    \\n
    \\n\\n \\n
    \\n \\n \\n \\n \\n Events\\n
    \\n \\n {{ ctrl.state.eventWarningCount }} warning(s)\\n
    \\n
    \\n \\n \\n
    \\n \\n YAML \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n \\n\\n
    0\\\">\\n
    \\n \\n \\n
    \\n
    \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\nimport _ from 'lodash-es';\nimport KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';\nimport { KubernetesResourceReservation } from 'Kubernetes/models/resource-reservation/models';\nimport KubernetesEventHelper from 'Kubernetes/helpers/eventHelper';\nimport KubernetesNodeConverter from 'Kubernetes/node/converter';\nimport { KubernetesNodeLabelFormValues, KubernetesNodeTaintFormValues } from 'Kubernetes/node/formValues';\nimport { KubernetesNodeTaintEffects, KubernetesNodeAvailabilities } from 'Kubernetes/node/models';\nimport KubernetesFormValidationHelper from 'Kubernetes/helpers/formValidationHelper';\nimport { KubernetesNodeHelper } from 'Kubernetes/node/helper';\n\nclass KubernetesNodeController {\n /* @ngInject */\n constructor(\n $async,\n $state,\n Notifications,\n LocalStorage,\n ModalService,\n KubernetesNodeService,\n KubernetesEventService,\n KubernetesPodService,\n KubernetesApplicationService,\n KubernetesEndpointService\n ) {\n this.$async = $async;\n this.$state = $state;\n this.Notifications = Notifications;\n this.LocalStorage = LocalStorage;\n this.ModalService = ModalService;\n this.KubernetesNodeService = KubernetesNodeService;\n this.KubernetesEventService = KubernetesEventService;\n this.KubernetesPodService = KubernetesPodService;\n this.KubernetesApplicationService = KubernetesApplicationService;\n this.KubernetesEndpointService = KubernetesEndpointService;\n\n this.onInit = this.onInit.bind(this);\n this.getNodesAsync = this.getNodesAsync.bind(this);\n this.getEvents = this.getEvents.bind(this);\n this.getEventsAsync = this.getEventsAsync.bind(this);\n this.getApplicationsAsync = this.getApplicationsAsync.bind(this);\n this.getEndpointsAsync = this.getEndpointsAsync.bind(this);\n this.updateNodeAsync = this.updateNodeAsync.bind(this);\n this.drainNodeAsync = this.drainNodeAsync.bind(this);\n }\n\n selectTab(index) {\n this.LocalStorage.storeActiveTab('node', index);\n }\n\n /* #region taint */\n\n onChangeTaintKey(index) {\n this.state.duplicateTaintKeys = KubernetesFormValidationHelper.getDuplicates(\n _.map(this.formValues.Taints, (taint) => {\n if (taint.NeedsDeletion) {\n return undefined;\n }\n return taint.Key;\n })\n );\n this.state.hasDuplicateTaintKeys = Object.keys(this.state.duplicateTaintKeys).length > 0;\n this.onChangeTaint(index);\n }\n\n onChangeTaint(index) {\n if (this.formValues.Taints[index]) {\n this.formValues.Taints[index].IsChanged = true;\n }\n }\n\n addTaint() {\n const taint = new KubernetesNodeTaintFormValues();\n taint.IsNew = true;\n taint.Effect = KubernetesNodeTaintEffects.NOSCHEDULE;\n this.formValues.Taints.push(taint);\n }\n\n removeTaint(index) {\n const taint = this.formValues.Taints[index];\n if (taint.IsNew) {\n this.formValues.Taints.splice(index, 1);\n } else {\n taint.NeedsDeletion = true;\n }\n this.onChangeTaintKey();\n }\n\n restoreTaint(index) {\n this.formValues.Taints[index].NeedsDeletion = false;\n this.onChangeTaintKey();\n }\n\n computeTaintsWarning() {\n return _.filter(this.formValues.Taints, (taint) => {\n return taint.Effect === KubernetesNodeTaintEffects.NOEXECUTE && (taint.IsNew || taint.IsChanged);\n }).length;\n }\n\n /* #endregion */\n\n /* #region label */\n\n onChangeLabelKey(index) {\n this.state.duplicateLabelKeys = KubernetesFormValidationHelper.getDuplicates(\n _.map(this.formValues.Labels, (label) => {\n if (label.NeedsDeletion) {\n return undefined;\n }\n return label.Key;\n })\n );\n this.state.hasDuplicateLabelKeys = Object.keys(this.state.duplicateLabelKeys).length > 0;\n this.onChangeLabel(index);\n }\n\n onChangeLabel(index) {\n if (this.formValues.Labels[index]) {\n this.formValues.Labels[index].IsChanged = true;\n }\n }\n\n addLabel() {\n const label = new KubernetesNodeLabelFormValues();\n label.IsNew = true;\n this.formValues.Labels.push(label);\n }\n\n removeLabel(index) {\n const label = this.formValues.Labels[index];\n if (label.IsNew) {\n this.formValues.Labels.splice(index, 1);\n } else {\n label.NeedsDeletion = true;\n }\n this.onChangeLabelKey();\n }\n\n restoreLabel(index) {\n this.formValues.Labels[index].NeedsDeletion = false;\n this.onChangeLabelKey();\n }\n\n isSystemLabel(index) {\n return KubernetesNodeHelper.isSystemLabel(this.formValues.Labels[index]);\n }\n\n computeLabelsWarning() {\n return _.filter(this.formValues.Labels, (label) => {\n return label.IsUsed && (label.NeedsDeletion || label.IsChanged);\n }).length;\n }\n\n /* #endregion */\n\n /* #region cordon */\n\n computeCordonWarning() {\n return this.formValues.Availability === this.availabilities.PAUSE;\n }\n\n /* #endregion */\n\n /* #region drain */\n\n computeDrainWarning() {\n return this.formValues.Availability === this.availabilities.DRAIN;\n }\n\n async drainNodeAsync() {\n const pods = _.flatten(_.map(this.applications, (app) => app.Pods));\n let actionCount = pods.length;\n for (const pod of pods) {\n try {\n await this.KubernetesPodService.eviction(pod);\n this.Notifications.success('Pod successfully evicted', pod.Name);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to evict pod');\n this.formValues.Availability = this.availabilities.PAUSE;\n await this.KubernetesNodeService.patch(this.node, this.formValues);\n } finally {\n --actionCount;\n if (actionCount === 0) {\n this.formValues.Availability = this.availabilities.PAUSE;\n await this.KubernetesNodeService.patch(this.node, this.formValues);\n }\n }\n }\n }\n\n drainNode() {\n return this.$async(this.drainNodeAsync);\n }\n\n /* #endregion */\n\n /* #region actions */\n\n isNoChangesMade() {\n const newNode = KubernetesNodeConverter.formValuesToNode(this.node, this.formValues);\n const payload = KubernetesNodeConverter.patchPayload(this.node, newNode);\n return !payload.length;\n }\n\n isDrainError() {\n return (this.state.isDrainOperation || this.state.isContainPortainer) && this.formValues.Availability === this.availabilities.DRAIN;\n }\n\n isFormValid() {\n return !this.state.hasDuplicateTaintKeys && !this.state.hasDuplicateLabelKeys && !this.isNoChangesMade() && !this.isDrainError();\n }\n\n resetFormValues() {\n this.formValues = KubernetesNodeConverter.nodeToFormValues(this.node);\n }\n\n /* #endregion */\n\n async getEndpointsAsync() {\n try {\n const endpoints = await this.KubernetesEndpointService.get();\n this.endpoint = _.find(endpoints, { Name: 'kubernetes' });\n if (this.endpoint && this.endpoint.Subsets) {\n _.forEach(this.endpoint.Subsets, (subset) => {\n return _.forEach(subset.Ips, (ip) => {\n if (ip === this.node.IPAddress) {\n this.node.Api = true;\n this.node.Port = subset.Port;\n return false;\n }\n });\n });\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve endpoints');\n }\n }\n\n getEndpoints() {\n return this.$async(this.getEndpointsAsync);\n }\n\n async updateNodeAsync() {\n try {\n this.node = await this.KubernetesNodeService.patch(this.node, this.formValues);\n if (this.formValues.Availability === 'Drain') {\n await this.drainNode();\n }\n this.Notifications.success('Node updated successfully');\n this.$state.reload();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to update node');\n }\n }\n\n updateNode() {\n const taintsWarning = this.computeTaintsWarning();\n const labelsWarning = this.computeLabelsWarning();\n const cordonWarning = this.computeCordonWarning();\n const drainWarning = this.computeDrainWarning();\n\n if (taintsWarning && !labelsWarning) {\n this.ModalService.confirmUpdate(\n 'Changes to taints will immediately deschedule applications running on this node without the corresponding tolerations. Do you wish to continue?',\n (confirmed) => {\n if (confirmed) {\n return this.$async(this.updateNodeAsync);\n }\n }\n );\n } else if (!taintsWarning && labelsWarning) {\n this.ModalService.confirmUpdate(\n 'Removing or changing a label that is used might prevent applications from being scheduled on this node in the future. Do you wish to continue?',\n (confirmed) => {\n if (confirmed) {\n return this.$async(this.updateNodeAsync);\n }\n }\n );\n } else if (taintsWarning && labelsWarning) {\n this.ModalService.confirmUpdate(\n 'Changes to taints will immediately deschedule applications running on this node without the corresponding tolerations.

    Removing or changing a label that is used might prevent applications from scheduling on this node in the future.\\n\\nDo you wish to continue?',\n (confirmed) => {\n if (confirmed) {\n return this.$async(this.updateNodeAsync);\n }\n }\n );\n } else if (cordonWarning) {\n this.ModalService.confirmUpdate(\n 'Marking this node as unschedulable will effectively cordon the node and prevent any new workload from being scheduled on that node. Are you sure?',\n (confirmed) => {\n if (confirmed) {\n return this.$async(this.updateNodeAsync);\n }\n }\n );\n } else if (drainWarning) {\n this.ModalService.confirmUpdate(\n 'Draining this node will cause all workloads to be evicted from that node. This might lead to some service interruption. Are you sure?',\n (confirmed) => {\n if (confirmed) {\n return this.$async(this.updateNodeAsync);\n }\n }\n );\n } else {\n return this.$async(this.updateNodeAsync);\n }\n }\n\n async getNodesAsync() {\n try {\n this.state.dataLoading = true;\n const nodeName = this.$transition$.params().name;\n this.nodes = await this.KubernetesNodeService.get();\n this.node = _.find(this.nodes, { Name: nodeName });\n this.state.isDrainOperation = _.find(this.nodes, { Availability: this.availabilities.DRAIN });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve node');\n } finally {\n this.state.dataLoading = false;\n }\n }\n\n getNodes() {\n return this.$async(this.getNodesAsync);\n }\n\n hasEventWarnings() {\n return this.state.eventWarningCount;\n }\n\n async getEventsAsync() {\n try {\n this.state.eventsLoading = true;\n this.events = await this.KubernetesEventService.get();\n this.events = _.filter(this.events.items, (item) => item.involvedObject.kind === 'Node');\n this.state.eventWarningCount = KubernetesEventHelper.warningCount(this.events);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve node events');\n } finally {\n this.state.eventsLoading = false;\n }\n }\n\n getEvents() {\n return this.$async(this.getEventsAsync);\n }\n\n showEditor() {\n this.state.showEditorTab = true;\n this.selectTab(2);\n }\n\n async getApplicationsAsync() {\n try {\n this.state.applicationsLoading = true;\n this.applications = await this.KubernetesApplicationService.get();\n\n this.resourceReservation = new KubernetesResourceReservation();\n this.applications = _.map(this.applications, (app) => {\n app.Pods = _.filter(app.Pods, (pod) => pod.Node === this.node.Name);\n return app;\n });\n this.applications = _.filter(this.applications, (app) => app.Pods.length !== 0);\n this.applications = _.map(this.applications, (app) => {\n const resourceReservation = KubernetesResourceReservationHelper.computeResourceReservation(app.Pods);\n app.CPU = resourceReservation.CPU;\n app.Memory = resourceReservation.Memory;\n this.resourceReservation.CPU += resourceReservation.CPU;\n this.resourceReservation.Memory += resourceReservation.Memory;\n return app;\n });\n this.resourceReservation.Memory = KubernetesResourceReservationHelper.megaBytesValue(this.resourceReservation.Memory);\n this.memoryLimit = KubernetesResourceReservationHelper.megaBytesValue(this.node.Memory);\n this.state.isContainPortainer = _.find(this.applications, { ApplicationName: 'portainer' });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve applications');\n } finally {\n this.state.applicationsLoading = false;\n }\n }\n\n getApplications() {\n return this.$async(this.getApplicationsAsync);\n }\n\n async onInit() {\n this.state = {\n activeTab: 0,\n currentName: this.$state.$current.name,\n dataLoading: true,\n eventsLoading: true,\n applicationsLoading: true,\n showEditorTab: false,\n viewReady: false,\n eventWarningCount: 0,\n duplicateTaintKeys: [],\n hasDuplicateTaintKeys: false,\n duplicateLabelKeys: [],\n hasDuplicateLabelKeys: false,\n isDrainOperation: false,\n isContainPortainer: false,\n };\n\n this.availabilities = KubernetesNodeAvailabilities;\n\n this.state.activeTab = this.LocalStorage.getActiveTab('node');\n\n await this.getNodes();\n await this.getEvents();\n await this.getApplications();\n await this.getEndpoints();\n\n this.availableEffects = _.values(KubernetesNodeTaintEffects);\n this.formValues = KubernetesNodeConverter.nodeToFormValues(this.node);\n this.formValues.Labels = KubernetesNodeHelper.computeUsedLabels(this.applications, this.formValues.Labels);\n this.formValues.Labels = KubernetesNodeHelper.reorderLabels(this.formValues.Labels);\n\n this.state.viewReady = true;\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n\n $onDestroy() {\n if (this.state.currentName !== this.$state.$current.name) {\n this.LocalStorage.storeActiveTab('node', 0);\n }\n }\n}\n\nexport default KubernetesNodeController;\nangular.module('portainer.kubernetes').controller('KubernetesNodeController', KubernetesNodeController);\n","const autoNgTemplateLoaderTemplate1 = require('./stats.html');\n\nangular.module('portainer.kubernetes').component('kubernetesNodeStatsView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesNodeStatsController',\n controllerAs: 'ctrl',\n bindings: {\n $transition$: '<',\n },\n});\n","var path = 'app/kubernetes/views/cluster/node/stats/stats.html';\nvar html = \"\\n Cluster > {{ ctrl.state.transition.nodeName }} >\\n {{ ctrl.state.transition.nodeName }}\\n\\n\\n\\n\\n
    \\n \\n \\n \\n Portainer was unable to retrieve any metrics associated to that node. Please contact your administrator to ensure that the Kubernetes metrics feature is properly configured.\\n \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n This view displays real-time statistics about the node {{ ctrl.state.transition.nodeName }}.\\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\nimport moment from 'moment';\nimport filesizeParser from 'filesize-parser';\nimport KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';\nimport { PORTAINER_FADEOUT } from '@/constants';\n\nclass KubernetesNodeStatsController {\n /* @ngInject */\n constructor($async, $state, $interval, $document, Notifications, KubernetesNodeService, KubernetesMetricsService, ChartService) {\n this.$async = $async;\n this.$state = $state;\n this.$interval = $interval;\n this.$document = $document;\n this.Notifications = Notifications;\n this.KubernetesNodeService = KubernetesNodeService;\n this.KubernetesMetricsService = KubernetesMetricsService;\n this.ChartService = ChartService;\n\n this.onInit = this.onInit.bind(this);\n }\n\n changeUpdateRepeater() {\n var cpuChart = this.cpuChart;\n var memoryChart = this.memoryChart;\n\n this.stopRepeater();\n this.setUpdateRepeater(cpuChart, memoryChart);\n $('#refreshRateChange').show();\n $('#refreshRateChange').fadeOut(PORTAINER_FADEOUT);\n }\n\n updateCPUChart() {\n const label = moment(this.stats.read).format('HH:mm:ss');\n this.ChartService.UpdateCPUChart(label, this.stats.CPUUsage, this.cpuChart);\n }\n\n updateMemoryChart() {\n const label = moment(this.stats.read).format('HH:mm:ss');\n this.ChartService.UpdateMemoryChart(label, this.stats.MemoryUsage, 0, this.memoryChart);\n }\n\n stopRepeater() {\n var repeater = this.repeater;\n if (angular.isDefined(repeater)) {\n this.$interval.cancel(repeater);\n this.repeater = undefined;\n }\n }\n\n setUpdateRepeater() {\n const refreshRate = this.state.refreshRate;\n\n this.repeater = this.$interval(async () => {\n try {\n await this.getStats();\n this.updateCPUChart();\n this.updateMemoryChart();\n } catch (error) {\n this.stopRepeater();\n this.Notifications.error('Failure', error);\n }\n }, refreshRate * 1000);\n }\n\n initCharts() {\n const cpuChartCtx = $('#cpuChart');\n const cpuChart = this.ChartService.CreateCPUChart(cpuChartCtx);\n this.cpuChart = cpuChart;\n\n const memoryChartCtx = $('#memoryChart');\n const memoryChart = this.ChartService.CreateMemoryChart(memoryChartCtx);\n this.memoryChart = memoryChart;\n\n this.updateCPUChart();\n this.updateMemoryChart();\n this.setUpdateRepeater();\n }\n\n getStats() {\n return this.$async(async () => {\n try {\n const stats = await this.KubernetesMetricsService.getNode(this.state.transition.nodeName);\n if (stats) {\n const memory = filesizeParser(stats.usage.memory);\n const cpu = KubernetesResourceReservationHelper.parseCPU(stats.usage.cpu);\n this.stats = {\n read: stats.creationTimestamp,\n MemoryUsage: memory,\n CPUUsage: (cpu / this.nodeCPU) * 100,\n };\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve node stats');\n }\n });\n }\n\n $onDestroy() {\n this.stopRepeater();\n }\n\n async onInit() {\n this.state = {\n autoRefresh: false,\n refreshRate: '30',\n viewReady: false,\n transition: {\n nodeName: this.$transition$.params().name,\n },\n getMetrics: true,\n };\n\n try {\n const nodeMetrics = await this.KubernetesMetricsService.getNode(this.state.transition.nodeName);\n\n if (nodeMetrics) {\n const node = await this.KubernetesNodeService.get(this.state.transition.nodeName);\n this.nodeCPU = node.CPU || 1;\n\n await this.getStats();\n\n if (this.state.getMetrics) {\n this.$document.ready(() => {\n this.initCharts();\n });\n }\n } else {\n this.state.getMetrics = false;\n }\n } catch (err) {\n this.state.getMetrics = false;\n this.Notifications.error('Failure', err, 'Unable to retrieve node stats');\n } finally {\n this.state.viewReady = true;\n }\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n}\n\nexport default KubernetesNodeStatsController;\nangular.module('portainer.kubernetes').controller('KubernetesNodeStatsController', KubernetesNodeStatsController);\n","const autoNgTemplateLoaderTemplate1 = require('./configurations.html');\n\nangular.module('portainer.kubernetes').component('kubernetesConfigurationsView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesConfigurationsController',\n controllerAs: 'ctrl',\n});\n","var path = 'app/kubernetes/views/configurations/configurations.html';\nvar html = \"\\n Configurations\\n\\n\\n\\n\\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","require('../../templates/advancedDeploymentPanel.html');\n\nimport angular from 'angular';\nimport KubernetesConfigurationHelper from 'Kubernetes/helpers/configurationHelper';\n\nclass KubernetesConfigurationsController {\n /* @ngInject */\n constructor($async, $state, Notifications, Authentication, KubernetesConfigurationService, KubernetesApplicationService, ModalService) {\n this.$async = $async;\n this.$state = $state;\n this.Notifications = Notifications;\n this.Authentication = Authentication;\n this.KubernetesConfigurationService = KubernetesConfigurationService;\n this.KubernetesApplicationService = KubernetesApplicationService;\n this.ModalService = ModalService;\n\n this.onInit = this.onInit.bind(this);\n this.getConfigurations = this.getConfigurations.bind(this);\n this.getConfigurationsAsync = this.getConfigurationsAsync.bind(this);\n this.getApplicationsAsync = this.getApplicationsAsync.bind(this);\n this.removeAction = this.removeAction.bind(this);\n this.removeActionAsync = this.removeActionAsync.bind(this);\n this.refreshCallback = this.refreshCallback.bind(this);\n this.refreshCallbackAsync = this.refreshCallbackAsync.bind(this);\n }\n\n async getConfigurationsAsync() {\n try {\n this.state.configurationsLoading = true;\n this.configurations = await this.KubernetesConfigurationService.get();\n KubernetesConfigurationHelper.setConfigurationsUsed(this.configurations, this.applications);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve configurations');\n } finally {\n this.state.configurationsLoading = false;\n }\n }\n\n getConfigurations() {\n return this.$async(this.getConfigurationsAsync);\n }\n\n async removeActionAsync(selectedItems) {\n let actionCount = selectedItems.length;\n for (const configuration of selectedItems) {\n try {\n await this.KubernetesConfigurationService.delete(configuration);\n this.Notifications.success('Configurations successfully removed', configuration.Name);\n const index = this.configurations.indexOf(configuration);\n this.configurations.splice(index, 1);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to remove configuration');\n } finally {\n --actionCount;\n if (actionCount === 0) {\n this.$state.reload();\n }\n }\n }\n }\n\n removeAction(selectedItems) {\n this.ModalService.confirmDeletion('Do you want to remove the selected configuration(s)?', (confirmed) => {\n if (confirmed) {\n return this.$async(this.removeActionAsync, selectedItems);\n }\n });\n }\n\n async getApplicationsAsync() {\n try {\n this.state.applicationsLoading = true;\n this.applications = await this.KubernetesApplicationService.get();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve applications');\n } finally {\n this.state.applicationsLoading = false;\n }\n }\n\n getApplications() {\n return this.$async(this.getApplicationsAsync);\n }\n\n async refreshCallbackAsync() {\n await this.getConfigurations();\n await this.getApplications();\n }\n\n refreshCallback() {\n return this.$async(this.refreshCallbackAsync);\n }\n\n async onInit() {\n this.state = {\n configurationsLoading: true,\n applicationsLoading: true,\n viewReady: false,\n isAdmin: this.Authentication.isAdmin(),\n };\n\n await this.getApplications();\n await this.getConfigurations();\n\n this.state.viewReady = true;\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n}\n\nexport default KubernetesConfigurationsController;\nangular.module('portainer.kubernetes').controller('KubernetesConfigurationsController', KubernetesConfigurationsController);\n","const autoNgTemplateLoaderTemplate1 = require('./createConfiguration.html');\n\nangular.module('portainer.kubernetes').component('kubernetesCreateConfigurationView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesCreateConfigurationController',\n controllerAs: 'ctrl',\n});\n","var path = 'app/kubernetes/views/configurations/create/createConfiguration.html';\nvar html = \"\\n Configurations > Create a configuration\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n

    This field must consist of lower case alphanumeric characters, '-' or '.', and must start and end\\n with an alphanumeric character.\\n

    \\n

    A configuration with the same name already exists inside the selected namespace.\\n

    \\n
    \\n \\n\\n
    \\n Namespace\\n
    \\n\\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n This namespace has exhausted its resource capacity and you will not be able to deploy the configuration. Contact your administrator to expand the capacity of the\\n namespace.\\n
    \\n
    \\n \\n\\n
    \\n Configuration type\\n
    \\n\\n
    \\n
    \\n Select the type of data that you want to save in the configuration.\\n
    \\n
    \\n\\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n\\n
    \\n Information\\n
    \\n
    \\n
    \\n Creating a sensitive configuration will create a Kubernetes Secret of type Opaque. You can find more information about this in the\\n official documentation.\\n
    \\n
    \\n\\n \\n\\n \\n \\n\\n \\n
    \\n Actions\\n
    \\n
    \\n
    \\n \\n Create configuration\\n Creation in progress...\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\nimport _ from 'lodash-es';\nimport { KubernetesConfigurationFormValues, KubernetesConfigurationFormValuesEntry } from 'Kubernetes/models/configuration/formvalues';\nimport { KubernetesConfigurationTypes } from 'Kubernetes/models/configuration/models';\nimport KubernetesConfigurationHelper from 'Kubernetes/helpers/configurationHelper';\n\nclass KubernetesCreateConfigurationController {\n /* @ngInject */\n constructor($async, $state, $window, ModalService, Notifications, Authentication, KubernetesConfigurationService, KubernetesResourcePoolService, KubernetesNamespaceHelper) {\n this.$async = $async;\n this.$state = $state;\n this.$window = $window;\n this.ModalService = ModalService;\n this.Notifications = Notifications;\n this.Authentication = Authentication;\n this.KubernetesConfigurationService = KubernetesConfigurationService;\n this.KubernetesResourcePoolService = KubernetesResourcePoolService;\n this.KubernetesConfigurationTypes = KubernetesConfigurationTypes;\n this.KubernetesNamespaceHelper = KubernetesNamespaceHelper;\n\n this.onInit = this.onInit.bind(this);\n this.createConfigurationAsync = this.createConfigurationAsync.bind(this);\n this.getConfigurationsAsync = this.getConfigurationsAsync.bind(this);\n }\n\n onChangeName() {\n const filteredConfigurations = _.filter(this.configurations, (config) => config.Namespace === this.formValues.ResourcePool.Namespace.Name);\n this.state.alreadyExist = _.find(filteredConfigurations, (config) => config.Name === this.formValues.Name) !== undefined;\n }\n\n onResourcePoolSelectionChange() {\n this.onChangeName();\n }\n\n isFormValid() {\n const uniqueCheck = !this.state.alreadyExist && this.state.isDataValid;\n if (this.formValues.IsSimple) {\n return this.formValues.Data.length > 0 && uniqueCheck;\n }\n return uniqueCheck;\n }\n\n async createConfigurationAsync() {\n try {\n this.state.actionInProgress = true;\n this.formValues.ConfigurationOwner = this.Authentication.getUserDetails().username;\n if (!this.formValues.IsSimple) {\n this.formValues.Data = KubernetesConfigurationHelper.parseYaml(this.formValues);\n }\n await this.KubernetesConfigurationService.create(this.formValues);\n this.Notifications.success('Configuration succesfully created');\n this.state.isEditorDirty = false;\n this.$state.go('kubernetes.configurations');\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to create configuration');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n createConfiguration() {\n return this.$async(this.createConfigurationAsync);\n }\n\n async getConfigurationsAsync() {\n try {\n this.configurations = await this.KubernetesConfigurationService.get();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve configurations');\n }\n }\n\n getConfigurations() {\n return this.$async(this.getConfigurationsAsync);\n }\n\n async uiCanExit() {\n if (!this.formValues.IsSimple && this.formValues.DataYaml && this.state.isEditorDirty) {\n return this.ModalService.confirmWebEditorDiscard();\n }\n }\n\n async onInit() {\n this.state = {\n actionInProgress: false,\n viewReady: false,\n alreadyExist: false,\n isDataValid: true,\n isEditorDirty: false,\n };\n\n this.formValues = new KubernetesConfigurationFormValues();\n this.formValues.Data.push(new KubernetesConfigurationFormValuesEntry());\n\n try {\n const resourcePools = await this.KubernetesResourcePoolService.get();\n this.resourcePools = _.filter(resourcePools, (resourcePool) => !this.KubernetesNamespaceHelper.isSystemNamespace(resourcePool.Namespace.Name));\n\n this.formValues.ResourcePool = this.resourcePools[0];\n await this.getConfigurations();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to load view data');\n } finally {\n this.state.viewReady = true;\n }\n\n this.$window.onbeforeunload = () => {\n if (!this.formValues.IsSimple && this.formValues.DataYaml && this.state.isEditorDirty) {\n return '';\n }\n };\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n}\n\nexport default KubernetesCreateConfigurationController;\nangular.module('portainer.kubernetes').controller('KubernetesCreateConfigurationController', KubernetesCreateConfigurationController);\n","const autoNgTemplateLoaderTemplate1 = require('./configuration.html');\n\nangular.module('portainer.kubernetes').component('kubernetesConfigurationView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesConfigurationController',\n controllerAs: 'ctrl',\n bindings: {\n $transition$: '<',\n },\n});\n","var path = 'app/kubernetes/views/configurations/edit/configuration.html';\nvar html = \"\\n Namespaces >\\n {{ ctrl.configuration.Namespace }} >\\n Configurations > {{ ctrl.configuration.Name }}\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n \\n \\n Configuration \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Name\\n {{ ctrl.configuration.Name }}\\n
    Namespace\\n {{ ctrl.configuration.Namespace }}\\n system\\n
    Configuration type\\n {{ ctrl.configuration.Type | kubernetesConfigurationTypeText }}\\n
    \\n
    \\n
    \\n \\n \\n Events\\n
    \\n \\n {{ ctrl.state.eventWarningCount }} warning(s)\\n
    \\n
    \\n \\n \\n
    \\n \\n YAML \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n \\n\\n \\n \\n\\n \\n
    \\n Actions\\n
    \\n
    \\n
    \\n \\n Update configuration\\n Update in progress...\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n Data\\n
    \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n
    KeyValue
    {{ item.Key }}\\n
    {{ item.Value }}
    \\n
    \\n Copy \\n \\n copied\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\nimport { KubernetesConfigurationFormValues } from 'Kubernetes/models/configuration/formvalues';\nimport { KubernetesConfigurationTypes } from 'Kubernetes/models/configuration/models';\nimport KubernetesConfigurationHelper from 'Kubernetes/helpers/configurationHelper';\nimport KubernetesConfigurationConverter from 'Kubernetes/converters/configuration';\nimport KubernetesEventHelper from 'Kubernetes/helpers/eventHelper';\nimport _ from 'lodash-es';\n\nclass KubernetesConfigurationController {\n /* @ngInject */\n constructor(\n $async,\n $state,\n $window,\n clipboard,\n Notifications,\n LocalStorage,\n KubernetesConfigurationService,\n KubernetesConfigMapService,\n KubernetesSecretService,\n KubernetesResourcePoolService,\n ModalService,\n KubernetesApplicationService,\n KubernetesEventService,\n KubernetesNamespaceHelper\n ) {\n this.$async = $async;\n this.$state = $state;\n this.$window = $window;\n this.clipboard = clipboard;\n this.Notifications = Notifications;\n this.LocalStorage = LocalStorage;\n this.ModalService = ModalService;\n this.KubernetesConfigurationService = KubernetesConfigurationService;\n this.KubernetesResourcePoolService = KubernetesResourcePoolService;\n this.KubernetesApplicationService = KubernetesApplicationService;\n this.KubernetesEventService = KubernetesEventService;\n this.KubernetesConfigurationTypes = KubernetesConfigurationTypes;\n this.KubernetesNamespaceHelper = KubernetesNamespaceHelper;\n this.KubernetesConfigMapService = KubernetesConfigMapService;\n this.KubernetesSecretService = KubernetesSecretService;\n\n this.onInit = this.onInit.bind(this);\n this.getConfigurationAsync = this.getConfigurationAsync.bind(this);\n this.getEvents = this.getEvents.bind(this);\n this.getEventsAsync = this.getEventsAsync.bind(this);\n this.getApplications = this.getApplications.bind(this);\n this.getApplicationsAsync = this.getApplicationsAsync.bind(this);\n this.getConfigurationsAsync = this.getConfigurationsAsync.bind(this);\n this.updateConfiguration = this.updateConfiguration.bind(this);\n this.updateConfigurationAsync = this.updateConfigurationAsync.bind(this);\n }\n\n isSystemNamespace() {\n return this.KubernetesNamespaceHelper.isSystemNamespace(this.configuration.Namespace);\n }\n\n selectTab(index) {\n this.LocalStorage.storeActiveTab('configuration', index);\n }\n\n showEditor() {\n this.state.showEditorTab = true;\n this.selectTab(2);\n }\n\n copyConfigurationValue(idx) {\n this.clipboard.copyText(this.formValues.Data[idx].Value);\n $('#copyValueNotification_' + idx)\n .show()\n .fadeOut(2500);\n }\n\n isFormValid() {\n if (this.formValues.IsSimple) {\n return this.formValues.Data.length > 0 && this.state.isDataValid;\n }\n return this.state.isDataValid;\n }\n\n // TODO: refactor\n // It looks like we're still doing a create/delete process but we've decided to get rid of this\n // approach.\n async updateConfigurationAsync() {\n try {\n this.state.actionInProgress = true;\n if (\n this.formValues.Type !== this.configuration.Type ||\n this.formValues.ResourcePool.Namespace.Name !== this.configuration.Namespace ||\n this.formValues.Name !== this.configuration.Name\n ) {\n await this.KubernetesConfigurationService.create(this.formValues);\n await this.KubernetesConfigurationService.delete(this.configuration);\n this.Notifications.success('Configuration succesfully updated');\n this.$state.go(\n 'kubernetes.configurations.configuration',\n {\n namespace: this.formValues.ResourcePool.Namespace.Name,\n name: this.formValues.Name,\n },\n { reload: true }\n );\n } else {\n await this.KubernetesConfigurationService.update(this.formValues, this.configuration);\n this.Notifications.success('Configuration succesfully updated');\n this.$state.reload();\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to update configuration');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n updateConfiguration() {\n if (this.configuration.Used) {\n const plural = this.configuration.Applications.length > 1 ? 's' : '';\n this.ModalService.confirmUpdate(\n `The changes will be propagated to ${this.configuration.Applications.length} running application${plural}. Are you sure you want to update this configuration?`,\n (confirmed) => {\n if (confirmed) {\n return this.$async(this.updateConfigurationAsync);\n }\n }\n );\n } else {\n return this.$async(this.updateConfigurationAsync);\n }\n }\n\n async getConfigurationAsync() {\n try {\n this.state.configurationLoading = true;\n const name = this.$transition$.params().name;\n const namespace = this.$transition$.params().namespace;\n const [configMap, secret] = await Promise.allSettled([this.KubernetesConfigMapService.get(namespace, name), this.KubernetesSecretService.get(namespace, name)]);\n if (secret.status === 'fulfilled') {\n this.configuration = KubernetesConfigurationConverter.secretToConfiguration(secret.value);\n this.formValues.Data = secret.value.Data;\n } else {\n this.configuration = KubernetesConfigurationConverter.configMapToConfiguration(configMap.value);\n this.formValues.Data = configMap.value.Data;\n }\n this.formValues.ResourcePool = _.find(this.resourcePools, (resourcePool) => resourcePool.Namespace.Name === this.configuration.Namespace);\n this.formValues.Id = this.configuration.Id;\n this.formValues.Name = this.configuration.Name;\n this.formValues.Type = this.configuration.Type;\n this.oldDataYaml = this.formValues.DataYaml;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve configuration');\n } finally {\n this.state.configurationLoading = false;\n }\n }\n\n getConfiguration() {\n return this.$async(this.getConfigurationAsync);\n }\n\n async getApplicationsAsync(namespace) {\n try {\n this.state.applicationsLoading = true;\n const applications = await this.KubernetesApplicationService.get(namespace);\n this.configuration.Applications = KubernetesConfigurationHelper.getUsingApplications(this.configuration, applications);\n KubernetesConfigurationHelper.setConfigurationUsed(this.configuration);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve applications');\n } finally {\n this.state.applicationsLoading = false;\n }\n }\n\n getApplications(namespace) {\n return this.$async(this.getApplicationsAsync, namespace);\n }\n\n hasEventWarnings() {\n return this.state.eventWarningCount;\n }\n\n async getEventsAsync(namespace) {\n try {\n this.state.eventsLoading = true;\n this.events = await this.KubernetesEventService.get(namespace);\n this.events = _.filter(this.events, (event) => event.Involved.uid === this.configuration.Id);\n this.state.eventWarningCount = KubernetesEventHelper.warningCount(this.events);\n } catch (err) {\n this.Notifications('Failure', err, 'Unable to retrieve events');\n } finally {\n this.state.eventsLoading = false;\n }\n }\n\n getEvents(namespace) {\n return this.$async(this.getEventsAsync, namespace);\n }\n\n async getConfigurationsAsync() {\n try {\n this.configurations = await this.KubernetesConfigurationService.get();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve configurations');\n }\n }\n\n getConfigurations() {\n return this.$async(this.getConfigurationsAsync);\n }\n\n tagUsedDataKeys() {\n const configName = this.$transition$.params().name;\n const usedDataKeys = _.uniq(\n this.configuration.Applications.flatMap((app) =>\n app.Env.filter((e) => e.valueFrom && e.valueFrom.configMapKeyRef && e.valueFrom.configMapKeyRef.name === configName).map((e) => e.name)\n )\n );\n\n this.formValues.Data = this.formValues.Data.map((variable) => {\n if (!usedDataKeys.includes(variable.Key)) {\n return variable;\n }\n\n return { ...variable, Used: true };\n });\n }\n\n async uiCanExit() {\n if (!this.formValues.IsSimple && this.formValues.DataYaml !== this.oldDataYaml && this.state.isEditorDirty) {\n return this.ModalService.confirmWebEditorDiscard();\n }\n }\n\n async onInit() {\n try {\n this.state = {\n actionInProgress: false,\n configurationLoading: true,\n applicationsLoading: true,\n eventsLoading: true,\n showEditorTab: false,\n viewReady: false,\n eventWarningCount: 0,\n activeTab: 0,\n currentName: this.$state.$current.name,\n isDataValid: true,\n isEditorDirty: false,\n };\n\n this.state.activeTab = this.LocalStorage.getActiveTab('configuration');\n\n this.formValues = new KubernetesConfigurationFormValues();\n\n this.resourcePools = await this.KubernetesResourcePoolService.get();\n await this.getConfiguration();\n await this.getApplications(this.configuration.Namespace);\n await this.getEvents(this.configuration.Namespace);\n await this.getConfigurations();\n\n this.tagUsedDataKeys();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to load view data');\n } finally {\n this.state.viewReady = true;\n }\n\n this.$window.onbeforeunload = () => {\n if (!this.formValues.IsSimple && this.formValues.DataYaml !== this.oldDataYaml && this.state.isEditorDirty) {\n return '';\n }\n };\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n\n $onDestroy() {\n if (this.state.currentName !== this.$state.$current.name) {\n this.LocalStorage.storeActiveTab('configuration', 0);\n }\n }\n}\n\nexport default KubernetesConfigurationController;\nangular.module('portainer.kubernetes').controller('KubernetesConfigurationController', KubernetesConfigurationController);\n","import _ from 'lodash-es';\nimport angular from 'angular';\nimport { KubernetesStorageClass, KubernetesStorageClassAccessPolicies } from 'Kubernetes/models/storage-class/models';\nimport { KubernetesFormValidationReferences } from 'Kubernetes/models/application/formValues';\nimport { KubernetesIngressClass } from 'Kubernetes/ingress/models';\nimport KubernetesFormValidationHelper from 'Kubernetes/helpers/formValidationHelper';\nimport { KubernetesIngressClassTypes } from 'Kubernetes/ingress/constants';\n\nclass KubernetesConfigureController {\n /* #region CONSTRUCTOR */\n\n // TODO: technical debt\n // $transition$ cannot be injected as bindings: { $transition$: '<' } inside app/portainer/__module.js\n // because this view is not using a component (https://ui-router.github.io/guide/ng1/route-to-component#accessing-transition)\n // and will cause\n // >> Error: Cannot combine: component|bindings|componentProvider\n // >> with: templateProvider|templateUrl|template|notify|async|controller|controllerProvider|controllerAs|resolveAs\n // >> in stateview: 'content@@portainer.endpoints.endpoint.kubernetesConfig'\n /* @ngInject */\n constructor(\n $async,\n $state,\n $transition$,\n Notifications,\n KubernetesStorageService,\n EndpointService,\n EndpointProvider,\n ModalService,\n KubernetesNamespaceHelper,\n KubernetesResourcePoolService,\n KubernetesIngressService,\n KubernetesMetricsService\n ) {\n this.$async = $async;\n this.$state = $state;\n this.$transition$ = $transition$;\n this.Notifications = Notifications;\n this.KubernetesStorageService = KubernetesStorageService;\n this.EndpointService = EndpointService;\n this.EndpointProvider = EndpointProvider;\n this.ModalService = ModalService;\n this.KubernetesNamespaceHelper = KubernetesNamespaceHelper;\n this.KubernetesResourcePoolService = KubernetesResourcePoolService;\n this.KubernetesIngressService = KubernetesIngressService;\n this.KubernetesMetricsService = KubernetesMetricsService;\n\n this.IngressClassTypes = KubernetesIngressClassTypes;\n\n this.onInit = this.onInit.bind(this);\n this.configureAsync = this.configureAsync.bind(this);\n }\n /* #endregion */\n\n /* #region STORAGE CLASSES UI MANAGEMENT */\n storageClassAvailable() {\n return this.StorageClasses && this.StorageClasses.length > 0;\n }\n\n hasValidStorageConfiguration() {\n let valid = true;\n _.forEach(this.StorageClasses, (item) => {\n if (item.selected && item.AccessModes.length === 0) {\n valid = false;\n }\n });\n return valid;\n }\n /* #endregion */\n\n /* #region INGRESS CLASSES UI MANAGEMENT */\n addIngressClass() {\n this.formValues.IngressClasses.push(new KubernetesIngressClass());\n this.onChangeIngressClass();\n }\n\n restoreIngressClass(index) {\n this.formValues.IngressClasses[index].NeedsDeletion = false;\n this.onChangeIngressClass();\n }\n\n removeIngressClass(index) {\n if (!this.formValues.IngressClasses[index].IsNew) {\n this.formValues.IngressClasses[index].NeedsDeletion = true;\n } else {\n this.formValues.IngressClasses.splice(index, 1);\n }\n this.onChangeIngressClass();\n }\n\n onChangeIngressClass() {\n const state = this.state.duplicates.ingressClasses;\n const source = _.map(this.formValues.IngressClasses, (ic) => (ic.NeedsDeletion ? undefined : ic.Name));\n const duplicates = KubernetesFormValidationHelper.getDuplicates(source);\n state.refs = duplicates;\n state.hasRefs = Object.keys(duplicates).length > 0;\n }\n\n onChangeIngressClassName(index) {\n const fv = this.formValues.IngressClasses[index];\n if (_.includes(fv.Name, KubernetesIngressClassTypes.NGINX)) {\n fv.Type = KubernetesIngressClassTypes.NGINX;\n } else if (_.includes(fv.Name, KubernetesIngressClassTypes.TRAEFIK)) {\n fv.Type = KubernetesIngressClassTypes.TRAEFIK;\n }\n this.onChangeIngressClass();\n }\n\n hasTraefikIngress() {\n return _.find(this.formValues.IngressClasses, { Type: this.IngressClassTypes.TRAEFIK });\n }\n /* #endregion */\n\n /* #region CONFIGURE */\n assignFormValuesToEndpoint(endpoint, storageClasses, ingressClasses) {\n endpoint.Kubernetes.Configuration.StorageClasses = storageClasses;\n endpoint.Kubernetes.Configuration.UseLoadBalancer = this.formValues.UseLoadBalancer;\n endpoint.Kubernetes.Configuration.UseServerMetrics = this.formValues.UseServerMetrics;\n endpoint.Kubernetes.Configuration.IngressClasses = ingressClasses;\n }\n\n transformFormValues() {\n const storageClasses = _.map(this.StorageClasses, (item) => {\n if (item.selected) {\n const res = new KubernetesStorageClass();\n res.Name = item.Name;\n res.AccessModes = _.map(item.AccessModes, 'Name');\n res.Provisioner = item.Provisioner;\n res.AllowVolumeExpansion = item.AllowVolumeExpansion;\n return res;\n }\n });\n _.pull(storageClasses, undefined);\n\n const ingressClasses = _.without(\n _.map(this.formValues.IngressClasses, (ic) => (ic.NeedsDeletion ? undefined : ic)),\n undefined\n );\n _.pull(ingressClasses, undefined);\n\n return [storageClasses, ingressClasses];\n }\n\n async removeIngressesAcrossNamespaces() {\n const ingressesToDel = _.filter(this.formValues.IngressClasses, { NeedsDeletion: true });\n\n if (!ingressesToDel.length) {\n return;\n }\n\n const promises = [];\n const oldEndpointID = this.EndpointProvider.endpointID();\n this.EndpointProvider.setEndpointID(this.endpoint.Id);\n\n try {\n const allResourcePools = await this.KubernetesResourcePoolService.get();\n const resourcePools = _.filter(\n allResourcePools,\n (resourcePool) =>\n !this.KubernetesNamespaceHelper.isSystemNamespace(resourcePool.Namespace.Name) && !this.KubernetesNamespaceHelper.isDefaultNamespace(resourcePool.Namespace.Name)\n );\n\n ingressesToDel.forEach((ingress) => {\n resourcePools.forEach((resourcePool) => {\n promises.push(this.KubernetesIngressService.delete(resourcePool.Namespace.Name, ingress.Name));\n });\n });\n } finally {\n this.EndpointProvider.setEndpointID(oldEndpointID);\n }\n\n const responses = await Promise.allSettled(promises);\n responses.forEach((respons) => {\n if (respons.status == 'rejected' && respons.reason.err.status != 404) {\n throw respons.reason;\n }\n });\n }\n\n enableMetricsServer() {\n if (this.formValues.UseServerMetrics) {\n this.state.metrics.userClick = true;\n this.state.metrics.pending = true;\n this.KubernetesMetricsService.capabilities(this.endpoint.Id)\n .then(() => {\n this.state.metrics.isServerRunning = true;\n this.state.metrics.pending = false;\n this.formValues.UseServerMetrics = true;\n })\n .catch(() => {\n this.state.metrics.isServerRunning = false;\n this.state.metrics.pending = false;\n this.formValues.UseServerMetrics = false;\n });\n } else {\n this.state.metrics.userClick = false;\n this.formValues.UseServerMetrics = false;\n }\n }\n\n async configureAsync() {\n try {\n this.state.actionInProgress = true;\n const [storageClasses, ingressClasses] = this.transformFormValues();\n\n await this.removeIngressesAcrossNamespaces();\n\n this.assignFormValuesToEndpoint(this.endpoint, storageClasses, ingressClasses);\n await this.EndpointService.updateEndpoint(this.endpoint.Id, this.endpoint);\n\n const storagePromises = _.map(storageClasses, (storageClass) => {\n const oldStorageClass = _.find(this.oldStorageClasses, { Name: storageClass.Name });\n if (oldStorageClass) {\n return this.KubernetesStorageService.patch(this.state.endpointId, oldStorageClass, storageClass);\n }\n });\n await Promise.all(storagePromises);\n\n const endpoints = this.EndpointProvider.endpoints();\n const modifiedEndpoint = _.find(endpoints, (item) => item.Id === this.endpoint.Id);\n if (modifiedEndpoint) {\n this.assignFormValuesToEndpoint(modifiedEndpoint, storageClasses, ingressClasses);\n this.EndpointProvider.setEndpoints(endpoints);\n }\n this.Notifications.success('Configuration successfully applied');\n this.$state.go('portainer.home');\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to apply configuration');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n configure() {\n const toDel = _.filter(this.formValues.IngressClasses, { NeedsDeletion: true });\n if (toDel.length) {\n this.ModalService.confirmUpdate(\n `Removing ingress controllers may cause applications to be unaccessible. All ingress configurations from affected applications will be removed.

    Do you wish to continue?`,\n (confirmed) => {\n if (confirmed) {\n return this.$async(this.configureAsync);\n }\n }\n );\n } else {\n return this.$async(this.configureAsync);\n }\n }\n /* #endregion */\n\n /* #region ON INIT */\n async onInit() {\n this.state = {\n actionInProgress: false,\n displayConfigureClassPanel: {},\n viewReady: false,\n endpointId: this.$transition$.params().id,\n duplicates: {\n ingressClasses: new KubernetesFormValidationReferences(),\n },\n metrics: {\n pending: false,\n isServerRunning: false,\n userClick: false,\n },\n };\n\n this.formValues = {\n UseLoadBalancer: false,\n UseServerMetrics: false,\n IngressClasses: [],\n };\n\n try {\n [this.StorageClasses, this.endpoint] = await Promise.all([this.KubernetesStorageService.get(this.state.endpointId), this.EndpointService.endpoint(this.state.endpointId)]);\n _.forEach(this.StorageClasses, (item) => {\n item.availableAccessModes = new KubernetesStorageClassAccessPolicies();\n const storage = _.find(this.endpoint.Kubernetes.Configuration.StorageClasses, (sc) => sc.Name === item.Name);\n if (storage) {\n item.selected = true;\n _.forEach(storage.AccessModes, (access) => {\n const mode = _.find(item.availableAccessModes, { Name: access });\n if (mode) {\n mode.selected = true;\n }\n });\n }\n });\n\n this.oldStorageClasses = angular.copy(this.StorageClasses);\n\n this.formValues.UseLoadBalancer = this.endpoint.Kubernetes.Configuration.UseLoadBalancer;\n this.formValues.UseServerMetrics = this.endpoint.Kubernetes.Configuration.UseServerMetrics;\n this.formValues.IngressClasses = _.map(this.endpoint.Kubernetes.Configuration.IngressClasses, (ic) => {\n ic.IsNew = false;\n ic.NeedsDeletion = false;\n return ic;\n });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve endpoint configuration');\n } finally {\n this.state.viewReady = true;\n }\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n /* #endregion */\n}\n\nexport default KubernetesConfigureController;\nangular.module('portainer.kubernetes').controller('KubernetesConfigureController', KubernetesConfigureController);\n","const autoNgTemplateLoaderTemplate1 = require('./dashboard.html');\n\nangular.module('portainer.kubernetes').component('kubernetesDashboardView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesDashboardController',\n controllerAs: 'ctrl',\n});\n","var path = 'app/kubernetes/views/dashboard/dashboard.html';\nvar html = \"\\n Endpoint summary\\n\\n\\n\\n\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\nimport _ from 'lodash-es';\nimport KubernetesConfigurationHelper from 'Kubernetes/helpers/configurationHelper';\n\nclass KubernetesDashboardController {\n /* @ngInject */\n constructor(\n $async,\n Notifications,\n EndpointService,\n EndpointProvider,\n KubernetesResourcePoolService,\n KubernetesApplicationService,\n KubernetesConfigurationService,\n KubernetesVolumeService,\n KubernetesNamespaceHelper,\n Authentication,\n TagService\n ) {\n this.$async = $async;\n this.Notifications = Notifications;\n this.EndpointService = EndpointService;\n this.EndpointProvider = EndpointProvider;\n this.KubernetesResourcePoolService = KubernetesResourcePoolService;\n this.KubernetesApplicationService = KubernetesApplicationService;\n this.KubernetesConfigurationService = KubernetesConfigurationService;\n this.KubernetesVolumeService = KubernetesVolumeService;\n this.KubernetesNamespaceHelper = KubernetesNamespaceHelper;\n this.Authentication = Authentication;\n this.TagService = TagService;\n\n this.onInit = this.onInit.bind(this);\n this.getAll = this.getAll.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n }\n\n async getAllAsync() {\n const isAdmin = this.Authentication.isAdmin();\n\n try {\n const endpointId = this.EndpointProvider.endpointID();\n const [endpoint, pools, applications, configurations, volumes, tags] = await Promise.all([\n this.EndpointService.endpoint(endpointId),\n this.KubernetesResourcePoolService.get(),\n this.KubernetesApplicationService.get(),\n this.KubernetesConfigurationService.get(),\n this.KubernetesVolumeService.get(),\n this.TagService.tags(),\n ]);\n this.endpoint = endpoint;\n this.applications = applications;\n this.volumes = volumes;\n\n this.endpointTags = this.endpoint.TagIds.length\n ? _.join(\n _.filter(\n _.map(this.endpoint.TagIds, (id) => {\n const tag = tags.find((tag) => tag.Id === id);\n return tag ? tag.Name : '';\n }),\n Boolean\n ),\n ', '\n )\n : '-';\n\n if (!isAdmin) {\n this.pools = _.filter(pools, (pool) => {\n return !this.KubernetesNamespaceHelper.isSystemNamespace(pool.Namespace.Name);\n });\n\n this.configurations = _.filter(configurations, (config) => {\n return !KubernetesConfigurationHelper.isSystemToken(config);\n });\n } else {\n this.pools = pools;\n this.configurations = configurations;\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to load dashboard data');\n }\n }\n\n getAll() {\n return this.$async(this.getAllAsync);\n }\n\n async onInit() {\n this.state = {\n viewReady: false,\n };\n\n await this.getAll();\n\n this.state.viewReady = true;\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n}\n\nexport default KubernetesDashboardController;\nangular.module('portainer.kubernetes').controller('KubernetesDashboardController', KubernetesDashboardController);\n","const autoNgTemplateLoaderTemplate1 = require('./deploy.html');\n\nangular.module('portainer.kubernetes').component('kubernetesDeployView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesDeployController',\n controllerAs: 'ctrl',\n});\n","var path = 'app/kubernetes/views/deploy/deploy.html';\nvar html = \"\\n Deploy Kubernetes resources\\n\\n\\n\\n\\n
    \\n \\n\\n
    \\n
    \\n \\n \\n \\n \\n Deploy \\n\\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n Deployment type\\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n\\n \\n
    \\n Build method\\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\\n \\n\\n \\n
    \\n
    \\n Git repository\\n
    \\n
    \\n \\n You can use the URL of a git repository.\\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n Specify a reference of the repository using the following syntax: branches with\\n refs/heads/branch_name or tags with refs/tags/tag_name. If not specified, will use the default HEAD reference normally\\n the master branch.\\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n Indicate the path to the yaml file from the root of your repository.\\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n If your git account has 2FA enabled, you may receive an\\n authentication required error when deploying your stack. In this case, you will need to provide a personal-access token instead of your password.\\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n\\n \\n
    \\n
    \\n Web editor\\n
    \\n
    \\n \\n

    \\n \\n Portainer uses Kompose to convert your Compose manifest to a Kubernetes compliant manifest. Be wary that\\n not all the Compose format options are supported by Kompose at the moment.\\n

    \\n

    \\n You can get more information about Compose file format in the\\n official documentation.\\n

    \\n
    \\n \\n

    \\n \\n This feature allows you to deploy any kind of Kubernetes resource in this environment (Deployment, Secret, ConfigMap...).\\n

    \\n

    \\n You can get more information about Kubernetes file format in the\\n official documentation.\\n

    \\n \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n Actions\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n\\n \\n Logs \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\nimport _ from 'lodash-es';\nimport stripAnsi from 'strip-ansi';\nimport { KubernetesDeployManifestTypes, KubernetesDeployBuildMethods, KubernetesDeployRequestMethods } from 'Kubernetes/models/deploy';\n\nclass KubernetesDeployController {\n /* @ngInject */\n constructor($async, $state, $window, ModalService, Notifications, EndpointProvider, KubernetesResourcePoolService, StackService) {\n this.$async = $async;\n this.$state = $state;\n this.$window = $window;\n this.ModalService = ModalService;\n this.Notifications = Notifications;\n this.EndpointProvider = EndpointProvider;\n this.KubernetesResourcePoolService = KubernetesResourcePoolService;\n this.StackService = StackService;\n\n this.onInit = this.onInit.bind(this);\n this.deployAsync = this.deployAsync.bind(this);\n this.editorUpdate = this.editorUpdate.bind(this);\n this.editorUpdateAsync = this.editorUpdateAsync.bind(this);\n this.getNamespacesAsync = this.getNamespacesAsync.bind(this);\n }\n\n disableDeploy() {\n const isGitFormInvalid =\n this.state.BuildMethod === KubernetesDeployBuildMethods.GIT &&\n (!this.formValues.RepositoryURL ||\n !this.formValues.FilePathInRepository ||\n (this.formValues.RepositoryAuthentication && (!this.formValues.RepositoryUsername || !this.formValues.RepositoryPassword)));\n const isWebEditorInvalid = this.state.BuildMethod === KubernetesDeployBuildMethods.WEB_EDITOR && _.isEmpty(this.formValues.EditorContent);\n\n return isGitFormInvalid || isWebEditorInvalid || _.isEmpty(this.formValues.Namespace) || this.state.actionInProgress;\n }\n\n async editorUpdateAsync(cm) {\n this.formValues.EditorContent = cm.getValue();\n this.state.isEditorDirty = true;\n }\n\n editorUpdate(cm) {\n return this.$async(this.editorUpdateAsync, cm);\n }\n\n displayErrorLog(log) {\n this.errorLog = stripAnsi(log);\n this.state.tabLogsDisabled = false;\n this.state.activeTab = 1;\n }\n\n async deployAsync() {\n this.errorLog = '';\n this.state.actionInProgress = true;\n\n try {\n const method = this.state.BuildMethod === this.BuildMethods.GIT ? KubernetesDeployRequestMethods.REPOSITORY : KubernetesDeployRequestMethods.STRING;\n\n const payload = {\n ComposeFormat: this.state.DeployType === this.ManifestDeployTypes.COMPOSE,\n Namespace: this.formValues.Namespace,\n };\n\n if (method === KubernetesDeployRequestMethods.REPOSITORY) {\n payload.RepositoryURL = this.formValues.RepositoryURL;\n payload.RepositoryReferenceName = this.formValues.RepositoryReferenceName;\n payload.RepositoryAuthentication = this.formValues.RepositoryAuthentication ? true : false;\n if (payload.RepositoryAuthentication) {\n payload.RepositoryUsername = this.formValues.RepositoryUsername;\n payload.RepositoryPassword = this.formValues.RepositoryPassword;\n }\n payload.FilePathInRepository = this.formValues.FilePathInRepository;\n } else {\n payload.StackFileContent = this.formValues.EditorContent;\n }\n\n await this.StackService.kubernetesDeploy(this.endpointId, method, payload);\n\n this.Notifications.success('Manifest successfully deployed');\n this.state.isEditorDirty = false;\n this.$state.go('kubernetes.applications');\n } catch (err) {\n this.Notifications.error('Unable to deploy manifest', err, 'Unable to deploy resources');\n this.displayErrorLog(err.err.data.details);\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n deploy() {\n return this.$async(this.deployAsync);\n }\n\n async getNamespacesAsync() {\n try {\n const pools = await this.KubernetesResourcePoolService.get();\n const namespaces = _.map(pools, 'Namespace').sort((a, b) => {\n if (a.Name === 'default') {\n return -1;\n }\n if (b.Name === 'default') {\n return 1;\n }\n return 0;\n });\n\n this.namespaces = namespaces;\n this.formValues.Namespace = this.namespaces[0].Name;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to load namespaces data');\n }\n }\n\n getNamespaces() {\n return this.$async(this.getNamespacesAsync);\n }\n\n async uiCanExit() {\n if (this.formValues.EditorContent && this.state.isEditorDirty) {\n return this.ModalService.confirmWebEditorDiscard();\n }\n }\n async onInit() {\n this.state = {\n DeployType: KubernetesDeployManifestTypes.KUBERNETES,\n BuildMethod: KubernetesDeployBuildMethods.GIT,\n tabLogsDisabled: true,\n activeTab: 0,\n viewReady: false,\n isEditorDirty: false,\n };\n\n this.formValues = {};\n this.ManifestDeployTypes = KubernetesDeployManifestTypes;\n this.BuildMethods = KubernetesDeployBuildMethods;\n this.endpointId = this.EndpointProvider.endpointID();\n\n await this.getNamespaces();\n\n this.state.viewReady = true;\n\n this.$window.onbeforeunload = () => {\n if (this.formValues.EditorContent && this.state.isEditorDirty) {\n return '';\n }\n };\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n}\n\nexport default KubernetesDeployController;\nangular.module('portainer.kubernetes').controller('KubernetesDeployController', KubernetesDeployController);\n","const autoNgTemplateLoaderTemplate1 = require('./resourcePoolAccess.html');\n\nangular.module('portainer.kubernetes').component('kubernetesResourcePoolAccessView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesResourcePoolAccessController',\n controllerAs: 'ctrl',\n bindings: {\n $transition$: '<',\n },\n});\n","var path = 'app/kubernetes/views/resource-pools/access/resourcePoolAccess.html';\nvar html = \"\\n Namespaces >\\n {{ ctrl.pool.Namespace.Name }} > Access management\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Name\\n {{ ctrl.pool.Namespace.Name }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n No user nor team access has been set on the endpoint. Head over to the\\n endpoint access view to manage them.\\n \\n 0\\\"\\n input-model=\\\"ctrl.availableUsersAndTeams\\\"\\n output-model=\\\"ctrl.formValues.multiselectOutput\\\"\\n button-label=\\\"icon '-' Name\\\"\\n item-label=\\\"icon '-' Name\\\"\\n tick-property=\\\"ticked\\\"\\n helper-elements=\\\"filter\\\"\\n search-property=\\\"Name\\\"\\n translation=\\\"{nothingSelected: 'Select one or more users and/or teams', search: 'Search...'}\\\"\\n >\\n \\n
    \\n
    \\n\\n \\n
    \\n
    \\n \\n Create access\\n Creating access...\\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\nimport _ from 'lodash-es';\nimport { KubernetesPortainerConfigMapConfigName, KubernetesPortainerConfigMapNamespace, KubernetesPortainerConfigMapAccessKey } from 'Kubernetes/models/config-map/models';\nimport { UserAccessViewModel, TeamAccessViewModel } from 'Portainer/models/access';\nimport KubernetesConfigMapHelper from 'Kubernetes/helpers/configMapHelper';\n\nclass KubernetesResourcePoolAccessController {\n /* @ngInject */\n constructor($async, $state, Notifications, KubernetesResourcePoolService, KubernetesConfigMapService, EndpointProvider, EndpointService, GroupService, AccessService) {\n this.$async = $async;\n this.$state = $state;\n this.Notifications = Notifications;\n this.KubernetesResourcePoolService = KubernetesResourcePoolService;\n this.KubernetesConfigMapService = KubernetesConfigMapService;\n\n this.EndpointProvider = EndpointProvider;\n this.EndpointService = EndpointService;\n this.GroupService = GroupService;\n this.AccessService = AccessService;\n\n this.onInit = this.onInit.bind(this);\n this.authorizeAccessAsync = this.authorizeAccessAsync.bind(this);\n this.unauthorizeAccessAsync = this.unauthorizeAccessAsync.bind(this);\n\n this.unauthorizeAccess = this.unauthorizeAccess.bind(this);\n }\n\n initAccessConfigMap(configMap) {\n configMap.Name = KubernetesPortainerConfigMapConfigName;\n configMap.Namespace = KubernetesPortainerConfigMapNamespace;\n configMap.Data[KubernetesPortainerConfigMapAccessKey] = {};\n return configMap;\n }\n\n /**\n * Init\n */\n async onInit() {\n this.state = {\n actionInProgress: false,\n viewReady: false,\n };\n\n this.formValues = {\n multiselectOutput: [],\n };\n\n this.endpointId = this.EndpointProvider.endpointID();\n\n try {\n const name = this.$transition$.params().id;\n let [endpoint, pool, configMap] = await Promise.all([\n this.EndpointService.endpoint(this.endpointId),\n this.KubernetesResourcePoolService.get(name),\n this.KubernetesConfigMapService.getAccess(KubernetesPortainerConfigMapNamespace, KubernetesPortainerConfigMapConfigName),\n ]);\n const group = await this.GroupService.group(endpoint.GroupId);\n const roles = [];\n const endpointAccesses = await this.AccessService.accesses(endpoint, group, roles);\n this.pool = pool;\n if (configMap.Id === 0) {\n configMap = this.initAccessConfigMap(configMap);\n }\n configMap = KubernetesConfigMapHelper.parseJSONData(configMap);\n\n this.authorizedUsersAndTeams = [];\n this.accessConfigMap = configMap;\n const poolAccesses = configMap.Data[KubernetesPortainerConfigMapAccessKey][name];\n if (poolAccesses) {\n this.authorizedUsersAndTeams = _.filter(endpointAccesses.authorizedUsersAndTeams, (item) => {\n if (item instanceof UserAccessViewModel && poolAccesses.UserAccessPolicies) {\n return poolAccesses.UserAccessPolicies[item.Id] !== undefined;\n } else if (item instanceof TeamAccessViewModel && poolAccesses.TeamAccessPolicies) {\n return poolAccesses.TeamAccessPolicies[item.Id] !== undefined;\n }\n return false;\n });\n }\n this.availableUsersAndTeams = _.without(endpointAccesses.authorizedUsersAndTeams, ...this.authorizedUsersAndTeams);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve namespace information');\n } finally {\n this.state.viewReady = true;\n }\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n\n /**\n * Authorize access\n */\n async authorizeAccessAsync() {\n try {\n this.state.actionInProgress = true;\n const newAccesses = _.concat(this.authorizedUsersAndTeams, this.formValues.multiselectOutput);\n const accessConfigMap = KubernetesConfigMapHelper.modifiyNamespaceAccesses(angular.copy(this.accessConfigMap), this.pool.Namespace.Name, newAccesses);\n await this.KubernetesConfigMapService.updateAccess(accessConfigMap);\n this.Notifications.success('Access successfully created');\n this.$state.reload();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to create accesses');\n }\n }\n\n authorizeAccess() {\n return this.$async(this.authorizeAccessAsync);\n }\n\n /**\n *\n */\n async unauthorizeAccessAsync(selectedItems) {\n try {\n this.state.actionInProgress = true;\n const newAccesses = _.without(this.authorizedUsersAndTeams, ...selectedItems);\n const accessConfigMap = KubernetesConfigMapHelper.modifiyNamespaceAccesses(angular.copy(this.accessConfigMap), this.pool.Namespace.Name, newAccesses);\n await this.KubernetesConfigMapService.updateAccess(accessConfigMap);\n this.Notifications.success('Access successfully removed');\n this.$state.reload();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to remove accesses');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n unauthorizeAccess(selectedItems) {\n return this.$async(this.unauthorizeAccessAsync, selectedItems);\n }\n}\n\nexport default KubernetesResourcePoolAccessController;\nangular.module('portainer.kubernetes').controller('KubernetesResourcePoolAccessController', KubernetesResourcePoolAccessController);\n","const autoNgTemplateLoaderTemplate1 = require('./createResourcePool.html');\n\nangular.module('portainer.kubernetes').component('kubernetesCreateResourcePoolView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesCreateResourcePoolController',\n controllerAs: 'ctrl',\n});\n","var path = 'app/kubernetes/views/resource-pools/create/createResourcePool.html';\nvar html = \"\\n Namespaces > Create a namespace\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n

    This field must consist of lower case alphanumeric characters, '-' or '.', and must start and end\\n with an alphanumeric character.\\n

    \\n

    A namespace with the same name already exists.

    \\n
    \\n
    \\n \\n\\n
    \\n Quota\\n
    \\n \\n \\n
    \\n
    \\n

    \\n \\n A namespace segments the underlying physical Kubernetes cluster into smaller virtual clusters. You should assign a capped limit of resources to this namespace or\\n disable for the safe operation of your platform.\\n

    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n

    At least a single limit must be set for the quota to be valid.

    \\n
    \\n
    \\n \\n
    \\n
    \\n Resource limits\\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n

    \\n Maximum memory usage (MB)\\n

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Value must be between {{ ctrl.defaults.MemoryLimit }} and {{ ctrl.state.sliderMaxMemory }}\\n

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n

    \\n Maximum CPU usage\\n

    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n\\n \\n
    \\n Load balancers\\n
    \\n\\n
    \\n \\n \\n You can set a quota on the amount of external load balancers that can be created inside this namespace. Set this quota to 0 to effectively disable the use of load\\n balancers in this namespace.\\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n This feature is available in Portainer Business Edition.\\n \\n
    \\n
    \\n \\n\\n \\n
    \\n Storages\\n
    \\n\\n
    \\n \\n \\n Quotas can be set on each storage option to prevent users from exceeding a specific threshold when deploying applications. You can set a quota to 0 to effectively\\n prevent the usage of a specific storage option inside this namespace.\\n \\n
    \\n
    \\n \\n standard\\n
    \\n
    \\n
    \\n \\n \\n \\n \\n This feature is available in\\n Portainer Business Edition.\\n \\n
    \\n
    \\n \\n\\n
    \\n
    \\n Ingresses\\n
    \\n \\n
    \\n
    \\n The ingress feature must be enabled in the\\n endpoint configuration view to be able to register ingresses inside this\\n namespace.\\n
    \\n
    \\n\\n
    0\\\">\\n
    \\n

    \\n \\n Enable and configure ingresses available to users when deploying applications.\\n

    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n {{ ic.IngressClass.Name }}\\n
    \\n
    \\n\\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n \\n \\n add hostname\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n Hostname\\n \\n
    \\n
    0\\\">\\n \\n
    \\n
    \\n \\n \\n

    Hostname is required.

    \\n
    \\n

    \\n This hostname is already used.\\n

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n\\n
    \\n

    \\n \\n You can specify a list of annotations that will be associated to the ingress.\\n

    \\n
    \\n\\n
    \\n \\n \\n add annotation\\n \\n
    \\n\\n
    \\n
    \\n
    \\n Key\\n \\n
    \\n
    \\n Value\\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n\\n \\n \\n \\n\\n
    \\n Actions\\n
    \\n \\n
    \\n
    \\n \\n Create namespace\\n Creation in progress...\\n \\n
    \\n
    \\n\\n \\n \\n \\n \\n
    \\n
    \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\nimport _ from 'lodash-es';\nimport filesizeParser from 'filesize-parser';\nimport { KubernetesResourceQuotaDefaults } from 'Kubernetes/models/resource-quota/models';\nimport KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';\nimport {\n KubernetesResourcePoolFormValues,\n KubernetesResourcePoolIngressClassAnnotationFormValue,\n KubernetesResourcePoolIngressClassHostFormValue,\n} from 'Kubernetes/models/resource-pool/formValues';\nimport { KubernetesIngressConverter } from 'Kubernetes/ingress/converter';\nimport KubernetesFormValidationHelper from 'Kubernetes/helpers/formValidationHelper';\nimport { KubernetesFormValidationReferences } from 'Kubernetes/models/application/formValues';\nimport { KubernetesIngressClassTypes } from 'Kubernetes/ingress/constants';\n\nclass KubernetesCreateResourcePoolController {\n /* #region CONSTRUCTOR */\n /* @ngInject */\n constructor($async, $state, Notifications, KubernetesNodeService, KubernetesResourcePoolService, KubernetesIngressService, Authentication, EndpointProvider) {\n this.$async = $async;\n this.$state = $state;\n this.Notifications = Notifications;\n this.Authentication = Authentication;\n this.EndpointProvider = EndpointProvider;\n\n this.KubernetesNodeService = KubernetesNodeService;\n this.KubernetesResourcePoolService = KubernetesResourcePoolService;\n this.KubernetesIngressService = KubernetesIngressService;\n\n this.IngressClassTypes = KubernetesIngressClassTypes;\n\n this.onInit = this.onInit.bind(this);\n this.createResourcePoolAsync = this.createResourcePoolAsync.bind(this);\n this.getResourcePoolsAsync = this.getResourcePoolsAsync.bind(this);\n this.getIngressesAsync = this.getIngressesAsync.bind(this);\n }\n /* #endregion */\n\n onChangeIngressHostname() {\n const state = this.state.duplicates.ingressHosts;\n const hosts = _.flatMap(this.formValues.IngressClasses, 'Hosts');\n const hostnames = _.map(hosts, 'Host');\n const hostnamesWithoutRemoved = _.filter(hostnames, (h) => !h.NeedsDeletion);\n const allHosts = _.flatMap(this.allIngresses, 'Hosts');\n const formDuplicates = KubernetesFormValidationHelper.getDuplicates(hostnamesWithoutRemoved);\n _.forEach(hostnames, (host, idx) => {\n if (host !== undefined && _.includes(allHosts, host)) {\n formDuplicates[idx] = host;\n }\n });\n const duplicates = {};\n let count = 0;\n _.forEach(this.formValues.IngressClasses, (ic) => {\n duplicates[ic.IngressClass.Name] = {};\n _.forEach(ic.Hosts, (hostFV, hostIdx) => {\n if (hostFV.Host === formDuplicates[count]) {\n duplicates[ic.IngressClass.Name][hostIdx] = hostFV.Host;\n }\n count++;\n });\n });\n state.refs = duplicates;\n state.hasRefs = false;\n _.forIn(duplicates, (value) => {\n if (Object.keys(value).length > 0) {\n state.hasRefs = true;\n }\n });\n }\n\n addHostname(ingressClass) {\n ingressClass.Hosts.push(new KubernetesResourcePoolIngressClassHostFormValue());\n }\n\n removeHostname(ingressClass, index) {\n ingressClass.Hosts.splice(index, 1);\n this.onChangeIngressHostname();\n }\n\n /* #region ANNOTATIONS MANAGEMENT */\n addAnnotation(ingressClass) {\n ingressClass.Annotations.push(new KubernetesResourcePoolIngressClassAnnotationFormValue());\n }\n\n removeAnnotation(ingressClass, index) {\n ingressClass.Annotations.splice(index, 1);\n }\n /* #endregion */\n\n isCreateButtonDisabled() {\n return this.state.actionInProgress || (this.formValues.HasQuota && !this.isQuotaValid()) || this.state.isAlreadyExist || this.state.duplicates.ingressHosts.hasRefs;\n }\n\n onChangeName() {\n this.state.isAlreadyExist = _.find(this.resourcePools, (resourcePool) => resourcePool.Namespace.Name === this.formValues.Name) !== undefined;\n }\n\n isQuotaValid() {\n if (\n this.state.sliderMaxCpu < this.formValues.CpuLimit ||\n this.state.sliderMaxMemory < this.formValues.MemoryLimit ||\n (this.formValues.CpuLimit === 0 && this.formValues.MemoryLimit === 0)\n ) {\n return false;\n }\n return true;\n }\n\n checkDefaults() {\n if (this.formValues.CpuLimit < this.defaults.CpuLimit) {\n this.formValues.CpuLimit = this.defaults.CpuLimit;\n }\n if (this.formValues.MemoryLimit < KubernetesResourceReservationHelper.megaBytesValue(this.defaults.MemoryLimit)) {\n this.formValues.MemoryLimit = KubernetesResourceReservationHelper.megaBytesValue(this.defaults.MemoryLimit);\n }\n }\n\n /* #region CREATE NAMESPACE */\n async createResourcePoolAsync() {\n this.state.actionInProgress = true;\n try {\n this.checkDefaults();\n const owner = this.Authentication.getUserDetails().username;\n this.formValues.Owner = owner;\n await this.KubernetesResourcePoolService.create(this.formValues);\n this.Notifications.success('Namespace successfully created', this.formValues.Name);\n this.$state.go('kubernetes.resourcePools');\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to create namespace');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n createResourcePool() {\n return this.$async(this.createResourcePoolAsync);\n }\n /* #endregion */\n\n /* #region GET INGRESSES */\n async getIngressesAsync() {\n try {\n this.allIngresses = await this.KubernetesIngressService.get();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve ingresses.');\n }\n }\n\n getIngresses() {\n return this.$async(this.getIngressesAsync);\n }\n /* #endregion */\n\n /* #region GET NAMESPACES */\n async getResourcePoolsAsync() {\n try {\n this.resourcePools = await this.KubernetesResourcePoolService.get();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve namespaces');\n }\n }\n\n getResourcePools() {\n return this.$async(this.getResourcePoolsAsync);\n }\n /* #endregion */\n\n /* #region ON INIT */\n async onInit() {\n try {\n const endpoint = this.EndpointProvider.currentEndpoint();\n this.endpoint = endpoint;\n this.defaults = KubernetesResourceQuotaDefaults;\n this.formValues = new KubernetesResourcePoolFormValues(this.defaults);\n this.formValues.HasQuota = true;\n\n this.state = {\n actionInProgress: false,\n sliderMaxMemory: 0,\n sliderMaxCpu: 0,\n viewReady: false,\n isAlreadyExist: false,\n canUseIngress: endpoint.Kubernetes.Configuration.IngressClasses.length,\n duplicates: {\n ingressHosts: new KubernetesFormValidationReferences(),\n },\n };\n\n const nodes = await this.KubernetesNodeService.get();\n\n _.forEach(nodes, (item) => {\n this.state.sliderMaxMemory += filesizeParser(item.Memory);\n this.state.sliderMaxCpu += item.CPU;\n });\n this.state.sliderMaxMemory = KubernetesResourceReservationHelper.megaBytesValue(this.state.sliderMaxMemory);\n await this.getResourcePools();\n if (this.state.canUseIngress) {\n await this.getIngresses();\n const ingressClasses = endpoint.Kubernetes.Configuration.IngressClasses;\n this.formValues.IngressClasses = KubernetesIngressConverter.ingressClassesToFormValues(ingressClasses);\n }\n _.forEach(this.formValues.IngressClasses, (ic) => {\n if (ic.Hosts.length === 0) {\n ic.Hosts.push(new KubernetesResourcePoolIngressClassHostFormValue());\n }\n });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to load view data');\n } finally {\n this.state.viewReady = true;\n }\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n /* #endregion */\n}\n\nexport default KubernetesCreateResourcePoolController;\nangular.module('portainer.kubernetes').controller('KubernetesCreateResourcePoolController', KubernetesCreateResourcePoolController);\n","import _ from 'lodash-es';\n\nangular.module('portainer.kubernetes').controller('KubernetesResourcePoolIngressesDatatableController', function ($scope, $controller, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n this.state = Object.assign(this.state, {\n expandedItems: [],\n expandAll: false,\n });\n\n this.onSettingsRepeaterChange = function () {\n DatatableService.setDataTableSettings(this.tableKey, this.settings);\n };\n\n this.expandItem = function (item, expanded) {\n if (!this.itemCanExpand(item)) {\n return;\n }\n\n item.Expanded = expanded;\n if (!expanded) {\n item.Highlighted = false;\n }\n };\n\n this.itemCanExpand = function (item) {\n return item.Paths.length > 0;\n };\n\n this.hasExpandableItems = function () {\n return _.filter(this.state.filteredDataSet, (item) => this.itemCanExpand(item)).length;\n };\n\n this.expandAll = function () {\n this.state.expandAll = !this.state.expandAll;\n _.forEach(this.state.filteredDataSet, (item) => {\n if (this.itemCanExpand(item)) {\n this.expandItem(item, this.state.expandAll);\n }\n });\n };\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n});\n","const autoNgTemplateLoaderTemplate1 = require('./template.html');\n\nangular.module('portainer.kubernetes').component('kubernetesResourcePoolIngressesDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesResourcePoolIngressesDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n refreshCallback: '<',\n },\n});\n","var path = 'app/kubernetes/views/resource-pools/edit/components/ingresses-datatable/template.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n Table settings\\n
    \\n
    \\n
    \\n Table settings\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n Ingress\\n \\n \\n \\n
    \\n \\n {{ item.Name }}\\n
    \\n \\n {{ path.Host ? path.Host : path.IP }}{{ path.Path }}\\n \\n \\n \\n {{ path.ApplicationName }}\\n \\n unused\\n
    Loading...
    No ingresses available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./resourcePool.html');\n\nangular.module('portainer.kubernetes').component('kubernetesResourcePoolView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesResourcePoolController',\n controllerAs: 'ctrl',\n bindings: {\n $transition$: '<',\n },\n});\n","var path = 'app/kubernetes/views/resource-pools/edit/resourcePool.html';\nvar html = \"\\n Namespaces > {{ ctrl.pool.Namespace.Name }}\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n \\n \\n Namespace \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    Quota
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n

    At least a single limit must be set for the quota to be valid.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n
    \\n Resource limits\\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n

    \\n Memory limit (MB)\\n

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Value must be between {{ ctrl.ResourceQuotaDefaults.MemoryLimit }} and\\n {{ ctrl.state.sliderMaxMemory }}\\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n

    \\n Maximum CPU usage\\n

    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n Load balancers\\n
    \\n\\n
    \\n \\n \\n You can set a quota on the amount of external load balancers that can be created inside this namespace. Set this quota to 0 to effectively disable the use of\\n load balancers in this namespace.\\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n This feature is available in Portainer Business Edition.\\n \\n
    \\n
    \\n \\n
    \\n
    \\n Ingresses\\n
    \\n \\n
    \\n
    \\n The ingress feature must be enabled in the\\n endpoint configuration view to be able to register ingresses inside\\n this namespace.\\n
    \\n
    \\n\\n
    0\\\">\\n
    \\n

    \\n \\n Enable and configure ingresses available to users when deploying applications.\\n

    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n {{ ic.IngressClass.Name }}\\n
    \\n
    \\n\\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n \\n \\n add hostname\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n Hostname\\n \\n
    \\n
    0\\\">\\n \\n \\n
    \\n
    \\n \\n \\n

    Hostname is required.

    \\n
    \\n

    \\n \\n This hostname is already used.\\n

    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n\\n
    \\n

    \\n \\n You can specify a list of annotations that will be associated to the ingress.\\n

    \\n
    \\n\\n
    \\n \\n \\n add annotation\\n \\n
    \\n\\n
    \\n
    \\n
    \\n Key\\n \\n
    \\n
    \\n Value\\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n Storages\\n
    \\n\\n
    \\n \\n \\n Quotas can be set on each storage option to prevent users from exceeding a specific threshold when deploying applications. You can set a quota to 0 to\\n effectively prevent the usage of a specific storage option inside this namespace.\\n \\n
    \\n
    \\n \\n standard\\n
    \\n
    \\n
    \\n \\n \\n \\n \\n This feature is available in\\n Portainer Business Edition.\\n \\n
    \\n
    \\n \\n\\n \\n \\n \\n\\n \\n
    \\n Actions\\n
    \\n
    \\n
    \\n \\n Update namespace\\n Update in progress...\\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n Events\\n
    \\n \\n {{ ctrl.state.eventWarningCount }} warning(s)\\n
    \\n
    \\n \\n
    \\n \\n YAML \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n\\n
    0\\\">\\n
    \\n \\n \\n
    \\n
    \\n\\n
    0\\\">\\n
    \\n \\n \\n
    \\n
    \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\nimport _ from 'lodash-es';\nimport filesizeParser from 'filesize-parser';\nimport { KubernetesResourceQuota, KubernetesResourceQuotaDefaults } from 'Kubernetes/models/resource-quota/models';\nimport KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';\nimport KubernetesEventHelper from 'Kubernetes/helpers/eventHelper';\nimport {\n KubernetesResourcePoolFormValues,\n KubernetesResourcePoolIngressClassAnnotationFormValue,\n KubernetesResourcePoolIngressClassHostFormValue,\n} from 'Kubernetes/models/resource-pool/formValues';\nimport { KubernetesIngressConverter } from 'Kubernetes/ingress/converter';\nimport { KubernetesFormValidationReferences } from 'Kubernetes/models/application/formValues';\nimport KubernetesFormValidationHelper from 'Kubernetes/helpers/formValidationHelper';\nimport { KubernetesIngressClassTypes } from 'Kubernetes/ingress/constants';\nimport KubernetesResourceQuotaConverter from 'Kubernetes/converters/resourceQuota';\n\nclass KubernetesResourcePoolController {\n /* #region CONSTRUCTOR */\n /* @ngInject */\n constructor(\n $async,\n $state,\n Authentication,\n Notifications,\n LocalStorage,\n EndpointProvider,\n ModalService,\n KubernetesNodeService,\n KubernetesResourceQuotaService,\n KubernetesResourcePoolService,\n KubernetesEventService,\n KubernetesPodService,\n KubernetesApplicationService,\n KubernetesNamespaceHelper,\n KubernetesIngressService,\n KubernetesVolumeService\n ) {\n this.$async = $async;\n this.$state = $state;\n this.Notifications = Notifications;\n this.Authentication = Authentication;\n this.LocalStorage = LocalStorage;\n this.EndpointProvider = EndpointProvider;\n this.ModalService = ModalService;\n\n this.KubernetesNodeService = KubernetesNodeService;\n this.KubernetesResourceQuotaService = KubernetesResourceQuotaService;\n this.KubernetesResourcePoolService = KubernetesResourcePoolService;\n this.KubernetesEventService = KubernetesEventService;\n this.KubernetesPodService = KubernetesPodService;\n this.KubernetesApplicationService = KubernetesApplicationService;\n this.KubernetesNamespaceHelper = KubernetesNamespaceHelper;\n this.KubernetesIngressService = KubernetesIngressService;\n this.KubernetesVolumeService = KubernetesVolumeService;\n\n this.IngressClassTypes = KubernetesIngressClassTypes;\n this.ResourceQuotaDefaults = KubernetesResourceQuotaDefaults;\n\n this.onInit = this.onInit.bind(this);\n this.createResourceQuotaAsync = this.createResourceQuotaAsync.bind(this);\n this.updateResourcePoolAsync = this.updateResourcePoolAsync.bind(this);\n this.getEvents = this.getEvents.bind(this);\n this.getApplications = this.getApplications.bind(this);\n this.getIngresses = this.getIngresses.bind(this);\n }\n /* #endregion */\n\n /* #region ANNOTATIONS MANAGEMENT */\n addAnnotation(ingressClass) {\n ingressClass.Annotations.push(new KubernetesResourcePoolIngressClassAnnotationFormValue());\n }\n\n removeAnnotation(ingressClass, index) {\n ingressClass.Annotations.splice(index, 1);\n this.onChangeIngressHostname();\n }\n /* #endregion */\n\n /* #region INGRESS MANAGEMENT */\n onChangeIngressHostname() {\n const state = this.state.duplicates.ingressHosts;\n const otherIngresses = _.without(this.allIngresses, ...this.ingresses);\n const allHosts = _.flatMap(otherIngresses, 'Hosts');\n\n const hosts = _.flatMap(this.formValues.IngressClasses, 'Hosts');\n const hostsWithoutRemoved = _.filter(hosts, { NeedsDeletion: false });\n const hostnames = _.map(hostsWithoutRemoved, 'Host');\n const formDuplicates = KubernetesFormValidationHelper.getDuplicates(hostnames);\n _.forEach(hostnames, (host, idx) => {\n if (host !== undefined && _.includes(allHosts, host)) {\n formDuplicates[idx] = host;\n }\n });\n const duplicatedHostnames = Object.values(formDuplicates);\n state.hasRefs = false;\n _.forEach(this.formValues.IngressClasses, (ic) => {\n _.forEach(ic.Hosts, (hostFV) => {\n if (_.includes(duplicatedHostnames, hostFV.Host) && hostFV.NeedsDeletion === false) {\n hostFV.Duplicate = true;\n state.hasRefs = true;\n } else {\n hostFV.Duplicate = false;\n }\n });\n });\n }\n\n addHostname(ingressClass) {\n ingressClass.Hosts.push(new KubernetesResourcePoolIngressClassHostFormValue());\n }\n\n removeHostname(ingressClass, index) {\n if (!ingressClass.Hosts[index].IsNew) {\n ingressClass.Hosts[index].NeedsDeletion = true;\n } else {\n ingressClass.Hosts.splice(index, 1);\n }\n this.onChangeIngressHostname();\n }\n\n restoreHostname(host) {\n if (!host.IsNew) {\n host.NeedsDeletion = false;\n }\n }\n /* #endregion*/\n\n selectTab(index) {\n this.LocalStorage.storeActiveTab('resourcePool', index);\n }\n\n isUpdateButtonDisabled() {\n return this.state.actionInProgress || (this.formValues.HasQuota && !this.isQuotaValid()) || this.state.duplicates.ingressHosts.hasRefs;\n }\n\n isQuotaValid() {\n if (\n this.state.sliderMaxCpu < this.formValues.CpuLimit ||\n this.state.sliderMaxMemory < this.formValues.MemoryLimit ||\n (this.formValues.CpuLimit === 0 && this.formValues.MemoryLimit === 0)\n ) {\n return false;\n }\n return true;\n }\n\n checkDefaults() {\n if (this.formValues.CpuLimit < KubernetesResourceQuotaDefaults.CpuLimit) {\n this.formValues.CpuLimit = KubernetesResourceQuotaDefaults.CpuLimit;\n }\n if (this.formValues.MemoryLimit < KubernetesResourceReservationHelper.megaBytesValue(KubernetesResourceQuotaDefaults.MemoryLimit)) {\n this.formValues.MemoryLimit = KubernetesResourceReservationHelper.megaBytesValue(KubernetesResourceQuotaDefaults.MemoryLimit);\n }\n }\n\n showEditor() {\n this.state.showEditorTab = true;\n this.selectTab(2);\n }\n\n async createResourceQuotaAsync(namespace, owner, cpuLimit, memoryLimit) {\n const quota = new KubernetesResourceQuota(namespace);\n quota.CpuLimit = cpuLimit;\n quota.MemoryLimit = memoryLimit;\n quota.ResourcePoolName = namespace;\n quota.ResourcePoolOwner = owner;\n await this.KubernetesResourceQuotaService.create(quota);\n }\n\n hasResourceQuotaBeenReduced() {\n if (this.formValues.HasQuota && this.oldQuota) {\n const cpuLimit = this.formValues.CpuLimit;\n const memoryLimit = KubernetesResourceReservationHelper.bytesValue(this.formValues.MemoryLimit);\n if (cpuLimit < this.oldQuota.CpuLimit || memoryLimit < this.oldQuota.MemoryLimit) {\n return true;\n }\n }\n return false;\n }\n\n /* #region UPDATE NAMESPACE */\n async updateResourcePoolAsync() {\n this.state.actionInProgress = true;\n try {\n this.checkDefaults();\n await this.KubernetesResourcePoolService.patch(this.savedFormValues, this.formValues);\n this.Notifications.success('Namespace successfully updated', this.pool.Namespace.Name);\n this.$state.reload();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to create namespace');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n updateResourcePool() {\n const willBeDeleted = _.filter(this.formValues.IngressClasses, { WasSelected: true, Selected: false });\n const warnings = {\n quota: this.hasResourceQuotaBeenReduced(),\n ingress: willBeDeleted.length !== 0,\n };\n\n if (warnings.quota || warnings.ingress) {\n const messages = {\n quota:\n 'Reducing the quota assigned to an \"in-use\" namespace may have unintended consequences, including preventing running applications from functioning correctly and potentially even blocking them from running at all.',\n ingress: 'Deactivating ingresses may cause applications to be unaccessible. All ingress configurations from affected applications will be removed.',\n };\n const displayedMessage = `${warnings.quota ? messages.quota : ''}${warnings.quota && warnings.ingress ? '

    ' : ''}\n ${warnings.ingress ? messages.ingress : ''}

    Do you wish to continue?`;\n this.ModalService.confirmUpdate(displayedMessage, (confirmed) => {\n if (confirmed) {\n return this.$async(this.updateResourcePoolAsync);\n }\n });\n } else {\n return this.$async(this.updateResourcePoolAsync);\n }\n }\n /* #endregion */\n\n hasEventWarnings() {\n return this.state.eventWarningCount;\n }\n\n /* #region GET EVENTS */\n getEvents() {\n return this.$async(async () => {\n try {\n this.state.eventsLoading = true;\n this.events = await this.KubernetesEventService.get(this.pool.Namespace.Name);\n this.state.eventWarningCount = KubernetesEventHelper.warningCount(this.events);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve namespace related events');\n } finally {\n this.state.eventsLoading = false;\n }\n });\n }\n /* #endregion */\n\n /* #region GET APPLICATIONS */\n getApplications() {\n return this.$async(async () => {\n try {\n this.state.applicationsLoading = true;\n this.applications = await this.KubernetesApplicationService.get(this.pool.Namespace.Name);\n this.applications = _.map(this.applications, (app) => {\n const resourceReservation = KubernetesResourceReservationHelper.computeResourceReservation(app.Pods);\n app.CPU = resourceReservation.CPU;\n app.Memory = resourceReservation.Memory;\n return app;\n });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve applications.');\n } finally {\n this.state.applicationsLoading = false;\n }\n });\n }\n /* #endregion */\n\n /* #region GET INGRESSES */\n getIngresses() {\n return this.$async(async () => {\n this.state.ingressesLoading = true;\n try {\n const namespace = this.pool.Namespace.Name;\n this.allIngresses = await this.KubernetesIngressService.get();\n this.ingresses = _.filter(this.allIngresses, { Namespace: namespace });\n _.forEach(this.ingresses, (ing) => {\n ing.Namespace = namespace;\n _.forEach(ing.Paths, (path) => {\n const application = _.find(this.applications, { ServiceName: path.ServiceName });\n path.ApplicationName = application && application.Name ? application.Name : '-';\n });\n });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve ingresses.');\n } finally {\n this.state.ingressesLoading = false;\n }\n });\n }\n /* #endregion */\n\n /* #region ON INIT */\n async onInit() {\n try {\n const endpoint = this.EndpointProvider.currentEndpoint();\n this.endpoint = endpoint;\n this.isAdmin = this.Authentication.isAdmin();\n\n this.state = {\n actionInProgress: false,\n sliderMaxMemory: 0,\n sliderMaxCpu: 0,\n cpuUsage: 0,\n cpuUsed: 0,\n memoryUsage: 0,\n memoryUsed: 0,\n activeTab: 0,\n currentName: this.$state.$current.name,\n showEditorTab: false,\n eventsLoading: true,\n applicationsLoading: true,\n ingressesLoading: true,\n viewReady: false,\n eventWarningCount: 0,\n canUseIngress: endpoint.Kubernetes.Configuration.IngressClasses.length,\n duplicates: {\n ingressHosts: new KubernetesFormValidationReferences(),\n },\n };\n\n this.state.activeTab = this.LocalStorage.getActiveTab('resourcePool');\n\n const name = this.$transition$.params().id;\n\n const [nodes, pools] = await Promise.all([this.KubernetesNodeService.get(), this.KubernetesResourcePoolService.get()]);\n\n this.pool = _.find(pools, { Namespace: { Name: name } });\n this.formValues = new KubernetesResourcePoolFormValues(KubernetesResourceQuotaDefaults);\n this.formValues.Name = this.pool.Namespace.Name;\n\n _.forEach(nodes, (item) => {\n this.state.sliderMaxMemory += filesizeParser(item.Memory);\n this.state.sliderMaxCpu += item.CPU;\n });\n this.state.sliderMaxMemory = KubernetesResourceReservationHelper.megaBytesValue(this.state.sliderMaxMemory);\n\n const quota = this.pool.Quota;\n if (quota) {\n this.oldQuota = angular.copy(quota);\n this.formValues = KubernetesResourceQuotaConverter.quotaToResourcePoolFormValues(quota);\n this.state.cpuUsed = quota.CpuLimitUsed;\n this.state.memoryUsed = KubernetesResourceReservationHelper.megaBytesValue(quota.MemoryLimitUsed);\n }\n\n this.isEditable = !this.KubernetesNamespaceHelper.isSystemNamespace(this.pool.Namespace.Name);\n if (this.pool.Namespace.Name === 'default') {\n this.isEditable = false;\n }\n\n await this.getEvents();\n await this.getApplications();\n\n if (this.state.canUseIngress) {\n await this.getIngresses();\n const ingressClasses = endpoint.Kubernetes.Configuration.IngressClasses;\n this.formValues.IngressClasses = KubernetesIngressConverter.ingressClassesToFormValues(ingressClasses, this.ingresses);\n _.forEach(this.formValues.IngressClasses, (ic) => {\n if (ic.Hosts.length === 0) {\n ic.Hosts.push(new KubernetesResourcePoolIngressClassHostFormValue());\n }\n });\n }\n this.savedFormValues = angular.copy(this.formValues);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to load view data');\n } finally {\n this.state.viewReady = true;\n }\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n /* #endregion */\n\n $onDestroy() {\n if (this.state.currentName !== this.$state.$current.name) {\n this.LocalStorage.storeActiveTab('resourcePool', 0);\n }\n }\n}\n\nexport default KubernetesResourcePoolController;\nangular.module('portainer.kubernetes').controller('KubernetesResourcePoolController', KubernetesResourcePoolController);\n","const autoNgTemplateLoaderTemplate1 = require('./resourcePools.html');\n\nangular.module('portainer.kubernetes').component('kubernetesResourcePoolsView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesResourcePoolsController',\n controllerAs: 'ctrl',\n});\n","var path = 'app/kubernetes/views/resource-pools/resourcePools.html';\nvar html = \"\\n Namespaces\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\n\nclass KubernetesResourcePoolsController {\n /* @ngInject */\n constructor($async, $state, Notifications, ModalService, KubernetesResourcePoolService) {\n this.$async = $async;\n this.$state = $state;\n this.Notifications = Notifications;\n this.ModalService = ModalService;\n this.KubernetesResourcePoolService = KubernetesResourcePoolService;\n\n this.onInit = this.onInit.bind(this);\n this.getResourcePools = this.getResourcePools.bind(this);\n this.getResourcePoolsAsync = this.getResourcePoolsAsync.bind(this);\n this.removeAction = this.removeAction.bind(this);\n this.removeActionAsync = this.removeActionAsync.bind(this);\n }\n\n async removeActionAsync(selectedItems) {\n let actionCount = selectedItems.length;\n for (const pool of selectedItems) {\n try {\n await this.KubernetesResourcePoolService.delete(pool);\n this.Notifications.success('Namespace successfully removed', pool.Namespace.Name);\n const index = this.resourcePools.indexOf(pool);\n this.resourcePools.splice(index, 1);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to remove namespace');\n } finally {\n --actionCount;\n if (actionCount === 0) {\n this.$state.reload();\n }\n }\n }\n }\n\n removeAction(selectedItems) {\n this.ModalService.confirmDeletion(\n 'Do you want to remove the selected namespace(s)? All the resources associated to the selected namespace(s) will be removed too.',\n (confirmed) => {\n if (confirmed) {\n return this.$async(this.removeActionAsync, selectedItems);\n }\n }\n );\n }\n\n async getResourcePoolsAsync() {\n try {\n this.resourcePools = await this.KubernetesResourcePoolService.get();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retreive namespaces');\n }\n }\n\n getResourcePools() {\n return this.$async(this.getResourcePoolsAsync);\n }\n\n async onInit() {\n this.state = {\n viewReady: false,\n };\n\n await this.getResourcePools();\n\n this.state.viewReady = true;\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n}\n\nexport default KubernetesResourcePoolsController;\nangular.module('portainer.kubernetes').controller('KubernetesResourcePoolsController', KubernetesResourcePoolsController);\n","const autoNgTemplateLoaderTemplate1 = require('./logs.html');\n\nangular.module('portainer.kubernetes').component('kubernetesStackLogsView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesStackLogsController',\n controllerAs: 'ctrl',\n bindings: {\n $transition$: '<',\n },\n});\n","var path = 'app/kubernetes/views/stacks/logs/logs.html';\nvar html = \"\\n Namespaces\\n > {{ ctrl.state.transition.namespace }} >\\n Applications > Stacks > {{ ctrl.state.transition.name }} > Logs\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n Actions\\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n

    {{ line.AppName }} {{ line.Line }}

    No log line matching the '{{ ctrl.state.search }}' filter

    No logs available

    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import _ from 'lodash-es';\nimport angular from 'angular';\nimport $allSettled from 'Portainer/services/allSettled';\n\nconst colors = ['red', 'orange', 'lime', 'green', 'darkgreen', 'cyan', 'turquoise', 'teal', 'deepskyblue', 'blue', 'darkblue', 'slateblue', 'magenta', 'darkviolet'];\n\nclass KubernetesStackLogsController {\n /* @ngInject */\n constructor($async, $state, $interval, Notifications, KubernetesApplicationService, KubernetesPodService, FileSaver, Blob) {\n this.$async = $async;\n this.$state = $state;\n this.$interval = $interval;\n this.Notifications = Notifications;\n this.KubernetesApplicationService = KubernetesApplicationService;\n this.KubernetesPodService = KubernetesPodService;\n this.Blob = Blob;\n this.FileSaver = FileSaver;\n\n this.onInit = this.onInit.bind(this);\n this.stopRepeater = this.stopRepeater.bind(this);\n this.generateLogsPromise = this.generateLogsPromise.bind(this);\n this.generateAppPromise = this.generateAppPromise.bind(this);\n this.getStackLogsAsync = this.getStackLogsAsync.bind(this);\n }\n\n updateAutoRefresh() {\n if (this.state.autoRefresh) {\n this.setUpdateRepeater();\n return;\n }\n\n this.stopRepeater();\n }\n\n stopRepeater() {\n if (angular.isDefined(this.repeater)) {\n this.$interval.cancel(this.repeater);\n this.repeater = null;\n }\n }\n\n setUpdateRepeater() {\n this.repeater = this.$interval(this.getStackLogsAsync, this.state.refreshRate);\n }\n\n async generateLogsPromise(pod, container) {\n const res = {\n Pod: pod,\n Logs: [],\n };\n res.Logs = await this.KubernetesPodService.logs(pod.Namespace, pod.Name, container.Name);\n return res;\n }\n\n async generateAppPromise(app) {\n const res = {\n Application: app,\n Pods: [],\n };\n\n const promises = _.flatMap(_.map(app.Pods, (pod) => _.map(pod.Containers, (container) => this.generateLogsPromise(pod, container))));\n const result = await $allSettled(promises);\n res.Pods = result.fulfilled;\n return res;\n }\n\n async getStackLogsAsync() {\n try {\n const applications = await this.KubernetesApplicationService.get(this.state.transition.namespace);\n const filteredApplications = _.filter(applications, (app) => app.StackName === this.state.transition.name);\n const logsPromises = _.map(filteredApplications, this.generateAppPromise);\n const data = await Promise.all(logsPromises);\n const logs = _.flatMap(data, (app, index) => {\n return _.flatMap(app.Pods, (pod) => {\n return _.map(pod.Logs, (line) => {\n const res = {\n Color: colors[index % colors.length],\n Line: line,\n AppName: pod.Pod.Name,\n };\n return res;\n });\n });\n });\n this.stackLogs = logs;\n } catch (err) {\n this.stopRepeater();\n this.Notifications.error('Failure', err, 'Unable to retrieve application logs');\n }\n }\n\n downloadLogs() {\n const data = new this.Blob([(this.dataLogs = _.reduce(this.stackLogs, (acc, log) => acc + '\\n' + log.AppName + ' ' + log.Line, ''))]);\n this.FileSaver.saveAs(data, this.state.transition.name + '_logs.txt');\n }\n\n async onInit() {\n this.state = {\n autoRefresh: false,\n refreshRate: 30000, // 30 seconds\n search: '',\n viewReady: false,\n transition: {\n namespace: this.$transition$.params().namespace,\n name: this.$transition$.params().name,\n },\n };\n\n this.stackLogs = [];\n try {\n await this.getStackLogsAsync();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve stack logs');\n } finally {\n this.state.viewReady = true;\n }\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n\n $onDestroy() {\n this.stopRepeater();\n }\n}\n\nexport default KubernetesStackLogsController;\nangular.module('portainer.kubernetes').controller('KubernetesStackLogsController', KubernetesStackLogsController);\n","const autoNgTemplateLoaderTemplate1 = require('./summary.html');\n\nangular.module('portainer.kubernetes').component('kubernetesSummaryView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesSummaryController',\n controllerAs: '$ctrl',\n bindings: {\n formValues: '<',\n oldFormValues: '<',\n },\n});\n","var path = 'app/kubernetes/views/summary/summary.html';\nvar html = \" 0\\\"\\n>\\n Summary\\n \\n expand\\n collapse\\n \\n\\n\\n
    \\n
    \\n \\n Portainer will execute the following Kubernetes actions.\\n
    \\n\\n
    0\\\">\\n
      \\n
    • \\n {{ summary.action }}\\n {{ $ctrl.getArticle(summary.kind, summary.action) }}\\n {{ summary.kind }} named {{ summary.name }}\\n \\n of type {{ summary.type }}\\n
    • \\n
    • \\n Set the memory resources limits and requests to {{ $ctrl.state.limits.memory }}M\\n
    • \\n
    • \\n Set the CPU resources limits and requests to {{ $ctrl.state.limits.cpu }}\\n
    • \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\nimport { KubernetesConfigurationFormValues } from 'Kubernetes/models/configuration/formvalues';\nimport { KubernetesResourcePoolFormValues } from 'Kubernetes/models/resource-pool/formValues';\nimport { KubernetesApplicationFormValues } from 'Kubernetes/models/application/formValues';\nimport { KubernetesResourceActions, KubernetesResourceTypes } from 'Kubernetes/models/resource-types/models';\nimport getApplicationResources from './resources/applicationResources';\nimport getNamespaceResources from './resources/namespaceResources';\nimport getConfigurationResources from './resources/configurationResources';\n\nclass KubernetesSummaryController {\n /* @ngInject */\n constructor($scope, LocalStorage, KubernetesResourcePoolService) {\n this.LocalStorage = LocalStorage;\n this.KubernetesResourcePoolService = KubernetesResourcePoolService;\n\n this.toggleSummary = this.toggleSummary.bind(this);\n this.generateResourceSummaryList = this.generateResourceSummaryList.bind(this);\n\n // Deep-watch changes on formValues property\n $scope.$watch(\n '$ctrl.formValues',\n (formValues) => {\n this.state.resources = this.generateResourceSummaryList(formValues);\n },\n true\n );\n }\n\n getArticle(resourceType, resourceAction) {\n let article = 'a';\n if (resourceAction === KubernetesResourceActions.CREATE) {\n if (resourceType === KubernetesResourceTypes.INGRESS) {\n article = 'an';\n }\n } else {\n article = 'the';\n }\n\n return article;\n }\n\n /**\n * toggleSummary toggles the summary panel state and persists it to browser localstorage\n */\n toggleSummary() {\n this.state.expandedTemplate = !this.state.expandedTemplate;\n this.LocalStorage.storeKubernetesSummaryToggle(this.state.expandedTemplate);\n }\n\n /**\n * generateResourceSummaryList maps formValues to custom object\n * @param {object} formValues\n * @returns {object} => { action: \"string\", kind: \"string\", name: \"string\" }\n */\n generateResourceSummaryList(formValues) {\n const oldFormValues = this.oldFormValues;\n\n if (formValues instanceof KubernetesConfigurationFormValues) {\n // Configuration\n return getConfigurationResources(formValues);\n } else if (formValues instanceof KubernetesResourcePoolFormValues) {\n // Namespaces\n return getNamespaceResources(formValues, oldFormValues);\n } else if (formValues instanceof KubernetesApplicationFormValues) {\n // Applications\n\n // extract cpu and memory requests & limits for pod\n this.state.limits = { cpu: formValues.CpuLimit, memory: formValues.MemoryLimit };\n\n return getApplicationResources(formValues, oldFormValues);\n }\n\n return [];\n }\n\n $onInit() {\n const toggleValue = this.LocalStorage.getKubernetesSummaryToggle();\n const expanded = typeof toggleValue === 'boolean' ? toggleValue : true;\n\n this.state = {\n expandedTemplate: expanded,\n resources: [],\n limits: { cpu: null, memory: null },\n };\n }\n}\n\nexport default KubernetesSummaryController;\nangular.module('portainer.kubernetes').controller('KubernetesSummaryController', KubernetesSummaryController);\n","import _ from 'lodash-es';\n\nangular.module('portainer.kubernetes').controller('KubernetesVolumesStoragesDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n function ($scope, $controller, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n this.state = Object.assign(this.state, {\n expandedItems: [],\n expandAll: false,\n });\n\n this.onSettingsRepeaterChange = function () {\n DatatableService.setDataTableSettings(this.tableKey, this.settings);\n };\n\n this.expandItem = function (item, expanded) {\n if (!this.itemCanExpand(item)) {\n return;\n }\n\n item.Expanded = expanded;\n if (!expanded) {\n item.Highlighted = false;\n }\n };\n\n this.itemCanExpand = function (item) {\n return item.Volumes.length > 0;\n };\n\n this.hasExpandableItems = function () {\n return _.filter(this.state.filteredDataSet, (item) => this.itemCanExpand(item)).length;\n };\n\n this.expandAll = function () {\n this.state.expandAll = !this.state.expandAll;\n _.forEach(this.state.filteredDataSet, (item) => {\n if (this.itemCanExpand(item)) {\n this.expandItem(item, this.state.expandAll);\n }\n });\n };\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./template.html');\n\nangular.module('portainer.kubernetes').component('kubernetesVolumesStoragesDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesVolumesStoragesDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n refreshCallback: '<',\n },\n});\n","var path = 'app/kubernetes/views/volumes/components/volumes-storages-datatable/template.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n Table settings\\n
    \\n
    \\n
    \\n Table settings\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Storage\\n \\n \\n \\n \\n \\n Usage\\n \\n \\n \\n
    \\n \\n \\n \\n {{ item.Name }}{{ item.Size }}
    \\n \\n {{ vol.PersistentVolumeClaim.Name }}\\n \\n \\n {{ vol.PersistentVolumeClaim.Storage }}\\n
    Loading...
    No storage available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./volume.html');\n\nangular.module('portainer.kubernetes').component('kubernetesVolumeView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesVolumeController',\n controllerAs: 'ctrl',\n bindings: {\n $transition$: '<',\n },\n});\n","var path = 'app/kubernetes/views/volumes/edit/volume.html';\nvar html = \"\\n Namespaces >\\n {{ ctrl.volume.ResourcePool.Namespace.Name }} >\\n Volumes > {{ ctrl.volume.PersistentVolumeClaim.Name }}\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n \\n \\n Volume \\n\\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ ctrl.state.volumeSharedAccessPolicy }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Name\\n {{ ctrl.volume.PersistentVolumeClaim.Name }}\\n external\\n unused\\n
    Namespace\\n {{ ctrl.volume.ResourcePool.Namespace.Name }}\\n system\\n
    Storage{{ ctrl.volume.PersistentVolumeClaim.StorageClass.Name }}
    Shared Access Policy
    Provisioner{{ ctrl.volume.PersistentVolumeClaim.StorageClass.Provisioner ? ctrl.volume.PersistentVolumeClaim.StorageClass.Provisioner : '-' }}
    Creation date{{ ctrl.volume.PersistentVolumeClaim.CreationDate | getisodate }}
    Size\\n {{ ctrl.volume.PersistentVolumeClaim.Storage }}\\n Increase size\\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n
    \\n \\n \\n
    \\n\\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n

    The new size must be greater than the actual size.\\n

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n \\n \\n Events\\n
    \\n \\n {{ ctrl.state.eventWarningCount }} warning(s)\\n
    \\n
    \\n \\n \\n
    \\n\\n \\n YAML \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\nimport _ from 'lodash-es';\nimport KubernetesVolumeHelper from 'Kubernetes/helpers/volumeHelper';\nimport KubernetesEventHelper from 'Kubernetes/helpers/eventHelper';\nimport { KubernetesStorageClassAccessPolicies } from 'Kubernetes/models/storage-class/models';\nimport filesizeParser from 'filesize-parser';\n\nclass KubernetesVolumeController {\n /* @ngInject */\n constructor(\n $async,\n $state,\n Notifications,\n LocalStorage,\n KubernetesVolumeService,\n KubernetesEventService,\n KubernetesNamespaceHelper,\n KubernetesApplicationService,\n KubernetesPersistentVolumeClaimService,\n ModalService,\n KubernetesPodService\n ) {\n this.$async = $async;\n this.$state = $state;\n this.Notifications = Notifications;\n this.LocalStorage = LocalStorage;\n\n this.KubernetesVolumeService = KubernetesVolumeService;\n this.KubernetesEventService = KubernetesEventService;\n this.KubernetesNamespaceHelper = KubernetesNamespaceHelper;\n this.KubernetesApplicationService = KubernetesApplicationService;\n this.KubernetesPersistentVolumeClaimService = KubernetesPersistentVolumeClaimService;\n this.ModalService = ModalService;\n this.KubernetesPodService = KubernetesPodService;\n\n this.onInit = this.onInit.bind(this);\n this.getVolume = this.getVolume.bind(this);\n this.getVolumeAsync = this.getVolumeAsync.bind(this);\n this.updateVolumeAsync = this.updateVolumeAsync.bind(this);\n this.getEvents = this.getEvents.bind(this);\n this.getEventsAsync = this.getEventsAsync.bind(this);\n }\n\n selectTab(index) {\n this.LocalStorage.storeActiveTab('volume', index);\n }\n\n showEditor() {\n this.state.showEditorTab = true;\n this.selectTab(2);\n }\n\n isExternalVolume() {\n return KubernetesVolumeHelper.isExternalVolume(this.volume);\n }\n\n isSystemNamespace() {\n return this.KubernetesNamespaceHelper.isSystemNamespace(this.volume.ResourcePool.Namespace.Name);\n }\n\n isUsed() {\n return KubernetesVolumeHelper.isUsed(this.volume);\n }\n\n onChangeSize() {\n if (this.state.volumeSize) {\n const size = filesizeParser(this.state.volumeSize + this.state.volumeSizeUnit, { base: 10 });\n if (this.state.oldVolumeSize > size) {\n this.state.errors.volumeSize = true;\n } else {\n this.state.errors.volumeSize = false;\n }\n }\n }\n\n sizeIsValid() {\n return !this.state.errors.volumeSize && this.state.volumeSize && this.state.oldVolumeSize !== filesizeParser(this.state.volumeSize + this.state.volumeSizeUnit, { base: 10 });\n }\n\n /**\n * VOLUME\n */\n\n async updateVolumeAsync(redeploy) {\n try {\n this.volume.PersistentVolumeClaim.Storage = this.state.volumeSize + this.state.volumeSizeUnit.charAt(0);\n await this.KubernetesPersistentVolumeClaimService.patch(this.oldVolume.PersistentVolumeClaim, this.volume.PersistentVolumeClaim);\n this.Notifications.success('Volume successfully updated');\n\n if (redeploy) {\n const promises = _.flatten(\n _.map(this.volume.Applications, (app) => {\n return _.map(app.Pods, (item) => this.KubernetesPodService.delete(item));\n })\n );\n await Promise.all(promises);\n this.Notifications.success('Applications successfully redeployed');\n }\n\n this.$state.reload();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to update volume.');\n }\n }\n\n updateVolume() {\n if (KubernetesVolumeHelper.isUsed(this.volume)) {\n this.ModalService.confirmRedeploy(\n 'One or multiple applications are currently using this volume.
    For the change to be taken into account these applications will need to be redeployed. Do you want us to reschedule it now?',\n (redeploy) => {\n return this.$async(this.updateVolumeAsync, redeploy);\n }\n );\n } else {\n return this.$async(this.updateVolumeAsync, false);\n }\n }\n\n async getVolumeAsync() {\n try {\n const [volume, applications] = await Promise.all([\n this.KubernetesVolumeService.get(this.state.namespace, this.state.name),\n this.KubernetesApplicationService.get(this.state.namespace),\n ]);\n volume.Applications = KubernetesVolumeHelper.getUsingApplications(volume, applications);\n this.volume = volume;\n this.oldVolume = angular.copy(volume);\n this.state.volumeSize = parseInt(volume.PersistentVolumeClaim.Storage.slice(0, -2), 10);\n this.state.volumeSizeUnit = volume.PersistentVolumeClaim.Storage.slice(-2);\n this.state.oldVolumeSize = filesizeParser(volume.PersistentVolumeClaim.Storage, { base: 10 });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve volume');\n }\n }\n\n getVolume() {\n return this.$async(this.getVolumeAsync);\n }\n\n /**\n * EVENTS\n */\n hasEventWarnings() {\n return this.state.eventWarningCount;\n }\n\n async getEventsAsync() {\n try {\n this.state.eventsLoading = true;\n const events = await this.KubernetesEventService.get(this.state.namespace);\n this.events = _.filter(events, (event) => event.Involved.uid === this.volume.PersistentVolumeClaim.Id);\n this.state.eventWarningCount = KubernetesEventHelper.warningCount(this.events);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve application related events');\n } finally {\n this.state.eventsLoading = false;\n }\n }\n\n getEvents() {\n return this.$async(this.getEventsAsync);\n }\n\n /**\n * ON INIT\n */\n async onInit() {\n this.state = {\n activeTab: 0,\n currentName: this.$state.$current.name,\n showEditorTab: false,\n eventsLoading: true,\n viewReady: false,\n namespace: this.$transition$.params().namespace,\n name: this.$transition$.params().name,\n eventWarningCount: 0,\n availableSizeUnits: ['MB', 'GB', 'TB'],\n increaseSize: false,\n volumeSize: 0,\n volumeSizeUnit: 'GB',\n volumeSharedAccessPolicy: '',\n volumeSharedAccessPolicyTooltip: '',\n errors: {\n volumeSize: false,\n },\n };\n\n this.state.activeTab = this.LocalStorage.getActiveTab('volume');\n\n try {\n await this.getVolume();\n await this.getEvents();\n if (this.volume.PersistentVolumeClaim.StorageClass !== undefined) {\n this.state.volumeSharedAccessPolicy = this.volume.PersistentVolumeClaim.StorageClass.AccessModes[this.volume.PersistentVolumeClaim.StorageClass.AccessModes.length - 1];\n let policies = KubernetesStorageClassAccessPolicies();\n\n policies.forEach((policy) => {\n if (policy.Name == this.state.volumeSharedAccessPolicy) {\n this.state.volumeSharedAccessPolicyTooltip = policy.Description;\n }\n });\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to load view data');\n } finally {\n this.state.viewReady = true;\n }\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n\n $onDestroy() {\n if (this.state.currentName !== this.$state.$current.name) {\n this.LocalStorage.storeActiveTab('volume', 0);\n }\n }\n}\n\nexport default KubernetesVolumeController;\nangular.module('portainer.kubernetes').controller('KubernetesVolumeController', KubernetesVolumeController);\n","const autoNgTemplateLoaderTemplate1 = require('./volumes.html');\n\nangular.module('portainer.kubernetes').component('kubernetesVolumesView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesVolumesController',\n controllerAs: 'ctrl',\n bindings: {\n $transition$: '<',\n },\n});\n","var path = 'app/kubernetes/views/volumes/volumes.html';\nvar html = \"\\n Volumes\\n\\n\\n\\n\\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n Volumes\\n \\n \\n \\n \\n Storage\\n \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","require('../../templates/advancedDeploymentPanel.html');\n\nimport _ from 'lodash-es';\nimport filesizeParser from 'filesize-parser';\nimport angular from 'angular';\nimport KubernetesVolumeHelper from 'Kubernetes/helpers/volumeHelper';\nimport KubernetesResourceQuotaHelper from 'Kubernetes/helpers/resourceQuotaHelper';\n\nfunction buildStorages(storages, volumes) {\n _.forEach(storages, (s) => {\n const filteredVolumes = _.filter(volumes, ['PersistentVolumeClaim.StorageClass.Name', s.Name, 'PersistentVolumeClaim.StorageClass.Provisioner', s.Provisioner]);\n s.Volumes = filteredVolumes;\n s.Size = computeSize(filteredVolumes);\n });\n return storages;\n}\n\nfunction computeSize(volumes) {\n const size = _.sumBy(volumes, (v) => filesizeParser(v.PersistentVolumeClaim.Storage, { base: 10 }));\n const format = KubernetesResourceQuotaHelper.formatBytes(size);\n return `${format.Size}${format.SizeUnit}`;\n}\n\nclass KubernetesVolumesController {\n /* @ngInject */\n constructor(\n $async,\n $state,\n Notifications,\n Authentication,\n ModalService,\n LocalStorage,\n EndpointProvider,\n KubernetesStorageService,\n KubernetesVolumeService,\n KubernetesApplicationService\n ) {\n this.$async = $async;\n this.$state = $state;\n this.Notifications = Notifications;\n this.Authentication = Authentication;\n this.ModalService = ModalService;\n this.LocalStorage = LocalStorage;\n this.EndpointProvider = EndpointProvider;\n this.KubernetesStorageService = KubernetesStorageService;\n this.KubernetesVolumeService = KubernetesVolumeService;\n this.KubernetesApplicationService = KubernetesApplicationService;\n\n this.onInit = this.onInit.bind(this);\n this.getVolumes = this.getVolumes.bind(this);\n this.getVolumesAsync = this.getVolumesAsync.bind(this);\n this.removeAction = this.removeAction.bind(this);\n this.removeActionAsync = this.removeActionAsync.bind(this);\n }\n\n selectTab(index) {\n this.LocalStorage.storeActiveTab('volumes', index);\n }\n\n async removeActionAsync(selectedItems) {\n let actionCount = selectedItems.length;\n for (const volume of selectedItems) {\n try {\n await this.KubernetesVolumeService.delete(volume);\n this.Notifications.success('Volume successfully removed', volume.PersistentVolumeClaim.Name);\n const index = this.volumes.indexOf(volume);\n this.volumes.splice(index, 1);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to remove volume');\n } finally {\n --actionCount;\n if (actionCount === 0) {\n this.$state.reload();\n }\n }\n }\n }\n\n removeAction(selectedItems) {\n this.ModalService.confirmDeletion('Do you want to remove the selected volume(s)?', (confirmed) => {\n if (confirmed) {\n return this.$async(this.removeActionAsync, selectedItems);\n }\n });\n }\n\n async getVolumesAsync() {\n try {\n const [volumes, applications, storages] = await Promise.all([\n this.KubernetesVolumeService.get(),\n this.KubernetesApplicationService.get(),\n this.KubernetesStorageService.get(this.state.endpointId),\n ]);\n\n this.volumes = _.map(volumes, (volume) => {\n volume.Applications = KubernetesVolumeHelper.getUsingApplications(volume, applications);\n return volume;\n });\n this.storages = buildStorages(storages, volumes);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retreive namespaces');\n }\n }\n\n getVolumes() {\n return this.$async(this.getVolumesAsync);\n }\n\n async onInit() {\n this.state = {\n viewReady: false,\n // endpointId: this.$transition$.params().endpointId, // TODO: use this when moving to endpointID in URL\n currentName: this.$state.$current.name,\n endpointId: this.EndpointProvider.endpointID(),\n activeTab: this.LocalStorage.getActiveTab('volumes'),\n isAdmin: this.Authentication.isAdmin(),\n };\n\n await this.getVolumes();\n\n this.state.viewReady = true;\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n\n $onDestroy() {\n if (this.state.currentName !== this.$state.$current.name) {\n this.LocalStorage.storeActiveTab('volumes', 0);\n }\n }\n}\n\nexport default KubernetesVolumesController;\nangular.module('portainer.kubernetes').controller('KubernetesVolumesController', KubernetesVolumesController);\n","const autoNgTemplateLoaderTemplate1 = require('./accessDatatable.html');\n\nangular.module('portainer.app').component('accessDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'AccessDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n roles: '<',\n tableKey: '@',\n orderBy: '@',\n removeAction: '<',\n updateAction: '<',\n reverseOrder: '<',\n inheritFrom: '<',\n },\n});\n","var path = 'app/portainer/components/access-datatable/accessDatatable.html';\nvar html = \"
    \\n \\n \\n \\n
    \\n Access tagged as inherited are inherited from the group access. They cannot be removed or modified at the endpoint level but they can be overriden.\\n
    \\n
    Access tagged as override are overriding the group access for the related users/teams.
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Type\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ item.Name }}\\n inherited\\n override\\n {{ item.Type }}
    Loading...
    No authorized users or teams.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.app').controller('AccessDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n function ($scope, $controller, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n this.disableRemove = function (item) {\n return item.Inherited && this.inheritFrom;\n };\n\n this.allowSelection = function (item) {\n return !this.disableRemove(item);\n };\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./accessTable.html');\n\nangular.module('portainer.app').component('accessTable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: function () {\n this.state = {\n orderBy: 'Name',\n reverseOrder: false,\n paginatedItemLimit: '10',\n textFilter: '',\n };\n\n this.changeOrderBy = function (orderField) {\n this.state.reverseOrder = this.state.orderBy === orderField ? !this.state.reverseOrder : false;\n this.state.orderBy = orderField;\n };\n },\n bindings: {\n dataset: '<',\n entryClick: '<',\n emptyDatasetMessage: '@',\n },\n});\n","var path = 'app/portainer/components/access-table/accessTable.html';\nvar html = \"
    \\n \\n
    \\n \\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Name\\n \\n \\n \\n \\n \\n Type\\n \\n \\n \\n
    \\n {{ item.Name }}\\n \\n inherited\\n \\n \\n {{ item.Type }}\\n
    Loading...
    {{ $ctrl.emptyDatasetMessage }}
    \\n
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./porAccessControlForm.html');\n\nangular.module('portainer.app').component('porAccessControlForm', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'porAccessControlFormController',\n bindings: {\n // This object will be populated with the form data.\n // Model reference in porAccessControlFromModel.js\n formData: '=',\n // Optional. An existing resource control object that will be used to set\n // the default values of the component.\n resourceControl: '<',\n hideTitle: '<',\n },\n});\n","var path = 'app/portainer/components/accessControlForm/porAccessControlForm.html';\nvar html = \"
    \\n
    \\n Access control\\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    0\\\">\\n \\n \\n
    \\n
    \\n
    \\n \\n \\n 1))\\\"\\n >\\n
    \\n \\n \\n You have not yet created any teams. Head over to the Teams view to manage teams.\\n \\n 0) || (!$ctrl.isAdmin && $ctrl.availableTeams.length > 1)\\\"\\n input-model=\\\"$ctrl.availableTeams\\\"\\n output-model=\\\"$ctrl.formData.AuthorizedTeams\\\"\\n button-label=\\\"Name\\\"\\n item-label=\\\"Name\\\"\\n tick-property=\\\"selected\\\"\\n helper-elements=\\\"filter\\\"\\n search-property=\\\"Name\\\"\\n translation=\\\"{nothingSelected: 'Select one or more teams', search: 'Search...'}\\\"\\n style=\\\"margin-left: 20px;\\\"\\n >\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n You have not yet created any users. Head over to the Users view to manage users.\\n \\n 0\\\"\\n input-model=\\\"$ctrl.availableUsers\\\"\\n output-model=\\\"$ctrl.formData.AuthorizedUsers\\\"\\n button-label=\\\"Username\\\"\\n item-label=\\\"Username\\\"\\n tick-property=\\\"selected\\\"\\n helper-elements=\\\"filter\\\"\\n search-property=\\\"Username\\\"\\n translation=\\\"{nothingSelected: 'Select one or more users', search: 'Search...'}\\\"\\n style=\\\"margin-left: 20px;\\\"\\n >\\n \\n
    \\n
    \\n \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import _ from 'lodash-es';\nimport { ResourceControlOwnership as RCO } from 'Portainer/models/resourceControl/resourceControlOwnership';\n\nangular.module('portainer.app').controller('porAccessControlFormController', [\n '$q',\n 'UserService',\n 'TeamService',\n 'Notifications',\n 'Authentication',\n 'ResourceControlService',\n function ($q, UserService, TeamService, Notifications, Authentication, ResourceControlService) {\n var ctrl = this;\n\n ctrl.RCO = RCO;\n\n ctrl.availableTeams = [];\n ctrl.availableUsers = [];\n\n function setOwnership(resourceControl, isAdmin) {\n if (isAdmin && resourceControl.Ownership === RCO.PRIVATE) {\n ctrl.formData.Ownership = RCO.RESTRICTED;\n } else {\n ctrl.formData.Ownership = resourceControl.Ownership;\n }\n\n if (ctrl.formData.Ownership === RCO.PUBLIC) {\n ctrl.formData.AccessControlEnabled = false;\n }\n }\n\n function setAuthorizedUsersAndTeams(authorizedUsers, authorizedTeams) {\n angular.forEach(ctrl.availableUsers, function (user) {\n var found = _.find(authorizedUsers, { Id: user.Id });\n if (found) {\n user.selected = true;\n }\n });\n\n angular.forEach(ctrl.availableTeams, function (team) {\n var found = _.find(authorizedTeams, { Id: team.Id });\n if (found) {\n team.selected = true;\n }\n });\n }\n\n this.$onInit = $onInit;\n function $onInit() {\n var isAdmin = Authentication.isAdmin();\n ctrl.isAdmin = isAdmin;\n\n if (isAdmin) {\n ctrl.formData.Ownership = ctrl.RCO.ADMINISTRATORS;\n }\n\n $q.all({\n availableTeams: TeamService.teams(),\n availableUsers: isAdmin ? UserService.users(false) : [],\n })\n .then(function success(data) {\n ctrl.availableUsers = _.orderBy(data.availableUsers, 'Username', 'asc');\n\n var availableTeams = _.orderBy(data.availableTeams, 'Name', 'asc');\n ctrl.availableTeams = availableTeams;\n if (!isAdmin && availableTeams.length === 1) {\n ctrl.formData.AuthorizedTeams = availableTeams;\n }\n\n return $q.when(ctrl.resourceControl && ResourceControlService.retrieveOwnershipDetails(ctrl.resourceControl));\n })\n .then(function success(data) {\n if (data) {\n var authorizedUsers = data.authorizedUsers;\n var authorizedTeams = data.authorizedTeams;\n setOwnership(ctrl.resourceControl, isAdmin);\n setAuthorizedUsersAndTeams(authorizedUsers, authorizedTeams);\n }\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve access control information');\n });\n }\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./porAccessControlPanel.html');\n\nangular.module('portainer.app').component('porAccessControlPanel', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'porAccessControlPanelController',\n bindings: {\n // The component will use this identifier when updating the resource control object.\n resourceId: '<',\n // The component will display information about this resource control object.\n resourceControl: '=',\n // This component is usually displayed inside a resource-details view.\n // This variable specifies the type of the associated resource.\n // Accepted values: 'container', 'service' or 'volume'.\n resourceType: '<',\n // Allow to disable the Ownership edition based on non resource control data\n disableOwnershipChange: '<',\n },\n});\n","var path = 'app/portainer/components/accessControlPanel/porAccessControlPanel.html';\nvar html = \"
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n 0\\\">\\n \\n \\n \\n \\n \\n 0\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n 1))\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Ownership\\n \\n \\n administrators\\n \\n \\n \\n {{ $ctrl.resourceControl.Ownership }}\\n \\n \\n \\n \\n
    \\n \\n Access control on this resource is inherited from the following service:\\n {{ $ctrl.resourceControl.ResourceId | truncate }}\\n \\n
    \\n \\n Access control on this resource is inherited from the following container:\\n {{ $ctrl.resourceControl.ResourceId | truncate }}\\n \\n
    \\n \\n Access control on this resource is inherited from the following stack: {{ $ctrl.resourceControl.ResourceId }}\\n \\n
    Authorized users\\n {{ user.Username }}{{ $last ? '' : ', ' }} \\n
    Authorized teams\\n {{ team.Name }}{{ $last ? '' : ', ' }} \\n
    \\n Change ownership\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    0\\\">\\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n Teams\\n \\n You have not yet created any teams. Head over to the Teams view to manage teams.\\n \\n 0) || (!$ctrl.isAdmin && $ctrl.availableTeams.length > 1)\\\"\\n input-model=\\\"$ctrl.availableTeams\\\"\\n output-model=\\\"$ctrl.formValues.Ownership_Teams\\\"\\n button-label=\\\"Name\\\"\\n item-label=\\\"Name\\\"\\n tick-property=\\\"selected\\\"\\n helper-elements=\\\"filter\\\"\\n search-property=\\\"Name\\\"\\n max-labels=\\\"3\\\"\\n translation=\\\"{nothingSelected: 'Select one or more teams', search: 'Search...'}\\\"\\n >\\n \\n
    \\n Users\\n \\n You have not yet created any users. Head over to the Users view to manage users.\\n \\n 0\\\"\\n input-model=\\\"$ctrl.availableUsers\\\"\\n output-model=\\\"$ctrl.formValues.Ownership_Users\\\"\\n button-label=\\\"Username\\\"\\n item-label=\\\"Username\\\"\\n tick-property=\\\"selected\\\"\\n helper-elements=\\\"filter\\\"\\n search-property=\\\"Username\\\"\\n max-labels=\\\"3\\\"\\n translation=\\\"{nothingSelected: 'Select one or more users', search: 'Search...'}\\\"\\n >\\n \\n
    \\n
    \\n Cancel\\n Update ownership\\n {{ $ctrl.state.formValidationError }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import _ from 'lodash-es';\nimport { ResourceControlOwnership as RCO } from 'Portainer/models/resourceControl/resourceControlOwnership';\nimport { ResourceControlTypeInt as RCTI, ResourceControlTypeString as RCTS } from 'Portainer/models/resourceControl/resourceControlTypes';\nimport { AccessControlPanelData } from './porAccessControlPanelModel';\n\nangular.module('portainer.app').controller('porAccessControlPanelController', [\n '$q',\n '$state',\n 'UserService',\n 'TeamService',\n 'ResourceControlHelper',\n 'ResourceControlService',\n 'Notifications',\n 'Authentication',\n 'ModalService',\n 'FormValidator',\n function ($q, $state, UserService, TeamService, ResourceControlHelper, ResourceControlService, Notifications, Authentication, ModalService, FormValidator) {\n var ctrl = this;\n\n ctrl.RCO = RCO;\n ctrl.RCTS = RCTS;\n ctrl.RCTI = RCTI;\n ctrl.state = {\n displayAccessControlPanel: false,\n canEditOwnership: false,\n editOwnership: false,\n formValidationError: '',\n };\n\n ctrl.formValues = new AccessControlPanelData();\n\n ctrl.authorizedUsers = [];\n ctrl.availableUsers = [];\n ctrl.authorizedTeams = [];\n ctrl.availableTeams = [];\n\n ctrl.canEditOwnership = function () {\n const hasRC = ctrl.resourceControl;\n const inheritedVolume = hasRC && ctrl.resourceControl.Type === RCTI.CONTAINER && ctrl.resourceType === RCTS.VOLUME;\n const inheritedContainer = hasRC && ctrl.resourceControl.Type === RCTI.SERVICE && ctrl.resourceType === RCTS.CONTAINER;\n const inheritedFromStack = hasRC && ctrl.resourceControl.Type === RCTI.STACK && ctrl.resourceType !== RCTS.STACK;\n const hasSpecialDisable = ctrl.disableOwnershipChange;\n\n return !inheritedVolume && !inheritedContainer && !inheritedFromStack && !hasSpecialDisable && !ctrl.state.editOwnership && (ctrl.isAdmin || ctrl.state.canEditOwnership);\n };\n\n ctrl.confirmUpdateOwnership = function () {\n if (!validateForm()) {\n return;\n }\n ModalService.confirmAccessControlUpdate(function (confirmed) {\n if (!confirmed) {\n return;\n }\n updateOwnership();\n });\n };\n\n function validateForm() {\n ctrl.state.formValidationError = '';\n var error = '';\n\n var accessControlData = {\n AccessControlEnabled: ctrl.formValues.Ownership === RCO.PUBLIC ? false : true,\n Ownership: ctrl.formValues.Ownership,\n AuthorizedUsers: ctrl.formValues.Ownership_Users,\n AuthorizedTeams: ctrl.formValues.Ownership_Teams,\n };\n var isAdmin = ctrl.isAdmin;\n error = FormValidator.validateAccessControl(accessControlData, isAdmin);\n if (error) {\n ctrl.state.formValidationError = error;\n return false;\n }\n return true;\n }\n\n function updateOwnership() {\n ResourceControlService.applyResourceControlChange(ctrl.resourceType, ctrl.resourceId, ctrl.resourceControl, ctrl.formValues)\n .then(function success() {\n Notifications.success('Access control successfully updated');\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update access control');\n });\n }\n\n this.$onInit = $onInit;\n function $onInit() {\n var userDetails = Authentication.getUserDetails();\n var isAdmin = Authentication.isAdmin();\n var userId = userDetails.ID;\n ctrl.isAdmin = isAdmin;\n var resourceControl = ctrl.resourceControl;\n\n if (isAdmin && resourceControl) {\n ctrl.formValues.Ownership = resourceControl.Ownership === RCO.PRIVATE ? RCO.RESTRICTED : resourceControl.Ownership;\n } else {\n ctrl.formValues.Ownership = RCO.ADMINISTRATORS;\n }\n\n ResourceControlService.retrieveOwnershipDetails(resourceControl)\n .then(function success(data) {\n ctrl.authorizedUsers = data.authorizedUsers;\n ctrl.authorizedTeams = data.authorizedTeams;\n return ResourceControlService.retrieveUserPermissionsOnResource(userId, isAdmin, resourceControl);\n })\n .then(function success(data) {\n ctrl.state.canEditOwnership = data.isPartOfRestrictedUsers || data.isLeaderOfAnyRestrictedTeams;\n ctrl.state.canChangeOwnershipToTeam = data.isPartOfRestrictedUsers;\n\n return $q.all({\n availableUsers: isAdmin ? UserService.users(false) : [],\n availableTeams: isAdmin || data.isPartOfRestrictedUsers ? TeamService.teams() : [],\n });\n })\n .then(function success(data) {\n ctrl.availableUsers = _.orderBy(data.availableUsers, 'Username', 'asc');\n angular.forEach(ctrl.availableUsers, function (user) {\n var found = _.find(ctrl.authorizedUsers, { Id: user.Id });\n if (found) {\n user.selected = true;\n }\n });\n ctrl.availableTeams = _.orderBy(data.availableTeams, 'Name', 'asc');\n angular.forEach(data.availableTeams, function (team) {\n var found = _.find(ctrl.authorizedTeams, { Id: team.Id });\n if (found) {\n team.selected = true;\n }\n });\n if (data.availableTeams.length === 1) {\n ctrl.formValues.Ownership_Teams.push(data.availableTeams[0]);\n }\n ctrl.state.displayAccessControlPanel = true;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve access control information');\n });\n }\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./porAccessManagement.html');\n\nangular.module('portainer.app').component('porAccessManagement', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'porAccessManagementController',\n controllerAs: 'ctrl',\n bindings: {\n accessControlledEntity: '<',\n inheritFrom: '<',\n entityType: '@',\n updateAccess: '<',\n actionInProgress: '<',\n },\n});\n","var path = 'app/portainer/components/accessManagement/porAccessManagement.html';\nvar html = \"
    \\n
    \\n \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n No users or teams available.\\n \\n 0\\\"\\n input-model=\\\"ctrl.availableUsersAndTeams\\\"\\n output-model=\\\"ctrl.formValues.multiselectOutput\\\"\\n button-label=\\\"icon '-' Name\\\"\\n item-label=\\\"icon '-' Name\\\"\\n tick-property=\\\"ticked\\\"\\n helper-elements=\\\"filter\\\"\\n search-property=\\\"Name\\\"\\n translation=\\\"{nothingSelected: 'Select one or more users and/or teams', search: 'Search...'}\\\"\\n >\\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n \\n This feature is available in Portainer Business Edition.\\n \\n
    \\n
    \\n\\n \\n
    \\n
    \\n \\n Create access\\n Creating access...\\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import _ from 'lodash-es';\n\nimport angular from 'angular';\n\nclass PorAccessManagementController {\n /* @ngInject */\n constructor(Notifications, AccessService) {\n this.Notifications = Notifications;\n this.AccessService = AccessService;\n\n this.unauthorizeAccess = this.unauthorizeAccess.bind(this);\n this.updateAction = this.updateAction.bind(this);\n }\n\n updateAction() {\n const entity = this.accessControlledEntity;\n const oldUserAccessPolicies = entity.UserAccessPolicies;\n const oldTeamAccessPolicies = entity.TeamAccessPolicies;\n const updatedUserAccesses = _.filter(this.authorizedUsersAndTeams, { Updated: true, Type: 'user', Inherited: false });\n const updatedTeamAccesses = _.filter(this.authorizedUsersAndTeams, { Updated: true, Type: 'team', Inherited: false });\n\n const accessPolicies = this.AccessService.generateAccessPolicies(oldUserAccessPolicies, oldTeamAccessPolicies, updatedUserAccesses, updatedTeamAccesses);\n this.accessControlledEntity.UserAccessPolicies = accessPolicies.userAccessPolicies;\n this.accessControlledEntity.TeamAccessPolicies = accessPolicies.teamAccessPolicies;\n this.updateAccess();\n }\n\n authorizeAccess() {\n const entity = this.accessControlledEntity;\n const oldUserAccessPolicies = entity.UserAccessPolicies;\n const oldTeamAccessPolicies = entity.TeamAccessPolicies;\n const selectedUserAccesses = _.filter(this.formValues.multiselectOutput, (access) => access.Type === 'user');\n const selectedTeamAccesses = _.filter(this.formValues.multiselectOutput, (access) => access.Type === 'team');\n\n const accessPolicies = this.AccessService.generateAccessPolicies(oldUserAccessPolicies, oldTeamAccessPolicies, selectedUserAccesses, selectedTeamAccesses, 0);\n this.accessControlledEntity.UserAccessPolicies = accessPolicies.userAccessPolicies;\n this.accessControlledEntity.TeamAccessPolicies = accessPolicies.teamAccessPolicies;\n this.updateAccess();\n }\n\n unauthorizeAccess(selectedAccesses) {\n const entity = this.accessControlledEntity;\n const userAccessPolicies = entity.UserAccessPolicies;\n const teamAccessPolicies = entity.TeamAccessPolicies;\n const selectedUserAccesses = _.filter(selectedAccesses, (access) => access.Type === 'user');\n const selectedTeamAccesses = _.filter(selectedAccesses, (access) => access.Type === 'team');\n _.forEach(selectedUserAccesses, (access) => delete userAccessPolicies[access.Id]);\n _.forEach(selectedTeamAccesses, (access) => delete teamAccessPolicies[access.Id]);\n this.updateAccess();\n }\n\n async $onInit() {\n try {\n const entity = this.accessControlledEntity;\n const parent = this.inheritFrom;\n\n const data = await this.AccessService.accesses(entity, parent, this.roles);\n this.availableUsersAndTeams = _.orderBy(data.availableUsersAndTeams, 'Name', 'asc');\n this.authorizedUsersAndTeams = data.authorizedUsersAndTeams;\n } catch (err) {\n this.availableUsersAndTeams = [];\n this.authorizedUsersAndTeams = [];\n this.Notifications.error('Failure', err, 'Unable to retrieve accesses');\n }\n }\n}\n\nexport default PorAccessManagementController;\nangular.module('portainer.app').controller('porAccessManagementController', PorAccessManagementController);\n","const autoNgTemplateLoaderTemplate1 = require('./associatedEndpointsSelector.html');\n\nimport angular from 'angular';\nimport AssociatedEndpointsSelectorController from './associatedEndpointsSelectorController';\n\nangular.module('portainer.app').component('associatedEndpointsSelector', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: AssociatedEndpointsSelectorController,\n bindings: {\n endpointIds: '<',\n tags: '<',\n groups: '<',\n hasBackendPagination: '<',\n\n onAssociate: '<',\n onDissociate: '<',\n },\n});\n","var path = 'app/portainer/components/associated-endpoints-selector/associatedEndpointsSelector.html';\nvar html = \"
    \\n You can select which endpoint should be part of this group by moving them to the associated endpoints table. Simply click on any endpoint entry to move it from one table to the\\n other.\\n
    \\n
    \\n \\n
    \\n
    Available endpoints
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    Associated endpoints
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.app').directive('autoFocus', [\n '$timeout',\n function porAutoFocus($timeout) {\n var directive = {\n restrict: 'A',\n link: function (scope, element) {\n $timeout(function () {\n element[0].focus();\n });\n },\n };\n\n return directive;\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./betaPanel.html');\n\nangular.module('portainer.app').component('betaPanel', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n});\n","var path = 'app/portainer/components/beta-panel/betaPanel.html';\nvar html = \"\\n \\n

    \\n \\n This is a beta feature.\\n

    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.app').directive('buttonSpinner', function buttonSpinner() {\n var directive = {\n restrict: 'A',\n scope: {\n spinning: '=buttonSpinner',\n },\n transclude: true,\n template: ' ',\n };\n\n return directive;\n});\n","const autoNgTemplateLoaderTemplate1 = require('./codeEditor.html');\n\nangular.module('portainer.app').component('codeEditor', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'CodeEditorController',\n bindings: {\n identifier: '@',\n placeholder: '@',\n yml: '<',\n readOnly: '<',\n onChange: '<',\n value: '<',\n },\n});\n","var path = 'app/portainer/components/code-editor/codeEditor.html';\nvar html = \"\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.app').controller('CodeEditorController', function CodeEditorController($document, CodeMirrorService, $scope) {\n var ctrl = this;\n\n this.$onInit = function () {\n $document.ready(function () {\n var editorElement = $document[0].getElementById(ctrl.identifier);\n ctrl.editor = CodeMirrorService.applyCodeMirrorOnElement(editorElement, ctrl.yml, ctrl.readOnly);\n if (ctrl.onChange) {\n ctrl.editor.on('change', (...args) => $scope.$apply(() => ctrl.onChange(...args)));\n }\n if (ctrl.value) {\n ctrl.editor.setValue(ctrl.value);\n }\n });\n };\n});\n","const autoNgTemplateLoaderTemplate1 = require('./customTemplateCommonFields.html');\n\nimport CustomTemplateCommonFieldsController from './customTemplateCommonFieldsController.js';\n\nangular.module('portainer.app').component('customTemplateCommonFields', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: CustomTemplateCommonFieldsController,\n bindings: {\n formValues: '=',\n },\n});\n","var path = 'app/portainer/components/custom-template-common-fields/customTemplateCommonFields.html';\nvar html = \"\\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    Title is required.

    \\n
    \\n
    \\n
    \\n \\n\\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    Description is required.

    \\n
    \\n
    \\n
    \\n \\n\\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n\\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n\\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n\\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.docker').controller('CustomTemplatesListController', function ($scope, $controller, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n});\n","const autoNgTemplateLoaderTemplate1 = require('./customTemplatesList.html');\n\nimport angular from 'angular';\n\nangular.module('portainer.app').component('customTemplatesList', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'CustomTemplatesListController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n templates: '<',\n tableKey: '@',\n onSelectClick: '<',\n showSwarmStacks: '<',\n onDeleteClick: '<',\n isEditAllowed: '<',\n },\n});\n","var path = 'app/portainer/components/custom-templates-list/customTemplatesList.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n
    \\n\\n
    \\n \\n \\n
    \\n\\n
    \\n \\n \\n
    \\n \\n Edit\\n \\n \\n
    \\n
    \\n \\n
    \\n Loading...\\n
    \\n
    \\n No templates available.\\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./accessViewerDatatable.html');\n\nangular.module('portainer.app').component('accessViewerDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n tableKey: '@',\n orderBy: '@',\n dataset: '<',\n },\n});\n","var path = 'app/portainer/components/datatables/access-viewer-datatable/accessViewerDatatable.html';\nvar html = \"
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n Endpoint\\n \\n Role\\n Access origin
    Select a user to show associated access and role
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./datatable-columns-visibility.html');\n\nimport angular from 'angular';\n\nimport controller from './datatable-columns-visibility.controller';\n\nangular.module('portainer.app').component('datatableColumnsVisibility', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n columns: '<',\n onChange: '<',\n },\n});\n","var path = 'app/portainer/components/datatables/datatable-columns-visibility/datatable-columns-visibility.html';\nvar html = \"\\n Columns\\n
    \\n
    \\n
    \\n Show / Hide Columns\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./endpointsDatatable.html');\n\nangular.module('portainer.app').component('endpointsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'EndpointsDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n retrievePage: '<',\n },\n});\n","var path = 'app/portainer/components/datatables/endpoints-datatable/endpointsDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Type\\n \\n \\n \\n \\n \\n URL\\n \\n \\n \\n \\n \\n Group\\n \\n \\n \\n Actions
    \\n \\n \\n \\n \\n {{ item.Name }}\\n \\n \\n \\n {{ item.Type | endpointtypename }}\\n \\n \\n {{ item.URL | stripprotocol }}\\n -\\n {{ item.GroupName }}\\n Manage access \\n
    Loading...
    No endpoint available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.app').controller('EndpointsDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n 'PaginationService',\n function ($scope, $controller, DatatableService, PaginationService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n this.state = Object.assign(this.state, {\n orderBy: this.orderBy,\n loading: true,\n filteredDataSet: [],\n totalFilteredDataset: 0,\n pageNumber: 1,\n });\n\n this.paginationChanged = function () {\n this.state.loading = true;\n this.state.filteredDataSet = [];\n const start = (this.state.pageNumber - 1) * this.state.paginatedItemLimit + 1;\n this.retrievePage(start, this.state.paginatedItemLimit, this.state.textFilter)\n .then((data) => {\n this.state.filteredDataSet = data.endpoints;\n this.state.totalFilteredDataSet = data.totalCount;\n })\n .finally(() => {\n this.state.loading = false;\n });\n };\n\n this.onPageChange = function (newPageNumber) {\n this.state.pageNumber = newPageNumber;\n this.paginationChanged();\n };\n\n /**\n * Overridden\n */\n this.onTextFilterChange = function () {\n var filterValue = this.state.textFilter;\n DatatableService.setDataTableTextFilters(this.tableKey, filterValue);\n this.paginationChanged();\n };\n\n /**\n * Overridden\n */\n this.changePaginationLimit = function () {\n PaginationService.setPaginationLimit(this.tableKey, this.state.paginatedItemLimit);\n this.paginationChanged();\n };\n\n /**\n * Overridden\n */\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n this.paginationChanged();\n };\n },\n]);\n","import _ from 'lodash-es';\nimport './datatable.css';\nimport { ResourceControlOwnership as RCO } from 'Portainer/models/resourceControl/resourceControlOwnership';\n\nfunction isBetween(value, a, b) {\n return (value >= a && value <= b) || (value >= b && value <= a);\n}\n\n// TODO: review - refactor to use a class that can be extended\nangular.module('portainer.app').controller('GenericDatatableController', [\n '$interval',\n 'PaginationService',\n 'DatatableService',\n 'PAGINATION_MAX_ITEMS',\n function ($interval, PaginationService, DatatableService, PAGINATION_MAX_ITEMS) {\n this.RCO = RCO;\n\n this.state = {\n selectAll: false,\n orderBy: this.orderBy,\n paginatedItemLimit: PAGINATION_MAX_ITEMS,\n displayTextFilter: false,\n get selectedItemCount() {\n return this.selectedItems.length || 0;\n },\n selectedItems: [],\n };\n\n this.settings = {\n open: false,\n repeater: {\n autoRefresh: false,\n refreshRate: '30',\n },\n };\n\n this.resetSelectionState = function () {\n this.state.selectAll = false;\n this.state.selectedItems = [];\n _.map(this.state.filteredDataSet, (item) => (item.Checked = false));\n };\n\n this.onTextFilterChange = function () {\n DatatableService.setDataTableTextFilters(this.tableKey, this.state.textFilter);\n };\n\n this.changeOrderBy = function changeOrderBy(orderField) {\n this.state.reverseOrder = this.state.orderBy === orderField ? !this.state.reverseOrder : false;\n this.state.orderBy = orderField;\n DatatableService.setDataTableOrder(this.tableKey, orderField, this.state.reverseOrder);\n };\n\n this.selectItem = function (item, event) {\n // Handle range select using shift\n if (event && event.originalEvent.shiftKey && this.state.firstClickedItem) {\n const firstItemIndex = this.state.filteredDataSet.indexOf(this.state.firstClickedItem);\n const lastItemIndex = this.state.filteredDataSet.indexOf(item);\n const itemsInRange = _.filter(this.state.filteredDataSet, (item, index) => {\n return isBetween(index, firstItemIndex, lastItemIndex);\n });\n const value = this.state.firstClickedItem.Checked;\n\n _.forEach(itemsInRange, (i) => {\n if (!this.allowSelection(i)) {\n return;\n }\n i.Checked = value;\n });\n this.state.firstClickedItem = item;\n } else if (event) {\n item.Checked = !item.Checked;\n this.state.firstClickedItem = item;\n }\n this.state.selectedItems = _.uniq(_.concat(this.state.selectedItems, this.state.filteredDataSet)).filter((i) => i.Checked);\n if (event && this.state.selectAll && this.state.selectedItems.length !== this.state.filteredDataSet.length) {\n this.state.selectAll = false;\n }\n this.onSelectionChanged();\n };\n\n this.selectAll = function () {\n this.state.firstClickedItem = null;\n for (var i = 0; i < this.state.filteredDataSet.length; i++) {\n var item = this.state.filteredDataSet[i];\n if (this.allowSelection(item) && item.Checked !== this.state.selectAll) {\n item.Checked = this.state.selectAll;\n this.selectItem(item);\n }\n }\n this.onSelectionChanged();\n };\n\n /**\n * Override this method to allow/deny selection\n */\n this.allowSelection = function (/*item*/) {\n return true;\n };\n\n /**\n * Override this method to prepare data table\n */\n this.prepareTableFromDataset = function () {\n return;\n };\n\n /**\n * Override this method to execute code after selection changed on datatable\n */\n this.onSelectionChanged = function () {\n return;\n };\n\n this.changePaginationLimit = function () {\n PaginationService.setPaginationLimit(this.tableKey, this.state.paginatedItemLimit);\n };\n\n this.setDefaults = function () {\n this.showTextFilter = this.showTextFilter ? this.showTextFilter : false;\n this.state.reverseOrder = this.reverseOrder ? this.reverseOrder : false;\n this.state.paginatedItemLimit = PaginationService.getPaginationLimit(this.tableKey);\n };\n\n /**\n * Duplicate this function when extending GenericDatatableController\n * Extending-controller's bindings are not accessible there\n * For more details see the following comments\n * https://github.com/portainer/portainer/pull/2877#issuecomment-503333425\n * https://github.com/portainer/portainer/pull/2877#issuecomment-503537249\n */\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n\n var storedColumnVisibility = DatatableService.getColumnVisibilitySettings(this.tableKey);\n if (storedColumnVisibility !== null) {\n this.columnVisibility = storedColumnVisibility;\n }\n };\n\n /**\n * REPEATER SECTION\n */\n this.repeater = undefined;\n\n this.$onDestroy = function () {\n this.stopRepeater();\n };\n\n this.stopRepeater = function () {\n if (angular.isDefined(this.repeater)) {\n $interval.cancel(this.repeater);\n this.repeater = undefined;\n }\n };\n\n this.startRepeater = function () {\n this.repeater = $interval(async () => {\n await this.refreshCallback();\n this.onDataRefresh();\n }, this.settings.repeater.refreshRate * 1000);\n };\n\n this.onSettingsRepeaterChange = function () {\n this.stopRepeater();\n if (angular.isDefined(this.refreshCallback) && this.settings.repeater.autoRefresh) {\n this.startRepeater();\n $('#refreshRateChange').show();\n $('#refreshRateChange').fadeOut(1500);\n }\n DatatableService.setDataTableSettings(this.tableKey, this.settings);\n };\n\n /**\n * Override this method to execute code after calling the refresh callback\n */\n this.onDataRefresh = function () {\n return;\n };\n\n /**\n * !REPEATER SECTION\n */\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./groupsDatatable.html');\n\nangular.module('portainer.app').component('groupsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n },\n});\n","var path = 'app/portainer/components/datatables/groups-datatable/groupsDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n Actions
    \\n \\n \\n \\n \\n {{ item.Name }}\\n \\n Manage access \\n
    Loading...
    No group available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./registriesDatatable.html');\n\nangular.module('portainer.app').component('registriesDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n accessManagement: '<',\n removeAction: '<',\n canBrowse: '<',\n },\n});\n","var path = 'app/portainer/components/datatables/registries-datatable/registriesDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n URL\\n \\n \\n \\n Actions
    \\n \\n \\n \\n \\n {{ item.Name }}\\n {{ item.Name }}\\n authentication-enabled\\n \\n {{ item.URL }}\\n \\n Manage access \\n \\n Browse\\n
    Loading...
    No registry available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./rolesDatatable.html');\n\nangular.module('portainer.app').component('rolesDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n },\n});\n","var path = 'app/portainer/components/datatables/roles-datatable/rolesDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n Name\\n \\n Description\\n
    Endpoint administratorFull control of all resources in an endpoint
    HelpdeskRead-only access of all resources in an endpoint
    Read-only userRead-only access of assigned resources in an endpoint
    Standard userFull control of assigned resources in an endpoint
    \\n
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./stacksDatatable.html');\n\nangular.module('portainer.app').component('stacksDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'StacksDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n offlineMode: '<',\n refreshCallback: '<',\n createEnabled: '<',\n },\n});\n","var path = 'app/portainer/components/datatables/stacks-datatable/stacksDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n \\n Settings\\n
    \\n
    \\n
    \\n Table settings\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Remove\\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n
    \\n \\n Filter\\n \\n \\n
    \\n
    \\n
    \\n
    \\n Filter by activity\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n \\n Type\\n \\n \\n \\n Control\\n \\n Created\\n \\n \\n \\n \\n \\n Updated\\n \\n \\n \\n \\n \\n Ownership\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ item.Name }}\\n {{ item.Name }}\\n Inactive\\n {{ item.Type === 1 ? 'Swarm' : 'Compose' }}\\n \\n Orphaned \\n \\n \\n Limited \\n \\n Total\\n \\n {{ item.CreationDate | getisodatefromtimestamp }} {{ item.CreatedBy ? 'by ' + item.CreatedBy : '' }}\\n - \\n \\n {{ item.UpdateDate | getisodatefromtimestamp }} {{ item.UpdatedBy ? 'by ' + item.UpdatedBy : '' }}\\n - \\n \\n \\n \\n {{ item.ResourceControl.Ownership ? item.ResourceControl.Ownership : item.ResourceControl.Ownership = $ctrl.RCO.ADMINISTRATORS }}\\n \\n
    Loading...
    No stack available.
    \\n
    \\n
    \\n
    \\n {{ $ctrl.state.selectedItemCount }}\\n item(s) selected\\n
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.app').controller('StacksDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n 'Authentication',\n function ($scope, $controller, DatatableService, Authentication) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n this.filters = {\n state: {\n open: false,\n enabled: false,\n showActiveStacks: true,\n showUnactiveStacks: true,\n },\n };\n\n this.columnVisibility = {\n state: {\n open: false,\n },\n columns: {\n updated: {\n label: 'Updated',\n display: false,\n },\n },\n };\n\n this.onColumnVisibilityChange = onColumnVisibilityChange.bind(this);\n function onColumnVisibilityChange(columns) {\n this.columnVisibility.columns = columns;\n DatatableService.setColumnVisibilitySettings(this.tableKey, this.columnVisibility);\n }\n\n /**\n * Do not allow external items\n */\n this.allowSelection = function (item) {\n if (item.External && item.Type === 2) {\n return false;\n }\n\n return !(item.External && !this.isAdmin);\n };\n\n this.applyFilters = applyFilters.bind(this);\n function applyFilters(stack) {\n const { showActiveStacks, showUnactiveStacks } = this.filters.state;\n if (stack.Orphaned) {\n return stack.OrphanedRunning || this.settings.allOrphanedStacks;\n } else {\n return (stack.Status === 1 && showActiveStacks) || (stack.Status === 2 && showUnactiveStacks) || stack.External || !stack.Status;\n }\n }\n\n this.onFilterChange = onFilterChange.bind(this);\n function onFilterChange() {\n const { showActiveStacks, showUnactiveStacks } = this.filters.state;\n this.filters.state.enabled = !showActiveStacks || !showUnactiveStacks;\n DatatableService.setDataTableFilters(this.tableKey, this.filters);\n }\n\n this.onSettingsAllOrphanedStacksChange = function () {\n DatatableService.setDataTableSettings(this.tableKey, this.settings);\n };\n\n this.$onInit = function () {\n this.isAdmin = Authentication.isAdmin();\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n this.settings.allOrphanedStacks = this.settings.allOrphanedStacks && this.isAdmin;\n }\n this.onSettingsRepeaterChange();\n\n var storedColumnVisibility = DatatableService.getColumnVisibilitySettings(this.tableKey);\n if (storedColumnVisibility !== null) {\n this.columnVisibility = storedColumnVisibility;\n }\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./tagsDatatable.html');\n\nangular.module('portainer.app').component('tagsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n },\n});\n","var path = 'app/portainer/components/datatables/tags-datatable/tagsDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ item.Name }}\\n
    Loading...
    No tag available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./teamsDatatable.html');\n\nangular.module('portainer.app').component('teamsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n },\n});\n","var path = 'app/portainer/components/datatables/teams-datatable/teamsDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ item.Name }}\\n
    Loading...
    No team available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./usersDatatable.html');\n\nimport angular from 'angular';\nimport UsersDatatableController from './usersDatatableController';\n\nangular.module('portainer.app').component('usersDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: UsersDatatableController,\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n authenticationMethod: '<',\n },\n});\n","var path = 'app/portainer/components/datatables/users-datatable/usersDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Role\\n \\n \\n \\n \\n \\n Authentication\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ item.Username }}\\n \\n \\n \\n \\n \\n {{ item.RoleName ? item.RoleName : '-' }}\\n \\n \\n Internal\\n LDAP\\n OAuth\\n
    Loading...
    No user available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./endpointItem.html');\n\nimport angular from 'angular';\n\nimport EndpointItemController from './endpoint-item-controller';\n\nangular.module('portainer.app').component('endpointItem', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n model: '<',\n onSelect: '<',\n onEdit: '<',\n isAdmin: '<',\n tags: '<',\n },\n controller: EndpointItemController,\n});\n","var path = 'app/portainer/components/endpoint-list/endpoint-item/endpointItem.html';\nvar html = \"
    \\n
    \\n \\n \\n \\n \\n \\n \\n\\n \\n
    \\n \\n \\n {{ $ctrl.model.Name }}\\n \\n \\n \\n associated\\n \\n heartbeat\\n \\n {{ $ctrl.model.LastCheckInDate | getisodatefromtimestamp }}\\n \\n \\n \\n\\n \\n \\n {{ $ctrl.model.Status === 1 ? 'up' : 'down' }}\\n \\n \\n {{ $ctrl.model.Snapshots[0].Time | getisodatefromtimestamp }}\\n \\n \\n {{ $ctrl.model.Kubernetes.Snapshots[0].Time | getisodatefromtimestamp }}\\n \\n \\n \\n \\n \\n Group: {{ $ctrl.model.GroupName }} \\n \\n \\n
    \\n\\n
    \\n \\n \\n \\n {{ $ctrl.model.Snapshots[0].StackCount }}\\n {{ $ctrl.model.Snapshots[0].StackCount === 1 ? 'stack' : 'stacks' }}\\n \\n \\n {{ $ctrl.model.Snapshots[0].ServiceCount }}\\n {{ $ctrl.model.Snapshots[0].ServiceCount === 1 ? 'service' : 'services' }}\\n \\n \\n {{ $ctrl.model.Snapshots[0].RunningContainerCount + $ctrl.model.Snapshots[0].StoppedContainerCount }}\\n {{ $ctrl.model.Snapshots[0].RunningContainerCount + $ctrl.model.Snapshots[0].StoppedContainerCount === 1 ? 'container' : 'containers' }}\\n 0 || $ctrl.model.Snapshots[0].StoppedContainerCount > 0\\\">\\n -\\n {{ $ctrl.model.Snapshots[0].RunningContainerCount }}\\n {{ $ctrl.model.Snapshots[0].StoppedContainerCount }}\\n /\\n {{ $ctrl.model.Snapshots[0].HealthyContainerCount }}\\n {{ $ctrl.model.Snapshots[0].UnhealthyContainerCount }}\\n \\n \\n \\n {{ $ctrl.model.Snapshots[0].VolumeCount }}\\n {{ $ctrl.model.Snapshots[0].VolumeCount === 1 ? 'volume' : 'volumes' }}\\n \\n \\n {{ $ctrl.model.Snapshots[0].ImageCount }}\\n {{ $ctrl.model.Snapshots[0].ImageCount === 1 ? 'image' : 'images' }}\\n \\n \\n \\n \\n {{ $ctrl.model.Snapshots[0].Swarm ? 'Swarm' : 'Standalone' }} {{ $ctrl.model.Snapshots[0].DockerVersion }}\\n + Agent\\n \\n {{ $ctrl.model.Snapshots[0].NodeCount }}\\n {{ $ctrl.model.Snapshots[0].NodeCount === 1 ? 'node' : 'nodes' }}\\n \\n \\n
    \\n\\n
    \\n \\n No snapshot available\\n \\n
    \\n\\n
    \\n \\n \\n {{ $ctrl.model.Kubernetes.Snapshots[0].TotalCPU }} CPU \\n \\n {{ $ctrl.model.Kubernetes.Snapshots[0].TotalMemory | humansize }} RAM\\n \\n \\n \\n \\n Kubernetes {{ $ctrl.model.Kubernetes.Snapshots[0].KubernetesVersion }}\\n \\n \\n {{ $ctrl.model.Kubernetes.Snapshots[0].NodeCount }} {{ $ctrl.model.Kubernetes.Snapshots[0].NodeCount === 1 ? 'node' : 'nodes' }}\\n \\n \\n
    \\n\\n
    \\n \\n -\\n \\n
    \\n\\n
    \\n \\n \\n \\n {{ $ctrl.model.Snapshots[0].TotalCPU }} {{ $ctrl.model.Snapshots[0].TotalMemory | humansize }}\\n \\n -\\n \\n No tags \\n 0\\\">\\n \\n {{ $ctrl.endpointTags }}\\n \\n \\n \\n {{ $ctrl.model.URL | stripprotocol }}\\n \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","module.exports = __webpack_public_path__ + \"eb45a68ab4c8d154c69396d27d5721be.png\";","module.exports = __webpack_public_path__ + \"5b98afb96054e0fa36a8299869f7f464.png\";","module.exports = __webpack_public_path__ + \"2ab6d77445159e590879381735de9ff1.png\";","import _ from 'lodash-es';\n\nangular.module('portainer.app').controller('EndpointListController', [\n 'DatatableService',\n 'PaginationService',\n function EndpointListController(DatatableService, PaginationService) {\n this.state = {\n totalFilteredEndpoints: this.totalCount,\n textFilter: '',\n filteredEndpoints: [],\n paginatedItemLimit: '10',\n pageNumber: 1,\n loading: true,\n };\n\n this.$onChanges = function (changesObj) {\n this.handleEndpointsChange(changesObj.endpoints);\n };\n\n this.handleEndpointsChange = function (endpoints) {\n if (!endpoints || !endpoints.currentValue) {\n return;\n }\n this.onTextFilterChange();\n };\n\n this.onTextFilterChange = function () {\n this.state.loading = true;\n var filterValue = this.state.textFilter;\n DatatableService.setDataTableTextFilters(this.tableKey, filterValue);\n if (this.hasBackendPagination()) {\n this.paginationChangedAction();\n } else {\n this.state.filteredEndpoints = frontEndpointFilter(this.endpoints, this.tags, filterValue);\n this.state.loading = false;\n }\n };\n\n function frontEndpointFilter(endpoints, tags, filterValue) {\n if (!endpoints || !endpoints.length || !filterValue) {\n return endpoints;\n }\n var keywords = filterValue.split(' ');\n return _.filter(endpoints, function (endpoint) {\n var statusString = convertStatusToString(endpoint.Status);\n return _.every(keywords, function (keyword) {\n var lowerCaseKeyword = keyword.toLowerCase();\n return (\n _.includes(endpoint.Name.toLowerCase(), lowerCaseKeyword) ||\n _.includes(endpoint.GroupName.toLowerCase(), lowerCaseKeyword) ||\n _.includes(endpoint.URL.toLowerCase(), lowerCaseKeyword) ||\n _.some(endpoint.TagIds, (tagId) => {\n const tag = tags.find((t) => t.Id === tagId);\n if (!tag) {\n return false;\n }\n return _.includes(tag.Name.toLowerCase(), lowerCaseKeyword);\n }) ||\n _.includes(statusString, keyword)\n );\n });\n });\n }\n\n this.hasBackendPagination = function () {\n return this.totalCount && this.totalCount > 100;\n };\n\n this.paginationChangedAction = function () {\n if (this.hasBackendPagination()) {\n this.state.loading = true;\n this.state.filteredEndpoints = [];\n const start = (this.state.pageNumber - 1) * this.state.paginatedItemLimit + 1;\n this.retrievePage(start, this.state.paginatedItemLimit, this.state.textFilter).then((data) => {\n this.state.filteredEndpoints = data.endpoints;\n this.state.totalFilteredEndpoints = data.totalCount;\n this.state.loading = false;\n });\n }\n };\n\n this.pageChangeHandler = function (newPageNumber) {\n this.state.pageNumber = newPageNumber;\n this.paginationChangedAction();\n };\n\n this.changePaginationLimit = function () {\n PaginationService.setPaginationLimit(this.tableKey, this.state.paginatedItemLimit);\n this.paginationChangedAction();\n };\n\n function convertStatusToString(status) {\n return status === 1 ? 'up' : 'down';\n }\n\n this.$onInit = function () {\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n this.state.paginatedItemLimit = PaginationService.getPaginationLimit(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n } else {\n this.paginationChangedAction();\n }\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./endpointList.html');\n\nangular.module('portainer.app').component('endpointList', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'EndpointListController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n endpoints: '<',\n tags: '<',\n tableKey: '@',\n dashboardAction: '<',\n snapshotAction: '<',\n showSnapshotAction: '<',\n editAction: '<',\n isAdmin: '<',\n totalCount: '<',\n retrievePage: '<',\n },\n});\n","var path = 'app/portainer/components/endpoint-list/endpointList.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n\\n
    \\n \\n
    \\n\\n
    \\n \\n \\n
    \\n\\n
    \\n \\n \\n
    \\n Loading...\\n
    \\n
    \\n No endpoint available.\\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./endpointSelector.html');\n\nangular.module('portainer.app').component('endpointSelector', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'EndpointSelectorController',\n bindings: {\n model: '=',\n endpoints: '<',\n groups: '<',\n },\n});\n","var path = 'app/portainer/components/endpoint-selector/endpointSelector.html';\nvar html = \"\\n \\n {{ $select.selected.Name }}\\n \\n \\n {{ endpoint.Name }}\\n \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import _ from 'lodash-es';\n\nangular.module('portainer.app').controller('EndpointSelectorController', function () {\n var ctrl = this;\n\n this.sortGroups = function (groups) {\n return _.sortBy(groups, ['name']);\n };\n\n this.groupEndpoints = function (endpoint) {\n for (var i = 0; i < ctrl.availableGroups.length; i++) {\n var group = ctrl.availableGroups[i];\n\n if (endpoint.GroupId === group.Id) {\n return group.Name;\n }\n }\n };\n\n this.$onInit = function () {\n this.availableGroups = filterEmptyGroups(this.groups, this.endpoints);\n };\n\n function filterEmptyGroups(groups, endpoints) {\n return groups.filter(function f(group) {\n for (var i = 0; i < endpoints.length; i++) {\n var endpoint = endpoints[i];\n if (endpoint.GroupId === group.Id) {\n return true;\n }\n }\n return false;\n });\n }\n});\n","const autoNgTemplateLoaderTemplate1 = require('./porEndpointSecurity.html');\n\nangular.module('portainer.app').component('porEndpointSecurity', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'porEndpointSecurityController',\n bindings: {\n // This object will be populated with the form data.\n // Model reference in endpointSecurityModel.js\n formData: '=',\n // The component will use this object to initialize the default values\n // if present.\n endpoint: '<',\n },\n});\n","var path = 'app/portainer/components/endpointSecurity/porEndpointSecurity.html';\nvar html = \"
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n TLS mode\\n
    \\n \\n
    \\n
    \\n \\n You can find out more information about how to protect a Docker environment with TLS in the\\n Docker documentation.\\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n Required TLS files\\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n \\n {{ $ctrl.formData.TLSCACert.name }}\\n \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n \\n {{ $ctrl.formData.TLSCert.name }}\\n \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n \\n {{ $ctrl.formData.TLSKey.name }}\\n \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.app').controller('porEndpointSecurityController', [\n function () {\n var ctrl = this;\n\n this.$onInit = $onInit;\n function $onInit() {\n if (ctrl.endpoint) {\n var endpoint = ctrl.endpoint;\n var TLS = endpoint.TLSConfig.TLS;\n ctrl.formData.TLS = TLS;\n var CACert = endpoint.TLSConfig.TLSCACert;\n ctrl.formData.TLSCACert = CACert;\n var cert = endpoint.TLSConfig.TLSCert;\n ctrl.formData.TLSCert = cert;\n var key = endpoint.TLSConfig.TLSKey;\n ctrl.formData.TLSKey = key;\n\n if (TLS) {\n if (CACert && cert && key) {\n ctrl.formData.TLSMode = 'tls_client_ca';\n } else if (cert && key) {\n ctrl.formData.TLSMode = 'tls_client_noca';\n } else if (CACert) {\n ctrl.formData.TLSMode = 'tls_ca';\n } else {\n ctrl.formData.TLSMode = 'tls_only';\n }\n }\n }\n }\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./environment-variables-simple-mode-item.html');\n\nimport angular from 'angular';\nimport controller from './environment-variables-simple-mode-item.controller.js';\n\nexport const environmentVariablesSimpleModeItem = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n\n bindings: {\n variable: '<',\n index: '<',\n\n onChange: '<',\n onRemove: '<',\n },\n};\n\nangular.module('portainer.app').component('environmentVariablesSimpleModeItem', environmentVariablesSimpleModeItem);\n","var path = 'app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode-item/environment-variables-simple-mode-item.html';\nvar html = \"\\n
    \\n
    \\n name\\n \\n
    \\n
    \\n
    \\n
    \\n

    Name is required.

    \\n

    \\n \\n This field must consist alphanumeric characters, '-' or '_', start with an alphabetic character, and end with an alphanumeric character (e.g. 'my-var', or 'MY_VAR123').\\n

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n value\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n

    Value is required.

    \\n

    Value is invalid.

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./environment-variables-simple-mode.html');\n\nimport angular from 'angular';\n\nimport './environment-variables-simple-mode.css';\n\nimport controller from './environment-variables-simple-mode.controller';\n\nangular.module('portainer.app').component('environmentVariablesSimpleMode', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n ngModel: '<',\n onSwitchModeClick: '<',\n onChange: '<',\n },\n});\n","var path = 'app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode.html';\nvar html = \"
    \\n \\n
    \\n \\n Switch to advanced mode to copy & paste multiple variables\\n
    \\n
    \\n \\n \\n Load variables from .env file\\n \\n \\n \\n File too large! Try uploading a file smaller than 1MB\\n \\n
    \\n
    \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./environment-variables-panel.html');\n\nimport angular from 'angular';\n\nimport './environment-variables-panel.css';\n\nimport controller from './environment-variables-panel.controller.js';\n\nangular.module('portainer.app').component('environmentVariablesPanel', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n ngModel: '<',\n explanation: '@',\n onChange: '<',\n },\n});\n","var path = 'app/portainer/components/environment-variables-panel/environment-variables-panel.html';\nvar html = \"\\n
    \\n
    \\n Environment variables\\n
    \\n
    \\n {{::$ctrl.explanation}}\\n
    \\n\\n \\n\\n
    \\n \\n
    \\n \\n Switch to simple mode to define variables line by line, or load from .env file\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./groupForm.html');\n\nimport angular from 'angular';\nimport GroupFormController from './groupFormController';\n\nangular.module('portainer.app').component('groupForm', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: GroupFormController,\n bindings: {\n loaded: '<',\n pageType: '@',\n model: '=',\n availableEndpoints: '=',\n availableTags: '<',\n associatedEndpoints: '=',\n addLabelAction: '<',\n removeLabelAction: '<',\n formAction: '<',\n formActionLabel: '@',\n actionInProgress: '<',\n onCreateTag: '<',\n },\n});\n","var path = 'app/portainer/components/forms/group-form/groupForm.html';\nvar html = \"
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n Metadata\\n
    \\n \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n Associated endpoints\\n
    \\n
    \\n
    \\n You can select which endpoint should be part of this group by moving them to the associated endpoints table. Simply click on any endpoint entry to move it from one table to\\n the other.\\n
    \\n
    \\n \\n
    \\n
    Available endpoints
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    Associated endpoints
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n Unassociated endpoints\\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n Actions\\n
    \\n
    \\n
    \\n \\n {{ $ctrl.formActionLabel }}\\n In progress...\\n \\n
    \\n
    \\n \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./por-switch-field.html');\n\nimport angular from 'angular';\n\nimport './por-switch-field.css';\n\nexport const porSwitchField = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n tooltip: '@',\n ngModel: '=',\n label: '@',\n name: '@',\n labelClass: '@',\n disabled: '<',\n onChange: '<',\n },\n};\n\nangular.module('portainer.app').component('porSwitchField', porSwitchField);\n","var path = 'app/portainer/components/forms/por-switch-field/por-switch-field.html';\nvar html = \"\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./por-switch.html');\n\nimport angular from 'angular';\n\nconst porSwitch = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n ngModel: '=',\n id: '@',\n className: '@',\n name: '@',\n disabled: '<',\n onChange: '<',\n },\n};\n\nangular.module('portainer.app').component('porSwitch', porSwitch);\n","var path = 'app/portainer/components/forms/por-switch/por-switch.html';\nvar html = \"\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./registry-form-azure.html');\n\nangular.module('portainer.app').component('registryFormAzure', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n model: '=',\n formAction: '<',\n formActionLabel: '@',\n actionInProgress: '<',\n },\n});\n","var path = 'app/portainer/components/forms/registry-form-azure/registry-form-azure.html';\nvar html = \"
    \\n
    \\n Azure registry details\\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n Actions\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./registry-form-custom.html');\n\nangular.module('portainer.app').component('registryFormCustom', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n model: '=',\n formAction: '<',\n formActionLabel: '@',\n actionInProgress: '<',\n },\n});\n","var path = 'app/portainer/components/forms/registry-form-custom/registry-form-custom.html';\nvar html = \"
    \\n
    \\n Important notice\\n
    \\n
    \\n \\n Docker requires you to connect to a secure registry. You can find more\\n information about how to connect to an insecure registry in the Docker documentation.\\n \\n
    \\n
    \\n Custom registry details\\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n Actions\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./gitlabProjectsDatatable.html');\n\nangular.module('portainer.app').component('gitlabProjectsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GitlabProjectsDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n state: '=',\n },\n});\n","var path = 'app/portainer/components/forms/registry-form-gitlab/gitlab-projects-datatable/gitlabProjectsDatatable.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Namespace\\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Path with namespace\\n \\n \\n \\n Description
    \\n \\n \\n \\n \\n {{ item.Namespace }}\\n \\n {{ item.Name }}\\n \\n {{ item.PathWithNamespace }}\\n \\n {{ item.Description }}\\n
    No projects available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.app').controller('GitlabProjectsDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n function ($scope, $controller, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n this.disableSelection = function (item) {\n return !this.allowSelection(item);\n };\n\n // based on RegistryGitlabProject model\n this.allowSelection = function (item) {\n return item.RegistryEnabled;\n };\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./registry-form-gitlab.html');\n\nangular.module('portainer.app').component('registryFormGitlab', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n model: '=',\n retrieveRegistries: '<',\n createRegistries: '<',\n actionInProgress: '<',\n projects: '=',\n state: '=',\n resetDefaults: '<',\n },\n});\n","var path = 'app/portainer/components/forms/registry-form-gitlab/registry-form-gitlab.html';\nvar html = \"
    \\n
    \\n Important notice\\n
    \\n
    \\n \\n

    \\n For information on how to generate a Gitlab Personal Access Token, follow the\\n gitlab guide.\\n

    \\n
    \\n
    \\n
    \\n Gitlab registry connection details\\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n\\n \\n\\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n Gitlab projects\\n
    \\n
    \\n \\n Select the project's registries you want to manage. Portainer will create one registry for each selected project.\\n \\n \\n \\n If you can't select a project, make sure that registry feature is activated on it.\\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n Create registries\\n In progress...\\n \\n
    \\n
    \\n \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./registry-form-quay.html');\n\nangular.module('portainer.app').component('registryFormQuay', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n model: '=',\n formAction: '<',\n formActionLabel: '@',\n actionInProgress: '<',\n },\n});\n","var path = 'app/portainer/components/forms/registry-form-quay/registry-form-quay.html';\nvar html = \"
    \\n
    \\n Quay account details\\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n
    \\n\\n \\n
    \\n Actions\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./stackFromTemplateForm.html');\n\nimport angular from 'angular';\n\nangular.module('portainer.app').component('stackFromTemplateForm', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n template: '=',\n formValues: '=',\n state: '=',\n createTemplate: '<',\n unselectTemplate: '<',\n },\n transclude: {\n advanced: '?advancedForm',\n },\n});\n","var path = 'app/portainer/components/forms/stack-from-template-form/stackFromTemplateForm.html';\nvar html = \"
    \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n Information\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n Configuration\\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n\\n \\n \\n \\n \\n
    \\n Actions\\n
    \\n
    \\n
    \\n \\n Deploy the stack\\n Deployment in progress...\\n \\n \\n
    {{ $ctrl.state.formValidationError }}
    \\n
    This template type cannot be deployed on this endpoint.\\n
    \\n
    \\n \\n \\n \\n \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./stack-redeploy-git-form.html');\n\nimport angular from 'angular';\nimport controller from './stack-redeploy-git-form.controller.js';\n\nexport const stackRedeployGitForm = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n model: '<',\n stack: '<',\n },\n};\n\nangular.module('portainer.app').component('stackRedeployGitForm', stackRedeployGitForm);\n","var path = 'app/portainer/components/forms/stack-redeploy-git-form/stack-redeploy-git-form.html';\nvar html = \"
    \\n
    \\n Redeploy from git repository\\n
    \\n
    \\n
    \\n

    \\n This stack was deployed from the git repository {{ $ctrl.model.URL }}\\n .\\n

    \\n

    \\n Update {{ $ctrl.model.ConfigFilePath }} in git and pull from here to update the stack.\\n

    \\n
    \\n
    \\n\\n \\n \\n\\n \\n Pull and redeploy \\n In progress...\\n \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./templateForm.html');\n\nangular.module('portainer.app').component('templateForm', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'TemplateFormController',\n bindings: {\n model: '=',\n categories: '<',\n networks: '<',\n formAction: '<',\n formActionLabel: '@',\n actionInProgress: '<',\n showTypeSelector: '<',\n },\n});\n","var path = 'app/portainer/components/forms/template-form/templateForm.html';\nvar html = \"
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n
    \\n Template\\n \\n expand\\n collapse\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n It supports HTML.\\\"\\n >\\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n {{ $item }}\\n \\n {{ category }}\\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n Stack\\n \\n expand\\n collapse\\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n Container\\n \\n expand\\n collapse\\n \\n
    \\n \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n map additional port\\n \\n
    \\n
    0\\\">\\n Portainer will automatically assign a port if you leave the host port empty.\\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n host\\n \\n
    \\n \\n \\n \\n \\n \\n
    \\n container\\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n map additional volume\\n \\n
    \\n
    0\\\">\\n Portainer will automatically create and map a local volume when using the auto option.\\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n container\\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n \\n
    \\n \\n \\n
    \\n host\\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n add label\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n name\\n \\n
    \\n
    \\n value\\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n Environment\\n \\n expand\\n collapse\\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n add variable\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n add allowed value\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n name\\n \\n
    \\n
    \\n value\\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    1\\\">\\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n \\n
    \\n Actions\\n
    \\n
    \\n
    \\n \\n {{ $ctrl.formActionLabel }}\\n In progress...\\n \\n
    \\n
    \\n \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.app').controller('TemplateFormController', [\n function () {\n this.state = {\n collapseTemplate: false,\n collapseContainer: false,\n collapseStack: false,\n collapseEnv: false,\n };\n\n this.addPortBinding = function () {\n this.model.Ports.push({ containerPort: '', protocol: 'tcp' });\n };\n\n this.removePortBinding = function (index) {\n this.model.Ports.splice(index, 1);\n };\n\n this.addVolume = function () {\n this.model.Volumes.push({ container: '', bind: '', readonly: false, type: 'auto' });\n };\n\n this.removeVolume = function (index) {\n this.model.Volumes.splice(index, 1);\n };\n\n this.addLabel = function () {\n this.model.Labels.push({ name: '', value: '' });\n };\n\n this.removeLabel = function (index) {\n this.model.Labels.splice(index, 1);\n };\n\n this.addEnvVar = function () {\n this.model.Env.push({ type: 1, name: '', label: '', description: '', default: '', preset: true, select: [] });\n };\n\n this.removeEnvVar = function (index) {\n this.model.Env.splice(index, 1);\n };\n\n this.addEnvVarValue = function (env) {\n env.select = env.select || [];\n env.select.push({ name: '', value: '' });\n };\n\n this.removeEnvVarValue = function (env, index) {\n env.select.splice(index, 1);\n };\n\n this.changeEnvVarType = function (env) {\n env.preset = env.type === 1;\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./groupAssociationTable.html');\n\nimport _ from 'lodash-es';\nimport PortainerEndpointTagHelper from 'Portainer/helpers/tagHelper';\n\nangular.module('portainer.app').component('groupAssociationTable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: function () {\n this.state = {\n orderBy: 'Name',\n reverseOrder: false,\n paginatedItemLimit: '10',\n textFilter: '',\n loading: true,\n pageNumber: 1,\n };\n\n this.changeOrderBy = function (orderField) {\n this.state.reverseOrder = this.state.orderBy === orderField ? !this.state.reverseOrder : false;\n this.state.orderBy = orderField;\n };\n\n this.onTextFilterChange = function () {\n this.paginationChangedAction();\n };\n\n this.onPageChanged = function (newPageNumber) {\n this.paginationState.pageNumber = newPageNumber;\n this.paginationChangedAction();\n };\n\n this.onPaginationLimitChanged = function () {\n this.paginationChangedAction();\n };\n\n this.paginationChangedAction = function () {\n this.retrievePage(this.pageType, this.tableType);\n };\n\n this.$onChanges = function (changes) {\n if (changes.loaded && changes.loaded.currentValue) {\n this.paginationChangedAction();\n }\n };\n\n this.tagIdsToTagNames = function tagIdsToTagNames(tagIds) {\n return PortainerEndpointTagHelper.idsToTagNames(this.tags, tagIds).join(', ') || '-';\n };\n\n this.groupIdToGroupName = function groupIdToGroupName(groupId) {\n const group = _.find(this.groups, { Id: groupId });\n return group ? group.Name : '';\n };\n },\n bindings: {\n paginationState: '=',\n loaded: '<',\n pageType: '<',\n tableType: '@',\n retrievePage: '<',\n dataset: '<',\n entryClick: '<',\n emptyDatasetMessage: '@',\n tags: '<',\n showTags: '<',\n groups: '<',\n showGroups: '<',\n hasBackendPagination: '<',\n },\n});\n","var path = 'app/portainer/components/group-association-table/groupAssociationTable.html';\nvar html = \"
    \\n \\n
    \\n \\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n
    \\n Name\\n \\n Group\\n \\n Tags\\n
    \\n {{ item.Name | truncate: 64 }}\\n \\n {{ $ctrl.groupIdToGroupName(item.GroupId) | truncate: 64 }}\\n \\n {{ $ctrl.tagIdsToTagNames(item.TagIds) | arraytostr | truncate: 64 }}\\n
    \\n {{ item.Name | truncate: 64 }}\\n \\n {{ $ctrl.groupIdToGroupName(item.GroupId) | truncate: 64 }}\\n \\n {{ $ctrl.tagIdsToTagNames(item.TagIds) | truncate: 64 }}\\n
    Loading...
    {{ $ctrl.emptyDatasetMessage }}
    \\n
    \\n
    \\n
    \\n \\n \\n Items per page\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.app').directive('rdHeaderContent', [\n 'Authentication',\n function rdHeaderContent(Authentication) {\n var directive = {\n requires: '^rdHeader',\n transclude: true,\n link: function (scope) {\n scope.username = Authentication.getUserDetails().username;\n },\n template:\n '',\n restrict: 'E',\n };\n return directive;\n },\n]);\n","angular.module('portainer.app').directive('rdHeaderTitle', [\n 'Authentication',\n function rdHeaderTitle(Authentication) {\n var directive = {\n requires: '^rdHeader',\n scope: {\n titleText: '@',\n },\n link: function (scope) {\n scope.username = Authentication.getUserDetails().username;\n },\n transclude: true,\n template:\n '
    {{titleText}} {{username}}
    ',\n restrict: 'E',\n };\n return directive;\n },\n]);\n","angular.module('portainer.app').directive('rdHeader', function rdHeader() {\n var directive = {\n scope: {\n ngModel: '=',\n },\n transclude: true,\n template: '
    ',\n restrict: 'EA',\n };\n return directive;\n});\n","const autoNgTemplateLoaderTemplate1 = require('./informationPanelOffline.html');\n\nangular.module('portainer.app').component('informationPanelOffline', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'InformationPanelOfflineController',\n});\n","var path = 'app/portainer/components/information-panel-offline/informationPanelOffline.html';\nvar html = \"\\n \\n

    \\n \\n This endpoint is currently offline (read-only). Data shown is based on the latest available snapshot.\\n

    \\n

    \\n \\n Last snapshot: {{ $ctrl.snapshotTime | getisodatefromtimestamp }}\\n

    \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.app').controller('InformationPanelOfflineController', [\n '$state',\n 'EndpointProvider',\n 'EndpointService',\n 'Authentication',\n 'Notifications',\n function StackDuplicationFormController($state, EndpointProvider, EndpointService, Authentication, Notifications) {\n var ctrl = this;\n\n this.$onInit = onInit;\n this.triggerSnapshot = triggerSnapshot;\n\n function triggerSnapshot() {\n var endpointId = EndpointProvider.endpointID();\n\n EndpointService.snapshotEndpoint(endpointId)\n .then(function onSuccess() {\n $state.reload();\n })\n .catch(function onError(err) {\n Notifications.error('Failure', err, 'An error occured during endpoint snapshot');\n });\n }\n\n function onInit() {\n var endpointId = EndpointProvider.endpointID();\n ctrl.showRefreshButton = Authentication.isAdmin();\n\n EndpointService.endpoint(endpointId)\n .then(function onSuccess(data) {\n ctrl.snapshotTime = data.Snapshots[0].Time;\n })\n .catch(function onError(err) {\n Notifications.error('Failure', err, 'Unable to retrieve endpoint information');\n });\n }\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./informationPanel.html');\n\nangular.module('portainer.app').component('informationPanel', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n titleText: '@',\n dismissAction: '&?',\n },\n transclude: true,\n});\n","var path = 'app/portainer/components/information-panel/informationPanel.html';\nvar html = \"
    \\n
    \\n \\n \\n
    \\n \\n {{ $ctrl.titleText }}\\n \\n \\n dismiss\\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.app').directive('rdLoading', function rdLoading() {\n var directive = {\n restrict: 'AE',\n template: '
    ',\n };\n return directive;\n});\n","const autoNgTemplateLoaderTemplate1 = require('./motdPanel.html');\n\nangular.module('portainer.app').component('motdPanel', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n motd: '<',\n dismissAction: '&?',\n },\n transclude: true,\n});\n","var path = 'app/portainer/components/motd-panel/motdPanel.html';\nvar html = \"
    \\n
    \\n \\n \\n \\n
    \\n
    \\n \\n {{ $ctrl.motd.Title }}\\n \\n \\n dismiss\\n \\n
    \\n
    \\n \\n

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.app').directive('onEnterKey', [\n function porOnEnterKey() {\n var directive = {\n restrict: 'A',\n link: function (scope, element, attrs) {\n element.bind('keydown keypress', function (e) {\n if (e.which === 13) {\n e.preventDefault();\n scope.$apply(function () {\n scope.$eval(attrs.onEnterKey);\n });\n }\n });\n },\n };\n\n return directive;\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./productItem.html');\n\nangular.module('portainer.app').component('productItem', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n model: '<',\n goTo: '<',\n },\n});\n","var path = 'app/portainer/components/product-list/product-item/productItem.html';\nvar html = \"\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n {{ $ctrl.model.Name }}\\n \\n \\n
    \\n \\n \\n
    \\n \\n \\n {{ $ctrl.model.ShortDescription }}\\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","module.exports = __webpack_public_path__ + \"6b03ffb82223ffdcc7fc093f199f758b.png\";","module.exports = __webpack_public_path__ + \"249bec13697c484bcfe40241cabfd053.png\";","const autoNgTemplateLoaderTemplate1 = require('./productList.html');\n\nangular.module('portainer.app').component('productList', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n titleText: '@',\n products: '<',\n goTo: '<',\n },\n});\n","var path = 'app/portainer/components/product-list/productList.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n\\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./slider.html');\n\nangular.module('portainer.app').component('slider', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'SliderController',\n bindings: {\n model: '=',\n onChange: '&',\n floor: '<',\n ceil: '<',\n step: '<',\n precision: '<',\n },\n});\n","var path = 'app/portainer/components/slider/slider.html';\nvar html = \"
    \\n \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","// TODO: k8s merge - TEST WITH EXISTING SLIDERS !\n// Not sure if this is not breaking existing sliders on docker views\n// Or sliders with onChange call (docker service update view)\nimport angular from 'angular';\n\nclass SliderController {\n /* @ngInject */\n constructor($scope) {\n this.$scope = $scope;\n\n this.buildOptions = this.buildOptions.bind(this);\n this.translate = this.translate.bind(this);\n }\n\n $onChanges() {\n this.buildOptions();\n }\n\n translate(value, sliderId, label) {\n if ((label === 'floor' && this.floor === 0) || value === 0) {\n return 'unlimited';\n }\n return value;\n }\n\n buildOptions() {\n this.options = {\n floor: this.floor,\n ceil: this.ceil,\n step: this.step,\n precision: this.precision,\n showSelectionBar: true,\n enforceStep: false,\n translate: this.translate,\n onChange: () => this.onChange(),\n };\n }\n\n $onInit() {\n this.buildOptions();\n }\n}\n\nexport default SliderController;\nangular.module('portainer.app').controller('SliderController', SliderController);\n","angular.module('portainer.app').controller('StackDuplicationFormController', [\n 'Notifications',\n function StackDuplicationFormController(Notifications) {\n var ctrl = this;\n\n ctrl.state = {\n duplicationInProgress: false,\n migrationInProgress: false,\n };\n\n ctrl.formValues = {\n endpoint: null,\n newName: '',\n };\n\n ctrl.isFormValidForDuplication = isFormValidForDuplication;\n ctrl.isFormValidForMigration = isFormValidForMigration;\n ctrl.duplicateStack = duplicateStack;\n ctrl.migrateStack = migrateStack;\n ctrl.isMigrationButtonDisabled = isMigrationButtonDisabled;\n\n function isFormValidForMigration() {\n return ctrl.formValues.endpoint && ctrl.formValues.endpoint.Id;\n }\n\n function isFormValidForDuplication() {\n return isFormValidForMigration() && ctrl.formValues.newName && !ctrl.yamlError;\n }\n\n function duplicateStack() {\n if (!ctrl.formValues.newName) {\n Notifications.error('Failure', null, 'Stack name is required for duplication');\n return;\n }\n ctrl.state.duplicationInProgress = true;\n ctrl\n .onDuplicate({\n endpointId: ctrl.formValues.endpoint.Id,\n name: ctrl.formValues.newName ? ctrl.formValues.newName : undefined,\n })\n .finally(function () {\n ctrl.state.duplicationInProgress = false;\n });\n }\n\n function migrateStack() {\n ctrl.state.migrationInProgress = true;\n ctrl\n .onMigrate({\n endpointId: ctrl.formValues.endpoint.Id,\n name: ctrl.formValues.newName ? ctrl.formValues.newName : undefined,\n })\n .finally(function () {\n ctrl.state.migrationInProgress = false;\n });\n }\n\n function isMigrationButtonDisabled() {\n return !ctrl.isFormValidForMigration() || ctrl.state.duplicationInProgress || ctrl.state.migrationInProgress || isTargetEndpointAndCurrentEquals();\n }\n\n function isTargetEndpointAndCurrentEquals() {\n return ctrl.formValues.endpoint && ctrl.formValues.endpoint.Id === ctrl.currentEndpointId;\n }\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./stack-duplication-form.html');\n\nangular.module('portainer.app').component('stackDuplicationForm', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'StackDuplicationFormController',\n bindings: {\n onDuplicate: '&',\n onMigrate: '&',\n endpoints: '<',\n groups: '<',\n currentEndpointId: '<',\n yamlError: '<',\n },\n});\n","var path = 'app/portainer/components/stack-duplication-form/stack-duplication-form.html';\nvar html = \"
    \\n
    \\n Stack duplication / migration\\n
    \\n
    \\n \\n

    \\n This feature allows you to duplicate or migrate this stack.\\n

    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n \\n Migrate \\n Migration in progress...\\n \\n \\n Duplicate \\n Duplication in progress...\\n \\n
    {{ $ctrl.yamlError }}\\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./tagSelector.html');\n\nangular.module('portainer.app').component('tagSelector', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'TagSelectorController',\n bindings: {\n tags: '<',\n model: '=',\n onCreate: '<',\n allowCreate: '<',\n },\n});\n","var path = 'app/portainer/components/tag-selector/tagSelector.html';\nvar html = \"
    0\\\" class=\\\"col-sm-12\\\" style=\\\"padding: 0; margin-bottom: 15px;\\\">\\n \\n
    \\n \\n {{ tag.Name }}\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n
    0\\\">\\n \\n
    \\n
    \\n \\n No tags available.\\n \\n
    \\n
    \\n
    \\n \\n No tags matching your filter.\\n \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\nimport _ from 'lodash-es';\n\nclass TagSelectorController {\n /* @ngInject */\n constructor() {\n this.state = {\n selectedValue: '',\n selectedTags: [],\n noResult: false,\n };\n }\n\n removeTag(tag) {\n _.remove(this.model, (id) => tag.Id === id);\n _.remove(this.state.selectedTags, { Id: tag.Id });\n }\n\n selectTag($item) {\n this.state.selectedValue = '';\n if ($item.create && this.allowCreate) {\n this.onCreate($item.value);\n return;\n }\n this.state.selectedTags.push($item);\n this.model.push($item.Id);\n }\n\n filterTags(searchValue) {\n let filteredTags = _.filter(this.tags, (tag) => !_.includes(this.model, tag.Id));\n if (!searchValue) {\n return filteredTags;\n }\n\n const exactTag = _.find(this.tags, (tag) => tag.Name === searchValue);\n filteredTags = _.filter(filteredTags, (tag) => _.includes(tag.Name.toLowerCase(), searchValue.toLowerCase()));\n if (exactTag || !this.allowCreate) {\n return filteredTags;\n }\n\n return filteredTags.concat({ Name: `Create \"${searchValue}\"`, create: true, value: searchValue });\n }\n\n generateSelectedTags(model, tags) {\n this.state.selectedTags = _.map(model, (id) => _.find(tags, (t) => t.Id === id));\n }\n\n $onInit() {\n this.generateSelectedTags(this.model, this.tags);\n }\n\n $onChanges({ tags, model }) {\n const tagsValue = tags && tags.currentValue ? tags.currentValue : this.tags;\n const modelValue = model && model.currentValue ? model.currentValue : this.model;\n if (modelValue && tagsValue) {\n this.generateSelectedTags(modelValue, tagsValue);\n }\n }\n}\n\nexport default TagSelectorController;\nangular.module('portainer.app').controller('TagSelectorController', TagSelectorController);\n","const autoNgTemplateLoaderTemplate1 = require('./templateItem.html');\n\nimport angular from 'angular';\n\nimport './template-item.css';\n\nangular.module('portainer.app').component('templateItem', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n model: '<',\n typeLabel: '@',\n onSelect: '<',\n },\n transclude: {\n actions: '?templateItemActions',\n },\n});\n","var path = 'app/portainer/components/template-list/template-item/templateItem.html';\nvar html = \"\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n
    \\n \\n \\n {{ $ctrl.model.Title }}\\n \\n \\n \\n \\n & \\n \\n \\n \\n {{ $ctrl.typeLabel }}\\n \\n \\n \\n
    \\n \\n \\n \\n
    \\n \\n {{ $ctrl.model.Description }}\\n \\n 0\\\">\\n {{ $ctrl.model.Categories.join(', ') }}\\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import _ from 'lodash-es';\n\nangular.module('portainer.app').controller('TemplateListController', TemplateListController);\n\nfunction TemplateListController($async, $state, DatatableService, Notifications, TemplateService) {\n var ctrl = this;\n\n this.state = {\n textFilter: '',\n selectedCategory: '',\n categories: [],\n showContainerTemplates: true,\n };\n\n this.onTextFilterChange = function () {\n DatatableService.setDataTableTextFilters(this.tableKey, this.state.textFilter);\n };\n\n this.updateCategories = function () {\n var availableCategories = [];\n\n for (var i = 0; i < ctrl.templates.length; i++) {\n var template = ctrl.templates[i];\n if ((template.Type === 1 && ctrl.state.showContainerTemplates) || (template.Type === 2 && ctrl.showSwarmStacks) || (template.Type === 3 && !ctrl.showSwarmStacks)) {\n availableCategories = availableCategories.concat(template.Categories);\n }\n }\n\n this.state.categories = _.sortBy(_.uniq(availableCategories));\n };\n\n this.filterByCategory = function (item) {\n if (!ctrl.state.selectedCategory) {\n return true;\n }\n\n return _.includes(item.Categories, ctrl.state.selectedCategory);\n };\n\n this.filterByType = function (item) {\n if ((item.Type === 1 && ctrl.state.showContainerTemplates) || (item.Type === 2 && ctrl.showSwarmStacks) || (item.Type === 3 && !ctrl.showSwarmStacks)) {\n return true;\n }\n return false;\n };\n\n this.duplicateTemplate = duplicateTemplate.bind(this);\n this.duplicateTemplateAsync = duplicateTemplateAsync.bind(this);\n function duplicateTemplate(template) {\n return $async(this.duplicateTemplateAsync, template);\n }\n\n async function duplicateTemplateAsync(template) {\n try {\n const { FileContent: fileContent } = await TemplateService.templateFile(template.Repository.url, template.Repository.stackfile);\n let type = 0;\n if (template.Type === 2) {\n type = 1;\n }\n if (template.Type === 3) {\n type = 2;\n }\n $state.go('docker.templates.custom.new', { fileContent, type });\n } catch (err) {\n Notifications.error('Failure', err, 'Failed to duplicate template');\n }\n }\n\n this.$onInit = function () {\n if (this.showSwarmStacks) {\n this.state.showContainerTemplates = false;\n }\n this.updateCategories();\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n }\n };\n}\n","const autoNgTemplateLoaderTemplate1 = require('./templateList.html');\n\nangular.module('portainer.app').component('templateList', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'TemplateListController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n templates: '<',\n tableKey: '@',\n selectAction: '<',\n showSwarmStacks: '<',\n },\n});\n","var path = 'app/portainer/components/template-list/templateList.html';\nvar html = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n {{ $select.selected }}\\n \\n \\n {{ category }}\\n \\n \\n \\n
    \\n\\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n \\n \\n
    \\n\\n
    \\n \\n \\n \\n \\n \\n
    \\n Loading...\\n
    \\n
    \\n No templates available.\\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.app').directive('rdTemplateWidget', function rdWidget() {\n var directive = {\n scope: {\n ngModel: '=',\n },\n transclude: true,\n template: '
    ',\n restrict: 'EA',\n };\n return directive;\n});\n","angular.module('portainer.app').directive('portainerTooltip', [\n function portainerTooltip() {\n var directive = {\n scope: {\n message: '@',\n position: '@',\n customStyle: '\n \n `,\n restrict: 'E',\n };\n return directive;\n },\n]);\n","angular.module('portainer.app').directive('rdWidgetBody', function rdWidgetBody() {\n var directive = {\n requires: '^rdWidget',\n scope: {\n loading: '@?',\n classes: '@?',\n },\n transclude: true,\n template: '
    ',\n restrict: 'E',\n };\n return directive;\n});\n","angular.module('portainer.app').directive('rdWidgetCustomHeader', function rdWidgetCustomHeader() {\n var directive = {\n requires: '^rdWidget',\n scope: {\n titleText: '=',\n icon: '=',\n },\n transclude: true,\n template:\n '
    {{titleText}}
    ',\n restrict: 'E',\n };\n return directive;\n});\n","angular.module('portainer.app').directive('rdWidgetFooter', function rdWidgetFooter() {\n var directive = {\n requires: '^rdWidget',\n transclude: true,\n template: '
    ',\n restrict: 'E',\n };\n return directive;\n});\n","angular.module('portainer.app').directive('rdWidgetHeader', function rdWidgetTitle() {\n var directive = {\n requires: '^rdWidget',\n scope: {\n titleText: '@',\n icon: '@',\n classes: '@?',\n },\n transclude: true,\n template:\n '
    {{titleText}}
    ',\n restrict: 'E',\n };\n return directive;\n});\n","angular.module('portainer.app').directive('rdWidgetTaskbar', function rdWidgetTaskbar() {\n var directive = {\n requires: '^rdWidget',\n scope: {\n classes: '@?',\n },\n transclude: true,\n template: '
    ',\n restrict: 'E',\n };\n return directive;\n});\n","angular.module('portainer.app').directive('rdWidget', function rdWidget() {\n var directive = {\n scope: {\n ngModel: '=',\n },\n transclude: true,\n template: '
    ',\n restrict: 'EA',\n };\n return directive;\n});\n","import moment from 'moment';\nimport _ from 'lodash-es';\nimport filesize from 'filesize';\n\nimport { ResourceControlOwnership as RCO } from 'Portainer/models/resourceControl/resourceControlOwnership';\n\nangular\n .module('portainer.app')\n .filter('truncate', function () {\n 'use strict';\n return function (text, length, end) {\n if (isNaN(length)) {\n length = 10;\n }\n\n if (end === undefined) {\n end = '...';\n }\n\n if (text.length <= length || text.length - end.length <= length) {\n return text;\n } else {\n return String(text).substring(0, length - end.length) + end;\n }\n };\n })\n .filter('truncatelr', function () {\n 'use strict';\n return function (text, max, left, right) {\n max = isNaN(max) ? 50 : max;\n left = isNaN(left) ? 25 : left;\n right = isNaN(right) ? 25 : right;\n\n if (text.length <= max) {\n return text;\n } else {\n return text.substring(0, left) + '[...]' + text.substring(text.length - right, text.length);\n }\n };\n })\n .filter('capitalize', function () {\n 'use strict';\n return function (text) {\n return text ? _.capitalize(text) : '';\n };\n })\n .filter('stripprotocol', function () {\n 'use strict';\n return function (url) {\n return url.replace(/.*?:\\/\\//g, '');\n };\n })\n .filter('humansize', function () {\n 'use strict';\n return function (bytes, round, base) {\n if (!round) {\n round = 1;\n }\n if (!base) {\n base = 10;\n }\n if (bytes || bytes === 0) {\n return filesize(bytes, { base: base, round: round });\n }\n };\n })\n .filter('getisodatefromtimestamp', function () {\n 'use strict';\n return function (timestamp) {\n return moment.unix(timestamp).format('YYYY-MM-DD HH:mm:ss');\n };\n })\n .filter('getisodate', function () {\n 'use strict';\n return function (date) {\n return moment(date).format('YYYY-MM-DD HH:mm:ss');\n };\n })\n .filter('key', function () {\n 'use strict';\n return function (pair, separator) {\n if (!pair.includes(separator)) {\n return pair;\n }\n\n return pair.slice(0, pair.indexOf(separator));\n };\n })\n .filter('value', function () {\n 'use strict';\n return function (pair, separator) {\n if (!pair.includes(separator)) {\n return '';\n }\n\n return pair.slice(pair.indexOf(separator) + 1);\n };\n })\n .filter('emptyobject', function () {\n 'use strict';\n return function (obj) {\n return _.isEmpty(obj);\n };\n })\n .filter('ipaddress', function () {\n 'use strict';\n return function (ip) {\n return ip.slice(0, ip.indexOf('/'));\n };\n })\n .filter('arraytostr', function () {\n 'use strict';\n return function (arr, separator) {\n if (arr) {\n return _.join(arr, separator);\n }\n return '';\n };\n })\n .filter('labelsToStr', function () {\n 'use strict';\n return function (arr, separator) {\n if (arr) {\n return _.join(\n arr.map((item) => item.key + ':' + item.value),\n separator\n );\n }\n return '';\n };\n })\n .filter('endpointtypename', function () {\n 'use strict';\n return function (type) {\n if (type === 1) {\n return 'Docker';\n } else if (type === 2 || type === 6) {\n return 'Agent';\n } else if (type === 3) {\n return 'Azure ACI';\n } else if (type === 5) {\n return 'Kubernetes';\n } else if (type === 4 || type === 7) {\n return 'Edge Agent';\n }\n return '';\n };\n })\n .filter('endpointtypeicon', function () {\n 'use strict';\n return function (type) {\n if (type === 3) {\n return 'fab fa-microsoft';\n } else if (type === 4) {\n return 'fa fa-cloud';\n } else if (type === 5 || type === 6 || type === 7) {\n return 'fas fa-dharmachakra';\n }\n return 'fab fa-docker';\n };\n })\n .filter('ownershipicon', function () {\n 'use strict';\n return function (ownership) {\n switch (ownership) {\n case RCO.PRIVATE:\n return 'fa fa-eye-slash';\n case RCO.ADMINISTRATORS:\n return 'fa fa-eye-slash';\n case RCO.RESTRICTED:\n return 'fa fa-users';\n default:\n return 'fa fa-eye';\n }\n };\n })\n .filter('endpointstatusbadge', function () {\n 'use strict';\n return function (status) {\n if (status === 2) {\n return 'danger';\n }\n return 'success';\n };\n });\n","import _ from 'lodash-es';\n\nangular.module('portainer.app').factory('EndpointHelper', [\n function EndpointHelperFactory() {\n 'use strict';\n var helper = {};\n\n function findAssociatedGroup(endpoint, groups) {\n return _.find(groups, function (group) {\n return group.Id === endpoint.GroupId;\n });\n }\n\n helper.isLocalEndpoint = isLocalEndpoint;\n function isLocalEndpoint(endpoint) {\n return endpoint.URL.includes('unix://') || endpoint.URL.includes('npipe://') || endpoint.Type === 5;\n }\n\n helper.isAgentEndpoint = isAgentEndpoint;\n function isAgentEndpoint(endpoint) {\n return [2, 4, 6, 7].includes(endpoint.Type);\n }\n\n helper.mapGroupNameToEndpoint = function (endpoints, groups) {\n for (var i = 0; i < endpoints.length; i++) {\n var endpoint = endpoints[i];\n var group = findAssociatedGroup(endpoint, groups);\n if (group) {\n endpoint.GroupName = group.Name;\n }\n }\n };\n\n return helper;\n },\n]);\n","angular.module('portainer.app').factory('FormHelper', [\n function FormHelperFactory() {\n 'use strict';\n var helper = {};\n\n helper.removeInvalidEnvVars = function (env) {\n for (var i = env.length - 1; i >= 0; i--) {\n var envvar = env[i];\n if (!envvar.value || !envvar.name) {\n env.splice(i, 1);\n }\n }\n\n return env;\n };\n\n return helper;\n },\n]);\n","import _ from 'lodash-es';\nimport angular from 'angular';\n\nclass NetworkHelper {\n /* @ngInject */\n constructor(PREDEFINED_NETWORKS) {\n this.PREDEFINED_NETWORKS = PREDEFINED_NETWORKS;\n }\n\n isSystemNetwork(item) {\n return _.includes(this.PREDEFINED_NETWORKS, item.Name);\n }\n}\n\nexport default NetworkHelper;\nangular.module('portainer.app').service('NetworkHelper', NetworkHelper);\n","import _ from 'lodash-es';\nimport angular from 'angular';\nimport { ResourceControlOwnership as RCO } from 'Portainer/models/resourceControl/resourceControlOwnership';\nimport { ResourceControlOwnershipParameters } from '../models/resourceControl/resourceControlOwnershipParameters';\n\nclass ResourceControlHelper {\n /**\n * Transform ResourceControlViewModel to ResourceControlOwnershipParameters\n * @param {int} userId ID of User performing the action\n * @param {ResourceControlViewModel} resourceControl ResourceControl view model\n */\n RCViewModelToOwnershipParameters(userId, resourceControl) {\n if (!resourceControl) {\n return new ResourceControlOwnershipParameters(true);\n }\n let adminOnly = false;\n let publicOnly = false;\n let users = [];\n let teams = [];\n switch (resourceControl.Ownership) {\n case RCO.PUBLIC:\n publicOnly = true;\n break;\n case RCO.PRIVATE:\n users = [userId];\n break;\n case RCO.RESTRICTED:\n users = _.map(resourceControl.UserAccesses, (user) => user.UserId);\n teams = _.map(resourceControl.TeamAccesses, (team) => team.TeamId);\n break;\n default:\n adminOnly = true;\n break;\n }\n return new ResourceControlOwnershipParameters(adminOnly, publicOnly, users, teams);\n }\n\n /**\n * Transform AccessControlFormData to ResourceControlOwnershipParameters\n * @param {int} userId ID of user performing the operation\n * @param {AccessControlFormData} formValues Form data (generated by AccessControlForm)\n * @param {int[]} subResources Sub Resources restricted by the ResourceControl\n */\n RCFormDataToOwnershipParameters(userId, formValues, subResources = []) {\n if (!formValues.AccessControlEnabled) {\n formValues.Ownership = RCO.PUBLIC;\n }\n\n let adminOnly = false;\n let publicOnly = false;\n let users = [];\n let teams = [];\n switch (formValues.Ownership) {\n case RCO.PUBLIC:\n publicOnly = true;\n break;\n case RCO.PRIVATE:\n users.push(userId);\n break;\n case RCO.RESTRICTED:\n users = _.map(formValues.AuthorizedUsers, (user) => user.Id);\n teams = _.map(formValues.AuthorizedTeams, (team) => team.Id);\n break;\n default:\n adminOnly = true;\n break;\n }\n return new ResourceControlOwnershipParameters(adminOnly, publicOnly, users, teams, subResources);\n }\n\n /**\n * Transform AccessControlPanelData to ResourceControlOwnershipParameters\n * @param {AccessControlPanelData} formValues Form data (generated by AccessControlPanel)\n */\n RCPanelDataToOwnershipParameters(formValues) {\n const adminOnly = formValues.Ownership === RCO.ADMINISTRATORS;\n const publicOnly = formValues.Ownership === RCO.PUBLIC;\n const userIds = publicOnly || adminOnly ? [] : _.map(formValues.Ownership_Users, (user) => user.Id);\n const teamIds = publicOnly || adminOnly ? [] : _.map(formValues.Ownership_Teams, (team) => team.Id);\n\n return new ResourceControlOwnershipParameters(adminOnly, publicOnly, userIds, teamIds);\n }\n\n retrieveAuthorizedUsers(resourceControl, users) {\n const authorizedUsers = [];\n _.forEach(resourceControl.UserAccesses, (access) => {\n const user = _.find(users, { Id: access.UserId });\n if (user) {\n authorizedUsers.push(user);\n }\n });\n return authorizedUsers;\n }\n\n retrieveAuthorizedTeams(resourceControl, teams) {\n const authorizedTeams = [];\n _.forEach(resourceControl.TeamAccesses, (access) => {\n const team = _.find(teams, { Id: access.TeamId });\n if (team) {\n authorizedTeams.push(team);\n }\n });\n return authorizedTeams;\n }\n\n isLeaderOfAnyRestrictedTeams(userMemberships, resourceControl) {\n let isTeamLeader = false;\n _.forEach(userMemberships, (membership) => {\n const found = _.find(resourceControl.TeamAccesses, { TeamId: membership.TeamId });\n if (found && membership.Role === 1) {\n isTeamLeader = true;\n return false;\n }\n });\n return isTeamLeader;\n }\n}\n\nexport default ResourceControlHelper;\nangular.module('portainer.app').service('ResourceControlHelper', ResourceControlHelper);\n","import _ from 'lodash-es';\nimport YAML from 'yaml';\nimport GenericHelper from '@/portainer/helpers/genericHelper';\nimport { ExternalStackViewModel } from '@/portainer/models/stack';\n\nangular.module('portainer.app').factory('StackHelper', [\n function StackHelperFactory() {\n 'use strict';\n var helper = {};\n\n helper.getExternalStacksFromContainers = function (containers) {\n return getExternalStacksFromLabel(containers, 'com.docker.compose.project', 2);\n };\n\n helper.getExternalStacksFromServices = function (services) {\n return getExternalStacksFromLabel(services, 'com.docker.stack.namespace', 1);\n };\n\n function getExternalStacksFromLabel(items, label, type) {\n return _.uniqBy(\n items.filter((item) => item.Labels && item.Labels[label]).map((item) => new ExternalStackViewModel(item.Labels[label], type, item.Created)),\n 'Name'\n );\n }\n\n helper.validateYAML = function (yaml, containerNames) {\n let yamlObject;\n\n try {\n yamlObject = YAML.parse(yaml);\n } catch (err) {\n return 'There is an error in the yaml syntax: ' + err;\n }\n\n const names = _.uniq(GenericHelper.findDeepAll(yamlObject, 'container_name'));\n const duplicateContainers = _.intersection(containerNames, names);\n\n if (duplicateContainers.length === 0) return;\n\n return (\n (duplicateContainers.length === 1 ? 'This container name is' : 'These container names are') +\n ' already used by another container running in this environment: ' +\n _.join(duplicateContainers, ', ') +\n '.'\n );\n };\n\n return helper;\n },\n]);\n","import _ from 'lodash-es';\n\nangular.module('portainer.app').factory('TemplateHelper', [\n function TemplateHelperFactory() {\n 'use strict';\n var helper = {};\n\n helper.getDefaultContainerConfiguration = function () {\n return {\n Env: [],\n OpenStdin: false,\n Tty: false,\n ExposedPorts: {},\n HostConfig: {\n RestartPolicy: {\n Name: 'no',\n },\n PortBindings: {},\n Binds: [],\n Privileged: false,\n ExtraHosts: [],\n },\n Volumes: {},\n Labels: {},\n };\n };\n\n helper.portArrayToPortConfiguration = function (ports) {\n var portConfiguration = {\n bindings: {},\n exposedPorts: {},\n };\n ports.forEach(function (p) {\n if (p.containerPort) {\n var key = p.containerPort + '/' + p.protocol;\n var binding = {};\n if (p.hostPort) {\n binding.HostPort = p.hostPort;\n if (p.hostPort.indexOf(':') > -1) {\n var hostAndPort = p.hostPort.split(':');\n binding.HostIp = hostAndPort[0];\n binding.HostPort = hostAndPort[1];\n }\n }\n portConfiguration.bindings[key] = [binding];\n portConfiguration.exposedPorts[key] = {};\n }\n });\n return portConfiguration;\n };\n\n helper.updateContainerConfigurationWithLabels = function (labelsArray) {\n var labels = {};\n labelsArray.forEach(function (l) {\n if (l.name) {\n if (l.value) {\n labels[l.name] = l.value;\n } else {\n labels[l.name] = '';\n }\n }\n });\n return labels;\n };\n\n helper.EnvToStringArray = function (templateEnvironment) {\n var env = [];\n templateEnvironment.forEach(function (envvar) {\n if (envvar.value || envvar.set) {\n var value = envvar.set ? envvar.set : envvar.value;\n env.push(envvar.name + '=' + value);\n }\n });\n return env;\n };\n\n helper.getConsoleConfiguration = function (interactiveFlag) {\n var consoleConfiguration = {\n openStdin: false,\n tty: false,\n };\n if (interactiveFlag === true) {\n consoleConfiguration.openStdin = true;\n consoleConfiguration.tty = true;\n }\n return consoleConfiguration;\n };\n\n helper.createVolumeBindings = function (volumes, generatedVolumesPile) {\n volumes.forEach(function (volume) {\n if (volume.container) {\n var binding;\n if (volume.type === 'auto') {\n binding = generatedVolumesPile.pop().Id + ':' + volume.container;\n } else if (volume.type !== 'auto' && volume.bind) {\n binding = volume.bind + ':' + volume.container;\n }\n if (volume.readonly) {\n binding += ':ro';\n }\n volume.binding = binding;\n }\n });\n };\n\n helper.determineRequiredGeneratedVolumeCount = function (volumes) {\n var count = 0;\n volumes.forEach(function (volume) {\n if (volume.type === 'auto') {\n ++count;\n }\n });\n return count;\n };\n\n helper.getUniqueCategories = function (templates) {\n var categories = [];\n for (var i = 0; i < templates.length; i++) {\n var template = templates[i];\n categories = categories.concat(template.Categories);\n }\n return _.uniq(categories);\n };\n\n return helper;\n },\n]);\n","angular.module('portainer.app').factory('URLHelper', [\n '$window',\n function URLHelperFactory($window) {\n 'use strict';\n var helper = {};\n\n helper.getParameter = getParameter;\n helper.cleanParameters = cleanParameters;\n\n function getParameter(param) {\n var parameters = extractParameters();\n return parameters[param];\n }\n\n function extractParameters() {\n var queryString = $window.location.search.replace(/.*?\\?/, '').split('&');\n return queryString.reduce(function (acc, keyValStr) {\n var keyVal = keyValStr.split('=');\n var key = keyVal[0];\n var val = keyVal[1];\n acc[key] = val;\n return acc;\n }, {});\n }\n\n function cleanParameters() {\n $window.location.replace($window.location.origin + $window.location.pathname + $window.location.hash);\n }\n\n return helper;\n },\n]);\n","angular.module('portainer.app').factory('UserHelper', [\n function UserHelperFactory() {\n 'use strict';\n var helper = {};\n\n helper.filterNonAdministratorUsers = function (users) {\n return users.filter(function (user) {\n if (user.Role !== 1) {\n return user;\n }\n });\n };\n\n return helper;\n },\n]);\n","angular.module('portainer.app').factory('WebhookHelper', [\n '$location',\n 'API_ENDPOINT_WEBHOOKS',\n function WebhookHelperFactory($location, API_ENDPOINT_WEBHOOKS) {\n 'use strict';\n var helper = {};\n\n helper.returnWebhookUrl = function (token) {\n var displayPort =\n ($location.protocol().toLowerCase() === 'http' && $location.port() === 80) || ($location.protocol().toLowerCase() === 'https' && $location.port() === 443)\n ? ''\n : ':' + $location.port();\n return $location.protocol() + '://' + $location.host() + displayPort + '/' + API_ENDPOINT_WEBHOOKS + '/' + token;\n };\n\n return helper;\n },\n]);\n","import _ from 'lodash-es';\n\nangular.module('portainer.app').factory('EndpointStatusInterceptor', [\n '$q',\n 'EndpointProvider',\n function ($q, EndpointProvider) {\n 'use strict';\n var interceptor = {};\n\n interceptor.response = responseInterceptor;\n interceptor.responseError = responseErrorInterceptor;\n\n function canBeOffline(url) {\n return (\n _.startsWith(url, 'api/') &&\n (_.includes(url, '/containers') ||\n _.includes(url, '/images') ||\n _.includes(url, '/volumes') ||\n _.includes(url, '/networks') ||\n _.includes(url, '/info') ||\n _.includes(url, '/version'))\n );\n }\n\n function responseInterceptor(response) {\n var url = response.config.url;\n if (response.status === 200 && canBeOffline(url) && EndpointProvider.offlineMode()) {\n EndpointProvider.setOfflineMode(false);\n }\n return response || $q.when(response);\n }\n\n function responseErrorInterceptor(rejection) {\n var url = rejection.config.url;\n if ((rejection.status === 502 || rejection.status === 503 || rejection.status === -1) && canBeOffline(url) && !EndpointProvider.offlineMode()) {\n EndpointProvider.setOfflineMode(true);\n }\n return $q.reject(rejection);\n }\n\n return interceptor;\n },\n]);\n","/**\n * Payload for resourceControleCreate operation\n * @param {string} resourceId ID of involved Resource\n * @param {ResourceControlResourceType} resourceType Type of involved Resource\n * @param {ResourceControlOwnershipParameters} data Transcient type from view data to payload\n */\nexport function ResourceControlCreatePayload(resourceId, resourceType, data) {\n void data;\n\n this.ResourceID = resourceId;\n this.Type = resourceType;\n this.Public = data.Public;\n this.AdministratorsOnly = data.AdministratorsOnly;\n this.Users = data.Users;\n this.Teams = data.Teams;\n this.SubResourceIDs = data.SubResourceIDs;\n}\n","/**\n * Payload for resourceControlUpdate operation\n * @param {ResourceControlOwnershipParameters} data\n */\nexport function ResourceControlUpdatePayload(data) {\n this.Public = data.Public;\n this.AdministratorsOnly = data.AdministratorsOnly;\n this.Users = data.Users;\n this.Teams = data.Teams;\n}\n","angular.module('portainer.oauth', ['ngResource']).constant('API_ENDPOINT_OAUTH', 'api/auth/oauth');\n","angular.module('portainer.oauth').controller('OAuthProviderSelectorController', function OAuthProviderSelectorController() {\n var ctrl = this;\n\n this.providers = [\n {\n authUrl: '',\n accessTokenUrl: '',\n resourceUrl: '',\n userIdentifier: '',\n scopes: '',\n name: 'custom',\n label: 'Custom',\n description: 'Custom OAuth provider',\n icon: 'fa fa-user-check',\n },\n ];\n\n this.$onInit = onInit;\n\n function onInit() {\n if (ctrl.provider.authUrl) {\n ctrl.provider = getProviderByURL(ctrl.provider.authUrl);\n } else {\n ctrl.provider = ctrl.providers[0];\n }\n ctrl.onSelect(ctrl.provider, false);\n }\n\n function getProviderByURL(providerAuthURL) {\n if (providerAuthURL.indexOf('login.microsoftonline.com') !== -1) {\n return ctrl.providers[0];\n } else if (providerAuthURL.indexOf('accounts.google.com') !== -1) {\n return ctrl.providers[1];\n } else if (providerAuthURL.indexOf('github.com') !== -1) {\n return ctrl.providers[2];\n }\n return ctrl.providers[3];\n }\n});\n","const autoNgTemplateLoaderTemplate1 = require('./oauth-providers-selector.html');\n\nangular.module('portainer.oauth').component('oauthProvidersSelector', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n onSelect: '<',\n provider: '=',\n },\n controller: 'OAuthProviderSelectorController',\n});\n","var path = 'app/portainer/oauth/components/oauth-providers-selector/oauth-providers-selector.html';\nvar html = \"
    \\n Provider\\n
    \\n\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.oauth').controller('OAuthSettingsController', function OAuthSettingsController() {\n var ctrl = this;\n\n this.state = {\n provider: {},\n };\n\n this.$onInit = $onInit;\n\n function $onInit() {\n if (ctrl.settings.RedirectURI === '') {\n ctrl.settings.RedirectURI = window.location.origin;\n }\n\n if (ctrl.settings.AuthorizationURI !== '') {\n ctrl.state.provider.authUrl = ctrl.settings.AuthorizationURI;\n }\n\n if (ctrl.settings.DefaultTeamID === 0) {\n ctrl.settings.DefaultTeamID = null;\n }\n }\n});\n","const autoNgTemplateLoaderTemplate1 = require('./oauth-settings.html');\n\nangular.module('portainer.oauth').component('oauthSettings', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n settings: '=',\n teams: '<',\n },\n controller: 'OAuthSettingsController',\n});\n","var path = 'app/portainer/oauth/components/oauth-settings/oauth-settings.html';\nvar html = \"
    \\n Single Sign-On\\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n\\n \\n
    \\n \\n
    \\n \\n \\n This feature is available in Portainer Business Edition.\\n \\n
    \\n
    \\n \\n
    \\n Automatic user provisioning\\n
    \\n
    \\n \\n With automatic user provisioning enabled, Portainer will create user(s) automatically with the standard user role. If disabled, users must be created beforehand in Portainer\\n in order to login.\\n \\n
    \\n
    \\n \\n \\n
    \\n\\n
    \\n
    \\n \\n

    The users created by the automatic provisioning feature can be added to a default team on creation.

    \\n By assigning newly created users to a team, they will be able to access the environments associated to that team. This setting is optional and if not set, newly created\\n users won't be able to access any environments.\\n
    \\n
    \\n
    \\n \\n \\n You have not yet created any teams. Head over to the Teams view to manage teams.\\n \\n \\n
    0\\\">\\n \\n
    \\n
    \\n
    \\n\\n
    OAuth Configuration
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","angular.module('portainer.oauth').factory('OAuth', [\n '$resource',\n 'API_ENDPOINT_OAUTH',\n function OAuthFactory($resource, API_ENDPOINT_OAUTH) {\n 'use strict';\n return $resource(\n API_ENDPOINT_OAUTH + '/:action',\n {},\n {\n validate: {\n method: 'POST',\n ignoreLoadingBar: true,\n params: {\n action: 'validate',\n },\n },\n }\n );\n },\n]);\n","angular.module('portainer.app').factory('Auth', [\n '$resource',\n 'API_ENDPOINT_AUTH',\n function AuthFactory($resource, API_ENDPOINT_AUTH) {\n 'use strict';\n return $resource(\n API_ENDPOINT_AUTH + '/:action',\n {},\n {\n login: { method: 'POST', ignoreLoadingBar: true },\n logout: { method: 'POST', params: { action: 'logout' }, ignoreLoadingBar: true },\n }\n );\n },\n]);\n","angular.module('portainer.app').factory('Backup', [\n '$resource',\n 'API_ENDPOINT_BACKUP',\n function BackupFactory($resource, API_ENDPOINT_BACKUP) {\n 'use strict';\n return $resource(\n API_ENDPOINT_BACKUP + '/:subResource/:action',\n {},\n {\n download: {\n method: 'POST',\n responseType: 'blob',\n ignoreLoadingBar: true,\n transformResponse: (data, headersGetter) => ({\n file: data,\n name: headersGetter('Content-Disposition').replace('attachment; filename=', ''),\n }),\n },\n getS3Settings: { method: 'GET', params: { subResource: 's3', action: 'settings' } },\n saveS3Settings: { method: 'POST', params: { subResource: 's3', action: 'settings' } },\n exportS3Backup: { method: 'POST', params: { subResource: 's3', action: 'execute' } },\n restoreS3Backup: { method: 'POST', params: { subResource: 's3', action: 'restore' } },\n getBackupStatus: { method: 'GET', params: { subResource: 's3', action: 'status' } },\n }\n );\n },\n]);\n","import angular from 'angular';\n\nangular.module('portainer.app').factory('CustomTemplates', CustomTemplatesFactory);\n\nfunction CustomTemplatesFactory($resource, API_ENDPOINT_CUSTOM_TEMPLATES) {\n return $resource(\n API_ENDPOINT_CUSTOM_TEMPLATES + '/:id/:action',\n {},\n {\n create: { method: 'POST', ignoreLoadingBar: true },\n query: { method: 'GET', isArray: true },\n get: { method: 'GET', params: { id: '@id' } },\n update: { method: 'PUT', params: { id: '@id' } },\n remove: { method: 'DELETE', params: { id: '@id' } },\n file: { method: 'GET', params: { id: '@id', action: 'file' } },\n }\n );\n}\n","angular.module('portainer.app').factory('DockerHub', [\n '$resource',\n 'API_ENDPOINT_DOCKERHUB',\n function DockerHubFactory($resource, API_ENDPOINT_DOCKERHUB) {\n 'use strict';\n return $resource(\n API_ENDPOINT_DOCKERHUB,\n {},\n {\n get: { method: 'GET' },\n update: { method: 'PUT' },\n }\n );\n },\n]);\n","import getEndpointsTotalCount from './transform/getEndpointsTotalCount';\n\nangular.module('portainer.app').factory('Endpoints', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n function EndpointsFactory($resource, API_ENDPOINT_ENDPOINTS) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:id/:action',\n {},\n {\n query: {\n method: 'GET',\n params: { start: '@start', limit: '@limit', search: '@search', groupId: '@groupId' },\n transformResponse: getEndpointsTotalCount,\n },\n get: { method: 'GET', params: { id: '@id' } },\n update: { method: 'PUT', params: { id: '@id' } },\n updateAccess: { method: 'PUT', params: { id: '@id', action: 'access' } },\n remove: { method: 'DELETE', params: { id: '@id' } },\n snapshots: { method: 'POST', params: { action: 'snapshot' } },\n snapshot: { method: 'POST', params: { id: '@id', action: 'snapshot' } },\n status: { method: 'GET', params: { id: '@id', action: 'status' } },\n updateSecuritySettings: { method: 'PUT', params: { id: '@id', action: 'settings' } },\n dockerhubLimits: { method: 'GET', params: { id: '@id', action: 'dockerhub' } },\n }\n );\n },\n]);\n","import gitlabResponseGetLink from './transform/gitlabResponseGetLink';\n\nangular.module('portainer.app').factory('Gitlab', [\n '$resource',\n 'API_ENDPOINT_REGISTRIES',\n function GitlabFactory($resource, API_ENDPOINT_REGISTRIES) {\n 'use strict';\n return function (env) {\n const headers = {};\n if (env) {\n headers['Private-Token'] = env.token;\n headers['X-Gitlab-Domain'] = env.url;\n }\n\n const baseUrl = API_ENDPOINT_REGISTRIES + '/:id/proxies/gitlab/api/v4/projects';\n\n return $resource(\n baseUrl,\n { id: '@id' },\n {\n projects: {\n method: 'GET',\n params: { membership: 'true' },\n transformResponse: gitlabResponseGetLink,\n headers: headers,\n },\n repositories: {\n method: 'GET',\n url: baseUrl + '/:projectId/registry/repositories',\n params: { tags: true },\n headers: headers,\n transformResponse: gitlabResponseGetLink,\n },\n }\n );\n };\n },\n]);\n","angular.module('portainer.app').factory('EndpointGroups', [\n '$resource',\n 'API_ENDPOINT_ENDPOINT_GROUPS',\n function EndpointGroupsFactory($resource, API_ENDPOINT_ENDPOINT_GROUPS) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINT_GROUPS + '/:id/:action',\n {},\n {\n create: { method: 'POST', ignoreLoadingBar: true },\n query: { method: 'GET', isArray: true },\n get: { method: 'GET', params: { id: '@id' } },\n update: { method: 'PUT', params: { id: '@id' } },\n updateAccess: { method: 'PUT', params: { id: '@id', action: 'access' } },\n addEndpoint: { method: 'PUT', params: { id: '@id', action: '@action' } },\n removeEndpoint: { method: 'DELETE', params: { id: '@id', action: '@action' } },\n remove: { method: 'DELETE', params: { id: '@id' } },\n }\n );\n },\n]);\n","// TODO: legacy extension management\nangular.module('portainer.app').factory('LegacyExtensions', [\n '$resource',\n 'EndpointProvider',\n 'API_ENDPOINT_ENDPOINTS',\n function LegacyExtensions($resource, EndpointProvider, API_ENDPOINT_ENDPOINTS) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/extensions/:type',\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n register: { method: 'POST' },\n deregister: { method: 'DELETE', params: { type: '@type' } },\n }\n );\n },\n]);\n","angular.module('portainer.app').factory('Motd', [\n '$resource',\n 'API_ENDPOINT_MOTD',\n function MotdFactory($resource, API_ENDPOINT_MOTD) {\n 'use strict';\n return $resource(\n API_ENDPOINT_MOTD,\n {},\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n }\n );\n },\n]);\n","angular.module('portainer.app').factory('Registries', [\n '$resource',\n 'API_ENDPOINT_REGISTRIES',\n function RegistriesFactory($resource, API_ENDPOINT_REGISTRIES) {\n 'use strict';\n return $resource(\n API_ENDPOINT_REGISTRIES + '/:id/:action',\n {},\n {\n create: { method: 'POST', ignoreLoadingBar: true },\n query: { method: 'GET', isArray: true },\n get: { method: 'GET', params: { id: '@id' } },\n update: { method: 'PUT', params: { id: '@id' } },\n updateAccess: { method: 'PUT', params: { id: '@id', action: 'access' } },\n remove: { method: 'DELETE', params: { id: '@id' } },\n configure: { method: 'POST', params: { id: '@id', action: 'configure' } },\n }\n );\n },\n]);\n","angular.module('portainer.app').factory('ResourceControl', [\n '$resource',\n 'API_ENDPOINT_RESOURCE_CONTROLS',\n function ResourceControlFactory($resource, API_ENDPOINT_RESOURCE_CONTROLS) {\n 'use strict';\n return $resource(\n API_ENDPOINT_RESOURCE_CONTROLS + '/:id',\n {},\n {\n create: { method: 'POST', ignoreLoadingBar: true },\n get: { method: 'GET', params: { id: '@id' } },\n update: { method: 'PUT', params: { id: '@id' } },\n remove: { method: 'DELETE', params: { id: '@id' } },\n }\n );\n },\n]);\n","angular.module('portainer.app').factory('Settings', [\n '$resource',\n 'API_ENDPOINT_SETTINGS',\n function SettingsFactory($resource, API_ENDPOINT_SETTINGS) {\n 'use strict';\n return $resource(\n API_ENDPOINT_SETTINGS + '/:subResource/:action',\n {},\n {\n get: { method: 'GET' },\n update: { method: 'PUT', ignoreLoadingBar: true },\n publicSettings: { method: 'GET', params: { subResource: 'public' }, ignoreLoadingBar: true },\n checkLDAPConnectivity: { method: 'PUT', params: { subResource: 'authentication', action: 'checkLDAP' } },\n }\n );\n },\n]);\n","angular.module('portainer.app').factory('Stack', [\n '$resource',\n 'EndpointProvider',\n 'API_ENDPOINT_STACKS',\n function StackFactory($resource, EndpointProvider, API_ENDPOINT_STACKS) {\n 'use strict';\n return $resource(\n API_ENDPOINT_STACKS + '/:id/:action',\n {},\n {\n get: { method: 'GET', params: { id: '@id' } },\n query: { method: 'GET', isArray: true },\n create: { method: 'POST', ignoreLoadingBar: true },\n update: { method: 'PUT', params: { id: '@id' }, ignoreLoadingBar: true },\n associate: { method: 'PUT', params: { id: '@id', swarmId: '@swarmId', endpointId: '@endpointId', orphanedRunning: '@orphanedRunning', action: 'associate' } },\n remove: { method: 'DELETE', params: { id: '@id', external: '@external', endpointId: '@endpointId' } },\n getStackFile: { method: 'GET', params: { id: '@id', action: 'file' } },\n migrate: { method: 'POST', params: { id: '@id', action: 'migrate', endpointId: '@endpointId' }, ignoreLoadingBar: true },\n start: { method: 'POST', params: { id: '@id', action: 'start' } },\n stop: { method: 'POST', params: { id: '@id', action: 'stop' } },\n updateGit: { method: 'PUT', params: { action: 'git' } },\n }\n );\n },\n]);\n","angular.module('portainer.app').factory('Status', [\n '$resource',\n 'API_ENDPOINT_STATUS',\n function StatusFactory($resource, API_ENDPOINT_STATUS) {\n 'use strict';\n return $resource(\n API_ENDPOINT_STATUS + '/:action',\n {},\n {\n get: { method: 'GET' },\n version: { method: 'GET', params: { action: 'version' } },\n }\n );\n },\n]);\n","angular.module('portainer.app').factory('Support', [\n '$resource',\n 'API_ENDPOINT_SUPPORT',\n function SupportFactory($resource, API_ENDPOINT_SUPPORT) {\n 'use strict';\n return $resource(\n API_ENDPOINT_SUPPORT,\n {},\n {\n get: { method: 'GET', isArray: true },\n }\n );\n },\n]);\n","angular.module('portainer.app').factory('Tags', [\n '$resource',\n 'API_ENDPOINT_TAGS',\n function TagsFactory($resource, API_ENDPOINT_TAGS) {\n 'use strict';\n return $resource(\n API_ENDPOINT_TAGS + '/:id',\n {},\n {\n create: { method: 'POST' },\n query: { method: 'GET', isArray: true },\n remove: { method: 'DELETE', params: { id: '@id' } },\n }\n );\n },\n]);\n","angular.module('portainer.app').factory('Teams', [\n '$resource',\n 'API_ENDPOINT_TEAMS',\n function TeamsFactory($resource, API_ENDPOINT_TEAMS) {\n 'use strict';\n return $resource(\n API_ENDPOINT_TEAMS + '/:id/:entity/:entityId',\n {},\n {\n create: { method: 'POST', ignoreLoadingBar: true },\n query: { method: 'GET', isArray: true },\n get: { method: 'GET', params: { id: '@id' } },\n remove: { method: 'DELETE', params: { id: '@id' } },\n queryMemberships: { method: 'GET', isArray: true, params: { id: '@id', entity: 'memberships' } },\n }\n );\n },\n]);\n","angular.module('portainer.app').factory('TeamMemberships', [\n '$resource',\n 'API_ENDPOINT_TEAM_MEMBERSHIPS',\n function TeamMembershipsFactory($resource, API_ENDPOINT_TEAM_MEMBERSHIPS) {\n 'use strict';\n return $resource(\n API_ENDPOINT_TEAM_MEMBERSHIPS + '/:id/:action',\n {},\n {\n create: { method: 'POST', ignoreLoadingBar: true },\n query: { method: 'GET', isArray: true },\n update: { method: 'PUT', params: { id: '@id' } },\n remove: { method: 'DELETE', params: { id: '@id' } },\n }\n );\n },\n]);\n","angular.module('portainer.app').factory('Templates', [\n '$resource',\n 'API_ENDPOINT_TEMPLATES',\n function TemplatesFactory($resource, API_ENDPOINT_TEMPLATES) {\n return $resource(\n API_ENDPOINT_TEMPLATES + '/:action',\n {},\n {\n query: { method: 'GET' },\n file: { method: 'POST', params: { action: 'file' } },\n }\n );\n },\n]);\n","angular.module('portainer.app').factory('Users', [\n '$resource',\n 'API_ENDPOINT_USERS',\n function UsersFactory($resource, API_ENDPOINT_USERS) {\n 'use strict';\n return $resource(\n API_ENDPOINT_USERS + '/:id/:entity/:entityId',\n {},\n {\n create: { method: 'POST', ignoreLoadingBar: true },\n query: { method: 'GET', isArray: true },\n get: { method: 'GET', params: { id: '@id' } },\n update: { method: 'PUT', params: { id: '@id' }, ignoreLoadingBar: true },\n updatePassword: { method: 'PUT', params: { id: '@id', entity: 'passwd' } },\n remove: { method: 'DELETE', params: { id: '@id' } },\n queryMemberships: { method: 'GET', isArray: true, params: { id: '@id', entity: 'memberships' } },\n checkAdminUser: { method: 'GET', params: { id: 'admin', entity: 'check' }, isArray: true, ignoreLoadingBar: true },\n initAdminUser: { method: 'POST', params: { id: 'admin', entity: 'init' }, ignoreLoadingBar: true },\n }\n );\n },\n]);\n","angular.module('portainer.app').factory('Webhooks', [\n '$resource',\n 'API_ENDPOINT_WEBHOOKS',\n function WebhooksFactory($resource, API_ENDPOINT_WEBHOOKS) {\n 'use strict';\n return $resource(\n API_ENDPOINT_WEBHOOKS + '/:id',\n {},\n {\n query: { method: 'GET', isArray: true },\n create: { method: 'POST' },\n remove: { method: 'DELETE', params: { id: '@id' } },\n }\n );\n },\n]);\n","import _ from 'lodash-es';\nimport { UserAccessViewModel } from '../../models/access';\nimport { TeamAccessViewModel } from '../../models/access';\n\nangular.module('portainer.app').factory('AccessService', [\n '$q',\n '$async',\n 'UserService',\n 'TeamService',\n function AccessServiceFactory($q, $async, UserService, TeamService) {\n 'use strict';\n var service = {};\n\n function _mapAccessData(accesses, authorizedPolicies, inheritedPolicies) {\n var availableAccesses = [];\n var authorizedAccesses = [];\n\n for (var i = 0; i < accesses.length; i++) {\n const access = accesses[i];\n\n const authorized = authorizedPolicies && authorizedPolicies[access.Id];\n const inherited = inheritedPolicies && inheritedPolicies[access.Id];\n\n if (authorized && inherited) {\n access.Override = true;\n authorizedAccesses.push(access);\n } else if (authorized && !inherited) {\n authorizedAccesses.push(access);\n } else if (!authorized && inherited) {\n access.Inherited = true;\n authorizedAccesses.push(access);\n availableAccesses.push(access);\n } else {\n availableAccesses.push(access);\n }\n }\n\n return {\n available: availableAccesses,\n authorized: authorizedAccesses,\n };\n }\n\n function getAccesses(authorizedUserPolicies, authorizedTeamPolicies, inheritedUserPolicies, inheritedTeamPolicies) {\n var deferred = $q.defer();\n\n $q.all({\n users: UserService.users(false),\n teams: TeamService.teams(),\n })\n .then(function success(data) {\n var userAccesses = data.users.map(function (user) {\n return new UserAccessViewModel(user);\n });\n var teamAccesses = data.teams.map(function (team) {\n return new TeamAccessViewModel(team);\n });\n\n var userAccessData = _mapAccessData(userAccesses, authorizedUserPolicies, inheritedUserPolicies);\n var teamAccessData = _mapAccessData(teamAccesses, authorizedTeamPolicies, inheritedTeamPolicies);\n\n var accessData = {\n availableUsersAndTeams: userAccessData.available.concat(teamAccessData.available),\n authorizedUsersAndTeams: userAccessData.authorized.concat(teamAccessData.authorized),\n };\n\n deferred.resolve(accessData);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve users and teams', err: err });\n });\n\n return deferred.promise;\n }\n\n async function accessesAsync(entity, parent) {\n try {\n if (!entity) {\n throw { msg: 'Unable to retrieve accesses' };\n }\n if (!entity.UserAccessPolicies) {\n entity.UserAccessPolicies = {};\n }\n if (!entity.TeamAccessPolicies) {\n entity.TeamAccessPolicies = {};\n }\n if (parent && !parent.UserAccessPolicies) {\n parent.UserAccessPolicies = {};\n }\n if (parent && !parent.TeamAccessPolicies) {\n parent.TeamAccessPolicies = {};\n }\n return await getAccesses(entity.UserAccessPolicies, entity.TeamAccessPolicies, parent ? parent.UserAccessPolicies : {}, parent ? parent.TeamAccessPolicies : {});\n } catch (err) {\n throw err;\n }\n }\n\n function accesses(entity, parent) {\n return $async(accessesAsync, entity, parent);\n }\n\n service.accesses = accesses;\n\n service.generateAccessPolicies = function (userAccessPolicies, teamAccessPolicies, selectedUserAccesses, selectedTeamAccesses, selectedRoleId) {\n const newUserPolicies = _.clone(userAccessPolicies);\n const newTeamPolicies = _.clone(teamAccessPolicies);\n\n _.forEach(selectedUserAccesses, (access) => (newUserPolicies[access.Id] = { RoleId: selectedRoleId ? selectedRoleId : access.Role.Id }));\n _.forEach(selectedTeamAccesses, (access) => (newTeamPolicies[access.Id] = { RoleId: selectedRoleId ? selectedRoleId : access.Role.Id }));\n\n const accessPolicies = {\n userAccessPolicies: newUserPolicies,\n teamAccessPolicies: newTeamPolicies,\n };\n\n return accessPolicies;\n };\n\n return service;\n },\n]);\n","angular.module('portainer.app').factory('BackupService', [\n '$q',\n '$async',\n 'Backup',\n 'FileUploadService',\n function BackupServiceFactory($q, $async, Backup, FileUploadService) {\n 'use strict';\n const service = {};\n\n service.downloadBackup = function (payload) {\n return Backup.download({}, payload).$promise;\n };\n\n service.uploadBackup = function (file, password) {\n return FileUploadService.uploadBackup(file, password);\n };\n\n service.getS3Settings = function () {\n var deferred = $q.defer();\n\n Backup.getS3Settings()\n .$promise.then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve backup S3 settings', err: err });\n });\n\n return deferred.promise;\n };\n\n service.saveS3Settings = function (payload) {\n var deferred = $q.defer();\n\n Backup.saveS3Settings({}, payload)\n .$promise.then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to save backup S3 settings', err: err });\n });\n\n return deferred.promise;\n };\n\n service.exportBackup = function (payload) {\n var deferred = $q.defer();\n\n Backup.exportS3Backup({}, payload)\n .$promise.then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to export backup', err: err });\n });\n\n return deferred.promise;\n };\n\n service.restoreFromS3 = function (payload) {\n var deferred = $q.defer();\n\n Backup.restoreS3Backup({}, payload)\n .$promise.then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to restore backup from S3', err: err });\n });\n\n return deferred.promise;\n };\n\n service.getBackupStatus = function () {\n var deferred = $q.defer();\n\n Backup.getBackupStatus()\n .$promise.then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve backup status', err: err });\n });\n\n return deferred.promise;\n };\n\n return service;\n },\n]);\n","import angular from 'angular';\n\nangular.module('portainer.app').factory('CustomTemplateService', CustomTemplateServiceFactory);\n\n/* @ngInject */\nfunction CustomTemplateServiceFactory(CustomTemplates, FileUploadService) {\n var service = {};\n\n service.customTemplate = function customTemplate(id) {\n return CustomTemplates.get({ id }).$promise;\n };\n\n service.customTemplates = function customTemplates(type) {\n return CustomTemplates.query({ type }).$promise;\n };\n\n service.remove = function remove(id) {\n return CustomTemplates.remove({ id }).$promise;\n };\n\n service.customTemplateFile = async function customTemplateFile(id) {\n try {\n const { FileContent } = await CustomTemplates.file({ id }).$promise;\n return FileContent;\n } catch (err) {\n throw { msg: 'Unable to retrieve customTemplate content', err };\n }\n };\n\n service.updateCustomTemplate = async function updateCustomTemplate(id, customTemplate) {\n return CustomTemplates.update({ id }, customTemplate).$promise;\n };\n\n service.createCustomTemplateFromFileContent = async function createCustomTemplateFromFileContent(payload) {\n try {\n return await CustomTemplates.create({ method: 'string' }, payload).$promise;\n } catch (err) {\n throw { msg: 'Unable to create the customTemplate', err };\n }\n };\n\n service.createCustomTemplateFromFileUpload = async function createCustomTemplateFromFileUpload(payload) {\n try {\n const { data } = await FileUploadService.createCustomTemplate(payload);\n return data;\n } catch (err) {\n throw { msg: 'Unable to create the customTemplate', err };\n }\n };\n\n service.createCustomTemplateFromGitRepository = async function createCustomTemplateFromGitRepository(payload) {\n try {\n return await CustomTemplates.create({ method: 'repository' }, payload).$promise;\n } catch (err) {\n throw { msg: 'Unable to create the customTemplate', err };\n }\n };\n\n return service;\n}\n","import { DockerHubViewModel } from '../../models/dockerhub';\n\nangular.module('portainer.app').factory('DockerHubService', [\n '$q',\n 'DockerHub',\n 'Endpoints',\n 'AgentDockerhub',\n 'EndpointHelper',\n function DockerHubServiceFactory($q, DockerHub, Endpoints, AgentDockerhub, EndpointHelper) {\n 'use strict';\n var service = {};\n\n service.dockerhub = function () {\n var deferred = $q.defer();\n\n DockerHub.get()\n .$promise.then(function success(data) {\n var dockerhub = new DockerHubViewModel(data);\n deferred.resolve(dockerhub);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve DockerHub details', err: err });\n });\n\n return deferred.promise;\n };\n\n service.update = function (dockerhub) {\n return DockerHub.update({}, dockerhub).$promise;\n };\n\n service.checkRateLimits = checkRateLimits;\n function checkRateLimits(endpoint) {\n if (EndpointHelper.isLocalEndpoint(endpoint)) {\n return Endpoints.dockerhubLimits({ id: endpoint.Id }).$promise;\n }\n\n switch (endpoint.Type) {\n case 2: //AgentOnDockerEnvironment\n case 4: //EdgeAgentOnDockerEnvironment\n return AgentDockerhub.limits({ endpointId: endpoint.Id, endpointType: 'docker' }).$promise;\n\n case 6: //AgentOnKubernetesEnvironment\n case 7: //EdgeAgentOnKubernetesEnvironment\n return AgentDockerhub.limits({ endpointId: endpoint.Id, endpointType: 'kubernetes' }).$promise;\n }\n }\n\n return service;\n },\n]);\n","import { PortainerEndpointCreationTypes } from 'Portainer/models/endpoint/models';\n\nangular.module('portainer.app').factory('EndpointService', [\n '$q',\n 'Endpoints',\n 'FileUploadService',\n function EndpointServiceFactory($q, Endpoints, FileUploadService) {\n 'use strict';\n var service = {\n updateSecuritySettings,\n };\n\n service.endpoint = function (endpointID) {\n return Endpoints.get({ id: endpointID }).$promise;\n };\n\n service.endpoints = function (start, limit, { search, type, tagIds, endpointIds, tagsPartialMatch } = {}) {\n if (tagIds && !tagIds.length) {\n return Promise.resolve({ value: [], totalCount: 0 });\n }\n return Endpoints.query({ start, limit, search, type, tagIds: JSON.stringify(tagIds), endpointIds: JSON.stringify(endpointIds), tagsPartialMatch }).$promise;\n };\n\n service.snapshotEndpoints = function () {\n return Endpoints.snapshots({}, {}).$promise;\n };\n\n service.snapshotEndpoint = function (endpointID) {\n return Endpoints.snapshot({ id: endpointID }, {}).$promise;\n };\n\n service.endpointsByGroup = function (start, limit, search, groupId) {\n return Endpoints.query({ start, limit, search, groupId }).$promise;\n };\n\n service.updateAccess = function (id, userAccessPolicies, teamAccessPolicies) {\n return Endpoints.updateAccess({ id: id }, { UserAccessPolicies: userAccessPolicies, TeamAccessPolicies: teamAccessPolicies }).$promise;\n };\n\n service.updateEndpoint = function (id, payload) {\n var deferred = $q.defer();\n FileUploadService.uploadTLSFilesForEndpoint(id, payload.TLSCACert, payload.TLSCert, payload.TLSKey)\n .then(function success() {\n deferred.notify({ upload: false });\n return Endpoints.update({ id: id }, payload).$promise;\n })\n .then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.notify({ upload: false });\n deferred.reject({ msg: 'Unable to update endpoint', err: err });\n });\n return deferred.promise;\n };\n\n service.deleteEndpoint = function (endpointID) {\n return Endpoints.remove({ id: endpointID }).$promise;\n };\n\n service.createLocalEndpoint = function (name = 'local', URL = '', PublicURL = '', groupID = 1, tagIds = []) {\n var deferred = $q.defer();\n\n var endpointURL = URL;\n if (endpointURL !== '') {\n if (endpointURL.indexOf('//./pipe/') == 0) {\n // Windows named pipe\n endpointURL = 'npipe://' + URL;\n } else {\n endpointURL = 'unix://' + URL;\n }\n }\n\n FileUploadService.createEndpoint(name, PortainerEndpointCreationTypes.LocalDockerEnvironment, endpointURL, PublicURL, groupID, tagIds, false)\n .then(function success(response) {\n deferred.resolve(response.data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to create endpoint', err: err });\n });\n\n return deferred.promise;\n };\n\n service.createRemoteEndpoint = function (\n name,\n creationType,\n URL,\n PublicURL,\n groupID,\n tagIds,\n TLS,\n TLSSkipVerify,\n TLSSkipClientVerify,\n TLSCAFile,\n TLSCertFile,\n TLSKeyFile,\n checkinInterval\n ) {\n var deferred = $q.defer();\n\n var endpointURL = URL;\n if (creationType !== PortainerEndpointCreationTypes.EdgeAgentEnvironment) {\n endpointURL = 'tcp://' + URL;\n }\n\n FileUploadService.createEndpoint(\n name,\n creationType,\n endpointURL,\n PublicURL,\n groupID,\n tagIds,\n TLS,\n TLSSkipVerify,\n TLSSkipClientVerify,\n TLSCAFile,\n TLSCertFile,\n TLSKeyFile,\n checkinInterval\n )\n .then(function success(response) {\n deferred.resolve(response.data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to create endpoint', err: err });\n });\n\n return deferred.promise;\n };\n\n service.createLocalKubernetesEndpoint = function (name = 'local') {\n var deferred = $q.defer();\n\n FileUploadService.createEndpoint(name, PortainerEndpointCreationTypes.LocalKubernetesEnvironment, '', '', 1, [], true, true, true)\n .then(function success(response) {\n deferred.resolve(response.data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to create endpoint', err: err });\n });\n\n return deferred.promise;\n };\n\n service.createAzureEndpoint = function (name, applicationId, tenantId, authenticationKey, groupId, tagIds) {\n var deferred = $q.defer();\n\n FileUploadService.createAzureEndpoint(name, applicationId, tenantId, authenticationKey, groupId, tagIds)\n .then(function success(response) {\n deferred.resolve(response.data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to connect to Azure', err: err });\n });\n\n return deferred.promise;\n };\n\n return service;\n\n function updateSecuritySettings(id, securitySettings) {\n return Endpoints.updateSecuritySettings({ id }, securitySettings).$promise;\n }\n },\n]);\n","import { EndpointGroupCreateRequest, EndpointGroupModel, EndpointGroupUpdateRequest } from '../../models/group';\n\nangular.module('portainer.app').factory('GroupService', [\n '$q',\n 'EndpointGroups',\n function GroupService($q, EndpointGroups) {\n 'use strict';\n var service = {};\n\n service.group = function (groupId) {\n var deferred = $q.defer();\n\n EndpointGroups.get({ id: groupId })\n .$promise.then(function success(data) {\n var group = new EndpointGroupModel(data);\n deferred.resolve(group);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve group', err: err });\n });\n\n return deferred.promise;\n };\n\n service.groups = function () {\n return EndpointGroups.query({}).$promise;\n };\n\n service.createGroup = function (model, endpoints) {\n var payload = new EndpointGroupCreateRequest(model, endpoints);\n return EndpointGroups.create(payload).$promise;\n };\n\n service.updateGroup = function (model, endpoints) {\n var payload = new EndpointGroupUpdateRequest(model, endpoints);\n return EndpointGroups.update(payload).$promise;\n };\n\n service.updateAccess = function (groupId, userAccessPolicies, teamAccessPolicies) {\n return EndpointGroups.updateAccess({ id: groupId }, { UserAccessPolicies: userAccessPolicies, TeamAccessPolicies: teamAccessPolicies }).$promise;\n };\n\n service.addEndpoint = function (groupId, endpoint) {\n return EndpointGroups.addEndpoint({ id: groupId, action: 'endpoints/' + endpoint.Id }, endpoint).$promise;\n };\n\n service.removeEndpoint = function (groupId, endpointId) {\n return EndpointGroups.removeEndpoint({ id: groupId, action: 'endpoints/' + endpointId }).$promise;\n };\n\n service.deleteGroup = function (groupId) {\n return EndpointGroups.remove({ id: groupId }).$promise;\n };\n\n return service;\n },\n]);\n","// TODO: legacy extension management\nangular.module('portainer.app').factory('LegacyExtensionService', [\n 'LegacyExtensions',\n function LegacyExtensionServiceFactory(LegacyExtensions) {\n 'use strict';\n var service = {};\n\n service.registerStoridgeExtension = function (url) {\n var payload = {\n Type: 1,\n URL: url,\n };\n\n return LegacyExtensions.register(payload).$promise;\n };\n\n service.deregisterStoridgeExtension = function () {\n return LegacyExtensions.deregister({ type: 1 }).$promise;\n };\n\n return service;\n },\n]);\n","import { MotdViewModel } from '../../models/motd';\n\nangular.module('portainer.app').factory('MotdService', [\n '$q',\n 'Motd',\n function MotdServiceFactory($q, Motd) {\n 'use strict';\n var service = {};\n\n service.motd = function () {\n var deferred = $q.defer();\n\n Motd.get()\n .$promise.then(function success(data) {\n var motd = new MotdViewModel(data);\n deferred.resolve(motd);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve information message', err: err });\n });\n\n return deferred.promise;\n };\n\n return service;\n },\n]);\n","import _ from 'lodash-es';\nimport { PorImageRegistryModel } from 'Docker/models/porImageRegistry';\nimport { RegistryTypes } from '@/portainer/models/registryTypes';\nimport { RegistryCreateRequest, RegistryViewModel } from '../../models/registry';\n\nangular.module('portainer.app').factory('RegistryService', [\n '$q',\n '$async',\n 'Registries',\n 'DockerHubService',\n 'ImageHelper',\n 'FileUploadService',\n function RegistryServiceFactory($q, $async, Registries, DockerHubService, ImageHelper, FileUploadService) {\n 'use strict';\n var service = {};\n\n service.registries = function () {\n var deferred = $q.defer();\n\n Registries.query()\n .$promise.then(function success(data) {\n var registries = data.map(function (item) {\n return new RegistryViewModel(item);\n });\n deferred.resolve(registries);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve registries', err: err });\n });\n\n return deferred.promise;\n };\n\n service.registry = function (id) {\n var deferred = $q.defer();\n\n Registries.get({ id: id })\n .$promise.then(function success(data) {\n var registry = new RegistryViewModel(data);\n deferred.resolve(registry);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve registry details', err: err });\n });\n\n return deferred.promise;\n };\n\n service.encodedCredentials = function (registry) {\n var credentials = {\n serveraddress: registry.URL,\n };\n return btoa(JSON.stringify(credentials));\n };\n\n service.updateAccess = function (id, userAccessPolicies, teamAccessPolicies) {\n return Registries.updateAccess({ id: id }, { UserAccessPolicies: userAccessPolicies, TeamAccessPolicies: teamAccessPolicies }).$promise;\n };\n\n service.deleteRegistry = function (id) {\n return Registries.remove({ id: id }).$promise;\n };\n\n service.updateRegistry = function (registry) {\n registry.URL = _.replace(registry.URL, /^https?\\:\\/\\//i, '');\n registry.URL = _.replace(registry.URL, /\\/$/, '');\n return Registries.update({ id: registry.Id }, registry).$promise;\n };\n\n service.configureRegistry = function (id, registryManagementConfigurationModel) {\n return FileUploadService.configureRegistry(id, registryManagementConfigurationModel);\n };\n\n service.createRegistry = function (model) {\n var payload = new RegistryCreateRequest(model);\n return Registries.create(payload).$promise;\n };\n\n service.createGitlabRegistries = function (model, projects) {\n const promises = [];\n _.forEach(projects, (p) => {\n const m = model;\n m.Name = p.PathWithNamespace;\n m.Gitlab.ProjectPath = _.toLower(p.PathWithNamespace);\n m.Gitlab.ProjectId = p.Id;\n m.Password = m.Token;\n const payload = new RegistryCreateRequest(m);\n promises.push(Registries.create(payload).$promise);\n });\n return $q.all(promises);\n };\n\n service.retrievePorRegistryModelFromRepositoryWithRegistries = retrievePorRegistryModelFromRepositoryWithRegistries;\n\n function getURL(reg) {\n let url = reg.URL;\n if (reg.Type === RegistryTypes.GITLAB) {\n url = reg.URL + '/' + reg.Gitlab.ProjectPath;\n } else if (reg.Type === RegistryTypes.QUAY) {\n const name = reg.Quay.UseOrganisation ? reg.Quay.OrganisationName : reg.Username;\n url = reg.URL + '/' + name;\n }\n return url;\n }\n\n function retrievePorRegistryModelFromRepositoryWithRegistries(repository, registries, dockerhub) {\n const model = new PorImageRegistryModel();\n const registry = _.find(registries, (reg) => _.includes(repository, getURL(reg)));\n if (registry) {\n const url = getURL(registry);\n const lastIndex = repository.lastIndexOf(url) + url.length;\n let image = repository.substring(lastIndex);\n if (!_.startsWith(image, ':')) {\n image = image.substring(1);\n }\n model.Registry = registry;\n model.Image = image;\n } else {\n if (ImageHelper.imageContainsURL(repository)) {\n model.UseRegistry = false;\n }\n model.Registry = dockerhub;\n model.Image = repository;\n }\n return model;\n }\n\n async function retrievePorRegistryModelFromRepositoryAsync(repository) {\n try {\n let [registries, dockerhub] = await Promise.all([service.registries(), DockerHubService.dockerhub()]);\n return retrievePorRegistryModelFromRepositoryWithRegistries(repository, registries, dockerhub);\n } catch (err) {\n throw { msg: 'Unable to retrieve the registry associated to the repository', err: err };\n }\n }\n\n service.retrievePorRegistryModelFromRepository = function (repository) {\n return $async(retrievePorRegistryModelFromRepositoryAsync, repository);\n };\n\n return service;\n },\n]);\n","import _ from 'lodash-es';\n\nangular.module('portainer.app').factory('ResourceControlService', [\n '$q',\n 'ResourceControl',\n 'UserService',\n 'TeamService',\n 'ResourceControlHelper',\n function ResourceControlServiceFactory($q, ResourceControl, UserService, TeamService, ResourceControlHelper) {\n 'use strict';\n const service = {};\n\n service.duplicateResourceControl = duplicateResourceControl;\n service.applyResourceControlChange = applyResourceControlChange;\n service.applyResourceControl = applyResourceControl;\n service.retrieveOwnershipDetails = retrieveOwnershipDetails;\n service.retrieveUserPermissionsOnResource = retrieveUserPermissionsOnResource;\n\n /**\n * PRIVATE SECTION\n */\n\n /**\n * Create a ResourceControl\n * @param {ResourceControlTypeString} rcType Type of ResourceControl\n * @param {string} rcID ID of involved resource\n * @param {ResourceControlOwnershipParameters} ownershipParameters Transcient type from view data to payload\n */\n function createResourceControl(rcType, resourceID, ownershipParameters) {\n var payload = {\n Type: rcType,\n Public: ownershipParameters.Public,\n AdministratorsOnly: ownershipParameters.AdministratorsOnly,\n ResourceID: resourceID,\n Users: ownershipParameters.Users,\n Teams: ownershipParameters.Teams,\n SubResourceIds: ownershipParameters.SubResourceIDs,\n };\n return ResourceControl.create({}, payload).$promise;\n }\n\n /**\n * Update a ResourceControl\n * @param {String} rcID ID of involved resource\n * @param {ResourceControlOwnershipParameters} ownershipParameters Transcient type from view data to payload\n */\n function updateResourceControl(rcID, ownershipParameters) {\n const payload = {\n AdministratorsOnly: ownershipParameters.AdministratorsOnly,\n Public: ownershipParameters.Public,\n Users: ownershipParameters.Users,\n Teams: ownershipParameters.Teams,\n };\n\n return ResourceControl.update({ id: rcID }, payload).$promise;\n }\n\n /**\n * END PRIVATE SECTION\n */\n\n /**\n * PUBLIC SECTION\n */\n\n /**\n * Apply a ResourceControl after Resource creation\n * @param {int} userId ID of User performing the action\n * @param {AccessControlFormData} accessControlData ResourceControl to apply\n * @param {ResourceControlViewModel} resourceControl ResourceControl to update\n * @param {[]int} subResources SubResources managed by the ResourceControl\n */\n function applyResourceControl(userId, accessControlData, resourceControl, subResources = []) {\n const ownershipParameters = ResourceControlHelper.RCFormDataToOwnershipParameters(userId, accessControlData, subResources);\n return updateResourceControl(resourceControl.Id, ownershipParameters);\n }\n\n /**\n * Duplicate an existing ResourceControl (default to AdministratorsOnly if undefined)\n * @param {int} userId ID of User performing the action\n * @param {ResourceControlViewModel} oldResourceControl ResourceControl to duplicate\n * @param {ResourceControlViewModel} newResourceControl ResourceControl to apply duplication to\n */\n function duplicateResourceControl(userId, oldResourceControl, newResourceControl) {\n const ownershipParameters = ResourceControlHelper.RCViewModelToOwnershipParameters(userId, oldResourceControl);\n return updateResourceControl(newResourceControl.Id, ownershipParameters);\n }\n\n /**\n * Update an existing ResourceControl or create a new one on existing resource without RC\n * @param {ResourceControlTypeString} rcType Type of ResourceControl\n * @param {String} resourceId ID of involved Resource\n * @param {ResourceControlViewModel} resourceControl Previous ResourceControl (can be undefined)\n * @param {AccessControlPanelData} formValues View data generated by AccessControlPanel\n */\n function applyResourceControlChange(rcType, resourceId, resourceControl, formValues) {\n const ownershipParameters = ResourceControlHelper.RCPanelDataToOwnershipParameters(formValues);\n if (resourceControl) {\n return updateResourceControl(resourceControl.Id, ownershipParameters);\n } else {\n return createResourceControl(rcType, resourceId, ownershipParameters);\n }\n }\n\n /**\n * Retrive users and team details for ResourceControlViewModel\n * @param {ResourceControlViewModel} resourceControl ResourceControl view model\n */\n function retrieveOwnershipDetails(resourceControl) {\n var deferred = $q.defer();\n\n if (!resourceControl) {\n deferred.resolve({ authorizedUsers: [], authorizedTeams: [] });\n return deferred.promise;\n }\n\n $q.all({\n users: resourceControl.UserAccesses.length > 0 ? UserService.users(false) : [],\n teams: resourceControl.TeamAccesses.length > 0 ? TeamService.teams() : [],\n })\n .then(function success(data) {\n var authorizedUsers = ResourceControlHelper.retrieveAuthorizedUsers(resourceControl, data.users);\n var authorizedTeams = ResourceControlHelper.retrieveAuthorizedTeams(resourceControl, data.teams);\n deferred.resolve({ authorizedUsers: authorizedUsers, authorizedTeams: authorizedTeams });\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve user and team information', err: err });\n });\n\n return deferred.promise;\n }\n\n function retrieveUserPermissionsOnResource(userID, isAdministrator, resourceControl) {\n var deferred = $q.defer();\n\n if (!resourceControl || isAdministrator) {\n deferred.resolve({ isPartOfRestrictedUsers: false, isLeaderOfAnyRestrictedTeams: false });\n return deferred.promise;\n }\n\n var found = _.find(resourceControl.UserAccesses, { UserId: userID });\n if (found) {\n deferred.resolve({ isPartOfRestrictedUsers: true, isLeaderOfAnyRestrictedTeams: false });\n } else {\n var isTeamLeader = false;\n UserService.userMemberships(userID)\n .then(function success(data) {\n var memberships = data;\n isTeamLeader = ResourceControlHelper.isLeaderOfAnyRestrictedTeams(memberships, resourceControl);\n deferred.resolve({ isPartOfRestrictedUsers: false, isLeaderOfAnyRestrictedTeams: isTeamLeader });\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve user memberships', err: err });\n });\n }\n\n return deferred.promise;\n }\n\n /**\n * END PUBLIC SECTION\n */\n\n return service;\n },\n]);\n","import { SettingsViewModel, PublicSettingsViewModel } from '../../models/settings';\n\nangular.module('portainer.app').factory('SettingsService', [\n '$q',\n 'Settings',\n function SettingsServiceFactory($q, Settings) {\n 'use strict';\n var service = {};\n\n service.settings = function () {\n var deferred = $q.defer();\n\n Settings.get()\n .$promise.then(function success(data) {\n var settings = new SettingsViewModel(data);\n deferred.resolve(settings);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve application settings', err: err });\n });\n\n return deferred.promise;\n };\n\n service.update = function (settings) {\n return Settings.update({}, settings).$promise;\n };\n\n service.publicSettings = function () {\n var deferred = $q.defer();\n\n Settings.publicSettings()\n .$promise.then(function success(data) {\n var settings = new PublicSettingsViewModel(data);\n deferred.resolve(settings);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve application settings', err: err });\n });\n\n return deferred.promise;\n };\n\n service.checkLDAPConnectivity = function (settings) {\n return Settings.checkLDAPConnectivity({}, settings).$promise;\n };\n\n return service;\n },\n]);\n","import _ from 'lodash-es';\nimport { StackViewModel, OrphanedStackViewModel } from '../../models/stack';\n\nangular.module('portainer.app').factory('StackService', [\n '$q',\n '$async',\n 'Stack',\n 'FileUploadService',\n 'StackHelper',\n 'ServiceService',\n 'ContainerService',\n 'SwarmService',\n 'EndpointProvider',\n function StackServiceFactory($q, $async, Stack, FileUploadService, StackHelper, ServiceService, ContainerService, SwarmService, EndpointProvider) {\n 'use strict';\n var service = {\n updateGit,\n };\n\n service.stack = function (id) {\n var deferred = $q.defer();\n\n Stack.get({ id: id })\n .$promise.then(function success(data) {\n var stack = new StackViewModel(data);\n deferred.resolve(stack);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve stack details', err: err });\n });\n\n return deferred.promise;\n };\n\n service.getStackFile = function (id) {\n var deferred = $q.defer();\n\n Stack.getStackFile({ id: id })\n .$promise.then(function success(data) {\n deferred.resolve(data.StackFileContent);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve stack content', err: err });\n });\n\n return deferred.promise;\n };\n\n service.migrateSwarmStack = function (stack, targetEndpointId, newName) {\n var deferred = $q.defer();\n\n EndpointProvider.setEndpointID(targetEndpointId);\n\n SwarmService.swarm()\n .then(function success(data) {\n var swarm = data;\n if (swarm.Id === stack.SwarmId) {\n deferred.reject({ msg: 'Target endpoint is located in the same Swarm cluster as the current endpoint', err: null });\n return;\n }\n return Stack.migrate({ id: stack.Id, endpointId: stack.EndpointId }, { EndpointID: targetEndpointId, SwarmID: swarm.Id, Name: newName }).$promise;\n })\n .then(function success() {\n deferred.resolve();\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to migrate stack', err: err });\n })\n .finally(function final() {\n EndpointProvider.setEndpointID(stack.EndpointId);\n });\n\n return deferred.promise;\n };\n\n service.migrateComposeStack = function (stack, targetEndpointId, newName) {\n var deferred = $q.defer();\n\n EndpointProvider.setEndpointID(targetEndpointId);\n\n Stack.migrate({ id: stack.Id, endpointId: stack.EndpointId }, { EndpointID: targetEndpointId, Name: newName })\n .$promise.then(function success() {\n deferred.resolve();\n })\n .catch(function error(err) {\n EndpointProvider.setEndpointID(stack.EndpointId);\n deferred.reject({ msg: 'Unable to migrate stack', err: err });\n });\n\n return deferred.promise;\n };\n\n service.stacks = function (compose, swarm, endpointId, includeOrphanedStacks = false) {\n var deferred = $q.defer();\n\n var queries = [];\n if (compose) {\n queries.push(service.composeStacks(endpointId, true, { EndpointID: endpointId, IncludeOrphanedStacks: includeOrphanedStacks }));\n }\n if (swarm) {\n queries.push(service.swarmStacks(endpointId, true, { IncludeOrphanedStacks: includeOrphanedStacks }));\n }\n\n $q.all(queries)\n .then(function success(data) {\n var stacks = [];\n if (data[0]) {\n stacks = stacks.concat(data[0]);\n }\n if (data[1]) {\n stacks = stacks.concat(data[1]);\n }\n deferred.resolve(stacks);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve stacks', err: err });\n });\n\n return deferred.promise;\n };\n\n service.externalSwarmStacks = function () {\n var deferred = $q.defer();\n\n ServiceService.services()\n .then(function success(services) {\n deferred.resolve(StackHelper.getExternalStacksFromServices(services));\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve external stacks', err: err });\n });\n\n return deferred.promise;\n };\n\n service.externalComposeStacks = function () {\n var deferred = $q.defer();\n\n ContainerService.containers(1)\n .then(function success(containers) {\n deferred.resolve(StackHelper.getExternalStacksFromContainers(containers));\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve external stacks', err: err });\n });\n\n return deferred.promise;\n };\n\n service.unionStacks = function (stacks, externalStacks) {\n stacks.forEach((stack) => {\n externalStacks.forEach((externalStack) => {\n if (stack.Orphaned && stack.Name == externalStack.Name) {\n stack.OrphanedRunning = true;\n }\n });\n });\n const result = _.unionWith(stacks, externalStacks, function (a, b) {\n return a.Name === b.Name;\n });\n\n return result;\n };\n\n service.composeStacks = function (endpointId, includeExternalStacks, filters) {\n var deferred = $q.defer();\n\n $q.all({\n stacks: Stack.query({ filters: filters }).$promise,\n externalStacks: includeExternalStacks ? service.externalComposeStacks() : [],\n })\n .then(function success(data) {\n var stacks = data.stacks.map(function (item) {\n if (item.EndpointId == endpointId) {\n return new StackViewModel(item);\n } else {\n return new OrphanedStackViewModel(item);\n }\n });\n\n var externalStacks = data.externalStacks;\n const result = service.unionStacks(stacks, externalStacks);\n deferred.resolve(result);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve stacks', err: err });\n });\n\n return deferred.promise;\n };\n\n service.swarmStacks = function (endpointId, includeExternalStacks, filters = {}) {\n var deferred = $q.defer();\n\n SwarmService.swarm()\n .then(function success(data) {\n var swarm = data;\n filters = { SwarmID: swarm.Id, ...filters };\n\n return $q.all({\n stacks: Stack.query({ filters: filters }).$promise,\n externalStacks: includeExternalStacks ? service.externalSwarmStacks() : [],\n });\n })\n .then(function success(data) {\n var stacks = data.stacks.map(function (item) {\n if (item.EndpointId == endpointId) {\n return new StackViewModel(item);\n } else {\n return new OrphanedStackViewModel(item);\n }\n });\n\n var externalStacks = data.externalStacks;\n const result = service.unionStacks(stacks, externalStacks);\n deferred.resolve(result);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve stacks', err: err });\n });\n\n return deferred.promise;\n };\n\n service.remove = function (stack, external, endpointId) {\n var deferred = $q.defer();\n\n Stack.remove({ id: stack.Id ? stack.Id : stack.Name, external: external, endpointId: endpointId })\n .$promise.then(function success() {\n deferred.resolve();\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to remove the stack', err: err });\n });\n\n return deferred.promise;\n };\n\n service.associate = function (stack, endpointId, orphanedRunning) {\n var deferred = $q.defer();\n\n if (stack.Type == 1) {\n SwarmService.swarm()\n .then(function success(data) {\n const swarm = data;\n return Stack.associate({ id: stack.Id, endpointId: endpointId, swarmId: swarm.Id, orphanedRunning }).$promise;\n })\n .then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to associate the stack', err: err });\n });\n } else {\n Stack.associate({ id: stack.Id, endpointId: endpointId, orphanedRunning })\n .$promise.then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to associate the stack', err: err });\n });\n }\n\n return deferred.promise;\n };\n\n service.updateStack = function (stack, stackFile, env, prune) {\n return Stack.update({ endpointId: stack.EndpointId }, { id: stack.Id, StackFileContent: stackFile, Env: env, Prune: prune }).$promise;\n };\n\n service.createComposeStackFromFileUpload = function (name, stackFile, env, endpointId) {\n return FileUploadService.createComposeStack(name, stackFile, env, endpointId);\n };\n\n service.createSwarmStackFromFileUpload = function (name, stackFile, env, endpointId) {\n var deferred = $q.defer();\n\n SwarmService.swarm()\n .then(function success(data) {\n var swarm = data;\n return FileUploadService.createSwarmStack(name, swarm.Id, stackFile, env, endpointId);\n })\n .then(function success(data) {\n deferred.resolve(data.data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to create the stack', err: err });\n });\n\n return deferred.promise;\n };\n service.createComposeStackFromFileContent = function (name, stackFileContent, env, endpointId) {\n var payload = {\n Name: name,\n StackFileContent: stackFileContent,\n Env: env,\n };\n return Stack.create({ method: 'string', type: 2, endpointId: endpointId }, payload).$promise;\n };\n\n service.createSwarmStackFromFileContent = function (name, stackFileContent, env, endpointId) {\n var deferred = $q.defer();\n\n SwarmService.swarm()\n .then(function success(swarm) {\n var payload = {\n Name: name,\n SwarmID: swarm.Id,\n StackFileContent: stackFileContent,\n Env: env,\n };\n return Stack.create({ method: 'string', type: 1, endpointId: endpointId }, payload).$promise;\n })\n .then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to create the stack', err: err });\n });\n\n return deferred.promise;\n };\n\n service.createComposeStackFromGitRepository = function (name, repositoryOptions, env, endpointId) {\n var payload = {\n Name: name,\n RepositoryURL: repositoryOptions.RepositoryURL,\n RepositoryReferenceName: repositoryOptions.RepositoryReferenceName,\n ComposeFilePathInRepository: repositoryOptions.ComposeFilePathInRepository,\n RepositoryAuthentication: repositoryOptions.RepositoryAuthentication,\n RepositoryUsername: repositoryOptions.RepositoryUsername,\n RepositoryPassword: repositoryOptions.RepositoryPassword,\n Env: env,\n };\n return Stack.create({ method: 'repository', type: 2, endpointId: endpointId }, payload).$promise;\n };\n\n service.createSwarmStackFromGitRepository = function (name, repositoryOptions, env, endpointId) {\n var deferred = $q.defer();\n\n SwarmService.swarm()\n .then(function success(data) {\n var swarm = data;\n var payload = {\n Name: name,\n SwarmID: swarm.Id,\n RepositoryURL: repositoryOptions.RepositoryURL,\n RepositoryReferenceName: repositoryOptions.RepositoryReferenceName,\n ComposeFilePathInRepository: repositoryOptions.ComposeFilePathInRepository,\n RepositoryAuthentication: repositoryOptions.RepositoryAuthentication,\n RepositoryUsername: repositoryOptions.RepositoryUsername,\n RepositoryPassword: repositoryOptions.RepositoryPassword,\n Env: env,\n };\n return Stack.create({ method: 'repository', type: 1, endpointId: endpointId }, payload).$promise;\n })\n .then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to create the stack', err: err });\n });\n\n return deferred.promise;\n };\n\n service.duplicateStack = function duplicateStack(name, stackFileContent, env, endpointId, type) {\n var action = type === 1 ? service.createSwarmStackFromFileContent : service.createComposeStackFromFileContent;\n return action(name, stackFileContent, env, endpointId);\n };\n\n async function kubernetesDeployAsync(endpointId, method, payload) {\n try {\n await Stack.create({ endpointId: endpointId, method: method, type: 3 }, payload).$promise;\n } catch (err) {\n throw { err: err };\n }\n }\n\n service.kubernetesDeploy = function (endpointId, method, payload) {\n return $async(kubernetesDeployAsync, endpointId, method, payload);\n };\n\n service.start = start;\n function start(id) {\n return Stack.start({ id }).$promise;\n }\n\n service.stop = stop;\n function stop(id) {\n return Stack.stop({ id }).$promise;\n }\n\n function updateGit(id, endpointId, env, prune, gitConfig) {\n return Stack.updateGit(\n { endpointId, id },\n {\n env,\n prune,\n RepositoryReferenceName: gitConfig.RefName,\n RepositoryAuthentication: gitConfig.RepositoryAuthentication,\n RepositoryUsername: gitConfig.RepositoryUsername,\n RepositoryPassword: gitConfig.RepositoryPassword,\n }\n ).$promise;\n }\n\n return service;\n },\n]);\n","import { StatusVersionViewModel, StatusViewModel } from '../../models/status';\n\nangular.module('portainer.app').factory('StatusService', [\n '$q',\n 'Status',\n function StatusServiceFactory($q, Status) {\n 'use strict';\n var service = {};\n\n service.status = function () {\n var deferred = $q.defer();\n\n Status.get()\n .$promise.then(function success(data) {\n var status = new StatusViewModel(data);\n deferred.resolve(status);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve application status', err: err });\n });\n\n return deferred.promise;\n };\n\n service.version = function () {\n var deferred = $q.defer();\n\n Status.version()\n .$promise.then(function success(data) {\n var status = new StatusVersionViewModel(data);\n deferred.resolve(status);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve application version info', err: err });\n });\n\n return deferred.promise;\n };\n\n return service;\n },\n]);\n","angular.module('portainer.app').factory('SupportService', [\n '$q',\n 'Support',\n function SupportServiceFactory($q, Support) {\n 'use strict';\n var service = {};\n\n service.supportProducts = function () {\n var deferred = $q.defer();\n\n Support.get()\n .$promise.then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve support options', err: err });\n });\n\n return deferred.promise;\n };\n\n return service;\n },\n]);\n","import { TagViewModel } from '../../models/tag';\n\nangular.module('portainer.app').factory('TagService', [\n '$q',\n '$async',\n 'Tags',\n function TagServiceFactory($q, $async, Tags) {\n 'use strict';\n var service = {};\n\n service.tags = function () {\n var deferred = $q.defer();\n Tags.query()\n .$promise.then(function success(data) {\n var tags = data.map(function (item) {\n return new TagViewModel(item);\n });\n deferred.resolve(tags);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve tags', err: err });\n });\n return deferred.promise;\n };\n\n service.tagNames = function () {\n var deferred = $q.defer();\n Tags.query()\n .$promise.then(function success(data) {\n var tags = data.map(function (item) {\n return item.Name;\n });\n deferred.resolve(tags);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve tags', err: err });\n });\n return deferred.promise;\n };\n\n async function createTagAsync(name) {\n var payload = {\n Name: name,\n };\n try {\n const tag = await Tags.create({}, payload).$promise;\n return new TagViewModel(tag);\n } catch (err) {\n throw { msg: 'Unable to create tag', err };\n }\n }\n\n function createTag(name) {\n return $async(createTagAsync, name);\n }\n service.createTag = createTag;\n\n service.deleteTag = function (id) {\n return Tags.remove({ id: id }).$promise;\n };\n\n return service;\n },\n]);\n","import { TeamMembershipModel } from '../../models/teamMembership';\n\nangular.module('portainer.app').factory('TeamMembershipService', [\n '$q',\n 'TeamMemberships',\n function TeamMembershipFactory($q, TeamMemberships) {\n 'use strict';\n var service = {};\n\n service.memberships = function () {\n var deferred = $q.defer();\n TeamMemberships.query()\n .$promise.then(function success(data) {\n var memberships = data.map(function (item) {\n return new TeamMembershipModel(item);\n });\n deferred.resolve(memberships);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve team memberships', err: err });\n });\n return deferred.promise;\n };\n\n service.createMembership = function (userId, teamId, role) {\n var payload = {\n UserID: userId,\n TeamID: teamId,\n Role: role,\n };\n return TeamMemberships.create({}, payload).$promise;\n };\n\n service.deleteMembership = function (id) {\n return TeamMemberships.remove({ id: id }).$promise;\n };\n\n service.updateMembership = function (id, userId, teamId, role) {\n var payload = {\n UserID: userId,\n TeamID: teamId,\n Role: role,\n };\n return TeamMemberships.update({ id: id }, payload).$promise;\n };\n\n return service;\n },\n]);\n","import { TeamViewModel } from '../../models/team';\nimport { TeamMembershipModel } from '../../models/teamMembership';\n\nangular.module('portainer.app').factory('TeamService', [\n '$q',\n 'Teams',\n 'TeamMembershipService',\n function TeamServiceFactory($q, Teams, TeamMembershipService) {\n 'use strict';\n var service = {};\n\n service.teams = function () {\n var deferred = $q.defer();\n Teams.query()\n .$promise.then(function success(data) {\n var teams = data.map(function (item) {\n return new TeamViewModel(item);\n });\n deferred.resolve(teams);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve teams', err: err });\n });\n return deferred.promise;\n };\n\n service.team = function (id) {\n var deferred = $q.defer();\n Teams.get({ id: id })\n .$promise.then(function success(data) {\n var team = new TeamViewModel(data);\n deferred.resolve(team);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve team details', err: err });\n });\n return deferred.promise;\n };\n\n service.createTeam = function (name, leaderIds) {\n var deferred = $q.defer();\n var payload = {\n Name: name,\n };\n Teams.create({}, payload)\n .$promise.then(function success(data) {\n var teamId = data.Id;\n var teamMembershipQueries = [];\n angular.forEach(leaderIds, function (userId) {\n teamMembershipQueries.push(TeamMembershipService.createMembership(userId, teamId, 1));\n });\n $q.all(teamMembershipQueries).then(function success() {\n deferred.resolve();\n });\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to create team', err: err });\n });\n return deferred.promise;\n };\n\n service.deleteTeam = function (id) {\n return Teams.remove({ id: id }).$promise;\n };\n\n service.userMemberships = function (id) {\n var deferred = $q.defer();\n Teams.queryMemberships({ id: id })\n .$promise.then(function success(data) {\n var memberships = data.map(function (item) {\n return new TeamMembershipModel(item);\n });\n deferred.resolve(memberships);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve user memberships for the team', err: err });\n });\n return deferred.promise;\n };\n\n return service;\n },\n]);\n","import _ from 'lodash-es';\nimport { TemplateViewModel } from '../../models/template';\n\nangular.module('portainer.app').factory('TemplateService', [\n '$q',\n 'Templates',\n 'TemplateHelper',\n 'RegistryService',\n 'DockerHubService',\n 'ImageHelper',\n 'ContainerHelper',\n function TemplateServiceFactory($q, Templates, TemplateHelper, RegistryService, DockerHubService, ImageHelper, ContainerHelper) {\n 'use strict';\n var service = {};\n\n service.templates = function () {\n const deferred = $q.defer();\n\n $q.all({\n templates: Templates.query().$promise,\n registries: RegistryService.registries(),\n dockerhub: DockerHubService.dockerhub(),\n })\n .then(function success(data) {\n const version = data.templates.version;\n const templates = _.map(data.templates.templates, (item) => {\n try {\n const template = new TemplateViewModel(item, version);\n const registry = RegistryService.retrievePorRegistryModelFromRepositoryWithRegistries(template.RegistryModel.Registry.URL, data.registries, data.dockerhub);\n registry.Image = template.RegistryModel.Image;\n template.RegistryModel = registry;\n return template;\n } catch (err) {\n deferred.reject({ msg: 'Unable to retrieve templates', err: err });\n }\n });\n deferred.resolve(templates);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve templates', err: err });\n });\n\n return deferred.promise;\n };\n\n service.templateFile = templateFile;\n function templateFile(repositoryUrl, composeFilePathInRepository) {\n return Templates.file({ repositoryUrl, composeFilePathInRepository }).$promise;\n }\n\n service.createTemplateConfiguration = function (template, containerName, network) {\n var imageConfiguration = ImageHelper.createImageConfigForContainer(template.RegistryModel);\n var containerConfiguration = createContainerConfiguration(template, containerName, network);\n containerConfiguration.Image = imageConfiguration.fromImage;\n return containerConfiguration;\n };\n\n function createContainerConfiguration(template, containerName, network) {\n var configuration = TemplateHelper.getDefaultContainerConfiguration();\n configuration.HostConfig.NetworkMode = network.Name;\n configuration.HostConfig.Privileged = template.Privileged;\n configuration.HostConfig.RestartPolicy = { Name: template.RestartPolicy };\n configuration.HostConfig.ExtraHosts = template.Hosts ? template.Hosts : [];\n configuration.name = containerName;\n configuration.Hostname = template.Hostname;\n configuration.Env = TemplateHelper.EnvToStringArray(template.Env);\n configuration.Cmd = ContainerHelper.commandStringToArray(template.Command);\n var portConfiguration = TemplateHelper.portArrayToPortConfiguration(template.Ports);\n configuration.HostConfig.PortBindings = portConfiguration.bindings;\n configuration.ExposedPorts = portConfiguration.exposedPorts;\n var consoleConfiguration = TemplateHelper.getConsoleConfiguration(template.Interactive);\n configuration.OpenStdin = consoleConfiguration.openStdin;\n configuration.Tty = consoleConfiguration.tty;\n configuration.Labels = TemplateHelper.updateContainerConfigurationWithLabels(template.Labels);\n return configuration;\n }\n\n service.updateContainerConfigurationWithVolumes = function (configuration, template, generatedVolumesPile) {\n var volumes = template.Volumes;\n TemplateHelper.createVolumeBindings(volumes, generatedVolumesPile);\n volumes.forEach(function (volume) {\n if (volume.binding) {\n configuration.Volumes[volume.container] = {};\n configuration.HostConfig.Binds.push(volume.binding);\n }\n });\n };\n\n return service;\n },\n]);\n","import _ from 'lodash-es';\nimport { UserViewModel } from '../../models/user';\nimport { TeamMembershipModel } from '../../models/teamMembership';\n\nangular.module('portainer.app').factory('UserService', [\n '$q',\n 'Users',\n 'UserHelper',\n 'TeamService',\n 'TeamMembershipService',\n function UserServiceFactory($q, Users, UserHelper, TeamService, TeamMembershipService) {\n 'use strict';\n var service = {};\n\n service.users = function (includeAdministrators) {\n var deferred = $q.defer();\n\n Users.query({})\n .$promise.then(function success(data) {\n var users = data.map(function (user) {\n return new UserViewModel(user);\n });\n if (!includeAdministrators) {\n users = UserHelper.filterNonAdministratorUsers(users);\n }\n deferred.resolve(users);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve users', err: err });\n });\n\n return deferred.promise;\n };\n\n service.user = function (id) {\n var deferred = $q.defer();\n\n Users.get({ id: id })\n .$promise.then(function success(data) {\n var user = new UserViewModel(data);\n deferred.resolve(user);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve user details', err: err });\n });\n\n return deferred.promise;\n };\n\n service.createUser = function (username, password, role, teamIds) {\n var deferred = $q.defer();\n\n var payload = {\n username: username,\n password: password,\n role: role,\n };\n\n Users.create({}, payload)\n .$promise.then(function success(data) {\n var userId = data.Id;\n var teamMembershipQueries = [];\n angular.forEach(teamIds, function (teamId) {\n teamMembershipQueries.push(TeamMembershipService.createMembership(userId, teamId, 2));\n });\n $q.all(teamMembershipQueries).then(function success() {\n deferred.resolve();\n });\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to create user', err: err });\n });\n\n return deferred.promise;\n };\n\n service.deleteUser = function (id) {\n return Users.remove({ id: id }).$promise;\n };\n\n service.updateUser = function (id, { password, role, username }) {\n return Users.update({ id }, { password, role, username }).$promise;\n };\n\n service.updateUserPassword = function (id, currentPassword, newPassword) {\n var payload = {\n Password: currentPassword,\n NewPassword: newPassword,\n };\n\n return Users.updatePassword({ id: id }, payload).$promise;\n };\n\n service.userMemberships = function (id) {\n var deferred = $q.defer();\n\n Users.queryMemberships({ id: id })\n .$promise.then(function success(data) {\n var memberships = data.map(function (item) {\n return new TeamMembershipModel(item);\n });\n deferred.resolve(memberships);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve user memberships', err: err });\n });\n\n return deferred.promise;\n };\n\n service.userLeadingTeams = function (id) {\n var deferred = $q.defer();\n\n $q.all({\n teams: TeamService.teams(),\n memberships: service.userMemberships(id),\n })\n .then(function success(data) {\n var memberships = data.memberships;\n var teams = data.teams.filter(function (team) {\n var membership = _.find(memberships, { TeamId: team.Id });\n if (membership && membership.Role === 1) {\n return team;\n }\n });\n deferred.resolve(teams);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve user teams', err: err });\n });\n\n return deferred.promise;\n };\n\n service.initAdministrator = function (username, password) {\n return Users.initAdminUser({ Username: username, Password: password }).$promise;\n };\n\n service.administratorExists = function () {\n var deferred = $q.defer();\n\n Users.checkAdminUser({})\n .$promise.then(function success() {\n deferred.resolve(true);\n })\n .catch(function error(err) {\n if (err.status === 404) {\n deferred.resolve(false);\n }\n deferred.reject({ msg: 'Unable to verify administrator account existence', err: err });\n });\n\n return deferred.promise;\n };\n\n return service;\n },\n]);\n","import { WebhookViewModel } from '../../models/webhook';\n\nangular.module('portainer.app').factory('WebhookService', [\n '$q',\n 'Webhooks',\n function WebhookServiceFactory($q, Webhooks) {\n 'use strict';\n var service = {};\n\n service.webhooks = function (serviceID, endpointID) {\n var deferred = $q.defer();\n var filters = { ResourceID: serviceID, EndpointID: endpointID };\n\n Webhooks.query({ filters: filters })\n .$promise.then(function success(data) {\n var webhooks = data.map(function (item) {\n return new WebhookViewModel(item);\n });\n deferred.resolve(webhooks);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve webhooks', err: err });\n });\n\n return deferred.promise;\n };\n\n service.createServiceWebhook = function (serviceID, endpointID) {\n return Webhooks.create({ ResourceID: serviceID, EndpointID: endpointID, WebhookType: 1 }).$promise;\n };\n\n service.deleteWebhook = function (id) {\n return Webhooks.remove({ id: id }).$promise;\n };\n\n return service;\n },\n]);\n","/**\n * Look a the following PR for how to use the wrapper\n * and documentation about it\n * https://github.com/portainer/portainer/pull/2945\n */\n\nangular.module('portainer').factory('$async', [\n '$q',\n function ($q) {\n return function (asyncFunc, ...args) {\n const def = $q.defer();\n const wrapper = function (params) {\n const deferred = $q.defer();\n asyncFunc(...params)\n .then(deferred.resolve)\n .catch(deferred.reject);\n return deferred.promise;\n };\n\n wrapper(args).then(def.resolve).catch(def.reject);\n return def.promise;\n };\n },\n]);\n","import { clear as clearSessionStorage } from './session-storage';\n\nangular.module('portainer.app').factory('Authentication', [\n '$async',\n '$state',\n 'Auth',\n 'OAuth',\n 'jwtHelper',\n 'LocalStorage',\n 'StateManager',\n 'EndpointProvider',\n function AuthenticationFactory($async, $state, Auth, OAuth, jwtHelper, LocalStorage, StateManager, EndpointProvider) {\n 'use strict';\n\n var service = {};\n var user = {};\n\n service.init = init;\n service.OAuthLogin = OAuthLogin;\n service.login = login;\n service.logout = logout;\n service.isAuthenticated = isAuthenticated;\n service.getUserDetails = getUserDetails;\n service.isAdmin = isAdmin;\n\n async function initAsync() {\n try {\n const jwt = LocalStorage.getJWT();\n if (jwt) {\n await setUser(jwt);\n }\n return !!jwt;\n } catch (error) {\n return false;\n }\n }\n\n async function logoutAsync(performApiLogout) {\n if (performApiLogout) {\n await Auth.logout().$promise;\n }\n\n clearSessionStorage();\n StateManager.clean();\n EndpointProvider.clean();\n LocalStorage.cleanAuthData();\n LocalStorage.storeLoginStateUUID('');\n }\n\n function logout(performApiLogout) {\n return $async(logoutAsync, performApiLogout);\n }\n\n function init() {\n return $async(initAsync);\n }\n\n async function OAuthLoginAsync(code) {\n const response = await OAuth.validate({ code: code }).$promise;\n await setUser(response.jwt);\n }\n\n function OAuthLogin(code) {\n return $async(OAuthLoginAsync, code);\n }\n\n async function loginAsync(username, password) {\n const response = await Auth.login({ username: username, password: password }).$promise;\n await setUser(response.jwt);\n }\n\n function login(username, password) {\n return $async(loginAsync, username, password);\n }\n\n function isAuthenticated() {\n var jwt = LocalStorage.getJWT();\n return jwt && !jwtHelper.isTokenExpired(jwt);\n }\n\n function getUserDetails() {\n return user;\n }\n\n async function setUser(jwt) {\n LocalStorage.storeJWT(jwt);\n var tokenPayload = jwtHelper.decodeToken(jwt);\n user.username = tokenPayload.username;\n user.ID = tokenPayload.id;\n user.role = tokenPayload.role;\n }\n\n function isAdmin() {\n if (user.role === 1) {\n return true;\n }\n return false;\n }\n\n return service;\n },\n]);\n","import Chart from 'chart.js';\nimport filesize from 'filesize';\n\nangular.module('portainer.app').factory('ChartService', [\n function ChartService() {\n 'use strict';\n\n // Max. number of items to display on a chart\n var CHART_LIMIT = 600;\n\n var service = {};\n\n function defaultChartOptions(pos, tooltipCallback, scalesCallback, isStacked) {\n return {\n animation: { duration: 0 },\n responsiveAnimationDuration: 0,\n responsive: true,\n tooltips: {\n mode: 'index',\n intersect: false,\n position: pos,\n callbacks: {\n label: function (tooltipItem, data) {\n var datasetLabel = data.datasets[tooltipItem.datasetIndex].label;\n return tooltipCallback(datasetLabel, tooltipItem.yLabel);\n },\n },\n },\n hover: { animationDuration: 0 },\n scales: {\n yAxes: [\n {\n stacked: isStacked,\n ticks: {\n beginAtZero: true,\n callback: scalesCallback,\n },\n },\n ],\n },\n };\n }\n\n function CreateChart(context, label, tooltipCallback, scalesCallback) {\n return new Chart(context, {\n type: 'line',\n data: {\n labels: [],\n datasets: [\n {\n label: label,\n data: [],\n fill: true,\n backgroundColor: 'rgba(151,187,205,0.4)',\n borderColor: 'rgba(151,187,205,0.6)',\n pointBackgroundColor: 'rgba(151,187,205,1)',\n pointBorderColor: 'rgba(151,187,205,1)',\n pointRadius: 2,\n borderWidth: 2,\n },\n ],\n },\n options: defaultChartOptions('nearest', tooltipCallback, scalesCallback),\n });\n }\n\n function CreateMemoryChart(context, tooltipCallback, scalesCallback) {\n return new Chart(context, {\n type: 'line',\n data: {\n labels: [],\n datasets: [\n {\n label: 'Memory',\n data: [],\n fill: true,\n backgroundColor: 'rgba(151,187,205,0.4)',\n borderColor: 'rgba(151,187,205,0.6)',\n pointBackgroundColor: 'rgba(151,187,205,1)',\n pointBorderColor: 'rgba(151,187,205,1)',\n pointRadius: 2,\n borderWidth: 2,\n },\n {\n label: 'Cache',\n data: [],\n fill: true,\n backgroundColor: 'rgba(255,180,174,0.4)',\n borderColor: 'rgba(255,180,174,0.6)',\n pointBackgroundColor: 'rgba(255,180,174,1)',\n pointBorderColor: 'rgba(255,180,174,1)',\n pointRadius: 2,\n borderWidth: 2,\n },\n ],\n },\n options: defaultChartOptions('nearest', tooltipCallback, scalesCallback, true),\n });\n }\n\n function CreateIOChart(context, tooltipCallback, scalesCallback) {\n return new Chart(context, {\n type: 'line',\n data: {\n labels: [],\n datasets: [\n {\n label: 'Read (Aggregate)',\n data: [],\n fill: true,\n backgroundColor: 'rgba(151,187,205,0.4)',\n borderColor: 'rgba(151,187,205,0.6)',\n pointBackgroundColor: 'rgba(151,187,205,1)',\n pointBorderColor: 'rgba(151,187,205,1)',\n pointRadius: 2,\n borderWidth: 2,\n },\n {\n label: 'Write (Aggregate)',\n data: [],\n fill: true,\n backgroundColor: 'rgba(255,180,174,0.4)',\n borderColor: 'rgba(255,180,174,0.6)',\n pointBackgroundColor: 'rgba(255,180,174,1)',\n pointBorderColor: 'rgba(255,180,174,1)',\n pointRadius: 2,\n borderWidth: 2,\n },\n ],\n },\n options: defaultChartOptions('nearest', tooltipCallback, scalesCallback, true),\n });\n }\n\n service.CreateCPUChart = function (context) {\n return CreateChart(context, 'CPU', percentageBasedTooltipLabel, percentageBasedAxisLabel);\n };\n\n service.CreateIOChart = function (context) {\n return CreateIOChart(context, byteBasedTooltipLabel, byteBasedAxisLabel);\n };\n\n service.CreateMemoryChart = function (context) {\n return CreateMemoryChart(context, byteBasedTooltipLabel, byteBasedAxisLabel);\n };\n\n service.CreateNetworkChart = function (context) {\n return new Chart(context, {\n type: 'line',\n data: {\n labels: [],\n datasets: [\n {\n label: 'RX on eth0',\n data: [],\n fill: false,\n backgroundColor: 'rgba(151,187,205,0.4)',\n borderColor: 'rgba(151,187,205,0.6)',\n pointBackgroundColor: 'rgba(151,187,205,1)',\n pointBorderColor: 'rgba(151,187,205,1)',\n pointRadius: 2,\n borderWidth: 2,\n },\n {\n label: 'TX on eth0',\n data: [],\n fill: false,\n backgroundColor: 'rgba(255,180,174,0.4)',\n borderColor: 'rgba(255,180,174,0.6)',\n pointBackgroundColor: 'rgba(255,180,174,1)',\n pointBorderColor: 'rgba(255,180,174,1)',\n pointRadius: 2,\n borderWidth: 2,\n },\n ],\n },\n options: defaultChartOptions('average', byteBasedTooltipLabel, byteBasedAxisLabel),\n });\n };\n\n function LimitChartItems(chart, CHART_LIMIT) {\n if (chart.data.datasets[0].data.length > CHART_LIMIT) {\n chart.data.labels.pop();\n chart.data.datasets[0].data.pop();\n chart.data.datasets[1].data.pop();\n }\n }\n\n function UpdateChart(label, value, chart) {\n chart.data.labels.push(label);\n chart.data.datasets[0].data.push(value);\n\n if (chart.data.datasets[0].data.length > CHART_LIMIT) {\n chart.data.labels.pop();\n chart.data.datasets[0].data.pop();\n }\n\n chart.update(0);\n }\n\n service.UpdateMemoryChart = function UpdateChart(label, memoryValue, cacheValue, chart) {\n chart.data.labels.push(label);\n chart.data.datasets[0].data.push(memoryValue);\n\n if (cacheValue) {\n chart.data.datasets[1].data.push(cacheValue);\n } else {\n // cache values are not available for Windows\n chart.data.datasets.splice(1, 1);\n }\n\n LimitChartItems(chart);\n\n chart.update(0);\n };\n service.UpdateCPUChart = UpdateChart;\n service.UpdateIOChart = function (label, read, write, chart) {\n chart.data.labels.push(label);\n chart.data.datasets[0].data.push(read);\n chart.data.datasets[1].data.push(write);\n LimitChartItems(chart);\n chart.update(0);\n };\n\n service.UpdateNetworkChart = function (label, rx, tx, chart) {\n chart.data.labels.push(label);\n chart.data.datasets[0].data.push(rx);\n chart.data.datasets[1].data.push(tx);\n\n LimitChartItems(chart);\n\n chart.update(0);\n };\n\n function byteBasedTooltipLabel(label, value) {\n var processedValue = 0;\n if (value > 5) {\n processedValue = filesize(value, { base: 10, round: 1 });\n } else {\n processedValue = value.toFixed(1) + 'B';\n }\n return label + ': ' + processedValue;\n }\n\n function byteBasedAxisLabel(value) {\n if (value > 5) {\n return filesize(value, { base: 10, round: 1 });\n }\n return value.toFixed(1) + 'B';\n }\n\n function percentageBasedAxisLabel(value) {\n if (value > 1) {\n return Math.round(value) + '%';\n }\n return value.toFixed(1) + '%';\n }\n\n function percentageBasedTooltipLabel(label, value) {\n var processedValue = 0;\n if (value > 1) {\n processedValue = Math.round(value);\n } else {\n processedValue = value.toFixed(1);\n }\n return label + ': ' + processedValue + '%';\n }\n\n return service;\n },\n]);\n","import _ from 'lodash-es';\nimport CodeMirror from 'codemirror';\nimport 'codemirror/mode/yaml/yaml.js';\nimport 'codemirror/addon/lint/lint.js';\nimport 'codemirror/addon/lint/yaml-lint.js';\nimport 'codemirror/addon/display/placeholder.js';\n\nangular.module('portainer.app').factory('CodeMirrorService', function CodeMirrorService() {\n 'use strict';\n\n var service = {};\n\n var codeMirrorGenericOptions = {\n lineNumbers: true,\n };\n\n var codeMirrorYAMLOptions = {\n mode: 'text/x-yaml',\n gutters: ['CodeMirror-lint-markers'],\n lint: true,\n extraKeys: {\n Tab: function (cm) {\n var spaces = Array(cm.getOption('indentUnit') + 1).join(' ');\n cm.replaceSelection(spaces);\n },\n },\n };\n\n service.applyCodeMirrorOnElement = function (element, yamlLint, readOnly) {\n var options = angular.copy(codeMirrorGenericOptions);\n\n if (yamlLint) {\n _.assign(options, codeMirrorYAMLOptions);\n }\n\n if (readOnly) {\n options.readOnly = true;\n }\n\n var cm = CodeMirror.fromTextArea(element, options);\n cm.setSize('100%', 500);\n return cm;\n };\n\n return service;\n});\n","import angular from 'angular';\n\nimport * as sessionStorage from './session-storage';\n\nangular.module('portainer.app').factory('DatatableService', DatatableServiceFactory);\n\nconst DATATABLE_PREFIX = 'datatable_';\nconst TEXT_FILTER_KEY_PREFIX = `${DATATABLE_PREFIX}text_filter_`;\n\n/* @ngInject */\nfunction DatatableServiceFactory(LocalStorage) {\n return {\n setDataTableSettings,\n getDataTableSettings,\n setDataTableTextFilters,\n getDataTableTextFilters,\n setDataTableFilters,\n getDataTableFilters,\n getDataTableOrder,\n setDataTableOrder,\n setDataTableExpandedItems,\n setColumnVisibilitySettings,\n getDataTableExpandedItems,\n setDataTableSelectedItems,\n getDataTableSelectedItems,\n getColumnVisibilitySettings,\n };\n\n function setDataTableSettings(key, settings) {\n LocalStorage.storeDataTableSettings(key, settings);\n }\n\n function getDataTableSettings(key) {\n return LocalStorage.getDataTableSettings(key);\n }\n\n function setDataTableTextFilters(key, filters) {\n sessionStorage.save(TEXT_FILTER_KEY_PREFIX + key, filters);\n }\n\n function getDataTableTextFilters(key) {\n return sessionStorage.get(TEXT_FILTER_KEY_PREFIX + key);\n }\n\n function setDataTableFilters(key, filters) {\n LocalStorage.storeDataTableFilters(key, filters);\n }\n\n function getDataTableFilters(key) {\n return LocalStorage.getDataTableFilters(key);\n }\n\n function getDataTableOrder(key) {\n return LocalStorage.getDataTableOrder(key);\n }\n\n function setDataTableOrder(key, orderBy, reverse) {\n var filter = {\n orderBy: orderBy,\n reverse: reverse,\n };\n LocalStorage.storeDataTableOrder(key, filter);\n }\n\n function setDataTableExpandedItems(key, expandedItems) {\n LocalStorage.storeDataTableExpandedItems(key, expandedItems);\n }\n\n function setColumnVisibilitySettings(key, columnVisibility) {\n LocalStorage.storeColumnVisibilitySettings(key, columnVisibility);\n }\n\n function getDataTableExpandedItems(key) {\n return LocalStorage.getDataTableExpandedItems(key);\n }\n\n function setDataTableSelectedItems(key, selectedItems) {\n LocalStorage.storeDataTableSelectedItems(key, selectedItems);\n }\n\n function getDataTableSelectedItems(key) {\n return LocalStorage.getDataTableSelectedItems(key);\n }\n\n function getColumnVisibilitySettings(key) {\n return LocalStorage.getColumnVisibilitySettings(key);\n }\n}\n","import _ from 'lodash-es';\n\nangular.module('portainer.app').factory(\n 'EndpointProvider',\n /* @ngInject */\n function EndpointProviderFactory(LocalStorage, $uiRouterGlobals) {\n 'use strict';\n var service = {};\n var endpoint = {};\n\n service.initialize = function () {\n var endpointID = LocalStorage.getEndpointID();\n var endpointPublicURL = LocalStorage.getEndpointPublicURL();\n var offlineMode = LocalStorage.getOfflineMode();\n\n if (endpointID) {\n endpoint.ID = endpointID;\n }\n if (endpointPublicURL) {\n endpoint.PublicURL = endpointPublicURL;\n }\n if (offlineMode) {\n endpoint.OfflineMode = offlineMode;\n }\n };\n\n service.clean = function () {\n LocalStorage.cleanEndpointData();\n endpoint = {};\n };\n\n service.endpoint = function () {\n return endpoint;\n };\n\n service.endpointID = function () {\n if (endpoint.ID === undefined) {\n endpoint.ID = LocalStorage.getEndpointID();\n }\n if (endpoint.ID === null || endpoint.ID === undefined) {\n return service.getUrlEndpointID();\n }\n return endpoint.ID;\n };\n\n // TODO: technical debt\n // Reference issue: JIRA CE-463\n // Documentation (https://ui-router.github.io/ng1/docs/latest/modules/injectables.html) show the usage of either\n // * $stateParams\n // * $transition$\n // * $uiRouterGlobals\n // to retrieve the URL params\n //\n // * $stateParams: is deprecated and will cause a circular dependency injection error\n // because EndpointProvider is used by EndpointStatusInterceptor which is injected inside $httpProvider\n // >> [$injector:cdep] Circular dependency found: $uiRouter <- $stateParams <- EndpointProvider <- EndpointStatusInterceptor <- $http <- $uiRouter\n // For more details, see https://stackoverflow.com/questions/20230691/injecting-state-ui-router-into-http-interceptor-causes-circular-dependency#20230786\n //\n // * $transition$: mentionned as the replacement of $stateParams (https://ui-router.github.io/guide/ng1/migrate-to-1_0#stateparams-deprecation)\n // but is not injectable without tweaks inside a service\n //\n // * $uiRouterGlobal: per https://github.com/angular-ui/ui-router/issues/3237#issuecomment-271979688\n // seems the recommanded way to retrieve params inside a service/factory\n //\n // We need this function to fallback on URL endpoint ID when no endpoint has been selected\n service.getUrlEndpointID = () => {\n return $uiRouterGlobals.params.id;\n };\n\n service.setEndpointID = function (id) {\n endpoint.ID = id;\n LocalStorage.storeEndpointID(id);\n };\n\n service.endpointPublicURL = function () {\n if (endpoint.PublicURL === undefined) {\n endpoint.PublicURL = LocalStorage.getEndpointPublicURL();\n }\n return endpoint.PublicURL;\n };\n\n service.setEndpointPublicURL = function (publicURL) {\n endpoint.PublicURL = publicURL;\n LocalStorage.storeEndpointPublicURL(publicURL);\n };\n\n service.endpoints = function () {\n return LocalStorage.getEndpoints();\n };\n\n service.setEndpoints = function (data) {\n LocalStorage.storeEndpoints(data);\n };\n\n service.offlineMode = function () {\n return endpoint.OfflineMode;\n };\n\n service.setOfflineMode = function (isOffline) {\n endpoint.OfflineMode = isOffline;\n LocalStorage.storeOfflineMode(isOffline);\n };\n\n service.setOfflineModeFromStatus = function (status) {\n var isOffline = status !== 1;\n endpoint.OfflineMode = isOffline;\n LocalStorage.storeOfflineMode(isOffline);\n };\n\n service.currentEndpoint = function () {\n var endpointId = endpoint.ID;\n var endpoints = LocalStorage.getEndpoints();\n return _.find(endpoints, function (item) {\n return item.Id === endpointId;\n });\n };\n\n return service;\n }\n);\n","import { PortainerEndpointCreationTypes } from 'Portainer/models/endpoint/models';\nimport { genericHandler, jsonObjectsToArrayHandler } from '../../docker/rest/response/handlers';\n\nangular.module('portainer.app').factory('FileUploadService', [\n '$q',\n 'Upload',\n 'EndpointProvider',\n function FileUploadFactory($q, Upload, EndpointProvider) {\n 'use strict';\n\n var service = {};\n\n function uploadFile(url, file) {\n return Upload.upload({ url: url, data: { file: file } });\n }\n\n service.buildImage = function (names, file, path) {\n var endpointID = EndpointProvider.endpointID();\n return Upload.http({\n url: 'api/endpoints/' + endpointID + '/docker/build',\n headers: {\n 'Content-Type': file.type,\n },\n data: file,\n params: {\n t: names,\n dockerfile: path,\n },\n ignoreLoadingBar: true,\n transformResponse: function (data) {\n return jsonObjectsToArrayHandler(data);\n },\n });\n };\n\n service.loadImages = function (file) {\n var endpointID = EndpointProvider.endpointID();\n return Upload.http({\n url: 'api/endpoints/' + endpointID + '/docker/images/load',\n headers: {\n 'Content-Type': file.type,\n },\n data: file,\n ignoreLoadingBar: true,\n transformResponse: genericHandler,\n });\n };\n\n service.createSchedule = function (payload) {\n return Upload.upload({\n url: 'api/schedules?method=file',\n data: {\n file: payload.File,\n Name: payload.Name,\n CronExpression: payload.CronExpression,\n Image: payload.Image,\n Endpoints: Upload.json(payload.Endpoints),\n RetryCount: payload.RetryCount,\n RetryInterval: payload.RetryInterval,\n },\n });\n };\n\n service.uploadBackup = function (file, password) {\n return Upload.upload({\n url: 'api/restore',\n data: {\n file,\n password,\n },\n });\n };\n\n service.createSwarmStack = function (stackName, swarmId, file, env, endpointId) {\n return Upload.upload({\n url: 'api/stacks?method=file&type=1&endpointId=' + endpointId,\n data: {\n file: file,\n Name: stackName,\n SwarmID: swarmId,\n Env: Upload.json(env),\n },\n ignoreLoadingBar: true,\n });\n };\n\n service.createComposeStack = function (stackName, file, env, endpointId) {\n return Upload.upload({\n url: 'api/stacks?method=file&type=2&endpointId=' + endpointId,\n data: {\n file: file,\n Name: stackName,\n Env: Upload.json(env),\n },\n ignoreLoadingBar: true,\n });\n };\n\n service.createEdgeStack = function createEdgeStack(stackName, file, edgeGroups) {\n return Upload.upload({\n url: 'api/edge_stacks?method=file',\n data: {\n file: file,\n Name: stackName,\n EdgeGroups: Upload.json(edgeGroups),\n },\n ignoreLoadingBar: true,\n });\n };\n\n service.createCustomTemplate = function createCustomTemplate(data) {\n return Upload.upload({\n url: 'api/custom_templates?method=file',\n data,\n ignoreLoadingBar: true,\n });\n };\n\n service.configureRegistry = function (registryId, registryManagementConfigurationModel) {\n return Upload.upload({\n url: 'api/registries/' + registryId + '/configure',\n data: registryManagementConfigurationModel,\n });\n };\n\n service.createEndpoint = function (\n name,\n creationType,\n URL,\n PublicURL,\n groupID,\n tagIds,\n TLS,\n TLSSkipVerify,\n TLSSkipClientVerify,\n TLSCAFile,\n TLSCertFile,\n TLSKeyFile,\n checkinInterval\n ) {\n return Upload.upload({\n url: 'api/endpoints',\n data: {\n Name: name,\n EndpointCreationType: creationType,\n URL: URL,\n PublicURL: PublicURL,\n GroupID: groupID,\n TagIds: Upload.json(tagIds),\n TLS: TLS,\n TLSSkipVerify: TLSSkipVerify,\n TLSSkipClientVerify: TLSSkipClientVerify,\n TLSCACertFile: TLSCAFile,\n TLSCertFile: TLSCertFile,\n TLSKeyFile: TLSKeyFile,\n CheckinInterval: checkinInterval,\n },\n ignoreLoadingBar: true,\n });\n };\n\n service.createAzureEndpoint = function (name, applicationId, tenantId, authenticationKey, groupId, tagIds) {\n return Upload.upload({\n url: 'api/endpoints',\n data: {\n Name: name,\n EndpointCreationType: PortainerEndpointCreationTypes.AzureEnvironment,\n GroupID: groupId,\n TagIds: Upload.json(tagIds),\n AzureApplicationID: applicationId,\n AzureTenantID: tenantId,\n AzureAuthenticationKey: authenticationKey,\n },\n ignoreLoadingBar: true,\n });\n };\n\n service.uploadLDAPTLSFiles = function (TLSCAFile, TLSCertFile, TLSKeyFile) {\n var queue = [];\n\n if (TLSCAFile) {\n queue.push(uploadFile('api/upload/tls/ca?folder=ldap', TLSCAFile));\n }\n if (TLSCertFile) {\n queue.push(uploadFile('api/upload/tls/cert?folder=ldap', TLSCertFile));\n }\n if (TLSKeyFile) {\n queue.push(uploadFile('api/upload/tls/key?folder=ldap', TLSKeyFile));\n }\n\n return $q.all(queue);\n };\n\n service.uploadTLSFilesForEndpoint = function (endpointID, TLSCAFile, TLSCertFile, TLSKeyFile) {\n var queue = [];\n\n if (TLSCAFile) {\n queue.push(uploadFile('api/upload/tls/ca?folder=' + endpointID, TLSCAFile));\n }\n if (TLSCertFile) {\n queue.push(uploadFile('api/upload/tls/cert?folder=' + endpointID, TLSCertFile));\n }\n if (TLSKeyFile) {\n queue.push(uploadFile('api/upload/tls/key?folder=' + endpointID, TLSKeyFile));\n }\n\n return $q.all(queue);\n };\n\n return service;\n },\n]);\n","import { ResourceControlOwnership as RCO } from 'Portainer/models/resourceControl/resourceControlOwnership';\n\nangular.module('portainer.app').factory('FormValidator', [\n function FormValidatorFactory() {\n 'use strict';\n\n var validator = {};\n\n validator.validateAccessControl = function (accessControlData, isAdmin) {\n if (!accessControlData.AccessControlEnabled) {\n return '';\n }\n\n if (isAdmin && accessControlData.Ownership === RCO.RESTRICTED && accessControlData.AuthorizedUsers.length === 0 && accessControlData.AuthorizedTeams.length === 0) {\n return 'You must specify at least one team or user.';\n } else if (!isAdmin && accessControlData.Ownership === RCO.RESTRICTED && accessControlData.AuthorizedTeams.length === 0) {\n return 'You must specify at least a team.';\n }\n return '';\n };\n\n return validator;\n },\n]);\n","angular.module('portainer.app').factory('HttpRequestHelper', [\n function HttpRequestHelper() {\n 'use strict';\n\n var service = {};\n var headers = {};\n headers.agentTargetQueue = [];\n headers.agentManagerOperation = false;\n\n service.registryAuthenticationHeader = function () {\n return headers.registryAuthentication;\n };\n\n service.setRegistryAuthenticationHeader = function (headerValue) {\n headers.registryAuthentication = headerValue;\n };\n\n // Due to the fact that async HTTP requests are decorated using an interceptor\n // we need to store and retrieve the headers using a first-in-first-out (FIFO) data structure.\n // Otherwise, sequential HTTP requests might end up using the same header value (incorrect in the case\n // of starting multiple containers on different nodes for example).\n // To prevent having to use the HttpRequestHelper.setPortainerAgentTargetHeader before EACH request,\n // we re-use the latest available header in the data structure (handy in thee case of multiple requests affecting\n // the same node in the same view).\n service.portainerAgentTargetHeader = function () {\n if (headers.agentTargetQueue.length === 0) {\n return headers.agentTargetLastValue;\n } else if (headers.agentTargetQueue.length === 1) {\n headers.agentTargetLastValue = headers.agentTargetQueue[0];\n }\n return headers.agentTargetQueue.shift();\n };\n\n service.setPortainerAgentTargetHeader = function (headerValue) {\n if (headerValue) {\n headers.agentTargetQueue.push(headerValue);\n }\n };\n\n service.setPortainerAgentManagerOperation = function (set) {\n headers.agentManagerOperation = set;\n };\n\n service.portainerAgentManagerOperation = function () {\n return headers.agentManagerOperation;\n };\n\n service.resetAgentHeaders = function () {\n headers.agentTargetQueue = [];\n delete headers.agentTargetLastValue;\n headers.agentManagerOperation = false;\n };\n\n return service;\n },\n]);\n","import _ from 'lodash-es';\n\n// TODO: legacy extension management\nangular.module('portainer.app').factory('LegacyExtensionManager', [\n '$q',\n 'PluginService',\n 'SystemService',\n 'NodeService',\n 'LegacyExtensionService',\n function ExtensionManagerFactory($q, PluginService, SystemService, NodeService, LegacyExtensionService) {\n 'use strict';\n var service = {};\n\n service.initEndpointExtensions = function (endpoint) {\n var deferred = $q.defer();\n\n if (endpoint.Status !== 1) {\n deferred.resolve([]);\n return deferred.promise;\n }\n\n SystemService.version()\n .then(function success(data) {\n var endpointAPIVersion = parseFloat(data.ApiVersion);\n\n return $q.all([endpointAPIVersion >= 1.25 ? initStoridgeExtension() : {}]);\n })\n .then(function success(data) {\n var extensions = data;\n deferred.resolve(extensions);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to connect to the Docker environment', err: err });\n });\n\n return deferred.promise;\n };\n\n function initStoridgeExtension() {\n var deferred = $q.defer();\n\n PluginService.volumePlugins()\n .then(function success(data) {\n var volumePlugins = data;\n if (_.includes(volumePlugins, 'cio:latest')) {\n return registerStoridgeUsingSwarmManagerIP();\n } else {\n return deregisterStoridgeExtension();\n }\n })\n .then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'An error occured during Storidge extension check', err: err });\n });\n\n return deferred.promise;\n }\n\n function registerStoridgeUsingSwarmManagerIP() {\n var deferred = $q.defer();\n\n NodeService.getActiveManager()\n .then(function success(data) {\n var managerIP = data.Addr;\n var storidgeAPIURL = 'tcp://' + managerIP + ':8282';\n return LegacyExtensionService.registerStoridgeExtension(storidgeAPIURL);\n })\n .then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'An error occured during Storidge extension initialization', err: err });\n });\n\n return deferred.promise;\n }\n\n function deregisterStoridgeExtension() {\n return LegacyExtensionService.deregisterStoridgeExtension();\n }\n\n return service;\n },\n]);\n","angular.module('portainer.app').factory('LocalStorage', [\n 'localStorageService',\n function LocalStorageFactory(localStorageService) {\n return {\n storeEndpointID: function (id) {\n localStorageService.set('ENDPOINT_ID', id);\n },\n getEndpointID: function () {\n return localStorageService.get('ENDPOINT_ID');\n },\n storeEndpointPublicURL: function (publicURL) {\n localStorageService.set('ENDPOINT_PUBLIC_URL', publicURL);\n },\n getEndpointPublicURL: function () {\n return localStorageService.get('ENDPOINT_PUBLIC_URL');\n },\n storeLoginStateUUID: function (uuid) {\n localStorageService.set('LOGIN_STATE_UUID', uuid);\n },\n getLoginStateUUID: function () {\n return localStorageService.get('LOGIN_STATE_UUID');\n },\n storeOfflineMode: function (isOffline) {\n localStorageService.set('ENDPOINT_OFFLINE_MODE', isOffline);\n },\n getOfflineMode: function () {\n return localStorageService.get('ENDPOINT_OFFLINE_MODE');\n },\n storeEndpoints: function (data) {\n localStorageService.set('ENDPOINTS_DATA', data);\n },\n getEndpoints: function () {\n return localStorageService.get('ENDPOINTS_DATA');\n },\n storeEndpointState: function (state) {\n localStorageService.set('ENDPOINT_STATE', state);\n },\n getEndpointState: function () {\n return localStorageService.get('ENDPOINT_STATE');\n },\n storeApplicationState: function (state) {\n localStorageService.set('APPLICATION_STATE', state);\n },\n getApplicationState: function () {\n return localStorageService.get('APPLICATION_STATE');\n },\n storeUIState: function (state) {\n localStorageService.set('UI_STATE', state);\n },\n getUIState: function () {\n return localStorageService.get('UI_STATE');\n },\n storeJWT: function (jwt) {\n localStorageService.set('JWT', jwt);\n },\n getJWT: function () {\n return localStorageService.get('JWT');\n },\n deleteJWT: function () {\n localStorageService.remove('JWT');\n },\n storePaginationLimit: function (key, count) {\n localStorageService.set('datatable_pagination_' + key, count);\n },\n getPaginationLimit: function (key) {\n return localStorageService.get('datatable_pagination_' + key);\n },\n getDataTableOrder: function (key) {\n return localStorageService.get('datatable_order_' + key);\n },\n storeDataTableOrder: function (key, data) {\n localStorageService.set('datatable_order_' + key, data);\n },\n getDataTableTextFilters: function (key) {\n return localStorageService.get('datatable_text_filter_' + key);\n },\n storeDataTableTextFilters: function (key, data) {\n localStorageService.set('datatable_text_filter_' + key, data);\n },\n getDataTableFilters: function (key) {\n return localStorageService.get('datatable_filters_' + key);\n },\n storeDataTableFilters: function (key, data) {\n localStorageService.set('datatable_filters_' + key, data);\n },\n getDataTableSettings: function (key) {\n return localStorageService.get('datatable_settings_' + key);\n },\n storeDataTableSettings: function (key, data) {\n localStorageService.set('datatable_settings_' + key, data);\n },\n getDataTableExpandedItems: function (key) {\n return localStorageService.get('datatable_expandeditems_' + key);\n },\n storeDataTableExpandedItems: function (key, data) {\n localStorageService.set('datatable_expandeditems_' + key, data);\n },\n getDataTableSelectedItems: function (key) {\n return localStorageService.get('datatable_selecteditems_' + key);\n },\n storeDataTableSelectedItems: function (key, data) {\n localStorageService.set('datatable_selecteditems_' + key, data);\n },\n storeSwarmVisualizerSettings: function (key, data) {\n localStorageService.set('swarmvisualizer_' + key, data);\n },\n getSwarmVisualizerSettings: function (key) {\n return localStorageService.get('swarmvisualizer_' + key);\n },\n storeColumnVisibilitySettings: function (key, data) {\n localStorageService.set('col_visibility_' + key, data);\n },\n getColumnVisibilitySettings: function (key) {\n return localStorageService.get('col_visibility_' + key);\n },\n storeJobImage: function (data) {\n localStorageService.set('job_image', data);\n },\n getJobImage: function () {\n return localStorageService.get('job_image');\n },\n storeActiveTab: function (key, index) {\n return localStorageService.set('active_tab_' + key, index);\n },\n getActiveTab: function (key) {\n const activeTab = localStorageService.get('active_tab_' + key);\n return activeTab === null ? 0 : activeTab;\n },\n storeToolbarToggle(value) {\n localStorageService.set('toolbar_toggle', value);\n },\n getToolbarToggle() {\n return localStorageService.get('toolbar_toggle');\n },\n storeLogoutReason: (reason) => localStorageService.set('logout_reason', reason),\n getLogoutReason: () => localStorageService.get('logout_reason'),\n cleanLogoutReason: () => localStorageService.remove('logout_reason'),\n clean: function () {\n localStorageService.clearAll();\n },\n cleanAuthData() {\n localStorageService.remove('JWT', 'APPLICATION_STATE', 'LOGIN_STATE_UUID');\n },\n cleanEndpointData() {\n localStorageService.remove('ENDPOINT_ID', 'ENDPOINT_PUBLIC_URL', 'ENDPOINT_OFFLINE_MODE', 'ENDPOINTS_DATA', 'ENDPOINT_STATE');\n },\n storeKubernetesSummaryToggle(value) {\n localStorageService.set('kubernetes_summary_expanded', value);\n },\n getKubernetesSummaryToggle() {\n return localStorageService.get('kubernetes_summary_expanded');\n },\n };\n },\n]);\n","import bootbox from 'bootbox';\n\nangular.module('portainer.app').factory('ModalService', [\n '$sanitize',\n function ModalServiceFactory($sanitize) {\n 'use strict';\n var service = {};\n\n var applyBoxCSS = function (box) {\n box.css({\n top: '50%',\n 'margin-top': function () {\n return -(box.height() / 2);\n },\n });\n };\n\n var confirmButtons = function (options) {\n var buttons = {\n confirm: {\n label: $sanitize(options.buttons.confirm.label),\n className: $sanitize(options.buttons.confirm.className),\n },\n cancel: {\n label: options.buttons.cancel && options.buttons.cancel.label ? $sanitize(options.buttons.cancel.label) : 'Cancel',\n },\n };\n return buttons;\n };\n\n service.enlargeImage = function (image) {\n image = $sanitize(image);\n bootbox.dialog({\n message: '',\n className: 'image-zoom-modal',\n onEscape: true,\n });\n };\n\n service.confirmWebEditorDiscard = confirmWebEditorDiscard;\n function confirmWebEditorDiscard() {\n const options = {\n title: 'Are you sure ?',\n message: 'You currently have unsaved changes in the editor. Are you sure you want to leave?',\n buttons: {\n confirm: {\n label: 'Yes',\n className: 'btn-danger',\n },\n },\n };\n return new Promise((resolve) => {\n service.confirm({ ...options, callback: (confirmed) => resolve(confirmed) });\n });\n }\n\n service.confirmAsync = confirmAsync;\n function confirmAsync(options) {\n return new Promise((resolve) => {\n service.confirm({ ...options, callback: (confirmed) => resolve(confirmed) });\n });\n }\n\n service.confirm = function (options) {\n var box = bootbox.confirm({\n title: options.title,\n message: options.message,\n buttons: confirmButtons(options),\n callback: options.callback,\n });\n applyBoxCSS(box);\n };\n\n function prompt(options) {\n var box = bootbox.prompt({\n title: options.title,\n inputType: options.inputType,\n inputOptions: options.inputOptions,\n buttons: confirmButtons(options),\n callback: options.callback,\n });\n applyBoxCSS(box);\n }\n\n function customPrompt(options, optionToggled) {\n var box = bootbox.prompt({\n title: options.title,\n inputType: options.inputType,\n inputOptions: options.inputOptions,\n buttons: confirmButtons(options),\n callback: options.callback,\n });\n applyBoxCSS(box);\n box.find('.bootbox-body').prepend('

    ' + options.message + '

    ');\n box.find('.bootbox-input-checkbox').prop('checked', optionToggled);\n }\n\n service.confirmAccessControlUpdate = function (callback) {\n service.confirm({\n title: 'Are you sure ?',\n message: 'Changing the ownership of this resource will potentially restrict its management to some users.',\n buttons: {\n confirm: {\n label: 'Change ownership',\n className: 'btn-primary',\n },\n },\n callback: callback,\n });\n };\n\n service.confirmImageForceRemoval = function (callback) {\n service.confirm({\n title: 'Are you sure?',\n message: 'Forcing the removal of the image will remove the image even if it has multiple tags or if it is used by stopped containers.',\n buttons: {\n confirm: {\n label: 'Remove the image',\n className: 'btn-danger',\n },\n },\n callback: callback,\n });\n };\n\n service.cancelRegistryRepositoryAction = function (callback) {\n service.confirm({\n title: 'Are you sure?',\n message: 'WARNING: interrupting this operation before it has finished will result in the loss of all tags. Are you sure you want to do this?',\n buttons: {\n confirm: {\n label: 'Stop',\n className: 'btn-danger',\n },\n },\n callback: callback,\n });\n };\n\n service.confirmDeletion = function (message, callback) {\n message = $sanitize(message);\n service.confirm({\n title: 'Are you sure ?',\n message: message,\n buttons: {\n confirm: {\n label: 'Remove',\n className: 'btn-danger',\n },\n },\n callback: callback,\n });\n };\n\n service.confirmUpdate = function (message, callback) {\n message = $sanitize(message);\n service.confirm({\n title: 'Are you sure ?',\n message: message,\n buttons: {\n confirm: {\n label: 'Update',\n className: 'btn-warning',\n },\n },\n callback: callback,\n });\n };\n\n service.confirmRedeploy = function (message, callback) {\n message = $sanitize(message);\n service.confirm({\n title: '',\n message: message,\n buttons: {\n confirm: {\n label: 'Redeploy the applications',\n className: 'btn-primary',\n },\n cancel: {\n label: \"I'll do it later\",\n },\n },\n callback: callback,\n });\n };\n\n service.confirmDeletionAsync = function confirmDeletionAsync(message) {\n return new Promise((resolve) => {\n service.confirmDeletion(message, (confirmed) => resolve(confirmed));\n });\n };\n\n service.confirmContainerDeletion = function (title, callback) {\n title = $sanitize(title);\n prompt({\n title: title,\n inputType: 'checkbox',\n inputOptions: [\n {\n text: 'Automatically remove non-persistent volumes',\n value: '1',\n },\n ],\n buttons: {\n confirm: {\n label: 'Remove',\n className: 'btn-danger',\n },\n },\n callback: callback,\n });\n };\n\n service.confirmContainerRecreation = function (callback) {\n customPrompt(\n {\n title: 'Are you sure?',\n message:\n \"You're about to re-create this container, any non-persisted data will be lost. This container will be removed and another one will be created using the same configuration.\",\n inputType: 'checkbox',\n inputOptions: [\n {\n text: 'Pull latest image',\n value: '1',\n },\n ],\n buttons: {\n confirm: {\n label: 'Recreate',\n className: 'btn-danger',\n },\n },\n callback: callback,\n },\n false\n );\n };\n\n service.confirmEndpointSnapshot = function (callback) {\n service.confirm({\n title: 'Are you sure?',\n message: 'Triggering a manual refresh will poll each endpoint to retrieve its information, this may take a few moments.',\n buttons: {\n confirm: {\n label: 'Continue',\n className: 'btn-primary',\n },\n },\n callback: callback,\n });\n };\n\n service.confirmImageExport = function (callback) {\n service.confirm({\n title: 'Caution',\n message: 'The export may take several minutes, do not navigate away whilst the export is in progress.',\n buttons: {\n confirm: {\n label: 'Continue',\n className: 'btn-primary',\n },\n },\n callback: callback,\n });\n };\n\n service.confirmServiceForceUpdate = function (message, callback) {\n message = $sanitize(message);\n customPrompt(\n {\n title: 'Are you sure ?',\n message: message,\n inputType: 'checkbox',\n inputOptions: [\n {\n text: 'Pull latest image version',\n value: '1',\n },\n ],\n buttons: {\n confirm: {\n label: 'Update',\n className: 'btn-primary',\n },\n },\n callback: callback,\n },\n false\n );\n };\n\n return service;\n },\n]);\n","import toastr from 'toastr';\n\nangular.module('portainer.app').factory('Notifications', [\n '$sanitize',\n function NotificationsFactory($sanitize) {\n 'use strict';\n var service = {};\n\n service.success = function (title, text) {\n toastr.success($sanitize(text), $sanitize(title));\n };\n\n service.warning = function (title, text) {\n toastr.warning($sanitize(text), $sanitize(title), { timeOut: 6000 });\n };\n\n service.error = function (title, e, fallbackText) {\n var msg = fallbackText;\n if (e.err && e.err.data && e.err.data.message) {\n msg = e.err.data.message;\n } else if (e.err && e.err.data && e.err.data.details) {\n msg = e.err.data.details;\n } else if (e.data && e.data.details) {\n msg = e.data.details;\n } else if (e.data && e.data.message) {\n msg = e.data.message;\n } else if (e.data && e.data.content) {\n msg = e.data.content;\n } else if (e.data && e.data.error) {\n msg = e.data.error;\n } else if (e.message) {\n msg = e.message;\n } else if (e.err && e.err.data && e.err.data.length > 0 && e.err.data[0].message) {\n msg = e.err.data[0].message;\n } else if (e.err && e.err.data && e.err.data.err) {\n msg = e.err.data.err;\n } else if (e.data && e.data.err) {\n msg = e.data.err;\n } else if (e.msg) {\n msg = e.msg;\n }\n\n if (msg !== 'Invalid JWT token') {\n toastr.error($sanitize(msg), $sanitize(title), { timeOut: 6000 });\n }\n };\n\n return service;\n },\n]);\n","angular.module('portainer.app').factory('PaginationService', [\n 'LocalStorage',\n 'PAGINATION_MAX_ITEMS',\n function PaginationServiceFactory(LocalStorage, PAGINATION_MAX_ITEMS) {\n 'use strict';\n\n var service = {};\n\n service.getPaginationLimit = function (key) {\n var paginationLimit = PAGINATION_MAX_ITEMS;\n\n var storedLimit = LocalStorage.getPaginationLimit(key);\n if (storedLimit !== null) {\n paginationLimit = storedLimit;\n }\n return '' + paginationLimit;\n };\n\n service.setPaginationLimit = function (key, limit) {\n LocalStorage.storePaginationLimit(key, limit);\n };\n\n return service;\n },\n]);\n","import _ from 'lodash-es';\nimport { RegistryGitlabProject } from '../models/gitlabRegistry';\nimport { RegistryRepositoryGitlabViewModel } from '../models/registryRepository';\n\nangular.module('portainer.app').factory('RegistryGitlabService', [\n '$async',\n 'Gitlab',\n function RegistryGitlabServiceFactory($async, Gitlab) {\n 'use strict';\n var service = {};\n\n /**\n * PROJECTS\n */\n\n async function _getProjectsPage(env, params, projects) {\n const response = await Gitlab(env).projects(params).$promise;\n projects = _.concat(projects, response.data);\n if (response.next) {\n params.page = response.next;\n projects = await _getProjectsPage(env, params, projects);\n }\n return projects;\n }\n\n async function projectsAsync(url, token) {\n try {\n const data = await _getProjectsPage({ url: url, token: token }, { page: 1 }, []);\n return _.map(data, (project) => new RegistryGitlabProject(project));\n } catch (error) {\n throw { msg: 'Unable to retrieve projects', err: error };\n }\n }\n\n /**\n * END PROJECTS\n */\n\n /**\n * REPOSITORIES\n */\n\n async function _getRepositoriesPage(params, repositories) {\n const response = await Gitlab().repositories(params).$promise;\n repositories = _.concat(repositories, response.data);\n if (response.next) {\n params.page = response.next;\n repositories = await _getRepositoriesPage(params, repositories);\n }\n return repositories;\n }\n\n async function repositoriesAsync(registry) {\n try {\n const params = {\n id: registry.Id,\n projectId: registry.Gitlab.ProjectId,\n page: 1,\n };\n const data = await _getRepositoriesPage(params, []);\n return _.map(data, (r) => new RegistryRepositoryGitlabViewModel(r));\n } catch (error) {\n throw { msg: 'Unable to retrieve repositories', err: error };\n }\n }\n\n /**\n * END REPOSITORIES\n */\n\n /**\n * SERVICE FUNCTIONS DECLARATION\n */\n\n function projects(url, token) {\n return $async(projectsAsync, url, token);\n }\n\n function repositories(registry) {\n return $async(repositoriesAsync, registry);\n }\n\n service.projects = projects;\n service.repositories = repositories;\n return service;\n },\n]);\n","import moment from 'moment';\n\nangular.module('portainer.app').factory('StateManager', [\n '$q',\n 'SystemService',\n 'InfoHelper',\n 'EndpointProvider',\n 'LocalStorage',\n 'SettingsService',\n 'StatusService',\n 'APPLICATION_CACHE_VALIDITY',\n 'AgentPingService',\n '$analytics',\n function StateManagerFactory(\n $q,\n SystemService,\n InfoHelper,\n EndpointProvider,\n LocalStorage,\n SettingsService,\n StatusService,\n APPLICATION_CACHE_VALIDITY,\n AgentPingService,\n $analytics\n ) {\n 'use strict';\n\n var manager = {};\n\n var state = {\n loading: true,\n application: {},\n endpoint: {},\n UI: {\n dismissedInfoPanels: {},\n dismissedInfoHash: '',\n },\n extensions: [],\n };\n\n manager.setVersionInfo = function (versionInfo) {\n state.application.versionStatus = versionInfo;\n LocalStorage.storeApplicationState(state.application);\n };\n\n manager.dismissInformationPanel = function (id) {\n state.UI.dismissedInfoPanels[id] = true;\n LocalStorage.storeUIState(state.UI);\n };\n\n manager.dismissImportantInformation = function (hash) {\n state.UI.dismissedInfoHash = hash;\n LocalStorage.storeUIState(state.UI);\n };\n\n manager.getState = function () {\n return state;\n };\n\n manager.clean = function () {\n state.endpoint = {};\n state.application = {};\n };\n\n manager.updateLogo = function (logoURL) {\n state.application.logo = logoURL;\n LocalStorage.storeApplicationState(state.application);\n };\n\n manager.updateSnapshotInterval = function (interval) {\n state.application.snapshotInterval = interval;\n LocalStorage.storeApplicationState(state.application);\n };\n\n manager.updateEnableEdgeComputeFeatures = function updateEnableEdgeComputeFeatures(enableEdgeComputeFeatures) {\n state.application.enableEdgeComputeFeatures = enableEdgeComputeFeatures;\n LocalStorage.storeApplicationState(state.application);\n };\n\n manager.updateEnableTelemetry = function updateEnableTelemetry(enableTelemetry) {\n state.application.enableTelemetry = enableTelemetry;\n $analytics.setOptOut(!enableTelemetry);\n LocalStorage.storeApplicationState(state.application);\n };\n\n function assignStateFromStatusAndSettings(status, settings) {\n state.application.version = status.Version;\n state.application.enableTelemetry = settings.EnableTelemetry;\n state.application.logo = settings.LogoURL;\n state.application.snapshotInterval = settings.SnapshotInterval;\n state.application.enableEdgeComputeFeatures = settings.EnableEdgeComputeFeatures;\n state.application.validity = moment().unix();\n }\n\n function loadApplicationState() {\n var deferred = $q.defer();\n\n $q.all({\n settings: SettingsService.publicSettings(),\n status: StatusService.status(),\n })\n .then(function success(data) {\n var status = data.status;\n var settings = data.settings;\n assignStateFromStatusAndSettings(status, settings);\n $analytics.setOptOut(!settings.EnableTelemetry);\n LocalStorage.storeApplicationState(state.application);\n deferred.resolve(state);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve server settings and status', err: err });\n })\n .finally(function final() {\n state.loading = false;\n });\n\n return deferred.promise;\n }\n\n manager.initialize = function () {\n var deferred = $q.defer();\n\n var UIState = LocalStorage.getUIState();\n if (UIState) {\n state.UI = UIState;\n }\n\n var endpointState = LocalStorage.getEndpointState();\n if (endpointState) {\n state.endpoint = endpointState;\n }\n\n var applicationState = LocalStorage.getApplicationState();\n if (applicationState && applicationState.validity) {\n var now = moment().unix();\n var cacheValidity = now - applicationState.validity;\n if (cacheValidity > APPLICATION_CACHE_VALIDITY) {\n loadApplicationState()\n .then(() => deferred.resolve(state))\n .catch((err) => deferred.reject(err));\n } else {\n state.application = applicationState;\n state.loading = false;\n $analytics.setOptOut(!state.application.enableTelemetry);\n deferred.resolve(state);\n }\n } else {\n loadApplicationState()\n .then(() => deferred.resolve(state))\n .catch((err) => deferred.reject(err));\n }\n\n return deferred.promise;\n };\n\n function assignExtensions(endpointExtensions) {\n var extensions = [];\n\n for (var i = 0; i < endpointExtensions.length; i++) {\n var extension = endpointExtensions[i];\n if (extension.Type === 1) {\n extensions.push('storidge');\n }\n }\n\n return extensions;\n }\n\n manager.updateEndpointState = function (endpoint, extensions) {\n var deferred = $q.defer();\n\n if (endpoint.Type === 3) {\n state.endpoint.name = endpoint.Name;\n state.endpoint.mode = { provider: 'AZURE' };\n LocalStorage.storeEndpointState(state.endpoint);\n deferred.resolve();\n return deferred.promise;\n } else if (endpoint.Type === 5 || endpoint.Type === 6 || endpoint.Type === 7) {\n state.endpoint.name = endpoint.Name;\n state.endpoint.mode = { provider: 'KUBERNETES' };\n LocalStorage.storeEndpointState(state.endpoint);\n deferred.resolve();\n return deferred.promise;\n }\n\n const reload = endpoint.Status === 1 || !endpoint.Snaphosts || !endpoint.Snaphosts.length || !endpoint.Snapshots[0].SnapshotRaw;\n\n $q.all({\n version: reload ? SystemService.version() : $q.when(endpoint.Snapshots[0].SnapshotRaw.Version),\n info: reload ? SystemService.info() : $q.when(endpoint.Snapshots[0].SnapshotRaw.Info),\n })\n .then(function success(data) {\n var endpointMode = InfoHelper.determineEndpointMode(data.info, endpoint.Type);\n var endpointAPIVersion = parseFloat(data.version.ApiVersion);\n state.endpoint.mode = endpointMode;\n state.endpoint.name = endpoint.Name;\n state.endpoint.type = endpoint.Type;\n state.endpoint.apiVersion = endpointAPIVersion;\n state.endpoint.extensions = assignExtensions(extensions);\n\n if (endpointMode.agentProxy && endpoint.Status === 1) {\n return AgentPingService.ping().then(function onPingSuccess(data) {\n state.endpoint.agentApiVersion = data.version;\n });\n }\n })\n .then(function () {\n LocalStorage.storeEndpointState(state.endpoint);\n deferred.resolve();\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to connect to the Docker endpoint', err: err });\n })\n .finally(function final() {\n state.loading = false;\n });\n\n return deferred.promise;\n };\n\n manager.getAgentApiVersion = function getAgentApiVersion() {\n return state.endpoint.agentApiVersion;\n };\n\n return manager;\n },\n]);\n","angular.module('portainer.app').controller('AccountController', [\n '$scope',\n '$state',\n 'Authentication',\n 'UserService',\n 'Notifications',\n 'SettingsService',\n function ($scope, $state, Authentication, UserService, Notifications, SettingsService) {\n $scope.formValues = {\n currentPassword: '',\n newPassword: '',\n confirmPassword: '',\n };\n\n $scope.updatePassword = function () {\n UserService.updateUserPassword($scope.userID, $scope.formValues.currentPassword, $scope.formValues.newPassword)\n .then(function success() {\n Notifications.success('Success', 'Password successfully updated');\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, err.msg);\n });\n };\n\n function initView() {\n $scope.userID = Authentication.getUserDetails().ID;\n SettingsService.publicSettings()\n .then(function success(data) {\n $scope.AuthenticationMethod = data.AuthenticationMethod;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve application settings');\n });\n }\n\n initView();\n },\n]);\n","import angular from 'angular';\nimport uuidv4 from 'uuid/v4';\n\nclass AuthenticationController {\n /* @ngInject */\n constructor(\n $async,\n $scope,\n $state,\n $stateParams,\n $window,\n Authentication,\n UserService,\n EndpointService,\n StateManager,\n Notifications,\n SettingsService,\n URLHelper,\n LocalStorage,\n StatusService\n ) {\n this.$async = $async;\n this.$scope = $scope;\n this.$state = $state;\n this.$stateParams = $stateParams;\n this.$window = $window;\n this.Authentication = Authentication;\n this.UserService = UserService;\n this.EndpointService = EndpointService;\n this.StateManager = StateManager;\n this.Notifications = Notifications;\n this.SettingsService = SettingsService;\n this.URLHelper = URLHelper;\n this.LocalStorage = LocalStorage;\n this.StatusService = StatusService;\n\n this.logo = this.StateManager.getState().application.logo;\n this.formValues = {\n Username: '',\n Password: '',\n };\n this.state = {\n showOAuthLogin: false,\n showStandardLogin: false,\n AuthenticationError: '',\n loginInProgress: true,\n OAuthProvider: '',\n };\n\n this.checkForEndpointsAsync = this.checkForEndpointsAsync.bind(this);\n this.checkForLatestVersionAsync = this.checkForLatestVersionAsync.bind(this);\n this.postLoginSteps = this.postLoginSteps.bind(this);\n\n this.oAuthLoginAsync = this.oAuthLoginAsync.bind(this);\n this.internalLoginAsync = this.internalLoginAsync.bind(this);\n\n this.authenticateUserAsync = this.authenticateUserAsync.bind(this);\n\n this.manageOauthCodeReturn = this.manageOauthCodeReturn.bind(this);\n this.authEnabledFlowAsync = this.authEnabledFlowAsync.bind(this);\n this.onInit = this.onInit.bind(this);\n }\n\n /**\n * UTILS FUNCTIONS SECTION\n */\n\n logout(error) {\n this.Authentication.logout();\n this.state.loginInProgress = false;\n this.generateOAuthLoginURI();\n this.LocalStorage.storeLogoutReason(error);\n this.$window.location.reload();\n }\n\n error(err, message) {\n this.state.AuthenticationError = message;\n if (!err) {\n err = {};\n }\n this.Notifications.error('Failure', err, message);\n this.state.loginInProgress = false;\n }\n\n determineOauthProvider(LoginURI) {\n if (LoginURI.indexOf('login.microsoftonline.com') !== -1) {\n return 'Microsoft';\n } else if (LoginURI.indexOf('accounts.google.com') !== -1) {\n return 'Google';\n } else if (LoginURI.indexOf('github.com') !== -1) {\n return 'Github';\n }\n return 'OAuth';\n }\n\n generateState() {\n const uuid = uuidv4();\n this.LocalStorage.storeLoginStateUUID(uuid);\n return '&state=' + uuid;\n }\n\n generateOAuthLoginURI() {\n this.OAuthLoginURI = this.state.OAuthLoginURI + this.generateState();\n }\n\n hasValidState(state) {\n const savedUUID = this.LocalStorage.getLoginStateUUID();\n return savedUUID && state && savedUUID === state;\n }\n\n /**\n * END UTILS FUNCTIONS SECTION\n */\n\n /**\n * POST LOGIN STEPS SECTION\n */\n\n async checkForEndpointsAsync() {\n try {\n const endpoints = await this.EndpointService.endpoints(0, 1);\n const isAdmin = this.Authentication.isAdmin();\n\n if (endpoints.value.length === 0 && isAdmin) {\n return this.$state.go('portainer.init.endpoint');\n } else {\n return this.$state.go('portainer.home');\n }\n } catch (err) {\n this.error(err, 'Unable to retrieve endpoints');\n }\n }\n\n async checkForLatestVersionAsync() {\n let versionInfo = {\n UpdateAvailable: false,\n LatestVersion: '',\n };\n\n try {\n const versionStatus = await this.StatusService.version();\n if (versionStatus.UpdateAvailable) {\n versionInfo.UpdateAvailable = true;\n versionInfo.LatestVersion = versionStatus.LatestVersion;\n }\n } finally {\n this.StateManager.setVersionInfo(versionInfo);\n }\n }\n\n async postLoginSteps() {\n await this.StateManager.initialize();\n await this.checkForEndpointsAsync();\n await this.checkForLatestVersionAsync();\n }\n /**\n * END POST LOGIN STEPS SECTION\n */\n\n /**\n * LOGIN METHODS SECTION\n */\n\n async oAuthLoginAsync(code) {\n try {\n await this.Authentication.OAuthLogin(code);\n this.URLHelper.cleanParameters();\n } catch (err) {\n this.error(err, 'Unable to login via OAuth');\n }\n }\n\n async internalLoginAsync(username, password) {\n await this.Authentication.login(username, password);\n await this.postLoginSteps();\n }\n\n /**\n * END LOGIN METHODS SECTION\n */\n\n /**\n * AUTHENTICATE USER SECTION\n */\n\n async authenticateUserAsync() {\n try {\n var username = this.formValues.Username;\n var password = this.formValues.Password;\n this.state.loginInProgress = true;\n await this.internalLoginAsync(username, password);\n } catch (err) {\n this.error(err, 'Unable to login');\n }\n }\n\n authenticateUser() {\n return this.$async(this.authenticateUserAsync);\n }\n\n /**\n * END AUTHENTICATE USER SECTION\n */\n\n /**\n * ON INIT SECTION\n */\n async manageOauthCodeReturn(code, state) {\n if (this.hasValidState(state)) {\n await this.oAuthLoginAsync(code);\n } else {\n this.error(null, 'Invalid OAuth state, try again.');\n }\n }\n\n async authEnabledFlowAsync() {\n try {\n const exists = await this.UserService.administratorExists();\n if (!exists) {\n this.$state.go('portainer.init.admin');\n }\n } catch (err) {\n this.error(err, 'Unable to verify administrator account existence');\n }\n }\n\n toggleStandardLogin() {\n this.state.showStandardLogin = !this.state.showStandardLogin;\n }\n\n async onInit() {\n try {\n const settings = await this.SettingsService.publicSettings();\n this.state.showOAuthLogin = settings.AuthenticationMethod === 3;\n this.state.showStandardLogin = !this.state.showOAuthLogin;\n this.state.OAuthLoginURI = settings.OAuthLoginURI;\n this.state.OAuthProvider = this.determineOauthProvider(settings.OAuthLoginURI);\n\n const code = this.URLHelper.getParameter('code');\n const state = this.URLHelper.getParameter('state');\n if (code && state) {\n await this.manageOauthCodeReturn(code, state);\n this.generateOAuthLoginURI();\n return;\n }\n this.generateOAuthLoginURI();\n\n if (this.$stateParams.logout || this.$stateParams.error) {\n this.logout(this.$stateParams.error);\n return;\n }\n const error = this.LocalStorage.getLogoutReason();\n if (error) {\n this.state.AuthenticationError = error;\n this.LocalStorage.cleanLogoutReason();\n }\n\n if (this.Authentication.isAuthenticated()) {\n await this.postLoginSteps();\n }\n this.state.loginInProgress = false;\n\n await this.authEnabledFlowAsync();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve public settings');\n }\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n\n /**\n * END ON INIT SECTION\n */\n}\n\nexport default AuthenticationController;\nangular.module('portainer.app').controller('AuthenticationController', AuthenticationController);\n","const autoNgTemplateLoaderTemplate1 = require('./createCustomTemplateView.html');\n\nimport CreateCustomTemplateViewController from './createCustomTemplateViewController.js';\n\nangular.module('portainer.app').component('createCustomTemplateView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: CreateCustomTemplateViewController,\n});\n","var path = 'app/portainer/views/custom-templates/create-custom-template-view/createCustomTemplateView.html';\nvar html = \"\\n \\n Custom Templates > Create Custom template \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n \\n\\n \\n
    \\n
    \\n Build method\\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n Web editor\\n
    \\n
    \\n \\n You can get more information about Compose file format in the\\n \\n official documentation\\n \\n .\\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n Upload\\n
    \\n
    \\n \\n You can upload a Compose file from your computer.\\n \\n
    \\n
    \\n
    \\n \\n \\n {{ $ctrl.formValues.File.name }}\\n \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n\\n \\n
    \\n Actions\\n
    \\n
    \\n
    \\n \\n Create custom template\\n Creation in progress...\\n \\n \\n {{ $ctrl.state.formValidationError }}\\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./customTemplatesView.html');\n\nimport CustomTemplatesViewController from './customTemplatesViewController.js';\n\nangular.module('portainer.app').component('customTemplatesView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: CustomTemplatesViewController,\n});\n","var path = 'app/portainer/views/custom-templates/custom-templates-view/customTemplatesView.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Custom Templates\\n\\n
    \\n \\n \\n \\n
    \\n \\n
    \\n Web editor\\n
    \\n
    \\n \\n You can get more information about Compose file format in the\\n \\n official documentation\\n \\n .\\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","const autoNgTemplateLoaderTemplate1 = require('./editCustomTemplateView.html');\n\nimport EditCustomTemplateViewController from './editCustomTemplateViewController.js';\n\nangular.module('portainer.app').component('editCustomTemplateView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EditCustomTemplateViewController,\n});\n","var path = 'app/portainer/views/custom-templates/edit-custom-template-view/editCustomTemplateView.html';\nvar html = \"\\n \\n \\n \\n \\n \\n Custom templates > {{ $ctrl.formValues.Title }} \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n \\n\\n \\n
    \\n Web editor\\n
    \\n
    \\n \\n You can get more information about Compose file format in the\\n \\n official documentation\\n \\n .\\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n\\n \\n\\n
    \\n Actions\\n
    \\n
    \\n
    \\n \\n Update the template\\n Update in progress...\\n \\n \\n {{ $ctrl.state.formValidationError }}\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\n\nclass EndpointAccessController {\n /* @ngInject */\n constructor($state, $transition$, Notifications, EndpointService, GroupService, $async) {\n this.$state = $state;\n this.$transition$ = $transition$;\n this.Notifications = Notifications;\n this.EndpointService = EndpointService;\n this.GroupService = GroupService;\n this.$async = $async;\n\n this.updateAccess = this.updateAccess.bind(this);\n this.updateAccessAsync = this.updateAccessAsync.bind(this);\n }\n\n async $onInit() {\n this.state = { actionInProgress: false };\n try {\n this.endpoint = await this.EndpointService.endpoint(this.$transition$.params().id);\n this.group = await this.GroupService.group(this.endpoint.GroupId);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve endpoint information');\n }\n }\n\n updateAccess() {\n return this.$async(this.updateAccessAsync);\n }\n\n async updateAccessAsync() {\n try {\n this.state.actionInProgress = true;\n await this.EndpointService.updateEndpoint(this.$transition$.params().id, this.endpoint);\n this.Notifications.success('Access successfully updated');\n this.$state.reload();\n } catch (err) {\n this.state.actionInProgress = false;\n this.Notifications.error('Failure', err, 'Unable to update accesses');\n }\n }\n}\n\nexport default EndpointAccessController;\nangular.module('portainer.app').controller('EndpointAccessController', EndpointAccessController);\n","import { PortainerEndpointCreationTypes, PortainerEndpointTypes } from 'Portainer/models/endpoint/models';\nimport { EndpointSecurityFormData } from '../../../components/endpointSecurity/porEndpointSecurityModel';\n\nangular\n .module('portainer.app')\n .controller('CreateEndpointController', function CreateEndpointController(\n $async,\n $q,\n $scope,\n $state,\n $filter,\n clipboard,\n EndpointService,\n GroupService,\n TagService,\n SettingsService,\n Notifications,\n Authentication\n ) {\n $scope.state = {\n EnvironmentType: 'agent',\n PlatformType: 'linux',\n actionInProgress: false,\n deploymentTab: 0,\n allowCreateTag: Authentication.isAdmin(),\n availableEdgeAgentCheckinOptions: [\n { key: 'Use default interval', value: 0 },\n {\n key: '5 seconds',\n value: 5,\n },\n {\n key: '10 seconds',\n value: 10,\n },\n {\n key: '30 seconds',\n value: 30,\n },\n { key: '5 minutes', value: 300 },\n { key: '1 hour', value: 3600 },\n { key: '1 day', value: 86400 },\n ],\n };\n\n const deployCommands = {\n kubeLoadBalancer: `curl -L https://downloads.portainer.io/portainer-agent-k8s-lb.yaml -o portainer-agent-k8s.yaml; kubectl apply -f portainer-agent-k8s.yaml`,\n kubeNodePort: `curl -L https://downloads.portainer.io/portainer-agent-k8s-nodeport.yaml -o portainer-agent-k8s.yaml; kubectl apply -f portainer-agent-k8s.yaml`,\n agentLinux: `curl -L https://downloads.portainer.io/agent-stack.yml -o agent-stack.yml && docker stack deploy --compose-file=agent-stack.yml portainer-agent`,\n agentWindows: `curl -L https://downloads.portainer.io/agent-stack-windows.yml -o agent-stack-windows.yml && docker stack deploy --compose-file=agent-stack-windows.yml portainer-agent`,\n };\n $scope.deployCommands = deployCommands;\n\n $scope.formValues = {\n Name: '',\n URL: '',\n PublicURL: '',\n GroupId: 1,\n SecurityFormData: new EndpointSecurityFormData(),\n AzureApplicationId: '',\n AzureTenantId: '',\n AzureAuthenticationKey: '',\n TagIds: [],\n CheckinInterval: $scope.state.availableEdgeAgentCheckinOptions[0].value,\n };\n\n $scope.copyAgentCommand = function () {\n if ($scope.state.deploymentTab === 2 && $scope.state.PlatformType === 'linux') {\n clipboard.copyText(deployCommands.agentLinux);\n } else if ($scope.state.deploymentTab === 2 && $scope.state.PlatformType === 'windows') {\n clipboard.copyText(deployCommands.agentWindows);\n } else if ($scope.state.deploymentTab === 1) {\n clipboard.copyText(deployCommands.kubeNodePort);\n } else {\n clipboard.copyText(deployCommands.kubeLoadBalancer);\n }\n $('#copyNotification').show().fadeOut(2500);\n };\n\n $scope.setDefaultPortainerInstanceURL = function () {\n $scope.formValues.URL = window.location.origin;\n };\n\n $scope.resetEndpointURL = function () {\n $scope.formValues.URL = '';\n };\n\n $scope.onCreateTag = function onCreateTag(tagName) {\n return $async(onCreateTagAsync, tagName);\n };\n\n async function onCreateTagAsync(tagName) {\n try {\n const tag = await TagService.createTag(tagName);\n $scope.availableTags = $scope.availableTags.concat(tag);\n $scope.formValues.TagIds = $scope.formValues.TagIds.concat(tag.Id);\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to create tag');\n }\n }\n\n $scope.addDockerEndpoint = function () {\n var name = $scope.formValues.Name;\n var URL = $filter('stripprotocol')($scope.formValues.URL);\n var publicURL = $scope.formValues.PublicURL;\n var groupId = $scope.formValues.GroupId;\n var tagIds = $scope.formValues.TagIds;\n\n if ($scope.formValues.ConnectSocket) {\n URL = $scope.formValues.SocketPath;\n $scope.state.actionInProgress = true;\n EndpointService.createLocalEndpoint(name, URL, publicURL, groupId, tagIds)\n .then(function success() {\n Notifications.success('Endpoint created', name);\n $state.go('portainer.endpoints', {}, { reload: true });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create endpoint');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n } else {\n if (publicURL === '') {\n publicURL = URL.split(':')[0];\n }\n\n var securityData = $scope.formValues.SecurityFormData;\n var TLS = securityData.TLS;\n var TLSMode = securityData.TLSMode;\n var TLSSkipVerify = TLS && (TLSMode === 'tls_client_noca' || TLSMode === 'tls_only');\n var TLSSkipClientVerify = TLS && (TLSMode === 'tls_ca' || TLSMode === 'tls_only');\n var TLSCAFile = TLSSkipVerify ? null : securityData.TLSCACert;\n var TLSCertFile = TLSSkipClientVerify ? null : securityData.TLSCert;\n var TLSKeyFile = TLSSkipClientVerify ? null : securityData.TLSKey;\n\n addEndpoint(\n name,\n PortainerEndpointCreationTypes.LocalDockerEnvironment,\n URL,\n publicURL,\n groupId,\n tagIds,\n TLS,\n TLSSkipVerify,\n TLSSkipClientVerify,\n TLSCAFile,\n TLSCertFile,\n TLSKeyFile\n );\n }\n };\n\n $scope.addKubernetesEndpoint = function () {\n var name = $scope.formValues.Name;\n $scope.state.actionInProgress = true;\n EndpointService.createLocalKubernetesEndpoint(name)\n .then(function success(result) {\n Notifications.success('Endpoint created', name);\n $state.go('portainer.endpoints.endpoint.kubernetesConfig', { id: result.Id });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create endpoint');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n\n $scope.addAgentEndpoint = function () {\n var name = $scope.formValues.Name;\n // var URL = $filter('stripprotocol')($scope.formValues.URL);\n var URL = $scope.formValues.URL;\n var publicURL = $scope.formValues.PublicURL === '' ? URL.split(':')[0] : $scope.formValues.PublicURL;\n var groupId = $scope.formValues.GroupId;\n var tagIds = $scope.formValues.TagIds;\n\n addEndpoint(name, PortainerEndpointCreationTypes.AgentEnvironment, URL, publicURL, groupId, tagIds, true, true, true, null, null, null);\n };\n\n $scope.addEdgeAgentEndpoint = function () {\n var name = $scope.formValues.Name;\n var groupId = $scope.formValues.GroupId;\n var tagIds = $scope.formValues.TagIds;\n var URL = $scope.formValues.URL;\n\n addEndpoint(name, PortainerEndpointCreationTypes.EdgeAgentEnvironment, URL, '', groupId, tagIds, false, false, false, null, null, null, $scope.formValues.CheckinInterval);\n };\n\n $scope.addAzureEndpoint = function () {\n var name = $scope.formValues.Name;\n var applicationId = $scope.formValues.AzureApplicationId;\n var tenantId = $scope.formValues.AzureTenantId;\n var authenticationKey = $scope.formValues.AzureAuthenticationKey;\n var groupId = $scope.formValues.GroupId;\n var tagIds = $scope.formValues.TagIds;\n\n createAzureEndpoint(name, applicationId, tenantId, authenticationKey, groupId, tagIds);\n };\n\n function createAzureEndpoint(name, applicationId, tenantId, authenticationKey, groupId, tagIds) {\n $scope.state.actionInProgress = true;\n EndpointService.createAzureEndpoint(name, applicationId, tenantId, authenticationKey, groupId, tagIds)\n .then(function success() {\n Notifications.success('Endpoint created', name);\n $state.go('portainer.endpoints', {}, { reload: true });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create endpoint');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n }\n\n function addEndpoint(name, creationType, URL, PublicURL, groupId, tagIds, TLS, TLSSkipVerify, TLSSkipClientVerify, TLSCAFile, TLSCertFile, TLSKeyFile, CheckinInterval) {\n $scope.state.actionInProgress = true;\n EndpointService.createRemoteEndpoint(\n name,\n creationType,\n URL,\n PublicURL,\n groupId,\n tagIds,\n TLS,\n TLSSkipVerify,\n TLSSkipClientVerify,\n TLSCAFile,\n TLSCertFile,\n TLSKeyFile,\n CheckinInterval\n )\n .then(function success(endpoint) {\n Notifications.success('Endpoint created', name);\n switch (endpoint.Type) {\n case PortainerEndpointTypes.EdgeAgentOnDockerEnvironment:\n case PortainerEndpointTypes.EdgeAgentOnKubernetesEnvironment:\n $state.go('portainer.endpoints.endpoint', { id: endpoint.Id });\n break;\n case PortainerEndpointTypes.AgentOnKubernetesEnvironment:\n $state.go('portainer.endpoints.endpoint.kubernetesConfig', { id: endpoint.Id });\n break;\n default:\n $state.go('portainer.endpoints', {}, { reload: true });\n break;\n }\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create endpoint');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n }\n\n function initView() {\n $q.all({\n groups: GroupService.groups(),\n tags: TagService.tags(),\n settings: SettingsService.settings(),\n })\n .then(function success(data) {\n $scope.groups = data.groups;\n $scope.availableTags = data.tags;\n\n const settings = data.settings;\n $scope.state.availableEdgeAgentCheckinOptions[0].key += ` (${settings.EdgeAgentCheckinInterval} seconds)`;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to load groups');\n });\n }\n\n initView();\n });\n","import _ from 'lodash-es';\nimport uuidv4 from 'uuid/v4';\nimport { PortainerEndpointTypes } from 'Portainer/models/endpoint/models';\nimport { EndpointSecurityFormData } from '../../../components/endpointSecurity/porEndpointSecurityModel';\n\nangular\n .module('portainer.app')\n .controller('EndpointController', function EndpointController(\n $async,\n $q,\n $scope,\n $state,\n $transition$,\n $filter,\n clipboard,\n EndpointService,\n GroupService,\n TagService,\n EndpointProvider,\n Notifications,\n Authentication,\n SettingsService\n ) {\n $scope.state = {\n uploadInProgress: false,\n actionInProgress: false,\n deploymentTab: 0,\n azureEndpoint: false,\n kubernetesEndpoint: false,\n agentEndpoint: false,\n edgeEndpoint: false,\n platformType: 'linux',\n allowCreate: Authentication.isAdmin(),\n availableEdgeAgentCheckinOptions: [\n { key: 'Use default interval', value: 0 },\n {\n key: '5 seconds',\n value: 5,\n },\n {\n key: '10 seconds',\n value: 10,\n },\n {\n key: '30 seconds',\n value: 30,\n },\n { key: '5 minutes', value: 300 },\n { key: '1 hour', value: 3600 },\n { key: '1 day', value: 86400 },\n ],\n };\n\n $scope.formValues = {\n SecurityFormData: new EndpointSecurityFormData(),\n };\n\n $scope.copyEdgeAgentDeploymentCommand = function () {\n if ($scope.state.deploymentTab === 2 && $scope.state.platformType === 'linux') {\n clipboard.copyText(\n 'docker run -d -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker/volumes:/var/lib/docker/volumes -v /:/host -v portainer_agent_data:/data --restart always -e EDGE=1 -e EDGE_ID=' +\n $scope.randomEdgeID +\n ' -e EDGE_KEY=' +\n $scope.endpoint.EdgeKey +\n ' -e CAP_HOST_MANAGEMENT=1 --name portainer_edge_agent portainer/agent'\n );\n } else if ($scope.state.deploymentTab === 2 && $scope.state.platformType === 'windows') {\n clipboard.copyText(\n 'docker run -d --mount type=npipe,src=\\\\\\\\.\\\\pipe\\\\docker_engine,dst=\\\\\\\\.\\\\pipe\\\\docker_engine --mount type=bind,src=C:\\\\ProgramData\\\\docker\\\\volumes,dst=C:\\\\ProgramData\\\\docker\\\\volumes --mount type=volume,src=portainer_agent_data,dst=C:\\\\data -e EDGE=1 -e EDGE_ID=' +\n $scope.randomEdgeID +\n ' -e EDGE_KEY=' +\n $scope.endpoint.EdgeKey +\n ' -e CAP_HOST_MANAGEMENT=1 --name portainer_edge_agent portainer/agent'\n );\n } else if ($scope.state.deploymentTab === 1 && $scope.state.platformType === 'linux') {\n clipboard.copyText(\n 'docker network create --driver overlay portainer_agent_network; docker service create --name portainer_edge_agent --network portainer_agent_network -e AGENT_CLUSTER_ADDR=tasks.portainer_edge_agent -e EDGE=1 -e EDGE_ID=' +\n $scope.randomEdgeID +\n ' -e EDGE_KEY=' +\n $scope.endpoint.EdgeKey +\n \" -e CAP_HOST_MANAGEMENT=1 --mode global --constraint 'node.platform.os == linux' --mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock --mount type=bind,src=//var/lib/docker/volumes,dst=/var/lib/docker/volumes --mount type=bind,src=//,dst=/host --mount type=volume,src=portainer_agent_data,dst=/data portainer/agent\"\n );\n } else if ($scope.state.deploymentTab === 1 && $scope.state.platformType === 'windows') {\n clipboard.copyText(\n 'docker network create --driver overlay portainer_edge_agent_network && docker service create --name portainer_edge_agent --network portainer_edge_agent_network -e AGENT_CLUSTER_ADDR=tasks.portainer_edge_agent -e EDGE=1 -e EDGE_ID=' +\n $scope.randomEdgeID +\n ' -e EDGE_KEY=' +\n $scope.endpoint.EdgeKey +\n ' -e CAP_HOST_MANAGEMENT=1 --mode global --constraint node.platform.os==windows --mount type=npipe,src=\\\\\\\\.\\\\pipe\\\\docker_engine,dst=\\\\\\\\.\\\\pipe\\\\docker_engine --mount type=bind,src=C:\\\\ProgramData\\\\docker\\\\volumes,dst=C:\\\\ProgramData\\\\docker\\\\volumes --mount type=volume,src=portainer_agent_data,dst=C:\\\\data portainer/agent'\n );\n } else {\n clipboard.copyText('curl https://downloads.portainer.io/portainer-edge-agent-setup.sh | bash -s -- ' + $scope.randomEdgeID + ' ' + $scope.endpoint.EdgeKey);\n }\n $('#copyNotificationDeploymentCommand').show().fadeOut(2500);\n };\n\n $scope.copyEdgeAgentKey = function () {\n clipboard.copyText($scope.endpoint.EdgeKey);\n $('#copyNotificationEdgeKey').show().fadeOut(2500);\n };\n\n $scope.onCreateTag = function onCreateTag(tagName) {\n return $async(onCreateTagAsync, tagName);\n };\n\n async function onCreateTagAsync(tagName) {\n try {\n const tag = await TagService.createTag(tagName);\n $scope.availableTags = $scope.availableTags.concat(tag);\n $scope.endpoint.TagIds = $scope.endpoint.TagIds.concat(tag.Id);\n } catch (err) {\n Notifications.error('Failue', err, 'Unable to create tag');\n }\n }\n\n $scope.updateEndpoint = function () {\n var endpoint = $scope.endpoint;\n var securityData = $scope.formValues.SecurityFormData;\n var TLS = securityData.TLS;\n var TLSMode = securityData.TLSMode;\n var TLSSkipVerify = TLS && (TLSMode === 'tls_client_noca' || TLSMode === 'tls_only');\n var TLSSkipClientVerify = TLS && (TLSMode === 'tls_ca' || TLSMode === 'tls_only');\n\n var payload = {\n Name: endpoint.Name,\n PublicURL: endpoint.PublicURL,\n GroupID: endpoint.GroupId,\n TagIds: endpoint.TagIds,\n EdgeCheckinInterval: endpoint.EdgeCheckinInterval,\n TLS: TLS,\n TLSSkipVerify: TLSSkipVerify,\n TLSSkipClientVerify: TLSSkipClientVerify,\n TLSCACert: TLSSkipVerify || securityData.TLSCACert === endpoint.TLSConfig.TLSCACert ? null : securityData.TLSCACert,\n TLSCert: TLSSkipClientVerify || securityData.TLSCert === endpoint.TLSConfig.TLSCert ? null : securityData.TLSCert,\n TLSKey: TLSSkipClientVerify || securityData.TLSKey === endpoint.TLSConfig.TLSKey ? null : securityData.TLSKey,\n AzureApplicationID: endpoint.AzureCredentials.ApplicationID,\n AzureTenantID: endpoint.AzureCredentials.TenantID,\n AzureAuthenticationKey: endpoint.AzureCredentials.AuthenticationKey,\n };\n\n if (\n $scope.endpointType !== 'local' &&\n endpoint.Type !== PortainerEndpointTypes.AzureEnvironment &&\n endpoint.Type !== PortainerEndpointTypes.KubernetesLocalEnvironment &&\n endpoint.Type !== PortainerEndpointTypes.AgentOnKubernetesEnvironment\n ) {\n payload.URL = 'tcp://' + endpoint.URL;\n }\n\n if (endpoint.Type === PortainerEndpointTypes.AgentOnKubernetesEnvironment || endpoint.Type === PortainerEndpointTypes.KubernetesLocalEnvironment) {\n payload.URL = endpoint.URL;\n }\n\n $scope.state.actionInProgress = true;\n EndpointService.updateEndpoint(endpoint.Id, payload).then(\n function success() {\n Notifications.success('Endpoint updated', $scope.endpoint.Name);\n EndpointProvider.setEndpointPublicURL(endpoint.PublicURL);\n $state.go('portainer.endpoints', {}, { reload: true });\n },\n function error(err) {\n Notifications.error('Failure', err, 'Unable to update endpoint');\n $scope.state.actionInProgress = false;\n },\n function update(evt) {\n if (evt.upload) {\n $scope.state.uploadInProgress = evt.upload;\n }\n }\n );\n };\n\n function decodeEdgeKey(key) {\n let keyInformation = {};\n\n if (key === '') {\n return keyInformation;\n }\n\n let decodedKey = _.split(atob(key), '|');\n keyInformation.instanceURL = decodedKey[0];\n keyInformation.tunnelServerAddr = decodedKey[1];\n\n return keyInformation;\n }\n\n function configureState() {\n if (\n $scope.endpoint.Type === PortainerEndpointTypes.KubernetesLocalEnvironment ||\n $scope.endpoint.Type === PortainerEndpointTypes.AgentOnKubernetesEnvironment ||\n $scope.endpoint.Type === PortainerEndpointTypes.EdgeAgentOnKubernetesEnvironment\n ) {\n $scope.state.kubernetesEndpoint = true;\n }\n if ($scope.endpoint.Type === PortainerEndpointTypes.EdgeAgentOnDockerEnvironment || $scope.endpoint.Type === PortainerEndpointTypes.EdgeAgentOnKubernetesEnvironment) {\n $scope.state.edgeEndpoint = true;\n }\n if ($scope.endpoint.Type === PortainerEndpointTypes.AzureEnvironment) {\n $scope.state.azureEndpoint = true;\n }\n if (\n $scope.endpoint.Type === PortainerEndpointTypes.AgentOnDockerEnvironment ||\n $scope.endpoint.Type === PortainerEndpointTypes.EdgeAgentOnDockerEnvironment ||\n $scope.endpoint.Type === PortainerEndpointTypes.AgentOnKubernetesEnvironment ||\n $scope.endpoint.Type === PortainerEndpointTypes.EdgeAgentOnKubernetesEnvironment\n ) {\n $scope.state.agentEndpoint = true;\n }\n }\n\n function initView() {\n $q.all({\n endpoint: EndpointService.endpoint($transition$.params().id),\n groups: GroupService.groups(),\n tags: TagService.tags(),\n settings: SettingsService.settings(),\n })\n .then(function success(data) {\n var endpoint = data.endpoint;\n if (endpoint.URL.indexOf('unix://') === 0 || endpoint.URL.indexOf('npipe://') === 0) {\n $scope.endpointType = 'local';\n } else {\n $scope.endpointType = 'remote';\n }\n endpoint.URL = $filter('stripprotocol')(endpoint.URL);\n if (endpoint.Type === PortainerEndpointTypes.EdgeAgentOnDockerEnvironment || endpoint.Type === PortainerEndpointTypes.EdgeAgentOnKubernetesEnvironment) {\n $scope.edgeKeyDetails = decodeEdgeKey(endpoint.EdgeKey);\n $scope.randomEdgeID = uuidv4();\n $scope.dockerCommands = {\n linuxStandalone: buildLinuxStandaloneCommand($scope.randomEdgeID, endpoint.EdgeKey),\n windowsStandalone: buildWindowsStandaloneCommand($scope.randomEdgeID, endpoint.EdgeKey),\n linuxSwarm: buildLinuxSwarmCommand($scope.randomEdgeID, endpoint.EdgeKey),\n windowsSwarm: buildWindowsSwarmCommand($scope.randomEdgeID, endpoint.EdgeKey),\n };\n\n const settings = data.settings;\n $scope.state.availableEdgeAgentCheckinOptions[0].key += ` (${settings.EdgeAgentCheckinInterval} seconds)`;\n }\n $scope.endpoint = endpoint;\n $scope.groups = data.groups;\n $scope.availableTags = data.tags;\n configureState();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve endpoint details');\n });\n }\n\n function buildLinuxStandaloneCommand(edgeId, edgeKey) {\n return `docker run -d \\\\\n -v /var/run/docker.sock:/var/run/docker.sock \\\\\n -v /var/lib/docker/volumes:/var/lib/docker/volumes \\\\\n -v /:/host \\\\\n -v portainer_agent_data:/data \\\\\n --restart always \\\\\n -e EDGE=1 \\\\\n -e EDGE_ID=${edgeId} \\\\\n -e EDGE_KEY=${edgeKey} \\\\\n -e CAP_HOST_MANAGEMENT=1 \\\\\n --name portainer_edge_agent \\\\\n portainer/agent`;\n }\n\n function buildWindowsStandaloneCommand(edgeId, edgeKey) {\n return `docker run -d \\\\\n --mount type=npipe,src=\\\\\\\\.\\\\pipe\\\\docker_engine,dst=\\\\\\\\.\\\\pipe\\\\docker_engine \\\\\n --mount type=bind,src=C:\\\\ProgramData\\\\docker\\\\volumes,dst=C:\\\\ProgramData\\\\docker\\\\volumes \\\\\n --mount type=volume,src=portainer_agent_data,dst=C:\\\\data \\\\\n --restart always \\\\\n -e EDGE=1 \\\\\n -e EDGE_ID=${edgeId} \\\\\n -e EDGE_KEY=${edgeKey} \\\\\n -e CAP_HOST_MANAGEMENT=1 \\\\\n --name portainer_edge_agent \\\\\n portainer/agent`;\n }\n\n function buildLinuxSwarmCommand(edgeId, edgeKey) {\n return `docker network create \\\\\n --driver overlay \\\\\n portainer_agent_network;\n\ndocker service create \\\\\n --name portainer_edge_agent \\\\\n --network portainer_agent_network \\\\\n -e AGENT_CLUSTER_ADDR=tasks.portainer_edge_agent \\\\\n -e EDGE=1 \\\\\n -e EDGE_ID=${edgeId} \\\\\n -e EDGE_KEY=${edgeKey} \\\\\n -e CAP_HOST_MANAGEMENT=1 \\\\\n --mode global \\\\\n --constraint 'node.platform.os == linux' \\\\\n --mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \\\\\n --mount type=bind,src=//var/lib/docker/volumes,dst=/var/lib/docker/volumes \\\\\n --mount type=bind,src=//,dst=/host \\\\\n --mount type=volume,src=portainer_agent_data,dst=/data \\\\\n portainer/agent`;\n }\n\n function buildWindowsSwarmCommand(edgeId, edgeKey) {\n return `docker network create \\\\\n --driver overlay \\\\\n portainer_edge_agent_network && \\\\\ndocker service create \\\\\n --name portainer_edge_agent \\\\\n --network portainer_edge_agent_network \\\\\n -e AGENT_CLUSTER_ADDR=tasks.portainer_edge_agent \\\\\n -e EDGE=1 \\\\\n -e EDGE_ID=${edgeId} \\\\\n -e EDGE_KEY=${edgeKey} \\\\\n -e CAP_HOST_MANAGEMENT=1 \\\\\n --mode global \\\\\n --constraint node.platform.os==windows \\\\\n --mount type=npipe,src=\\\\\\\\.\\\\pipe\\\\docker_engine,dst=\\\\\\\\.\\\\pipe\\\\docker_engine \\\\\n --mount type=bind,src=C:\\\\ProgramData\\\\docker\\\\volumes,dst=C:\\\\ProgramData\\\\docker\\\\volumes \\\\\n --mount type=volume,src=portainer_agent_data,dst=C:\\\\data \\\\\n portainer/agent`;\n }\n\n initView();\n });\n","import angular from 'angular';\n\nangular.module('portainer.app').controller('EndpointsController', EndpointsController);\n\nfunction EndpointsController($q, $scope, $state, $async, EndpointService, GroupService, EndpointHelper, Notifications) {\n $scope.removeAction = removeAction;\n\n function removeAction(endpoints) {\n return $async(removeActionAsync, endpoints);\n }\n\n async function removeActionAsync(endpoints) {\n for (let endpoint of endpoints) {\n try {\n await EndpointService.deleteEndpoint(endpoint.Id);\n\n Notifications.success('Endpoint successfully removed', endpoint.Name);\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to remove endpoint');\n }\n }\n\n $state.reload();\n }\n\n $scope.getPaginatedEndpoints = getPaginatedEndpoints;\n function getPaginatedEndpoints(lastId, limit, search) {\n const deferred = $q.defer();\n $q.all({\n endpoints: EndpointService.endpoints(lastId, limit, { search }),\n groups: GroupService.groups(),\n })\n .then(function success(data) {\n var endpoints = data.endpoints.value;\n var groups = data.groups;\n EndpointHelper.mapGroupNameToEndpoint(endpoints, groups);\n deferred.resolve({ endpoints: endpoints, totalCount: data.endpoints.totalCount });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve endpoint information');\n });\n return deferred.promise;\n }\n}\n","angular.module('portainer.app').controller('GroupAccessController', [\n '$scope',\n '$state',\n '$transition$',\n 'GroupService',\n 'Notifications',\n function ($scope, $state, $transition$, GroupService, Notifications) {\n $scope.updateAccess = function () {\n $scope.state.actionInProgress = true;\n GroupService.updateGroup($scope.group, $scope.group.AssociatedEndpoints)\n .then(() => {\n Notifications.success('Access successfully updated');\n $state.reload();\n })\n .catch((err) => {\n $scope.state.actionInProgress = false;\n Notifications.error('Failure', err, 'Unable to update accesses');\n });\n };\n\n function initView() {\n var groupId = $transition$.params().id;\n\n $scope.state = { actionInProgress: false };\n GroupService.group(groupId)\n .then(function success(data) {\n $scope.group = data;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to load view');\n });\n }\n\n initView();\n },\n]);\n","import { EndpointGroupDefaultModel } from '../../../models/group';\n\nangular.module('portainer.app').controller('CreateGroupController', function CreateGroupController($async, $scope, $state, GroupService, TagService, Notifications) {\n $scope.state = {\n actionInProgress: false,\n };\n\n $scope.create = function () {\n var model = $scope.model;\n\n var associatedEndpoints = [];\n for (var i = 0; i < $scope.associatedEndpoints.length; i++) {\n var endpoint = $scope.associatedEndpoints[i];\n associatedEndpoints.push(endpoint.Id);\n }\n\n $scope.state.actionInProgress = true;\n GroupService.createGroup(model, associatedEndpoints)\n .then(function success() {\n Notifications.success('Group successfully created');\n $state.go('portainer.groups', {}, { reload: true });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create group');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n\n $scope.onCreateTag = function onCreateTag(tagName) {\n return $async(onCreateTagAsync, tagName);\n };\n\n async function onCreateTagAsync(tagName) {\n try {\n const tag = await TagService.createTag(tagName);\n $scope.availableTags = $scope.availableTags.concat(tag);\n $scope.model.TagIds = $scope.model.TagIds.concat(tag.Id);\n } catch (err) {\n Notifications.error('Failue', err, 'Unable to create tag');\n }\n }\n\n function initView() {\n TagService.tags()\n .then((tags) => {\n $scope.availableTags = tags;\n $scope.associatedEndpoints = [];\n $scope.model = new EndpointGroupDefaultModel();\n $scope.loaded = true;\n })\n .catch((err) => {\n Notifications.error('Failure', err, 'Unable to retrieve tags');\n });\n }\n\n initView();\n});\n","angular.module('portainer.app').controller('GroupController', function GroupController($q, $async, $scope, $state, $transition$, GroupService, TagService, Notifications) {\n $scope.state = {\n actionInProgress: false,\n };\n\n $scope.update = function () {\n var model = $scope.group;\n\n $scope.state.actionInProgress = true;\n GroupService.updateGroup(model)\n .then(function success() {\n Notifications.success('Group successfully updated');\n $state.go('portainer.groups', {}, { reload: true });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update group');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n\n $scope.onCreateTag = function onCreateTag(tagName) {\n return $async(onCreateTagAsync, tagName);\n };\n\n async function onCreateTagAsync(tagName) {\n try {\n const tag = await TagService.createTag(tagName);\n $scope.availableTags = $scope.availableTags.concat(tag);\n $scope.group.TagIds = $scope.group.TagIds.concat(tag.Id);\n } catch (err) {\n Notifications.error('Failue', err, 'Unable to create tag');\n }\n }\n\n function initView() {\n var groupId = $transition$.params().id;\n\n $q.all({\n group: GroupService.group(groupId),\n tags: TagService.tags(),\n })\n .then(function success(data) {\n $scope.group = data.group;\n $scope.availableTags = data.tags;\n $scope.loaded = true;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to load group details');\n });\n }\n\n initView();\n});\n","import angular from 'angular';\nimport _ from 'lodash-es';\n\nangular.module('portainer.app').controller('GroupsController', GroupsController);\n\nfunction GroupsController($scope, $state, $async, GroupService, Notifications) {\n $scope.removeAction = removeAction;\n\n function removeAction(selectedItems) {\n return $async(removeActionAsync, selectedItems);\n }\n\n async function removeActionAsync(selectedItems) {\n for (let group of selectedItems) {\n try {\n await GroupService.deleteGroup(group.Id);\n\n Notifications.success('Endpoint group successfully removed', group.Name);\n _.remove($scope.groups, group);\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to remove group');\n }\n }\n\n $state.reload();\n }\n\n function initView() {\n GroupService.groups()\n .then(function success(data) {\n $scope.groups = data;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve endpoint groups');\n $scope.groups = [];\n });\n }\n\n initView();\n}\n","angular\n .module('portainer.app')\n .controller('HomeController', function (\n $q,\n $scope,\n $state,\n TagService,\n Authentication,\n EndpointService,\n EndpointHelper,\n GroupService,\n Notifications,\n EndpointProvider,\n StateManager,\n ModalService,\n MotdService\n ) {\n $scope.state = {\n connectingToEdgeEndpoint: false,\n };\n\n $scope.goToEdit = function (id) {\n $state.go('portainer.endpoints.endpoint', { id: id });\n };\n\n $scope.goToDashboard = function (endpoint) {\n if (endpoint.Type === 3) {\n $state.go('azure.dashboard', { endpointId: endpoint.Id });\n return;\n }\n if (endpoint.Type === 4 || endpoint.Type === 7) {\n if (!endpoint.EdgeID) {\n $state.go('portainer.endpoints.endpoint', { id: endpoint.Id });\n return;\n }\n $scope.state.connectingToEdgeEndpoint = true;\n }\n if (endpoint.Type === 5 || endpoint.Type === 6 || endpoint.Type === 7) {\n $state.go('kubernetes.dashboard', { endpointId: endpoint.Id });\n return;\n }\n $state.go('docker.dashboard', { endpointId: endpoint.Id });\n };\n\n $scope.dismissImportantInformation = function (hash) {\n StateManager.dismissImportantInformation(hash);\n };\n\n $scope.dismissInformationPanel = function (id) {\n StateManager.dismissInformationPanel(id);\n };\n\n $scope.triggerSnapshot = function () {\n ModalService.confirmEndpointSnapshot(function (result) {\n if (!result) {\n return;\n }\n triggerSnapshot();\n });\n };\n\n function triggerSnapshot() {\n EndpointService.snapshotEndpoints()\n .then(function success() {\n Notifications.success('Success', 'Endpoints updated');\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'An error occured during endpoint snapshot');\n });\n }\n\n $scope.getPaginatedEndpoints = getPaginatedEndpoints;\n function getPaginatedEndpoints(lastId, limit, search) {\n const deferred = $q.defer();\n $q.all({\n endpoints: EndpointService.endpoints(lastId, limit, { search }),\n groups: GroupService.groups(),\n })\n .then(function success(data) {\n var endpoints = data.endpoints.value;\n var groups = data.groups;\n EndpointHelper.mapGroupNameToEndpoint(endpoints, groups);\n EndpointProvider.setEndpoints(endpoints);\n deferred.resolve({ endpoints: endpoints, totalCount: data.endpoints.totalCount });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve endpoint information');\n });\n return deferred.promise;\n }\n\n async function initView() {\n $scope.isAdmin = Authentication.isAdmin();\n\n MotdService.motd().then(function success(data) {\n $scope.motd = data;\n });\n\n try {\n const [{ totalCount, endpoints }, tags] = await Promise.all([getPaginatedEndpoints(0, 100), TagService.tags()]);\n $scope.tags = tags;\n\n $scope.totalCount = totalCount;\n if (totalCount > 100) {\n $scope.endpoints = [];\n } else {\n $scope.endpoints = endpoints;\n }\n } catch (err) {\n Notifications.error('Failed loading page data', err);\n }\n }\n\n initView();\n });\n","angular.module('portainer.app').controller('InitAdminController', [\n '$async',\n '$scope',\n '$state',\n 'Notifications',\n 'Authentication',\n 'StateManager',\n 'SettingsService',\n 'UserService',\n 'EndpointService',\n 'BackupService',\n 'StatusService',\n function ($async, $scope, $state, Notifications, Authentication, StateManager, SettingsService, UserService, EndpointService, BackupService, StatusService) {\n $scope.logo = StateManager.getState().application.logo;\n\n $scope.formValues = {\n Username: 'admin',\n Password: '',\n ConfirmPassword: '',\n enableTelemetry: true,\n };\n\n $scope.state = {\n actionInProgress: false,\n showInitPassword: true,\n showRestorePortainer: false,\n };\n\n $scope.togglePanel = function () {\n $scope.state.showInitPassword = !$scope.state.showInitPassword;\n $scope.state.showRestorePortainer = !$scope.state.showRestorePortainer;\n };\n\n $scope.createAdminUser = function () {\n var username = $scope.formValues.Username;\n var password = $scope.formValues.Password;\n\n $scope.state.actionInProgress = true;\n UserService.initAdministrator(username, password)\n .then(function success() {\n return Authentication.login(username, password);\n })\n .then(function success() {\n return SettingsService.update({ enableTelemetry: $scope.formValues.enableTelemetry });\n })\n .then(() => {\n return StateManager.initialize();\n })\n .then(function () {\n return EndpointService.endpoints(0, 100);\n })\n .then(function success(data) {\n if (data.value.length === 0) {\n $state.go('portainer.init.endpoint');\n } else {\n $state.go('portainer.home');\n }\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create administrator user');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n\n function createAdministratorFlow() {\n UserService.administratorExists()\n .then(function success(exists) {\n if (exists) {\n $state.go('portainer.home');\n }\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to verify administrator account existence');\n });\n }\n createAdministratorFlow();\n\n async function waitPortainerRestart() {\n for (let i = 0; i < 10; i++) {\n await new Promise((resolve) => setTimeout(resolve, 5 * 1000));\n try {\n const status = await StatusService.status();\n if (status && status.Version) {\n return;\n }\n } catch (e) {}\n }\n throw 'Timeout to wait for Portainer restarting';\n }\n\n $scope.uploadBackup = async function () {\n $scope.state.backupInProgress = true;\n\n const file = $scope.formValues.BackupFile;\n const password = $scope.formValues.Password;\n\n try {\n await BackupService.uploadBackup(file, password);\n await waitPortainerRestart();\n Notifications.success('The backup has successfully been restored');\n $state.go('portainer.auth');\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to restore the backup');\n } finally {\n $scope.state.backupInProgress = false;\n }\n };\n },\n]);\n","import _ from 'lodash-es';\nimport angular from 'angular';\nimport { PortainerEndpointInitFormValueEndpointSections, PortainerEndpointInitFormValues } from 'Portainer/models/endpoint/formValues';\nimport { PortainerEndpointConnectionTypes, PortainerEndpointCreationTypes, PortainerEndpointTypes } from 'Portainer/models/endpoint/models';\n\nrequire('./includes/localDocker.html');\nrequire('./includes/localKubernetes.html');\nrequire('./includes/agent.html');\n\nclass InitEndpointController {\n /* @ngInject */\n constructor($async, $scope, $state, EndpointService, EndpointProvider, StateManager, Notifications) {\n this.$async = $async;\n this.$scope = $scope;\n this.$state = $state;\n this.EndpointService = EndpointService;\n this.EndpointProvider = EndpointProvider;\n this.StateManager = StateManager;\n this.Notifications = Notifications;\n\n this.createLocalEndpointAsync = this.createLocalEndpointAsync.bind(this);\n this.createLocalKubernetesEndpointAsync = this.createLocalKubernetesEndpointAsync.bind(this);\n this.createAgentEndpointAsync = this.createAgentEndpointAsync.bind(this);\n }\n\n $onInit() {\n if (!_.isEmpty(this.$scope.applicationState.endpoint)) {\n this.$state.go('portainer.home');\n }\n this.logo = this.StateManager.getState().application.logo;\n\n this.state = {\n uploadInProgress: false,\n actionInProgress: false,\n };\n\n this.formValues = new PortainerEndpointInitFormValues();\n this.endpointSections = PortainerEndpointInitFormValueEndpointSections;\n this.PortainerEndpointConnectionTypes = PortainerEndpointConnectionTypes;\n }\n\n isConnectButtonDisabled() {\n switch (this.formValues.ConnectionType) {\n case PortainerEndpointConnectionTypes.DOCKER_LOCAL:\n return this.state.actionInProgress;\n case PortainerEndpointConnectionTypes.KUBERNETES_LOCAL:\n return this.state.actionInProgress;\n case PortainerEndpointConnectionTypes.AGENT:\n return this.state.actionInProgress || !this.formValues.Name || !this.formValues.URL;\n default:\n break;\n }\n }\n\n createEndpoint() {\n switch (this.formValues.ConnectionType) {\n case PortainerEndpointConnectionTypes.DOCKER_LOCAL:\n return this.createLocalEndpoint();\n case PortainerEndpointConnectionTypes.KUBERNETES_LOCAL:\n return this.createLocalKubernetesEndpoint();\n case PortainerEndpointConnectionTypes.AGENT:\n return this.createAgentEndpoint();\n default:\n this.Notifications.error('Failure', 'Unable to determine which action to do to create endpoint');\n }\n }\n\n skipEndpointCreation() {\n this.$state.go('portainer.home');\n }\n\n /**\n * DOCKER_LOCAL (1)\n */\n async createLocalEndpointAsync() {\n try {\n this.state.actionInProgress = true;\n await this.EndpointService.createLocalEndpoint();\n this.$state.go('portainer.home');\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to connect to the Docker environment');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n createLocalEndpoint() {\n return this.$async(this.createLocalEndpointAsync);\n }\n\n /**\n * KUBERNETES_LOCAL (5)\n */\n async createLocalKubernetesEndpointAsync() {\n try {\n this.state.actionInProgress = true;\n const endpoint = await this.EndpointService.createLocalKubernetesEndpoint();\n this.$state.go('portainer.endpoints.endpoint.kubernetesConfig', { id: endpoint.Id });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to connect to the Kubernetes environment');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n createLocalKubernetesEndpoint() {\n return this.$async(this.createLocalKubernetesEndpointAsync);\n }\n\n /**\n * DOCKER / KUBERNETES AGENT (2 / 6)\n */\n async createAgentEndpointAsync() {\n try {\n this.state.actionInProgress = true;\n const name = this.formValues.Name;\n const URL = this.formValues.URL;\n const PublicURL = URL.split(':')[0];\n\n const endpoint = await this.EndpointService.createRemoteEndpoint(\n name,\n PortainerEndpointCreationTypes.AgentEnvironment,\n URL,\n PublicURL,\n 1,\n [],\n true,\n true,\n true,\n null,\n null,\n null\n );\n const routeName = endpoint.Type === PortainerEndpointTypes.AgentOnKubernetesEnvironment ? 'portainer.endpoints.endpoint.kubernetesConfig' : 'portainer.home';\n this.$state.go(routeName, { id: endpoint.Id });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to connect to the Docker environment');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n createAgentEndpoint() {\n return this.$async(this.createAgentEndpointAsync);\n }\n}\n\nexport default InitEndpointController;\nangular.module('portainer.app').controller('InitEndpointController', InitEndpointController);\n","var path = 'app/portainer/views/init/endpoint/includes/localDocker.html';\nvar html = \"
    \\n Information\\n
    \\n
    \\n
    \\n \\n

    \\n Manage the Docker environment where Portainer is running.\\n

    \\n

    \\n \\n Ensure that you have started the Portainer container with the following Docker flag:\\n

    \\n

    -v \\\"/var/run/docker.sock:/var/run/docker.sock\\\" (Linux).

    \\n

    \\n or\\n

    \\n

    -v \\\\\\\\.\\\\pipe\\\\docker_engine:\\\\\\\\.\\\\pipe\\\\docker_engine (Windows).

    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/init/endpoint/includes/localKubernetes.html';\nvar html = \"
    \\n Information\\n
    \\n
    \\n
    \\n \\n

    \\n Manage the Kubernetes environment where Portainer is running.\\n

    \\n
    \\n
    \\n
    \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'app/portainer/views/init/endpoint/includes/agent.html';\nvar html = \"
    \\n Information\\n
    \\n
    \\n
    \\n \\n

    \\n Connect directly to a Portainer agent running inside a Docker or Kubernetes environment.\\n

    \\n
    \\n
    \\n
    \\n
    \\n Environment\\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import angular from 'angular';\n\nclass LogoutController {\n /* @ngInject */\n constructor($async, $state, $transition$, $window, Authentication, StateManager, Notifications, LocalStorage, SettingsService) {\n this.$async = $async;\n this.$state = $state;\n this.$transition$ = $transition$;\n this.$window = $window;\n\n this.Authentication = Authentication;\n this.StateManager = StateManager;\n this.Notifications = Notifications;\n this.LocalStorage = LocalStorage;\n this.SettingsService = SettingsService;\n\n this.logo = this.StateManager.getState().application.logo;\n this.logoutAsync = this.logoutAsync.bind(this);\n\n this.onInit = this.onInit.bind(this);\n }\n\n /**\n * UTILS FUNCTIONS SECTION\n */\n async logoutAsync() {\n const error = this.$transition$.params().error;\n const performApiLogout = this.$transition$.params().performApiLogout;\n const settings = await this.SettingsService.publicSettings();\n\n try {\n await this.Authentication.logout(performApiLogout);\n } finally {\n this.LocalStorage.storeLogoutReason(error);\n if (settings.OAuthLogoutURI && this.Authentication.getUserDetails().ID !== 1) {\n this.$window.location.href = settings.OAuthLogoutURI;\n } else {\n this.$state.go('portainer.auth', { reload: true });\n }\n }\n }\n\n logout() {\n return this.$async(this.logoutAsync);\n }\n\n /**\n * END UTILS FUNCTIONS SECTION\n */\n\n async onInit() {\n try {\n await this.logout();\n } catch (err) {\n this.Notifications.error('Failure', err, 'An error occured during logout');\n }\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n\n /**\n * END ON INIT SECTION\n */\n}\n\nexport default LogoutController;\nangular.module('portainer.app').controller('LogoutController', LogoutController);\n","angular.module('portainer.app').controller('MainController', [\n '$scope',\n 'LocalStorage',\n 'StateManager',\n 'EndpointProvider',\n function ($scope, LocalStorage, StateManager, EndpointProvider) {\n /**\n * Sidebar Toggle & Cookie Control\n */\n var mobileView = 992;\n $scope.getWidth = function () {\n return window.innerWidth;\n };\n\n $scope.applicationState = StateManager.getState();\n $scope.endpointState = EndpointProvider.endpoint();\n\n $scope.$watch($scope.getWidth, function (newValue) {\n if (newValue >= mobileView) {\n const toggleValue = LocalStorage.getToolbarToggle();\n $scope.toggle = typeof toggleValue === 'boolean' ? toggleValue : true;\n } else {\n $scope.toggle = false;\n }\n });\n\n $scope.toggleSidebar = function () {\n $scope.toggle = !$scope.toggle;\n LocalStorage.storeToolbarToggle($scope.toggle);\n };\n\n window.onresize = function () {\n $scope.$apply();\n };\n },\n]);\n","angular.module('portainer.app').controller('RegistryAccessController', [\n '$scope',\n '$state',\n '$transition$',\n 'RegistryService',\n 'Notifications',\n function ($scope, $state, $transition$, RegistryService, Notifications) {\n $scope.updateAccess = function () {\n $scope.state.actionInProgress = true;\n RegistryService.updateRegistry($scope.registry)\n .then(() => {\n Notifications.success('Access successfully updated');\n $state.reload();\n })\n .catch((err) => {\n $scope.state.actionInProgress = false;\n Notifications.error('Failure', err, 'Unable to update accesses');\n });\n };\n\n function initView() {\n $scope.state = { actionInProgress: false };\n RegistryService.registry($transition$.params().id)\n .then(function success(data) {\n $scope.registry = data;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve registry details');\n });\n }\n\n initView();\n },\n]);\n","import { RegistryTypes } from '@/portainer/models/registryTypes';\nimport { RegistryDefaultModel } from '../../../models/registry';\n\nangular.module('portainer.app').controller('CreateRegistryController', [\n '$scope',\n '$state',\n 'RegistryService',\n 'Notifications',\n 'RegistryGitlabService',\n function ($scope, $state, RegistryService, Notifications, RegistryGitlabService) {\n $scope.selectQuayRegistry = selectQuayRegistry;\n $scope.selectAzureRegistry = selectAzureRegistry;\n $scope.selectCustomRegistry = selectCustomRegistry;\n $scope.selectGitlabRegistry = selectGitlabRegistry;\n $scope.create = createRegistry;\n $scope.useDefaultGitlabConfiguration = useDefaultGitlabConfiguration;\n $scope.retrieveGitlabRegistries = retrieveGitlabRegistries;\n $scope.createGitlabRegistries = createGitlabRegistries;\n\n $scope.state = {\n actionInProgress: false,\n overrideConfiguration: false,\n gitlab: {\n get selectedItemCount() {\n return this.selectedItems.length || 0;\n },\n selectedItems: [],\n },\n };\n\n function useDefaultQuayConfiguration() {\n $scope.model.Quay.useOrganisation = false;\n $scope.model.Quay.organisationName = '';\n }\n\n function selectQuayRegistry() {\n $scope.model.Name = 'Quay';\n $scope.model.URL = 'quay.io';\n $scope.model.Authentication = true;\n $scope.model.Quay = {};\n useDefaultQuayConfiguration();\n }\n\n function useDefaultGitlabConfiguration() {\n $scope.model.URL = 'https://registry.gitlab.com';\n $scope.model.Gitlab.InstanceURL = 'https://gitlab.com';\n }\n\n function selectGitlabRegistry() {\n $scope.model.Name = '';\n $scope.model.Authentication = true;\n $scope.model.Gitlab = {};\n useDefaultGitlabConfiguration();\n }\n\n function selectAzureRegistry() {\n $scope.model.Name = '';\n $scope.model.URL = '';\n $scope.model.Authentication = true;\n }\n\n function selectCustomRegistry() {\n $scope.model.Name = '';\n $scope.model.URL = '';\n $scope.model.Authentication = false;\n }\n\n function retrieveGitlabRegistries() {\n $scope.state.actionInProgress = true;\n RegistryGitlabService.projects($scope.model.Gitlab.InstanceURL, $scope.model.Token)\n .then((data) => {\n $scope.gitlabProjects = data;\n })\n .catch((err) => {\n Notifications.error('Failure', err, 'Unable to retrieve projects');\n })\n .finally(() => {\n $scope.state.actionInProgress = false;\n });\n }\n\n function createGitlabRegistries() {\n $scope.state.actionInProgress = true;\n RegistryService.createGitlabRegistries($scope.model, $scope.state.gitlab.selectedItems)\n .then(() => {\n Notifications.success('Registries successfully created');\n $state.go('portainer.registries');\n })\n .catch((err) => {\n Notifications.error('Failure', err, 'Unable to create registries');\n })\n .finally(() => {\n $scope.state.actionInProgress = false;\n });\n }\n\n function createRegistry() {\n $scope.state.actionInProgress = true;\n RegistryService.createRegistry($scope.model)\n .then(function success() {\n Notifications.success('Registry successfully created');\n $state.go('portainer.registries');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create registry');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n }\n\n function initView() {\n $scope.RegistryTypes = RegistryTypes;\n $scope.model = new RegistryDefaultModel();\n }\n\n initView();\n },\n]);\n","import { RegistryTypes } from '@/portainer/models/registryTypes';\n\nangular.module('portainer.app').controller('RegistryController', [\n '$scope',\n '$state',\n '$transition$',\n '$filter',\n 'RegistryService',\n 'Notifications',\n function ($scope, $state, $transition$, $filter, RegistryService, Notifications) {\n $scope.state = {\n actionInProgress: false,\n };\n\n $scope.formValues = {\n Password: '',\n };\n\n $scope.RegistryTypes = RegistryTypes;\n\n $scope.updateRegistry = function () {\n var registry = $scope.registry;\n registry.Password = $scope.formValues.Password;\n $scope.state.actionInProgress = true;\n RegistryService.updateRegistry(registry)\n .then(function success() {\n Notifications.success('Registry successfully updated');\n $state.go('portainer.registries');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update registry');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n\n function initView() {\n var registryID = $transition$.params().id;\n RegistryService.registry(registryID)\n .then(function success(data) {\n $scope.registry = data;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve registry details');\n });\n }\n\n initView();\n },\n]);\n","import _ from 'lodash-es';\n\nangular.module('portainer.app').controller('RegistriesController', [\n '$q',\n '$scope',\n '$state',\n 'RegistryService',\n 'DockerHubService',\n 'ModalService',\n 'Notifications',\n 'Authentication',\n function ($q, $scope, $state, RegistryService, DockerHubService, ModalService, Notifications, Authentication) {\n $scope.state = {\n actionInProgress: false,\n };\n\n $scope.formValues = {\n dockerHubPassword: '',\n };\n\n const nonBrowsableUrls = ['quay.io'];\n\n $scope.canBrowse = function (item) {\n return !_.includes(nonBrowsableUrls, item.URL);\n };\n\n $scope.updateDockerHub = function () {\n var dockerhub = $scope.dockerhub;\n dockerhub.Password = $scope.formValues.dockerHubPassword;\n $scope.state.actionInProgress = true;\n DockerHubService.update(dockerhub)\n .then(function success() {\n Notifications.success('DockerHub registry updated');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update DockerHub details');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n\n $scope.removeAction = function (selectedItems) {\n ModalService.confirmDeletion('Do you want to remove the selected registries?', function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n deleteSelectedRegistries(selectedItems);\n });\n };\n\n function deleteSelectedRegistries(selectedItems) {\n var actionCount = selectedItems.length;\n angular.forEach(selectedItems, function (registry) {\n RegistryService.deleteRegistry(registry.Id)\n .then(function success() {\n Notifications.success('Registry successfully removed', registry.Name);\n var index = $scope.registries.indexOf(registry);\n $scope.registries.splice(index, 1);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove registry');\n })\n .finally(function final() {\n --actionCount;\n if (actionCount === 0) {\n $state.reload();\n }\n });\n });\n }\n\n function initView() {\n $q.all({\n registries: RegistryService.registries(),\n dockerhub: DockerHubService.dockerhub(),\n })\n .then(function success(data) {\n $scope.registries = data.registries;\n $scope.dockerhub = data.dockerhub;\n $scope.isAdmin = Authentication.isAdmin();\n })\n .catch(function error(err) {\n $scope.registries = [];\n Notifications.error('Failure', err, 'Unable to retrieve registries');\n });\n }\n\n initView();\n },\n]);\n","angular.module('portainer.app').controller('SettingsAuthenticationController', [\n '$q',\n '$scope',\n '$state',\n 'Notifications',\n 'SettingsService',\n 'FileUploadService',\n 'TeamService',\n function ($q, $scope, $state, Notifications, SettingsService, FileUploadService, TeamService) {\n $scope.state = {\n successfulConnectivityCheck: false,\n failedConnectivityCheck: false,\n uploadInProgress: false,\n connectivityCheckInProgress: false,\n actionInProgress: false,\n availableUserSessionTimeoutOptions: [\n {\n key: '1 hour',\n value: '1h',\n },\n {\n key: '4 hours',\n value: '4h',\n },\n {\n key: '8 hours',\n value: '8h',\n },\n {\n key: '24 hours',\n value: '24h',\n },\n { key: '1 week', value: `${24 * 7}h` },\n { key: '1 month', value: `${24 * 30}h` },\n { key: '6 months', value: `${24 * 30 * 6}h` },\n { key: '1 year', value: `${24 * 30 * 12}h` },\n ],\n };\n\n $scope.formValues = {\n UserSessionTimeout: $scope.state.availableUserSessionTimeoutOptions[0],\n TLSCACert: '',\n LDAPSettings: {\n AnonymousMode: true,\n ReaderDN: '',\n URL: '',\n TLSConfig: {\n TLS: false,\n TLSSkipVerify: false,\n },\n StartTLS: false,\n SearchSettings: [\n {\n BaseDN: '',\n Filter: '',\n UserNameAttribute: '',\n },\n ],\n GroupSearchSettings: [\n {\n GroupBaseDN: '',\n GroupFilter: '',\n GroupAttribute: '',\n },\n ],\n AutoCreateUsers: true,\n },\n };\n\n $scope.isOauthEnabled = function isOauthEnabled() {\n return $scope.settings && $scope.settings.AuthenticationMethod === 3;\n };\n\n $scope.addSearchConfiguration = function () {\n $scope.formValues.LDAPSettings.SearchSettings.push({ BaseDN: '', UserNameAttribute: '', Filter: '' });\n };\n\n $scope.removeSearchConfiguration = function (index) {\n $scope.formValues.LDAPSettings.SearchSettings.splice(index, 1);\n };\n\n $scope.addGroupSearchConfiguration = function () {\n $scope.formValues.LDAPSettings.GroupSearchSettings.push({ GroupBaseDN: '', GroupAttribute: '', GroupFilter: '' });\n };\n\n $scope.removeGroupSearchConfiguration = function (index) {\n $scope.formValues.LDAPSettings.GroupSearchSettings.splice(index, 1);\n };\n\n $scope.LDAPConnectivityCheck = function () {\n var settings = angular.copy($scope.settings);\n var TLSCAFile = $scope.formValues.TLSCACert !== settings.LDAPSettings.TLSConfig.TLSCACert ? $scope.formValues.TLSCACert : null;\n\n if ($scope.formValues.LDAPSettings.AnonymousMode) {\n settings.LDAPSettings['ReaderDN'] = '';\n settings.LDAPSettings['Password'] = '';\n }\n\n var uploadRequired = ($scope.formValues.LDAPSettings.TLSConfig.TLS || $scope.formValues.LDAPSettings.StartTLS) && !$scope.formValues.LDAPSettings.TLSConfig.TLSSkipVerify;\n $scope.state.uploadInProgress = uploadRequired;\n\n $scope.state.connectivityCheckInProgress = true;\n $q.when(!uploadRequired || FileUploadService.uploadLDAPTLSFiles(TLSCAFile, null, null))\n .then(function success() {\n addLDAPDefaultPort(settings, $scope.formValues.LDAPSettings.TLSConfig.TLS);\n return SettingsService.checkLDAPConnectivity(settings);\n })\n .then(function success() {\n $scope.state.failedConnectivityCheck = false;\n $scope.state.successfulConnectivityCheck = true;\n Notifications.success('Connection to LDAP successful');\n })\n .catch(function error(err) {\n $scope.state.failedConnectivityCheck = true;\n $scope.state.successfulConnectivityCheck = false;\n Notifications.error('Failure', err, 'Connection to LDAP failed');\n })\n .finally(function final() {\n $scope.state.uploadInProgress = false;\n $scope.state.connectivityCheckInProgress = false;\n });\n };\n\n $scope.saveSettings = function () {\n var settings = angular.copy($scope.settings);\n var TLSCAFile = $scope.formValues.TLSCACert !== settings.LDAPSettings.TLSConfig.TLSCACert ? $scope.formValues.TLSCACert : null;\n\n if ($scope.formValues.LDAPSettings.AnonymousMode) {\n settings.LDAPSettings['ReaderDN'] = '';\n settings.LDAPSettings['Password'] = '';\n }\n\n var uploadRequired = ($scope.formValues.LDAPSettings.TLSConfig.TLS || $scope.formValues.LDAPSettings.StartTLS) && !$scope.formValues.LDAPSettings.TLSConfig.TLSSkipVerify;\n $scope.state.uploadInProgress = uploadRequired;\n\n $scope.state.actionInProgress = true;\n $q.when(!uploadRequired || FileUploadService.uploadLDAPTLSFiles(TLSCAFile, null, null))\n .then(function success() {\n addLDAPDefaultPort(settings, $scope.formValues.LDAPSettings.TLSConfig.TLS);\n return SettingsService.update(settings);\n })\n .then(function success() {\n Notifications.success('Authentication settings updated');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update authentication settings');\n })\n .finally(function final() {\n $scope.state.uploadInProgress = false;\n $scope.state.actionInProgress = false;\n });\n };\n\n // Add default port if :port is not defined in URL\n function addLDAPDefaultPort(settings, tlsEnabled) {\n if (settings.LDAPSettings.URL.indexOf(':') === -1) {\n settings.LDAPSettings.URL += tlsEnabled ? ':636' : ':389';\n }\n }\n\n function initView() {\n $q.all({\n settings: SettingsService.settings(),\n teams: TeamService.teams(),\n })\n .then(function success(data) {\n var settings = data.settings;\n $scope.teams = data.teams;\n $scope.settings = settings;\n $scope.formValues.LDAPSettings = settings.LDAPSettings;\n $scope.OAuthSettings = settings.OAuthSettings;\n $scope.formValues.TLSCACert = settings.LDAPSettings.TLSConfig.TLSCACert;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve application settings');\n });\n }\n\n initView();\n },\n]);\n","angular.module('portainer.app').controller('SettingsController', [\n '$scope',\n '$state',\n 'Notifications',\n 'SettingsService',\n 'StateManager',\n 'BackupService',\n 'FileSaver',\n 'Blob',\n function ($scope, $state, Notifications, SettingsService, StateManager, BackupService, FileSaver) {\n $scope.state = {\n actionInProgress: false,\n availableEdgeAgentCheckinOptions: [\n {\n key: '5 seconds',\n value: 5,\n },\n {\n key: '10 seconds',\n value: 10,\n },\n {\n key: '30 seconds',\n value: 30,\n },\n ],\n\n backupInProgress: false,\n };\n\n $scope.formValues = {\n customLogo: false,\n labelName: '',\n labelValue: '',\n enableEdgeComputeFeatures: false,\n enableTelemetry: false,\n passwordProtect: false,\n password: '',\n };\n\n $scope.removeFilteredContainerLabel = function (index) {\n var settings = $scope.settings;\n settings.BlackListedLabels.splice(index, 1);\n\n updateSettings(settings);\n };\n\n $scope.addFilteredContainerLabel = function () {\n var settings = $scope.settings;\n var label = {\n name: $scope.formValues.labelName,\n value: $scope.formValues.labelValue,\n };\n settings.BlackListedLabels.push(label);\n\n updateSettings(settings);\n };\n\n $scope.downloadBackup = function () {\n const payload = {};\n if ($scope.formValues.passwordProtect) {\n payload.password = $scope.formValues.password;\n }\n\n $scope.state.backupInProgress = true;\n\n BackupService.downloadBackup(payload)\n .then(function success(data) {\n const downloadData = new Blob([data.file], { type: 'application/gzip' });\n FileSaver.saveAs(downloadData, data.name);\n Notifications.success('Backup successfully downloaded');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to download backup');\n })\n .finally(function final() {\n $scope.state.backupInProgress = false;\n });\n };\n\n $scope.saveApplicationSettings = function () {\n var settings = $scope.settings;\n\n if (!$scope.formValues.customLogo) {\n settings.LogoURL = '';\n }\n\n settings.EnableEdgeComputeFeatures = $scope.formValues.enableEdgeComputeFeatures;\n settings.EnableTelemetry = $scope.formValues.enableTelemetry;\n\n $scope.state.actionInProgress = true;\n updateSettings(settings);\n };\n\n function updateSettings(settings) {\n SettingsService.update(settings)\n .then(function success() {\n Notifications.success('Settings updated');\n StateManager.updateLogo(settings.LogoURL);\n StateManager.updateSnapshotInterval(settings.SnapshotInterval);\n StateManager.updateEnableEdgeComputeFeatures(settings.EnableEdgeComputeFeatures);\n StateManager.updateEnableTelemetry(settings.EnableTelemetry);\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update settings');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n }\n\n function initView() {\n SettingsService.settings()\n .then(function success(data) {\n var settings = data;\n $scope.settings = settings;\n\n if (settings.LogoURL !== '') {\n $scope.formValues.customLogo = true;\n }\n $scope.formValues.enableEdgeComputeFeatures = settings.EnableEdgeComputeFeatures;\n $scope.formValues.enableTelemetry = settings.EnableTelemetry;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve application settings');\n });\n }\n\n initView();\n },\n]);\n","angular.module('portainer.app').controller('SidebarController', [\n '$rootScope',\n '$q',\n '$scope',\n '$transitions',\n 'StateManager',\n 'Notifications',\n 'Authentication',\n 'UserService',\n 'EndpointProvider',\n function ($rootScope, $q, $scope, $transitions, StateManager, Notifications, Authentication, UserService, EndpointProvider) {\n function checkPermissions(memberships) {\n var isLeader = false;\n angular.forEach(memberships, function (membership) {\n if (membership.Role === 1) {\n isLeader = true;\n }\n });\n $scope.isTeamLeader = isLeader;\n }\n\n async function initView() {\n $scope.uiVersion = StateManager.getState().application.version;\n $scope.logo = StateManager.getState().application.logo;\n $scope.showStacks = await shouldShowStacks();\n\n let userDetails = Authentication.getUserDetails();\n let isAdmin = Authentication.isAdmin();\n $scope.isAdmin = isAdmin;\n $scope.endpointId = EndpointProvider.endpointID();\n\n $q.when(!isAdmin ? UserService.userMemberships(userDetails.ID) : [])\n .then(function success(data) {\n checkPermissions(data);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve user memberships');\n });\n\n $transitions.onEnter({}, () => {\n $scope.endpointId = EndpointProvider.endpointID();\n });\n }\n\n initView();\n\n async function shouldShowStacks() {\n const isAdmin = Authentication.isAdmin();\n\n if (isAdmin) {\n return true;\n }\n\n const endpoint = EndpointProvider.currentEndpoint();\n if (!endpoint || !endpoint.SecuritySettings) {\n return false;\n }\n\n return endpoint.SecuritySettings.allowStackManagementForRegularUsers;\n }\n\n $transitions.onEnter({}, async () => {\n $scope.showStacks = await shouldShowStacks();\n\n if ($scope.applicationState.endpoint.name) {\n document.title = `${$rootScope.defaultTitle} | ${$scope.applicationState.endpoint.name}`;\n }\n });\n },\n]);\n","import angular from 'angular';\nimport _ from 'lodash-es';\n\nimport { AccessControlFormData } from '../../../components/accessControlForm/porAccessControlFormModel';\n\nangular\n .module('portainer.app')\n .controller('CreateStackController', function (\n $scope,\n $state,\n $async,\n $window,\n ModalService,\n StackService,\n Authentication,\n Notifications,\n FormValidator,\n ResourceControlService,\n FormHelper,\n EndpointProvider,\n StackHelper,\n ContainerHelper,\n CustomTemplateService,\n ContainerService\n ) {\n $scope.formValues = {\n Name: '',\n StackFileContent: '',\n StackFile: null,\n RepositoryURL: '',\n RepositoryReferenceName: '',\n RepositoryAuthentication: false,\n RepositoryUsername: '',\n RepositoryPassword: '',\n Env: [],\n ComposeFilePathInRepository: 'docker-compose.yml',\n AccessControlData: new AccessControlFormData(),\n };\n\n $scope.state = {\n Method: 'editor',\n formValidationError: '',\n actionInProgress: false,\n StackType: null,\n editorYamlValidationError: '',\n uploadYamlValidationError: '',\n isEditorDirty: false,\n };\n\n $window.onbeforeunload = () => {\n if ($scope.state.Method === 'editor' && $scope.formValues.StackFileContent && $scope.state.isEditorDirty) {\n return '';\n }\n };\n\n $scope.onChangeFormValues = onChangeFormValues;\n\n $scope.addEnvironmentVariable = function () {\n $scope.formValues.Env.push({ name: '', value: '' });\n };\n\n $scope.removeEnvironmentVariable = function (index) {\n $scope.formValues.Env.splice(index, 1);\n };\n\n function validateForm(accessControlData, isAdmin) {\n $scope.state.formValidationError = '';\n var error = '';\n error = FormValidator.validateAccessControl(accessControlData, isAdmin);\n\n if (error) {\n $scope.state.formValidationError = error;\n return false;\n }\n return true;\n }\n\n function createSwarmStack(name, method) {\n var env = FormHelper.removeInvalidEnvVars($scope.formValues.Env);\n const endpointId = +$state.params.endpointId;\n\n if (method === 'template' || method === 'editor') {\n var stackFileContent = $scope.formValues.StackFileContent;\n return StackService.createSwarmStackFromFileContent(name, stackFileContent, env, endpointId);\n }\n\n if (method === 'upload') {\n var stackFile = $scope.formValues.StackFile;\n return StackService.createSwarmStackFromFileUpload(name, stackFile, env, endpointId);\n }\n\n if (method === 'repository') {\n var repositoryOptions = {\n RepositoryURL: $scope.formValues.RepositoryURL,\n RepositoryReferenceName: $scope.formValues.RepositoryReferenceName,\n ComposeFilePathInRepository: $scope.formValues.ComposeFilePathInRepository,\n RepositoryAuthentication: $scope.formValues.RepositoryAuthentication,\n RepositoryUsername: $scope.formValues.RepositoryUsername,\n RepositoryPassword: $scope.formValues.RepositoryPassword,\n };\n return StackService.createSwarmStackFromGitRepository(name, repositoryOptions, env, endpointId);\n }\n }\n\n function createComposeStack(name, method) {\n var env = FormHelper.removeInvalidEnvVars($scope.formValues.Env);\n const endpointId = +$state.params.endpointId;\n\n if (method === 'editor' || method === 'template') {\n var stackFileContent = $scope.formValues.StackFileContent;\n return StackService.createComposeStackFromFileContent(name, stackFileContent, env, endpointId);\n } else if (method === 'upload') {\n var stackFile = $scope.formValues.StackFile;\n return StackService.createComposeStackFromFileUpload(name, stackFile, env, endpointId);\n } else if (method === 'repository') {\n var repositoryOptions = {\n RepositoryURL: $scope.formValues.RepositoryURL,\n RepositoryReferenceName: $scope.formValues.RepositoryReferenceName,\n ComposeFilePathInRepository: $scope.formValues.ComposeFilePathInRepository,\n RepositoryAuthentication: $scope.formValues.RepositoryAuthentication,\n RepositoryUsername: $scope.formValues.RepositoryUsername,\n RepositoryPassword: $scope.formValues.RepositoryPassword,\n };\n return StackService.createComposeStackFromGitRepository(name, repositoryOptions, env, endpointId);\n }\n }\n\n $scope.handleEnvVarChange = handleEnvVarChange;\n function handleEnvVarChange(value) {\n $scope.formValues.Env = value;\n }\n\n $scope.deployStack = function () {\n var name = $scope.formValues.Name;\n var method = $scope.state.Method;\n\n var accessControlData = $scope.formValues.AccessControlData;\n var userDetails = Authentication.getUserDetails();\n var isAdmin = Authentication.isAdmin();\n\n if (method === 'editor' && $scope.formValues.StackFileContent === '') {\n $scope.state.formValidationError = 'Stack file content must not be empty';\n return;\n }\n\n if (!validateForm(accessControlData, isAdmin)) {\n return;\n }\n\n var type = $scope.state.StackType;\n var action = createSwarmStack;\n if (type === 2) {\n action = createComposeStack;\n }\n $scope.state.actionInProgress = true;\n action(name, method)\n .then(function success(data) {\n if (data.data) {\n data = data.data;\n }\n const userId = userDetails.ID;\n const resourceControl = data.ResourceControl;\n return ResourceControlService.applyResourceControl(userId, accessControlData, resourceControl);\n })\n .then(function success() {\n Notifications.success('Stack successfully deployed');\n $scope.state.isEditorDirty = false;\n $state.go('docker.stacks');\n })\n .catch(function error(err) {\n Notifications.error('Deployment error', err, 'Unable to deploy stack');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n\n $scope.editorUpdate = function (cm) {\n $scope.formValues.StackFileContent = cm.getValue();\n $scope.state.editorYamlValidationError = StackHelper.validateYAML($scope.formValues.StackFileContent, $scope.containerNames);\n $scope.state.isEditorDirty = true;\n };\n\n async function onFileLoadAsync(event) {\n $scope.state.uploadYamlValidationError = StackHelper.validateYAML(event.target.result, $scope.containerNames);\n }\n\n function onFileLoad(event) {\n return $async(onFileLoadAsync, event);\n }\n\n $scope.uploadFile = function (file) {\n $scope.formValues.StackFile = file;\n\n if (file) {\n const temporaryFileReader = new FileReader();\n temporaryFileReader.fileName = file.name;\n temporaryFileReader.onload = onFileLoad;\n temporaryFileReader.readAsText(file);\n }\n };\n\n $scope.onChangeTemplate = async function onChangeTemplate(template) {\n try {\n $scope.formValues.StackFileContent = undefined;\n $scope.selectedTemplate = template;\n $scope.formValues.StackFileContent = await CustomTemplateService.customTemplateFile(template.Id);\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to retrieve Custom Template file');\n }\n };\n\n async function initView() {\n var endpointMode = $scope.applicationState.endpoint.mode;\n $scope.state.StackType = 2;\n if (endpointMode.provider === 'DOCKER_SWARM_MODE' && endpointMode.role === 'MANAGER') {\n $scope.state.StackType = 1;\n }\n\n try {\n const templates = await CustomTemplateService.customTemplates($scope.state.StackType);\n $scope.templates = _.map(templates, (template) => ({ ...template, label: `${template.Title} - ${template.Description}` }));\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to retrieve Custom Templates');\n }\n\n try {\n const endpoint = EndpointProvider.currentEndpoint();\n $scope.composeSyntaxMaxVersion = endpoint.ComposeSyntaxMaxVersion;\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to retrieve the ComposeSyntaxMaxVersion');\n }\n\n try {\n $scope.containers = await ContainerService.containers();\n $scope.containerNames = ContainerHelper.getContainerNames($scope.containers);\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to retrieve Containers');\n }\n }\n\n this.uiCanExit = async function () {\n if ($scope.state.Method === 'editor' && $scope.formValues.StackFileContent && $scope.state.isEditorDirty) {\n return ModalService.confirmWebEditorDiscard();\n }\n };\n\n initView();\n\n function onChangeFormValues(newValues) {\n $scope.formValues = newValues;\n }\n });\n","import { AccessControlFormData } from 'Portainer/components/accessControlForm/porAccessControlFormModel';\n\nangular.module('portainer.app').controller('StackController', [\n '$async',\n '$q',\n '$scope',\n '$state',\n '$window',\n '$transition$',\n 'StackService',\n 'NodeService',\n 'ServiceService',\n 'TaskService',\n 'ContainerService',\n 'ServiceHelper',\n 'TaskHelper',\n 'Notifications',\n 'FormHelper',\n 'EndpointProvider',\n 'EndpointService',\n 'GroupService',\n 'ModalService',\n 'StackHelper',\n 'ResourceControlService',\n 'Authentication',\n 'ContainerHelper',\n function (\n $async,\n $q,\n $scope,\n $state,\n $window,\n $transition$,\n StackService,\n NodeService,\n ServiceService,\n TaskService,\n ContainerService,\n ServiceHelper,\n TaskHelper,\n Notifications,\n FormHelper,\n EndpointProvider,\n EndpointService,\n GroupService,\n ModalService,\n StackHelper,\n ResourceControlService,\n Authentication,\n ContainerHelper\n ) {\n $scope.state = {\n actionInProgress: false,\n migrationInProgress: false,\n showEditorTab: false,\n yamlError: false,\n isEditorDirty: false,\n };\n\n $scope.formValues = {\n Prune: false,\n Endpoint: null,\n AccessControlData: new AccessControlFormData(),\n Env: [],\n };\n\n $window.onbeforeunload = () => {\n if ($scope.stackFileContent && $scope.state.isEditorDirty) {\n return '';\n }\n };\n\n $scope.handleEnvVarChange = handleEnvVarChange;\n function handleEnvVarChange(value) {\n $scope.formValues.Env = value;\n }\n\n $scope.duplicateStack = function duplicateStack(name, endpointId) {\n var stack = $scope.stack;\n var env = FormHelper.removeInvalidEnvVars($scope.formValues.Env);\n EndpointProvider.setEndpointID(endpointId);\n\n return StackService.duplicateStack(name, $scope.stackFileContent, env, endpointId, stack.Type).then(onDuplicationSuccess).catch(notifyOnError);\n\n function onDuplicationSuccess() {\n Notifications.success('Stack successfully duplicated');\n $state.go('docker.stacks', {}, { reload: true });\n EndpointProvider.setEndpointID(stack.EndpointId);\n }\n\n function notifyOnError(err) {\n Notifications.error('Failure', err, 'Unable to duplicate stack');\n }\n };\n\n $scope.showEditor = function () {\n $scope.state.showEditorTab = true;\n };\n\n $scope.migrateStack = function (name, endpointId) {\n return $q(function (resolve) {\n ModalService.confirm({\n title: 'Are you sure?',\n message:\n 'This action will deploy a new instance of this stack on the target endpoint, please note that this does NOT relocate the content of any persistent volumes that may be attached to this stack.',\n buttons: {\n confirm: {\n label: 'Migrate',\n className: 'btn-danger',\n },\n },\n callback: function onConfirm(confirmed) {\n if (!confirmed) {\n return resolve();\n }\n return resolve(migrateStack(name, endpointId));\n },\n });\n });\n };\n\n $scope.removeStack = function () {\n ModalService.confirmDeletion('Do you want to remove the stack? Associated services will be removed as well.', function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n deleteStack();\n });\n };\n\n function migrateStack(name, endpointId) {\n var stack = $scope.stack;\n var targetEndpointId = endpointId;\n\n var migrateRequest = StackService.migrateSwarmStack;\n if (stack.Type === 2) {\n migrateRequest = StackService.migrateComposeStack;\n }\n\n // TODO: this is a work-around for stacks created with Portainer version >= 1.17.1\n // The EndpointID property is not available for these stacks, we can pass\n // the current endpoint identifier as a part of the migrate request. It will be used if\n // the EndpointID property is not defined on the stack.\n var originalEndpointId = EndpointProvider.endpointID();\n if (stack.EndpointId === 0) {\n stack.EndpointId = originalEndpointId;\n }\n\n $scope.state.migrationInProgress = true;\n return migrateRequest(stack, targetEndpointId, name)\n .then(function success() {\n Notifications.success('Stack successfully migrated', stack.Name);\n $state.go('docker.stacks', {}, { reload: true });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to migrate stack');\n })\n .finally(function final() {\n $scope.state.migrationInProgress = false;\n });\n }\n\n function deleteStack() {\n var endpointId = +$state.params.endpointId;\n var stack = $scope.stack;\n\n StackService.remove(stack, $transition$.params().external, endpointId)\n .then(function success() {\n Notifications.success('Stack successfully removed', stack.Name);\n $state.go('docker.stacks');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove stack ' + stack.Name);\n });\n }\n\n $scope.associateStack = function () {\n var endpointId = +$state.params.endpointId;\n var stack = $scope.stack;\n var accessControlData = $scope.formValues.AccessControlData;\n $scope.state.actionInProgress = true;\n\n StackService.associate(stack, endpointId, $scope.orphanedRunning)\n .then(function success(data) {\n const resourceControl = data.ResourceControl;\n const userDetails = Authentication.getUserDetails();\n const userId = userDetails.ID;\n return ResourceControlService.applyResourceControl(userId, accessControlData, resourceControl);\n })\n .then(function success() {\n Notifications.success('Stack successfully associated', stack.Name);\n $state.go('docker.stacks');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to associate stack ' + stack.Name);\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n\n $scope.deployStack = function () {\n var stackFile = $scope.stackFileContent;\n var env = FormHelper.removeInvalidEnvVars($scope.formValues.Env);\n var prune = $scope.formValues.Prune;\n var stack = $scope.stack;\n\n // TODO: this is a work-around for stacks created with Portainer version >= 1.17.1\n // The EndpointID property is not available for these stacks, we can pass\n // the current endpoint identifier as a part of the update request. It will be used if\n // the EndpointID property is not defined on the stack.\n var endpointId = EndpointProvider.endpointID();\n if (stack.EndpointId === 0) {\n stack.EndpointId = endpointId;\n }\n\n $scope.state.actionInProgress = true;\n StackService.updateStack(stack, stackFile, env, prune)\n .then(function success() {\n Notifications.success('Stack successfully deployed');\n $scope.state.isEditorDirty = false;\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create stack');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n\n $scope.editorUpdate = function (cm) {\n if ($scope.stackFileContent.replace(/(\\r\\n|\\n|\\r)/gm, '') !== cm.getValue().replace(/(\\r\\n|\\n|\\r)/gm, '')) {\n $scope.state.isEditorDirty = true;\n $scope.stackFileContent = cm.getValue();\n $scope.state.yamlError = StackHelper.validateYAML($scope.stackFileContent, $scope.containerNames);\n }\n };\n\n $scope.stopStack = stopStack;\n function stopStack() {\n return $async(stopStackAsync);\n }\n async function stopStackAsync() {\n const confirmed = await ModalService.confirmAsync({\n title: 'Are you sure?',\n message: 'Are you sure you want to stop this stack?',\n buttons: { confirm: { label: 'Stop', className: 'btn-danger' } },\n });\n if (!confirmed) {\n return;\n }\n\n $scope.state.actionInProgress = true;\n try {\n await StackService.stop($scope.stack.Id);\n $state.reload();\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to stop stack');\n }\n $scope.state.actionInProgress = false;\n }\n\n $scope.startStack = startStack;\n function startStack() {\n return $async(startStackAsync);\n }\n async function startStackAsync() {\n $scope.state.actionInProgress = true;\n const id = $scope.stack.Id;\n try {\n await StackService.start(id);\n $state.reload();\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to start stack');\n }\n $scope.state.actionInProgress = false;\n }\n\n function loadStack(id) {\n var agentProxy = $scope.applicationState.endpoint.mode.agentProxy;\n\n EndpointService.endpoints()\n .then(function success(data) {\n $scope.endpoints = data.value;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve endpoints');\n });\n\n $q.all({\n stack: StackService.stack(id),\n groups: GroupService.groups(),\n containers: ContainerService.containers(),\n })\n .then(function success(data) {\n var stack = data.stack;\n $scope.groups = data.groups;\n $scope.stack = stack;\n $scope.containerNames = ContainerHelper.getContainerNames(data.containers);\n\n $scope.formValues.Env = $scope.stack.Env;\n\n let resourcesPromise = Promise.resolve({});\n if (!stack.Status || stack.Status === 1) {\n resourcesPromise = stack.Type === 1 ? retrieveSwarmStackResources(stack.Name, agentProxy) : retrieveComposeStackResources(stack.Name);\n }\n\n return $q.all({\n stackFile: StackService.getStackFile(id),\n resources: resourcesPromise,\n });\n })\n .then(function success(data) {\n const isSwarm = $scope.stack.Type === 1;\n $scope.stackFileContent = data.stackFile;\n // workaround for missing status, if stack has resources, set the status to 1 (active), otherwise to 2 (inactive) (https://github.com/portainer/portainer/issues/4422)\n if (!$scope.stack.Status) {\n $scope.stack.Status = data.resources && ((isSwarm && data.resources.services.length) || data.resources.containers.length) ? 1 : 2;\n }\n\n if ($scope.stack.Status === 1) {\n if (isSwarm) {\n assignSwarmStackResources(data.resources, agentProxy);\n } else {\n assignComposeStackResources(data.resources);\n }\n }\n\n $scope.state.yamlError = StackHelper.validateYAML($scope.stackFileContent, $scope.containerNames);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve stack details');\n });\n }\n\n function retrieveSwarmStackResources(stackName, agentProxy) {\n var stackFilter = {\n label: ['com.docker.stack.namespace=' + stackName],\n };\n\n return $q.all({\n services: ServiceService.services(stackFilter),\n tasks: TaskService.tasks(stackFilter),\n containers: agentProxy ? ContainerService.containers(1) : [],\n nodes: NodeService.nodes(),\n });\n }\n\n function assignSwarmStackResources(resources, agentProxy) {\n var services = resources.services;\n var tasks = resources.tasks;\n\n if (agentProxy) {\n var containers = resources.containers;\n for (var j = 0; j < tasks.length; j++) {\n var task = tasks[j];\n TaskHelper.associateContainerToTask(task, containers);\n }\n }\n\n for (var i = 0; i < services.length; i++) {\n var service = services[i];\n ServiceHelper.associateTasksToService(service, tasks);\n }\n\n $scope.nodes = resources.nodes;\n $scope.tasks = tasks;\n $scope.services = services;\n }\n\n function retrieveComposeStackResources(stackName) {\n var stackFilter = {\n label: ['com.docker.compose.project=' + stackName],\n };\n\n return $q.all({\n containers: ContainerService.containers(1, stackFilter),\n });\n }\n\n function assignComposeStackResources(resources) {\n $scope.containers = resources.containers;\n }\n\n function loadExternalStack(name) {\n var stackType = $transition$.params().type;\n if (!stackType || (stackType !== '1' && stackType !== '2')) {\n Notifications.error('Failure', null, 'Invalid type URL parameter.');\n return;\n }\n\n if (stackType === '1') {\n loadExternalSwarmStack(name);\n } else {\n loadExternalComposeStack(name);\n }\n }\n\n function loadExternalSwarmStack(name) {\n var agentProxy = $scope.applicationState.endpoint.mode.agentProxy;\n\n retrieveSwarmStackResources(name, agentProxy)\n .then(function success(data) {\n assignSwarmStackResources(data, agentProxy);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve stack details');\n });\n }\n\n function loadExternalComposeStack(name) {\n retrieveComposeStackResources(name)\n .then(function success(data) {\n assignComposeStackResources(data);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve stack details');\n });\n }\n\n this.uiCanExit = async function () {\n if ($scope.stackFileContent && $scope.state.isEditorDirty) {\n return ModalService.confirmWebEditorDiscard();\n }\n };\n\n async function initView() {\n var stackName = $transition$.params().name;\n $scope.stackName = stackName;\n\n $scope.currentEndpointId = EndpointProvider.endpointID();\n\n const regular = $transition$.params().regular == 'true';\n $scope.regular = regular;\n\n var external = $transition$.params().external == 'true';\n $scope.external = external;\n\n const orphaned = $transition$.params().orphaned == 'true';\n $scope.orphaned = orphaned;\n\n const orphanedRunning = $transition$.params().orphanedRunning == 'true';\n $scope.orphanedRunning = orphanedRunning;\n\n if (external || (orphaned && orphanedRunning)) {\n loadExternalStack(stackName);\n }\n\n if (regular || orphaned) {\n const stackId = $transition$.params().id;\n loadStack(stackId);\n }\n\n try {\n const endpoint = EndpointProvider.currentEndpoint();\n $scope.composeSyntaxMaxVersion = endpoint.ComposeSyntaxMaxVersion;\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to retrieve the ComposeSyntaxMaxVersion');\n }\n\n $scope.stackType = $transition$.params().type;\n }\n\n initView();\n },\n]);\n","angular.module('portainer.app').controller('StacksController', StacksController);\n\n/* @ngInject */\nfunction StacksController($scope, $state, Notifications, StackService, ModalService, EndpointProvider, Authentication, endpoint) {\n $scope.removeAction = function (selectedItems) {\n ModalService.confirmDeletion('Do you want to remove the selected stack(s)? Associated services will be removed as well.', function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n deleteSelectedStacks(selectedItems);\n });\n };\n\n function deleteSelectedStacks(stacks) {\n var endpointId = EndpointProvider.endpointID();\n var actionCount = stacks.length;\n angular.forEach(stacks, function (stack) {\n StackService.remove(stack, stack.External, endpointId)\n .then(function success() {\n Notifications.success('Stack successfully removed', stack.Name);\n var index = $scope.stacks.indexOf(stack);\n $scope.stacks.splice(index, 1);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove stack ' + stack.Name);\n })\n .finally(function final() {\n --actionCount;\n if (actionCount === 0) {\n $state.reload();\n }\n });\n });\n }\n\n $scope.offlineMode = false;\n $scope.createEnabled = false;\n\n $scope.getStacks = getStacks;\n\n function getStacks() {\n var endpointMode = $scope.applicationState.endpoint.mode;\n var endpointId = EndpointProvider.endpointID();\n\n const includeOrphanedStacks = Authentication.isAdmin();\n StackService.stacks(true, endpointMode.provider === 'DOCKER_SWARM_MODE' && endpointMode.role === 'MANAGER', endpointId, includeOrphanedStacks)\n .then(function success(data) {\n var stacks = data;\n $scope.stacks = stacks;\n $scope.offlineMode = EndpointProvider.offlineMode();\n })\n .catch(function error(err) {\n $scope.stacks = [];\n Notifications.error('Failure', err, 'Unable to retrieve stacks');\n });\n }\n\n async function loadCreateEnabled() {\n return endpoint.SecuritySettings.allowStackManagementForRegularUsers || Authentication.isAdmin();\n }\n\n async function initView() {\n getStacks();\n $scope.createEnabled = await loadCreateEnabled();\n }\n\n initView();\n}\n","import angular from 'angular';\nimport _ from 'lodash-es';\n\nangular.module('portainer.app').controller('TagsController', TagsController);\n\nfunction TagsController($scope, $state, $async, TagService, Notifications) {\n $scope.state = {\n actionInProgress: false,\n };\n\n $scope.formValues = {\n Name: '',\n };\n\n $scope.checkNameValidity = function (form) {\n var valid = true;\n for (var i = 0; i < $scope.tags.length; i++) {\n if ($scope.formValues.Name === $scope.tags[i].Name) {\n valid = false;\n break;\n }\n }\n form.name.$setValidity('validName', valid);\n };\n\n $scope.removeAction = removeAction;\n\n function removeAction(tags) {\n return $async(removeActionAsync, tags);\n }\n\n async function removeActionAsync(tags) {\n for (let tag of tags) {\n try {\n await TagService.deleteTag(tag.Id);\n\n Notifications.success('Tag successfully removed', tag.Name);\n _.remove($scope.tags, tag);\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to remove tag');\n }\n }\n\n $state.reload();\n }\n\n $scope.createTag = function () {\n var tagName = $scope.formValues.Name;\n TagService.createTag(tagName)\n .then(function success() {\n Notifications.success('Tag successfully created', tagName);\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create tag');\n });\n };\n\n function initView() {\n TagService.tags()\n .then(function success(data) {\n $scope.tags = data;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve tags');\n $scope.tags = [];\n });\n }\n\n initView();\n}\n","angular.module('portainer.app').controller('TeamController', [\n '$q',\n '$scope',\n '$state',\n '$transition$',\n 'TeamService',\n 'UserService',\n 'TeamMembershipService',\n 'ModalService',\n 'Notifications',\n 'PaginationService',\n 'Authentication',\n function ($q, $scope, $state, $transition$, TeamService, UserService, TeamMembershipService, ModalService, Notifications, PaginationService, Authentication) {\n $scope.state = {\n pagination_count_users: PaginationService.getPaginationLimit('team_available_users'),\n pagination_count_members: PaginationService.getPaginationLimit('team_members'),\n };\n\n $scope.sortTypeUsers = 'Username';\n $scope.sortReverseUsers = true;\n $scope.users = [];\n $scope.teamMembers = [];\n $scope.leaderCount = 0;\n\n $scope.orderUsers = function (sortType) {\n $scope.sortReverseUsers = $scope.sortTypeUsers === sortType ? !$scope.sortReverseUsers : false;\n $scope.sortTypeUsers = sortType;\n };\n\n $scope.changePaginationCountUsers = function () {\n PaginationService.setPaginationLimit('team_available_users', $scope.state.pagination_count_users);\n };\n\n $scope.sortTypeGroupMembers = 'TeamRole';\n $scope.sortReverseGroupMembers = false;\n\n $scope.orderGroupMembers = function (sortType) {\n $scope.sortReverseGroupMembers = $scope.sortTypeGroupMembers === sortType ? !$scope.sortReverseGroupMembers : false;\n $scope.sortTypeGroupMembers = sortType;\n };\n\n $scope.changePaginationCountGroupMembers = function () {\n PaginationService.setPaginationLimit('team_members', $scope.state.pagination_count_members);\n };\n\n $scope.deleteTeam = function () {\n ModalService.confirmDeletion('Do you want to delete this team? Users in this team will not be deleted.', function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n deleteTeam();\n });\n };\n\n $scope.promoteToLeader = function (user) {\n TeamMembershipService.updateMembership(user.MembershipId, user.Id, $scope.team.Id, 1)\n .then(function success() {\n $scope.leaderCount++;\n user.TeamRole = 'Leader';\n Notifications.success('User is now team leader', user.Username);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update user role');\n });\n };\n\n $scope.demoteToMember = function (user) {\n TeamMembershipService.updateMembership(user.MembershipId, user.Id, $scope.team.Id, 2)\n .then(function success() {\n user.TeamRole = 'Member';\n $scope.leaderCount--;\n Notifications.success('User is now team member', user.Username);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update user role');\n });\n };\n\n $scope.addAllUsers = function () {\n var teamMembershipQueries = [];\n angular.forEach($scope.users, function (user) {\n teamMembershipQueries.push(TeamMembershipService.createMembership(user.Id, $scope.team.Id, 2));\n });\n $q.all(teamMembershipQueries)\n .then(function success(data) {\n var users = $scope.users;\n for (var i = 0; i < users.length; i++) {\n var user = users[i];\n user.MembershipId = data[i].Id;\n user.TeamRole = 'Member';\n }\n $scope.teamMembers = $scope.teamMembers.concat(users);\n $scope.users = [];\n Notifications.success('All users successfully added');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update team members');\n });\n };\n\n $scope.addUser = function (user) {\n TeamMembershipService.createMembership(user.Id, $scope.team.Id, 2)\n .then(function success(data) {\n removeUserFromArray(user.Id, $scope.users);\n user.TeamRole = 'Member';\n user.MembershipId = data.Id;\n $scope.teamMembers.push(user);\n Notifications.success('User added to team', user.Username);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update team members');\n });\n };\n\n $scope.removeAllUsers = function () {\n var teamMembershipQueries = [];\n angular.forEach($scope.teamMembers, function (user) {\n teamMembershipQueries.push(TeamMembershipService.deleteMembership(user.MembershipId));\n });\n $q.all(teamMembershipQueries)\n .then(function success() {\n $scope.users = $scope.users.concat($scope.teamMembers);\n $scope.teamMembers = [];\n $scope.leaderCount = 0;\n Notifications.success('All users successfully removed');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update team members');\n });\n };\n\n $scope.removeUser = function (user) {\n TeamMembershipService.deleteMembership(user.MembershipId)\n .then(function success() {\n removeUserFromArray(user.Id, $scope.teamMembers);\n if (user.TeamRole === 'Leader') {\n $scope.leaderCount--;\n }\n $scope.users.push(user);\n Notifications.success('User removed from team', user.Username);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update team members');\n });\n };\n\n function deleteTeam() {\n TeamService.deleteTeam($scope.team.Id)\n .then(function success() {\n Notifications.success('Team successfully deleted', $scope.team.Name);\n $state.go('portainer.teams');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove team');\n });\n }\n\n function removeUserFromArray(id, users) {\n for (var i = 0, l = users.length; i < l; i++) {\n if (users[i].Id === id) {\n users.splice(i, 1);\n return;\n }\n }\n }\n\n function assignUsersAndMembers(users, memberships) {\n for (var i = 0; i < users.length; i++) {\n var user = users[i];\n var member = false;\n for (var j = 0; j < memberships.length; j++) {\n var membership = memberships[j];\n if (user.Id === membership.UserId) {\n member = true;\n if (membership.Role === 1) {\n user.TeamRole = 'Leader';\n $scope.leaderCount++;\n } else {\n user.TeamRole = 'Member';\n }\n user.MembershipId = membership.Id;\n $scope.teamMembers.push(user);\n break;\n }\n }\n if (!member) {\n $scope.users.push(user);\n }\n }\n }\n\n function initView() {\n $scope.isAdmin = Authentication.isAdmin();\n $q.all({\n team: TeamService.team($transition$.params().id),\n users: UserService.users(false),\n memberships: TeamService.userMemberships($transition$.params().id),\n })\n .then(function success(data) {\n var users = data.users;\n $scope.team = data.team;\n assignUsersAndMembers(users, data.memberships);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve team details');\n });\n }\n\n initView();\n },\n]);\n","import _ from 'lodash-es';\n\nangular.module('portainer.app').controller('TeamsController', [\n '$q',\n '$scope',\n '$state',\n 'TeamService',\n 'UserService',\n 'ModalService',\n 'Notifications',\n 'Authentication',\n function ($q, $scope, $state, TeamService, UserService, ModalService, Notifications, Authentication) {\n $scope.state = {\n actionInProgress: false,\n };\n\n $scope.formValues = {\n Name: '',\n Leaders: [],\n };\n\n $scope.checkNameValidity = function (form) {\n var valid = true;\n for (var i = 0; i < $scope.teams.length; i++) {\n if ($scope.formValues.Name === $scope.teams[i].Name) {\n valid = false;\n break;\n }\n }\n form.team_name.$setValidity('validName', valid);\n };\n\n $scope.addTeam = function () {\n var teamName = $scope.formValues.Name;\n var leaderIds = [];\n angular.forEach($scope.formValues.Leaders, function (user) {\n leaderIds.push(user.Id);\n });\n\n $scope.state.actionInProgress = true;\n TeamService.createTeam(teamName, leaderIds)\n .then(function success() {\n Notifications.success('Team successfully created', teamName);\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create team');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n\n $scope.removeAction = function (selectedItems) {\n ModalService.confirmDeletion('Do you want to delete the selected team(s)? Users in the team(s) will not be deleted.', function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n deleteSelectedTeams(selectedItems);\n });\n };\n\n function deleteSelectedTeams(selectedItems) {\n var actionCount = selectedItems.length;\n angular.forEach(selectedItems, function (team) {\n TeamService.deleteTeam(team.Id)\n .then(function success() {\n Notifications.success('Team successfully removed', team.Name);\n var index = $scope.teams.indexOf(team);\n $scope.teams.splice(index, 1);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove team');\n })\n .finally(function final() {\n --actionCount;\n if (actionCount === 0) {\n $state.reload();\n }\n });\n });\n }\n\n function initView() {\n var userDetails = Authentication.getUserDetails();\n var isAdmin = Authentication.isAdmin();\n $scope.isAdmin = isAdmin;\n $q.all({\n users: UserService.users(false),\n teams: isAdmin ? TeamService.teams() : UserService.userLeadingTeams(userDetails.ID),\n })\n .then(function success(data) {\n var teams = data.teams;\n $scope.teams = teams;\n $scope.users = _.orderBy(data.users, 'Username', 'asc');\n })\n .catch(function error(err) {\n $scope.teams = [];\n $scope.users = [];\n Notifications.error('Failure', err, 'Unable to retrieve teams');\n });\n }\n\n initView();\n },\n]);\n","import _ from 'lodash-es';\nimport { AccessControlFormData } from '../../components/accessControlForm/porAccessControlFormModel';\n\nangular.module('portainer.app').controller('TemplatesController', [\n '$scope',\n '$q',\n '$state',\n '$anchorScroll',\n 'ContainerService',\n 'ImageService',\n 'NetworkService',\n 'TemplateService',\n 'TemplateHelper',\n 'VolumeService',\n 'Notifications',\n 'ResourceControlService',\n 'Authentication',\n 'FormValidator',\n 'StackService',\n 'endpoint',\n function (\n $scope,\n $q,\n $state,\n $anchorScroll,\n ContainerService,\n ImageService,\n NetworkService,\n TemplateService,\n TemplateHelper,\n VolumeService,\n Notifications,\n ResourceControlService,\n Authentication,\n FormValidator,\n StackService,\n endpoint\n ) {\n const DOCKER_STANDALONE = 'DOCKER_STANDALONE';\n const DOCKER_SWARM_MODE = 'DOCKER_SWARM_MODE';\n\n $scope.state = {\n selectedTemplate: null,\n showAdvancedOptions: false,\n formValidationError: '',\n actionInProgress: false,\n };\n\n $scope.formValues = {\n network: '',\n name: '',\n AccessControlData: new AccessControlFormData(),\n };\n\n $scope.addVolume = function () {\n $scope.state.selectedTemplate.Volumes.push({ containerPath: '', bind: '', readonly: false, type: 'auto' });\n };\n\n $scope.removeVolume = function (index) {\n $scope.state.selectedTemplate.Volumes.splice(index, 1);\n };\n\n $scope.addPortBinding = function () {\n $scope.state.selectedTemplate.Ports.push({ hostPort: '', containerPort: '', protocol: 'tcp' });\n };\n\n $scope.removePortBinding = function (index) {\n $scope.state.selectedTemplate.Ports.splice(index, 1);\n };\n\n $scope.addExtraHost = function () {\n $scope.state.selectedTemplate.Hosts.push('');\n };\n\n $scope.removeExtraHost = function (index) {\n $scope.state.selectedTemplate.Hosts.splice(index, 1);\n };\n\n $scope.addLabel = function () {\n $scope.state.selectedTemplate.Labels.push({ name: '', value: '' });\n };\n\n $scope.removeLabel = function (index) {\n $scope.state.selectedTemplate.Labels.splice(index, 1);\n };\n\n function validateForm(accessControlData, isAdmin) {\n $scope.state.formValidationError = '';\n var error = '';\n error = FormValidator.validateAccessControl(accessControlData, isAdmin);\n\n if (error) {\n $scope.state.formValidationError = error;\n return false;\n }\n return true;\n }\n\n function createContainerFromTemplate(template, userId, accessControlData) {\n var templateConfiguration = createTemplateConfiguration(template);\n var generatedVolumeCount = TemplateHelper.determineRequiredGeneratedVolumeCount(template.Volumes);\n var generatedVolumeIds = [];\n VolumeService.createXAutoGeneratedLocalVolumes(generatedVolumeCount)\n .then(function success(data) {\n angular.forEach(data, function (volume) {\n var volumeId = volume.Id;\n generatedVolumeIds.push(volumeId);\n });\n TemplateService.updateContainerConfigurationWithVolumes(templateConfiguration, template, data);\n return ImageService.pullImage(template.RegistryModel, true);\n })\n .then(function success() {\n return ContainerService.createAndStartContainer(templateConfiguration);\n })\n .then(function success(data) {\n const resourceControl = data.Portainer.ResourceControl;\n return ResourceControlService.applyResourceControl(userId, accessControlData, resourceControl, generatedVolumeIds);\n })\n .then(function success() {\n Notifications.success('Container successfully created');\n $state.go('docker.containers', {}, { reload: true });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, err.msg);\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n }\n\n function createComposeStackFromTemplate(template, userId, accessControlData) {\n var stackName = $scope.formValues.name;\n\n for (var i = 0; i < template.Env.length; i++) {\n var envvar = template.Env[i];\n if (envvar.preset) {\n envvar.value = envvar.default;\n }\n }\n\n var repositoryOptions = {\n RepositoryURL: template.Repository.url,\n ComposeFilePathInRepository: template.Repository.stackfile,\n };\n\n const endpointId = +$state.params.endpointId;\n StackService.createComposeStackFromGitRepository(stackName, repositoryOptions, template.Env, endpointId)\n .then(function success(data) {\n const resourceControl = data.ResourceControl;\n return ResourceControlService.applyResourceControl(userId, accessControlData, resourceControl);\n })\n .then(function success() {\n Notifications.success('Stack successfully deployed');\n $state.go('docker.stacks');\n })\n .catch(function error(err) {\n Notifications.error('Deployment error', err);\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n }\n\n function createStackFromTemplate(template, userId, accessControlData) {\n var stackName = $scope.formValues.name;\n var env = _.filter(\n _.map(template.Env, function transformEnvVar(envvar) {\n return {\n name: envvar.name,\n value: envvar.preset || !envvar.value ? envvar.default : envvar.value,\n };\n }),\n function removeUndefinedVars(envvar) {\n return envvar.value && envvar.name;\n }\n );\n\n var repositoryOptions = {\n RepositoryURL: template.Repository.url,\n ComposeFilePathInRepository: template.Repository.stackfile,\n };\n\n const endpointId = +$state.params.endpointId;\n\n StackService.createSwarmStackFromGitRepository(stackName, repositoryOptions, env, endpointId)\n .then(function success(data) {\n const resourceControl = data.ResourceControl;\n return ResourceControlService.applyResourceControl(userId, accessControlData, resourceControl);\n })\n .then(function success() {\n Notifications.success('Stack successfully deployed');\n $state.go('docker.stacks');\n })\n .catch(function error(err) {\n Notifications.error('Deployment error', err);\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n }\n\n $scope.createTemplate = function () {\n var userDetails = Authentication.getUserDetails();\n var userId = userDetails.ID;\n var accessControlData = $scope.formValues.AccessControlData;\n\n if (!validateForm(accessControlData, $scope.isAdmin)) {\n return;\n }\n\n var template = $scope.state.selectedTemplate;\n\n $scope.state.actionInProgress = true;\n if (template.Type === 2) {\n createStackFromTemplate(template, userId, accessControlData);\n } else if (template.Type === 3) {\n createComposeStackFromTemplate(template, userId, accessControlData);\n } else {\n createContainerFromTemplate(template, userId, accessControlData);\n }\n };\n\n $scope.unselectTemplate = function (template) {\n template.Selected = false;\n $scope.state.selectedTemplate = null;\n };\n\n $scope.selectTemplate = function (template) {\n if ($scope.state.selectedTemplate) {\n $scope.unselectTemplate($scope.state.selectedTemplate);\n }\n\n template.Selected = true;\n if (template.Network) {\n $scope.formValues.network = _.find($scope.availableNetworks, function (o) {\n return o.Name === template.Network;\n });\n } else {\n $scope.formValues.network = _.find($scope.availableNetworks, function (o) {\n return o.Name === 'bridge';\n });\n }\n\n $scope.formValues.name = template.Name ? template.Name : '';\n $scope.state.selectedTemplate = template;\n $scope.state.deployable = isDeployable($scope.applicationState.endpoint, template.Type);\n $anchorScroll('view-top');\n };\n\n function isDeployable(endpoint, templateType) {\n let deployable = false;\n switch (templateType) {\n case 1:\n deployable = endpoint.mode.provider === DOCKER_SWARM_MODE || endpoint.mode.provider === DOCKER_STANDALONE;\n break;\n case 2:\n deployable = endpoint.mode.provider === DOCKER_SWARM_MODE;\n break;\n case 3:\n deployable = endpoint.mode.provider === DOCKER_STANDALONE;\n break;\n }\n return deployable;\n }\n\n function createTemplateConfiguration(template) {\n var network = $scope.formValues.network;\n var name = $scope.formValues.name;\n return TemplateService.createTemplateConfiguration(template, name, network);\n }\n\n function initView() {\n $scope.isAdmin = Authentication.isAdmin();\n\n var endpointMode = $scope.applicationState.endpoint.mode;\n var apiVersion = $scope.applicationState.endpoint.apiVersion;\n\n $q.all({\n templates: TemplateService.templates(),\n volumes: VolumeService.getVolumes(),\n networks: NetworkService.networks(\n endpointMode.provider === 'DOCKER_STANDALONE' || endpointMode.provider === 'DOCKER_SWARM_MODE',\n false,\n endpointMode.provider === 'DOCKER_SWARM_MODE' && apiVersion >= 1.25\n ),\n })\n .then(function success(data) {\n var templates = data.templates;\n $scope.templates = templates;\n $scope.availableVolumes = _.orderBy(data.volumes.Volumes, [(volume) => volume.Name.toLowerCase()], ['asc']);\n var networks = data.networks;\n $scope.availableNetworks = networks;\n $scope.allowBindMounts = endpoint.SecuritySettings.allowBindMountsForRegularUsers;\n })\n .catch(function error(err) {\n $scope.templates = [];\n Notifications.error('Failure', err, 'An error occured during apps initialization.');\n });\n }\n\n initView();\n },\n]);\n","angular.module('portainer.app').controller('UserController', [\n '$q',\n '$scope',\n '$state',\n '$transition$',\n 'UserService',\n 'ModalService',\n 'Notifications',\n 'SettingsService',\n 'Authentication',\n function ($q, $scope, $state, $transition$, UserService, ModalService, Notifications, SettingsService, Authentication) {\n $scope.state = {\n updatePasswordError: '',\n };\n\n $scope.formValues = {\n username: '',\n newPassword: '',\n confirmPassword: '',\n Administrator: false,\n };\n\n $scope.deleteUser = function () {\n ModalService.confirmDeletion('Do you want to remove this user? This user will not be able to login into Portainer anymore.', function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n deleteUser();\n });\n };\n\n $scope.updateUser = async function () {\n const role = $scope.formValues.Administrator ? 1 : 2;\n const oldUsername = $scope.user.Username;\n const username = $scope.formValues.username;\n let promise = Promise.resolve(true);\n if (username != oldUsername) {\n promise = new Promise((resolve) =>\n ModalService.confirm({\n title: 'Are you sure?',\n message: `Are you sure you want to rename the user ${oldUsername} to ${username}?`,\n buttons: {\n confirm: {\n label: 'Update',\n className: 'btn-primary',\n },\n },\n callback: resolve,\n })\n );\n }\n const confirmed = await promise;\n if (!confirmed) {\n return;\n }\n UserService.updateUser($scope.user.Id, { role, username })\n .then(function success() {\n Notifications.success('User successfully updated');\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update user permissions');\n });\n };\n\n $scope.updatePassword = function () {\n UserService.updateUser($scope.user.Id, { password: $scope.formValues.newPassword })\n .then(function success() {\n Notifications.success('Password successfully updated');\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update user password');\n });\n };\n\n function deleteUser() {\n UserService.deleteUser($scope.user.Id)\n .then(function success() {\n Notifications.success('User successfully deleted', $scope.user.Username);\n $state.go('portainer.users');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove user');\n });\n }\n\n $scope.isSubmitEnabled = isSubmitEnabled;\n function isSubmitEnabled() {\n const { user, formValues } = $scope;\n return user && (user.Username !== formValues.username || (formValues.Administrator && user.Role !== 1) || (!formValues.Administrator && user.Role === 1));\n }\n\n $scope.isDeleteDisabled = isDeleteDisabled;\n function isDeleteDisabled() {\n const { user } = $scope;\n return user && user.Id === 1;\n }\n\n function initView() {\n $scope.isAdmin = Authentication.isAdmin();\n\n $q.all({\n user: UserService.user($transition$.params().id),\n settings: SettingsService.publicSettings(),\n })\n .then(function success(data) {\n var user = data.user;\n $scope.user = user;\n $scope.formValues.Administrator = user.Role === 1;\n $scope.formValues.username = user.Username;\n $scope.AuthenticationMethod = data.settings.AuthenticationMethod;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve user information');\n });\n }\n\n initView();\n },\n]);\n","import _ from 'lodash-es';\n\nangular.module('portainer.app').controller('UsersController', [\n '$q',\n '$scope',\n '$state',\n 'UserService',\n 'TeamService',\n 'TeamMembershipService',\n 'ModalService',\n 'Notifications',\n 'Authentication',\n 'SettingsService',\n function ($q, $scope, $state, UserService, TeamService, TeamMembershipService, ModalService, Notifications, Authentication, SettingsService) {\n $scope.state = {\n userCreationError: '',\n validUsername: false,\n actionInProgress: false,\n };\n\n $scope.formValues = {\n Username: '',\n Password: '',\n ConfirmPassword: '',\n Administrator: false,\n Teams: [],\n };\n\n $scope.checkUsernameValidity = function () {\n var valid = true;\n for (var i = 0; i < $scope.users.length; i++) {\n if ($scope.formValues.Username.toLocaleLowerCase() === $scope.users[i].Username.toLocaleLowerCase()) {\n valid = false;\n break;\n }\n }\n $scope.state.validUsername = valid;\n $scope.state.userCreationError = valid ? '' : 'Username already taken';\n };\n\n $scope.addUser = function () {\n $scope.state.actionInProgress = true;\n $scope.state.userCreationError = '';\n var username = $scope.formValues.Username;\n var password = $scope.formValues.Password;\n var role = $scope.formValues.Administrator ? 1 : 2;\n var teamIds = [];\n angular.forEach($scope.formValues.Teams, function (team) {\n teamIds.push(team.Id);\n });\n UserService.createUser(username, password, role, teamIds)\n .then(function success() {\n Notifications.success('User successfully created', username);\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create user');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n\n function deleteSelectedUsers(selectedItems) {\n var actionCount = selectedItems.length;\n angular.forEach(selectedItems, function (user) {\n UserService.deleteUser(user.Id)\n .then(function success() {\n Notifications.success('User successfully removed', user.Username);\n var index = $scope.users.indexOf(user);\n $scope.users.splice(index, 1);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove user');\n })\n .finally(function final() {\n --actionCount;\n if (actionCount === 0) {\n $state.reload();\n }\n });\n });\n }\n\n $scope.removeAction = function (selectedItems) {\n ModalService.confirmDeletion('Do you want to remove the selected users? They will not be able to login into Portainer anymore.', function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n deleteSelectedUsers(selectedItems);\n });\n };\n\n function assignTeamLeaders(users, memberships) {\n for (var i = 0; i < users.length; i++) {\n var user = users[i];\n user.isTeamLeader = false;\n for (var j = 0; j < memberships.length; j++) {\n var membership = memberships[j];\n if (user.Id === membership.UserId && membership.Role === 1) {\n user.isTeamLeader = true;\n user.RoleName = 'team leader';\n break;\n }\n }\n }\n }\n\n function initView() {\n var userDetails = Authentication.getUserDetails();\n var isAdmin = Authentication.isAdmin();\n $scope.isAdmin = isAdmin;\n $q.all({\n users: UserService.users(true),\n teams: isAdmin ? TeamService.teams() : UserService.userLeadingTeams(userDetails.ID),\n memberships: TeamMembershipService.memberships(),\n settings: SettingsService.publicSettings(),\n })\n .then(function success(data) {\n var users = data.users;\n assignTeamLeaders(users, data.memberships);\n $scope.users = users;\n $scope.teams = _.orderBy(data.teams, 'Name', 'asc');\n $scope.AuthenticationMethod = data.settings.AuthenticationMethod;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve users and teams');\n $scope.users = [];\n $scope.teams = [];\n });\n }\n\n initView();\n },\n]);\n","import 'ui-select/dist/select.css';\nimport 'bootstrap/dist/css/bootstrap.css';\nimport '@fortawesome/fontawesome-free/css/brands.css';\nimport '@fortawesome/fontawesome-free/css/solid.css';\nimport '@fortawesome/fontawesome-free/css/fontawesome.css';\nimport 'toastr/build/toastr.css';\nimport 'xterm/dist/xterm.css';\nimport 'angularjs-slider/dist/rzslider.css';\nimport 'codemirror/lib/codemirror.css';\nimport 'codemirror/addon/lint/lint.css';\nimport 'angular-json-tree/dist/angular-json-tree.css';\nimport 'angular-loading-bar/build/loading-bar.css';\nimport 'angular-moment-picker/dist/angular-moment-picker.min.css';\nimport 'angular-multiselect/isteven-multi-select.css';\nimport 'spinkit/spinkit.min.css';\n\nimport angular from 'angular';\nimport 'moment';\nimport '@uirouter/angularjs';\nimport 'ui-select';\nimport 'angular-sanitize';\nimport 'ng-file-upload';\nimport 'angular-messages';\nimport 'angular-resource';\nimport 'angular-utils-pagination';\nimport 'angular-local-storage';\nimport 'angular-jwt';\nimport 'angular-json-tree';\nimport 'angular-loading-bar';\nimport 'angular-clipboard';\nimport 'angular-file-saver';\nimport 'angularjs-scroll-glue';\nimport 'angularjs-slider';\nimport 'bootstrap/dist/js/bootstrap.js';\nimport 'js-yaml/dist/js-yaml.js';\nimport 'angular-ui-bootstrap';\nimport 'angular-moment-picker';\nimport 'angular-multiselect/isteven-multi-select.js';\nimport 'angulartics/dist/angulartics.min.js';\n\nwindow.angular = angular;\n"],"sourceRoot":""}