@rancher/shell 3.0.12-rc.3 → 3.0.12-rc.4
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/global/_layout.scss +4 -0
- package/assets/translations/en-us.yaml +144 -41
- package/assets/translations/zh-hans.yaml +1 -7
- package/chart/monitoring/ClusterSelector.vue +0 -21
- package/chart/monitoring/prometheus/index.vue +6 -3
- package/components/CruResource.vue +161 -14
- package/components/ExplorerMembers.vue +8 -4
- package/components/ExplorerProjectsNamespaces.vue +10 -6
- package/components/GrowlManager.vue +4 -0
- package/components/MgmtNodeList.vue +184 -0
- package/components/Resource/Detail/Card/StateCard/__tests__/composables.test.ts +90 -1
- package/components/Resource/Detail/Card/StateCard/composables.ts +57 -87
- package/components/Resource/Detail/Card/StatusCard/__tests__/StatusCard.test.ts +61 -0
- package/components/Resource/Detail/Card/StatusCard/index.vue +61 -15
- package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +2 -0
- package/components/Resource/Detail/Metadata/KeyValue.vue +5 -2
- package/components/Resource/Detail/Metadata/KeyValueRow.vue +2 -6
- package/components/ResourceDetail/index.vue +1 -1
- package/components/ResourceList/Masthead.vue +7 -1
- package/components/ResourceList/index.vue +82 -1
- package/components/RichTranslation.vue +5 -2
- package/components/Setting.vue +1 -0
- package/components/SubtleLink.vue +31 -6
- package/components/Tabbed/Tab.vue +29 -3
- package/components/Tabbed/index.vue +25 -3
- package/components/TableOfContents/TableOfContents.vue +109 -0
- package/components/TableOfContents/composables.ts +258 -0
- package/components/Window/ContainerShell.vue +21 -11
- package/components/Window/__tests__/ContainerShell.test.ts +107 -37
- package/components/Wizard.vue +9 -4
- package/components/fleet/AppCoChartGrid.vue +401 -0
- package/components/fleet/AppCoEmptyState.vue +127 -0
- package/components/fleet/AppCoPageHeader.vue +119 -0
- package/components/fleet/AppCoVersionSelect.vue +70 -0
- package/components/fleet/FleetClusterTargets/ClusterSelectionFields.vue +217 -0
- package/components/fleet/FleetClusterTargets/TargetsList.vue +123 -35
- package/components/fleet/FleetClusterTargets/index.vue +189 -146
- package/components/fleet/FleetIntro.vue +7 -3
- package/components/fleet/FleetNoWorkspaces.vue +7 -3
- package/components/fleet/FleetSecretSelector.vue +5 -3
- package/components/fleet/FleetValuesFrom.vue +8 -2
- package/components/fleet/GitRepoTargetTab.vue +0 -2
- package/components/fleet/HelmOpAdvancedTab.vue +19 -53
- package/components/fleet/HelmOpAppCoConfigTab.vue +593 -0
- package/components/fleet/HelmOpAppCoResourcesSection.vue +162 -0
- package/components/fleet/HelmOpResourcesSection.vue +82 -0
- package/components/fleet/HelmOpTargetOptionsSection.vue +89 -0
- package/components/fleet/HelmOpTargetTab.vue +64 -60
- package/components/fleet/HelmOpValuesTab.vue +129 -105
- package/components/fleet/__tests__/AppCoEmptyState.test.ts +71 -0
- package/components/fleet/__tests__/AppCoVersionSelect.test.ts +36 -0
- package/components/fleet/__tests__/ClusterSelectionFields.test.ts +62 -0
- package/components/fleet/__tests__/FleetClusterTargets.test.ts +253 -0
- package/components/fleet/__tests__/FleetSecretSelector.test.ts +16 -0
- package/components/fleet/__tests__/FleetValuesFrom.test.ts +44 -0
- package/components/fleet/__tests__/HelmOpAppCoConfigTab.test.ts +59 -0
- package/components/fleet/__tests__/HelmOpAppCoResourcesSection.test.ts +62 -0
- package/components/fleet/__tests__/HelmOpResourcesSection.test.ts +43 -0
- package/components/fleet/__tests__/HelmOpTargetOptionsSection.test.ts +34 -0
- package/components/fleet/__tests__/HelmOpValuesTab.test.ts +39 -0
- package/components/fleet/__tests__/__snapshots__/AppCoEmptyState.test.ts.snap +97 -0
- package/components/fleet/__tests__/__snapshots__/AppCoVersionSelect.test.ts.snap +30 -0
- package/components/fleet/__tests__/__snapshots__/ClusterSelectionFields.test.ts.snap +209 -0
- package/components/fleet/__tests__/__snapshots__/HelmOpTargetOptionsSection.test.ts.snap +140 -0
- package/components/fleet/dashboard/Empty.vue +8 -4
- package/components/fleet/dashboard/ResourceCard.vue +28 -0
- package/components/fleet/dashboard/ResourceDetails.vue +28 -0
- package/components/fleet/dashboard/__tests__/ResourceCard.test.ts +87 -0
- package/components/form/ArrayList.vue +61 -4
- package/components/form/KeyValue.vue +23 -2
- package/components/form/LabeledSelect.vue +39 -1
- package/components/form/Labels.vue +22 -3
- package/components/form/NameNsDescription.vue +13 -5
- package/components/form/ResourceTabs/index.vue +1 -0
- package/components/form/__tests__/NameNsDescription.test.ts +75 -0
- package/components/formatter/InternalExternalIP.vue +10 -4
- package/components/formatter/ServiceTargets.vue +26 -7
- package/components/formatter/__tests__/InternalExternalIP.test.ts +132 -0
- package/components/formatter/__tests__/ServiceTargets.test.ts +412 -0
- package/components/nav/Header.vue +4 -0
- package/components/nav/TopLevelMenu.vue +7 -2
- package/components/nav/__tests__/Header.test.ts +15 -0
- package/components/nav/__tests__/TopLevelMenu.test.ts +120 -2
- package/components/templates/default.vue +9 -4
- package/components/templates/home.vue +9 -4
- package/components/templates/plain.vue +9 -4
- package/composables/useHelmOpResources.test.ts +56 -0
- package/composables/useHelmOpResources.ts +32 -0
- package/composables/useStateColor.test.ts +325 -0
- package/composables/useStateColor.ts +128 -0
- package/config/home-links.js +1 -1
- package/config/labels-annotations.js +1 -0
- package/config/product/explorer.js +17 -4
- package/config/product/manager.js +2 -0
- package/config/router/index.js +16 -0
- package/config/router/navigation-guards/__tests__/authentication.test.ts +130 -0
- package/config/router/navigation-guards/authentication.js +10 -4
- package/config/router/routes.js +20 -6
- package/config/settings.ts +0 -2
- package/config/table-headers.js +3 -4
- package/config/types.js +9 -0
- package/core/plugin-products-base.ts +3 -3
- package/core/plugin-types.ts +83 -30
- package/core/plugin.ts +3 -0
- package/core/types-provisioning.ts +34 -1
- package/core/types.ts +15 -2
- package/detail/__tests__/provisioning.cattle.io.cluster.test.ts +114 -0
- package/detail/__tests__/workload.test.ts +3 -152
- package/detail/catalog.cattle.io.clusterrepo.vue +1 -1
- package/detail/provisioning.cattle.io.cluster.vue +30 -4
- package/detail/workload/index.vue +12 -55
- package/edit/__tests__/catalog.cattle.io.clusterrepo.test.ts +248 -0
- package/edit/__tests__/fleet.cattle.io.helmop.test.ts +105 -0
- package/edit/auditlog.cattle.io.auditpolicy/__tests__/__snapshots__/General.test.ts.snap +6 -0
- package/edit/auditlog.cattle.io.auditpolicy/__tests__/__snapshots__/index.test.ts.snap +1 -0
- package/edit/auth/__tests__/azuread.test.ts +34 -9
- package/edit/auth/__tests__/github.test.ts +234 -0
- package/edit/auth/__tests__/oidc.test.ts +26 -6
- package/edit/auth/__tests__/saml.test.ts +196 -0
- package/edit/auth/azuread.vue +128 -95
- package/edit/auth/github.vue +72 -13
- package/edit/auth/ldap/__tests__/index.test.ts +206 -0
- package/edit/auth/ldap/config.vue +8 -0
- package/edit/auth/ldap/index.vue +75 -1
- package/edit/auth/oidc.vue +119 -73
- package/edit/auth/saml.vue +76 -12
- package/edit/catalog.cattle.io.clusterrepo.vue +140 -32
- package/edit/fleet.cattle.io.helmop.vue +491 -136
- package/edit/management.cattle.io.user.vue +5 -2
- package/edit/provisioning.cattle.io.cluster/rke2.vue +84 -10
- package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +11 -0
- package/list/group.principal.vue +5 -4
- package/list/harvesterhci.io.management.cluster.vue +8 -9
- package/list/management.cattle.io.user.vue +12 -9
- package/list/provisioning.cattle.io.cluster.vue +16 -10
- package/mixins/__tests__/auth-config.test.ts +90 -0
- package/mixins/__tests__/chart.test.ts +94 -0
- package/mixins/__tests__/resource-fetch-api-pagination.test.ts +48 -0
- package/mixins/auth-config.js +7 -0
- package/mixins/chart.js +11 -2
- package/mixins/child-hook.js +12 -6
- package/mixins/create-edit-view/impl.js +5 -3
- package/mixins/resource-fetch-api-pagination.js +21 -1
- package/models/__tests__/catalog.cattle.io.clusterrepo.test.ts +57 -0
- package/models/__tests__/compliance.cattle.io.clusterscan.test.ts +144 -0
- package/models/__tests__/fleet-application.test.ts +175 -0
- package/models/__tests__/fleet.cattle.io.bundle.test.ts +169 -0
- package/models/__tests__/fleet.cattle.io.helmop.test.ts +84 -0
- package/models/__tests__/management.cattle.io.node.ts +22 -0
- package/models/__tests__/namespace.test.ts +36 -0
- package/models/__tests__/provisioning.cattle.io.cluster.test.ts +49 -0
- package/models/__tests__/workload.test.ts +401 -26
- package/models/catalog.cattle.io.clusterrepo.js +28 -4
- package/models/compliance.cattle.io.clusterscan.js +39 -4
- package/models/fleet-application.js +4 -0
- package/models/fleet.cattle.io.helmop.js +20 -1
- package/models/management.cattle.io.cluster.js +18 -2
- package/models/management.cattle.io.node.js +44 -3
- package/models/namespace.js +1 -1
- package/models/pod.js +33 -1
- package/models/provisioning.cattle.io.cluster.js +5 -5
- package/models/workload.js +108 -13
- package/models/workload.service.js +5 -0
- package/package.json +14 -13
- package/pages/about.vue +5 -6
- package/pages/auth/login.vue +0 -35
- package/pages/auth/setup.vue +11 -0
- package/pages/c/_cluster/apps/charts/AppChartCardFooter.vue +2 -2
- package/pages/c/_cluster/apps/charts/AppChartCardSubHeader.vue +10 -1
- package/pages/c/_cluster/apps/charts/__tests__/index.test.ts +93 -0
- package/pages/c/_cluster/apps/charts/chart.vue +2 -1
- package/pages/c/_cluster/apps/charts/index.vue +48 -10
- package/pages/c/_cluster/apps/charts/install.vue +122 -116
- package/pages/c/_cluster/auth/roles/index.vue +5 -4
- package/pages/c/_cluster/explorer/workload-dashboard/ByNamespaceSection.vue +31 -0
- package/pages/c/_cluster/explorer/workload-dashboard/ByStateSection.vue +138 -0
- package/pages/c/_cluster/explorer/workload-dashboard/ByTypeSection.vue +30 -0
- package/pages/c/_cluster/explorer/workload-dashboard/WorkloadCard.vue +155 -0
- package/pages/c/_cluster/explorer/workload-dashboard/WorkloadNamespaceCard.vue +142 -0
- package/pages/c/_cluster/explorer/workload-dashboard/WorkloadTypeCard.vue +159 -0
- package/pages/c/_cluster/explorer/workload-dashboard/__tests__/composable.test.ts +561 -0
- package/pages/c/_cluster/explorer/workload-dashboard/composable.ts +440 -0
- package/pages/c/_cluster/explorer/workload-dashboard/index.vue +187 -0
- package/pages/c/_cluster/explorer/workload-dashboard/types.ts +80 -0
- package/pages/c/_cluster/fleet/application/create.vue +187 -136
- package/pages/c/_cluster/fleet/application/index.vue +5 -3
- package/pages/c/_cluster/fleet/application/suse-app-collection/ChartDetailBody.vue +338 -0
- package/pages/c/_cluster/fleet/application/suse-app-collection/ChartDetailHeader.vue +121 -0
- package/pages/c/_cluster/fleet/application/suse-app-collection/chart.vue +369 -0
- package/pages/c/_cluster/fleet/application/suse-app-collection/charts.vue +248 -0
- package/pages/c/_cluster/fleet/application/suse-app-collection/credentials.vue +310 -0
- package/pages/c/_cluster/fleet/index.vue +2 -2
- package/pages/c/_cluster/uiplugins/__tests__/index.test.ts +96 -0
- package/pages/c/_cluster/uiplugins/index.vue +15 -0
- package/pages/fail-whale.vue +16 -11
- package/pages/home.vue +16 -46
- package/plugins/clean-html.d.ts +9 -0
- package/plugins/dashboard-store/__tests__/resource-class.test.ts +93 -0
- package/plugins/dashboard-store/resource-class.js +62 -7
- package/plugins/steve/__tests__/actions.test.ts +212 -0
- package/plugins/steve/actions.js +96 -0
- package/plugins/steve/steve-pagination-utils.ts +1 -1
- package/rancher-components/Accordion/Accordion.vue +53 -9
- package/rancher-components/Form/Checkbox/Checkbox.vue +14 -0
- package/rancher-components/Form/Radio/RadioButton.vue +17 -1
- package/rancher-components/Form/Radio/RadioGroup.vue +10 -0
- package/rancher-components/Pill/RcTag/RcTag.vue +3 -2
- package/rancher-components/RcButton/RcButton.test.ts +103 -0
- package/rancher-components/RcButton/RcButton.vue +94 -15
- package/rancher-components/RcButton/types.ts +3 -0
- package/rancher-components/RcItemCard/RcItemCard.test.ts +18 -0
- package/rancher-components/RcItemCard/RcItemCard.vue +2 -2
- package/rancher-components/RcSection/RcSection.vue +28 -3
- package/scripts/extension/helm/package/Dockerfile +1 -1
- package/scripts/test-plugins-build.sh +2 -1
- package/store/__tests__/notifications.test.ts +434 -0
- package/store/catalog.js +57 -0
- package/store/plugins.js +7 -4
- package/types/components/buttonGroup.ts +5 -0
- package/types/shell/index.d.ts +104 -70
- package/utils/__tests__/auth.test.ts +273 -0
- package/utils/__tests__/computed.test.ts +193 -0
- package/utils/__tests__/cspAdaptor.test.ts +163 -0
- package/utils/__tests__/dom.test.ts +81 -0
- package/utils/__tests__/duration.test.ts +37 -1
- package/utils/__tests__/dynamic-importer.test.ts +102 -0
- package/utils/__tests__/fleet-appco.test.ts +312 -0
- package/utils/__tests__/monitoring.test.ts +130 -0
- package/utils/__tests__/object.test.ts +22 -0
- package/utils/__tests__/platform.test.ts +91 -0
- package/utils/__tests__/position.test.ts +237 -0
- package/utils/__tests__/provider.test.ts +51 -1
- package/utils/__tests__/queue.test.ts +232 -0
- package/utils/__tests__/release-notes.test.ts +221 -0
- package/utils/__tests__/router.test.js +254 -1
- package/utils/__tests__/select.test.ts +208 -0
- package/utils/__tests__/time.test.ts +265 -1
- package/utils/__tests__/title.test.ts +47 -0
- package/utils/__tests__/width.test.ts +53 -0
- package/utils/__tests__/window.test.ts +158 -0
- package/utils/__tests__/xccdf.test.ts +126 -6
- package/utils/crypto/__tests__/browserHashUtils.test.ts +98 -0
- package/utils/crypto/__tests__/index.test.ts +144 -0
- package/utils/duration.ts +104 -0
- package/utils/dynamic-content/__tests__/notification-handler.test.ts +196 -0
- package/utils/dynamic-content/info.ts +2 -1
- package/utils/error.js +13 -0
- package/utils/fleet-appco.ts +323 -0
- package/utils/object.js +22 -2
- package/utils/provider.ts +12 -0
- package/utils/validators/__tests__/container-images.test.ts +104 -0
- package/utils/validators/__tests__/flow-output.test.ts +91 -0
- package/utils/validators/__tests__/logging-outputs.test.ts +58 -0
- package/utils/validators/__tests__/monitoring-route.test.ts +119 -0
- package/utils/xccdf.ts +39 -42
- package/vue.config.js +1 -1
- package/pages/support/index.vue +0 -264
- package/utils/duration.js +0 -43
|
@@ -5,9 +5,12 @@ import jsyaml from 'js-yaml';
|
|
|
5
5
|
import { saferDump } from '@shell/utils/create-yaml';
|
|
6
6
|
import { mapGetters } from 'vuex';
|
|
7
7
|
import { base64Encode } from '@shell/utils/crypto';
|
|
8
|
-
import { _CREATE, _EDIT } from '@shell/config/query-params';
|
|
8
|
+
import { _CREATE, _EDIT, SUB_TYPE } from '@shell/config/query-params';
|
|
9
9
|
import { checkSchemasForFindAllHash } from '@shell/utils/auth';
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
AUTH_TYPE, CONFIG_MAP, FLEET, AUTH_GENERATE_NAME, NORMAN, SECRET
|
|
12
|
+
} from '@shell/config/types';
|
|
13
|
+
import { FLEET_APPCO_AUTH_GENERATE_NAME, IMAGE_PULL_SECRET_SUFFIX, SUSE_APP_COLLECTION_REPO_URL, deriveRepoName } from '@shell/utils/fleet-appco';
|
|
11
14
|
import { CATALOG, FLEET as FLEET_LABELS } from '@shell/config/labels-annotations';
|
|
12
15
|
import { SOURCE_TYPE } from '@shell/config/product/fleet';
|
|
13
16
|
import CreateEditView from '@shell/mixins/create-edit-view';
|
|
@@ -27,6 +30,7 @@ import HelmOpChartTab from '@shell/components/fleet/HelmOpChartTab.vue';
|
|
|
27
30
|
import HelmOpValuesTab from '@shell/components/fleet/HelmOpValuesTab.vue';
|
|
28
31
|
import HelmOpTargetTab from '@shell/components/fleet/HelmOpTargetTab.vue';
|
|
29
32
|
import HelmOpAdvancedTab from '@shell/components/fleet/HelmOpAdvancedTab.vue';
|
|
33
|
+
import HelmOpAppCoConfigTab from '@shell/components/fleet/HelmOpAppCoConfigTab.vue';
|
|
30
34
|
|
|
31
35
|
const MINIMUM_POLLING_INTERVAL = 15;
|
|
32
36
|
|
|
@@ -35,6 +39,22 @@ const VALUES_STATE = {
|
|
|
35
39
|
DIFF: 'DIFF'
|
|
36
40
|
};
|
|
37
41
|
|
|
42
|
+
function checkIsSuseAppCollection(route, value) {
|
|
43
|
+
// CREATE: route query param set by the subtype selector
|
|
44
|
+
// EDIT: annotation set on the resource during create, or URL fallback for older resources
|
|
45
|
+
return route.query[SUB_TYPE] === FLEET.SUSE_APP_COLLECTION ||
|
|
46
|
+
value.isSuseAppCollectionFromUI;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function getInitialSourceType(route, value, modelSourceType) {
|
|
50
|
+
if (checkIsSuseAppCollection(route, value)) {
|
|
51
|
+
return SOURCE_TYPE.OCI;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// REPO is the default value
|
|
55
|
+
return modelSourceType || SOURCE_TYPE.REPO;
|
|
56
|
+
}
|
|
57
|
+
|
|
38
58
|
export default {
|
|
39
59
|
name: 'CruHelmOp',
|
|
40
60
|
|
|
@@ -53,6 +73,7 @@ export default {
|
|
|
53
73
|
HelmOpValuesTab,
|
|
54
74
|
HelmOpTargetTab,
|
|
55
75
|
HelmOpAdvancedTab,
|
|
76
|
+
HelmOpAppCoConfigTab,
|
|
56
77
|
},
|
|
57
78
|
|
|
58
79
|
mixins: [CreateEditView, FormValidation],
|
|
@@ -61,12 +82,12 @@ export default {
|
|
|
61
82
|
// Fetch Secrets and ConfigMaps to mask the loading phase in FleetValuesFrom.vue
|
|
62
83
|
checkSchemasForFindAllHash({
|
|
63
84
|
allSecrets: {
|
|
64
|
-
inStoreType:
|
|
85
|
+
inStoreType: CATALOG._MANAGEMENT,
|
|
65
86
|
type: SECRET
|
|
66
87
|
},
|
|
67
88
|
|
|
68
89
|
allConfigMaps: {
|
|
69
|
-
inStoreType:
|
|
90
|
+
inStoreType: CATALOG._MANAGEMENT,
|
|
70
91
|
type: CONFIG_MAP
|
|
71
92
|
}
|
|
72
93
|
}, this.$store);
|
|
@@ -81,10 +102,10 @@ export default {
|
|
|
81
102
|
return {
|
|
82
103
|
VALUES_STATE,
|
|
83
104
|
SOURCE_TYPE,
|
|
84
|
-
|
|
105
|
+
currentUser: null,
|
|
85
106
|
pollingInterval: toSeconds(this.value.spec.pollingInterval) || this.value.spec.pollingInterval,
|
|
86
107
|
sourceTypeInit: this.value.sourceType,
|
|
87
|
-
sourceType: this.value.sourceType
|
|
108
|
+
sourceType: getInitialSourceType(this.$route, this.value, this.value.sourceType),
|
|
88
109
|
helmSpecInit: clone(this.value.spec.helm),
|
|
89
110
|
yamlForm: VALUES_STATE.YAML,
|
|
90
111
|
chartValues,
|
|
@@ -95,6 +116,11 @@ export default {
|
|
|
95
116
|
isRealModeEdit: this.realMode === _EDIT,
|
|
96
117
|
targetsCreated: '',
|
|
97
118
|
fvFormRuleSets: [],
|
|
119
|
+
|
|
120
|
+
// Raw chart index entries from the ClusterRepo, keyed by chart name
|
|
121
|
+
appCoChartEntries: {},
|
|
122
|
+
// True while fetching the chart index from the ClusterRepo
|
|
123
|
+
appCoChartsLoading: false,
|
|
98
124
|
};
|
|
99
125
|
},
|
|
100
126
|
|
|
@@ -110,12 +136,59 @@ export default {
|
|
|
110
136
|
mounted() {
|
|
111
137
|
this.value.applyDefaults();
|
|
112
138
|
this.updateValidationRules(this.sourceType);
|
|
139
|
+
|
|
140
|
+
if (this.isSuseAppCollection) {
|
|
141
|
+
const repo = this.value.spec?.helm?.repo || '';
|
|
142
|
+
|
|
143
|
+
if (!repo) {
|
|
144
|
+
set(this.value, 'spec.helm.repo', SUSE_APP_COLLECTION_REPO_URL);
|
|
145
|
+
} else if (repo.startsWith(SUSE_APP_COLLECTION_REPO_URL) && repo.length > SUSE_APP_COLLECTION_REPO_URL.length) {
|
|
146
|
+
const chart = repo.slice(SUSE_APP_COLLECTION_REPO_URL.length).replace(/^\//, '');
|
|
147
|
+
|
|
148
|
+
set(this.value, 'spec.helm.repo', SUSE_APP_COLLECTION_REPO_URL);
|
|
149
|
+
set(this.value, 'spec.helm.chart', chart);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (this.realMode === _CREATE) {
|
|
153
|
+
const queryChart = this.$route.query.chart;
|
|
154
|
+
const querySecret = this.$route.query.secret;
|
|
155
|
+
const queryVersion = this.$route.query.version;
|
|
156
|
+
|
|
157
|
+
if (queryChart) {
|
|
158
|
+
set(this.value, 'spec.helm.chart', queryChart);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if (queryVersion) {
|
|
162
|
+
set(this.value, 'spec.helm.version', queryVersion);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
if (querySecret) {
|
|
166
|
+
const ns = this.value.metadata.namespace;
|
|
167
|
+
|
|
168
|
+
this.updateAuth(`${ ns }/${ querySecret }`, 'helmSecretName');
|
|
169
|
+
this.addAppCoImagePullSecretToSpec(`${ querySecret }${ IMAGE_PULL_SECRET_SUFFIX }`);
|
|
170
|
+
|
|
171
|
+
this.fetchAppCoCharts(deriveRepoName(querySecret));
|
|
172
|
+
}
|
|
173
|
+
} else {
|
|
174
|
+
const rawSecret = this.value.spec?.helmSecretName || '';
|
|
175
|
+
const secretName = rawSecret.includes('/') ? rawSecret.split('/')[1] : rawSecret;
|
|
176
|
+
|
|
177
|
+
if (secretName) {
|
|
178
|
+
this.fetchAppCoCharts(deriveRepoName(secretName));
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
113
182
|
},
|
|
114
183
|
|
|
115
184
|
computed: {
|
|
116
185
|
...mapGetters(['workspace']),
|
|
117
186
|
|
|
118
187
|
steps() {
|
|
188
|
+
if (this.isSuseAppCollection) {
|
|
189
|
+
return [];
|
|
190
|
+
}
|
|
191
|
+
|
|
119
192
|
return [
|
|
120
193
|
{
|
|
121
194
|
name: 'basics',
|
|
@@ -165,6 +238,10 @@ export default {
|
|
|
165
238
|
];
|
|
166
239
|
},
|
|
167
240
|
|
|
241
|
+
isSuseAppCollection() {
|
|
242
|
+
return checkIsSuseAppCollection(this.$route, this.value);
|
|
243
|
+
},
|
|
244
|
+
|
|
168
245
|
sourceTypeOptions() {
|
|
169
246
|
return Object.values(SOURCE_TYPE).map((value) => ({
|
|
170
247
|
value,
|
|
@@ -234,6 +311,71 @@ export default {
|
|
|
234
311
|
downstreamConfigMapsList() {
|
|
235
312
|
return (this.value.spec.downstreamResources || []).filter((r) => r.kind === 'ConfigMap').map((r) => r.name);
|
|
236
313
|
},
|
|
314
|
+
|
|
315
|
+
appCoConfigProps() {
|
|
316
|
+
return {
|
|
317
|
+
value: this.value,
|
|
318
|
+
mode: this.mode,
|
|
319
|
+
realMode: this.realMode,
|
|
320
|
+
appCoChartEntries: this.appCoChartEntries,
|
|
321
|
+
appCoChartsLoading: this.appCoChartsLoading,
|
|
322
|
+
chartValues: this.chartValues,
|
|
323
|
+
chartValuesInit: this.chartValuesInit,
|
|
324
|
+
yamlForm: this.yamlForm,
|
|
325
|
+
yamlFormOptions: this.yamlFormOptions,
|
|
326
|
+
yamlDiffModeOptions: this.yamlDiffModeOptions,
|
|
327
|
+
isYamlDiff: this.isYamlDiff,
|
|
328
|
+
editorMode: this.editorMode,
|
|
329
|
+
diffMode: this.diffMode,
|
|
330
|
+
isRealModeEdit: this.isRealModeEdit,
|
|
331
|
+
targetsCreated: this.targetsCreated,
|
|
332
|
+
correctDriftEnabled: this.correctDriftEnabled,
|
|
333
|
+
downstreamSecretsList: this.downstreamSecretsList,
|
|
334
|
+
downstreamConfigMapsList: this.downstreamConfigMapsList,
|
|
335
|
+
registerBeforeHook: this.registerBeforeHook,
|
|
336
|
+
};
|
|
337
|
+
},
|
|
338
|
+
|
|
339
|
+
appCoConfigListeners() {
|
|
340
|
+
return {
|
|
341
|
+
'update:value': this.emitInput,
|
|
342
|
+
'update:yaml-form': this.updateYamlForm,
|
|
343
|
+
'update:chart-values': this.updateChartValues,
|
|
344
|
+
'update:diff-mode': (e) => {
|
|
345
|
+
this.diffMode = e;
|
|
346
|
+
},
|
|
347
|
+
'update:targets': this.updateTargets,
|
|
348
|
+
'targets-created': (e) => {
|
|
349
|
+
this.targetsCreated = e;
|
|
350
|
+
},
|
|
351
|
+
'update:auth': (e) => this.updateAuth(e.value, e.key),
|
|
352
|
+
'update:cached-auth': (e) => this.updateCachedAuthVal(e.value, e.key),
|
|
353
|
+
'update:correct-drift': (e) => {
|
|
354
|
+
this.correctDriftEnabled = e;
|
|
355
|
+
},
|
|
356
|
+
'update:downstream-resources': (e) => this.updateDownstreamResources(e.kind, e.list),
|
|
357
|
+
};
|
|
358
|
+
},
|
|
359
|
+
|
|
360
|
+
appCoViewTabs() {
|
|
361
|
+
return [
|
|
362
|
+
{
|
|
363
|
+
name: 'chartConfig',
|
|
364
|
+
label: this.t('fleet.helmOp.appCoView.chartConfig'),
|
|
365
|
+
weight: 3
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
name: 'targetDetails',
|
|
369
|
+
label: this.t('fleet.helmOp.appCoView.targetDetails'),
|
|
370
|
+
weight: 2
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
name: 'advanced',
|
|
374
|
+
label: this.t('fleet.helmOp.appCoView.advanced'),
|
|
375
|
+
weight: 1
|
|
376
|
+
},
|
|
377
|
+
];
|
|
378
|
+
},
|
|
237
379
|
},
|
|
238
380
|
|
|
239
381
|
watch: {
|
|
@@ -245,7 +387,66 @@ export default {
|
|
|
245
387
|
},
|
|
246
388
|
|
|
247
389
|
methods: {
|
|
390
|
+
emitInput(e) {
|
|
391
|
+
this.$emit('input', e);
|
|
392
|
+
},
|
|
393
|
+
|
|
394
|
+
async handleSave(btnCb) {
|
|
395
|
+
if (!this.isSuseAppCollection) {
|
|
396
|
+
return this.save(btnCb);
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
const origRepo = this.value.spec?.helm?.repo;
|
|
400
|
+
const origChart = this.value.spec?.helm?.chart;
|
|
401
|
+
|
|
402
|
+
if (this.sourceType === SOURCE_TYPE.OCI && origChart) {
|
|
403
|
+
const repo = (origRepo || '').replace(/\/$/, '');
|
|
404
|
+
|
|
405
|
+
set(this.value, 'spec.helm.repo', `${ repo }/${ origChart }`);
|
|
406
|
+
delete this.value.spec.helm.chart;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
await this.save((success) => {
|
|
410
|
+
if (!success && origChart) {
|
|
411
|
+
set(this.value, 'spec.helm.repo', origRepo);
|
|
412
|
+
set(this.value, 'spec.helm.chart', origChart);
|
|
413
|
+
}
|
|
414
|
+
btnCb(success);
|
|
415
|
+
});
|
|
416
|
+
},
|
|
417
|
+
|
|
418
|
+
refreshAppCoAdvancedYaml() {
|
|
419
|
+
this.$refs.appCoAdvancedRef?.refreshYamlEditor?.();
|
|
420
|
+
},
|
|
421
|
+
|
|
422
|
+
onCancel() {
|
|
423
|
+
if (this.isSuseAppCollection && this.realMode === _CREATE) {
|
|
424
|
+
const querySecret = this.$route.query.secret;
|
|
425
|
+
const queryChart = this.$route.query.chart;
|
|
426
|
+
const repoName = deriveRepoName(querySecret || '');
|
|
427
|
+
|
|
428
|
+
this.$router.push({
|
|
429
|
+
name: 'c-cluster-fleet-application-appco-chart',
|
|
430
|
+
params: { cluster: this.$route.params.cluster },
|
|
431
|
+
query: {
|
|
432
|
+
'repo-type': 'cluster',
|
|
433
|
+
repo: repoName,
|
|
434
|
+
chart: queryChart,
|
|
435
|
+
version: this.$route.query.version,
|
|
436
|
+
secret: querySecret,
|
|
437
|
+
},
|
|
438
|
+
});
|
|
439
|
+
|
|
440
|
+
return;
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
this.done();
|
|
444
|
+
},
|
|
445
|
+
|
|
248
446
|
onSourceTypeSelect(type) {
|
|
447
|
+
if (this.isSuseAppCollection) {
|
|
448
|
+
return;
|
|
449
|
+
}
|
|
249
450
|
this.sourceType = type;
|
|
250
451
|
delete this.value.spec.helm.repo;
|
|
251
452
|
delete this.value.spec.helm.chart;
|
|
@@ -302,8 +503,6 @@ export default {
|
|
|
302
503
|
} else {
|
|
303
504
|
delete spec[key];
|
|
304
505
|
}
|
|
305
|
-
|
|
306
|
-
this.updateCachedAuthVal(val, key);
|
|
307
506
|
},
|
|
308
507
|
|
|
309
508
|
async doCreateSecrets() {
|
|
@@ -311,7 +510,7 @@ export default {
|
|
|
311
510
|
await this.doCreate('clientSecretName', this.tempCachedValues.clientSecretName);
|
|
312
511
|
}
|
|
313
512
|
|
|
314
|
-
if (this.tempCachedValues.helmSecretName) {
|
|
513
|
+
if (!this.isSuseAppCollection && this.tempCachedValues.helmSecretName) {
|
|
315
514
|
await this.doCreate('helmSecretName', this.tempCachedValues.helmSecretName);
|
|
316
515
|
}
|
|
317
516
|
},
|
|
@@ -343,7 +542,7 @@ export default {
|
|
|
343
542
|
type: SECRET,
|
|
344
543
|
metadata: {
|
|
345
544
|
namespace: this.value.metadata.namespace,
|
|
346
|
-
generateName:
|
|
545
|
+
generateName: AUTH_GENERATE_NAME,
|
|
347
546
|
labels: { [FLEET_LABELS.MANAGED]: 'true' }
|
|
348
547
|
}
|
|
349
548
|
});
|
|
@@ -386,6 +585,36 @@ export default {
|
|
|
386
585
|
return secret;
|
|
387
586
|
},
|
|
388
587
|
|
|
588
|
+
/**
|
|
589
|
+
* Adds the image-pull-secret to downstreamResources (Secret kind) and
|
|
590
|
+
* to spec.helm.values.global.imagePullSecrets.
|
|
591
|
+
*/
|
|
592
|
+
addAppCoImagePullSecretToSpec(imagePullSecretName) {
|
|
593
|
+
// Replace downstream resources: remove stale fleet-appco-auth-* image-pull-secrets, add the current one
|
|
594
|
+
const existingSecrets = (this.value.spec.downstreamResources || []).filter((r) => r.kind === 'Secret');
|
|
595
|
+
const nonAppcoSecrets = existingSecrets.filter((r) => !r.name.startsWith(FLEET_APPCO_AUTH_GENERATE_NAME));
|
|
596
|
+
|
|
597
|
+
this.updateDownstreamResources('Secret', [
|
|
598
|
+
...nonAppcoSecrets.map((r) => r.name),
|
|
599
|
+
imagePullSecretName,
|
|
600
|
+
]);
|
|
601
|
+
|
|
602
|
+
// Replace spec.helm.values.global.imagePullSecrets: remove stale fleet-appco-auth-* entries, add the current one
|
|
603
|
+
const currentValues = this.value.spec.helm.values || {};
|
|
604
|
+
|
|
605
|
+
const newValues = {
|
|
606
|
+
...currentValues,
|
|
607
|
+
global: {
|
|
608
|
+
...(currentValues.global || {}),
|
|
609
|
+
imagePullSecrets: [imagePullSecretName],
|
|
610
|
+
},
|
|
611
|
+
};
|
|
612
|
+
|
|
613
|
+
set(this.value, 'spec.helm.values', newValues);
|
|
614
|
+
this.chartValuesInit = saferDump(clone(newValues));
|
|
615
|
+
this.chartValues = saferDump(clone(newValues));
|
|
616
|
+
},
|
|
617
|
+
|
|
389
618
|
updateYamlForm() {
|
|
390
619
|
if (this.$refs.yaml) {
|
|
391
620
|
this.$refs.yaml.updateValue(this.chartValues);
|
|
@@ -393,6 +622,8 @@ export default {
|
|
|
393
622
|
},
|
|
394
623
|
|
|
395
624
|
updateChartValues(value) {
|
|
625
|
+
this.chartValues = value;
|
|
626
|
+
|
|
396
627
|
try {
|
|
397
628
|
const chartValues = jsyaml.load(value);
|
|
398
629
|
|
|
@@ -406,6 +637,20 @@ export default {
|
|
|
406
637
|
|
|
407
638
|
if (this.mode === _CREATE) {
|
|
408
639
|
this.value.metadata.labels[FLEET_LABELS.CREATED_BY_USER_ID] = this.currentUser.id;
|
|
640
|
+
|
|
641
|
+
if (this.isSuseAppCollection) {
|
|
642
|
+
if (!this.value.metadata.annotations) {
|
|
643
|
+
this.value.metadata.annotations = {};
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
this.value.metadata.annotations[CATALOG.SUSE_APP_COLLECTION] = 'true';
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
const helmSecret = this.value.spec?.helmSecretName || '';
|
|
651
|
+
|
|
652
|
+
if (helmSecret.includes('/')) {
|
|
653
|
+
this.value.spec.helmSecretName = helmSecret.split('/').pop();
|
|
409
654
|
}
|
|
410
655
|
},
|
|
411
656
|
|
|
@@ -431,9 +676,14 @@ export default {
|
|
|
431
676
|
this.fvFormRuleSets = [{
|
|
432
677
|
path: 'spec.helm.repo',
|
|
433
678
|
rules: ['ociRegistry'],
|
|
434
|
-
},
|
|
679
|
+
},
|
|
680
|
+
...(this.isSuseAppCollection ? [{
|
|
681
|
+
path: 'spec.helm.chart',
|
|
682
|
+
rules: ['required'],
|
|
683
|
+
}] : []),
|
|
684
|
+
{
|
|
435
685
|
path: 'spec.helm.version',
|
|
436
|
-
rules: ['semanticVersion'],
|
|
686
|
+
rules: this.isSuseAppCollection ? ['required', 'semanticVersion'] : ['semanticVersion'],
|
|
437
687
|
}];
|
|
438
688
|
break;
|
|
439
689
|
case SOURCE_TYPE.TARBALL:
|
|
@@ -445,6 +695,34 @@ export default {
|
|
|
445
695
|
}
|
|
446
696
|
},
|
|
447
697
|
|
|
698
|
+
async fetchAppCoCharts(repoName) {
|
|
699
|
+
if (!repoName) {
|
|
700
|
+
return;
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
this.appCoChartsLoading = true;
|
|
704
|
+
|
|
705
|
+
try {
|
|
706
|
+
await this.$store.dispatch('catalog/loadRepo', { repoName });
|
|
707
|
+
|
|
708
|
+
const chartName = this.value.spec.helm.chart;
|
|
709
|
+
const catalogChart = chartName ? this.$store.getters['catalog/chart']({
|
|
710
|
+
repoType: 'cluster',
|
|
711
|
+
repoName,
|
|
712
|
+
chartName,
|
|
713
|
+
includeHidden: true,
|
|
714
|
+
}) : null;
|
|
715
|
+
|
|
716
|
+
if (catalogChart?.versions?.length) {
|
|
717
|
+
this.appCoChartEntries = { [chartName]: catalogChart.versions };
|
|
718
|
+
}
|
|
719
|
+
} catch (e) {
|
|
720
|
+
console.error('Failed to fetch AppCo chart list:', e); // eslint-disable-line no-console
|
|
721
|
+
} finally {
|
|
722
|
+
this.appCoChartsLoading = false;
|
|
723
|
+
}
|
|
724
|
+
},
|
|
725
|
+
|
|
448
726
|
updateDownstreamResources(kind, list) {
|
|
449
727
|
switch (kind) {
|
|
450
728
|
case 'Secret':
|
|
@@ -470,6 +748,7 @@ export default {
|
|
|
470
748
|
|
|
471
749
|
<CruResource
|
|
472
750
|
v-else
|
|
751
|
+
ref="cruResource"
|
|
473
752
|
:done-route="doneRouteList"
|
|
474
753
|
:mode="mode"
|
|
475
754
|
:resource="value"
|
|
@@ -478,21 +757,30 @@ export default {
|
|
|
478
757
|
:errors="errors"
|
|
479
758
|
:steps="!isView ? steps : undefined"
|
|
480
759
|
:finish-mode="'finish'"
|
|
760
|
+
:cancel-event="true"
|
|
481
761
|
class="wizard"
|
|
482
|
-
|
|
762
|
+
data-testid="helmop-cru-resource"
|
|
763
|
+
@cancel="onCancel"
|
|
483
764
|
@error="e=>errors = e"
|
|
484
|
-
@finish="
|
|
765
|
+
@finish="handleSave"
|
|
485
766
|
>
|
|
486
|
-
<template
|
|
767
|
+
<template
|
|
768
|
+
v-if="!isSuseAppCollection"
|
|
769
|
+
#basics
|
|
770
|
+
>
|
|
487
771
|
<HelmOpMetadataTab
|
|
488
772
|
:value="value"
|
|
489
773
|
:mode="mode"
|
|
490
774
|
:is-view="isView"
|
|
775
|
+
data-testid="helmop-metadata-tab"
|
|
491
776
|
@update:value="$emit('input', $event)"
|
|
492
777
|
/>
|
|
493
778
|
</template>
|
|
494
779
|
|
|
495
|
-
<template
|
|
780
|
+
<template
|
|
781
|
+
v-if="!isSuseAppCollection"
|
|
782
|
+
#chart
|
|
783
|
+
>
|
|
496
784
|
<HelmOpChartTab
|
|
497
785
|
:value="value"
|
|
498
786
|
:mode="mode"
|
|
@@ -500,16 +788,19 @@ export default {
|
|
|
500
788
|
:source-type="sourceType"
|
|
501
789
|
:source-type-options="sourceTypeOptions"
|
|
502
790
|
:fv-get-and-report-path-rules="fvGetAndReportPathRules"
|
|
791
|
+
data-testid="helmop-chart-tab"
|
|
503
792
|
@update:source-type="onSourceTypeSelect"
|
|
504
793
|
/>
|
|
505
794
|
</template>
|
|
506
795
|
|
|
507
|
-
<template
|
|
796
|
+
<template
|
|
797
|
+
v-if="!isSuseAppCollection"
|
|
798
|
+
#values
|
|
799
|
+
>
|
|
508
800
|
<HelmOpValuesTab
|
|
509
801
|
:value="value"
|
|
510
802
|
:mode="mode"
|
|
511
803
|
:real-mode="realMode"
|
|
512
|
-
:is-view="isView"
|
|
513
804
|
:chart-values="chartValues"
|
|
514
805
|
:chart-values-init="chartValuesInit"
|
|
515
806
|
:yaml-form="yamlForm"
|
|
@@ -519,30 +810,38 @@ export default {
|
|
|
519
810
|
:editor-mode="editorMode"
|
|
520
811
|
:diff-mode="diffMode"
|
|
521
812
|
:is-real-mode-edit="isRealModeEdit"
|
|
813
|
+
data-testid="helmop-values-tab"
|
|
522
814
|
@update:yaml-form="updateYamlForm"
|
|
523
815
|
@update:chart-values="updateChartValues"
|
|
524
816
|
@update:diff-mode="diffMode = $event"
|
|
525
817
|
/>
|
|
526
818
|
</template>
|
|
527
819
|
|
|
528
|
-
<template
|
|
820
|
+
<template
|
|
821
|
+
v-if="!isSuseAppCollection"
|
|
822
|
+
#target
|
|
823
|
+
>
|
|
529
824
|
<HelmOpTargetTab
|
|
530
825
|
:value="value"
|
|
531
826
|
:mode="mode"
|
|
532
827
|
:real-mode="realMode"
|
|
533
|
-
:is-view="isView"
|
|
534
828
|
:targets-created="targetsCreated"
|
|
829
|
+
data-testid="helmop-target-tab"
|
|
535
830
|
@update:targets="updateTargets"
|
|
536
831
|
@targets-created="targetsCreated=$event"
|
|
537
832
|
/>
|
|
538
833
|
</template>
|
|
539
834
|
|
|
540
|
-
<template
|
|
835
|
+
<template
|
|
836
|
+
v-if="!isSuseAppCollection"
|
|
837
|
+
#advanced
|
|
838
|
+
>
|
|
541
839
|
<HelmOpAdvancedTab
|
|
542
840
|
:value="value"
|
|
543
841
|
:mode="mode"
|
|
544
842
|
:is-view="isView"
|
|
545
843
|
:source-type="sourceType"
|
|
844
|
+
:is-suse-app-collection="isSuseAppCollection"
|
|
546
845
|
:temp-cached-values="tempCachedValues"
|
|
547
846
|
:correct-drift-enabled="correctDriftEnabled"
|
|
548
847
|
:polling-interval="pollingInterval"
|
|
@@ -553,6 +852,7 @@ export default {
|
|
|
553
852
|
:downstream-secrets-list="downstreamSecretsList"
|
|
554
853
|
:downstream-config-maps-list="downstreamConfigMapsList"
|
|
555
854
|
:register-before-hook="registerBeforeHook"
|
|
855
|
+
data-testid="helmop-advanced-tab"
|
|
556
856
|
@update:auth="updateAuth($event.value, $event.key)"
|
|
557
857
|
@update:cached-auth="updateCachedAuthVal($event.value, $event.key)"
|
|
558
858
|
@update:correct-drift="correctDriftEnabled = $event"
|
|
@@ -564,143 +864,198 @@ export default {
|
|
|
564
864
|
</template>
|
|
565
865
|
|
|
566
866
|
<template
|
|
567
|
-
v-if="isView
|
|
867
|
+
v-if="isView || isSuseAppCollection"
|
|
568
868
|
#single
|
|
569
869
|
>
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
870
|
+
<!-- Non-AppCo view -->
|
|
871
|
+
<div v-if="!isSuseAppCollection">
|
|
872
|
+
<NameNsDescription
|
|
873
|
+
:value="value"
|
|
874
|
+
:namespaced="false"
|
|
875
|
+
:mode="mode"
|
|
876
|
+
data-testid="helmop-view-name-ns-description"
|
|
877
|
+
@update:value="$emit('input', $event)"
|
|
878
|
+
/>
|
|
879
|
+
|
|
880
|
+
<Tabbed
|
|
881
|
+
v-if="isView"
|
|
882
|
+
:side-tabs="true"
|
|
883
|
+
:use-hash="true"
|
|
884
|
+
>
|
|
885
|
+
<Tab
|
|
886
|
+
v-if="steps[1]"
|
|
887
|
+
:name="steps[1].name"
|
|
888
|
+
:label="steps[1].label"
|
|
889
|
+
:weight="4"
|
|
890
|
+
>
|
|
891
|
+
<HelmOpChartTab
|
|
892
|
+
:value="value"
|
|
893
|
+
:mode="mode"
|
|
894
|
+
:is-view="isView"
|
|
895
|
+
:source-type="sourceType"
|
|
896
|
+
:source-type-options="sourceTypeOptions"
|
|
897
|
+
:fv-get-and-report-path-rules="fvGetAndReportPathRules"
|
|
898
|
+
data-testid="helmop-view-chart-tab"
|
|
899
|
+
@update:source-type="onSourceTypeSelect"
|
|
900
|
+
/>
|
|
901
|
+
</Tab>
|
|
902
|
+
<Tab
|
|
903
|
+
v-if="steps[2]"
|
|
904
|
+
:name="steps[2].name"
|
|
905
|
+
:label="steps[2].label"
|
|
906
|
+
:weight="3"
|
|
907
|
+
>
|
|
908
|
+
<HelmOpValuesTab
|
|
909
|
+
:value="value"
|
|
910
|
+
:mode="mode"
|
|
911
|
+
:real-mode="realMode"
|
|
912
|
+
:is-view="isView"
|
|
913
|
+
:chart-values="chartValues"
|
|
914
|
+
:chart-values-init="chartValuesInit"
|
|
915
|
+
:yaml-form="yamlForm"
|
|
916
|
+
:yaml-form-options="yamlFormOptions"
|
|
917
|
+
:yaml-diff-mode-options="yamlDiffModeOptions"
|
|
918
|
+
:is-yaml-diff="isYamlDiff"
|
|
919
|
+
:editor-mode="editorMode"
|
|
920
|
+
:diff-mode="diffMode"
|
|
921
|
+
:is-real-mode-edit="isRealModeEdit"
|
|
922
|
+
data-testid="helmop-view-values-tab"
|
|
923
|
+
@update:yaml-form="updateYamlForm"
|
|
924
|
+
@update:chart-values="updateChartValues"
|
|
925
|
+
@update:diff-mode="diffMode = $event"
|
|
926
|
+
/>
|
|
927
|
+
</Tab>
|
|
928
|
+
<Tab
|
|
929
|
+
v-if="steps[3]"
|
|
930
|
+
:name="steps[3].name"
|
|
931
|
+
:label="steps[3].label"
|
|
932
|
+
:weight="2"
|
|
933
|
+
>
|
|
934
|
+
<HelmOpTargetTab
|
|
935
|
+
:value="value"
|
|
936
|
+
:mode="mode"
|
|
937
|
+
:real-mode="realMode"
|
|
938
|
+
:targets-created="targetsCreated"
|
|
939
|
+
data-testid="helmop-view-target-tab"
|
|
940
|
+
@update:targets="updateTargets"
|
|
941
|
+
@targets-created="targetsCreated=$event"
|
|
942
|
+
/>
|
|
943
|
+
</Tab>
|
|
944
|
+
<Tab
|
|
945
|
+
v-if="steps[4]"
|
|
946
|
+
:name="steps[4].name"
|
|
947
|
+
:label="steps[4].label"
|
|
948
|
+
:weight="1"
|
|
949
|
+
>
|
|
950
|
+
<HelmOpAdvancedTab
|
|
951
|
+
:value="value"
|
|
952
|
+
:mode="mode"
|
|
953
|
+
:is-view="isView"
|
|
954
|
+
:source-type="sourceType"
|
|
955
|
+
:is-suse-app-collection="isSuseAppCollection"
|
|
956
|
+
:temp-cached-values="tempCachedValues"
|
|
957
|
+
:correct-drift-enabled="correctDriftEnabled"
|
|
958
|
+
:polling-interval="pollingInterval"
|
|
959
|
+
:is-polling-enabled="isPollingEnabled"
|
|
960
|
+
:show-polling-interval-min-value-warning="showPollingIntervalMinValueWarning"
|
|
961
|
+
:enable-polling-tooltip="enablePollingTooltip"
|
|
962
|
+
:is-null-or-static-version="isNullOrStaticVersion"
|
|
963
|
+
:downstream-secrets-list="downstreamSecretsList"
|
|
964
|
+
:downstream-config-maps-list="downstreamConfigMapsList"
|
|
965
|
+
:register-before-hook="registerBeforeHook"
|
|
966
|
+
data-testid="helmop-view-advanced-tab"
|
|
967
|
+
@update:auth="updateAuth($event.value, $event.key)"
|
|
968
|
+
@update:cached-auth="updateCachedAuthVal($event.value, $event.key)"
|
|
969
|
+
@update:correct-drift="correctDriftEnabled = $event"
|
|
970
|
+
@update:downstream-resources="updateDownstreamResources($event.kind, $event.list)"
|
|
971
|
+
@toggle-polling="togglePolling"
|
|
972
|
+
@update:polling-interval="updatePollingInterval"
|
|
973
|
+
@update:validate-polling-interval="validatePollingInterval"
|
|
974
|
+
/>
|
|
975
|
+
</Tab>
|
|
976
|
+
<Tab
|
|
977
|
+
name="labels"
|
|
978
|
+
label-key="generic.labelsAndAnnotations"
|
|
979
|
+
:weight="5"
|
|
980
|
+
>
|
|
981
|
+
<HelmOpMetadataTab
|
|
982
|
+
:value="value"
|
|
983
|
+
:mode="mode"
|
|
984
|
+
:is-view="isView"
|
|
985
|
+
data-testid="helmop-view-metadata-tab"
|
|
986
|
+
@update:value="$emit('input', $event)"
|
|
987
|
+
/>
|
|
988
|
+
</Tab>
|
|
989
|
+
</Tabbed>
|
|
990
|
+
</div>
|
|
991
|
+
|
|
992
|
+
<!-- AppCo view -->
|
|
577
993
|
<Tabbed
|
|
578
|
-
v-if="isView"
|
|
994
|
+
v-else-if="isSuseAppCollection && isView"
|
|
579
995
|
:side-tabs="true"
|
|
580
996
|
:use-hash="true"
|
|
997
|
+
data-testid="helmop-appco-view-tabbed"
|
|
581
998
|
>
|
|
582
999
|
<Tab
|
|
583
|
-
|
|
584
|
-
:
|
|
585
|
-
:
|
|
586
|
-
:
|
|
1000
|
+
:name="appCoViewTabs[0].name"
|
|
1001
|
+
:label="appCoViewTabs[0].label"
|
|
1002
|
+
:weight="appCoViewTabs[0].weight"
|
|
1003
|
+
:show-header="false"
|
|
587
1004
|
>
|
|
588
|
-
<
|
|
589
|
-
|
|
590
|
-
:
|
|
591
|
-
:
|
|
592
|
-
:
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
@update:source-type="onSourceTypeSelect"
|
|
596
|
-
/>
|
|
597
|
-
</Tab>
|
|
598
|
-
<Tab
|
|
599
|
-
v-if="steps[2]"
|
|
600
|
-
:name="steps[2].name"
|
|
601
|
-
:label="steps[2].label"
|
|
602
|
-
:weight="3"
|
|
603
|
-
>
|
|
604
|
-
<HelmOpValuesTab
|
|
605
|
-
:value="value"
|
|
606
|
-
:mode="mode"
|
|
607
|
-
:real-mode="realMode"
|
|
608
|
-
:is-view="isView"
|
|
609
|
-
:chart-values="chartValues"
|
|
610
|
-
:chart-values-init="chartValuesInit"
|
|
611
|
-
:yaml-form="yamlForm"
|
|
612
|
-
:yaml-form-options="yamlFormOptions"
|
|
613
|
-
:yaml-diff-mode-options="yamlDiffModeOptions"
|
|
614
|
-
:is-yaml-diff="isYamlDiff"
|
|
615
|
-
:editor-mode="editorMode"
|
|
616
|
-
:diff-mode="diffMode"
|
|
617
|
-
:is-real-mode-edit="isRealModeEdit"
|
|
618
|
-
@update:yaml-form="updateYamlForm"
|
|
619
|
-
@update:chart-values="updateChartValues"
|
|
620
|
-
@update:diff-mode="diffMode = $event"
|
|
621
|
-
/>
|
|
622
|
-
</Tab>
|
|
623
|
-
<Tab
|
|
624
|
-
v-if="steps[3]"
|
|
625
|
-
:name="steps[3].name"
|
|
626
|
-
:label="steps[3].label"
|
|
627
|
-
:weight="2"
|
|
628
|
-
>
|
|
629
|
-
<HelmOpTargetTab
|
|
630
|
-
:value="value"
|
|
631
|
-
:mode="mode"
|
|
632
|
-
:real-mode="realMode"
|
|
633
|
-
:is-view="isView"
|
|
634
|
-
:targets-created="targetsCreated"
|
|
635
|
-
@update:targets="updateTargets"
|
|
636
|
-
@targets-created="targetsCreated=$event"
|
|
1005
|
+
<HelmOpAppCoConfigTab
|
|
1006
|
+
v-bind="appCoConfigProps"
|
|
1007
|
+
:hide-target="true"
|
|
1008
|
+
:hide-advanced="true"
|
|
1009
|
+
:hide-chart-config="false"
|
|
1010
|
+
data-testid="helmop-appco-view-chart-config"
|
|
1011
|
+
v-on="appCoConfigListeners"
|
|
637
1012
|
/>
|
|
638
1013
|
</Tab>
|
|
1014
|
+
|
|
639
1015
|
<Tab
|
|
640
|
-
|
|
641
|
-
:
|
|
642
|
-
:
|
|
643
|
-
:
|
|
1016
|
+
:name="appCoViewTabs[1].name"
|
|
1017
|
+
:label="appCoViewTabs[1].label"
|
|
1018
|
+
:weight="appCoViewTabs[1].weight"
|
|
1019
|
+
:show-header="false"
|
|
644
1020
|
>
|
|
645
|
-
<
|
|
646
|
-
|
|
647
|
-
:
|
|
648
|
-
:
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
:correct-drift-enabled="correctDriftEnabled"
|
|
652
|
-
:polling-interval="pollingInterval"
|
|
653
|
-
:is-polling-enabled="isPollingEnabled"
|
|
654
|
-
:show-polling-interval-min-value-warning="showPollingIntervalMinValueWarning"
|
|
655
|
-
:enable-polling-tooltip="enablePollingTooltip"
|
|
656
|
-
:is-null-or-static-version="isNullOrStaticVersion"
|
|
657
|
-
:downstream-secrets-list="downstreamSecretsList"
|
|
658
|
-
:downstream-config-maps-list="downstreamConfigMapsList"
|
|
659
|
-
:register-before-hook="registerBeforeHook"
|
|
660
|
-
@update:auth="updateAuth($event.value, $event.key)"
|
|
661
|
-
@update:cached-auth="updateCachedAuthVal($event.value, $event.key)"
|
|
662
|
-
@update:correct-drift="correctDriftEnabled = $event"
|
|
663
|
-
@update:downstream-resources="updateDownstreamResources($event.kind, $event.list)"
|
|
664
|
-
@toggle-polling="togglePolling"
|
|
665
|
-
@update:polling-interval="updatePollingInterval"
|
|
666
|
-
@update:validate-polling-interval="validatePollingInterval"
|
|
1021
|
+
<HelmOpAppCoConfigTab
|
|
1022
|
+
v-bind="appCoConfigProps"
|
|
1023
|
+
:hide-chart-config="true"
|
|
1024
|
+
:hide-advanced="true"
|
|
1025
|
+
data-testid="helmop-appco-view-target-details"
|
|
1026
|
+
v-on="appCoConfigListeners"
|
|
667
1027
|
/>
|
|
668
1028
|
</Tab>
|
|
1029
|
+
|
|
669
1030
|
<Tab
|
|
670
|
-
name="
|
|
671
|
-
label
|
|
672
|
-
:weight="
|
|
1031
|
+
:name="appCoViewTabs[2].name"
|
|
1032
|
+
:label="appCoViewTabs[2].label"
|
|
1033
|
+
:weight="appCoViewTabs[2].weight"
|
|
1034
|
+
@active="refreshAppCoAdvancedYaml"
|
|
673
1035
|
>
|
|
674
|
-
<
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
:
|
|
678
|
-
|
|
1036
|
+
<HelmOpAppCoConfigTab
|
|
1037
|
+
ref="appCoAdvancedRef"
|
|
1038
|
+
v-bind="appCoConfigProps"
|
|
1039
|
+
:hide-chart-config="true"
|
|
1040
|
+
:hide-target="true"
|
|
1041
|
+
data-testid="helmop-appco-view-advanced"
|
|
1042
|
+
v-on="appCoConfigListeners"
|
|
679
1043
|
/>
|
|
680
1044
|
</Tab>
|
|
681
1045
|
</Tabbed>
|
|
1046
|
+
<div
|
|
1047
|
+
v-else-if="isSuseAppCollection && (isEdit || isCreate)"
|
|
1048
|
+
data-testid="helmop-appco-edit"
|
|
1049
|
+
>
|
|
1050
|
+
<HelmOpAppCoConfigTab
|
|
1051
|
+
v-bind="appCoConfigProps"
|
|
1052
|
+
data-testid="helmop-appco-edit-config-tab"
|
|
1053
|
+
v-on="appCoConfigListeners"
|
|
1054
|
+
/>
|
|
1055
|
+
</div>
|
|
682
1056
|
</template>
|
|
683
1057
|
</CruResource>
|
|
684
1058
|
</template>
|
|
685
1059
|
|
|
686
1060
|
<style lang="scss" scoped>
|
|
687
|
-
.yaml-form-controls {
|
|
688
|
-
display: flex;
|
|
689
|
-
margin-bottom: 15px;
|
|
690
|
-
}
|
|
691
|
-
:deep() .yaml-editor {
|
|
692
|
-
.root {
|
|
693
|
-
height: auto !important;
|
|
694
|
-
}
|
|
695
|
-
}
|
|
696
|
-
.resource-handling {
|
|
697
|
-
display: flex;
|
|
698
|
-
flex-direction: column;
|
|
699
|
-
gap: 5px;
|
|
700
|
-
}
|
|
701
|
-
.polling {
|
|
702
|
-
display: flex;
|
|
703
|
-
flex-direction: column;
|
|
704
|
-
gap: 5px;
|
|
705
|
-
}
|
|
706
1061
|
</style>
|