{"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/helpers/resourceReservationHelper.js","webpack:///./app/portainer/models/resourceControl/resourceControlOwnership.js","webpack:///./app/kubernetes/models/application/formValues.js","webpack:///./app/kubernetes/models/configuration/models.js","webpack:///./app/kubernetes/rest/response/transform.js","webpack:///./app/docker/rest/response/handlers.js","webpack:///./app/kubernetes/models/service/models.js","webpack:///./app/kubernetes/pod/models/index.js","webpack:///./app/kubernetes/models/common/payloads.js","webpack:///./app/kubernetes/helpers/commonHelper.js","webpack:///./app/portainer/components/accessControlForm/porAccessControlFormModel.js","webpack:///./app/kubernetes/helpers/formValidationHelper.js","webpack:///./app/kubernetes/ingress/converter.js","webpack:///./app/kubernetes/models/config-map/models.js","webpack:///./app/portainer/models/resourceControl/resourceControl.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/models/configuration/formvalues.js","webpack:///./app/portainer/models/registryTypes.js","webpack:///./app/kubernetes/helpers/volumeHelper.js","webpack:///./app/kubernetes/models/resource-pool/models.js","webpack:///./app/kubernetes/converters/application.js","webpack:///./app/kubernetes/models/application/payloads.js","webpack:///./app/kubernetes/models/resource-quota/models.js","webpack:///./app/kubernetes/helpers/eventHelper.js","webpack:///./app/portainer/models/access.js","webpack:///./app/kubernetes/node/converter.js","webpack:///./app/integrations/storidge/models/profile.js","webpack:///./app/kubernetes/models/stateful-set/models.js","webpack:///./app/kubernetes/converters/persistentVolumeClaim.js","webpack:///./app/kubernetes/models/resource-pool/formValues.js","webpack:///./app/kubernetes/converters/secret.js","webpack:///./app/kubernetes/models/history/models.js","webpack:///./app/kubernetes/horizontal-pod-auto-scaler/converter.js","webpack:///./app/kubernetes/node/models.js","webpack:///./app/portainer/models/resourceControl/resourceControlTypes.js","webpack:///./app/kubernetes/converters/configuration.js","webpack:///./app/kubernetes/helpers/resourceQuotaHelper.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/kubernetes/models/deployment/models.js","webpack:///./app/kubernetes/models/daemon-set/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/converters/service.js","webpack:///./app/kubernetes/node/helper.js","webpack:///./app/portainer/models/stack.js","webpack:///./app/portainer/models/group.js","webpack:///./app/kubernetes/pod/payloads/affinities.js","webpack:///./app/kubernetes/converters/resourceQuota.js","webpack:///./app/kubernetes/horizontal-pod-auto-scaler/helper.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/kubernetes/pod/converter.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/endpoint/models.js","webpack:///./app/kubernetes/helpers/configMapHelper.js","webpack:///./app/kubernetes/helpers/history/deployment.js","webpack:///./app/kubernetes/ingress/payloads.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/converters/resourcePool.js","webpack:///./app/kubernetes/models/resource-quota/payloads.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/models/deploy.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/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/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/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/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/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/forms/group-form/groupFormController.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 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/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/constants.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.js","webpack:///./app/docker/components/imageRegistry/porImageRegistry.html","webpack:///./app/docker/components/imageRegistry/porImageRegistryController.js","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/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/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/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/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/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/forms/group-form/group-form.js","webpack:///./app/portainer/components/forms/group-form/groupForm.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/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/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/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","KubernetesApplicationEnvironmentVariableFormValue","IsNew","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","valueFrom","configMapKeyRef","secretKeyRef","volKeys","groupedVolKeys","items","path","volumeName","KubernetesVolumeHelper","generatedApplicationConfigVolumeName","itemsMap","entry","KubernetesApplicationVolumeEntryPayload","mount","KubernetesApplicationVolumeMountPayload","volume","KubernetesApplicationVolumeConfigMapPayload","KubernetesApplicationVolumeSecretPayload","mountPath","configMap","secret","secretName","serviceType","publishedPorts","generatePort","rule","KubernetesApplicationPublishedPortFormValue","IngressName","IngressRoute","IngressHost","Host","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","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","KubernetesResourceReservationHelper","pod","Requests","memory","Memory","filesizeParser","base","cpu","CPU","parseCPU","KubernetesResourceReservation","Math","floor","mem","ResourceControlOwnership","PUBLIC","PRIVATE","RESTRICTED","ADMINISTRATORS","_KubernetesApplicationFormValues","MemoryLimit","CpuLimit","ReplicaCount","EnvironmentVariables","KubernetesApplicationDataAccessPolicies","SHARED","Configurations","PublishingType","KubernetesApplicationPublishingTypes","INTERNAL","OriginalIngresses","KubernetesApplicationFormValues","_KubernetesApplicationConfigurationFormValueOverridenKey","_KubernetesApplicationConfigurationFormValue","_KubernetesApplicationEnvironmentVariableFormValue","IsSecret","_KubernetesApplicationPersistedFolderFormValue","ExistingVolume","UseNewVolume","storageClass","_KubernetesApplicationAutoScalerFormValue","KubernetesFormValueDuplicate","refs","hasDuplicates","KubernetesPortainerConfigurationOwnerLabel","KubernetesPortainerConfigurationDataAnnotation","_KubernetesConfiguration","Namespace","ConfigurationOwner","Used","Applications","KubernetesConfiguration","SECRET","rawResponse","isJSON","jsonString","e","jsonObjectsToArrayHandler","str","replace","angular","fromJson","genericHandler","response","message","logsHandler","logs","deleteImageHandler","toString","json","KubernetesServiceHeadlessPrefix","KubernetesServiceHeadlessClusterIP","CLUSTER_IP","_KubernetesService","Headless","ClusterIP","KubernetesService","_KubernetesServicePort","targetPort","protocol","nodePort","KubernetesServicePort","_KubernetesPod","Images","Status","Restarts","Node","Labels","Tolerations","NodeSelector","KubernetesPod","_KubernetesPodToleration","Operator","TolerationSeconds","Effect","KubernetesPodToleration","_KubernetesPodContainer","PodName","KubernetesPodContainer","KubernetesPodContainerTypes","INIT","APP","_KubernetesCommonMetadataPayload","uid","namespace","labels","annotations","KubernetesCommonMetadataPayload","KubernetesCommonHelper","obj","owner","omission","AccessControlFormData","AccessControlEnabled","Ownership","RCO","AuthorizedUsers","AuthorizedTeams","KubernetesFormValidationHelper","names","groupped","KubernetesIngressConverter","host","paths","spec","rules","http","ingRule","KubernetesIngressRule","metadata","backend","serviceName","IP","status","loadBalancer","ingress","ip","servicePort","KubernetesIngress","Annotations","IngressClassName","KubernetesIngressClassAnnotation","ingressClassName","Paths","ingresses","copy","IngressClass","pairs","a","RewriteTarget","KubernetesIngressClassRewriteTargetAnnotations","ics","ic","fv","KubernetesResourcePoolIngressClassFormValue","Selected","WasSelected","rewriteKey","annotation","KubernetesResourcePoolIngressClassAnnotationFormValue","AdvancedConfig","KubernetesIngressCreatePayload","groups","KubernetesIngressRuleCreatePayload","PreviousHost","assignOrDeleteIfEmpty","KubernetesIngressRulePathCreatePayload","oldData","newData","oldPayload","createPayload","newPayload","JsonPatch","KubernetesPortainerConfigMapNamespace","KubernetesPortainerConfigMapConfigName","KubernetesPortainerConfigMapAccessKey","KubernetesPortainerAccessConfigMap","_KubernetesConfigMap","KubernetesConfigMap","ResourceControlViewModel","resourceControl","ResourceId","UserAccesses","TeamAccesses","Public","System","nginx","traefik","KubernetesIngressClassTypes","NGINX","TRAEFIK","KubernetesConfigMapConverter","KubernetesConfigMapCreatePayload","createAccessPayload","yaml","creationTimestamp","KubernetesConfigurationFormValuesEntry","binaryData","IsBinary","configurationOwner","KubernetesConfigMapUpdatePayload","PorImageRegistryModel","UseRegistry","Registry","KubernetesConfigurationHelper","envFind","volumeFind","encoding","getUsingApplications","setConfigurationUsed","YAML","defaultOptions","customTags","DataYaml","oldEntry","configuration","_KubernetesConfigurationFormValues","IsSimple","KubernetesConfigurationFormValues","_KubernetesConfigurationFormValuesEntry","RegistryTypes","QUAY","CUSTOM","GITLAB","matchingNames","PersistentVolumeClaim","KubernetesApplicationTypes","STATEFULSET","uuidv4","KubernetesPortainerResourcePoolNameLabel","KubernetesPortainerResourcePoolOwnerLabel","KubernetesResourcePool","Quota","Ingresses","KubernetesApplicationConverter","service","template","initContainers","KubernetesPortainerApplicationStackNameLabel","KubernetesPortainerApplicationOwnerLabel","KubernetesPortainerApplicationNote","KubernetesPortainerApplicationNameLabel","image","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","POD","DEPLOYMENT","availableReplicas","replicas","unavailableReplicas","DAEMONSET","GLOBAL","numberAvailable","desiredNumberScheduled","numberUnavailable","ISOLATED","readyReplicas","resourcePools","megaBytesValue","generateEnvVariablesFromEnv","generatePersistedFoldersFormValuesFromPersistedFolders","generateConfigurationFormValuesFromEnvAndVolumes","generateAutoScalerFormValueFromHorizontalPodAutoScaler","generatePublishedPortsFormValuesFromPublishedPorts","isIngress","CLUSTER","INGRESS","generatePlacementsFormValuesFromAffinity","ownerToLabel","headlessService","claims","KubernetesPersistentVolumeClaimConverter","applicationFormValuesToVolumeClaims","rwx","AccessModes","deployment","statefulSet","daemonSet","KubernetesDeploymentConverter","applicationFormValuesToDeployment","KubernetesStatefulSetConverter","applicationFormValuesToStatefulSet","KubernetesDaemonSetConverter","applicationFormValuesToDaemonSet","KubernetesServiceConverter","applicationFormValuesToHeadlessService","applicationFormValuesToService","_KubernetesApplicationVolumeMount","readOnly","_KubernetesApplicationVolumePersistentPayload","_KubernetesApplicationVolumeConfigMapPayload","_KubernetesApplicationVolumeSecretPayload","_KubernetesApplicationVolumeEntryPayload","_KubernetesApplicationEnvPayload","_KubernetesApplicationEnvConfigMapPayload","_KubernetesApplicationEnvSecretPayload","KubernetesPortainerResourceQuotaPrefix","KubernetesResourceQuotaDefaults","_KubernetesResourceQuota","CpuLimitUsed","MemoryLimitUsed","ResourcePoolName","ResourcePoolOwner","KubernetesResourceQuota","KubernetesResourceQuotaHelper","generateResourceQuotaName","KubernetesEventHelper","events","event","UserAccessViewModel","Username","Inherited","Override","Role","icon","TeamAccessViewModel","KubernetesNodeConverter","KubernetesNode","hostName","addresses","address","ready","conditions","KubernetesNodeConditionTypes","READY","memoryPressure","MEMORY_PRESSURE","PIDPressure","PID_PRESSURE","diskPressure","DISK_PRESSURE","networkUnavailable","NETWORK_UNAVAILABLE","Conditions","MemoryPressure","DiskPressure","NetworkUnavailable","allocatable","Version","nodeInfo","kubeletVersion","internalIP","IPAddress","Taints","taints","taint","KubernetesNodeTaint","effect","KubernetesNodeDetails","apiToNode","OS","Architecture","architecture","Platform","operatingSystem","osImage","node","KubernetesNodeFormValues","KubernetesNodeTaintFormValues","KubernetesNodeLabelFormValues","filteredTaints","filteredLabels","payload","KubernetesNodeCreatePayload","KubernetesNodeTaintPayload","oldNode","newNode","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","_KubernetesStatefulSet","Secret","VolumeClaims","KubernetesStatefulSet","storageClasses","KubernetesPersistentVolumeClaim","storage","storageClassName","PreviousName","charAt","existantPVC","KubernetesPersistentVolumClaimCreatePayload","oldPVC","newPVC","KubernetesResourcePoolFormValues","defaults","HasQuota","IngressClasses","ingressClass","KubernetesSecretConverter","KubernetesSecretCreatePayload","stringData","KubernetesSecretUpdatePayload","KubernetesApplicationSecret","atob","KubernetesSystem_DefaultDeploymentUniqueLabelKey","KubernetesSystem_RevisionAnnotation","KubernetesSystem_RevisionHistoryAnnotation","KubernetesSystem_ChangeCauseAnnotation","KubernetesSystem_DesiredReplicasAnnotation","KubernetesSystem_MaxReplicasAnnotation","KubernetesSystem_AnnotationsToSkip","KubernetesHorizontalPodAutoScalerConverter","KubernetesHorizontalPodAutoScaler","minReplicas","maxReplicas","targetCPUUtilizationPercentage","scaleTargetRef","TargetEntity","apiVersion","Kind","kind","KubernetesHorizontalPodAutoScalerCreatePayload","oldScaler","newScaler","_KubernetesNode","Api","_KubernetesNodeDetails","_KubernetesNodeTaint","KubernetesNodeTaintEffects","NOSCHEDULE","PREFERNOSCHEDULE","NOEXECUTE","ResourceControlTypeString","CONFIG","CONTAINER","NETWORK","SERVICE","STACK","VOLUME","CUSTOM_TEMPLATE","ResourceControlTypeInt","KubernetesConfigurationConverter","_KubernetesStorageClassAccessPolicies","Description","selected","KubernetesStorageClassAccessPolicies","_KubernetesStorageClass","Provisioner","AllowVolumeExpansion","KubernetesStorageClass","KubernetesIngressClass","_KubernetesNodeFormValues","_KubernetesNodeTaintFormValues","Values","IsChanged","_KubernetesNodeLabelFormValues","RegistryViewModel","URL","Authentication","Password","UserAccessPolicies","TeamAccessPolicies","Gitlab","RegistryManagementConfigurationDefaultModel","registry","TLS","TLSSkipVerify","TLSCACertFile","TLSCertFile","TLSKeyFile","RegistryDefaultModel","RegistryCreateRequest","ProjectId","InstanceURL","ProjectPath","_KubernetesResourceReservation","_KubernetesDeployment","KubernetesDeployment","_KubernetesDaemonSet","VoluemMounts","KubernetesDaemonSet","TeamMembershipModel","UserId","UserID","TeamId","TeamID","ContainerGroupDefaultModel","Location","OSType","AllocatePublicIP","ContainerGroupViewModel","addressPorts","properties","ipAddress","containerPorts","location","map","binding","osType","memoryInGB","CreateContainerGroupRequest","DockerNetworkHelper","configs","test","Subnet","getIPV4Configs","createStatus","statusText","indexOf","ContainerViewModel","State","Created","Names","NetworkSettings","Networks","ImageID","Command","Mounts","PublicPort","private","PrivatePort","public","Portainer","ResourceControl","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","ContainerDetailsViewModel","Model","Args","Config","HostConfig","ImageViewModel","Tag","Repository","RepoTags","RepoDigests","digest","repository","substring","VirtualSize","ContainerCount","ImageBuildModel","hasError","buildLogs","line","stream","errorDetail","publishedPort","_publishedPortToServicePort","KubernetesServiceHelper","generateHeadlessServiceName","KubernetesServiceCreatePayload","Application","clusterIP","oldService","newService","KubernetesNodeHelper","isSystemLabel","nodeSelectors","nodes","StackViewModel","EndpointId","SwarmId","External","CreatedBy","UpdateDate","UpdatedBy","ExternalStackViewModel","creationDate","EndpointGroupDefaultModel","TagIds","EndpointGroupModel","EndpointGroupCreateRequest","endpoints","AssociatedEndpoints","EndpointGroupUpdateRequest","weight","KubernetesResourceQuotaConverter","hard","used","quota","KubernetesResourceQuotaCreatePayload","KubernetesResourceQuotaUpdatePayload","KubernetesHorizontalPodAutoScalerHelper","sList","getApplicationTypeString","KubernetesApplicationTypeStrings","bytesValue","generateEnvFromEnvVariables","generateVolumesFromPersistentVolumClaims","generateEnvOrVolumesFromConfigurations","generateAffinityFromPlacements","KubernetesDeploymentCreatePayload","oldDeployment","newDeployment","KubernetesDaemonSetCreatePayload","oldDaemonSet","newDaemonSet","KubernetesStatefulSetCreatePayload","oldSFS","newSFS","_KubernetesPersistentVolumeClaim","_KubernetesVolume","KubernetesVolume","services","rawApp","computeContainerStatus","statuses","state","waiting","running","KubernetesPodConverter","containerStatuses","tolerations","nodeName","startTime","computeContainers","computeAffinity","nodeSelector","tolerationSeconds","oldPod","newPod","createPayloadFactory","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","_KubernetesNamespace","KubernetesNamespace","$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","ResourceGroupViewModel","subscriptionId","SubscriptionId","SubscriptionViewModel","displayName","ConfigViewModel","ID","UpdatedAt","Index","Spec","decodeURIComponent","split","charCodeAt","join","b64DecodeUnicode","NetworkViewModel","Scope","Attachable","Internal","IPAM","Ingress","ConfigFrom","ConfigOnly","NodeViewModel","Availability","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","Hosts","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","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","KubernetesResourcePoolConverter","_KubernetesResourceQuotaCreatePayload","_KubernetesResourceQuotaUpdatePayload","_KubernetesSecretCreatePayload","_KubernetesSecretUpdatePayload","_KubernetesApplicationSecret","KubernetesStorageClassConverter","provisioner","allowVolumeExpansion","KubernetesStorageClassCreatePayload","oldStorageClass","newStorageClass","KubernetesVolumeConverter","claim","pool","KubernetesDaemonSetHistoryHelper","crList","sameLabelsCR","controlledCR","KubernetesStatefulSetHistoryHelper","_KubernetesHorizontalPodAutoScaler","KubernetesDeployManifestTypes","KUBERNETES","COMPOSE","_KubernetesNodeCreatePayload","_KubernetesNodeTaintPayload","PortainerEndpointInitFormValues","ConnectionType","TLSSKipClientVerify","AzureApplicationId","AzureTenantId","AzureAuthenticationKey","PortainerEndpointInitFormValueEndpointSection","title","classes","Title","Classes","PortainerEndpointInitFormValueEndpointSections","SettingsViewModel","LogoURL","BlackListedLabels","AuthenticationMethod","LDAPSettings","OAuthSettings","OAuthSettingsViewModel","AllowBindMountsForRegularUsers","AllowPrivilegedModeForRegularUsers","AllowVolumeBrowserForRegularUsers","AllowHostNamespaceForRegularUsers","AllowDeviceMappingForRegularUsers","AllowStackManagementForRegularUsers","AllowContainerCapabilitiesForRegularUsers","TemplatesURL","EnableHostManagementFeatures","EdgeAgentCheckinInterval","EnableEdgeComputeFeatures","UserSessionTimeout","EnableTelemetry","PublicSettingsViewModel","settings","OAuthLoginURI","LDAPSettingsViewModel","ReaderDN","SearchSettings","GroupSearchSettings","AutoCreateUsers","LDAPSearchSettings","BaseDN","UsernameAttribute","Filter","LDAPGroupSearchSettings","GroupBaseDN","GroupAttribute","GroupFilter","ClientID","ClientSecret","AccessTokenURI","AuthorizationURI","ResourceURI","RedirectURI","UserIdentifier","Scopes","OAuthAutoCreateUsers","DefaultTeamID","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","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","RegExp","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","match","MacvlanFormData","SelectedNetworkConfig","DatatableState","selectedItems","ParentNetworkCard","VolumesCIFSFormData","useCIFS","serverAddress","share","version","versions","versionsNumber","username","password","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","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","currentValue","isFirstChange","newPageNumber","setPaginationLimit","paginatedItemLimit","filterValue","setDataTableTextFilters","start","retrievePage","then","totalFilteredDataSet","totalCount","EdgeJobFormController","formValidationError","scheduleValues","displayed","cron","datetime","moment","scheduleValue","cronMethod","method","cronRegex","action","editorUpdate","associateEndpoint","dissociateEndpoint","defaultTime","add","cronToDatetime","minutes","hours","month","formAction","cm","getValue","endpoint","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","EndpointService","limit","filter","getDynamicEndpointsAsync","getDynamicEndpoints","$watch","Dynamic","search","query","tagIds","tagsPartialMatch","PartialMatch","EdgeGroupsDatatableController","allowSelection","HasEdgeStack","CreateEdgeGroupController","EdgeGroupService","GroupService","TagService","actionInProgress","loaded","createGroup","createGroupAsync","all","endpointGroups","go","EdgeGroupsController","removeAction","removeActionAsync","remove","reload","EditEdgeGroupController","EndpointHelper","updateGroup","updateGroupAsync","group","groupId","update","CreateEdgeJobViewController","$q","EdgeJobService","createEdgeJob","createAsync","createEdgeJobFromFileContent","createEdgeJobFromFileUpload","EdgeJobController","showEditorTab","updateAsync","downloadLogs","downloadLogsAsync","collectLogs","collectLogsAsync","clearLogs","clearLogsAsync","refresh","refreshAsync","showEditor","edgeJob","updateEdgeJob","logFile","logFileName","results","jobResults","endpointIds","associateEndpointsToResults","tab","activeTab","getScriptFile","EdgeJobsViewController","deleteJobsAsync","deleteJobs","edgeJobs","CreateEdgeStackViewController","EdgeStackService","EdgeTemplateService","FormHelper","StackFile","RepositoryURL","RepositoryReferenceName","RepositoryAuthentication","RepositoryUsername","RepositoryPassword","ComposeFilePathInRepository","Method","StackType","edgeGroups","createStack","createStackAsync","validateForm","createStackByMethod","createStackFromFileContent","createStackFromFileUpload","createStackFromGitRepository","onChangeTemplate","onChangeTemplateAsync","onChangeMethod","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","_","v","op","KubernetesHistoryHelper","rawRevisions","currentRevision","revisionsList","_getDeploymentRevisions","_getDaemonSetRevisions","_getStatefulSetRevisions","appRS","filterOwnedRevisions","getCurrentRevision","filterVersionedRevisions","appCR","KubernetesStackHelper","KubernetesStack","_KubernetesStack","_KubernetesHorizontalPodAutoScalerCreatePayload","AccessControlPanelData","Ownership_Users","Ownership_Teams","AssoicatedEndpointsSelectorController","available","associated","getEndpoints","getEndpointsAsync","getAssociatedEndpoints","getAssociatedEndpointsAsync","loadData","getPaginationData","setTableData","noEndpoints","onAssociate","onDissociate","tableType","controller","CustomTemplateCommonFieldsController","platformTypes","templateTypes","DatatableColumnsVisibilityController","isOpen","UsersDatatableController","EndpointItemController","editEndpoint","stopPropagation","onEdit","tagNames","idsToTagNames","endpointTags","joinTags","GroupFormController","getPaginatedEndpointsByGroup","allowCreateTag","isAdmin","pageType","associatedEndpoints","addEndpoint","reloadTablesContent","removeEndpoint","context","endpointsByGroup","availableEndpoints","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","StackService","StateManager","AccessControlData","fromStack","createCustomTemplate","createCustomTemplateAsync","createCustomTemplateByMethod","createCustomTemplateFromFileContent","createCustomTemplateFromFileUpload","createCustomTemplateFromGitRepository","accessControlData","userDetails","getUserDetails","userId","applyResourceControl","validateAccessControl","applicationState","getState","endpointMode","stackType","provider","customTemplates","CustomTemplatesViewController","$anchorScroll","$rootScope","EndpointProvider","NetworkService","showAdvancedOptions","isEditorVisible","currentUser","getTemplates","getTemplatesAsync","removeTemplates","removeTemplatesAsync","selectTemplate","selectTemplateAsync","unselectTemplate","unselectTemplateAsync","getNetworks","getNetworksAsync","confirmDeleteAsync","isEditAllowed","CreatedByUserId","stackName","endpointID","createAction","createSwarmStackFromFileContent","createComposeStackFromFileContent","availableNetworks","customTemplateFile","templateId","confirmDeletionAsync","user","EditCustomTemplateViewController","getTemplate","getTemplateAsync","submitAction","submitActionAsync","customTemplate","updateCustomTemplate","req","require","forEach","_paq","u","document","g","createElement","getElementsByTagName","async","src","parentNode","insertBefore","$analyticsProvider","$windowProvider","$window","$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","parsed","registerExceptionTrack","autoNgTemplateLoaderTemplate1","autoNgTemplateLoaderTemplate2","autoNgTemplateLoaderTemplate3","$stateRegistryProvider","azure","abstract","onEnter","setEndpointID","setEndpointPublicURL","PublicURL","setOfflineModeFromStatus","updateEndpointState","containerInstances","views","templateUrl","containerInstanceCreation","dashboard","register","component","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","includes","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","startsWith","root","loggedIn","initialize","reject","endpointRoot","resolve","$transition$","EdgeID","account","authentication","logout","performApiLogout","endpointKubernetesConfiguration","endpointCreation","endpointAccess","groupCreation","groupAccess","home","initEndpoint","initAdmin","registries","registryCreation","registryAccess","settingsAuthentication","team","roles","html","webpackContext","webpackContextResolve","code","bindings","titleText","titleIcon","delete","isUploadAllowed","isUploadEnabled","AgentFactory","$resource","API_ENDPOINT_ENDPOINTS","getAgentApiVersion","isArray","factory","BrowseFactory","transformResponse","responseType","HostFactory","info","AgentPingFactory","interceptor","instance","resource","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","concat","ContainerGroup","Provider","ResourceGroup","Subscription","deleteAction","actionCount","allResourceGroups","allProviders","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","constant","capabilities","containerId","taskId","ctrl","editModel","save","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","agentProxy","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","getDataTableExpandedItems","showSlotColumn","showLogsButton","showBrowseAction","showUsedVolumes","showUnusedVolumes","dangling","endpointApiVersion","swarmManagement","standaloneManagement","adminAccess","toggle","currentRouteName","showStacks","hostDetails","engineDetails","devices","disks","isAgent","refreshUrl","browseUrl","hostFeaturesEnabled","engine","isBrowseEnabled","onChange","onSave","availability","removeLabel","onChangedLabels","updateLabel","NodeService","LabelHelper","managerAddress","hasChanges","$onChanges","addLabel","nodeLabels","updateNodeLabels","updateNodeAvailability","saveChanges","originalNode","fromKeyValueToLabelHash","updateNode","cancelChanges","pullWarning","autoComplete","labelClass","inputClass","onImageChange","form","porImageRegistryController","RegistryService","DockerHubService","ImageService","onInit","onRegistryChange","isKnownRegistry","getRegistryURL","registryImages","availableRegistries","reg","imagesWithoutKnown","imageContainsURL","availableImages","prepareAutocomplete","dockerhub","getUniqueTagListFromImages","displayTimestamps","logCollectionChange","sinceTimestamp","lineCount","resourceName","clipboard","availableSinceDatetime","desc","subtract","format","copySupported","supported","logCollection","autoScroll","wrapLines","filteredLogs","selectedLines","copyText","show","fadeOut","copySelection","clearSelection","selectLine","idx","log","requiredNodeSelection","requiredConfigSelection","includeString","text","val","hash","color","hashToHexColor","strToHash","labelStyle","Dead","Ghost","Paused","imageName","ConstraintsHelper","availableNodes","matchesServiceConstraints","tasks","totalImageSize","nodeId","createdBy","flattenConfig","ConfigID","ConfigName","FileName","Uid","UID","Gid","GID","configConfig","ConstraintModel","patterns","nodeHostname","nodeRole","eq","neq","matchesConstraint","constraint","matchesLabel","extractValue","pop","trim","extractCustomLabelKey","baseLabelKey","transformConstraints","constraints","transform","portPattern","parsePort","parsePortRange","portRange","stringPorts","intPorts","isValidPortRange","createPortRange","portRangeText","hostIp","colonIndex","substr","startPort","endPort","helper","splitargs","array","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","getImagesNamesForDownload","ControlAvailable","fromLabelHashToKeyValue","labelKV","skipHeaders","nodeToConfig","flattenSecret","SecretID","SecretName","secretConfig","otherServicesTasks","EndpointSpec","keyValuePreferences","preferences","Spread","SpreadDescriptor","keyValueConstraints","variables","variable","keyValue","operatorIndices","indexEquals","getOperator","humanDuration","nanos","matches","duration","unit","asMilliseconds","conversionFromNano","logOptions","keyValueLogDriverOpts","option","entries","ipHostEntries","Container","optionArray","mounts","rejection","SnapshotRaw","Info","buildImage","ignoreLoadingBar","buildImageOverride","commitContainer","repo","ContainersInterceptor","stop","restart","kill","pause","unpause","top","force","exec","inspect","prune","resize","h","w","ImagesInterceptor","history","insert","registryAuthenticationHeader","NetworksInterceptor","connect","disconnect","rollback","InfoInterceptor","VersionInterceptor","since","until","auth","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","stripHeaders","parameters","formatLogs","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","onerror","onclose","containerCommands","connectAttach","attachId","token","href","connectExec","isCustomCommand","customCommand","AttachStdin","AttachStdout","AttachStderr","Tty","commandStringToArray","close","dispose","autoconnectAttachView","initView","containerLabels","imageOS","getContainers","$filter","SettingsService","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","prepareEnvironmentVariables","prepareVolumes","prepareLabels","Devices","pathOnHost","pathInContainer","PathOnHost","PathInContainer","CgroupPermissions","prepareDevices","memoryLimit","round","toFixed","MemoryReservation","memoryReservation","NanoCpus","prepareResources","logOpts","LogConfig","opt","constructor","prepareLogDriver","notAllowed","getCapName","CapAdd","CapDrop","prepareCapabilities","loadFromContainerSpec","logConfig","configFromContainer","commandArrayToString","sortAndCombinePorts","loadFromContainerVolumes","netContainer","runningContainers","fromContainerMultipleNetworks","firstNetwork","extraNetworks","extraHosts","loadFromContainerNetworkConfig","envArr","arr","loadFromContainerEnvironmentVariables","loadFromContainerLabels","dev","loadFromContainerDevices","retrievePorRegistryModelFromRepository","loadFromContainerResources","hasCapability","loadFromContainerCapabilities","shouldShowDevices","showDeviceMapping","checkIfContainerCapabilitiesEnabled","areContainerCapabilitiesEnabled","isAdminOrEndpointAdmin","availableVolumes","vol1","vol2","localeCompare","availableRuntimes","Runtimes","sliderMaxCpu","NCPU","sliderMaxMemory","MemTotal","publicSettings","allowBindMounts","allowPrivilegedMode","loggingDrivers","availableLoggingDrivers","allowDeviceMappingForRegularUsers","allowContainerCapabilitiesForRegularUsers","oldContainer","findCurrentContainer","confirm","buttons","className","callback","alwaysPull","pullImageIfNeeded","stopAndRenameContainer","createNewContainer","connectToExtraNetworks","removeOldContainer","onSuccess","onCreationProcessFail","restoreOldContainerName","restoreError","stopContainerIfNeeded","newContainer","newContainerId","connectionPromises","networkName","connectContainer","refreshSlider","$broadcast","onImageNameChange","PublishAllPorts","AutoRemove","Init","addVolume","removeVolume","addEnvironmentVariable","removeEnvironmentVariable","addExtraHost","removeExtraHost","addDevice","removeDevice","addLogDriverOpt","removeLogDriverOpt","resetNetworkConfig","Commit","activityTime","displayRecreateButton","commitInProgress","recreateContainerInProgress","joinNetworkInProgress","leaveNetworkInProgress","edit","StartedAt","utc","diff","humanize","FinishedAt","portMapping","inSwarm","autoRemove","admin","allowHostNamespaceForRegularUsers","allowBindMountsForRegularUsers","allowPrivilegedModeForRegularUsers","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","updateCPUChart","possIntervals","parseFloat","valueOf","windowsCpuUsage","calculateCPUPercentWindows","cpuPercent","cpuDelta","systemDelta","calculateCPUPercentUnix","UpdateCPUChart","networkChart","cpuChart","memoryChart","processInfo","initCharts","networkChartCtx","CreateNetworkChart","cpuChartCtx","CreateCPUChart","memoryChartCtx","CreateMemoryChart","networkStatsUnavailable","startChartUpdate","changeUpdateRepeater","VolumeService","shouldShowStacks","volumeCount","networkCount","serviceCount","stackCount","find","Boolean","allowStackManagementForRegularUsers","dismissInformationPanel","enableHostManagementFeatures","jobs","versionDetails","releaseVersion","rootDirectory","DockerRootDir","storageDriver","loggingDriver","LoggingDriver","buildEngineDetails","os","arch","OperatingSystem","kernelVersion","KernelVersion","totalCPU","totalMemory","agentHostInfo","PCIDevices","PhysicalDisks","BuildService","BuildType","ImageNames","UploadFile","DockerFileContent","addImageName","removeImageName","buildType","imageNames","dockerfilePath","buildImageFromUpload","buildImageFromURL","dockerfileContent","buildImageFromDockerfileContent","buildImageBasedOnBuildType","validImageNames","sortType","sortReverse","toggleLayerCommand","layerId","toggleClass","pushTag","hide","pullTag","removeTag","removeImage","exportImage","warning","confirmImageExport","getImages","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","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","translateEnvironmentVariablesToEnv","ServiceContainerLabels","Editable","ServiceSecrets","ServiceConfigs","translateHostnameIPToHostsEntries","ServiceMounts","ServiceConstraints","ServicePreferences","translateKeyValueToLogDriverOpts","isUpdating","transformResources","translateEnvironmentVariables","translateLogDriverOptsToKeyValue","translateConstraintsToKeyValue","translatePreferencesToKeyValue","translateHostsEntriesToHostnameIP","translateServiceArrays","translateNanosToHumanDuration","transformDurations","serviceNetworks","ingressNetwork","unshift","addr","webhook","WebhookExists","webhookID","webhookURL","returnWebhookUrl","associateContainerToTask","associateTasksToService","override","updateServiceArray","goToItem","updateEnvironmentVariable","serviceConfig","updateConfig","newSecret","filename","serviceSecret","updateContainerLabel","addMount","removeMount","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","enableVolumeBrowserForNonAdminUsers","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","bytes","precision","isFinite","number","pow","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","backgroundColor","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","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","onChangeKey","chardet","detect","Buffer","decoder","TextDecoder","isBinary","stringValue","decode","Base64","encode","temporaryFileReader","FileReader","onload","readAsArrayBuffer","parseYaml","parseData","currentState","cpuLimit","KubernetesResourceReservationController","cpuUsage","memoryUsage","usageValues","viewReady","KubernetesYamlInspectorController","KubernetesEndpointService","KubernetesEndpoints","getAllAsync","apiToEndpoint","KUBERNETES_SYSTEM_NAMESPACES","getYaml","Accept","KubernetesHorizontalPodAutoScalerService","KubernetesHorizontalPodAutoScalers","patchAsync","deleteAsync","raw","horizontalPodAutoScaler","oldHorizontalPodAutoScaler","newHorizontalPodAutoScaler","patchPayload","KubernetesIngressService","KubernetesIngresses","oldIngress","newIngress","KubernetesNodeService","KubernetesNodes","apiToNodeDetails","nodeFormValues","formValuesToNode","KubernetesPodService","KubernetesPods","logsAsync","podName","KubernetesApplicationService","KubernetesDeploymentService","KubernetesDaemonSetService","KubernetesStatefulSetService","KubernetesServiceService","KubernetesSecretService","KubernetesPersistentVolumeClaimService","KubernetesNamespaceService","KubernetesHistoryService","patchPartialAsync","rollbackAsync","apiService","oldIngresses","newIngresses","newIng","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","applicationFormValuesToApplication","applicationFormValuesToIngresses","_generateIngressPatchPromises","_getApplicationApiService","claimPromises","applicationFormValuesToModel","oldFormValues","newFormValues","oldApp","oldHeadlessService","oldClaims","newApp","newHeadlessService","newClaims","oldApiService","newApiService","newClaim","oldClaim","newKind","newAutoScaler","oldKind","oldAutoScaler","oldAppPayload","newAppPayload","oldValues","newValues","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","StorageClasses","apiToPersistentVolumeClaim","KubernetesReplicaSets","KubernetesResourcePoolService","KubernetesResourceQuotaService","quotaAttempt","apiToResourcePool","pools","Owner","ingressPromises","resourcePoolIngressClassFormValueToIngress","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","updateSlidersAsync","refreshStacksAsync","refreshConfigurationsAsync","refreshApplicationsAsync","refreshNamespaceDataAsync","getApplicationAsync","existingApplication","alreadyExists","isEdit","onChangeConfigurationPath","duplicates","configurationPaths","uniqOverridenKeysPath","duplicatePaths","overridenKey","keyIndex","findPath","onChangeEnvironmentName","environmentVariables","resetDeploymentType","onChangePersistedFolderPath","onChangeExistingVolumeSelection","existingVolumes","PersistedFoldersUseExistingVolumes","onChangePlacement","onChangePlacementLabelValidate","filteredIngresses","onChangePublishedPorts","onChangePortMappingContainerPort","onChangePortMappingNodePort","onChangePortMappingIngressRoute","onChangePortMappingLoadBalancer","onChangePortProtocol","nodePorts","ingressRoutes","newRoutes","toDelRoutes","allRoutes","loadBalancerPorts","newPorts","hasFolders","hasRWOOnly","isIsolated","storageOptions","sliders","instances","maxCpu","useLoadBalancer","changes","savedFormValues","editChanges","change","toDelPorts","toKeepPorts","scalable","supportScalableReplicaDeployment","global","supportGlobalDeployment","replica","replicated","overflow","resourceReservationsOverflow","autoScalerOverflow","inProgress","invalid","hasNoChanges","isEditAndNoChangesMade","nonScalable","isNonScalable","notInternalNoPorts","isNotInternalAndHasNoPublishedPorts","disableLoadBalancerEdit","isEditAndNotNewPublishedPort","isEditLBWithPorts","isNewAndNotFirst","resourcePoolHasQuota","minCpu","minMemory","filteredVolumes","isSameNamespace","isUnused","isRWX","am","publishViaIngressEnabled","refreshStacks","refreshConfigurations","refreshApplications","refreshIngresses","refreshVolumes","onChangeName","clearConfigurations","resetPersistedFolders","resetPublishedPorts","updateSliders","refreshNamespaceData","resetFormValues","useServerMetrics","availableSizeUnits","UseLoadBalancer","UseServerMetrics","resourcePool","storageClassAvailable","generateNodeLabelsFromNodes","getApplication","applicationToFormValues","vol","OriginalIngressClasses","computePlacements","UnmatchedNodeSelectorLabels","AcceptsApplication","unmatchedTerms","unmatchedExpressions","exists","isIn","UnmatchedNodeAffinities","computeAffinities","UnmetTaints","matchKeyMatchValueMatchEffect","matchKeyAnyValueMatchEffect","matchKeyMatchValueAnyEffect","matchKeyAnyValueAnyEffect","anyKeyAnyValueAnyEffect","computeTolerations","KubernetesApplicationController","getEvents","getEventsAsync","redeployApplicationAsync","rollbackApplicationAsync","copyLoadBalancerIP","selectTab","eventWarningCount","eventsLoading","warningCount","dataLoading","allContainers","associateAllContainersAndApplication","expandedNote","SelectedRevision","useIngress","placementWarning","DisplayedPanel","KubernetesApplicationLogsController","getApplicationLogsAsync","applicationLogs","KubernetesClusterController","getNodesAsync","getComponentStatus","getComponentStatusAsync","componentStatuses","hasUnhealthyComponentStatus","systemEndpoints","ep","kubernetesEndpoint","ips","CPULimit","applicationsLoading","nodeNames","resourceReservation","computeResourceReservation","KubernetesNodeController","getNodeAsync","updateNodeAsync","duplicateTaintKeys","hasDuplicateTaintKeys","onChangeTaint","onChangeTaintKey","duplicateLabelKeys","hasDuplicateLabelKeys","onChangeLabel","onChangeLabelKey","isNoChangesMade","nodeToFormValues","taintsWarning","computeTaintsWarning","labelsWarning","computeLabelsWarning","availableEffects","computeUsedLabels","reorderLabels","KubernetesConfigurationsController","getConfigurations","getConfigurationsAsync","refreshCallbackAsync","configurationsLoading","setConfigurationsUsed","KubernetesCreateConfigurationController","createConfigurationAsync","filteredConfigurations","alreadyExist","uniqueCheck","isDataValid","KubernetesConfigurationController","getConfigurationAsync","updateConfiguration","updateConfigurationAsync","plural","configurationLoading","getConfiguration","KubernetesConfigureController","IngressClassTypes","configureAsync","valid","onChangeIngressClass","ingressClasses","transformFormValues","assignFormValuesToEndpoint","storagePromises","oldStorageClasses","modifiedEndpoint","setEndpoints","displayConfigureClassPanel","availableAccessModes","sc","access","KubernetesDashboardController","getAll","KubernetesDeployController","deployAsync","getNamespacesAsync","EditorContent","errorLog","stripAnsi","tabLogsDisabled","compose","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","allHosts","allIngresses","isQuotaValid","isAlreadyExist","checkDefaults","ingressesLoading","canUseIngress","getResourcePools","getIngresses","ingressClassesToFormValues","KubernetesResourcePoolController","createResourceQuotaAsync","updateResourcePoolAsync","otherIngresses","oldQuota","willBeDeleted","warnings","hasResourceQuotaBeenReduced","messages","displayedMessage","ing","cpuUsed","memoryUsed","isEditable","KubernetesResourcePoolsController","colors","KubernetesStackLogsController","generateLogsPromise","generateAppPromise","getStackLogsAsync","Pod","Logs","filteredApplications","logsPromises","Color","Line","AppName","stackLogs","dataLogs","KubernetesVolumeController","getVolumeAsync","updateVolumeAsync","volumeSize","volumeSizeUnit","oldVolumeSize","volumeSizeError","redeploy","oldVolume","confirmRedeploy","increaseSize","volumeSharedAccessPolicy","volumeSharedAccessPolicyTooltip","policy","buildStorages","storages","hasT","hasG","hasM","computeSize","KubernetesVolumesController","getVolumesAsync","inheritFrom","changeOrderBy","orderField","entryClick","emptyDatasetMessage","formData","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","onFilterChange","authenticationMethod","onSelect","totalFilteredEndpoints","filteredEndpoints","changesObj","handleEndpointsChange","paginationChangedAction","keywords","statusString","lowerCaseKeyword","GroupName","tagId","frontEndpointFilter","pageChangeHandler","dashboardAction","snapshotAction","showSnapshotAction","editAction","sortGroups","groupEndpoints","availableGroups","TLSConfig","CACert","cert","availableTags","onCreateTag","disableSelection","retrieveRegistries","createRegistries","projects","resetDefaults","createTemplate","advanced","showTypeSelector","collapseTemplate","collapseContainer","collapseStack","collapseEnv","addEnvVar","default","removeEnvVar","addEnvVarValue","removeEnvVarValue","changeEnvVarType","onPageChanged","paginationState","onPaginationLimitChanged","tagIdsToTagNames","groupIdToGroupName","showTags","showGroups","requires","ngModel","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","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","timestamp","pair","separator","findAssociatedGroup","mapGroupNameToEndpoint","PREDEFINED_NETWORKS","userIds","teamIds","userMemberships","isTeamLeader","membership","getExternalStacksFromLabel","getExternalStacksFromContainers","getExternalStacksFromServices","portConfiguration","exposedPorts","labelsArray","templateEnvironment","interactiveFlag","consoleConfiguration","generatedVolumesPile","count","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","CustomTemplatesFactory","API_ENDPOINT_CUSTOM_TEMPLATES","API_ENDPOINT_DOCKERHUB","API_ENDPOINT_REGISTRIES","baseUrl","repositories","API_ENDPOINT_ENDPOINT_GROUPS","deregister","API_ENDPOINT_MOTD","configure","API_ENDPOINT_RESOURCE_CONTROLS","API_ENDPOINT_SETTINGS","subResource","checkLDAPConnectivity","API_ENDPOINT_STACKS","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","CustomTemplateServiceFactory","CustomTemplates","DockerHub","uploadTLSFilesForEndpoint","notify","createEndpoint","creationType","groupID","TLSSkipClientVerify","TLSCAFile","checkinInterval","endpointURL","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","kubernetesDeployAsync","ComposeFormat","migrateSwarmStack","targetEndpointId","SwarmID","migrateComposeStack","queries","composeStacks","swarmStacks","externalSwarmStacks","externalComposeStacks","includeExternalStacks","externalStacks","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","clean","cleanAuthData","storeLoginStateUUID","OAuthLoginAsync","loginAsync","storeJWT","tokenPayload","decodeToken","OAuthLogin","isAuthenticated","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","storeDataTableSettings","storeDataTableTextFilters","storeDataTableFilters","storeDataTableOrder","storeDataTableExpandedItems","storeColumnVisibilitySettings","storeDataTableSelectedItems","getDataTableSelectedItems","getEndpointID","getEndpointPublicURL","getOfflineMode","OfflineMode","cleanEndpointData","storeEndpointID","storeEndpointPublicURL","storeEndpoints","isOffline","storeOfflineMode","RetryCount","RetryInterval","swarmId","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","storeJobImage","getJobImage","storeToolbarToggle","getToolbarToggle","storeLogoutReason","getLogoutReason","cleanLogoutReason","clearAll","$sanitize","applyBoxCSS","box","css","confirmButtons","customPrompt","optionToggled","bootbox","prompt","inputType","inputOptions","prepend","prop","enlargeImage","dialog","onEscape","confirmAsync","cancelRegistryRepositoryAction","confirmEndpointSnapshot","fallbackText","paginationLimit","storedLimit","_getProjectsPage","page","projectsAsync","_getRepositoriesPage","repositoriesAsync","projectId","InfoHelper","StatusService","APPLICATION_CACHE_VALIDITY","$analytics","manager","UI","dismissedInfoPanels","dismissedInfoHash","loadApplicationState","enableTelemetry","snapshotInterval","enableEdgeComputeFeatures","validity","assignStateFromStatusAndSettings","setOptOut","setVersionInfo","versionInfo","versionStatus","dismissImportantInformation","updateLogo","logoURL","updateSnapshotInterval","updateEnableHostManagementFeatures","updateEnableVolumeBrowserForNonAdminUsers","updateEnableEdgeComputeFeatures","updateAllowHostNamespaceForRegularUsers","updateAllowDeviceMappingForRegularUsers","updateAllowStackManagementForRegularUsers","updateAllowContainerCapabilitiesForRegularUsers","updateAllowBindMountsForRegularUsers","updateAllowPrivilegedModeForRegularUsers","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","onCreateTagAsync","tagName","createRemoteEndpoint","EnvironmentType","PlatformType","deploymentTab","availableEdgeAgentCheckinOptions","SecurityFormData","copyAgentCommand","setDefaultPortainerInstanceURL","resetEndpointURL","addDockerEndpoint","ConnectSocket","endpointName","createLocalEndpoint","securityData","addKubernetesEndpoint","createLocalKubernetesEndpoint","addAgentEndpoint","addEdgeAgentEndpoint","addAzureEndpoint","buildWindowsStandaloneCommand","edgeId","edgeKey","buildLinuxSwarmCommand","buildWindowsSwarmCommand","azureEndpoint","agentEndpoint","edgeEndpoint","platformType","copyEdgeAgentDeploymentCommand","randomEdgeID","EdgeKey","copyEdgeAgentKey","EdgeCheckinInterval","AzureCredentials","ApplicationID","TenantID","AuthenticationKey","endpointType","evt","edgeKeyDetails","keyInformation","decodedKey","instanceURL","tunnelServerAddr","decodeEdgeKey","dockerCommands","linuxStandalone","windowsStandalone","linuxSwarm","windowsSwarm","EndpointsController","deleteEndpoint","GroupsController","deleteGroup","MotdService","connectingToEdgeEndpoint","goToEdit","goToDashboard","snapshotEndpoints","ConfirmPassword","createAdminUser","initAdministrator","InitEndpointController","createLocalEndpointAsync","createLocalKubernetesEndpointAsync","createAgentEndpointAsync","endpointSections","createAgentEndpoint","routeName","LogoutController","getWidth","innerWidth","newValue","toggleValue","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","restrictBindMounts","restrictPrivilegedMode","enableVolumeBrowser","restrictHostNamespaceForRegularUsers","disableContainerCapabilitiesForRegularUsers","isContainerEditDisabled","disableDeviceMappingForRegularUsers","removeFilteredContainerLabel","addFilteredContainerLabel","saveApplicationSettings","disableStackManagementForRegularUsers","checkPermissions","isLeader","uiVersion","removeInvalidEnvVars","composeSyntaxMaxVersion","ComposeSyntaxMaxVersion","stopStackAsync","startStackAsync","loadStack","resourcesPromise","retrieveSwarmStackResources","retrieveComposeStackResources","assignSwarmStackResources","assignComposeStackResources","stackFilter","loadExternalStack","loadExternalSwarmStack","loadExternalComposeStack","externalStack","migrateRequest","originalEndpointId","removeStack","stopStack","startStack","StacksController","loadCreateEnabled","appState","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","createUser","deleteSelectedUsers","assignTeamLeaders"],"mappings":"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","file":"main.a008f0cabf77d54ffb1c.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([467,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 * as _ 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 res.value = item.Value;\n return res;\n });\n return env;\n }\n\n static generateEnvVariablesFromEnv(env) {\n const envVariables = _.map(env, (item) => {\n if (!item.value) {\n return;\n }\n const res = new KubernetesApplicationEnvironmentVariableFormValue();\n res.Name = item.name;\n res.Value = item.value;\n res.IsNew = false;\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) {\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 }\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.slice(0, -2));\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 /* #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 _ 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);\n if (_.endsWith(cpu, 'm')) {\n res /= 1000;\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","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.SHARED,\n PersistedFolders: [], // KubernetesApplicationPersistedFolderFormValue list\n Configurations: [], // KubernetesApplicationConfigurationFormValue list\n PublishingType: KubernetesApplicationPublishingTypes.INTERNAL,\n PublishedPorts: [], // KubernetesApplicationPublishedPortFormValue list\n PlacementType: KubernetesApplicationPlacementTypes.PREFERRED,\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});\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 };\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 KubernetesFormValueDuplicate() {\n return {\n refs: {},\n hasDuplicates: false,\n };\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","// 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 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 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 * 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 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\nexport const KubernetesPodContainerTypes = {\n INIT: 1,\n APP: 2,\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';\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}\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","import _ from 'lodash-es';\n\nclass KubernetesFormValidationHelper {\n static getDuplicates(names) {\n const groupped = _.groupBy(names);\n const res = {};\n _.forEach(names, (name, index) => {\n if (groupped[name].length > 1 && name) {\n res[index] = name;\n }\n });\n return res;\n }\n}\nexport default KubernetesFormValidationHelper;\n","import * as _ from 'lodash-es';\nimport * as JsonPatch from 'fast-json-patch';\n\nimport KubernetesCommonHelper from 'Kubernetes/helpers/commonHelper';\nimport { KubernetesResourcePoolIngressClassAnnotationFormValue, KubernetesResourcePoolIngressClassFormValue } 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 // TODO: refactor @LP\n // currently only allows the first non-empty host to be used as the \"configured\" host.\n // As we currently only allow a single host to be used for a Portianer-managed ingress\n // it's working as the only non-empty host will be the one defined by the admin\n // but it will take a random existing host for non Portainer ingresses (CLI deployed)\n // Also won't support multiple hosts if we make it available in the future\n static apiToModel(data) {\n let host = undefined;\n const paths = _.flatMap(data.spec.rules, (rule) => {\n host = host || rule.host; // TODO: refactor @LP - read above\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.Host = host;\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.Host = formValues.Host;\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 passed for RP EDIT VIEW\n */\n static ingressClassesToFormValues(ics, ingresses) {\n const res = _.map(ics, (ic) => {\n const fv = new KubernetesResourcePoolIngressClassFormValue();\n fv.IngressClass = ic;\n const ingress = _.find(ingresses, { Name: ic.Name });\n if (ingress) {\n fv.Selected = true;\n fv.WasSelected = true;\n fv.Host = ingress.Host;\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 }\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 groups = _.groupBy(data.Paths, 'Host');\n const rules = _.map(groups, (paths, host) => {\n const rule = new KubernetesIngressRuleCreatePayload();\n\n if (host === 'undefined' || _.isEmpty(host)) {\n host = data.Host;\n }\n if (host === data.PreviousHost && host !== data.Host) {\n host = data.Host;\n }\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 return rule;\n });\n KubernetesCommonHelper.assignOrDeleteIfEmpty(res, 'spec.rules', rules);\n } else if (data.Host) {\n res.spec.rules = [{ host: data.Host }];\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","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 { 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 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 { 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 RegistryTypes = Object.freeze({\n QUAY: 1,\n AZURE: 2,\n CUSTOM: 3,\n GITLAB: 4,\n});\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","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 * as _ 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 res.Image = containers[0].image;\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) {\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);\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 = _.find(claims, (item) => _.includes(item.StorageClass.AccessModes, 'RWX')) !== undefined;\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","/////////////////////////// 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","import KubernetesResourceQuotaHelper from 'Kubernetes/helpers/resourceQuotaHelper';\n\nexport const KubernetesPortainerResourceQuotaPrefix = 'portainer-rq-';\n\nexport const KubernetesResourceQuotaDefaults = {\n CpuLimit: 0,\n MemoryLimit: 0,\n};\n\n/**\n * KubernetesResourceQuota Model\n */\nconst _KubernetesResourceQuota = Object.freeze({\n Id: '',\n Namespace: '',\n Name: '',\n CpuLimit: KubernetesResourceQuotaDefaults.CpuLimit,\n MemoryLimit: KubernetesResourceQuotaDefaults.MemoryLimit,\n CpuLimitUsed: KubernetesResourceQuotaDefaults.CpuLimit,\n MemoryLimitUsed: KubernetesResourceQuotaDefaults.MemoryLimit,\n Yaml: '',\n ResourcePoolName: '',\n ResourcePoolOwner: '',\n});\n\nexport class KubernetesResourceQuota {\n constructor(namespace) {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesResourceQuota)));\n if (namespace) {\n this.Name = KubernetesResourceQuotaHelper.generateResourceQuotaName(namespace);\n this.Namespace = namespace;\n }\n }\n}\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 _ from 'lodash-es';\n\nimport { KubernetesNode, KubernetesNodeDetails, KubernetesNodeTaint } 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 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.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 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 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","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","/**\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","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.replace('i', '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) + 'i';\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) + 'i';\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.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","export function KubernetesResourcePoolFormValues(defaults) {\n return {\n MemoryLimit: defaults.MemoryLimit,\n CpuLimit: defaults.CpuLimit,\n HasQuota: true,\n IngressClasses: [], // KubernetesResourcePoolIngressClassFormValue\n };\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 Host: undefined,\n Selected: false,\n WasSelected: false,\n AdvancedConfig: false,\n };\n}\n\nexport function KubernetesResourcePoolIngressClassAnnotationFormValue() {\n return {\n Key: '',\n Value: '',\n };\n}\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","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","/**\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});\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 KubernetesNodeTaintEffects = Object.freeze({\n NOSCHEDULE: 'NoSchedule',\n PREFERNOSCHEDULE: 'PreferNoSchedule',\n NOEXECUTE: 'NoExecute',\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});\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});\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 { KubernetesPortainerResourceQuotaPrefix } from 'Kubernetes/models/resource-quota/models';\n\nclass KubernetesResourceQuotaHelper {\n static generateResourceQuotaName(name) {\n return KubernetesPortainerResourceQuotaPrefix + name;\n }\n}\n\nexport default KubernetesResourceQuotaHelper;\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 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});\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}\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}\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","/**\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","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","export 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}\n\nexport function ContainerGroupViewModel(data) {\n const addressPorts = 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.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.type === 'Public';\n this.CPU = container.properties.resources.requests.cpu;\n this.Memory = container.properties.resources.requests.memoryInGB;\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}\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 * as _ 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.Application;\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 _ 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","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.Checked = false;\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.External = false;\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\nexport function ExternalStackViewModel(name, type, creationDate) {\n this.Name = name;\n this.Type = type;\n this.External = true;\n this.Checked = false;\n this.CreationDate = creationDate;\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 filesizeParser from 'filesize-parser';\n\nimport { KubernetesResourceQuota } from 'Kubernetes/models/resource-quota/models';\nimport { KubernetesResourceQuotaCreatePayload, KubernetesResourceQuotaUpdatePayload } 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';\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['limits.cpu']) {\n res.CpuLimit = KubernetesResourceReservationHelper.parseCPU(data.spec.hard['limits.cpu']);\n }\n if (data.spec.hard && data.spec.hard['limits.memory']) {\n res.MemoryLimit = filesizeParser(data.spec.hard['limits.memory'], { base: 10 });\n }\n\n res.MemoryLimitUsed = 0;\n if (data.status.used && data.status.used['limits.memory']) {\n res.MemoryLimitUsed = filesizeParser(data.status.used['limits.memory'], { base: 10 });\n }\n\n res.CpuLimitUsed = 0;\n if (data.status.used && data.status.used['limits.cpu']) {\n res.CpuLimitUsed = KubernetesResourceReservationHelper.parseCPU(data.status.used['limits.cpu']);\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 res.spec.hard['requests.cpu'] = quota.CpuLimit;\n res.spec.hard['requests.memory'] = quota.MemoryLimit;\n res.spec.hard['limits.cpu'] = quota.CpuLimit;\n res.spec.hard['limits.memory'] = quota.MemoryLimit;\n res.metadata.labels[KubernetesPortainerResourcePoolNameLabel] = quota.ResourcePoolName;\n if (quota.ResourcePoolOwner) {\n res.metadata.labels[KubernetesPortainerResourcePoolOwnerLabel] = quota.ResourcePoolOwner;\n }\n if (!quota.CpuLimit || quota.CpuLimit === 0) {\n delete res.spec.hard['requests.cpu'];\n delete res.spec.hard['limits.cpu'];\n }\n if (!quota.MemoryLimit || quota.MemoryLimit === 0) {\n delete res.spec.hard['requests.memory'];\n delete res.spec.hard['limits.memory'];\n }\n return res;\n }\n\n static updatePayload(quota) {\n const res = new KubernetesResourceQuotaUpdatePayload();\n res.metadata.name = quota.Name;\n res.metadata.namespace = quota.Namespace;\n res.metadata.uid = quota.Id;\n res.spec.hard['requests.cpu'] = quota.CpuLimit;\n res.spec.hard['requests.memory'] = quota.MemoryLimit;\n res.spec.hard['limits.cpu'] = quota.CpuLimit;\n res.spec.hard['limits.memory'] = quota.MemoryLimit;\n res.metadata.labels[KubernetesPortainerResourcePoolNameLabel] = quota.ResourcePoolName;\n if (quota.ResourcePoolOwner) {\n res.metadata.labels[KubernetesPortainerResourcePoolOwnerLabel] = quota.ResourcePoolOwner;\n }\n if (!quota.CpuLimit || quota.CpuLimit === 0) {\n delete res.spec.hard['requests.cpu'];\n delete res.spec.hard['limits.cpu'];\n }\n if (!quota.MemoryLimit || quota.MemoryLimit === 0) {\n delete res.spec.hard['requests.memory'];\n delete res.spec.hard['limits.memory'];\n }\n return res;\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","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","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 { createPayloadFactory } from './payloads/create';\nimport { KubernetesPod, KubernetesPodToleration, KubernetesPodAffinity, KubernetesPodContainer, KubernetesPodContainerTypes } from './models';\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.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 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","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","/**\n * KubernetesNamespace Model\n */\nconst _KubernetesNamespace = Object.freeze({\n Id: '',\n Name: '',\n CreationDate: '',\n Status: '',\n Yaml: '',\n ResourcePoolName: '',\n ResourcePoolOwner: '',\n});\n\nexport class KubernetesNamespace {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesNamespace)));\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","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 { 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","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 { KubernetesResourcePool } from 'Kubernetes/models/resource-pool/models';\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\nexport default KubernetesResourcePoolConverter;\n","import { KubernetesCommonMetadataPayload } from 'Kubernetes/models/common/payloads';\n\n/**\n * KubernetesResourceQuotaCreatePayload Model\n */\nconst _KubernetesResourceQuotaCreatePayload = Object.freeze({\n metadata: new KubernetesCommonMetadataPayload(),\n spec: {\n hard: {\n 'requests.cpu': 0,\n 'requests.memory': 0,\n 'limits.cpu': 0,\n 'limits.memory': 0,\n },\n },\n});\n\nexport class KubernetesResourceQuotaCreatePayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesResourceQuotaCreatePayload)));\n }\n}\n\n/**\n * KubernetesResourceQuotaUpdatePayload Model\n */\nconst _KubernetesResourceQuotaUpdatePayload = Object.freeze({\n metadata: new KubernetesCommonMetadataPayload(),\n spec: {\n hard: {\n 'requests.cpu': 0,\n 'requests.memory': 0,\n 'limits.cpu': 0,\n 'limits.memory': 0,\n },\n },\n});\n\nexport class KubernetesResourceQuotaUpdatePayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesResourceQuotaUpdatePayload)));\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 { KubernetesStorageClass } from 'Kubernetes/models/storage-class/models';\nimport { KubernetesStorageClassCreatePayload } from 'Kubernetes/models/storage-class/payload';\nimport * as JsonPatch from 'fast-json-patch';\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","export const KubernetesDeployManifestTypes = Object.freeze({\n KUBERNETES: 1,\n COMPOSE: 2,\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.AllowBindMountsForRegularUsers = data.AllowBindMountsForRegularUsers;\n this.AllowPrivilegedModeForRegularUsers = data.AllowPrivilegedModeForRegularUsers;\n this.AllowVolumeBrowserForRegularUsers = data.AllowVolumeBrowserForRegularUsers;\n this.AllowHostNamespaceForRegularUsers = data.AllowHostNamespaceForRegularUsers;\n this.AllowDeviceMappingForRegularUsers = data.AllowDeviceMappingForRegularUsers;\n this.AllowStackManagementForRegularUsers = data.AllowStackManagementForRegularUsers;\n this.AllowContainerCapabilitiesForRegularUsers = data.AllowContainerCapabilitiesForRegularUsers;\n this.SnapshotInterval = data.SnapshotInterval;\n this.TemplatesURL = data.TemplatesURL;\n this.EnableHostManagementFeatures = data.EnableHostManagementFeatures;\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.AllowBindMountsForRegularUsers = settings.AllowBindMountsForRegularUsers;\n this.AllowPrivilegedModeForRegularUsers = settings.AllowPrivilegedModeForRegularUsers;\n this.AllowVolumeBrowserForRegularUsers = settings.AllowVolumeBrowserForRegularUsers;\n this.AllowDeviceMappingForRegularUsers = settings.AllowDeviceMappingForRegularUsers;\n this.AllowStackManagementForRegularUsers = settings.AllowStackManagementForRegularUsers;\n this.AllowContainerCapabilitiesForRegularUsers = settings.AllowContainerCapabilitiesForRegularUsers;\n this.AllowHostNamespaceForRegularUsers = settings.AllowHostNamespaceForRegularUsers;\n this.AuthenticationMethod = settings.AuthenticationMethod;\n this.EnableHostManagementFeatures = settings.EnableHostManagementFeatures;\n this.EnableEdgeComputeFeatures = settings.EnableEdgeComputeFeatures;\n this.LogoURL = settings.LogoURL;\n this.OAuthLoginURI = settings.OAuthLoginURI;\n this.EnableTelemetry = settings.EnableTelemetry;\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}\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 As an administrator user, you have access to the advanced deployment feature allowing 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;","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","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","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 }\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 this.model.StackFileContent = cm.getValue();\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, EdgeJobService, GroupService, Notifications, TagService) {\n this.state = {\n actionInProgress: 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.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.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 $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}\n","import _ from 'lodash-es';\n\nexport class EdgeJobController {\n /* @ngInject */\n constructor($async, $q, $state, EdgeJobService, EndpointService, FileSaver, GroupService, HostBrowserService, Notifications, TagService) {\n this.state = {\n actionInProgress: false,\n showEditorTab: false,\n };\n\n this.$async = $async;\n this.$q = $q;\n this.$state = $state;\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.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 $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.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}\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, EdgeStackService, EdgeGroupService, EdgeTemplateService, Notifications, FormHelper, $async) {\n Object.assign(this, { $state, 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 };\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 }\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\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.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 editorUpdate(cm) {\n this.formValues.StackFileContent = cm.getValue();\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, EdgeGroupService, EdgeStackService, EndpointService, Notifications) {\n this.$async = $async;\n this.$state = $state;\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 };\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 } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve stack data');\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.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 * as _ 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';\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 { 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 $onInit() {\n this.endpointTags = this.joinTags();\n }\n\n $onChanges({ tags, model }) {\n if ((!tags && !model) || (!tags.currentValue && !model.currentValue)) {\n return;\n }\n this.endpointTags = this.joinTags();\n }\n}\n\nangular.module('portainer.app').controller('EndpointItemController', EndpointItemController);\nexport default EndpointItemController;\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","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, Authentication, CustomTemplateService, FormValidator, Notifications, ResourceControlService, StackService, StateManager) {\n Object.assign(this, { $async, $state, Authentication, CustomTemplateService, FormValidator, Notifications, ResourceControlService, StackService, StateManager });\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 };\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 }\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 { ResourceControl } = 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, ResourceControl);\n\n this.Notifications.success('Custom template successfully created');\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 }\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}\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.state = {\n selectedTemplate: null,\n showAdvancedOptions: false,\n formValidationError: '',\n actionInProgress: false,\n isEditorVisible: 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\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 $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, Authentication, CustomTemplateService, FormValidator, Notifications, ResourceControlService) {\n Object.assign(this, { $async, $state, Authentication, CustomTemplateService, FormValidator, Notifications, ResourceControlService });\n\n this.formValues = null;\n this.state = {\n formValidationError: '',\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.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.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 this.formValues.fileContent = cm.getValue();\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}\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&external',\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 $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 },\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\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']).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 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
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
\\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 The Docker registry for the {{ config.Image }} image is not registered inside Portainer, you will not be able to create a container. Please register\\n that registry first.\\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 add environment variable\\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 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 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
\\n
\\n
\\n\\n
\\n
\\n \\n \\n \\n
\\n \\n
\\n
\\n
\\n
\\n
\\n \\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
\\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\";\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 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 Webhooks\\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
\\n
\\n \\n \\n add environment variable\\n \\n
\\n \\n
\\n
\\n
\\n name\\n \\n
\\n
\\n value\\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 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

