From 4623f27bff16241caaa1c6956cf27950dc4536fb Mon Sep 17 00:00:00 2001 From: Chaim Lev-Ari Date: Wed, 24 May 2023 10:44:09 +0700 Subject: [PATCH] refactor(settings): kube settings panel fix(settings/kube): limit features --- .../components/kube-settings-panel/index.js | 12 ++ .../kube-settings-panel.controller.js | 92 ++++++++++++++++ .../kube-settings-panel.html | 103 ++++++++++++++++++ app/portainer/views/settings/settings.html | 76 +------------ .../views/settings/settingsController.js | 76 ++++++------- 5 files changed, 247 insertions(+), 112 deletions(-) create mode 100644 app/portainer/views/settings/components/kube-settings-panel/index.js create mode 100644 app/portainer/views/settings/components/kube-settings-panel/kube-settings-panel.controller.js create mode 100644 app/portainer/views/settings/components/kube-settings-panel/kube-settings-panel.html diff --git a/app/portainer/views/settings/components/kube-settings-panel/index.js b/app/portainer/views/settings/components/kube-settings-panel/index.js new file mode 100644 index 000000000..be66652d2 --- /dev/null +++ b/app/portainer/views/settings/components/kube-settings-panel/index.js @@ -0,0 +1,12 @@ +import angular from 'angular'; + +import controller from './kube-settings-panel.controller'; + +angular.module('portainer.app').component('kubeSettingsPanel', { + templateUrl: './kube-settings-panel.html', + controller, + bindings: { + settings: '<', + onSubmit: '<', + }, +}); diff --git a/app/portainer/views/settings/components/kube-settings-panel/kube-settings-panel.controller.js b/app/portainer/views/settings/components/kube-settings-panel/kube-settings-panel.controller.js new file mode 100644 index 000000000..d99e079fc --- /dev/null +++ b/app/portainer/views/settings/components/kube-settings-panel/kube-settings-panel.controller.js @@ -0,0 +1,92 @@ +import { FeatureId } from '@/react/portainer/feature-flags/enums'; + +/* @ngInject */ +export default function KubeSettingsPanelController($scope, $async) { + this.onToggleAddWithForm = onToggleAddWithForm.bind(this); + this.onToggleHideWebEditor = onToggleHideWebEditor.bind(this); + this.onToggleHideFileUpload = onToggleHideFileUpload.bind(this); + this.onTogglePerEnvOverride = onTogglePerEnvOverride.bind(this); + this.saveKubernetesSettings = saveKubernetesSettings.bind(this); + this.$onInit = $onInit.bind(this); + + this.enforceDeploymentOptions = FeatureId.ENFORCE_DEPLOYMENT_OPTIONS; + + this.state = { + availableKubeconfigExpiryOptions: [ + { + key: '1 day', + value: '24h', + }, + { + key: '7 days', + value: `${24 * 7}h`, + }, + { + key: '30 days', + value: `${24 * 30}h`, + }, + { + key: '1 year', + value: `${24 * 30 * 12}h`, + }, + { + key: 'No expiry', + value: '0', + }, + ], + actionInProgress: false, + }; + + this.formValues = { + KubeconfigExpiry: undefined, + HelmRepositoryURL: undefined, + GlobalDeploymentOptions: { + hideAddWithForm: false, + perEnvOverride: false, + hideWebEditor: false, + hideFileUpload: false, + }, + }; + + function onToggleAddWithForm(checked) { + $scope.$evalAsync(() => { + this.formValues.GlobalDeploymentOptions.hideAddWithForm = checked; + this.formValues.GlobalDeploymentOptions.hideWebEditor = checked; + this.formValues.GlobalDeploymentOptions.hideFileUpload = checked; + }); + } + + function onToggleHideWebEditor(checked) { + $scope.$evalAsync(() => { + this.formValues.GlobalDeploymentOptions.hideWebEditor = !checked; + }); + } + + function onToggleHideFileUpload(checked) { + $scope.$evalAsync(() => { + this.formValues.GlobalDeploymentOptions.hideFileUpload = !checked; + }); + } + + function onTogglePerEnvOverride(checked) { + $scope.$evalAsync(() => { + this.formValues.GlobalDeploymentOptions.perEnvOverride = checked; + }); + } + + async function saveKubernetesSettings() { + $async(async () => { + this.state.actionInProgress = true; + await this.onSubmit(this.formValues, 'Kubernetes settings updated'); + this.state.actionInProgress = false; + }); + } + + function $onInit() { + if (this.settings.GlobalDeploymentOptions) { + this.formValues.GlobalDeploymentOptions = this.settings.GlobalDeploymentOptions; + } + this.formValues.KubeconfigExpiry = this.settings.KubeconfigExpiry; + this.formValues.HelmRepositoryURL = this.settings.HelmRepositoryURL; + } +} diff --git a/app/portainer/views/settings/components/kube-settings-panel/kube-settings-panel.html b/app/portainer/views/settings/components/kube-settings-panel/kube-settings-panel.html new file mode 100644 index 000000000..39c61df69 --- /dev/null +++ b/app/portainer/views/settings/components/kube-settings-panel/kube-settings-panel.html @@ -0,0 +1,103 @@ +
+
+ + + +
+ +
Helm Repository
+
+
+ + You can specify the URL to your own helm repository here. See the + official documentation for more details. + +
+
+ +
+ +
+
+
+ + +
Kubeconfig
+
+ +
+ +
+
+ + +
Deployment Options
+
+ +
+
+ + +
+
+ +
+ + +
+
+ +
+
+ +
+
+
+
+
diff --git a/app/portainer/views/settings/settings.html b/app/portainer/views/settings/settings.html index fd997fd79..039fb9899 100644 --- a/app/portainer/views/settings/settings.html +++ b/app/portainer/views/settings/settings.html @@ -2,81 +2,7 @@ - -
-
- - - -
- -
Helm Repository
-
-
- - You can specify the URL to your own helm repository here. See the - official documentation for more details. - -
-
- -
- -
-
-
- - -
Kubeconfig
-
- -
- -
-
- - -
Deployment Options
-
- -
- - -
-
- -
-
- -
-
-
-
-
+ diff --git a/app/portainer/views/settings/settingsController.js b/app/portainer/views/settings/settingsController.js index bd127e25c..2c1845249 100644 --- a/app/portainer/views/settings/settingsController.js +++ b/app/portainer/views/settings/settingsController.js @@ -21,28 +21,7 @@ angular.module('portainer.app').controller('SettingsController', [ $scope.state = { actionInProgress: false, - availableKubeconfigExpiryOptions: [ - { - key: '1 day', - value: '24h', - }, - { - key: '7 days', - value: `${24 * 7}h`, - }, - { - key: '30 days', - value: `${24 * 30}h`, - }, - { - key: '1 year', - value: `${24 * 30 * 12}h`, - }, - { - key: 'No expiry', - value: '0', - }, - ], + backupInProgress: false, featureLimited: false, showHTTPS: !window.ddExtension, @@ -51,8 +30,6 @@ angular.module('portainer.app').controller('SettingsController', [ $scope.BACKUP_FORM_TYPES = { S3: 's3', FILE: 'file' }; $scope.formValues = { - KubeconfigExpiry: undefined, - HelmRepositoryURL: undefined, BlackListedLabels: [], labelName: '', labelValue: '', @@ -111,18 +88,46 @@ angular.module('portainer.app').controller('SettingsController', [ }); }; - // only update the values from the kube settings widget. In future separate the api endpoints - $scope.saveKubernetesSettings = function () { - const kubeSettingsPayload = { - KubeconfigExpiry: $scope.formValues.KubeconfigExpiry, - HelmRepositoryURL: $scope.formValues.HelmRepositoryURL, - GlobalDeploymentOptions: $scope.formValues.GlobalDeploymentOptions, - }; - - $scope.state.kubeSettingsActionInProgress = true; - updateSettings(kubeSettingsPayload, 'Kubernetes settings updated'); + $scope.saveS3BackupSettings = function () { + const payload = getS3SettingsPayload(); + BackupService.saveS3Settings(payload) + .then(function success() { + Notifications.success('Success', 'S3 Backup settings successfully saved'); + }) + .catch(function error(err) { + Notifications.error('Failure', err, 'Unable to save S3 backup settings'); + }) + .finally(function final() { + $scope.state.backupInProgress = false; + }); }; + $scope.exportBackup = function () { + const payload = getS3SettingsPayload(); + BackupService.exportBackup(payload) + .then(function success() { + Notifications.success('Success', 'Exported backup to S3 successfully'); + }) + .catch(function error(err) { + Notifications.error('Failure', err, 'Unable to export backup to S3'); + }) + .finally(function final() { + $scope.state.backupInProgress = false; + }); + }; + + function getS3SettingsPayload() { + return { + Password: $scope.formValues.passwordProtectS3 ? $scope.formValues.passwordS3 : '', + CronRule: $scope.formValues.scheduleAutomaticBackups ? $scope.formValues.cronRule : '', + AccessKeyID: $scope.formValues.accessKeyId, + SecretAccessKey: $scope.formValues.secretAccessKey, + Region: $scope.formValues.region, + BucketName: $scope.formValues.bucketName, + S3CompatibleHost: $scope.formValues.s3CompatibleHost, + }; + } + function updateSettings(settings, successMessage = 'Settings updated') { // ignore CloudApiKeys to avoid overriding them // @@ -141,7 +146,6 @@ angular.module('portainer.app').controller('SettingsController', [ Notifications.error('Failure', err, 'Unable to update settings'); }) .finally(function final() { - $scope.state.kubeSettingsActionInProgress = false; $scope.state.actionInProgress = false; }); } @@ -152,8 +156,6 @@ angular.module('portainer.app').controller('SettingsController', [ var settings = data; $scope.settings = settings; - $scope.formValues.KubeconfigExpiry = settings.KubeconfigExpiry; - $scope.formValues.HelmRepositoryURL = settings.HelmRepositoryURL; $scope.formValues.BlackListedLabels = settings.BlackListedLabels; }) .catch(function error(err) {