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 @@
+
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 @@
-
-
+
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) {