Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
12e4e6c96c | ||
|
|
af6a04d53f | ||
|
|
f63be73b11 | ||
|
|
fabc1cec21 | ||
|
|
ed2b6f2551 | ||
|
|
72282ae50e | ||
|
|
8fba4e7050 |
@@ -0,0 +1,26 @@
|
||||
apiVersion: v1
|
||||
entries:
|
||||
harvester:
|
||||
- annotations:
|
||||
catalog.cattle.io/certified: rancher
|
||||
catalog.cattle.io/display-name: Harvester
|
||||
catalog.cattle.io/kube-version: '>= 1.16.0-0'
|
||||
catalog.cattle.io/namespace: cattle-ui-plugin-system
|
||||
catalog.cattle.io/os: linux
|
||||
catalog.cattle.io/permits-os: linux, windows
|
||||
catalog.cattle.io/rancher-version: '>= 2.15.0-0'
|
||||
catalog.cattle.io/scope: management
|
||||
catalog.cattle.io/ui-component: plugins
|
||||
catalog.cattle.io/ui-extensions-version: '>= 3.0.0 < 4.0.0'
|
||||
apiVersion: v2
|
||||
appVersion: 1.10.0-dev
|
||||
created: "2026-08-17T09:53:47.7476+08:00"
|
||||
description: Rancher UI Extension for Harvester
|
||||
digest: 8800a65761d4b9dbdadb9f9050b9053738021c43d02cf7249e6922e230fdd95b
|
||||
icon: https://raw.githubusercontent.com/harvester/harvester-ui-extension/main/pkg/harvester/icon.svg
|
||||
name: harvester
|
||||
type: application
|
||||
urls:
|
||||
- assets/harvester/harvester-1.10.0-dev.tgz
|
||||
version: 1.10.0-dev
|
||||
generated: "2026-08-17T09:53:47.74717+08:00"
|
||||
@@ -0,0 +1,19 @@
|
||||
annotations:
|
||||
catalog.cattle.io/certified: rancher
|
||||
catalog.cattle.io/namespace: cattle-ui-plugin-system
|
||||
catalog.cattle.io/os: linux
|
||||
catalog.cattle.io/permits-os: linux, windows
|
||||
catalog.cattle.io/scope: management
|
||||
catalog.cattle.io/ui-component: plugins
|
||||
catalog.cattle.io/display-name: Harvester
|
||||
catalog.cattle.io/kube-version: '>= 1.16.0-0'
|
||||
catalog.cattle.io/rancher-version: '>= 2.15.0-0'
|
||||
catalog.cattle.io/ui-extensions-version: '>= 3.0.0 < 4.0.0'
|
||||
apiVersion: v2
|
||||
appVersion: 1.10.0-dev
|
||||
description: Rancher UI Extension for Harvester
|
||||
name: harvester
|
||||
type: application
|
||||
version: 1.10.0-dev
|
||||
icon: >-
|
||||
https://raw.githubusercontent.com/harvester/harvester-ui-extension/main/pkg/harvester/icon.svg
|
||||
@@ -0,0 +1,177 @@
|
||||
# harvester-ui-extension
|
||||
|
||||
The Harvester UI Extension is a Rancher extension that provides the user interface for [Harvester](https://harvesterhci.io) within the [Rancher Dashboard](https://github.com/rancher/dashboard).
|
||||
|
||||
> **Note:**
|
||||
> This extension is available starting from **Rancher 2.10.0**. Ensure your Rancher version is **2.10.0 or later** to access Harvester integration.
|
||||
|
||||
## Installation
|
||||
|
||||
For Harvester UI extension installation instructions, please refer to the page **Rancher Integration** -> **Harvester UI Extension** in [official Harvester documentation](https://docs.harvesterhci.io).
|
||||
|
||||
## Development Setup
|
||||
|
||||
Ensure **Node.js v20 or later** is installed for development and debugging.
|
||||
|
||||
### Standalone Mode
|
||||
|
||||
Run the extension standalone with hot reload at `https://localhost:8005`.
|
||||
|
||||
```bash
|
||||
# Install dependencies
|
||||
yarn install
|
||||
|
||||
# Start the development server
|
||||
RANCHER_ENV=harvester API=https://your-harvester-ip yarn dev
|
||||
|
||||
# Example with specific server version
|
||||
RANCHER_ENV=harvester VUE_APP_SERVER_VERSION=v1.5.0 API=https://192.168.1.123 yarn dev
|
||||
```
|
||||
|
||||
You may also define environment variables in a `.env` file:
|
||||
|
||||
```env
|
||||
RANCHER_ENV=harvester
|
||||
VUE_APP_SERVER_VERSION=v1.5.0
|
||||
API=https://192.168.1.123
|
||||
```
|
||||
|
||||
### Rancher Integration Mode
|
||||
|
||||
To run as a Rancher extension, follow the [Rancher UI Extension Guide](https://extensions.rancher.io/extensions/next/extensions-getting-started#running-the-app).
|
||||
|
||||
```bash
|
||||
API=https://your-rancher-ip yarn dev
|
||||
```
|
||||
|
||||
## Commit Message Guidelines
|
||||
|
||||
This project uses [commit-lint](https://commitlint.js.org/) with [Conventional Commits](https://www.conventionalcommits.org/) to ensure consistent and meaningful commit messages.
|
||||
|
||||
### Commit Message Format
|
||||
|
||||
All commit messages must follow the conventional commit format:
|
||||
|
||||
```
|
||||
<type>[optional scope]: <description>
|
||||
|
||||
[optional body]
|
||||
|
||||
[optional footer(s)]
|
||||
```
|
||||
|
||||
### Supported Types
|
||||
|
||||
- **feat**: New features
|
||||
- **fix**: Bug fixes
|
||||
- **docs**: Documentation changes
|
||||
- **style**: Code style changes (formatting, missing semicolons, etc.)
|
||||
- **refactor**: Code refactoring
|
||||
- **perf**: Performance improvements
|
||||
- **test**: Adding or updating tests
|
||||
- **build**: Build system or external dependencies
|
||||
- **ci**: CI/CD changes
|
||||
- **chore**: Other changes that don't modify src or test files
|
||||
- **revert**: Reverts a previous commit
|
||||
- **wip**: Work in progress
|
||||
- **deps**: Dependency updates
|
||||
- **security**: Security fixes
|
||||
|
||||
### Examples
|
||||
|
||||
```bash
|
||||
# Feature
|
||||
git commit -m "feat: add new virtual machine creation wizard"
|
||||
|
||||
# Bug fix
|
||||
git commit -m "fix: resolve memory leak in VM console"
|
||||
|
||||
# Documentation
|
||||
git commit -m "docs: update installation instructions"
|
||||
|
||||
# Breaking change
|
||||
git commit -m "feat!: change API endpoint structure
|
||||
|
||||
BREAKING CHANGE: The /api/v1/vms endpoint has been replaced with /api/v2/vms"
|
||||
```
|
||||
|
||||
### Git Hooks
|
||||
|
||||
The project uses [Husky](https://typicode.github.io/husky/) to automatically validate commit messages and run linting before commits:
|
||||
|
||||
- **pre-commit**: Runs ESLint to ensure code quality
|
||||
- **commit-msg**: Validates commit message format using commit-lint
|
||||
|
||||
These hooks are automatically installed when you run `yarn install`.
|
||||
|
||||
### Manual Validation
|
||||
|
||||
You can manually validate commit messages:
|
||||
|
||||
```bash
|
||||
# Validate the last commit
|
||||
yarn commitlint
|
||||
|
||||
# Validate a specific commit
|
||||
npx commitlint --from <commit-hash>
|
||||
|
||||
# Validate a range of commits
|
||||
npx commitlint --from <start-hash> --to <end-hash>
|
||||
```
|
||||
|
||||
## Branch Structure
|
||||
|
||||
- **`main`** – Main development branch
|
||||
- **`release-harvester-vX.Y`** – Stable release branches per version series
|
||||
- **`vX.Y-head`** – Testing branches for ongoing changes to extension builds in each release series
|
||||
|
||||
> **Note:**
|
||||
> The `vX.Y-head` branches are auto-generated and kept in sync with release branches. Use these for testing the latest changes in each version series.
|
||||
|
||||
## Testing Guidelines
|
||||
|
||||
### UI Extension Testing
|
||||
|
||||
To validate changes in a release series, switch to the appropriate `vX.Y-head` branch. For main branch testing, use `main-head`.
|
||||
|
||||
- Examples:
|
||||
- Test `1.0.x` series → `v1.0-head`
|
||||
- Test `1.5.x` series → `v1.5-head`
|
||||
|
||||
**Steps:**
|
||||
1. Navigate to **Rancher UI** → **Local** → **App** → **Repositories**
|
||||
2. Refresh the Harvester repository using the target `vX.Y-head` branch
|
||||
3. Go to the **Extensions** page and install the desired version
|
||||
|
||||
### Standalone Mode Testing
|
||||
|
||||
To test the standalone UI, configure Harvester to load the UI from an external source.
|
||||
|
||||
- Examples of `ui-index`:
|
||||
- Main branch → `https://releases.rancher.com/harvester-ui/dashboard/latest/index.html`
|
||||
- Release series `1.5.x` → `https://releases.rancher.com/harvester-ui/dashboard/release-harvester-v1.5/index.html`
|
||||
|
||||
**Steps:**
|
||||
1. Go to **Harvester UI** → **Advanced** → **Settings** → **UI**
|
||||
2. Set **ui-source** to `External`
|
||||
3. Set **ui-index** to the desired URL
|
||||
|
||||
## Contributing
|
||||
|
||||
If you want to contribute, start by reading this document, then visit our [Getting Started guide](https://extensions.rancher.io/extensions/next/extensions-getting-started) to learn how to develop and submit changes.
|
||||
|
||||
## License
|
||||
|
||||
Copyright (c) 2014-2026 [SUSE, LLC.](https://www.suse.com/)
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
[http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
@@ -0,0 +1,63 @@
|
||||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "extension-server.name" -}}
|
||||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Create a default fully qualified app name.
|
||||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||
If release name contains chart name it will be used as a full name.
|
||||
*/}}
|
||||
{{- define "extension-server.fullname" -}}
|
||||
{{- if .Values.fullnameOverride }}
|
||||
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
|
||||
{{- else }}
|
||||
{{- $name := default .Chart.Name .Values.nameOverride }}
|
||||
{{- if contains $name .Release.Name }}
|
||||
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
|
||||
{{- else }}
|
||||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
|
||||
{{/*
|
||||
Create chart name and version as used by the chart label.
|
||||
*/}}
|
||||
{{- define "extension-server.chart" -}}
|
||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Common labels
|
||||
*/}}
|
||||
{{- define "extension-server.labels" -}}
|
||||
helm.sh/chart: {{ include "extension-server.chart" . }}
|
||||
{{ include "extension-server.selectorLabels" . }}
|
||||
{{- if .Chart.AppVersion }}
|
||||
app.kubernetes.io/version: {{ .Chart.AppVersion | replace "+" "_" | quote }}
|
||||
{{- end }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Selector labels
|
||||
*/}}
|
||||
{{- define "extension-server.selectorLabels" -}}
|
||||
app.kubernetes.io/name: {{ include "extension-server.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Pkg annotations
|
||||
*/}}
|
||||
{{- define "extension-server.pluginMetadata" -}}
|
||||
{{- with .Values.plugin.metadata }}
|
||||
{{- range $key, $value := . }}
|
||||
{{ $key }}: {{ $value | quote }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,15 @@
|
||||
apiVersion: catalog.cattle.io/v1
|
||||
kind: UIPlugin
|
||||
metadata:
|
||||
name: {{ include "extension-server.fullname" . }}
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels: {{ include "extension-server.labels" . | nindent 4 }}
|
||||
spec:
|
||||
plugin:
|
||||
name: {{ include "extension-server.fullname" . }}
|
||||
version: {{ (semver (default .Chart.AppVersion .Values.plugin.versionOverride)).Original }}
|
||||
endpoint: {{ .Values.plugin.endpoint | quote }}
|
||||
compressedEndpoint: {{ .Values.plugin.compressedEndpoint | quote }}
|
||||
noCache: {{ .Values.plugin.noCache }}
|
||||
noAuth: {{ .Values.plugin.noAuth }}
|
||||
metadata: {{ include "extension-server.pluginMetadata" . | indent 6 }}
|
||||
@@ -0,0 +1,16 @@
|
||||
nameOverride: ""
|
||||
fullnameOverride: ""
|
||||
plugin:
|
||||
enabled: true
|
||||
versionOverride: ""
|
||||
endpoint: >-
|
||||
https://raw.githubusercontent.com/a110605/harvester-ui-extension/fix_forklift_ns_test/extensions/harvester/1.10.0-dev
|
||||
compressedEndpoint: >-
|
||||
https://raw.githubusercontent.com/a110605/harvester-ui-extension/fix_forklift_ns_test/extensions/harvester/1.10.0-dev.tgz
|
||||
noCache: false
|
||||
noAuth: false
|
||||
metadata:
|
||||
catalog.cattle.io/display-name: Harvester
|
||||
catalog.cattle.io/kube-version: ">= 1.16.0-0"
|
||||
catalog.cattle.io/rancher-version: ">= 2.15.0-0"
|
||||
catalog.cattle.io/ui-extensions-version: ">= 3.0.0 < 4.0.0"
|
||||
@@ -0,0 +1,76 @@
|
||||
plugin/harvester-1.10.0-dev.umd.min.106.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.106.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.238.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.238.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.277.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.277.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.303.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.303.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.37.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.37.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.375.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.375.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.431.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.431.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.446.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.446.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.460.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.460.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.489.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.489.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.573.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.573.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.60.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.60.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.619.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.619.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.682.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.682.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.730.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.730.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.740.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.740.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.763.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.763.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.813.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.813.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.856.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.856.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.880.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.880.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.895.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.895.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.97.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.97.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.csv.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.csv.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.detail.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.detail.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.dialog.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.dialog.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.edit.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.edit.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.formatters.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.formatters.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.list.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.list.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.promptRemove.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.promptRemove.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.xccdf.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.xccdf.js.map
|
||||
plugin/harvester-1.10.0-dev.umd.min.xterm.js
|
||||
plugin/harvester-1.10.0-dev.umd.min.xterm.js.map
|
||||
plugin/img/custom.6f45244d.svg
|
||||
plugin/img/email.b67ceff2.svg
|
||||
plugin/img/generic-catalog.1842a50e.svg
|
||||
plugin/img/generic-plugin.f1ebdd74.svg
|
||||
plugin/img/grafana.2db31bb8.svg
|
||||
plugin/img/harvester.0168283e.svg
|
||||
plugin/img/icon.42954c0f.svg
|
||||
plugin/img/pagerduty.9871fbd3.svg
|
||||
plugin/img/prometheus.be8ac54d.svg
|
||||
plugin/img/slack.34dfd73f.svg
|
||||
plugin/img/webhook.f86c012b.svg
|
||||
plugin/package.json
|
||||
@@ -0,0 +1,2 @@
|
||||
"use strict";(("undefined"!==typeof self?self:this)["webpackChunkharvester_1_10_0_dev"]=("undefined"!==typeof self?self:this)["webpackChunkharvester_1_10_0_dev"]||[]).push([[277],{28277:function(e,n,t){t.r(n),t.d(n,{default:function(){return f}});var r=t(9274);function s(e,n,t,s,o,c){const u=(0,r.resolveComponent)("ResourceDetail");return(0,r.openBlock)(),(0,r.createBlock)(u)}var o=t(97867),c={name:"ClusterResourceNamespaceId",components:{ResourceDetail:o.A}},u=t(47433);const a=(0,u.A)(c,[["render",s]]);var f=a}}]);
|
||||
//# sourceMappingURL=harvester-1.10.0-dev.umd.min.277.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"harvester-1.10.0-dev.umd.min.277.js","mappings":"uWAUEA,EAAAA,EAAAA,aAAkBC,E,gBAPpB,GACEC,KAAY,6BACZC,WAAY,CAAEC,eAAcA,EAAAA,I,WCA9B,MAAMC,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAASC,KAEpE,O","sources":["webpack://harvester-1.10.0-dev/../../node_modules/@rancher/shell/pages/c/_cluster/_product/_resource/_namespace/_id.vue","webpack://harvester-1.10.0-dev/../../node_modules/@rancher/shell/pages/c/_cluster/_product/_resource/_namespace/_id.vue?9724"],"sourcesContent":["<script>\nimport ResourceDetail from '@shell/components/ResourceDetail';\n\nexport default {\n name: 'ClusterResourceNamespaceId',\n components: { ResourceDetail },\n};\n</script>\n\n<template>\n <ResourceDetail />\n</template>\n","import { render } from \"./_id.vue?vue&type=template&id=36f5b1f9\"\nimport script from \"./_id.vue?vue&type=script&lang=js\"\nexport * from \"./_id.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../../../../../../vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__"],"names":["_createBlock","_component_ResourceDetail","name","components","ResourceDetail","__exports__","render"],"sourceRoot":""}
|
||||
@@ -0,0 +1,2 @@
|
||||
"use strict";(("undefined"!==typeof self?self:this)["webpackChunkharvester_1_10_0_dev"]=("undefined"!==typeof self?self:this)["webpackChunkharvester_1_10_0_dev"]||[]).push([[303],{66303:function(e,n,t){t.r(n),t.d(n,{default:function(){return f}});var r=t(9274);function s(e,n,t,s,o,u){const c=(0,r.resolveComponent)("ResourceDetail");return(0,r.openBlock)(),(0,r.createBlock)(c)}var o=t(97867),u={name:"ClusterResourcedId",components:{ResourceDetail:o.A}},c=t(47433);const a=(0,c.A)(u,[["render",s]]);var f=a}}]);
|
||||
//# sourceMappingURL=harvester-1.10.0-dev.umd.min.303.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"harvester-1.10.0-dev.umd.min.303.js","mappings":"uWAUEA,EAAAA,EAAAA,aAAkBC,E,gBAPpB,GACEC,KAAY,qBACZC,WAAY,CAAEC,eAAcA,EAAAA,I,WCA9B,MAAMC,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAASC,KAEpE,O","sources":["webpack://harvester-1.10.0-dev/../../node_modules/@rancher/shell/pages/c/_cluster/_product/_resource/_id.vue","webpack://harvester-1.10.0-dev/../../node_modules/@rancher/shell/pages/c/_cluster/_product/_resource/_id.vue?96bb"],"sourcesContent":["<script>\nimport ResourceDetail from '@shell/components/ResourceDetail';\n\nexport default {\n name: 'ClusterResourcedId',\n components: { ResourceDetail },\n};\n</script>\n\n<template>\n <ResourceDetail />\n</template>\n","import { render } from \"./_id.vue?vue&type=template&id=7d01dbfe\"\nimport script from \"./_id.vue?vue&type=script&lang=js\"\nexport * from \"./_id.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../../../../../vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__"],"names":["_createBlock","_component_ResourceDetail","name","components","ResourceDetail","__exports__","render"],"sourceRoot":""}
|
||||
@@ -0,0 +1,2 @@
|
||||
"use strict";(("undefined"!==typeof self?self:this)["webpackChunkharvester_1_10_0_dev"]=("undefined"!==typeof self?self:this)["webpackChunkharvester_1_10_0_dev"]||[]).push([[446],{36446:function(e,n,t){t.r(n),t.d(n,{default:function(){return i}});var s=t(9274);function r(e,n,t,r,o,u){const c=(0,s.resolveComponent)("ResourceList");return(0,s.openBlock)(),(0,s.createBlock)(c)}var o=t(62348),u={name:"ClusterResourcedList",components:{ResourceList:o.A}},c=t(47433);const f=(0,c.A)(u,[["render",r]]);var i=f}}]);
|
||||
//# sourceMappingURL=harvester-1.10.0-dev.umd.min.446.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"harvester-1.10.0-dev.umd.min.446.js","mappings":"qWAUEA,EAAAA,EAAAA,aAAgBC,E,gBAPlB,GACEC,KAAY,uBACZC,WAAY,CAAEC,aAAYA,EAAAA,I,WCA5B,MAAMC,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAASC,KAEpE,O","sources":["webpack://harvester-1.10.0-dev/../../node_modules/@rancher/shell/pages/c/_cluster/_product/_resource/index.vue","webpack://harvester-1.10.0-dev/../../node_modules/@rancher/shell/pages/c/_cluster/_product/_resource/index.vue?1ef3"],"sourcesContent":["<script>\nimport ResourceList from '@shell/components/ResourceList';\n\nexport default {\n name: 'ClusterResourcedList',\n components: { ResourceList },\n};\n</script>\n\n<template>\n <ResourceList />\n</template>\n","import { render } from \"./index.vue?vue&type=template&id=00d07840\"\nimport script from \"./index.vue?vue&type=script&lang=js\"\nexport * from \"./index.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../../../../../vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__"],"names":["_createBlock","_component_ResourceList","name","components","ResourceList","__exports__","render"],"sourceRoot":""}
|
||||
@@ -0,0 +1,2 @@
|
||||
(("undefined"!==typeof self?self:this)["webpackChunkharvester_1_10_0_dev"]=("undefined"!==typeof self?self:this)["webpackChunkharvester_1_10_0_dev"]||[]).push([[60],{45060:function(e,t,n){var o,a,i,r=n(4364);(function(n,r){a=[],o=r,i="function"===typeof o?o.apply(t,a):o,void 0===i||(e.exports=i)})(0,function(){"use strict";function t(e,t){return"undefined"==typeof t?t={autoBom:!1}:"object"!=typeof t&&(r.warn("Deprecated: Expected third argument to be a object"),t={autoBom:!t}),t.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob(["\ufeff",e],{type:e.type}):e}function o(e,t,n){var o=new XMLHttpRequest;o.open("GET",e),o.responseType="blob",o.onload=function(){f(o.response,t,n)},o.onerror=function(){r.error("could not download file")},o.send()}function a(e){var t=new XMLHttpRequest;t.open("HEAD",e,!1);try{t.send()}catch(e){}return 200<=t.status&&299>=t.status}function i(e){try{e.dispatchEvent(new MouseEvent("click"))}catch(o){var t=document.createEvent("MouseEvents");t.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),e.dispatchEvent(t)}}var s="object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof n.g&&n.g.global===n.g?n.g:void 0,c=s.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),f=s.saveAs||("object"!=typeof window||window!==s?function(){}:"download"in HTMLAnchorElement.prototype&&!c?function(e,t,n){var r=s.URL||s.webkitURL,c=document.createElement("a");t=t||e.name||"download",c.download=t,c.rel="noopener","string"==typeof e?(c.href=e,c.origin===location.origin?i(c):a(c.href)?o(e,t,n):i(c,c.target="_blank")):(c.href=r.createObjectURL(e),setTimeout(function(){r.revokeObjectURL(c.href)},4e4),setTimeout(function(){i(c)},0))}:"msSaveOrOpenBlob"in navigator?function(e,n,r){if(n=n||e.name||"download","string"!=typeof e)navigator.msSaveOrOpenBlob(t(e,r),n);else if(a(e))o(e,n,r);else{var s=document.createElement("a");s.href=e,s.target="_blank",setTimeout(function(){i(s)})}}:function(e,t,n,a){if(a=a||open("","_blank"),a&&(a.document.title=a.document.body.innerText="downloading..."),"string"==typeof e)return o(e,t,n);var i="application/octet-stream"===e.type,r=/constructor/i.test(s.HTMLElement)||s.safari,f=/CriOS\/[\d]+/.test(navigator.userAgent);if((f||i&&r||c)&&"undefined"!=typeof FileReader){var u=new FileReader;u.onloadend=function(){var e=u.result;e=f?e:e.replace(/^data:[^;]*;/,"data:attachment/file;"),a?a.location.href=e:location=e,a=null},u.readAsDataURL(e)}else{var l=s.URL||s.webkitURL,d=l.createObjectURL(e);a?a.location=d:location.href=d,a=null,setTimeout(function(){l.revokeObjectURL(d)},4e4)}});s.saveAs=f.saveAs=f,e.exports=f})}}]);
|
||||
//# sourceMappingURL=harvester-1.10.0-dev.umd.min.60.js.map
|
||||
@@ -0,0 +1,2 @@
|
||||
"use strict";(("undefined"!==typeof self?self:this)["webpackChunkharvester_1_10_0_dev"]=("undefined"!==typeof self?self:this)["webpackChunkharvester_1_10_0_dev"]||[]).push([[856],{13856:function(e,t,n){n.r(t),n.d(t,{default:function(){return f}});var r=n(9274);function s(e,t,n,s,o,c){const u=(0,r.resolveComponent)("ResourceDetail");return(0,r.openBlock)(),(0,r.createBlock)(u,{"component-testid":"cluster-manager-create"})}var o=n(97867),c={name:"ClusterResourceCreate",components:{ResourceDetail:o.A}},u=n(47433);const a=(0,u.A)(c,[["render",s]]);var f=a}}]);
|
||||
//# sourceMappingURL=harvester-1.10.0-dev.umd.min.856.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"harvester-1.10.0-dev.umd.min.856.js","mappings":"uWAUEA,EAAAA,EAAAA,aAA4DC,EAAA,CAA5C,mBAAiB,0B,gBAPnC,GACEC,KAAY,wBACZC,WAAY,CAAEC,eAAcA,EAAAA,I,WCA9B,MAAMC,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAASC,KAEpE,O","sources":["webpack://harvester-1.10.0-dev/../../node_modules/@rancher/shell/pages/c/_cluster/_product/_resource/create.vue","webpack://harvester-1.10.0-dev/../../node_modules/@rancher/shell/pages/c/_cluster/_product/_resource/create.vue?41a9"],"sourcesContent":["<script>\nimport ResourceDetail from '@shell/components/ResourceDetail';\n\nexport default {\n name: 'ClusterResourceCreate',\n components: { ResourceDetail },\n};\n</script>\n\n<template>\n <ResourceDetail component-testid=\"cluster-manager-create\" />\n</template>\n","import { render } from \"./create.vue?vue&type=template&id=60b40cbd\"\nimport script from \"./create.vue?vue&type=script&lang=js\"\nexport * from \"./create.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../../../../../vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__"],"names":["_createBlock","_component_ResourceDetail","name","components","ResourceDetail","__exports__","render"],"sourceRoot":""}
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.1.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#3D98D3;}
|
||||
</style>
|
||||
<path class="st0" d="M44.5300789,20.6782227c-0.1426773-0.6309566-0.6984367-1.0951176-1.3626976-1.0951176
|
||||
c-0.1240196,0-0.244236,0.0162106-0.3586922,0.046484l0.0096703-0.0022469
|
||||
c-0.3308601,0.0887699-0.7106476,0.1397476-1.1024437,0.1397476c-2.440136,0-4.4182625-1.9781246-4.4182625-4.4182625
|
||||
c0-1.2042961,0.481739-2.296093,1.2631836-3.092968l-0.0006828,0.0006838
|
||||
c0.2468758-0.2515621,0.3993149-0.5965824,0.3993149-0.9772463c0-0.4067383-0.1740227-0.7728519-0.4516602-1.027832
|
||||
l-0.0009766-0.0009766c-2.0785141-1.9058599-4.5794945-3.3877935-7.3433609-4.2872076l-0.1422844-0.0400391
|
||||
c-0.125391-0.0409179-0.2697258-0.0645504-0.4197273-0.0645504c-0.6379871,0-1.1758804,0.4281249-1.342186,1.012598
|
||||
l-0.0023422,0.0097651c-0.5352535,1.8808599-2.2378902,3.234961-4.2569351,3.234961s-3.7215824-1.3541994-4.2493153-3.2038088
|
||||
l-0.007618-0.0311522c-0.1687489-0.5944333-0.7067375-1.0225587-1.344532-1.0225587
|
||||
c-0.1499023,0-0.2942371,0.023633-0.4295902,0.0673828l0.0098629-0.0028319
|
||||
c-2.9060535,0.9396482-5.4071283,2.4213872-7.5004873,4.3408208l0.0149412-0.0134773
|
||||
c-0.2786131,0.2559576-0.4527349,0.6220713-0.4527349,1.0288086c0,0.3805666,0.152441,0.7255859,0.3995123,0.9773436
|
||||
l-0.0001955-0.0001945c0.7806644,0.7961903,1.2625008,1.8879881,1.2625008,3.0922852
|
||||
c0,2.440136-1.9781246,4.4182606-4.4182615,4.4182606c-0.3916993,0-0.7715821-0.0509758-1.1333003-0.1466789l0.0308595,0.0069332
|
||||
c-0.104785-0.0281239-0.2249026-0.0443344-0.3489256-0.0443344c-0.6641603,0-1.2200193,0.4640617-1.3608398,1.085741
|
||||
l-0.0017581,0.0092773c-0.2987304,1.2988281-0.4699221,2.7902355-0.4699221,4.3217773
|
||||
c0,1.5315456,0.1711912,3.0228539,0.4955082,4.4562492l-0.0255861-0.1344738
|
||||
c0.1426754,0.6309566,0.6984377,1.0951157,1.3625979,1.0951157c0.124023,0,0.2442384-0.0162086,0.3586912-0.0464859
|
||||
l-0.0097656,0.0021496c0.3308592-0.0887699,0.710742-0.1397457,1.1025391-0.1397457
|
||||
c2.4401369,0,4.4183598,1.9781265,4.4183598,4.4182625c0,1.2042961-0.4818354,2.296093-1.2631836,3.0930672l0.0006838-0.0006828
|
||||
c-0.2468748,0.2514648-0.3993158,0.5965843-0.3993158,0.9772453c0,0.4067383,0.1740236,0.77285,0.4517584,1.0279274
|
||||
l0.0009766,0.0009804c2.078516,1.9058571,4.5794926,3.3876953,7.343359,4.2872047l0.1422844,0.0400391
|
||||
c0.1254883,0.0410194,0.2697258,0.0645523,0.4197273,0.0645523c0.6378899,0,1.1758785-0.4281235,1.3421879-1.0126953
|
||||
l0.0023441-0.009861c0.5352535-1.880764,2.2379875-3.2349625,4.2568359-3.2349625s3.7216797,1.3541985,4.2493153,3.2038078
|
||||
l0.007618,0.0311546c0.1687489,0.5944328,0.7067375,1.0224609,1.3446293,1.0224609
|
||||
c0.1498051,0,0.2941399-0.0236359,0.4293957-0.0673866l-0.0098648,0.002739
|
||||
c2.9061527-0.9396515,5.4072247-2.4214859,7.5004864-4.3408241l-0.014843,0.0134773
|
||||
c0.278614-0.2559547,0.4527321-0.6220703,0.4527321-1.0288086c0-0.3805656-0.1523438-0.7255859-0.3995132-0.9774399
|
||||
l0.0001984,0.0001945c-0.7806625-0.7962875-1.2625008-1.887989-1.2625008-3.0922852
|
||||
c0-2.440136,1.9781265-4.4182625,4.4182625-4.4182625c0.3917961,0,0.7715836,0.0509758,1.1333008,0.1466808l-0.0307617-0.0069351
|
||||
c0.1046867,0.0281239,0.2249031,0.0443363,0.3490257,0.0443363c0.6641579,0,1.2200203-0.4640636,1.3608398-1.085743
|
||||
l0.0017586-0.0093765c0.2986336-1.2988262,0.4699211-2.7902336,0.4699211-4.3217773s-0.1711884-3.02285-0.4955063-4.4562492
|
||||
l0.0255852,0.1344719L44.5300789,20.6782227z M25,31.25c-3.4517593,0-6.25-2.7982407-6.25-6.25s2.7982407-6.25,6.25-6.25
|
||||
s6.25,2.7982407,6.25,6.25l0,0C31.25,28.4517593,28.4517593,31.25,25,31.25L25,31.25z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.7 KiB |
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.1.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 51 51" style="enable-background:new 0 0 51 51;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#3D98D3;}
|
||||
</style>
|
||||
<g>
|
||||
<path class="st0" d="M7.5491395,26.9503384c0-10.7451725,7.6761146-18.2928314,19.0600967-18.2928314
|
||||
c10.4466,0,16.8416233,5.3725863,16.8416233,14.7533474c0,6.4384232-2.8989372,11.1288033-8.2281265,11.1288033
|
||||
c-1.9615593,0-3.9231167-1.0241776-4.6070576-2.6437626c-1.3644123,1.7046452-3.6662045,2.6437626-6.1832485,2.6437626
|
||||
c-4.3918076,0-7.8010998-2.3451881-7.8010998-7.6327171c0-5.7978802,3.7946606-10.2330837,9.9779091-10.2330837
|
||||
c2.4302483,0,5.2423935,0.597147,7.1206303,1.6213226l-0.5554886,9.7209969
|
||||
c-0.1284561,1.7897034,0.725605,2.6854248,1.919899,2.6854248c2.2601318,0,3.0690575-2.942337,3.0690575-7.2907467
|
||||
c0-6.9505119-3.7529984-10.1480255-11.5540981-10.1480255c-8.1448059,0-13.7725687,4.9889545-13.7725687,13.6875095
|
||||
c0,7.2907467,4.4751291,10.9152889,12.4914789,10.9152889c2.4753838,0,5.2042046-0.2985725,7.676115-1.1526337v4.3918076
|
||||
c-2.2601318,0.8540611-4.777174,1.2376938-7.676115,1.2376938C14.7114305,42.342495,7.5491395,36.9265099,7.5491395,26.9503384z
|
||||
M28.442337,27.1204548l0.3402348-5.8412762c-0.597147-0.2551765-1.4477329-0.3836327-2.3017921-0.3836327
|
||||
c-2.6455002,0-4.4786015,2.34519-4.4786015,5.6277618c0,2.5587063,1.0241756,3.7946606,2.9440727,3.7946606
|
||||
C27.2480431,30.3179684,28.3138809,28.8684978,28.442337,27.1204548z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 640 640" style="enable-background:new 0 0 640 640;" xml:space="preserve">
|
||||
<path d="M432.4,135.1c38,0,76,5.9,112.6,17.8c0,98.2,0,196.4,0,294.6c-36.6-11.9-74.6-17.8-112.6-17.8s-76,5.9-112.6,17.8l0,0
|
||||
c-36.6-11.9-74.6-17.8-112.6-17.8s-76,5.9-112.6,17.8c0-98.2,0-196.4,0-294.6c36.6-11.9,74.6-17.8,112.6-17.8s76,5.9,112.6,17.8l0,0
|
||||
C356.4,141.1,394.4,135.1,432.4,135.1z M432.4,105.1c-38.2,0-76.1,5.5-112.6,16.4c-36.6-10.9-74.4-16.4-112.6-16.4
|
||||
c-41.5,0-82.5,6.5-121.9,19.3l-20.7,6.7v357.8l39.3-12.8c33.4-10.9,68.2-16.4,103.4-16.4s69.9,5.5,103.4,16.4l9.3,3l9.3-3
|
||||
c33.4-10.9,68.2-16.4,103.4-16.4s69.9,5.5,103.4,16.4l39.3,12.8V131.2l-20.7-6.7C514.9,111.6,473.9,105.1,432.4,105.1L432.4,105.1
|
||||
L432.4,105.1z"/>
|
||||
<path d="M320,534.9l-3.9-1.3c-35.1-11.4-71.7-17.2-108.7-17.2s-73.6,5.8-108.8,17.2l-7.7-23.8c37.7-12.2,76.9-18.5,116.5-18.5
|
||||
c38.3,0,76.1,5.8,112.6,17.2c36.5-11.4,74.4-17.2,112.6-17.2c39.6,0,78.8,6.2,116.5,18.5l-7.7,23.8c-35.2-11.4-71.8-17.2-108.8-17.2
|
||||
s-73.6,5.8-108.8,17.2L320,534.9L320,534.9z"/>
|
||||
<path d="M307.5,148h25v311h-25V148z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g fill="#777" transform="translate(0, 0) scale(1, 1) "><path d="M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z"/></g></svg>
|
||||
|
After Width: | Height: | Size: 430 B |
@@ -0,0 +1,48 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 60 60" style="enable-background:new 0 0 60 60;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:url(#SVGID_1_);}
|
||||
</style>
|
||||
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="-969.9529" y1="487.6317" x2="-969.9529" y2="470.7364" gradientTransform="matrix(2.7039 0 0 2.7039 2652.6287 -1252.246)">
|
||||
<stop offset="0" style="stop-color:#FFF200"/>
|
||||
<stop offset="1" style="stop-color:#F15A29"/>
|
||||
</linearGradient>
|
||||
<path class="st0" d="M53,27.1c-0.1-0.8-0.2-1.8-0.5-2.9c-0.3-1.1-0.7-2.2-1.3-3.4c-0.6-1.2-1.4-2.5-2.4-3.7c-0.4-0.5-0.8-1-1.3-1.4
|
||||
c0.7-2.8-0.9-5.2-0.9-5.2c-2.7-0.2-4.4,0.8-5,1.3c-0.1,0-0.2-0.1-0.3-0.1c-0.5-0.2-0.9-0.4-1.4-0.5c-0.5-0.2-1-0.3-1.5-0.4
|
||||
c-0.5-0.1-1-0.2-1.5-0.3c-0.1,0-0.2,0-0.3,0C35.3,6.6,32,5,32,5c-3.8,2.4-4.5,5.7-4.5,5.7s0,0.1,0,0.2C27.2,11,27,11,26.8,11.1
|
||||
c-0.3,0.1-0.6,0.2-0.9,0.3c-0.3,0.1-0.6,0.2-0.9,0.3c-0.6,0.2-1.1,0.5-1.7,0.8c-0.5,0.3-1.1,0.6-1.6,1c-0.1,0-0.1-0.1-0.1-0.1
|
||||
c-5.2-2-9.8,0.4-9.8,0.4c-0.4,5.5,2.1,9,2.6,9.7c-0.1,0.3-0.2,0.7-0.3,1c-0.4,1.3-0.7,2.5-0.8,3.9c0,0.2,0,0.4-0.1,0.6
|
||||
C8.4,31.4,7,36.3,7,36.3c4,4.6,8.7,4.9,8.7,4.9c0,0,0,0,0,0c0.6,1.1,1.3,2.1,2.1,3c0.3,0.4,0.7,0.8,1,1.1C17.3,49.5,19,53,19,53
|
||||
c4.5,0.2,7.4-2,8-2.4c0.4,0.2,0.9,0.3,1.4,0.4c1.4,0.4,2.8,0.6,4.2,0.6c0.4,0,0.7,0,1.1,0h0.2l0.1,0l0.2,0l0.2,0l0,0
|
||||
c2.1,3,5.8,3.4,5.8,3.4c2.6-2.8,2.8-5.5,2.8-6.1l0,0c0,0,0,0,0,0c0,0,0-0.1,0-0.1l0,0c0,0,0-0.1,0-0.1c0.6-0.4,1.1-0.8,1.6-1.2
|
||||
c1.1-1,2-2,2.7-3.2c0.1-0.1,0.1-0.2,0.2-0.3c3,0.2,5.1-1.8,5.1-1.8c-0.5-3.1-2.3-4.6-2.6-4.9l0,0c0,0,0,0,0,0c0,0,0,0,0,0l0,0
|
||||
c0,0,0,0-0.1,0c0-0.2,0-0.4,0-0.6c0-0.3,0-0.7,0-1v-0.2v-0.1V35c0-0.1,0-0.1,0-0.1l0-0.2l0-0.3c0-0.1,0-0.2,0-0.3c0-0.1,0-0.2,0-0.3
|
||||
l0-0.3l0-0.3c0-0.3-0.1-0.7-0.2-1c-0.3-1.3-0.8-2.6-1.5-3.7c-0.7-1.1-1.5-2.2-2.5-3c-1-0.9-2-1.5-3.2-2c-1.1-0.5-2.3-0.8-3.5-1
|
||||
c-0.6-0.1-1.2-0.1-1.8-0.1l-0.2,0h-0.1c0,0-0.1,0-0.1,0l-0.1,0l-0.2,0c-0.1,0-0.2,0-0.2,0c-0.3,0-0.6,0.1-0.9,0.1
|
||||
c-1.2,0.2-2.3,0.6-3.3,1.2c-1,0.6-1.8,1.3-2.5,2.2c-0.7,0.8-1.2,1.8-1.6,2.7c-0.4,1-0.6,1.9-0.6,2.9c0,0.2,0,0.5,0,0.7
|
||||
c0,0.1,0,0.1,0,0.2l0,0.2c0,0.1,0,0.2,0,0.3c0,0.5,0.1,0.9,0.3,1.4c0.3,0.9,0.7,1.7,1.2,2.4c0.5,0.7,1.1,1.3,1.8,1.7
|
||||
c0.6,0.4,1.3,0.8,2,1s1.4,0.3,2,0.3c0.1,0,0.2,0,0.2,0c0,0,0.1,0,0.1,0c0,0,0.1,0,0.1,0c0.1,0,0.1,0,0.2,0c0,0,0,0,0.1,0l0.1,0
|
||||
c0,0,0.1,0,0.1,0c0.1,0,0.2,0,0.2,0c0.1,0,0.2,0,0.2,0c0.1,0,0.3-0.1,0.4-0.1c0.3-0.1,0.5-0.2,0.8-0.3s0.5-0.3,0.7-0.4
|
||||
c0.1,0,0.1-0.1,0.2-0.1c0.2-0.2,0.3-0.5,0.1-0.7c-0.2-0.2-0.4-0.2-0.6-0.1c-0.1,0-0.1,0.1-0.2,0.1c-0.2,0.1-0.4,0.2-0.6,0.2
|
||||
c-0.2,0.1-0.4,0.1-0.6,0.2c-0.1,0-0.2,0-0.3,0c-0.1,0-0.1,0-0.2,0c-0.1,0-0.1,0-0.2,0s-0.1,0-0.2,0c-0.1,0-0.1,0-0.2,0c0,0,0,0,0,0
|
||||
h0l0,0c0,0-0.1,0-0.1,0c-0.1,0-0.1,0-0.2,0c-0.5-0.1-1-0.2-1.5-0.4c-0.5-0.2-1-0.5-1.4-0.9c-0.4-0.4-0.8-0.8-1.1-1.4
|
||||
c-0.3-0.5-0.5-1.1-0.6-1.7c0-0.3-0.1-0.6-0.1-0.9c0-0.1,0-0.2,0-0.3c0,0,0,0,0,0v0l0-0.1c0,0,0-0.1,0-0.1c0-0.2,0-0.3,0.1-0.5
|
||||
c0.2-1.3,0.9-2.6,1.9-3.6c0.3-0.2,0.5-0.5,0.8-0.7c0.3-0.2,0.6-0.4,0.9-0.5c0.3-0.2,0.7-0.3,1-0.4c0.4-0.1,0.7-0.2,1.1-0.2
|
||||
c0.2,0,0.4,0,0.5,0c0,0,0.1,0,0.1,0l0.1,0l0.1,0c0,0,0,0,0,0h0l0.1,0c0.4,0,0.8,0.1,1.2,0.2c0.8,0.2,1.5,0.5,2.2,0.8
|
||||
c1.4,0.8,2.6,2,3.3,3.5c0.4,0.7,0.6,1.5,0.8,2.3c0,0.2,0.1,0.4,0.1,0.6l0,0.2l0,0.2c0,0.1,0,0.1,0,0.2c0,0,0,0.1,0,0.1v0.1l0,0.2
|
||||
c0,0.1,0,0.3,0,0.4c0,0.2,0,0.4-0.1,0.7c0,0.2-0.1,0.4-0.1,0.7c0,0.2-0.1,0.4-0.1,0.7c-0.1,0.4-0.2,0.9-0.4,1.3
|
||||
c-0.3,0.8-0.8,1.6-1.3,2.4c-1.1,1.5-2.5,2.6-4.2,3.4c-0.8,0.4-1.7,0.6-2.6,0.8c-0.4,0.1-0.9,0.1-1.4,0.1l-0.1,0h-0.1H34h-0.2h-0.1
|
||||
c0.1,0,0,0,0,0h0c-0.2,0-0.5,0-0.7,0c-1-0.1-1.9-0.2-2.8-0.5c-0.9-0.3-1.8-0.6-2.7-1.1c-1.7-0.9-3.2-2.2-4.4-3.7
|
||||
c-0.6-0.7-1.1-1.6-1.6-2.4s-0.8-1.7-1-2.6c-0.2-0.9-0.4-1.8-0.5-2.8l0-0.2l0,0v0v-0.1l0-0.2v0v-0.1v-0.1l0-0.2v0c0,0,0,0,0,0v-0.1
|
||||
c0-0.1,0-0.2,0-0.3c0-0.5,0.1-0.9,0.1-1.4c0.1-0.5,0.1-1,0.2-1.4s0.2-0.9,0.3-1.4c0.3-0.9,0.6-1.8,1-2.7c0.8-1.7,1.8-3.2,3-4.4
|
||||
c0.3-0.3,0.6-0.6,1-0.8c0.3-0.3,0.7-0.5,1-0.7c0.4-0.2,0.7-0.4,1.1-0.6c0.2-0.1,0.4-0.2,0.6-0.3c0.1,0,0.2-0.1,0.3-0.1
|
||||
c0.1,0,0.2-0.1,0.3-0.1c0.4-0.2,0.8-0.3,1.2-0.4c0.1,0,0.2-0.1,0.3-0.1c0.1,0,0.2-0.1,0.3-0.1C30.8,16,31,16,31.3,16
|
||||
c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2,0,0.3-0.1l0.2,0l0.2,0c0.1,0,0.2,0,0.3,0c0.1,0,0.2,0,0.4,0c0.1,0,0.3,0,0.4,0
|
||||
c0.1,0,0.2,0,0.2,0l0.2,0l0.1,0l0.1,0c0.1,0,0.2,0,0.4,0l0.2,0c0,0,0.1,0,0,0h0l0.1,0c0.1,0,0.2,0,0.3,0c0.4,0,0.8,0,1.2,0
|
||||
c0.8,0,1.6,0.1,2.3,0.3c1.5,0.3,3,0.8,4.3,1.4c1.3,0.6,2.5,1.4,3.5,2.3c0.1,0.1,0.1,0.1,0.2,0.2c0.1,0.1,0.1,0.1,0.2,0.2
|
||||
c0.1,0.1,0.2,0.2,0.4,0.3s0.2,0.2,0.3,0.3c0.1,0.1,0.2,0.2,0.3,0.3c0.4,0.5,0.8,0.9,1.2,1.4c0.7,0.9,1.3,1.9,1.8,2.7
|
||||
c0,0.1,0.1,0.1,0.1,0.2c0,0.1,0.1,0.1,0.1,0.2c0.1,0.1,0.1,0.2,0.2,0.3c0,0.1,0.1,0.2,0.1,0.3c0,0.1,0.1,0.2,0.1,0.3
|
||||
c0.2,0.4,0.3,0.8,0.5,1.2c0.2,0.6,0.4,1.1,0.5,1.6c0,0.2,0.2,0.3,0.4,0.3c0.2,0,0.4-0.2,0.4-0.4C53,28.3,53,27.7,53,27.1z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.9 KiB |
@@ -0,0 +1 @@
|
||||
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 194.25619 159.08912"><defs><style>.cls-1{fill:#00a383;}.cls-2{fill:#fff;}</style></defs><rect class="cls-1" width="194.25619" height="159.08912" rx="20.56068"/><path class="cls-2" d="M180.4487,81.46673a4.97417,4.97417,0,0,0,.25287-.81463c.01635-.07209.0296-.14435.04284-.21759a4.98972,4.98972,0,0,0,0-1.78c-.01324-.07324-.02649-.14551-.04284-.21759a4.97458,4.97458,0,0,0-.25287-.81464c-.01587-.03815-.03748-.07269-.05432-.11035a4.9932,4.9932,0,0,0-.23017-.46741l-19.7666-34.2373a4.96949,4.96949,0,0,0-.28741-.42926c-.02527-.03491-.04535-.07251-.07154-.10681a4.97881,4.97881,0,0,0-.57611-.62305c-.05584-.05176-.11346-.10089-.17206-.15033a5.00763,5.00763,0,0,0-.71991-.51843l-.00305-.0022-.00274-.00122a5.00234,5.00234,0,0,0-.80945-.36469c-.07269-.02624-.14459-.05175-.2179-.0744a4.97937,4.97937,0,0,0-.82483-.18683c-.04693-.0061-.0935-.00457-.14044-.00927a4.98006,4.98006,0,0,0-.50464-.03351H116.53335a4.96842,4.96842,0,0,0-.504.03345c-.0476.00482-.09478.00329-.14233.00946a4.97566,4.97566,0,0,0-.82226.18627c-.07447.023-.14753.049-.22138.07563a5.00058,5.00058,0,0,0-.80719.36383l-.00281.00128-.00305.0022a5.00874,5.00874,0,0,0-.71991.51843c-.05859.04944-.11615.09845-.172.15027a4.97536,4.97536,0,0,0-.57635.62335c-.026.034-.04584.07123-.07086.10584a4.98409,4.98409,0,0,0-.2879.43L93.88046,74.54449H79.278l13.99317-24.2373h6.4956a5,5,0,0,0,0-10H90.38443a5.0003,5.0003,0,0,0-4.33008,2.5L67.73111,74.54449h-14.602l13.99316-24.2373h6.49561a5,5,0,0,0,0-10H64.2355a5.00031,5.00031,0,0,0-4.33008,2.5L41.58218,74.54449H26.9797l13.99359-24.2373H47.4689a5,5,0,0,0,0-10H38.08658a5.00029,5.00029,0,0,0-4.33008,2.5L13.98941,77.04449a4.98206,4.98206,0,0,0-.22925.46594c-.01715.0384-.03912.07349-.05536.11243a4.974,4.974,0,0,0-.25183.81128c-.01691.07422-.03058.1485-.04413.22388a4.99817,4.99817,0,0,0-.089.88305l-.00036.00342.00036.00342a4.99828,4.99828,0,0,0,.089.88306c.01355.07538.02722.14966.04413.22387a4.97371,4.97371,0,0,0,.25183.81128c.01624.03894.03821.074.05536.11243a4.98084,4.98084,0,0,0,.22925.46594L33.7565,116.28131a5.00031,5.00031,0,0,0,4.33008,2.5H47.4689a5,5,0,1,0,0-10H40.97329L26.97976,84.54449H41.58218l18.32324,31.73682a5.00033,5.00033,0,0,0,4.33008,2.5h9.38233a5,5,0,0,0,0-10H67.12222L53.12912,84.54449h14.602l18.32324,31.73682a5.00032,5.00032,0,0,0,4.33008,2.5h9.38232a5,5,0,0,0,0-10h-6.4956L79.278,84.54449H93.88052l18.32276,31.73682a4.97193,4.97193,0,0,0,.28759.42944c.02521.03479.04517.07233.07135.10657a4.98039,4.98039,0,0,0,.57605.62311c.05591.05188.11371.10095.17237.15051a5.00138,5.00138,0,0,0,.71966.51825l.00305.0022c.02063.0119.04254.01953.0633.03112a4.99593,4.99593,0,0,0,.52386.25788c.15222.06329.30756.11084.46283.15808.051.0155.09961.037.15119.0509a4.96725,4.96725,0,0,0,1.29394.17292l.01508-.001h39.51379l.01508.001a4.96725,4.96725,0,0,0,1.29394-.17292c.05158-.01391.10016-.0354.15119-.0509.15527-.04724.3106-.09479.46282-.15808a4.99511,4.99511,0,0,0,.52387-.25788c.02075-.01159.04266-.01922.06329-.03112l.00312-.0022a5.00713,5.00713,0,0,0,.71856-.51733c.05939-.05011.11774-.09986.17432-.15229a4.97862,4.97862,0,0,0,.57458-.6214c.027-.03546.04773-.07415.0738-.11023a4.98327,4.98327,0,0,0,.2857-.42663l19.7666-34.23682a4.99182,4.99182,0,0,0,.23017-.4674C180.41122,81.53943,180.43283,81.50488,180.4487,81.46673Zm-24.38111,22.31452L150.2941,93.78094l5.33294-9.23645h11.54688ZM105.42776,84.54449h11.54706l5.33289,9.23633-5.77417,10.00061ZM116.5336,55.307l5.77411,10.00031-5.33295,9.23718H105.4277Zm14.43432,33.47382-5.333-9.23633,5.333-9.2373h10.666l5.333,9.2373-5.333,9.23633Zm10.666-28.47363H130.9678l-5.77392-10h22.2135ZM130.96786,98.78082h10.666l5.77362,10.00049H125.19375ZM155.6271,74.54449l-5.333-9.2373,5.77343-10L167.174,74.54449Z"/></svg>
|
||||
|
After Width: | Height: | Size: 3.7 KiB |
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<g id="icomoon-ignore">
|
||||
</g>
|
||||
<path d="M23,12.5c0,0,0-0.1,0-0.1c0,0,0,0,0,0c0-0.1,0-0.2,0-0.2c0,0,0,0,0,0c0,0,0-0.1,0-0.1c0,0,0,0,0,0c0,0,0,0,0-0.1l-2.6-4.5
|
||||
c0,0,0,0,0-0.1c0,0,0,0,0,0c0,0,0-0.1-0.1-0.1c0,0,0,0,0,0c0,0-0.1,0-0.1-0.1l0,0l0,0c0,0-0.1,0-0.1,0c0,0,0,0,0,0c0,0-0.1,0-0.1,0
|
||||
c0,0,0,0,0,0c0,0,0,0-0.1,0h-5.2c0,0,0,0-0.1,0c0,0,0,0,0,0c0,0-0.1,0-0.1,0c0,0,0,0,0,0c0,0-0.1,0-0.1,0l0,0l0,0c0,0-0.1,0-0.1,0.1
|
||||
c0,0,0,0,0,0c0,0-0.1,0.1-0.1,0.1c0,0,0,0,0,0c0,0,0,0,0,0.1l-2.4,4.2H9.7l1.8-3.2h0.9c0.4,0,0.7-0.3,0.7-0.7c0-0.4-0.3-0.7-0.7-0.7
|
||||
h-1.2c-0.2,0-0.5,0.1-0.6,0.3l-2.4,4.2H6.2l1.8-3.2h0.9c0.4,0,0.7-0.3,0.7-0.7c0-0.4-0.3-0.7-0.7-0.7H7.7c-0.2,0-0.5,0.1-0.6,0.3
|
||||
l-2.4,4.2H2.8l1.8-3.2h0.9c0.4,0,0.7-0.3,0.7-0.7S5.8,7.1,5.5,7.1H4.3C4,7.1,3.8,7.2,3.7,7.4l-2.6,4.5c0,0,0,0,0,0.1c0,0,0,0,0,0
|
||||
c0,0,0,0.1,0,0.1c0,0,0,0,0,0c0,0,0,0.1,0,0.1l0,0l0,0c0,0,0,0.1,0,0.1c0,0,0,0,0,0c0,0,0,0.1,0,0.1c0,0,0,0,0,0c0,0,0,0,0,0.1
|
||||
l2.6,4.5c0.1,0.2,0.3,0.3,0.6,0.3h1.2c0.4,0,0.7-0.3,0.7-0.7s-0.3-0.7-0.7-0.7H4.6l-1.8-3.2h1.9l2.4,4.2c0.1,0.2,0.3,0.3,0.6,0.3
|
||||
h1.2c0.4,0,0.7-0.3,0.7-0.7s-0.3-0.7-0.7-0.7H8.1l-1.8-3.2h1.9l2.4,4.2c0.1,0.2,0.3,0.3,0.6,0.3h1.2c0.4,0,0.7-0.3,0.7-0.7
|
||||
c0-0.4-0.3-0.7-0.7-0.7h-0.9l-1.8-3.2h1.9l2.4,4.2c0,0,0,0,0,0.1c0,0,0,0,0,0c0,0,0,0.1,0.1,0.1c0,0,0,0,0,0c0,0,0.1,0,0.1,0.1l0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0.1,0c0,0,0,0,0.1,0c0,0,0,0,0,0c0.1,0,0.1,0,0.2,0l0,0l5.2,0c0.1,0,0.1,0,0.2,0c0,0,0,0,0,0c0,0,0,0,0.1,0
|
||||
c0,0,0,0,0.1,0c0,0,0,0,0,0l0,0c0,0,0.1,0,0.1-0.1c0,0,0,0,0,0c0,0,0.1-0.1,0.1-0.1c0,0,0,0,0,0c0,0,0,0,0-0.1L23,12.5
|
||||
C22.9,12.5,22.9,12.5,23,12.5C22.9,12.5,22.9,12.5,23,12.5L23,12.5z M19.7,15.4L19,14.1l0.7-1.2h1.5L19.7,15.4L19.7,15.4z
|
||||
M13.1,12.9h1.5l0.7,1.2l-0.8,1.3L13.1,12.9z M14.6,9l0.8,1.3l-0.7,1.2h-1.5L14.6,9L14.6,9z M16.5,13.4l-0.7-1.2l0.7-1.2h1.4
|
||||
l0.7,1.2l-0.7,1.2H16.5z M17.9,9.7h-1.4l-0.8-1.3h2.9L17.9,9.7L17.9,9.7z M16.5,14.8h1.4l0.8,1.3h-2.9L16.5,14.8L16.5,14.8z
|
||||
M19.7,11.6L19,10.4L19.7,9l1.5,2.5L19.7,11.6L19.7,11.6z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_7" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 60 60" style="enable-background:new 0 0 60 60;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#25C151;}
|
||||
.st1{fill:#FFFFFF;}
|
||||
</style>
|
||||
<g>
|
||||
<path class="st0" d="M51.3,55H8.7c-2,0-3.7-1.7-3.7-3.7V8.7C5,6.7,6.7,5,8.7,5h42.6c2,0,3.7,1.7,3.7,3.7v42.6
|
||||
C55,53.3,53.3,55,51.3,55z"/>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st1" d="M41.4,38.4C41.4,38.4,41.4,38.4,41.4,38.4l-5.6,0c-2,0-3.2-0.8-3.8-1.5c-1.2-1.4-1.3-3.1-1.2-3.6v-6.7
|
||||
c0-1.9,0.8-3.1,1.5-3.7c1.4-1.3,3.2-1.3,3.6-1.3h7v-6.1h3.6v17.9c0,1.8-0.8,3-1.4,3.6C43.6,38.3,41.8,38.4,41.4,38.4z M34.3,33.5
|
||||
c0,0.2,0,0.7,0.3,1c0.3,0.3,0.8,0.3,1.2,0.3h5.6c1.4,0,1.4-1.1,1.4-1.4v-8.3l-7.2,0c0,0,0,0,0,0c-0.2,0-0.7,0.1-1,0.3
|
||||
c-0.2,0.2-0.3,0.6-0.3,1.1L34.3,33.5z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st1" d="M17.2,44.5h-3.6V26.5c0-1.8,0.8-3,1.4-3.6c1.4-1.4,3.3-1.4,3.6-1.4h5.6c2,0,3.2,0.8,3.8,1.5
|
||||
c1.3,1.4,1.3,3.1,1.2,3.6v6.8c0,1.9-0.8,3.1-1.5,3.7c-1.4,1.3-3.2,1.3-3.6,1.3h-7V44.5z M24.4,34.8c0.2,0,0.7-0.1,1-0.3
|
||||
c0.2-0.2,0.3-0.6,0.3-1.1l0-6.9c0-0.2,0-0.7-0.3-1c-0.3-0.3-0.8-0.3-1.2-0.3h-5.6c-1.4,0-1.4,1.1-1.4,1.4v8.3L24.4,34.8z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 60 60" style="enable-background:new 0 0 60 60;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#E6532B;}
|
||||
</style>
|
||||
<path id="path4486" class="st0" d="M30,5C16.2,5,5,16.2,5,30c0,13.8,11.2,25,25,25s25-11.2,25-25C55,16.2,43.8,5,30,5z M30,51.8
|
||||
c-3.9,0-7.1-2.6-7.1-5.9h14.2C37.1,49.2,33.9,51.8,30,51.8z M41.7,44H18.3v-4.3h23.5L41.7,44L41.7,44z M41.7,37.5H18.3
|
||||
c-0.1-0.1-0.2-0.2-0.2-0.3c-2.4-2.9-3-4.4-3.5-6c0-0.1,2.9,0.6,5,1.1c0,0,1.1,0.2,2.6,0.5c-1.5-1.8-2.4-4-2.4-6.3
|
||||
c0-5,3.8-9.4,2.5-12.9c1.3,0.1,2.8,2.8,2.9,7.1c1.4-2,2-5.6,2-7.8c0-2.3,1.5-5,3-5.1c-1.4,2.2,0.3,4.1,1.9,8.9
|
||||
c0.6,1.8,0.5,4.8,0.9,6.7c0.1-3.9,0.8-9.7,3.3-11.7c-1.1,2.5,0.2,5.6,1,7.1c1.4,2.4,2.2,4.3,2.2,7.7c0,2.3-0.9,4.5-2.3,6.2
|
||||
c1.7-0.3,2.8-0.6,2.8-0.6l5.4-1C45.4,31.2,44.7,34.4,41.7,37.5z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.1.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#36C5F0;}
|
||||
.st1{fill-rule:evenodd;clip-rule:evenodd;fill:#2EB67D;}
|
||||
.st2{fill-rule:evenodd;clip-rule:evenodd;fill:#ECB22E;}
|
||||
.st3{fill-rule:evenodd;clip-rule:evenodd;fill:#E01E5A;}
|
||||
</style>
|
||||
<g>
|
||||
<path class="st0" d="M19.5139961,5.3530526c-2.2111454,0.0016346-4.0006533,1.7960448-3.9990196,4.0071902
|
||||
c-0.0016336,2.2111444,1.7895088,4.0055552,4.0006523,4.0071888h4.0006542V9.3618765
|
||||
C23.5179176,7.1507316,21.7267761,5.3563209,19.5139961,5.3530526C19.5156288,5.3530526,19.5156288,5.3530526,19.5139961,5.3530526
|
||||
M19.5139961,16.0410709H8.8488569c-2.2111449,0.0016346-4.0022864,1.7960453-4.0006523,4.0071907
|
||||
c-0.0032687,2.2111435,1.7878733,4.0055561,3.9990187,4.0088234h10.6667728
|
||||
c2.2111454-0.0016346,4.0022869-1.7960453,4.0006523-4.0071907C23.516283,17.8371162,21.7251415,16.0427055,19.5139961,16.0410709
|
||||
L19.5139961,16.0410709z"/>
|
||||
<path class="st1" d="M44.8481941,20.0482616c0.0016365-2.2111454-1.789505-4.0055561-4.0006523-4.0071907
|
||||
c-2.2111473,0.0016346-4.0022888,1.7960453-4.0006523,4.0071907v4.0088234h4.0006523
|
||||
C43.0586891,24.0554504,44.8498268,22.2610397,44.8481941,20.0482616z M34.1814232,20.0482616V9.3602428
|
||||
c0.0016327-2.2095108-1.7878723-4.0039215-3.9990177-4.0071898c-2.2111454,0.0016341-4.0022869,1.7960443-4.0006542,4.0071898
|
||||
v10.6880188c-0.0032673,2.2111435,1.7878742,4.0055561,3.9990177,4.0088234
|
||||
C32.3919144,24.0554504,34.1830559,22.2610397,34.1814232,20.0482616z"/>
|
||||
<path class="st2" d="M30.1807671,45.4331207c2.2111473-0.0016365,4.0022888-1.7960434,4.0006561-4.0071869
|
||||
c0.0016327-2.2111473-1.7895088-4.005558-4.0006561-4.0071907h-4.0006523v4.0071907
|
||||
C26.1784801,43.6354408,27.9696217,45.4298553,30.1807671,45.4331207z M30.1807671,34.7434692h10.6667747
|
||||
c2.2111473-0.0016327,4.002285-1.7960434,4.0006523-4.0071888c0.0032692-2.2111454-1.7878685-4.0055561-3.9990158-4.0088253
|
||||
H30.1824055c-2.2111454,0.0016346-4.0022869,1.7960453-4.0006542,4.0071888
|
||||
c-0.0016327,2.2127819,1.7878742,4.0071888,3.9990177,4.0088253H30.1807671z"/>
|
||||
<path class="st3" d="M4.8482037,30.7362785c-0.0016341,2.2111473,1.7895079,4.0055542,4.0006533,4.0071869
|
||||
c2.2111444-0.0016327,4.0022869-1.7960434,4.0006523-4.0071869v-4.0071888H8.8488569
|
||||
C6.6377115,26.7307224,4.8465695,28.525135,4.8482037,30.7362785z M15.5149765,30.7362785v10.6880188
|
||||
c-0.0032682,2.2111435,1.7878742,4.005558,3.9990196,4.0088234c2.2111454-0.0016365,4.0022869-1.7960434,4.0006523-4.0071869
|
||||
V30.7395477c0.0032692-2.2111454-1.7878723-4.0055542-3.9990177-4.0088253c-2.2127781,0-4.0022869,1.7944126-4.0006533,4.0055561
|
||||
c0,0,0,0.0016327,0,0"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.1.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 48 48" style="enable-background:new 0 0 48 48;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#37474F;}
|
||||
.st1{fill:#E91E63;}
|
||||
</style>
|
||||
<path class="st0" d="M35,29c-1.4691162,0-2.7455444,0.8115845-3.44104,2H20v2c0,3.2999878-2.7000122,6-6,6s-6-2.7000122-6-6
|
||||
c0-2.7000122,1.9000244-5.0999756,4.5-5.7999878l-1-3.9000244C7.0999756,24.5,4,28.4000244,4,33c0,5.5,4.5,10,10,10
|
||||
c4.7999878,0,8.9000244-3.4000244,9.7999878-8H31.55896c0.6954956,1.1884155,1.9719238,2,3.44104,2c2.2000122,0,4-1.7999878,4-4
|
||||
S37.2000122,29,35,29z"/>
|
||||
<path class="st0" d="M35.0999756,23c-1,0-2,0.2000122-3,0.5l-3.6618652-6.4946289C28.7860107,16.4129028,29,15.7330933,29,15
|
||||
c0-2.2000122-1.7999878-4-4-4s-4,1.7999878-4,4c0,2.1869507,1.7796631,3.9749756,3.9619141,3.9961548l5.4381104,9.803833
|
||||
l1.6999512-1C33,27.4000244,34,27.0999756,35,27.0999756c3.2999878,0,6,2.7000122,6,6c0,3.3000488-2.7000122,6-6,6
|
||||
c-1.7999878,0-3.5999756-0.8999634-4.7000122-2.2999878l-3.0999756,2.5C29.0999756,41.5999756,32,43,35,43
|
||||
c5.5,0,10.0999756-4.5,10.0999756-10S40.5999756,23,35.0999756,23z"/>
|
||||
<path class="st1" d="M25,5c-5.5,0-10,4.5-10,10c0,2.7999878,1.2000122,5.4000244,3.2000122,7.2999878l-4.0825195,6.7119751
|
||||
C14.0775757,29.0107422,14.0402222,29,14,29c-2.2000122,0-4,1.7999878-4,4s1.7999878,4,4,4s4-1.7999878,4-4
|
||||
c0-0.6972656-0.1966553-1.3445435-0.5137329-1.9168701l6.1137085-9.9831543l-1.6999512-1C20.0999756,19,19,17.0999756,19,15
|
||||
c0-3.2999878,2.7000122-6,6-6s6,2.7000122,6,6c0,0.5-0.0999756,1-0.2000122,1.5l3.9000244,1
|
||||
C34.9000244,16.7000122,35,15.9000244,35,15C35,9.5,30.5,5,25,5z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"name": "harvester",
|
||||
"description": "Rancher UI Extension for Harvester",
|
||||
"version": "1.10.0-dev",
|
||||
"private": false,
|
||||
"rancher": true,
|
||||
"icon": "https://raw.githubusercontent.com/harvester/harvester-ui-extension/main/pkg/harvester/icon.svg",
|
||||
"engines": {
|
||||
"node": ">=24.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vue/cli-plugin-babel": "~5.0.9",
|
||||
"@vue/cli-service": "~5.0.9",
|
||||
"@vue/cli-plugin-typescript": "~5.0.9"
|
||||
},
|
||||
"files": [
|
||||
"**/*"
|
||||
],
|
||||
"main": "harvester-1.10.0-dev.umd.min.js"
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
apiVersion: v1
|
||||
entries:
|
||||
harvester:
|
||||
- annotations:
|
||||
catalog.cattle.io/certified: rancher
|
||||
catalog.cattle.io/display-name: Harvester
|
||||
catalog.cattle.io/kube-version: '>= 1.16.0-0'
|
||||
catalog.cattle.io/namespace: cattle-ui-plugin-system
|
||||
catalog.cattle.io/os: linux
|
||||
catalog.cattle.io/permits-os: linux, windows
|
||||
catalog.cattle.io/rancher-version: '>= 2.15.0-0'
|
||||
catalog.cattle.io/scope: management
|
||||
catalog.cattle.io/ui-component: plugins
|
||||
catalog.cattle.io/ui-extensions-version: '>= 3.0.0 < 4.0.0'
|
||||
apiVersion: v2
|
||||
appVersion: 1.10.0-dev
|
||||
created: "2026-08-17T09:53:47.7476+08:00"
|
||||
description: Rancher UI Extension for Harvester
|
||||
digest: 8800a65761d4b9dbdadb9f9050b9053738021c43d02cf7249e6922e230fdd95b
|
||||
icon: https://raw.githubusercontent.com/harvester/harvester-ui-extension/main/pkg/harvester/icon.svg
|
||||
name: harvester
|
||||
type: application
|
||||
urls:
|
||||
- assets/harvester/harvester-1.10.0-dev.tgz
|
||||
version: 1.10.0-dev
|
||||
generated: "2026-08-17T09:53:47.74717+08:00"
|
||||
@@ -35,7 +35,7 @@
|
||||
"glob": "7.2.3",
|
||||
"glob-parent": "6.0.2",
|
||||
"json5": "2.2.3",
|
||||
"@types/lodash": "4.17.24",
|
||||
"@types/lodash": "4.17.25",
|
||||
"merge": "2.1.1",
|
||||
"node-forge": "1.4.0",
|
||||
"nth-check": "2.1.1",
|
||||
|
||||
@@ -15,7 +15,7 @@ import MappingColumn from './MappingColumn.vue';
|
||||
import StorageDefaultsModal from './StorageDefaultsModal.vue';
|
||||
|
||||
const DEFAULT_VOLUME_MODE = VOLUME_MODE.FILE_SYSTEM;
|
||||
const DEFAULT_ACCESS_MODES = [ACCESS_MODE.READ_WRITE_MANY];
|
||||
const DEFAULT_ACCESS_MODE = ACCESS_MODE?.READ_WRITE_MANY ?? 'ReadWriteMany';
|
||||
|
||||
const props = defineProps({
|
||||
providerName: { type: String, default: '' },
|
||||
@@ -268,9 +268,9 @@ const buildStorageEntries = () => {
|
||||
capacity: 0,
|
||||
target: '',
|
||||
volumeMode: DEFAULT_VOLUME_MODE,
|
||||
accessModes: [...DEFAULT_ACCESS_MODES],
|
||||
accessModes: [DEFAULT_ACCESS_MODE],
|
||||
inheritedVolumeMode: DEFAULT_VOLUME_MODE,
|
||||
inheritedAccessModes: [...DEFAULT_ACCESS_MODES],
|
||||
inheritedAccessModes: [DEFAULT_ACCESS_MODE],
|
||||
inheritedFromProvider: false,
|
||||
overridden: false,
|
||||
usedBy: [],
|
||||
@@ -310,9 +310,9 @@ const buildStorageEntriesFromProvider = (datastoresData) => {
|
||||
capacity: ds.capacity || 0,
|
||||
target: '',
|
||||
volumeMode: DEFAULT_VOLUME_MODE,
|
||||
accessModes: [...DEFAULT_ACCESS_MODES],
|
||||
accessModes: [DEFAULT_ACCESS_MODE],
|
||||
inheritedVolumeMode: DEFAULT_VOLUME_MODE,
|
||||
inheritedAccessModes: [...DEFAULT_ACCESS_MODES],
|
||||
inheritedAccessModes: [DEFAULT_ACCESS_MODE],
|
||||
inheritedFromProvider: false,
|
||||
overridden: false,
|
||||
usedBy: [],
|
||||
|
||||
@@ -273,19 +273,6 @@ const startMigrationAction = async() => {
|
||||
|
||||
await plan.save();
|
||||
|
||||
const planOwnerRef = {
|
||||
apiVersion: FORKLIFT_API_VERSION,
|
||||
kind: 'Plan',
|
||||
name: plan.metadata.name,
|
||||
uid: plan.metadata.uid,
|
||||
blockOwnerDeletion: true,
|
||||
};
|
||||
|
||||
networkMap.metadata.ownerReferences = [planOwnerRef];
|
||||
await networkMap.save();
|
||||
storageMap.metadata.ownerReferences = [planOwnerRef];
|
||||
await storageMap.save();
|
||||
|
||||
// Kick off the first migration through the model so the Migration payload
|
||||
// lives in a single place (also reused by the dashboard start/restart action).
|
||||
await plan.startMigration();
|
||||
|
||||
@@ -8,16 +8,22 @@ import { useI18n } from '@shell/composables/useI18n';
|
||||
import { VOLUME_MODE, ACCESS_MODE } from '../../config/types';
|
||||
|
||||
const VOLUME_MODE_OPTIONS = [VOLUME_MODE.FILE_SYSTEM, VOLUME_MODE.BLOCK];
|
||||
const ACCESS_MODE_OPTIONS = [ACCESS_MODE.READ_WRITE_ONCE, ACCESS_MODE.READ_WRITE_MANY, ACCESS_MODE.READ_ONLY_MANY];
|
||||
const {
|
||||
READ_WRITE_ONCE = 'ReadWriteOnce',
|
||||
READ_ONLY_MANY = 'ReadOnlyMany',
|
||||
READ_WRITE_MANY = 'ReadWriteMany',
|
||||
READ_WRITE_ONCE_POD = 'ReadWriteOncePod'
|
||||
} = ACCESS_MODE || {};
|
||||
const ACCESS_MODE_OPTIONS = [READ_WRITE_ONCE, READ_WRITE_MANY, READ_ONLY_MANY, READ_WRITE_ONCE_POD];
|
||||
|
||||
const props = defineProps({
|
||||
storageClassName: { type: String, default: '' },
|
||||
providerName: { type: String, default: '' },
|
||||
showInherited: { type: Boolean, default: false },
|
||||
volumeMode: { type: String, default: VOLUME_MODE.FILE_SYSTEM },
|
||||
accessModes: { type: Array, default: () => [ACCESS_MODE.READ_WRITE_MANY] },
|
||||
accessModes: { type: Array, default: () => ['ReadWriteMany'] },
|
||||
inheritedVolumeMode: { type: String, default: VOLUME_MODE.FILE_SYSTEM },
|
||||
inheritedAccessModes: { type: Array, default: () => [ACCESS_MODE.READ_WRITE_MANY] },
|
||||
inheritedAccessModes: { type: Array, default: () => ['ReadWriteMany'] },
|
||||
});
|
||||
|
||||
const emit = defineEmits(['apply', 'close']);
|
||||
@@ -26,7 +32,7 @@ const store = useStore();
|
||||
const { t } = useI18n(store);
|
||||
|
||||
const localVolumeMode = ref(props.volumeMode || VOLUME_MODE.FILE_SYSTEM);
|
||||
const localAccessMode = ref(props.accessModes?.[0] || ACCESS_MODE.READ_WRITE_MANY);
|
||||
const localAccessMode = ref(props.accessModes?.[0] || READ_WRITE_MANY);
|
||||
|
||||
const volumeModeOptions = VOLUME_MODE_OPTIONS.map((value) => ({ label: value, value }));
|
||||
const accessModeOptions = ACCESS_MODE_OPTIONS.map((value) => ({ label: value, value }));
|
||||
@@ -42,7 +48,7 @@ const apply = () => {
|
||||
// Repopulate the dropdowns with the provider default values; the user then applies.
|
||||
const reset = () => {
|
||||
localVolumeMode.value = props.inheritedVolumeMode || VOLUME_MODE.FILE_SYSTEM;
|
||||
localAccessMode.value = props.inheritedAccessModes?.[0] || ACCESS_MODE.READ_WRITE_MANY;
|
||||
localAccessMode.value = props.inheritedAccessModes?.[0] || READ_WRITE_MANY;
|
||||
};
|
||||
|
||||
const cancel = () => {
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<script>
|
||||
import jsyaml from 'js-yaml';
|
||||
import { mapGetters } from 'vuex';
|
||||
import Tabbed from '@shell/components/Tabbed';
|
||||
import Tab from '@shell/components/Tabbed/Tab';
|
||||
@@ -178,17 +177,8 @@ export default {
|
||||
},
|
||||
|
||||
async saveVMT(buttonCb) {
|
||||
this.errors = [];
|
||||
this.parseVM();
|
||||
|
||||
this.validateCloudInit();
|
||||
|
||||
if (this.errors.length) {
|
||||
buttonCb(false);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
const templates = await this.$store.dispatch('harvester/findAll', { type: HCI.VM_TEMPLATE });
|
||||
const template = templates.find( (O) => O.metadata.name === this.templateValue.metadata.name);
|
||||
|
||||
@@ -247,24 +237,6 @@ export default {
|
||||
this.$refs.yamlEditor?.refresh();
|
||||
}
|
||||
},
|
||||
|
||||
validateCloudInit() {
|
||||
if (this.userScript) {
|
||||
try {
|
||||
jsyaml.load(this.userScript);
|
||||
} catch (e) {
|
||||
this.errors.push(this.t('harvester.virtualMachine.cloudConfig.user.invalidYaml'));
|
||||
}
|
||||
}
|
||||
|
||||
if (this.networkScript) {
|
||||
try {
|
||||
jsyaml.load(this.networkScript);
|
||||
} catch (e) {
|
||||
this.errors.push(this.t('harvester.virtualMachine.cloudConfig.network.invalidYaml'));
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<script>
|
||||
import jsyaml from 'js-yaml';
|
||||
import { isEqual } from 'lodash';
|
||||
import { mapGetters } from 'vuex';
|
||||
import Tabbed from '@shell/components/Tabbed';
|
||||
@@ -380,7 +379,6 @@ export default {
|
||||
|
||||
this.validateCPUMemory();
|
||||
this.validateWindowsSysprep();
|
||||
this.validateCloudInit();
|
||||
|
||||
// block create VM flow if has validation errors
|
||||
if (this.errors.length) {
|
||||
@@ -426,24 +424,6 @@ export default {
|
||||
}
|
||||
},
|
||||
|
||||
validateCloudInit() {
|
||||
if (this.userScript) {
|
||||
try {
|
||||
jsyaml.load(this.userScript);
|
||||
} catch (e) {
|
||||
this.errors.push(this.t('harvester.virtualMachine.cloudConfig.user.invalidYaml'));
|
||||
}
|
||||
}
|
||||
|
||||
if (this.networkScript) {
|
||||
try {
|
||||
jsyaml.load(this.networkScript);
|
||||
} catch (e) {
|
||||
this.errors.push(this.t('harvester.virtualMachine.cloudConfig.network.invalidYaml'));
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
async saveSingle(buttonCb) {
|
||||
this.parseVM();
|
||||
this.value.spec.template.spec.hostname = this.hostname ? this.hostname : this.value.metadata.name;
|
||||
|
||||
@@ -830,20 +830,18 @@ harvester:
|
||||
label: User Data Template
|
||||
title: "User Data:"
|
||||
tip: "You can specify user data to configure an instance or run a configuration script during launch. If you launch more than one instance at a time, the user data is available to all the instances in that reservation. <a href='https://cloudinit.readthedocs.io/en/latest/topics/examples.html' target='_blank'>Learn more</a>"
|
||||
invalidYaml: 'Invalid User Data YAML syntax'
|
||||
network:
|
||||
label: Network Data Template
|
||||
title: "Network Data:"
|
||||
tip: "The network-data configuration allows you to customize the instance's networking interfaces by assigning subnet configuration, virtual device creation (bonds, bridges, VLANs) routes and DNS configuration. <a href='https://cloudinit.readthedocs.io/en/latest/reference/network-config-format-v1.html' target='_blank'>Learn more</a>"
|
||||
invalidYaml: 'Invalid Network Data YAML syntax'
|
||||
sysprep:
|
||||
title: Windows Sysprep Configuration
|
||||
title: Windows Unattended & Sysprep Configuration
|
||||
description: "Configure Windows automated installation using autounattend.xml. The configuration will be stored in a Kubernetes Secret and mounted as a CD-ROM during installation. <a href='https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/automate-windows-setup' target='_blank'>Learn more</a>"
|
||||
createNew: Create new...
|
||||
createNewTitle: Create Windows Sysprep Template
|
||||
createNewTitle: Create Windows Unattended & Sysprep Template
|
||||
xmlContent: autounattend.xml content
|
||||
secret:
|
||||
label: Windows Sysprep Template
|
||||
label: Windows Unattended & Sysprep Template
|
||||
validation:
|
||||
invalidXml: Invalid XML syntax
|
||||
invalidNamespace: Invalid unattend.xml namespace. Expected 'urn:schemas-microsoft-com:unattend'
|
||||
|
||||
@@ -38,6 +38,10 @@ export const SSH_EXISTING_TYPE = {
|
||||
export default {
|
||||
methods: {
|
||||
hasCloudConfigComment(userScript) {
|
||||
if (typeof userScript === 'string' && /^\s*#cloud-config(\s|$)/.test(userScript)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Check that userData contains: #cloud-config
|
||||
const userDataDoc = userScript ? YAML.parseDocument(userScript) : YAML.parseDocument({});
|
||||
const items = userDataDoc?.contents?.items || [];
|
||||
@@ -52,6 +56,14 @@ export default {
|
||||
exist = true;
|
||||
}
|
||||
|
||||
if (userDataDoc?.contents?.commentBefore === 'cloud-config' || userDataDoc?.contents?.commentBefore?.includes('cloud-config\n')) {
|
||||
exist = true;
|
||||
}
|
||||
|
||||
if (userDataDoc?.contents?.comment === 'cloud-config' || userDataDoc?.contents?.comment?.includes('cloud-config\n')) {
|
||||
exist = true;
|
||||
}
|
||||
|
||||
items.map((item) => {
|
||||
const key = item.key;
|
||||
|
||||
|
||||
@@ -1211,9 +1211,10 @@ export default {
|
||||
|
||||
userDataDoc = config.installAgent ? this.mergeQGA({ userDataDoc, ...config }) : this.deleteQGA({ userDataDoc, ...config });
|
||||
const userDataYaml = userDataDoc.toString();
|
||||
const userDataValue = userDataDoc.toJSON();
|
||||
|
||||
if (userDataYaml === '{}\n') {
|
||||
// When the YAML parsed value is '{}\n', it means that the userData is empty, then undefined is returned.
|
||||
if (userDataValue === null || (typeof userDataValue === 'object' && !Array.isArray(userDataValue) && isEmpty(userDataValue))) {
|
||||
// Empty userData should not create cloud-init content like `null`.
|
||||
return undefined;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import SYSTEM_NAMESPACES from '@shell/config/system-namespaces';
|
||||
import { get } from '@shell/utils/object';
|
||||
import { NAMESPACE } from '@shell/config/types';
|
||||
import { PRODUCT_NAME as HARVESTER_PRODUCT } from '@pkg/harvester/config/harvester';
|
||||
import { FORKLIFT_NAMESPACE } from '@pkg/harvester/config/harvester-map';
|
||||
import { HCI } from '../../types';
|
||||
|
||||
const OBSCURE_NAMESPACE_PREFIX = [
|
||||
@@ -93,6 +94,10 @@ export default class HciNamespace extends namespace {
|
||||
}
|
||||
|
||||
get isSystem() {
|
||||
if (this.metadata?.name === FORKLIFT_NAMESPACE) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const systemNamespaces = ['fleet-default'];
|
||||
|
||||
if (systemNamespaces.includes(this.metadata.name)) {
|
||||
|
||||
@@ -68,29 +68,35 @@ export default defineComponent({
|
||||
return (this.value || []).map((plan) => {
|
||||
const planName = plan?.metadata?.name || '-';
|
||||
const namespace = plan?.metadata?.namespace || '';
|
||||
const networkMapRef = this.getPlanMapRef(plan, 'network');
|
||||
const storageMapRef = this.getPlanMapRef(plan, 'storage');
|
||||
|
||||
const migrations = existing[HCI.FORKLIFT_MIGRATION]
|
||||
.filter((resource) => this.ownedByPlan(resource, plan))
|
||||
.map((resource) => ({
|
||||
name: resource?.metadata?.name,
|
||||
namespace: resource?.metadata?.namespace || namespace,
|
||||
}));
|
||||
.map((resource) => resource?.metadata?.name)
|
||||
.filter(Boolean);
|
||||
|
||||
const matchedNetworkMap = existing[HCI.FORKLIFT_NETWORK_MAP].find((resource) => this.ownedByPlan(resource, plan));
|
||||
const matchedStorageMap = existing[HCI.FORKLIFT_STORAGE_MAP].find((resource) => this.ownedByPlan(resource, plan));
|
||||
const matchedNetworkMap = networkMapRef ? existing[HCI.FORKLIFT_NETWORK_MAP].find((resource) => resource?.metadata?.name === networkMapRef.name && resource?.metadata?.namespace === networkMapRef.namespace) : null;
|
||||
const matchedStorageMap = storageMapRef ? existing[HCI.FORKLIFT_STORAGE_MAP].find((resource) => resource?.metadata?.name === storageMapRef.name && resource?.metadata?.namespace === storageMapRef.namespace) : null;
|
||||
|
||||
return {
|
||||
planName,
|
||||
namespace,
|
||||
migrations,
|
||||
networkMap: matchedNetworkMap ? {
|
||||
namespace: matchedNetworkMap?.metadata?.namespace || namespace,
|
||||
namespace: matchedNetworkMap?.metadata?.namespace || networkMapRef?.namespace || namespace,
|
||||
name: matchedNetworkMap?.metadata?.name,
|
||||
} : null,
|
||||
} : (networkMapRef ? {
|
||||
namespace: networkMapRef.namespace,
|
||||
name: networkMapRef.name,
|
||||
} : null),
|
||||
storageMap: matchedStorageMap ? {
|
||||
namespace: matchedStorageMap?.metadata?.namespace || namespace,
|
||||
namespace: matchedStorageMap?.metadata?.namespace || storageMapRef?.namespace || namespace,
|
||||
name: matchedStorageMap?.metadata?.name,
|
||||
} : null,
|
||||
} : (storageMapRef ? {
|
||||
namespace: storageMapRef.namespace,
|
||||
name: storageMapRef.name,
|
||||
} : null),
|
||||
};
|
||||
});
|
||||
},
|
||||
@@ -113,6 +119,20 @@ export default defineComponent({
|
||||
methods: {
|
||||
resourceNames,
|
||||
|
||||
getPlanMapRef(plan, mapType) {
|
||||
const ref = plan?.spec?.map?.[mapType];
|
||||
const name = ref?.name;
|
||||
|
||||
if (!name) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return {
|
||||
name,
|
||||
namespace: ref?.namespace || plan?.metadata?.namespace || '',
|
||||
};
|
||||
},
|
||||
|
||||
/**
|
||||
* Determine whether a related resource (migration / network map / storage map)
|
||||
* is owned by the given plan by inspecting its `metadata.ownerReferences`.
|
||||
@@ -137,9 +157,8 @@ export default defineComponent({
|
||||
const existing = this.existingRelatedResources;
|
||||
const targets = new Map();
|
||||
|
||||
const addTarget = (type, resource) => {
|
||||
const name = resource?.metadata?.name;
|
||||
const ns = resource?.metadata?.namespace;
|
||||
const addTarget = (type, name, namespace) => {
|
||||
const ns = namespace || '';
|
||||
|
||||
if (!name) {
|
||||
return;
|
||||
@@ -153,17 +172,20 @@ export default defineComponent({
|
||||
};
|
||||
|
||||
for (const plan of this.value || []) {
|
||||
existing[HCI.FORKLIFT_NETWORK_MAP]
|
||||
.filter((resource) => this.ownedByPlan(resource, plan))
|
||||
.forEach((resource) => addTarget(HCI.FORKLIFT_NETWORK_MAP, resource));
|
||||
const networkMapRef = this.getPlanMapRef(plan, 'network');
|
||||
const storageMapRef = this.getPlanMapRef(plan, 'storage');
|
||||
|
||||
existing[HCI.FORKLIFT_STORAGE_MAP]
|
||||
.filter((resource) => this.ownedByPlan(resource, plan))
|
||||
.forEach((resource) => addTarget(HCI.FORKLIFT_STORAGE_MAP, resource));
|
||||
if (networkMapRef) {
|
||||
addTarget(HCI.FORKLIFT_NETWORK_MAP, networkMapRef.name, networkMapRef.namespace);
|
||||
}
|
||||
|
||||
if (storageMapRef) {
|
||||
addTarget(HCI.FORKLIFT_STORAGE_MAP, storageMapRef.name, storageMapRef.namespace);
|
||||
}
|
||||
|
||||
existing[HCI.FORKLIFT_MIGRATION]
|
||||
.filter((resource) => this.ownedByPlan(resource, plan))
|
||||
.forEach((resource) => addTarget(HCI.FORKLIFT_MIGRATION, resource));
|
||||
.forEach((resource) => addTarget(HCI.FORKLIFT_MIGRATION, resource?.metadata?.name, resource?.metadata?.namespace));
|
||||
}
|
||||
|
||||
return [...targets.values()];
|
||||
@@ -256,11 +278,11 @@ export default defineComponent({
|
||||
<div>• {{ t('harvester.addons.vmMigration.labels.migration') }}:</div>
|
||||
<template v-if="summary.migrations.length">
|
||||
<div
|
||||
v-for="migration in summary.migrations"
|
||||
:key="`${ migration.namespace }/${ migration.name }`"
|
||||
v-for="migrationName in summary.migrations"
|
||||
:key="migrationName"
|
||||
>
|
||||
<div class="ml-20">
|
||||
- {{ migration.name }}
|
||||
- {{ migrationName }}
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -2825,10 +2825,10 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
|
||||
integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
|
||||
|
||||
"@types/lodash@4.17.24":
|
||||
version "4.17.24"
|
||||
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.24.tgz#4ae334fc62c0e915ca8ed8e35dcc6d4eeb29215f"
|
||||
integrity sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==
|
||||
"@types/lodash@4.17.25":
|
||||
version "4.17.25"
|
||||
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.25.tgz#69765ac7bcddb0eb072961cf292524a8f5b3c2c0"
|
||||
integrity sha512-+K1NIO8I+F9/wNulfVvu23QYd0Pe9/OCqRrim4NoYIf1VoEDL90Ve4ClzpyqBLc7NpGGWRvYNCKZ1BE/Jpf8dQ==
|
||||
|
||||
"@types/mime@^1":
|
||||
version "1.3.5"
|
||||
@@ -4367,24 +4367,6 @@ bn.js@^5.2.1, bn.js@^5.2.2:
|
||||
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.3.tgz#16a9e409616b23fef3ccbedb8d42f13bff80295e"
|
||||
integrity sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==
|
||||
|
||||
body-parser@~1.20.3:
|
||||
version "1.20.4"
|
||||
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.4.tgz#f8e20f4d06ca8a50a71ed329c15dccad1cdc547f"
|
||||
integrity sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==
|
||||
dependencies:
|
||||
bytes "~3.1.2"
|
||||
content-type "~1.0.5"
|
||||
debug "2.6.9"
|
||||
depd "2.0.0"
|
||||
destroy "~1.2.0"
|
||||
http-errors "~2.0.1"
|
||||
iconv-lite "~0.4.24"
|
||||
on-finished "~2.4.1"
|
||||
qs "~6.14.0"
|
||||
raw-body "~2.5.3"
|
||||
type-is "~1.6.18"
|
||||
unpipe "~1.0.0"
|
||||
|
||||
body-parser@~1.20.5:
|
||||
version "1.20.6"
|
||||
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.6.tgz#60c789c78e0992d906da0a29d71ae01d15c1ed76"
|
||||
@@ -6685,7 +6667,7 @@ expect@^27.5.1:
|
||||
jest-matcher-utils "^27.5.1"
|
||||
jest-message-util "^27.5.1"
|
||||
|
||||
express@4.22.2:
|
||||
express@4.22.2, express@^4.17.3:
|
||||
version "4.22.2"
|
||||
resolved "https://registry.yarnpkg.com/express/-/express-4.22.2.tgz#c17ae0981e5efc24b22272f0e041c4662503b700"
|
||||
integrity sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q==
|
||||
@@ -6722,43 +6704,6 @@ express@4.22.2:
|
||||
utils-merge "1.0.1"
|
||||
vary "~1.1.2"
|
||||
|
||||
express@^4.17.3:
|
||||
version "4.22.1"
|
||||
resolved "https://registry.yarnpkg.com/express/-/express-4.22.1.tgz#1de23a09745a4fffdb39247b344bb5eaff382069"
|
||||
integrity sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==
|
||||
dependencies:
|
||||
accepts "~1.3.8"
|
||||
array-flatten "1.1.1"
|
||||
body-parser "~1.20.3"
|
||||
content-disposition "~0.5.4"
|
||||
content-type "~1.0.4"
|
||||
cookie "~0.7.1"
|
||||
cookie-signature "~1.0.6"
|
||||
debug "2.6.9"
|
||||
depd "2.0.0"
|
||||
encodeurl "~2.0.0"
|
||||
escape-html "~1.0.3"
|
||||
etag "~1.8.1"
|
||||
finalhandler "~1.3.1"
|
||||
fresh "~0.5.2"
|
||||
http-errors "~2.0.0"
|
||||
merge-descriptors "1.0.3"
|
||||
methods "~1.1.2"
|
||||
on-finished "~2.4.1"
|
||||
parseurl "~1.3.3"
|
||||
path-to-regexp "~0.1.12"
|
||||
proxy-addr "~2.0.7"
|
||||
qs "~6.14.0"
|
||||
range-parser "~1.2.1"
|
||||
safe-buffer "5.2.1"
|
||||
send "~0.19.0"
|
||||
serve-static "~1.16.2"
|
||||
setprototypeof "1.2.0"
|
||||
statuses "~2.0.1"
|
||||
type-is "~1.6.18"
|
||||
utils-merge "1.0.1"
|
||||
vary "~1.1.2"
|
||||
|
||||
extend-shallow@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
|
||||
@@ -10384,7 +10329,7 @@ punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.0, punycode@^2.3.1:
|
||||
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
|
||||
integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
|
||||
|
||||
qs@6.15.3, qs@^6.12.3, qs@~6.14.0, qs@~6.15.1:
|
||||
qs@6.15.3, qs@^6.12.3, qs@~6.15.1:
|
||||
version "6.15.3"
|
||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.15.3.tgz#76852132a58ed5c7c0ef67e4441b9bb5d6061b3b"
|
||||
integrity sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==
|
||||
|
||||