\\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 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 >\\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 Environment\\n
\\n
\\n
\\n \\n \\n add environment variable\\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.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\";\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
\\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 {{ formValues.StackFile.name }}\\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 refs/heads/branch_name or tags with refs/tags/tag_name. If\\n not specified, will use the default HEAD reference normally the master branch.\\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n
\\n \\n Indicate the path to the Compose 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 authentication required error when deploying your stack. In this case, you will need to provide\\n 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
\\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
\\n \\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n Environment\\n
\\n
\\n
\\n \\n \\n add environment variable\\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 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\\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 curl -L https://downloads.portainer.io/portainer-agent-k8s-lb.yaml -o portainer-agent-k8s.yaml; kubectl apply -f portainer-agent-k8s.yaml\\n \\n\\n \\n curl -L https://downloads.portainer.io/portainer-agent-k8s-nodeport.yaml -o portainer-agent-k8s.yaml; kubectl apply -f portainer-agent-k8s.yaml\\n \\n\\n \\n curl -L https://downloads.portainer.io/agent-stack.yml -o agent-stack.yml && docker stack deploy --compose-file=agent-stack.yml portainer-agent\\n curl -L https://downloads.portainer.io/agent-stack-windows.yml -o agent-stack.yml && docker stack deploy --compose-file=agent-stack-windows.yml portainer-agent\\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

    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 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\";\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 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 Host and Filesystem\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n Docker Endpoint Security Options\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\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 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\";\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 map = {\n\t\"./__module.js\": 467,\n\t\"./agent/components/file-uploader/fileUploaderController.js\": 390,\n\t\"./agent/components/file-uploader/index.js\": 815,\n\t\"./agent/components/files-datatable/index.js\": 817,\n\t\"./agent/components/host-browser/hostBrowserController.js\": 391,\n\t\"./agent/components/host-browser/index.js\": 819,\n\t\"./agent/components/node-selector/index.js\": 821,\n\t\"./agent/components/node-selector/nodeSelectorController.js\": 392,\n\t\"./agent/components/volume-browser/index.js\": 823,\n\t\"./agent/components/volume-browser/volumeBrowserController.js\": 393,\n\t\"./agent/index.js\": 499,\n\t\"./agent/models/agent.js\": 394,\n\t\"./agent/rest/agent.js\": 825,\n\t\"./agent/rest/browse.js\": 826,\n\t\"./agent/rest/host.js\": 827,\n\t\"./agent/rest/ping.js\": 828,\n\t\"./agent/rest/response/browse.js\": 237,\n\t\"./agent/rest/v1/agent.js\": 829,\n\t\"./agent/rest/v1/browse.js\": 830,\n\t\"./agent/services/agentService.js\": 831,\n\t\"./agent/services/hostBrowserService.js\": 832,\n\t\"./agent/services/pingService.js\": 833,\n\t\"./agent/services/volumeBrowserService.js\": 834,\n\t\"./app.js\": 835,\n\t\"./assets/css/index.js\": 496,\n\t\"./assets/js/angulartics-matomo.js\": 498,\n\t\"./azure/_module.js\": 500,\n\t\"./azure/components/azure-endpoint-config/azure-endpoint-config.js\": 836,\n\t\"./azure/components/azure-sidebar-content/azure-sidebar-content.js\": 838,\n\t\"./azure/components/datatables/containergroups-datatable/containerGroupsDatatable.js\": 840,\n\t\"./azure/models/container_group.js\": 170,\n\t\"./azure/models/location.js\": 395,\n\t\"./azure/models/provider.js\": 396,\n\t\"./azure/models/resource_group.js\": 294,\n\t\"./azure/models/subscription.js\": 295,\n\t\"./azure/rest/azure.js\": 842,\n\t\"./azure/rest/container_group.js\": 843,\n\t\"./azure/rest/location.js\": 844,\n\t\"./azure/rest/provider.js\": 845,\n\t\"./azure/rest/resource_group.js\": 846,\n\t\"./azure/rest/subscription.js\": 847,\n\t\"./azure/services/azureService.js\": 848,\n\t\"./azure/services/containerGroupService.js\": 849,\n\t\"./azure/services/locationService.js\": 850,\n\t\"./azure/services/providerService.js\": 851,\n\t\"./azure/services/resourceGroupService.js\": 852,\n\t\"./azure/services/subscriptionService.js\": 853,\n\t\"./azure/views/containerinstances/container-instance-details/containerInstanceDetailsController.js\": 397,\n\t\"./azure/views/containerinstances/container-instance-details/index.js\": 854,\n\t\"./azure/views/containerinstances/containerInstancesController.js\": 856,\n\t\"./azure/views/containerinstances/create/createContainerInstanceController.js\": 857,\n\t\"./azure/views/dashboard/dashboardController.js\": 858,\n\t\"./config.js\": 859,\n\t\"./constants.js\": 897,\n\t\"./docker/__module.js\": 501,\n\t\"./docker/components/container-capabilities/container-capabilities.js\": 898,\n\t\"./docker/components/container-quick-actions/containerQuickActions.js\": 900,\n\t\"./docker/components/container-restart-policy/container-restart-policy-controller.js\": 902,\n\t\"./docker/components/container-restart-policy/container-restart-policy.js\": 903,\n\t\"./docker/components/dashboard-cluster-agent-info/dashboard-cluster-agent-info.js\": 905,\n\t\"./docker/components/dashboard-cluster-agent-info/dashboardClusterAgentInfoController.js\": 907,\n\t\"./docker/components/datatables/configs-datatable/configsDatatable.js\": 908,\n\t\"./docker/components/datatables/container-networks-datatable/containerNetworksDatatable.js\": 910,\n\t\"./docker/components/datatables/container-networks-datatable/containerNetworksDatatableController.js\": 912,\n\t\"./docker/components/datatables/container-processes-datatable/containerProcessesDatatable.js\": 913,\n\t\"./docker/components/datatables/containers-datatable/actions/containersDatatableActions.js\": 915,\n\t\"./docker/components/datatables/containers-datatable/actions/containersDatatableActionsController.js\": 917,\n\t\"./docker/components/datatables/containers-datatable/containersDatatable.js\": 918,\n\t\"./docker/components/datatables/containers-datatable/containersDatatableController.js\": 920,\n\t\"./docker/components/datatables/events-datatable/eventsDatatable.js\": 921,\n\t\"./docker/components/datatables/images-datatable/imagesDatatable.js\": 923,\n\t\"./docker/components/datatables/images-datatable/imagesDatatableController.js\": 925,\n\t\"./docker/components/datatables/macvlan-nodes-datatable/macvlanNodesDatatable.js\": 926,\n\t\"./docker/components/datatables/networks-datatable/network-row-content/networkRowContent.js\": 928,\n\t\"./docker/components/datatables/networks-datatable/networksDatatable.js\": 930,\n\t\"./docker/components/datatables/networks-datatable/networksDatatableController.js\": 932,\n\t\"./docker/components/datatables/node-tasks-datatable/nodeTasksDatatable.js\": 933,\n\t\"./docker/components/datatables/nodes-datatable/nodesDatatable.js\": 935,\n\t\"./docker/components/datatables/secrets-datatable/secretsDatatable.js\": 937,\n\t\"./docker/components/datatables/service-tasks-datatable/serviceTasksDatatable.js\": 939,\n\t\"./docker/components/datatables/service-tasks-datatable/serviceTasksDatatableController.js\": 941,\n\t\"./docker/components/datatables/services-datatable/actions/servicesDatatableActions.js\": 942,\n\t\"./docker/components/datatables/services-datatable/actions/servicesDatatableActionsController.js\": 944,\n\t\"./docker/components/datatables/services-datatable/servicesDatatable.js\": 945,\n\t\"./docker/components/datatables/services-datatable/servicesDatatableController.js\": 947,\n\t\"./docker/components/datatables/tasks-datatable/tasksDatatable.js\": 948,\n\t\"./docker/components/datatables/tasks-datatable/tasksDatatableController.js\": 950,\n\t\"./docker/components/datatables/volumes-datatable/volumesDatatable.js\": 951,\n\t\"./docker/components/datatables/volumes-datatable/volumesDatatableController.js\": 953,\n\t\"./docker/components/dockerSidebarContent/docker-sidebar-content.js\": 954,\n\t\"./docker/components/host-overview/host-overview.js\": 956,\n\t\"./docker/components/host-view-panels/devices-panel/devices-panel.js\": 958,\n\t\"./docker/components/host-view-panels/disks-panel/disks-panel.js\": 960,\n\t\"./docker/components/host-view-panels/engine-details-panel/engine-details-panel.js\": 962,\n\t\"./docker/components/host-view-panels/host-details-panel/host-details-panel.js\": 964,\n\t\"./docker/components/host-view-panels/node-availability-select/node-availability-select-controller.js\": 966,\n\t\"./docker/components/host-view-panels/node-availability-select/node-availability-select.js\": 967,\n\t\"./docker/components/host-view-panels/node-labels-table/node-labels-table-controller.js\": 969,\n\t\"./docker/components/host-view-panels/node-labels-table/node-labels-table.js\": 970,\n\t\"./docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js\": 972,\n\t\"./docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js\": 973,\n\t\"./docker/components/imageRegistry/por-image-registry.js\": 975,\n\t\"./docker/components/imageRegistry/porImageRegistryController.js\": 977,\n\t\"./docker/components/log-viewer/log-viewer.js\": 978,\n\t\"./docker/components/log-viewer/logViewerController.js\": 980,\n\t\"./docker/components/network-macvlan-form/network-macvlan-form.js\": 982,\n\t\"./docker/components/network-macvlan-form/networkMacvlanFormController.js\": 984,\n\t\"./docker/components/network-macvlan-form/networkMacvlanFormModel.js\": 398,\n\t\"./docker/components/volumesCIFSForm/volumesCifsForm.js\": 985,\n\t\"./docker/components/volumesCIFSForm/volumesCifsFormModel.js\": 399,\n\t\"./docker/components/volumesNFSForm/volumes-nfs-form.js\": 987,\n\t\"./docker/components/volumesNFSForm/volumesNFSFormModel.js\": 400,\n\t\"./docker/filters/filters.js\": 989,\n\t\"./docker/helpers/configHelper.js\": 990,\n\t\"./docker/helpers/constraintsHelper.js\": 991,\n\t\"./docker/helpers/containerHelper.js\": 992,\n\t\"./docker/helpers/imageHelper.js\": 993,\n\t\"./docker/helpers/infoHelper.js\": 994,\n\t\"./docker/helpers/labelHelper.js\": 995,\n\t\"./docker/helpers/logHelper.js\": 996,\n\t\"./docker/helpers/networkHelper.js\": 175,\n\t\"./docker/helpers/nodeHelper.js\": 997,\n\t\"./docker/helpers/secretHelper.js\": 998,\n\t\"./docker/helpers/serviceHelper.js\": 999,\n\t\"./docker/helpers/taskHelper.js\": 1000,\n\t\"./docker/helpers/volumeHelper.js\": 1001,\n\t\"./docker/interceptors/containersInterceptor.js\": 1002,\n\t\"./docker/interceptors/imagesInterceptor.js\": 1003,\n\t\"./docker/interceptors/infoInterceptor.js\": 1004,\n\t\"./docker/interceptors/networksInterceptor.js\": 1005,\n\t\"./docker/interceptors/versionInterceptor.js\": 1006,\n\t\"./docker/interceptors/volumesInterceptor.js\": 1007,\n\t\"./docker/models/config.js\": 305,\n\t\"./docker/models/container.js\": 176,\n\t\"./docker/models/containerCapabilities.js\": 222,\n\t\"./docker/models/event.js\": 401,\n\t\"./docker/models/image.js\": 177,\n\t\"./docker/models/imageDetails.js\": 402,\n\t\"./docker/models/imageLayer.js\": 403,\n\t\"./docker/models/network.js\": 306,\n\t\"./docker/models/node.js\": 307,\n\t\"./docker/models/plugin.js\": 404,\n\t\"./docker/models/porImageRegistry.js\": 63,\n\t\"./docker/models/secret.js\": 308,\n\t\"./docker/models/service.js\": 309,\n\t\"./docker/models/swarm.js\": 405,\n\t\"./docker/models/task.js\": 310,\n\t\"./docker/models/volume.js\": 244,\n\t\"./docker/rest/build.js\": 1008,\n\t\"./docker/rest/commit.js\": 1009,\n\t\"./docker/rest/config.js\": 1010,\n\t\"./docker/rest/container.js\": 1011,\n\t\"./docker/rest/exec.js\": 1012,\n\t\"./docker/rest/image.js\": 1013,\n\t\"./docker/rest/network.js\": 1014,\n\t\"./docker/rest/node.js\": 1015,\n\t\"./docker/rest/plugin.js\": 1016,\n\t\"./docker/rest/response/handlers.js\": 25,\n\t\"./docker/rest/response/image.js\": 406,\n\t\"./docker/rest/secret.js\": 1017,\n\t\"./docker/rest/service.js\": 1018,\n\t\"./docker/rest/swarm.js\": 1019,\n\t\"./docker/rest/system.js\": 1020,\n\t\"./docker/rest/systemEndpoint.js\": 1021,\n\t\"./docker/rest/task.js\": 1022,\n\t\"./docker/rest/volume.js\": 1023,\n\t\"./docker/services/buildService.js\": 1024,\n\t\"./docker/services/configService.js\": 1025,\n\t\"./docker/services/containerService.js\": 1026,\n\t\"./docker/services/execService.js\": 1027,\n\t\"./docker/services/imageService.js\": 1028,\n\t\"./docker/services/networkService.js\": 1029,\n\t\"./docker/services/nodeService.js\": 1030,\n\t\"./docker/services/pluginService.js\": 1031,\n\t\"./docker/services/secretService.js\": 1032,\n\t\"./docker/services/serviceService.js\": 1033,\n\t\"./docker/services/swarmService.js\": 1034,\n\t\"./docker/services/systemService.js\": 1035,\n\t\"./docker/services/taskService.js\": 1036,\n\t\"./docker/services/volumeService.js\": 1037,\n\t\"./docker/views/configs/configsController.js\": 1038,\n\t\"./docker/views/configs/create/createConfigController.js\": 1039,\n\t\"./docker/views/configs/edit/configController.js\": 1040,\n\t\"./docker/views/containers/console/containerConsoleController.js\": 1041,\n\t\"./docker/views/containers/containersController.js\": 1042,\n\t\"./docker/views/containers/create/createContainerController.js\": 1043,\n\t\"./docker/views/containers/edit/containerController.js\": 1044,\n\t\"./docker/views/containers/inspect/containerInspectController.js\": 1045,\n\t\"./docker/views/containers/logs/containerLogsController.js\": 1046,\n\t\"./docker/views/containers/stats/containerStatsController.js\": 1047,\n\t\"./docker/views/dashboard/dashboardController.js\": 1048,\n\t\"./docker/views/events/eventsController.js\": 1091,\n\t\"./docker/views/host/host-browser-view/host-browser-view-controller.js\": 1092,\n\t\"./docker/views/host/host-browser-view/host-browser-view.js\": 1093,\n\t\"./docker/views/host/host-view-controller.js\": 1095,\n\t\"./docker/views/host/host-view.js\": 1096,\n\t\"./docker/views/images/build/buildImageController.js\": 1098,\n\t\"./docker/views/images/edit/imageController.js\": 1099,\n\t\"./docker/views/images/imagesController.js\": 1100,\n\t\"./docker/views/images/import/importImageController.js\": 1101,\n\t\"./docker/views/networks/create/createNetworkController.js\": 1102,\n\t\"./docker/views/networks/edit/networkController.js\": 1103,\n\t\"./docker/views/networks/networksController.js\": 1104,\n\t\"./docker/views/nodes/node-browser/node-browser-controller.js\": 1105,\n\t\"./docker/views/nodes/node-browser/node-browser.js\": 1106,\n\t\"./docker/views/nodes/node-details/node-details-view-controller.js\": 1108,\n\t\"./docker/views/nodes/node-details/node-details-view.js\": 1109,\n\t\"./docker/views/secrets/create/createSecretController.js\": 1111,\n\t\"./docker/views/secrets/edit/secretController.js\": 1112,\n\t\"./docker/views/secrets/secretsController.js\": 1113,\n\t\"./docker/views/services/create/createServiceController.js\": 1114,\n\t\"./docker/views/services/edit/serviceController.js\": 1119,\n\t\"./docker/views/services/logs/serviceLogsController.js\": 1138,\n\t\"./docker/views/services/servicesController.js\": 1139,\n\t\"./docker/views/swarm/swarmController.js\": 1140,\n\t\"./docker/views/swarm/visualizer/swarmVisualizerController.js\": 1141,\n\t\"./docker/views/tasks/edit/taskController.js\": 1142,\n\t\"./docker/views/tasks/logs/taskLogsController.js\": 1143,\n\t\"./docker/views/volumes/browse/browseVolumeController.js\": 1144,\n\t\"./docker/views/volumes/create/createVolumeController.js\": 1145,\n\t\"./docker/views/volumes/edit/volumeController.js\": 1146,\n\t\"./docker/views/volumes/volumesController.js\": 1147,\n\t\"./edge/__module.js\": 502,\n\t\"./edge/components/associated-endpoints-datatable/associatedEndpointsDatatableController.js\": 407,\n\t\"./edge/components/associated-endpoints-datatable/index.js\": 1148,\n\t\"./edge/components/edge-groups-selector/index.js\": 1150,\n\t\"./edge/components/edge-job-form/edgeJobFormController.js\": 408,\n\t\"./edge/components/edge-job-form/index.js\": 1152,\n\t\"./edge/components/edge-job-results-datatable/edgeJobResultsDatatableController.js\": 409,\n\t\"./edge/components/edge-job-results-datatable/index.js\": 1154,\n\t\"./edge/components/edge-jobs-datatable/index.js\": 1157,\n\t\"./edge/components/edge-stack-endpoints-datatable/edgeStackEndpointsDatatableController.js\": 410,\n\t\"./edge/components/edge-stack-endpoints-datatable/index.js\": 1159,\n\t\"./edge/components/edge-stack-status/edgeStackStatusController.js\": 411,\n\t\"./edge/components/edge-stack-status/index.js\": 1161,\n\t\"./edge/components/edge-stacks-datatable/index.js\": 1164,\n\t\"./edge/components/edit-edge-stack-form/editEdgeStackFormController.js\": 412,\n\t\"./edge/components/edit-edge-stack-form/index.js\": 1166,\n\t\"./edge/components/group-form/groupFormController.js\": 413,\n\t\"./edge/components/group-form/index.js\": 1168,\n\t\"./edge/components/groups-datatable/groupsDatatableController.js\": 414,\n\t\"./edge/components/groups-datatable/index.js\": 1170,\n\t\"./edge/rest/edge-groups.js\": 1172,\n\t\"./edge/rest/edge-job-results.js\": 1173,\n\t\"./edge/rest/edge-jobs.js\": 1174,\n\t\"./edge/rest/edge-stacks.js\": 1175,\n\t\"./edge/rest/edge-templates.js\": 1176,\n\t\"./edge/services/edge-group.js\": 1177,\n\t\"./edge/services/edge-job.js\": 1178,\n\t\"./edge/services/edge-stack.js\": 1179,\n\t\"./edge/services/edge-template.js\": 1180,\n\t\"./edge/views/edge-groups/createEdgeGroupView/createEdgeGroupViewController.js\": 415,\n\t\"./edge/views/edge-groups/createEdgeGroupView/index.js\": 1181,\n\t\"./edge/views/edge-groups/edgeGroupsView/edgeGroupsViewController.js\": 416,\n\t\"./edge/views/edge-groups/edgeGroupsView/index.js\": 1183,\n\t\"./edge/views/edge-groups/editEdgeGroupView/editEdgeGroupViewController.js\": 417,\n\t\"./edge/views/edge-groups/editEdgeGroupView/index.js\": 1185,\n\t\"./edge/views/edge-jobs/createEdgeJobView/createEdgeJobViewController.js\": 418,\n\t\"./edge/views/edge-jobs/createEdgeJobView/index.js\": 1187,\n\t\"./edge/views/edge-jobs/edgeJob/edgeJobController.js\": 419,\n\t\"./edge/views/edge-jobs/edgeJob/index.js\": 1189,\n\t\"./edge/views/edge-jobs/edgeJobsView/edgeJobsViewController.js\": 420,\n\t\"./edge/views/edge-jobs/edgeJobsView/index.js\": 1191,\n\t\"./edge/views/edge-stacks/createEdgeStackView/createEdgeStackViewController.js\": 421,\n\t\"./edge/views/edge-stacks/createEdgeStackView/index.js\": 1193,\n\t\"./edge/views/edge-stacks/edgeStacksView/edgeStacksViewController.js\": 422,\n\t\"./edge/views/edge-stacks/edgeStacksView/index.js\": 1195,\n\t\"./edge/views/edge-stacks/editEdgeStackView/editEdgeStackViewController.js\": 423,\n\t\"./edge/views/edge-stacks/editEdgeStackView/index.js\": 1197,\n\t\"./integrations/_module.js\": 1199,\n\t\"./integrations/storidge/_module.js\": 1200,\n\t\"./integrations/storidge/components/cluster-events-datatable/storidgeClusterEventsDatatable.js\": 1210,\n\t\"./integrations/storidge/components/drives-datatable/storidgeDrivesDatatable.js\": 1212,\n\t\"./integrations/storidge/components/drives-datatable/storidgeDrivesDatatableController.js\": 1214,\n\t\"./integrations/storidge/components/nodes-datatable/storidgeNodesDatatable.js\": 1215,\n\t\"./integrations/storidge/components/nodes-datatable/storidgeNodesDatatableController.js\": 1217,\n\t\"./integrations/storidge/components/profileSelector/storidgeProfileSelector.js\": 1218,\n\t\"./integrations/storidge/components/profileSelector/storidgeProfileSelectorController.js\": 1220,\n\t\"./integrations/storidge/components/profiles-datatable/storidgeProfilesDatatable.js\": 1221,\n\t\"./integrations/storidge/components/snapshot-creation/storidgeSnapshotCreation.js\": 1223,\n\t\"./integrations/storidge/components/snapshot-creation/storidgeSnapshotCreationController.js\": 1225,\n\t\"./integrations/storidge/components/snapshots-datatable/storidgeSnapshotsDatatable.js\": 1226,\n\t\"./integrations/storidge/components/volume-storidge-info/volumeStoridgeInfo.js\": 1228,\n\t\"./integrations/storidge/components/volume-storidge-info/volumeStoridgeInfoController.js\": 1230,\n\t\"./integrations/storidge/filters/filters.js\": 1231,\n\t\"./integrations/storidge/models/drive.js\": 315,\n\t\"./integrations/storidge/models/events.js\": 424,\n\t\"./integrations/storidge/models/info.js\": 425,\n\t\"./integrations/storidge/models/node.js\": 316,\n\t\"./integrations/storidge/models/profile.js\": 116,\n\t\"./integrations/storidge/models/snapshot.js\": 317,\n\t\"./integrations/storidge/models/volume.js\": 318,\n\t\"./integrations/storidge/rest/storidge.js\": 1232,\n\t\"./integrations/storidge/services/chartService.js\": 1233,\n\t\"./integrations/storidge/services/clusterService.js\": 1281,\n\t\"./integrations/storidge/services/driveService.js\": 1282,\n\t\"./integrations/storidge/services/nodeService.js\": 1283,\n\t\"./integrations/storidge/services/profileService.js\": 1284,\n\t\"./integrations/storidge/services/snapshotService.js\": 1285,\n\t\"./integrations/storidge/services/volumeService.js\": 1286,\n\t\"./integrations/storidge/views/cluster/clusterController.js\": 1287,\n\t\"./integrations/storidge/views/drives/drivesController.js\": 1288,\n\t\"./integrations/storidge/views/drives/inspect/driveController.js\": 1289,\n\t\"./integrations/storidge/views/monitor/monitorController.js\": 1290,\n\t\"./integrations/storidge/views/nodes/inspect/nodeController.js\": 1291,\n\t\"./integrations/storidge/views/profiles/create/createProfileController.js\": 1292,\n\t\"./integrations/storidge/views/profiles/edit/profileController.js\": 1293,\n\t\"./integrations/storidge/views/profiles/profilesController.js\": 1294,\n\t\"./integrations/storidge/views/snapshots/inspect/snapshotController.js\": 1295,\n\t\"./kubernetes/__module.js\": 1296,\n\t\"./kubernetes/component-status/converter.js\": 426,\n\t\"./kubernetes/component-status/models.js\": 427,\n\t\"./kubernetes/component-status/rest.js\": 1297,\n\t\"./kubernetes/component-status/service.js\": 1298,\n\t\"./kubernetes/components/datatables/application/containers-datatable/containersDatatable.js\": 1299,\n\t\"./kubernetes/components/datatables/applications-datatable/applicationsDatatable.js\": 1301,\n\t\"./kubernetes/components/datatables/applications-datatable/applicationsDatatableController.js\": 1303,\n\t\"./kubernetes/components/datatables/applications-ports-datatable/applicationsPortsDatatable.js\": 1306,\n\t\"./kubernetes/components/datatables/applications-ports-datatable/applicationsPortsDatatableController.js\": 1308,\n\t\"./kubernetes/components/datatables/applications-stacks-datatable/applicationsStacksDatatable.js\": 1309,\n\t\"./kubernetes/components/datatables/applications-stacks-datatable/applicationsStacksDatatableController.js\": 1311,\n\t\"./kubernetes/components/datatables/configurations-datatable/configurationsDatatable.js\": 1312,\n\t\"./kubernetes/components/datatables/configurations-datatable/configurationsDatatableController.js\": 1314,\n\t\"./kubernetes/components/datatables/events-datatable/eventsDatatable.js\": 1319,\n\t\"./kubernetes/components/datatables/integrated-applications-datatable/integratedApplicationsDatatable.js\": 1321,\n\t\"./kubernetes/components/datatables/node-applications-datatable/nodeApplicationsDatatable.js\": 1323,\n\t\"./kubernetes/components/datatables/node-applications-datatable/nodeApplicationsDatatableController.js\": 1325,\n\t\"./kubernetes/components/datatables/nodes-datatable/nodesDatatable.js\": 1326,\n\t\"./kubernetes/components/datatables/resource-pool-applications-datatable/resourcePoolApplicationsDatatable.js\": 1328,\n\t\"./kubernetes/components/datatables/resource-pool-applications-datatable/resourcePoolApplicationsDatatableController.js\": 1330,\n\t\"./kubernetes/components/datatables/resource-pools-datatable/resourcePoolsDatatable.js\": 1331,\n\t\"./kubernetes/components/datatables/resource-pools-datatable/resourcePoolsDatatableController.js\": 1333,\n\t\"./kubernetes/components/datatables/volumes-datatable/volumesDatatable.js\": 1334,\n\t\"./kubernetes/components/datatables/volumes-datatable/volumesDatatableController.js\": 1336,\n\t\"./kubernetes/components/kubernetes-configuration-data/kubernetesConfigurationData.js\": 1337,\n\t\"./kubernetes/components/kubernetes-configuration-data/kubernetesConfigurationDataController.js\": 1339,\n\t\"./kubernetes/components/kubernetes-sidebar-content/kubernetesSidebarContent.js\": 1346,\n\t\"./kubernetes/components/resource-reservation/resourceReservation.js\": 1348,\n\t\"./kubernetes/components/resource-reservation/resourceReservationController.js\": 1350,\n\t\"./kubernetes/components/view-header/viewHeader.js\": 1351,\n\t\"./kubernetes/components/view-loading/viewLoading.js\": 1353,\n\t\"./kubernetes/components/yaml-inspector/yamlInspector.js\": 1355,\n\t\"./kubernetes/components/yaml-inspector/yamlInspectorController.js\": 1357,\n\t\"./kubernetes/converters/application.js\": 75,\n\t\"./kubernetes/converters/configMap.js\": 61,\n\t\"./kubernetes/converters/configuration.js\": 132,\n\t\"./kubernetes/converters/daemonSet.js\": 211,\n\t\"./kubernetes/converters/deployment.js\": 210,\n\t\"./kubernetes/converters/event.js\": 434,\n\t\"./kubernetes/converters/namespace.js\": 247,\n\t\"./kubernetes/converters/persistentVolumeClaim.js\": 118,\n\t\"./kubernetes/converters/resourcePool.js\": 321,\n\t\"./kubernetes/converters/resourceQuota.js\": 183,\n\t\"./kubernetes/converters/secret.js\": 120,\n\t\"./kubernetes/converters/service.js\": 178,\n\t\"./kubernetes/converters/statefulSet.js\": 212,\n\t\"./kubernetes/converters/storageClass.js\": 325,\n\t\"./kubernetes/converters/volume.js\": 326,\n\t\"./kubernetes/endpoint/converter.js\": 438,\n\t\"./kubernetes/endpoint/models.js\": 248,\n\t\"./kubernetes/endpoint/rest.js\": 1358,\n\t\"./kubernetes/endpoint/service.js\": 1359,\n\t\"./kubernetes/filters/applicationFilters.js\": 1360,\n\t\"./kubernetes/filters/configurationFilters.js\": 1361,\n\t\"./kubernetes/filters/eventFilters.js\": 1362,\n\t\"./kubernetes/filters/filters.js\": 1363,\n\t\"./kubernetes/helpers/application/index.js\": 13,\n\t\"./kubernetes/helpers/application/rollback.js\": 439,\n\t\"./kubernetes/helpers/commonHelper.js\": 38,\n\t\"./kubernetes/helpers/configMapHelper.js\": 249,\n\t\"./kubernetes/helpers/configurationHelper.js\": 65,\n\t\"./kubernetes/helpers/eventHelper.js\": 98,\n\t\"./kubernetes/helpers/formValidationHelper.js\": 49,\n\t\"./kubernetes/helpers/history/daemonset.js\": 327,\n\t\"./kubernetes/helpers/history/deployment.js\": 250,\n\t\"./kubernetes/helpers/history/index.js\": 440,\n\t\"./kubernetes/helpers/history/statefulset.js\": 328,\n\t\"./kubernetes/helpers/namespaceHelper.js\": 1364,\n\t\"./kubernetes/helpers/resourceQuotaHelper.js\": 146,\n\t\"./kubernetes/helpers/resourceReservationHelper.js\": 15,\n\t\"./kubernetes/helpers/serviceHelper.js\": 214,\n\t\"./kubernetes/helpers/stackHelper.js\": 441,\n\t\"./kubernetes/helpers/volumeHelper.js\": 71,\n\t\"./kubernetes/horizontal-pod-auto-scaler/converter.js\": 122,\n\t\"./kubernetes/horizontal-pod-auto-scaler/helper.js\": 184,\n\t\"./kubernetes/horizontal-pod-auto-scaler/models.js\": 329,\n\t\"./kubernetes/horizontal-pod-auto-scaler/payload.js\": 443,\n\t\"./kubernetes/horizontal-pod-auto-scaler/rest.js\": 1365,\n\t\"./kubernetes/horizontal-pod-auto-scaler/service.js\": 1366,\n\t\"./kubernetes/ingress/constants.js\": 60,\n\t\"./kubernetes/ingress/converter.js\": 53,\n\t\"./kubernetes/ingress/helper.js\": 433,\n\t\"./kubernetes/ingress/models.js\": 152,\n\t\"./kubernetes/ingress/payloads.js\": 251,\n\t\"./kubernetes/ingress/rest.js\": 1367,\n\t\"./kubernetes/ingress/service.js\": 1368,\n\t\"./kubernetes/models/application/formValues.js\": 17,\n\t\"./kubernetes/models/application/models/constants.js\": 379,\n\t\"./kubernetes/models/application/models/index.js\": 3,\n\t\"./kubernetes/models/application/payloads.js\": 77,\n\t\"./kubernetes/models/common/params.js\": 11,\n\t\"./kubernetes/models/common/payloads.js\": 34,\n\t\"./kubernetes/models/config-map/models.js\": 56,\n\t\"./kubernetes/models/config-map/payloads.js\": 246,\n\t\"./kubernetes/models/configuration/formvalues.js\": 69,\n\t\"./kubernetes/models/configuration/models.js\": 22,\n\t\"./kubernetes/models/daemon-set/models.js\": 168,\n\t\"./kubernetes/models/daemon-set/payloads.js\": 429,\n\t\"./kubernetes/models/deploy.js\": 331,\n\t\"./kubernetes/models/deployment/models.js\": 167,\n\t\"./kubernetes/models/deployment/payloads.js\": 428,\n\t\"./kubernetes/models/event/models.js\": 435,\n\t\"./kubernetes/models/history/models.js\": 121,\n\t\"./kubernetes/models/namespace/models.js\": 239,\n\t\"./kubernetes/models/namespace/payloads.js\": 436,\n\t\"./kubernetes/models/port/models.js\": 319,\n\t\"./kubernetes/models/resource-pool/formValues.js\": 119,\n\t\"./kubernetes/models/resource-pool/models.js\": 74,\n\t\"./kubernetes/models/resource-quota/models.js\": 90,\n\t\"./kubernetes/models/resource-quota/payloads.js\": 322,\n\t\"./kubernetes/models/resource-reservation/models.js\": 166,\n\t\"./kubernetes/models/secret/models.js\": 324,\n\t\"./kubernetes/models/secret/payloads.js\": 323,\n\t\"./kubernetes/models/service/models.js\": 28,\n\t\"./kubernetes/models/service/payloads.js\": 432,\n\t\"./kubernetes/models/stack/models.js\": 442,\n\t\"./kubernetes/models/stateful-set/models.js\": 117,\n\t\"./kubernetes/models/stateful-set/payloads.js\": 430,\n\t\"./kubernetes/models/storage-class/models.js\": 147,\n\t\"./kubernetes/models/storage-class/payload.js\": 437,\n\t\"./kubernetes/models/volume/models.js\": 213,\n\t\"./kubernetes/models/volume/payloads.js\": 431,\n\t\"./kubernetes/node/converter.js\": 104,\n\t\"./kubernetes/node/filters.js\": 1369,\n\t\"./kubernetes/node/formValues.js\": 153,\n\t\"./kubernetes/node/helper.js\": 179,\n\t\"./kubernetes/node/models.js\": 123,\n\t\"./kubernetes/node/payload.js\": 332,\n\t\"./kubernetes/node/rest.js\": 1370,\n\t\"./kubernetes/node/service.js\": 1371,\n\t\"./kubernetes/pod/converter.js\": 216,\n\t\"./kubernetes/pod/filters.js\": 1372,\n\t\"./kubernetes/pod/models/affinities.js\": 380,\n\t\"./kubernetes/pod/models/index.js\": 31,\n\t\"./kubernetes/pod/payloads/affinities.js\": 182,\n\t\"./kubernetes/pod/payloads/create.js\": 444,\n\t\"./kubernetes/pod/service.js\": 1373,\n\t\"./kubernetes/rest/configMap.js\": 1374,\n\t\"./kubernetes/rest/controllerRevision.js\": 1375,\n\t\"./kubernetes/rest/daemonSet.js\": 1376,\n\t\"./kubernetes/rest/deployment.js\": 1377,\n\t\"./kubernetes/rest/endpoint.js\": 1378,\n\t\"./kubernetes/rest/event.js\": 1379,\n\t\"./kubernetes/rest/health.js\": 1380,\n\t\"./kubernetes/rest/namespace.js\": 1381,\n\t\"./kubernetes/rest/persistentVolumeClaim.js\": 1382,\n\t\"./kubernetes/rest/pod.js\": 1383,\n\t\"./kubernetes/rest/replicaSet.js\": 1384,\n\t\"./kubernetes/rest/resourceQuota.js\": 1385,\n\t\"./kubernetes/rest/response/transform.js\": 23,\n\t\"./kubernetes/rest/secret.js\": 1386,\n\t\"./kubernetes/rest/service.js\": 1387,\n\t\"./kubernetes/rest/statefulSet.js\": 1388,\n\t\"./kubernetes/rest/storage.js\": 1389,\n\t\"./kubernetes/services/applicationService.js\": 1390,\n\t\"./kubernetes/services/configMapService.js\": 1391,\n\t\"./kubernetes/services/configurationService.js\": 1392,\n\t\"./kubernetes/services/controllerRevisionService.js\": 1393,\n\t\"./kubernetes/services/daemonSetService.js\": 1394,\n\t\"./kubernetes/services/deploymentService.js\": 1395,\n\t\"./kubernetes/services/eventService.js\": 1396,\n\t\"./kubernetes/services/healthService.js\": 1397,\n\t\"./kubernetes/services/historyService.js\": 1398,\n\t\"./kubernetes/services/namespaceService.js\": 1399,\n\t\"./kubernetes/services/persistentVolumeClaimService.js\": 1400,\n\t\"./kubernetes/services/replicaSetService.js\": 1401,\n\t\"./kubernetes/services/resourcePoolService.js\": 1402,\n\t\"./kubernetes/services/resourceQuotaService.js\": 1403,\n\t\"./kubernetes/services/secretService.js\": 1404,\n\t\"./kubernetes/services/serviceService.js\": 1405,\n\t\"./kubernetes/services/stackService.js\": 1406,\n\t\"./kubernetes/services/statefulSetService.js\": 1407,\n\t\"./kubernetes/services/storageService.js\": 1408,\n\t\"./kubernetes/services/volumeService.js\": 1409,\n\t\"./kubernetes/views/applications/applications.js\": 1410,\n\t\"./kubernetes/views/applications/applicationsController.js\": 1412,\n\t\"./kubernetes/views/applications/console/console.js\": 1413,\n\t\"./kubernetes/views/applications/console/consoleController.js\": 1415,\n\t\"./kubernetes/views/applications/create/createApplication.js\": 1416,\n\t\"./kubernetes/views/applications/create/createApplicationController.js\": 1418,\n\t\"./kubernetes/views/applications/edit/application.js\": 1419,\n\t\"./kubernetes/views/applications/edit/applicationController.js\": 1421,\n\t\"./kubernetes/views/applications/edit/components/placements-datatable/controller.js\": 1422,\n\t\"./kubernetes/views/applications/edit/components/placements-datatable/index.js\": 1423,\n\t\"./kubernetes/views/applications/logs/logs.js\": 1425,\n\t\"./kubernetes/views/applications/logs/logsController.js\": 1427,\n\t\"./kubernetes/views/cluster/cluster.js\": 1428,\n\t\"./kubernetes/views/cluster/clusterController.js\": 1430,\n\t\"./kubernetes/views/cluster/node/node.js\": 1431,\n\t\"./kubernetes/views/cluster/node/nodeController.js\": 1433,\n\t\"./kubernetes/views/configurations/configurations.js\": 1434,\n\t\"./kubernetes/views/configurations/configurationsController.js\": 1436,\n\t\"./kubernetes/views/configurations/create/createConfiguration.js\": 1437,\n\t\"./kubernetes/views/configurations/create/createConfigurationController.js\": 1439,\n\t\"./kubernetes/views/configurations/edit/configuration.js\": 1440,\n\t\"./kubernetes/views/configurations/edit/configurationController.js\": 1442,\n\t\"./kubernetes/views/configure/configureController.js\": 1443,\n\t\"./kubernetes/views/dashboard/dashboard.js\": 1444,\n\t\"./kubernetes/views/dashboard/dashboardController.js\": 1446,\n\t\"./kubernetes/views/deploy/deploy.js\": 1447,\n\t\"./kubernetes/views/deploy/deployController.js\": 1449,\n\t\"./kubernetes/views/resource-pools/access/resourcePoolAccess.js\": 1451,\n\t\"./kubernetes/views/resource-pools/access/resourcePoolAccessController.js\": 1453,\n\t\"./kubernetes/views/resource-pools/create/createResourcePool.js\": 1454,\n\t\"./kubernetes/views/resource-pools/create/createResourcePoolController.js\": 1456,\n\t\"./kubernetes/views/resource-pools/edit/components/ingresses-datatable/controller.js\": 1457,\n\t\"./kubernetes/views/resource-pools/edit/components/ingresses-datatable/index.js\": 1458,\n\t\"./kubernetes/views/resource-pools/edit/resourcePool.js\": 1460,\n\t\"./kubernetes/views/resource-pools/edit/resourcePoolController.js\": 1462,\n\t\"./kubernetes/views/resource-pools/resourcePools.js\": 1463,\n\t\"./kubernetes/views/resource-pools/resourcePoolsController.js\": 1465,\n\t\"./kubernetes/views/stacks/logs/logs.js\": 1466,\n\t\"./kubernetes/views/stacks/logs/logsController.js\": 1468,\n\t\"./kubernetes/views/volumes/components/volumes-storages-datatable/controller.js\": 1469,\n\t\"./kubernetes/views/volumes/components/volumes-storages-datatable/index.js\": 1470,\n\t\"./kubernetes/views/volumes/edit/volume.js\": 1472,\n\t\"./kubernetes/views/volumes/edit/volumeController.js\": 1474,\n\t\"./kubernetes/views/volumes/volumes.js\": 1475,\n\t\"./kubernetes/views/volumes/volumesController.js\": 1477,\n\t\"./matomo-setup.js\": 497,\n\t\"./portainer/__module.js\": 503,\n\t\"./portainer/components/access-datatable/accessDatatable.js\": 1478,\n\t\"./portainer/components/access-datatable/accessDatatableController.js\": 1480,\n\t\"./portainer/components/access-table/access-table.js\": 1481,\n\t\"./portainer/components/accessControlForm/por-access-control-form.js\": 1483,\n\t\"./portainer/components/accessControlForm/porAccessControlFormController.js\": 1485,\n\t\"./portainer/components/accessControlForm/porAccessControlFormModel.js\": 42,\n\t\"./portainer/components/accessControlPanel/por-access-control-panel.js\": 1486,\n\t\"./portainer/components/accessControlPanel/porAccessControlPanelController.js\": 1488,\n\t\"./portainer/components/accessControlPanel/porAccessControlPanelModel.js\": 445,\n\t\"./portainer/components/accessManagement/por-access-management.js\": 1489,\n\t\"./portainer/components/accessManagement/porAccessManagementController.js\": 1491,\n\t\"./portainer/components/associated-endpoints-selector/associatedEndpointsSelector.js\": 1492,\n\t\"./portainer/components/associated-endpoints-selector/associatedEndpointsSelectorController.js\": 446,\n\t\"./portainer/components/autofocus.js\": 1494,\n\t\"./portainer/components/beta-panel/betaPanel.js\": 1495,\n\t\"./portainer/components/buttonSpinner.js\": 1497,\n\t\"./portainer/components/code-editor/code-editor.js\": 1498,\n\t\"./portainer/components/code-editor/codeEditorController.js\": 1500,\n\t\"./portainer/components/custom-template-common-fields/customTemplateCommonFieldsController.js\": 447,\n\t\"./portainer/components/custom-template-common-fields/index.js\": 1501,\n\t\"./portainer/components/custom-templates-list/customTemplatesListController.js\": 1503,\n\t\"./portainer/components/custom-templates-list/index.js\": 1504,\n\t\"./portainer/components/datatables/access-viewer-datatable/accessViewerDatatable.js\": 1506,\n\t\"./portainer/components/datatables/datatable-columns-visibility/datatable-columns-visibility.controller.js\": 448,\n\t\"./portainer/components/datatables/datatable-columns-visibility/index.js\": 1508,\n\t\"./portainer/components/datatables/endpoints-datatable/endpointsDatatable.js\": 1510,\n\t\"./portainer/components/datatables/endpoints-datatable/endpointsDatatableController.js\": 1512,\n\t\"./portainer/components/datatables/genericDatatableController.js\": 1513,\n\t\"./portainer/components/datatables/groups-datatable/groupsDatatable.js\": 1515,\n\t\"./portainer/components/datatables/registries-datatable/registriesDatatable.js\": 1517,\n\t\"./portainer/components/datatables/roles-datatable/rolesDatatable.js\": 1519,\n\t\"./portainer/components/datatables/stacks-datatable/stacksDatatable.js\": 1521,\n\t\"./portainer/components/datatables/stacks-datatable/stacksDatatableController.js\": 1523,\n\t\"./portainer/components/datatables/tags-datatable/tagsDatatable.js\": 1524,\n\t\"./portainer/components/datatables/teams-datatable/teamsDatatable.js\": 1526,\n\t\"./portainer/components/datatables/users-datatable/usersDatatable.js\": 1528,\n\t\"./portainer/components/datatables/users-datatable/usersDatatableController.js\": 449,\n\t\"./portainer/components/endpoint-list/endpoint-item/endpoint-item-controller.js\": 450,\n\t\"./portainer/components/endpoint-list/endpoint-item/endpointItem.js\": 1534,\n\t\"./portainer/components/endpoint-list/endpoint-list-controller.js\": 1539,\n\t\"./portainer/components/endpoint-list/endpoint-list.js\": 1540,\n\t\"./portainer/components/endpoint-selector/endpoint-selector.js\": 1542,\n\t\"./portainer/components/endpoint-selector/endpointSelectorController.js\": 1544,\n\t\"./portainer/components/endpointSecurity/por-endpoint-security.js\": 1545,\n\t\"./portainer/components/endpointSecurity/porEndpointSecurityController.js\": 1547,\n\t\"./portainer/components/endpointSecurity/porEndpointSecurityModel.js\": 242,\n\t\"./portainer/components/forms/group-form/group-form.js\": 1548,\n\t\"./portainer/components/forms/group-form/groupFormController.js\": 451,\n\t\"./portainer/components/forms/registry-form-azure/registry-form-azure.js\": 1550,\n\t\"./portainer/components/forms/registry-form-custom/registry-form-custom.js\": 1552,\n\t\"./portainer/components/forms/registry-form-gitlab/gitlab-projects-datatable/gitlabProjectsDatatable.js\": 1554,\n\t\"./portainer/components/forms/registry-form-gitlab/gitlab-projects-datatable/gitlabProjectsDatatableController.js\": 1556,\n\t\"./portainer/components/forms/registry-form-gitlab/registry-form-gitlab.js\": 1557,\n\t\"./portainer/components/forms/registry-form-quay/registry-form-quay.js\": 1559,\n\t\"./portainer/components/forms/stack-from-template-form/index.js\": 1561,\n\t\"./portainer/components/forms/template-form/template-form.js\": 1563,\n\t\"./portainer/components/forms/template-form/templateFormController.js\": 1565,\n\t\"./portainer/components/group-association-table/group-association-table.js\": 1566,\n\t\"./portainer/components/header-content.js\": 1568,\n\t\"./portainer/components/header-title.js\": 1569,\n\t\"./portainer/components/header.js\": 1570,\n\t\"./portainer/components/information-panel-offline/informationPanelOffline.js\": 1571,\n\t\"./portainer/components/information-panel-offline/informationPanelOfflineController.js\": 1573,\n\t\"./portainer/components/information-panel/information-panel.js\": 1574,\n\t\"./portainer/components/loading.js\": 1576,\n\t\"./portainer/components/motd-panel/motd-panel.js\": 1577,\n\t\"./portainer/components/onEnterKey.js\": 1579,\n\t\"./portainer/components/product-list/product-item/product-item.js\": 1580,\n\t\"./portainer/components/product-list/product-list.js\": 1584,\n\t\"./portainer/components/slider/slider.js\": 1586,\n\t\"./portainer/components/slider/sliderController.js\": 1588,\n\t\"./portainer/components/stack-duplication-form/stack-duplication-form-controller.js\": 1589,\n\t\"./portainer/components/stack-duplication-form/stack-duplication-form.js\": 1590,\n\t\"./portainer/components/tag-selector/tag-selector.js\": 1592,\n\t\"./portainer/components/tag-selector/tagSelectorController.js\": 1594,\n\t\"./portainer/components/template-list/template-item/template-item.js\": 1595,\n\t\"./portainer/components/template-list/template-list-controller.js\": 1598,\n\t\"./portainer/components/template-list/template-list.js\": 1599,\n\t\"./portainer/components/template-widget.js\": 1601,\n\t\"./portainer/components/tooltip.js\": 1602,\n\t\"./portainer/components/widget-body.js\": 1603,\n\t\"./portainer/components/widget-custom-header.js\": 1604,\n\t\"./portainer/components/widget-footer.js\": 1605,\n\t\"./portainer/components/widget-header.js\": 1606,\n\t\"./portainer/components/widget-taskbar.js\": 1607,\n\t\"./portainer/components/widget.js\": 1608,\n\t\"./portainer/error.js\": 8,\n\t\"./portainer/filters/filters.js\": 1609,\n\t\"./portainer/helpers/endpointHelper.js\": 1610,\n\t\"./portainer/helpers/formHelper.js\": 1611,\n\t\"./portainer/helpers/networkHelper.js\": 1612,\n\t\"./portainer/helpers/resourceControlHelper.js\": 1613,\n\t\"./portainer/helpers/stackHelper.js\": 1614,\n\t\"./portainer/helpers/tagHelper.js\": 241,\n\t\"./portainer/helpers/templateHelper.js\": 1615,\n\t\"./portainer/helpers/urlHelper.js\": 1616,\n\t\"./portainer/helpers/userHelper.js\": 1617,\n\t\"./portainer/helpers/webhookHelper.js\": 1618,\n\t\"./portainer/interceptors/endpointStatusInterceptor.js\": 1619,\n\t\"./portainer/models/access.js\": 102,\n\t\"./portainer/models/dockerhub.js\": 238,\n\t\"./portainer/models/endpoint/formValues.js\": 333,\n\t\"./portainer/models/endpoint/models.js\": 14,\n\t\"./portainer/models/gitlabRegistry.js\": 452,\n\t\"./portainer/models/group.js\": 181,\n\t\"./portainer/models/motd.js\": 453,\n\t\"./portainer/models/registry.js\": 154,\n\t\"./portainer/models/registryRepository.js\": 454,\n\t\"./portainer/models/registryTypes.js\": 70,\n\t\"./portainer/models/resourceControl/resourceControl.js\": 58,\n\t\"./portainer/models/resourceControl/resourceControlCreatePayload.js\": 1620,\n\t\"./portainer/models/resourceControl/resourceControlOwnership.js\": 16,\n\t\"./portainer/models/resourceControl/resourceControlOwnershipParameters.js\": 224,\n\t\"./portainer/models/resourceControl/resourceControlTypes.js\": 124,\n\t\"./portainer/models/resourceControl/resourceControlUpdatePayload.js\": 1621,\n\t\"./portainer/models/schedule.js\": 245,\n\t\"./portainer/models/settings.js\": 334,\n\t\"./portainer/models/stack.js\": 180,\n\t\"./portainer/models/status.js\": 335,\n\t\"./portainer/models/tag.js\": 336,\n\t\"./portainer/models/team.js\": 337,\n\t\"./portainer/models/teamMembership.js\": 169,\n\t\"./portainer/models/template.js\": 455,\n\t\"./portainer/models/user.js\": 338,\n\t\"./portainer/models/webhook.js\": 456,\n\t\"./portainer/oauth/__module.js\": 1622,\n\t\"./portainer/oauth/components/oauth-providers-selector/oauth-provider-selector-controller.js\": 1623,\n\t\"./portainer/oauth/components/oauth-providers-selector/oauth-providers-selector.js\": 1624,\n\t\"./portainer/oauth/components/oauth-settings/oauth-settings-controller.js\": 1626,\n\t\"./portainer/oauth/components/oauth-settings/oauth-settings.js\": 1627,\n\t\"./portainer/oauth/services/rest/oauth.js\": 1629,\n\t\"./portainer/rest/auth.js\": 1630,\n\t\"./portainer/rest/customTemplate.js\": 1631,\n\t\"./portainer/rest/dockerhub.js\": 1632,\n\t\"./portainer/rest/endpoint.js\": 1633,\n\t\"./portainer/rest/gitlab.js\": 1634,\n\t\"./portainer/rest/group.js\": 1635,\n\t\"./portainer/rest/legacyExtension.js\": 1636,\n\t\"./portainer/rest/motd.js\": 1637,\n\t\"./portainer/rest/registry.js\": 1638,\n\t\"./portainer/rest/resourceControl.js\": 1639,\n\t\"./portainer/rest/settings.js\": 1640,\n\t\"./portainer/rest/stack.js\": 1641,\n\t\"./portainer/rest/status.js\": 1642,\n\t\"./portainer/rest/support.js\": 1643,\n\t\"./portainer/rest/tag.js\": 1644,\n\t\"./portainer/rest/team.js\": 1645,\n\t\"./portainer/rest/teamMembership.js\": 1646,\n\t\"./portainer/rest/template.js\": 1647,\n\t\"./portainer/rest/transform/getEndpointsTotalCount.js\": 457,\n\t\"./portainer/rest/transform/gitlabResponseGetLink.js\": 339,\n\t\"./portainer/rest/user.js\": 1648,\n\t\"./portainer/rest/webhooks.js\": 1649,\n\t\"./portainer/services/allSettled.js\": 240,\n\t\"./portainer/services/api/accessService.js\": 1650,\n\t\"./portainer/services/api/customTemplate.js\": 1651,\n\t\"./portainer/services/api/dockerhubService.js\": 1652,\n\t\"./portainer/services/api/endpointService.js\": 1653,\n\t\"./portainer/services/api/groupService.js\": 1654,\n\t\"./portainer/services/api/legacyExtensionService.js\": 1655,\n\t\"./portainer/services/api/motdService.js\": 1656,\n\t\"./portainer/services/api/registryService.js\": 1657,\n\t\"./portainer/services/api/resourceControlService.js\": 1658,\n\t\"./portainer/services/api/settingsService.js\": 1659,\n\t\"./portainer/services/api/stackService.js\": 1660,\n\t\"./portainer/services/api/statusService.js\": 1661,\n\t\"./portainer/services/api/supportService.js\": 1662,\n\t\"./portainer/services/api/tagService.js\": 1663,\n\t\"./portainer/services/api/teamMembershipService.js\": 1664,\n\t\"./portainer/services/api/teamService.js\": 1665,\n\t\"./portainer/services/api/templateService.js\": 1666,\n\t\"./portainer/services/api/userService.js\": 1667,\n\t\"./portainer/services/api/webhookService.js\": 1668,\n\t\"./portainer/services/async.js\": 1669,\n\t\"./portainer/services/authentication.js\": 1670,\n\t\"./portainer/services/chartService.js\": 1671,\n\t\"./portainer/services/codeMirror.js\": 1672,\n\t\"./portainer/services/datatableService.js\": 1698,\n\t\"./portainer/services/endpointProvider.js\": 1699,\n\t\"./portainer/services/fileUpload.js\": 1700,\n\t\"./portainer/services/formValidator.js\": 1701,\n\t\"./portainer/services/httpRequestHelper.js\": 1702,\n\t\"./portainer/services/legacyExtensionManager.js\": 1703,\n\t\"./portainer/services/localStorage.js\": 1704,\n\t\"./portainer/services/modalService.js\": 1705,\n\t\"./portainer/services/notifications.js\": 1706,\n\t\"./portainer/services/pagination.js\": 1707,\n\t\"./portainer/services/registryGitlabService.js\": 1708,\n\t\"./portainer/services/stateManager.js\": 1709,\n\t\"./portainer/views/account/accountController.js\": 1710,\n\t\"./portainer/views/auth/authController.js\": 1711,\n\t\"./portainer/views/custom-templates/create-custom-template-view/createCustomTemplateViewController.js\": 458,\n\t\"./portainer/views/custom-templates/create-custom-template-view/index.js\": 1714,\n\t\"./portainer/views/custom-templates/custom-templates-view/customTemplatesViewController.js\": 459,\n\t\"./portainer/views/custom-templates/custom-templates-view/index.js\": 1716,\n\t\"./portainer/views/custom-templates/edit-custom-template-view/editCustomTemplateViewController.js\": 460,\n\t\"./portainer/views/custom-templates/edit-custom-template-view/index.js\": 1718,\n\t\"./portainer/views/endpoints/access/endpointAccessController.js\": 1720,\n\t\"./portainer/views/endpoints/create/createEndpointController.js\": 1721,\n\t\"./portainer/views/endpoints/edit/endpointController.js\": 1722,\n\t\"./portainer/views/endpoints/endpointsController.js\": 1723,\n\t\"./portainer/views/groups/access/groupAccessController.js\": 1724,\n\t\"./portainer/views/groups/create/createGroupController.js\": 1725,\n\t\"./portainer/views/groups/edit/groupController.js\": 1726,\n\t\"./portainer/views/groups/groupsController.js\": 1727,\n\t\"./portainer/views/home/homeController.js\": 1728,\n\t\"./portainer/views/init/admin/initAdminController.js\": 1729,\n\t\"./portainer/views/init/endpoint/initEndpointController.js\": 1730,\n\t\"./portainer/views/logout/logoutController.js\": 1734,\n\t\"./portainer/views/main/mainController.js\": 1735,\n\t\"./portainer/views/registries/access/registryAccessController.js\": 1736,\n\t\"./portainer/views/registries/create/createRegistryController.js\": 1737,\n\t\"./portainer/views/registries/edit/registryController.js\": 1738,\n\t\"./portainer/views/registries/registriesController.js\": 1739,\n\t\"./portainer/views/settings/authentication/settingsAuthenticationController.js\": 1740,\n\t\"./portainer/views/settings/settingsController.js\": 1741,\n\t\"./portainer/views/sidebar/sidebarController.js\": 1742,\n\t\"./portainer/views/stacks/create/createStackController.js\": 1743,\n\t\"./portainer/views/stacks/edit/stackController.js\": 1744,\n\t\"./portainer/views/stacks/stacksController.js\": 1745,\n\t\"./portainer/views/tags/tagsController.js\": 1746,\n\t\"./portainer/views/teams/edit/teamController.js\": 1747,\n\t\"./portainer/views/teams/teamsController.js\": 1748,\n\t\"./portainer/views/templates/templatesController.js\": 1749,\n\t\"./portainer/views/users/edit/userController.js\": 1750,\n\t\"./portainer/views/users/usersController.js\": 1751,\n\t\"./vendors.js\": 1752\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 = 814;","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('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 title: '@',\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 Name\\n \\n \\n \\n \\n \\n Location\\n \\n \\n \\n \\n Published Ports\\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
    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
    \\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\";\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 function ($q, $scope, $state, AzureService, Notifications) {\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(function success() {\n Notifications.success('Container successfully created', model.Name);\n $state.go('azure.containerinstances');\n })\n .catch(function error(err) {\n err = err.data ? err.data.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 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 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 var 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 $scope.model = model;\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","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('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_SYSTEM_NAMESPACES', ['kube-system', 'kube-public', 'kube-node-lease', 'portainer']);\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\";\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 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 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.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 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.$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 Host \\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('./porImageRegistry.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 onImageChange: '&',\n },\n require: {\n form: '^form',\n },\n});\n","var path = 'app/docker/components/imageRegistry/porImageRegistry.html';\nvar html = \"\\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n {{ $ctrl.displayedRegistryURL() }}\\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

    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\";\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 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('./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 }\\\">{{ line }}

    \\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);\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, '')]);\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","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);\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]);\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]);\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 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 {\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","angular.module('portainer.docker').factory('LogHelper', [\n function LogHelperFactory() {\n 'use strict';\n var helper = {};\n\n // Return an array with each line being an entry.\n // It will also remove any ANSI code related character sequences.\n // If the skipHeaders param is specified, it will strip the 8 first characters of each line.\n helper.formatLogs = function (logs, skipHeaders) {\n logs = logs.replace(/[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, '');\n\n if (skipHeaders) {\n logs = logs.substring(8);\n logs = logs.replace(/\\n(.{8})/g, '\\n\\r');\n }\n\n return logs.split('\\n');\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.translateEnvironmentVariables = function (env) {\n if (env) {\n var variables = [];\n env.forEach(function (variable) {\n var idx = variable.indexOf('=');\n var keyValue = [variable.slice(0, idx), variable.slice(idx + 1)];\n var originalValue = keyValue.length > 1 ? keyValue[1] : '';\n variables.push({\n key: keyValue[0],\n value: originalValue,\n originalKey: keyValue[0],\n originalValue: originalValue,\n added: true,\n });\n });\n return variables;\n }\n return [];\n };\n\n helper.translateEnvironmentVariablesToEnv = function (env) {\n if (env) {\n var variables = [];\n env.forEach(function (variable) {\n if (variable.key && variable.key !== '') {\n variables.push(variable.key + '=' + variable.value);\n }\n });\n return variables;\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$, Notifications, ConfigService, Authentication, FormValidator, ResourceControlService) {\n this.$state = $state;\n this.$transition$ = $transition$;\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 };\n\n this.editorUpdate = this.editorUpdate.bind(this);\n this.createAsync = this.createAsync.bind(this);\n }\n\n async $onInit() {\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 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.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 }\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';\nimport { PorImageRegistryModel } from 'Docker/models/porImageRegistry';\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 'SettingsService',\n 'PluginService',\n 'HttpRequestHelper',\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 SettingsService,\n PluginService,\n HttpRequestHelper\n ) {\n $scope.create = create;\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 NodeName: null,\n capabilities: [],\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 };\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.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 },\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.addEnvironmentVariable = function () {\n $scope.config.Env.push({ name: '', value: '' });\n };\n\n $scope.removeEnvironmentVariable = function (index) {\n $scope.config.Env.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.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 var env = [];\n config.Env.forEach(function (v) {\n if (v.name && v.value) {\n env.push(v.name + '=' + v.value);\n }\n });\n config.Env = 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 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 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 var envArr = [];\n for (var e in $scope.config.Env) {\n if ({}.hasOwnProperty.call($scope.config.Env, e)) {\n var arr = $scope.config.Env[e].split(/\\=(.*)/);\n envArr.push({ name: arr[0], value: arr[1] });\n }\n }\n $scope.config.Env = envArr;\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 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 })\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.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 SettingsService.publicSettings()\n .then(function success(data) {\n $scope.allowBindMounts = $scope.isAdminOrEndpointAdmin || data.AllowBindMountsForRegularUsers;\n $scope.allowPrivilegedMode = data.AllowPrivilegedModeForRegularUsers;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve application settings');\n });\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 const { allowDeviceMappingForRegularUsers } = $scope.applicationState.application;\n\n return allowDeviceMappingForRegularUsers || Authentication.isAdmin();\n }\n\n async function checkIfContainerCapabilitiesEnabled() {\n const { allowContainerCapabilitiesForRegularUsers } = $scope.applicationState.application;\n\n return 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 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 ) {\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 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 appState = StateManager.getState();\n const {\n allowContainerCapabilitiesForRegularUsers,\n allowHostNamespaceForRegularUsers,\n allowDeviceMappingForRegularUsers,\n allowBindMountsForRegularUsers,\n allowPrivilegedModeForRegularUsers,\n } = appState.application;\n\n const settingRestrictsRegularUsers =\n !allowContainerCapabilitiesForRegularUsers ||\n !allowBindMountsForRegularUsers ||\n !allowDeviceMappingForRegularUsers ||\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 };\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 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\n stopRepeater();\n setUpdateRepeater(networkChart, cpuChart, memoryChart);\n $('#refreshRateChange').show();\n $('#refreshRateChange').fadeOut(1500);\n };\n\n function startChartUpdate(networkChart, cpuChart, memoryChart) {\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 updateNetworkChart(stats, networkChart);\n updateMemoryChart(stats, memoryChart);\n updateCPUChart(stats, cpuChart);\n setUpdateRepeater(networkChart, cpuChart, memoryChart);\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) {\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 })\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 startChartUpdate(networkChart, cpuChart, memoryChart);\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 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 ) {\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 const { allowStackManagementForRegularUsers } = $scope.applicationState.application;\n\n return isAdmin || allowStackManagementForRegularUsers;\n }\n\n initView();\n },\n]);\n","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 = applicationState.application.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});\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', [\n '$scope',\n '$state',\n 'BuildService',\n 'Notifications',\n 'HttpRequestHelper',\n function ($scope, $state, BuildService, Notifications, HttpRequestHelper) {\n $scope.state = {\n BuildType: 'editor',\n actionInProgress: false,\n activeTab: 0,\n };\n\n $scope.formValues = {\n ImageNames: [{ Name: '' }],\n UploadFile: null,\n DockerFileContent: '',\n URL: '',\n Path: 'Dockerfile',\n NodeName: null,\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 = function () {\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 buildImageBasedOnBuildType(buildType, imageNames)\n .then(function success(data) {\n $scope.buildLogs = data.buildLogs;\n $scope.state.activeTab = 1;\n if (data.hasError) {\n Notifications.error('An error occured during build', { msg: 'Please check build logs output' });\n } else {\n Notifications.success('Image successfully built');\n }\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to build image');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\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 };\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 })\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 'ImageService',\n 'Notifications',\n 'ModalService',\n 'HttpRequestHelper',\n 'FileSaver',\n 'Blob',\n 'EndpointProvider',\n function ($scope, $state, ImageService, Notifications, ModalService, HttpRequestHelper, FileSaver, Blob, EndpointProvider) {\n $scope.state = {\n actionInProgress: false,\n exportInProgress: 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 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.message, '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 = applicationState.application.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});\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';\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 'SettingsService',\n 'WebhookService',\n 'EndpointProvider',\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 SettingsService,\n WebhookService,\n EndpointProvider\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 };\n\n $scope.allowBindMounts = false;\n\n $scope.refreshSlider = function () {\n $timeout(function () {\n $scope.$broadcast('rzSliderForceRender');\n });\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.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 $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 var env = [];\n input.Env.forEach(function (v) {\n if (v.name) {\n env.push(v.name + '=' + v.value);\n }\n });\n config.TaskTemplate.ContainerSpec.Env = 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($scope.formValues.Webhook && WebhookService.createServiceWebhook(serviceId, EndpointProvider.endpointID()));\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 settings = await SettingsService.publicSettings();\n const { AllowBindMountsForRegularUsers } = settings;\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
    By default, secrets will be available under /run/secrets/$SECRET_NAME in containers.
    \\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';\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 'Service',\n 'ServiceHelper',\n 'LabelHelper',\n 'TaskService',\n 'NodeService',\n 'ContainerService',\n 'TaskHelper',\n 'Notifications',\n 'ModalService',\n 'PluginService',\n 'Authentication',\n 'SettingsService',\n 'VolumeService',\n 'ImageHelper',\n 'WebhookService',\n 'EndpointProvider',\n 'clipboard',\n 'WebhookHelper',\n 'NetworkService',\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 Service,\n ServiceHelper,\n LabelHelper,\n TaskService,\n NodeService,\n ContainerService,\n TaskHelper,\n Notifications,\n ModalService,\n PluginService,\n Authentication,\n SettingsService,\n VolumeService,\n ImageHelper,\n WebhookService,\n EndpointProvider,\n clipboard,\n WebhookHelper,\n NetworkService\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({ key: '', value: '', originalValue: '' });\n updateServiceArray(service, 'EnvironmentVariables', service.EnvironmentVariables);\n };\n $scope.removeEnvironmentVariable = function removeEnvironmentVariable(service, index) {\n var removedElement = service.EnvironmentVariables.splice(index, 1);\n if (removedElement !== null) {\n updateServiceArray(service, 'EnvironmentVariables', service.EnvironmentVariables);\n }\n };\n $scope.updateEnvironmentVariable = function updateEnvironmentVariable(service, variable) {\n if (variable.value !== variable.originalValue || variable.key !== variable.originalKey) {\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 $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 = ServiceHelper.translateEnvironmentVariablesToEnv(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.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 = ServiceHelper.translateEnvironmentVariables(service.Env);\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 settings: SettingsService.publicSettings(),\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 = data.settings.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\\\" classes=\\\"no-padding\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    NameValue
    \\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/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

    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
    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 $q.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: data.version.toLowerCase() });\n\n var options = 'addr=' + data.serverAddress + ',' + data.options;\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 function ($q, $scope, $state, VolumeService, ServiceService, VolumeHelper, Notifications, HttpRequestHelper, EndpointProvider, Authentication, ModalService) {\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 =\n $scope.applicationState.endpoint.mode.agentProxy && (Authentication.isAdmin() || $scope.applicationState.application.enableVolumeBrowserForNonAdminUsers);\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 },\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 },\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 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 the\\n master branch.\\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n Indicate the path to the Compose 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
    \\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 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 } 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 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 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(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(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 },\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 {{ 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 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 }}\\n \\n \\n {{ item.Node }}\\n \\n \\n -\\n {{ item.CreationDate | getisodate }}\\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 {{ item.Image }} 1\\\">+ {{ item.Containers.length - 1 }}\\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 Resource pool\\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.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 Resource pool\\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 Resource Pool\\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 }}
    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 {{ item.Image }} 1\\\">+ {{ item.Containers.length - 1 }}\\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 Resource pool\\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.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 },\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 {{ item.Status }}\\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 \\n {{ item.Name }}\\n \\n api\\n {{ item.Name }}{{ item.Role }}{{ item.CPU }}{{ item.Memory | humansize }}{{ item.Version }}{{ item.IPAddress }}
    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 {{ item.Image }} 1\\\">+ {{ item.Containers.length - 1 }}\\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.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 resource pool 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 Resource pool\\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 },\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
    \\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 \\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() {\n this.state.duplicateKeys = KubernetesFormValidationHelper.getDuplicates(_.map(this.formValues.Data, (data) => data.Key));\n this.isValid = Object.keys(this.state.duplicateKeys).length === 0;\n }\n\n addEntry() {\n this.formValues.Data.push(new KubernetesConfigurationFormValuesEntry());\n }\n\n removeEntry(index) {\n this.formValues.Data.splice(index, 1);\n this.onChangeKey();\n }\n\n async editorUpdateAsync(cm) {\n this.formValues.DataYaml = cm.getValue();\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 }\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 };\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 Resource pools \\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 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 }\n\n copyYAML() {\n this.clipboard.copyText(this.data);\n $('#copyNotificationYAML').show().fadeOut(2500);\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","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) {\n this.KUBERNETES_SYSTEM_NAMESPACES = KUBERNETES_SYSTEM_NAMESPACES;\n }\n\n isSystemNamespace(namespace) {\n return _.includes(this.KUBERNETES_SYSTEM_NAMESPACES, 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 * as _ from 'lodash-es';\nimport angular from 'angular';\nimport PortainerError from 'Portainer/error';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\nimport { KubernetesIngressConverter } from './converter';\n\nclass KubernetesIngressService {\n /* @ngInject */\n constructor($async, KubernetesIngresses) {\n this.$async = $async;\n this.KubernetesIngresses = KubernetesIngresses;\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.KubernetesIngresses(namespace).get(params).$promise, this.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 getAllAsync(namespace) {\n try {\n const data = await this.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 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(ingress) {\n try {\n const params = {};\n const payload = KubernetesIngressConverter.createPayload(ingress);\n const namespace = payload.metadata.namespace;\n const data = await this.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 create(ingress) {\n return this.$async(this.createAsync, ingress);\n }\n\n /**\n * PATCH\n */\n async patchAsync(oldIngress, newIngress) {\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 this.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 patch(oldIngress, newIngress) {\n return this.$async(this.patchAsync, oldIngress, newIngress);\n }\n\n /**\n * DELETE\n */\n async deleteAsync(ingress) {\n try {\n const params = new KubernetesCommonParams();\n params.id = ingress.IngressClass.Name;\n const namespace = ingress.Namespace;\n await this.KubernetesIngresses(namespace).delete(params).$promise;\n } catch (err) {\n throw new PortainerError('Unable to delete ingress', err);\n }\n }\n\n delete(ingress) {\n return this.$async(this.deleteAsync, ingress);\n }\n}\n\nexport default KubernetesIngressService;\nangular.module('portainer.kubernetes').service('KubernetesIngressService', KubernetesIngressService);\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 return data;\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 './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 }\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\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 }\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 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 * as _ 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 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 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 * as _ from 'lodash-es';\nimport { KubernetesResourceQuota } from 'Kubernetes/models/resource-quota/models';\n\nimport angular from 'angular';\nimport KubernetesResourcePoolConverter from 'Kubernetes/converters/resourcePool';\nimport KubernetesResourceQuotaHelper from 'Kubernetes/helpers/resourceQuotaHelper';\nimport { KubernetesNamespace } from 'Kubernetes/models/namespace/models';\nimport KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';\nimport { KubernetesIngressConverter } from 'Kubernetes/ingress/converter';\nimport KubernetesCommonHelper from 'Kubernetes/helpers/commonHelper';\n\nclass KubernetesResourcePoolService {\n /* @ngInject */\n constructor($async, KubernetesNamespaceService, KubernetesResourceQuotaService, KubernetesIngressService) {\n this.$async = $async;\n this.KubernetesNamespaceService = KubernetesNamespaceService;\n this.KubernetesResourceQuotaService = KubernetesResourceQuotaService;\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.deleteAsync = this.deleteAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAsync(name) {\n try {\n const namespace = await this.KubernetesNamespaceService.get(name);\n const [quotaAttempt] = await Promise.allSettled([this.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 getAllAsync() {\n try {\n const namespaces = await this.KubernetesNamespaceService.get();\n const pools = await Promise.all(\n _.map(namespaces, async (namespace) => {\n const name = namespace.Name;\n const [quotaAttempt] = await Promise.allSettled([this.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 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 * @param {KubernetesResourcePoolFormValues} formValues\n */\n async createAsync(formValues) {\n formValues.Owner = KubernetesCommonHelper.ownerToLabel(formValues.Owner);\n\n try {\n const namespace = new KubernetesNamespace();\n namespace.Name = formValues.Name;\n namespace.ResourcePoolName = formValues.Name;\n namespace.ResourcePoolOwner = formValues.Owner;\n await this.KubernetesNamespaceService.create(namespace);\n if (formValues.HasQuota) {\n const quota = new KubernetesResourceQuota(formValues.Name);\n quota.CpuLimit = formValues.CpuLimit;\n quota.MemoryLimit = KubernetesResourceReservationHelper.bytesValue(formValues.MemoryLimit);\n quota.ResourcePoolName = formValues.Name;\n quota.ResourcePoolOwner = formValues.Owner;\n await this.KubernetesResourceQuotaService.create(quota);\n }\n const ingressPromises = _.map(formValues.IngressClasses, (c) => {\n if (c.Selected) {\n c.Namespace = namespace.Name;\n const ingress = KubernetesIngressConverter.resourcePoolIngressClassFormValueToIngress(c);\n return this.KubernetesIngressService.create(ingress);\n }\n });\n await Promise.all(ingressPromises);\n } catch (err) {\n throw err;\n }\n }\n\n create(formValues) {\n return this.$async(this.createAsync, formValues);\n }\n\n /**\n * DELETE\n */\n async deleteAsync(pool) {\n try {\n await this.KubernetesNamespaceService.delete(pool.Namespace);\n } catch (err) {\n throw err;\n }\n }\n\n delete(pool) {\n return this.$async(this.deleteAsync, pool);\n }\n}\n\nexport default KubernetesResourcePoolService;\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\nclass KubernetesResourceQuotaService {\n /* @ngInject */\n constructor($async, KubernetesResourceQuotas) {\n this.$async = $async;\n this.KubernetesResourceQuotas = KubernetesResourceQuotas;\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.KubernetesResourceQuotas(namespace).get(params).$promise, this.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 getAllAsync(namespace) {\n try {\n const data = await this.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 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(quota) {\n try {\n const payload = KubernetesResourceQuotaConverter.createPayload(quota);\n const namespace = payload.metadata.namespace;\n const params = {};\n const data = await this.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 create(quota) {\n return this.$async(this.createAsync, quota);\n }\n\n /**\n * UPDATE\n */\n async updateAsync(quota) {\n try {\n const payload = KubernetesResourceQuotaConverter.updatePayload(quota);\n const params = new KubernetesCommonParams();\n params.id = payload.metadata.name;\n const namespace = payload.metadata.namespace;\n const data = await this.KubernetesResourceQuotas(namespace).update(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to update resource quota', err);\n }\n }\n\n update(quota) {\n return this.$async(this.updateAsync, quota);\n }\n\n /**\n * DELETE\n */\n async deleteAsync(quota) {\n try {\n const params = new KubernetesCommonParams();\n params.id = quota.Name;\n await this.KubernetesResourceQuotas(quota.Namespace).delete(params).$promise;\n } catch (err) {\n throw new PortainerError('Unable to delete quota', err);\n }\n }\n\n delete(quota) {\n return this.$async(this.deleteAsync, quota);\n }\n}\n\nexport default KubernetesResourceQuotaService;\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([await this.KubernetesPersistentVolumeClaimService.get(namespace, name), await 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 pools = await this.KubernetesResourcePoolService.get(namespace);\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 * as _ 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 Resource pools >\\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 },\n});\n","var path = 'app/kubernetes/views/applications/create/createApplication.html';\nvar html = \"\\n Applications > Create an application\\n\\n\\n Resource pools >\\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 resource pool.\\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 Resource pool\\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n This resource pool 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 resource pool.\\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 name\\n 1\\\"\\n required\\n />\\n
    \\n \\n \\n

    Environment variable name is required.

    \\n

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

    This environment variable is already defined.\\n

    \\n
    \\n\\n
    \\n value\\n 1\\\"\\n />\\n
    \\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 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

    Path is required.

    \\n
    \\n

    This path is already used.\\n

    \\n
    \\n\\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
    \\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 Shared\\n
    \\n

    All the instances of this application will use the same data

    \\n \\n
    \\n \\n \\n \\n
    \\n \\n \\n \\n
    \\n \\n Isolated\\n
    \\n

    Every instance of this application will use their own data

    \\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 resource pool, you must specify resource reservations. Resource reservations are applied per instance of the application. Maximums\\n are inherited from the resource pool quota.\\n
    \\n
    \\n\\n
    \\n
    \\n \\n This resource pool 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 resource pool.\\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 {{ 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

    Deploy an instance of this container 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: {{ 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 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 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 * as _ 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 KubernetesFormValueDuplicate,\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 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.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.onInit = this.onInit.bind(this);\n this.updateApplicationAsync = this.updateApplicationAsync.bind(this);\n this.deployApplicationAsync = this.deployApplicationAsync.bind(this);\n this.updateSlidersAsync = this.updateSlidersAsync.bind(this);\n this.refreshStacksAsync = this.refreshStacksAsync.bind(this);\n this.refreshConfigurationsAsync = this.refreshConfigurationsAsync.bind(this);\n this.refreshApplicationsAsync = this.refreshApplicationsAsync.bind(this);\n this.refreshNamespaceDataAsync = this.refreshNamespaceDataAsync.bind(this);\n this.getApplicationAsync = this.getApplicationAsync.bind(this);\n }\n /* #endregion */\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 SCLAER 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.hasDuplicates = 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(index) {\n this.formValues.EnvironmentVariables[index].NeedsDeletion = false;\n }\n\n removeEnvironmentVariable(index) {\n if (this.state.isEdit && !this.formValues.EnvironmentVariables[index].IsNew) {\n this.formValues.EnvironmentVariables[index].NeedsDeletion = true;\n } else {\n this.formValues.EnvironmentVariables.splice(index, 1);\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.hasDuplicates = 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 this.formValues.PersistedFolders.push(new KubernetesApplicationPersistedFolderFormValue(storageClass));\n this.resetDeploymentType();\n }\n\n restorePersistedFolder(index) {\n this.formValues.PersistedFolders[index].NeedsDeletion = false;\n }\n\n resetPersistedFolders() {\n this.formValues.PersistedFolders = _.forEach(this.formValues.PersistedFolders, (persistedFolder) => {\n persistedFolder.ExistingVolume = null;\n persistedFolder.UseNewVolume = true;\n });\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.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.hasDuplicates = 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 return persistedFolder.ExistingVolume ? persistedFolder.ExistingVolume.PersistentVolumeClaim.Name : '';\n })\n );\n this.state.duplicates.existingVolumes.hasDuplicates = Object.keys(this.state.duplicates.existingVolumes.refs).length > 0;\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 }\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 }\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.hasDuplicates = 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].Host : 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].Host : 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.hasDuplicates = Object.keys(duplicates).length > 0;\n } else {\n state.refs = {};\n state.hasDuplicates = 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.hasDuplicates = Object.keys(duplicates).length > 0;\n } else {\n state.refs = {};\n state.hasDuplicates = 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.IngressHost = ingress.Host;\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.hasDuplicates = Object.keys(duplicates).length > 0;\n } else {\n state.refs = {};\n state.hasDuplicates = 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.hasDuplicates = Object.keys(duplicates).length > 0;\n } else {\n state.refs = {};\n state.hasDuplicates = 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.hasDuplicates &&\n !this.state.duplicates.persistedFolders.hasDuplicates &&\n !this.state.duplicates.configurationPaths.hasDuplicates &&\n !this.state.duplicates.existingVolumes.hasDuplicates &&\n !this.state.duplicates.publishedPorts.containerPorts.hasDuplicates &&\n !this.state.duplicates.publishedPorts.nodePorts.hasDuplicates &&\n !this.state.duplicates.publishedPorts.ingressRoutes.hasDuplicates &&\n !this.state.duplicates.publishedPorts.loadBalancerPorts.hasDuplicates\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 = _.find(this.formValues.PersistedFolders, (item) => _.isEqual(item.StorageClass.AccessModes, ['RWO']));\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 = _.find(this.formValues.PersistedFolders, (item) => _.isEqual(item.StorageClass.AccessModes, ['RWO']));\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 (_.isEqual(folder.StorageClass.AccessModes, ['RWO'])) {\n storageOptions.push(folder.StorageClass.Name);\n }\n }\n\n return _.uniq(storageOptions).join(', ');\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 isEditAndExistingPersistedFolder(index) {\n return this.state.isEdit && this.formValues.PersistedFolders[index].PersistentVolumeClaimName;\n }\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 async updateSlidersAsync() {\n try {\n const quota = this.formValues.ResourcePool.Quota;\n let minCpu,\n maxCpu,\n minMemory,\n maxMemory = 0;\n if (quota) {\n this.state.resourcePoolHasQuota = true;\n if (quota.CpuLimit) {\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 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 this.state.resourcePoolHasQuota = false;\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 } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to update resources selector');\n }\n }\n\n updateSliders() {\n return this.$async(this.updateSlidersAsync);\n }\n\n async refreshStacksAsync(namespace) {\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 refreshStacks(namespace) {\n return this.$async(this.refreshStacksAsync, namespace);\n }\n\n async refreshConfigurationsAsync(namespace) {\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 refreshConfigurations(namespace) {\n return this.$async(this.refreshConfigurationsAsync, namespace);\n }\n\n async refreshApplicationsAsync(namespace) {\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 refreshApplications(namespace) {\n return this.$async(this.refreshApplicationsAsync, namespace);\n }\n\n refreshVolumes(namespace) {\n const filteredVolumes = _.filter(this.volumes, (volume) => {\n const isSameNamespace = volume.ResourcePool.Namespace.Name === namespace;\n const isUnused = !KubernetesVolumeHelper.isUsed(volume);\n const isRWX = volume.PersistentVolumeClaim.StorageClass && _.find(volume.PersistentVolumeClaim.StorageClass.AccessModes, (am) => am === 'RWX');\n return isSameNamespace && (isUnused || isRWX);\n });\n this.availableVolumes = filteredVolumes;\n }\n\n refreshIngresses(namespace) {\n this.filteredIngresses = _.filter(this.ingresses, { Namespace: namespace });\n if (!this.publishViaIngressEnabled()) {\n this.formValues.PublishingType = KubernetesApplicationPublishingTypes.INTERNAL;\n }\n this.formValues.OriginalIngresses = this.filteredIngresses;\n }\n\n async refreshNamespaceDataAsync(namespace) {\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 refreshNamespaceData(namespace) {\n return this.$async(this.refreshNamespaceDataAsync, namespace);\n }\n\n resetFormValues() {\n this.clearConfigurations();\n this.resetPersistedFolders();\n this.resetPublishedPorts();\n }\n\n onResourcePoolSelectionChange() {\n const namespace = this.formValues.ResourcePool.Namespace.Name;\n this.updateSliders();\n this.refreshNamespaceData(namespace);\n this.resetFormValues();\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 async getApplicationAsync() {\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 getApplication() {\n return this.$async(this.getApplicationAsync);\n }\n /* #endregion */\n\n /* #region ON INIT */\n async onInit() {\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 KubernetesFormValueDuplicate(),\n persistedFolders: new KubernetesFormValueDuplicate(),\n configurationPaths: new KubernetesFormValueDuplicate(),\n existingVolumes: new KubernetesFormValueDuplicate(),\n publishedPorts: {\n containerPorts: new KubernetesFormValueDuplicate(),\n nodePorts: new KubernetesFormValueDuplicate(),\n ingressRoutes: new KubernetesFormValueDuplicate(),\n loadBalancerPorts: new KubernetesFormValueDuplicate(),\n },\n placements: new KubernetesFormValueDuplicate(),\n },\n isEdit: false,\n params: {\n namespace: this.$transition$.params().namespace,\n name: this.$transition$.params().name,\n },\n PersistedFoldersUseExistingVolumes: false,\n };\n\n this.isAdmin = this.Authentication.isAdmin();\n\n this.editChanges = [];\n\n if (this.$transition$.params().namespace && this.$transition$.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\n // TODO: refactor @Max\n // Don't pull all volumes and applications across all namespaces\n // Use refreshNamespaceData flow (triggered on Init + on Namespace change)\n // and query only accross the selected namespace\n if (this.storageClassAvailable()) {\n const [applications, volumes] = await Promise.all([this.KubernetesApplicationService.get(), this.KubernetesVolumeService.get()]);\n this.volumes = volumes;\n _.forEach(this.volumes, (volume) => {\n volume.Applications = KubernetesVolumeHelper.getUsingApplications(volume, applications);\n });\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 );\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, (vol) => vol.PersistentVolumeClaim.Name === persistedFolder.PersistentVolumeClaimName);\n if (volume) {\n persistedFolder.UseNewVolume = false;\n persistedFolder.ExistingVolume = volume;\n }\n });\n }\n } else {\n this.formValues.AutoScaler = KubernetesApplicationHelper.generateAutoScalerFormValueFromHorizontalPodAutoScaler(null, this.formValues.ReplicaCount);\n this.formValues.OriginalIngressClasses = angular.copy(this.ingresses);\n }\n\n await this.updateSliders();\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 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 Resource pools >\\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 }}
    Resource pool\\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 \\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 * as _ 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]) > parseInt(e.values[0])) ||\n (e.operator === KubernetesPodNodeAffinityNodeSelectorRequirementOperators.LOWER_THAN && exists && parseInt(n.Labels[e.key]) < parseInt(e.values[0]))\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 ) {\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.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 };\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 * as _ 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 Resource pools >\\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('./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 ) {\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\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 }\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
    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\\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 } 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.getNodeAsync = this.getNodeAsync.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 }\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 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 isFormValid() {\n return !this.state.hasDuplicateTaintKeys && !this.state.hasDuplicateLabelKeys && !this.isNoChangesMade();\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 await this.KubernetesNodeService.patch(this.node, this.formValues);\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\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 {\n return this.$async(this.updateNodeAsync);\n }\n }\n\n async getNodeAsync() {\n try {\n this.state.dataLoading = true;\n const nodeName = this.$transition$.params().name;\n this.node = await this.KubernetesNodeService.get(nodeName);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve node');\n } finally {\n this.state.dataLoading = false;\n }\n }\n\n getNode() {\n return this.$async(this.getNodeAsync);\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 } 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 };\n\n this.state.activeTab = this.LocalStorage.getActiveTab('node');\n\n await this.getNode();\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('./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 resource pool.\\n

    \\n
    \\n \\n\\n
    \\n Resource pool\\n
    \\n\\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n This resource pool has exhausted its resource capacity and you will not be able to deploy the configuration. Contact your administrator to expand the capacity of\\n the resource pool.\\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 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, Notifications, Authentication, KubernetesConfigurationService, KubernetesResourcePoolService, KubernetesNamespaceHelper) {\n this.$async = $async;\n this.$state = $state;\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.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 onInit() {\n this.state = {\n actionInProgress: false,\n viewReady: false,\n alreadyExist: false,\n isDataValid: true,\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\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 Resource pools >\\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
    Resource Pool\\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 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 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.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 } 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 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 };\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 } 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('configuration', 0);\n }\n }\n}\n\nexport default KubernetesConfigurationController;\nangular.module('portainer.kubernetes').controller('KubernetesConfigurationController', KubernetesConfigurationController);\n","import * as _ from 'lodash-es';\nimport angular from 'angular';\nimport { KubernetesStorageClass, KubernetesStorageClassAccessPolicies } from 'Kubernetes/models/storage-class/models';\nimport { KubernetesFormValueDuplicate } 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 /* @ngInject */\n constructor($async, $state, $stateParams, Notifications, KubernetesStorageService, EndpointService, EndpointProvider, ModalService) {\n this.$async = $async;\n this.$state = $state;\n this.$stateParams = $stateParams;\n this.Notifications = Notifications;\n this.KubernetesStorageService = KubernetesStorageService;\n this.EndpointService = EndpointService;\n this.EndpointProvider = EndpointProvider;\n this.ModalService = ModalService;\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.hasDuplicates = 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 configureAsync() {\n try {\n this.state.actionInProgress = true;\n const [storageClasses, ingressClasses] = this.transformFormValues();\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 will make them unavailable for future use.
    Existing resources linked to these ingress controllers will continue to live in cluster but you will not be able to remove them from Portainer.

    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.$stateParams.id,\n duplicates: {\n ingressClasses: new KubernetesFormValueDuplicate(),\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
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Endpoint\\n {{ ctrl.endpoint.Name }}\\n
    URL{{ ctrl.endpoint.URL | stripprotocol }}
    Tags{{ ctrl.endpointTags }}
    \\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 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 Web editor\\n
    \\n
    \\n \\n

    \\n \\n Portainer uses Kompose to convert your Compose manifest to a Kubernetes compliant manifest. Be wary that not\\n 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 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 } from 'Kubernetes/models/deploy';\n\nclass KubernetesDeployController {\n /* @ngInject */\n constructor($async, $state, Notifications, EndpointProvider, KubernetesResourcePoolService, StackService) {\n this.$async = $async;\n this.$state = $state;\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 return _.isEmpty(this.formValues.EditorContent) || _.isEmpty(this.formValues.Namespace) || this.state.actionInProgress;\n }\n\n async editorUpdateAsync(cm) {\n this.formValues.EditorContent = cm.getValue();\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 compose = this.state.DeployType === this.ManifestDeployTypes.COMPOSE;\n await this.StackService.kubernetesDeploy(this.endpointId, this.formValues.Namespace, this.formValues.EditorContent, compose);\n this.Notifications.success('Manifest successfully deployed');\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 this.namespaces = _.map(pools, 'Namespace');\n this.formValues.Namespace = this.namespaces[0].Name;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to load resource pools data');\n }\n }\n\n getNamespaces() {\n return this.$async(this.getNamespacesAsync);\n }\n\n async onInit() {\n this.state = {\n DeployType: KubernetesDeployManifestTypes.KUBERNETES,\n tabLogsDisabled: true,\n activeTab: 0,\n viewReady: false,\n };\n\n this.formValues = {};\n this.ManifestDeployTypes = KubernetesDeployManifestTypes;\n this.endpointId = this.EndpointProvider.endpointID();\n\n await this.getNamespaces();\n\n this.state.viewReady = true;\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 Resource pools >\\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 resource pool 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 Resource pools > Create a resource pool\\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 resource pool with the same name already exists.

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

    \\n \\n A resource pool segments the underyling physical Kubernetes cluster into smaller virtual clusters. You should assign a capped limit of resources to this pool 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 resource pool. Set this quota to 0 to effectively disable the use of\\n load balancers in this resource pool.\\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 resource pool.\\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 resource pool.\\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
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n

    \\n \\n This host is already used.\\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 Actions\\n
    \\n \\n
    \\n
    \\n \\n Create resource pool\\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 { KubernetesResourcePoolFormValues, KubernetesResourcePoolIngressClassAnnotationFormValue } from 'Kubernetes/models/resource-pool/formValues';\nimport { KubernetesIngressConverter } from 'Kubernetes/ingress/converter';\nimport KubernetesFormValidationHelper from 'Kubernetes/helpers/formValidationHelper';\nimport { KubernetesFormValueDuplicate } 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\n const hosts = _.map(this.formValues.IngressClasses, 'Host');\n const allHosts = _.map(this.allIngresses, 'Host');\n const duplicates = KubernetesFormValidationHelper.getDuplicates(hosts);\n _.forEach(hosts, (host, idx) => {\n if (_.includes(allHosts, host) && host !== undefined) {\n duplicates[idx] = host;\n }\n });\n state.refs = duplicates;\n state.hasDuplicates = Object.keys(duplicates).length > 0;\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.hasDuplicates;\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 RESOURCE POOL */\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('Resource pool successfully created', this.formValues.Name);\n this.$state.go('kubernetes.resourcePools');\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to create resource pool');\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 this.state.ingressesLoading = true;\n try {\n this.allIngresses = await this.KubernetesIngressService.get();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve ingresses.');\n } finally {\n this.state.ingressesLoading = false;\n }\n }\n\n getIngresses() {\n return this.$async(this.getIngressesAsync);\n }\n /* #endregion */\n\n /* #region GET RESOURCE POOLS */\n async getResourcePoolsAsync() {\n try {\n this.resourcePools = await this.KubernetesResourcePoolService.get();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve resource pools');\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\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 KubernetesFormValueDuplicate(),\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 } 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 Resource pools > {{ ctrl.pool.Namespace.Name }}\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n \\n \\n Resource pool \\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 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.defaults.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 \\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 resource pool.\\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
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n

    \\n \\n This host is already used.\\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 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 resource pool. Set this quota to 0 to effectively disable the use\\n of load balancers in this resource pool.\\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\\n effectively prevent the usage of a specific storage option inside this resource pool.\\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 Actions\\n
    \\n
    \\n
    \\n \\n Update resource pool\\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 * as _ 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 { KubernetesResourcePoolFormValues, KubernetesResourcePoolIngressClassAnnotationFormValue } from 'Kubernetes/models/resource-pool/formValues';\nimport { KubernetesIngressConverter } from 'Kubernetes/ingress/converter';\nimport { KubernetesFormValueDuplicate } from 'Kubernetes/models/application/formValues';\nimport KubernetesFormValidationHelper from 'Kubernetes/helpers/formValidationHelper';\nimport { KubernetesIngressClassTypes } from 'Kubernetes/ingress/constants';\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 ) {\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\n this.IngressClassTypes = KubernetesIngressClassTypes;\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.getEventsAsync = this.getEventsAsync.bind(this);\n this.getApplications = this.getApplications.bind(this);\n this.getApplicationsAsync = this.getApplicationsAsync.bind(this);\n this.getIngresses = this.getIngresses.bind(this);\n this.getIngressesAsync = this.getIngressesAsync.bind(this);\n }\n /* #endregion */\n\n onChangeIngressHostname() {\n const state = this.state.duplicates.ingressHosts;\n\n const hosts = _.map(this.formValues.IngressClasses, 'Host');\n const otherIngresses = _.without(this.allIngresses, ...this.ingresses);\n const allHosts = _.map(otherIngresses, 'Host');\n const duplicates = KubernetesFormValidationHelper.getDuplicates(hosts);\n _.forEach(hosts, (host, idx) => {\n if (_.includes(allHosts, host) && host !== undefined) {\n duplicates[idx] = host;\n }\n });\n state.refs = duplicates;\n state.hasDuplicates = Object.keys(duplicates).length > 0;\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 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.hasDuplicates;\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 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 async updateResourcePoolAsync() {\n this.state.actionInProgress = true;\n try {\n this.checkDefaults();\n const namespace = this.pool.Namespace.Name;\n const cpuLimit = this.formValues.CpuLimit;\n const memoryLimit = KubernetesResourceReservationHelper.bytesValue(this.formValues.MemoryLimit);\n const owner = this.pool.Namespace.ResourcePoolOwner;\n const quota = this.pool.Quota;\n\n if (this.formValues.HasQuota) {\n if (quota) {\n quota.CpuLimit = cpuLimit;\n quota.MemoryLimit = memoryLimit;\n await this.KubernetesResourceQuotaService.update(quota);\n } else {\n await this.createResourceQuotaAsync(namespace, owner, cpuLimit, memoryLimit);\n }\n } else if (quota) {\n await this.KubernetesResourceQuotaService.delete(quota);\n }\n\n const promises = _.map(this.formValues.IngressClasses, (c) => {\n c.Namespace = namespace;\n if (c.WasSelected === false && c.Selected === true) {\n const ingress = KubernetesIngressConverter.resourcePoolIngressClassFormValueToIngress(c);\n return this.KubernetesIngressService.create(ingress);\n } else if (c.WasSelected === true && c.Selected === false) {\n return this.KubernetesIngressService.delete(c);\n } else if (c.WasSelected === true && c.Selected === true) {\n const oldIngress = _.find(this.ingresses, { Name: c.IngressClass.Name });\n const newIngress = KubernetesIngressConverter.resourcePoolIngressClassFormValueToIngress(c);\n newIngress.Paths = angular.copy(oldIngress.Paths);\n newIngress.PreviousHost = oldIngress.Host;\n return this.KubernetesIngressService.patch(oldIngress, newIngress);\n }\n });\n await Promise.all(promises);\n\n this.Notifications.success('Resource pool successfully updated', this.pool.Namespace.Name);\n this.$state.reload();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to create resource pool');\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\" resource pool 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\n hasEventWarnings() {\n return this.state.eventWarningCount;\n }\n\n /* #region GET EVENTS */\n async getEventsAsync() {\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 resource pool related events');\n } finally {\n this.state.eventsLoading = false;\n }\n }\n\n getEvents() {\n return this.$async(this.getEventsAsync);\n }\n /* #endregion */\n\n /* #region GET APPLICATIONS */\n async getApplicationsAsync() {\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 getApplications() {\n return this.$async(this.getApplicationsAsync);\n }\n /* #endregion */\n\n /* #region GET INGRESSES */\n async getIngressesAsync() {\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 getIngresses() {\n return this.$async(this.getIngressesAsync);\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 this.defaults = KubernetesResourceQuotaDefaults;\n this.formValues = new KubernetesResourcePoolFormValues(this.defaults);\n this.formValues.HasQuota = false;\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 KubernetesFormValueDuplicate(),\n },\n };\n\n this.state.activeTab = this.LocalStorage.getActiveTab('resourcePool');\n\n const name = this.$transition$.params().id;\n\n const [nodes, pool] = await Promise.all([this.KubernetesNodeService.get(), this.KubernetesResourcePoolService.get(name)]);\n\n this.pool = pool;\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 = pool.Quota;\n if (quota) {\n this.oldQuota = angular.copy(quota);\n this.formValues.HasQuota = true;\n this.formValues.CpuLimit = quota.CpuLimit;\n this.formValues.MemoryLimit = KubernetesResourceReservationHelper.megaBytesValue(quota.MemoryLimit);\n\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 }\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 Resource pools\\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('Resource pool 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 resource pool');\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 resource pool(s)? All the resources associated to the selected resource pool(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 resource pools');\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 Resource pools\\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","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 Resource pools >\\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
    Resource pool\\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);\n if (this.state.oldVolumeSize > size) {\n this.state.volumeSizeError = true;\n } else {\n this.volume.PersistentVolumeClaim.Storage = size;\n this.state.volumeSizeError = false;\n }\n }\n }\n\n sizeIsValid() {\n return !this.state.volumeSizeError && this.state.oldVolumeSize !== this.volume.PersistentVolumeClaim.Storage;\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) + 'i';\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));\n this.state.volumeSizeUnit = volume.PersistentVolumeClaim.Storage.slice(-2);\n this.state.oldVolumeSize = filesizeParser(volume.PersistentVolumeClaim.Storage);\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 volumeSizeError: false,\n volumeSharedAccessPolicy: '',\n volumeSharedAccessPolicyTooltip: '',\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 * as _ from 'lodash-es';\nimport filesizeParser from 'filesize-parser';\nimport angular from 'angular';\nimport KubernetesVolumeHelper from 'Kubernetes/helpers/volumeHelper';\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 let hasT,\n hasG,\n hasM = false;\n const size = _.sumBy(volumes, (v) => {\n const storage = v.PersistentVolumeClaim.Storage;\n if (!hasT && _.endsWith(storage, 'TB')) {\n hasT = true;\n } else if (!hasG && _.endsWith(storage, 'GB')) {\n hasG = true;\n } else if (!hasM && _.endsWith(storage, 'MB')) {\n hasM = true;\n }\n return filesizeParser(storage, { base: 10 });\n });\n if (hasT) {\n return size / 1000 / 1000 / 1000 / 1000 + 'TB';\n } else if (hasG) {\n return size / 1000 / 1000 / 1000 + 'GB';\n } else if (hasM) {\n return size / 1000 / 1000 + 'MB';\n }\n return size;\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 resource pools');\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 },\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(() => {\n this.refreshCallback();\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 * !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 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 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 return (stack.Status === 1 && showActiveStacks) || (stack.Status === 2 && showUnactiveStacks) || stack.External;\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.$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 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 associated\\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 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
    \\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('./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('./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 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
    \\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('./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;\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 },\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
    \\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.slice(0, 7);\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.slice(0, 7);\n }\n\n return filteredTags.slice(0, 6).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 return pair.slice(0, pair.indexOf(separator));\n };\n })\n .filter('value', function () {\n 'use strict';\n return function (pair, separator) {\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.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';\n\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 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
    \\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\";\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","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 }\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 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 }\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","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 return await FileUploadService.createCustomTemplate(payload);\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 function DockerHubServiceFactory($q, DockerHub) {\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 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\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') {\n var deferred = $q.defer();\n\n FileUploadService.createEndpoint(name, PortainerEndpointCreationTypes.LocalDockerEnvironment, '', '', 1, [], 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]);\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 }\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 } 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\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) {\n var deferred = $q.defer();\n\n var queries = [];\n if (compose) {\n queries.push(service.composeStacks(true, { EndpointID: endpointId }));\n }\n if (swarm) {\n queries.push(service.swarmStacks(true));\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.composeStacks = function (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 item.External = false;\n return new StackViewModel(item);\n });\n var externalStacks = data.externalStacks;\n\n var result = _.unionWith(stacks, externalStacks, function (a, b) {\n return a.Name === b.Name;\n });\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 (includeExternalStacks) {\n var deferred = $q.defer();\n\n SwarmService.swarm()\n .then(function success(data) {\n var swarm = data;\n var filters = { SwarmID: swarm.Id };\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 item.External = false;\n return new StackViewModel(item);\n });\n var externalStacks = data.externalStacks;\n\n var result = _.unionWith(stacks, externalStacks, function (a, b) {\n return a.Name === b.Name;\n });\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.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, namespace, content, compose) {\n try {\n const payload = {\n StackFileContent: content,\n ComposeFormat: compose,\n Namespace: namespace,\n };\n await Stack.create({ method: 'undefined', type: 3, endpointId: endpointId }, payload).$promise;\n } catch (err) {\n throw { err: err };\n }\n }\n\n service.kubernetesDeploy = function (endpointId, namespace, content, compose) {\n return $async(kubernetesDeployAsync, endpointId, namespace, content, compose);\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 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","angular.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 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 service.CreateCPUChart = function (context) {\n return CreateChart(context, 'CPU', percentageBasedTooltipLabel, percentageBasedAxisLabel);\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\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","angular.module('portainer.app').factory('DatatableService', [\n 'LocalStorage',\n function DatatableServiceFactory(LocalStorage) {\n 'use strict';\n\n var service = {};\n\n service.setDataTableSettings = function (key, settings) {\n LocalStorage.storeDataTableSettings(key, settings);\n };\n\n service.getDataTableSettings = function (key) {\n return LocalStorage.getDataTableSettings(key);\n };\n\n service.setDataTableTextFilters = function (key, filters) {\n LocalStorage.storeDataTableTextFilters(key, filters);\n };\n\n service.getDataTableTextFilters = function (key) {\n return LocalStorage.getDataTableTextFilters(key);\n };\n\n service.setDataTableFilters = function (key, filters) {\n LocalStorage.storeDataTableFilters(key, filters);\n };\n\n service.getDataTableFilters = function (key) {\n return LocalStorage.getDataTableFilters(key);\n };\n\n service.getDataTableOrder = function (key) {\n return LocalStorage.getDataTableOrder(key);\n };\n\n service.setDataTableOrder = function (key, orderBy, reverse) {\n var filter = {\n orderBy: orderBy,\n reverse: reverse,\n };\n LocalStorage.storeDataTableOrder(key, filter);\n };\n\n service.setDataTableExpandedItems = function (key, expandedItems) {\n LocalStorage.storeDataTableExpandedItems(key, expandedItems);\n };\n\n service.setColumnVisibilitySettings = function (key, columnVisibility) {\n LocalStorage.storeColumnVisibilitySettings(key, columnVisibility);\n };\n\n service.getDataTableExpandedItems = function (key) {\n return LocalStorage.getDataTableExpandedItems(key);\n };\n\n service.setDataTableSelectedItems = function (key, selectedItems) {\n LocalStorage.storeDataTableSelectedItems(key, selectedItems);\n };\n\n service.getDataTableSelectedItems = function (key) {\n return LocalStorage.getDataTableSelectedItems(key);\n };\n\n service.getColumnVisibilitySettings = function (key) {\n return LocalStorage.getColumnVisibilitySettings(key);\n };\n\n return service;\n },\n]);\n","import _ from 'lodash-es';\n\nangular.module('portainer.app').factory('EndpointProvider', [\n 'LocalStorage',\n function EndpointProviderFactory(LocalStorage) {\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 return endpoint.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.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 };\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.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.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.updateEnableHostManagementFeatures = function (enableHostManagementFeatures) {\n state.application.enableHostManagementFeatures = enableHostManagementFeatures;\n LocalStorage.storeApplicationState(state.application);\n };\n\n manager.updateEnableVolumeBrowserForNonAdminUsers = function (enableVolumeBrowserForNonAdminUsers) {\n state.application.enableVolumeBrowserForNonAdminUsers = enableVolumeBrowserForNonAdminUsers;\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.updateAllowHostNamespaceForRegularUsers = function (allowHostNamespaceForRegularUsers) {\n state.application.allowHostNamespaceForRegularUsers = allowHostNamespaceForRegularUsers;\n LocalStorage.storeApplicationState(state.application);\n };\n\n manager.updateAllowDeviceMappingForRegularUsers = function updateAllowDeviceMappingForRegularUsers(allowDeviceMappingForRegularUsers) {\n state.application.allowDeviceMappingForRegularUsers = allowDeviceMappingForRegularUsers;\n LocalStorage.storeApplicationState(state.application);\n };\n\n manager.updateAllowStackManagementForRegularUsers = function updateAllowStackManagementForRegularUsers(allowStackManagementForRegularUsers) {\n state.application.allowStackManagementForRegularUsers = allowStackManagementForRegularUsers;\n LocalStorage.storeApplicationState(state.application);\n };\n\n manager.updateAllowContainerCapabilitiesForRegularUsers = function updateAllowContainerCapabilitiesForRegularUsers(allowContainerCapabilitiesForRegularUsers) {\n state.application.allowContainerCapabilitiesForRegularUsers = allowContainerCapabilitiesForRegularUsers;\n LocalStorage.storeApplicationState(state.application);\n };\n\n manager.updateAllowBindMountsForRegularUsers = function updateAllowBindMountsForRegularUsers(allowBindMountsForRegularUsers) {\n state.application.allowBindMountsForRegularUsers = allowBindMountsForRegularUsers;\n LocalStorage.storeApplicationState(state.application);\n };\n\n manager.updateAllowPrivilegedModeForRegularUsers = function (AllowPrivilegedModeForRegularUsers) {\n state.application.allowPrivilegedModeForRegularUsers = AllowPrivilegedModeForRegularUsers;\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.enableHostManagementFeatures = settings.EnableHostManagementFeatures;\n state.application.enableVolumeBrowserForNonAdminUsers = settings.AllowVolumeBrowserForRegularUsers;\n state.application.enableEdgeComputeFeatures = settings.EnableEdgeComputeFeatures;\n state.application.allowDeviceMappingForRegularUsers = settings.AllowDeviceMappingForRegularUsers;\n state.application.allowStackManagementForRegularUsers = settings.AllowStackManagementForRegularUsers;\n state.application.allowContainerCapabilitiesForRegularUsers = settings.AllowContainerCapabilitiesForRegularUsers;\n state.application.allowBindMountsForRegularUsers = settings.AllowBindMountsForRegularUsers;\n state.application.allowPrivilegedModeForRegularUsers = settings.AllowPrivilegedModeForRegularUsers;\n state.application.allowHostNamespaceForRegularUsers = settings.AllowHostNamespaceForRegularUsers;\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 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 the\\n master branch.\\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n Indicate the path to the Compose 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 creating your template. 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 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 $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('curl -L https://downloads.portainer.io/agent-stack.yml -o agent-stack.yml && docker stack deploy --compose-file=agent-stack.yml portainer-agent');\n } else if ($scope.state.deploymentTab === 2 && $scope.state.PlatformType === 'windows') {\n clipboard.copyText(\n 'curl -L https://downloads.portainer.io/agent-stack-windows.yml -o agent-stack.yml && docker stack deploy --compose-file=agent-stack-windows.yml portainer-agent'\n );\n } else if ($scope.state.deploymentTab === 1) {\n clipboard.copyText('curl -L https://downloads.portainer.io/portainer-agent-k8s-nodeport.yaml -o portainer-agent-k8s.yaml; kubectl apply -f portainer-agent-k8s.yaml');\n } else {\n clipboard.copyText('curl -L https://downloads.portainer.io/portainer-agent-k8s-lb.yaml -o portainer-agent-k8s.yaml; kubectl apply -f portainer-agent-k8s.yaml');\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 if ($scope.formValues.ConnectSocket) {\n var endpointName = $scope.formValues.Name;\n $scope.state.actionInProgress = true;\n EndpointService.createLocalEndpoint(endpointName)\n .then(function success() {\n Notifications.success('Endpoint created', endpointName);\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 var name = $scope.formValues.Name;\n var URL = $filter('stripprotocol')($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 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 $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 \\\\localhost\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 function ($async, $scope, $state, Notifications, Authentication, StateManager, SettingsService, UserService, EndpointService) {\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 };\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]);\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$, Authentication, StateManager, Notifications, LocalStorage) {\n this.$async = $async;\n this.$state = $state;\n this.$transition$ = $transition$;\n\n this.Authentication = Authentication;\n this.StateManager = StateManager;\n this.Notifications = Notifications;\n this.LocalStorage = LocalStorage;\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 try {\n await this.Authentication.logout(performApiLogout);\n } finally {\n this.LocalStorage.storeLogoutReason(error);\n this.$state.go('portainer.auth', { reload: true });\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 selectQuayRegistry() {\n $scope.model.Name = 'Quay';\n $scope.model.URL = 'quay.io';\n $scope.model.Authentication = true;\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","angular.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.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 function ($scope, $state, Notifications, SettingsService, StateManager) {\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\n $scope.formValues = {\n customLogo: false,\n restrictBindMounts: false,\n restrictPrivilegedMode: false,\n labelName: '',\n labelValue: '',\n enableHostManagementFeatures: false,\n enableVolumeBrowser: false,\n enableEdgeComputeFeatures: false,\n restrictHostNamespaceForRegularUsers: false,\n allowDeviceMappingForRegularUsers: false,\n allowStackManagementForRegularUsers: false,\n disableContainerCapabilitiesForRegularUsers: false,\n enableTelemetry: false,\n };\n\n $scope.isContainerEditDisabled = function isContainerEditDisabled() {\n const {\n restrictBindMounts,\n restrictHostNamespaceForRegularUsers,\n restrictPrivilegedMode,\n disableDeviceMappingForRegularUsers,\n disableContainerCapabilitiesForRegularUsers,\n } = this.formValues;\n return (\n restrictBindMounts || restrictHostNamespaceForRegularUsers || restrictPrivilegedMode || disableDeviceMappingForRegularUsers || disableContainerCapabilitiesForRegularUsers\n );\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.saveApplicationSettings = function () {\n var settings = $scope.settings;\n\n if (!$scope.formValues.customLogo) {\n settings.LogoURL = '';\n }\n\n settings.AllowBindMountsForRegularUsers = !$scope.formValues.restrictBindMounts;\n settings.AllowPrivilegedModeForRegularUsers = !$scope.formValues.restrictPrivilegedMode;\n settings.AllowVolumeBrowserForRegularUsers = $scope.formValues.enableVolumeBrowser;\n settings.EnableHostManagementFeatures = $scope.formValues.enableHostManagementFeatures;\n settings.EnableEdgeComputeFeatures = $scope.formValues.enableEdgeComputeFeatures;\n settings.AllowHostNamespaceForRegularUsers = !$scope.formValues.restrictHostNamespaceForRegularUsers;\n settings.AllowDeviceMappingForRegularUsers = !$scope.formValues.disableDeviceMappingForRegularUsers;\n settings.AllowStackManagementForRegularUsers = !$scope.formValues.disableStackManagementForRegularUsers;\n settings.AllowContainerCapabilitiesForRegularUsers = !$scope.formValues.disableContainerCapabilitiesForRegularUsers;\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.updateEnableHostManagementFeatures(settings.EnableHostManagementFeatures);\n StateManager.updateEnableVolumeBrowserForNonAdminUsers(settings.AllowVolumeBrowserForRegularUsers);\n StateManager.updateAllowHostNamespaceForRegularUsers(settings.AllowHostNamespaceForRegularUsers);\n StateManager.updateEnableEdgeComputeFeatures(settings.EnableEdgeComputeFeatures);\n StateManager.updateAllowDeviceMappingForRegularUsers(settings.AllowDeviceMappingForRegularUsers);\n StateManager.updateAllowStackManagementForRegularUsers(settings.AllowStackManagementForRegularUsers);\n StateManager.updateAllowContainerCapabilitiesForRegularUsers(settings.AllowContainerCapabilitiesForRegularUsers);\n StateManager.updateAllowPrivilegedModeForRegularUsers(settings.AllowPrivilegedModeForRegularUsers);\n StateManager.updateAllowBindMountsForRegularUsers(settings.AllowBindMountsForRegularUsers);\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.restrictBindMounts = !settings.AllowBindMountsForRegularUsers;\n $scope.formValues.restrictPrivilegedMode = !settings.AllowPrivilegedModeForRegularUsers;\n $scope.formValues.enableVolumeBrowser = settings.AllowVolumeBrowserForRegularUsers;\n $scope.formValues.enableHostManagementFeatures = settings.EnableHostManagementFeatures;\n $scope.formValues.enableEdgeComputeFeatures = settings.EnableEdgeComputeFeatures;\n $scope.formValues.restrictHostNamespaceForRegularUsers = !settings.AllowHostNamespaceForRegularUsers;\n $scope.formValues.disableDeviceMappingForRegularUsers = !settings.AllowDeviceMappingForRegularUsers;\n $scope.formValues.disableStackManagementForRegularUsers = !settings.AllowStackManagementForRegularUsers;\n $scope.formValues.disableContainerCapabilitiesForRegularUsers = !settings.AllowContainerCapabilitiesForRegularUsers;\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 const { allowStackManagementForRegularUsers } = $scope.applicationState.application;\n\n return isAdmin || 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 StackService,\n Authentication,\n Notifications,\n FormValidator,\n ResourceControlService,\n FormHelper,\n CustomTemplateService,\n EndpointProvider\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 };\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.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 $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 };\n\n $scope.onChangeTemplate = async function onChangeTemplate(template) {\n try {\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 const endpointId = +$state.params.endpointId;\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\n initView();\n });\n","angular.module('portainer.app').controller('StackController', [\n '$async',\n '$q',\n '$scope',\n '$state',\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 function (\n $async,\n $q,\n $scope,\n $state,\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 ) {\n $scope.state = {\n actionInProgress: false,\n migrationInProgress: false,\n externalStack: false,\n showEditorTab: false,\n };\n\n $scope.formValues = {\n Prune: false,\n Endpoint: null,\n };\n\n $scope.duplicateStack = function duplicateStack(name, endpointId) {\n var stack = $scope.stack;\n var env = FormHelper.removeInvalidEnvVars(stack.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.deployStack = function () {\n var stackFile = $scope.stackFileContent;\n var env = FormHelper.removeInvalidEnvVars($scope.stack.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 $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.addEnvironmentVariable = function () {\n $scope.stack.Env.push({ name: '', value: '' });\n };\n\n $scope.removeEnvironmentVariable = function (index) {\n $scope.stack.Env.splice(index, 1);\n };\n\n $scope.editorUpdate = function (cm) {\n $scope.stackFileContent = cm.getValue();\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 })\n .then(function success(data) {\n var stack = data.stack;\n $scope.groups = data.groups;\n $scope.stack = stack;\n\n let resourcesPromise = Promise.resolve({});\n if (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 $scope.stackFileContent = data.stackFile;\n if ($scope.stack.Status === 1) {\n if ($scope.stack.Type === 1) {\n assignSwarmStackResources(data.resources, agentProxy);\n } else {\n assignComposeStackResources(data.resources);\n }\n }\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 async function initView() {\n var stackName = $transition$.params().name;\n $scope.stackName = stackName;\n var external = $transition$.params().external;\n $scope.currentEndpointId = EndpointProvider.endpointID();\n\n if (external === 'true') {\n $scope.state.externalStack = true;\n loadExternalStack(stackName);\n } else {\n var 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, StateManager) {\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 StackService.stacks(true, endpointMode.provider === 'DOCKER_SWARM_MODE' && endpointMode.role === 'MANAGER', endpointId)\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 const appState = StateManager.getState().application;\n return appState.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 'SettingsService',\n 'StackService',\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 SettingsService,\n StackService\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 $anchorScroll('view-top');\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 settings: SettingsService.publicSettings(),\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 var settings = data.settings;\n $scope.allowBindMounts = settings.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 === $scope.users[i].Username) {\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":""}