@rancher/shell 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/styles/base/_basic.scss +0 -1
- package/assets/styles/base/_variables.scss +2 -0
- package/assets/styles/global/_labeled-input.scss +6 -1
- package/assets/styles/global/_select.scss +9 -0
- package/assets/styles/vendor/vue-js-modal.scss +4 -0
- package/assets/translations/en-us.yaml +240 -16
- package/assets/translations/zh-hans.yaml +335 -111
- package/chart/example.vue +1 -1
- package/chart/istio.vue +2 -2
- package/chart/logging/index.vue +2 -2
- package/chart/monitoring/alerting/index.vue +2 -2
- package/chart/monitoring/grafana/index.vue +2 -2
- package/chart/monitoring/index.vue +2 -2
- package/chart/monitoring/prometheus/index.vue +4 -4
- package/chart/rancher-alerting-drivers.vue +17 -3
- package/chart/rancher-backup/S3.vue +37 -4
- package/chart/rancher-backup/index.vue +3 -3
- package/cloud-credential/aws.vue +1 -1
- package/cloud-credential/azure.vue +1 -1
- package/cloud-credential/digitalocean.vue +1 -1
- package/cloud-credential/gcp.vue +1 -1
- package/cloud-credential/generic.vue +1 -1
- package/cloud-credential/harvester.vue +2 -2
- package/cloud-credential/linode.vue +1 -1
- package/cloud-credential/s3.vue +2 -2
- package/cloud-credential/vmwarevsphere.vue +1 -1
- package/components/ActionMenu.vue +11 -1
- package/components/Alert.vue +1 -1
- package/components/AssignTo.vue +2 -2
- package/components/AsyncButton.vue +25 -12
- package/components/AwsComplianceBanner.vue +44 -0
- package/components/BannerGraphic.vue +11 -2
- package/components/ChartReadme.vue +10 -2
- package/components/CompoundStatusBadge.vue +50 -0
- package/components/CopyToClipboardText.vue +25 -4
- package/components/CruResource.vue +185 -16
- package/components/CruResourceFooter.vue +17 -1
- package/components/EtcdInfoBanner.vue +1 -1
- package/components/FilterLabel.vue +254 -0
- package/components/GlobalRoleBindings.vue +2 -2
- package/components/GrafanaDashboard.vue +1 -1
- package/components/GrowlManager.vue +20 -9
- package/components/HarvesterServiceAddOnConfig.vue +2 -2
- package/components/Import.vue +2 -2
- package/components/LandingPagePreference.vue +2 -2
- package/components/Markdown.vue +44 -12
- package/components/ModalWithCard.vue +2 -2
- package/components/MoveModal.vue +1 -1
- package/components/PercentageBar.vue +1 -1
- package/components/PromptChangePassword.vue +1 -1
- package/components/PromptModal.vue +13 -2
- package/components/PromptRemove.vue +64 -33
- package/components/PromptRestore.vue +3 -3
- package/components/Questions/Boolean.vue +1 -1
- package/components/Questions/Float.vue +1 -1
- package/components/Questions/Int.vue +1 -1
- package/components/Questions/Reference.vue +1 -1
- package/components/Questions/String.vue +1 -1
- package/components/RelatedResources.vue +1 -1
- package/components/RelatedWorkloadsTable.vue +3 -1
- package/components/ResourceDetail/Masthead.vue +27 -9
- package/components/ResourceDetail/index.vue +72 -7
- package/components/ResourceList/Masthead.vue +22 -0
- package/components/ResourceList/ResourceLoadingIndicator.vue +137 -0
- package/components/ResourceList/index.vue +42 -7
- package/components/ResourceTable.vue +11 -2
- package/components/ResourceYaml.vue +7 -1
- package/components/SelectIconGrid.vue +14 -1
- package/components/SortableTable/THead.vue +1 -1
- package/components/SortableTable/debug.js +117 -0
- package/components/SortableTable/index.vue +200 -43
- package/components/SortableTable/paging.js +2 -12
- package/components/SortableTable/selection.js +3 -0
- package/components/SortableTable/sorting.js +3 -1
- package/components/Tabbed/Tab.vue +25 -4
- package/components/Tabbed/index.vue +133 -119
- package/components/TypeDescription.vue +1 -1
- package/components/VMConsoleBar.vue +1 -1
- package/components/Wizard.vue +53 -14
- package/components/YamlEditor.vue +10 -0
- package/components/__tests__/CopyCode.test.ts +1 -7
- package/components/__tests__/CruResource.test.ts +1 -8
- package/components/auth/AllowedPrincipals.vue +1 -1
- package/components/auth/AuthBanner.vue +2 -1
- package/components/auth/AzureWarning.vue +69 -0
- package/components/auth/RoleDetailEdit.vue +4 -4
- package/components/auth/login/ldap.vue +1 -1
- package/components/cards/ApplicationCard.vue +140 -0
- package/components/dialog/AddClusterMemberDialog.vue +1 -1
- package/components/dialog/AddCustomBadgeDialog.vue +4 -4
- package/components/dialog/AddProjectMemberDialog.vue +2 -2
- package/components/dialog/AddonConfigConfirmationDialog.vue +1 -1
- package/components/dialog/DrainNode.vue +3 -3
- package/components/dialog/ForceMachineRemoveDialog.vue +2 -2
- package/components/dialog/GenericPrompt.vue +2 -2
- package/components/dialog/RollbackWorkloadDialog.vue +2 -2
- package/components/dialog/RotateCertificatesDialog.vue +3 -3
- package/components/dialog/RotateEncryptionKeyDialog.vue +11 -6
- package/components/dialog/SaveAsRKETemplateDialog.vue +3 -3
- package/components/dialog/harvester/AddHotplugModal.vue +3 -3
- package/components/dialog/harvester/BackupModal.vue +3 -3
- package/components/dialog/harvester/CloneTemplate.vue +3 -3
- package/components/dialog/harvester/EjectCDROMDialog.vue +3 -3
- package/components/dialog/harvester/ExportImageDialog.vue +3 -3
- package/components/dialog/harvester/MaintenanceDialog.vue +2 -2
- package/components/dialog/harvester/MigrationDialog.vue +2 -2
- package/components/dialog/harvester/RestoreDialog.vue +2 -2
- package/components/dialog/harvester/SupportBundle.vue +2 -2
- package/components/dialog/harvester/UnplugVolume.vue +2 -2
- package/components/fleet/FleetBundleResources.vue +1 -1
- package/components/fleet/FleetBundles.vue +1 -1
- package/components/fleet/FleetResources.vue +5 -3
- package/components/fleet/ForceDirectedTreeChart/chartIcons.js +17 -0
- package/components/fleet/ForceDirectedTreeChart/index.vue +553 -0
- package/components/form/ArrayList.vue +22 -3
- package/components/form/BannerSettings.vue +3 -3
- package/components/form/ChangePassword.vue +2 -2
- package/components/form/Command.vue +28 -9
- package/components/form/Error.vue +50 -0
- package/components/form/Footer.vue +2 -5
- package/components/form/HealthCheck.vue +2 -2
- package/components/form/HookOption.vue +2 -2
- package/components/form/InputWithSelect.vue +12 -2
- package/components/form/KeyValue.vue +5 -2
- package/components/form/LabeledSelect.vue +27 -14
- package/components/form/Labels.vue +12 -0
- package/components/form/MatchExpressions.vue +44 -10
- package/components/form/Members/ClusterPermissionsEditor.vue +3 -3
- package/components/form/Members/MembershipEditor.vue +10 -1
- package/components/form/Members/ProjectMembershipEditor.vue +1 -0
- package/components/form/NameNsDescription.vue +202 -79
- package/components/form/Networking.vue +1 -1
- package/components/form/NodeAffinity.vue +41 -26
- package/components/form/NodeScheduling.vue +29 -3
- package/components/form/NotificationSettings.vue +2 -2
- package/components/form/Password.vue +1 -1
- package/components/form/PodAffinity.vue +64 -6
- package/components/form/PodSecurity.vue +2 -2
- package/components/form/Ports.vue +1 -1
- package/components/form/Probe.vue +60 -17
- package/components/form/ProjectMemberEditor.vue +3 -3
- package/components/form/ResourceQuota/NamespaceRow.vue +46 -2
- package/components/form/ResourceQuota/Project.vue +4 -0
- package/components/form/ResourceTabs/index.vue +19 -7
- package/components/form/RuleSelector.vue +1 -1
- package/components/form/Security.vue +56 -14
- package/components/form/Select.vue +52 -10
- package/components/form/SelectOrCreateAuthSecret.vue +70 -31
- package/components/form/ServiceNameSelect.vue +1 -1
- package/components/form/ServicePorts.vue +10 -2
- package/components/form/ShellInput.vue +1 -1
- package/components/form/SimpleSecretSelector.vue +2 -2
- package/components/form/Tolerations.vue +1 -1
- package/components/form/UnitInput.vue +12 -3
- package/components/form/ValueFromResource.vue +1 -1
- package/components/form/WorkloadPorts.vue +1 -1
- package/components/form/__tests__/Command.test.ts +63 -0
- package/components/form/__tests__/Error.test.ts +56 -0
- package/components/form/__tests__/MatchExpressions.test.ts +79 -0
- package/components/form/__tests__/Probe.test.ts +62 -0
- package/components/form/__tests__/Security.test.ts +55 -0
- package/components/form/__tests__/UnitInput.test.ts +31 -23
- package/components/formatter/BadgeStateFormatter.vue +1 -1
- package/components/formatter/Capitalize.vue +7 -0
- package/components/formatter/ClusterLink.vue +6 -2
- package/components/formatter/ClusterProvider.vue +36 -0
- package/components/formatter/DelayedValue.vue +43 -0
- package/components/formatter/Endpoints.vue +2 -2
- package/components/formatter/HarvesterDiskState.vue +1 -1
- package/components/formatter/HarvesterIpAddress.vue +37 -18
- package/components/formatter/HarvesterMigrationState.vue +1 -1
- package/components/formatter/HarvesterVmState.vue +1 -1
- package/components/formatter/LinkDetail.vue +11 -2
- package/components/formatter/LinkName.vue +2 -2
- package/components/formatter/LiveExpiryBadgeState.vue +1 -1
- package/components/formatter/LivePodRestarts.vue +47 -0
- package/components/formatter/MachineSummaryGraph.vue +51 -5
- package/components/formatter/PodsUsage.vue +5 -3
- package/components/formatter/Weight.vue +1 -1
- package/components/formatter/WorkloadHealthScale.vue +17 -6
- package/components/nav/HarvesterUpgrade.vue +15 -5
- package/components/nav/Header.vue +15 -6
- package/components/nav/Jump.vue +1 -1
- package/components/nav/NamespaceFilter.vue +30 -10
- package/components/nav/TopLevelMenu.vue +52 -14
- package/components/nav/WindowManager/ContainerLogs.vue +14 -2
- package/components/nav/WorkspaceSwitcher.vue +1 -1
- package/components/{NovncConsole.vue → novnc/NovncConsole.vue} +0 -0
- package/components/novnc/NovncConsoleItem.vue +89 -0
- package/components/novnc/NovncConsoleWrapper.vue +243 -0
- package/config/labels-annotations.js +6 -2
- package/config/product/explorer.js +7 -3
- package/config/product/fleet.js +4 -1
- package/config/product/manager.js +5 -6
- package/config/product/settings.js +12 -1
- package/config/query-params.js +2 -0
- package/config/roles.ts +5 -0
- package/config/settings.js +60 -63
- package/config/table-headers.js +47 -18
- package/config/types.js +24 -8
- package/content/docs/en-us/whats-new.md +25 -0
- package/core/plugin.ts +12 -2
- package/creators/app/init +7 -1
- package/creators/pkg/tsconfig.json +2 -3
- package/detail/catalog.cattle.io.app.vue +1 -1
- package/detail/cis.cattle.io.clusterscan.vue +1 -1
- package/detail/fleet.cattle.io.bundle.vue +73 -21
- package/detail/fleet.cattle.io.gitrepo.vue +5 -4
- package/detail/harvesterhci.io.host/HarvesterHostBasic.vue +25 -4
- package/detail/harvesterhci.io.host/HarvesterHostDisk.vue +2 -2
- package/detail/harvesterhci.io.virtualmachinebackup/index.vue +1 -1
- package/detail/helm.cattle.io.projecthelmchart.vue +1 -1
- package/detail/networking.k8s.io.ingress.vue +10 -2
- package/detail/pod.vue +37 -1
- package/detail/provisioning.cattle.io.cluster.vue +102 -15
- package/detail/workload/index.vue +163 -15
- package/edit/auth/azuread.vue +146 -34
- package/edit/auth/github.vue +3 -3
- package/edit/auth/googleoauth.vue +3 -3
- package/edit/auth/ldap/config.vue +15 -7
- package/edit/auth/ldap/index.vue +2 -2
- package/edit/auth/oidc.vue +3 -3
- package/edit/auth/saml.vue +3 -3
- package/edit/autoscaling.horizontalpodautoscaler/index.vue +1 -1
- package/edit/autoscaling.horizontalpodautoscaler/metric-identifier.vue +1 -1
- package/edit/autoscaling.horizontalpodautoscaler/metric-object-reference.vue +1 -1
- package/edit/autoscaling.horizontalpodautoscaler/metric-target.vue +1 -1
- package/edit/autoscaling.horizontalpodautoscaler/metrics-row.vue +1 -1
- package/edit/catalog.cattle.io.clusterrepo.vue +2 -2
- package/edit/cis.cattle.io.clusterscan.vue +4 -4
- package/edit/cis.cattle.io.clusterscanbenchmark.vue +1 -1
- package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -1
- package/edit/fleet.cattle.io.cluster.vue +1 -0
- package/edit/fleet.cattle.io.clustergroup.vue +1 -1
- package/edit/fleet.cattle.io.gitrepo.vue +290 -157
- package/edit/harvesterhci.io.host/HarvesterDisk.vue +4 -5
- package/edit/harvesterhci.io.host/index.vue +28 -19
- package/edit/harvesterhci.io.keypair.vue +1 -1
- package/edit/harvesterhci.io.managedchart/rancher-monitoring.vue +1 -1
- package/edit/harvesterhci.io.management.cluster.vue +1 -1
- package/edit/harvesterhci.io.networkattachmentdefinition.vue +2 -2
- package/edit/harvesterhci.io.setting/additional-ca.vue +1 -1
- package/edit/harvesterhci.io.setting/backup-target.vue +1 -1
- package/edit/harvesterhci.io.setting/http-proxy.vue +1 -1
- package/edit/harvesterhci.io.setting/index.vue +3 -3
- package/edit/harvesterhci.io.setting/overcommit-config.vue +4 -1
- package/edit/harvesterhci.io.setting/ssl-parameters.vue +1 -1
- package/edit/harvesterhci.io.setting/support-bundle-image.vue +1 -1
- package/edit/harvesterhci.io.setting/vip-pools.vue +1 -1
- package/edit/harvesterhci.io.setting/vm-force-reset-policy.vue +2 -2
- package/edit/harvesterhci.io.virtualmachinebackup.vue +2 -2
- package/edit/harvesterhci.io.virtualmachineimage.vue +2 -2
- package/edit/harvesterhci.io.virtualmachinetemplateversion.vue +26 -18
- package/edit/helm.cattle.io.projecthelmchart.vue +3 -3
- package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +2 -2
- package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/AccessCredentialsUsers.vue +1 -1
- package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/index.vue +1 -1
- package/edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/DataTemplate.vue +1 -0
- package/edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/index.vue +2 -1
- package/edit/kubevirt.io.virtualmachine/VirtualMachineCpuMemory.vue +3 -1
- package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/__tests__/HarvesterEditNetwork.test.ts +41 -0
- package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/base.vue +79 -36
- package/edit/kubevirt.io.virtualmachine/VirtualMachineReserved.vue +54 -0
- package/edit/kubevirt.io.virtualmachine/VirtualMachineSSHKey.vue +1 -1
- package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/index.vue +2 -3
- package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditContainer.test.ts +40 -0
- package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditExisting.test.ts +102 -0
- package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditVMImage.test.ts +117 -0
- package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditVolume.test.ts +74 -0
- package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/container.vue +59 -13
- package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/existing.vue +72 -16
- package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/vmImage.vue +74 -14
- package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/volume.vue +35 -9
- package/edit/kubevirt.io.virtualmachine/index.vue +33 -24
- package/edit/logging-flow/index.vue +1 -1
- package/edit/logging.banzaicloud.io.output/index.vue +1 -1
- package/edit/logging.banzaicloud.io.output/providers/awsElasticsearch.vue +1 -1
- package/edit/logging.banzaicloud.io.output/providers/azurestorage.vue +1 -1
- package/edit/logging.banzaicloud.io.output/providers/cloudwatch.vue +1 -1
- package/edit/logging.banzaicloud.io.output/providers/datadog.vue +2 -2
- package/edit/logging.banzaicloud.io.output/providers/elasticsearch.vue +2 -2
- package/edit/logging.banzaicloud.io.output/providers/file.vue +1 -1
- package/edit/logging.banzaicloud.io.output/providers/forward.vue +1 -1
- package/edit/logging.banzaicloud.io.output/providers/gcs.vue +2 -2
- package/edit/logging.banzaicloud.io.output/providers/gelf.vue +2 -2
- package/edit/logging.banzaicloud.io.output/providers/kafka.vue +2 -2
- package/edit/logging.banzaicloud.io.output/providers/kinesisStream.vue +1 -1
- package/edit/logging.banzaicloud.io.output/providers/logdna.vue +1 -1
- package/edit/logging.banzaicloud.io.output/providers/logz.vue +2 -2
- package/edit/logging.banzaicloud.io.output/providers/loki.vue +2 -2
- package/edit/logging.banzaicloud.io.output/providers/newrelic.vue +1 -1
- package/edit/logging.banzaicloud.io.output/providers/s3.vue +2 -2
- package/edit/logging.banzaicloud.io.output/providers/splunkHec.vue +2 -2
- package/edit/logging.banzaicloud.io.output/providers/sumologic.vue +1 -1
- package/edit/logging.banzaicloud.io.output/providers/syslog.vue +2 -2
- package/edit/management.cattle.io.clusterroletemplatebinding.vue +2 -0
- package/edit/management.cattle.io.node.vue +71 -0
- package/edit/management.cattle.io.project.vue +28 -23
- package/edit/management.cattle.io.setting.vue +14 -3
- package/edit/management.cattle.io.user.vue +1 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +4 -4
- package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +13 -13
- package/edit/monitoring.coreos.com.alertmanagerconfig/routeConfig.vue +18 -10
- package/edit/monitoring.coreos.com.alertmanagerconfig/tls.vue +2 -2
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/email.vue +12 -7
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +12 -7
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +20 -11
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +13 -8
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/webhook.vue +25 -7
- package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +2 -2
- package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +20 -7
- package/edit/monitoring.coreos.com.prometheusrule/RecordingRule.vue +1 -1
- package/edit/monitoring.coreos.com.prometheusrule/index.vue +19 -8
- package/edit/monitoring.coreos.com.receiver/auth.vue +1 -1
- package/edit/monitoring.coreos.com.receiver/index.vue +2 -2
- package/edit/monitoring.coreos.com.receiver/tls.vue +2 -2
- package/edit/monitoring.coreos.com.receiver/types/email.vue +2 -2
- package/edit/monitoring.coreos.com.receiver/types/opsgenie.vue +2 -2
- package/edit/monitoring.coreos.com.receiver/types/pagerduty.vue +2 -2
- package/edit/monitoring.coreos.com.receiver/types/slack.vue +2 -2
- package/edit/monitoring.coreos.com.receiver/types/webhook.banner.vue +1 -1
- package/edit/monitoring.coreos.com.receiver/types/webhook.vue +3 -3
- package/edit/monitoring.coreos.com.route.vue +2 -2
- package/edit/namespace.vue +0 -8
- package/edit/network.harvesterhci.io.clusternetwork/vlan.vue +1 -1
- package/edit/networking.istio.io.destinationrule/LoadBalancer.vue +2 -2
- package/edit/networking.istio.io.destinationrule/index.vue +1 -1
- package/edit/networking.k8s.io.ingress/Certificate.vue +5 -1
- package/edit/networking.k8s.io.ingress/Certificates.vue +5 -0
- package/edit/networking.k8s.io.ingress/DefaultBackend.vue +17 -2
- package/edit/networking.k8s.io.ingress/IngressClass.vue +63 -0
- package/edit/networking.k8s.io.ingress/Rule.vue +42 -6
- package/edit/networking.k8s.io.ingress/RulePath.vue +29 -5
- package/edit/networking.k8s.io.ingress/Rules.vue +11 -0
- package/edit/networking.k8s.io.ingress/index.vue +104 -15
- package/edit/networking.k8s.io.networkpolicy/PolicyRulePort.vue +1 -1
- package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +2 -2
- package/edit/networking.k8s.io.networkpolicy/index.vue +2 -2
- package/edit/persistentvolume/index.vue +1 -1
- package/edit/persistentvolume/plugins/awsElasticBlockStore.vue +2 -2
- package/edit/persistentvolume/plugins/azureDisk.vue +2 -2
- package/edit/persistentvolume/plugins/azureFile.vue +2 -2
- package/edit/persistentvolume/plugins/cephfs.vue +4 -4
- package/edit/persistentvolume/plugins/cinder.vue +2 -2
- package/edit/persistentvolume/plugins/csi.vue +2 -2
- package/edit/persistentvolume/plugins/fc.vue +4 -4
- package/edit/persistentvolume/plugins/flexVolume.vue +2 -2
- package/edit/persistentvolume/plugins/flocker.vue +1 -1
- package/edit/persistentvolume/plugins/gcePersistentDisk.vue +2 -2
- package/edit/persistentvolume/plugins/glusterfs.vue +2 -2
- package/edit/persistentvolume/plugins/hostPath.vue +1 -1
- package/edit/persistentvolume/plugins/iscsi.vue +4 -4
- package/edit/persistentvolume/plugins/local.vue +1 -1
- package/edit/persistentvolume/plugins/longhorn.vue +2 -2
- package/edit/persistentvolume/plugins/nfs.vue +2 -2
- package/edit/persistentvolume/plugins/photonPersistentDisk.vue +1 -1
- package/edit/persistentvolume/plugins/portworxVolume.vue +2 -2
- package/edit/persistentvolume/plugins/quobyte.vue +2 -2
- package/edit/persistentvolume/plugins/rbd.vue +4 -4
- package/edit/persistentvolume/plugins/scaleIO.vue +2 -2
- package/edit/persistentvolume/plugins/storageos.vue +2 -2
- package/edit/persistentvolume/plugins/vsphereVolume.vue +1 -1
- package/edit/persistentvolumeclaim.vue +24 -8
- package/edit/provisioning.cattle.io.cluster/ACE.vue +2 -2
- package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +8 -3
- package/edit/provisioning.cattle.io.cluster/DrainOptions.vue +2 -2
- package/edit/provisioning.cattle.io.cluster/MachinePool.vue +15 -3
- package/edit/provisioning.cattle.io.cluster/RegistryConfigs.vue +16 -3
- package/edit/provisioning.cattle.io.cluster/S3Config.vue +2 -2
- package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +1 -1
- package/edit/provisioning.cattle.io.cluster/__tests__/CustomCommand.tests.ts +1 -7
- package/edit/provisioning.cattle.io.cluster/import.vue +2 -1
- package/edit/provisioning.cattle.io.cluster/index.vue +26 -7
- package/edit/provisioning.cattle.io.cluster/rke2.vue +136 -48
- package/edit/resources.cattle.io.backup.vue +26 -8
- package/edit/resources.cattle.io.restore.vue +3 -3
- package/edit/secret/basic.vue +1 -1
- package/edit/secret/index.vue +80 -2
- package/edit/secret/registry.vue +2 -2
- package/edit/secret/ssh.vue +1 -1
- package/edit/secret/tls.vue +1 -1
- package/edit/service.vue +47 -11
- package/edit/serviceaccount.vue +1 -1
- package/edit/storage.k8s.io.storageclass/index.vue +1 -1
- package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/aws-ebs.vue +7 -3
- package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/azure-disk.vue +1 -1
- package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/azure-file.vue +1 -1
- package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/cinder.vue +2 -2
- package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/gce-pd.vue +2 -2
- package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/glusterfs.vue +1 -1
- package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/portworx-volume.vue +1 -1
- package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/quobyte.vue +1 -1
- package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/rbd.vue +1 -1
- package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/scaleio.vue +1 -1
- package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/storageos.vue +1 -1
- package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/vsphere-volume.vue +1 -1
- package/edit/token.vue +3 -3
- package/edit/ui.cattle.io.navlink.vue +2 -2
- package/edit/workload/Job.vue +111 -23
- package/edit/workload/Upgrading.vue +77 -22
- package/edit/workload/__tests__/Job.test.ts +72 -0
- package/edit/workload/__tests__/Upgrading.test.ts +60 -0
- package/edit/workload/index.vue +13 -1085
- package/edit/workload/mixins/workload.js +900 -0
- package/edit/workload/storage/Mount.vue +2 -2
- package/edit/workload/storage/awsElasticBlockStore.vue +1 -1
- package/edit/workload/storage/azureDisk.vue +2 -2
- package/edit/workload/storage/azureFile.vue +1 -1
- package/edit/workload/storage/ephemeralVolume/index.vue +2 -2
- package/edit/workload/storage/gcePersistentDisk.vue +1 -1
- package/edit/workload/storage/hostPath.vue +1 -1
- package/edit/workload/storage/nfs.vue +2 -2
- package/edit/workload/storage/persistentVolumeClaim/index.vue +2 -2
- package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +3 -3
- package/edit/workload/storage/secret.vue +2 -2
- package/edit/workload/storage/vsphereVolume.vue +1 -1
- package/edit/workload/types/Deployment.vue +377 -0
- package/edit/workload/types/Generic.vue +295 -0
- package/layouts/default.vue +26 -7
- package/layouts/error.vue +3 -2
- package/layouts/home.vue +12 -2
- package/layouts/plain.vue +18 -2
- package/layouts/unauthenticated.vue +2 -1
- package/list/catalog.cattle.io.clusterrepo.vue +1 -1
- package/list/fleet.cattle.io.bundle.vue +1 -1
- package/list/fleet.cattle.io.cluster.vue +1 -1
- package/list/fleet.cattle.io.clusterregistrationtoken.vue +1 -1
- package/list/harvesterhci.io.dashboard/HarvesterUpgrade.vue +9 -8
- package/list/harvesterhci.io.dashboard/UpgradeInfo.vue +40 -0
- package/list/harvesterhci.io.dashboard/index.vue +14 -36
- package/list/harvesterhci.io.host/index.vue +24 -12
- package/list/harvesterhci.io.networkattachmentdefinition.vue +1 -1
- package/list/harvesterhci.io.setting.vue +1 -1
- package/list/harvesterhci.io.virtualmachinebackup.vue +1 -1
- package/list/harvesterhci.io.virtualmachineimage.vue +36 -3
- package/list/harvesterhci.io.virtualmachinetemplateversion.vue +1 -5
- package/list/helm.cattle.io.projecthelmchart.vue +1 -1
- package/list/kubevirt.io.virtualmachine.vue +4 -2
- package/list/management.cattle.io.feature.vue +3 -3
- package/list/management.cattle.io.setting.vue +2 -2
- package/list/monitoring.coreos.com.alertmanagerconfig.vue +1 -1
- package/list/namespace.vue +3 -1
- package/list/node.vue +10 -3
- package/list/persistentvolumeclaim.vue +42 -0
- package/list/provisioning.cattle.io.cluster.vue +22 -20
- package/list/workload.vue +31 -6
- package/machine-config/amazonec2.vue +37 -12
- package/machine-config/azure.vue +3 -3
- package/machine-config/digitalocean.vue +2 -2
- package/machine-config/generic.vue +1 -1
- package/machine-config/harvester.vue +124 -25
- package/machine-config/linode.vue +2 -2
- package/machine-config/vmwarevsphere.vue +5 -5
- package/middleware/authenticated.js +36 -6
- package/middleware/unauthenticated.js +22 -0
- package/mixins/brand.js +50 -3
- package/mixins/browser-tab-visibility.js +37 -0
- package/mixins/chart.js +36 -4
- package/mixins/{compact-input.js → compact-input.ts} +5 -3
- package/mixins/form-validation.js +122 -0
- package/mixins/harvester-vm/index.js +134 -90
- package/mixins/labeled-form-element.ts +193 -0
- package/mixins/resource-fetch.js +173 -0
- package/models/cluster.x-k8s.io.machine.js +6 -2
- package/models/etcdbackup.js +4 -0
- package/models/event.js +4 -0
- package/models/fleet.cattle.io.bundle.js +1 -1
- package/models/fleet.cattle.io.gitrepo.js +10 -0
- package/models/harvester/harvesterhci.io.virtualmachinebackup.js +5 -2
- package/models/harvester/harvesterhci.io.virtualmachineimage.js +11 -8
- package/models/harvester/harvesterhci.io.virtualmachinetemplateversion.js +11 -2
- package/models/harvester/kubevirt.io.virtualmachine.js +2 -2
- package/models/harvester/kubevirt.io.virtualmachineinstance.js +1 -1
- package/models/harvester/node.js +27 -32
- package/models/harvester/persistentvolumeclaim.js +1 -1
- package/models/management.cattle.io.cluster.js +17 -11
- package/models/management.cattle.io.clusterroletemplatebinding.js +2 -2
- package/models/management.cattle.io.globalrole.js +19 -0
- package/models/management.cattle.io.node.js +10 -11
- package/models/management.cattle.io.project.js +60 -26
- package/models/management.cattle.io.roletemplate.js +19 -0
- package/models/monitoring.coreos.com.alertmanagerconfig.js +3 -2
- package/models/monitoring.coreos.com.prometheusrule.js +9 -0
- package/models/namespace.js +9 -1
- package/models/networking.k8s.io.ingress.js +17 -5
- package/models/persistentvolumeclaim.js +47 -1
- package/models/projectroletemplatebinding.js +2 -2
- package/models/provisioning.cattle.io.cluster.js +92 -13
- package/models/rke.cattle.io.etcdsnapshot.js +4 -0
- package/models/service.js +11 -5
- package/models/storage.k8s.io.storageclass.js +14 -1
- package/models/workload.js +7 -2
- package/nuxt.config.js +27 -7
- package/package.json +10 -14
- package/pages/about.vue +15 -1
- package/pages/account/index.vue +1 -1
- package/pages/auth/login.vue +17 -5
- package/pages/auth/setup.vue +47 -9
- package/pages/c/_cluster/_product/_resource/create.vue +1 -1
- package/pages/c/_cluster/_product/members/index.vue +6 -1
- package/pages/c/_cluster/_product/projectsnamespaces.vue +113 -11
- package/pages/c/_cluster/apps/charts/chart.vue +1 -1
- package/pages/c/_cluster/apps/charts/index.vue +2 -2
- package/pages/c/_cluster/apps/charts/install.vue +197 -19
- package/pages/c/_cluster/auth/config/index.vue +1 -1
- package/pages/c/_cluster/explorer/EventsTable.vue +1 -15
- package/pages/c/_cluster/explorer/index.vue +64 -35
- package/pages/c/_cluster/explorer/tools/index.vue +1 -1
- package/pages/c/_cluster/fleet/GitRepoGraphConfig.js +249 -0
- package/pages/c/_cluster/fleet/index.vue +47 -65
- package/pages/c/_cluster/harvester/airgapupgrade/index.vue +7 -4
- package/pages/c/_cluster/harvester/console/_uid/vnc.vue +7 -1
- package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/receiver.vue +8 -14
- package/pages/c/_cluster/monitoring/index.vue +1 -1
- package/pages/c/_cluster/monitoring/route-receiver/index.vue +1 -1
- package/pages/c/_cluster/settings/banners.vue +2 -2
- package/pages/c/_cluster/settings/brand.vue +62 -7
- package/pages/c/_cluster/settings/performance.vue +167 -0
- package/pages/diagnostic.vue +468 -0
- package/pages/fail-whale.vue +17 -5
- package/pages/home.vue +36 -22
- package/pages/plugins.vue +1 -1
- package/pages/prefs.vue +20 -7
- package/pages/support/index.vue +51 -9
- package/pkg/auto-import.js +1 -1
- package/pkg/dynamic-importer.lib.js +8 -0
- package/pkg/tsconfig.json +26 -9
- package/pkg/vue.config.js +8 -0
- package/plugins/console.js +29 -0
- package/plugins/dashboard-store/actions.js +171 -28
- package/plugins/dashboard-store/getters.js +13 -1
- package/plugins/dashboard-store/index.js +5 -1
- package/plugins/dashboard-store/mutations.js +72 -22
- package/plugins/dashboard-store/resource-class.js +259 -184
- package/plugins/i18n.js +9 -3
- package/plugins/steve/actions.js +16 -1
- package/plugins/steve/getters.js +9 -1
- package/plugins/steve/index.js +6 -2
- package/plugins/steve/mutations.js +100 -5
- package/plugins/steve/norman-class.js +8 -0
- package/plugins/steve/performanceTesting.js +5 -0
- package/plugins/steve/subscribe.js +144 -12
- package/plugins/steve/web-worker.steve-sub-worker.js +129 -0
- package/promptRemove/kubevirt.io.virtualmachine.vue +3 -17
- package/promptRemove/management.cattle.io.project.vue +128 -0
- package/promptRemove/pod.vue +131 -0
- package/rancher-components/BadgeState/BadgeState.spec.ts +12 -0
- package/{components → rancher-components/BadgeState}/BadgeState.vue +18 -10
- package/rancher-components/BadgeState/index.ts +1 -0
- package/{components/__tests__ → rancher-components/Banner}/Banner.test.ts +1 -1
- package/{components → rancher-components/Banner}/Banner.vue +22 -7
- package/rancher-components/Banner/index.ts +1 -0
- package/{components → rancher-components/Card}/Card.vue +58 -12
- package/rancher-components/Card/index.ts +1 -0
- package/{components/form → rancher-components/Form/Checkbox}/Checkbox.vue +118 -25
- package/rancher-components/Form/Checkbox/index.ts +1 -0
- package/{components/form/__tests__ → rancher-components/Form/LabeledInput}/LabeledInput.test.ts +13 -2
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +341 -0
- package/rancher-components/Form/LabeledInput/index.ts +1 -0
- package/{components/form → rancher-components/Form/Radio}/RadioButton.vue +50 -22
- package/{components/form → rancher-components/Form/Radio}/RadioGroup.vue +76 -28
- package/rancher-components/Form/Radio/index.ts +2 -0
- package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +169 -0
- package/rancher-components/Form/TextArea/index.ts +1 -0
- package/rancher-components/Form/index.ts +4 -0
- package/{components/form → rancher-components/LabeledTooltip}/LabeledTooltip.vue +32 -11
- package/rancher-components/LabeledTooltip/index.ts +1 -0
- package/scripts/build-pkg.sh +4 -0
- package/scripts/publish-shell.sh +37 -18
- package/scripts/test-plugins-build.sh +115 -0
- package/store/catalog.js +4 -0
- package/store/growl.js +6 -0
- package/store/i18n.js +18 -9
- package/store/index.js +190 -107
- package/store/prefs.js +8 -2
- package/store/resource-fetch.js +44 -0
- package/store/type-map.js +43 -7
- package/store/uiplugins.ts +1 -1
- package/utils/favicon.js +40 -0
- package/utils/object.js +26 -9
- package/utils/promise.js +20 -0
- package/utils/socket.js +10 -1
- package/utils/string.js +16 -0
- package/utils/validators/formRules/__tests__/index.test.ts +928 -0
- package/utils/validators/formRules/index.ts +447 -0
- package/utils/validators/prometheusrule.js +1 -1
- package/utils/validators/vm.js +12 -5
- package/utils/width.js +39 -0
- package/yarn-error.log +196 -0
- package/components/NovncConsoleWrapper.vue +0 -150
- package/components/form/Container.vue +0 -143
- package/components/form/LabeledInput.vue +0 -245
- package/components/form/Scheduling.vue +0 -115
- package/components/form/TextAreaAutoGrow.vue +0 -127
- package/mixins/labeled-form-element.js +0 -137
|
@@ -62,7 +62,7 @@ export default class MgmtCluster extends HybridModel {
|
|
|
62
62
|
action: 'copyKubeConfig',
|
|
63
63
|
label: this.t('cluster.copyConfig'),
|
|
64
64
|
bulkable: false,
|
|
65
|
-
enabled:
|
|
65
|
+
enabled: this.$rootGetters['isRancher'] && this.hasAction('generateKubeconfig'),
|
|
66
66
|
icon: 'icon icon-copy',
|
|
67
67
|
});
|
|
68
68
|
|
|
@@ -80,6 +80,7 @@ export default class MgmtCluster extends HybridModel {
|
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
get provisioner() {
|
|
83
|
+
// For imported K3s clusters, this.status.driver is 'k3s.'
|
|
83
84
|
return this.status?.driver ? this.status.driver : 'imported';
|
|
84
85
|
}
|
|
85
86
|
|
|
@@ -99,11 +100,9 @@ export default class MgmtCluster extends HybridModel {
|
|
|
99
100
|
return this.spec?.clusterTemplateRevisionName;
|
|
100
101
|
}
|
|
101
102
|
|
|
102
|
-
get
|
|
103
|
+
get providerForEmberParam() {
|
|
103
104
|
// Ember wants one word called provider to tell what component to show, but has much indirect mapping to figure out what it is.
|
|
104
105
|
let provider;
|
|
105
|
-
let clusterTemplateRevision;
|
|
106
|
-
|
|
107
106
|
// Provisioner is the "<something>Config" in the model
|
|
108
107
|
const provisioner = KONTAINER_TO_DRIVER[(this.provisioner || '').toLowerCase()] || this.provisioner;
|
|
109
108
|
|
|
@@ -114,13 +113,6 @@ export default class MgmtCluster extends HybridModel {
|
|
|
114
113
|
} else {
|
|
115
114
|
provider = 'custom';
|
|
116
115
|
}
|
|
117
|
-
|
|
118
|
-
// If the RKE1 cluster is created from an RKE template, we need
|
|
119
|
-
// to get the template version to pass into the Ember UI for
|
|
120
|
-
// the iFramed edit cluster form
|
|
121
|
-
if (this.rkeTemplateVersion) {
|
|
122
|
-
clusterTemplateRevision = this.rkeTemplateVersion;
|
|
123
|
-
}
|
|
124
116
|
} else if ( this.driver ) {
|
|
125
117
|
provider = this.driver;
|
|
126
118
|
} else if ( provisioner && provisioner.endsWith('v2') ) {
|
|
@@ -129,6 +121,20 @@ export default class MgmtCluster extends HybridModel {
|
|
|
129
121
|
provider = 'import';
|
|
130
122
|
}
|
|
131
123
|
|
|
124
|
+
return provider;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
get emberEditPath() {
|
|
128
|
+
let clusterTemplateRevision;
|
|
129
|
+
|
|
130
|
+
// If the RKE1 cluster is created from an RKE template, we need
|
|
131
|
+
// to get the template version to pass into the Ember UI for
|
|
132
|
+
// the iFramed edit cluster form
|
|
133
|
+
if (this.rkeTemplateVersion) {
|
|
134
|
+
clusterTemplateRevision = this.rkeTemplateVersion;
|
|
135
|
+
}
|
|
136
|
+
const provider = this.providerForEmberParam;
|
|
137
|
+
|
|
132
138
|
// Avoid passing falsy values as query parameters
|
|
133
139
|
const qp = { };
|
|
134
140
|
|
|
@@ -46,11 +46,11 @@ export default class CRTB extends HybridModel {
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
get roleDisplay() {
|
|
49
|
-
return this.roleTemplate
|
|
49
|
+
return this.roleTemplate?.nameDisplay;
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
get roleDescription() {
|
|
53
|
-
return this.roleTemplate
|
|
53
|
+
return this.roleTemplate?.description;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
get roleTemplate() {
|
|
@@ -14,6 +14,25 @@ const SPECIAL = [BASE, ADMIN, USER];
|
|
|
14
14
|
const GLOBAL = SUBTYPE_MAPPING.GLOBAL.key;
|
|
15
15
|
|
|
16
16
|
export default class GlobalRole extends SteveModel {
|
|
17
|
+
get availableActions() {
|
|
18
|
+
const out = super._availableActions;
|
|
19
|
+
|
|
20
|
+
const toFilter = ['goToEdit', 'promptRemove'];
|
|
21
|
+
const editActions = out.filter((a) => {
|
|
22
|
+
if ( toFilter.includes(a.action) ) {
|
|
23
|
+
return a;
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
if ( editActions.length > 0 ) {
|
|
28
|
+
editActions.forEach((a) => {
|
|
29
|
+
a.enabled = !this.builtin;
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return out;
|
|
34
|
+
}
|
|
35
|
+
|
|
17
36
|
get customValidationRules() {
|
|
18
37
|
return Role.customValidationRules();
|
|
19
38
|
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { MANAGEMENT_NODE } from '@shell/config/labels-annotations';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
ADDRESSES, CAPI, MANAGEMENT, NODE, NORMAN
|
|
4
|
+
} from '@shell/config/types';
|
|
3
5
|
import { NAME as EXPLORER } from '@shell/config/product/explorer';
|
|
4
6
|
import { listNodeRoles } from '@shell/models/cluster/node';
|
|
5
7
|
import { insertAt } from '@shell/utils/array';
|
|
@@ -87,7 +89,7 @@ export default class MgmtNode extends HybridModel {
|
|
|
87
89
|
}
|
|
88
90
|
|
|
89
91
|
get canUpdate() {
|
|
90
|
-
return this.norman?.hasLink('update');
|
|
92
|
+
return this.hasLink('update') && this.norman?.hasLink('update');
|
|
91
93
|
}
|
|
92
94
|
|
|
93
95
|
remove() {
|
|
@@ -111,24 +113,21 @@ export default class MgmtNode extends HybridModel {
|
|
|
111
113
|
}
|
|
112
114
|
|
|
113
115
|
get provisioningCluster() {
|
|
114
|
-
return this.$getters['all'](CAPI.RANCHER_CLUSTER).find(c => c.
|
|
116
|
+
return this.$getters['all'](CAPI.RANCHER_CLUSTER).find(c => c.mgmtClusterId === this.mgmtClusterId);
|
|
115
117
|
}
|
|
116
118
|
|
|
117
119
|
get doneOverride() {
|
|
118
|
-
return
|
|
119
|
-
name: 'c-cluster-product-resource-namespace-id',
|
|
120
|
-
params: {
|
|
121
|
-
resource: CAPI.RANCHER_CLUSTER,
|
|
122
|
-
namespace: this.provisioningCluster?.namespace,
|
|
123
|
-
id: this.namespace
|
|
124
|
-
}
|
|
125
|
-
};
|
|
120
|
+
return this.provisioningCluster?.detailLocation;
|
|
126
121
|
}
|
|
127
122
|
|
|
128
123
|
get canClone() {
|
|
129
124
|
return false;
|
|
130
125
|
}
|
|
131
126
|
|
|
127
|
+
get ipaddress() {
|
|
128
|
+
return this.status.internalNodeStatus?.addresses?.find(({ type }) => type === ADDRESSES.INTERNAL_IP)?.address || '-';
|
|
129
|
+
}
|
|
130
|
+
|
|
132
131
|
get canScaleDown() {
|
|
133
132
|
const isInOnlyPool = this.pool?.provisioningCluster?.pools?.length === 1;
|
|
134
133
|
const isOnlyNode = this.pool?.nodes?.length === 1;
|
|
@@ -1,25 +1,40 @@
|
|
|
1
1
|
import { DEFAULT_PROJECT, SYSTEM_PROJECT } from '@shell/config/labels-annotations';
|
|
2
2
|
import { MANAGEMENT, NAMESPACE, NORMAN } from '@shell/config/types';
|
|
3
3
|
import HybridModel from '@shell/plugins/steve/hybrid-class';
|
|
4
|
+
import isEmpty from 'lodash/isEmpty';
|
|
5
|
+
|
|
6
|
+
function clearUnusedResourceQuotas(spec, types) {
|
|
7
|
+
types.forEach((type) => {
|
|
8
|
+
if (spec[type]?.limit && !isEmpty(spec[type].limit)) {
|
|
9
|
+
Object.keys(spec[type].limit).forEach((key) => {
|
|
10
|
+
if (!spec[type].limit[key]) {
|
|
11
|
+
delete spec[type].limit[key];
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
}
|
|
4
15
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
}
|
|
16
|
+
if (spec[type]?.usedLimit && !isEmpty(spec[type].usedLimit)) {
|
|
17
|
+
Object.keys(spec[type].usedLimit).forEach((key) => {
|
|
18
|
+
if (!spec[type].usedLimit[key]) {
|
|
19
|
+
delete spec[type].usedLimit[key];
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
13
23
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
24
|
+
if ( spec[type]?.limit && isEmpty(spec[type].limit) ) {
|
|
25
|
+
spec[type].limit = null;
|
|
26
|
+
}
|
|
17
27
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
28
|
+
if ( spec[type]?.usedLimit && isEmpty(spec[type].usedLimit) ) {
|
|
29
|
+
spec[type].usedLimit = null;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if ( spec[type] && !isEmpty(spec[type]) && Object.keys(spec[type]).every( k => spec[type][k] === null ) ) {
|
|
33
|
+
spec[type] = null;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
21
36
|
|
|
22
|
-
return
|
|
37
|
+
return spec;
|
|
23
38
|
}
|
|
24
39
|
|
|
25
40
|
export default class Project extends HybridModel {
|
|
@@ -54,14 +69,27 @@ export default class Project extends HybridModel {
|
|
|
54
69
|
return this.listLocation;
|
|
55
70
|
}
|
|
56
71
|
|
|
57
|
-
async save() {
|
|
72
|
+
async save(forceReplaceOnReq) {
|
|
58
73
|
const norman = await this.norman;
|
|
59
74
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
75
|
+
// PUT requests to Norman have trouble with nested objects due to the
|
|
76
|
+
// merging strategy performed on the backend. Whenever a field is
|
|
77
|
+
// removed, the resource should be replaced instead of merged,
|
|
78
|
+
// and the PUT request should have a query param _replace=true.
|
|
79
|
+
const newValue = await norman.save({ replace: forceReplaceOnReq });
|
|
80
|
+
|
|
81
|
+
try {
|
|
82
|
+
await newValue.doAction('setpodsecuritypolicytemplate', { podSecurityPolicyTemplateId: this.spec.podSecurityPolicyTemplateId || null });
|
|
83
|
+
} catch (err) {
|
|
84
|
+
if (err.status === 409) {
|
|
85
|
+
// The backend updates each new project soon after it is created,
|
|
86
|
+
// so there is a chance of a resource conflict error. If that happens,
|
|
87
|
+
// retry the action.
|
|
88
|
+
await newValue.doAction('setpodsecuritypolicytemplate', { podSecurityPolicyTemplateId: this.spec.podSecurityPolicyTemplateId || null });
|
|
89
|
+
} else {
|
|
90
|
+
throw err;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
65
93
|
|
|
66
94
|
return newValue;
|
|
67
95
|
}
|
|
@@ -70,7 +98,7 @@ export default class Project extends HybridModel {
|
|
|
70
98
|
const norman = await this.norman;
|
|
71
99
|
|
|
72
100
|
await norman.remove(...arguments);
|
|
73
|
-
this.$dispatch('management/
|
|
101
|
+
await this.$dispatch('management/findAll', { type: MANAGEMENT.PROJECT, opt: { force: true } }, { root: true });
|
|
74
102
|
}
|
|
75
103
|
|
|
76
104
|
get norman() {
|
|
@@ -79,6 +107,8 @@ export default class Project extends HybridModel {
|
|
|
79
107
|
|
|
80
108
|
get normanNewProject() {
|
|
81
109
|
return (async() => {
|
|
110
|
+
const clearedResourceQuotas = clearUnusedResourceQuotas(this.spec, ['resourceQuota', 'namespaceDefaultResourceQuota']);
|
|
111
|
+
|
|
82
112
|
const normanProject = await this.$dispatch('rancher/create', {
|
|
83
113
|
type: NORMAN.PROJECT,
|
|
84
114
|
name: this.spec.displayName,
|
|
@@ -88,13 +118,12 @@ export default class Project extends HybridModel {
|
|
|
88
118
|
clusterId: this.$rootGetters['currentCluster'].id,
|
|
89
119
|
creatorId: this.$rootGetters['auth/principalId'],
|
|
90
120
|
containerDefaultResourceLimit: this.spec.containerDefaultResourceLimit,
|
|
91
|
-
namespaceDefaultResourceQuota: clearResourceQuotas(JSON.parse(JSON.stringify(this.spec)), 'namespaceDefaultResourceQuota'),
|
|
92
|
-
resourceQuota: clearResourceQuotas(JSON.parse(JSON.stringify(this.spec)), 'resourceQuota'),
|
|
93
121
|
}, { root: true });
|
|
94
122
|
|
|
95
123
|
// The backend seemingly required both labels/annotation and metadata.labels/annotations or it doesn't save the labels and annotations
|
|
96
124
|
normanProject.setAnnotations(this.metadata.annotations);
|
|
97
125
|
normanProject.setLabels(this.metadata.labels);
|
|
126
|
+
normanProject.setResourceQuotas(clearedResourceQuotas);
|
|
98
127
|
|
|
99
128
|
return normanProject;
|
|
100
129
|
})();
|
|
@@ -107,12 +136,13 @@ export default class Project extends HybridModel {
|
|
|
107
136
|
id: this.id.replace('/', ':'),
|
|
108
137
|
}, { root: true });
|
|
109
138
|
|
|
139
|
+
const clearedResourceQuotas = clearUnusedResourceQuotas(this.spec, ['resourceQuota', 'namespaceDefaultResourceQuota']);
|
|
140
|
+
|
|
110
141
|
normanProject.setAnnotations(this.metadata.annotations);
|
|
111
142
|
normanProject.setLabels(this.metadata.labels);
|
|
143
|
+
normanProject.setResourceQuotas(clearedResourceQuotas);
|
|
112
144
|
normanProject.description = this.spec.description;
|
|
113
145
|
normanProject.containerDefaultResourceLimit = this.spec.containerDefaultResourceLimit;
|
|
114
|
-
normanProject.namespaceDefaultResourceQuota = clearResourceQuotas(JSON.parse(JSON.stringify(this.spec)), 'namespaceDefaultResourceQuota');
|
|
115
|
-
normanProject.resourceQuota = clearResourceQuotas(JSON.parse(JSON.stringify(this.spec)), 'resourceQuota');
|
|
116
146
|
|
|
117
147
|
return normanProject;
|
|
118
148
|
})();
|
|
@@ -132,4 +162,8 @@ export default class Project extends HybridModel {
|
|
|
132
162
|
get canEditYaml() {
|
|
133
163
|
return this.schema?.resourceMethods?.find(x => x === 'blocked-PUT') ? false : super.canUpdate;
|
|
134
164
|
}
|
|
165
|
+
|
|
166
|
+
get confirmRemove() {
|
|
167
|
+
return true;
|
|
168
|
+
}
|
|
135
169
|
}
|
|
@@ -56,6 +56,25 @@ export const VERBS = [
|
|
|
56
56
|
];
|
|
57
57
|
|
|
58
58
|
export default class RoleTemplate extends SteveModel {
|
|
59
|
+
get availableActions() {
|
|
60
|
+
const out = super._availableActions;
|
|
61
|
+
|
|
62
|
+
const toFilter = ['goToEdit', 'promptRemove'];
|
|
63
|
+
const editActions = out.filter((a) => {
|
|
64
|
+
if ( toFilter.includes(a.action) ) {
|
|
65
|
+
return a;
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
if ( editActions.length > 0 ) {
|
|
70
|
+
editActions.forEach((a) => {
|
|
71
|
+
a.enabled = !this.builtin;
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return out;
|
|
76
|
+
}
|
|
77
|
+
|
|
59
78
|
get customValidationRules() {
|
|
60
79
|
return Role.customValidationRules();
|
|
61
80
|
}
|
|
@@ -54,7 +54,7 @@ export default class AlertmanagerConfig extends SteveModel {
|
|
|
54
54
|
return 'c-cluster-product-resource-namespace-id';
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
get _detailLocation() {
|
|
58
58
|
return {
|
|
59
59
|
name: this.alertmanagerConfigDoneRouteName,
|
|
60
60
|
params: {
|
|
@@ -64,7 +64,8 @@ export default class AlertmanagerConfig extends SteveModel {
|
|
|
64
64
|
namespace: this.metadata?.namespace,
|
|
65
65
|
id: this.name,
|
|
66
66
|
},
|
|
67
|
-
hash:
|
|
67
|
+
hash: '#receivers',
|
|
68
|
+
query: { as: 'config' }
|
|
68
69
|
};
|
|
69
70
|
}
|
|
70
71
|
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import SteveModel from '@shell/plugins/steve/steve-class';
|
|
2
2
|
|
|
3
3
|
export default class PrometheusRule extends SteveModel {
|
|
4
|
+
get _availableActions() {
|
|
5
|
+
// the user cannot edit PrometheusRules with a "period" in the name because the name cannot be edited after creation and the backend will reject any name with a "period"
|
|
6
|
+
const out = super._availableActions.filter((action) => {
|
|
7
|
+
return !this.metadata.name.includes('.') || !['goToEdit', 'goToEditYaml', 'goToClone'].includes(action.action);
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
return out;
|
|
11
|
+
}
|
|
12
|
+
|
|
4
13
|
get customValidationRules() {
|
|
5
14
|
return [
|
|
6
15
|
{
|
package/models/namespace.js
CHANGED
|
@@ -12,7 +12,15 @@ import Vue from 'vue';
|
|
|
12
12
|
|
|
13
13
|
const OBSCURE_NAMESPACE_PREFIX = [
|
|
14
14
|
'c-', // cluster namespace
|
|
15
|
-
|
|
15
|
+
|
|
16
|
+
// Project namespace. When a user creates a project, Rancher creates
|
|
17
|
+
// namespaces in the local cluster with the 'p-' prefix which are
|
|
18
|
+
// used to manage RBAC for the project. If these namespaces are deleted,
|
|
19
|
+
// role bindings can be lost and Rancher may need to be restored from
|
|
20
|
+
// backup. Therefore we hide these namespaces unless the developer setting
|
|
21
|
+
// is turned on from the user preferences.
|
|
22
|
+
'p-',
|
|
23
|
+
|
|
16
24
|
'user-', // user namespace
|
|
17
25
|
'local', // local namespace
|
|
18
26
|
];
|
|
@@ -14,10 +14,9 @@ function isTlsHost(spec, host) {
|
|
|
14
14
|
return tlsHosts(spec).includes(host);
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
export function ingressFullPath(resource, rule) {
|
|
17
|
+
export function ingressFullPath(resource, rule, path = {}) {
|
|
18
18
|
const spec = resource.spec;
|
|
19
19
|
const hostValue = rule.host || '';
|
|
20
|
-
const path = rule?.http?.paths || [];
|
|
21
20
|
const pathValue = path.path || '';
|
|
22
21
|
let protocol = '';
|
|
23
22
|
|
|
@@ -73,7 +72,7 @@ export default class Ingress extends SteveModel {
|
|
|
73
72
|
|
|
74
73
|
createPathForListPage(workloads, rule, path, certificates) {
|
|
75
74
|
const serviceName = get(path?.backend, this.serviceNamePath);
|
|
76
|
-
const fullPath = this.fullPath(rule);
|
|
75
|
+
const fullPath = this.fullPath(rule, path);
|
|
77
76
|
|
|
78
77
|
return {
|
|
79
78
|
// isUrl thinks urls which contain '*' are valid so I'm adding an additional check for '*'
|
|
@@ -88,8 +87,8 @@ export default class Ingress extends SteveModel {
|
|
|
88
87
|
};
|
|
89
88
|
}
|
|
90
89
|
|
|
91
|
-
fullPath(rule) {
|
|
92
|
-
return ingressFullPath(this, rule);
|
|
90
|
+
fullPath(rule, path) {
|
|
91
|
+
return ingressFullPath(this, rule, path);
|
|
93
92
|
}
|
|
94
93
|
|
|
95
94
|
certLink(cert, certificates = []) {
|
|
@@ -193,4 +192,17 @@ export default class Ingress extends SteveModel {
|
|
|
193
192
|
get hasDefaultBackend() {
|
|
194
193
|
return !isEmpty(this.spec[this.defaultBackendPath]);
|
|
195
194
|
}
|
|
195
|
+
|
|
196
|
+
get details() {
|
|
197
|
+
const out = this._details;
|
|
198
|
+
|
|
199
|
+
if (this.spec?.ingressClassName) {
|
|
200
|
+
out.push({
|
|
201
|
+
label: this.t('ingress.ingressClass.label'),
|
|
202
|
+
content: this.spec.ingressClassName,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
return out;
|
|
207
|
+
}
|
|
196
208
|
}
|
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
|
|
2
|
-
import {
|
|
2
|
+
import { insertAt } from '@shell/utils/array';
|
|
3
|
+
import {
|
|
4
|
+
AS,
|
|
5
|
+
_CLONE,
|
|
6
|
+
FOCUS,
|
|
7
|
+
MODE,
|
|
8
|
+
_UNFLAG,
|
|
9
|
+
_EDIT
|
|
10
|
+
} from '@shell/config/query-params';
|
|
3
11
|
import Vue from 'vue';
|
|
4
12
|
import SteveModel from '@shell/plugins/steve/steve-class';
|
|
13
|
+
import { STATES_ENUM } from '@shell/plugins/dashboard-store/resource-class';
|
|
14
|
+
import { STORAGE_CLASS } from '@shell/config/types';
|
|
5
15
|
|
|
6
16
|
export default class PVC extends SteveModel {
|
|
7
17
|
applyDefaults(_, realMode) {
|
|
@@ -15,4 +25,40 @@ export default class PVC extends SteveModel {
|
|
|
15
25
|
resources: { requests: { storage } }
|
|
16
26
|
});
|
|
17
27
|
}
|
|
28
|
+
|
|
29
|
+
get bound() {
|
|
30
|
+
return this.state === STATES_ENUM.BOUND;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
get expandable() {
|
|
34
|
+
return !!this.$getters[`byId`](STORAGE_CLASS, this.spec?.storageClassName)?.allowVolumeExpansion;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
get _availableActions() {
|
|
38
|
+
const out = super._availableActions;
|
|
39
|
+
|
|
40
|
+
// Add backwards, each one to the top
|
|
41
|
+
insertAt(out, 0, { divider: true });
|
|
42
|
+
insertAt(out, 0, {
|
|
43
|
+
action: 'goToEditVolumeSize',
|
|
44
|
+
enabled: this.expandable && this.bound,
|
|
45
|
+
icon: 'icon icon-fw icon-plus',
|
|
46
|
+
label: this.t('persistentVolumeClaim.expand.label'),
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
return out;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
goToEditVolumeSize() {
|
|
53
|
+
const location = this.detailLocation;
|
|
54
|
+
|
|
55
|
+
location.query = {
|
|
56
|
+
...location.query,
|
|
57
|
+
[MODE]: _EDIT,
|
|
58
|
+
[AS]: _UNFLAG,
|
|
59
|
+
[FOCUS]: 'volumeclaim'
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
this.currentRouter().push(location);
|
|
63
|
+
}
|
|
18
64
|
}
|
|
@@ -7,11 +7,11 @@ export default class PRTB extends NormanModel {
|
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
get roleDisplay() {
|
|
10
|
-
return this.roleTemplate
|
|
10
|
+
return this.roleTemplate?.nameDisplay;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
get roleDescription() {
|
|
14
|
-
return this.roleTemplate
|
|
14
|
+
return this.roleTemplate?.description;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
get roleTemplate() {
|