@rancher/shell 0.4.0 → 0.5.0
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/images/providers/ovhcloudmks.svg +122 -0
- package/assets/images/providers/ovhcloudpubliccloud.svg +122 -0
- package/assets/styles/global/_layout.scss +99 -0
- package/assets/translations/en-us.yaml +30 -5
- package/assets/translations/zh-hans.yaml +1 -1
- package/babel.config.js +7 -1
- package/chart/monitoring/alerting/index.vue +7 -21
- package/chart/monitoring/grafana/index.vue +55 -0
- package/chart/monitoring/index.vue +51 -17
- package/chart/monitoring/prometheus/index.vue +37 -43
- package/chart/rancher-backup/index.vue +2 -1
- package/cloud-credential/azure.vue +4 -17
- package/components/AsyncButton.vue +17 -5
- package/components/Certificates.vue +164 -0
- package/components/CodeMirror.vue +19 -21
- package/components/CruResource.vue +1 -0
- package/components/DraggableZone.vue +2 -2
- package/components/EtcdInfoBanner.vue +1 -1
- package/components/ExplorerProjectsNamespaces.vue +25 -1
- package/components/IconOrSvg.vue +1 -1
- package/components/LandingPagePreference.vue +1 -4
- package/components/PodSecurityAdmission.vue +2 -2
- package/components/Questions/index.vue +1 -1
- package/components/ResourceDetail/Masthead.vue +16 -3
- package/components/ResourceTable.vue +14 -2
- package/components/ResourceYaml.vue +5 -0
- package/components/SideNav.vue +1 -1
- package/components/SingleClusterInfo.vue +1 -4
- package/components/Tabbed/index.vue +12 -0
- package/components/fleet/FleetRepos.vue +62 -27
- package/components/fleet/FleetResources.vue +6 -1
- package/components/form/ArrayListSelect.vue +10 -0
- package/components/form/Error.vue +3 -3
- package/components/form/Footer.vue +2 -2
- package/components/form/GitPicker.vue +83 -38
- package/components/form/KeyValue.vue +4 -0
- package/components/form/LabeledSelect.vue +4 -0
- package/components/formatter/Checked.vue +11 -3
- package/components/formatter/FleetClusterSummaryGraph.vue +27 -0
- package/components/formatter/FleetSummaryGraph.vue +23 -11
- package/components/formatter/LiveDuration.vue +1 -1
- package/components/formatter/PercentageBar.vue +1 -1
- package/components/formatter/__tests__/Checked.test.ts +19 -0
- package/components/nav/Group.vue +2 -2
- package/components/nav/Header.vue +0 -1
- package/components/nav/TopLevelMenu.vue +36 -6
- package/components/nav/Type.vue +1 -3
- package/components/nav/WindowManager/ContainerLogs.vue +101 -3
- package/components/nav/WindowManager/ContainerShell.vue +6 -1
- package/components/nav/WindowManager/__tests__/ContainerLogs.test.ts +186 -0
- package/components/nav/WindowManager/index.vue +11 -10
- package/components/nav/__tests__/TopLevelMenu.test.ts +33 -0
- package/components/nav/__tests__/Type.test.ts +1 -1
- package/components/nuxt/nuxt-child.js +14 -78
- package/components/nuxt/nuxt.js +1 -1
- package/{layouts → components/templates}/blank.vue +1 -1
- package/{layouts → components/templates}/default.vue +8 -98
- package/{layouts → components/templates}/error.vue +10 -19
- package/{layouts → components/templates}/home.vue +4 -1
- package/{layouts → components/templates}/plain.vue +4 -1
- package/{layouts → components/templates}/standalone.vue +1 -1
- package/{layouts → components/templates}/unauthenticated.vue +1 -1
- package/composables/useCompactInput.test.ts +36 -0
- package/composables/useCompactInput.ts +20 -0
- package/composables/useLabeledFormElement.test.ts +135 -0
- package/composables/useLabeledFormElement.ts +138 -0
- package/config/harvester-manager-types.js +2 -0
- package/config/private-label.js +22 -0
- package/config/product/explorer.js +3 -0
- package/config/product/fleet.js +6 -1
- package/config/product/manager.js +8 -2
- package/config/query-params.js +1 -0
- package/config/router.js +385 -364
- package/config/settings.ts +1 -0
- package/config/store.js +1 -1
- package/config/system-namespaces.js +3 -0
- package/config/table-headers.js +47 -0
- package/core/plugin-routes.ts +56 -114
- package/core/plugin.ts +16 -10
- package/core/plugins-loader.js +7 -9
- package/core/plugins.js +0 -3
- package/creators/app/files/.gitlab-ci.yml +1 -1
- package/detail/fleet.cattle.io.cluster.vue +11 -1
- package/detail/provisioning.cattle.io.cluster.vue +4 -3
- package/dialog/ScaleMachineDownDialog.vue +34 -17
- package/edit/__tests__/service.test.ts +89 -0
- package/edit/auth/googleoauth.vue +1 -5
- package/edit/cloudcredential.vue +2 -0
- package/edit/configmap.vue +2 -1
- package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +2 -2
- package/edit/networking.k8s.io.networkpolicy/__tests__/PolicyRuleTarget.spec.ts +1 -1
- package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +15 -7
- package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +112 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +473 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/{CustomCommand.tests.ts → CustomCommand.test.ts} +4 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/DrainOptions.test.ts +1 -1
- package/edit/provisioning.cattle.io.cluster/__tests__/index.test.ts +73 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +7 -1
- package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +386 -0
- package/edit/provisioning.cattle.io.cluster/import.vue +2 -2
- package/edit/provisioning.cattle.io.cluster/index.vue +92 -36
- package/edit/provisioning.cattle.io.cluster/rke2.vue +171 -583
- package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +137 -0
- package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +157 -0
- package/edit/provisioning.cattle.io.cluster/{Basics.vue → tabs/Basics.vue} +94 -19
- package/edit/provisioning.cattle.io.cluster/{MachinePool.vue → tabs/MachinePool.vue} +1 -0
- package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +135 -0
- package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +189 -0
- package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +144 -0
- package/edit/provisioning.cattle.io.cluster/tabs/upgrade/index.vue +76 -0
- package/edit/service.vue +12 -0
- package/edit/workload/mixins/workload.js +1 -1
- package/initialize/App.js +25 -71
- package/initialize/client.js +21 -162
- package/initialize/index.js +27 -123
- package/list/management.cattle.io.feature.vue +1 -7
- package/list/node.vue +1 -0
- package/machine-config/__tests__/vmwarevsphere.test.ts +100 -21
- package/machine-config/vmwarevsphere.vue +73 -51
- package/middleware/authenticated.js +10 -17
- package/mixins/auth-config.js +2 -7
- package/mixins/brand.js +29 -41
- package/mixins/create-edit-view/index.js +2 -2
- package/mixins/labeled-form-element.ts +6 -1
- package/models/__tests__/management.cattle.io.node.ts +85 -0
- package/models/__tests__/management.cattle.io.nodepool.ts +83 -0
- package/models/__tests__/namespace.test.ts +49 -9
- package/models/__tests__/workload.test.ts +91 -0
- package/models/cluster/node.js +4 -4
- package/models/cluster.x-k8s.io.machinedeployment.js +14 -0
- package/models/fleet.cattle.io.cluster.js +4 -0
- package/models/fleet.cattle.io.gitrepo.js +56 -13
- package/models/management.cattle.io.kontainerdriver.js +1 -1
- package/models/management.cattle.io.node.js +18 -14
- package/models/management.cattle.io.nodepool.js +17 -0
- package/models/namespace.js +1 -1
- package/models/pod.js +20 -0
- package/models/provisioning.cattle.io.cluster.js +20 -3
- package/models/secret.js +117 -18
- package/models/workload.js +16 -0
- package/models/workload.service.js +18 -0
- package/package.json +10 -9
- package/pages/about.vue +0 -1
- package/pages/account/create-key.vue +0 -1
- package/pages/account/index.vue +0 -1
- package/pages/auth/login.vue +0 -1
- package/pages/auth/logout.vue +0 -2
- package/pages/auth/setup.vue +0 -4
- package/pages/auth/verify.vue +14 -8
- package/pages/c/_cluster/apps/charts/install.vue +4 -4
- package/pages/c/_cluster/apps/index.vue +0 -2
- package/pages/c/_cluster/auth/index.vue +0 -2
- package/pages/c/_cluster/ecm/index.vue +0 -2
- package/pages/c/_cluster/explorer/index.vue +28 -2
- package/pages/c/_cluster/fleet/index.vue +1 -1
- package/pages/c/_cluster/index.vue +0 -2
- package/pages/c/_cluster/settings/banners.vue +0 -2
- package/pages/c/_cluster/settings/brand.vue +0 -2
- package/pages/c/_cluster/settings/index.vue +0 -2
- package/pages/c/_cluster/settings/links.vue +0 -1
- package/pages/c/_cluster/settings/performance.vue +0 -1
- package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +2 -1
- package/pages/c/_cluster/uiplugins/CatalogList/index.vue +10 -46
- package/pages/c/_cluster/uiplugins/index.vue +0 -2
- package/pages/diagnostic.vue +1 -2
- package/pages/fail-whale.vue +0 -1
- package/pages/prefs.vue +0 -1
- package/pages/support/index.vue +2 -8
- package/pkg/auto-import.js +1 -1
- package/plugins/axios.js +0 -36
- package/plugins/back-button.js +3 -5
- package/plugins/codemirror-loader.js +1 -1
- package/plugins/codemirror.js +41 -0
- package/plugins/dashboard-store/__tests__/{mutations.spec.ts → mutations.test.ts} +1 -1
- package/plugins/dashboard-store/__tests__/resource-class.test.ts +49 -0
- package/plugins/dashboard-store/__tests__/utils/store-mocks.ts +7 -0
- package/plugins/dashboard-store/actions.js +30 -4
- package/plugins/dashboard-store/classify.js +1 -18
- package/plugins/dashboard-store/getters.js +10 -5
- package/plugins/dashboard-store/index.js +0 -12
- package/plugins/dashboard-store/mutations.js +0 -4
- package/plugins/dashboard-store/resource-class.js +59 -18
- package/plugins/steve/__tests__/steve-class.spec.ts +59 -0
- package/plugins/steve/__tests__/utils/steve-mocks.ts +31 -0
- package/plugins/steve/getters.js +4 -1
- package/plugins/steve/norman-class.js +19 -0
- package/plugins/steve/steve-class.js +22 -0
- package/plugins/steve/subscribe.js +4 -10
- package/rancher-components/Accordion/Accordion.test.ts +45 -0
- package/rancher-components/Accordion/Accordion.vue +86 -0
- package/rancher-components/Accordion/index.ts +1 -0
- package/rancher-components/BadgeState/BadgeState.vue +3 -3
- package/rancher-components/Banner/Banner.vue +2 -2
- package/rancher-components/Card/Card.vue +3 -3
- package/rancher-components/Form/Checkbox/Checkbox.vue +3 -3
- package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +18 -1
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +65 -24
- package/rancher-components/Form/Radio/RadioButton.test.ts +7 -3
- package/rancher-components/Form/Radio/RadioButton.vue +13 -7
- package/rancher-components/Form/Radio/RadioGroup.test.ts +30 -0
- package/rancher-components/Form/Radio/RadioGroup.vue +8 -3
- package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +6 -4
- package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
- package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
- package/rancher-components/StringList/StringList.test.ts +270 -0
- package/rancher-components/StringList/StringList.vue +65 -26
- package/rancher-components/components/Accordion/Accordion.test.ts +45 -0
- package/rancher-components/components/Accordion/Accordion.vue +86 -0
- package/rancher-components/components/Accordion/index.ts +1 -0
- package/rancher-components/components/BadgeState/BadgeState.vue +3 -3
- package/rancher-components/components/Banner/Banner.vue +2 -2
- package/rancher-components/components/Card/Card.vue +3 -3
- package/rancher-components/components/Form/Checkbox/Checkbox.vue +3 -3
- package/rancher-components/components/Form/LabeledInput/LabeledInput.test.ts +18 -1
- package/rancher-components/components/Form/LabeledInput/LabeledInput.vue +57 -24
- package/rancher-components/components/Form/Radio/RadioButton.vue +13 -7
- package/rancher-components/components/Form/Radio/RadioGroup.vue +4 -3
- package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +6 -4
- package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
- package/rancher-components/components/LabeledTooltip/LabeledTooltip.vue +9 -4
- package/rancher-components/components/StringList/StringList.vue +8 -8
- package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +50 -0
- package/scripts/extension/parse-tag-name +2 -2
- package/scripts/publish-shell.sh +10 -0
- package/scripts/test-plugins-build.sh +85 -9
- package/server/har-file.js +183 -0
- package/store/catalog.js +1 -1
- package/store/features.js +1 -0
- package/store/i18n.js +11 -0
- package/store/index.js +10 -11
- package/store/prefs.js +33 -35
- package/store/type-map.js +8 -7
- package/tsconfig.json +35 -9
- package/tsconfig.paths.json +21 -0
- package/types/shell/index.d.ts +427 -234
- package/types/vue-shim.d.ts +42 -0
- package/utils/__tests__/create-yaml.test.ts +60 -0
- package/utils/axios.js +0 -19
- package/utils/azure.js +24 -0
- package/utils/create-yaml.js +17 -10
- package/utils/git.ts +1 -1
- package/utils/monitoring.js +1 -1
- package/utils/nuxt.js +18 -39
- package/utils/object.js +14 -0
- package/utils/router.scrollBehavior.js +12 -14
- package/utils/time.js +1 -1
- package/utils/url.ts +1 -1
- package/vue.config.js +23 -2
- package/.DS_Store +0 -0
- package/assets/images/providers/aks-black.svg +0 -28
- package/assets/images/providers/aks.svg +0 -31
- package/edit/provisioning.cattle.io.cluster/__tests__/Basics.tests.ts +0 -234
- package/initialize/layouts.ts +0 -26
- package/mixins/fetch.server.js +0 -73
- package/pages/c/index.vue +0 -9
- package/pages/rio/mesh.vue +0 -508
- package/plugins/transitions.js +0 -4
- package/scripts/.DS_Store +0 -0
- package/scripts/verdaccio.log +0 -205
- package/tsconfig.default.json +0 -46
- package/yarn-error.log +0 -200
- /package/components/form/__tests__/{NameNsDescription.ts → NameNsDescription.test.ts} +0 -0
- /package/edit/networking.k8s.io.networkpolicy/__tests__/utils/{selectors.ts → selectors.test.ts} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{AgentConfiguration.vue → tabs/AgentConfiguration.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{MemberRoles.vue → tabs/MemberRoles.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{S3Config.vue → tabs/etcd/S3Config.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{ACE.vue → tabs/networking/ACE.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{RegistryConfigs.vue → tabs/registries/RegistryConfigs.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{RegistryMirrors.vue → tabs/registries/RegistryMirrors.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{DrainOptions.vue → tabs/upgrade/DrainOptions.vue} +0 -0
- /package/plugins/dashboard-store/__tests__/{actions.spec.ts → actions.test.ts} +0 -0
- /package/plugins/dashboard-store/__tests__/{getters.spec.ts → getters.test.ts} +0 -0
- /package/rancher-components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
- /package/rancher-components/components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
|
|
4
|
+
// When we receive a request to this URL we will reset the session to replay again from the HAR file
|
|
5
|
+
// This allows the user to refresh the browser and replay the HAR file again
|
|
6
|
+
const RESET_URL = '/api/v1/namespaces/cattle-ui-plugin-system/services/http:ui-plugin-operator:80/proxy/index.json';
|
|
7
|
+
|
|
8
|
+
const EXCLUDES_QS = '?exclude=metadata.managedFields';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Load the network requests/responses from the har file
|
|
12
|
+
* @param name name/path of the file
|
|
13
|
+
* @param port port that the local dev server is running on
|
|
14
|
+
* @returns har file data
|
|
15
|
+
*/
|
|
16
|
+
function loadFile(name, port, dashboard) {
|
|
17
|
+
const newBase = `https://127.0.0.1:${ port }`;
|
|
18
|
+
const data = {};
|
|
19
|
+
|
|
20
|
+
console.log(`Loading HAR file: ${ name }`); // eslint-disable-line no-console
|
|
21
|
+
|
|
22
|
+
const rawData = fs.readFileSync(name);
|
|
23
|
+
const har = JSON.parse(rawData);
|
|
24
|
+
let base = '';
|
|
25
|
+
let uri = '';
|
|
26
|
+
|
|
27
|
+
if (har?.log?.pages) {
|
|
28
|
+
const page = har.log.pages.find((page) => page.title.includes('/dashboard/'));
|
|
29
|
+
|
|
30
|
+
if (page) {
|
|
31
|
+
const parts = page.title.split('/dashboard');
|
|
32
|
+
|
|
33
|
+
base = parts[0];
|
|
34
|
+
uri = parts[1];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (har?.log?.entries) {
|
|
39
|
+
console.log('Network requests:'); // eslint-disable-line no-console
|
|
40
|
+
|
|
41
|
+
har.log.entries.forEach((r) => {
|
|
42
|
+
const mimeType = r.response.content.mimeType;
|
|
43
|
+
|
|
44
|
+
// Only cache json responses
|
|
45
|
+
if (mimeType === 'application/json' || mimeType === 'text/plain') {
|
|
46
|
+
let url = r.request.url;
|
|
47
|
+
|
|
48
|
+
if (url.startsWith(base)) {
|
|
49
|
+
url = url.substr(base.length);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
console.log(` ${ r.request.method } ${ decodeURIComponent(url) }`); // eslint-disable-line no-console
|
|
53
|
+
|
|
54
|
+
data[url] = data[url] || {};
|
|
55
|
+
data[url][r.request.method] = data[url][r.request.method] || [];
|
|
56
|
+
|
|
57
|
+
const item = {
|
|
58
|
+
status: r.response.status,
|
|
59
|
+
statusText: r.response.statusText,
|
|
60
|
+
headers: r.response.headers,
|
|
61
|
+
content: r.response.content
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
if (item.content.text) {
|
|
65
|
+
item.content.text = item.content.text.replaceAll(base, newBase);
|
|
66
|
+
data[url][r.request.method].push(item);
|
|
67
|
+
} else {
|
|
68
|
+
console.log(' Warning: Omitting this response as there is no content - UI may not work as expected'); // eslint-disable-line no-console
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
console.log('Page:'); // eslint-disable-line no-console
|
|
75
|
+
console.log(` ${ newBase }${ dashboard }${ uri }`); // eslint-disable-line no-console
|
|
76
|
+
console.log(''); // eslint-disable-line no-console
|
|
77
|
+
|
|
78
|
+
return data;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function exportToFiles(data, folder) {
|
|
82
|
+
console.log(`Exporting request data to ${ folder }`); // eslint-disable-line no-console
|
|
83
|
+
|
|
84
|
+
Object.keys(data).forEach((r) => {
|
|
85
|
+
const out = path.join(folder, `.${ r }`);
|
|
86
|
+
const dir = path.dirname(out);
|
|
87
|
+
|
|
88
|
+
console.log(r); // eslint-disable-line no-console
|
|
89
|
+
|
|
90
|
+
Object.keys(data[r]).forEach((method) => {
|
|
91
|
+
const name = `${ path.basename(out) }.${ method.toLowerCase() }.json`;
|
|
92
|
+
|
|
93
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
94
|
+
|
|
95
|
+
data[r][method].forEach((request) => {
|
|
96
|
+
const formatted = JSON.stringify(JSON.parse(request.content.text), null, 2);
|
|
97
|
+
|
|
98
|
+
fs.writeFileSync(path.join(dir, name), formatted);
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function harProxy(responses, folder) {
|
|
105
|
+
let session = JSON.parse(JSON.stringify(responses));
|
|
106
|
+
|
|
107
|
+
return (req, res, next) => {
|
|
108
|
+
if (req.originalUrl === RESET_URL) {
|
|
109
|
+
session = JSON.parse(JSON.stringify(responses));
|
|
110
|
+
console.log('>>>>>>>> Reset session replay from har file'); // eslint-disable-line no-console
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const url = decodeURIComponent(req.originalUrl);
|
|
114
|
+
let playback = session[req.originalUrl];
|
|
115
|
+
|
|
116
|
+
// If it did not match, try without the metadata excludes query string that was adding in 2.8.0
|
|
117
|
+
// This might allow HAR captures with Rancher < 2.8.0 to be replayed on >= 2.8.0
|
|
118
|
+
if (!playback && req.originalUrl.endsWith(EXCLUDES_QS)) {
|
|
119
|
+
playback = session[req.originalUrl.slice(0, -EXCLUDES_QS.length)];
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (playback && playback[req.method] && playback[req.method].length) {
|
|
123
|
+
const resp = playback[req.method][0];
|
|
124
|
+
|
|
125
|
+
if (playback[req.method].length > 1) {
|
|
126
|
+
playback[req.method].shift();
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const body = resp.content?.text || '';
|
|
130
|
+
|
|
131
|
+
res.type(resp.content.mimeType);
|
|
132
|
+
res.status(resp.status);
|
|
133
|
+
res.send(Buffer.from(body));
|
|
134
|
+
res.end();
|
|
135
|
+
|
|
136
|
+
const char = !!resp.used ? '*' : ' ';
|
|
137
|
+
|
|
138
|
+
console.log(`${ req.method }${ char } ${ resp.status } ${ url }`); // eslint-disable-line no-console
|
|
139
|
+
|
|
140
|
+
resp.used = true;
|
|
141
|
+
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
if (req.originalUrl.startsWith('/v1/') || req.originalUrl.startsWith('/v3/') || req.originalUrl.startsWith('/k8s/')) {
|
|
146
|
+
// If we have been configured with a folder, look for a file with the contents to use for the request
|
|
147
|
+
if (folder) {
|
|
148
|
+
// Remove query string
|
|
149
|
+
const name = req.originalUrl.split('?')[0];
|
|
150
|
+
const requestFile = path.join(folder, `.${ name }.${ req.method.toLowerCase() }.json`);
|
|
151
|
+
|
|
152
|
+
if (fs.existsSync(requestFile)) {
|
|
153
|
+
const data = fs.readFileSync(requestFile);
|
|
154
|
+
|
|
155
|
+
console.log(`${ req.method }f 200 ${ url }`); // eslint-disable-line no-console
|
|
156
|
+
|
|
157
|
+
res.type('application/json');
|
|
158
|
+
res.status(200);
|
|
159
|
+
res.send(data);
|
|
160
|
+
|
|
161
|
+
return res.end();
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// Fallback to sending a 404 response
|
|
166
|
+
res.status(404);
|
|
167
|
+
res.send('Not Found');
|
|
168
|
+
|
|
169
|
+
console.log(`${ req.method }? 404 ${ url }`); // eslint-disable-line no-console
|
|
170
|
+
|
|
171
|
+
return res.end();
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// Continue on to serve up other resources
|
|
175
|
+
return next();
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
module.exports = {
|
|
180
|
+
loadFile,
|
|
181
|
+
harProxy,
|
|
182
|
+
exportToFiles,
|
|
183
|
+
};
|
package/store/catalog.js
CHANGED
|
@@ -354,7 +354,7 @@ export const actions = {
|
|
|
354
354
|
|
|
355
355
|
// As per comment above, when there are no clusters this will be management. Store it such that it can be used for those cases
|
|
356
356
|
commit('setInStore', inStore);
|
|
357
|
-
hash.cluster = hash.cluster
|
|
357
|
+
hash.cluster = hash.cluster?.filter((repo) => !(repo?.metadata?.annotations?.[CATALOG_ANNOTATIONS.HIDDEN_REPO] === 'true'));
|
|
358
358
|
|
|
359
359
|
commit('setRepos', hash);
|
|
360
360
|
|
package/store/features.js
CHANGED
|
@@ -27,6 +27,7 @@ export const mapFeature = function(name) {
|
|
|
27
27
|
export const MULTI_CLUSTER = create('multi-cluster-management', true);
|
|
28
28
|
export const LEGACY = create('legacy', false);
|
|
29
29
|
export const RKE2 = create('rke2', true);
|
|
30
|
+
export const RKE1_UI = create('rke1-ui', true);
|
|
30
31
|
export const UNSUPPORTED_STORAGE_DRIVERS = create('unsupported-storage-drivers', false);
|
|
31
32
|
export const FLEET = create('continuous-delivery', true);
|
|
32
33
|
export const HARVESTER = create('harvester', true);
|
package/store/i18n.js
CHANGED
|
@@ -308,6 +308,17 @@ export const actions = {
|
|
|
308
308
|
p.push(dispatch('mergeLoad', { locale, module: fn }));
|
|
309
309
|
});
|
|
310
310
|
|
|
311
|
+
// load all of the default locales from the plugins for fallback
|
|
312
|
+
if (locale !== DEFAULT_LOCALE) {
|
|
313
|
+
const defaultI18nExt = rootState.$plugin?.getDynamic('l10n', DEFAULT_LOCALE);
|
|
314
|
+
|
|
315
|
+
if (defaultI18nExt && defaultI18nExt.length) {
|
|
316
|
+
defaultI18nExt.forEach((fn) => {
|
|
317
|
+
p.push(dispatch('mergeLoad', { locale: DEFAULT_LOCALE, module: fn }));
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
311
322
|
try {
|
|
312
323
|
await Promise.all(p);
|
|
313
324
|
} catch (e) {
|
package/store/index.js
CHANGED
|
@@ -713,10 +713,7 @@ export const actions = {
|
|
|
713
713
|
|
|
714
714
|
const promises = {
|
|
715
715
|
// Clusters guaranteed always available or your money back
|
|
716
|
-
clusters: dispatch('management/findAll', {
|
|
717
|
-
type: MANAGEMENT.CLUSTER,
|
|
718
|
-
opt: { url: MANAGEMENT.CLUSTER }
|
|
719
|
-
}),
|
|
716
|
+
clusters: dispatch('management/findAll', { type: MANAGEMENT.CLUSTER }),
|
|
720
717
|
|
|
721
718
|
// Features checks on its own if they are available
|
|
722
719
|
features: dispatch('features/loadServer'),
|
|
@@ -887,6 +884,10 @@ export const actions = {
|
|
|
887
884
|
// Try and wait until the schema exists before proceeding
|
|
888
885
|
await dispatch('management/waitForSchema', { type: MANAGEMENT.CLUSTER });
|
|
889
886
|
|
|
887
|
+
// Similar to above, we're still waiting on loadManagement to fetch required resources
|
|
888
|
+
// If we don't have all mgmt clusters yet a request to fetch this cluster and then all clusters (in cleanNamespaces) is kicked off
|
|
889
|
+
await dispatch('management/waitForHaveAll', { type: MANAGEMENT.CLUSTER });
|
|
890
|
+
|
|
890
891
|
// See if it really exists
|
|
891
892
|
try {
|
|
892
893
|
const cluster = await dispatch('management/find', {
|
|
@@ -1046,15 +1047,13 @@ export const actions = {
|
|
|
1046
1047
|
if ( route.name === 'index' ) {
|
|
1047
1048
|
router.replace('/auth/login');
|
|
1048
1049
|
} else {
|
|
1049
|
-
|
|
1050
|
-
const backTo = window.localStorage.getItem(BACK_TO);
|
|
1050
|
+
const backTo = window.localStorage.getItem(BACK_TO);
|
|
1051
1051
|
|
|
1052
|
-
|
|
1053
|
-
|
|
1052
|
+
const isLogin = route.name === 'auth-login' || route.path === '/login'; // Cover dashboard and case of log out from ember;
|
|
1053
|
+
const isLogout = route.name === 'auth-logout';
|
|
1054
1054
|
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
}
|
|
1055
|
+
if (!backTo && !isLogin && !isLogout) {
|
|
1056
|
+
window.localStorage.setItem(BACK_TO, window.location.href);
|
|
1058
1057
|
}
|
|
1059
1058
|
|
|
1060
1059
|
const QUERY = (LOGGED_OUT in route.query) ? LOGGED_OUT : TIMED_OUT;
|
package/store/prefs.js
CHANGED
|
@@ -345,46 +345,44 @@ export const actions = {
|
|
|
345
345
|
commit('cookiesLoaded');
|
|
346
346
|
},
|
|
347
347
|
|
|
348
|
-
loadTheme({
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
348
|
+
loadTheme({ dispatch }) {
|
|
349
|
+
const watchDark = window.matchMedia('(prefers-color-scheme: dark)');
|
|
350
|
+
const watchLight = window.matchMedia('(prefers-color-scheme: light)');
|
|
351
|
+
const watchNone = window.matchMedia('(prefers-color-scheme: no-preference)');
|
|
352
|
+
|
|
353
|
+
const interval = 30 * 60 * 1000;
|
|
354
|
+
const nextHalfHour = interval - Math.round(new Date().getTime()) % interval;
|
|
355
|
+
|
|
356
|
+
setTimeout(() => {
|
|
357
|
+
dispatch('loadTheme');
|
|
358
|
+
}, nextHalfHour);
|
|
359
|
+
// console.log('Update theme in', nextHalfHour, 'ms');
|
|
360
|
+
|
|
361
|
+
if ( watchDark.matches ) {
|
|
362
|
+
changed('dark');
|
|
363
|
+
} else if ( watchLight.matches ) {
|
|
364
|
+
changed('light');
|
|
365
|
+
} else {
|
|
366
|
+
changed(fromClock());
|
|
367
|
+
}
|
|
361
368
|
|
|
362
|
-
|
|
369
|
+
watchDark.addListener((e) => {
|
|
370
|
+
if ( e.matches ) {
|
|
363
371
|
changed('dark');
|
|
364
|
-
} else if ( watchLight.matches ) {
|
|
365
|
-
changed('light');
|
|
366
|
-
} else {
|
|
367
|
-
changed(fromClock());
|
|
368
372
|
}
|
|
373
|
+
});
|
|
369
374
|
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
watchLight.addListener((e) => {
|
|
377
|
-
if ( e.matches ) {
|
|
378
|
-
changed('light');
|
|
379
|
-
}
|
|
380
|
-
});
|
|
375
|
+
watchLight.addListener((e) => {
|
|
376
|
+
if ( e.matches ) {
|
|
377
|
+
changed('light');
|
|
378
|
+
}
|
|
379
|
+
});
|
|
381
380
|
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
}
|
|
381
|
+
watchNone.addListener((e) => {
|
|
382
|
+
if ( e.matches ) {
|
|
383
|
+
changed(fromClock());
|
|
384
|
+
}
|
|
385
|
+
});
|
|
388
386
|
|
|
389
387
|
function changed(value) {
|
|
390
388
|
// console.log('Prefers Theme:', value);
|
package/store/type-map.js
CHANGED
|
@@ -912,6 +912,10 @@ export const getters = {
|
|
|
912
912
|
continue;
|
|
913
913
|
}
|
|
914
914
|
|
|
915
|
+
if (item.ifFeature && !rootGetters['features/get'](item.ifFeature)) {
|
|
916
|
+
continue;
|
|
917
|
+
}
|
|
918
|
+
|
|
915
919
|
if ( isBasic && !getters.groupForBasicType(product, id) ) {
|
|
916
920
|
continue;
|
|
917
921
|
} else if ( mode === FAVORITE && !getters.isFavorite(id) ) {
|
|
@@ -1844,15 +1848,12 @@ function _rowValueGetter(col) {
|
|
|
1844
1848
|
// We will use JsonPath to look up this value, which is costly - so if we can detect this format
|
|
1845
1849
|
// Use a more efficient function to get the value
|
|
1846
1850
|
const value = col.field.startsWith('.') ? `$${ col.field }` : col.field;
|
|
1851
|
+
const found = value.match(FIELD_REGEX);
|
|
1847
1852
|
|
|
1848
|
-
if (
|
|
1849
|
-
const
|
|
1853
|
+
if (found && found.length === 2) {
|
|
1854
|
+
const fieldIndex = parseInt(found[1], 10);
|
|
1850
1855
|
|
|
1851
|
-
|
|
1852
|
-
const fieldIndex = parseInt(found[1], 10);
|
|
1853
|
-
|
|
1854
|
-
return (row) => row.metadata?.fields?.[fieldIndex];
|
|
1855
|
-
}
|
|
1856
|
+
return (row) => row.metadata?.fields?.[fieldIndex];
|
|
1856
1857
|
}
|
|
1857
1858
|
|
|
1858
1859
|
return value;
|
package/tsconfig.json
CHANGED
|
@@ -1,16 +1,42 @@
|
|
|
1
1
|
{
|
|
2
|
-
"extends": "./tsconfig.
|
|
2
|
+
"extends": "./tsconfig.paths.json",
|
|
3
3
|
"compilerOptions": {
|
|
4
|
+
"target": "ES2018",
|
|
5
|
+
"module": "ESNext",
|
|
6
|
+
"moduleResolution": "Node",
|
|
7
|
+
"lib": [
|
|
8
|
+
"ESNext",
|
|
9
|
+
"ESNext.AsyncIterable",
|
|
10
|
+
"DOM"
|
|
11
|
+
],
|
|
12
|
+
"allowJs": true,
|
|
13
|
+
"sourceMap": true,
|
|
14
|
+
"strict": true,
|
|
15
|
+
"noEmit": false,
|
|
16
|
+
"esModuleInterop": true,
|
|
17
|
+
"baseUrl": ".",
|
|
18
|
+
"rootDir": ".",
|
|
4
19
|
"types": [
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
|
|
8
|
-
|
|
20
|
+
"node",
|
|
21
|
+
"jest",
|
|
22
|
+
],
|
|
23
|
+
"typeRoots": [
|
|
24
|
+
"./node_modules/@types",
|
|
25
|
+
"../node_modules/@types"
|
|
26
|
+
],
|
|
9
27
|
},
|
|
10
28
|
"exclude": [
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
29
|
+
"node_modules",
|
|
30
|
+
".nuxt",
|
|
31
|
+
"dist",
|
|
32
|
+
"dist-pkg",
|
|
33
|
+
"../dist",
|
|
34
|
+
"../dist-pkg",
|
|
35
|
+
"../creators",
|
|
36
|
+
"../scripts",
|
|
37
|
+
"../cypress",
|
|
38
|
+
"../cypress.config.ts",
|
|
39
|
+
"../docusaurus",
|
|
40
|
+
"../**/*.spec.ts"
|
|
15
41
|
]
|
|
16
42
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"paths": {
|
|
4
|
+
"~/*": [
|
|
5
|
+
"../*"
|
|
6
|
+
],
|
|
7
|
+
"@/*": [
|
|
8
|
+
"../*"
|
|
9
|
+
],
|
|
10
|
+
"@shell/*": [
|
|
11
|
+
"../shell/*"
|
|
12
|
+
],
|
|
13
|
+
"@pkg/*": [
|
|
14
|
+
"../shell/pkg/*"
|
|
15
|
+
],
|
|
16
|
+
"@components/*": [
|
|
17
|
+
"../pkg/rancher-components/src/components/*"
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
}
|