diff --git a/.eslintrc.js b/.eslintrc.js index 3c1a1e304b..a9018e47b4 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,6 +1,6 @@ module.exports = { env: { browser: true, es2015: true, node: true }, - settings: { "import/resolver": "webpack" }, + settings: { "import/resolver": "webpack", react: { version: "detect" } }, extends: ["eslint:recommended", "plugin:react/recommended", "prettier"], overrides: [ { diff --git a/.github/workflows/dependabot.yaml b/.github/workflows/dependabot.yaml index aeca775c6b..07ae17886b 100644 --- a/.github/workflows/dependabot.yaml +++ b/.github/workflows/dependabot.yaml @@ -16,12 +16,12 @@ env: AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_S3_SECRET_KEY }} AWS_DEFAULT_REGION: us-east-1 APPZI_TOKEN: ${{ secrets.APPZI_TOKEN }} - MENDABLE_API_KEY: ${{ secrets.MENDABLE_API_KEY }} FULLSTORY_ORGID: ${{ secrets.FULLSTORY_ORGID }} ALGOLIA_ADMIN_KEY: ${{ secrets.ALGOLIA_ADMIN_KEY }} ALGOLIA_APP_ID: ${{ secrets.ALGOLIA_APP_ID }} ALGOLIA_SEARCH_KEY: ${{ secrets.ALGOLIA_SEARCH_KEY }} ALGOLIA_INDEX_NAME: ${{ secrets.ALGOLIA_INDEX_NAME }} + PALETTE_API_KEY: ${{ secrets.PALETTE_API_KEY }} jobs: dependabot_build: diff --git a/.github/workflows/nightly-docker-build.yaml b/.github/workflows/nightly-docker-build.yaml index c19fabe58f..4fb39c93c7 100644 --- a/.github/workflows/nightly-docker-build.yaml +++ b/.github/workflows/nightly-docker-build.yaml @@ -13,6 +13,7 @@ env: ALGOLIA_APP_ID: "123456789" ALGOLIA_SEARCH_KEY: "123456789" ALGOLIA_INDEX_NAME: "madeup-index" + PALETTE_API_KEY: ${{ secrets.PALETTE_API_KEY }} jobs: build: diff --git a/.github/workflows/pull_request.yaml b/.github/workflows/pull_request.yaml index bee925e50f..0b3d45c0b1 100644 --- a/.github/workflows/pull_request.yaml +++ b/.github/workflows/pull_request.yaml @@ -20,6 +20,7 @@ env: ALGOLIA_APP_ID: ${{ secrets.ALGOLIA_APP_ID }} ALGOLIA_SEARCH_KEY: ${{ secrets.ALGOLIA_SEARCH_KEY }} ALGOLIA_INDEX_NAME: ${{ secrets.ALGOLIA_INDEX_NAME }} + PALETTE_API_KEY: ${{ secrets.PALETTE_API_KEY }} jobs: run-ci: diff --git a/.github/workflows/release-branch-pr.yaml b/.github/workflows/release-branch-pr.yaml index 91af71ea76..2bebf91084 100644 --- a/.github/workflows/release-branch-pr.yaml +++ b/.github/workflows/release-branch-pr.yaml @@ -17,6 +17,7 @@ env: ALGOLIA_SEARCH_KEY: ${{ secrets.ALGOLIA_SEARCH_KEY }} ALGOLIA_INDEX_NAME: ${{ secrets.ALGOLIA_INDEX_NAME }} GITHUB_BRANCH: ${{ github.ref_name }} + PALETTE_API_KEY: ${{ secrets.PALETTE_API_KEY }} concurrency: diff --git a/.github/workflows/release-preview.yaml b/.github/workflows/release-preview.yaml index ca5c7df030..285c9143a2 100644 --- a/.github/workflows/release-preview.yaml +++ b/.github/workflows/release-preview.yaml @@ -11,12 +11,12 @@ env: AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_S3_SECRET_KEY }} AWS_DEFAULT_REGION: us-east-1 APPZI_TOKEN: ${{ secrets.APPZI_TOKEN }} - MENDABLE_API_KEY: ${{ secrets.MENDABLE_API_KEY }} FULLSTORY_ORGID: ${{ secrets.FULLSTORY_ORGID }} ALGOLIA_ADMIN_KEY: ${{ secrets.ALGOLIA_ADMIN_KEY }} ALGOLIA_APP_ID: ${{ secrets.ALGOLIA_APP_ID }} ALGOLIA_SEARCH_KEY: ${{ secrets.ALGOLIA_SEARCH_KEY }} ALGOLIA_INDEX_NAME: ${{ secrets.ALGOLIA_INDEX_NAME }} + PALETTE_API_KEY: ${{ secrets.PALETTE_API_KEY }} concurrency: diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 2d9200aaaf..1445201402 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -20,12 +20,12 @@ env: AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_S3_SECRET_KEY }} AWS_DEFAULT_REGION: us-east-1 APPZI_TOKEN: ${{ secrets.APPZI_TOKEN }} - MENDABLE_API_KEY: ${{ secrets.MENDABLE_API_KEY }} FULLSTORY_ORGID: ${{ secrets.FULLSTORY_ORGID }} ALGOLIA_ADMIN_KEY: ${{ secrets.ALGOLIA_ADMIN_KEY }} ALGOLIA_APP_ID: ${{ secrets.ALGOLIA_APP_ID }} ALGOLIA_SEARCH_KEY: ${{ secrets.ALGOLIA_SEARCH_KEY }} ALGOLIA_INDEX_NAME: ${{ secrets.ALGOLIA_INDEX_NAME }} + PALETTE_API_KEY: ${{ secrets.PALETTE_API_KEY }} concurrency: diff --git a/.github/workflows/screenshot_capture.yaml b/.github/workflows/screenshot_capture.yaml index 0c7fae5463..2ad9b53a61 100644 --- a/.github/workflows/screenshot_capture.yaml +++ b/.github/workflows/screenshot_capture.yaml @@ -20,6 +20,7 @@ env: ALGOLIA_APP_ID: ${{ secrets.ALGOLIA_APP_ID }} ALGOLIA_SEARCH_KEY: ${{ secrets.ALGOLIA_SEARCH_KEY }} ALGOLIA_INDEX_NAME: ${{ secrets.ALGOLIA_INDEX_NAME }} + PALETTE_API_KEY: ${{ secrets.PALETTE_API_KEY }} jobs: diff --git a/.github/workflows/visual-comparison.yaml b/.github/workflows/visual-comparison.yaml index d2553d7c29..087d8dddfd 100644 --- a/.github/workflows/visual-comparison.yaml +++ b/.github/workflows/visual-comparison.yaml @@ -9,7 +9,7 @@ on: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - MENDABLE_API_KEY: ${{ secrets.MENDABLE_API_KEY }} + PALETTE_API_KEY: ${{ secrets.PALETTE_API_KEY }} FULLSTORY_ORGID: ${{ secrets.FULLSTORY_ORGID }} ALGOLIA_ADMIN_KEY: ${{ secrets.ALGOLIA_ADMIN_KEY }} ALGOLIA_APP_ID: ${{ secrets.ALGOLIA_APP_ID }} diff --git a/.gitignore b/.gitignore index a3bf5ca550..ad4e8f385a 100644 --- a/.gitignore +++ b/.gitignore @@ -64,7 +64,7 @@ test-results/ playwright-report/ artifact.zip -# Netlify +# Netlify .netlify/ # Ignore _partials/index.ts @@ -76,4 +76,4 @@ static/img/packs .vale-config/ vale/styles/spectrocloud/ vale/styles/spectrocloud-docs-internal/ -vale/styles/config/vocabularies/spectrocloud-vocab \ No newline at end of file +vale/styles/config/vocabularies/spectrocloud-vocab diff --git a/.gitleaksignore b/.gitleaksignore index dc1917d90f..cc61b83e1e 100644 --- a/.gitleaksignore +++ b/.gitleaksignore @@ -15,6 +15,7 @@ d748cceb3859df5c354b96a0c3d115513f6c123e:docs/docs-content/devx/apps/deploy-app. 404219eb2cad1fbd5e03d64783b1db285c8e08b3:docs/docs-content/integrations/portworx_operator.md:private-key:613 504642da118b99f12e838c6ff9a1166cc8fcff61:docs/docs-content/integrations/portworx_operator.md:private-key:309 86b8971f386ee3b00d2558a7fd6029f312b335cf:docs/docs-content/integrations/portworx.md:private-key:269 +1058de28bdc307a7b9a80ba6f1c26d2165d43414:docs/deprecated/integrations/portworx.md:private-key:263 feaea7ee07b76653233cf4ff8376953bfb216c8d:docs/docs-content/integrations/ubuntu.md:generic-api-key:65 261324e61a4dd4a3da73c8c03f45d3fcca826817:packages/docs/content/clusters/cluster-management/cluster-rbac.md:generic-api-key:112 261324e61a4dd4a3da73c8c03f45d3fcca826817:packages/docs/content/clusters/cluster-management/cluster-rbac.md:generic-api-key:113 diff --git a/.prettierignore b/.prettierignore index eb3379c58a..7e33410237 100644 --- a/.prettierignore +++ b/.prettierignore @@ -11,7 +11,7 @@ docs/api-content/**/*.json # Troublesome files tsconfig.json -src/components/IconMapper/dynamicFontAwesomeImports.js +src/components/IconMapper/dynamicFontAwesomeImports.* docs/docs-content/security-bulletins/cve-reports.md # Ignore partials diff --git a/Makefile b/Makefile index 2b19329d7a..a97e745e5f 100644 --- a/Makefile +++ b/Makefile @@ -32,12 +32,21 @@ deep-clean: ## Clean all artifacts rm -rf node_modules build public .cache .docusaurus npm run clear && npm run clean-api-docs docker image rm $(IMAGE) || echo "No image exists." + rm -rfv static/img/packs + +clean-logos: ## Clean logos + rm -rf static/img/packs clean-versions: ## Clean Docusarus content versions @echo "cleaning versions" rm -rf api_versions.json versions.json versioned_docs versioned_sidebars api_versioned_sidebars api_versioned_docs versioned_partials git checkout -- docusaurus.config.js static/robots.txt + +clean-packs: ## Clean supplemental packs and pack images + rm -rf static/img/packs + rm -rf .docusaurus/packs-integrations/api_pack_response.json + clean-api: ## Clean API docs @echo "cleaning api docs" npm run clean-api-docs @@ -163,7 +172,7 @@ pdf-local: ## Generate PDF from local docs verify-url-links: @echo "Checking for broken external URLs in markdown files..." rm link_report.csv || echo "No report exists. Proceeding to scan step" - @npx linkinator "docs/**/*.md" --markdown --recurse --timeout 60000 --retry --retry-errors-jitter --retry-errors-count 3 \ + @npx linkinator "docs/**/*.md" --concurrency 50 --markdown --recurse --timeout 100000 --retry --retry-errors-jitter --retry-errors-count 5 \ --skip "^https:\/\/docs\.spectrocloud\.com.*$$" \ --skip "^https:\/\/docs\.spectrocloud\.com\/.*\/supplemental\-packs$$" \ --skip "^http:\/\/docs\.spectrocloud\.com.*$$" \ @@ -181,7 +190,7 @@ verify-url-links: verify-url-links-ci: ## Check for broken URLs in production in a GitHub Actions CI environment @echo "Checking for broken external URLs in CI environment..." rm link_report.json || echo "No report exists. Proceeding to scan step" - @npx linkinator "docs/**/*.md" --markdown --recurse --timeout 60000 --retry-errors-jitter --retry --retry-errors-count 5 \ + @npx linkinator "docs/**/*.md" --concurrency 50 --markdown --recurse --timeout 100000 --retry-errors-jitter --retry --retry-errors-count 5 \ --skip "^https:\/\/docs\.spectrocloud\.com.*$$" \ --skip "^https:\/\/docs\.spectrocloud\.com\/.*\/supplemental\-packs$$" \ --skip "^http:\/\/docs\.spectrocloud\.com.*$$" \ diff --git a/README.md b/README.md index 80659cc041..3f7f51e0d5 100644 --- a/README.md +++ b/README.md @@ -89,8 +89,13 @@ required environment variables. The values are not important for local developme ALGOLIA_APP_ID=1234567890 ALGOLIA_SEARCH_KEY=1234567890 ALGOLIA_INDEX_NAME=spectrocloud +PALETTE_API_KEY="" ``` +> [!IMPORTANT] You need a Palette API key to start the local development server. Refer to the +> [Create API Key](https://docs.spectrocloud.com/user-management/authentication/api-key/create-api-key/) guide to learn +> how to create a Palette API key. + ## Documentation Content Create a branch to keep track of all your changes. @@ -650,7 +655,8 @@ To add tutorials to an existing category, create a new **.md** file in the respe This is a custom component that allows you to create and use Docusaurus' [Import Markdown](https://docusaurus.io/docs/markdown-features/react#importing-markdown) functionality. -> [!IMPORTANT] +> [!IMPORTANT] +> > Docusaurus does not provide the ability to dynamically configure table of contents. See > [this issue](https://github.com/facebook/docusaurus/issues/6201) for more information. This means that you should > avoid adding headings to partials that you intend to use with the Partials Component. @@ -714,6 +720,124 @@ This is a +```json +[ + "palette-upgrader", + "csi-aws-new", + "inser-pack-name-here" +] +``` + +Excluded packs are not displayed in the packs component. + +#### README Content + +The pack component will display a Pack's README file if it exists. The README content comes from the Palette API. +Depending on the available content, the packs component will display the README content, the additional details content, +or a message indicating that no content is available. Refer to the table below for the different scenarios. + +| README Available | Additional Details File Available | Content Displayed | +| ---------------- | --------------------------------- | -------------------------------------------------------- | +| ✅ | ✅ | Both README and Additional Details content is displayed. | +| ✅ | ❌ | Only the README content is displayed. | +| ❌ | ✅ | Only the Additional Details content is displayed. | +| ❌ | ❌ | A message indicating that no content is available. | + +#### Additional Details Content + +To display the Additional Details content, create a markdown file with the same name as the pack in the the +[`docs/docs-content/integrations/`](./docs/docs-content/integrations/) content folder. For example, if the pack name is +`ubuntu-aws`, you would create a markdown file called `ubuntu-aws.md`. The additional details content requires you to +follow the [Packs layout guide](https://spectrocloud.atlassian.net/wiki/spaces/DE/pages/1802797059/Packs). + +If you want to add content specific to a version, include the following heading and tabs component in the markdown file. + + +```md +## Versions Supported + + -> Tabs for different versions + + Insert content here as needed. Create more `TabItem` components as needed. + + +``` + +> [!WARNING] +> +> Ensure the`Tabs` component has the `queryString` prop set to `parent`. This is required for the component to work. The +> `Tabs` component must also have a `## Versions Supported` heading. If you do not follow this format, the content will +> not be displayed correctly, and as a result, actual tabs will be displayed, and the pack will lose the ability to +> automatically display the content for the select version the user has specified in the version drop-down. + +The packs component will always display the top-level tab content, so if you add content for a new version, ensure the +new `TabItem` component is the first in the list. If a new pack version does not have a respective tag, the latest +version content will be displayed automatically. + +#### Links + +When authoring additional details content, you must use the `` component to link to other documentation +pages. The component is required to ensure that the links are versioned correctly. Refer to the +[Internal Links](#internal-links) section for more information. + +If you want to link to a heading inside the pack component, you must also use the `` and include the +path to the component followed by the heading id. The following is an example of how to link to a heading inside the +pack component. Take note of the `#` symbol followed by the heading id. + +```md + +``` + +Omit the `version=xxxx&parent=xxxx` value that is part of the query string. If you include the `version` and `parent` +values, the link will not work as expected. + +### Link to a Pack + +You must use the `` component to link to a pack. The following is an example of how to link to a pack. +For more information, refer to the [Internal Links](#internal-links) section. + +```md + +``` + +If you do not use the `` component, the link will not be versioned correctly, and the build will fail. + ## Netlify Previews By default Netlify previews are enabled for pull requests. However, some branches do not require Netlify previews. In @@ -739,7 +863,9 @@ documentation. Next, download the required Vale plugins. ``` + make sync-vale + ``` To execute the writing check, issue the command below. The command below will identify files that are modified by @@ -747,7 +873,9 @@ comparing the current git branch against the `master` branch. Ensure your local accurate results. ``` + make check-writing + ``` You may also use the Vale CLI to directly scan a file and receive feedback. diff --git a/_partials/packs/_kubernetes-genercic.mdx b/_partials/packs/_kubernetes-genercic.mdx new file mode 100644 index 0000000000..c7e6416443 --- /dev/null +++ b/_partials/packs/_kubernetes-genercic.mdx @@ -0,0 +1,638 @@ +--- +partial_category: packs +partial_name: kubernetes-generic +--- + + +### Support Lifecycle + + +We support CNCF Kubernetes for N-3 Kubernetes minor versions for a duration of 14 months. The duration exceeds the +official EOL by four months. Once we stop supporting the minor version, we initiate the deprecation process. Refer to +the guide to learn more. + + + +:::warning + + +Once you upgrade your cluster to a new Kubernetes version, you will not be able to downgrade. We recommend that, before +upgrading, you review the information provided in the +section. + +Review the to learn about pack update and deprecation schedules. + +::: + +## Versions Supported + + + + + +The Kubeadm configuration file is where you can do the following: + +- Change the default `podCIDR` and `serviceClusterIpRange` values. CIDR IPs specified in the configuration file take + precedence over other defined CIDR IPs in your environment. + + As you build your cluster, check that the `podCIDR` value does not overlap with any hosts or with the service network + and the `serviceClusterIpRange` value does not overlap with any IP ranges assigned to nodes or pods. + + +- Change the default cluster DNS service domain from `cluster.local` to a DNS domain that you specify. You can only + change the DNS domain during cluster creation. For more information, refer to + . + + +- Add a certificate for the Spectro Proxy pack if you want to use a reverse proxy with a Kubernetes cluster. For more + information, refer to the guide. + +### Change Cluster DNS Service Domain + +The `pack.serviceDomain` parameter with default value `cluster.local` is not visible in the Kubernetes YAML file, and +its value can only be changed at cluster creation. To change the value, you must add `serviceDomain: "cluster.local"` to +the Kubernetes YAML file when you create a cluster, and specify the service domain you want to use. + +```yaml hideClipboard +pack: + k8sHardening: True + podCIDR: "172.16.0.0/16" + serviceClusterIPRange: "10.96.0.0/12" + serviceDomain: "" +``` + +:::warning + +You can specify the service domain only at cluster creation. After the cluster creation completes, you cannot update the +value. Attempting to update it results in the error `serviceDomain update is forbidden for existing cluster`. + +::: + +For more information about networking configuration with DNS domains, refer to the Kubernetes +[Networking](https://kubernetes.io/docs/reference/config-api/kubeadm-config.v1beta3/#kubeadm-k8s-io-v1beta3-Networking) +API documentation. + +### Configuration Changes + +The Kubeadm config is updated with hardening improvements that do the following: + +- Meet CIS standards for Operating Systems (OS). + + +- Enable a Kubernetes audit policy in the pack. The audit policy is hidden, and you cannot customize the default audit + policy. If you want to apply your custom audit policy, refer to the + guide to learn how to create your custom audit policy + by adjusting the API server flags. + +- Replace a deprecated PodSecurityPolicy (PSP) with one that offers three built-in policy profiles for broad security + coverage: + + - **Privileged**: An unrestricted policy that provides wide permission levels and allows for known privilege + escalations. + + - **Baseline**: A policy that offers minimal restrictions and prevents known privilege escalations. As shown in the + example below, you can override the default cluster-wide policy to set baseline enforcement by enabling the + `PodSecurity` Admission plugin in the `enable-admission-plugins` section of the YAML file. You can then add a custom + Admission configuration and set the `admission-control-config-file` flag to the custom Admission. + + ```yaml + kubeadmconfig: + apiServer: + extraArgs: + secure-port: "6443" + anonymous-auth: "true" + profiling: "false" + disable-admission-plugins: "AlwaysAdmit" + default-not-ready-toleration-seconds: "60" + default-unreachable-toleration-seconds: "60" + enable-admission-plugins: "AlwaysPullImages,NamespaceLifecycle,ServiceAccount,NodeRestriction,PodSecurity" + admission-control-config-file: "/etc/kubernetes/pod-security-standard.yaml" + audit-log-path: /var/log/apiserver/audit.log + audit-policy-file: /etc/kubernetes/audit-policy.yaml + ``` + + - **Restricted**: A heavily restricted policy that follows the best practices of Pod hardening. This policy is set to + warn and audit and identifies Pods that require privileged access. + + You can enforce these policies at the Cluster or Namespace level. For workloads that require privileged access, you + can relax `PodSecurity` enforcement by adding these labels in the Namespace: + + ```yaml + pod-security.kubernetes.io/enforce: privileged + pod-security.kubernetes.io/enforce-version: v1.26 + ``` + +### Kubeadm Configuration File + +The default pack YAML contains minimal configurations offered by the managed provider. + +### Configure OIDC Identity Provider + +You can configure an OpenID Connect (OIDC) identity provider to authenticate users and groups in your cluster. OIDC is +an authentication layer on top of OAuth 2.0, an authorization framework that allows users to authenticate to a cluster +without using a password. + +OIDC requires a _Role Binding_ for the users or groups you want to provide cluster access. You must create a Role +Binding to a Kubernetes role that is available in the cluster. The Kubernetes role can be a custom role you created or a +[default Kubernetes role](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles), such as the +`cluster-admin` role. To learn how to create a Role Binding through Palette, refer to +. + +#### Configure Custom OIDC + +The custom method to configure OIDC and apply RBAC for an OIDC provider can be used for all cloud services except Amazon +Elastic Kubernetes Service (EKS) and Azure AKS. + + + + + + +Follow these steps to configure a third-party OIDC IDP. You can apply these steps to all the public cloud providers +except Azure AKS and Amazon EKS clusters. Azure AKS and Amazon EKS require different configurations. AKS requires you to +use Azure Active Directory (AAD) to enable OIDC integration. Refer to +to learn more. Click the **Amazon EKS** tab for steps to configure OIDC for EKS clusters. + +1. Add the following parameters to your Kubernetes YAML file when creating a cluster profile. Replace the + `identityProvider` value with your OIDC provider name. + + ```yaml + pack: + palette: + config: + oidc: + identityProvider: yourIdentityProviderNameHere + ``` + +2. Add the following `kubeadmconfig` parameters. Replace the values with your OIDC provider values. + + ```yaml + kubeadmconfig: + apiServer: + extraArgs: + oidc-issuer-url: "provider URL" + oidc-client-id: "client-id" + oidc-groups-claim: "groups" + oidc-username-claim: "email" + ``` + +3. Under the `clientConfig` parameter section of Kubernetes YAML file, uncomment the `oidc-` configuration lines. + + ```yaml + kubeadmconfig: + clientConfig: + oidc-issuer-url: "" + oidc-client-id: "" + oidc-client-secret: "" + oidc-extra-scope: profile,email,openid + ``` + + + + + +Follow these steps to configure OIDC for managed EKS clusters. + +1. In the Kubernetes pack, uncomment the lines in the `oidcIdentityProvider` parameter section of the Kubernetes pack, + and enter your third-party provider details. + + ```yaml + oidcIdentityProvider: + identityProviderConfigName: "Spectro-docs" + issuerUrl: "issuer-url" + clientId: "user-client-id-from-Palette" + usernameClaim: "email" + usernamePrefix: "-" + groupsClaim: "groups" + groupsPrefix: "" + requiredClaims: + ``` + +2. Under the `clientConfig` parameter section of Kubernetes pack, uncomment the `oidc-` configuration lines. + + ```yaml + clientConfig: + oidc-issuer-url: "{{ .spectro.pack.kubernetes-eks.managedControlPlane.oidcIdentityProvider.issuerUrl }}" + oidc-client-id: "{{ .spectro.pack.kubernetes-eks.managedControlPlane.oidcIdentityProvider.clientId }}" + oidc-client-secret: yourSecretKeyHere + oidc-extra-scope: profile,email + ``` + +3. Provide third-party OIDC IDP details. + + +4. Refer to the for guidance on how to access an EKS cluster. + + + + + + + + + +The Kubeadm configuration file is where you can do the following: + +- Change the default `podCIDR` and `serviceClusterIpRange` values. CIDR IPs specified in the configuration file take + precedence over other defined CIDR IPs in your environment. + + As you build your cluster, check that the `podCIDR` value does not overlap with any hosts or with the service network + and the `serviceClusterIpRange` value does not overlap with any IP ranges assigned to nodes or pods. + + +- Change the default cluster DNS service domain from `cluster.local` to a DNS domain that you specify. You can only + change the DNS domain during cluster creation. For more information, refer to + . + + +- Add a certificate for the Spectro Proxy pack if you want to use a reverse proxy with a Kubernetes cluster. For more + information, refer to the guide. + +### Change Cluster DNS Service Domain + +The `pack.serviceDomain` parameter with default value `cluster.local` is not visible in the Kubernetes YAML file, and +its value can only be changed at cluster creation. To change the value, you must add `serviceDomain: "cluster.local"` to +the Kubernetes YAML file when you create a cluster, and specify the service domain you want to use. + +```yaml hideClipboard +pack: + k8sHardening: True + podCIDR: "172.16.0.0/16" + serviceClusterIPRange: "10.96.0.0/12" + serviceDomain: "" +``` + +:::warning + +You can only specify the service domain at cluster creation. After cluster creation completes, you cannot update the +value. Attempting to update it results in the error `serviceDomain update is forbidden for existing cluster`. + +::: + +For more information about networking configuration with DNS domains, refer to the Kubernetes +[Networking](https://kubernetes.io/docs/reference/config-api/kubeadm-config.v1beta3/#kubeadm-k8s-io-v1beta3-Networking) +API documentation. + +### Configuration Changes + +The Kubeadm config is updated with hardening improvements that do the following: + +- Meet CIS standards for operating systems (OS). + + +- Enable a Kubernetes audit policy in the pack. The audit policy is hidden, and you cannot customize the default audit + policy. If you want to apply your custom audit policy, refer to the + guide to learn how to create your custom audit policy + by adjusting the API server flags. + +- Replace a deprecated PodSecurityPolicy (PSP) with one that offers three built-in policy profiles for broad security + coverage: + + - **Privileged**: An unrestricted policy that provides wide permission levels and allows for known privilege + escalations. + + - **Baseline**: A policy that offers minimal restrictions and prevents known privilege escalations. As shown in the + example below, you can override the default cluster-wide policy to set baseline enforcement by enabling the + `PodSecurity` Admission plugin in the `enable-admission-plugins` section of the YAML file. You can then add a custom + Admission configuration and set the `admission-control-config-file` flag to the custom Admission. + + ```yaml + kubeadmconfig: + apiServer: + extraArgs: + secure-port: "6443" + anonymous-auth: "true" + profiling: "false" + disable-admission-plugins: "AlwaysAdmit" + default-not-ready-toleration-seconds: "60" + default-unreachable-toleration-seconds: "60" + enable-admission-plugins: "AlwaysPullImages,NamespaceLifecycle,ServiceAccount,NodeRestriction,PodSecurity" + admission-control-config-file: "/etc/kubernetes/pod-security-standard.yaml" + audit-log-path: /var/log/apiserver/audit.log + audit-policy-file: /etc/kubernetes/audit-policy.yaml + ``` + + - **Restricted**: A heavily restricted policy that follows Pod hardening best practices. This policy is set to warn + and audit and identifies Pods that require privileged access. + + You can enforce these policies at the cluster level or the Namespace level. For workloads that require privileged + access, you can relax `PodSecurity` enforcement by adding these labels in the Namespace: + + ```yaml + pod-security.kubernetes.io/enforce: privileged + pod-security.kubernetes.io/enforce-version: v1.26 + ``` + +### Kubeadm Configuration File + +The default pack YAML contains minimal configurations offered by the managed provider. + +### Configure OIDC Identity Provider + +You can configure an OpenID Connect (OIDC) identity provider to authenticate users and groups in your cluster. OIDC is +an authentication layer on top of OAuth 2.0, an authorization framework that allows users to authenticate to a cluster +without using a password. + + +OIDC requires a _Role Binding_ for the users or groups you want to provide cluster access. You must create a Role +Binding to a Kubernetes role that is available in the cluster. The Kubernetes role can be a custom role you created or a +[default Kubernetes role](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles), such as the +`cluster-admin` role. To learn how to create a Role Binding through Palette, refer to +. + +#### Configure Custom OIDC + +The custom method to configure OIDC and apply RBAC for an OIDC provider can be used for all cloud services except Amazon +Elastic Kubernetes Service (EKS) and Azure AKS. + + + + + + +Follow these steps to configure a third-party OIDC IDP. You can apply these steps to all the public cloud providers +except Azure AKS and Amazon EKS clusters. Azure AKS and Amazon EKS require different configurations. AKS requires you to +use Azure Active Directory (AAD) to enable OIDC integration. Refer to +to learn more. Click the **Amazon EKS** tab for steps to configure OIDC for EKS clusters. + +1. Add the following parameters to your Kubernetes YAML file when creating a cluster profile. Replace the + `identityProvider` value with your OIDC provider name. + + ```yaml + pack: + palette: + config: + oidc: + identityProvider: yourIdentityProviderNameHere + ``` + +2. Add the following `kubeadmconfig` parameters. Replace the values with your OIDC provider values. + + ```yaml + kubeadmconfig: + apiServer: + extraArgs: + oidc-issuer-url: "provider URL" + oidc-client-id: "client-id" + oidc-groups-claim: "groups" + oidc-username-claim: "email" + ``` + +3. Under the `clientConfig` parameter section of Kubernetes YAML file, uncomment the `oidc-` configuration lines. + + ```yaml + kubeadmconfig: + clientConfig: + oidc-issuer-url: "" + oidc-client-id: "" + oidc-client-secret: "" + oidc-extra-scope: profile,email,openid + ``` + + + + + +Follow these steps to configure OIDC for managed EKS clusters. + +1. In the Kubernetes pack, uncomment the lines in the `oidcIdentityProvider` parameter section of the Kubernetes pack, + and enter your third-party provider details. + + ```yaml + oidcIdentityProvider: + identityProviderConfigName: "Spectro-docs" + issuerUrl: "issuer-url" + clientId: "user-client-id-from-Palette" + usernameClaim: "email" + usernamePrefix: "-" + groupsClaim: "groups" + groupsPrefix: "" + requiredClaims: + ``` + +2. Under the `clientConfig` parameter section of Kubernetes pack, uncomment the `oidc-` configuration lines. + + ```yaml + clientConfig: + oidc-issuer-url: "{{ .spectro.pack.kubernetes-eks.managedControlPlane.oidcIdentityProvider.issuerUrl }}" + oidc-client-id: "{{ .spectro.pack.kubernetes-eks.managedControlPlane.oidcIdentityProvider.clientId }}" + oidc-client-secret: yourSecretKeyHere + oidc-extra-scope: profile,email + ``` + +3. Provide third-party OIDC IDP details. + + +4. Refer to the for guidance on how to access an EKS cluster. + + + + + + + + + + +The Kubeadm configuration file is where you can do the following: + +- Change the default `podCIDR` and `serviceClusterIpRange` values. CIDR IPs specified in the configuration file take + precedence over other defined CIDR IPs in your environment. + + As you build your cluster, check that the `podCIDR` value does not overlap with any hosts or with the service network + and the `serviceClusterIpRange` value does not overlap with any IP ranges assigned to nodes or pods. + + +- Change the default cluster DNS service domain from `cluster.local` to a DNS domain that you specify. You can only + change the DNS domain during cluster creation. For more information, refer to + . + + +- Add a certificate for the Spectro Proxy pack if you want to use a reverse proxy with a Kubernetes cluster. For more + information, refer to the guide. + +### Change Cluster DNS Service Domain + +The `pack.serviceDomain` parameter with default value `cluster.local` is not visible in the Kubernetes YAML file, and +its value can only be changed at cluster creation. To change the value, you must add `serviceDomain: "cluster.local"` to +the Kubernetes YAML file when you create a cluster, and specify the service domain you want to use. + +```yaml hideClipboard +pack: + k8sHardening: True + podCIDR: "172.16.0.0/16" + serviceClusterIPRange: "10.96.0.0/12" + serviceDomain: "" +``` + +:::warning + +You can only specify the service domain at cluster creation. After cluster creation completes, you cannot update the +value. Attempting to update it results in the error `serviceDomain update is forbidden for existing cluster`. + +::: + +For more information about networking configuration with DNS domains, refer to the Kubernetes +[Networking](https://kubernetes.io/docs/reference/config-api/kubeadm-config.v1beta3/#kubeadm-k8s-io-v1beta3-Networking) +API documentation. + +### Configuration Changes + +The Kubeadm config is updated with hardening improvements that do the following: + +- Meet CIS standards for operating systems (OS). + + +- Enable a Kubernetes audit policy in the pack. The audit policy is hidden, and you cannot customize the default audit + policy. If you want to apply your custom audit policy, refer to the + guide to learn how to create your custom audit policy + by adjusting the API server flags. + +- Replace a deprecated PodSecurityPolicy (PSP) with one that offers three built-in policy profiles for broad security + coverage: + + - **Privileged**: An unrestricted policy that provides wide permission levels and allows for known privilege + escalations. + + - **Baseline**: A policy that offers minimal restrictions and prevents known privilege escalations. As shown in the + example below, you can override the default cluster-wide policy to set baseline enforcement by enabling the + `PodSecurity` Admission plugin in the `enable-admission-plugins` section of the YAML file. You can then add a custom + Admission configuration and set the `admission-control-config-file` flag to the custom Admission. + + ```yaml + kubeadmconfig: + apiServer: + extraArgs: + secure-port: "6443" + anonymous-auth: "true" + profiling: "false" + disable-admission-plugins: "AlwaysAdmit" + default-not-ready-toleration-seconds: "60" + default-unreachable-toleration-seconds: "60" + enable-admission-plugins: "AlwaysPullImages,NamespaceLifecycle,ServiceAccount,NodeRestriction,PodSecurity" + admission-control-config-file: "/etc/kubernetes/pod-security-standard.yaml" + audit-log-path: /var/log/apiserver/audit.log + audit-policy-file: /etc/kubernetes/audit-policy.yaml + ``` + + - **Restricted**: A heavily restricted policy that follows Pod hardening best practices. This policy is set to warn + and audit and identifies Pods that require privileged access. + + You can enforce these policies at the cluster level or the Namespace level. For workloads that require privileged + access, you can relax `PodSecurity` enforcement by adding these labels in the Namespace: + + ```yaml + pod-security.kubernetes.io/enforce: privileged + pod-security.kubernetes.io/enforce-version: v1.26 + ``` + +### Kubeadm Configuration File + +The default pack YAML contains minimal configurations offered by the managed provider. + +### Configure OIDC Identity Provider + +You can configure an OpenID Connect (OIDC) identity provider to authenticate users and groups in your cluster. OIDC is +an authentication layer on top of OAuth 2.0, an authorization framework that allows users to authenticate to a cluster +without using a password. + +OIDC requires a _Role Binding_ for the users or groups you want to provide cluster access. You must create a Role +Binding to a Kubernetes role that is available in the cluster. The Kubernetes role can be a custom role you created or a +[default Kubernetes role](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles), such as the +`cluster-admin` role. To learn how to create a Role Binding through Palette, refer to +. + +#### Configure Custom OIDC + +The custom method to configure OIDC and apply RBAC for an OIDC provider can be used for all cloud services except Amazon +Elastic Kubernetes Service (EKS) and Azure AKS. + + + + + + +Follow these steps to configure a third-party OIDC IDP. You can apply these steps to all the public cloud providers +except Azure AKS and Amazon EKS clusters. Azure AKS and Amazon EKS require different configurations. AKS requires you to +use Azure Active Directory (AAD) to enable OIDC integration. Refer to +to learn more. Click the **Amazon EKS** tab for steps to configure OIDC for EKS clusters. + +1. Add the following parameters to your Kubernetes YAML file when creating a cluster profile. Replace the + `identityProvider` value with your OIDC provider name. + + ```yaml + pack: + palette: + config: + oidc: + identityProvider: yourIdentityProviderNameHere + ``` + +2. Add the following `kubeadmconfig` parameters. Replace the values with your OIDC provider values. + + ```yaml + kubeadmconfig: + apiServer: + extraArgs: + oidc-issuer-url: "provider URL" + oidc-client-id: "client-id" + oidc-groups-claim: "groups" + oidc-username-claim: "email" + ``` + +3. Under the `clientConfig` parameter section of Kubernetes YAML file, uncomment the `oidc-` configuration lines. + + ```yaml + kubeadmconfig: + clientConfig: + oidc-issuer-url: "" + oidc-client-id: "" + oidc-client-secret: "" + oidc-extra-scope: profile,email,openid + ``` + + + + + +Follow these steps to configure OIDC for managed EKS clusters. + +1. In the Kubernetes pack, uncomment the lines in the `oidcIdentityProvider` parameter section of the Kubernetes pack, + and enter your third-party provider details. + +```yaml +oidcIdentityProvider: + identityProviderConfigName: "Spectro-docs" + issuerUrl: "issuer-url" + clientId: "user-client-id-from-Palette" + usernameClaim: "email" + usernamePrefix: "-" + groupsClaim: "groups" + groupsPrefix: "" + requiredClaims: +``` + +2. Under the `clientConfig` parameter section of Kubernetes pack, uncomment the `oidc-` configuration lines. + +```yaml +clientConfig: + oidc-issuer-url: "{{ .spectro.pack.kubernetes-eks.managedControlPlane.oidcIdentityProvider.issuerUrl }}" + oidc-client-id: "{{ .spectro.pack.kubernetes-eks.managedControlPlane.oidcIdentityProvider.clientId }}" + oidc-client-secret: yourSecretKeyHere + oidc-extra-scope: profile,email +``` + +3. Provide third-party OIDC IDP details. + + +4. Refer to the for guidance on how to access an EKS cluster. + + + + + + + + + + diff --git a/_partials/packs/_longhorn.mdx b/_partials/packs/_longhorn.mdx new file mode 100644 index 0000000000..c1526289d7 --- /dev/null +++ b/_partials/packs/_longhorn.mdx @@ -0,0 +1,324 @@ +--- +partial_category: packs +partial_name: longhorn +--- + + +## Versions Supported + + + + +### Longhorn with Harbor Registry in Airgap Environments + +When you use the Longhorn pack in an airgapped environment, the Harbor Edge-Native Config pack is required for your +cluster to function. However, you must change the image references in the Longhorn pack to use the base URL of the local +Harbor registry. Otherwise, the cluster will fail to deploy, with the `longhorn-driver-deployer` pod stuck in the `Init` +state. + +1. Log in to Palette. + +2. From the left **Main Menu**, select **Profiles**. + +3. Select the cluster profile you use to deploy the cluster with Longhorn. + +4. In the pack YAML for the Longhorn pack, replace the base URL of each image referenced in the pack with the Harbor + registry. + + For example, the following is a snippet of the Longhorn pack's YAML before and after you replace the base URL. + + + + + + ```yaml + pack: + namespace: "longhorn-system" + namespaceLabels: + "longhorn-system": + "pod-security.kubernetes.io/enforce=privileged,pod-security.kubernetes.io/enforce-version=v{{ + .spectro.system.kubernetes.version | substr 0 4 }}" + content: + images: + - image: gcr.io/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-engine:v1.5.3 + - image: gcr.io/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-manager:v1.5.3 + - image: gcr.io/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-ui:v1.5.3 + - image: gcr.io/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-instance-manager:v1.5.3 + - image: gcr.io/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-share-manager:v1.5.3 + ``` + + + + + + ```yaml + pack: + namespace: "longhorn-system" + namespaceLabels: + "longhorn-system": + "pod-security.kubernetes.io/enforce=privileged,pod-security.kubernetes.io/enforce-version=v{{ + .spectro.system.kubernetes.version | substr 0 4 }}" + content: + images: + - image: 10.10.137.220:30003/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-engine:v1.5.3 + - image: 10.10.137.220:30003/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-manager:v1.5.3 + - image: 10.10.137.220:30003/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-ui:v1.5.3 + - image: 10.10.137.220:30003/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-instance-manager:v1.5.3 + - image: 10.10.137.220:30003/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-share-manager:v1.5.3 + ``` + + + + + + Refer to pack documentation to learn how to + find the node IP and port of the Harbor registry. If you have given the registry a domain name, you can use the + domain name instead of the node IP. + +## Known Issues + +The following known issues exist in the Longhorn 1.5.X release. + +- A deadlock may occurs when using a RWX volume and a cluster node is recreated. This issue is disclosed as a + [known issue](https://github.com/longhorn/longhorn/wiki/Release-Known-Issues#v153) in the Longhorn GitHub repository] + and a fix is on the roadmap. Workarounds provided by the community can be found in the + [issue discussion](https://github.com/longhorn/longhorn/issues/7183#issuecomment-1823715359). + +- Rebooting or upgrading a cluster with Longhorn has a small possibility of triggering a race condition that causes pods + to be stuck in the terminating state. This issue is related to a + [known issue](https://github.com/longhorn/longhorn/issues/6962) in the Longhorn GitHub repository and a fix is on the + roadmap. + +- Using Longhorn together in airgap environments with an external registry requires you to update the Longhorn pack + image references to use the base URL of the Harbor registry. For more information, refer to + Longhorn Deployer Stuck in Init State in Airgap Environments section. + + + + +### Longhorn with Harbor Registry in Airgap Environments + +When you use the Longhorn pack in an airgapped environment, the Harbor Edge-Native Config pack is required for your +cluster to function. However, you must change the image references in the Longhorn pack to use the base URL of the local +Harbor registry. Otherwise, the cluster will fail to deploy, with the `longhorn-driver-deployer` pod stuck in the `Init` +state. + +1. Log in to Palette. + +2. From the left **Main Menu**, select **Profiles**. + +3. Select the cluster profile you use to deploy the cluster with Longhorn. + +4. In the pack YAML for the Longhorn pack, replace the base URL of each image referenced in the pack with the Harbor + registry. + + For example, the following is a snippet of the Longhorn pack's YAML before and after you replace the base URL. + + + + + + ```yaml + pack: + namespace: "longhorn-system" + namespaceLabels: + "longhorn-system": + "pod-security.kubernetes.io/enforce=privileged,pod-security.kubernetes.io/enforce-version=v{{ + .spectro.system.kubernetes.version | substr 0 4 }}" + content: + images: + - image: gcr.io/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-engine:v1.5.3 + - image: gcr.io/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-manager:v1.5.3 + - image: gcr.io/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-ui:v1.5.3 + - image: gcr.io/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-instance-manager:v1.5.3 + - image: gcr.io/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-share-manager:v1.5.3 + ``` + + + + + + ```yaml + pack: + namespace: "longhorn-system" + namespaceLabels: + "longhorn-system": + "pod-security.kubernetes.io/enforce=privileged,pod-security.kubernetes.io/enforce-version=v{{ + .spectro.system.kubernetes.version | substr 0 4 }}" + content: + images: + - image: 10.10.137.220:30003/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-engine:v1.5.3 + - image: 10.10.137.220:30003/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-manager:v1.5.3 + - image: 10.10.137.220:30003/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-ui:v1.5.3 + - image: 10.10.137.220:30003/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-instance-manager:v1.5.3 + - image: 10.10.137.220:30003/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-share-manager:v1.5.3 + ``` + + + + + + Refer to pack documentation to learn how to + find the node IP and port of the Harbor registry. If you have given the registry a domain name, you can use the + domain name instead of the node IP. + +## Known Issues + +The following known issues exist in the Longhorn 1.5.X release. + +- A deadlock may occurs when using a RWX volume and a cluster node is recreated. This issue is disclosed as a + [known issue](https://github.com/longhorn/longhorn/wiki/Release-Known-Issues#v153) in the Longhorn GitHub repository] + and a fix is on the roadmap. Workarounds provided by the community can be found in the + [issue discussion](https://github.com/longhorn/longhorn/issues/7183#issuecomment-1823715359). + +- Rebooting or upgrading a cluster with Longhorn has a small possibility of triggering a race condition that causes pods + to be stuck in the terminating state. This issue is related to a + [known issue](https://github.com/longhorn/longhorn/issues/6962) in the Longhorn GitHub repository and a fix is on the + roadmap. + +- Using Longhorn together in airgap environments with an external registry requires you to update the Longhorn pack + image references to use the base URL of the Harbor registry. For more information, refer to + Longhorn Deployer Stuck in Init State in Airgap Environments section. + + + + + +### Longhorn with Harbor Registry in Airgap Environments + +When you use the Longhorn pack in an airgapped environment, the Harbor Edge-Native Config pack is required for your +cluster to function. However, you must change the image references in the Longhorn pack to use the base URL of the local +Harbor registry. Otherwise, the cluster will fail to deploy, with the `longhorn-driver-deployer` pod stuck in the `Init` +state. + +1. Log in to Palette. + +2. From the left **Main Menu**, select **Profiles**. + +3. Select the cluster profile you use to deploy the cluster with Longhorn. + +4. In the pack YAML for the Longhorn pack, replace the base URL of each image referenced in the pack with the Harbor + registry. + + For example, the following is a snippet of the Longhorn pack's YAML before and after you replace the base URL. + + + + + + ```yaml + pack: + namespace: "longhorn-system" + namespaceLabels: + "longhorn-system": + "pod-security.kubernetes.io/enforce=privileged,pod-security.kubernetes.io/enforce-version=v{{ + .spectro.system.kubernetes.version | substr 0 4 }}" + content: + images: + - image: gcr.io/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-engine:v1.5.3 + - image: gcr.io/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-manager:v1.5.3 + - image: gcr.io/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-ui:v1.5.3 + - image: gcr.io/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-instance-manager:v1.5.3 + - image: gcr.io/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-share-manager:v1.5.3 + ``` + + + + + + ```yaml + pack: + namespace: "longhorn-system" + namespaceLabels: + "longhorn-system": + "pod-security.kubernetes.io/enforce=privileged,pod-security.kubernetes.io/enforce-version=v{{ + .spectro.system.kubernetes.version | substr 0 4 }}" + content: + images: + - image: 10.10.137.220:30003/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-engine:v1.5.3 + - image: 10.10.137.220:30003/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-manager:v1.5.3 + - image: 10.10.137.220:30003/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-ui:v1.5.3 + - image: 10.10.137.220:30003/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-instance-manager:v1.5.3 + - image: 10.10.137.220:30003/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-share-manager:v1.5.3 + ``` + + + + + + Refer to pack documentation to learn how to + find the node IP and port of the Harbor registry. If you have given the registry a domain name, you can use the + domain name instead of the node IP. + + + + + +### Longhorn with Harbor Registry in Airgap Environments + +When you use the Longhorn pack in an airgapped environment, the Harbor Edge-Native Config pack is required for your +cluster to function. However, you must change the image references in the Longhorn pack to use the base URL of the local +Harbor registry. Otherwise, the cluster will fail to deploy, with the `longhorn-driver-deployer` pod stuck in the `Init` +state. + +1. Log in to Palette. + +2. From the left **Main Menu**, select **Profiles**. + +3. Select the cluster profile you use to deploy the cluster with Longhorn. + +4. In the pack YAML for the Longhorn pack, replace the base URL of each image referenced in the pack with the Harbor + registry. + + For example, the following is a snipped of the Longhorn pack's YAML before and after you replace the base URL: + + + + + + ```yaml + pack: + namespace: "longhorn-system" + namespaceLabels: + "longhorn-system": + "pod-security.kubernetes.io/enforce=privileged,pod-security.kubernetes.io/enforce-version=v{{ + .spectro.system.kubernetes.version | substr 0 4 }}" + content: + images: + - image: gcr.io/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-engine:v1.5.3 + - image: gcr.io/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-manager:v1.5.3 + - image: gcr.io/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-ui:v1.5.3 + - image: gcr.io/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-instance-manager:v1.5.3 + - image: gcr.io/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-share-manager:v1.5.3 + ``` + + + + + + ```yaml + pack: + namespace: "longhorn-system" + namespaceLabels: + "longhorn-system": + "pod-security.kubernetes.io/enforce=privileged,pod-security.kubernetes.io/enforce-version=v{{ + .spectro.system.kubernetes.version | substr 0 4 }}" + content: + images: + - image: 10.10.137.220:30003/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-engine:v1.5.3 + - image: 10.10.137.220:30003/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-manager:v1.5.3 + - image: 10.10.137.220:30003/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-ui:v1.5.3 + - image: 10.10.137.220:30003/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-instance-manager:v1.5.3 + - image: 10.10.137.220:30003/spectro-images-public/packs/csi-longhorn/1.5.3/longhorn-share-manager:v1.5.3 + ``` + + + + + + Refer to pack documentation to learn how to + find the node IP and port of the Harbor registry. If you have given the registry a domain name, you can use the + domain name instead of the node IP. + + + diff --git a/_partials/packs/_portworkx-operator.mdx b/_partials/packs/_portworkx-operator.mdx new file mode 100644 index 0000000000..8abbdec79d --- /dev/null +++ b/_partials/packs/_portworkx-operator.mdx @@ -0,0 +1,1673 @@ +--- +partial_category: packs +partial_name: portworx-operator +--- + +## Versions Supported + + + + +The default installation of Portworx /w Operator will deploy the following components in the Kubernetes cluster: + +- Portworx Operator + +- `StorageCluster` resource that tells the Operator how to deploy and configure Portworx. + +- `StorageClass` resource for dynamic provisioning of `PersistentVolumes`` using the `pxd.portworx.com` provisioner. + +- [Stork](https://docs.portworx.com/portworx-enterprise/operations/operate-kubernetes/storage-operations/stork.html). + Portworx's storage scheduler for Kubernetes. + + + +
+ +### License Model + +This pack can install Portworx in three different licensing modes: + +- **Essentials**: a free Portworx license with limited functionality that allows you to deploy a small production or + proof-of-concept workloads. Essentials limits capacity and advanced features, but otherwise functions the same way as + the fully featured Portworx Enterprise version of Portworx. + +- **Enterprise**: the fully featured version of Portworx. If you install this model without a valid key, Portworx will + automatically enter a 30-day trial mode. + +- **Enterprise SaaS PAYG**: the fully featured version of Portworx but using a SaaS license key that allows unlimited + use and in-arrears billing. If you install this model without a valid key, Portworx will automatically enter a 30-day + trial mode. + +Use the presets in the pack user interface to select which license model you want to use, then update the +`charts.portworx-generic.license` section for your chosen license model. + +
+ + + + +```yaml +license: + type: essentials + essentials: + # Base64-decoded value of the px-essen-user-id value in the px-essential secret + # Find your Essentials Entitlement ID at https://central.portworx.com/profile + userId: 1234abcd-12ab-12ab-12ab-123456abcdef + # Base64-decoded value of the px-osb-endpoint value in the px-essential secret + # Leave at the default value unless there are special circumstances + endpoint: https://pxessentials.portworx.com/osb/billing/v1/register +``` + + + + +```yaml +license: + type: saas + saas: + key: +``` + + + + + +```yaml +license: + type: enterprise + enterprise: + activateLicense: true + activationId: + # customLicenseServer: + # url: http://hostname:7070/fne/bin/capability + # importUnknownCa: true + # licenseBorrowInterval: 1w15m + # addFeatures: + # - feature1 + # - feature2 +``` + + + + +### Storage Specification + +You can install Portworx in a variety of storage configurations. + +- **Existing disks (generic)**: This mode does not integrate with any particular storage solution, it uses existing + disks available on the nodes. + +- **AWS Cloud Storage**: This mode integrates with Amazon EBS block volumes and allows AWS EKS and EC2 based Kubernetes + clusters to dynamically attach EBS volumes to worker nodes for Portworx. + +- **Azure Cloud Storage**: This mode integrates with Azure block storage and allows Azure AKS and regular Azure + Kubernetes clusters to dynamically attach Azure block storage to worker nodes for Portworx. + +- **Google Cloud Storage**: This mode integrates with Google persistent disks and allows GKE and regular Google + Kubernetes clusters to dynamically attach persistent disks to worker nodes for Portworx. + +- **VMware vSphere Datastores**: This mode integrates with VMware vSphere storage and allows Kubernetes clusters on + vSphere to dynamically attach vSAN and regular Datastore disks to worker nodes for Portworx. + +- **Pure Storage Flash Array**: This mode integrates with Pure Storage Flash Arrays and allows Kubernetes clusters to + dynamically attach Flash Array disks over iSCSI to worker nodes for Portworx. + +:::tip + +Use the presets in the pack user interface to select which storage specification you want to use, then update the +`charts.portworx-generic.storageCluster` section to your specific needs. + +::: + +Select the tab below for the storage specification you want to use. Use the example YAML as a starting point for your +configuration. + +
+ + + + +```yaml +storageCluster: + spec: + # Use the Portworx Spec Builder at https://central.portworx.com/landing/login to define custom configurations, then paste the spec section here + image: portworx/oci-monitor:3.0.0 + imagePullPolicy: Always + deleteStrategy: + type: UninstallAndWipe + kvdb: + internal: true + # endpoints: + # - etcd:https://etcd.company.domain:2379 + # authSecret: px-kvdb-auth + storage: + useAll: true + # kvdbDevice: /dev/sdb + journalDevice: auto + # network: + # dataInterface: eth0 + # mgmtInterface: eth1 + secretsProvider: k8s + stork: + enabled: true + args: + webhook-controller: "true" + autopilot: + enabled: true + providers: + - name: default + params: + url: http://prometheus-operator-prometheus.monitoring.svc.cluster.local:9090 + type: prometheus + runtimeOptions: + default-io-profile: "6" + csi: + enabled: true + monitoring: + telemetry: + enabled: true + prometheus: + enabled: false + exportMetrics: true +``` + + + + +To deploy Portworx in an AWS environment, ensure the following IAM policy is created in AWS and attached to the +`nodes.cluster-api-provider-aws.sigs.k8s.io` IAM role.
+ +```yaml +{ + "Version": "2012-10-17", + "Statement": + [ + { + "Effect": "Allow", + "Action": + [ + "ec2:AttachVolume", + "ec2:ModifyVolume", + "ec2:DetachVolume", + "ec2:CreateTags", + "ec2:CreateVolume", + "ec2:DeleteTags", + "ec2:DeleteVolume", + "ec2:DescribeTags", + "ec2:DescribeVolumeAttribute", + "ec2:DescribeVolumesModifications", + "ec2:DescribeVolumeStatus", + "ec2:DescribeVolumes", + "ec2:DescribeInstances", + "autoscaling:DescribeAutoScalingGroups", + ], + "Resource": ["*"], + }, + ], +} +``` + +- When deploying a regular Kubernetes cluster on an AWS EC2 using Palette, attach the policy to the + `nodes.cluster-api-provider-aws.sigs.k8s.io` IAM role. Or alternatively, edit the AWS cloud account in Palette, enable + the `Add IAM Policies` option, and select the Portworx IAM policy described above. This will automatically attach the + IAM policy to the correct IAM role.. + +- When deploying an AWS EKS cluster, use the `managedMachinePool.roleAdditionalPolicies` option in the Kubernetes pack + layer YAML to automatically attach the Portworx IAM policy to the EKS worker pool IAM role . The example below shows + how to attach the Portworx IAM policy to the EKS worker pool IAM role. + +```yaml +managedMachinePool: + roleAdditionalPolicies: + - "arn:aws:iam::012345678901:policy/my-portworx-policy" +``` + +```yaml +storageCluster: + annotations: + portworx.io/is-eks: "true" + spec: + # Use the Portworx Spec Builder at https://central.portworx.com/landing/login to define custom configurations, then paste the spec section here + image: portworx/oci-monitor:3.0.0 + imagePullPolicy: Always + deleteStrategy: + type: UninstallAndWipe + kvdb: + internal: true + # endpoints: + # - etcd:https://etcd.company.domain:2379 + # authSecret: px-kvdb-auth + cloudStorage: + maxStorageNodesPerZone: 0 + deviceSpecs: + - type=gp3,size=150 + kvdbDeviceSpec: type=gp3,size=150 + journalDeviceSpec: auto + secretsProvider: k8s + stork: + enabled: true + args: + webhook-controller: "true" + autopilot: + enabled: true + providers: + - name: default + params: + url: http://prometheus-operator-prometheus.monitoring.svc.cluster.local:9090 + type: prometheus + runtimeOptions: + default-io-profile: "6" + csi: + enabled: true + monitoring: + telemetry: + enabled: true + prometheus: + enabled: false + exportMetrics: true +``` + +
+ + +```yaml +storageCluster: + annotations: + portworx.io/is-aks: "true" + spec: + # Use the Portworx Spec Builder at https://central.portworx.com/landing/login to define custom configurations, then paste the spec section here + image: portworx/oci-monitor:3.0.0 + imagePullPolicy: Always + deleteStrategy: + type: UninstallAndWipe + kvdb: + internal: true + # endpoints: + # - etcd:https://etcd.company.domain:2379 + # authSecret: px-kvdb-auth + cloudStorage: + maxStorageNodesPerZone: 0 + deviceSpecs: + - type=Premium_LRS,size=150 + kvdbDeviceSpec: type=Premium_LRS,size=150 + journalDeviceSpec: auto + secretsProvider: k8s + stork: + enabled: true + args: + webhook-controller: "true" + autopilot: + enabled: true + providers: + - name: default + params: + url: http://prometheus-operator-prometheus.monitoring.svc.cluster.local:9090 + type: prometheus + runtimeOptions: + default-io-profile: "6" + csi: + enabled: true + monitoring: + telemetry: + enabled: true + prometheus: + enabled: false + exportMetrics: true + env: + - name: AZURE_CLIENT_SECRET + valueFrom: + secretKeyRef: + name: px-azure + key: AZURE_CLIENT_SECRET + - name: AZURE_CLIENT_ID + valueFrom: + secretKeyRef: + name: px-azure + key: AZURE_CLIENT_ID + - name: AZURE_TENANT_ID + valueFrom: + secretKeyRef: + name: px-azure + key: AZURE_TENANT_ID +azureSecret: + tenantId: "your_azure_tenant_id" + clientId: "your_azure_client_id" + clientSecret: "your_client_secret" +``` + + + + +```yaml +storageCluster: + annotations: + portworx.io/is-gke: "true" + spec: + # Use the Portworx Spec Builder at https://central.portworx.com/landing/login to define custom configurations, then paste the spec section here + image: portworx/oci-monitor:3.0.0 + imagePullPolicy: Always + deleteStrategy: + type: UninstallAndWipe + kvdb: + internal: true + # endpoints: + # - etcd:https://etcd.company.domain:2379 + # authSecret: px-kvdb-auth + cloudStorage: + maxStorageNodesPerZone: 0 + deviceSpecs: + - type=pd-standard,size=150 + kvdbDeviceSpec: type=pd-standard,size=150 + journalDeviceSpec: auto + secretsProvider: k8s + stork: + enabled: true + args: + webhook-controller: "true" + autopilot: + enabled: true + providers: + - name: default + params: + url: http://prometheus-operator-prometheus.monitoring.svc.cluster.local:9090 + type: prometheus + runtimeOptions: + default-io-profile: "6" + csi: + enabled: true + monitoring: + telemetry: + enabled: true + prometheus: + enabled: false + exportMetrics: true +``` + + + + +```yaml +storageCluster: + spec: + # Use the Portworx Spec Builder at https://central.portworx.com/landing/login to define custom configurations, then paste the spec section here + image: portworx/oci-monitor:3.0.0 + imagePullPolicy: Always + deleteStrategy: + type: UninstallAndWipe + kvdb: + internal: true + # endpoints: + # - etcd:https://etcd.company.domain:2379 + # authSecret: px-kvdb-auth + cloudStorage: + maxStorageNodesPerZone: 0 + deviceSpecs: + - type=lazyzeroedthick,size=150 + kvdbDeviceSpec: type=lazyzeroedthick,size=32 + journalDeviceSpec: auto + secretsProvider: k8s + stork: + enabled: true + args: + webhook-controller: "true" + autopilot: + enabled: true + providers: + - name: default + params: + url: http://prometheus-operator-prometheus.monitoring.svc.cluster.local:9090 + type: prometheus + runtimeOptions: + default-io-profile: "6" + csi: + enabled: true + monitoring: + telemetry: + enabled: true + prometheus: + enabled: false + exportMetrics: true + env: + - name: VSPHERE_INSECURE + value: "true" + - name: VSPHERE_USER + valueFrom: + secretKeyRef: + name: px-vsphere-secret + key: VSPHERE_USER + - name: VSPHERE_PASSWORD + valueFrom: + secretKeyRef: + name: px-vsphere-secret + key: VSPHERE_PASSWORD + - name: VSPHERE_VCENTER + value: my-vcenter.company.local + - name: VSPHERE_VCENTER_PORT + value: "443" + - name: VSPHERE_DATASTORE_PREFIX + value: Datastore + - name: VSPHERE_INSTALL_MODE + value: shared +vsphereSecret: + user: "username_for_vCenter_here" + password: "your_password" +``` + + + + +To activate the Pure Flash Array integration, you will need to create a Kubernetes secret named `px-pure-secret` on your +cluster containing your +[Flash Array license JSON](https://docs.portworx.com/portworx-enterprise/platform/kubernetes/flasharray/install/install-flasharray-on-cloud#create-a-json-configuration-file). +The secret must be created in the namespace that contains the `StorageCluster` resource. The namespace is `portworx` by +default. + +Use the following command to create the secret: + +``` +kubectl create secret generic px-pure-secret --namespace portworx --from-file=pure.json= +``` + +Alternatively, you can attach a manifest to the Portworx /w Operator pack that contains the YAML for the secret. + +```yaml +storageCluster: + spec: + # Use the Portworx Spec Builder at https://central.portworx.com/landing/login to define custom configurations, then paste the spec section here + image: portworx/oci-monitor:3.0.0 + imagePullPolicy: Always + deleteStrategy: + type: UninstallAndWipe + kvdb: + internal: true + # endpoints: + # - etcd:https://etcd.company.domain:2379 + # authSecret: px-kvdb-auth + cloudStorage: + maxStorageNodesPerZone: 0 + deviceSpecs: + - size=150 + kvdbDeviceSpec: size=32 + journalDeviceSpec: auto + # network: + # dataInterface: eth0 + # mgmtInterface: eth1 + secretsProvider: k8s + stork: + enabled: true + args: + webhook-controller: "true" + autopilot: + enabled: true + providers: + - name: default + params: + url: http://prometheus-operator-prometheus.monitoring.svc.cluster.local:9090 + type: prometheus + runtimeOptions: + default-io-profile: "6" + csi: + enabled: true + monitoring: + telemetry: + enabled: true + prometheus: + enabled: false + exportMetrics: true + env: + - name: PURE_FLASHARRAY_SAN_TYPE + value: ISCSI # or "FC" +``` + + + + +
+ +
+ +### Etcd + +Portworx Enterprise supports multiple etcd scenarios. Portworx will default to an internal key-value store (KVDB). + +#### Kvdb and Etcd Presets + +The following pack presets are available for configuring etcd. + +The pack defaults to the **Use Internal Kvdb** option. You can change to a different preset if you need to connect to an +external etcd server. + + + + +```yaml +storageCluster: + spec: + kvdb: + internal: true +``` + + + + +```yaml +storageCluster: + spec: + kvdb: + endpoints: + - etcd:http://etcd.company.domain:2379 +``` + + + + + +```yaml +storageCluster: + spec: + kvdb: + endpoints: + - etcd:http://etcd.company.domain:2379 + authSecret: px-kvdb-auth + +# External kvdb related config, only used if storageCluster.spec.kvdb.internal != true +externalKvdb: + useCertsForSSL: true + # The CA cert to use for etcd authentication. Make sure to follow the same indentation style as given in the example below + cacert: | + < PEM KEY DATA > + # The cert to use for etcd authentication. Make sure to follow the same indentation style as given in the example below + cert: | + < PEM KEY DATA > + # The key to use for etcd authentication. Make sure to follow the same indentation style as given in the example below + key: | + < PEM KEY DATA > +``` + + + + +#### Integration With External Etcd + +Use the following steps to integrate Portworx to an external etcd server by following the steps below. + +1. During the cluster profile creation, select the Portworx pack and click on the **Presets** button in the top right + corner of the pack user interface. + +2. Select the **Use External Kvdb over HTTP** or **Use External Kvdb over SSL** preset in the pack UI. If your external + etcd server requires certificate authentication, select **Use External Kvdb over SSL** preset. + +3. Configure the external etcd endpoints in the YAML parameter block named + `charts.portworx-generic.storageCluster.spec.kvdb.endpoints`. + +4. If you selected the **Use External Kvdb over SSL** preset, you will also need to configure the + `charts.portworx-generic.externalKvdb` section. Set `charts.portworx-generic.externalKvdb.useCertsForSSL` to `true` + to enable certificate authentication. Input your SSL certificates in the `cacert`, `cert`, and `key` sections of + `charts.portworx-generic.externalKvdb`. The preset will give you cropped example values that you can overwrite with + your actual PEM certificates. Leave the `charts.portworx-generic.storageCluster.spec.kvdb.endpoints` option to its + default of `px-kvdb-auth`. The name of the Kubernetes secret will automatically get created by this pack. + +:::warning + + When inserting SSL certificate values into the YAML. Ensure you follow the provided indentation style. Otherwise, SSL certificates will not be imported correctly and will result in Portworx deployment failure. + +::: + +
+ +
+ + + +The default installation of Portworx /w Operator will deploy the following components in the Kubernetes cluster: + +- Portworx Operator + +- `StorageCluster` resource that tells the Operator how to deploy and configure Portworx. + +- `StorageClass` resource for dynamic provisioning of `PersistentVolumes`` using the `pxd.portworx.com` provisioner. + +- [Stork](https://docs.portworx.com/portworx-enterprise/operations/operate-kubernetes/storage-operations/stork.html). + Portworx's storage scheduler for Kubernetes. + +- [Lighthouse](https://portworx.com/blog/manage-portworx-clusters-using-lighthouse/). Portworx's monitoring and alerting + solution for Kubernetes. + +
+ +### License Model + +This pack can install Portworx in three different licensing modes: + +- **Essentials**: a free Portworx license with limited functionality that allows you to deploy a small production or + proof-of-concept workloads. Essentials limits capacity and advanced features, but otherwise functions the same way as + the fully featured Portworx Enterprise version of Portworx. + +- **Enterprise**: the fully featured version of Portworx. If you install this model without a valid key, Portworx will + automatically enter a 30-day trial mode. + +- **Enterprise SaaS PAYG**: the fully featured version of Portworx but using a SaaS license key that allows unlimited + use and in-arrears billing. If you install this model without a valid key, Portworx will automatically enter a 30-day + trial mode. + +Use the presets in the pack user interface to select which license model you want to use, then update the +`charts.portworx-generic.license` section for your chosen license model. + +
+ + + + +```yaml +license: + type: essentials + essentials: + # Base64-decoded value of the px-essen-user-id value in the px-essential secret + # Find your Essentials Entitlement ID at https://central.portworx.com/profile + userId: 1234abcd-12ab-12ab-12ab-123456abcdef + # Base64-decoded value of the px-osb-endpoint value in the px-essential secret + # Leave at the default value unless there are special circumstances + endpoint: https://pxessentials.portworx.com/osb/billing/v1/register +``` + + + + +```yaml +license: + type: saas + saas: + key: +``` + + + + + +```yaml +license: + type: enterprise + enterprise: + activateLicense: true + activationId: + # customLicenseServer: + # url: http://hostname:7070/fne/bin/capability + # importUnknownCa: true + # licenseBorrowInterval: 1w15m + # addFeatures: + # - feature1 + # - feature2 +``` + + + + +### Storage Specification + +You can install Portworx in a variety of storage configurations. + +- **Existing disks (generic)**: This mode does not integrate with any particular storage solution, it uses existing + disks available on the nodes. + +- **AWS Cloud Storage**: This mode integrates with Amazon EBS block volumes and allows AWS EKS and EC2 based Kubernetes + clusters to dynamically attach EBS volumes to worker nodes for Portworx. + +- **Azure Cloud Storage**: This mode integrates with Azure block storage and allows Azure AKS and regular Azure + Kubernetes clusters to dynamically attach Azure block storage to worker nodes for Portworx. + +- **Google Cloud Storage**: This mode integrates with Google persistent disks and allows GKE and regular Google + Kubernetes clusters to dynamically attach persistent disks to worker nodes for Portworx. + +- **VMware vSphere Datastores**: This mode integrates with VMware vSphere storage and allows Kubernetes clusters on + vSphere to dynamically attach vSAN and regular Datastore disks to worker nodes for Portworx. + +- **Pure Storage Flash Array**: This mode integrates with Pure Storage Flash Arrays and allows Kubernetes clusters to + dynamically attach Flash Array disks over iSCSI to worker nodes for Portworx. + +:::tip + +Use the presets in the pack user interface to select which storage specification you want to use, then update the +`charts.portworx-generic.storageCluster` section to your specific needs. + +::: + +Select the tab below for the storage specification you want to use. Use the example YAML as a starting point for your +configuration. + +
+ + + + +```yaml +storageCluster: + spec: + # Use the Portworx Spec Builder at https://central.portworx.com/landing/login to define custom configurations, then paste the spec section here + image: portworx/oci-monitor:2.11.2 + imagePullPolicy: Always + kvdb: + internal: true + # endpoints: + # - etcd:https://etcd.company.domain:2379 + # authSecret: px-kvdb-auth + storage: + useAll: true + journalDevice: auto + secretsProvider: k8s + stork: + enabled: true + args: + webhook-controller: "true" + autopilot: + enabled: true + csi: + enabled: true + monitoring: + prometheus: + enabled: false + exportMetrics: false +``` + + + + +To deploy Portworx in an AWS environment, ensure the following IAM policy is created in AWS and attached to the +`nodes.cluster-api-provider-aws.sigs.k8s.io` IAM role.
+ +```yaml +{ + "Version": "2012-10-17", + "Statement": + [ + { + "Effect": "Allow", + "Action": + [ + "ec2:AttachVolume", + "ec2:ModifyVolume", + "ec2:DetachVolume", + "ec2:CreateTags", + "ec2:CreateVolume", + "ec2:DeleteTags", + "ec2:DeleteVolume", + "ec2:DescribeTags", + "ec2:DescribeVolumeAttribute", + "ec2:DescribeVolumesModifications", + "ec2:DescribeVolumeStatus", + "ec2:DescribeVolumes", + "ec2:DescribeInstances", + "autoscaling:DescribeAutoScalingGroups", + ], + "Resource": ["*"], + }, + ], +} +``` + +- When deploying a regular Kubernetes cluster on an AWS EC2 using Palette, attach the policy to the + `nodes.cluster-api-provider-aws.sigs.k8s.io` IAM role. Or alternatively, edit the AWS cloud account in Palette, enable + the `Add IAM Policies` option, and select the Portworx IAM policy described above. This will automatically attach the + IAM policy to the correct IAM role.. + +- When deploying an AWS EKS cluster, use the `managedMachinePool.roleAdditionalPolicies` option in the Kubernetes pack + layer YAML to automatically attach the Portworx IAM policy to the EKS worker pool IAM role . The example below shows + how to attach the Portworx IAM policy to the EKS worker pool IAM role. + +```yaml +managedMachinePool: + roleAdditionalPolicies: + - "arn:aws:iam::012345678901:policy/my-portworx-policy" +``` + +```yaml +storageCluster: + annotations: + portworx.io/is-eks: "true" + spec: + # Use the Portworx Spec Builder at https://central.portworx.com/landing/login to define custom configurations, then paste the spec section here + image: portworx/oci-monitor:2.11.2 + imagePullPolicy: Always + kvdb: + internal: true + # endpoints: + # - etcd:https://etcd.company.domain:2379 + # authSecret: px-kvdb-auth + cloudStorage: + deviceSpecs: + - type=gp2,size=150 + kvdbDeviceSpec: type=gp2,size=150 + secretsProvider: k8s + stork: + enabled: true + args: + webhook-controller: "true" + autopilot: + enabled: true + csi: + enabled: true + monitoring: + prometheus: + enabled: false + exportMetrics: false +``` + +
+ + +```yaml +storageCluster: + annotations: + portworx.io/is-aks: "true" + spec: + # Use the Portworx Spec Builder at https://central.portworx.com/landing/login to define custom configurations, then paste the spec section here + image: portworx/oci-monitor:2.11.2 + imagePullPolicy: Always + kvdb: + internal: true + # endpoints: + # - etcd:https://etcd.company.domain:2379 + # authSecret: px-kvdb-auth + cloudStorage: + deviceSpecs: + - type=Premium_LRS,size=150 + kvdbDeviceSpec: type=Premium_LRS,size=150 + secretsProvider: k8s + stork: + enabled: true + args: + webhook-controller: "true" + autopilot: + enabled: true + csi: + enabled: true + monitoring: + prometheus: + enabled: false + exportMetrics: false + env: + - name: AZURE_CLIENT_SECRET + valueFrom: + secretKeyRef: + name: px-azure + key: AZURE_CLIENT_SECRET + - name: AZURE_CLIENT_ID + valueFrom: + secretKeyRef: + name: px-azure + key: AZURE_CLIENT_ID + - name: AZURE_TENANT_ID + valueFrom: + secretKeyRef: + name: px-azure + key: AZURE_TENANT_ID + azureSecret: + tenantId: "your_azure_tenant_id" + clientId: "your_azure_client_id" + clientSecret: "your_client_secret" +``` + + + + +```yaml +storageCluster: + annotations: + portworx.io/is-gke: "true" + spec: + # Use the Portworx Spec Builder at https://central.portworx.com/landing/login to define custom configurations, then paste the spec section here + image: portworx/oci-monitor:2.11.2 + imagePullPolicy: Always + kvdb: + internal: true + # endpoints: + # - etcd:https://etcd.company.domain:2379 + # authSecret: px-kvdb-auth + cloudStorage: + deviceSpecs: + - type=pd-standard,size=150 + kvdbDeviceSpec: type=pd-standard,size=150 + secretsProvider: k8s + stork: + enabled: true + args: + webhook-controller: "true" + autopilot: + enabled: true + csi: + enabled: true + monitoring: + prometheus: + enabled: false + exportMetrics: false +``` + + + + +```yaml +storageCluster: + spec: + # Use the Portworx Spec Builder at https://central.portworx.com/landing/login to define custom configurations, then paste the spec section here + image: portworx/oci-monitor:2.11.2 + imagePullPolicy: Always + kvdb: + internal: true + # endpoints: + # - etcd:https://etcd.company.domain:2379 + # authSecret: px-kvdb-auth + cloudStorage: + deviceSpecs: + - type=lazyzeroedthick,size=150 + kvdbDeviceSpec: type=lazyzeroedthick,size=32 + secretsProvider: k8s + stork: + enabled: true + args: + webhook-controller: "true" + autopilot: + enabled: true + csi: + enabled: true + monitoring: + prometheus: + enabled: false + exportMetrics: false + env: + - name: VSPHERE_INSECURE + value: "true" + - name: VSPHERE_USER + valueFrom: + secretKeyRef: + name: px-vsphere-secret + key: VSPHERE_USER + - name: VSPHERE_PASSWORD + valueFrom: + secretKeyRef: + name: px-vsphere-secret + key: VSPHERE_PASSWORD + - name: VSPHERE_VCENTER + value: "my-vcenter.company.local" + - name: VSPHERE_VCENTER_PORT + value: "443" + - name: VSPHERE_DATASTORE_PREFIX + value: "datastore" + - name: VSPHERE_INSTALL_MODE + value: "shared" +vsphereSecret: + user: "username_for_vCenter_here" + password: "your_password" +``` + + + + +To activate the Pure Flash Array integration, you will need to create a Kubernetes secret named `px-pure-secret` on your +cluster containing your +[Flash Array license JSON](https://docs.portworx.com/portworx-enterprise/platform/kubernetes/flasharray/install/install-flasharray-on-cloud#create-a-json-configuration-file). +The secret must be created in the namespace that contains the `StorageCluster` resource. The namespace is `kube-system` +by default. + +Use the following command to create the secret: + +``` +kubectl create secret generic px-pure-secret --namespace portworx --from-file=pure.json= +``` + +Alternatively, you can attach a manifest to the Portworx /w Operator pack that contains the YAML for the secret. + +```yaml +storageCluster: + spec: + # Use the Portworx Spec Builder at https://central.portworx.com/landing/login to define custom configurations, then paste the spec section here + image: portworx/oci-monitor:2.11.2 + imagePullPolicy: Always + kvdb: + internal: true + # endpoints: + # - etcd:https://etcd.company.domain:2379 + # authSecret: px-kvdb-auth + cloudStorage: + deviceSpecs: + - size=150 + kvdbDeviceSpec: size=32 + secretsProvider: k8s + stork: + enabled: true + args: + webhook-controller: "true" + autopilot: + enabled: true + csi: + enabled: true + monitoring: + prometheus: + enabled: false + exportMetrics: false + env: + - name: PURE_FLASHARRAY_SAN_TYPE + value: "ISCSI" +``` + + +
+ +
+ +### Etcd + +Portworx Enterprise supports multiple etcd scenarios. Portworx will default to an internal key-value store (KVDB). + +#### Kvdb and Etcd Presets + +The following pack presets are available for configuring etcd. + +The pack defaults to the **Use Internal Kvdb** option. You can change to a different preset if you need to connect to an +external etcd server. + + + + +```yaml +storageCluster: + spec: + kvdb: + internal: true +``` + + + + +```yaml +storageCluster: + spec: + kvdb: + endpoints: + - etcd:http://etcd.company.domain:2379 +``` + + + + + +```yaml +storageCluster: + spec: + kvdb: + endpoints: + - etcd:http://etcd.company.domain:2379 + authSecret: px-kvdb-auth + +# External kvdb related config, only used if storageCluster.spec.kvdb.internal != true +externalKvdb: + useCertsForSSL: true + # The CA cert to use for etcd authentication. Make sure to follow the same indentation style as given in the example below + cacert: | + < PEM KEY DATA > + # The cert to use for etcd authentication. Make sure to follow the same indentation style as given in the example below + cert: | + < PEM KEY DATA > + # The key to use for etcd authentication. Make sure to follow the same indentation style as given in the example below + key: | + < PEM KEY DATA > +``` + + + + +#### Integration With External Etcd + +Use the following steps to integrate Portworx to an external etcd server by following the steps below. + +1. During the cluster profile creation, select the Portworx pack and click on the **Presets** button in the top right + corner of the pack user interface. + +2. Select the **Use External Kvdb over HTTP** or **Use External Kvdb over SSL** preset in the pack UI. If your external + etcd server requires certificate authentication, select **Use External Kvdb over SSL** preset. + +3. Configure the external etcd endpoints in the YAML parameter block named + `charts.portworx-generic.storageCluster.spec.kvdb.endpoints`. + +4. If you selected the **Use External Kvdb over SSL** preset, you will also need to configure the + `charts.portworx-generic.externalKvdb` section. Set `charts.portworx-generic.externalKvdb.useCertsForSSL` to `true` + to enable certificate authentication. Input your SSL certificates in the `cacert`, `cert`, and `key` sections of + `charts.portworx-generic.externalKvdb`. The preset will give you cropped example values that you can overwrite with + your actual PEM certificates. Leave the `charts.portworx-generic.storageCluster.spec.kvdb.endpoints` option to its + default of `px-kvdb-auth`. The name of the Kubernetes secret will automatically get created by this pack. + +:::warning + + When inserting SSL certificate values into the YAML. Ensure you follow the provided indentation style. Otherwise, SSL certificates will not be imported correctly and will result in Portworx deployment failure. + +::: + +
+ +
+ + + +The default installation of Portworx /w Operator will deploy the following components in the Kubernetes cluster: + +- Portworx Operator + +- `StorageCluster` resource that tells the Operator how to deploy and configure Portworx. + +- `StorageClass` resource for dynamic provisioning of `PersistentVolumes`` using the `pxd.portworx.com` provisioner. + +- [Stork](https://docs.portworx.com/portworx-enterprise/operations/operate-kubernetes/storage-operations/stork.html). + Portworx's storage scheduler for Kubernetes. + +- [Lighthouse](https://portworx.com/blog/manage-portworx-clusters-using-lighthouse/). Portworx's monitoring and alerting + solution for Kubernetes. + +
+ +### License Model + +This pack can install Portworx in three different licensing modes: + +- **Essentials**: a free Portworx license with limited functionality that allows you to deploy a small production or + proof-of-concept workloads. Essentials limits capacity and advanced features, but otherwise functions the same way as + the fully featured Portworx Enterprise version of Portworx. + +- **Enterprise**: the fully featured version of Portworx. If you install this model without a valid key, Portworx will + automatically enter a 30-day trial mode. + +- **Enterprise SaaS PAYG**: the fully featured version of Portworx but using a SaaS license key that allows unlimited + use and in-arrears billing. If you install this model without a valid key, Portworx will automatically enter a 30-day + trial mode. + +Use the presets in the pack user interface to select which license model you want to use, then update the +`charts.portworx-generic.license` section for your chosen license model. + +
+ + + + +```yaml +license: + type: essentials + essentials: + # Base64-decoded value of the px-essen-user-id value in the px-essential secret + # Find your Essentials Entitlement ID at https://central.portworx.com/profile + userId: 1234abcd-12ab-12ab-12ab-123456abcdef + # Base64-decoded value of the px-osb-endpoint value in the px-essential secret + # Leave at the default value unless there are special circumstances + endpoint: https://pxessentials.portworx.com/osb/billing/v1/register +``` + + + + +```yaml +license: + type: saas + saas: + key: +``` + + + + + +```yaml +license: + type: enterprise + enterprise: + activateLicense: true + activationId: + # customLicenseServer: + # url: http://hostname:7070/fne/bin/capability + # importUnknownCa: true + # licenseBorrowInterval: 1w15m + # addFeatures: + # - feature1 + # - feature2 +``` + + + + +### Storage Specification + +You can install Portworx in a variety of storage configurations. + +- **Existing disks (generic)**: This mode does not integrate with any particular storage solution, it uses existing + disks available on the nodes. + +- **AWS Cloud Storage**: This mode integrates with Amazon EBS block volumes and allows AWS EKS and EC2 based Kubernetes + clusters to dynamically attach EBS volumes to worker nodes for Portworx. + +- **Azure Cloud Storage**: This mode integrates with Azure block storage and allows Azure AKS and regular Azure + Kubernetes clusters to dynamically attach Azure block storage to worker nodes for Portworx. + +- **Google Cloud Storage**: This mode integrates with Google persistent disks and allows GKE and regular Google + Kubernetes clusters to dynamically attach persistent disks to worker nodes for Portworx. + +- **VMware vSphere Datastores**: This mode integrates with VMware vSphere storage and allows Kubernetes clusters on + vSphere to dynamically attach vSAN and regular Datastore disks to worker nodes for Portworx. + +- **Pure Storage Flash Array**: This mode integrates with Pure Storage Flash Arrays and allows Kubernetes clusters to + dynamically attach Flash Array disks over iSCSI to worker nodes for Portworx. + +:::tip + +Use the presets in the pack user interface to select which storage specification you want to use, then update the +`charts.portworx-generic.storageCluster` section to your specific needs. + +::: + +Select the tab below for the storage specification you want to use. Use the example YAML as a starting point for your +configuration. + +
+ + + + +```yaml +storageCluster: + spec: + # Use the Portworx Spec Builder at https://central.portworx.com/landing/login to define custom configurations, then paste the spec section here + image: portworx/oci-monitor:2.11.2 + imagePullPolicy: Always + kvdb: + internal: true + # endpoints: + # - etcd:https://etcd.company.domain:2379 + # authSecret: px-kvdb-auth + storage: + useAll: true + journalDevice: auto + secretsProvider: k8s + stork: + enabled: true + args: + webhook-controller: "true" + autopilot: + enabled: true + csi: + enabled: true + monitoring: + prometheus: + enabled: false + exportMetrics: false +``` + + + + +To deploy Portworx in an AWS environment, ensure the following IAM policy is created in AWS and attached to the +`nodes.cluster-api-provider-aws.sigs.k8s.io` IAM role.
+ +```yaml +{ + "Version": "2012-10-17", + "Statement": + [ + { + "Effect": "Allow", + "Action": + [ + "ec2:AttachVolume", + "ec2:ModifyVolume", + "ec2:DetachVolume", + "ec2:CreateTags", + "ec2:CreateVolume", + "ec2:DeleteTags", + "ec2:DeleteVolume", + "ec2:DescribeTags", + "ec2:DescribeVolumeAttribute", + "ec2:DescribeVolumesModifications", + "ec2:DescribeVolumeStatus", + "ec2:DescribeVolumes", + "ec2:DescribeInstances", + "autoscaling:DescribeAutoScalingGroups", + ], + "Resource": ["*"], + }, + ], +} +``` + +- When deploying a regular Kubernetes cluster on an AWS EC2 using Palette, attach the policy to the + `nodes.cluster-api-provider-aws.sigs.k8s.io` IAM role. Or alternatively, edit the AWS cloud account in Palette, enable + the `Add IAM Policies` option, and select the Portworx IAM policy described above. This will automatically attach the + IAM policy to the correct IAM role.. + +- When deploying an AWS EKS cluster, use the `managedMachinePool.roleAdditionalPolicies` option in the Kubernetes pack + layer YAML to automatically attach the Portworx IAM policy to the EKS worker pool IAM role . The example below shows + how to attach the Portworx IAM policy to the EKS worker pool IAM role. + +```yaml +managedMachinePool: + roleAdditionalPolicies: + - "arn:aws:iam::012345678901:policy/my-portworx-policy" +``` + +```yaml +storageCluster: + annotations: + portworx.io/is-eks: "true" + spec: + # Use the Portworx Spec Builder at https://central.portworx.com/landing/login to define custom configurations, then paste the spec section here + image: portworx/oci-monitor:2.11.2 + imagePullPolicy: Always + kvdb: + internal: true + # endpoints: + # - etcd:https://etcd.company.domain:2379 + # authSecret: px-kvdb-auth + cloudStorage: + deviceSpecs: + - type=gp2,size=150 + kvdbDeviceSpec: type=gp2,size=150 + secretsProvider: k8s + stork: + enabled: true + args: + webhook-controller: "true" + autopilot: + enabled: true + csi: + enabled: true + monitoring: + prometheus: + enabled: false + exportMetrics: false +``` + +
+ + +```yaml +storageCluster: + annotations: + portworx.io/is-aks: "true" + spec: + # Use the Portworx Spec Builder at https://central.portworx.com/landing/login to define custom configurations, then paste the spec section here + image: portworx/oci-monitor:2.11.2 + imagePullPolicy: Always + kvdb: + internal: true + # endpoints: + # - etcd:https://etcd.company.domain:2379 + # authSecret: px-kvdb-auth + cloudStorage: + deviceSpecs: + - type=Premium_LRS,size=150 + kvdbDeviceSpec: type=Premium_LRS,size=150 + secretsProvider: k8s + stork: + enabled: true + args: + webhook-controller: "true" + autopilot: + enabled: true + csi: + enabled: true + monitoring: + prometheus: + enabled: false + exportMetrics: false + env: + - name: AZURE_CLIENT_SECRET + valueFrom: + secretKeyRef: + name: px-azure + key: AZURE_CLIENT_SECRET + - name: AZURE_CLIENT_ID + valueFrom: + secretKeyRef: + name: px-azure + key: AZURE_CLIENT_ID + - name: AZURE_TENANT_ID + valueFrom: + secretKeyRef: + name: px-azure + key: AZURE_TENANT_ID + azureSecret: + tenantId: "your_azure_tenant_id" + clientId: "your_azure_client_id" + clientSecret: "your_client_secret" +``` + + + + +```yaml +storageCluster: + annotations: + portworx.io/is-gke: "true" + spec: + # Use the Portworx Spec Builder at https://central.portworx.com/landing/login to define custom configurations, then paste the spec section here + image: portworx/oci-monitor:2.11.2 + imagePullPolicy: Always + kvdb: + internal: true + # endpoints: + # - etcd:https://etcd.company.domain:2379 + # authSecret: px-kvdb-auth + cloudStorage: + deviceSpecs: + - type=pd-standard,size=150 + kvdbDeviceSpec: type=pd-standard,size=150 + secretsProvider: k8s + stork: + enabled: true + args: + webhook-controller: "true" + autopilot: + enabled: true + csi: + enabled: true + monitoring: + prometheus: + enabled: false + exportMetrics: false +``` + + + + +```yaml +storageCluster: + spec: + # Use the Portworx Spec Builder at https://central.portworx.com/landing/login to define custom configurations, then paste the spec section here + image: portworx/oci-monitor:2.11.2 + imagePullPolicy: Always + kvdb: + internal: true + # endpoints: + # - etcd:https://etcd.company.domain:2379 + # authSecret: px-kvdb-auth + cloudStorage: + deviceSpecs: + - type=lazyzeroedthick,size=150 + kvdbDeviceSpec: type=lazyzeroedthick,size=32 + secretsProvider: k8s + stork: + enabled: true + args: + webhook-controller: "true" + autopilot: + enabled: true + csi: + enabled: true + monitoring: + prometheus: + enabled: false + exportMetrics: false + env: + - name: VSPHERE_INSECURE + value: "true" + - name: VSPHERE_USER + valueFrom: + secretKeyRef: + name: px-vsphere-secret + key: VSPHERE_USER + - name: VSPHERE_PASSWORD + valueFrom: + secretKeyRef: + name: px-vsphere-secret + key: VSPHERE_PASSWORD + - name: VSPHERE_VCENTER + value: "my-vcenter.company.local" + - name: VSPHERE_VCENTER_PORT + value: "443" + - name: VSPHERE_DATASTORE_PREFIX + value: "datastore" + - name: VSPHERE_INSTALL_MODE + value: "shared" +vsphereSecret: + user: "username_for_vCenter_here" + password: "your_password" +``` + + + + +To activate the Pure Flash Array integration, you will need to create a Kubernetes secret named `px-pure-secret` on your +cluster containing your +[Flash Array license JSON](https://docs.portworx.com/portworx-enterprise/platform/kubernetes/flasharray/install/install-flasharray-on-cloud#create-a-json-configuration-file). +The secret must be created in the namespace that contains the `StorageCluster` resource. The namespace is `kube-system` +by default. + +Use the following command to create the secret: + +``` +kubectl create secret generic px-pure-secret --namespace portworx --from-file=pure.json= +``` + +Alternatively, you can attach a manifest to the Portworx /w Operator pack that contains the YAML for the secret. + +```yaml +storageCluster: + spec: + # Use the Portworx Spec Builder at https://central.portworx.com/landing/login to define custom configurations, then paste the spec section here + image: portworx/oci-monitor:2.11.2 + imagePullPolicy: Always + kvdb: + internal: true + # endpoints: + # - etcd:https://etcd.company.domain:2379 + # authSecret: px-kvdb-auth + cloudStorage: + deviceSpecs: + - size=150 + kvdbDeviceSpec: size=32 + secretsProvider: k8s + stork: + enabled: true + args: + webhook-controller: "true" + autopilot: + enabled: true + csi: + enabled: true + monitoring: + prometheus: + enabled: false + exportMetrics: false + env: + - name: PURE_FLASHARRAY_SAN_TYPE + value: "ISCSI" +``` + + +
+ +
+ +### Etcd + +Portworx Enterprise supports multiple etcd scenarios. Portworx will default to an internal key-value store (KVDB). + +#### Kvdb and Etcd Presets + +The following pack presets are available for configuring etcd. + +The pack defaults to the **Use Internal Kvdb** option. You can change to a different preset if you need to connect to an +external etcd server. + + + + +```yaml +storageCluster: + spec: + kvdb: + internal: true +``` + + + + +```yaml +storageCluster: + spec: + kvdb: + endpoints: + - etcd:http://etcd.company.domain:2379 +``` + + + + + +```yaml +storageCluster: + spec: + kvdb: + endpoints: + - etcd:http://etcd.company.domain:2379 + authSecret: px-kvdb-auth + +# External kvdb related config, only used if storageCluster.spec.kvdb.internal != true +externalKvdb: + useCertsForSSL: true + # The CA cert to use for etcd authentication. Make sure to follow the same indentation style as given in the example below + cacert: | + < PEM KEY DATA > + # The cert to use for etcd authentication. Make sure to follow the same indentation style as given in the example below + cert: | + < PEM KEY DATA > + # The key to use for etcd authentication. Make sure to follow the same indentation style as given in the example below + key: | + < PEM KEY DATA > +``` + + + + +#### Integration With External Etcd + +Use the following steps to integrate Portworx to an external etcd server by following the steps below. + +1. During the cluster profile creation, select the Portworx pack and click on the **Presets** button in the top right + corner of the pack user interface. + +2. Select the **Use External Kvdb over HTTP** or **Use External Kvdb over SSL** preset in the pack UI. If your external + etcd server requires certificate authentication, select **Use External Kvdb over SSL** preset. + +3. Configure the external etcd endpoints in the YAML parameter block named + `charts.portworx-generic.storageCluster.spec.kvdb.endpoints`. + +4. If you selected the **Use External Kvdb over SSL** preset, you will also need to configure the + `charts.portworx-generic.externalKvdb` section. Set `charts.portworx-generic.externalKvdb.useCertsForSSL` to `true` + to enable certificate authentication. Input your SSL certificates in the `cacert`, `cert`, and `key` sections of + `charts.portworx-generic.externalKvdb`. The preset will give you cropped example values that you can overwrite with + your actual PEM certificates. Leave the `charts.portworx-generic.storageCluster.spec.kvdb.endpoints` option to its + default of `px-kvdb-auth`. The name of the Kubernetes secret will automatically get created by this pack. + +:::warning + +When inserting SSL certificate values into the YAML. Ensure you follow the provided indentation style. Otherwise, SSL +certificates will not be imported correctly and will result in Portworx deployment failure. + +::: + +
+ +
\ No newline at end of file diff --git a/_partials/packs/_rke2.mdx b/_partials/packs/_rke2.mdx new file mode 100644 index 0000000000..a19ee0b2f0 --- /dev/null +++ b/_partials/packs/_rke2.mdx @@ -0,0 +1,72 @@ +--- +partial_category: packs +partial_name: rke2 +--- + + +## Versions Supported + + + + + + +You can add RKE2 to an Edge cluster profile as the Kubernetes layer. Refer to the guide to learn more. + +RKE2 offers several customization options, ranging from networking to security. We recommend you review the following +RKE2 documentation: + +- [Configuration Options](https://docs.rke2.io/install/configuration) + +- [Inbound Network Rules](https://docs.rke2.io/install/requirements#inbound-network-rules) + +- [Registries Configuration](https://docs.rke2.io/install/containerd_registry_configuration) + +- [Advanced Options](https://docs.rke2.io/advanced) + + +Many of the Day-2 cluster management responsibilities are handled by Palette. Review the reference resource to learn more about Palette and Day-2 operations. + + + + + + +You can add RKE2 to an Edge cluster profile as the Kubernetes layer. Refer to the guide to learn more. + +RKE2 offers several customization options, ranging from networking to security. We recommend you review the following +RKE2 documentation: + +- [Configuration Options](https://docs.rke2.io/install/configuration) + +- [Inbound Network Rules](https://docs.rke2.io/install/requirements#inbound-network-rules) + +- [Registries Configuration](https://docs.rke2.io/install/containerd_registry_configuration) + +- [Advanced Options](https://docs.rke2.io/advanced) + + +Many of the Day-2 cluster management responsibilities are handled by Palette. Review the reference resource to learn more about Palette and Day-2 operations. + + + + + +You can add RKE2 to an Edge cluster profile as the Kubernetes layer. Refer to the guide to learn more. + +RKE2 offers several customization options, ranging from networking to security. We recommend you review the following +RKE2 documentation: + +- [Configuration Options](https://docs.rke2.io/install/configuration) + +- [Inbound Network Rules](https://docs.rke2.io/install/requirements#inbound-network-rules) + +- [Registries Configuration](https://docs.rke2.io/install/containerd_registry_configuration) + +- [Advanced Options](https://docs.rke2.io/advanced) + + +Many of the Day-2 cluster management responsibilities are handled by Palette. Review the reference resource to learn more about Palette and Day-2 operations. + + + \ No newline at end of file diff --git a/_partials/packs/_rook-ceph.mdx b/_partials/packs/_rook-ceph.mdx new file mode 100644 index 0000000000..eaee474887 --- /dev/null +++ b/_partials/packs/_rook-ceph.mdx @@ -0,0 +1,417 @@ +--- +partial_category: packs +partial_name: rook-ceph +--- + +## Versions Supported + + + + + +### Rook on Edge Clusters + +To use Rook-Ceph on Edge clusters, you need to make a few changes to the cluster profile depending on your cluster +configuration. + +1. In the YAML file for BYO-OS pack, add the following blocks to the `stages` configuration in the OS pack of the + cluster profile. + + ```yaml + stages: + initramfs: + - files: + - path: /etc/modules-load.d/ceph.conf + permissions: 644 + owner: 0 + group: 0 + content: | + rbd + ceph + encoding: "" + ownerstring: "" + after-upgrade: + - name: "Erase Old Partitions on Boot Disk" + commands: + - wipefs -a /dev/sdb + ``` + +2. Click on the Rook-Ceph layer. In the upper-right corner of the Rook-Ceph layer's YAML editing interface, click + **Presets**. Set the preset to either single-node or multi-node depending on your cluster configuration. + +3. If you chose the **Single Node Cluster** preset, skip this step. + + If you chose the **Multi Node Cluster with Replicas** preset, set the value of + `manifests.storageClass.volumeBindingMode` to `Immediate`. + +### Access Ceph Dashboard + +The Ceph dashboard gives you an overview of the status of your Ceph cluster, including overall health, and the status of +all Ceph daemons. By default, the Dashboard is exposed as a ClusterIP-type service on the port 7000 on single node +clusters. + +1. Issue the following command to view the service and find its cluster IP and port. + + ```shell + kukubectl --namespace rook-ceph get svc | grep dashboard + ``` + + ```hideClipboard + rook-ceph-mgr-dashboard ClusterIP 192.169.32.142 7000/TCP 15m + ``` + +2. If you are on a node of the cluster, you can visit the dashboard by visiting the cluster IP and the exposed port. + + If you are remotely accessing the cluster, you can issue the following command to enable port forwarding from your + local machine to the dashboard service. + + ```shell + kukubectl port-forward svc/rook-ceph-mgr-dashboard -n rook-ceph 8443:7000 & + ``` + + If your dashboard service is exposed on a different port, replace 7000 with the port that the dashboard service is + exposed on. + +3. Once you can connect to the dashboard, you need to provide the login credentials to access the dashboard. Rook + creates a default user named `admin` and generates a secret called `rook-ceph-dashboard-password` in the namespace of + the Rook-Ceph cluster. To retrieve the generated password, issue the following command: + + ```shell + kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo + ``` + +4. Use the password you receive in the output with the username `admin` to log in to the Ceph Dashboard. + +### Known Issues + +- If a cluster experiences network issues, it's possible for the file mount to become unavailable and remain unavailable + even after the network is restored. This a known issue disclosed in the + [Rook GitHub repository](https://github.com/rook/rook/issues/13818). Refer to the + [Troubleshooting section](#file-mount-becomes-unavailable-after-cluster-experiences-network-issues) for a workaround + if you observe this issue in your cluster. + + + + + + + + +### Rook on Edge Clusters + +To use Rook-Ceph on Edge clusters, you need to make a few changes to the cluster profile depending on your cluster +configuration. + +1. In the YAML file for BYO-OS pack, add the following blocks to the `stages` configuration in the OS pack of the + cluster profile. + + ```yaml + stages: + initramfs: + - files: + - path: /etc/modules-load.d/ceph.conf + permissions: 644 + owner: 0 + group: 0 + content: | + rbd + ceph + encoding: "" + ownerstring: "" + after-upgrade: + - name: "Erase Old Partitions on Boot Disk" + commands: + - wipefs -a /dev/sdb + ``` + +2. Click on the Rook-Ceph layer. In the upper-right corner of the Rook-Ceph layer's YAML editing interface, click + **Presets**. Set the preset to either single-node or multi-node depending on your cluster configuration. + +3. If you chose the **Single Node Cluster** preset, skip this step. + + If you chose the **Multi Node Cluster with Replicas** preset, set the value of + `manifests.storageClass.volumeBindingMode` to `Immediate`. + +### Access Ceph Dashboard + +The Ceph dashboard gives you an overview of the status of your Ceph cluster, including overall health, and the status of +all Ceph daemons. By default, the Dashboard is exposed as a ClusterIP-type service on the port 7000 on single node +clusters. + +1. Issue the following command to view the service and find its cluster IP and port. + + ```shell + kukubectl --namespace rook-ceph get svc | grep dashboard + ``` + + ```hideClipboard + rook-ceph-mgr-dashboard ClusterIP 192.169.32.142 7000/TCP 15m + ``` + +2. If you are on a node of the cluster, you can visit the dashboard by visiting the cluster IP and the exposed port. + + If you are remotely accessing the cluster, you can issue the following command to enable port forwarding from your + local machine to the dashboard service. + + ```shell + kukubectl port-forward svc/rook-ceph-mgr-dashboard -n rook-ceph 8443:7000 & + ``` + + If your dashboard service is exposed on a different port, replace 7000 with the port that the dashboard service is + exposed on. + +3. Once you can connect to the dashboard, you need to provide the login credentials to access the dashboard. Rook + creates a default user named `admin` and generates a secret called `rook-ceph-dashboard-password` in the namespace of + the Rook-Ceph cluster. To retrieve the generated password, issue the following command: + + ```shell + kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo + ``` + +4. Use the password you receive in the output with the username `admin` to log in to the Ceph Dashboard. + +### Known Issues + +- If a cluster experiences network issues, it's possible for the file mount to become unavailable and remain unavailable + even after the network is restored. This a known issue disclosed in the + [Rook GitHub repository](https://github.com/rook/rook/issues/13818). Refer to the + [Troubleshooting section](#file-mount-becomes-unavailable-after-cluster-experiences-network-issues) for a workaround + if you observe this issue in your cluster. + + + + + + +### Rook on Edge Clusters + +To use Rook-Ceph on Edge clusters, you need to make a few changes to the cluster profile depending on your cluster +configuration. + +1. In the YAML file for BYO-OS pack, add the following blocks to the `stages` configuration in the OS pack of the + cluster profile. + + ```yaml + stages: + initramfs: + - files: + - path: /etc/modules-load.d/ceph.conf + permissions: 644 + owner: 0 + group: 0 + content: | + rbd + ceph + encoding: "" + ownerstring: "" + after-upgrade: + - name: "Erase Old Partitions on Boot Disk" + commands: + - wipefs -a /dev/sdb + ``` + +2. Click on the Rook-Ceph layer. In the upper-right corner of the Rook-Ceph layer's YAML editing interface, click + **Presets**. Set the preset to either single-node or multi-node depending on your cluster configuration. + +3. If you chose the **Single Node Cluster** preset, skip this step. + + If you chose the **Multi Node Cluster with Replicas** preset, set the value of + `manifests.storageClass.volumeBindingMode` to `Immediate`. + +### Access Ceph Dashboard + +The Ceph dashboard gives you an overview of the status of your Ceph cluster, including overall health, and the status of +all Ceph daemons. By default, the Dashboard is exposed as a ClusterIP-type service on the port 7000 on single node +clusters. + +1. Issue the following command to view the service and find its cluster IP and port. + + ```shell + kukubectl --namespace rook-ceph get svc | grep dashboard + ``` + + ```hideClipboard + rook-ceph-mgr-dashboard ClusterIP 192.169.32.142 7000/TCP 15m + ``` + +2. If you are on a node of the cluster, you can visit the dashboard by visiting the cluster IP and the exposed port. + + If you are remotely accessing the cluster, you can issue the following command to enable port forwarding from your + local machine to the dashboard service. + + ```shell + kukubectl port-forward svc/rook-ceph-mgr-dashboard -n rook-ceph 8443:7000 & + ``` + + If your dashboard service is exposed on a different port, replace 7000 with the port that the dashboard service is + exposed on. + +3. Once you can connect to the dashboard, you need to provide the login credentials to access the dashboard. Rook + creates a default user named `admin` and generates a secret called `rook-ceph-dashboard-password` in the namespace of + the Rook-Ceph cluster. To retrieve the generated password, issue the following command: + + ```shell + kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo + ``` + +4. Use the password you receive in the output with the username `admin` to log in to the Ceph Dashboard. + +### Known Issues + +- If a cluster experiences network issues, it's possible for the file mount to become unavailable and remain unavailable + even after the network is restored. This a known issue disclosed in the + [Rook GitHub repository](https://github.com/rook/rook/issues/13818). Refer to the + [Troubleshooting section](#file-mount-becomes-unavailable-after-cluster-experiences-network-issues) for a workaround + if you observe this issue in your cluster. + + + + + + +### Rook on Edge Clusters + +To use Rook-Ceph on Edge clusters, you need to make a few changes to the cluster profile depending on your cluster +configuration. + +1. In the YAML file for BYO-OS pack, add the following blocks to the `stages` configuration in the OS pack of the + cluster profile. + + ```yaml + stages: + initramfs: + - files: + - path: /etc/modules-load.d/ceph.conf + permissions: 644 + owner: 0 + group: 0 + content: | + rbd + ceph + encoding: "" + ownerstring: "" + after-upgrade: + - name: "Erase Old Partitions on Boot Disk" + commands: + - wipefs -a /dev/sdb + ``` + +2. Click on the Rook-Ceph layer. In the upper-right corner of the Rook-Ceph layer's YAML editing interface, click + **Presets**. Set the preset to either single-node or multi-node depending on your cluster configuration. + +3. If you chose the **Single Node Cluster** preset, skip this step. + + If you chose the **Multi Node Cluster with Replicas** preset, set the value of + `manifests.storageClass.volumeBindingMode` to `Immediate`. + +### Access Ceph Dashboard + +The Ceph dashboard gives you an overview of the status of your Ceph cluster, including overall health, and the status of +all Ceph daemons. By default, the Dashboard is exposed as a ClusterIP-type service on the port 7000 on single node +clusters. + +1. Issue the following command to view the service and find its cluster IP and port. + + ```shell + kukubectl --namespace rook-ceph get svc | grep dashboard + ``` + + ```hideClipboard + rook-ceph-mgr-dashboard ClusterIP 192.169.32.142 7000/TCP 15m + ``` + +2. If you are on a node of the cluster, you can visit the dashboard by visiting the cluster IP and the exposed port. + + If you are remotely accessing the cluster, you can issue the following command to enable port forwarding from your + local machine to the dashboard service. + + ```shell + kukubectl port-forward svc/rook-ceph-mgr-dashboard -n rook-ceph 8443:7000 & + ``` + + If your dashboard service is exposed on a different port, replace 7000 with the port that the dashboard service is + exposed on. + +3. Once you can connect to the dashboard, you need to provide the login credentials to access the dashboard. Rook + creates a default user named `admin` and generates a secret called `rook-ceph-dashboard-password` in the namespace of + the Rook-Ceph cluster. To retrieve the generated password, issue the following command: + + ```shell + kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo + ``` + +4. Use the password you receive in the output with the username `admin` to log in to the Ceph Dashboard. + +### Known Issues + +- If a cluster experiences network issues, it's possible for the file mount to become unavailable and remain unavailable + even after the network is restored. This a known issue disclosed in the + [Rook GitHub repository](https://github.com/rook/rook/issues/13818). Refer to the + [Troubleshooting section](#file-mount-becomes-unavailable-after-cluster-experiences-network-issues) for a workaround + if you observe this issue in your cluster. + + + + + + +## Troubleshooting + +### File Mount Becomes Unavailable after Cluster Experiences Network Issues + +A known issue exists with Rook-Ceph where file mounts become unavailable and remain unavailable even after network +issues are resolved. + +#### Debug Steps + +1. One way to debug is to reboot the node that is experiencing the issues. If you are unable to reboot the node, or if + rebooting the node does not fix the issue, continue to the following steps. + + +2. Connect to your cluster via the command-line. For more information, refer to + +3. Issue the following command to identify Persistent Volume Claims (PVC) from Ceph File System (FS). + + ```shell + kubectl get pvc --all | grep "cephFS" + ``` + +4. Scale down all workloads, including pods, deployments, and StatefulSets using the PVC to zero. + + To scale down a deployment, use the following command. Replace `deployment-name` with the name of the deployment. + + ```shell + kubectl scale deployment deployment-name --replicas=0 + ``` + + To scale down a StatefulSet, use the following command. Replace `statefulset-name` with the name of the StatefulSet. + + ```shell + kubectl scale statefulset statefulset-name --replicas=0 + ``` + + To scale down a pod, delete it. Make sure you delete the deployments and StatefulSets first. If a pod belongs to a + StatefulSet or a deployment, it will simply be recreated. + + ```shell + kubectl delete pods pod-name + ``` + + :::tip + + If you do not know which workloads use the PVC, you can start by getting a list of all pods that are using PVCs and + their PVC names with the following command. + + ```shell + kubectl get pods --all-namespaces --output=json | jq '.items[] | {name: .metadata.name, namespace: .metadata.namespace, claimName: .spec | select( has ("volumes") ).volumes[] | select( has ("persistentVolumeClaim") ).persistentVolumeClaim.claimName }' + ``` + + You can then find workloads that are associated with the pods and scale them down to zero. + + ::: + +5. Once all the workloads are scaled down, all existing volume mounts will be unmounted, followed by fresh new mounts of + cephFS volumes. Ensure that all workloads are scaled down to zero. Even if one pod remains that uses the PVC, the + unmount will not happen and the issue will not be resolved. + +6. Scale the workloads back to their original state. diff --git a/_partials/packs/_trident.mdx b/_partials/packs/_trident.mdx new file mode 100644 index 0000000000..4c0a96e06a --- /dev/null +++ b/_partials/packs/_trident.mdx @@ -0,0 +1,231 @@ +--- +partial_category: packs +partial_name: trident +--- + +## Versions Supported + + + + +After deploying Trident, you will need to create a backend and a storage class before you can start provisioning volumes +and mounting those to any pods. + +### Create a Storage Backend + +Trident supports multiple storage backends. Select a supported backend that fits your needs. You can find example of +different backends by reviewing the driver manifests examples in the official Trident +[repository](https://github.com/NetApp/trident/tree/master/trident-installer/sample-input/backends-samples). If you +decide to use one of the example configurations, make sure you update the configuration with your credentials and +environment configurations. + +The example below creates a backend with the ONTAP-NAS driver. + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: backend-ontap-nas-secret + namespace: trident +type: Opaque +stringData: + username: [USERNAME] + password: [PASSWORD] +--- +apiVersion: trident.netapp.io/v1 +kind: TridentBackendConfig +metadata: + name: backend-ontap-nas + namespace: trident +spec: + version: 1 + storageDriverName: ontap-nas + managementLIF: [ONTAP_MANAGEMENT_LIF_IP] + dataLIF: [DATA_LIF_IP] + backendName: ontap-nas + autoExportCIDRs: + - [x.x.x.x/xx] + autoExportPolicy: true + svm: [SVM] + credentials: + name: backend-ontap-nas-secret +``` + +#### Create a Storage Class + +Kubernetes supports the ability to bind statically or dynamically provisioned volumes to pods. Statically provisioned +volumes are manually created by a user and then referenced in a deployment. Astra Trident allows you to leverage your +NetApp storage. You must create a storage class before you can request dynamically provisioned volumes. + +```yaml +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: trident-csi + namespace: trident +provisioner: csi.trident.netapp.io +parameters: + backendType: "ontap-nas" + csi.storage.k8s.io/fstype: ext4 +``` + +#### Provision Volumes + +An example of provisioning a Persistent Volume Claim (PVC). + +```yaml +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: trident-pvc +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + storageClassName: trident-csi +``` + +#### Deploy a Pod and Mount the Volume. + +The following code snippet is an example of a pod deployment. The pod contains an Nginx container, with a claim to the +previously created PVC. Once deployed, the PVC with its bound Persistent Volume (PV), will mount to the pod and provide +persistent storage to this application. + +```yaml +kind: Pod +apiVersion: v1 +metadata: + name: example-pv-pod + namespace: trident +spec: + volumes: + - name: example-pv-vol + persistentVolumeClaim: + claimName: trident-pvc + containers: + - name: example-pv-pod + image: nginx + ports: + - containerPort: 80 + name: "http-server" + volumeMounts: + - mountPath: "/usr/share/nginx/html" + name: example-pv-vol +``` + + + + + +After deploying Trident, you will need to create a backend and a storage class before you can start provisioning volumes +and mounting those to any pods. + +### Create a Storage Backend + +Trident supports multiple storage backends. Select a supported backend that fits your needs. You can find example of +different backends by reviewing the driver manifests examples in the official Trident +[repository](https://github.com/NetApp/trident/tree/master/trident-installer/sample-input/backends-samples). If you +decide to use one of the example configurations, make sure you update the configuration with your credentials and +environment configurations. + +The example below creates a backend with the ONTAP-NAS driver. + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: backend-ontap-nas-secret + namespace: trident +type: Opaque +stringData: + username: [USERNAME] + password: [PASSWORD] +--- +apiVersion: trident.netapp.io/v1 +kind: TridentBackendConfig +metadata: + name: backend-ontap-nas + namespace: trident +spec: + version: 1 + storageDriverName: ontap-nas + managementLIF: [ONTAP_MANAGEMENT_LIF_IP] + dataLIF: [DATA_LIF_IP] + backendName: ontap-nas + autoExportCIDRs: + - [x.x.x.x/xx] + autoExportPolicy: true + svm: [SVM] + credentials: + name: backend-ontap-nas-secret +``` + +#### Create a Storage Class + +Kubernetes supports the ability to bind statically or dynamically provisioned volumes to Pods. Statically provisioned +volumes are manually created by a user and then referenced in a deployment. Astra Trident allows you to leverage your +NetApp storage. You must create a storage class before you can request dynamically provisioned volumes. + +```yaml +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: trident-csi + namespace: trident +provisioner: csi.trident.netapp.io +parameters: + backendType: "ontap-nas" + csi.storage.k8s.io/fstype: ext4 +``` + +#### Provision Volumes + +An example of provisioning a Persistent Volume Claim (PVC). + +```yaml +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: trident-pvc +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + storageClassName: trident-csi +``` + +#### Deploy a Pod and Mount the Volume. + +The following code snippet is an example of a pod deployment. The pod contains an Nginx container, with a claim to the +previously created PVC. Once deployed, the PVC with its bound Persistent Volume (PV), will mount to the pod and provide +persistent storage to this application. + +```yaml +kind: Pod +apiVersion: v1 +metadata: + name: example-pv-pod + namespace: trident +spec: + volumes: + - name: example-pv-vol + persistentVolumeClaim: + claimName: trident-pvc + containers: + - name: example-pv-pod + image: nginx + ports: + - containerPort: 80 + name: "http-server" + volumeMounts: + - mountPath: "/usr/share/nginx/html" + name: example-pv-vol +``` + + + + \ No newline at end of file diff --git a/_partials/packs/_ubuntu.mdx b/_partials/packs/_ubuntu.mdx new file mode 100644 index 0000000000..6272186311 --- /dev/null +++ b/_partials/packs/_ubuntu.mdx @@ -0,0 +1,293 @@ +--- +partial_category: packs +partial_name: ubuntu +--- + +:::info + + + +Review the page to learn about our pack update and deprecation schedules. + + +::: + +## Version Supported + + + + + + +To use the Ubuntu OS pack, add the pack to your cluster profile when you select the OS layer. Refer to the +guide to learn more. + + +#### Add Custom Files + +You can create custom files that you define in the `files` section that precedes the `preKubeadmCommands` and +`postKubeadmCommands` sections. The files are invoked during runtime. + +```yaml +kubeadmconfig: + files: + - targetPath: /usr/local/share/ca-certificates/mycom.crt + targetOwner: "root:root" + targetPermissions: "0644" + content: | + -----BEGIN CERTIFICATE----- + MIICyzCCAbOgAwIBAgIBADANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwprdWJl + cm5ldGVzMB4XDTIwMDkyMjIzNDMyM1oXDTMwMDkyMDIzNDgyM1owFTETMBEGA1UE + AxMKa3ViZXJuZXRlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMdA + nZYs1el/6f9PgV/aO9mzy7MvqaZoFnqO7Qi4LZfYzixLYmMUzi+h8/RLPFIoYLiz + qiDn+P8c9I1uxB6UqGrBt7dkXfjrUZPs0JXEOX9U/6GFXL5C+n3AUlAxNCS5jobN + fbLt7DH3WoT6tLcQefTta2K+9S7zJKcIgLmBlPNDijwcQsbenSwDSlSLkGz8v6N2 + 7SEYNCV542lbYwn42kbcEq2pzzAaCqa5uEPsR9y+uzUiJpv5tDHUdjbFT8tme3vL + 9EdCPODkqtMJtCvz0hqd5SxkfeC2L+ypaiHIxbwbWe7GtliROvz9bClIeGY7gFBK + jZqpLdbBVjo0NZBTJFUCAwEAAaMmMCQwDgYDVR0PAQH/BAQDAgKkMBIGA1UdEwEB + /wQIMAYBAf8CAQAwDQYJKoZIhvcNAQELBQADggEBADIKoE0P+aVJGV9LWGLiOhki + HFv/vPPAQ2MPk02rLjWzCaNrXD7aPPgT/1uDMYMHD36u8rYyf4qPtB8S5REWBM/Y + g8uhnpa/tGsaqO8LOFj6zsInKrsXSbE6YMY6+A8qvv5lPWpJfrcCVEo2zOj7WGoJ + ixi4B3fFNI+wih8/+p4xW+n3fvgqVYHJ3zo8aRLXbXwztp00lXurXUyR8EZxyR+6 + b+IDLmHPEGsY9KOZ9VLLPcPhx5FR9njFyXvDKmjUMJJgUpRkmsuU1mCFC+OHhj56 + IkLaSJf6z/p2a3YjTxvHNCqFMLbJ2FvJwYCRzsoT2wm2oulnUAMWPI10vdVM+Nc= + -----END CERTIFICATE----- + preKubeadmCommands: + - echo "Executing pre kube admin config commands" + - update-ca-certificates + - "systemctl restart containerd; sleep 3" + - 'while [ ! -S /var/run/containerd/containerd.sock ]; do echo "Waiting for containerd..."; sleep 1; done' + postKubeadmCommands: + - echo "Executing post kube admin config commands" +``` + +In the next example, a configuration file is added to a folder. + +```yaml +kubeadmconfig: + files: + - targetPath: /etc/containerd/config.toml + targetOwner: "root:root" + targetPermissions: "0644" + content: | + version = 2 + imports = ["/etc/containerd/conf.d/*.toml"] + [plugins] + [plugins."io.containerd.grpc.v1.cri"] + sandbox_image = "registry.k8s.io/pause:3.9" + device_ownership_from_security_context = true + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] + runtime_type = "io.containerd.runc.v2" + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] + SystemdCgroup = true + preKubeadmCommands: + - 'echo "====> Applying pre Kubeadm commands"' + postKubeadmCommands: + - 'echo "====> Applying post Kubeadm commands"' +``` + +### Ubuntu Pro + +Ubuntu Pro is a security and maintenance subscription offering from Canonical that offers long-term security support and +many other security hardening features. Ubuntu Pro offers several more benefits than the free Ubuntu offering: + +- Extended Security Maintenance + +- Kernel Livepatch service to avoid reboots + +- FIPS 140-2 Level 1 certified crypto modules + +- Common Criteria EAL2 + +For more information, refer to the [Ubuntu Pro](https://ubuntu.com/pro) documentation from Canonical. + +You can enable Ubuntu Pro when deploying clusters with Palette. To enable Ubuntu Pro, select Ubuntu as the OS layer for +a cluster profile and expand the **Preset Menu** to reveal the Ubuntu Pro parameters. + +| Parameter | Description | Default Value | +| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | +| **token** | The Canonical subscription token for Ubuntu Pro. Refer to the Ubuntu Pro [subscribe page](https://ubuntu.com/pro/subscribe) to aquire a subscription token. | `""` | +| **esm-apps** | Expanded Security Maintenance (ESM) for Applications. Refer to the Ubuntu [ESM documentation](https://ubuntu.com/security/esm) to learn more. | Disabled | +| **livepatch** | Canonical Livepatch service. Refer to the Ubuntu [Livepatch](https://ubuntu.com/security/livepatch) documenation for more details. | Disabled | +| **fips** | Federal Information Processing Standards (FIPS) 140 validated cryptography for Linux workloads on Ubuntu. This installs NIST-certified core packages. Refer to the Ubuntu [FIPS](https://ubuntu.com/security/certifications/docs/2204) documentation to learn more. | Disabled | +| **fips-updates** | Install NIST-certified core packages with priority security updates. Refer to the Ubuntu [FIPS Updates](https://ubuntu.com/security/certifications/docs/fips-updates) documentation to learn more. | Disabled | +| **cis** | Gain access to OpenSCAP-based tooling that automates both hardening and auditing with certified content based on published CIS benchmarks. Refer to the Ubuntu [CIS](https://ubuntu.com/security/certifications/docs/2204/usg/cis) documentation to learn more. | Disabled | + +Use the following steps to enable Ubuntu Pro. + +1. Log in to [Palette](https://console.spectrocloud.com). + +2. Navigate to the left **Main Menu** and select **Profiles**. + +3. Click on **Add Cluster Profile**. + +4. Fill out the input fields for **Name**, **Version**, **Description**, **Type** and **Tags**. Click on **Next** to + continue. + +5. Select the infrastructure provider and click on **Next**. + +6. Select the OS layer and use the following information to find the Ubuntu pack: + +- **Pack Type** - OS + +- **Registry** - Public Repo + +- **Pack Name** -Ubuntu + +- **Pack Version** - 20.04 or 22.04 + +7. Modify the Ubuntu **Pack values** to activate the **Presets** options for the Ubuntu YAML file. Click on the + **\** button to reveal the YAML editor and expand the **Preset Drawer**. + +![A view of the cluster profile creation wizard for Ubuntu Pro](/integrations_ubuntu_ubuntu-pro-preset-drawer.webp) + +8. Click the **Ubuntu Advantage/Pro** checkbox to include the Ubuntu Pro parameters in the pack configuration file. + +9. Toggle options on or off to enable or disable the various Ubuntu Pro services. + +10. Click the **Next layer** button to continue to the next layer. + +11. Complete the remainder of the cluster profile creation wizard by selecting the next cluster profile layers. + + + + + + +To use the Ubuntu OS pack, add the pack to your cluster profile when you select the OS layer. Refer to the +guide to learn more. + +#### Add Custom Files + +You can create custom files that you define in the `files` section that precedes the `preKubeadmCommands` and +`postKubeadmCommands` sections. The files are invoked during runtime. + +```yaml +kubeadmconfig: + files: + - targetPath: /usr/local/share/ca-certificates/mycom.crt + targetOwner: "root:root" + targetPermissions: "0644" + content: | + -----BEGIN CERTIFICATE----- + MIICyzCCAbOgAwIBAgIBADANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwprdWJl + cm5ldGVzMB4XDTIwMDkyMjIzNDMyM1oXDTMwMDkyMDIzNDgyM1owFTETMBEGA1UE + AxMKa3ViZXJuZXRlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMdA + nZYs1el/6f9PgV/aO9mzy7MvqaZoFnqO7Qi4LZfYzixLYmMUzi+h8/RLPFIoYLiz + qiDn+P8c9I1uxB6UqGrBt7dkXfjrUZPs0JXEOX9U/6GFXL5C+n3AUlAxNCS5jobN + fbLt7DH3WoT6tLcQefTta2K+9S7zJKcIgLmBlPNDijwcQsbenSwDSlSLkGz8v6N2 + 7SEYNCV542lbYwn42kbcEq2pzzAaCqa5uEPsR9y+uzUiJpv5tDHUdjbFT8tme3vL + 9EdCPODkqtMJtCvz0hqd5SxkfeC2L+ypaiHIxbwbWe7GtliROvz9bClIeGY7gFBK + jZqpLdbBVjo0NZBTJFUCAwEAAaMmMCQwDgYDVR0PAQH/BAQDAgKkMBIGA1UdEwEB + /wQIMAYBAf8CAQAwDQYJKoZIhvcNAQELBQADggEBADIKoE0P+aVJGV9LWGLiOhki + HFv/vPPAQ2MPk02rLjWzCaNrXD7aPPgT/1uDMYMHD36u8rYyf4qPtB8S5REWBM/Y + g8uhnpa/tGsaqO8LOFj6zsInKrsXSbE6YMY6+A8qvv5lPWpJfrcCVEo2zOj7WGoJ + ixi4B3fFNI+wih8/+p4xW+n3fvgqVYHJ3zo8aRLXbXwztp00lXurXUyR8EZxyR+6 + b+IDLmHPEGsY9KOZ9VLLPcPhx5FR9njFyXvDKmjUMJJgUpRkmsuU1mCFC+OHhj56 + IkLaSJf6z/p2a3YjTxvHNCqFMLbJ2FvJwYCRzsoT2wm2oulnUAMWPI10vdVM+Nc= + -----END CERTIFICATE----- + preKubeadmCommands: + - echo "Executing pre kube admin config commands" + - update-ca-certificates + - "systemctl restart containerd; sleep 3" + - 'while [ ! -S /var/run/containerd/containerd.sock ]; do echo "Waiting for containerd..."; sleep 1; done' + postKubeadmCommands: + - echo "Executing post kube admin config commands" +``` + +In the next example, a configuration file is added to a folder. + +```yaml +kubeadmconfig: + files: + - targetPath: /etc/containerd/config.toml + targetOwner: "root:root" + targetPermissions: "0644" + content: | + ## template: jinja + + # Use config version 2 to enable new configuration fields. + # Config file is parsed as version 1 by default. + version = 2 + + imports = ["/etc/containerd/conf.d/*.toml"] + + [plugins] + [plugins."io.containerd.grpc.v1.cri"] + sandbox_image = "registry.k8s.io/pause:3.9" + device_ownership_from_security_context = true + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] + runtime_type = "io.containerd.runc.v2" + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] + SystemdCgroup = true + preKubeadmCommands: + - 'echo "====> Applying pre Kubeadm commands"' + postKubeadmCommands: + - 'echo "====> Applying post Kubeadm commands"' +``` + +### Ubuntu Pro + +Ubuntu Pro is a security and maintenance subscription offering from Canonical that offers long-term security support and +many other security hardening features. Ubuntu Pro offers several more benefits than the free Ubuntu offering: + +- Extended Security Maintenance + +- Kernel Livepatch service to avoid reboots + +- FIPS 140-2 Level 1 certified crypto modules + +- Common Criteria EAL2 + +For more information, refer to the [Ubuntu Pro](https://ubuntu.com/pro) documentation from Canonical. + +You can enable Ubuntu Pro when deploying clusters with Palette. To enable Ubuntu Pro, select Ubuntu as the OS for a +cluster profile and expand the **Preset Menu** to reveal the Ubuntu Pro parameters. + +| Parameter | Description | Default Value | +| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | +| **token** | The Canonical subscription token for Ubuntu Pro. Refer to the Ubuntu Pro [subscribe page](https://ubuntu.com/pro/subscribe) to aquire a subscription token. | `""` | +| **esm-apps** | Expanded Security Maintenance (ESM) for Applications. Refer to the Ubuntu [ESM documentation](https://ubuntu.com/security/esm) to learn more. | Disabled | +| **livepatch** | Canonical Livepatch service. Refer to the Ubuntu [Livepatch](https://ubuntu.com/security/livepatch) documenation for more details. | Disabled | +| **fips** | Federal Information Processing Standards (FIPS) 140 validated cryptography for Linux workloads on Ubuntu. This installs NIST-certified core packages. Refer to the Ubuntu [FIPS](https://ubuntu.com/security/certifications/docs/2204) documentation to learn more. | Disabled | +| **fips-updates** | Install NIST-certified core packages with priority security updates. Refer to the Ubuntu [FIPS Updates](https://ubuntu.com/security/certifications/docs/fips-updates) documentation to learn more. | Disabled | +| **cis** | Gain access to OpenSCAP-based tooling that automates both hardening and auditing with certified content based on published CIS benchmarks. Refer to the Ubuntu [CIS](https://ubuntu.com/security/certifications/docs/2204/usg/cis) documentation to learn more. | Disabled | + +Use the following steps to enable Ubuntu Pro. + +1. Log in to [Palette](https://console.spectrocloud.com). + +2. Navigate to the left **Main Menu** and select **Profiles**. + +3. Click on **Add Cluster Profile**. + +4. Fill out the input fields for **Name**, **Version**, **Description**, **Type** and **Tags**. Click on **Next** to + continue. + +5. Select the infrastructure provider and click on **Next**. + +6. Select the OS layer and use the following information to find the Ubuntu pack: + +- **Pack Type** - OS + +- **Registry** - Public Repo + +- **Pack Name** -Ubuntu + +- **Pack Version** - 20.04 or 22.04 + +7. Modify the Ubuntu **Pack values** to activate the **Presets** options for the Ubuntu YAML file. Click on the + **\** button to reveal the YAML editor and expand the **Preset Drawer**. + +![A view of the cluster profile creation wizard for Ubuntu Pro](/integrations_ubuntu_ubuntu-pro-preset-drawer.webp) + +8. Click the **Ubuntu Advantage/Pro** checkbox to include the Ubuntu Pro parameters in the pack configuration file. + +9. Toggle options on or off to enable or disable the various Ubuntu Pro services. + +10. Click the **Next layer** button to continue to the next layer. + +11. Complete the remainder of the cluster profile creation wizard by selecting the next cluster profile layers. + + + diff --git a/declarations.d.ts b/declarations.d.ts index 95771c99c6..b8eab7bd34 100644 --- a/declarations.d.ts +++ b/declarations.d.ts @@ -5,6 +5,11 @@ declare module "*.module.scss" { export default classes; } +declare module "*.md" { + const value: string; // markdown is just a string + export default value; +} + declare module "*.scss" { const src: string; export default src; diff --git a/docs/api-content/api-docs/palette-apis.json b/docs/api-content/api-docs/palette-apis.json index 152803bd5b..11902ee84f 100644 --- a/docs/api-content/api-docs/palette-apis.json +++ b/docs/api-content/api-docs/palette-apis.json @@ -118833,6 +118833,14 @@ } } }, + "clusterType": { + "type": "string", + "default": "PureManage", + "enum": [ + "PureManage", + "PureAttach" + ] + }, "machinepoolconfig": { "type": "array", "items": { @@ -119409,6 +119417,14 @@ } } }, + "clusterType": { + "type": "string", + "default": "PureManage", + "enum": [ + "PureManage", + "PureAttach" + ] + }, "machinepoolconfig": { "type": "array", "items": { @@ -139647,6 +139663,55 @@ } } } + }, + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update all clusters upgrade settings", + "operationId": "v1SpectroClustersUpgradeSettings", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "properties": { + "spectroComponents": { + "type": "string", + "enum": [ + "lock", + "unlock" + ] + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } } }, "/v1/spectroclusters/validate/name": { @@ -157969,6 +158034,66 @@ } ] }, + "/v1/spectroclusters/{uid}/upgrade/settings": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update specific cluster upgrade settings", + "operationId": "v1SpectroClustersUidUpgradeSettings", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "properties": { + "spectroComponents": { + "type": "string", + "enum": [ + "lock", + "unlock" + ] + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, "/v1/spectroclusters/{uid}/validate/packs": { "post": { "security": [ @@ -201082,6 +201207,44 @@ } } }, + "/v1/users/info": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "Returns a basic information of User for the specified uid.", + "tags": [ + "v1" + ], + "summary": "Returns the base information of specified User", + "operationId": "v1UsersInfoGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "User basic information", + "properties": { + "orgName": { + "description": "Organization name", + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "userUid": { + "type": "string" + } + } + } + } + } + } + }, "/v1/users/kubectl/session/{sessionUid}": { "get": { "security": [ @@ -338293,6 +338456,14 @@ } } }, + "clusterType": { + "type": "string", + "default": "PureManage", + "enum": [ + "PureManage", + "PureAttach" + ] + }, "machinepoolconfig": { "type": "array", "items": { @@ -352666,6 +352837,28 @@ } } }, + "v1SystemCertificatesSpec": { + "description": "system certificate in base64 format", + "type": "object", + "properties": { + "caCertificateBase64": { + "type": "string", + "x-omitempty": false + }, + "certificateBase64": { + "type": "string", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "x-omitempty": false + }, + "keyBase64": { + "type": "string", + "x-omitempty": false + } + } + }, "v1SystemConfigAuth": { "description": "System config auth", "properties": { @@ -352688,6 +352881,37 @@ } } }, + "v1SystemConfigDomainCertificatesSpec": { + "description": "system domain and its certificate config spec", + "type": "object", + "properties": { + "certificates": { + "description": "system certificate in base64 format", + "type": "object", + "properties": { + "caCertificateBase64": { + "type": "string", + "x-omitempty": false + }, + "certificateBase64": { + "type": "string", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "x-omitempty": false + }, + "keyBase64": { + "type": "string", + "x-omitempty": false + } + } + }, + "rootDomain": { + "type": "string" + } + } + }, "v1SystemConfigDomainSpec": { "description": "system domain config spec", "type": "object", @@ -361661,6 +361885,21 @@ } } }, + "v1UserInfo": { + "description": "User basic information", + "properties": { + "orgName": { + "description": "Organization name", + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "userUid": { + "type": "string" + } + } + }, "v1UserInfoResponse": { "type": "object", "properties": { diff --git a/docs/api-content/api-docs/v1/api.json b/docs/api-content/api-docs/v1/api.json index 211ec245cc..736f7004b8 100644 --- a/docs/api-content/api-docs/v1/api.json +++ b/docs/api-content/api-docs/v1/api.json @@ -2587,7 +2587,7 @@ "type": "boolean" }, "controlPlaneLoadBalancer": { - "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default => \"Internet-facing\" \"Internet-facing\" => \"Internet-facing\" \"internal\" => \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", + "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", "type": "string" }, "region": { @@ -2997,7 +2997,7 @@ "description": "rolling update strategy for this machinepool if not specified, will use ScaleOut" }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true && useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -3941,7 +3941,7 @@ "description": "rolling update strategy for this machinepool if not specified, will use ScaleOut" }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true && useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -9199,7 +9199,7 @@ "uniqueItems": true }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true && useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -9246,7 +9246,7 @@ "uniqueItems": true }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true && useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false }, @@ -10687,7 +10687,7 @@ "description": "rolling update strategy for this machinepool if not specified, will use ScaleOut" }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true && useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } }, @@ -11077,7 +11077,7 @@ "type": "boolean" }, "controlPlaneLoadBalancer": { - "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default => \"Internet-facing\" \"Internet-facing\" => \"Internet-facing\" \"internal\" => \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", + "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", "type": "string" }, "encryptionConfig": { @@ -11306,7 +11306,7 @@ "description": "rolling update strategy for this machinepool if not specified, will use ScaleOut" }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true && useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -11881,7 +11881,7 @@ "additionalProperties": { "type": "string" }, - "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- > 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", "type": "object" }, "deviceModel": { @@ -11906,7 +11906,7 @@ "additionalProperties": { "type": "string" }, - "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- > 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", "type": "object" }, "model": { @@ -12366,7 +12366,7 @@ "description": "rolling update strategy for this machinepool if not specified, will use ScaleOut" }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true && useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } }, @@ -12779,7 +12779,7 @@ "type": "integer" }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true && useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } }, @@ -14763,7 +14763,7 @@ "description": "rolling update strategy for this machinepool if not specified, will use ScaleOut" }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true && useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" }, "xslTemplate": { @@ -15598,7 +15598,7 @@ "description": "rolling update strategy for this machinepool if not specified, will use ScaleOut" }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true && useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } }, @@ -16020,7 +16020,7 @@ "description": "Rolling update strategy for this machine pool if not specified, will use ScaleOut" }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true && useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -19328,7 +19328,7 @@ "description": "rolling update strategy for this machinepool if not specified, will use ScaleOut" }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true && useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } }, @@ -19790,7 +19790,7 @@ "$ref": "#/definitions/v1MaasCloudAccount" }, "name": { - "description": "Name for the private gateway & cloud account", + "description": "Name for the private gateway \u0026 cloud account", "type": "string" }, "shareWithProjects": { @@ -19861,7 +19861,7 @@ "$ref": "#/definitions/v1OpenStackCloudAccount" }, "name": { - "description": "Name for the private gateway & cloud account", + "description": "Name for the private gateway \u0026 cloud account", "type": "string" }, "shareWithProjects": { @@ -19913,7 +19913,7 @@ "$ref": "#/definitions/v1VsphereCloudAccount" }, "name": { - "description": "Name for the private gateway & cloud account", + "description": "Name for the private gateway \u0026 cloud account", "type": "string" }, "shareWithProjects": { @@ -23745,7 +23745,7 @@ "type": "object" }, "v1ResourceUsageMeteringDataPoint": { - "description": "min and max count for machines & edgehost for the given period", + "description": "min and max count for machines \u0026 edgehost for the given period", "properties": { "activeEdgehosts": { "format": "int64", @@ -26904,6 +26904,9 @@ "$ref": "#/definitions/v1CustomClusterConfigEntity", "description": "General cluster configuration like patching settings, namespace resource allocation, rbac" }, + "clusterType": { + "$ref": "#/definitions/v1ClusterType" + }, "machinepoolconfig": { "items": { "$ref": "#/definitions/v1CustomMachinePoolConfigEntity" @@ -28704,6 +28707,28 @@ }, "type": "object" }, + "v1SystemCertificatesSpec": { + "description": "system certificate in base64 format", + "properties": { + "caCertificateBase64": { + "type": "string", + "x-omitempty": false + }, + "certificateBase64": { + "type": "string", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "x-omitempty": false + }, + "keyBase64": { + "type": "string", + "x-omitempty": false + } + }, + "type": "object" + }, "v1SystemConfigAuth": { "description": "System config auth", "properties": { @@ -28726,6 +28751,18 @@ } } }, + "v1SystemConfigDomainCertificatesSpec": { + "description": "system domain and its certificate config spec", + "properties": { + "certificates": { + "$ref": "#/definitions/v1SystemCertificatesSpec" + }, + "rootDomain": { + "type": "string" + } + }, + "type": "object" + }, "v1SystemConfigDomainSpec": { "description": "system domain config spec", "properties": { @@ -31239,7 +31276,7 @@ "description": "rolling update strategy for this machinepool if not specified, will use ScaleOut" }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true && useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } }, @@ -31692,7 +31729,7 @@ "uniqueItems": true }, "v1UpdateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut => maxSurge=1, maxUnavailable=0 ScaleIn => maxSurge=0, maxUnavailable=1", + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", "properties": { "type": { "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", @@ -32005,6 +32042,21 @@ }, "type": "object" }, + "v1UserInfo": { + "description": "User basic information", + "properties": { + "orgName": { + "description": "Organization name", + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "userUid": { + "type": "string" + } + } + }, "v1UserInfoResponse": { "properties": { "address": { @@ -32698,7 +32750,7 @@ "description": "dataVolumeTemplates is a list of dataVolumes that the VirtualMachineInstance template can reference. DataVolumes in this list are dynamically created for the VirtualMachine and are tied to the VirtualMachine's life-cycle." }, "persist": { - "description": "If 'true' add the disk to the Virtual Machine & Virtual Machine Instance, else add the disk to the Virtual Machine Instance only", + "description": "If 'true' add the disk to the Virtual Machine \u0026 Virtual Machine Instance, else add the disk to the Virtual Machine Instance only", "type": "boolean" } }, @@ -32761,7 +32813,7 @@ "v1VMRemoveVolumeEntity": { "properties": { "persist": { - "description": "If 'true' remove the disk from the Virtual Machine & Virtual Machine Instance, else remove the disk from the Virtual Machine Instance only", + "description": "If 'true' remove the disk from the Virtual Machine \u0026 Virtual Machine Instance, else remove the disk from the Virtual Machine Instance only", "type": "boolean" }, "removeVolumeOptions": { @@ -33151,7 +33203,7 @@ "description": "rolling update strategy for this machinepool if not specified, will use ScaleOut" }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true && useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } }, @@ -34221,7 +34273,7 @@ "$ref": "#/definitions/v1VmBlockSize" }, "bootOrder": { - "description": "BootOrder is an integer value > 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", "format": "int32", "type": "integer" }, @@ -34562,7 +34614,7 @@ "type": "object" }, "v1VmFieldsV1": { - "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:', where is the name of a field in a struct, or key in a map 'v:', where is the exact json formatted value of a list item 'i:\\', where \\ is position of a item in a list 'k:', where is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", "properties": { "Raw": { "items": { @@ -34842,7 +34894,7 @@ "type": "integer" }, "bootOrder": { - "description": "BootOrder is an integer value > 0, used to determine ordering of boot devices. Lower values take precedence. Each interface or disk that has a boot order must have a unique value. Interfaces without a boot order are not tried.", + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each interface or disk that has a boot order must have a unique value. Interfaces without a boot order are not tried.", "format": "int32", "type": "integer" }, @@ -35157,7 +35209,7 @@ "type": "boolean" }, "networkName": { - "description": "References to a NetworkAttachmentDefinition CRD object. Format: , /. If namespace is not specified, VMI namespace is assumed.", + "description": "References to a NetworkAttachmentDefinition CRD object. Format: \u003cnetworkName\u003e, \u003cnamespace\u003e/\u003cnetworkName\u003e. If namespace is not specified, VMI namespace is assumed.", "type": "string" } }, @@ -35511,7 +35563,7 @@ "type": "object" }, "v1VmPodAffinityTerm": { - "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key matches that of any node on which a pod of the set of pods is running", + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", "properties": { "labelSelector": { "$ref": "#/definitions/v1VmLabelSelector" @@ -35598,7 +35650,7 @@ "type": "string" }, "port": { - "description": "Number of port to expose for the virtual machine. This must be a valid port number, 0 < x < 65536.", + "description": "Number of port to expose for the virtual machine. This must be a valid port number, 0 \u003c x \u003c 65536.", "format": "int32", "type": "integer" }, @@ -35715,7 +35767,7 @@ "type": "object" }, "v1VmQuantity": { - "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n ::= \n (Note that may be empty, from the \"\" case in .)\n ::= 0 | 1 | ... | 9 ::= | ::= | . | . | . ::= \"+\" | \"-\" ::= | ::= | | ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n ::= \"e\" | \"E\" \n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", "type": "string" }, "v1VmRTCTimer": { @@ -36014,7 +36066,7 @@ "type": "object" }, "v1VmToleration": { - "description": "The pod this Toleration is attached to tolerates any taint that matches the triple using the matching operator .", + "description": "The pod this Toleration is attached to tolerates any taint that matches the triple \u003ckey,value,effect\u003e using the matching operator \u003coperator\u003e.", "properties": { "effect": { "description": "Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.", @@ -36052,7 +36104,7 @@ "type": "integer" }, "topologyKey": { - "description": "TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each as a \"bucket\", and try to put balanced number of pods into each bucket. It's a required field.", + "description": "TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each \u003ckey, value\u003e as a \"bucket\", and try to put balanced number of pods into each bucket. It's a required field.", "type": "string" }, "whenUnsatisfiable": { @@ -36236,7 +36288,7 @@ "type": "string" }, "subdomain": { - "description": "If specified, the fully qualified vmi hostname will be \"...svc.\". If not specified, the vmi will not have a domainname at all. The DNS entry will resolve to the vmi, no matter if the vmi itself can pick up a hostname.", + "description": "If specified, the fully qualified vmi hostname will be \"\u003chostname\u003e.\u003csubdomain\u003e.\u003cpod namespace\u003e.svc.\u003ccluster domain\u003e\". If not specified, the vmi will not have a domainname at all. The DNS entry will resolve to the vmi, no matter if the vmi itself can pick up a hostname.", "type": "string" }, "terminationGracePeriodSeconds": { @@ -37057,7 +37109,7 @@ "description": "rolling update strategy for this machinepool if not specified, will use ScaleOut" }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true && useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -38294,7 +38346,7 @@ ], "summary": "Retrieves a list of API keys", "tags": [ - "apiKeys" + "v1" ] }, "post": { @@ -38326,7 +38378,7 @@ ], "summary": "Create an API key", "tags": [ - "apiKeys" + "v1" ] } }, @@ -38348,7 +38400,7 @@ ], "summary": "Deletes the specified API key", "tags": [ - "apiKeys" + "v1" ] }, "get": { @@ -38371,7 +38423,7 @@ ], "summary": "Returns the specified API key", "tags": [ - "apiKeys" + "v1" ] }, "parameters": [ @@ -38409,7 +38461,7 @@ ], "summary": "Activate or de-active the specified API key", "tags": [ - "apiKeys" + "v1" ] }, "put": { @@ -38438,7 +38490,7 @@ ], "summary": "Update the specified API key", "tags": [ - "apiKeys" + "v1" ] } }, @@ -38478,7 +38530,7 @@ ], "summary": "Revoke or re-activate the API key access", "tags": [ - "apiKeys" + "v1" ] } }, @@ -38524,7 +38576,7 @@ ], "summary": "Creates a application deployment in the virtual cluster", "tags": [ - "appDeployments" + "v1" ] } }, @@ -38570,7 +38622,7 @@ ], "summary": "Creates a application deployment in one of virtual clusters in the cluster group", "tags": [ - "appDeployments" + "v1" ] } }, @@ -38600,7 +38652,7 @@ ], "summary": "Deletes the specified application deployment", "tags": [ - "appDeployments" + "v1" ] }, "get": { @@ -38631,7 +38683,7 @@ ], "summary": "Returns the specified application deployment", "tags": [ - "appDeployments" + "v1" ] }, "parameters": [ @@ -38673,7 +38725,7 @@ ], "summary": "Returns profile of the specified application deployment", "tags": [ - "appDeployments" + "v1" ] }, "parameters": [ @@ -38717,7 +38769,7 @@ ], "summary": "Updates the specified application deployment profile", "tags": [ - "appDeployments" + "v1" ] } }, @@ -38762,7 +38814,7 @@ ], "summary": "Apply the application deployment profile updates", "tags": [ - "appDeployments" + "v1" ] } }, @@ -38795,7 +38847,7 @@ ], "summary": "Returns the specified application deployment profile tier information", "tags": [ - "appDeployments" + "v1" ] }, "parameters": [ @@ -38846,7 +38898,7 @@ ], "summary": "Updates the specified application deployment profile tier information", "tags": [ - "appDeployments" + "v1" ] } }, @@ -38879,7 +38931,7 @@ ], "summary": "Retrieves a list of manifests of the specified application deployment profile tier", "tags": [ - "appDeployments" + "v1" ] }, "parameters": [ @@ -38928,7 +38980,7 @@ ], "summary": "Returns the specified application deployment tier manifest information", "tags": [ - "appDeployments" + "v1" ] }, "parameters": [ @@ -38986,7 +39038,7 @@ ], "summary": "Updates the specified application deployment tier manifest information", "tags": [ - "appDeployments" + "v1" ] } }, @@ -39019,7 +39071,7 @@ ], "summary": "Retrieves a list of profile versions of the specified application deployment", "tags": [ - "appDeployments" + "v1" ] }, "parameters": [ @@ -39074,7 +39126,7 @@ ], "summary": "Creates a application profile", "tags": [ - "appProfiles" + "v1" ] } }, @@ -39107,7 +39159,7 @@ ], "summary": "Retrieves a list of application profile macros", "tags": [ - "appProfiles" + "v1" ] } }, @@ -39137,7 +39189,7 @@ ], "summary": "Deletes the specified application profile", "tags": [ - "appProfiles" + "v1" ] }, "get": { @@ -39168,7 +39220,7 @@ ], "summary": "Returns the specified application profile", "tags": [ - "appProfiles" + "v1" ] }, "parameters": [ @@ -39211,7 +39263,7 @@ ], "summary": "Updates the specified application profile", "tags": [ - "appProfiles" + "v1" ] } }, @@ -39266,7 +39318,7 @@ ], "summary": "Clones the specified application profile", "tags": [ - "appProfiles" + "v1" ] } }, @@ -39318,7 +39370,7 @@ ], "summary": "Validates the specified application profile clone", "tags": [ - "appProfiles" + "v1" ] } }, @@ -39364,7 +39416,7 @@ ], "summary": "Updates the specified application profile metadata", "tags": [ - "appProfiles" + "v1" ] } }, @@ -39397,7 +39449,7 @@ ], "summary": "Retrieves a list of tiers of the specified application profile", "tags": [ - "appProfiles" + "v1" ] }, "parameters": [ @@ -39450,7 +39502,7 @@ ], "summary": "Updates app tier of the specified application profile", "tags": [ - "appProfiles" + "v1" ] }, "post": { @@ -39494,7 +39546,7 @@ ], "summary": "Adds tier to the specified application profile", "tags": [ - "appProfiles" + "v1" ] } }, @@ -39524,7 +39576,7 @@ ], "summary": "Deletes the specified application profile tier", "tags": [ - "appProfiles" + "v1" ] }, "get": { @@ -39555,7 +39607,7 @@ ], "summary": "Returns the specified application profile tier information", "tags": [ - "appProfiles" + "v1" ] }, "parameters": [ @@ -39606,7 +39658,7 @@ ], "summary": "Updates the specified application profile tier", "tags": [ - "appProfiles" + "v1" ] } }, @@ -39639,7 +39691,7 @@ ], "summary": "Retrieves a list of manifests of the specified application profile tier", "tags": [ - "appProfiles" + "v1" ] }, "parameters": [ @@ -39699,7 +39751,7 @@ ], "summary": "Adds manifest to the specified application profile tier", "tags": [ - "appProfiles" + "v1" ] } }, @@ -39729,7 +39781,7 @@ ], "summary": "Deletes the specified application profile tier manifest", "tags": [ - "appProfiles" + "v1" ] }, "get": { @@ -39760,7 +39812,7 @@ ], "summary": "Returns the specified application profile tier manifest information", "tags": [ - "appProfiles" + "v1" ] }, "parameters": [ @@ -39818,7 +39870,7 @@ ], "summary": "Updates the specified application profile tier manifest information", "tags": [ - "appProfiles" + "v1" ] } }, @@ -39851,7 +39903,7 @@ ], "summary": "Returns the specified application profile tier resolved values", "tags": [ - "appProfiles" + "v1" ] }, "parameters": [ @@ -39977,7 +40029,7 @@ ], "summary": "Retrieves the list of audit logs", "tags": [ - "audits" + "v1" ] } }, @@ -40010,7 +40062,7 @@ ], "summary": "Returns the specified audit log", "tags": [ - "audits" + "v1" ] }, "parameters": [ @@ -40052,7 +40104,7 @@ ], "summary": "Returns the specified system audit message", "tags": [ - "audits" + "v1" ] }, "parameters": [ @@ -40107,7 +40159,7 @@ ], "summary": "Updates the specified user message for the specified audit", "tags": [ - "audits" + "v1" ] } }, @@ -40143,7 +40195,7 @@ }, "summary": "Authenticates the user for the specified crendentials", "tags": [ - "auth" + "v1" ] } }, @@ -40168,7 +40220,7 @@ }, "summary": "Returns the user organization details", "tags": [ - "auth" + "v1" ] } }, @@ -40186,7 +40238,7 @@ }, "summary": "Idp authorization code callback", "tags": [ - "auth" + "v1" ] }, "parameters": [ @@ -40240,7 +40292,7 @@ }, "summary": "Identity provider logout url for the Oidc", "tags": [ - "auth" + "v1" ] }, "parameters": [ @@ -40305,7 +40357,7 @@ }, "summary": "Identity provider callback url for the SMAL authentication", "tags": [ - "auth" + "v1" ] } }, @@ -40352,7 +40404,7 @@ }, "summary": "Identity provider logout url for the SMAL", "tags": [ - "auth" + "v1" ] } }, @@ -40370,7 +40422,7 @@ }, "summary": "Returns a list of user's organizations", "tags": [ - "auth" + "v1" ] } }, @@ -40414,7 +40466,7 @@ }, "summary": "Updates and Activates the specified user password using the password token", "tags": [ - "auth" + "v1" ] } }, @@ -40458,7 +40510,7 @@ }, "summary": "Resets the user password using the password token", "tags": [ - "auth" + "v1" ] } }, @@ -40476,7 +40528,7 @@ }, "summary": "Refreshes authentication token", "tags": [ - "auth" + "v1" ] }, "parameters": [ @@ -40510,7 +40562,7 @@ }, "summary": "Returns a list of predefined Identity Provider (IDP)", "tags": [ - "auth" + "v1" ] } }, @@ -40535,7 +40587,7 @@ }, "summary": "Returns a list of supported sso logins", "tags": [ - "auth" + "v1" ] } }, @@ -40553,7 +40605,7 @@ }, "summary": "Returns a list of supported sso auth providers", "tags": [ - "auth" + "v1" ] } }, @@ -40571,7 +40623,7 @@ }, "summary": "Returns Authorization token. Works as a callback url for the system defined sso apps", "tags": [ - "auth" + "v1" ] }, "parameters": [ @@ -40634,7 +40686,7 @@ }, "summary": "Returns No Content. Sends the user organization information via email", "tags": [ - "auth" + "v1" ] } }, @@ -40674,7 +40726,7 @@ }, "summary": "Creates request to reset password via email", "tags": [ - "auth" + "v1" ] } }, @@ -40746,7 +40798,7 @@ ], "summary": "Retrieves a list of AWS cloud accounts", "tags": [ - "cloudaccounts" + "v1" ] }, "post": { @@ -40791,7 +40843,7 @@ ], "summary": "Creates an AWS cloud account", "tags": [ - "cloudaccounts" + "v1" ] } }, @@ -40821,7 +40873,7 @@ ], "summary": "Deletes the specified AWS account", "tags": [ - "cloudaccounts" + "v1" ] }, "get": { @@ -40858,7 +40910,7 @@ ], "summary": "Returns the specified AWS account", "tags": [ - "cloudaccounts" + "v1" ] }, "parameters": [ @@ -40902,7 +40954,7 @@ ], "summary": "Updates the specified AWS account", "tags": [ - "cloudaccounts" + "v1" ] } }, @@ -40974,7 +41026,7 @@ ], "summary": "Retrieves a list of azure cloud accounts", "tags": [ - "cloudaccounts" + "v1" ] }, "post": { @@ -41019,7 +41071,7 @@ ], "summary": "Create azure cloud account", "tags": [ - "cloudaccounts" + "v1" ] } }, @@ -41049,7 +41101,7 @@ ], "summary": "Deletes the specified azure account", "tags": [ - "cloudaccounts" + "v1" ] }, "get": { @@ -41080,7 +41132,7 @@ ], "summary": "Returns the specified azure cloud account", "tags": [ - "cloudaccounts" + "v1" ] }, "parameters": [ @@ -41124,7 +41176,7 @@ ], "summary": "Updates the specified azure account", "tags": [ - "cloudaccounts" + "v1" ] } }, @@ -41196,7 +41248,7 @@ ], "summary": "Retrieves a list of cloud accounts by cloud type", "tags": [ - "cloudaccounts" + "v1" ] }, "parameters": [ @@ -41250,7 +41302,7 @@ ], "summary": "Creates an cloud account of specific cloud type", "tags": [ - "cloudaccounts" + "v1" ] } }, @@ -41280,7 +41332,7 @@ ], "summary": "Deletes the specified account by cloud type", "tags": [ - "cloudaccounts" + "v1" ] }, "get": { @@ -41311,7 +41363,7 @@ ], "summary": "Returns the specified account by cloud type", "tags": [ - "cloudaccounts" + "v1" ] }, "parameters": [ @@ -41362,7 +41414,7 @@ ], "summary": "Updates the specified account by cloud type", "tags": [ - "cloudaccounts" + "v1" ] } }, @@ -41434,7 +41486,7 @@ ], "summary": "Retrieves a list of gcp cloud accounts", "tags": [ - "cloudaccounts" + "v1" ] }, "post": { @@ -41479,7 +41531,7 @@ ], "summary": "Creates a GCP cloud account", "tags": [ - "cloudaccounts" + "v1" ] } }, @@ -41509,7 +41561,7 @@ ], "summary": "Deletes the specified GCP account", "tags": [ - "cloudaccounts" + "v1" ] }, "get": { @@ -41540,7 +41592,7 @@ ], "summary": "Returns the specified GCP cloud account", "tags": [ - "cloudaccounts" + "v1" ] }, "parameters": [ @@ -41585,7 +41637,7 @@ ], "summary": "Updates the specified GCP account", "tags": [ - "cloudaccounts" + "v1" ] } }, @@ -41657,7 +41709,7 @@ ], "summary": "Retrieves a list of Maas cloud accounts", "tags": [ - "cloudaccounts" + "v1" ] }, "post": { @@ -41702,7 +41754,7 @@ ], "summary": "Creates an Maas cloud account", "tags": [ - "cloudaccounts" + "v1" ] } }, @@ -41732,7 +41784,7 @@ ], "summary": "Deletes the specified Maas account", "tags": [ - "cloudaccounts" + "v1" ] }, "get": { @@ -41763,7 +41815,7 @@ ], "summary": "Returns the specified Maas account", "tags": [ - "cloudaccounts" + "v1" ] }, "parameters": [ @@ -41808,7 +41860,7 @@ ], "summary": "Patches the specified CloudAccount Maas", "tags": [ - "cloudaccounts" + "v1" ] }, "put": { @@ -41843,7 +41895,7 @@ ], "summary": "Updates the specified Maas account", "tags": [ - "cloudaccounts" + "v1" ] } }, @@ -41876,7 +41928,7 @@ ], "summary": "Get the maas azs for a given account", "tags": [ - "cloudaccounts" + "v1" ] }, "parameters": [ @@ -41917,7 +41969,7 @@ ], "summary": "Get the maas domains for a given account", "tags": [ - "cloudaccounts" + "v1" ] }, "parameters": [ @@ -41958,7 +42010,7 @@ ], "summary": "Get the maas pools for a given account", "tags": [ - "cloudaccounts" + "v1" ] }, "parameters": [ @@ -41999,7 +42051,7 @@ ], "summary": "Get the maas subnets for a given account", "tags": [ - "cloudaccounts" + "v1" ] }, "parameters": [ @@ -42040,7 +42092,7 @@ ], "summary": "Get the maas tags for a given account", "tags": [ - "cloudaccounts" + "v1" ] }, "parameters": [ @@ -42120,7 +42172,7 @@ ], "summary": "Retrieves a list of OpenStack cloud accounts", "tags": [ - "cloudaccounts" + "v1" ] }, "post": { @@ -42165,7 +42217,7 @@ ], "summary": "Creates a OpenStack cloud account", "tags": [ - "cloudaccounts" + "v1" ] } }, @@ -42195,7 +42247,7 @@ ], "summary": "Deletes the specified OpenStack account", "tags": [ - "cloudaccounts" + "v1" ] }, "get": { @@ -42226,7 +42278,7 @@ ], "summary": "Returns the specified OpenStack account", "tags": [ - "cloudaccounts" + "v1" ] }, "parameters": [ @@ -42270,7 +42322,7 @@ ], "summary": "Updates the specified OpenStack account", "tags": [ - "cloudaccounts" + "v1" ] } }, @@ -42318,7 +42370,7 @@ ], "summary": "Get the openstack azs for a given account and region", "tags": [ - "cloudaccounts" + "v1" ] }, "parameters": [ @@ -42374,7 +42426,7 @@ ], "summary": "Get the openstack keypairs for a given account and scope", "tags": [ - "cloudaccounts" + "v1" ] }, "parameters": [ @@ -42430,7 +42482,7 @@ ], "summary": "Get the openstack keypairs for a given account and scope", "tags": [ - "cloudaccounts" + "v1" ] }, "parameters": [ @@ -42486,7 +42538,7 @@ ], "summary": "Get the openstack networks for a given account and scope", "tags": [ - "cloudaccounts" + "v1" ] }, "parameters": [ @@ -42527,7 +42579,7 @@ ], "summary": "Get the openstack projects for a given account", "tags": [ - "cloudaccounts" + "v1" ] }, "parameters": [ @@ -42568,7 +42620,7 @@ ], "summary": "Get the openstack regions for a given account", "tags": [ - "cloudaccounts" + "v1" ] }, "parameters": [ @@ -42642,7 +42694,7 @@ ], "summary": "Retrieves a list of cloud accounts summary", "tags": [ - "cloudaccounts" + "v1" ] } }, @@ -42714,7 +42766,7 @@ ], "summary": "Retrieves a list of Tencent cloud accounts", "tags": [ - "cloudaccounts" + "v1" ] }, "post": { @@ -42759,7 +42811,7 @@ ], "summary": "Creates an Tencent cloud account", "tags": [ - "cloudaccounts" + "v1" ] } }, @@ -42789,7 +42841,7 @@ ], "summary": "Deletes the specified Tencent account", "tags": [ - "cloudaccounts" + "v1" ] }, "get": { @@ -42820,7 +42872,7 @@ ], "summary": "Returns the specified Tencent account", "tags": [ - "cloudaccounts" + "v1" ] }, "parameters": [ @@ -42864,7 +42916,7 @@ ], "summary": "Updates the specified Tencent account", "tags": [ - "cloudaccounts" + "v1" ] } }, @@ -42936,7 +42988,7 @@ ], "summary": "Retrieves a list of vSphere cloud accounts", "tags": [ - "cloudaccounts" + "v1" ] }, "post": { @@ -42981,7 +43033,7 @@ ], "summary": "Creates a vSphere cloud account", "tags": [ - "cloudaccounts" + "v1" ] } }, @@ -43011,7 +43063,7 @@ ], "summary": "Deletes the specified vSphere account", "tags": [ - "cloudaccounts" + "v1" ] }, "get": { @@ -43042,7 +43094,7 @@ ], "summary": "Returns the specified vSphere account", "tags": [ - "cloudaccounts" + "v1" ] }, "parameters": [ @@ -43087,7 +43139,7 @@ ], "summary": "Updates the specified VSphere account", "tags": [ - "cloudaccounts" + "v1" ] } }, @@ -43120,7 +43172,7 @@ ], "summary": "Get the vSphere computecluster resources for the given overlord account", "tags": [ - "cloudaccounts" + "v1" ] }, "parameters": [ @@ -43176,9 +43228,9 @@ "Authorization": [] } ], - "summary": "Get the vSphere datacenters & datacluster for the given overlord account", + "summary": "Get the vSphere datacenters \u0026 datacluster for the given overlord account", "tags": [ - "cloudaccounts" + "v1" ] }, "parameters": [ @@ -43232,7 +43284,7 @@ ], "summary": "Update the geolocation annotation", "tags": [ - "cloudaccounts" + "v1" ] } }, @@ -43265,7 +43317,7 @@ ], "summary": "Returns the specified AKS cloud config", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -43320,7 +43372,7 @@ ], "summary": "Updates the cluster configuration information", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -43375,7 +43427,7 @@ ], "summary": "Creates an AKS cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -43405,7 +43457,7 @@ ], "summary": "Deletes the specified machine pool", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -43456,7 +43508,7 @@ ], "summary": "Updates the specified AKS cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -43528,7 +43580,7 @@ ], "summary": "Retrieves a list of AKS machines", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -43588,7 +43640,7 @@ ], "summary": "Adds the machine to cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -43618,7 +43670,7 @@ ], "summary": "Deletes the specified Azure machine", "tags": [ - "cloudconfigs" + "v1" ] }, "get": { @@ -43649,7 +43701,7 @@ ], "summary": "Returns the specified AKS machine", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -43707,7 +43759,7 @@ ], "summary": "Updates the specified machine to the cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -43740,7 +43792,7 @@ ], "summary": "Returns the specified AWS cloud config", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -43795,7 +43847,7 @@ ], "summary": "Updates the cluster configuration information", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -43850,7 +43902,7 @@ ], "summary": "Creates an AWS cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -43880,7 +43932,7 @@ ], "summary": "Deletes the specified machine pool", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -43931,7 +43983,7 @@ ], "summary": "Updates the specified AWS cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -44003,7 +44055,7 @@ ], "summary": "Retrieves a list of AWS machines", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -44063,7 +44115,7 @@ ], "summary": "Adds the machine to cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -44093,7 +44145,7 @@ ], "summary": "Deletes the specified AWS machine", "tags": [ - "cloudconfigs" + "v1" ] }, "get": { @@ -44124,7 +44176,7 @@ ], "summary": "Returns the specified AWS machine", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -44182,7 +44234,7 @@ ], "summary": "Updates the specified machine to the cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -44215,7 +44267,7 @@ ], "summary": "Returns the specified Azure cloud config", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -44270,7 +44322,7 @@ ], "summary": "Updates the cluster configuration information", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -44325,7 +44377,7 @@ ], "summary": "Creates an Azure cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -44355,7 +44407,7 @@ ], "summary": "Deletes the specified machine pool", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -44406,7 +44458,7 @@ ], "summary": "Updates the specified Azure cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -44479,7 +44531,7 @@ ], "summary": "Retrieves a list of Azure machines", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -44539,7 +44591,7 @@ ], "summary": "Adds the machine to cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -44569,7 +44621,7 @@ ], "summary": "Deletes the specified Azure machine", "tags": [ - "cloudconfigs" + "v1" ] }, "get": { @@ -44601,7 +44653,7 @@ ], "summary": "Returns the specified Azure machine", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -44659,7 +44711,7 @@ ], "summary": "Updates the specified machine to cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -44692,7 +44744,7 @@ ], "summary": "Returns the specified Custom cloud config", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -44761,7 +44813,7 @@ ], "summary": "Updates the cluster configuration information", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -44823,7 +44875,7 @@ ], "summary": "Creates an Custom cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -44853,7 +44905,7 @@ ], "summary": "Deletes the specified machine pool", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -44911,7 +44963,7 @@ ], "summary": "Updates the specified Custom cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -44983,7 +45035,7 @@ ], "summary": "Retrieves a list of Custom machines", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -45050,7 +45102,7 @@ ], "summary": "Adds the machine to cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -45080,7 +45132,7 @@ ], "summary": "Deletes the specified Custom machine", "tags": [ - "cloudconfigs" + "v1" ] }, "get": { @@ -45111,7 +45163,7 @@ ], "summary": "Returns the specified Custom machine", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -45176,7 +45228,7 @@ ], "summary": "Updates the specified machine to the cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -45209,7 +45261,7 @@ ], "summary": "Returns the specified edge-native cloud config", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -45264,7 +45316,7 @@ ], "summary": "Updates the cluster configuration information", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -45319,7 +45371,7 @@ ], "summary": "Creates a edge-native cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -45349,7 +45401,7 @@ ], "summary": "Deletes the specified machine pool", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -45400,7 +45452,7 @@ ], "summary": "Updates the specified edge-native cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -45433,7 +45485,7 @@ ], "summary": "Retrieves a list of edge-native machines", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -45493,7 +45545,7 @@ ], "summary": "Adds the edge-native machine to cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -45523,7 +45575,7 @@ ], "summary": "Deletes the specified edge-native machine", "tags": [ - "cloudconfigs" + "v1" ] }, "get": { @@ -45554,7 +45606,7 @@ ], "summary": "Returns the specified edge-native machine", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -45612,7 +45664,7 @@ ], "summary": "Updates the specified machine to cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -45645,7 +45697,7 @@ ], "summary": "Returns the specified EKS cloud config", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -45700,7 +45752,7 @@ ], "summary": "Updates the cluster configuration information", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -45746,7 +45798,7 @@ ], "summary": "Updates EKS cloud config's fargate profiles", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -45801,7 +45853,7 @@ ], "summary": "Creates an EKS cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -45831,7 +45883,7 @@ ], "summary": "Deletes the specified machine pool", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -45882,7 +45934,7 @@ ], "summary": "Updates the specified EKS cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -45954,7 +46006,7 @@ ], "summary": "Retrieves a list of EKS machines", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -46014,7 +46066,7 @@ ], "summary": "Adds the machine to cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -46044,7 +46096,7 @@ ], "summary": "Deletes the specified EKS machine", "tags": [ - "cloudconfigs" + "v1" ] }, "get": { @@ -46075,7 +46127,7 @@ ], "summary": "Returns the specified EKS machine", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -46133,7 +46185,7 @@ ], "summary": "Updates the specified machine to the cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -46166,7 +46218,7 @@ ], "summary": "Returns the specified GCP cloud config", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -46221,7 +46273,7 @@ ], "summary": "Updates the cluster configuration information", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -46276,7 +46328,7 @@ ], "summary": "Creates a Gcp cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -46306,7 +46358,7 @@ ], "summary": "Deletes the specified machine pool", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -46357,7 +46409,7 @@ ], "summary": "Updates the specified GCP cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -46429,7 +46481,7 @@ ], "summary": "Retrieves a list of GCP machines", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -46489,7 +46541,7 @@ ], "summary": "Adds the machine to cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -46519,7 +46571,7 @@ ], "summary": "Deletes the specified GCP machine", "tags": [ - "cloudconfigs" + "v1" ] }, "get": { @@ -46550,7 +46602,7 @@ ], "summary": "Returns the specified GCP machine", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -46608,7 +46660,7 @@ ], "summary": "Updates the specified machine to the cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -46641,7 +46693,7 @@ ], "summary": "Returns the specified Generic cloud config", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -46696,7 +46748,7 @@ ], "summary": "Updates the cluster configuration information", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -46751,7 +46803,7 @@ ], "summary": "Creates a generic cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -46781,7 +46833,7 @@ ], "summary": "Deletes the specified machine pool", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -46832,7 +46884,7 @@ ], "summary": "Updates the specified generic cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -46904,7 +46956,7 @@ ], "summary": "Retrieves a list of Generic machines", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -46964,7 +47016,7 @@ ], "summary": "Adds the machine to cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -46994,7 +47046,7 @@ ], "summary": "Deletes the specified machine", "tags": [ - "cloudconfigs" + "v1" ] }, "get": { @@ -47025,7 +47077,7 @@ ], "summary": "Returns the specified generic machine", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -47083,7 +47135,7 @@ ], "summary": "Updates the specified machine to the cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -47116,7 +47168,7 @@ ], "summary": "Returns the specified GKE cloud config", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -47171,7 +47223,7 @@ ], "summary": "Updates the cluster configuration information", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -47226,7 +47278,7 @@ ], "summary": "Creates an GKE cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -47256,7 +47308,7 @@ ], "summary": "Deletes the specified machine pool", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -47307,7 +47359,7 @@ ], "summary": "Updates the specified GKE cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -47379,7 +47431,7 @@ ], "summary": "Retrieves a list of GKE machines", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -47439,7 +47491,7 @@ ], "summary": "Adds the machine to cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -47469,7 +47521,7 @@ ], "summary": "Deletes the specified Gcp machine", "tags": [ - "cloudconfigs" + "v1" ] }, "get": { @@ -47500,7 +47552,7 @@ ], "summary": "Returns the specified GKE machine", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -47558,7 +47610,7 @@ ], "summary": "Updates the specified machine to the cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -47591,7 +47643,7 @@ ], "summary": "Returns the specified Maas cloud config", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -47646,7 +47698,7 @@ ], "summary": "Updates the cluster configuration information", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -47701,7 +47753,7 @@ ], "summary": "Creates an Maas cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -47731,7 +47783,7 @@ ], "summary": "Deletes the specified machine pool", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -47782,7 +47834,7 @@ ], "summary": "Updates the specified Maas cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -47854,7 +47906,7 @@ ], "summary": "Retrieves a list of Maas machines", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -47914,7 +47966,7 @@ ], "summary": "Adds the machine to cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -47944,7 +47996,7 @@ ], "summary": "Deletes the specified Maas machine", "tags": [ - "cloudconfigs" + "v1" ] }, "get": { @@ -47975,7 +48027,7 @@ ], "summary": "Returns the specified Maas machine", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -48033,7 +48085,7 @@ ], "summary": "Updates the specified machine to the cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -48066,7 +48118,7 @@ ], "summary": "Returns the specified OpenStack cloud config", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -48121,7 +48173,7 @@ ], "summary": "Updates the cluster configuration information", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -48176,7 +48228,7 @@ ], "summary": "Creates a OpenStack cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -48206,7 +48258,7 @@ ], "summary": "Deletes the specified machine pool", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -48257,7 +48309,7 @@ ], "summary": "Updates the specified OpenStack cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -48290,7 +48342,7 @@ ], "summary": "Retrieves a list of OpenStack machines", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -48350,7 +48402,7 @@ ], "summary": "Adds the OpenStack machine to cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -48380,7 +48432,7 @@ ], "summary": "Deletes the specified OpenStack machine", "tags": [ - "cloudconfigs" + "v1" ] }, "get": { @@ -48411,7 +48463,7 @@ ], "summary": "Returns the specified OpenStack machine", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -48469,7 +48521,7 @@ ], "summary": "Updates the specified machine to cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -48502,7 +48554,7 @@ ], "summary": "Returns the specified TKE cloud config", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -48557,7 +48609,7 @@ ], "summary": "Updates the cluster configuration information", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -48612,7 +48664,7 @@ ], "summary": "Creates an TKE cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -48642,7 +48694,7 @@ ], "summary": "Deletes the specified machine pool", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -48693,7 +48745,7 @@ ], "summary": "Updates the specified TKE cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -48765,7 +48817,7 @@ ], "summary": "Retrieves a list of TKE machines", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -48825,7 +48877,7 @@ ], "summary": "Adds the machine to cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -48855,7 +48907,7 @@ ], "summary": "Deletes the specified Tencent machine", "tags": [ - "cloudconfigs" + "v1" ] }, "get": { @@ -48886,7 +48938,7 @@ ], "summary": "Returns the specified Tke machine", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -48944,7 +48996,7 @@ ], "summary": "Updates the specified machine to the cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -48977,7 +49029,7 @@ ], "summary": "Returns the specified Virtual cloud config", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -49032,7 +49084,7 @@ ], "summary": "Updates the cluster configuration information", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -49087,7 +49139,7 @@ ], "summary": "Creates a virtual cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -49117,7 +49169,7 @@ ], "summary": "Deletes the specified machine pool", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -49168,7 +49220,7 @@ ], "summary": "Updates the specified virtual cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -49240,7 +49292,7 @@ ], "summary": "Retrieves a list of virtual machines", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -49300,7 +49352,7 @@ ], "summary": "Adds the machine to cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -49330,7 +49382,7 @@ ], "summary": "Deletes the specified virtual machine", "tags": [ - "cloudconfigs" + "v1" ] }, "get": { @@ -49361,7 +49413,7 @@ ], "summary": "Returns the specified virtual machine", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -49419,7 +49471,7 @@ ], "summary": "Updates the specified machine to the cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -49465,7 +49517,7 @@ ], "summary": "Updates and resizes the virtual cluster", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -49498,7 +49550,7 @@ ], "summary": "Returns the specified vSphere cloud config", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -49553,7 +49605,7 @@ ], "summary": "Updates the cluster configuration information", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -49608,7 +49660,7 @@ ], "summary": "Creates a vSphere cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -49638,7 +49690,7 @@ ], "summary": "Deletes the specified machine pool", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -49689,7 +49741,7 @@ ], "summary": "Updates the specified vSphere cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -49761,7 +49813,7 @@ ], "summary": "Retrieves a list of vSphere machines", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -49821,7 +49873,7 @@ ], "summary": "Adds the vSphere machine to cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -49851,7 +49903,7 @@ ], "summary": "Deletes the specified vSphere machine", "tags": [ - "cloudconfigs" + "v1" ] }, "get": { @@ -49882,7 +49934,7 @@ ], "summary": "Returns the specified vSphere machine", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -49940,7 +49992,7 @@ ], "summary": "Updates the specified machine to cloud config's machine pool", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -50007,7 +50059,7 @@ ], "summary": "Updates the specified machine maintenance", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -50074,7 +50126,7 @@ ], "summary": "Updates the specified machine maintenance", "tags": [ - "cloudconfigs" + "v1" ] } }, @@ -50107,7 +50159,7 @@ ], "summary": "Returns the specified cloud config's machine pools and machine uid", "tags": [ - "cloudconfigs" + "v1" ] }, "parameters": [ @@ -50160,7 +50212,7 @@ ], "summary": "Retrieves AWS external id and account id", "tags": [ - "clouds" + "v1" ] } }, @@ -50205,7 +50257,7 @@ ], "summary": "Validate the specified AWS account credentials", "tags": [ - "clouds" + "v1" ] } }, @@ -50251,7 +50303,7 @@ ], "summary": "validates aws cloud watch credentials", "tags": [ - "clouds" + "v1" ] } }, @@ -50293,7 +50345,7 @@ ], "summary": "Retrieves AWS cloud account usage cost from cost explorer.", "tags": [ - "clouds" + "v1" ] } }, @@ -50348,7 +50400,7 @@ ], "summary": "Get AWS Volume Size", "tags": [ - "clouds" + "v1" ] } }, @@ -50396,7 +50448,7 @@ ], "summary": "Retrieves a list of AWS policies for the specified account", "tags": [ - "clouds" + "v1" ] } }, @@ -50447,7 +50499,7 @@ ], "summary": "Validate the aws policy arns validate", "tags": [ - "clouds" + "v1" ] } }, @@ -50492,7 +50544,7 @@ ], "summary": "Validate AWS properties", "tags": [ - "clouds" + "v1" ] } }, @@ -50532,7 +50584,7 @@ ], "summary": "Retrieves a list of AWS regions for the specified account", "tags": [ - "clouds" + "v1" ] } }, @@ -50579,7 +50631,7 @@ ], "summary": "Retrieves a list of AWS availability zones for the specified region", "tags": [ - "clouds" + "v1" ] } }, @@ -50627,7 +50679,7 @@ ], "summary": "Copies the specified image from one region to another region", "tags": [ - "clouds" + "v1" ] } }, @@ -50685,7 +50737,7 @@ ], "summary": "Check if Aws cluster name is valid", "tags": [ - "clouds" + "v1" ] } }, @@ -50733,7 +50785,7 @@ ], "summary": "Returns AWS image for the specified AMI name", "tags": [ - "clouds" + "v1" ] } }, @@ -50800,7 +50852,7 @@ ], "summary": "Retrieves a list of AWS instance types", "tags": [ - "clouds" + "v1" ] } }, @@ -50847,7 +50899,7 @@ ], "summary": "Retrieves a list of AWS keypairs", "tags": [ - "clouds" + "v1" ] } }, @@ -50904,7 +50956,7 @@ ], "summary": "Validate the specified AWS keypair", "tags": [ - "clouds" + "v1" ] } }, @@ -50958,7 +51010,7 @@ ], "summary": "Get AWS KMS key by Id", "tags": [ - "clouds" + "v1" ] } }, @@ -51005,7 +51057,7 @@ ], "summary": "Retrieves a list of AWS KMS keys for the specified account", "tags": [ - "clouds" + "v1" ] } }, @@ -51062,7 +51114,7 @@ ], "summary": "Validate an Aws KMS key for the specified account", "tags": [ - "clouds" + "v1" ] } }, @@ -51102,7 +51154,7 @@ ], "summary": "Retrieves a list of AWS storage types", "tags": [ - "clouds" + "v1" ] } }, @@ -51149,7 +51201,7 @@ ], "summary": "Retrieves a list of VPCs for the specified account", "tags": [ - "clouds" + "v1" ] } }, @@ -51194,7 +51246,7 @@ ], "summary": "Validate the AWS S3 bucket", "tags": [ - "clouds" + "v1" ] } }, @@ -51247,7 +51299,7 @@ ], "summary": "Retrieves a list of AWS security groups for the specified account", "tags": [ - "clouds" + "v1" ] } }, @@ -51288,7 +51340,7 @@ ], "summary": "Get all AWS Volume Types", "tags": [ - "clouds" + "v1" ] } }, @@ -51334,7 +51386,7 @@ ], "summary": "Check if Azure account is valid", "tags": [ - "clouds" + "v1" ] } }, @@ -51373,7 +51425,7 @@ ], "summary": "Retrieves a list of Azure groups", "tags": [ - "clouds" + "v1" ] } }, @@ -51418,7 +51470,7 @@ ], "summary": "Retrieves a list of Azure regions", "tags": [ - "clouds" + "v1" ] } }, @@ -51479,7 +51531,7 @@ ], "summary": "Retrieves a list of Azure instance types", "tags": [ - "clouds" + "v1" ] } }, @@ -51519,7 +51571,7 @@ ], "summary": "Retrieves a list of Azure storage types", "tags": [ - "clouds" + "v1" ] } }, @@ -51591,7 +51643,7 @@ ], "summary": "Check if Azure cluster name is valid", "tags": [ - "clouds" + "v1" ] } }, @@ -51651,7 +51703,7 @@ ], "summary": "Retrieves a list of Azure virtual network list for the sepcified account", "tags": [ - "clouds" + "v1" ] } }, @@ -51705,7 +51757,7 @@ ], "summary": "Retrieves a list of Azure resource group for the specified account", "tags": [ - "clouds" + "v1" ] } }, @@ -51757,7 +51809,7 @@ ], "summary": "Retrieves a list of Azure zones for the specified region", "tags": [ - "clouds" + "v1" ] } }, @@ -51812,7 +51864,7 @@ ], "summary": "Get Azure private DNS zones for the given resource group", "tags": [ - "clouds" + "v1" ] } }, @@ -51866,7 +51918,7 @@ ], "summary": "Get Azure storage accounts", "tags": [ - "clouds" + "v1" ] } }, @@ -51927,7 +51979,7 @@ ], "summary": "Get Azure storage containers", "tags": [ - "clouds" + "v1" ] } }, @@ -51967,7 +52019,7 @@ ], "summary": "Get Azure storage account types", "tags": [ - "clouds" + "v1" ] } }, @@ -52008,7 +52060,7 @@ ], "summary": "Retrieves a list of Azure subscription list for the specified account", "tags": [ - "clouds" + "v1" ] } }, @@ -52048,7 +52100,7 @@ ], "summary": "Returns the Azure vhd url for the specified vhd location", "tags": [ - "clouds" + "v1" ] } }, @@ -52081,7 +52133,7 @@ ], "summary": "Returns the custom cloud types", "tags": [ - "clouds" + "v1" ] } }, @@ -52128,7 +52180,7 @@ ], "summary": "Registers the custom cloud type", "tags": [ - "clouds" + "v1" ] } }, @@ -52165,7 +52217,7 @@ ], "summary": "Deletes the custom cloud type", "tags": [ - "clouds" + "v1" ] } }, @@ -52198,7 +52250,7 @@ ], "summary": "Returns valid keys for the cloud account used for custom cloud type", "tags": [ - "clouds" + "v1" ] }, "parameters": [ @@ -52250,7 +52302,7 @@ ], "summary": "Update the custom cloud type cloud account keys", "tags": [ - "clouds" + "v1" ] } }, @@ -52280,7 +52332,7 @@ ], "summary": "Delete the custom cloud type bootstrap", "tags": [ - "clouds" + "v1" ] }, "get": { @@ -52311,7 +52363,7 @@ ], "summary": "Returns the custom cloud type bootstrap", "tags": [ - "clouds" + "v1" ] }, "parameters": [ @@ -52362,7 +52414,7 @@ ], "summary": "Update the custom cloud type bootstrap", "tags": [ - "clouds" + "v1" ] } }, @@ -52392,7 +52444,7 @@ ], "summary": "Delete the custom cloud type cloud provider", "tags": [ - "clouds" + "v1" ] }, "get": { @@ -52423,7 +52475,7 @@ ], "summary": "Returns the custom cloud type cloud provider", "tags": [ - "clouds" + "v1" ] }, "parameters": [ @@ -52474,7 +52526,7 @@ ], "summary": "Update the custom cloud type cloud provider", "tags": [ - "clouds" + "v1" ] } }, @@ -52504,7 +52556,7 @@ ], "summary": "Delete the custom cloud type control plane", "tags": [ - "clouds" + "v1" ] }, "get": { @@ -52535,7 +52587,7 @@ ], "summary": "Returns the custom cloud type control plane", "tags": [ - "clouds" + "v1" ] }, "parameters": [ @@ -52586,7 +52638,7 @@ ], "summary": "Update the custom cloud type control plane", "tags": [ - "clouds" + "v1" ] } }, @@ -52616,7 +52668,7 @@ ], "summary": "Delete the custom cloud type cluster template", "tags": [ - "clouds" + "v1" ] }, "get": { @@ -52647,7 +52699,7 @@ ], "summary": "Returns the custom cloud type cluster template", "tags": [ - "clouds" + "v1" ] }, "parameters": [ @@ -52698,7 +52750,7 @@ ], "summary": "Update the custom cloud type cluster template", "tags": [ - "clouds" + "v1" ] } }, @@ -52728,7 +52780,7 @@ ], "summary": "Delete the custom cloud type controlPlane pool template", "tags": [ - "clouds" + "v1" ] }, "get": { @@ -52759,7 +52811,7 @@ ], "summary": "Returns the custom cloud type controlPlane pool template", "tags": [ - "clouds" + "v1" ] }, "parameters": [ @@ -52810,7 +52862,7 @@ ], "summary": "Update the custom cloud type controlPlane pool template", "tags": [ - "clouds" + "v1" ] } }, @@ -52840,7 +52892,7 @@ ], "summary": "Delete the custom cloud type worker pool template", "tags": [ - "clouds" + "v1" ] }, "get": { @@ -52871,7 +52923,7 @@ ], "summary": "Returns the custom cloud type worker pool template", "tags": [ - "clouds" + "v1" ] }, "parameters": [ @@ -52922,7 +52974,7 @@ ], "summary": "Update the custom cloud type worker pool template", "tags": [ - "clouds" + "v1" ] } }, @@ -52964,7 +53016,7 @@ ], "summary": "Returns the custom cloud type logo", "tags": [ - "clouds" + "v1" ] }, "parameters": [ @@ -53015,7 +53067,7 @@ ], "summary": "Update the custom cloud type logo", "tags": [ - "clouds" + "v1" ] } }, @@ -53048,7 +53100,7 @@ ], "summary": "Returns the custom cloud type meta", "tags": [ - "clouds" + "v1" ] }, "parameters": [ @@ -53094,7 +53146,7 @@ ], "summary": "Update the custom cloud type meta", "tags": [ - "clouds" + "v1" ] } }, @@ -53139,7 +53191,7 @@ ], "summary": "Validate EKS properties", "tags": [ - "clouds" + "v1" ] } }, @@ -53184,7 +53236,7 @@ ], "summary": "Validate the specified GCP account credentials", "tags": [ - "clouds" + "v1" ] } }, @@ -53229,7 +53281,7 @@ ], "summary": "Validate the specified GCP az", "tags": [ - "clouds" + "v1" ] } }, @@ -53274,7 +53326,7 @@ ], "summary": "Validate the specified GCP bucket name credentials", "tags": [ - "clouds" + "v1" ] } }, @@ -53324,7 +53376,7 @@ ], "summary": "Validates the image with tag", "tags": [ - "clouds" + "v1" ] } }, @@ -53364,7 +53416,7 @@ ], "summary": "Returns the Gcp image url for the specified image location", "tags": [ - "clouds" + "v1" ] } }, @@ -53404,7 +53456,7 @@ ], "summary": "Retrieves a list of GCP projects for the specified account", "tags": [ - "clouds" + "v1" ] } }, @@ -53451,7 +53503,7 @@ ], "summary": "Retrieves a list of GCP regions", "tags": [ - "clouds" + "v1" ] } }, @@ -53505,7 +53557,7 @@ ], "summary": "Retrieves a list of GCP networks for the specified account", "tags": [ - "clouds" + "v1" ] } }, @@ -53559,7 +53611,7 @@ ], "summary": "Retrieves a list of GCP zones for the specified account and region", "tags": [ - "clouds" + "v1" ] } }, @@ -53611,7 +53663,7 @@ ], "summary": "Validate the specified GCP project", "tags": [ - "clouds" + "v1" ] } }, @@ -53658,7 +53710,7 @@ ], "summary": "Retrieves a list of GCP zones for the specified account", "tags": [ - "clouds" + "v1" ] } }, @@ -53703,7 +53755,7 @@ ], "summary": "Validate GCP properties", "tags": [ - "clouds" + "v1" ] } }, @@ -53764,7 +53816,7 @@ ], "summary": "Retrieves a list of GCP instance types", "tags": [ - "clouds" + "v1" ] } }, @@ -53804,7 +53856,7 @@ ], "summary": "Retrieves a list of Gcp storage types", "tags": [ - "clouds" + "v1" ] } }, @@ -53850,7 +53902,7 @@ ], "summary": "Check if Maas account is valid", "tags": [ - "clouds" + "v1" ] } }, @@ -53889,7 +53941,7 @@ ], "summary": "Retrieves a list of Maas zones for a particular account uid", "tags": [ - "clouds" + "v1" ] } }, @@ -53928,7 +53980,7 @@ ], "summary": "Retrieves a list of Maas domains", "tags": [ - "clouds" + "v1" ] } }, @@ -53967,7 +54019,7 @@ ], "summary": "Retrieves a list of Maas pools for a particular account uid", "tags": [ - "clouds" + "v1" ] } }, @@ -54006,7 +54058,7 @@ ], "summary": "Retrieves a list of Maas subnets for a particular account uid", "tags": [ - "clouds" + "v1" ] } }, @@ -54045,7 +54097,7 @@ ], "summary": "Retrieves a list of Maas tags for a particular account uid", "tags": [ - "clouds" + "v1" ] } }, @@ -54091,7 +54143,7 @@ ], "summary": "Check if OpenStack account is valid", "tags": [ - "clouds" + "v1" ] } }, @@ -54148,7 +54200,7 @@ ], "summary": "Retrieves a list of OpenStack azs for a particular account uid", "tags": [ - "clouds" + "v1" ] } }, @@ -54205,7 +54257,7 @@ ], "summary": "Returns the OpenStack flavors", "tags": [ - "clouds" + "v1" ] } }, @@ -54262,7 +54314,7 @@ ], "summary": "Returns the OpenStack keypair", "tags": [ - "clouds" + "v1" ] } }, @@ -54319,7 +54371,7 @@ ], "summary": "Returns the OpenStack networks", "tags": [ - "clouds" + "v1" ] } }, @@ -54358,7 +54410,7 @@ ], "summary": "Returns the OpenStack projects", "tags": [ - "clouds" + "v1" ] } }, @@ -54397,7 +54449,7 @@ ], "summary": "Returns the OpenStack regions", "tags": [ - "clouds" + "v1" ] } }, @@ -54442,7 +54494,7 @@ ], "summary": "Validate the specified Tencent account credentials", "tags": [ - "clouds" + "v1" ] } }, @@ -54482,7 +54534,7 @@ ], "summary": "Retrieves a list of Tencent regions for the specified account", "tags": [ - "clouds" + "v1" ] } }, @@ -54550,7 +54602,7 @@ ], "summary": "Retrieves a list of Tencent instance types", "tags": [ - "clouds" + "v1" ] } }, @@ -54597,7 +54649,7 @@ ], "summary": "Retrieves a list of keypairs for the specified account", "tags": [ - "clouds" + "v1" ] } }, @@ -54644,7 +54696,7 @@ ], "summary": "Retrieves a list of secutity groups for the specified account", "tags": [ - "clouds" + "v1" ] } }, @@ -54698,7 +54750,7 @@ ], "summary": "Retrieves a list of Tencent storage types", "tags": [ - "clouds" + "v1" ] } }, @@ -54745,7 +54797,7 @@ ], "summary": "Retrieves a list of VPCs for the specified account", "tags": [ - "clouds" + "v1" ] } }, @@ -54792,7 +54844,7 @@ ], "summary": "Retrieves a list of Tencent availability zones for the specified region", "tags": [ - "clouds" + "v1" ] } }, @@ -54838,7 +54890,7 @@ ], "summary": "Check if Vsphere account is valid", "tags": [ - "clouds" + "v1" ] } }, @@ -54877,7 +54929,7 @@ ], "summary": "Returns the vsphere data centers", "tags": [ - "clouds" + "v1" ] } }, @@ -54931,7 +54983,7 @@ ], "summary": "Returns the resources for vsphere compute cluster", "tags": [ - "clouds" + "v1" ] } }, @@ -54973,7 +55025,7 @@ ], "summary": "Retrieves vsphere env", "tags": [ - "clouds" + "v1" ] } }, @@ -55034,7 +55086,7 @@ ], "summary": "Retrieves the cloud instance spot price based on zone and timestamp for a specific cloud", "tags": [ - "clouds" + "v1" ] } }, @@ -55088,7 +55140,7 @@ ], "summary": "Returns the cloud compute rate", "tags": [ - "clouds" + "v1" ] } }, @@ -55148,7 +55200,7 @@ ], "summary": "Returns the cloud storage rate", "tags": [ - "clouds" + "v1" ] } }, @@ -55194,7 +55246,7 @@ ], "summary": "Create cluster groups", "tags": [ - "clustergroups" + "v1" ] } }, @@ -55227,7 +55279,7 @@ ], "summary": "Get cluster group developer credit usage by scope", "tags": [ - "clustergroups" + "v1" ] }, "parameters": [ @@ -55272,7 +55324,7 @@ ], "summary": "Retrieves a list of cluster groups host cluster summary", "tags": [ - "clustergroups" + "v1" ] } }, @@ -55305,7 +55357,7 @@ ], "summary": "Retrieves a list of cluster groups host cluster metadata", "tags": [ - "clustergroups" + "v1" ] } }, @@ -55347,7 +55399,7 @@ ], "summary": "Validates the cluster groups name", "tags": [ - "clustergroups" + "v1" ] } }, @@ -55377,7 +55429,7 @@ ], "summary": "Deletes the specified cluster group", "tags": [ - "clustergroups" + "v1" ] }, "get": { @@ -55408,7 +55460,7 @@ ], "summary": "Returns the specified cluster groups", "tags": [ - "clustergroups" + "v1" ] }, "parameters": [ @@ -55461,7 +55513,7 @@ ], "summary": "Updates cluster reference and host cluster config", "tags": [ - "clustergroups" + "v1" ] } }, @@ -55506,7 +55558,7 @@ ], "summary": "Updates the specified cluster groups meta", "tags": [ - "clustergroups" + "v1" ] } }, @@ -55539,7 +55591,7 @@ ], "summary": "Returns the specified clustergroup's profile packs resolved values", "tags": [ - "clustergroups" + "v1" ] }, "parameters": [ @@ -55594,7 +55646,7 @@ ], "summary": "Returns the associated profiles of a specified cluster group", "tags": [ - "clustergroups" + "v1" ] }, "parameters": [ @@ -55638,7 +55690,7 @@ ], "summary": "Updates the specified cluster groups profiles", "tags": [ - "clustergroups" + "v1" ] } }, @@ -55684,7 +55736,7 @@ ], "summary": "Creates a cluster profile", "tags": [ - "clusterprofiles" + "v1" ] } }, @@ -55724,7 +55776,7 @@ ], "summary": "Deletes list of cluster profiles", "tags": [ - "clusterprofiles" + "v1" ] } }, @@ -55776,7 +55828,7 @@ ], "summary": "Imports a cluster profile", "tags": [ - "clusterprofiles" + "v1" ] } }, @@ -55841,7 +55893,7 @@ ], "summary": "Imports a cluster profile via file", "tags": [ - "clusterprofiles" + "v1" ] } }, @@ -55881,7 +55933,7 @@ ], "summary": "Validates cluster profile import", "tags": [ - "clusterprofiles" + "v1" ] } }, @@ -55914,7 +55966,7 @@ ], "summary": "Retrieves a list of macros", "tags": [ - "clusterprofiles" + "v1" ] } }, @@ -55963,7 +56015,7 @@ ], "summary": "Validates the cluster profile metadata", "tags": [ - "clusterprofiles" + "v1" ] } }, @@ -56003,7 +56055,7 @@ ], "summary": "Validates cluster profile packs", "tags": [ - "clusterprofiles" + "v1" ] } }, @@ -56033,7 +56085,7 @@ ], "summary": "Deletes the specified cluster profile", "tags": [ - "clusterprofiles" + "v1" ] }, "get": { @@ -56064,7 +56116,7 @@ ], "summary": "Returns a specified cluster profile", "tags": [ - "clusterprofiles" + "v1" ] }, "parameters": [ @@ -56114,7 +56166,7 @@ ], "summary": "Updates the specified cluster profile", "tags": [ - "clusterprofiles" + "v1" ] } }, @@ -56169,7 +56221,7 @@ ], "summary": "Creates a clone of the specified cluster profile", "tags": [ - "clusterprofiles" + "v1" ] } }, @@ -56222,7 +56274,7 @@ ], "summary": "Validates the cluster profile clone", "tags": [ - "clusterprofiles" + "v1" ] } }, @@ -56264,7 +56316,7 @@ ], "summary": "Export the specified cluster profile", "tags": [ - "clusterprofiles" + "v1" ] }, "parameters": [ @@ -56326,7 +56378,7 @@ ], "summary": "Downloads the specified cluster profile", "tags": [ - "clusterprofiles" + "v1" ] }, "parameters": [ @@ -56392,7 +56444,7 @@ ], "summary": "Updates the specified cluster profile metadata", "tags": [ - "clusterprofiles" + "v1" ] } }, @@ -56444,7 +56496,7 @@ ], "summary": "Updates cluster profile packs ref", "tags": [ - "clusterprofiles" + "v1" ] } }, @@ -56477,7 +56529,7 @@ ], "summary": "Returns the specified cluster profile packs", "tags": [ - "clusterprofiles" + "v1" ] }, "parameters": [ @@ -56536,7 +56588,7 @@ ], "summary": "Adds a new pack to the specified cluster profile and returns the created pack uid", "tags": [ - "clusterprofiles" + "v1" ] } }, @@ -56569,7 +56621,7 @@ ], "summary": "Returns the specified cluster profile pack manifests", "tags": [ - "clusterprofiles" + "v1" ] }, "parameters": [ @@ -56617,7 +56669,7 @@ ], "summary": "Returns the specified cluster profile packs resolved values", "tags": [ - "clusterprofiles" + "v1" ] }, "parameters": [ @@ -56663,7 +56715,7 @@ ], "summary": "Deletes the specified pack information in the cluster profile", "tags": [ - "clusterprofiles" + "v1" ] }, "get": { @@ -56694,7 +56746,7 @@ ], "summary": "Returns the specified cluster profile pack", "tags": [ - "clusterprofiles" + "v1" ] }, "parameters": [ @@ -56745,7 +56797,7 @@ ], "summary": "Updates the specified pack information in the cluster profile", "tags": [ - "clusterprofiles" + "v1" ] } }, @@ -56799,7 +56851,7 @@ ], "summary": "Returns the specified cluster profile pack configuration", "tags": [ - "clusterprofiles" + "v1" ] } }, @@ -56832,7 +56884,7 @@ ], "summary": "Returns the associated manifests for the specified profile's pack", "tags": [ - "clusterprofiles" + "v1" ] }, "parameters": [ @@ -56892,7 +56944,7 @@ ], "summary": "Adds manifest to the profiles packs and returns the added manifests uid", "tags": [ - "clusterprofiles" + "v1" ] } }, @@ -56922,7 +56974,7 @@ ], "summary": "Deletes the specified cluster profile pack manifest", "tags": [ - "clusterprofiles" + "v1" ] }, "get": { @@ -56953,7 +57005,7 @@ ], "summary": "Returns the specified cluster profile pack manifest", "tags": [ - "clusterprofiles" + "v1" ] }, "parameters": [ @@ -57011,7 +57063,7 @@ ], "summary": "Updates the specified manifest of the profile's pack", "tags": [ - "clusterprofiles" + "v1" ] } }, @@ -57051,7 +57103,7 @@ ], "summary": "Publishes the specified cluster profile", "tags": [ - "clusterprofiles" + "v1" ] } }, @@ -57093,7 +57145,7 @@ ], "summary": "Downloads the specified cluster profile", "tags": [ - "clusterprofiles" + "v1" ] }, "parameters": [ @@ -57149,7 +57201,7 @@ ], "summary": "Validates specified cluster profile packs", "tags": [ - "clusterprofiles" + "v1" ] } }, @@ -57186,7 +57238,7 @@ ], "summary": "Deletes the specified cluster profile variables", "tags": [ - "clusterprofiles" + "v1" ] }, "get": { @@ -57217,7 +57269,7 @@ ], "summary": "Retrieve a list of variables defined for the cluster profile", "tags": [ - "clusterprofiles" + "v1" ] }, "parameters": [ @@ -57261,7 +57313,7 @@ ], "summary": "Update specific variables defined for a cluster profile", "tags": [ - "clusterprofiles" + "v1" ] }, "put": { @@ -57296,7 +57348,7 @@ ], "summary": "Update the variables defined for a cluster profile", "tags": [ - "clusterprofiles" + "v1" ] } }, @@ -57357,7 +57409,7 @@ ], "summary": "Retrieves a list of application deployments filter summary Supported filter fields - [\"appDeploymentName\", \"clusterUid\", \"tags\"] Supported sort fields - [\"appDeploymentName\", \"creationTimestamp\", \"lastModifiedTimestamp\"]", "tags": [ - "dashboard" + "v1" ] } }, @@ -57418,7 +57470,7 @@ ], "summary": "Retrieves a list of application profiles filter summary Supported filter fields - [\"profileName\", \"tags\"] Supported sort fields - [\"profileName\", \"creationTimestamp\", \"lastModifiedTimestamp\"]", "tags": [ - "dashboard" + "v1" ] } }, @@ -57451,7 +57503,7 @@ ], "summary": "Retrieves a list of application profile metadata", "tags": [ - "dashboard" + "v1" ] } }, @@ -57491,7 +57543,7 @@ ], "summary": "Retrieves a list of edgehosts summary", "tags": [ - "dashboard" + "v1" ] } }, @@ -57529,7 +57581,7 @@ ], "summary": "Retrieves a list of cloud accounts metadata", "tags": [ - "dashboard" + "v1" ] } }, @@ -57596,7 +57648,7 @@ ], "summary": "Retrieves a list of cluster summary for a given cluster group", "tags": [ - "dashboard" + "v1" ] } }, @@ -57663,7 +57715,7 @@ ], "summary": "Retrieves a list of cluster summary for a given cluster group", "tags": [ - "dashboard" + "v1" ] } }, @@ -57724,7 +57776,7 @@ ], "summary": "Retrieves a list of cluster profiles filter summary Supported filter fields - [\"profileName\", \"tags\", \"profileType\", \"environment\"] Supported sort fields - [\"profileName\", \"environment\", \"profileType\", \"creationTimestamp\", \"lastModifiedTimestamp\"]", "tags": [ - "dashboard" + "v1" ] } }, @@ -57757,7 +57809,7 @@ ], "summary": "Retrieves a list of cluster profiles metadata", "tags": [ - "dashboard" + "v1" ] } }, @@ -57790,7 +57842,7 @@ ], "summary": "Retrieves a specified cluster profile summary", "tags": [ - "dashboard" + "v1" ] }, "parameters": [ @@ -57859,7 +57911,7 @@ ], "summary": "Retrieves a list of Edgehosts summary with provided search filter. Supported fields as per schema /v1/dashboard/edgehosts/search/schema", "tags": [ - "dashboard" + "v1" ] } }, @@ -57892,7 +57944,7 @@ ], "summary": "Retrieves a schema for the Edgehost search filter", "tags": [ - "dashboard" + "v1" ] } }, @@ -57953,7 +58005,7 @@ ], "summary": "Retrieves a list of PCG summary with provided search filter. Supported fields as per schema /v1/dashboard/pcgs/search/schema", "tags": [ - "dashboard" + "v1" ] } }, @@ -57986,7 +58038,7 @@ ], "summary": "Retrieves a schema for the PCG search filter", "tags": [ - "dashboard" + "v1" ] } }, @@ -58049,7 +58101,7 @@ ], "summary": "Retrieves a list of project summary", "tags": [ - "dashboard" + "v1" ] }, "post": { @@ -58107,7 +58159,7 @@ } ], "tags": [ - "dashboard" + "v1" ] } }, @@ -58146,7 +58198,7 @@ ], "summary": "Retrieves a list of projects metadata", "tags": [ - "dashboard" + "v1" ] } }, @@ -58208,7 +58260,7 @@ ], "summary": "Retrieves a list of cluster summary with provided filter spec Supported filter fields - [\"cpuUsage\", \"memoryUsage\", \"clusterName\", \"tags\", \"healthState\", \"clusterStates\", \"isDeleted\", \"environments\", \"metricPeriod\"] Supported sort fields - [\"environment\", \"clusterName\", \"memoryUsage\", \"healthState\", \"creationTimestamp\", \"lastModifiedTimestamp\"]", "tags": [ - "dashboard" + "v1" ] } }, @@ -58248,7 +58300,7 @@ ], "summary": "Retrieves spectro clusters cloud cost summary information", "tags": [ - "dashboard" + "v1" ] } }, @@ -58302,7 +58354,7 @@ ], "summary": "Retrieves a list of running, non rbac configured clusters in a workspace", "tags": [ - "dashboard" + "v1" ] } }, @@ -58344,7 +58396,7 @@ ], "summary": "Retrieves a list of cluster summary metadata", "tags": [ - "dashboard" + "v1" ] }, "post": { @@ -58382,7 +58434,7 @@ ], "summary": "Retrieves a list of cluster summary", "tags": [ - "dashboard" + "v1" ] } }, @@ -58422,7 +58474,7 @@ ], "summary": "Retrieves a list of cluster metadata with provided search filter spec Supported sort fields - [\"environment\", \"clusterName\", \"clusterState\", \"creationTimestamp\", \"lastModifiedTimestamp\"]", "tags": [ - "dashboard" + "v1" ] } }, @@ -58455,7 +58507,7 @@ ], "summary": "Retrieves a schema for the cluster metadata search filter", "tags": [ - "dashboard" + "v1" ] } }, @@ -58520,7 +58572,7 @@ ], "summary": "Retrieves a list of clusters with the desired repave state", "tags": [ - "dashboard" + "v1" ] } }, @@ -58560,7 +58612,7 @@ ], "summary": "Retrieves spectro clusters resource consumption", "tags": [ - "dashboard" + "v1" ] } }, @@ -58600,7 +58652,7 @@ ], "summary": "Retrieves spectro clusters resources cost summary information", "tags": [ - "dashboard" + "v1" ] } }, @@ -58640,7 +58692,7 @@ ], "summary": "Retrieves spectro clusters resources usage summary information", "tags": [ - "dashboard" + "v1" ] } }, @@ -58701,7 +58753,7 @@ ], "summary": "Retrieves a list of cluster summary with provided search filter spec Supported sort fields - [\"environment\", \"clusterName\", \"memoryUsage\", \"healthState\", \"creationTimestamp\", \"lastModifiedTimestamp\"]", "tags": [ - "dashboard" + "v1" ] } }, @@ -58759,7 +58811,7 @@ ], "summary": "Export and download the list of cluster summary with matching search filter and download as a file(csv)", "tags": [ - "dashboard" + "v1" ] }, "post": { @@ -58815,7 +58867,7 @@ ], "summary": "Export the list of cluster summary with matching search filter and download as a file(csv) Supported sort fields - [\"environment\", \"clusterName\", \"healthState\", \"creationTimestamp\", \"lastModifiedTimestamp\"]", "tags": [ - "dashboard" + "v1" ] } }, @@ -58848,7 +58900,7 @@ ], "summary": "Retrieves a supported input values for the cluster search filter", "tags": [ - "dashboard" + "v1" ] } }, @@ -58881,7 +58933,7 @@ ], "summary": "Retrieves a schema for the cluster search filter", "tags": [ - "dashboard" + "v1" ] } }, @@ -58914,7 +58966,7 @@ ], "summary": "Retrieves a list of Virtual machine enabled clusters", "tags": [ - "dashboard" + "v1" ] } }, @@ -58947,7 +58999,7 @@ ], "summary": "Returns the specified cluster summary", "tags": [ - "dashboard" + "v1" ] }, "parameters": [ @@ -59010,7 +59062,7 @@ ], "summary": "Retrieves the specified cluster cost summary", "tags": [ - "dashboard" + "v1" ] }, "parameters": [ @@ -59051,7 +59103,7 @@ ], "summary": "Returns the specified cluster summary overview", "tags": [ - "dashboard" + "v1" ] }, "parameters": [ @@ -59107,7 +59159,7 @@ ], "summary": "Retrieves specified spectro cluster resource consumption", "tags": [ - "dashboard" + "v1" ] } }, @@ -59155,7 +59207,7 @@ ], "summary": "Retrieves specified cluster workloads", "tags": [ - "dashboard" + "v1" ] } }, @@ -59203,7 +59255,7 @@ ], "summary": "Retrieves specified cluster workload clusterrolebindings", "tags": [ - "dashboard" + "v1" ] } }, @@ -59251,7 +59303,7 @@ ], "summary": "Retrieves specified cluster workload cronjobs", "tags": [ - "dashboard" + "v1" ] } }, @@ -59299,7 +59351,7 @@ ], "summary": "Retrieves specified cluster workload daemonsets", "tags": [ - "dashboard" + "v1" ] } }, @@ -59347,7 +59399,7 @@ ], "summary": "Retrieves specified cluster workload deployments", "tags": [ - "dashboard" + "v1" ] } }, @@ -59395,7 +59447,7 @@ ], "summary": "Retrieves specified cluster workload jobs", "tags": [ - "dashboard" + "v1" ] } }, @@ -59443,7 +59495,7 @@ ], "summary": "Retrieves specified cluster workload namespaces", "tags": [ - "dashboard" + "v1" ] } }, @@ -59491,7 +59543,7 @@ ], "summary": "Retrieves specified cluster workload pods", "tags": [ - "dashboard" + "v1" ] } }, @@ -59539,7 +59591,7 @@ ], "summary": "Retrieves specified cluster workload rolebindings", "tags": [ - "dashboard" + "v1" ] } }, @@ -59587,7 +59639,7 @@ ], "summary": "Retrieves specified cluster workload statefulsets", "tags": [ - "dashboard" + "v1" ] } }, @@ -59620,7 +59672,7 @@ ], "summary": "Retrieves a list of workspace", "tags": [ - "dashboard" + "v1" ] } }, @@ -59668,7 +59720,7 @@ ], "summary": "Retrieves specified workspace clusters workload clusterrolebindings", "tags": [ - "dashboard" + "v1" ] } }, @@ -59716,7 +59768,7 @@ ], "summary": "Retrieves specified workspace clusters workload cronjobs", "tags": [ - "dashboard" + "v1" ] } }, @@ -59764,7 +59816,7 @@ ], "summary": "Retrieves specified workspace clusters workload daemonsets", "tags": [ - "dashboard" + "v1" ] } }, @@ -59812,7 +59864,7 @@ ], "summary": "Retrieves specified workspace clusters workload deployments", "tags": [ - "dashboard" + "v1" ] } }, @@ -59860,7 +59912,7 @@ ], "summary": "Retrieves specified workspace clusters workload jobs", "tags": [ - "dashboard" + "v1" ] } }, @@ -59908,7 +59960,7 @@ ], "summary": "Retrieves specified workspace clusters workload namespaces", "tags": [ - "dashboard" + "v1" ] } }, @@ -59956,7 +60008,7 @@ ], "summary": "Retrieves specified workspace clusters workload pods", "tags": [ - "dashboard" + "v1" ] } }, @@ -60004,7 +60056,7 @@ ], "summary": "Retrieves specified workspace clusters workload rolebindings", "tags": [ - "dashboard" + "v1" ] } }, @@ -60052,7 +60104,7 @@ ], "summary": "Retrieves specified workspace clusters workload statefulsets", "tags": [ - "dashboard" + "v1" ] } }, @@ -60098,7 +60150,7 @@ ], "summary": "sync data to cloud watch", "tags": [ - "datasinks" + "v1" ] } }, @@ -60142,7 +60194,7 @@ ], "summary": "Retrieve the Complete Edgehost Metadata List", "tags": [ - "edgehosts" + "v1" ] }, "post": { @@ -60186,7 +60238,7 @@ ], "summary": "Create the edge host device", "tags": [ - "edgehosts" + "v1" ] } }, @@ -60237,7 +60289,7 @@ ], "summary": "Retrieves a list of edge hosts metadata matching the filter condition", "tags": [ - "edgehosts" + "v1" ] } }, @@ -60277,7 +60329,7 @@ ], "summary": "Registers the edge host device", "tags": [ - "edgehosts" + "v1" ] } }, @@ -60310,7 +60362,7 @@ ], "summary": "Retrieves a list of edge hosts tags", "tags": [ - "edgehosts" + "v1" ] } }, @@ -60343,7 +60395,7 @@ ], "summary": "Retrieves a list of edge tokens", "tags": [ - "edgehosts" + "v1" ] }, "post": { @@ -60387,7 +60439,7 @@ ], "summary": "Create the edge token", "tags": [ - "edgehosts" + "v1" ] } }, @@ -60417,7 +60469,7 @@ ], "summary": "Deletes the specified edge token", "tags": [ - "edgehosts" + "v1" ] }, "get": { @@ -60448,7 +60500,7 @@ ], "summary": "Returns the specified edge token", "tags": [ - "edgehosts" + "v1" ] }, "parameters": [ @@ -60492,7 +60544,7 @@ ], "summary": "Updates the specified edge token", "tags": [ - "edgehosts" + "v1" ] } }, @@ -60538,7 +60590,7 @@ ], "summary": "Revoke or re-activate the edge token access", "tags": [ - "edgehosts" + "v1" ] } }, @@ -60568,7 +60620,7 @@ ], "summary": "Deletes the specified edge host device", "tags": [ - "edgehosts" + "v1" ] }, "get": { @@ -60606,7 +60658,7 @@ ], "summary": "Returns the specified edge host device", "tags": [ - "edgehosts" + "v1" ] }, "parameters": [ @@ -60649,7 +60701,7 @@ ], "summary": "Updates the specified edge host device", "tags": [ - "edgehosts" + "v1" ] } }, @@ -60679,7 +60731,7 @@ ], "summary": "Deassociate the clusters to the edge host", "tags": [ - "edgehosts" + "v1" ] }, "parameters": [ @@ -60722,7 +60774,7 @@ ], "summary": "Associate the clusters to the edge host", "tags": [ - "edgehosts" + "v1" ] } }, @@ -60767,7 +60819,7 @@ ], "summary": "Updates the edge host health", "tags": [ - "edgehosts" + "v1" ] } }, @@ -60812,7 +60864,7 @@ ], "summary": "Update the specified edge host device host check sum", "tags": [ - "edgehosts" + "v1" ] } }, @@ -60857,7 +60909,7 @@ ], "summary": "Update the specified edge host device host pairing key", "tags": [ - "edgehosts" + "v1" ] } }, @@ -60902,7 +60954,7 @@ ], "summary": "Updates the specified edge host device meta", "tags": [ - "edgehosts" + "v1" ] } }, @@ -60956,7 +61008,7 @@ ], "summary": "Returns the specified edge host's manifest", "tags": [ - "edgehosts" + "v1" ] } }, @@ -61001,7 +61053,7 @@ ], "summary": "Patch update specified edge host's packs status", "tags": [ - "edgehosts" + "v1" ] } }, @@ -61040,7 +61092,7 @@ ], "summary": "Returns the associated profiles of a specified edge host device", "tags": [ - "edgehosts" + "v1" ] }, "parameters": [ @@ -61083,7 +61135,7 @@ ], "summary": "Associate cluster profiles to the specified edge host device", "tags": [ - "edgehosts" + "v1" ] } }, @@ -61128,7 +61180,7 @@ ], "summary": "Reset the cluster through edge host", "tags": [ - "edgehosts" + "v1" ] } }, @@ -61170,7 +61222,7 @@ ], "summary": "Download the specified edge host device spc", "tags": [ - "edgehosts" + "v1" ] }, "parameters": [ @@ -61223,7 +61275,7 @@ ], "summary": "Updates the specified edge host device vsphere properties", "tags": [ - "edgehosts" + "v1" ] } }, @@ -61296,7 +61348,7 @@ ], "summary": "Returns a paginated list of component events based on request parameters", "tags": [ - "events" + "v1" ] }, "post": { @@ -61341,7 +61393,7 @@ ], "summary": "Creates a component event", "tags": [ - "events" + "v1" ] } }, @@ -61382,7 +61434,7 @@ ], "summary": "Creates the component events in bulk", "tags": [ - "events" + "v1" ] } }, @@ -61412,7 +61464,7 @@ ], "summary": "Delete all the components events for the specified related object", "tags": [ - "events" + "v1" ] }, "get": { @@ -61483,7 +61535,7 @@ ], "summary": "Returns a list of components events for the specified related object", "tags": [ - "events" + "v1" ] }, "parameters": [ @@ -61536,7 +61588,7 @@ ], "summary": "Retrieves the list of features", "tags": [ - "features" + "v1" ] } }, @@ -61582,7 +61634,7 @@ ], "summary": "Update a feature", "tags": [ - "features" + "v1" ] } }, @@ -61636,7 +61688,7 @@ ], "summary": "Returns a list of Filters", "tags": [ - "filters" + "v1" ] } }, @@ -61675,7 +61727,7 @@ ], "summary": "Returns a list of Filters metadata", "tags": [ - "filters" + "v1" ] } }, @@ -61721,7 +61773,7 @@ ], "summary": "Creates a Tag filter", "tags": [ - "filters" + "v1" ] } }, @@ -61751,7 +61803,7 @@ ], "summary": "Delete the specified Filter object", "tags": [ - "filters" + "v1" ] }, "get": { @@ -61782,7 +61834,7 @@ ], "summary": "Returns the specified Filter object", "tags": [ - "filters" + "v1" ] }, "parameters": [ @@ -61825,7 +61877,7 @@ ], "summary": "Updates a Tag filter", "tags": [ - "filters" + "v1" ] } }, @@ -61925,7 +61977,7 @@ ], "summary": "Retrieves the list of metrics for a specified resource kind", "tags": [ - "metrics" + "v1" ] } }, @@ -61974,7 +62026,7 @@ ], "summary": "Deletes the metrics of the specified resource", "tags": [ - "metrics" + "v1" ] }, "get": { @@ -62074,7 +62126,7 @@ ], "summary": "Returns the metrics for a specified resource uid", "tags": [ - "metrics" + "v1" ] } }, @@ -62141,7 +62193,7 @@ ], "summary": "Returns a paginated list of notifications based on request parameters", "tags": [ - "notifications" + "v1" ] } }, @@ -62182,7 +62234,7 @@ ], "summary": "Creates a notification event", "tags": [ - "notifications" + "v1" ] } }, @@ -62249,7 +62301,7 @@ ], "summary": "Returns a list of notifications for the specified related object", "tags": [ - "notifications" + "v1" ] }, "parameters": [ @@ -62308,7 +62360,7 @@ ], "summary": "Updates the specified notification for the acknowledgment", "tags": [ - "notifications" + "v1" ] } }, @@ -62340,7 +62392,7 @@ ], "summary": "Updates the specified notification action as done", "tags": [ - "notifications" + "v1" ] } }, @@ -62378,7 +62430,7 @@ ], "summary": "Retrieves a list of overlords owned by the tenant", "tags": [ - "overlords" + "v1" ] } }, @@ -62411,7 +62463,7 @@ ], "summary": "Returns the manifests required for the private gateway installation", "tags": [ - "overlords" + "v1" ] }, "parameters": [ @@ -62473,7 +62525,7 @@ ], "summary": "create the maas cloudaccount for the private gateway", "tags": [ - "overlords" + "v1" ] }, "put": { @@ -62508,7 +62560,7 @@ ], "summary": "update the maas cloudaccount for the private gateway", "tags": [ - "overlords" + "v1" ] } }, @@ -62563,7 +62615,7 @@ ], "summary": "validate the maas cloudaccount for the private gateway", "tags": [ - "overlords" + "v1" ] } }, @@ -62617,7 +62669,7 @@ ], "summary": "create the maas cloud config for the private gateway", "tags": [ - "overlords" + "v1" ] }, "put": { @@ -62652,7 +62704,7 @@ ], "summary": "update the maas cloud config for the private gateway", "tags": [ - "overlords" + "v1" ] } }, @@ -62685,7 +62737,7 @@ ], "summary": "Returns the specified maas private gateway cluster profile", "tags": [ - "overlords" + "v1" ] }, "parameters": [ @@ -62730,7 +62782,7 @@ ], "summary": "migrate all the clusters from source overlord to target overlord", "tags": [ - "overlords" + "v1" ] } }, @@ -62763,7 +62815,7 @@ ], "summary": "Returns the manifests required for the private gateway installation", "tags": [ - "overlords" + "v1" ] }, "parameters": [ @@ -62825,7 +62877,7 @@ ], "summary": "create the OpenStack cloudaccount for the private gateway", "tags": [ - "overlords" + "v1" ] }, "put": { @@ -62860,7 +62912,7 @@ ], "summary": "update the OpenStack cloudaccount for the private gateway", "tags": [ - "overlords" + "v1" ] } }, @@ -62915,7 +62967,7 @@ ], "summary": "validate the OpenStack cloudaccount for the private gateway", "tags": [ - "overlords" + "v1" ] } }, @@ -62969,7 +63021,7 @@ ], "summary": "create the OpenStack cloud config for the private gateway", "tags": [ - "overlords" + "v1" ] }, "put": { @@ -63004,7 +63056,7 @@ ], "summary": "update the OpenStack cloud config for the private gateway", "tags": [ - "overlords" + "v1" ] } }, @@ -63037,7 +63089,7 @@ ], "summary": "Returns the specified OpenStack private gateway cluster profile", "tags": [ - "overlords" + "v1" ] }, "parameters": [ @@ -63088,7 +63140,7 @@ ], "summary": "Returns the pairing code for the private gateway", "tags": [ - "overlords" + "v1" ] } }, @@ -63121,7 +63173,7 @@ ], "summary": "Returns the manifests required for the private gateway installation", "tags": [ - "overlords" + "v1" ] }, "parameters": [ @@ -63162,7 +63214,7 @@ ], "summary": "Returns overlord's ova information", "tags": [ - "overlords" + "v1" ] } }, @@ -63216,7 +63268,7 @@ ], "summary": "create the vSphere cloudaccount for the private gateway", "tags": [ - "overlords" + "v1" ] }, "put": { @@ -63251,7 +63303,7 @@ ], "summary": "update the vSphere cloudaccount for the private gateway", "tags": [ - "overlords" + "v1" ] } }, @@ -63306,7 +63358,7 @@ ], "summary": "validate the vSphere cloudaccount for the private gateway", "tags": [ - "overlords" + "v1" ] } }, @@ -63360,7 +63412,7 @@ ], "summary": "create the vSphere cloud config for the private gateway", "tags": [ - "overlords" + "v1" ] }, "put": { @@ -63395,7 +63447,7 @@ ], "summary": "update the vSphere cloud config for the private gateway", "tags": [ - "overlords" + "v1" ] } }, @@ -63428,7 +63480,7 @@ ], "summary": "Returns the specified vsphere private gateway cluster profile", "tags": [ - "overlords" + "v1" ] }, "parameters": [ @@ -63469,7 +63521,7 @@ ], "summary": "Retrieves a list of IP Pools for the specified private gateway", "tags": [ - "overlords" + "v1" ] }, "parameters": [ @@ -63521,7 +63573,7 @@ ], "summary": "Creates an IP pool defintion for the sepcified private gateway", "tags": [ - "overlords" + "v1" ] } }, @@ -63551,7 +63603,7 @@ ], "summary": "Deletes the private gateways's specified IP Pool data", "tags": [ - "overlords" + "v1" ] }, "parameters": [ @@ -63600,7 +63652,7 @@ ], "summary": "Updates the private gateways's specified IP Pool data", "tags": [ - "overlords" + "v1" ] } }, @@ -63633,7 +63685,7 @@ ], "summary": "Retrieves the vSphere computecluster resources for the specified private gateway's account", "tags": [ - "overlords" + "v1" ] }, "parameters": [ @@ -63684,9 +63736,9 @@ "Authorization": [] } ], - "summary": "Retrieves the vSphere datacenters & datacluster for the specified private gateway's account", + "summary": "Retrieves the vSphere datacenters \u0026 datacluster for the specified private gateway's account", "tags": [ - "overlords" + "v1" ] }, "parameters": [ @@ -63727,7 +63779,7 @@ ], "summary": "delete the private gateway", "tags": [ - "overlords" + "v1" ] }, "get": { @@ -63758,7 +63810,7 @@ ], "summary": "Returns the specified private gateway's for the given uid", "tags": [ - "overlords" + "v1" ] }, "parameters": [ @@ -63811,7 +63863,7 @@ ], "summary": "update the private gateway's metadata", "tags": [ - "overlords" + "v1" ] } }, @@ -63852,7 +63904,7 @@ ], "summary": "reset the private gateway by disaaociating the private gateway's resources", "tags": [ - "overlords" + "v1" ] } }, @@ -63891,7 +63943,7 @@ ], "summary": "Deletes the packs", "tags": [ - "packs" + "v1" ] }, "get": { @@ -63961,7 +64013,7 @@ ], "summary": "Retrieves a list of packs", "tags": [ - "packs" + "v1" ] } }, @@ -64022,7 +64074,7 @@ ], "summary": "Retrieves a list of packs based on filter", "tags": [ - "packs" + "v1" ] } }, @@ -64055,7 +64107,7 @@ ], "summary": "Retrieves a list of packs", "tags": [ - "packs" + "v1" ] }, "parameters": [ @@ -64138,7 +64190,7 @@ ], "summary": "Returns the logo for a specified pack", "tags": [ - "packs" + "v1" ] }, "parameters": [ @@ -64180,7 +64232,7 @@ ], "summary": "Returns the specified pack", "tags": [ - "packs" + "v1" ] }, "parameters": [ @@ -64222,7 +64274,7 @@ ], "summary": "Returns the readme of a specified pack", "tags": [ - "packs" + "v1" ] }, "parameters": [ @@ -64271,7 +64323,7 @@ ], "summary": "Returns the private gateway manifest link", "tags": [ - "pcg" + "v1" ] } }, @@ -64320,7 +64372,7 @@ ], "summary": "Registers the pcg", "tags": [ - "pcg" + "v1" ] } }, @@ -64362,7 +64414,7 @@ ], "summary": "Returns the pcg ally manifest", "tags": [ - "pcg" + "v1" ] }, "parameters": [ @@ -64412,7 +64464,7 @@ ], "summary": "Returns the pcg jet manifest", "tags": [ - "pcg" + "v1" ] }, "parameters": [ @@ -64464,7 +64516,7 @@ ], "summary": "Retrieves a list of permissions", "tags": [ - "permissions" + "v1" ] } }, @@ -64537,7 +64589,7 @@ ], "summary": "Retrieves a list of projects", "tags": [ - "projects" + "v1" ] }, "post": { @@ -64581,7 +64633,7 @@ ], "summary": "Creates a project", "tags": [ - "projects" + "v1" ] } }, @@ -64606,7 +64658,7 @@ ], "summary": "Retrieves a list of supported alerts for a project", "tags": [ - "projects" + "v1" ] } }, @@ -64642,7 +64694,7 @@ ], "summary": "Deletes the specified project", "tags": [ - "projects" + "v1" ] }, "get": { @@ -64665,7 +64717,7 @@ ], "summary": "Returns the specified project", "tags": [ - "projects" + "v1" ] }, "parameters": [ @@ -64702,7 +64754,7 @@ ], "summary": "Updates the specified project", "tags": [ - "projects" + "v1" ] } }, @@ -64724,7 +64776,7 @@ ], "summary": "Deletes the specified alert to the specified project", "tags": [ - "projects" + "v1" ] }, "parameters": [ @@ -64776,7 +64828,7 @@ ], "summary": "Create the specified alert to the specified project", "tags": [ - "projects" + "v1" ] }, "put": { @@ -64805,7 +64857,7 @@ ], "summary": "Upsert the specified alert to the specified project", "tags": [ - "projects" + "v1" ] } }, @@ -64827,7 +64879,7 @@ ], "summary": "Deletes the specified alert of the specified project", "tags": [ - "projects" + "v1" ] }, "get": { @@ -64850,7 +64902,7 @@ ], "summary": "Get the specified alert of the specified project", "tags": [ - "projects" + "v1" ] }, "parameters": [ @@ -64899,7 +64951,7 @@ ], "summary": "Update the specified alert of the specified project", "tags": [ - "projects" + "v1" ] } }, @@ -64930,7 +64982,7 @@ ], "summary": "Delete the macros for the specified project by macro name", "tags": [ - "projects" + "v1" ] }, "get": { @@ -64953,7 +65005,7 @@ ], "summary": "List the macros of the specified project", "tags": [ - "projects" + "v1" ] }, "parameters": [ @@ -64990,7 +65042,7 @@ ], "summary": "Update the macros for the specified project by macro name", "tags": [ - "projects" + "v1" ] }, "post": { @@ -65019,7 +65071,7 @@ ], "summary": "Create or add new macros for the specified project", "tags": [ - "projects" + "v1" ] }, "put": { @@ -65048,7 +65100,7 @@ ], "summary": "Update the macros of the specified project", "tags": [ - "projects" + "v1" ] } }, @@ -65087,7 +65139,7 @@ ], "summary": "Update the metadata of the specified project", "tags": [ - "projects" + "v1" ] } }, @@ -65112,7 +65164,7 @@ ], "summary": "Get project cluster settings", "tags": [ - "projects" + "v1" ] }, "parameters": [ @@ -65165,7 +65217,7 @@ ], "summary": "Update project clusters nodes auto remediation setting", "tags": [ - "projects" + "v1" ] } }, @@ -65204,7 +65256,7 @@ ], "summary": "Update the teams association to the specified project", "tags": [ - "projects" + "v1" ] } }, @@ -65243,7 +65295,7 @@ ], "summary": "Update the users association to the specified project", "tags": [ - "projects" + "v1" ] } }, @@ -65268,7 +65320,7 @@ ], "summary": "Validate and returns active resource of project before delete", "tags": [ - "projects" + "v1" ] }, "parameters": [ @@ -65348,7 +65400,7 @@ ], "summary": "Retrieves a list of Helm registries", "tags": [ - "registries" + "v1" ] }, "parameters": [ @@ -65405,7 +65457,7 @@ ], "summary": "Creates a helm registry", "tags": [ - "registries" + "v1" ] } }, @@ -65477,7 +65529,7 @@ ], "summary": "Retrieves a list of helm registries as summary", "tags": [ - "registries" + "v1" ] }, "parameters": [ @@ -65535,7 +65587,7 @@ ], "summary": "Check if helm registry is valid", "tags": [ - "registries" + "v1" ] } }, @@ -65565,7 +65617,7 @@ ], "summary": "Deletes the specified helm registry", "tags": [ - "registries" + "v1" ] }, "get": { @@ -65596,7 +65648,7 @@ ], "summary": "Returns the specified Helm registry", "tags": [ - "registries" + "v1" ] }, "parameters": [ @@ -65639,7 +65691,7 @@ ], "summary": "Updates the specified helm registry", "tags": [ - "registries" + "v1" ] } }, @@ -65690,7 +65742,7 @@ ], "summary": "Sync Helm registry", "tags": [ - "registries" + "v1" ] } }, @@ -65724,7 +65776,7 @@ ], "summary": "Get helm registry sync status", "tags": [ - "registries" + "v1" ] }, "parameters": [ @@ -65765,7 +65817,7 @@ ], "summary": "Retrieves a list of registries metadata", "tags": [ - "registries" + "v1" ] }, "parameters": [ @@ -65830,7 +65882,7 @@ ], "summary": "Creates a basic oci registry", "tags": [ - "registries" + "v1" ] } }, @@ -65875,7 +65927,7 @@ ], "summary": "Check if oci registry is valid", "tags": [ - "registries" + "v1" ] } }, @@ -65927,7 +65979,7 @@ ], "summary": "Creates a ecr registry", "tags": [ - "registries" + "v1" ] } }, @@ -65972,7 +66024,7 @@ ], "summary": "Check if ecr registry is valid", "tags": [ - "registries" + "v1" ] } }, @@ -66005,7 +66057,7 @@ ], "summary": "Creates a image registry", "tags": [ - "registries" + "v1" ] } }, @@ -66038,7 +66090,7 @@ ], "summary": "Retrieves a oci registries summary", "tags": [ - "registries" + "v1" ] } }, @@ -66071,7 +66123,7 @@ ], "summary": "Returns the information of specified oci registry", "tags": [ - "registries" + "v1" ] }, "parameters": [ @@ -66114,7 +66166,7 @@ ], "summary": "Deletes the specified basic oci registry", "tags": [ - "registries" + "v1" ] }, "get": { @@ -66145,7 +66197,7 @@ ], "summary": "Returns the basic oci registry", "tags": [ - "registries" + "v1" ] }, "parameters": [ @@ -66188,7 +66240,7 @@ ], "summary": "Updates the specified basic oci registry", "tags": [ - "registries" + "v1" ] } }, @@ -66239,7 +66291,7 @@ ], "summary": "Sync oci registry", "tags": [ - "registries" + "v1" ] } }, @@ -66273,7 +66325,7 @@ ], "summary": "Get oci registry sync status", "tags": [ - "registries" + "v1" ] }, "parameters": [ @@ -66311,7 +66363,7 @@ ], "summary": "Deletes the specified ecr registry", "tags": [ - "registries" + "v1" ] }, "get": { @@ -66342,7 +66394,7 @@ ], "summary": "Returns the specified ecr registry", "tags": [ - "registries" + "v1" ] }, "parameters": [ @@ -66385,7 +66437,7 @@ ], "summary": "Updates the specified ecr registry", "tags": [ - "registries" + "v1" ] } }, @@ -66436,7 +66488,7 @@ ], "summary": "Sync ecr registry", "tags": [ - "registries" + "v1" ] } }, @@ -66470,7 +66522,7 @@ ], "summary": "Get ecr registry sync status", "tags": [ - "registries" + "v1" ] }, "parameters": [ @@ -66550,7 +66602,7 @@ ], "summary": "Retrieves a list of Pack registries", "tags": [ - "registries" + "v1" ] }, "parameters": [ @@ -66613,7 +66665,7 @@ ], "summary": "Creates a pack registry", "tags": [ - "registries" + "v1" ] } }, @@ -66685,7 +66737,7 @@ ], "summary": "Retrieves a list of pack registries as summary", "tags": [ - "registries" + "v1" ] }, "parameters": [ @@ -66743,7 +66795,7 @@ ], "summary": "Check if pack registry is valid", "tags": [ - "registries" + "v1" ] } }, @@ -66773,7 +66825,7 @@ ], "summary": "Deletes the specified pack registry", "tags": [ - "registries" + "v1" ] }, "get": { @@ -66804,7 +66856,7 @@ ], "summary": "Returns the specified Pack registry", "tags": [ - "registries" + "v1" ] }, "parameters": [ @@ -66847,7 +66899,7 @@ ], "summary": "Updates the specified pack registry", "tags": [ - "registries" + "v1" ] } }, @@ -66898,7 +66950,7 @@ ], "summary": "Sync Pack registry", "tags": [ - "registries" + "v1" ] } }, @@ -66932,7 +66984,7 @@ ], "summary": "Get pack registry sync status", "tags": [ - "registries" + "v1" ] }, "parameters": [ @@ -66973,7 +67025,7 @@ ], "summary": "Returns the specified system scope registry configuration", "tags": [ - "registries" + "v1" ] }, "parameters": [ @@ -67011,7 +67063,7 @@ ], "summary": "Deletes the specified registry", "tags": [ - "registries" + "v1" ] }, "parameters": [ @@ -67091,7 +67143,7 @@ ], "summary": "Retrieves a list of roles", "tags": [ - "roles" + "v1" ] }, "post": { @@ -67135,7 +67187,7 @@ ], "summary": "Creates a role with specified permissions", "tags": [ - "roles" + "v1" ] } }, @@ -67157,7 +67209,7 @@ ], "summary": "Deletes the specified role", "tags": [ - "roles" + "v1" ] }, "get": { @@ -67180,7 +67232,7 @@ ], "summary": "Returns the specified role", "tags": [ - "roles" + "v1" ] }, "parameters": [ @@ -67217,7 +67269,7 @@ ], "summary": "Updates the specified role", "tags": [ - "roles" + "v1" ] } }, @@ -67265,7 +67317,7 @@ ], "summary": "Clone the role", "tags": [ - "roles" + "v1" ] } }, @@ -67333,7 +67385,7 @@ ], "summary": "Returns a latest version for a given service name", "tags": [ - "services" + "v1" ] } }, @@ -67426,7 +67478,7 @@ ], "summary": "Returns a service manifest for a given service name and version", "tags": [ - "services" + "v1" ] } }, @@ -67472,7 +67524,7 @@ ], "summary": "Creates an AKS cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -67523,7 +67575,7 @@ ], "summary": "Get AKS cluster estimated rate information", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -67563,7 +67615,7 @@ ], "summary": "Validates AKS cluster create operation", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -67609,7 +67661,7 @@ ], "summary": "Creates an AWS cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -67655,7 +67707,7 @@ ], "summary": "Imports an AWS cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -67706,7 +67758,7 @@ ], "summary": "Get AWS cluster estimated rate information", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -67746,7 +67798,7 @@ ], "summary": "Validates AWS cluster create operation", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -67792,7 +67844,7 @@ ], "summary": "Creates an Azure cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -67838,7 +67890,7 @@ ], "summary": "Imports an Azure cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -67889,7 +67941,7 @@ ], "summary": "Get Azure cluster estimated rate information", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -67929,7 +67981,7 @@ ], "summary": "Validates Azure cluster create operation", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -67984,7 +68036,7 @@ ], "summary": "Creates a Custom cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -68033,7 +68085,7 @@ ], "summary": "Validates Custom cluster create operation", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -68112,7 +68164,7 @@ ], "summary": "Creates an EdgeNative cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -68158,7 +68210,7 @@ ], "summary": "Imports an EdgeNative cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -68209,7 +68261,7 @@ ], "summary": "Get edge-native cluster estimated rate information", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -68249,7 +68301,7 @@ ], "summary": "Validates edge-native cluster create operation", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -68295,7 +68347,7 @@ ], "summary": "Creates an EKS cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -68346,7 +68398,7 @@ ], "summary": "Get EKS cluster estimated rate information", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -68386,7 +68438,7 @@ ], "summary": "Validates EKS cluster create operation", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -68419,7 +68471,7 @@ ], "summary": "Returns the cluster object references based on locationUid", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -68462,7 +68514,7 @@ ], "summary": "Change cluster backup location", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -68511,7 +68563,7 @@ ], "summary": "Download log fetcher logs for cluster by log fetcher uid", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -68580,7 +68632,7 @@ ], "summary": "Update log fetcher logs by log fetcher uid", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -68626,7 +68678,7 @@ ], "summary": "Creates a GCP cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -68672,7 +68724,7 @@ ], "summary": "Imports a GCP cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -68723,7 +68775,7 @@ ], "summary": "Get GCP cluster estimated rate information", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -68763,7 +68815,7 @@ ], "summary": "Validates GCP cluster create operation", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -68810,7 +68862,7 @@ ], "summary": "Imports a cluster of any cloud type in generic way", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -68861,7 +68913,7 @@ ], "summary": "Get generic cluster estimated rate information", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -68907,7 +68959,7 @@ ], "summary": "Creates an GKE cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -68958,7 +69010,7 @@ ], "summary": "Get GKE cluster estimated rate information", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -68998,7 +69050,7 @@ ], "summary": "Validates GKE cluster create operation", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -69044,7 +69096,7 @@ ], "summary": "Creates a MAAS cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -69090,7 +69142,7 @@ ], "summary": "Imports a Maas cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -69141,7 +69193,7 @@ ], "summary": "Get maas cluster estimated rate information", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -69181,7 +69233,7 @@ ], "summary": "Validates MAAS cluster create operation", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -69227,7 +69279,7 @@ ], "summary": "Creates a OpenStack cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -69273,7 +69325,7 @@ ], "summary": "Imports an OpenStack cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -69324,7 +69376,7 @@ ], "summary": "Get openstack cluster estimated rate information", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -69364,7 +69416,7 @@ ], "summary": "Validates OpenStack cluster create operation", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -69413,7 +69465,7 @@ ], "summary": "Downloads the cluster definition archive file", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -69459,7 +69511,7 @@ ], "summary": "Creates a Tke cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -69510,7 +69562,7 @@ ], "summary": "Get TKE cluster estimated rate information", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -69550,7 +69602,7 @@ ], "summary": "Validates TKE cluster create operation", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -69583,7 +69635,48 @@ ], "summary": "Get cluster settings by context", "tags": [ - "spectroclusters" + "v1" + ] + }, + "post": { + "operationId": "v1SpectroClustersUpgradeSettings", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterUpgradeSettingsEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update all clusters upgrade settings", + "tags": [ + "v1" ] } }, @@ -69625,7 +69718,7 @@ ], "summary": "Validates the cluster name", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -69665,7 +69758,7 @@ ], "summary": "Validates spectro cluster packs", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -69711,7 +69804,7 @@ ], "summary": "Creates a virtual cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -69755,7 +69848,7 @@ ], "summary": "Get the cluster pack values yaml", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -69795,7 +69888,7 @@ ], "summary": "Validates virtual cluster create operation", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -69841,7 +69934,7 @@ ], "summary": "Creates a vSphere cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -69887,7 +69980,7 @@ ], "summary": "Imports a vSphere cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -69938,7 +70031,7 @@ ], "summary": "Get vSphere cluster estimated rate information", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -69978,7 +70071,7 @@ ], "summary": "Validates vSphere cluster create operation", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -70014,7 +70107,7 @@ ], "summary": "Deletes the specified cluster", "tags": [ - "spectroclusters" + "v1" ] }, "get": { @@ -70077,7 +70170,7 @@ ], "summary": "Returns the specified cluster", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -70119,7 +70212,7 @@ ], "summary": "Get the cluster asset doc", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -70168,7 +70261,7 @@ ], "summary": "Associate the assets for the cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -70210,7 +70303,7 @@ ], "summary": "Returns the specified cluster's kube config file", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -70249,7 +70342,7 @@ ], "summary": "Deletes the cluster's frp kube config client data", "tags": [ - "spectroclusters" + "v1" ] }, "get": { @@ -70289,7 +70382,7 @@ ], "summary": "Returns the specified cluster's frp kube config file", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -70333,7 +70426,7 @@ ], "summary": "Updates the cluster's frp kube config data", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -70382,7 +70475,7 @@ ], "summary": "Returns the specified cluster's kube config file", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -70426,7 +70519,7 @@ ], "summary": "Updates the cluster's manifest data", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -70456,7 +70549,7 @@ ], "summary": "Deletes the cluster's kube config client data", "tags": [ - "spectroclusters" + "v1" ] }, "get": { @@ -70496,7 +70589,7 @@ ], "summary": "Returns the specified cluster's kube config client file", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -70540,7 +70633,7 @@ ], "summary": "Updates the cluster's kube config client data", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -70573,7 +70666,7 @@ ], "summary": "Returns the specified cluster's manifest data", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -70617,7 +70710,7 @@ ], "summary": "Updates the specified cluster's manifest data", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -70663,7 +70756,7 @@ ], "summary": "Updates the specified cluster meta attribute", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -70709,7 +70802,7 @@ ], "summary": "Updates the specified cluster controlPlane health check timeout", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -70755,7 +70848,7 @@ ], "summary": "Updates the specified cluster host config", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -70801,7 +70894,7 @@ ], "summary": "Updates the specified cluster Life cycle configuration", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -70847,7 +70940,7 @@ ], "summary": "Updates the specified cluster OS patch configuration", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -70880,7 +70973,7 @@ ], "summary": "Retrieves namespaces for the specified cluster", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -70924,7 +71017,7 @@ ], "summary": "Updates namespaces for the specified cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -70957,7 +71050,7 @@ ], "summary": "Retrieves the specified namespace of the cluster", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -71008,7 +71101,7 @@ ], "summary": "Updates the specified namespace of the cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -71041,7 +71134,7 @@ ], "summary": "Retrieves RBAC information for the specified cluster", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -71085,7 +71178,7 @@ ], "summary": "Updates RBAC information for the specified cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -71118,7 +71211,7 @@ ], "summary": "Retrieves the specified RBAC of the cluster", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -71169,7 +71262,7 @@ ], "summary": "Updates the specified RBAC of the cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -71211,7 +71304,7 @@ ], "summary": "Download the specified cluster", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -71253,7 +71346,7 @@ ], "summary": "Retrieves a list of edge host of edge-native cluster", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -71292,7 +71385,7 @@ ], "summary": "Reset cluster backup schedule settings", "tags": [ - "spectroclusters" + "v1" ] }, "get": { @@ -71328,7 +71421,7 @@ ], "summary": "Returns the cluster backup result", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -71380,7 +71473,7 @@ ], "summary": "Create cluster backup settings", "tags": [ - "spectroclusters" + "v1" ] }, "put": { @@ -71415,7 +71508,7 @@ ], "summary": "Update cluster backup settings", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -71469,7 +71562,7 @@ ], "summary": "Create on demand cluster backup", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -71499,7 +71592,7 @@ ], "summary": "Delete cluster backup", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -71552,7 +71645,7 @@ ], "summary": "Returns the compliance scan of cluster, if driverType is provided then specific status of driverType will be returned", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -71604,7 +71697,7 @@ ], "summary": "Create cluster compliance scan", "tags": [ - "spectroclusters" + "v1" ] }, "put": { @@ -71639,7 +71732,7 @@ ], "summary": "Update cluster compliance scan settings", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -71672,7 +71765,7 @@ ], "summary": "Returns the compliance scan log by cluster uid and driver type", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -71725,7 +71818,7 @@ ], "summary": "Update the KubeBench compliance scan log by uid", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -71770,7 +71863,7 @@ ], "summary": "Update the KubeHunter compliance scan log by uid", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -71815,7 +71908,7 @@ ], "summary": "Update the Sonobuoy compliance scan log by uid", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -71860,7 +71953,7 @@ ], "summary": "Update the Syft compliance scan log by uid", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -71890,7 +71983,7 @@ ], "summary": "Delete the compliance scan log by uid", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -71937,7 +72030,7 @@ ], "summary": "Returns the KubeBench compliance scan log by uid", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -71989,7 +72082,7 @@ ], "summary": "Returns the KubeHunter compliance scan log by uid", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -72041,7 +72134,7 @@ ], "summary": "Returns the Sonobuoy compliance scan log by uid", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -72093,7 +72186,7 @@ ], "summary": "Returns the Syft compliance scan log by uid", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -72149,7 +72242,7 @@ ], "summary": "Returns the image sbom of syft scan log of cluster", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -72213,7 +72306,7 @@ ], "summary": "Downloads the driver cluster logs", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -72299,7 +72392,7 @@ ], "summary": "Create on demand cluster compliance scan", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -72332,7 +72425,7 @@ ], "summary": "Get the installed helm charts of a specified cluster", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -72378,7 +72471,7 @@ ], "summary": "Get the log fetcher for cluster", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -72431,7 +72524,7 @@ ], "summary": "Create the log fetcher for cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -72464,7 +72557,7 @@ ], "summary": "Get the installed manifests of a specified cluster", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -72510,7 +72603,7 @@ ], "summary": "Returns the cluster restore of cluster", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -72572,7 +72665,7 @@ ], "summary": "Create on demand cluster restore", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -72614,7 +72707,7 @@ ], "summary": "Returns the specified cluster's import manifest file", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -72661,7 +72754,7 @@ ], "summary": "Upgrade the specified imported read only cluster with full permissions", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -72694,7 +72787,7 @@ ], "summary": "Get K8Certificate for spectro cluster", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -72742,7 +72835,7 @@ ], "summary": "Sets the cluster control plane nodes Kubernetes certificates for renewal", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -72775,7 +72868,7 @@ ], "summary": "Returns the specified cluster's kube config file", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -72836,7 +72929,7 @@ ], "summary": "Associate the assets for the cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -72882,7 +72975,7 @@ ], "summary": "Update the specified spectro cluster metadata", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -72915,7 +73008,7 @@ ], "summary": "Returns available namespaces for the cluster", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -72969,7 +73062,7 @@ ], "summary": "Returns k8s spectrocluster oidc", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -73009,7 +73102,7 @@ ], "summary": "Returns k8s dashboard url", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -73063,7 +73156,7 @@ ], "summary": "Returns the specified cluster's manifest", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -73130,7 +73223,7 @@ ], "summary": "Get specified cluster pack properties", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -73180,7 +73273,7 @@ ], "summary": "Updates the cluster's pack references", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -73213,7 +73306,7 @@ ], "summary": "Returns the specified cluster's packs resolved values", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -73275,7 +73368,7 @@ ], "summary": "Patch update specified cluster's packs status", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -73308,7 +73401,7 @@ ], "summary": "Returns the profile updates of a specified cluster", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -73354,7 +73447,7 @@ ], "summary": "Remove cluster profiles from the specified cluster", "tags": [ - "spectroclusters" + "v1" ] }, "get": { @@ -73391,7 +73484,7 @@ ], "summary": "Returns the associated profiles of a specified cluster", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -73442,7 +73535,7 @@ ], "summary": "Patch cluster profiles to the specified cluster", "tags": [ - "spectroclusters" + "v1" ] }, "put": { @@ -73484,7 +73577,7 @@ ], "summary": "Associate cluster profiles to the specified cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -73530,7 +73623,7 @@ ], "summary": "Returns the associated profile's pack manifests of a specified cluster", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -73593,7 +73686,7 @@ ], "summary": "Returns the specified cluster's profile pack configuration", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -73626,7 +73719,7 @@ ], "summary": "Returns the associated profiles pack manifests of the specified cluster", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -73684,7 +73777,7 @@ ], "summary": "Updates cluster profiles pack manifests to the specified cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -73717,7 +73810,7 @@ ], "summary": "Returns the estimated rate of the specified cluster", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -73775,7 +73868,7 @@ ], "summary": "Returns the spectrocluster repave approve update", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -73815,7 +73908,7 @@ ], "summary": "Returns the spectrocluster repave", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -73860,7 +73953,7 @@ ], "summary": "reset the cluster s by deleting machine pools and condtions", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -73893,7 +73986,7 @@ ], "summary": "Get the cluster's status", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -73947,7 +74040,7 @@ ], "summary": "Updates the specified cluster status condition", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -73995,7 +74088,7 @@ ], "summary": "Updates the specified cluster status conditions", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -74043,7 +74136,7 @@ ], "summary": "Updates the specified cluster's service endpoints information", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -74081,7 +74174,7 @@ ], "summary": "Updates the specified cluster status as imported", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -74129,7 +74222,7 @@ ], "summary": "Updates the specified cluster's services information", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -74162,7 +74255,7 @@ ], "summary": "Returns the SPC apply information for the agent", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -74204,7 +74297,7 @@ ], "summary": "Set the CanBeApplied to true on the spcApply status. CanBeApplied indicates the agent to orchestrate the spc changes", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -74249,7 +74342,7 @@ ], "summary": "Updates the agent patch time for the SPC changes", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -74294,7 +74387,59 @@ ], "summary": "Updates the cluster's upgrade status", "tags": [ - "spectroclusters" + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/upgrade/settings": { + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1SpectroClustersUidUpgradeSettings", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterUpgradeSettingsEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update specific cluster upgrade settings", + "tags": [ + "v1" ] } }, @@ -74341,7 +74486,7 @@ ], "summary": "Validates cluster packs", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -74388,7 +74533,7 @@ ], "summary": "Validates if cluster gets repaved for the specified packs", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -74421,7 +74566,7 @@ ], "summary": "Retrieve a list of variables associated with the cluster", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -74487,7 +74632,7 @@ ], "summary": "Returns the list of virtual machines", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -74541,7 +74686,7 @@ ], "summary": "Create virtual machine", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -74608,7 +74753,7 @@ ], "summary": "Returns the list of snapshots of given namespaces", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -74647,7 +74792,7 @@ ], "summary": "Deletes the virtual machine", "tags": [ - "spectroclusters" + "v1" ] }, "get": { @@ -74678,7 +74823,7 @@ ], "summary": "Get virtual machine", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -74739,7 +74884,7 @@ ], "summary": "Updates the specified virtual machine of the cluster", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -74805,7 +74950,7 @@ ], "summary": "Add volume to the virtual machine instance", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -74868,7 +75013,7 @@ ], "summary": "Clone virtual machine", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -74927,7 +75072,7 @@ ], "summary": "Migrate the virtual machine", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -74986,7 +75131,7 @@ ], "summary": "Pause the virtual machine instance", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -75052,7 +75197,7 @@ ], "summary": "Remove volume from the virtual machine instance", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -75111,7 +75256,7 @@ ], "summary": "Restart the virtual machine", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -75170,7 +75315,7 @@ ], "summary": "Resume the virtual machine instance", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -75233,7 +75378,7 @@ ], "summary": "Create snapshot of virtual machine", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -75263,7 +75408,7 @@ ], "summary": "Delete the snapshot of virtual machine", "tags": [ - "spectroclusters" + "v1" ] }, "get": { @@ -75294,7 +75439,7 @@ ], "summary": "Get virtual machine snapshot", "tags": [ - "spectroclusters" + "v1" ] }, "parameters": [ @@ -75362,7 +75507,7 @@ ], "summary": "Updates the specified snapshot of a virtual machine", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -75421,7 +75566,7 @@ ], "summary": "Start the virtual machine", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -75480,7 +75625,7 @@ ], "summary": "Stop the virtual machine", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -75525,7 +75670,7 @@ ], "summary": "Sync specified cluster workload", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -75588,7 +75733,7 @@ ], "summary": "Sync specified cluster workload", "tags": [ - "spectroclusters" + "v1" ] } }, @@ -75613,7 +75758,10 @@ ], "summary": "get the system config reverse proxy", "tags": [ - "system" + "v1", + "system", + "private", + "docs-show" ] }, "put": { @@ -75646,7 +75794,10 @@ ], "summary": "updates the system config reverse proxy", "tags": [ - "system" + "v1", + "system", + "private", + "docs-show" ] } }, @@ -75678,7 +75829,9 @@ ], "summary": "Delete a list of block listed passwords", "tags": [ - "system" + "v1", + "system", + "docs-show" ] }, "patch": { @@ -75711,7 +75864,9 @@ ], "summary": "List of block listed passwords", "tags": [ - "system" + "v1", + "system", + "docs-show" ] } }, @@ -75783,7 +75938,7 @@ ], "summary": "Retrieves a list of teams", "tags": [ - "teams" + "v1" ] }, "post": { @@ -75827,7 +75982,7 @@ ], "summary": "Creates a team with the specified users and roles", "tags": [ - "teams" + "v1" ] } }, @@ -75894,7 +76049,7 @@ ], "summary": "Retrieves a list of team summary", "tags": [ - "teams" + "v1" ] }, "post": { @@ -75926,7 +76081,7 @@ ], "summary": "Retrieves a list of teams summary with provided filter spec", "tags": [ - "teams" + "v1" ] } }, @@ -75948,7 +76103,7 @@ ], "summary": "Deletes the specified team", "tags": [ - "teams" + "v1" ] }, "get": { @@ -75971,7 +76126,7 @@ ], "summary": "Returns the sepcified team", "tags": [ - "teams" + "v1" ] }, "parameters": [ @@ -76009,7 +76164,7 @@ ], "summary": "Patches the specified team", "tags": [ - "teams" + "v1" ] }, "put": { @@ -76038,7 +76193,7 @@ ], "summary": "Updates the sepcified team", "tags": [ - "teams" + "v1" ] } }, @@ -76063,7 +76218,7 @@ ], "summary": "Returns the specified team's project and roles data", "tags": [ - "teams" + "v1" ] }, "parameters": [ @@ -76101,7 +76256,7 @@ ], "summary": "Updates the projects and roles for the specified team", "tags": [ - "teams" + "v1" ] } }, @@ -76127,7 +76282,7 @@ ], "summary": "Returns the specified individual and resource roles for a team", "tags": [ - "teams" + "v1" ] }, "parameters": [ @@ -76166,7 +76321,7 @@ ], "summary": "Add resource roles for team", "tags": [ - "teams" + "v1" ] } }, @@ -76188,7 +76343,7 @@ ], "summary": "Deleted the resource roles from team", "tags": [ - "teams" + "v1" ] }, "parameters": [ @@ -76233,7 +76388,7 @@ ], "summary": "Updates the resource roles for team", "tags": [ - "teams" + "v1" ] } }, @@ -76258,7 +76413,7 @@ ], "summary": "Returns the specified team's tenant roles", "tags": [ - "teams" + "v1" ] }, "parameters": [ @@ -76296,7 +76451,7 @@ ], "summary": "Updates the tenant roles of the specified team", "tags": [ - "teams" + "v1" ] } }, @@ -76335,7 +76490,7 @@ ], "summary": "Update tenant address", "tags": [ - "tenants" + "v1" ] } }, @@ -76360,7 +76515,7 @@ ], "summary": "lists the certificates for the tenant", "tags": [ - "tenants" + "v1" ] }, "parameters": [ @@ -76406,7 +76561,7 @@ ], "summary": "create the tenant certificate", "tags": [ - "tenants" + "v1" ] } }, @@ -76428,7 +76583,7 @@ ], "summary": "deletes the tenant certificate", "tags": [ - "tenants" + "v1" ] }, "get": { @@ -76451,7 +76606,7 @@ ], "summary": "Returns the ca certificate for the tenant", "tags": [ - "tenants" + "v1" ] }, "parameters": [ @@ -76494,7 +76649,7 @@ ], "summary": "updates the tenant certificate", "tags": [ - "tenants" + "v1" ] } }, @@ -76516,7 +76671,7 @@ ], "summary": "deletes the tenant data sink config", "tags": [ - "tenants" + "v1" ] }, "get": { @@ -76539,7 +76694,7 @@ ], "summary": "Returns data sink config of tenant", "tags": [ - "tenants" + "v1" ] }, "parameters": [ @@ -76585,7 +76740,7 @@ ], "summary": "create data sink config", "tags": [ - "tenants" + "v1" ] }, "put": { @@ -76614,7 +76769,7 @@ ], "summary": "updates the tenant data sink config", "tags": [ - "tenants" + "v1" ] } }, @@ -76639,7 +76794,7 @@ ], "summary": "Get tenant auth token settings", "tags": [ - "tenants" + "v1" ] }, "parameters": [ @@ -76682,7 +76837,7 @@ ], "summary": "Update tenant auth token settings", "tags": [ - "tenants" + "v1" ] } }, @@ -76718,7 +76873,7 @@ ], "summary": "Tenant to accept the contract agreement", "tags": [ - "tenants" + "v1" ] } }, @@ -76748,7 +76903,7 @@ ], "summary": "Deletes the aws credit account for tenants", "tags": [ - "tenants" + "v1" ] }, "get": { @@ -76771,7 +76926,7 @@ ], "summary": "Get the credit accounts for the tenants with free tier access", "tags": [ - "tenants" + "v1" ] }, "parameters": [ @@ -76804,7 +76959,7 @@ ], "summary": "retrieves the domains for tenant", "tags": [ - "tenants" + "v1" ] }, "parameters": [ @@ -76841,7 +76996,7 @@ ], "summary": "creates or updates domains for tenant", "tags": [ - "tenants" + "v1" ] } }, @@ -76880,7 +77035,7 @@ ], "summary": "Update tenant emailId", "tags": [ - "tenants" + "v1" ] } }, @@ -76905,7 +77060,7 @@ ], "summary": "Get tenant level freemium configuration", "tags": [ - "tenants" + "v1" ] }, "parameters": [ @@ -76942,7 +77097,7 @@ ], "summary": "Update tenant freemium configuration", "tags": [ - "tenants" + "v1" ] } }, @@ -76967,7 +77122,7 @@ ], "summary": "Get tenant freemium usage", "tags": [ - "tenants" + "v1" ] }, "parameters": [ @@ -77000,7 +77155,7 @@ ], "summary": "Returns a specified invoice", "tags": [ - "tenants" + "v1" ] }, "parameters": [ @@ -77052,7 +77207,7 @@ ], "summary": "Downloads the specified invoice report", "tags": [ - "tenants" + "v1" ] }, "parameters": [ @@ -77104,7 +77259,7 @@ ], "summary": "Downloads the specified monthly invoice report", "tags": [ - "tenants" + "v1" ] }, "parameters": [ @@ -77156,7 +77311,7 @@ ], "summary": "Downloads the specified tenant usage", "tags": [ - "tenants" + "v1" ] }, "parameters": [ @@ -77197,7 +77352,7 @@ ], "summary": "Get tenant login banner settings", "tags": [ - "tenants" + "v1" ] }, "parameters": [ @@ -77240,7 +77395,7 @@ ], "summary": "Update tenant login banner settings", "tags": [ - "tenants" + "v1" ] } }, @@ -77271,7 +77426,7 @@ ], "summary": "Delete the macros for the specified tenant by given macro name", "tags": [ - "tenants" + "v1" ] }, "get": { @@ -77294,7 +77449,7 @@ ], "summary": "List the macros of the specified tenant", "tags": [ - "tenants" + "v1" ] }, "parameters": [ @@ -77331,7 +77486,7 @@ ], "summary": "Update the macros for the specified tenant by given macro name", "tags": [ - "tenants" + "v1" ] }, "post": { @@ -77360,7 +77515,7 @@ ], "summary": "Create or add new macros for the specified tenant", "tags": [ - "tenants" + "v1" ] }, "put": { @@ -77389,7 +77544,7 @@ ], "summary": "Update the macros of the specified tenant", "tags": [ - "tenants" + "v1" ] } }, @@ -77414,7 +77569,7 @@ ], "summary": "Returns the oidc Spec for tenant", "tags": [ - "tenants" + "v1" ] }, "parameters": [ @@ -77451,7 +77606,7 @@ ], "summary": "Associates the oidc Spec for the tenant", "tags": [ - "tenants" + "v1" ] } }, @@ -77490,7 +77645,7 @@ ], "summary": "creates or updates a password policy for tenant", "tags": [ - "tenants" + "v1" ] } }, @@ -77515,7 +77670,7 @@ ], "summary": "Get is cluster group enabled for a specific tenant", "tags": [ - "tenants" + "v1" ] }, "parameters": [ @@ -77552,7 +77707,7 @@ ], "summary": "Enable or Disable cluster group for a specific tenant", "tags": [ - "tenants" + "v1" ] } }, @@ -77577,7 +77732,7 @@ ], "summary": "Get tenant cluster settings", "tags": [ - "tenants" + "v1" ] }, "parameters": [ @@ -77630,7 +77785,7 @@ ], "summary": "Update tenant clusters nodes auto remediation setting", "tags": [ - "tenants" + "v1" ] } }, @@ -77655,7 +77810,7 @@ ], "summary": "Get developer credit enabled for a specific tenant", "tags": [ - "tenants" + "v1" ] }, "parameters": [ @@ -77692,7 +77847,7 @@ ], "summary": "update developer credit for a specific tenant", "tags": [ - "tenants" + "v1" ] } }, @@ -77717,7 +77872,7 @@ ], "summary": "Get tenant fips settings", "tags": [ - "tenants" + "v1" ] }, "parameters": [ @@ -77760,7 +77915,7 @@ ], "summary": "Update tenant fips setting", "tags": [ - "tenants" + "v1" ] } }, @@ -77785,7 +77940,7 @@ ], "summary": "Get all rate config for public and private cloud", "tags": [ - "tenants" + "v1" ] }, "parameters": [ @@ -77822,7 +77977,7 @@ ], "summary": "updates the rate config for public and private cloud", "tags": [ - "tenants" + "v1" ] } }, @@ -77847,7 +78002,7 @@ ], "summary": "Get tenant level resource limits configuration", "tags": [ - "tenants" + "v1" ] }, "parameters": [ @@ -77884,7 +78039,7 @@ ], "summary": "Update tenant resource limits configuration", "tags": [ - "tenants" + "v1" ] } }, @@ -77909,7 +78064,7 @@ ], "summary": "Returns the specified service provider metadata and Saml Spec for tenant", "tags": [ - "tenants" + "v1" ] }, "parameters": [ @@ -77946,7 +78101,7 @@ ], "summary": "Associates the specified federation metadata for the tenant", "tags": [ - "tenants" + "v1" ] } }, @@ -77971,7 +78126,7 @@ ], "summary": "get sso logins for the tenants", "tags": [ - "tenants" + "v1" ] }, "parameters": [ @@ -78008,7 +78163,7 @@ ], "summary": "enable sso logins for the tenants", "tags": [ - "tenants" + "v1" ] } }, @@ -78081,7 +78236,7 @@ ], "summary": "Lists users", "tags": [ - "users" + "v1" ] }, "post": { @@ -78126,7 +78281,7 @@ ], "summary": "Create User", "tags": [ - "users" + "v1" ] } }, @@ -78165,7 +78320,7 @@ ], "summary": "Returns the specified users location", "tags": [ - "users" + "v1" ] } }, @@ -78205,7 +78360,7 @@ ], "summary": "Create a Azure location", "tags": [ - "users" + "v1" ] } }, @@ -78230,7 +78385,7 @@ ], "summary": "Returns the specified Azure location", "tags": [ - "users" + "v1" ] }, "parameters": [ @@ -78268,7 +78423,7 @@ ], "summary": "Updates the specified Azure location", "tags": [ - "users" + "v1" ] } }, @@ -78308,7 +78463,7 @@ ], "summary": "Create a GCP location", "tags": [ - "users" + "v1" ] } }, @@ -78333,7 +78488,7 @@ ], "summary": "Returns the specified GCP location", "tags": [ - "users" + "v1" ] }, "parameters": [ @@ -78371,7 +78526,7 @@ ], "summary": "Updates the specified GCP location", "tags": [ - "users" + "v1" ] } }, @@ -78411,7 +78566,7 @@ ], "summary": "Create a MinIO location", "tags": [ - "users" + "v1" ] } }, @@ -78436,7 +78591,7 @@ ], "summary": "Returns the specified MinIO location", "tags": [ - "users" + "v1" ] }, "parameters": [ @@ -78474,7 +78629,7 @@ ], "summary": "Updates the specified MinIO location", "tags": [ - "users" + "v1" ] } }, @@ -78514,7 +78669,7 @@ ], "summary": "Create a S3 location", "tags": [ - "users" + "v1" ] } }, @@ -78536,7 +78691,7 @@ ], "summary": "Returns the specified S3 location", "tags": [ - "users" + "v1" ] }, "get": { @@ -78559,7 +78714,7 @@ ], "summary": "Returns the specified S3 location", "tags": [ - "users" + "v1" ] }, "parameters": [ @@ -78597,7 +78752,7 @@ ], "summary": "Updates the specified S3 location", "tags": [ - "users" + "v1" ] } }, @@ -78635,7 +78790,7 @@ ], "summary": "Update the default backup location", "tags": [ - "users" + "v1" ] } }, @@ -78657,7 +78812,7 @@ ], "summary": "Deletes the specified location", "tags": [ - "users" + "v1" ] }, "parameters": [ @@ -78705,7 +78860,7 @@ ], "summary": "Returns the SSH keys", "tags": [ - "users" + "v1" ] }, "post": { @@ -78743,7 +78898,7 @@ ], "summary": "Creates a SSH key", "tags": [ - "users" + "v1" ] } }, @@ -78765,7 +78920,7 @@ ], "summary": "Returns the specified user ssh key", "tags": [ - "users" + "v1" ] }, "get": { @@ -78788,7 +78943,7 @@ ], "summary": "Returns the specified user ssh key", "tags": [ - "users" + "v1" ] }, "parameters": [ @@ -78826,7 +78981,7 @@ ], "summary": "Updates the specified user ssh key", "tags": [ - "users" + "v1" ] } }, @@ -78874,7 +79029,7 @@ ], "summary": "Returns the specified vSphere DNS mapping", "tags": [ - "users" + "v1" ] } }, @@ -78913,7 +79068,7 @@ ], "summary": "Returns the specified vSphere DNS mappings", "tags": [ - "users" + "v1" ] }, "post": { @@ -78951,7 +79106,7 @@ ], "summary": "Create a vSphere DNS mapping", "tags": [ - "users" + "v1" ] } }, @@ -78973,7 +79128,7 @@ ], "summary": "Deletes the specified vSphere DNS mapping", "tags": [ - "users" + "v1" ] }, "get": { @@ -78996,7 +79151,7 @@ ], "summary": "Returns the specified vSphere DNS mapping", "tags": [ - "users" + "v1" ] }, "parameters": [ @@ -79034,7 +79189,7 @@ ], "summary": "Updates the specified vSphere DNS mapping", "tags": [ - "users" + "v1" ] } }, @@ -79065,7 +79220,7 @@ ], "summary": "Revoke access of specific token(s)", "tags": [ - "users" + "v1" ] } }, @@ -79090,7 +79245,33 @@ ], "summary": "Get the system Spectro repository. Restricted to edge services", "tags": [ - "users" + "v1" + ] + } + }, + "/v1/users/info": { + "get": { + "description": "Returns a basic information of User for the specified uid.", + "operationId": "v1UsersInfoGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1UserInfo" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the base information of specified User", + "tags": [ + "v1" ] } }, @@ -79124,7 +79305,7 @@ ], "summary": "gets users kubectl session", "tags": [ - "users" + "v1" ] } }, @@ -79149,7 +79330,7 @@ ], "summary": "Retrieves a list of users metadata", "tags": [ - "users" + "v1" ] } }, @@ -79204,7 +79385,7 @@ ], "summary": "User password change request using the user emailId", "tags": [ - "users" + "v1" ] } }, @@ -79251,7 +79432,7 @@ ], "summary": "User password reset request using the email id", "tags": [ - "users" + "v1" ] } }, @@ -79300,7 +79481,7 @@ ], "summary": "Returns the specified user summary list", "tags": [ - "users" + "v1" ] }, "post": { @@ -79332,7 +79513,7 @@ ], "summary": "Retrieves a list of users summary with provided filter spec", "tags": [ - "users" + "v1" ] } }, @@ -79389,7 +79570,7 @@ ], "summary": "Delete the macros for the system user by macro name", "tags": [ - "users" + "v1" ] }, "get": { @@ -79412,7 +79593,7 @@ ], "summary": "List the macros of the system", "tags": [ - "users" + "v1" ] }, "patch": { @@ -79441,7 +79622,7 @@ ], "summary": "Update the macros for the system user by macro name", "tags": [ - "users" + "v1" ] }, "post": { @@ -79470,7 +79651,7 @@ ], "summary": "Create or add new macros for the system user", "tags": [ - "users" + "v1" ] }, "put": { @@ -79499,7 +79680,7 @@ ], "summary": "Update the macros of the system", "tags": [ - "users" + "v1" ] } }, @@ -79522,7 +79703,7 @@ ], "summary": "Deletes the specified User", "tags": [ - "users" + "v1" ] }, "get": { @@ -79546,7 +79727,7 @@ ], "summary": "Returns the specified User", "tags": [ - "users" + "v1" ] }, "parameters": [ @@ -79585,7 +79766,7 @@ ], "summary": "Patches the specified User", "tags": [ - "users" + "v1" ] }, "put": { @@ -79615,7 +79796,7 @@ ], "summary": "Update User", "tags": [ - "users" + "v1" ] } }, @@ -79673,7 +79854,7 @@ ], "summary": "User password change request using the user uid", "tags": [ - "users" + "v1" ] } }, @@ -79710,7 +79891,7 @@ ], "summary": "User password reset request using the user uid", "tags": [ - "users" + "v1" ] } }, @@ -79736,7 +79917,7 @@ ], "summary": "Returns the specified User Projects and Roles information", "tags": [ - "users" + "v1" ] }, "parameters": [ @@ -79775,7 +79956,7 @@ ], "summary": "Updates the projects and roles for user", "tags": [ - "users" + "v1" ] } }, @@ -79801,7 +79982,7 @@ ], "summary": "Returns the specified individual and resource roles for a user", "tags": [ - "users" + "v1" ] }, "parameters": [ @@ -79840,7 +80021,7 @@ ], "summary": "Add resource roles for user", "tags": [ - "users" + "v1" ] } }, @@ -79862,7 +80043,7 @@ ], "summary": "Deleted the resource roles from user", "tags": [ - "users" + "v1" ] }, "parameters": [ @@ -79907,7 +80088,7 @@ ], "summary": "Updates the resource roles for user", "tags": [ - "users" + "v1" ] } }, @@ -79933,7 +80114,7 @@ ], "summary": "Returns the specified individual and team roles for a user", "tags": [ - "users" + "v1" ] }, "parameters": [ @@ -79972,7 +80153,7 @@ ], "summary": "Updates the roles for user", "tags": [ - "users" + "v1" ] } }, @@ -80011,7 +80192,7 @@ ], "summary": "Users status login mode", "tags": [ - "users" + "v1" ] } }, @@ -80057,7 +80238,7 @@ ], "summary": "Create workspace", "tags": [ - "workspaces" + "v1" ] } }, @@ -80090,7 +80271,7 @@ ], "summary": "Returns the specified team's workspaces and roles data", "tags": [ - "workspaces" + "v1" ] }, "parameters": [ @@ -80134,7 +80315,7 @@ ], "summary": "Updates the workspace roles for the specified team", "tags": [ - "workspaces" + "v1" ] } }, @@ -80168,7 +80349,7 @@ ], "summary": "Returns the specified User workspaces and Roles information", "tags": [ - "workspaces" + "v1" ] }, "parameters": [ @@ -80213,7 +80394,7 @@ ], "summary": "Updates the workspace roles for user", "tags": [ - "workspaces" + "v1" ] } }, @@ -80255,7 +80436,7 @@ ], "summary": "Validates the workspace name", "tags": [ - "workspaces" + "v1" ] } }, @@ -80285,7 +80466,7 @@ ], "summary": "Deletes the specified workspace", "tags": [ - "workspaces" + "v1" ] }, "get": { @@ -80316,7 +80497,7 @@ ], "summary": "Returns the specified workspace", "tags": [ - "workspaces" + "v1" ] }, "parameters": [ @@ -80361,7 +80542,7 @@ ], "summary": "Delete workspace backup", "tags": [ - "workspaces" + "v1" ] }, "get": { @@ -80397,7 +80578,7 @@ ], "summary": "Returns the workspace backup result", "tags": [ - "workspaces" + "v1" ] }, "parameters": [ @@ -80449,7 +80630,7 @@ ], "summary": "Create workspace backup settings", "tags": [ - "workspaces" + "v1" ] }, "put": { @@ -80484,7 +80665,7 @@ ], "summary": "Update workspace backup settings", "tags": [ - "workspaces" + "v1" ] } }, @@ -80538,7 +80719,7 @@ ], "summary": "Create On demand Workspace Backup", "tags": [ - "workspaces" + "v1" ] } }, @@ -80583,7 +80764,7 @@ ], "summary": "Updates the specified workspace namespaces", "tags": [ - "workspaces" + "v1" ] } }, @@ -80637,7 +80818,7 @@ ], "summary": "Create cluster rbac in workspace", "tags": [ - "workspaces" + "v1" ] } }, @@ -80667,7 +80848,7 @@ ], "summary": "Deletes the specified workspace cluster rbac", "tags": [ - "workspaces" + "v1" ] }, "parameters": [ @@ -80716,7 +80897,7 @@ ], "summary": "Updates the specified workspace cluster rbac", "tags": [ - "workspaces" + "v1" ] } }, @@ -80761,7 +80942,7 @@ ], "summary": "Updates the specified workspace meta", "tags": [ - "workspaces" + "v1" ] } }, @@ -80807,7 +80988,7 @@ ], "summary": "Updates the specified workspace resource allocations", "tags": [ - "workspaces" + "v1" ] } }, @@ -80845,7 +81026,7 @@ ], "summary": "Returns the workspace restore result", "tags": [ - "workspaces" + "v1" ] }, "parameters": [ @@ -80907,7 +81088,7 @@ ], "summary": "Create On demand Workspace Restore", "tags": [ - "workspaces" + "v1" ] } } @@ -80921,7 +81102,7 @@ ], "securityDefinitions": { "ApiKey": { - "description": "API key authorization where API key can be generated from Palette console under Profile > My API Keys", + "description": "API key authorization where API key can be generated from Palette console under Profile \u003e My API Keys", "in": "header", "name": "ApiKey", "type": "apiKey" @@ -80933,140 +81114,5 @@ "type": "apiKey" } }, - "swagger": "2.0", - "tags": [ - { - "name": "apiKeys", - "x-displayName": "Api Keys" - }, - { - "name": "appDeployments", - "x-displayName": "App Deployments" - }, - { - "name": "appProfiles", - "x-displayName": "App Profiles" - }, - { - "name": "audits", - "x-displayName": "Audits" - }, - { - "name": "auth", - "x-displayName": "Auth" - }, - { - "name": "cloudaccounts", - "x-displayName": "Cloudaccounts" - }, - { - "name": "cloudconfigs", - "x-displayName": "Cloudconfigs" - }, - { - "name": "clouds", - "x-displayName": "Clouds" - }, - { - "name": "clustergroups", - "x-displayName": "Clustergroups" - }, - { - "name": "clusterprofiles", - "x-displayName": "Clusterprofiles" - }, - { - "name": "dashboard", - "x-displayName": "Dashboard" - }, - { - "name": "datasinks", - "x-displayName": "Datasinks" - }, - { - "name": "edgehosts", - "x-displayName": "Edgehosts" - }, - { - "name": "events", - "x-displayName": "Events" - }, - { - "name": "features", - "x-displayName": "Features" - }, - { - "name": "filters", - "x-displayName": "Filters" - }, - { - "name": "metrics", - "x-displayName": "Metrics" - }, - { - "name": "notifications", - "x-displayName": "Notifications" - }, - { - "name": "overlords", - "x-displayName": "Overlords" - }, - { - "name": "packs", - "x-displayName": "Packs" - }, - { - "name": "pcg", - "x-displayName": "Pcg" - }, - { - "name": "permissions", - "x-displayName": "Permissions" - }, - { - "name": "projects", - "x-displayName": "Projects" - }, - { - "name": "registries", - "x-displayName": "Registries" - }, - { - "name": "roles", - "x-displayName": "Roles" - }, - { - "name": "services", - "x-displayName": "Services" - }, - { - "name": "spectroclusters", - "x-displayName": "Spectroclusters" - }, - { - "name": "system", - "x-displayName": "System" - }, - { - "name": "teams", - "x-displayName": "Teams" - }, - { - "name": "tenants", - "x-displayName": "Tenants" - }, - { - "name": "users", - "x-displayName": "Users" - }, - { - "name": "workspaces", - "x-displayName": "Workspaces" - } - ], - "servers": [ - { - "url": "https://api.spectrocloud.com" - } - ] + "swagger": "2.0" } \ No newline at end of file diff --git a/docs/docs-content/integrations/antrea-cni.md b/docs/deprecated/integrations/antrea-cni.md similarity index 100% rename from docs/docs-content/integrations/antrea-cni.md rename to docs/deprecated/integrations/antrea-cni.md diff --git a/docs/deprecated/integrations/argo-cd.md b/docs/deprecated/integrations/argo-cd.md new file mode 100644 index 0000000000..a2968d64a0 --- /dev/null +++ b/docs/deprecated/integrations/argo-cd.md @@ -0,0 +1,52 @@ +--- +sidebar_label: "Argo CD" +title: "Argo CD" +description: "Argo CD for Spectro Cloud Palette" + +type: "integration" +category: ["system app", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/argo-cd/blobs/sha256:647cd3df6fec421e6580589ea7229762d8e828c77036f835f14f4c15c2a44c4c?type=image.webp" +tags: ["packs", "argo-cd", "system app"] +--- + +[Argo CD](https://argo-cd.readthedocs.io/en/stable/) is a declarative, GitOps continuous delivery tool for Kubernetes. +Argo CD follows the GitOps pattern of using Git repositories as the source of truth for defining the desired application +state. Argo CD automates the deployment of the desired application states in the specified target environments. +Application deployments can track updates to branches, tags, or pinned to a specific version of manifests at a Git +commit. Start using Argo CD with Palette today by consuming this pack. + +## Prerequisites + +- Kubernetes 1.7+ + +## Version Supported + + + + +- **3.3.5** + + + + + +- **3.2.6** + + + + +## Notable Parameters + +| Parameter | Description | +| ---------------------------- | ---------------------------------------------------------------------------------------------------- | +| global.image.repository | The repository that is the source of truth. | +| global.image.tag | The image tag to pull. | +| global.image.imagePullPolicy | If defined, a imagePullPolicy applied to all ArgoCD deployments. Defaults to ` IfNotPresent` | +| global.securityContext | A list of security contexts | +| imagePullSecrets | If defined, uses a Secret to pull an image from a private Docker registry or repository. | +| hostAliases | A list of mapping between IP and hostnames that will be injected as entries in the pod's hosts files | + +## References + +- [Argo CD](https://argo-cd.readthedocs.io/en/stable/) diff --git a/docs/deprecated/integrations/aws-cluster-autoscaler.md b/docs/deprecated/integrations/aws-cluster-autoscaler.md new file mode 100644 index 0000000000..b50d93f0b2 --- /dev/null +++ b/docs/deprecated/integrations/aws-cluster-autoscaler.md @@ -0,0 +1,668 @@ +--- +sidebar_label: "AWS Cluster Autoscaler" +title: "AWS Cluster Autoscaler" +description: "AWS Cluster Autoscaler for Spectro Cloud Palette" +hide_table_of_contents: true +type: "integration" +category: ["system app", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.dev.spectrocloud.com/v1/aws-cluster-autoscaler/blobs/sha256:f86813591b3b63b3afcf0a604a7c8c715660448585e89174908f3c6a421ad8d8?type=image.webp" +tags: ["packs", "aws-cluster-autoscaler", "system app", "eks"] +--- + +Palette supports auto scaling for Amazon Elastic Kubernetes Service (EKS) host clusters through the AWS Cluster +Autoscaler pack. + +The Cluster Autoscaler pack monitors the cluster workload and utilizes +[Amazon EC2 Auto Scaling Groups](https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html) +to dynamically provision or shut down nodes, maximizing the cluster's performance and making it more resilient to +failures. The Kubernetes clusters are resized under the following conditions: + +- Scale-up: The Cluster Autoscaler triggers a scale-up operation if insufficient cluster resources lead to multiple pod + failures. The pods become eligible for scheduling on the new nodes. The Cluster Autoscaler checks for pod failures + every 30 seconds and schedules impacted pods on new nodes. Scaling up will not happen when the given pods have node + affinity. + +- Scale-down: The Cluster Autoscaler triggers a scale-down operation if nodes are underutilized for ten continuous + minutes, and their pods are eligible for rescheduling on other available nodes. The node utilization threshold for + scaling down a node defaults to 50% of the node's capacity. The Cluster Autoscaler calculates the node utilization + threshold based on CPU and memory utilization. In scenarios where the node is underutilized, the Cluster Autoscaler + migrates the pods from underutilized nodes to other available nodes and then shuts down the underutilized nodes. + +## Versions Supported + + + + + +### Prerequisites + +- An EKS host cluster with Kubernetes 1.28.x or higher. + +- Permission to create an IAM policy in the AWS account you use with Palette. + +### Parameters + +| **Parameter** | **Description** | **Default Value** | **Required** | +| ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | ------------ | +| `manifests.aws-cluster-autoscaler.expander` | Indicates which Auto Scaling Group (ASG) to expand. Options are `random`, `most-pods`, and `least-waste`. `random` scales up a random ASG. `most-pods` scales up the ASG that will schedule the most amount of pods. `least-waste` scales up the ASG that will waste the least amount of CPU/MEM resources. | `least-waste` | Yes | + +### Usage + +The manifest-based Cluster Autoscaler pack is available for Amazon EKS host clusters. To deploy the pack, you must first +define an IAM policy in the AWS account associated with Palette. This policy allows the Cluster Autoscaler to scale the +cluster's node groups. + +Use the following steps to create the IAM policy and deploy the Cluster Autoscaler pack. + +1. In AWS, create a new IAM policy using the snippet below and give it a name, for example, + _PaletteEKSClusterAutoscaler_. Refer to the + [Creating IAM policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) guide for + instructions. + + ```json + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "autoscaling:DescribeAutoScalingGroups", + "autoscaling:DescribeAutoScalingInstances", + "autoscaling:DescribeLaunchConfigurations", + "autoscaling:DescribeScalingActivities", + "autoscaling:DescribeTags", + "ec2:DescribeInstanceTypes", + "ec2:DescribeLaunchTemplateVersions" + ], + "Resource": ["*"] + }, + { + "Effect": "Allow", + "Action": [ + "autoscaling:SetDesiredCapacity", + "autoscaling:TerminateInstanceInAutoScalingGroup", + "ec2:DescribeImages", + "ec2:GetInstanceTypesFromInstanceRequirements", + "eks:DescribeNodegroup" + ], + "Resource": ["*"] + } + ] + } + ``` + +2. Copy the IAM policy + [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html). Your policy ARN + should be similar to `arn:aws:iam::123456789:policy/PaletteEKSClusterAutoscaler`. + +3. During the cluster profile creation, modify the `managedMachinePool.roleAdditionalPolicies` section in the + **values.yaml** file of the Kubernetes pack with the created IAM policy ARN. Palette will attach the IAM policy to + your cluster's node group during cluster deployment. The snapshot below illustrates the specific section to update + with the policy ARN. + + ![A snapshot displaying the ARN added to the Kubernetes pack's manifest.](/integrations_aws-cluster-autoscaler_k8s-manifest.webp) + + For example, the code block below displays the updated `managedMachinePool.roleAdditionalPolicies` section with a + sample policy ARN. + + ```yaml + managedMachinePool: + # roleName: {{ name of the self-managed role | format "${string}" }} + # A list of additional policies to attach to the node group role + roleAdditionalPolicies: + - "arn:aws:iam::123456789:policy/PaletteEKSClusterAutoscaler" + ``` + + :::tip + + Instead of updating the Kubernetes pack's **values.yaml** file, you can alternatively add an inline IAM policy to the + cluster's node group post deployment. Refer to the + [Adding IAM identity permissions](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console) + guide to learn how to embed an inline policy for a user or role. + + ::: + +4. Once you included all the [infrastructure pack layers](../profiles/profiles.md) to your cluster profile, add the AWS + Cluster Autoscaler pack. + +5. Next, use the created cluster profile to [deploy a cluster](../clusters/public-cloud/deploy-k8s-cluster.md). In the + **Nodes Config** section, specify the minimum and maximum number of worker pool nodes and the instance type that + suits your workload. Your worker pool will have at least the minimum number of nodes you set up, and when scaling up, + it will not exceed the maximum number of nodes configured. Note that each configured node pool will represent one + ASG. + + The snapshot below displays an example of the cluster's **Nodes Config** section. + + ![A snapshot displaying the minimum and maximum node count in Palette.](/integrations_aws-cluster-autoscaler_node-count.webp) + + :::tip + + You can also [edit the minimum and maximum number of worker pool nodes](#resize-the-cluster) for a deployed cluster + directly in the Palette UI. + + ::: + +#### Resize the Cluster + +In this example, you will resize the worker pool nodes to better understand the scaling behavior of the Cluster +Autoscaler pack. First, you will create a cluster with large-sized worker pool instances. Then, you will manually reduce +the instance size. This will lead to insufficient resources for existing pods and multiple pod failures in the cluster. +As a result, the Cluster Autoscaler will provision new smaller-sized nodes with enough capacity to accommodate the +current workload and reschedule the affected pods on new nodes. Follow the steps below to trigger the Cluster Autoscaler +and the pod rescheduling event. + +1. During the cluster deployment, in the **Nodes Config** section, choose a large-sized instance type. For example, you + can select the worker pool instance size as **t3.2xlarge** (8 vCPUs, 32 GB RAM) or higher. + +2. Once the cluster is deployed, go to the **Nodes** tab in the cluster details page in Palette. Observe the count and + size of nodes. The snapshot below displays one node of the type **t3.2xlarge** in the cluster's worker pool. + + ![A snapshot displaying one node of the type **t3.2xlarge** in the worker pool.](/integrations_aws-cluster-autoscaler_one-node.webp) + +3. Manually reduce the instance size in the worker pool configuration to **t3.medium** (2 vCPUs, 8 GB RAM). The snapshot + below shows how to change the instance size in the node pool configuration. + + ![A snapshot displaying how to edit node pool configuration.](/integrations_aws-cluster-autoscaler_edit-node.webp) + +4. Wait a few minutes for the new nodes to be provisioned. Reducing the node size will make the Cluster Autoscaler shut + down the large node and provision smaller-sized nodes with enough capacity to accommodate the current workload. Note + that the new node count will be within the minimum and maximum limits specified in the worker pool configuration + wizard. + + The snapshot below displays the newly created **t3.medium** nodes. These two smaller-sized nodes will efficiently + manage the same workload as the single larger-sized node. + + ![A snapshot displaying new nodes of the size **t3.medium** spin up automatically, *collectively* providing enough capacity to accommodate the current workload. ](/integrations_aws-cluster-autoscaler_two-nodes.webp) + + + + + +### Prerequisites + +- An EKS host cluster with Kubernetes 1.27.x or higher. + +- Permission to create an IAM policy in the AWS account you use with Palette. + +### Parameters + +| **Parameter** | **Description** | **Default Value** | **Required** | +| ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | ------------ | +| `manifests.aws-cluster-autoscaler.expander` | Indicates which Auto Scaling Group (ASG) to expand. Options are `random`, `most-pods`, and `least-waste`. `random` scales up a random ASG. `most-pods` scales up the ASG that will schedule the most amount of pods. `least-waste` scales up the ASG that will waste the least amount of CPU/MEM resources. | `least-waste` | Yes | + +### Usage + +The manifest-based Cluster Autoscaler pack is available for Amazon EKS host clusters. To deploy the pack, you must first +define an IAM policy in the AWS account associated with Palette. This policy allows the Cluster Autoscaler to scale the +cluster's node groups. + +Use the following steps to create the IAM policy and deploy the Cluster Autoscaler pack. + +1. In AWS, create a new IAM policy using the snippet below and give it a name, for example, + _PaletteEKSClusterAutoscaler_. Refer to the + [Creating IAM policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) guide for + instructions. + + ```json + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "autoscaling:DescribeAutoScalingGroups", + "autoscaling:DescribeAutoScalingInstances", + "autoscaling:DescribeLaunchConfigurations", + "autoscaling:DescribeScalingActivities", + "autoscaling:DescribeTags", + "ec2:DescribeInstanceTypes", + "ec2:DescribeLaunchTemplateVersions" + ], + "Resource": ["*"] + }, + { + "Effect": "Allow", + "Action": [ + "autoscaling:SetDesiredCapacity", + "autoscaling:TerminateInstanceInAutoScalingGroup", + "ec2:DescribeImages", + "ec2:GetInstanceTypesFromInstanceRequirements", + "eks:DescribeNodegroup" + ], + "Resource": ["*"] + } + ] + } + ``` + +2. Copy the IAM policy + [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html). Your policy ARN + should be similar to `arn:aws:iam::123456789:policy/PaletteEKSClusterAutoscaler`. + +3. During the cluster profile creation, modify the `managedMachinePool.roleAdditionalPolicies` section in the + **values.yaml** file of the Kubernetes pack with the created IAM policy ARN. Palette will attach the IAM policy to + your cluster's node group during cluster deployment. The snapshot below illustrates the specific section to update + with the policy ARN. + + ![A snapshot displaying the ARN added to the Kubernetes pack's manifest.](/integrations_aws-cluster-autoscaler_k8s-manifest.webp) + + For example, the code block below displays the updated `managedMachinePool.roleAdditionalPolicies` section with a + sample policy ARN. + + ```yaml + managedMachinePool: + # roleName: {{ name of the self-managed role | format "${string}" }} + # A list of additional policies to attach to the node group role + roleAdditionalPolicies: + - "arn:aws:iam::123456789:policy/PaletteEKSClusterAutoscaler" + ``` + + :::tip + + Instead of updating the Kubernetes pack's **values.yaml** file, you can alternatively add an inline IAM policy to the + cluster's node group post deployment. Refer to the + [Adding IAM identity permissions](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console) + guide to learn how to embed an inline policy for a user or role. + + ::: + +4. Once you included all the [infrastructure pack layers](../profiles/profiles.md) to your cluster profile, add the AWS + Cluster Autoscaler pack. + +5. Next, use the created cluster profile to [deploy a cluster](../clusters/public-cloud/deploy-k8s-cluster.md). In the + **Nodes Config** section, specify the minimum and maximum number of worker pool nodes and the instance type that + suits your workload. Your worker pool will have at least the minimum number of nodes you set up, and when scaling up, + it will not exceed the maximum number of nodes configured. Note that each configured node pool will represent one + ASG. + + The snapshot below displays an example of the cluster's **Nodes Config** section. + + ![A snapshot displaying the minimum and maximum node count in Palette.](/integrations_aws-cluster-autoscaler_node-count.webp) + + :::tip + + You can also [edit the minimum and maximum number of worker pool nodes](#resize-the-cluster) for a deployed cluster + directly in the Palette UI. + + ::: + +#### Resize the Cluster + +In this example, you will resize the worker pool nodes to better understand the scaling behavior of the Cluster +Autoscaler pack. First, you will create a cluster with large-sized worker pool instances. Then, you will manually reduce +the instance size. This will lead to insufficient resources for existing pods and multiple pod failures in the cluster. +As a result, the Cluster Autoscaler will provision new smaller-sized nodes with enough capacity to accommodate the +current workload and reschedule the affected pods on new nodes. Follow the steps below to trigger the Cluster Autoscaler +and the pod rescheduling event. + +1. During the cluster deployment, in the **Nodes Config** section, choose a large-sized instance type. For example, you + can select the worker pool instance size as **t3.2xlarge** (8 vCPUs, 32 GB RAM) or higher. + +2. Once the cluster is deployed, go to the **Nodes** tab in the cluster details page in Palette. Observe the count and + size of nodes. The snapshot below displays one node of the type **t3.2xlarge** in the cluster's worker pool. + + ![A snapshot displaying one node of the type **t3.2xlarge** in the worker pool.](/integrations_aws-cluster-autoscaler_one-node.webp) + +3. Manually reduce the instance size in the worker pool configuration to **t3.medium** (2 vCPUs, 8 GB RAM). The snapshot + below shows how to change the instance size in the node pool configuration. + + ![A snapshot displaying how to edit node pool configuration.](/integrations_aws-cluster-autoscaler_edit-node.webp) + +4. Wait a few minutes for the new nodes to be provisioned. Reducing the node size will make the Cluster Autoscaler shut + down the large node and provision smaller-sized nodes with enough capacity to accommodate the current workload. Note + that the new node count will be within the minimum and maximum limits specified in the worker pool configuration + wizard. + + The snapshot below displays the newly created **t3.medium** nodes. These two smaller-sized nodes will efficiently + manage the same workload as the single larger-sized node. + + ![A snapshot displaying new nodes of the size **t3.medium** spin up automatically, *collectively* providing enough capacity to accommodate the current workload. ](/integrations_aws-cluster-autoscaler_two-nodes.webp) + + + + + +### Prerequisites + +- An EKS host cluster with Kubernetes 1.26.x or higher. + +- Permission to create an IAM policy in the AWS account you use with Palette. + +### Parameters + +| **Parameter** | **Description** | **Default Value** | **Required** | +| ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | ------------ | +| `manifests.aws-cluster-autoscaler.expander` | Indicates which Auto Scaling Group (ASG) to expand. Options are `random`, `most-pods`, and `least-waste`. `random` scales up a random ASG. `most-pods` scales up the ASG that will schedule the most amount of pods. `least-waste` scales up the ASG that will waste the least amount of CPU/MEM resources. | `least-waste` | Yes | + +### Usage + +The manifest-based Cluster Autoscaler pack is available for Amazon EKS host clusters. To deploy the pack, you must first +define an IAM policy in the AWS account associated with Palette. This policy allows the Cluster Autoscaler to scale the +cluster's node groups. + +Use the following steps to create the IAM policy and deploy the Cluster Autoscaler pack. + +1. In AWS, create a new IAM policy using the snippet below and give it a name, for example, + _PaletteEKSClusterAutoscaler_. Refer to the + [Creating IAM policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) guide for + instructions. + + ```json + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "autoscaling:DescribeAutoScalingGroups", + "autoscaling:DescribeAutoScalingInstances", + "autoscaling:DescribeLaunchConfigurations", + "autoscaling:DescribeScalingActivities", + "autoscaling:DescribeTags", + "ec2:DescribeInstanceTypes", + "ec2:DescribeLaunchTemplateVersions" + ], + "Resource": ["*"] + }, + { + "Effect": "Allow", + "Action": [ + "autoscaling:SetDesiredCapacity", + "autoscaling:TerminateInstanceInAutoScalingGroup", + "ec2:DescribeImages", + "ec2:GetInstanceTypesFromInstanceRequirements", + "eks:DescribeNodegroup" + ], + "Resource": ["*"] + } + ] + } + ``` + +2. Copy the IAM policy + [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html). Your policy ARN + should be similar to `arn:aws:iam::123456789:policy/PaletteEKSClusterAutoscaler`. + +3. During the cluster profile creation, modify the `managedMachinePool.roleAdditionalPolicies` section in the + **values.yaml** file of the Kubernetes pack with the created IAM policy ARN. Palette will attach the IAM policy to + your cluster's node group during cluster deployment. The snapshot below illustrates the specific section to update + with the policy ARN. + + ![A snapshot displaying the ARN added to the Kubernetes pack's manifest.](/integrations_aws-cluster-autoscaler_k8s-manifest.webp) + + For example, the code block below displays the updated `managedMachinePool.roleAdditionalPolicies` section with a + sample policy ARN. + + ```yaml + managedMachinePool: + # roleName: {{ name of the self-managed role | format "${string}" }} + # A list of additional policies to attach to the node group role + roleAdditionalPolicies: + - "arn:aws:iam::123456789:policy/PaletteEKSClusterAutoscaler" + ``` + + :::tip + + Instead of updating the Kubernetes pack's **values.yaml** file, you can alternatively add an inline IAM policy to the + cluster's node group post deployment. Refer to the + [Adding IAM identity permissions](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console) + guide to learn how to embed an inline policy for a user or role. + + ::: + +4. Once you included all the [infrastructure pack layers](../profiles/profiles.md) to your cluster profile, add the AWS + Cluster Autoscaler pack. + +5. Next, use the created cluster profile to [deploy a cluster](../clusters/public-cloud/deploy-k8s-cluster.md). In the + **Nodes Config** section, specify the minimum and maximum number of worker pool nodes and the instance type that + suits your workload. Your worker pool will have at least the minimum number of nodes you set up, and when scaling up, + it will not exceed the maximum number of nodes configured. Note that each configured node pool will represent one + ASG. + + The snapshot below displays an example of the cluster's **Nodes Config** section. + + ![A snapshot displaying the minimum and maximum node count in Palette.](/integrations_aws-cluster-autoscaler_node-count.webp) + + :::tip + + You can also [edit the minimum and maximum number of worker pool nodes](#resize-the-cluster) for a deployed cluster + directly in the Palette UI. + + ::: + +#### Resize the Cluster + +In this example, you will resize the worker pool nodes to better understand the scaling behavior of the Cluster +Autoscaler pack. First, you will create a cluster with large-sized worker pool instances. Then, you will manually reduce +the instance size. This will lead to insufficient resources for existing pods and multiple pod failures in the cluster. +As a result, the Cluster Autoscaler will provision new smaller-sized nodes with enough capacity to accommodate the +current workload and reschedule the affected pods on new nodes. Follow the steps below to trigger the Cluster Autoscaler +and the pod rescheduling event. + +1. During the cluster deployment, in the **Nodes Config** section, choose a large-sized instance type. For example, you + can select the worker pool instance size as **t3.2xlarge** (8 vCPUs, 32 GB RAM) or higher. + +2. Once the cluster is deployed, go to the **Nodes** tab in the cluster details page in Palette. Observe the count and + size of nodes. The snapshot below displays one node of the type **t3.2xlarge** in the cluster's worker pool. + + ![A snapshot displaying one node of the type **t3.2xlarge** in the worker pool.](/integrations_aws-cluster-autoscaler_one-node.webp) + +3. Manually reduce the instance size in the worker pool configuration to **t3.medium** (2 vCPUs, 8 GB RAM). The snapshot + below shows how to change the instance size in the node pool configuration. + + ![A snapshot displaying how to edit node pool configuration.](/integrations_aws-cluster-autoscaler_edit-node.webp) + +4. Wait a few minutes for the new nodes to be provisioned. Reducing the node size will make the Cluster Autoscaler shut + down the large node and provision smaller-sized nodes with enough capacity to accommodate the current workload. Note + that the new node count will be within the minimum and maximum limits specified in the worker pool configuration + wizard. + + The snapshot below displays the newly created **t3.medium** nodes. These two smaller-sized nodes will efficiently + manage the same workload as the single larger-sized node. + + ![A snapshot displaying new nodes of the size **t3.medium** spin up automatically, *collectively* providing enough capacity to accommodate the current workload. ](/integrations_aws-cluster-autoscaler_two-nodes.webp) + + + + + +### Prerequisites + +- An EKS host cluster with Kubernetes 1.19.x or higher. + +- Permission to create an IAM policy in the AWS account you use with Palette. + +### Parameters + +| **Parameter** | **Description** | **Default Value** | **Required** | +| ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | ------------ | +| `manifests.aws-cluster-autoscaler.expander` | Indicates which Auto Scaling Group (ASG) to expand. Options are `random`, `most-pods`, and `least-waste`. `random` scales up a random ASG. `most-pods` scales up the ASG that will schedule the most amount of pods. `least-waste` scales up the ASG that will waste the least amount of CPU/MEM resources. | `least-waste` | Yes | + +### Usage + +The manifest-based Cluster Autoscaler pack is available for Amazon EKS host clusters. To deploy the pack, you must first +define an IAM policy in the AWS account associated with Palette. This policy allows the Cluster Autoscaler to scale the +cluster's node groups. + +Use the following steps to create the IAM policy and deploy the Cluster Autoscaler pack. + +1. In AWS, create a new IAM policy using the snippet below and give it a name, for example, + _PaletteEKSClusterAutoscaler_. Refer to the + [Creating IAM policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) guide for + instructions. + + ```json + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "autoscaling:DescribeAutoScalingGroups", + "autoscaling:DescribeAutoScalingInstances", + "autoscaling:DescribeLaunchConfigurations", + "autoscaling:DescribeScalingActivities", + "autoscaling:DescribeTags", + "ec2:DescribeInstanceTypes", + "ec2:DescribeLaunchTemplateVersions" + ], + "Resource": ["*"] + }, + { + "Effect": "Allow", + "Action": [ + "autoscaling:SetDesiredCapacity", + "autoscaling:TerminateInstanceInAutoScalingGroup", + "ec2:DescribeImages", + "ec2:GetInstanceTypesFromInstanceRequirements", + "eks:DescribeNodegroup" + ], + "Resource": ["*"] + } + ] + } + ``` + +2. Copy the IAM policy + [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html). Your policy ARN + should be similar to `arn:aws:iam::123456789:policy/PaletteEKSClusterAutoscaler`. + +3. During the cluster profile creation, modify the `managedMachinePool.roleAdditionalPolicies` section in the + **values.yaml** file of the Kubernetes pack with the created IAM policy ARN. Palette will attach the IAM policy to + your cluster's node group during cluster deployment. The snapshot below illustrates the specific section to update + with the policy ARN. + + ![A snapshot displaying the ARN added to the Kubernetes pack's manifest.](/integrations_aws-cluster-autoscaler_k8s-manifest.webp) + + For example, the code block below displays the updated `managedMachinePool.roleAdditionalPolicies` section with a + sample policy ARN. + + ```yaml + managedMachinePool: + # roleName: {{ name of the self-managed role | format "${string}" }} + # A list of additional policies to attach to the node group role + roleAdditionalPolicies: + - "arn:aws:iam::123456789:policy/PaletteEKSClusterAutoscaler" + ``` + + :::tip + + Instead of updating the Kubernetes pack's **values.yaml** file, you can alternatively add an inline IAM policy to the + cluster's node group post deployment. Refer to the + [Adding IAM identity permissions](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console) + guide to learn how to embed an inline policy for a user or role. + + ::: + +4. Once you included all the [infrastructure pack layers](../profiles/profiles.md) to your cluster profile, add the AWS + Cluster Autoscaler pack. + +5. Next, use the created cluster profile to [deploy a cluster](../clusters/public-cloud/deploy-k8s-cluster.md). In the + **Nodes Config** section, specify the minimum and maximum number of worker pool nodes and the instance type that + suits your workload. Your worker pool will have at least the minimum number of nodes you set up, and when scaling up, + it will not exceed the maximum number of nodes configured. Note that each configured node pool will represent one + ASG. + + The snapshot below displays an example of the cluster's **Nodes Config** section. + + ![A snapshot displaying the minimum and maximum node count in Palette.](/integrations_aws-cluster-autoscaler_node-count.webp) + + :::tip + + You can also [edit the minimum and maximum number of worker pool nodes](#resize-the-cluster) for a deployed cluster + directly in the Palette UI. + + ::: + +#### Resize the Cluster + +In this example, you will resize the worker pool nodes to better understand the scaling behavior of the Cluster +Autoscaler pack. First, you will create a cluster with large-sized worker pool instances. Then, you will manually reduce +the instance size. This will lead to insufficient resources for existing pods and multiple pod failures in the cluster. +As a result, the Cluster Autoscaler will provision new smaller-sized nodes with enough capacity to accommodate the +current workload and reschedule the affected pods on new nodes. Follow the steps below to trigger the Cluster Autoscaler +and the pod rescheduling event. + +1. During the cluster deployment, in the **Nodes Config** section, choose a large-sized instance type. For example, you + can select the worker pool instance size as **t3.2xlarge** (8 vCPUs, 32 GB RAM) or higher. + +2. Once the cluster is deployed, go to the **Nodes** tab in the cluster details page in Palette. Observe the count and + size of nodes. The snapshot below displays one node of the type **t3.2xlarge** in the cluster's worker pool. + + ![A snapshot displaying one node of the type **t3.2xlarge** in the worker pool.](/integrations_aws-cluster-autoscaler_one-node.webp) + +3. Manually reduce the instance size in the worker pool configuration to **t3.medium** (2 vCPUs, 8 GB RAM). The snapshot + below shows how to change the instance size in the node pool configuration. + + ![A snapshot displaying how to edit node pool configuration.](/integrations_aws-cluster-autoscaler_edit-node.webp) + +4. Wait a few minutes for the new nodes to be provisioned. Reducing the node size will make the Cluster Autoscaler shut + down the large node and provision smaller-sized nodes with enough capacity to accommodate the current workload. Note + that the new node count will be within the minimum and maximum limits specified in the worker pool configuration + wizard. + + The snapshot below displays the newly created **t3.medium** nodes. These two smaller-sized nodes will efficiently + manage the same workload as the single larger-sized node. + + ![A snapshot displaying new nodes of the size **t3.medium** spin up automatically, *collectively* providing enough capacity to accommodate the current workload. ](/integrations_aws-cluster-autoscaler_two-nodes.webp) + + + + + +:::warning + +All versions less than version 1.22.x are considered deprecated. Upgrade to a newer version to take advantage of new +features. + +::: + + + + + +## Troubleshooting + +### Scenario - Quota Limits Exceeded + +You may observe the `LimitExceeded: Cannot exceed quota for PoliciesPerRole:10` error in the cluster deployment logs. +This may happen because the default IAM role that Palette creates for the node group already has 10 policies attached, +and you are trying to attach one more. By default, your AWS account will have a quota of 10 managed policies per IAM +role. The workaround is to follow the instructions in the +[IAM object quotas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html#reference_iam-quotas-entities) +guide to request a quota increase. + +### Scenario - IAM Authenticator not Found + +You may encounter an `executable aws-iam-authenticator not found` error in your terminal when attempting to access your +EKS cluster from your local machine. This may happen due to the +[aws-iam-authenticator](https://github.com/kubernetes-sigs/aws-iam-authenticator) plugin missing from your local +environment. The workaround is to install the IAM Authenticator. Refer to the +[IAM Authenticator](https://docs.aws.amazon.com/eks/latest/userguide/install-aws-iam-authenticator.html) install guide +for more information. + +## Terraform + +You can reference the AWS Cluster Autoscaler pack in Terraform with a data resource. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "aws-cluster-autoscaler" { + name = "aws-cluster-autoscaler" + version = "1.29.2" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` + +## References + +- [Cluster Autoscaler on AWS](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/README.md) + +- [Amazon EKS Autoscaling](https://docs.aws.amazon.com/eks/latest/userguide/autoscaling.html) + +- [AWS IAM Authenticator Plugin](https://github.com/kubernetes-sigs/aws-iam-authenticator) diff --git a/docs/docs-content/integrations/aws-ebs.md b/docs/deprecated/integrations/aws-ebs.md similarity index 100% rename from docs/docs-content/integrations/aws-ebs.md rename to docs/deprecated/integrations/aws-ebs.md diff --git a/docs/docs-content/integrations/aws-efs.md b/docs/deprecated/integrations/aws-efs.md similarity index 100% rename from docs/docs-content/integrations/aws-efs.md rename to docs/deprecated/integrations/aws-efs.md diff --git a/docs/docs-content/integrations/azure-cni.md b/docs/deprecated/integrations/azure-cni.md similarity index 100% rename from docs/docs-content/integrations/azure-cni.md rename to docs/deprecated/integrations/azure-cni.md diff --git a/docs/docs-content/integrations/azure-disk.md b/docs/deprecated/integrations/azure-disk.md similarity index 100% rename from docs/docs-content/integrations/azure-disk.md rename to docs/deprecated/integrations/azure-disk.md diff --git a/docs/docs-content/integrations/byoos.md b/docs/deprecated/integrations/byoos.md similarity index 100% rename from docs/docs-content/integrations/byoos.md rename to docs/deprecated/integrations/byoos.md diff --git a/docs/docs-content/integrations/calico.md b/docs/deprecated/integrations/calico.md similarity index 100% rename from docs/docs-content/integrations/calico.md rename to docs/deprecated/integrations/calico.md diff --git a/docs/docs-content/integrations/centos.md b/docs/deprecated/integrations/centos.md similarity index 100% rename from docs/docs-content/integrations/centos.md rename to docs/deprecated/integrations/centos.md diff --git a/docs/docs-content/integrations/certmanager.md b/docs/deprecated/integrations/certmanager.md similarity index 100% rename from docs/docs-content/integrations/certmanager.md rename to docs/deprecated/integrations/certmanager.md diff --git a/docs/deprecated/integrations/cilium-tetragon.md b/docs/deprecated/integrations/cilium-tetragon.md new file mode 100644 index 0000000000..e70e033c73 --- /dev/null +++ b/docs/deprecated/integrations/cilium-tetragon.md @@ -0,0 +1,38 @@ +--- +sidebar_label: "Cilium-Tetragon" +title: "Cilium-Tetragon" +description: "Cilium Tetragon monitoring pack for Spectro Cloud Palette" +hide_table_of_contents: true +type: "integration" +category: ["monitoring", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/tetragon/blobs/sha256:4b14874658de77afc1c966119c156f5a0c28477debc7cb1276f9e1fb63ba9cae?type=image.webp" +tags: ["packs", "cilium-tetragon", "monitoring"] +--- + +[Tetragon](https://github.com/cilium/tetragon) is an eBPF based security observability and runtime enforcement. eBPF is +used to safely and efficiently extend the kernel's capabilities without requiring changing the kernel source code or +loading kernel modules. Tetragon is a Cilium community open-source project that enables profound visibility with +filtering and aggregation with the eBPF collector support to deliver visibility at depth with minimal overhead. + +Palette supports Cilium Tetragon as an add-on pack for monitoring services. Refer to the +[Create an Add-on Profile](../profiles/cluster-profiles/create-cluster-profiles/create-addon-profile/create-addon-profile.md) +guide for more information on how to use an add-on pack. + +## Versions Supported + + + + + +**0.8.** + + + + + +## References + +- [Tetragon GitHub](https://github.com/cilium/tetragon) + +- [Tetragon Documentation](https://tetragon.cilium.io/docs) diff --git a/docs/docs-content/integrations/cilium.md b/docs/deprecated/integrations/cilium.md similarity index 100% rename from docs/docs-content/integrations/cilium.md rename to docs/deprecated/integrations/cilium.md diff --git a/docs/docs-content/integrations/citrix-ipam.md b/docs/deprecated/integrations/citrix-ipam.md similarity index 100% rename from docs/docs-content/integrations/citrix-ipam.md rename to docs/deprecated/integrations/citrix-ipam.md diff --git a/docs/deprecated/integrations/cloudanix.md b/docs/deprecated/integrations/cloudanix.md new file mode 100644 index 0000000000..2d175d66ec --- /dev/null +++ b/docs/deprecated/integrations/cloudanix.md @@ -0,0 +1,131 @@ +--- +sidebar_label: "Cloudanix" +title: "Cloudanix" +description: + "The Cloudanix security pack provides a dashboard that displays threats and unusual behavior in Kubernetes containers + in Palette" +hide_table_of_contents: true +type: "integration" +category: ["security", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://cloudanix-assets.s3.amazonaws.com/static/cloudanix-logo-p.png" +tags: ["packs", "cloudanix", "security"] +--- + +The Cloudanix pack is an add-on security pack that provides a dashboard to help you detect threats and unusual behavior +in your Kubernetes clusters. Cloudanix detects the following. + +- Files added or modified in sensitive directories + +- SSH into a container + +- Modifications to shell configuration files + +- Attempts to read sensitive files that contain credential information + +- Crypto mining + +The Cloudanix dashboard provides an interactive interface that displays the mapping between threat events and associated +container, pod, and node workloads. Additionally, Cloudanix identifies the user who initiated an activity identified as +a threat and the command that was used. + +You can also start Jira workflows and target specific workloads from the Cloudanix dashboard. + +## Versions Supported + + + + + +## Prerequisites + +- CPUs: 0.5 +- Memory: 256 MiB +- Kubernetes 1.19.x to 1.25.x +- Kernel version 4.5 and higher + +## Parameters + +The Cloudanix pack has the following parameters, which are auto-filled based on Palette user information. + +| Name | Description | +| ------------------- | -------------------------------------------------------------------------- | +| `userEmail` | The email address of the user who created the cluster and cluster profile. | +| `partnerIdentifier` | A Cloudanix unique identifier for Spectro Cloud. | +| `organizationId` | The organization tenant ID in Palette. | +| `userName` | Palette user name. | +| `accountName` | Palette cloud account name. | +| `accountType` | Cloud account type such as AWS or GCP, Azure, or others. | +| `accountId` | The user's cloud account ID. | +| `clusterName` | The name of the cluster. | +| `clusterIdentifier` | The cluster's unique identifier. | +| `clusterDomain` | The Palette cloud account type such as AWS, GCP, Azure, or others. | + +## Usage + +This Helm Chart installs four Cloudanix services to enable container security capabilities: + +
+ +- **config-cron**: A job that runs periodically in a Kubernetes cluster to maintain the configuration of Cloudanix + inventory and threat services. +- **misconfig-cron**: A job that captures Kubernetes misconfigurations and displays them on the Cloudanix dashboard. +- **inventory-service**: An inventory service that detects any new Kubernetes resources and displays them on the + Cloudanix dashboard. +- **threat-service**: A threat service that exports threat events and affected Kubernetes resources, which are visible + on the Cloudanix dashboard. + +From the **Workloads** page, click the **Risks** tab to view a list of failed threat rules. You can exclude resources, +such as pods and containers, from the risk findings. + +
+ +### Kubernetes 1.25 and higher + +When you use the Cloudanix 1.0.x pack with Kubernetes 1.25 and higher, you need to add the **Spectro Namespace Labeler** +add-on pack to your cluster profile. After you create the cluster profile, you then apply it to your cluster. + +Use the following information to find the **Spectro Namespace Labeler** add-on pack. + +- **Pack Type**: System App +- **Registry**: Public Repo +- **Pack Name**: Spectro Namespace Labeler +- **Pack Version**: 1.0.x or higher + +Below is the YAML file for the **Spectro Namespace Labeler** add-on pack. No action is required.
+ +```yaml +pack: +namespace: cluster-{{ .spectro.system.cluster.uid }} + +charts: + spectro-namespace-labeler: + namespace: cluster-{{ .spectro.system.cluster.uid }} + + labels: + cloudanix: pod-security.kubernetes.io/enforce=privileged,pod-security.kubernetes.io/enforce-version=v1.26 +``` + +As a final step, apply the cluster profile to your cluster. + +
+
+ +## Terraform + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "cloudanix" { + name = "cloudanix" + version = "0.0.6" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` + +## References + +- [Cloudanix Documentation](https://www.cloudanix.com/docs/introduction) diff --git a/docs/docs-content/integrations/collectord.md b/docs/deprecated/integrations/collectord.md similarity index 100% rename from docs/docs-content/integrations/collectord.md rename to docs/deprecated/integrations/collectord.md diff --git a/docs/deprecated/integrations/dex.md b/docs/deprecated/integrations/dex.md new file mode 100644 index 0000000000..6b96370670 --- /dev/null +++ b/docs/deprecated/integrations/dex.md @@ -0,0 +1,87 @@ +--- +sidebar_label: "Dex" +title: "Dex" +description: "Dex Authentication pack in Spectro Cloud" +type: "integration" +hide_table_of_contents: true +category: ["authentication", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/dex/blobs/sha256:78e381fe12509ed94c7c19cd6f6fc4e896ec66485364644dc1a40229fcf9d90d?type=image.webp" +tags: ["packs", "dex", "security"] +--- + +Dex is an identity service to drive authentication for Kubernetes API Server through the +[OpenID Connect](https://openid.net/connect/) plugin. Clients such as kubectl can act on behalf of users who can log in +to the cluster through any identity provider that dex supports. + +## Versions Supported + + + + + +- **2.35.1** + + + + + +- **2.30.0** + + + + + +- **2.28.0** + + + + + +- **2.25.0** + + + + + +- **2.21.0** + + + + +## Components + +Dex integration in Spectro Cloud will deploy the following components: + +- Dex. +- Dex Client (dex-k8s-authenticator). + +The integration will create self-signed certificates, will cross-configure Dex, Dex Client components & will set +appropriate flags on the Kubernetes API Server. + +## Ingress + +Follow below steps to configure Ingress on Dex + +1. Change Dex serviceType from "LoadBalancer" to "ClusterIP" (line #112) +2. Ingress (line #118) + - Enable Ingress; Change enabled from false to "true" + - Set Ingress rules like annotations, path, hosts, etc. + +Follow below steps to configure Ingress on Dex Client + +1. Change dex-k8s-authenticator serviceType from "LoadBalancer" to "ClusterIP" (line #312) +2. Ingress (line #320) + - Enable Ingress; Change enabled from false to "true" + - Set Ingress rules like annotations, path, hosts, etc. + +With these config changes, you can access Dex, Dex Client service(s) on the Ingress Controller LoadBalancer hostname / +IP + +## References + +- [Dex](https://github.com/dexidp/dex) + +- [Dex Documentation](https://dexidp.io/docs) + +- [Dex K8s Authenticator](https://github.com/mintel/dex-k8s-authenticator) diff --git a/docs/deprecated/integrations/external-dns.md b/docs/deprecated/integrations/external-dns.md new file mode 100644 index 0000000000..e4f0ee19e1 --- /dev/null +++ b/docs/deprecated/integrations/external-dns.md @@ -0,0 +1,166 @@ +--- +sidebar_label: "ExternalDNS" +title: "External DNS" +description: "ExternalDNS pack in Spectro Cloud" +type: "integration" +hide_table_of_contents: true +category: ["load balancers", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/external-dns/blobs/sha256:1bfd6dceb0b50efee4068cd6321511f6b24be86e2d613e0a8206e716ba7aea3f?type=image.webp" +tags: ["packs", "external-dns", "network"] +--- + +The integration helps configure public DNS servers with information about Kubernetes services to make them discoverable. + +## Prerequisites + +Providers have to be set up for this pack to get deployed and work seamlessly. For a list of supported providers and the +prerequisites to be set up, visit [providers](https://github.com/kubernetes-sigs/external-dns#status-of-providers) +section + +## Versions Supported + + + + + +- **0.13.1** +- **0.12.2** + + + + +- **0.7.2** + + + + + +## Components + +Integration deploys the following components: + +- External DNS + +## ExternalDNS for Services on AWS Route53 Example + +### Setup prerequisites for AWS Route53 + +- Create the following IAM policy in the AWS account. This is needed for externalDNS to list and create Route53 + resources. + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": ["route53:ChangeResourceRecordSets"], + "Resource": ["arn:aws:route53:::hostedzone/*"] + }, + { + "Effect": "Allow", + "Action": ["route53:ListHostedZones", "route53:ListResourceRecordSets"], + "Resource": ["*"] + } + ] +} +``` + +- Create an IAM role and associate the policy created above. Make a note of the role ARN which will be used in + ExternalDNS deployment later +- Setup hosted zone in AWS Route53 + ```bash + # Create a DNS zone through AWS CLI + aws route53 create-hosted-zone --name "external-dns-test.my-org.com." --caller-reference "external-dns-test-$(date +%s)" + ``` + +### Deploy ExternalDNS on the cluster + +- Add ExternalDNS pack to the desired profile and deploy it to the cluster. You may want to configure the following in + pack values.yaml + + - Configure AWS provider details (line #86) + + - Credentials, Zone Type + - AssumeRoleArn with the Role ARN created above + + - Configure txtOwnerId with the ID of the hosted zone created above (line #366) + ```bash + aws route53 list-hosted-zones-by-name --output json --dns-name "external-dns-test.my-org.com." | jq -r '.HostedZones[0].Id' + ``` + - Optionally change externalDNS policy and logLevel + +### Deploy Ingress Controller on the cluster + +- Deploy one of the Ingress Controller on the cluster + +### Deploy Applications with Ingress on the cluster + +- Add Prometheus-Operator addon to the same profile where ExternalDNS is added + + - Change serviceType to ClusterIP (line #408) + - Enable Ingress for the add-on packs. In this example, let us use Prometheus-Operator integration. Ingress config for + Grafana will look like the following: + + ```yaml + #Ingress config + ingress: + ## If true, Grafana Ingress will be created + ## + enabled: true + + hosts: + - grafana.external-dns-test.my-org.com + + ## Path for grafana ingress + path: / + ``` + + When Prometheus-Operator gets deployed in the Cluster, Ingress resource for Grafana will also get created and will + look like + + ```yaml + apiVersion: extensions/v1beta1 + kind: Ingress + metadata: + name: grafana-ingress + namespace: monitoring + spec: + rules: + - host: grafana.external-dns-test.my-org.com + http: + paths: + - backend: + serviceName: grafana + servicePort: 80 + path: / + status: + loadBalancer: + ingress: + - hostname: a9a2eadb64c8e4c2fb37a1f69afb0a30-330939473.us-west-2.elb.amazonaws.com + ``` + +### Verify ExternalDNS (Ingress example) + +- If all goes well, after 2 minutes, ExternalDNS would have inserted 2 records on your hosted zone + + ```bash + aws route53 list-resource-record-sets --output json --hosted-zone-id "/hostedzone/ZEWFWZ4R16P7IB" \ + --query "ResourceRecordSets[?Name == 'grafana.external-dns-test.my-org.com.']|[?Type == 'A']" + ``` + +- After which, if you access http://grafana.external-dns-test.my-org.com on your browser, you will be able to view the + Grafana login page + +### Troubleshooting + +- Make sure Ingress resource gets created for the Applications deployed and a LoadBalancer hostname / IP address is set + on the Ingress resource +- Check the `external-dns` pod for any issues with ExternalDNS not inserting records. If required, change `logLevel` to + debug to see additional info on the logs + +## References + +- [External DNS Home](https://github.com/kubernetes-sigs/external-dns) +- [External DNS Helm Chart](https://github.com/bitnami/charts/tree/master/bitnami/external-dns) diff --git a/docs/deprecated/integrations/external-secrets-operator.md b/docs/deprecated/integrations/external-secrets-operator.md new file mode 100644 index 0000000000..ca263a2dd4 --- /dev/null +++ b/docs/deprecated/integrations/external-secrets-operator.md @@ -0,0 +1,102 @@ +--- +sidebar_label: "external-secrets-operator" +title: "External Secrets Operator" +description: "external-secrets-operator pack in Palette" +hide_table_of_contents: true +type: "integration" +category: ["authentication", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/external-secrets-operator/blobs/sha256:ee6f7f347d381852582f688c70b2564b0a346c2b2ed1221310889075a4453c6d?type=image.webp" +tags: ["packs", "external-secrets-operator", "security"] +--- + +External Secrets Operator (ESO) is a Kubernetes operator that integrates external secret management systems like AWS +Secrets Manager, HashiCorp Vault, Google Secrets Manager, or Azure Key Vault. The operator reads information from +external APIs and automatically injects the values into a Kubernetes Secret. + +You can use the External-Secrets-Operator Add-on pack as an authenticator in Palette. + +:::info + +Starting from Palette version 3.1, Palette no longer supports upgrades to Kubernetes External Secrets since this is +reaching end of life. Migrate or switch to using External Secrets operator instead. + +::: + +## Versions Supported + + + + + +- **0.7.1** +- **0.6.0** + + + + + +- **0.5.6** + + + + +### Sample SecretStore + +
+ +```yml +apiVersion: [external-secrets.io/v1beta1](http://external-secrets.io/v1beta1) +kind: ExternalSecret +metadata: + name: vault-example # Custom name +spec: + refreshInterval: "15s" + secretStoreRef: + name: vault-backend # Custom value + kind: SecretStore + target: + name: mysecretfoobar + data: + - secretKey: foobar + remoteRef: + key: secret/foo # custom value + property: my-value # custom value + +``` + +### Sample ExternalSecret YAML file + +
+ +```yml +apiVersion: external-secrets.io/v1beta1 +kind: SecretStore +metadata: + name: custom-name +spec: + provider: + vault: + server: "http://12.34.567.133:0000" # custom server end point + path: "secret" # custom path + version: "v2" # custom version + auth: + # points to a secret that contains a vault token + # https://www.vaultproject.io/docs/auth/token + tokenSecretRef: + name: "vault-token1" # Custom name and key + key: "token1" +--- +apiVersion: v1 +kind: Secret +metadata: + name: vault-token1 +data: + token: cm9vdA== # "root" # custome value +``` + +## References + +- [Amazon IAM-Policy-Examples-ASM-Secrets](https://docs.aws.amazon.com/mediaconnect/latest/ug/iam-policy-examples-asm-secrets.html) + +- [External Secrets](https://github.com/external-secrets/external-secrets) diff --git a/docs/deprecated/integrations/falco.md b/docs/deprecated/integrations/falco.md new file mode 100644 index 0000000000..15787d9a98 --- /dev/null +++ b/docs/deprecated/integrations/falco.md @@ -0,0 +1,42 @@ +--- +sidebar_label: "Falco" +title: "Falco" +description: "Integration of the Falco add on into Spectro Cloud" +hide_table_of_contents: true +type: "integration" +category: ["security", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/falco/blobs/sha256:4e37461d0a31959ca8af65128329750ca3417e883e7e4ba17ee085b01a383a27?type=image.webp" +tags: ["packs", "falco", "security"] +--- + +Falco integration is a behavioral activity monitor designed to detect anomalous activity in your applications. You can +use Falco to monitor the run-time security of your Kubernetes applications and internal components. + +## Versions Supported + + + + + +- **1.16.3** + + + + +- **1.0.11** +- **1.0.10** + + + + + +- **1.13.1** + + + + + +## References + +- [Falco Helm Chart GitHub](https://github.com/falcosecurity/charts/tree/master/charts/falco) diff --git a/docs/docs-content/integrations/flannel-cni.md b/docs/deprecated/integrations/flannel-cni.md similarity index 100% rename from docs/docs-content/integrations/flannel-cni.md rename to docs/deprecated/integrations/flannel-cni.md diff --git a/docs/docs-content/integrations/fluentbit.md b/docs/deprecated/integrations/fluentbit.md similarity index 100% rename from docs/docs-content/integrations/fluentbit.md rename to docs/deprecated/integrations/fluentbit.md diff --git a/docs/docs-content/integrations/frp.md b/docs/deprecated/integrations/frp.md similarity index 100% rename from docs/docs-content/integrations/frp.md rename to docs/deprecated/integrations/frp.md diff --git a/docs/docs-content/integrations/gce.md b/docs/deprecated/integrations/gce.md similarity index 100% rename from docs/docs-content/integrations/gce.md rename to docs/deprecated/integrations/gce.md diff --git a/docs/deprecated/integrations/generic-vm-libvirt.md b/docs/deprecated/integrations/generic-vm-libvirt.md new file mode 100644 index 0000000000..2f8a63d580 --- /dev/null +++ b/docs/deprecated/integrations/generic-vm-libvirt.md @@ -0,0 +1,321 @@ +--- +sidebar_label: "generic-vm-libvirt" +title: "Generic Virtual Machines Libvirt" +description: "Choosing Libvirt Generic Virtual Machine within the Palette console" +hide_table_of_contents: true +type: "integration" +category: ["system app", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/generic-vm-libvirt/blobs/sha256:23e1ba27947158ccf1ae36913601011508a55103ce1bdb517a175d752fb35eea?type=image.webp" +tags: ["packs", "generic-vm-libvirt", "system app"] +--- + +Generic-VM-Libvirt is a Palette Add-on pack used to simplify deploying the virtual machine applications from a cluster +profile or a system profile. Generic-VM-Libvirt extracts all Terraform constructs inside the pack and exposes nothing +but the values. Users will then have the ability to modify the add-on pack for the different applications. + +## Version Supported + + + + +- **1.0.2** +- **1.0.0** + + + + +
+ +## Configuring Palette Generic VM Libvirt Add-on + +To configure the Generic-VM-Libvirt add-on pack for the application cluster, begin by editing the manifest namespace +value. + +`cluster-{{ .spectro.system.cluster.uid }}` + +**Example** + +```yaml +namespace: jet-system +``` + +If multiple instances of this pack have to be deployed on the cluster for different virtual machine applications, then +modify '`spectrocloud.com/display-name`' and '`releaseNameOverride`' with distinctive names to make it unique across all +the packs in the cluster. + +
+ +```yaml +spectrocloud.com/display-name: vm-app-1 +releaseNameOverride: +``` + +
+ +## Generic-VM-Libvirt Pack Manifest + +
+ +```yaml +pack: + # for app cluster, namespace value should be "cluster-{{ .spectro.system.cluster.uid }}" + namespace: jet-system + + # if multiple instance of this pack has to be deployed on the cluster for different vm applications + # then modify 'spectrocloud.com/display-name' and 'releaseNameOverride' with unique names to make it + # unique across all the packs in the cluster + # spectrocloud.com/display-name: vm-app-1 + # releaseNameOverride: + # generic-vm-libvirt: vm-app-1 + +charts: + generic-vm-libvirt: + providers: + source: "dmacvicar/libvirt" + version: "0.6.14" + name: vm-app-1 + image: https://cloud-images.ubuntu.com/releases/xenial/release/ubuntu-16.04-server-cloudimg-amd64-disk1.img + + # uncomment the below line and comment the above line if the image is present within the host. + # image="/opt/spectrocloud/ubuntu-16.04-server-cloudimg-amd64-disk1.img" + hardware: + cpu: 2 + memory: 6 #in GB + network: ["br-int"] + rootDisk: + size: 50 #in GB + pool: ehl_images + dataDisks: + - size: 20 #in GB + pool: ehl_data + persisted: true + - size: 25 #in GB + pool: ehl_data + persisted: true + cloudInit: + userData: | + #cloud-config + # vim: syntax=yaml + # Note: Content strings here are truncated for example purposes. + ssh_pwauth: true + chpasswd: + list: + - ubuntu:welcome + expire: false + metaData: | + networkConfig: | + version: 2 + ethernets: + ens3: + dhcp4: true + + # preExecCmd & postExecCmd gets executed in each reconcile loop which runs at an interval of ~2 mins + # If you want to run some command or script only whenever VM is getting creating or after VM is destroyed + # then you can use 'preVMInitCmd' and 'postVMInitCmd' respectively + # preExecCmd: "bash /var/files/pre-exec.sh" + # postExecCmd: "bash /var/files/pre-exec.sh" + + # preVMInitCmd & postVMInitCmd gets executed only when VM is being created/recreated and after VM is created/recreated respectively + preVMInitCmd: "" + postVMInitCmd: "" + + # For first time deployment, preVMDestroyCmd won't be invoked. If there is any change in cloud-init then vm resource will get recreated, + # and 'preVMDestroyCmd' will be invoked before deleting VM and once preVMDestroyCmd gets executed successfully, then only VM resource will be deleted. + # Once VM is deleted then before another VM is created, preVMInitCmd will be invoked + + # preVMDestroyCmd can also be uded to ssh into vm or call the rest api for the application running inside vm before vm is terminated + # or to download the file and use it later once new vm is provisioned + preVMDestroyCmd: "" + + # extraDomainHclConfig: | + # cpu { + # mode = "host-passthrough" + # } + + # mounts section can be used to mount data inside existing config maps or secrets into the pod as files where pre and post + # hooks are executed + # so that data present in config map or secret can be accessed while executing pre and post exec hooks + mounts: + configMap: + # - name: system-config + # path: /data/system-config + # - name: system-config-2 + # path: /data/system-config-2 + secret: + # - name: system-config + # path: /data/system-config + # - name: system-config-2 + # path: /data/system-config-2 + + # envs section can be used to inject data inside existing config maps or secrets into the pod as env variables + # where pre and post hooks are executed + # so that data present in config map or secret can be accessed while executing pre and post exec hooks + envs: + configMap: + # - name: database-app-config + # env: DATABASE_USER + # dataKey: "db.user" + secret: + # - name: database-app-secret + # env: DATABASE_PASSWORD + # dataKey: "db.password" + + # files present in below section will be added to the pod and will be accessible while executing + # pre and post exec hooks and absolute file path would be '/var/files/' + files: + # - name: pre-exec.sh + # content: | + # #!/bin/bash + # echo "I am pre exec" + # - name: post-exec.sh + # content: | + # #!/bin/bash + # echo "I am post exec" +``` + +## Virtual Machine Hooks + +The Generic-VM-Libvirt pack supports various hooks, while deploying VM applications and supports multiple use-cases of +customizing workflow, as customers require. + +
+ +## Using preExecCmd and postExecCmd + +The **preExecCmd** and **postExecCmd** commands will be executed in every pod reconciliation. The loop runs at +approximately a 2-minute interval. + +If you want to run the command or script only, whenever the virtual machine is getting created or after the virtual +machine is destroyed, use **preVMInitCmd** and **postVMInitCmd**, respectively. + +
+ +```yaml +preExecCmd: "bash /var/files/pre-exec.sh" +``` + +```yaml +postExecCmd: "bash /var/files/pre-exec.sh" +``` + +
+ +## Using preVMInitCmd and postVMInitCmd + +The **preVMInitCmd** command is executed, only when the virtual machine is being created or recreated. Likewise, the +**postVMInitCmd** command is executed only after the virtual machine is created or recreated. + +**Note**: These commands will not be executed in each reconciliation. + +
+ +```yaml +preVMInitCmd: "echo 'Hey! Hang on tight. I am gonna create a VM.'" +``` + +```yaml +postVMInitCmd: "echo 'Ooho! VM is created.'" +``` + +
+ +## Using preVMDestroyCmd + +Any command or script provided in this virtual machine hook will execute before the VM gets destroyed. It will be +executed only when the VM is being deleted. A virtual machine deletion can happen for any reason, like changing anything +in cloud-init or removing the pack from the profile. + +
+ +```yaml +preVMDestroyCmd: "" +``` + +
+ +:::info + +During a first-time deployment, preVMDestroyCmd will not be invoked. However, if there is any change in +cloud-init, then the VM resource will be recreated, preVMDestroyCmd will be invoked before deleting the VM, and once +preVMDestroyCmd is executed successfully, only then will the VM resource be deleted. + +
+
+Once the virtual machine is deleted and before another virtual machine is created, preVMInitCmd will be invoked. + +::: + +
+ +## Files + +Files presented in this section will be added to the pod, where the pre-and-post exec hooks are executed. + +
+ +```yaml +files: + - name: pre-exec.sh + content: | + #!/bin/bash + echo "I am pre exec" + - name: post-exec.sh + content: | + #!/bin/bash + echo "I am post exec" +extraDomainHclConfig: | + cpu { + mode = "host-passthrough" + } +``` + +
+ +## Mounts + +Mount the data inside the existing configuration maps or secrets into the pod as files, where pre-and-post hooks are +executed. This allows the data present in the configuration map or the secrets file to be accessible while running +pre-and-post exec hooks. + +
+ +```yaml +mounts: + configMap: + - name: system-config + path: /data/system-config + - name: system-config-2 + path: /data/system-config-2 + secret: + - name: system-config + path: /data/system-config + - name: system-config-2 + path: /data/system-config-2 +``` + +
+ +## Environment Variables + +The ENVS section can inject data inside the existing config maps or secrets into the pod as environment variables, where +pre-and post-hooks are executed so that data present in the config map or the secret file can be accessed while running +pre-and-post exec hooks. + +
+ +```yaml +envs: + configMap: + - name: database-app-config + env: DATABASE_USER + dataKey: "db.user" + secret: + - name: database-app-secret + env: DATABASE_PASSWORD + dataKey: "db.password" +``` + +## References + +- [Libvirt Apps](https://libvirt.org/apps.html) diff --git a/docs/deprecated/integrations/generic-vm-vsphere.md b/docs/deprecated/integrations/generic-vm-vsphere.md new file mode 100644 index 0000000000..2fae567fda --- /dev/null +++ b/docs/deprecated/integrations/generic-vm-vsphere.md @@ -0,0 +1,351 @@ +--- +sidebar_label: "generic-vm-vsphere" +title: "Generic Virtual Machine vSphere" +description: "Choosing vSphere Generic Virtual Machine within the Palette console" +hide_table_of_contents: true +type: "integration" +category: ["system app", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/generic-vm-vsphere/blobs/sha256:3b121dca3cbc7fed0153d3e1c8c3df20076ec200e091085a3a281ba08cb2261e?type=image.webp" +tags: ["packs", "generic-vm-vsphere", "system app"] +--- + +Generic-VM-vSphere is a Palette Add-on pack used to simplify deploying the virtual machine resource from a cluster +profile or a system profile. Generic-VM-vSphere extracts all Terraform constructs inside the pack and exposes nothing +but the values. Users will then have the ability to modify the add-on pack for the different applications. + +
+ +## Version Supported + + + + +- **1.0.4** +- **1.0.0** + + + + +
+ +## Configuring Generic-VM-vSphere + +To configure the Generic-VM-vSphere Add-on pack for the application cluster, the namespace value should be as follows: + +`cluster-{{ .spectro.system.cluster.uid }}`
+ +```yaml +namespace: cluster-{{ .spectro.system.cluster.uid }} +``` + +If multiple instances of this pack has to be deployed on the cluster for different virtual machine applications, then +modify '`spectrocloud.com/display-name`' and '`releaseNameOverride`' with different names to make it unique across all +the packs in the cluster. + +
+ +```yaml +spectrocloud.com/display-name: vm-app-1 +releaseNameOverride: +``` + +
+
+ +## Generic-VM-vSphere Pack Manifest + +
+ +```yaml +pack: + # for app cluster, namespace value should be "cluster-{{ .spectro.system.cluster.uid }}" + namespace: jet-system + + # if multiple instance of this pack has to be deployed on the cluster for different vm applications + # then modify 'spectrocloud.com/display-name' and 'releaseNameOverride' with unique names to make it + # unique across all the packs in the cluster + # spectrocloud.com/display-name: vm-app-1 + # releaseNameOverride: + # generic-vm-vsphere: vm-app-1 + +charts: + generic-vm-vsphere: + providers: + source: "hashicorp/vsphere" + version: "2.2.0" + name: vm-app-1 + hardware: + cpu: 2 + memory: 6 #in GB + dataDisks: + - size: 20 #in GB + - size: 25 #in GB + + # To use an image from a remote url please uncomment the below lines and comment out the vmTemplate section. + # ovaTemplate: + # remote_ovf_url: "https://192.168.100.12:8443/artifactory/generic-eis-all/ehl-guest/sles-154-cloud-kube-v1.21.10-20220718141926-014.ova" + # name: system-cluster-ova + # network: + # - name: "VM Network" + # value: "VLAN-909" + # disk: + # size: 40 + vmTemplate: "spectro-templates/ubuntu-focal-20.04-cloudimg-20220207" + guestId: "ubuntu64Guest" #ubuntu64Guest for ubuntu, sles15_64Guest for sles etc + scsiType: "lsilogic" + + cloudInit: + # cloud init properties can be injected in vsphere via guest extra config (guestExtraConfig) or via vapp properties (vAppProperties) + # if cloud init type is vAppProperties then add data in vAppProperties: section and leave guestExtraConfig commented + # else if cloud init type is guestExtraConfig then add data in guestExtraConfig: section and leave vAppProperties commented + type: guestExtraConfig # valid values is one of ["vAppProperties" or "guestExtraConfig"] + userData: | + #cloud-config + # vim: syntax=yaml + # Note: Content strings here are truncated for example purposes. + ssh_pwauth: true + chpasswd: + list: + - ubuntu:welcome + expire: false + metaData: | + + networkConfig: | + version: 2 + ethernets: + ens3: + dhcp4: true + + guestExtraConfig: + "guestinfo.network_config": base64encode(data.template_file.network_config.rendered) + "guestinfo.network_config.encoding": "base64" + "guestinfo.userdata": base64encode(data.template_file.user_data.rendered) + "guestinfo.userdata.encoding": "base64" + + vAppProperties: + #instance-id: vm-app-1 + #hostname: vm-app-1 + #public-keys: "ssh-rsa AAAAB3....NGJwwlOmNrw== spectro@spectro" + #password: abcde12345 + #user-data: data.template_file.user_data.rendered + + # 'extraVMHclConfig' can be used to provide extra configuration in the virtual machine and config should be provided in HCL + # format + # extraVMHclConfig: | + # cdrom { + # client_device = true + # } + + # preExecCmd & postExecCmd gets executed in each reconcile loop which runs at an interval of ~2 mins + # If you want to run some command or script only whenever VM is getting creating or after VM is destroyed + # then you can use 'preVMInitCmd' and 'postVMInitCmd' respectively + # preExecCmd: "bash /var/files/pre-exec.sh" + # postExecCmd: "bash /var/files/pre-exec.sh" + + # preVMInitCmd & postVMInitCmd gets executed only when VM is being created/recreated and after VM is created/recreated respectively + preVMInitCmd: "" + postVMInitCmd: "" + + # For first time deployment, preVMDestroyCmd won't be invoked. If there is any change in cloud-init then vm resource will get recreated, + # and 'preVMDestroyCmd' will be invoked before deleting VM and once preVMDestroyCmd gets executed successfully, then only VM resource will be deleted. + # Once VM is deleted then before another VM is created, preVMInitCmd will be invoked + + # preVMDestroyCmd can also be used to ssh into vm or call the rest api for the application running inside vm before vm is terminated + # or to download the file and use it later once new vm is provisioned + preVMDestroyCmd: "" + + # mounts section can be used to mount data inside existing config maps or secrets into the pod as files where pre and post + # hooks are executed + # so that data present in config map or secret can be accessed while executing pre and post exec hooks + mounts: + configMap: + # - name: system-config + # path: /data/system-config + # - name: system-config-2 + # path: /data/system-config-2 + secret: + # - name: system-config + # path: /data/system-config + # - name: system-config-2 + # path: /data/system-config-2 + + # envs section can be used to inject data inside existing config maps or secrets into the pod as env variables + # where pre and post hooks are executed + # so that data present in config map or secret can be accessed while executing pre and post exec hooks + envs: + configMap: + # - name: database-app-config + # env: DATABASE_USER + # dataKey: "db.user" + secret: + # - name: database-app-secret + # env: DATABASE_PASSWORD + # dataKey: "db.password" + + # files present in below section will be added to the pod and will be accessible while executing + # pre and post exec hooks and absolute file path would be '/var/files/' + files: + # - name: pre-exec.sh + # content: | + # #!/bin/bash + # echo "I am pre exec" + # - name: post-exec.sh + # content: | + # #!/bin/bash + # echo "I am post exec" +``` + +## Virtual Machine Hooks + +The Generic-VM-vSphere pack supports various hooks while deploying VM applications and supports multiple use-cases of +customizing workflow, as customers require. + +
+ +## Using extraVMHclConfig + +The extraVMHclConfig command can be used to provide an extra configuration in the virtual machine and the configuration +file should be provided in HashiCorp Configuration Language (HCL) format. + +```terraform +# extraVMHclConfig: | +# cdrom { +# client_device = true +# } +``` + +## Using preExecCmd and postExecCmd + +The **preExecCmd** and **postExecCmd** commands will be executed in every pod reconciliation. The loop runs at +approximately a 2-minute interval. + +**preExecCMD** and **postVMInitCmd** are used to execute commands or scripts prior to virtual machine creation and after +virtual machine creation respectively. + +
+ +```yaml +preExecCmd: "bash /var/files/pre-exec.sh" +``` + +```yaml +postExecCmd: "bash /var/files/pre-exec.sh" +``` + +
+ +## Using preVMInitCmd and postVMInitCmd + +The **preVMInitCmd** command is executed, only when the virtual machine is being created or recreated. Likewise, the +**postVMInitCmd** command is executed only after the virtual machine is created or recreated. + +**Note**: These commands will not be executed in each reconciliation. + +
+ +```yaml +preVMInitCmd: "echo 'Hey! Hang on tight. I am gonna create a VM.'" +``` + +```yaml +postVMInitCmd: "echo 'Ooho! VM is created.'" +``` + +
+ +## Using preVMDestroyCmd + +Any command or script provided in this virtual machine hook will execute before the virtual machine is destroyed. It +will be executed only when the VM is getting deleted. A virtual machine deletion can happen for any reason, like +changing anything in cloud-init or removing the pack from the profile. + +
+ +```yaml +preVMDestroyCmd: "" +``` + +
+ +:::info + +During a first-time deployment, preVMDestroyCmd won't be invoked. However, if there is any change in cloud-init, +then the VM resource will be recreated, preVMDestroyCmd will be invoked before deleting the VM, and once preVMDestroyCmd +is executed successfully, only then the VM resource will be deleted. + +
+
+Once the VM is deleted and before another virtual machine is created, preVMInitCmd will be invoked. + +::: + +
+
+ +## Mounts + +Mount the data inside the existing configuration map or secret into the pod as files, where pre-and-post hooks are +executed. This allows the data present in the configuration map or the secrets file to be accessible while running +pre-and-post exec hooks. + +
+ +```yaml +mounts: + configMap: + # - name: system-config + # path: /data/system-config + # - name: system-config-2 + # path: /data/system-config-2 + secret: + # - name: system-config + # path: /data/system-config + # - name: system-config-2 + # path: /data/system-config-2 +``` + +
+ +## Environment Variables + +The ENVS section can inject data inside the existing config maps or secrets into the pod as environment variables, where +pre-and post-hooks are executed so that data present in the config map or the secret file can be accessed while running +pre-and-post exec hooks. + +
+ +```yaml +envs: + configMap: + # - name: database-app-config + # env: DATABASE_USER + # dataKey: "db.user" + secret: + # - name: database-app-secret + # env: DATABASE_PASSWORD + # dataKey: "db.password" +``` + +
+ +## Files + +Files present in this section will be added to the pod and will be accessible while executing pre-and-post execution +hooks and absolute file path would be '/var/files/\'. + +
+ +```yaml +files: +# - name: pre-exec.sh +# content: | +# #!/bin/bash +# echo "I am pre exec" +# - name: post-exec.sh +# content: | +# #!/bin/bash +# echo "I am post exec" +``` + +
diff --git a/docs/docs-content/integrations/grafana-spectrocloud-dashboards.md b/docs/deprecated/integrations/grafana-spectrocloud-dashboards.md similarity index 100% rename from docs/docs-content/integrations/grafana-spectrocloud-dashboards.md rename to docs/deprecated/integrations/grafana-spectrocloud-dashboards.md diff --git a/docs/docs-content/integrations/harbor-edge.md b/docs/deprecated/integrations/harbor-edge.md similarity index 100% rename from docs/docs-content/integrations/harbor-edge.md rename to docs/deprecated/integrations/harbor-edge.md diff --git a/docs/deprecated/integrations/heartbeat.md b/docs/deprecated/integrations/heartbeat.md new file mode 100644 index 0000000000..2c36159582 --- /dev/null +++ b/docs/deprecated/integrations/heartbeat.md @@ -0,0 +1,30 @@ +--- +sidebar_label: "heart-beat" +title: "Heartbeat" +description: "Heart Beat monitoring pack in Spectro Cloud" +hide_table_of_contents: true +type: "integration" +category: ["monitoring", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.dev.spectrocloud.com/v1/heartbeat/blobs/sha256:19fec69ae172c3e54d5fb09c176517cf7bfeb1bc740bde65c200e14115510313?type=image.webp" +tags: ["packs", "heart-beat", "monitoring"] +--- + +Heartbeat is a lightweight daemon installed to a remote server for periodically checking the status of the services and +determine whether they are currently available and reachable. Heartbeat is useful to verify that your service level +agreements are met during the service uptime. + +## Versions Supported + + + + + +**1.0.0** + + + + +## References + +- [Heartbeat Reference Documentation](https://www.elastic.co/guide/en/beats/heartbeat/current/index.html) diff --git a/docs/deprecated/integrations/hello-universe.md b/docs/deprecated/integrations/hello-universe.md new file mode 100644 index 0000000000..3b4684a7a0 --- /dev/null +++ b/docs/deprecated/integrations/hello-universe.md @@ -0,0 +1,179 @@ +--- +sidebar_label: "Hello Universe" +title: "Hello Universe" +description: "Learn about the Hello Universe pack and how you can use it within your Kubernetes clusters." +hide_table_of_contents: true +type: "integration" +category: ["app services", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://raw.githubusercontent.com/spectrocloud/pack-central/main/packs/hello-universe-1.1.1/logo.png" +tags: ["packs", "hello-universe", "app-services"] +--- + +[Hello Universe](https://github.com/spectrocloud/hello-universe) is a demo web application utilized to help users learn +more about [Palette](https://docs.spectrocloud.com/introduction) and its features. + +You can deploy it using two preset configurations: + +- A standalone front-end application. It provides a click counter that is saved locally and displays Spectro Cloud + themed images. +- A three-tier application with a front-end tier, API server, and PostgreSQL database. It provides a click counter that + is saved in the deployed database and displays Spectro Cloud themed images. You can read more about this configuration + on the Hello Universe + [README](https://github.com/spectrocloud/hello-universe?tab=readme-ov-file#reverse-proxy-with-kubernetes). + +:::info + +The three-tier application configuration is only supported by version 1.1.2 of the pack. + +::: + +## Versions Supported + + + + + +## Prerequisites + +- A Palette account. + +- A cluster profile where the Hello Universe pack can be integrated. + +- A Palette cluster with port `:8080` available. If port 8080 is not available, you can set a different port in the + **values.yaml** file. + +- If you are using the **Enable Hello Universe API** preset, you will need the `:3000` port available on your cluster + too. Check out the [Usage](#usage) section for further details. + +- Ensure sufficient CPU resources within the cluster to allocate a minimum of 500 milliCPU and a maximum of 500 milliCPU + per replica. + +## Parameters + +The following parameters are applied to the **hello-universe.yaml** manifest through the **values.yaml** file. Users do +not need to take any additional actions regarding these parameters. + +| **Parameter** | **Description** | **Default Value** | **Required** | +| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ------------ | +| `manifests.namespace` | The namespace in which the application will be deployed. | `hello-universe` | Yes | +| `manifests.images.hellouniverse` | The [`hello-universe`](https://github.com/spectrocloud/hello-universe) application image that will be utilized to create the front-end containers. | `ghcr.io/spectrocloud/hello-universe:1.1.2`/ `ghcr.io/spectrocloud/hello-universe:1.1.2-proxy` | Yes | +| `manifests.images.hellouniverseapi` | The [`hello-universe-api`](https://github.com/spectrocloud/hello-universe-api) application image that will be utilized to create the API containers. | `ghcr.io/spectrocloud/hello-universe-api:1.0.12` | No | +| `manifests.images.hellouniversedb` | The [`hello-universe-db`](https://github.com/spectrocloud/hello-universe-db) application image that will be utilized to create the database containers. | `ghcr.io/spectrocloud/hello-universe-db:1.0.2` | No | +| `manifests.apiEnabled` | The flag that indicates whether to deploy the UI application as standalone or together with the API server. | `false` | Yes | +| `manifests.port` | The cluster port number on which the service will listen for incoming traffic. | `8080` | Yes | +| `manifests.replicas` | The number of Pods to be created. | `1` | Yes | +| `manifests.dbPassword` | The base64 encoded database password to connect to the API database. | `REPLACE_ME` | No | +| `manifests.authToken` | The base64 encoded auth token for the API connection. | `REPLACE_ME` | No | + +## Usage + +The Hello Universe pack has two presets that you can select: + +- **Disable Hello Universe API** configures Hello Universe as a standalone frontend application. This is the default + configuration of the pack. +- **Enable Hello Universe API** configures Hello Universe as a three-tier application with a frontend, API server, and + Postgres database. + +To utilize the Hello Universe pack, create either a +[full Palette cluster profile](https://docs.spectrocloud.com/profiles/cluster-profiles/create-cluster-profiles/create-full-profile) +or an +[add-on Palette cluster profile](https://docs.spectrocloud.com/profiles/cluster-profiles/create-cluster-profiles/create-addon-profile/) +and add the pack to your profile. You can select the preset you wish to deploy on the cluster profile creation page. + +If your infrastructure provider does not offer a native load balancer solution, such as VMware and MAAS, the +[MetalLB](https://docs.spectrocloud.com/integrations/metallb) pack must be included to the cluster profile to help the +LoadBalancer service specified in the manifest obtain an IP address. + +After defining the cluster profile, use it to deploy a new cluster or attach it as an add-on profile to an existing +cluster. + +Once the cluster status displays **Running** and **Healthy**, access the Hello Universe application through the exposed +service URL along with the displayed port number. + +## Terraform + +You can reference the Hello Universe pack in Terraform with the following data resource. + +```hcl +data "spectrocloud_registry" "community_registry" { + name = "Palette Registry" +} +data "spectrocloud_pack" "hellouniverse" { + name = "hello-universe" + version = "1.1.2" + registry_uid = data.spectrocloud_registry.community_registry.id +} +``` + + + + + +## Prerequisites + +- A Palette account. + +- A cluster profile where the Hello Universe pack can be integrated. + +- A Palette cluster with port `:8080` available. If port 8080 is not available, you can set a different port in the + **values.yaml** file. + +- Ensure sufficient CPU resources within the cluster to allocate a minimum of 100 milliCPU and a maximum of 200 milliCPU + per replica. + +## Parameters + +The following parameters are applied to the **hello-universe.yaml** manifest through the **values.yaml** file. Users do +not need to take any additional actions regarding these parameters. + +| **Parameter** | **Description** | **Default Value** | **Required** | +| --------------------------------- | ------------------------------------------------------------------------------ | ------------------------------------------- | ------------ | +| `manifests.namespace` | The namespace in which the application will be deployed. | `hello-universe` | No | +| `manifests.images.hello-universe` | The application image that will be utilized to create the containers. | `ghcr.io/spectrocloud/hello-universe:1.1.1` | No | +| `manifests.port` | The cluster port number on which the service will listen for incoming traffic. | `8080` | No | +| `manifests.replicas` | The number of Pods to be created. | `1` | No | + +## Usage + +To utilize the Hello Universe pack, create either a +[full Palette cluster profile](../profiles/cluster-profiles/create-cluster-profiles/create-full-profile.md) or an +[add-on Palette cluster profile](../profiles/cluster-profiles/create-cluster-profiles/create-addon-profile/create-addon-profile.md) +and add the pack to your profile. + +If your infrastructure provider does not offer a native load balancer solution, such as VMware and MAAS, the +[MetalLB](./metallb.md) pack must be included to the cluster profile to help the LoadBalancer service specified in the +manifest obtain an IP address. + +After defining the cluster profile, use it to deploy a new cluster or attach it as an add-on profile to an existing +cluster. + +Once the cluster status displays **Running** and **Healthy**, access the Hello Universe application through the exposed +service URL along with the displayed port number. + +## Terraform + +You can reference the Hello Universe pack in Terraform with the following data resource. + +```hcl +data "spectrocloud_registry" "community_registry" { + name = "Palette Registry" +} +data "spectrocloud_pack" "hellouniverse" { + name = "hello-universe" + version = "1.1.1" + registry_uid = data.spectrocloud_registry.community_registry.id +} +``` + + + + + +## References + +- [Hello Universe GitHub Repository](https://github.com/spectrocloud/hello-universe) + +- [Deploy a Custom Pack Tutorial](../tutorials/profiles/deploy-pack.md) + +- [Registries and Packs](../registries-and-packs/registries-and-packs.md) diff --git a/docs/deprecated/integrations/istio.md b/docs/deprecated/integrations/istio.md new file mode 100644 index 0000000000..be0c9df945 --- /dev/null +++ b/docs/deprecated/integrations/istio.md @@ -0,0 +1,53 @@ +--- +sidebar_label: "Istio" +title: "Istio" +description: "Choosing Istio as a Service Mesh app within the Spectro Cloud console" +hide_table_of_contents: true +type: "integration" +category: ["service mesh", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/istio/blobs/sha256:c80cf596d4859261ab892e987f835bd11161bd139dd8e4147b652c6b93924cb2?type=image.webp" +tags: ["packs", "istio", "network"] +--- + +This Integration aims to automate and simplify the rollout of the various Istio components which helps with service mesh +use cases. + +## Versions Supported + + + + + +- **1.14.3** +- **1.14.1** + + + + + +- **1.6.2** + + + + + +## Contents + +The integration deploys the Istio Operator with the 'demo' profile which deploys the following components: + +- Istiod +- Istio Ingress Gateway +- Istio Egress Gateway +- Grafana +- Prometheus +- Istio Tracing +- Kiali + +## References + +- [Istio Home](https://istio.io) + +- [Istio Documentation](https://istio.io/latest/docs) + +- [Istio Operator GitHub](https://github.com/istio/operator) diff --git a/docs/docs-content/integrations/k3s.md b/docs/deprecated/integrations/k3s.md similarity index 100% rename from docs/docs-content/integrations/k3s.md rename to docs/deprecated/integrations/k3s.md diff --git a/docs/deprecated/integrations/kibana.md b/docs/deprecated/integrations/kibana.md new file mode 100644 index 0000000000..dab77d6146 --- /dev/null +++ b/docs/deprecated/integrations/kibana.md @@ -0,0 +1,45 @@ +--- +sidebar_label: "Kibana" +title: "Elasticsearch Fluentd Kibana" +description: "Kibana Monitoring pack in Spectro Cloud" +hide_table_of_contents: true +type: "integration" +category: ["logging", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/elastic-fluentd-kibana/blobs/sha256:3b6d6486eb216d46164fc8b7cb784b0be6b851a85726f18bdf4450d5ed1386eb?type=image.webp" +tags: ["packs", "elastic-fluentd-kibana", "logging"] +--- + +The logging integration installs a production-grade ElasticSearch cluster with Kibana and Fluentd by default on the +Kubernetes cluster. This integration provides a rich set of logging features like forwarding, aggregating & parsing logs +from the Kubernetes cluster. + +## Contents + +The default integration deployed will have the following components: + +- ElasticSearch control plane (3 replicas). +- ElasticSearch Data (2 replicas). +- ElasticSearch Client (2 replicas). +- ElasticSearch Curator. +- Fluentd (one per node). +- Kibana. + +## Ingress + +Follow below steps to configure Ingress on Kibana + +1. Change serviceType from "LoadBalancer" to "ClusterIP" (line #643) +2. Ingress (line #670) + - Enable Ingress; change enabled from false to "true" + - Set Ingress rules like annotations, path, hosts, etc. + +With these config changes, you can access Kibana service on the Ingress Controller LoadBalancer hostname / IP + +## References + +- [Elasticsearch GitHub](https://github.com/helm/charts/tree/master/stable/elasticsearch) + +- [Fluentd GitHub](https://github.com/helm/charts/tree/master/stable/fluentd) + +- [Kibana GitHub](https://github.com/helm/charts/tree/master/stable/kibana) diff --git a/docs/deprecated/integrations/kong.md b/docs/deprecated/integrations/kong.md new file mode 100644 index 0000000000..369b5fb7d2 --- /dev/null +++ b/docs/deprecated/integrations/kong.md @@ -0,0 +1,42 @@ +--- +sidebar_label: "Kong" +title: "Kong" +description: "Kong Ingress pack in Spectro Cloud" +hide_table_of_contents: true +type: "integration" +category: ["ingress", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/kong/blobs/sha256:600f20583f85ccad4c515e51542f74aa9acb851d5b03ecb0e7b3435eb51ecf56?type=image.webp" +tags: ["packs", "kong", "network"] +--- + +The Kong integration is an Ingress Controller for Kubernetes that configures ingress with a load balancer. You can use +the Kong as an application load balancer for your application. + +## Version Supported + + + + + +- **2.13.1** + + + + + +- **1.4.0** + + + + + +## Components + +The integration adds the Kong Ingress Controller, which exposes a Kubernetes service of type LoadBalancer. + +## References + +- [Kong Ingress Controller Documentation ](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers) + +- [Kong GitHub](https://github.com/Kong/kubernetes-ingress-controller) diff --git a/docs/docs-content/integrations/konvoy.md b/docs/deprecated/integrations/konvoy.md similarity index 100% rename from docs/docs-content/integrations/konvoy.md rename to docs/deprecated/integrations/konvoy.md diff --git a/docs/deprecated/integrations/kubebench.md b/docs/deprecated/integrations/kubebench.md new file mode 100644 index 0000000000..26a00e2d45 --- /dev/null +++ b/docs/deprecated/integrations/kubebench.md @@ -0,0 +1,33 @@ +--- +sidebar_label: "kube-bench" +title: "kube-bench" +description: "kube-bench security pack in Spectro Cloud" +hide_table_of_contents: true +type: "integration" +category: ["security", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: https://registry-addon.spectrocloud.com/v1/kube-bench/blobs/sha256:28c233e5ad884d5356a183c37f323263eb4acca860c28b326ecd99094b500c31?type=image.webp +tags: ["packs", "kube-bench", "security"] +--- + +Palette executes kube-bench, a CIS Benchmark scanner by Aqua Security, for every Kubernetes pack to ensure the control +plane and worker nodes are configured securely. It is available as an Add-on layer within Palette. + +kube-bench runs against a series of checks specified in a `controls` YAML file. For more information on how to write +tests and config files, refer to the [controls](https://github.com/aquasecurity/kube-bench/blob/main/docs/controls.md) +section. + +## Versions Supported + + + + + +- **0.6.8** + + + + +## References + +- [kube-bench GitHub](https://github.com/aquasecurity/kube-bench/blob/main/docs/running.md#running-kube-bench) diff --git a/docs/deprecated/integrations/kubehunter.md b/docs/deprecated/integrations/kubehunter.md new file mode 100644 index 0000000000..ea72bf5784 --- /dev/null +++ b/docs/deprecated/integrations/kubehunter.md @@ -0,0 +1,31 @@ +--- +sidebar_label: "kube-hunter" +title: "kube-hunter" +description: "kube-hunter monitoring pack in Spectro Cloud" +hide_table_of_contents: true +type: "integration" +category: ["monitoring", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.dev.spectrocloud.com/v1/kubehunter/blobs/sha256:6b6b9138fa056677646712a888192498247f71aa421edd27b25458a8fbf8af0c?type=image.webp" +tags: ["packs", "kube-hunter", "security"] +--- + +Kube Hunter is an open-source tool that hunts for security issues in your Kubernetes clusters. It’s designed to increase +awareness and visibility of the security controls in Kubernetes environments. Kube-hunter probes a domain or address +range for open Kubernetes-related ports, and tests for any configuration issues that leave your cluster exposed to +attackers. It can be run on a machine in the cluster, and select the option to probe all the local network interfaces. + +## Versions Supported + + + + + +**1.0.3** + + + + +## References + +- [kube-hunter GitHub](https://github.com/aquasecurity/kube-hunter/) diff --git a/docs/docs-content/integrations/kubernetes-dashboard.md b/docs/deprecated/integrations/kubernetes-dashboard.md similarity index 97% rename from docs/docs-content/integrations/kubernetes-dashboard.md rename to docs/deprecated/integrations/kubernetes-dashboard.md index 50794aa9f0..a98717e390 100644 --- a/docs/docs-content/integrations/kubernetes-dashboard.md +++ b/docs/deprecated/integrations/kubernetes-dashboard.md @@ -45,9 +45,10 @@ allows you to manage clusters and the applications deployed in them. :::warning + Starting with Kubernetes Dashboard version 2.7.0, the **Connect** button is no longer available. For an optimized experience, we recommend you use the pre-configured version of this dashboard, called Spectro Kubernetes Dashboard pack. -To learn more about it and start using it, check out the [Spectro Kubernetes Dashboard](spectro-k8s-dashboard.md) guide. +To learn more about it and start using it, check out the pack. ::: @@ -272,9 +273,10 @@ Use the `service.loadBalancerIP` and `service.externalPort` parameters to connec :::warning + Starting with Kubernetes Dashboard version 2.7.0, the **Connect** button is no longer available. For an optimized experience, we recommend you use the pre-configured version of this dashboard, called Spectro Kubernetes Dashboard pack. -To learn more about it and start using it, check out the [Spectro Kubernetes Dashboard](spectro-k8s-dashboard.md) guide. +To learn more about it and start using it, check out the pack. ::: @@ -386,9 +388,10 @@ Use the `service.loadBalancerIP` and `service.externalPort` parameters to connec :::warning + Starting with Kubernetes Dashboard version 2.7.0, the **Connect** button is no longer available. For an optimized experience, we recommend you use the pre-configured version of this dashboard, called Spectro Kubernetes Dashboard pack. -To learn more about it and start using it, check out the [Spectro Kubernetes Dashboard](spectro-k8s-dashboard.md) guide. +To learn more about it and start using it, check out the pack. ::: @@ -500,9 +503,10 @@ Use the `service.loadBalancerIP` and `service.externalPort` parameters to connec :::warning + Starting with Kubernetes Dashboard version 2.7.0, the **Connect** button is no longer available. For an optimized experience, we recommend you use the pre-configured version of this dashboard, called Spectro Kubernetes Dashboard pack. -To learn more about it and start using it, check out the [Spectro Kubernetes Dashboard](spectro-k8s-dashboard.md) guide. +To learn more about it and start using it, check out the pack. ::: @@ -614,9 +618,10 @@ Use the `service.loadBalancerIP` and `service.externalPort` parameters to connec :::warning + Starting with Kubernetes Dashboard version 2.7.0, the **Connect** button is no longer available. For an optimized experience, we recommend you use the pre-configured version of this dashboard, called Spectro Kubernetes Dashboard pack. -To learn more about it and start using it, check out the [Spectro Kubernetes Dashboard](spectro-k8s-dashboard.md) guide. +To learn more about it and start using it, check out the pack. ::: diff --git a/docs/docs-content/integrations/kubernetes-edge.md b/docs/deprecated/integrations/kubernetes-edge.md similarity index 100% rename from docs/docs-content/integrations/kubernetes-edge.md rename to docs/deprecated/integrations/kubernetes-edge.md diff --git a/docs/docs-content/integrations/kubernetes-generic.md b/docs/deprecated/integrations/kubernetes-generic.md similarity index 100% rename from docs/docs-content/integrations/kubernetes-generic.md rename to docs/deprecated/integrations/kubernetes-generic.md diff --git a/docs/deprecated/integrations/kubernetes.md b/docs/deprecated/integrations/kubernetes.md new file mode 100644 index 0000000000..905870e905 --- /dev/null +++ b/docs/deprecated/integrations/kubernetes.md @@ -0,0 +1,1192 @@ +--- +sidebar_label: "Palette eXtended Kubernetes" +title: "Palette eXtended Kubernetes" +description: "Learn about the Palette eXtended Kubernetes pack and how you can use it with your host clusters." +hide_table_of_contents: true +type: "integration" +category: ["kubernetes", "amd64", "fips"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/k8s-dashboard/blobs/sha256:2de5d88b2573af42d4cc269dff75744c4174ce47cbbeed5445e51a2edd8b7429?type=image.webp" +tags: ["packs", "kubernetes", "pxk"] +--- + +The Palette eXtended Kubernetes (PXK) pack supports several [cloud and data center infrastructure providers](/clusters). +This pack defines the default properties we use to deploy Kubernetes clusters and enables most of the Kubernetes +hardening standards that the Center for Internet Security (CIS) recommends. + +We also support managed Kubernetes distributions for Elastic Kubernetes Service (EKS), Azure Kubernetes Service (AKS), +Google Kubernetes Engine (GKE), and Tencent Kubernetes Engine (TKE). + +We offer PXK as a core pack in Palette. + +:::warning + +Once you upgrade your cluster to a new Kubernetes version, you will not be able to downgrade. We recommend that, before +upgrading, you review the information provided in the [Kubernetes Upgrades](kubernetes-support.md#kubernetes-upgrades) +section. + +Review our [Maintenance Policy](maintenance-policy.md) to learn about pack update and deprecation schedules. + +::: + +## What is PXK? + +Palette eXtended Kubernetes (PXK) is a customized version of the open-source Cloud Native Computing Foundation (CNCF) +distribution of Kubernetes. This Kubernetes version can be deployed through Palette to all major infrastructure +providers, public cloud providers, and private data center providers. This is the default distribution when deploying a +Kubernetes cluster through Palette. You have the option to choose other Kubernetes distributions, such as MicroK8s, +Konvoy, and more, should you want to consume a different Kubernetes distribution. + +PXK is different from the upstream open-source Kubernetes version primarily because of the carefully reviewed and +applied hardening of the operating system (OS) and Kubernetes. The hardening ranges from removing unused kernel modules +to using an OS configuration that follows industry best practices. Our custom Kubernetes configuration addresses common +Kubernetes deployment security pitfalls and implements industry best practices. + +A benefit of Palette when used with PXK is the ability to apply different flavors of container storage interface (CSI) +plugins and container network interface (CNI) plugins. Other open-source Kubernetes distributions, such as MicroK8s, +RKE2, and K3s, come with a default CSI and CNI. Additional complexity and overhead are required from you to enable +different interfaces. PXK supports the ability to select other interface plugins out of the box without any additional +overhead or complexity needed from your side. + +There are no changes to the Kubernetes source code and we also follow the same versioning schema as the upstream +open-source Kubernetes distribution. + +:::info + +We also offer Palette eXtended Kubernetes Edge (PXK-E) for Edge deployments. Refer to the +[PXK-E glossary definition](../glossary-all.md#palette-extended-kubernetes-edge-pxk-e) to learn more about PXK-E. + +::: + +### PXK and Palette VerteX + +The PXK used in [Palette VerteX](../vertex/vertex.md) is compiled and linked with our +[NIST-certified FIPS crypto module](../legal-licenses/compliance.md#fips-140-2) PXK is by default enabled with +[Ubuntu Pro](https://ubuntu.com/pro) with FIPS mode enabled. Additionally, the Operating System (OS) is hardened based +on the NIST-800 standard. However, if you use a different OS through the [BYOOS](./byoos.md) pack, then you are +responsible for ensuring FIPS compliance and hardening of the OS. + +The combined usage of PXK and Palette VerteX provides a secure and FIPS-compliant experience as the Kubernetes +distribution, OS, and management platform VerteX is FIPS-compliant. + +### Support Lifecycle + +We support PXK for N-3 Kubernetes minor versions for a duration of 14 months. The duration exceeds the official EOL by +four months. Once we stop supporting the minor version, we initiate the deprecation process. Refer to the +[Kubernetes Support Lifecycle](kubernetes-support.md#palette-extended-kubernetes-support) guide to learn more. + +## Versions Supported + + + + + +## Prerequisites + +- A minimum of 4 CPU and 4 GB Memory. + +- Operating System (OS) dependencies as listed in the table. + + | OS Distribution | OS Version | Supports Kubernetes 1.29.x | + | --------------- | ---------- | -------------------------- | + | CentOS | 7.7 | ✅ | + | Ubuntu | 22.04 | ✅ | + | Ubuntu | 20.04 | ❌ | + | Ubuntu | 18.04 | ❌ | + +## Parameters + +| Parameter | Description | +| ------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `pack.podCIDR` | The CIDR range for Pods in the cluster. This should match the networking layer property. Default: `192.168.0.0/16` | +| `pack.serviceClusterIpRange` | The CIDR range for services in the cluster. This should not overlap with any IP ranges assigned to nodes or pods. Default: `10.96.0.0/12` | +| `pack.serviceDomain` | The cluster DNS service domain. Default: `cluster.local`. To change the default, you must add this parameter to the Kubernetes YAML file at cluster creation and specify the cluster DNS service domain to use. This value cannot be changed after cluster creation is complete. Refer to the [Change Cluster DNS Service Domain](kubernetes.md?versions=k8s_v1.27#change-cluster-dns-service-domain) section. | +| `pack.palette.config.dashboard.identityProvider` | Dynamically enabled OpenID Connect (OIDC) Identity Provider (IDP) setting based on your UI selection when you add the PXK pack to your profile. This parameter appears in the YAML file after you make a selection. Refer to [Configure OIDC Identity Provider](kubernetes.md#configure-oidc-identity-provider). | +| `kubeadmconfig.apiServer.extraArgs` | A list of additional apiServer flags you can set. | +| `kubeadmconfig.apiServer.extraVolumes` | A list of additional volumes to mount on the apiServer. | +| `kubeadmconfig.controllerManager.extraArgs` | A list of additional ControllerManager flags to set. | +| `kubeadmconfig.scheduler.extraArgs` | A list of additional Kube scheduler flags to set. | +| `kubeadmconfig.kubeletExtraArgs` | A list of kubelet arguments to set and copy to the nodes. | +| `kubeadmconfig.files` | A list of additional files to copy to the nodes. | +| `kubeadmconfig.preKubeadmCommands` | A list of additional commands to invoke **before** running kubeadm commands. | +| `kubeadmconfig.postKubeadmCommands` | A list of additional commands to invoke **after** running kubeadm commands. | +| `kubeadmconfig.clientConfig` | Settings to manually configure OIDC-based authentication when you choose a third-party (Custom) IDP. Refer to [Configure Custom OIDC](#configure-custom-oidc). | +| `cloud.maas.customEndpoint` | The custom MAAS API or DNS endpoint URL to use for the PXK cluster. This parameter is only available for MAAS. | +| `cloud.maas.customEndpointPort` | The custom MAAS API or DNS endpoint port to use for the PXK cluster. This parameter is only available for MAAS. Default value is `6443`. | + +## Usage + +The Kubeadm configuration file is where you can do the following: + +- Change the default `podCIDR` and `serviceClusterIpRange` values. CIDR IPs specified in the configuration file take + precedence over other defined CIDR IPs in your environment. + + As you build your cluster, check that the `podCIDR` value does not overlap with any hosts or with the service network + and the `serviceClusterIpRange` value does not overlap with any IP ranges assigned to nodes or pods. For more + information, refer to the [Clusters](../clusters/clusters.md) guide and + [Cluster Deployment Errors](../troubleshooting/cluster-deployment.md). + +- Change the default cluster DNS service domain from `cluster.local` to a DNS domain that you specify. You can only + change the DNS domain during cluster creation. For more information, refer to + [Change Cluster DNS Service Domain](kubernetes.md?versions=k8s_v1.27#change-cluster-dns-service-domain). + +- Manually configure a third-party OpenID Connect (OIDC) Identity Provider (IDP). For more information, check out + [Configure Custom OIDC](#configure-custom-oidc). + +- Add a certificate for the Spectro Proxy pack if you want to use a reverse proxy with a Kubernetes cluster. For more + information, refer to the [Spectro Proxy](frp.md) guide. + +### Change Cluster DNS Service Domain + +The `pack.serviceDomain` parameter with default value `cluster.local` is not visible in the Kubernetes YAML file, and +its value can only be changed at cluster creation. To change the value, you must add `serviceDomain: "cluster.local"` to +the Kubernetes YAML file when you create a cluster, and specify the service domain you want to use. + +```yaml hideClipboard +pack: + k8sHardening: True + podCIDR: "172.16.0.0/16" + serviceClusterIPRange: "10.96.0.0/12" + serviceDomain: "" +``` + +:::warning + +You can only specify the service domain at cluster creation. After cluster creation completes, you cannot update the +value. Attempting to update it results in the error `serviceDomain update is forbidden for existing cluster`. + +::: + +For more information about networking configuration with DNS domains, refer to the Kubernetes +[Networking](https://kubernetes.io/docs/reference/config-api/kubeadm-config.v1beta3/#kubeadm-k8s-io-v1beta3-Networking) +API documentation. + +### Configuration Changes + +The PXK Kubeadm configuration is updated to dynamically enable OIDC based on your IDP selection by adding the +`identityProvider` parameter. + +```yaml +palette: + config: + dashboard: + identityProvider: +``` + +### Example Kubeadm Configuration File + +```yaml hideClipboard +pack: + k8sHardening: True + podCIDR: "192.168.0.0/16" + serviceClusterIpRange: "10.96.0.0/12" + palette: + config: + dashboard: + identityProvider: palette +kubeadmconfig: + apiServer: + extraArgs: + secure-port: "6443" + anonymous-auth: "true" + profiling: "false" + disable-admission-plugins: "AlwaysAdmit" + default-not-ready-toleration-seconds: "60" + default-unreachable-toleration-seconds: "60" + enable-admission-plugins: "AlwaysPullImages,NamespaceLifecycle,ServiceAccount,NodeRestriction,PodSecurity" + admission-control-config-file: "/etc/kubernetes/pod-security-standard.yaml" + audit-log-path: /var/log/apiserver/audit.log + audit-policy-file: /etc/kubernetes/audit-policy.yaml + audit-log-maxage: "30" + audit-log-maxbackup: "10" + audit-log-maxsize: "100" + authorization-mode: RBAC,Node + tls-cipher-suites: "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256" + extraVolumes: + - name: audit-log + hostPath: /var/log/apiserver + mountPath: /var/log/apiserver + pathType: DirectoryOrCreate + - name: audit-policy + hostPath: /etc/kubernetes/audit-policy.yaml + mountPath: /etc/kubernetes/audit-policy.yaml + readOnly: true + pathType: File + - name: pod-security-standard + hostPath: /etc/kubernetes/pod-security-standard.yaml + mountPath: /etc/kubernetes/pod-security-standard.yaml + readOnly: true + pathType: File + controllerManager: + extraArgs: + profiling: "false" + terminated-pod-gc-threshold: "25" + pod-eviction-timeout: "1m0s" + use-service-account-credentials: "true" + feature-gates: "RotateKubeletServerCertificate=true" + scheduler: + extraArgs: + profiling: "false" + kubeletExtraArgs: + read-only-port: "0" + event-qps: "0" + feature-gates: "RotateKubeletServerCertificate=true" + protect-kernel-defaults: "true" + tls-cipher-suites: "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256" + files: + - path: hardening/audit-policy.yaml + targetPath: /etc/kubernetes/audit-policy.yaml + targetOwner: "root:root" + targetPermissions: "0600" + - path: hardening/90-kubelet.conf + targetPath: /etc/sysctl.d/90-kubelet.conf + targetOwner: "root:root" + targetPermissions: "0600" + - targetPath: /etc/kubernetes/pod-security-standard.yaml + targetOwner: "root:root" + targetPermissions: "0600" + content: | + apiVersion: apiserver.config.k8s.io/v1 + kind: AdmissionConfiguration + plugins: + - name: PodSecurity + configuration: + apiVersion: pod-security.admission.config.k8s.io/v1 + kind: PodSecurityConfiguration + defaults: + enforce: "baseline" + enforce-version: "v1.26" + audit: "baseline" + audit-version: "v1.26" + warn: "restricted" + warn-version: "v1.26" + audit: "restricted" + audit-version: "v1.26" + exemptions: + # Array of authenticated usernames to exempt. + usernames: [] + # Array of runtime class names to exempt. + runtimeClasses: [] + # Array of namespaces to exempt. + namespaces: [kube-system] + + preKubeadmCommands: + - 'echo "====> Applying kernel parameters for Kubelet"' + - 'sysctl -p /etc/sysctl.d/90-kubelet.conf' + postKubeadmCommands: + - 'echo "List of post kubeadm commands to be executed"' + + # Client configuration to add OIDC based authentication flags in kubeconfig + #clientConfig: + #oidc-issuer-url: "{{ .spectro.pack.kubernetes.kubeadmconfig.apiServer.extraArgs.oidc-issuer-url }}" + #oidc-client-id: "{{ .spectro.pack.kubernetes.kubeadmconfig.apiServer.extraArgs.oidc-client-id }}" + #oidc-client-secret: yourSecretClientSecretGoesHere + #oidc-extra-scope: profile,email +``` + +### Configure OIDC Identity Provider + +Platforms that use PXK can use the OIDC IDP feature, which offers the convenience of managing OIDC at the Kubernetes +layer. The OIDC IDP feature is particularly useful for environments that do not have their own IDP configured. In this +scenario, you can leverage Palette as an IDP without having to configure a third-party IDP. We also support the ability +to take advantage of other OIDC providers by making it possible for you to configure OIDC at the tenant level. For +additional flexibility, if you wish to use a different IDP than the one configured at the tenant level, you can select a +different IDP by adding the OIDC configuration to your cluster profile. + +When you add the PXK pack to a cluster profile, Palette displays the OIDC IDP options listed below. + +All the options require you to map a set of users or groups to a Kubernetes RBAC role. To learn how to map a Kubernetes +role to users and groups, refer to +[Create Role Bindings](/clusters/cluster-management/cluster-rbac#create-role-bindings). You can also configure OIDC for +virtual clusters. For guidance, refer to +[Configure OIDC for a Virtual Cluster](../clusters/palette-virtual-clusters/configure-oidc-virtual-cluster.md). + +- **None**: This setting does not require OIDC configuration for the cluster. It displays in the YAML file as `noauth`. + + :::warning + + We do not recommend choosing **None** in a production environment, as it may disable authentication for add-ons that + rely on OIDC. + + ::: + +- **Custom**: This is the default setting and does not require OIDC configuration. However, if desired, it allows you to + specify a third-party OIDC provider by configuring OIDC statements in the YAML file as described in + [Configure Custom OIDC](#configure-custom-oidc). This setting displays in the YAML file as `none`. + +- **Palette**: This setting makes Palette the IDP. Any user with a Palette account in the tenant and the proper + permissions to view and access the project's resources is able to log into the Kubernetes dashboard. This setting + displays in the YAML file as `palette`. + +- **Inherit from Tenant**: This setting allows you to apply RBAC to multiple clusters and requires you to configure + OpenID Connect (OIDC) in **Tenant Settings**. In Tenant Admin scope, navigate to **Tenant Settings** > **SSO**, choose + **OIDC**, and provide your third-party IDP details. This setting displays in the YAML file as `tenant`. For more + information, check out the [SSO Setup](../user-management/saml-sso/saml-sso.md) guide. + + :::info + + If your IDP uses Security Assertion Markup Language (SAML) authentication, then the **Inherit from Tenant** option + will not work, and you will need to use the **Custom** option instead. This is because Kubernetes supports only OIDC + authentication and not SAML authentication. + + ::: + +### Configure Custom OIDC + +The custom method to configure OIDC and apply RBAC for an OIDC provider can be used for all cloud services except Amazon +Elastic Kubernetes Service (EKS) and [Azure-AKS](../clusters/public-cloud/azure/aks.md). + + + + + +Follow these steps to configure a third-party OIDC IDP. You can apply these steps to all the public cloud providers +except Azure AKS and Amazon EKS clusters. Azure AKS and Amazon EKS require different configurations. AKS requires you to +use Azure Active Directory (AAD) to enable OIDC integration. Refer to +[Enable OIDC in Kubernetes Clusters With Entra ID](../user-management/saml-sso/palette-sso-with-entra-id.md#enable-oidc-in-kubernetes-clusters-with-entra-id) +to learn more. Click the **Amazon EKS** tab for steps to configure OIDC for EKS clusters. + +1. Add the following parameters to your Kubernetes YAML file when creating a cluster profile. + + ```yaml + kubeadmconfig: + apiServer: + extraArgs: + oidc-issuer-url: "provider URL" + oidc-client-id: "client-id" + oidc-groups-claim: "groups" + oidc-username-claim: "email" + ``` + +2. Under the `clientConfig` parameter section of Kubernetes YAML file, uncomment the `oidc-` configuration lines. + + ```yaml + kubeadmconfig: + clientConfig: + oidc-issuer-url: "" + oidc-client-id: "" + oidc-client-secret: "" + oidc-extra-scope: profile,email,openid + ``` + + + + + +Follow these steps to configure OIDC for managed EKS clusters. + +1. In the Kubernetes pack, uncomment the lines in the `oidcIdentityProvider` parameter section of the Kubernetes pack, + and enter your third-party provider details. + + ```yaml + oidcIdentityProvider: + identityProviderConfigName: "Spectro-docs" + issuerUrl: "issuer-url" + clientId: "user-client-id-from-Palette" + usernameClaim: "email" + usernamePrefix: "-" + groupsClaim: "groups" + groupsPrefix: "" + requiredClaims: + ``` + +2. Under the `clientConfig` parameter section of Kubernetes pack, uncomment the `oidc-` configuration lines. + + ```yaml + clientConfig: + oidc-issuer-url: "{{ .spectro.pack.kubernetes-eks.managedControlPlane.oidcIdentityProvider.issuerUrl }}" + oidc-client-id: "{{ .spectro.pack.kubernetes-eks.managedControlPlane.oidcIdentityProvider.clientId }}" + oidc-client-secret: ************************************************** + oidc-extra-scope: profile,email + ``` + +3. Provide third-party OIDC IDP details. + + + + + +### Use RBAC with OIDC + +You can create a role binding that uses individual users as the subject or specify a group name as the subject to map +many users to a role. The group name is the group assigned in the OIDC provider's configuration. Below is an example. To +learn more, review [Create Role Bindings](../clusters/cluster-management/cluster-rbac.md#create-role-bindings). + +Assume you created a group named `dev-east-2` within an OIDC provider. If you configure the host cluster's Kubernetes +pack with all the correct OIDC settings, you could then create a role binding for the `dev-east-2` group. + +In this example, Palette is used as the IDP, and all users in the `dev-east-2` would inherit the `cluster-admin` role. + +![A subject of the type group is assigned as the subject in a RoleBinding](/clusters_cluster-management_cluster-rbac_cluster-subject-group.webp) + +### Custom MAAS Endpoint + +You can specify a custom MAAS endpoint and port that instructs Palette to direct all MAAS API requests to the provided +endpoint URL. Use the `cloud.maas.customEndpoint` and `cloud.maas.customEndpointPort` parameters to specify the custom +MAAS API URL and port. This is useful in scenarios where the MAAS API endpoint is not resolvable outside of the MAAS +network. + +The following example shows how to specify a custom MAAS endpoint and port in the Kubernetes YAML file. Make sure the +`cloud.maas` section is at the same level as the `pack` section. + +```yaml hideClipboard {10-14} +pack: + k8sHardening: True + podCIDR: "192.168.0.0/16" + serviceClusterIpRange: "10.96.0.0/12" + palette: + config: + dashboard: + identityProvider: palette + +cloud: + maas: + customEndpoint: "maas-api.example.maas.org" + customEndpointPort: "6443" +``` + + + + + +## Prerequisites + +- A minimum of 4 CPU and 4 GB Memory. + +- Operating System (OS) dependencies as listed in the table. + + | OS Distribution | OS Version | Supports Kubernetes 1.28.x | + | --------------- | ---------- | -------------------------- | + | CentOS | 7.7 | ✅ | + | Ubuntu | 22.04 | ✅ | + | Ubuntu | 20.04 | ❌ | + +## Parameters + +| Parameter | Description | +| ------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `pack.podCIDR` | The CIDR range for Pods in the cluster. This should match the networking layer property. Default: `192.168.0.0/16` | +| `pack.serviceClusterIpRange` | The CIDR range for services in the cluster. This should not overlap with any IP ranges assigned to nodes or pods. Default: `10.96.0.0/12` | +| `pack.serviceDomain` | The cluster DNS service domain. Default: `cluster.local`. To change the default, you must add this parameter to the Kubernetes YAML file at cluster creation and specify the cluster DNS service domain to use. This value cannot be changed after cluster creation is complete. Refer to the [Change Cluster DNS Service Domain](kubernetes.md?versions=k8s_v1.27#change-cluster-dns-service-domain) section. | +| `pack.palette.config.dashboard.identityProvider` | Dynamically enabled OpenID Connect (OIDC) Identity Provider (IDP) setting based on your UI selection when you add the PXK pack to your profile. This parameter appears in the YAML file after you make a selection. Refer to [Configure OIDC Identity Provider](kubernetes.md#configure-oidc-identity-provider). | +| `kubeadmconfig.apiServer.extraArgs` | A list of additional apiServer flags you can set. | +| `kubeadmconfig.apiServer.extraVolumes` | A list of additional volumes to mount on the apiServer. | +| `kubeadmconfig.controllerManager.extraArgs` | A list of additional ControllerManager flags to set. | +| `kubeadmconfig.scheduler.extraArgs` | A list of additional Kube scheduler flags to set. | +| `kubeadmconfig.kubeletExtraArgs` | A list of kubelet arguments to set and copy to the nodes. | +| `kubeadmconfig.files` | A list of additional files to copy to the nodes. | +| `kubeadmconfig.preKubeadmCommands` | A list of additional commands to invoke **before** running kubeadm commands. | +| `kubeadmconfig.postKubeadmCommands` | A list of additional commands to invoke **after** running kubeadm commands. | +| `kubeadmconfig.clientConfig` | Settings to manually configure OIDC-based authentication when you choose a third-party (Custom) IDP. Refer to [Configure Custom OIDC](#configure-custom-oidc). | +| `cloud.maas.customEndpoint` | The custom MAAS API or DNS endpoint URL to use for the PXK cluster. This parameter is only available for MAAS. | +| `cloud.maas.customEndpointPort` | The custom MAAS API or DNS endpoint port to use for the PXK cluster. This parameter is only available for MAAS. Default value is `6443`. | + +## Usage + +The Kubeadm configuration file is where you can do the following: + +- Change the default `podCIDR` and `serviceClusterIpRange` values. CIDR IPs specified in the configuration file take + precedence over other defined CIDR IPs in your environment. + + As you build your cluster, check that the `podCIDR` value does not overlap with any hosts or with the service network + and the `serviceClusterIpRange` value does not overlap with any IP ranges assigned to nodes or pods. For more + information, refer to the [Clusters](../clusters/clusters.md) guide and + [Cluster Deployment Errors](../troubleshooting/cluster-deployment.md). + +- Change the default cluster DNS service domain from `cluster.local` to a DNS domain that you specify. You can only + change the DNS domain during cluster creation. For more information, refer to + [Change Cluster DNS Service Domain](kubernetes.md?versions=k8s_v1.27#change-cluster-dns-service-domain). + +- Manually configure a third-party OpenID Connect (OIDC) Identity Provider (IDP). For more information, check out + [Configure Custom OIDC](#configure-custom-oidc). + +- Add a certificate for the Spectro Proxy pack if you want to use a reverse proxy with a Kubernetes cluster. For more + information, refer to the [Spectro Proxy](frp.md) guide. + +### Change Cluster DNS Service Domain + +The `pack.serviceDomain` parameter with default value `cluster.local` is not visible in the Kubernetes YAML file, and +its value can only be changed at cluster creation. To change the value, you must add `serviceDomain: "cluster.local"` to +the Kubernetes YAML file when you create a cluster, and specify the service domain you want to use. + +```yaml hideClipboard +pack: + k8sHardening: True + podCIDR: "172.16.0.0/16" + serviceClusterIPRange: "10.96.0.0/12" + serviceDomain: "" +``` + +:::warning + +You can only specify the service domain at cluster creation. After cluster creation completes, you cannot update the +value. Attempting to update it results in the error `serviceDomain update is forbidden for existing cluster`. + +::: + +For more information about networking configuration with DNS domains, refer to the Kubernetes +[Networking](https://kubernetes.io/docs/reference/config-api/kubeadm-config.v1beta3/#kubeadm-k8s-io-v1beta3-Networking) +API documentation. + +### Configuration Changes + +The PXK Kubeadm configuration is updated to dynamically enable OIDC based on your IDP selection by adding the +`identityProvider` parameter. + +```yaml +palette: + config: + dashboard: + identityProvider: +``` + +### Example Kubeadm Configuration File + +```yaml hideClipboard +pack: + k8sHardening: True + podCIDR: "192.168.0.0/16" + serviceClusterIpRange: "10.96.0.0/12" + palette: + config: + dashboard: + identityProvider: palette +kubeadmconfig: + apiServer: + extraArgs: + secure-port: "6443" + anonymous-auth: "true" + profiling: "false" + disable-admission-plugins: "AlwaysAdmit" + default-not-ready-toleration-seconds: "60" + default-unreachable-toleration-seconds: "60" + enable-admission-plugins: "AlwaysPullImages,NamespaceLifecycle,ServiceAccount,NodeRestriction,PodSecurity" + admission-control-config-file: "/etc/kubernetes/pod-security-standard.yaml" + audit-log-path: /var/log/apiserver/audit.log + audit-policy-file: /etc/kubernetes/audit-policy.yaml + audit-log-maxage: "30" + audit-log-maxbackup: "10" + audit-log-maxsize: "100" + authorization-mode: RBAC,Node + tls-cipher-suites: "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256" + extraVolumes: + - name: audit-log + hostPath: /var/log/apiserver + mountPath: /var/log/apiserver + pathType: DirectoryOrCreate + - name: audit-policy + hostPath: /etc/kubernetes/audit-policy.yaml + mountPath: /etc/kubernetes/audit-policy.yaml + readOnly: true + pathType: File + - name: pod-security-standard + hostPath: /etc/kubernetes/pod-security-standard.yaml + mountPath: /etc/kubernetes/pod-security-standard.yaml + readOnly: true + pathType: File + controllerManager: + extraArgs: + profiling: "false" + terminated-pod-gc-threshold: "25" + pod-eviction-timeout: "1m0s" + use-service-account-credentials: "true" + feature-gates: "RotateKubeletServerCertificate=true" + scheduler: + extraArgs: + profiling: "false" + kubeletExtraArgs: + read-only-port: "0" + event-qps: "0" + feature-gates: "RotateKubeletServerCertificate=true" + protect-kernel-defaults: "true" + tls-cipher-suites: "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256" + files: + - path: hardening/audit-policy.yaml + targetPath: /etc/kubernetes/audit-policy.yaml + targetOwner: "root:root" + targetPermissions: "0600" + - path: hardening/90-kubelet.conf + targetPath: /etc/sysctl.d/90-kubelet.conf + targetOwner: "root:root" + targetPermissions: "0600" + - targetPath: /etc/kubernetes/pod-security-standard.yaml + targetOwner: "root:root" + targetPermissions: "0600" + content: | + apiVersion: apiserver.config.k8s.io/v1 + kind: AdmissionConfiguration + plugins: + - name: PodSecurity + configuration: + apiVersion: pod-security.admission.config.k8s.io/v1 + kind: PodSecurityConfiguration + defaults: + enforce: "baseline" + enforce-version: "v1.26" + audit: "baseline" + audit-version: "v1.26" + warn: "restricted" + warn-version: "v1.26" + audit: "restricted" + audit-version: "v1.26" + exemptions: + # Array of authenticated usernames to exempt. + usernames: [] + # Array of runtime class names to exempt. + runtimeClasses: [] + # Array of namespaces to exempt. + namespaces: [kube-system] + + preKubeadmCommands: + - 'echo "====> Applying kernel parameters for Kubelet"' + - 'sysctl -p /etc/sysctl.d/90-kubelet.conf' + postKubeadmCommands: + - 'echo "List of post kubeadm commands to be executed"' + + # Client configuration to add OIDC based authentication flags in kubeconfig + #clientConfig: + #oidc-issuer-url: "{{ .spectro.pack.kubernetes.kubeadmconfig.apiServer.extraArgs.oidc-issuer-url }}" + #oidc-client-id: "{{ .spectro.pack.kubernetes.kubeadmconfig.apiServer.extraArgs.oidc-client-id }}" + #oidc-client-secret: yourSecretClientSecretGoesHere + #oidc-extra-scope: profile,email +``` + +### Configure OIDC Identity Provider + +Platforms that use PXK can use the OIDC IDP feature, which offers the convenience of managing OIDC at the Kubernetes +layer. The OIDC IDP feature is particularly useful for environments that do not have their own IDP configured. In this +scenario, you can leverage Palette as an IDP without having to configure a third-party IDP. We also support the ability +to take advantage of other OIDC providers by making it possible for you to configure OIDC at the tenant level. For +additional flexibility, if you wish to use a different IDP than the one configured at the tenant level, you can select a +different IDP by adding the OIDC configuration to your cluster profile. + +When you add the PXK pack to a cluster profile, Palette displays the OIDC IDP options listed below. + +All the options require you to map a set of users or groups to a Kubernetes RBAC role. To learn how to map a Kubernetes +role to users and groups, refer to +[Create Role Bindings](/clusters/cluster-management/cluster-rbac#create-role-bindings). You can also configure OIDC for +virtual clusters. For guidance, refer to +[Configure OIDC for a Virtual Cluster](../clusters/palette-virtual-clusters/configure-oidc-virtual-cluster.md). + +- **None**: This setting does not require OIDC configuration for the cluster. It displays in the YAML file as `noauth`. + + :::warning + + We do not recommend choosing **None** in a production environment, as it may disable authentication for add-ons that + rely on OIDC. + + ::: + +- **Custom**: This is the default setting and does not require OIDC configuration. However, if desired, it allows you to + specify a third-party OIDC provider by configuring OIDC statements in the YAML file as described in + [Configure Custom OIDC](#configure-custom-oidc). This setting displays in the YAML file as `none`. + +- **Palette**: This setting makes Palette the IDP. Any user with a Palette account in the tenant and the proper + permissions to view and access the project's resources is able to log into the Kubernetes dashboard. This setting + displays in the YAML file as `palette`. + +- **Inherit from Tenant**: This setting allows you to apply RBAC to multiple clusters and requires you to configure + OpenID Connect (OIDC) in **Tenant Settings**. In Tenant Admin scope, navigate to **Tenant Settings** > **SSO**, choose + **OIDC**, and provide your third-party IDP details. This setting displays in the YAML file as `tenant`. For more + information, check out the [SSO Setup](../user-management/saml-sso/saml-sso.md) guide. + + :::info + + If your IDP uses Security Assertion Markup Language (SAML) authentication, then the **Inherit from Tenant** option + will not work, and you will need to use the **Custom** option instead. This is because Kubernetes supports only OIDC + authentication and not SAML authentication. + + ::: + +### Configure Custom OIDC + +The custom method to configure OIDC and apply RBAC for an OIDC provider can be used for all cloud services except Amazon +Elastic Kubernetes Service (EKS) and [Azure-AKS](../clusters/public-cloud/azure/aks.md). + + + + + +Follow these steps to configure a third-party OIDC IDP. You can apply these steps to all the public cloud providers +except Azure AKS and Amazon EKS clusters. Azure AKS and Amazon EKS require different configurations. AKS requires you to +use Azure Active Directory (AAD) to enable OIDC integration. Refer to +[Enable OIDC in Kubernetes Clusters With Entra ID](../user-management/saml-sso/palette-sso-with-entra-id.md#enable-oidc-in-kubernetes-clusters-with-entra-id) +to learn more. Click the **Amazon EKS** tab for steps to configure OIDC for EKS clusters. + +1. Add the following parameters to your Kubernetes YAML file when creating a cluster profile. + + ```yaml + kubeadmconfig: + apiServer: + extraArgs: + oidc-issuer-url: "provider URL" + oidc-client-id: "client-id" + oidc-groups-claim: "groups" + oidc-username-claim: "email" + ``` + +2. Under the `clientConfig` parameter section of Kubernetes YAML file, uncomment the `oidc-` configuration lines. + + ```yaml + kubeadmconfig: + clientConfig: + oidc-issuer-url: "" + oidc-client-id: "" + oidc-client-secret: "" + oidc-extra-scope: profile,email,openid + ``` + + + + + +Follow these steps to configure OIDC for managed EKS clusters. + +1. In the Kubernetes pack, uncomment the lines in the `oidcIdentityProvider` parameter section of the Kubernetes pack, + and enter your third-party provider details. + + ```yaml + oidcIdentityProvider: + identityProviderConfigName: "Spectro-docs" + issuerUrl: "issuer-url" + clientId: "user-client-id-from-Palette" + usernameClaim: "email" + usernamePrefix: "-" + groupsClaim: "groups" + groupsPrefix: "" + requiredClaims: + ``` + +2. Under the `clientConfig` parameter section of Kubernetes pack, uncomment the `oidc-` configuration lines. + + ```yaml + clientConfig: + oidc-issuer-url: "{{ .spectro.pack.kubernetes-eks.managedControlPlane.oidcIdentityProvider.issuerUrl }}" + oidc-client-id: "{{ .spectro.pack.kubernetes-eks.managedControlPlane.oidcIdentityProvider.clientId }}" + oidc-client-secret: ************************************************** + oidc-extra-scope: profile,email + ``` + +3. Provide third-party OIDC IDP details. + + + + + +### Use RBAC with OIDC + +You can create a role binding that uses individual users as the subject or specify a group name as the subject to map +many users to a role. The group name is the group assigned in the OIDC provider's configuration. Below is an example. To +learn more, review [Create Role Bindings](../clusters/cluster-management/cluster-rbac.md#create-role-bindings). + +Assume you created a group named `dev-east-2` within an OIDC provider. If you configure the host cluster's Kubernetes +pack with all the correct OIDC settings, you could then create a role binding for the `dev-east-2` group. + +In this example, Palette is used as the IDP, and all users in the `dev-east-2` would inherit the `cluster-admin` role. + +![A subject of the type group is assigned as the subject in a RoleBinding](/clusters_cluster-management_cluster-rbac_cluster-subject-group.webp) + +### Custom MAAS Endpoint + +You can specify a custom MAAS endpoint and port that instructs Palette to direct all MAAS API requests to the provided +endpoint URL. Use the `cloud.maas.customEndpoint` and `cloud.maas.customEndpointPort` parameters to specify the custom +MAAS API URL and port. This is useful in scenarios where the MAAS API endpoint is not resolvable outside of the MAAS +network. + +The following example shows how to specify a custom MAAS endpoint and port in the Kubernetes YAML file. Make sure the +`cloud.maas` section is at the same level as the `pack` section. + +```yaml hideClipboard {10-14} +pack: + k8sHardening: True + podCIDR: "192.168.0.0/16" + serviceClusterIpRange: "10.96.0.0/12" + palette: + config: + dashboard: + identityProvider: palette + +cloud: + maas: + customEndpoint: "maas-api.example.maas.org" + customEndpointPort: "6443" +``` + + + + + +## Prerequisites + +- A minimum of 4 CPU and 4 GB Memory. + +- Operating System (OS) dependencies as listed in the table. + + | OS Distribution | OS Version | Supports Kubernetes 1.27.x | + | --------------- | ---------- | -------------------------- | + | CentOS | 7.7 | ✅ | + | Ubuntu | 22.04 | ✅ | + | Ubuntu | 20.04 | ❌ | + +## Parameters + +| Parameter | Description | +| ------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `pack.podCIDR` | The CIDR range for Pods in the cluster. This should match the networking layer property. Default: `192.168.0.0/16` | +| `pack.serviceClusterIpRange` | The CIDR range for services in the cluster. This should not overlap with any IP ranges assigned to nodes or pods. Default: `10.96.0.0/12` | +| `pack.serviceDomain` | The cluster DNS service domain. Default: `cluster.local`. To change the default, you must add this parameter to the Kubernetes YAML file at cluster creation and specify the cluster DNS service domain to use. This value cannot be changed after cluster creation is complete. Refer to the [Change Cluster DNS Service Domain](kubernetes.md?versions=k8s_v1.27#change-cluster-dns-service-domain) section. | +| `pack.palette.config.dashboard.identityProvider` | Dynamically enabled OpenID Connect (OIDC) Identity Provider (IDP) setting based on your UI selection when you add the PXK pack to your profile. This parameter appears in the YAML file after you make a selection. Refer to [Configure OIDC Identity Provider](kubernetes.md#configure-oidc-identity-provider). | +| `kubeadmconfig.apiServer.extraArgs` | A list of additional apiServer flags you can set. | +| `kubeadmconfig.apiServer.extraVolumes` | A list of additional volumes to mount on the apiServer. | +| `kubeadmconfig.controllerManager.extraArgs` | A list of additional ControllerManager flags to set. | +| `kubeadmconfig.scheduler.extraArgs` | A list of additional Kube scheduler flags to set. | +| `kubeadmconfig.kubeletExtraArgs` | A list of kubelet arguments to set and copy to the nodes. | +| `kubeadmconfig.files` | A list of additional files to copy to the nodes. | +| `kubeadmconfig.preKubeadmCommands` | A list of additional commands to invoke **before** running kubeadm commands. | +| `kubeadmconfig.postKubeadmCommands` | A list of additional commands to invoke **after** running kubeadm commands. | +| `kubeadmconfig.clientConfig` | Settings to manually configure OIDC-based authentication when you choose a third-party (Custom) IDP. Refer to [Configure Custom OIDC](#configure-custom-oidc). | + +## Usage + +The Kubeadm configuration file is where you can do the following: + +- Change the default `podCIDR` and `serviceClusterIpRange` values. CIDR IPs specified in the configuration file take + precedence over other defined CIDR IPs in your environment. + + As you build your cluster, check that the `podCIDR` value does not overlap with any hosts or with the service network + and the `serviceClusterIpRange` value does not overlap with any IP ranges assigned to nodes or pods. For more + information, refer to the [Clusters](../clusters/clusters.md) guide and + [Cluster Deployment Errors](../troubleshooting/cluster-deployment.md). + +- Change the default cluster DNS service domain from `cluster.local` to a DNS domain that you specify. You can only + change the DNS domain during cluster creation. For more information, refer to + [Change Cluster DNS Service Domain](kubernetes.md?versions=k8s_v1.27#change-cluster-dns-service-domain). + +- Manually configure a third-party OpenID Connect (OIDC) Identity Provider (IDP). For more information, check out + [Configure Custom OIDC](#configure-custom-oidc). + +- Add a certificate for the Spectro Proxy pack if you want to use a reverse proxy with a Kubernetes cluster. For more + information, refer to the [Spectro Proxy](frp.md) guide. + +### Change Cluster DNS Service Domain + +The `pack.serviceDomain` parameter with default value `cluster.local` is not visible in the Kubernetes YAML file, and +its value can only be changed at cluster creation. To change the value, you must add `serviceDomain: "cluster.local"` to +the Kubernetes YAML file when you create a cluster, and specify the service domain you want to use. + +```yaml hideClipboard +pack: + k8sHardening: True + podCIDR: "172.16.0.0/16" + serviceClusterIPRange: "10.96.0.0/12" + serviceDomain: "" +``` + +:::warning + +You can only specify the service domain at cluster creation. After cluster creation completes, you cannot update the +value. Attempting to update it results in the error `serviceDomain update is forbidden for existing cluster`. + +::: + +For more information about networking configuration with DNS domains, refer to the Kubernetes +[Networking](https://kubernetes.io/docs/reference/config-api/kubeadm-config.v1beta3/#kubeadm-k8s-io-v1beta3-Networking) +API documentation. + +### Configuration Changes + +The PXK Kubeadm configuration is updated to dynamically enable OIDC based on your IDP selection by adding the +`identityProvider` parameter. + +```yaml +palette: + config: + dashboard: + identityProvider: +``` + +### Example Kubeadm Configuration File + +```yaml hideClipboard +pack: + k8sHardening: True + podCIDR: "192.168.0.0/16" + serviceClusterIpRange: "10.96.0.0/12" + palette: + config: + dashboard: + identityProvider: palette +kubeadmconfig: + apiServer: + extraArgs: + secure-port: "6443" + anonymous-auth: "true" + profiling: "false" + disable-admission-plugins: "AlwaysAdmit" + default-not-ready-toleration-seconds: "60" + default-unreachable-toleration-seconds: "60" + enable-admission-plugins: "AlwaysPullImages,NamespaceLifecycle,ServiceAccount,NodeRestriction,PodSecurity" + admission-control-config-file: "/etc/kubernetes/pod-security-standard.yaml" + audit-log-path: /var/log/apiserver/audit.log + audit-policy-file: /etc/kubernetes/audit-policy.yaml + audit-log-maxage: "30" + audit-log-maxbackup: "10" + audit-log-maxsize: "100" + authorization-mode: RBAC,Node + tls-cipher-suites: "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256" + extraVolumes: + - name: audit-log + hostPath: /var/log/apiserver + mountPath: /var/log/apiserver + pathType: DirectoryOrCreate + - name: audit-policy + hostPath: /etc/kubernetes/audit-policy.yaml + mountPath: /etc/kubernetes/audit-policy.yaml + readOnly: true + pathType: File + - name: pod-security-standard + hostPath: /etc/kubernetes/pod-security-standard.yaml + mountPath: /etc/kubernetes/pod-security-standard.yaml + readOnly: true + pathType: File + controllerManager: + extraArgs: + profiling: "false" + terminated-pod-gc-threshold: "25" + pod-eviction-timeout: "1m0s" + use-service-account-credentials: "true" + feature-gates: "RotateKubeletServerCertificate=true" + scheduler: + extraArgs: + profiling: "false" + kubeletExtraArgs: + read-only-port: "0" + event-qps: "0" + feature-gates: "RotateKubeletServerCertificate=true" + protect-kernel-defaults: "true" + tls-cipher-suites: "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256" + files: + - path: hardening/audit-policy.yaml + targetPath: /etc/kubernetes/audit-policy.yaml + targetOwner: "root:root" + targetPermissions: "0600" + - path: hardening/90-kubelet.conf + targetPath: /etc/sysctl.d/90-kubelet.conf + targetOwner: "root:root" + targetPermissions: "0600" + - targetPath: /etc/kubernetes/pod-security-standard.yaml + targetOwner: "root:root" + targetPermissions: "0600" + content: | + apiVersion: apiserver.config.k8s.io/v1 + kind: AdmissionConfiguration + plugins: + - name: PodSecurity + configuration: + apiVersion: pod-security.admission.config.k8s.io/v1 + kind: PodSecurityConfiguration + defaults: + enforce: "baseline" + enforce-version: "v1.26" + audit: "baseline" + audit-version: "v1.26" + warn: "restricted" + warn-version: "v1.26" + audit: "restricted" + audit-version: "v1.26" + exemptions: + # Array of authenticated usernames to exempt. + usernames: [] + # Array of runtime class names to exempt. + runtimeClasses: [] + # Array of namespaces to exempt. + namespaces: [kube-system] + + preKubeadmCommands: + - 'echo "====> Applying kernel parameters for Kubelet"' + - 'sysctl -p /etc/sysctl.d/90-kubelet.conf' + postKubeadmCommands: + - 'echo "List of post kubeadm commands to be executed"' + + # Client configuration to add OIDC based authentication flags in kubeconfig + #clientConfig: + #oidc-issuer-url: "{{ .spectro.pack.kubernetes.kubeadmconfig.apiServer.extraArgs.oidc-issuer-url }}" + #oidc-client-id: "{{ .spectro.pack.kubernetes.kubeadmconfig.apiServer.extraArgs.oidc-client-id }}" + #oidc-client-secret: yourSecretClientSecretGoesHere + #oidc-extra-scope: profile,email +``` + +### Configure OIDC Identity Provider + +Platforms that use PXK can use the OIDC IDP feature, which offers the convenience of managing OIDC at the Kubernetes +layer. The OIDC IDP feature is particularly useful for environments that do not have their own IDP configured. In this +scenario, you can leverage Palette as an IDP without having to configure a third-party IDP. We also support the ability +to take advantage of other OIDC providers by making it possible for you to configure OIDC at the tenant level. For +additional flexibility, if you wish to use a different IDP than the one configured at the tenant level, you can select a +different IDP by adding the OIDC configuration to your cluster profile. + +When you add the PXK pack to a cluster profile, Palette displays the OIDC IDP options listed below. + +All the options require you to map a set of users or groups to a Kubernetes RBAC role. To learn how to map a Kubernetes +role to users and groups, refer to +[Create Role Bindings](/clusters/cluster-management/cluster-rbac#create-role-bindings). You can also configure OIDC for +virtual clusters. For guidance, refer to +[Configure OIDC for a Virtual Cluster](../clusters/palette-virtual-clusters/configure-oidc-virtual-cluster.md). + +- **None**: This setting does not require OIDC configuration for the cluster. It displays in the YAML file as `noauth`. + + :::warning + + We do not recommend choosing **None** in a production environment, as it may disable authentication for add-ons that + rely on OIDC. + + ::: + +- **Custom**: This is the default setting and does not require OIDC configuration. However, if desired, it allows you to + specify a third-party OIDC provider by configuring OIDC statements in the YAML file as described in + [Configure Custom OIDC](#configure-custom-oidc). This setting displays in the YAML file as `none`. + +- **Palette**: This setting makes Palette the IDP. Any user with a Palette account in the tenant and the proper + permissions to view and access the project's resources is able to log into the Kubernetes dashboard. This setting + displays in the YAML file as `palette`. + +- **Inherit from Tenant**: This setting allows you to apply RBAC to multiple clusters and requires you to configure + OpenID Connect (OIDC) in **Tenant Settings**. In Tenant Admin scope, navigate to **Tenant Settings** > **SSO**, choose + **OIDC**, and provide your third-party IDP details. This setting displays in the YAML file as `tenant`. For more + information, check out the [SSO Setup](../user-management/saml-sso/saml-sso.md) guide. + + :::info + + If your IDP uses Security Assertion Markup Language (SAML) authentication, then the **Inherit from Tenant** option + will not work, and you will need to use the **Custom** option instead. This is because Kubernetes supports only OIDC + authentication and not SAML authentication. + + ::: + +### Configure Custom OIDC + +The custom method to configure OIDC and apply RBAC for an OIDC provider can be used for all cloud services except Amazon +Elastic Kubernetes Service (EKS) and [Azure-AKS](../clusters/public-cloud/azure/aks.md). + + + + + +Follow these steps to configure a third-party OIDC IDP. You can apply these steps to all the public cloud providers +except Azure AKS and Amazon EKS clusters. Azure AKS and Amazon EKS require different configurations. AKS requires you to +use Azure Active Directory (AAD) to enable OIDC integration. Refer to +[Enable OIDC in Kubernetes Clusters With Entra ID](../user-management/saml-sso/palette-sso-with-entra-id.md#enable-oidc-in-kubernetes-clusters-with-entra-id) +to learn more. Click the **Amazon EKS** tab for steps to configure OIDC for EKS clusters. + +1. Add the following parameters to your Kubernetes YAML file when creating a cluster profile. + + ```yaml + kubeadmconfig: + apiServer: + extraArgs: + oidc-issuer-url: "provider URL" + oidc-client-id: "client-id" + oidc-groups-claim: "groups" + oidc-username-claim: "email" + ``` + +2. Under the `clientConfig` parameter section of Kubernetes YAML file, uncomment the `oidc-` configuration lines. + + ```yaml + kubeadmconfig: + clientConfig: + oidc-issuer-url: "" + oidc-client-id: "" + oidc-client-secret: "" + oidc-extra-scope: profile,email,openid + ``` + + + + + +Follow these steps to configure OIDC for managed EKS clusters. + +1. In the Kubernetes pack, uncomment the lines in the `oidcIdentityProvider` parameter section of the Kubernetes pack, + and enter your third-party provider details. + + ```yaml + oidcIdentityProvider: + identityProviderConfigName: "Spectro-docs" + issuerUrl: "issuer-url" + clientId: "user-client-id-from-Palette" + usernameClaim: "email" + usernamePrefix: "-" + groupsClaim: "groups" + groupsPrefix: "" + requiredClaims: + ``` + +2. Under the `clientConfig` parameter section of Kubernetes pack, uncomment the `oidc-` configuration lines. + + ```yaml + clientConfig: + oidc-issuer-url: "{{ .spectro.pack.kubernetes-eks.managedControlPlane.oidcIdentityProvider.issuerUrl }}" + oidc-client-id: "{{ .spectro.pack.kubernetes-eks.managedControlPlane.oidcIdentityProvider.clientId }}" + oidc-client-secret: ************************************************** + oidc-extra-scope: profile,email + ``` + +3. Provide third-party OIDC IDP details. + + + + + +### Use RBAC with OIDC + +You can create a role binding that uses individual users as the subject or specify a group name as the subject to map +many users to a role. The group name is the group assigned in the OIDC provider's configuration. Below is an example. To +learn more, review [Create Role Bindings](../clusters/cluster-management/cluster-rbac.md#create-role-bindings). + +Assume you created a group named `dev-east-2` within an OIDC provider. If you configure the host cluster's Kubernetes +pack with all the correct OIDC settings, you could then create a role binding for the `dev-east-2` group. + +In this example, Palette is used as the IDP, and all users in the `dev-east-2` would inherit the `cluster-admin` role. + +![A subject of the type group is assigned as the subject in a RoleBinding](/clusters_cluster-management_cluster-rbac_cluster-subject-group.webp) + + + + + +:::warning + +All versions less than v1.27.x are considered deprecated. Upgrade to a newer version to take advantage of new features. + +::: + + + + +## Terraform + +You can reference Kubernetes in Terraform with the following code snippet. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "k8s" { + name = "kubernetes" + version = "1.29.4" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` + +## Resources + +- [Kubernetes](https://kubernetes.io/) + +- [Kubernetes Documentation](https://kubernetes.io/docs/concepts/overview/) + +- [Image Swap with Palette](../clusters/cluster-management/image-swap.md) + +- [RHEL and PXK for Vmware](../byoos/usecases/vmware/rhel-pxk.md) diff --git a/docs/deprecated/integrations/kubevious.md b/docs/deprecated/integrations/kubevious.md new file mode 100644 index 0000000000..d0bc28d298 --- /dev/null +++ b/docs/deprecated/integrations/kubevious.md @@ -0,0 +1,67 @@ +--- +sidebar_label: "Kubevious" +title: "Kubevious" +description: "Kubevious Monitoring pack in Spectro Cloud" +type: "integration" +hide_table_of_contents: true +category: ["monitoring", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/kubevious/blobs/sha256:5e33d7b51b1317a834b4552d96fc1cc8463000a7eedbcb4b784ea07236f3d7f7?type=image.webp" +tags: ["packs", "kubevious", "monitoring"] +--- + +Kubevious integration provides a graphical interface that renders easy to understand, application-centric Kubernetes +configurations. + +## Versions Supported + + + + +- **1.0.10** + + + + +- **0.8.15** + + + + +- **0.5.9** + + + + +## Components + +This integration deploys the following components: + +- Deployment +- MySql DB +- UI +- Parser + +## Ingress + +Follow the steps below to configure Ingress on Kubevious, according to the corresponding version + +1. Within the manifest, find the kubevious section **user** > **interface** > **service** > **type** and confirm/change, + according to the Kubevious version as listed in the table below. + + | **Versions** | **Parameters** | **Action** | + | ------------ | -------------------------------- | -------------------------------------------------------------------- | + | **1.0.10** | ui: service: type: **ClusterIP** | Confirm that it states **ClusterIP**. | + | **0.8.15** | ui: service: type: **ClusterIP** | Confirm that it states **ClusterIP**. | + | **0.5.9** | ui: svcType: **LoadBalancer** | Change kubevious.ui.svcType from **LoadBalancer** to **Cluster IP**. | + +2. Configure Ingress + - Enable Ingress; change enabled from _false_ to **true**. + - Set Ingress rules like annotations, path, hosts, etc. + +With these configuration changes, you can access the Kubevious service on the Ingress Controller LoadBalancer +hostname/IP. + +## References + +- [Kubevious GitHub](https://github.com/kubevious/kubevious) diff --git a/docs/deprecated/integrations/kubevirt.md b/docs/deprecated/integrations/kubevirt.md new file mode 100644 index 0000000000..8720256c09 --- /dev/null +++ b/docs/deprecated/integrations/kubevirt.md @@ -0,0 +1,64 @@ +--- +sidebar_label: "KubeVirt" +title: "KubeVirt" +description: "Choosing KubeVirt within the Palette console" +hide_table_of_contents: true +type: "integration" +category: ["system app", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/kubevirt/blobs/sha256:185e7a7658c05ab478f2822b080a7e21da9113b4a8bf5fb7fb3338d9a5796eed?type=image.webp" +tags: ["packs", "kubevirt", "system app"] +--- + +KubeVirt is a virtual machine management add-on for Kubernetes clusters. Create predefine virtual machines using +KubeVirt, and Palette will provision KubeVirt as an Add-on Pack to manage the VM resources within the orchestrator. + +
+ +## Version Supported + + + + +**0.51.0** + + + + +**0.55.0** + + + + +
+
+ +## Notable Parameters + +```yaml +manifests: + KubeVirt-operator: + # Enable Emulation (when no nested virtualization enabled) + useEmulation: true + KubeVirt-cr: + contents: | + apiVersion: KubeVirt.io/v1 + kind: KubeVirt + metadata: + name: KubeVirt + namespace: KubeVirt + spec: + certificateRotateStrategy: {} + configuration: + developerConfiguration: + featureGates: [] + customizeComponents: {} + imagePullPolicy: IfNotPresent + workloadUpdateStrategy: {} +``` + +## References + +- [Installing KubeVirt on Kubernetes](https://kubevirt.io/user-guide/cluster_admin/installation/#installing-kubevirt-on-kubernetes) + +- [GitHub KubeVirt](https://github.com/KubeVirt/KubeVirt/releases/tag/v0.51.0) diff --git a/docs/deprecated/integrations/kubewatch.md b/docs/deprecated/integrations/kubewatch.md new file mode 100644 index 0000000000..cfd0684789 --- /dev/null +++ b/docs/deprecated/integrations/kubewatch.md @@ -0,0 +1,41 @@ +--- +sidebar_label: "kube-watch" +title: "kube-watch" +description: "kube-watch monitoring pack in Spectro Cloud" +hide_table_of_contents: true +type: "integration" +category: ["monitoring", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.dev.spectrocloud.com/v1/kubewatch/blobs/sha256:a277fb90357df9cbffe98eea1ed100fba1b17970b8fc056d210c4f7bfe4f17a3?type=image.webp" +tags: ["packs", "kube-watch", "monitoring"] +--- + +Kubewatch is a Kubernetes watcher that currently publishes notification to available collaboration hubs/notification +channels. It is run in the k8s cluster for monitoring resource changes and event notifications are obtained through +webhooks. The supported webhooks are: + +- slack +- hipchat +- mattermost +- flock +- webhook +- smtp + +## Usage: + +kubewatch [flags] kubewatch [command] + +## Versions Supported + + + + + +**1.0.7** + + + + +## References + +- [kube-watch GitHub](https://github.com/robusta-dev/kubewatch) diff --git a/docs/docs-content/integrations/longhorn.md b/docs/deprecated/integrations/longhorn.md similarity index 100% rename from docs/docs-content/integrations/longhorn.md rename to docs/deprecated/integrations/longhorn.md diff --git a/docs/docs-content/integrations/metallb.md b/docs/deprecated/integrations/metallb.md similarity index 100% rename from docs/docs-content/integrations/metallb.md rename to docs/deprecated/integrations/metallb.md diff --git a/docs/docs-content/integrations/microk8s.md b/docs/deprecated/integrations/microk8s.md similarity index 100% rename from docs/docs-content/integrations/microk8s.md rename to docs/deprecated/integrations/microk8s.md diff --git a/docs/deprecated/integrations/multus-cni.md b/docs/deprecated/integrations/multus-cni.md new file mode 100644 index 0000000000..3d7630a283 --- /dev/null +++ b/docs/deprecated/integrations/multus-cni.md @@ -0,0 +1,56 @@ +--- +sidebar_label: "Multus CNI" +title: "Multus" +description: "Choosing Multus CNI within the Palette console" +type: "integration" +category: ["network", "amd64"] +sidebar_class_name: "hide-from-sidebar" +hide_table_of_contents: true +logoUrl: "https://registry.spectrocloud.com/v1/cni-multus/blobs/sha256:3727499ea41784a17c818b7269c27918b8664766c40d1b1f3cd90c34d5154676?type=image.webp" +tags: ["packs", "multus", "network"] +--- + +The Multus Container Network Interface (CNI) plugin enables multiple, network interfaces to attach to pods within +Kubernetes. Palette provisions the CNI-Multus 3.8.0 Add-on pack, so you can create a multi-homed pod for Kubernetes +right within the orchestrator. + +
+ +## Version Supported + + + + +**cni-multus 3.8.0** + + + + +
+
+ +# Notable Parameters + +| **Parameters** | **Values** | **Required/Optional** | **Description** | +| -------------------------- | ---------- | --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **name** | string | required | Enter the name of the network. | +| **type** | string | required | "multus" | +| **confDir** | string | optional | This is the directory for the CNI config file that multus reads. default /etc/cni/multus/net.d. | +| **cniDir** | string | optional | Multus CNI data directory. | +| **binDir** | string | optional | Additional directory for CNI plugins which multus calls. | +| **kubeconfig** | string | optional | Kubeconfig file for the out-of-cluster communication with kube-apiserver. | +| **logToStderr** | boolean | optional | Enable or disable logging to STDERR. Defaults to true. | +| **logFile** | string | optional | File path for log file. Multus add log in given file. | +| **logLevel** | string | optional | Logging level | +| **logOptions** | object | optional | Logging option | +| **namespaceIsolation** | boolean | optional | Enables a security feature the where pods are only allowed to access
NetworkAttachmentDefinitions in the namespace where the pod resides. Defaults to _false_. | +| **capabilities** | list | optional | Capabilities supported by at least one of the delegates. | +| **readinessindicatorfile** | string | | The path to a file whose existence denotes that the default network is ready. | + +## References + +- [Multus-CNI](https://github.com/k8snetworkplumbingwg/multi-net-spec) + +- [Multus-CNI Quickstart Guide](https://github.com/k8snetworkplumbingwg/multus-cni/blob/master/docs/quickstart.md) + +- [Mutltus Configuration](https://github.com/k8snetworkplumbingwg/multus-cni/blob/master/docs/configuration.md) diff --git a/docs/docs-content/integrations/nfs-subdir-external.md b/docs/deprecated/integrations/nfs-subdir-external.md similarity index 100% rename from docs/docs-content/integrations/nfs-subdir-external.md rename to docs/deprecated/integrations/nfs-subdir-external.md diff --git a/docs/deprecated/integrations/nginx.md b/docs/deprecated/integrations/nginx.md new file mode 100644 index 0000000000..10d55cf71b --- /dev/null +++ b/docs/deprecated/integrations/nginx.md @@ -0,0 +1,114 @@ +--- +sidebar_label: "Nginx" +title: "Nginx" +description: "Nginx Ingress pack in Spectro Cloud" +hide_table_of_contents: true +type: "integration" +category: ["ingress", "amd64", "arm64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/nginx/blobs/sha256:a36bf7e8023f018298ddbf0c82a49c38e872db4b0e480a39c285ae002916a83f?type=image.webp" +tags: ["packs", "nginx", "network"] +--- + +Ingress resource(s) in Kubernetes helps provide Service(s) externally-reachable URLs, load balance traffic, terminate +SSL / TLS, and offer name-based virtual hosting. NGINX integration is an +[Ingress controller](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers) responsible for +fulfilling the Ingress, usually with a load balancer, though it may also configure your edge router or additional +frontends to help handle the traffic. + +## Versions Supported + + + + + +- **1.4.0** + + + + + +- **1.3.0** + + + + + +- **1.2.5** + +
+ + **1.2.4** + +
+ + **1.2.3** + +
+ + **1.2.1** (deprecated) + +
+ + **1.2.0** (deprecated) + +
+ + + +- **1.0.4** + + + + + +- **0.26.1** + + + + + +- **0.43.0** + + + +
+ +## Components + +Integration creates the following components: + +- Ingress Controller. +- Default Backend. + +## Default SSL Certificate + +NGINX Ingress controller provides an option to set a default SSL certificate to be used for requests that do not match +any of the configured server names. The default certificate will also be used for ingress tls: sections that do not have +a secretName option. Below steps will come in handy to set the default certificate. + +1. Create a secret with key and certificate + ```bash + kubectl -n kube-system create secret tls ingress-tls --cert server.crt --key server.key + ``` +2. Edit Nginx ingress pack values to include extraArgs.default-ssl-certificate section which will reference the secret + created above + ```bash + charts: + nginx-ingress: + fullnameOverride: "nginx-ingress" + controller: + ... + ... + extraArgs: + default-ssl-certificate: "kube-system/ingress-tls" + ``` + +## Troubleshooting + +For basic troubleshooting, refer the below troubleshooting guide: +https://github.com/kubernetes/ingress-nginx/blob/master/docs/troubleshooting.md + +## References + +- [Nginx Ingress Controller](https://www.nginx.com/products/nginx-ingress-controller/) diff --git a/docs/docs-content/integrations/ngrok.md b/docs/deprecated/integrations/ngrok.md similarity index 100% rename from docs/docs-content/integrations/ngrok.md rename to docs/deprecated/integrations/ngrok.md diff --git a/docs/deprecated/integrations/nutanix-csi.md b/docs/deprecated/integrations/nutanix-csi.md new file mode 100644 index 0000000000..f69b71549b --- /dev/null +++ b/docs/deprecated/integrations/nutanix-csi.md @@ -0,0 +1,103 @@ +--- +sidebar_label: "Nutanix CSI" +title: "Nutanix CSI" +description: "Learn how to use the Nutanix CSI pack to provide persistent storage for your applications." +hide_table_of_contents: true +type: "integration" +category: ["storage", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.dev.spectrocloud.com/v1/nutanix-csi/blobs/sha256:7944cb5fecaaac0b5d5bf47a311ab80573147a34ac438954a70f97c69d65d733?type=image.webp" +tags: ["packs", "Nutanix", "Storage"] +--- + +The Nutanix Container Storage Interface (CSI) pack provides persistent storage for stateful applications. The pack +consists of two Helm charts - **nutanix-csi-storage** and **nutanix-cloud-provider**. + +The Nutanix Container Storage Interface (CSI) Volume Driver chart leverages Nutanix Volumes and Nutanix Files to provide +scalable and persistent storage for applications. + +The Nutanix Cloud Provider chart is a plugin that allows the integration of the Nutanix Acropolis Hypervisor (AHV) +platform with Kubernetes by implementing a node controller function. + +## Versions Supported + +- 2.6.6 + +## Prerequisites + +- A Nutanix Prism Central account. + +- A Nutanix Prism Element cluster created. + +- A Nutanix cloud registered with Palette with the name `nutanix`. For more information, refer to + [Register Nutanix Cloud](../clusters/data-center/nutanix/register-nutanix-cloud.md). + +- The cluster must use Kubernetes version 1.20 or higher. + +## Parameters + +The table below lists commonly used parameters you can configure when adding the Nutanix CSI pack. Review the Nutanix +CSI Pack README for a complete list of parameters. + +| **Parameter** | **Description** | **Default** | +| ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------- | +| `nutanix-cloud-provider.createConfig` | Creates a config for the Nutanix Cloud Provider. The existing config will be used if this parameter is set as `false`. | `true` | +| `nutanix-cloud-provider.configName` | Name of the ConfigMap for the Nutanix Cloud Provider config. | `nutanix-config` | +| `nutanix-cloud-provider.createSecret` | Creates a secret for the Nutanix Cloud Provider. The existing secret will be used if this parameter is set as `false`. | `true` | +| `nutanix-cloud-provider.enableCustomLabeling` | Adds additional and custom Nutanix labels to nodes. | `false` | +| `nutanix-cloud-provider.topologyDiscovery.type` | Defines how topology will be discovered (Prism or Categories). | `Prism` | +| `nutanix-cloud-provider.podAnnotations` | Adds annotations to the Cloud Provider Pod. | `{}` | +| `nutanix-csi-storage.volumeClass` | Activates the Nutanix Volumes Storage Class. | `false` | +| `nutanix-csi-storage.volumeClassName` | Name of the Nutanix Volumes Storage Class. | `nutanix-volume` | +| `nutanix-csi-storage.volumeClassRetention` | Retention policy for the Volumes Storage Class (Delete or Retain). | `Delete` | +| `nutanix-csi-storage.fileClass` | Activates Nutanix Files Storage Class. | `false` | + +## Usage + +Palette provides a default Volume storage class called `spectro-storage-class` to allow applications requiring volumes +to access persistent volumes. This storage class is created by the Nutanix CSI pack. + +A storage container must be configured in the Prism Element UI to enable the pack to create the storage class. Once the +storage container is configured, specify its name during the cluster profile creation. The container name must be +included in the values of the `nutanix-csi-storage` chart, under the `storageContainer:` line. The code snippet below +showcases an example configuration with a storage container named **test-container**. + +```bash +storageContainer: "test-container" +``` + +Nutanix Volumes utilize an Internet Small Computer System Interface (iSCSI) data service IP address to provide access to +cluster storage. In the Prism Element UI, go to the **Cluster Details** page and configure the iSCSI Data services IP +address as described in the +[Adding an ISCSI Data Services IP Address](https://portal.nutanix.com/page/documents/details?targetId=Volumes-Guide:vol-cluster-details-modify-wc-t.html) +guide. + +:::warning + +The iSCSI daemon needs to be enabled during the Nutanix cloud registration step. Refer to the +[Register Nutanix Cloud](../clusters/data-center/nutanix/register-nutanix-cloud.md) to learn more about the Nutanix +registration process. + +::: + +## Terraform + +You can reference the Nutanix CSI pack in Terraform with the following data resource. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} +data "spectrocloud_pack_simple" "nutanix-csi" { + name = "nutanix-csi" + version = "2.6.6" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` + +## References + +- [Nutanix Documentation](https://www.nutanixbible.com) +- [Nutanix Cloud Controller Manager on GitHub](https://github.com/nutanix-cloud-native/cloud-provider-nutanix) +- [Nutanix CSI Volume Driver Documentation](https://portal.nutanix.com/page/documents/details?targetId=CSI-Volume-Driver-v2_6:CSI-Volume-Driver-v2_6) diff --git a/docs/docs-content/integrations/opa-gatekeeper.md b/docs/deprecated/integrations/opa-gatekeeper.md similarity index 100% rename from docs/docs-content/integrations/opa-gatekeeper.md rename to docs/deprecated/integrations/opa-gatekeeper.md diff --git a/docs/deprecated/integrations/openstack-cinder.md b/docs/deprecated/integrations/openstack-cinder.md new file mode 100644 index 0000000000..6699b48453 --- /dev/null +++ b/docs/deprecated/integrations/openstack-cinder.md @@ -0,0 +1,64 @@ +--- +sidebar_label: "OpenStackCinder" +title: "Open Stack Cinder" +description: "OpenStackCinder storage pack in Spectro Cloud" +hide_table_of_contents: true +type: "integration" +category: ["storage", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.dev.spectrocloud.com/v1/csi-openstack-cinder/blobs/sha256:ebb9650566d2cdfe9b0fc7d474a1cdcd562a9020807e49f891df199379ab8961?type=image.webp" +tags: ["packs", "openstack-cinder", "storage"] +--- + +Unlike the traditional storage drivers of Kubernetes and the implementation of the Container Storage Interface (CSI), we +can deliver storage plug-ins using a standard interface without ever having to change the core Kubernetes code. Open +Stack Cinder provides OpenShift Container Platform users with storage options, such as volume snapshots that are not +possible with in-tree volume plug-ins. + +## Versions Supported + + + + + +**1.23** + + + + + +**1.22** + + + + + +**1.21** + + + + + +**1.20** + + + + + +**1.19** + + + + + +**1.18** + + + + + +## References + +- [OpenStack Cinder CSI Driver Operator](https://docs.openshift.com/container-platform/4.7/storage/container_storage_interface/persistent-storage-csi-cinder.html#csi-about_persistent-storage-csi-cinder) + +- [CSI Cinder driver](https://github.com/kubernetes/cloud-provider-openstack/blob/master/docs/cinder-csi-plugin/using-cinder-csi-plugin.md/) diff --git a/docs/deprecated/integrations/permission-manager.md b/docs/deprecated/integrations/permission-manager.md new file mode 100644 index 0000000000..0ebc2d653c --- /dev/null +++ b/docs/deprecated/integrations/permission-manager.md @@ -0,0 +1,53 @@ +--- +sidebar_label: "Permission Manager" +title: "Permission Manager" +description: "Permission Manager Authentication pack in Spectro Cloud" +type: "integration" +hide_table_of_contents: true +category: ["authentication", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/permission-manager/blobs/sha256:15d08b02d78823c12616b72d1b5adb0520940016b89bae1f758e6f1a105597ff?type=image.webp" +tags: ["packs", "permission-manager", "security"] +--- + +This integration provides a graphical user interface for RBAC management in Kubernetes. You can create users, assign +namespaces/permissions, and distribute Kubeconfig YAML files quickly. + +## Versions Supported + + + + +- **1.0.0** + + + + +## Configuration + +| Name | Supported Value | Description | +| ------------ | -------------------------- | ------------------------------------------------------------------ | +| namespace | Any valid namespace string | The namespace under which this integration should be deployed onto | +| authPassword | | Login password for the web interface | + +## Customizing the permission templates + +Create a ClusterRole starting with `template-namespaced-resources___` or `template-cluster-resources___` and apply it to +the cluster. Permission manager will honor any custom resources with this naming convention and will populate on the +user interface. + +## Ingress + +Follow below steps to configure Ingress on Permission Manager + +1. Change serviceType from "LoadBalancer" to "ClusterIP" (line #10) +2. Ingress (line #13) + - Enable Ingress; Change enabled from false to "true" + - Set Ingress rules like annotations, path, hosts, etc. + +With these config changes, you can access Permission manager service on the Ingress Controller LoadBalancer hostname / +IP + +## References + +- [Permission Manager GitHub](https://github.com/sighupio/permission-manager) diff --git a/docs/docs-content/integrations/portworx.md b/docs/deprecated/integrations/portworx.md similarity index 100% rename from docs/docs-content/integrations/portworx.md rename to docs/deprecated/integrations/portworx.md diff --git a/docs/docs-content/integrations/portworx_operator.md b/docs/deprecated/integrations/portworx_operator.md similarity index 100% rename from docs/docs-content/integrations/portworx_operator.md rename to docs/deprecated/integrations/portworx_operator.md diff --git a/docs/deprecated/integrations/prismacloud.md b/docs/deprecated/integrations/prismacloud.md new file mode 100644 index 0000000000..66879f8bbc --- /dev/null +++ b/docs/deprecated/integrations/prismacloud.md @@ -0,0 +1,30 @@ +--- +sidebar_label: "prisma-cloud-compute" +title: "Prisma Cloud Compute" +description: "prism-cloud-compute Security pack in Spectro Cloud" +hide_table_of_contents: true +type: "integration" +category: ["security", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.dev.spectrocloud.com/v1/prismacloud/blobs/sha256:9ddb035af0e9f299e5df178ebb3153e90383a5e42ded2c1a3f6c9470dd851c12?type=image.webp" +tags: ["packs", "prismacloud", "security"] +--- + +Prisma Cloud Compute is a cloud workload protection platform (CWPP) offering protection for hosts, containers, and +server-less deployments in any cloud, and across the software lifecycle. Prisma Cloud Compute is cloud-native and +API-enabled. It can protect tenant workloads, regardless of the underlying compute technology or the cloud deployment. + +## Versions Supported + + + + + +**20.9.0** + + + + +## References + +- [Prisma Cloud Compute Documentation](https://docs.paloaltonetworks.com/prisma/prisma-cloud) diff --git a/docs/deprecated/integrations/prometheus-agent.md b/docs/deprecated/integrations/prometheus-agent.md new file mode 100644 index 0000000000..f1404b62de --- /dev/null +++ b/docs/deprecated/integrations/prometheus-agent.md @@ -0,0 +1,154 @@ +--- +sidebar_label: "Prometheus Agent" +title: "Prometheus Agent" +description: "Prometheus Agent Monitoring Pack" +type: "integration" +hide_table_of_contents: true +category: ["monitoring", "amd64", "arm64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/prometheus-operator/blobs/sha256:64589616d7f667e5f1d7e3c9a39e32c676e03518a318924e123738693e104ce0?type=image.webp" +tags: ["packs", "prometheus-agent", "monitoring"] +--- + +Prometheus is an open-source monitoring and alerting system that is designed to collect and analyze metrics from various +systems and services. + +Prometheus is built around a time-series database that stores metrics data. It uses a flexible querying language called +PromQL to extract and process metrics data. Prometheus also has a powerful alerting system that can be used to send +notifications when specific conditions are met. + +Prometheus can be used to monitor a wide range of systems and services, including servers, containers, databases, and +applications. It can be deployed in a variety of environments, including on-prem, cloud, and hybrid setups. + +The Prometheus Agent pack works in tandem with the [Prometheus Operator pack](prometheus-operator.md). Check out the +guides [Deploy Monitoring Stack](../clusters/cluster-management/monitoring/deploy-monitor-stack.md) and +[Enable Monitoring on Host Cluster](../clusters/cluster-management/monitoring/deploy-agent.md) to learn how to create a +monitoring stack with Prometheus for your Palette environment. + +## Versions Supported + +**19.0.X** + +## Prerequisites + +- A host cluster that has the [Prometheus Operator pack](prometheus-operator.md) installed. + +## Parameters + +The Prometheus agent supports all the parameters exposed by the Prometheus Helm Chart. Refer to the +[Prometheus Helm Chart](https://github.com/prometheus-community/helm-charts/tree/main/charts/prometheus#configuration) +documentation for details. + +From a Palette perspective, you must provide a value for the `remoteWrite.url` parameter shown in the following example. + +
+ +```yaml +charts: + prometheus: + server: + remoteWrite: + - url: "" +``` + +The `remoteWrite.url` is exposed by the [Prometheus Operator pack](prometheus-operator.md) when installed in a cluster. +You can find the Prometheus server URL by reviewing the details of the Kubernetes cluster hosting the Prometheus server. +Use the URL exposed by the Prometheus service. + +The following image displays a host cluster with the Prometheus Operator pack installed. Use the URL exposed for port +9090 to populate the `remoteWrite.url` parameter. + +![A view of the cluster details page with a highlighted box around the Prometheus service URL](/integrations_prometheus-agent_cluster-detail-view.webp) + +
+ +:::warning + +The Prometheus server URL must be in the format `http://HOST:PORT/api/v1/write`. Example: +`http://a2c938972938b4f0daee5f56edbd40af-1690032247.us-east-1.elb.amazonaws.com:9090/api/v1/write` + +::: + +If the Prometheus server is configured with authentication, add the authentication parameters. Replace `` and +`` with the actual credential values. + +
+ +```yaml +charts: + prometheus: + server: + remoteWrite: + - url: "" + remote_timeout: "5s" + basic_auth: + username: "" + password: +``` + +## Usage + +The Prometheus agent pack works out-of-the-box and only requires you to provide a Prometheus server URL. Add the +Prometheus agent pack to a cluster profile to get started with Prometheus. You can create a new cluster profile that has +the Prometheus agent as an add-on pack or you can update an existing cluster profile by adding the Prometheus agent +pack. For guidance, review +[Update a Cluster Profile](../profiles/cluster-profiles/modify-cluster-profiles/update-cluster-profile.md). + +Log in to the Grafana dashboard to view and create dashboards. You can find the Grafana dashboard URL by reviewing the +details of the Kubernetes cluster hosting the Prometheus server. Use the URL exposed by the +**prometheus-operator-kube-prometheus-stack-grafana** service. + +![The URL of the service prometheus-operator-kube-prometheus-stack-grafana](/integrations_prometheus-agent_cluster-detail-view-grafana.webp) + +Palette exposes a set of Grafana dashboards by default. You can find the Spectro Cloud dashboards by navigating to +Grafana's left **Main Menu** > **Dashboards** and expanding the **Spectro Cloud** folder. + +The following dashboards are available by default: + +- Kubernetes/System/API Server: A view of the resources and status of the Kubernetes cluster hosting the Prometheus + server. + +- Kubernetes/Views/Global: An aggregate view of all the resources used by Kubernetes clusters. + +- Kubernetes/Views/Namespaces: An aggregate view of all the resources used by a specific Kubernetes namespace. + +- Kubernetes/Views/Nodes: A view of all nodes with the Prometheus agent installed. + +- Kubernetes/Views/Pods: A view of all the pods in a node with the Prometheus agent installed. + +
+ +:::info + +Use the filters to narrow down the information displayed. All Palette dashboards include the **project** and **cluster** +filter. + +::: + +We encourage you to check out the [Grafana](https://grafana.com/tutorials/) tutorials and learning resources to learn +more about Grafana. + +## Terraform + +You can retrieve details about the Prometheus agent pack by using the following Terraform code. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "pack-info" { + name = "prometheus-agent" + version = "19.0.2" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` + +# References + +- [Prometheus Operator pack](prometheus-operator.md) + +- [Prometheus Helm Chart](https://github.com/prometheus-community/helm-charts/tree/main/charts/prometheus#configuration) + +- [Grafana Tutorials](https://grafana.com/tutorials/) diff --git a/docs/docs-content/integrations/prometheus-cluster-metrics.md b/docs/deprecated/integrations/prometheus-cluster-metrics.md similarity index 100% rename from docs/docs-content/integrations/prometheus-cluster-metrics.md rename to docs/deprecated/integrations/prometheus-cluster-metrics.md diff --git a/docs/deprecated/integrations/prometheus-operator.md b/docs/deprecated/integrations/prometheus-operator.md new file mode 100644 index 0000000000..4dc1dc506d --- /dev/null +++ b/docs/deprecated/integrations/prometheus-operator.md @@ -0,0 +1,1240 @@ +--- +sidebar_label: "Prometheus Operator" +title: "Prometheus Operator" +description: "Prometheus Operator Monitoring pack in Spectro Cloud" +type: "integration" +hide_table_of_contents: true +category: ["monitoring", "amd64", "arm64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/prometheus-operator/blobs/sha256:64589616d7f667e5f1d7e3c9a39e32c676e03518a318924e123738693e104ce0?type=image.webp" +tags: ["packs", "prometheus-operator", "monitoring"] +--- + +Prometheus is an open-source monitoring system that is designed to collect and analyze metrics from various sources, +such as applications, servers, and networks. It is widely used in the DevOps world to monitor the health and performance +of applications and infrastructure. Prometheus stores metrics in a time-series database and provides a query language +for analyzing the data. It also includes a powerful alerting system that can notify operators when thresholds are +breached. + +The Prometheus Operator is a tool that simplifies the deployment and management of Prometheus in a Kubernetes cluster. +It automates tasks such as configuring Prometheus, creating and managing Prometheus rules and alerts and scaling +Prometheus instances based on demand. The Operator uses Kubernetes custom resources to define and manage Prometheus +instances and related resources, such as ServiceMonitors, which enable Prometheus to discover and monitor services +running in the cluster. + +You can use the Prometheus Operator to create a monitoring stack that other host clusters point to and forward metrics +to. Check out the guide [Deploy Monitoring Stack](../clusters/cluster-management/monitoring/deploy-monitor-stack.md) to +learn how to create a monitoring stack with Prometheus for your Palette environment. + +
+ +:::info + +We recommend you use version v44.3.x or greater moving forward for a simplified and improved user experience when +creating a monitoring stack for your architecture. Starting with version v44.3.x the remote monitoring feature is +supported. Check out the [Prometheus Remote Write Tuning](https://prometheus.io/docs/practices/remote_write/) to learn +more about the remote monitoring feature. + +::: + +## Versions Supported + + + + +## Prerequisites + +- Kubernetes v1.16 or greater. + +- The minimum required size for the Prometheus server is 4 CPU, 8 GB Memory, and 10 GB Storage. We recommend the + monitoring stack have 1.5x to 2x the minimum required size: + + Recommended size: + + - 8 CPU + - 16 GB Memory + - 20 GB Storage + + As new clusters with the Prometheus agent are added to your environment, review the resource utilization and consider + increasing resources if needed. As the Prometheus documentation recommends, each additional agent requires the + following resources from the monitoring stack: + + Each added agent: + + - 0.1 CPU + - 250 MiB Memory + - 1 GB Storage + + Refer to the + [Prometheus Operational aspects](https://prometheus.io/docs/prometheus/latest/storage/#operational-aspects) + documentation for additional guidance. + +## Parameters + +The Prometheus operator supports all the parameters exposed by the kube-prometheus-stack Helm Chart. Refer to the +[kube-prometheus-stack](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack) +documentation for details. + +The Prometheus Operator pack has one parameter you must initialize `grafana.adminPassword`: + +
+ +```yaml +charts: + kube-prometheus-stack: + grafana: + adminPassword: "" +``` + +Use the `grafana.adminPassword` parameter to assign a password to the Grafana admin user `admin`. + +Additional parameters you should be aware of can be found by expanding the **Presets** options. You can modify the +preset settings when you create the profile or when you deploy the cluster and review the cluster profile. + +![A view of the pack's preset drawer expanded with radio buttons](/integrations_prometheus-operator_operator-preset-view-expanded.webp) + +Review the usage section below to learn more about each preset option. + +
+ +## Usage + +Check out the guide [Deploy Monitoring Stack](../clusters/cluster-management/monitoring/deploy-monitor-stack.md) to +learn how to create a monitoring stack with Prometheus for your Palette environment. + +
+ +#### Airgap Palette and VerteX + +In the context of an airgap Palette or VerteX installation, you must remove the `grafana-piechart-panel` plugin. This +plugin is not included by default and requires an internet connection to download. The monitoring stack doesn't require +this plugin to function properly. + +```yaml {5} +charts: + kube-prometheus-stack: + grafana: + plugins: + - grafana-piechart-panel +``` + +#### Email Alerts + +You can configure the Prometheus server to send email alerts to a set of contacts. Toggle the **Email Alerts** button to +enable email alerting. Update the `alertmanager.config.receivers` settings with all the required email setting values. + +
+ +```yaml +charts: + kube-prometheus-stack: + alertmanager: + config: + receivers: + - name: email-alert + email_configs: + - to: @.com + send_resolved: true + from: @.com + smarthost: smtp..com:587 + auth_username: @.com + auth_identity: @.com + auth_password: +``` + +Refer to the [Prometheus Alertmanager Configuration](https://prometheus.io/docs/alerting/latest/configuration/) +documentation to learn more about Alertmanager. + +
+ +#### Grafana Ingress + +You can enable an ingress endpoint for Grafana that will deploy an NGINX ingress controller. This feature can be used to +enable HTTPS and require authentication for all Prometheus API requests. + +If you do not enable the ingress option, then by default a service with a load balancer will be created that exposes +port 80. + +Toggle the **Enable** button to enable the use of Ingress. + +
+ +#### Thanos SideCar + +[Thanos](https://prometheus-operator.dev/docs/platform/thanos/) is an open-source system for running large-scale, +distributed, and highly available Prometheus setups. Thanos allows Prometheus to store data for extended periods in +object storage, such as Amazon S3 or Google Cloud Storage, instead of a local disk. This enables Prometheus to scale +horizontally without the risk of using up local storage space. + +Toggle the **Enable** button to enable the use of Thanos. + +
+ +#### Object Store + +Select the Thanos object storage type you will use. Review the `thanos.objstoreConfig` parameters to configure the use +of object storage with Thanos. Refer to the +[Thanos Object Storage](https://github.com/thanos-io/thanos/blob/main/docs/storage.md) documentation to learn more about +how to configure each object storage. + +
+ +```yaml +charts: + kube-prometheus-stack: + prometheus: + prometheusSpec: + thanos: + objstoreConfig: +``` + +#### Thanos Ruler Object Store + +By default, Thanos Ruler event data is saved in object storage specified for Thanos, but you can specify a different +object storage for event data. Refer to the +[Thanos Ruler](https://prometheus-operator.dev/docs/platform/thanos/#thanos-ruler) resource to learn more. + +
+ +#### Remote Monitoring + +You can configure the Prometheus server to accept metrics from Prometheus agents and become a centralized aggregation +point for all Kubernetes metrics. Enabling this feature will expose port 9090 of the _prometheus-operator-prometheus_ +service. Use the generated service URL to provide other Kubernetes clusters with the installed +[Prometheus Agent](prometheus-agent.md) so that cluster metrics can be forwarded to the Prometheus server. + +The remote monitoring feature is configured with defaults to help you consume this feature out-of-the-box. You can +change any configuration related to remote monitoring to fine-tune settings for your environment. + +Refer to the [Prometheus Remote Write Tuning](https://prometheus.io/docs/practices/remote_write/) resource to learn more +about configuration options. + +To get started with remote monitoring, check out the +[Deploy Monitoring Stack](../clusters/cluster-management/monitoring/deploy-monitor-stack.md) guide. + +
+ +#### Palette Resources Monitoring + +You can access internal Palette metrics in Grafana by adding the +[Prometheus Cluster Metrics](prometheus-cluster-metrics.md) pack to all your client clusters. Refer to the +[Enable Monitoring on Host Cluster](../clusters/cluster-management/monitoring/deploy-agent.md) guide to learn more. + +
+ +#### Persistent Storage + +You can configure the Prometheus Operator to use persistent storage. To enable persistent storage add the following code +snippet to the `kube-prometheus-stack.prometheus.prometheusSpec.storageSpec` configuration block in the pack's YAML +configuration file. The code snippet below creates a Persistent Volume Claim (PVC) for the Prometheus Operator. + +
+ +```yaml +kube-prometheus-stack: + prometheus: + prometheusSpec: + storageSpec: + volumeClaimTemplate: + metadata: + name: prom-operator-pvc + spec: + storageClassName: spectro-storage-class + accessModes: ["ReadWriteOnce"] + resources: + requests: + storage: 5Gi +``` + +### Dependencies + +The Prometheus Operator pack installs the following dependencies: + +- [Prometheus Operator GitHub](https://github.com/coreos/prometheus-operator) +- [Prometheus](https://prometheus.io/) +- [Prometheus Alertmanager](https://www.prometheus.io/docs/alerting/latest/alertmanager/) + +- [node-exporter](https://github.com/helm/charts/tree/master/stable/prometheus-node-exporter) +- [kube-state-metrics](https://github.com/helm/charts/tree/master/stable/kube-state-metrics) +- [Grafana](https://github.com/helm/charts/tree/master/stable/grafana) +- Service monitors to scrape internal Kubernetes components + +
+ + + +## Prerequisites + +- Kubernetes v1.16 or greater. + +- The minimum required size for the Prometheus server is 4 CPU, 8 GB Memory, and 10 GB Storage. We recommend the + monitoring stack have 1.5x to 2x the minimum required size: + + Recommended size: + + - 8 CPU + - 16 GB Memory + - 20 GB Storage + + As new clusters with the Prometheus agent are added to your environment, review the resource utilization and consider + increasing resources if needed. As the Prometheus documentation recommends, each additional agent requires the + following resources from the monitoring stack: + + Each added agent: + + - 0.1 CPU + - 250 MiB Memory + - 1 GB Storage + + Refer to the + [Prometheus Operational aspects](https://prometheus.io/docs/prometheus/latest/storage/#operational-aspects) + documentation for additional guidance. + +## Parameters + +The Prometheus operator supports all the parameters exposed by the kube-prometheus-stack Helm Chart. Refer to the +[kube-prometheus-stack](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack) +documentation for details. + +The Prometheus Operator pack has one parameter you must initialize `grafana.adminPassword`: + +
+ +```yaml +charts: + kube-prometheus-stack: + grafana: + adminPassword: "" +``` + +Use the `grafana.adminPassword` parameter to assign a password to the Grafana admin user `admin`. + +Additional parameters you should be aware of can be found by expanding the **Presets** options. You can modify the +preset settings when you create the profile or when you deploy the cluster and review the cluster profile. + +![A view of the pack's preset drawer expanded with radio buttons](/integrations_prometheus-operator_operator-preset-view-expanded.webp) + +Review the usage section below to learn more about each preset option. + +
+ +## Usage + +Check out the guide [Deploy Monitoring Stack](../clusters/cluster-management/monitoring/deploy-monitor-stack.md) to +learn how to create a monitoring stack with Prometheus for your Palette environment. + +
+ +#### Airgap Palette and VerteX + +In the context of an airgap Palette or VerteX installation, you must remove the `grafana-piechart-panel` plugin. This +plugin is not included by default and requires an internet connection to download. The monitoring stack doesn't require +this plugin to function properly. + +```yaml {5} +charts: + kube-prometheus-stack: + grafana: + plugins: + - grafana-piechart-panel +``` + +#### Email Alerts + +You can configure the Prometheus server to send email alerts to a set of contacts. Toggle the **Email Alerts** button to +enable email alerting. Update the `alertmanager.config.receivers` settings with all the required email setting values. + +
+ +```yaml +charts: + kube-prometheus-stack: + alertmanager: + config: + receivers: + - name: email-alert + email_configs: + - to: @.com + send_resolved: true + from: @.com + smarthost: smtp..com:587 + auth_username: @.com + auth_identity: @.com + auth_password: +``` + +Refer to the [Prometheus Alertmanager Configuration](https://prometheus.io/docs/alerting/latest/configuration/) +documentation to learn more about Alertmanager. + +
+ +#### Grafana Ingress + +You can enable an ingress endpoint for Grafana that will deploy an NGINX ingress controller. This feature can be used to +enable HTTPS and require authentication for all Prometheus API requests. + +If you do not enable the ingress option, then by default a service with a load balancer will be created that exposes +port 80. + +Toggle the **Enable** button to enable the use of Ingress. + +
+ +#### Thanos SideCar + +[Thanos](https://prometheus-operator.dev/docs/platform/thanos/) is an open-source system for running large-scale, +distributed, and highly available Prometheus setups. Thanos allows Prometheus to store data for extended periods in +object storage, such as Amazon S3 or Google Cloud Storage, instead of a local disk. This enables Prometheus to scale +horizontally without the risk of using up local storage space. + +Toggle the **Enable** button to enable the use of Thanos. + +
+ +#### Object Store + +Select the Thanos object storage type you will use. Review the `thanos.objstoreConfig` parameters to configure the use +of object storage with Thanos. Refer to the +[Thanos Object Storage](https://github.com/thanos-io/thanos/blob/main/docs/storage.md) documentation to learn more about +how to configure each object storage. + +
+ +```yaml +charts: + kube-prometheus-stack: + prometheus: + prometheusSpec: + thanos: + objstoreConfig: +``` + +#### Thanos Ruler Object Store + +By default, Thanos Ruler event data is saved in object storage specified for Thanos, but you can specify a different +object storage for event data. Refer to the +[Thanos Ruler](https://prometheus-operator.dev/docs/platform/thanos/#thanos-ruler) resource to learn more. + +
+ +#### Remote Monitoring + +You can configure the Prometheus server to accept metrics from Prometheus agents and become a centralized aggregation +point for all Kubernetes metrics. Enabling this feature will expose port 9090 of the _prometheus-operator-prometheus_ +service. Use the generated service URL to provide other Kubernetes clusters with the installed +[Prometheus Agent](prometheus-agent.md) so that cluster metrics can be forwarded to the Prometheus server. + +The remote monitoring feature is configured with defaults to help you consume this feature out-of-the-box. You can +change any configuration related to remote monitoring to fine-tune settings for your environment. + +Refer to the [Prometheus Remote Write Tuning](https://prometheus.io/docs/practices/remote_write/) resource to learn more +about configuration options. + +To get started with remote monitoring, check out the +[Deploy Monitoring Stack](../clusters/cluster-management/monitoring/deploy-monitor-stack.md) guide. + +
+ +#### Palette Resources Monitoring + +You can access internal Palette metrics in Grafana by adding the +[Prometheus Cluster Metrics](prometheus-cluster-metrics.md) pack to all your client clusters. Refer to the +[Enable Monitoring on Host Cluster](../clusters/cluster-management/monitoring/deploy-agent.md) guide to learn more. + +
+ +#### Persistent Storage + +You can configure the Prometheus Operator to use persistent storage. To enable persistent storage, add the following +code snippet to the `kube-prometheus-stack.prometheus.prometheusSpec.storageSpec` configuration block in the pack's YAML +configuration file. The code snippet below creates a Persistent Volume Claim (PVC) for the Prometheus Operator. + +
+ +```yaml +kube-prometheus-stack: + prometheus: + prometheusSpec: + storageSpec: + volumeClaimTemplate: + metadata: + name: prom-operator-pvc + spec: + storageClassName: spectro-storage-class + accessModes: ["ReadWriteOnce"] + resources: + requests: + storage: 5Gi +``` + +### Dependencies + +The Prometheus Operator pack installs the following dependencies: + +- [Prometheus Operator GitHub](https://github.com/coreos/prometheus-operator) +- [Prometheus](https://prometheus.io/) +- [Prometheus Alertmanager](https://www.prometheus.io/docs/alerting/latest/alertmanager/) + +- [node-exporter](https://github.com/helm/charts/tree/master/stable/prometheus-node-exporter) +- [kube-state-metrics](https://github.com/helm/charts/tree/master/stable/kube-state-metrics) +- [Grafana](https://github.com/helm/charts/tree/master/stable/grafana) +- Service monitors to scrape internal Kubernetes components + +
+ + + +## Prerequisites + +- Kubernetes v1.16 or greater. + +- The minimum required size for the Prometheus server is 4 CPU, 8 GB Memory, and 10 GB Storage. We recommend the + monitoring stack have 1.5x to 2x the minimum required size: + + Recommended size: + + - 8 CPU + - 16 GB Memory + - 20 GB Storage + + As new clusters with the Prometheus agent are added to your environment, review the resource utilization and consider + increasing resources if needed. As the Prometheus documentation recommends, each additional agent requires the + following resources from the monitoring stack: + + Each added agent: + + - 0.1 CPU + - 250 MiB Memory + - 1 GB Storage + + Refer to the + [Prometheus Operational aspects](https://prometheus.io/docs/prometheus/latest/storage/#operational-aspects) + documentation for additional guidance. + +## Parameters + +The Prometheus operator supports all the parameters exposed by the kube-prometheus-stack Helm Chart. Refer to the +[kube-prometheus-stack](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack) +documentation for details. + +The Prometheus Operator pack has one parameter you must initialize `grafana.adminPassword`: + +
+ +```yaml +charts: + kube-prometheus-stack: + grafana: + adminPassword: "" +``` + +Use the `grafana.adminPassword` parameter to assign a password to the Grafana admin user `admin`. + +Additional parameters you should be aware of can be found by expanding the **Presets** options. You can modify the +preset settings when you create the profile or when you deploy the cluster and review the cluster profile. + +![A view of the pack's preset drawer expanded with radio buttons](/integrations_prometheus-operator_operator-preset-view-expanded.webp) + +Review the usage section below to learn more about each preset option. + +
+ +## Usage + +Check out the guide [Deploy Monitoring Stack](../clusters/cluster-management/monitoring/deploy-monitor-stack.md) to +learn how to create a monitoring stack with Prometheus for your Palette environment. + +
+ +#### Airgap Palette and VerteX + +In the context of an airgap Palette or VerteX installation, you must remove the `grafana-piechart-panel` plugin. This +plugin is not included by default and requires an internet connection to download. The monitoring stack doesn't require +this plugin to function properly. + +```yaml {5} +charts: + kube-prometheus-stack: + grafana: + plugins: + - grafana-piechart-panel +``` + +#### Email Alerts + +You can configure the Prometheus server to send email alerts to a set of contacts. Toggle the **Email Alerts** button to +enable email alerting. Update the `alertmanager.config.receivers` settings with all the required email setting values. + +
+ +```yaml +charts: + kube-prometheus-stack: + alertmanager: + config: + receivers: + - name: email-alert + email_configs: + - to: @.com + send_resolved: true + from: @.com + smarthost: smtp..com:587 + auth_username: @.com + auth_identity: @.com + auth_password: +``` + +Refer to the [Prometheus Alertmanager Configuration](https://prometheus.io/docs/alerting/latest/configuration/) +documentation to learn more about Alertmanager. + +
+ +#### Grafana Ingress + +You can enable an ingress endpoint for Grafana that will deploy an NGINX ingress controller. This feature can be used to +enable HTTPS and require authentication for all Prometheus API requests. + +If you do not enable the ingress option, then by default a service with a load balancer will be created that exposes +port 80. + +Toggle the **Enable** button to enable the use of Ingress. + +
+ +#### Thanos SideCar + +[Thanos](https://prometheus-operator.dev/docs/platform/thanos/) is an open-source system for running large-scale, +distributed, and highly available Prometheus setups. Thanos allows Prometheus to store data for extended periods in +object storage, such as Amazon S3 or Google Cloud Storage, instead of a local disk. This enables Prometheus to scale +horizontally without the risk of using up local storage space. + +Toggle the **Enable** button to enable the use of Thanos. + +
+ +#### Object Store + +Select the Thanos object storage type you will use. Review the `thanos.objstoreConfig` parameters to configure the use +of object storage with Thanos. Refer to the +[Thanos Object Storage](https://github.com/thanos-io/thanos/blob/main/docs/storage.md) documentation to learn more about +how to configure each object storage. + +
+ +```yaml +charts: + kube-prometheus-stack: + prometheus: + prometheusSpec: + thanos: + objstoreConfig: +``` + +#### Thanos Ruler Object Store + +By default, Thanos Ruler event data is saved in object storage specified for Thanos, but you can specify a different +object storage for event data. Refer to the +[Thanos Ruler](https://prometheus-operator.dev/docs/platform/thanos/#thanos-ruler) resource to learn more. + +
+ +#### Remote Monitoring + +You can configure the Prometheus server to accept metrics from Prometheus agents and become a centralized aggregation +point for all Kubernetes metrics. Enabling this feature will expose port 9090 of the _prometheus-operator-prometheus_ +service. Use the generated service URL to provide other Kubernetes clusters with the installed +[Prometheus Agent](prometheus-agent.md), so that cluster metrics can be forwarded to the Prometheus server. + +The remote monitoring feature is configured with defaults to help you consume this feature out-of-the-box. You can +change any configuration related to remote monitoring to fine-tune settings for your environment. + +Refer to the [Prometheus Remote Write Tuning](https://prometheus.io/docs/practices/remote_write/) resource to learn more +about the available configuration options. + +To get started with remote monitoring, check out the +[Deploy Monitoring Stack](../clusters/cluster-management/monitoring/deploy-monitor-stack.md) guide. + +
+ +#### Palette Resources Monitoring + +You can access internal Palette metrics in Grafana by adding the +[Prometheus Cluster Metrics](prometheus-cluster-metrics.md) pack to all your client clusters. Refer to the +[Enable Monitoring on Host Cluster](../clusters/cluster-management/monitoring/deploy-agent.md) guide to learn more. + +
+ +#### Persistent Storage + +You can configure the Prometheus Operator to use persistent storage. To enable persistent storage add the following code +snippet to the `kube-prometheus-stack.prometheus.prometheusSpec.storageSpec` configuration block in the pack's YAML +configuration file. The code snippet below creates a Persistent Volume Claim (PVC) for the Prometheus Operator. + +
+ +```yaml +kube-prometheus-stack: + prometheus: + prometheusSpec: + storageSpec: + volumeClaimTemplate: + metadata: + name: prom-operator-pvc + spec: + storageClassName: spectro-storage-class + accessModes: ["ReadWriteOnce"] + resources: + requests: + storage: 5Gi +``` + +### Dependencies + +The Prometheus Operator pack installs the following dependencies: + +- [Prometheus Operator GitHub](https://github.com/coreos/prometheus-operator) +- [Prometheus](https://prometheus.io/) +- [Prometheus Alertmanager](https://www.prometheus.io/docs/alerting/latest/alertmanager/) + +- [node-exporter](https://github.com/helm/charts/tree/master/stable/prometheus-node-exporter) +- [kube-state-metrics](https://github.com/helm/charts/tree/master/stable/kube-state-metrics) +- [Grafana](https://github.com/helm/charts/tree/master/stable/grafana) +- Service monitors to scrape internal Kubernetes components + +
+ + + +## Prerequisites + +- Kubernetes v1.16 or greater. + +- The minimum required size for the Prometheus server is 4 CPU, 8 GB Memory, and 10 GB Storage. We recommend the + monitoring stack have 1.5x to 2x the minimum required size: + + Recommended size: + + - 8 CPU + - 16 GB Memory + - 20 GB Storage + + As new clusters with the Prometheus agent are added to your environment, review the resource utilization and consider + increasing resources if needed. As the Prometheus documentation recommends, each additional agent requires the + following resources from the monitoring stack: + + Each added agent: + + - 0.1 CPU + - 250 MiB Memory + - 1 GB Storage + + Refer to the + [Prometheus Operational aspects](https://prometheus.io/docs/prometheus/latest/storage/#operational-aspects) + documentation for additional guidance. + +## Parameters + +The Prometheus operator supports all the parameters exposed by the kube-prometheus-stack Helm Chart. Refer to the +[kube-prometheus-stack](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack) +documentation for details. + +The Prometheus Operator pack has one parameter you must initialize `grafana.adminPassword`: + +
+ +```yaml +charts: + kube-prometheus-stack: + grafana: + adminPassword: "" +``` + +Use the `grafana.adminPassword` parameter to assign a password to the Grafana admin user `admin`. + +Additional parameters you should be aware of can be found by expanding the **Presets** options. You can modify the +preset settings when you create the profile or when you deploy the cluster and review the cluster profile. + +![A view of the pack's preset drawer expanded with radio buttons](/integrations_prometheus-operator_operator-preset-view-expanded.webp) + +Review the usage section below to learn more about each preset option. + +
+ +## Usage + +Check out the guide [Deploy Monitoring Stack](../clusters/cluster-management/monitoring/deploy-monitor-stack.md) to +learn how to create a monitoring stack with Prometheus for your Palette environment. + +
+ +#### Airgap Palette and VerteX + +In the context of an airgap Palette or VerteX installation, you must remove the `grafana-piechart-panel` plugin. This +plugin is not included by default and requires an internet connection to download. The monitoring stack doesn't require +this plugin to function properly. + +```yaml {5} +charts: + kube-prometheus-stack: + grafana: + plugins: + - grafana-piechart-panel +``` + +#### Email Alerts + +You can configure the Prometheus server to send email alerts to a set of contacts. Toggle the **Email Alerts** button to +enable email alerting. Update the `alertmanager.config.receivers` settings with all the required email setting values. + +
+ +```yaml +charts: + kube-prometheus-stack: + alertmanager: + config: + receivers: + - name: email-alert + email_configs: + - to: @.com + send_resolved: true + from: @.com + smarthost: smtp..com:587 + auth_username: @.com + auth_identity: @.com + auth_password: +``` + +Refer to the [Prometheus Alertmanager Configuration](https://prometheus.io/docs/alerting/latest/configuration/) +documentation to learn more about Alertmanager. + +
+ +#### Grafana Ingress + +You can enable an ingress endpoint for Grafana that will deploy an NGINX ingress controller. This feature can be used to +enable HTTPS and require authentication for all Prometheus API requests. + +If you do not enable the ingress option, then by default a service with a load balancer will be created that exposes +port 80. + +Toggle the **Enable** button to enable the use of Ingress. + +
+ +#### Thanos SideCar + +[Thanos](https://prometheus-operator.dev/docs/platform/thanos/) is an open-source system for running large-scale, +distributed, and highly available Prometheus setups. Thanos allows Prometheus to store data for extended periods in +object storage, such as Amazon S3 or Google Cloud Storage, instead of a local disk. This enables Prometheus to scale +horizontally without the risk of using up local storage space. + +Toggle the **Enable** button to enable the use of Thanos. + +
+ +#### Object Store + +Select the Thanos object storage type you will use. Review the `thanos.objstoreConfig` parameters to configure the use +of object storage with Thanos. Refer to the +[Thanos Object Storage](https://github.com/thanos-io/thanos/blob/main/docs/storage.md) documentation to learn more about +how to configure each object storage. + +
+ +```yaml +charts: + kube-prometheus-stack: + prometheus: + prometheusSpec: + thanos: + objstoreConfig: +``` + +#### Thanos Ruler Object Store + +By default, Thanos Ruler event data is saved in object storage specified for Thanos, but you can specify a different +object storage for event data. Refer to the +[Thanos Ruler](https://prometheus-operator.dev/docs/platform/thanos/#thanos-ruler) resource to learn more. + +
+ +#### Remote Monitoring + +You can configure the Prometheus server to accept metrics from Prometheus agents and become a centralized aggregation +point for all Kubernetes metrics. Enabling this feature will expose port 9090 of the _prometheus-operator-prometheus_ +service. Use the generated service URL to provide other Kubernetes clusters with the installed +[Prometheus Agent](prometheus-agent.md) so that cluster metrics can be forwarded to the Prometheus server. + +The remote monitoring feature is configured with defaults to help you consume this feature out-of-the-box. You can +change any configuration related to remote monitoring to fine-tune settings for your environment. + +Refer to the [Prometheus Remote Write Tuning](https://prometheus.io/docs/practices/remote_write/) resource to learn more +about configuration options. + +To get started with remote monitoring, check out the +[Deploy Monitoring Stack](../clusters/cluster-management/monitoring/deploy-monitor-stack.md) guide. + +
+ +#### Palette Resources Monitoring + +You can access internal Palette metrics in Grafana by adding the +[Prometheus Cluster Metrics](prometheus-cluster-metrics.md) pack to all your client clusters. Refer to the +[Enable Monitoring on Host Cluster](../clusters/cluster-management/monitoring/deploy-agent.md) guide to learn more. + +
+ +### Dependencies + +The Prometheus Operator pack installs the following dependencies: + +- [Prometheus Operator GitHub](https://github.com/coreos/prometheus-operator) +- [Prometheus](https://prometheus.io/) +- [Prometheus Alertmanager](https://www.prometheus.io/docs/alerting/latest/alertmanager/) + +- [node-exporter](https://github.com/helm/charts/tree/master/stable/prometheus-node-exporter) +- [kube-state-metrics](https://github.com/helm/charts/tree/master/stable/kube-state-metrics) +- [Grafana](https://github.com/helm/charts/tree/master/stable/grafana) +- Service monitors to scrape internal Kubernetes components + +
+ + + +## Prerequisites + +- Kubernetes v1.16 or greater. + +- The minimum required size for the Prometheus server is 4 CPU, 8 GB Memory, and 10 GB Storage. We recommend the + monitoring stack have 1.5x to 2x the minimum required size: + + Recommended size: + + - 8 CPU + - 16 GB Memory + - 20 GB Storage. + + As new clusters with the Prometheus agent are added to your environment, review the resource utilization and consider + increasing resources if needed. As the Prometheus documentation recommends, each additional agent requires the + following resources from the monitoring stack: + + Each added agent: + + - 0.1 CPU + - 250 MiB Memory + - 1 GB Storage. + + Refer to the + [Prometheus Operational aspects](https://prometheus.io/docs/prometheus/latest/storage/#operational-aspects) + documentation for additional guidance. + +## Parameters + +The Prometheus operator supports all the parameters exposed by the kube-prometheus-stack Helm Chart. Refer to the +[kube-prometheus-stack](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack) +documentation for details. + +The Prometheus Operator pack has one parameter you must initialize `grafana.adminPassword`: + +
+ +```yaml +charts: + kube-prometheus-stack: + grafana: + adminPassword: "" +``` + +Use the `grafana.adminPassword` parameter to assign a password to the Grafana admin user `admin`. + +Additional parameters you should be aware of can be found by expanding the **Presets** options. You can modify the +preset settings when you create the profile or when you deploy the cluster and review the cluster profile. + +![A view of the pack's preset drawer expanded with radio buttons](/integrations_prometheus-operator_operator-preset-view-expanded.webp) + +Review the usage section below to learn more about each preset option. + +
+ +## Usage + +Check out the guide [Deploy Monitoring Stack](../clusters/cluster-management/monitoring/deploy-monitor-stack.md) to +learn how to create a monitoring stack with Prometheus for your Palette environment. + +
+ +#### Email Alerts + +You can configure the Prometheus server to send email alerts to a set of contacts. Toggle the **Email Alerts** button to +enable email alerting. Update the `alertmanager.config.receivers` settings with all the required email setting values. + +
+ +```yaml +charts: + kube-prometheus-stack: + alertmanager: + config: + receivers: + - name: email-alert + email_configs: + - to: @.com + send_resolved: true + from: @.com + smarthost: smtp..com:587 + auth_username: @.com + auth_identity: @.com + auth_password: +``` + +Refer to the [Prometheus Alertmanager Configuration](https://prometheus.io/docs/alerting/latest/configuration/) +documentation to learn more about Alertmanager. + +
+ +#### Grafana Ingress + +You can enable an ingress endpoint for Grafana that will deploy an NGINX ingress controller. This feature can be used to +enable HTTPS and require authentication for all Prometheus API requests. + +If you do not enable the ingress option, then by default a service with a load balancer will be created that exposes +port 80. + +Toggle the **Enable** button to enable the use of Ingress. + +
+ +#### Thanos SideCar + +[Thanos](https://prometheus-operator.dev/docs/platform/thanos/) is an open-source system for running large-scale, +distributed, and highly available Prometheus setups. Thanos allows Prometheus to store data for extended periods in +object storage, such as Amazon S3 or Google Cloud Storage, instead of a local disk. This enables Prometheus to scale +horizontally without the risk of using up local storage space. + +Toggle the **Enable** button to enable the use of Thanos. + +
+ +#### Object Store + +Select the Thanos object storage type you will use. Review the `thanos.objstoreConfig` parameters to configure the use +of object storage with Thanos. Refer to the +[Thanos Object Storage](https://github.com/thanos-io/thanos/blob/main/docs/storage.md) documentation to learn more about +how to configure each object storage. + +
+ +```yaml +charts: + kube-prometheus-stack: + prometheus: + prometheusSpec: + thanos: + objstoreConfig: +``` + +#### Thanos Ruler Object Store + +By default, Thanos Ruler event data is saved in object storage specified for Thanos, but you can specify a different +object storage for event data. Refer to the +[Thanos Ruler](https://prometheus-operator.dev/docs/platform/thanos/#thanos-ruler) resource to learn more. + +
+ +#### Remote Monitoring + +You can configure the Prometheus server to accept metrics from Prometheus agents and become a centralized aggregation +point for all Kubernetes metrics. Enabling this feature will expose port 9090 of the _prometheus-operator-prometheus_ +service. Use the generated service URL to provide other Kubernetes clusters with the +[Prometheus Agent](prometheus-agent.md) installed so that cluster metrics can be forwarded to the Prometheus server. + +The remote monitoring feature is configured with defaults to help you consume this feature out-of-the-box. You can +change any configuration related to remote monitoring to fine-tune settings for your environment. + +Refer to the [Prometheus Remote Write](https://prometheus.io/docs/practices/remote_write/) resource to learn more about +configuration options. + +To get started with remote monitoring, check out the +[Deploy Monitoring Stack](../clusters/cluster-management/monitoring/deploy-monitor-stack.md) guide. + +### Dependencies + +The Prometheus Operator pack installs the following dependencies: + +- [Prometheus Operator GitHub](https://github.com/coreos/prometheus-operator) +- [Prometheus](https://prometheus.io/) +- [Prometheus Alertmanager](https://www.prometheus.io/docs/alerting/latest/alertmanager/). +- [node-exporter](https://github.com/helm/charts/tree/master/stable/prometheus-node-exporter) +- [kube-state-metrics](https://github.com/helm/charts/tree/master/stable/kube-state-metrics) +- [Grafana](https://github.com/helm/charts/tree/master/stable/grafana) +- and the service monitors to scrape internal Kubernetes components. + +
+ + + +## Prerequisites + +- Kubernetes v1.16 or greater. + +## Parameters + +The Prometheus operator supports all the parameters exposed by the kube-prometheus-stack Helm Chart. Refer to the +[kube-prometheus-stack](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack) +documentation for details. + +The Prometheus Operator pack has one parameter you must initialize `grafana.adminPassword`: + +
+ +```yaml +charts: + kube-prometheus-stack: + grafana: + adminPassword: "" +``` + +Use the `grafana.adminPassword` parameter to assign a password to the Grafana admin user `admin`. + +Additional parameters you should be aware of can be found by expanding the **Presets** options. You can modify the +preset settings when you create the profile or when you deploy the cluster and review the cluster profile. + +![A view of the pack's preset drawer expanded with radio buttons](/integrations_prometheus-operator_operator-preset-view-expanded.webp) + +Review the usage section below to learn more about each preset option. + +
+ +#### Email Alerts + +You can configure the Prometheus server to send email alerts to a set of contacts. Toggle the **Email Alerts** button to +enable email alerting. Update the `alertmanager.config.receivers` settings with all the required email setting values. + +
+ +```yaml +charts: + kube-prometheus-stack: + alertmanager: + config: + receivers: + - name: email-alert + email_configs: + - to: @.com + send_resolved: true + from: @.com + smarthost: smtp..com:587 + auth_username: @.com + auth_identity: @.com + auth_password: +``` + +Refer to the [Prometheus Alertmanager Configuration](https://prometheus.io/docs/alerting/latest/configuration/) +documentation to learn more about Alertmanager. + +
+ +#### Grafana Ingress + +You can enable an ingress endpoint for Grafana that will deploy an NGINX ingress controller. This feature can be used to +enable HTTPS and require authentication for all Prometheus API requests. + +If you do not enable the ingress option, by default a service with a load balancer will be created that exposes port 80. + +Toggle the **Enable** button to enable the use of Ingress. + +
+ +#### Thanos SideCar + +[Thanos](https://prometheus-operator.dev/docs/platform/thanos/) is an open-source system for running large-scale, +distributed, and highly available Prometheus setups. Thanos allows Prometheus to store data for extended periods in +object storage, such as Amazon S3 or Google Cloud Storage, instead of a local disk. This enables Prometheus to scale +horizontally without the risk of using up local storage space. + +Toggle the **Enable** button to enable the use of Thanos. + +
+ +#### Object Store + +Select the Thanos object storage type you will use. Review the `thanos.objstoreConfig` parameters to configure the use +of object storage with Thanos. Refer to the +[Thanos Object Storage](https://github.com/thanos-io/thanos/blob/main/docs/storage.md) documentation to learn more about +how to configure each object storage. + +
+ +```yaml +charts: + kube-prometheus-stack: + prometheus: + prometheusSpec: + thanos: + objstoreConfig: +``` + +#### Thanos Ruler Object Store + +You can specify a different object storage to store the Thanos Ruler event data. Defaults to the object storage +specified for Thanos. Refer to the [Thanos Ruler](https://prometheus-operator.dev/docs/platform/thanos/#thanos-ruler) +resource to learn more. + +
+ +### Dependencies + +The Prometheus Operator pack installs the following dependencies: + +- [Prometheus Operator GitHub](https://github.com/coreos/prometheus-operator) +- [Prometheus](https://prometheus.io/) +- [Prometheus Alertmanager](https://www.prometheus.io/docs/alerting/latest/alertmanager/). +- [node-exporter](https://github.com/helm/charts/tree/master/stable/prometheus-node-exporter) +- [kube-state-metrics](https://github.com/helm/charts/tree/master/stable/kube-state-metrics) +- [Grafana](https://github.com/helm/charts/tree/master/stable/grafana) +- and the service monitors to scrape internal Kubernetes components. + +
+ + + +All versions less than v40.x.x are considered deprecated. Upgrade to a newer version to take advantage of the new +features. + + + +
+ +## Terraform + +You can retrieve details about the Prometheus operator pack by using the following Terraform code. + +
+ +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "pack-info" { + name = "prometheus-opeartor" + version = "45.4.0" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` + +## References + +- [Deploy Monitoring Stack](../clusters/cluster-management/monitoring/deploy-monitor-stack.md) + +- [Prometheus Operator GitHub](https://github.com/coreos/prometheus-operator) + +- [Prometheus Remote Write Tuning](https://prometheus.io/docs/practices/remote_write) + +- [Thanos & Prometheus](https://prometheus-operator.dev/docs/platform/thanos/) + +- [Prometheus FAQ](https://prometheus.io/docs/introduction/faq) + +- [Prometheus Cluster Metrics](prometheus-cluster-metrics.md) diff --git a/docs/docs-content/integrations/rke2.md b/docs/deprecated/integrations/rke2.md similarity index 100% rename from docs/docs-content/integrations/rke2.md rename to docs/deprecated/integrations/rke2.md diff --git a/docs/docs-content/integrations/rook-ceph.md b/docs/deprecated/integrations/rook-ceph.md similarity index 100% rename from docs/docs-content/integrations/rook-ceph.md rename to docs/deprecated/integrations/rook-ceph.md diff --git a/docs/deprecated/integrations/spectro-k8s-dashboard.md b/docs/deprecated/integrations/spectro-k8s-dashboard.md new file mode 100644 index 0000000000..10c0c2081b --- /dev/null +++ b/docs/deprecated/integrations/spectro-k8s-dashboard.md @@ -0,0 +1,107 @@ +--- +sidebar_label: "Spectro Kubernetes Dashboard" +title: "Spectro Kubernetes Dashboard" +description: + "Palette's pre-configured Kubernetes Dashboard Monitoring pack reduces the complexity of standing up the Kubernetes + dashboard for a cluster." +hide_table_of_contents: true +type: "integration" +category: ["monitoring", "arm64", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/k8s-dashboard/blobs/sha256:2de5d88b2573af42d4cc269dff75744c4174ce47cbbeed5445e51a2edd8b7429?type=image.webp" +tags: ["packs", "spectro-k8s-dashboard", "monitoring"] +--- + +Spectro Kubernetes Dashboard is a web-based UI for Kubernetes clusters that auto-enables the Kubernetes Dashboard using +secure ports and conveniently includes the [Spectro Proxy](frp.md) pack. + +## Versions Supported + +**2.7.x** + +
+ +## Prerequisites + +- Outbound internet connectivity for port 443 is allowed so that you and your applications can connect with the + [Spectro Proxy](frp.md) reverse proxy. + +- Users or groups must be mapped to a Kubernetes RBAC role, either a _Role_ or a _ClusterRole_. You can create a custom + role through a manifest and use Palette's roleBinding feature to associate users or groups with the role. Refer to the + [Create a Role Binding](../clusters/cluster-management/cluster-rbac.md#create-role-bindings) guide to learn more. + +## Parameters + + + +| Parameter | Description | Default | +| --------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- | +| `namespace` | The Kubernetes namespace to install the dashboard. | `kubernetes-dashboard` | +| `ClusterRole` | The ClusterRole to assign to the Spectro Kubernetes Dashboard. | `read-only` | +| `certDuration` | Self-signed certificate duration in hours. | 8760h (365d) | +| `certRenewal` | Self-signed certificate renewal in hours | 720h (30d) | +| `enableInsecureLogin` | RBAC ensures secure login. | `false` | +| `serviceType` | The service type for the dashboard. Supported values are `ClusterIP`, `LoadBalancer`, and `NodePort`. | `ClusterIP` | +| `skipLogin` | Enables or disables the skip login option on the Spectro Kubernetes Dashboard. | `false` | +| `enableInsecureLogin` | Enables non-Secure Sockets Layer (SSL) login. Dashboard login is always restricted to HTTP(S) + localhost or HTTPS and external domain. | `false` | +| `ingress.enabled` | Ingress configuration to access the `ClusterIP`, `LoadBalancer`, or `NodePort`. | `false` | + +## Usage + +To use the Spectro Kubernetes Dashboard pack, you have to add it to your cluster profile. Spectro Kubernetes Dashboard +supports several public cloud and data center cloud environments. To learn more, refer to [Clusters](/clusters). + +Use the following information to find the Kubernetes Dashboard pack. + +- **Pack Type**: Monitoring +- **Registry**: Public Repo +- **Pack Name**: Spectro Kubernetes Dashboard +- **Pack Version**: 2.7.0 or higher + +Spectro Kubernetes Dashboard has the following Access options. + +
+ +- **Proxied**: This option is useful for access to the Kubernetes Dashboard from anywhere and leverages the Spectro + Proxy pack, which gets installed automatically. The Service resource for the Kubernetes Dashboard will be configured + as ClusterIP and is only accessible through the proxy. To learn more, check out the [Spectro Proxy](frp.md) guide. + +- **Direct**: This option is meant for a private configuration where a proxy is not implemented or not desired. The + Service resource for the Kubernetes Dashboard will be configured as LoadBalancer, which you can access directly. This + option requires you to be on a network that can reach the IP address given to the LoadBalancer service. + +## Terraform + +You can reference the Spectro Proxy pack in Terraform with a data resource. + +
+ +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "k8s-dashboard" { + name = "spectro-k8s-dashboard" + version = "2.7.0" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` + +## References + +- [Microsoft Access Control Using Kubernetes RBAC](https://learn.microsoft.com/en-us/azure/aks/azure-ad-rbac?toc=https%3A%2F%2Fdocs.micro[…]icrosoft.com%2Fen-us%2Fazure%2Fbread%2Ftoc.json&tabs=portal) + +- [Terraform Data Resource](https://registry.terraform.io/providers/spectrocloud/spectrocloud/latest/docs/data-sources/pack) diff --git a/docs/docs-content/integrations/trident.md b/docs/deprecated/integrations/trident.md similarity index 100% rename from docs/docs-content/integrations/trident.md rename to docs/deprecated/integrations/trident.md diff --git a/docs/docs-content/integrations/ubuntu.md b/docs/deprecated/integrations/ubuntu.md similarity index 100% rename from docs/docs-content/integrations/ubuntu.md rename to docs/deprecated/integrations/ubuntu.md diff --git a/docs/deprecated/integrations/vault.md b/docs/deprecated/integrations/vault.md new file mode 100644 index 0000000000..2bad5981a8 --- /dev/null +++ b/docs/deprecated/integrations/vault.md @@ -0,0 +1,156 @@ +--- +sidebar_label: "Vault" +title: "Vault" +description: "Integration of the Vault add on into Spectro Cloud" +hide_table_of_contents: true +type: "integration" +category: ["security", "amd64", "arm64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/vault/blobs/sha256:1abda0173be1fd4ddfeccd2ff15089edd38a25e433ad7bb562a770d92992c7af?type=image.webp" +tags: ["packs", "vault", "security"] +--- + +[Vault](https://www.vaultproject.io/) helps secure, store, and tightly control access to tokens, passwords, +certificates, encryption keys for protecting secrets, and other sensitive data using a UI, CLI, or HTTP API. + +Vault integration has the following components: + +- Vault server +- UI (optional). +- [Agent injector](https://www.vaultproject.io/docs/platform/k8s/injector/) (optional). + +## Versions Supported + + + + + +### Prerequisites + +- A Kubernetes cluster with Kubernetes version 1.22 or later. + +### Parameters + +The table lists commonly used parameters you can configure when adding this pack. + +| Parameters | Description | Default | +| -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | +| `charts.vault.server.ingress` | Enable ingress traffic to the Vault server. If you want to enable ingress traffic, make sure that `charts.server.serviceType` is set to `"ClusterIP"` or is left empty. | `False` | +| `charts.vault.global.tlsDisable` | Disable TLS for end-to-end encrypted transport. | `True` | +| `charts.vault.agent.enabled` | Enable vault agent injection to inject secrets into the pods. | `-` | +| `charts.vault.server.ha` | Enable high-availability mode to protect against outages by running multiple Vault servers. For more information, refer to [Vault documentation](https://developer.hashicorp.com/vault/docs/internals/high-availability). | `false` | +| `charts.vault.server.dataStorage` | Controls the size, location, storage class of the persistent storage used by the Vault. | | +| `charts.vault.server.dev` | Enable dev server mode. The dev server mode skips most setup required before you can begin to use a Vault server, including initialization and unseal, and stores all data in-memory. For more details about dev server mode, refer to [Vault documentation](https://developer.hashicorp.com/vault/docs/concepts/dev-server). | `False` | +| `charts.vault.server.dev.devRootToken` | If you enabled dev server mode, this parameter specifies the root token for your Vault server. Root token has unlimited privileges and can do anything in Vault. | `"root"` | + +:::warning + +Never operate a dev mode server in production. It is insecure and loses data on every restart. + +::: + +### Usage + +HashiCorp provides many uses cases for Vault. For examples, refer to +[HashiCorp Vault documentation](https://developer.hashicorp.com/vault/docs/use-cases). + +#### Initialize and Unseal Vault + +If you enabled dev server mode, you do not need to initialize Vault and it is already unsealed. Use the root token you +configured in the `values.yaml` file to sign in to Vault directly. + +Before any operation can be performed on Vault, you need to initialize the first root token and keys that can be used to +unseal Vault. You can do so by following these steps: + +1. Log in to [Palette](https://console.spectrocloud.com). + +2. Navigate to the left **Main Menu** and select **Clusters**. + +3. Select the cluster that has Vault installed to view its details page. + +4. Download the cluster **kubeconfig** file. + +5. Set up your local kubectl environment to use the **kubeconfig** file you downloaded. Review the + [Access Cluster with CLI](../clusters/cluster-management/palette-webctl.md) guide for additional guidance. + +6. You need to get the Vault namespace and application name. Issue the following command to get the unique values. + +
+ + ```shell + VAULT_NAMESPACE=$(kubectl get pods --selector app.kubernetes.io/name=vault --all-namespaces --output jsonpath='{.items[0].metadata.namespace}') && \ + APP_NAME=$(echo "$VAULT_NAMESPACE" | sed 's/-ns$//') + ``` + +7. Set up port forwarding by issuing the following command so you can access the Vault UI: + + ``` + kubectl port-forward $APP_NAME 8200:8200 --namespace $VAULT_NAMESPACE + ``` + +8. Open your browser and access the Vault UI at `https://localhost:8200/ui`. You will receive a warning due to using a + self-signed certificate, but you can ignore this warning. Follow the prompts on the UI to initialize your root token. + +:::tip + +If you do not want to use the Vault UI, you can also initialize and unseal Vault using the Vault CLI or API. For more +information, refer to +[Vault documentation](https://developer.hashicorp.com/vault/docs/platform/k8s/helm/run#initialize-and-unseal-vault). + +::: + +#### Storage + +In a production Vault server, backend storage is on a data persistent layer, is untrusted and only stores encrypted +data. In a dev mode Vault server, all data is stored in-memory and will be erased when Vault restarts. + +##### RKE2 + +When using Vault with the RKE2 distribution of Kubernetes in Palette Edge, you must explicitly specify a storage class +for the Vault server. To specify a storage class, change the value of the field +`charts.vault.server.dataStorage.storageClass` in `values.yaml` for the Vault pack in your cluster profile from `null` +to a storage class that meets your needs. Refer to +[Kubernetes documentation on storage classes](https://kubernetes.io/docs/concepts/storage/storage-classes/) for more +details. + +### Terraform + +You can reference the Vault pack in Terraform with a data resource: + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "pack-info" { + name = "vault" + version = "0.22.0" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` + +
+ + + +:::warning + +All versions of the manifest-based pack less than v0.22.x are considered deprecated. Upgrade to a newer version to take +advantage of new features. + +::: + + + +
+ +## References + +- [Vault Agent injector](https://www.vaultproject.io/docs/platform/k8s/injector/) + +- [Injecting Vault Secrets Into Kubernetes Pods via a Sidecar - Blog](https://www.hashicorp.com/blog/injecting-vault-secrets-into-kubernetes-pods-via-a-sidecar/) + +- [Vault Agent Injector Examples](https://www.vaultproject.io/docs/platform/k8s/injector/examples/) + +- [Vault on Kubernetes Guide](https://www.vaultproject.io/docs/platform/k8s/helm/run) diff --git a/docs/docs-content/integrations/vsphere-csi.md b/docs/deprecated/integrations/vsphere-csi.md similarity index 100% rename from docs/docs-content/integrations/vsphere-csi.md rename to docs/deprecated/integrations/vsphere-csi.md diff --git a/docs/deprecated/integrations/vsphere-volume.md b/docs/deprecated/integrations/vsphere-volume.md new file mode 100644 index 0000000000..b3001834e2 --- /dev/null +++ b/docs/deprecated/integrations/vsphere-volume.md @@ -0,0 +1,49 @@ +--- +sidebar_label: "vSphere-Volume" +title: "vSphere Volume" +description: "vSphere volume storage add on into Spectro Cloud" +hide_table_of_contents: true +type: "integration" +category: ["storage", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.dev.spectrocloud.com/v1/csi-vsphere-volume/blobs/sha256:2cd106b353cb492d4647a1562fe59db6a1aeb792333900fe4e15237f899298b5?type=image.webp" +tags: ["packs", "vSphere-Volume", "storage"] +--- + +vSphere volume virtualizes SAN/NAS arrays, enabling an efficient operational model optimized for virtualized +environments and centered on the application instead of the infrastructure There are two types of provisioners for +vSphere storage classes: + +- CSI provisioner: csi.vsphere.vmware.com +- vCP provisioner: kubernetes.io/vsphere-volume + +## Versions Supported + + + + +- **1.0.0** + + + + +## Parameters + +| Name | Supported Values | Default Value | Description | +| -------------- | -------------------------------------- | ------------- | ---------------------------------------------------------------------------------------- | +| diskformat | thin, zeroedthick and eagerzeroedthick | zeroedthick | The storage account type to use | +| datastore | Datastore Name | | If specified, the volume will be created on the datastore specified in the storage class | +| isDefaultClass | true, false | true | Flag to denote if this StorageClass will be the default | + +## Troubleshooting + +Storage classes created by Spectro will be with the name "spectro-storage-class" and can be fetched from kubectl using +the following CLI command: + +```bash +kubectl get storageclass +``` + +## References + +- [vSphere Storage Class](https://kubernetes.io/docs/concepts/storage/storage-classes/#vsphere) diff --git a/docs/docs-content/byoos/byoos.md b/docs/docs-content/byoos/byoos.md index 78ab742b0e..96b1797c80 100644 --- a/docs/docs-content/byoos/byoos.md +++ b/docs/docs-content/byoos/byoos.md @@ -21,6 +21,4 @@ compatibility with your existing applications. The OS you bring can be commercia - [Create Images with Image Builder](../byoos/image-builder.md) -- [BYOOS Pack](../integrations/byoos.md) - -
+- diff --git a/docs/docs-content/byoos/image-builder.md b/docs/docs-content/byoos/image-builder.md index 878ad89a80..0c769dfe89 100644 --- a/docs/docs-content/byoos/image-builder.md +++ b/docs/docs-content/byoos/image-builder.md @@ -247,44 +247,47 @@ create the image. help you identify the correct value to provide. In the example output below, the tag values `distribution_version` and `distribution` are used to determine the correct values for the YAML. - ```shell hideClipboard - ==> amazon-ebs.{{user `build_name`}}: Creating AMI tags - amazon-ebs.{{user `build_name`}}: Adding tag: "build_date": "2023-05-10T17:19:37Z" - amazon-ebs.{{user `build_name`}}: Adding tag: "build_timestamp": "1683739177" - amazon-ebs.{{user `build_name`}}: Adding tag: "kubernetes_cni_version": "v1.2.0" - amazon-ebs.{{user `build_name`}}: Adding tag: "source_ami": "" - amazon-ebs.{{user `build_name`}}: Adding tag: "containerd_version": "1.6.20" - amazon-ebs.{{user `build_name`}}: Adding tag: "distribution_release": "Enterprise" - + amazon-ebs.{{user `build_name`}}: Adding tag: "distribution": "rhel" - amazon-ebs.{{user `build_name`}}: Adding tag: "image_builder_version": "" - amazon-ebs.{{user `build_name`}}: Adding tag: "kubernetes_version": "v1.24.11" - + amazon-ebs.{{user `build_name`}}: Adding tag: "distribution_version": "8 - ``` - - In this example, the YAML is updated to point to the RHEL image created earlier. Use the table below to learn more - about each variable. - - | **Parameter** | **Description** | **Type** | - | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | - | `osImageOverride` | The ID of the image to use as the base OS layer. This is the image ID as assigned in the infrastructure environment it belongs to. Example: `ami-0f4804aff4cf9c5a2`. | string | - | `osName` | The name of the OS distribution. Example: `rhel`. | string | - | `osVersion` | The version of the OS distribution. Example: `8` | string | - - ```yaml - pack: - osImageOverride: "ami-0f4804aff4cf9c5a2" - osName: "rhel" - osVersion: "8" - ``` - - :::info + ```shell hideClipboard + ==> amazon-ebs.{{user `build_name`}}: Creating AMI tags + amazon-ebs.{{user `build_name`}}: Adding tag: "build_date": "2023-05-10T17:19:37Z" + amazon-ebs.{{user `build_name`}}: Adding tag: "build_timestamp": "1683739177" + amazon-ebs.{{user `build_name`}}: Adding tag: "kubernetes_cni_version": "v1.2.0" + amazon-ebs.{{user `build_name`}}: Adding tag: "source_ami": "" + amazon-ebs.{{user `build_name`}}: Adding tag: "containerd_version": "1.6.20" + amazon-ebs.{{user `build_name`}}: Adding tag: "distribution_release": "Enterprise" + + amazon-ebs.{{user `build_name`}}: Adding tag: "distribution": "rhel" + amazon-ebs.{{user `build_name`}}: Adding tag: "image_builder_version": "" + amazon-ebs.{{user `build_name`}}: Adding tag: "kubernetes_version": "v1.24.11" + + amazon-ebs.{{user `build_name`}}: Adding tag: "distribution_version": "8 + ``` + + In this example, the YAML is updated to point to the RHEL image created earlier. Use the table below to learn more + about each variable. + + | **Parameter** | **Description** | **Type** | + | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | + | `osImageOverride` | The ID of the image to use as the base OS layer. This is the image ID as assigned in the infrastructure environment it belongs to. Example: `ami-0f4804aff4cf9c5a2`. | string | + | `osName` | The name of the OS distribution. Example: `rhel`. | string | + | `osVersion` | The version of the OS distribution. Example: `8` | string | + + ```yaml + pack: + osImageOverride: "ami-0f4804aff4cf9c5a2" + osName: "rhel" + osVersion: "8" + ``` + + + +:::info + +Depending on what platform you are targeting, the value you provide for `osImageOverride` may differ. For example, for +AWS, the value is the AMI ID. For vSphere, the value is VM template path and name. Refer to the +section of the BYOOS page for examples. - Depending on what platform you are targeting, the value you provide for `osImageOverride` may differ. For example, - for AWS, the value is the AMI ID. For vSphere, the value is VM template path and name. Refer to the - [Reference Custom Image](../integrations/byoos.md?edge-non-edge=Non-Edge#reference-custom-image) section of the - BYOOS page for examples. +::: - ::: + ![View of the cluster profile wizard](/clusters_byoos_image-builder_cluster-profile-byoos-yaml.webp) diff --git a/docs/docs-content/byoos/usecases/vmware/konvoy.md b/docs/docs-content/byoos/usecases/vmware/konvoy.md index e25d442f97..63ce2fdef5 100644 --- a/docs/docs-content/byoos/usecases/vmware/konvoy.md +++ b/docs/docs-content/byoos/usecases/vmware/konvoy.md @@ -9,8 +9,9 @@ sidebar_position: 10 tags: ["operating system", "byoos", "profiles", "konvoy", "vmware"] --- + This guide provides instructions for building a custom image using Red Hat Linux Enterprise (RHEL) with Konvoy. The -guide assumes that you have a basic understanding of VMware vSphere, RHEL and [Konvoy](../../../integrations/konvoy.md). +guide assumes that you have a basic understanding of VMware vSphere, RHEL and . You will use the [Konvoy image builder](https://github.com/mesosphere/konvoy-image-builder) project to build the custom RHEL image with Konvoy. The custom image will be used to deploy a Kubernetes cluster on VMware vSphere. @@ -186,9 +187,10 @@ instructions on how to build the custom RHEL with Konvoy image. + 7. Review the **images/common.yaml** file and modify the file if necessary. The **common.yaml** file is where you - specify the Kubernetes version. Refer to the [Konvoy](../../../integrations/konvoy.md) pack reference page to learn - about supported Konvoy versions. + specify the Kubernetes version. Refer to the pack reference page to learn about + supported Konvoy versions. ```yaml hideClipboard {2} --- @@ -329,9 +331,10 @@ instructions on how to build the custom RHEL with Konvoy image. + 7. Review the **images/common.yaml** file and modify the file if necessary. The **common.yaml** file is where you - specify the Kubernetes version. Refer to the[Konvoy](../../../integrations/konvoy.md) pack reference page to learn - about supported Konvoy versions. + specify the Kubernetes version. Refer to the pack reference page to learn about + supported Konvoy versions. ```yaml hideClipboard {2} --- @@ -441,11 +444,12 @@ instructions on how to build the custom RHEL with Konvoy image. ## Usage with Cluster Profile + To use the custom RHEL with Konvoy image, create a -[cluster profile](../../../profiles/cluster-profiles/create-cluster-profiles/create-full-profile.md) and use the -[BYOOS](../../../integrations/byoos.md) pack to reference the custom RHEL with Konvoy image. Specify the vSphere path to -the custom RHEL with Konvoy image in the pack's YAML file. The following example YAML content demonstrates how to use -the custom RHEL with Konvoy image in a cluster profile. +[cluster profile](../../../profiles/cluster-profiles/create-cluster-profiles/create-full-profile.md) and use the pack to reference the custom RHEL with +Konvoy image. Specify the vSphere path to the custom RHEL with Konvoy image in the pack's YAML file. The following +example YAML content demonstrates how to use the custom RHEL with Konvoy image in a cluster profile. + ```yaml hideClipboard {2} pack: diff --git a/docs/docs-content/byoos/usecases/vmware/rhel-pxk.md b/docs/docs-content/byoos/usecases/vmware/rhel-pxk.md index 7235872c95..caa6b7f0c9 100644 --- a/docs/docs-content/byoos/usecases/vmware/rhel-pxk.md +++ b/docs/docs-content/byoos/usecases/vmware/rhel-pxk.md @@ -274,30 +274,32 @@ want to create a FIPS-compliant image or a non-FIPS-compliant image. --> vsphere-iso.vsphere: rhel-8-kube-v1.27.11 ``` + + 14. The custom RHEL image with PXK is now built and available in the VMware vSphere environment. You can use this image - to deploy a Kubernetes cluster. To use the image, create a cluster profile with and select the - [BYOOS pack](../../../integrations/byoos.md). Refer to the custom image in the cluster profile when populating the - image details. You need to refer to the VM template path of the image. - - ```yaml hideClipboard - pack: - osImageOverride: "/Datacenter/vm/sp-docs/rhel-8-kube-v1.27.11" - osName: "rhel" - osVersion: "8.8" - ``` + to deploy a Kubernetes cluster. To use the image, create a cluster profile with and select the . Refer to the custom image in the cluster profile when populating the image details. You need to refer to the VM template path of the image. + + ```yaml hideClipboard + pack: + osImageOverride: "/Datacenter/vm/sp-docs/rhel-8-kube-v1.27.11" + osName: "rhel" + osVersion: "8.8" + ``` + + Using the following image, take note of the three numbers highlighted in the image name. - Using the following image, take note of the three numbers highlighted in the image name. + 1. The BYOOS pack is selected as the operating system layer. + 2. The custom RHEL image template is specified in the `osImageOverride` field. + 3. The Kubernetes version is set to `1.27.11`, the same version specified in the `kubernetes.json` file. - 1. The BYOOS pack is selected as the operating system layer. - 2. The custom RHEL image template is specified in the `osImageOverride` field. - 3. The Kubernetes version is set to `1.27.11`, the same version specified in the `kubernetes.json` file. + ![A cluster profile using a custom RHEL image](/byoos_vmware_rhewl-pxk_cluster-profile.webp) - ![A cluster profile using a custom RHEL image](/byoos_vmware_rhewl-pxk_cluster-profile.webp) + Complete the remaining steps in the + [cluster profile creation process](../../../profiles/cluster-profiles/create-cluster-profiles/create-infrastructure-profile.md). + Use the cluster profile to deploy a Kubernetes cluster in your VMware vSphere environment with the custom RHEL + image. - Complete the remaining steps in the - [cluster profile creation process](../../../profiles/cluster-profiles/create-cluster-profiles/create-infrastructure-profile.md). - Use the cluster profile to deploy a Kubernetes cluster in your VMware vSphere environment with the custom RHEL - image. + @@ -504,30 +506,35 @@ want to create a FIPS-compliant image or a non-FIPS-compliant image. --> vsphere-iso.vsphere: rhel-8-kube-v1.27.11 ``` + + 14. The custom RHEL image with PXK is now built and available in the VMware vSphere environment. You can use this image to deploy a Kubernetes cluster. To use the image, create a cluster profile with and select the - [BYOOS pack](../../../integrations/byoos.md). Refer to the custom image in the cluster profile when populating the - image details. You need to refer to the VM template path of the image. - - ```yaml hideClipboard - pack: - osImageOverride: "/Datacenter/vm/sp-docs/rhel-8-kube-v1.27.11" - osName: "rhel" - osVersion: "8.8" - ``` - Using the following image, take note of the three numbers highlighted in the image name. + . Refer to the custom image in the + cluster profile when populating the image details. You need to refer to the VM template path of the image. + + ```yaml hideClipboard + pack: + osImageOverride: "/Datacenter/vm/sp-docs/rhel-8-kube-v1.27.11" + osName: "rhel" + osVersion: "8.8" + ``` + + Using the following image, take note of the three numbers highlighted in the image name. + + 1. The BYOOS pack is selected as the operating system layer. + 2. The custom RHEL image template is specified in the `osImageOverride` field. + 3. The Kubernetes version is set to `1.27.11`, the same version specified in the `kubernetes.json` file. - 1. The BYOOS pack is selected as the operating system layer. - 2. The custom RHEL image template is specified in the `osImageOverride` field. - 3. The Kubernetes version is set to `1.27.11`, the same version specified in the `kubernetes.json` file. + ![A cluster profile using a custom RHEL image](/byoos_vmware_rhewl-pxk_cluster-profile-non-fips.webp) - ![A cluster profile using a custom RHEL image](/byoos_vmware_rhewl-pxk_cluster-profile-non-fips.webp) + Complete the remaining steps in the + [cluster profile creation process](../../../profiles/cluster-profiles/create-cluster-profiles/create-infrastructure-profile.md). + Use the cluster profile to deploy a Kubernetes cluster in your VMware vSphere environment with the custom RHEL + image. - Complete the remaining steps in the - [cluster profile creation process](../../../profiles/cluster-profiles/create-cluster-profiles/create-infrastructure-profile.md). - Use the cluster profile to deploy a Kubernetes cluster in your VMware vSphere environment with the custom RHEL - image. + diff --git a/docs/docs-content/clusters/cluster-management/cluster-proxy.md b/docs/docs-content/clusters/cluster-management/cluster-proxy.md new file mode 100644 index 0000000000..2ef475ebff --- /dev/null +++ b/docs/docs-content/clusters/cluster-management/cluster-proxy.md @@ -0,0 +1,240 @@ +--- +sidebar_label: "Configure Applications to Use Proxy Server" +title: "Configure Applications to Use Proxy Server" +description: "Guide to configure configurations in a cluster to use a proxy server." +hide_table_of_contents: false +sidebar_position: 201 +tags: ["clusters", "cluster management", "proxy"] +--- + +You can configure applications that operate in your Palette clusters to use a proxy server to access the internet +instead of accessing the internet directly. + +Before you are able to configure applications in a cluster to use the proxy server, you must first ensure that the +cluster itself is configured to use the proxy server. This means that the host Operating System (OS) and the Palette +agent inside the cluster will use the proxy server for its outbound communications. The steps to do this vary depending +on your environment. + +After the cluster is configured to use the proxy server, you can proceed to configure the applications inside the +cluster to use the proxy server. You can do this by applying the `spectrocloud.com/connection: proxy` label to the +specific job, deployment, or daemon set to instruct an application to use the proxy settings of the cluster. + +:::tip + +We recommend you review the [gRPC and Proxies](../../architecture/grps-proxy.md) article to be aware of network proxies +that Palette supports. Palette uses gRPC to communicate with clusters, and depending on the proxy server you use, you +may need to configure the proxy server to support gRPC. + +::: + +## Prerequisites + +- An active proxy server reachable by your cluster. + + + + + +- A PCG is deployed into an active and healthy Kubernetes cluster. Refer to + [Deploy a PCG to an Existing Kubernetes Cluster](../pcg/deploy-pcg-k8s.md) or + [Deploy a PCG with Palette CLI](../pcg/deploy-pcg/deploy-pcg.md) for additional guidance. + +- The PCG is configured to use the proxy server that you intend for your applications to use for outbound + communications. For more information, refer to + [Enabled and Manage Proxy Configurations](../pcg/manage-pcg/configure-proxy.md). + + - If you deployed a PCG through the Palette CLI, refer to + [the respective platform installation guide](../pcg/pcg.md#supported-environments) for instructions on how to + configure proxy settings during the installation process through the CLI. + + + + + +- A self-hosted Palette instance is deployed into an active and healthy Kubernetes cluster. Refer to + [Self-Hosted Palette Installation](../../enterprise-version/install-palette/install-palette.md) for additional + guidance. + +- The self-hosted Palette instance is configured to use the proxy server that you intend for your applications to use + for outbound communications. + + + + + +- Your Edge host is configured to use the proxy server that you intend for your applications to use for outbound + communications. Refer to [Edge Host Installation](../edge/site-deployment/stage.md) for more information. + + + + + +## Configure Applications to Use Proxy Server + + + + + +1. If you are using Palette SaaS, you must deploy a Private Cloud Gateway (PCG) and configure it to use a proxy server + before you can configure cluster applications to use the proxy server. For more information about PCGs, refer to + [Private Cloud Gateway](../pcg/pcg.md). + + If you are provisioning the PCG using the Palette CLI, you can configure the proxy settings during the PCG + installation through the Palette CLI's interactive prompts. If you are using Helm to provision a PCG or have an + existing PCG that is not yet configured to use proxy, refer to + [Enable and Manage Proxy Configurations for PCG](../pcg/manage-pcg/configure-proxy.md) to learn how to install Reach + on a PCG cluster and use it to configure proxy settings. + +2. If you deployed the PCG using the Palette CLI, the cloud account is created automatically. You can skip this step. + + Once you have deployed the PCG, you must create a new cloud account associated with the PCG. Refer to the following + resources to learn how to create a cloud account: + + - [Add an AWS Account to Palette](../public-cloud/aws/add-aws-accounts.md) + - [Register and Manage Azure Cloud Account](../public-cloud/azure/azure-cloud.md) + - [Register and Manage GCP Accounts](../public-cloud/gcp/add-gcp-accounts.md) + +3. Create a cluster profile that contains your application. Refer to + [Create a Cluster Profile](../../profiles/cluster-profiles/cluster-profiles.md) for additional guidance. + + In your cluster profile, apply the `spectrocloud.com/connection: proxy` label to the deployment, job, or daemon set + in the pack that contains your application. + + You must apply the label to every specific job, deployment, or daemon set that needs to use the proxy servers. For + example, if you have a Kafka deployment that requires access to the internet through your proxy, you need to apply + the label to the Kafka deployment. + + ```yaml {10} + apiVersion: apps/v1 + kind: Deployment + metadata: + name: kafka + spec: + template: + metadata: + labels: + app: kafka + spectrocloud.com/connection: proxy + ``` + +4. Start creating your cluster using the cloud account associated with the PCG. Refer to the following resources on + cluster creation. + + - [Create and Manage AWS Cluster](../public-cloud/aws/create-cluster.md) + - [Create and Manage Azure IaaS Cluster](../public-cloud/azure/create-azure-cluster.md) + - [Create and Manage GCP IaaS Cluster](../public-cloud/gcp/create-gcp-iaas-cluster.md) + + + + + +1. If you are using a self-hosted Palette instance, you have the opportunity to configure proxy settings during + installation. If you are using the Palette CLI for installation, refer to + [Self Hosted Palette - Installation](../../enterprise-version/install-palette/install-on-kubernetes/install.md) to + learn how to specify proxy settings during installation. If you used Helm charts for installation, refer to + [Enable and Manage Proxy Configurations](../pcg/manage-pcg/configure-proxy.md) to learn how to install reach and use + it to configure proxy settings. The process to install Reach on an existing self-hosted Palette instance is the same + as the process to install Reach on an existing PCG cluster. + +2. Create a cluster profile that contains your application. Refer to + [Create a Cluster Profile](../../profiles/cluster-profiles/cluster-profiles.md) for additional guidance. + + In your cluster profile, apply the `spectrocloud.com/connection: proxy` label to the deployment, job, or daemon set + in the pack that contains your application. + + You must apply the label to every specific job, deployment, or daemon set that needs to use the proxy servers. For + example, if you have a Kafka deployment that requires access to the internet through your proxy, you need to apply + the label to the Kafka deployment. + + ```yaml {10} + apiVersion: apps/v1 + kind: Deployment + metadata: + name: kafka + spec: + template: + metadata: + labels: + app: kafka + spectrocloud.com/connection: proxy + ``` + +3. Start creating your cluster using the cluster profile. Refer to the following resources on cluster creation. + + - [Create and Manage AWS Cluster](../public-cloud/aws/create-cluster.md) + - [Create and Manage Azure IaaS Cluster](../public-cloud/azure/create-azure-cluster.md) + - [Create and Manage GCP IaaS Cluster](../public-cloud/gcp/create-gcp-iaas-cluster.md) + + + + + +1. For Edge clusters, you specify the proxy settings for your Edge host during installation in your Edge installer + **user-data**. For more information, refer to [Installation](../edge/site-deployment/stage.md). If your Edge host is + deployed in airgap mode, you may also specify the proxy settings in Local UI. For more information, refer to + [Configure HTTP-Proxy in Local UI](../edge/local-ui/host-management/configure-proxy.md). + +2. Create a cluster profile that contains your application. Refer to + [Create a Cluster Profile](../../profiles/cluster-profiles/cluster-profiles.md) for additional guidance. + + In your cluster profile, apply the `spectrocloud.com/connection: proxy` label to the deployment, job, or daemon set + in the pack that contains your application. + + You must apply the label to every specific job, deployment, or daemon set that needs to use the proxy servers. For + example, if you have a Kafka deployment that requires access to the internet through your proxy, you need to apply + the label to the Kafka deployment. + + ```yaml {10} + apiVersion: apps/v1 + kind: Deployment + metadata: + name: kafka + spec: + template: + metadata: + labels: + app: kafka + spectrocloud.com/connection: proxy + ``` + +3. Create a cluster using the cluster profile. For more information, refer to + [Create Cluster Definition](../edge/site-deployment/cluster-deployment.md). + + + + + +## Validate + +1. Access your cluster with kubectl. For more information, refer to [Access Cluster with kubectl](./palette-webctl.md). + +2. Issue the following command. Replace `pod-name` with the name of the pod for your application and replace + `your-namespace` with the namespace where the pod resides. + + ``` + kubectl get pod pod-name --output jsonpath='{.spec.containers[*].env}' --namespace your-namespace | jq . + ``` + + The command will yield output similar to the following. If the output includes the proxy settings you configured, you + can validate that the application is configured to use the proxy server. + + ```json + [ + { + "name": "http_proxy", + "value": "http://10.10.180.0:3128" + }, + { + "name": "https_proxy", + "value": "http://10.10.180.0:3128" + }, + { + "name": "NO_PROXY", + "value": "" + }, + { + "name": "USER_NO_PROXY", + "value": "" + } + ] + ``` diff --git a/docs/docs-content/clusters/cluster-management/cluster-rbac.md b/docs/docs-content/clusters/cluster-management/cluster-rbac.md index c7d984b843..826f16f8f6 100644 --- a/docs/docs-content/clusters/cluster-management/cluster-rbac.md +++ b/docs/docs-content/clusters/cluster-management/cluster-rbac.md @@ -130,9 +130,10 @@ To create a role binding the role must exist inside the host cluster. You can us [default cluster roles](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles) provided by Kubernetes. The alternative to default cluster roles is to create a role by using a manifest in the cluster profile. + If you have OpenID Connect (OIDC) configured at the Kubernetes layer of your cluster profile, you can create a role binding that maps individual users or groups assigned within the OIDC provider's configuration to a role. To learn more, -review [Use RBAC with OIDC](../../integrations/kubernetes-generic.md#configure-custom-oidc). +review . ### Enablement diff --git a/docs/docs-content/clusters/cluster-management/kubeconfig.md b/docs/docs-content/clusters/cluster-management/kubeconfig.md index 2dbfbcdb68..f0dfc9f886 100644 --- a/docs/docs-content/clusters/cluster-management/kubeconfig.md +++ b/docs/docs-content/clusters/cluster-management/kubeconfig.md @@ -81,7 +81,7 @@ The access you have as a user to the kubeconfig files for a cluster depends on t ::: -- Is the [Spectro Proxy](../../integrations/frp.md) enabled for the cluster? +- Is the enabled for the cluster? Use the tables below to help you identify which project role you need to access the kubeconfig file for a cluster. diff --git a/docs/docs-content/clusters/cluster-management/monitoring/deploy-monitor-stack.md b/docs/docs-content/clusters/cluster-management/monitoring/deploy-monitor-stack.md index 62fa7fee0b..5a560afb30 100644 --- a/docs/docs-content/clusters/cluster-management/monitoring/deploy-monitor-stack.md +++ b/docs/docs-content/clusters/cluster-management/monitoring/deploy-monitor-stack.md @@ -13,15 +13,17 @@ The monitoring stack you will deploy uses the open-source tool, The monitoring stack is a centralized server or aggregation spot to which all other clusters will forward metrics. The monitoring stack is a dedicated Kubernetes cluster for monitoring and metrics aggregation in your Palette environment. + + The monitoring stack uses a server-client architecture. The monitoring stack uses the -[Prometheus Operator](../../../integrations/prometheus-operator.md) pack to deploy all the dependencies the Prometheus + pack to deploy all the dependencies the Prometheus server requires. The server exposes an API endpoint for all other clients to forward metrics. The clients are Kubernetes -clusters with the [Prometheus Agent](../../../integrations/prometheus-agent.md) pack installed and configured. +clusters with the pack installed and configured. Use the following steps to deploy a monitoring stack, and learn how to configure a host cluster to forward metrics to the monitoring stack. -
+ :::warning @@ -107,10 +109,13 @@ You can choose to deploy the monitoring stack with or without authentication. 10. Next, click on the **Presets** button to expand the options drawer. + + 11. Scroll down the presets option menu and enable **Remote Monitoring**. Confirm your changes. You can enable several - options to expand the functionality of the monitoring stack. Review the - [Prometheus Operator](../../../integrations/prometheus-operator.md) pack documentation to learn more about the - available options. +options to expand the functionality of the monitoring stack. Review the + pack documentation to +learn more about the available options. + 12. Confirm your changes by selecting **Confirm & Create**. @@ -131,8 +136,8 @@ You can choose to deploy the monitoring stack with or without authentication. - **Pack Type**: Monitoring - **Registry**: Public Repo - - **Pack Name**: Spectrocloud Grafana Dashboards - - **Pack Version**: 1.0.X or newer + - **Pack Name**: Spectro Grafana Dashboards + - **Pack Version**: 4.0.X or newer 18. Use the default values. Confirm your changes by selecting **Confirm & Create**. @@ -296,19 +301,23 @@ charts: 16. Next, update the `prometheus.service.type` parameter to `ClusterIP`. -
+
- ```yaml - charts: - kube-prometheus-stack: - prometheus: - service: - type: ClusterIP - ``` + ```yaml + charts: + kube-prometheus-stack: + prometheus: + service: + type: ClusterIP + ``` + + 17. Confirm your changes by selecting **Confirm & Create**. You can enable several options to expand the functionality - of the monitoring stack. Review the [Prometheus Operator](../../../integrations/prometheus-operator.md) pack - documentation to learn more about the available options. +of the monitoring stack. Review the + pack documentation to +learn more about the available options. + 18. Click on **Add New Pack**. diff --git a/docs/docs-content/clusters/cluster-management/monitoring/monitoring.md b/docs/docs-content/clusters/cluster-management/monitoring/monitoring.md index b4b3177780..44271a7578 100644 --- a/docs/docs-content/clusters/cluster-management/monitoring/monitoring.md +++ b/docs/docs-content/clusters/cluster-management/monitoring/monitoring.md @@ -11,24 +11,31 @@ understand the resource utilization of the cluster. The workload metrics Palette offer a limited ability to review past values. Administrators who want more information or a better understanding of their cluster metrics should consider using a dedicated monitoring system. -Several Packs are available in the [monitoring](../../../integrations/integrations.mdx) category that you can use to add -additional monitoring capabilities to your cluster and help you get answers to questions. For a more robust and scalable -solution, we recommend creating a dedicated monitoring stack for your environment. You can deploy a monitoring stack -that uses [Prometheus](https://prometheus.io/) to collect metrics from all clusters in your environment. +Several Packs are available in the monitoring category that you can use to add additional monitoring capabilities to +your cluster and help you get answers to questions. For a more robust and scalable solution, we recommend creating a +dedicated monitoring stack for your environment. You can deploy a monitoring stack that uses +[Prometheus](https://prometheus.io/) to collect metrics from all clusters in your environment. To help you get started with deploying a monitoring stack to your Palette environment, check out the [Deploy Monitoring Stack](deploy-monitor-stack.md) and the [Enable Monitoring on Host Cluster](deploy-agent.md) guide. ## Resources + + - [Deploy Monitoring Stack](deploy-monitor-stack.md) - [Enable Monitoring on Host Cluster](deploy-agent.md) -- [Prometheus Operator Pack](../../../integrations/prometheus-operator.md) +- + + +- + + +- -- [Prometheus Agent Pack](../../../integrations/prometheus-agent.md) -- [Prometheus Cluster Metrics](../../../integrations/prometheus-cluster-metrics.md) +- -- [Spectro Cloud Grafana Dashboards](../../../integrations/grafana-spectrocloud-dashboards.md) + diff --git a/docs/docs-content/clusters/cluster-management/palette-webctl.md b/docs/docs-content/clusters/cluster-management/palette-webctl.md index a1722d37c1..11a843ac6d 100644 --- a/docs/docs-content/clusters/cluster-management/palette-webctl.md +++ b/docs/docs-content/clusters/cluster-management/palette-webctl.md @@ -31,7 +31,7 @@ files to and from a virtual machine using Secure Copy Protocol (SCP). guidance. - A host cluster that is either publicly accessible OR a private host cluster that has the - [Spectro Proxy](../../integrations/frp.md) installed. + installed. :::warning diff --git a/docs/docs-content/clusters/data-center/nutanix/create-manage-nutanix-cluster.md b/docs/docs-content/clusters/data-center/nutanix/create-manage-nutanix-cluster.md index daa88ede13..fe49f7669c 100644 --- a/docs/docs-content/clusters/data-center/nutanix/create-manage-nutanix-cluster.md +++ b/docs/docs-content/clusters/data-center/nutanix/create-manage-nutanix-cluster.md @@ -25,7 +25,8 @@ section guides you in creating and updating a Kubernetes cluster in a Nutanix cl [Create an Infrastructure Profile](../../../profiles/cluster-profiles/create-cluster-profiles/create-infrastructure-profile.md). At the **Cloud Type** step of profile creation, select **Nutanix** listed under the **Tech Preview**. Select the custom packs provided at the OS and Kubernetes layers. Palette provides out-of-the-box packs for the network and - storage profile layers, including the [**Nutanix CSI**](../../../integrations/nutanix-csi.md) storage pack. + storage profile layers, including the + storage pack. - A Nutanix Prism Central account with _Prism Admin_ role. diff --git a/docs/docs-content/clusters/data-center/nutanix/nutanix.md b/docs/docs-content/clusters/data-center/nutanix/nutanix.md index 7e2bbdc2b5..550abfd0d7 100644 --- a/docs/docs-content/clusters/data-center/nutanix/nutanix.md +++ b/docs/docs-content/clusters/data-center/nutanix/nutanix.md @@ -57,14 +57,14 @@ steps in Palette and their local environment. you configured it in the previous step. You must fill out the account name and account details. 4. Create a cluster profile by selecting Nutanix as the cloud type. - + When creating a Nutanix profile, you do not have to specify anything for the OS or Kubernetes layers. Palette provides out-of-the-box packs for the network and storage profile layers, including the - [**Nutanix CSI**](../../../integrations/nutanix-csi.md) storage pack. The **Nutanix CSI** pack is available when the - cloud is registered using the name `nutanix`. If you have custom packs, you can add them to Palette by adding your - registry. To learn how to add a pack registry, review - [Add a Custom Registry](/docs/docs-content/registries-and-packs/adding-a-custom-registry.md). - + storage pack. The **Nutanix CSI** + pack is available when the cloud is registered using the name `nutanix`. If you have custom packs, you can add them + to Palette by adding your registry. To learn how to add a pack registry, review [Add a Custom + Registry](/docs/docs-content/registries-and-packs/adding-a-custom-registry.md). + 5. Deploy a cluster by specifying Nutanix, listed under **Tech Preview**, as the cluster type. Select the cloud account you added and make any needed changes to the profile layers by using the YAML editor. At the **Cluster Config** step, customize the Cluster configuration and Node configuration YAML files by replacing any undefined variables in curly diff --git a/docs/docs-content/clusters/data-center/nutanix/register-nutanix-cloud.md b/docs/docs-content/clusters/data-center/nutanix/register-nutanix-cloud.md index a2509804b5..aa3b958ecc 100644 --- a/docs/docs-content/clusters/data-center/nutanix/register-nutanix-cloud.md +++ b/docs/docs-content/clusters/data-center/nutanix/register-nutanix-cloud.md @@ -118,10 +118,9 @@ Use the following steps to prepare to register your cloud with Palette. ::: -8. In **controlPlanePoolTemplate.yaml**, edit the KubeadmControlPlane object to enable the - [**Nutanix CSI**](../../../integrations/nutanix-csi.md) pack. Include a new line with the - `- systemctl enable --now iscsid` command below the `preKubeadmCommands:` line, keeping proper indentation as - illustrated below. +8. In **controlPlanePoolTemplate.yaml**, edit the KubeadmControlPlane object to enable the **Nutanix CSI** pack. Include + a new line with the `- systemctl enable --now iscsid` command below the `preKubeadmCommands:` line, keeping proper + indentation as illustrated below. ```bash preKubeadmCommands: @@ -131,10 +130,9 @@ Use the following steps to prepare to register your cloud with Palette. 9. In **workerPoolTemplate.yaml**, change `providerID` to `providerID: nutanix://${CLUSTER_NAME}-m1-mt-0` within the `NutanixMachineTemplate` object. -10. In **workerPoolTemplate.yaml**, edit the KubeadmConfigTemplate object to enable the - [**Nutanix CSI**](../../../integrations/nutanix-csi.md) pack. Include a new line with the - `- systemctl enable --now iscsid` command below the `preKubeadmCommands:` line, keeping proper indentation as - illustrated below. +10. In **workerPoolTemplate.yaml**, edit the KubeadmConfigTemplate object to enable the **Nutanix CSI** pack. Include a + new line with the `- systemctl enable --now iscsid` command below the `preKubeadmCommands:` line, keeping proper + indentation as illustrated below. ```bash preKubeadmCommands: @@ -229,8 +227,7 @@ Nutanix cloud to Palette. Alternatively, you can use an API platform such as [Po The CLOUD_TYPE variable value must be set as `nutanix`, as this value will be used in the following steps. Moreover, in the cloud registration API, set `name` as `nutanix`. Setting `name` as `nutanix` will make the - out-of-the-box [**Nutanix CSI**](../../../integrations/nutanix-csi.md) pack available to users when they create a - cluster profile in Palette. + out-of-the-box **Nutanix CSI** pack available to users when they create a cluster profile in Palette. ::: diff --git a/docs/docs-content/clusters/edge/edgeforge-workflow/edgeforge-workflow.md b/docs/docs-content/clusters/edge/edgeforge-workflow/edgeforge-workflow.md index f1ffde2fea..1449c22cbe 100644 --- a/docs/docs-content/clusters/edge/edgeforge-workflow/edgeforge-workflow.md +++ b/docs/docs-content/clusters/edge/edgeforge-workflow/edgeforge-workflow.md @@ -138,10 +138,13 @@ scenario, use the CLIs to help you with the customization. [Prepare User Data](/clusters/edge/edgeforge-workflow/prepare-user-data) guide to learn more about user data and when to use multiple user data files. + + - **Bring Your Own OS (BYOOS)**: For environments that require a different runtime OS, you can specify another OS - through the [BYOOS](/integrations/byoos) option. Follow the instructions in the - [Build Edge Artifacts](/clusters/edge/edgeforge-workflow/palette-canvos) guide to learn more about how you can - customize the OS used in an Edge deployment. +through the option. Follow the +instructions in the [Build Edge Artifacts](/clusters/edge/edgeforge-workflow/palette-canvos) guide to learn more about +how you can customize the OS used in an Edge deployment. + ## Resources diff --git a/docs/docs-content/clusters/edge/edgeforge-workflow/palette-canvos/palette-canvos.md b/docs/docs-content/clusters/edge/edgeforge-workflow/palette-canvos/palette-canvos.md index a228d3c758..50953775f2 100644 --- a/docs/docs-content/clusters/edge/edgeforge-workflow/palette-canvos/palette-canvos.md +++ b/docs/docs-content/clusters/edge/edgeforge-workflow/palette-canvos/palette-canvos.md @@ -326,8 +326,8 @@ customization. 15. Navigate to the left **Main Menu** and select **Profiles**. Click on the **Add Cluster Profile** button, and fill out the required basic information fields to create a cluster profile for Edge. -16. Add the following [BYOS Edge OS](../../../../integrations/byoos.md) pack to the OS layer in the **Profile Layers** - section. +16. Add the following pack to the OS + layer in the **Profile Layers** section. | **Pack Type** | **Registry** | **Pack Name** | **Pack Version** | | ------------- | ------------ | ------------- | ---------------- | @@ -788,8 +788,8 @@ git checkout v4.0.6 19. Navigate to the left **Main Menu** and select **Profiles**. Click on the **Add Cluster Profile** button, and fill out the required basic information fields to create a cluster profile for Edge. -20. Add the following [BYOS Edge OS](../../../../integrations/byoos.md) pack to the OS layer in the **Profile Layers** - section. +20. Add the following pack to the OS + layer in the **Profile Layers** section. | **Pack Type** | **Registry** | **Pack Name** | **Pack Version** | | ------------- | ------------ | ------------- | ---------------- | diff --git a/docs/docs-content/clusters/edge/edgeforge-workflow/prepare-user-data.md b/docs/docs-content/clusters/edge/edgeforge-workflow/prepare-user-data.md index 5eaeff51c3..c4b21bc425 100644 --- a/docs/docs-content/clusters/edge/edgeforge-workflow/prepare-user-data.md +++ b/docs/docs-content/clusters/edge/edgeforge-workflow/prepare-user-data.md @@ -279,10 +279,9 @@ file named **user-data**, which allows your cluster to use directories or files Kubernetes cluster. This setup is useful for scenarios where your applications are active in the cluster and need direct access to files or directories on the Edge host. -Several packs require you set up bind mounts in order to function. For example, the -[Portworx pack](../../../integrations/portworx.md) requires several folders to be mounted on Edge deployments. You can -use the `install.bind_mounts` parameter to specify folders to be mounted. For example, the following user data mounts -three folders required by Portworx from the Edge host to the cluster. + +Several packs require you set up bind mounts in order to function. For example, the requires several folders to be mounted on Edge deployments. You can use the `install.bind_mounts` parameter to specify folders to be mounted. For +example, the following user data mounts three folders required by Portworx from the Edge host to the cluster. ```yaml #cloud-config diff --git a/docs/docs-content/clusters/edge/site-deployment/cluster-deployment.md b/docs/docs-content/clusters/edge/site-deployment/cluster-deployment.md index 5ef71c8b80..a4b56565bd 100644 --- a/docs/docs-content/clusters/edge/site-deployment/cluster-deployment.md +++ b/docs/docs-content/clusters/edge/site-deployment/cluster-deployment.md @@ -207,9 +207,9 @@ node pool. ### Limitations -- In a multi-node cluster with [PXK-E](../../../integrations/kubernetes-edge.md) as its Kubernetes layer, you cannot - change custom Network Interface Card (NIC). When you add an Edge host to such a cluster, leave the NIC field as its - default value. +- In a multi-node cluster with as its Kubernetes + layer, you cannot change custom Network Interface Card (NIC). When you add an Edge host to such a cluster, leave the + NIC field as its default value. ### Prerequisites diff --git a/docs/docs-content/clusters/edge/site-deployment/deploy-custom-registries/deploy-private-registry.md b/docs/docs-content/clusters/edge/site-deployment/deploy-custom-registries/deploy-private-registry.md index bd47d5cd77..06a0764a19 100644 --- a/docs/docs-content/clusters/edge/site-deployment/deploy-custom-registries/deploy-private-registry.md +++ b/docs/docs-content/clusters/edge/site-deployment/deploy-custom-registries/deploy-private-registry.md @@ -83,49 +83,52 @@ to use a private registry for images other the provider images, refer to ::: -6. At the root level of YAML for your OS layer, add the `providerCredentials` field to provide the credentials you need - to authenticate with your registry. For more information about the `providerCredentials` field, refer to - [Bring Your Own OS (BYOOS)](../../../../integrations/byoos.md) pack page. The `providerCredentials.password` field - will be masked when you provide it in the YAML file. You can also use a macro to store your credentials instead of - providing it directly in the YAML file. For more information, refer to - [Macros Support](../../../cluster-management/macros.md): - - ```yaml {7-8} - pack: - content: - images: - - image: '{{.spectro.pack.edge-native-byoi.options.system.uri}}' - # - image: example.io/my-other-images/example:v1.0.0 - # - image: example.io/my-super-other-images/example:v1.0.0 - providerCredentials: - registry: - # - e.x. registry: registry-1.docker.io - user: user - password: ****** - certificates: | - -----BEGIN CERTIFICATE----- - MIIDVzCCAj+gAwIBAgIRANtGPo/hFkZtYRNw0KaeW54wDQYJKoZIhvcNAQELBQAw - ---------------------------------------------------------------- - 7OicCaV35lje5FSl0owu74ghAlCgMyAdKsJf615g1kKO4V5E2BMErd9Ibw== - -----END CERTIFICATE----- - - options: - system.uri: example.io/my-images/example-custom-os:v1.4.5 - ``` - -7. If you are updating an existing profile, click **Confirm changes**, and then click **Save changes** to publish the - new version of your cluster profile. If you are creating a new profile, click **Next layer** and finish configuring - the remaining layers. - -8. If you already have an active cluster that is using the original version of the cluster profile, update the cluster - so that it uses the new version of the cluster profile you just published. For more information about updating - clusters, refer to [Update a Cluster](../../../cluster-management/cluster-updates.md). This will trigger a full - cluster repave since it includes an update to the OS layer of the cluster. To learn more about cluster repave - behavior, refer to - [Repave Behavior and Configuration](../../../cluster-management/node-pool.md#repave-behavior-and-configuration). - - If you don't have an active cluster yet, deploy a new cluster with the profile you just created, and the cluster will - pull images from the private registry you specified. + + +6. At the root level of YAML for your OS layer, add the `providerCredentials` field to provide the credentials you need + to authenticate with your registry. For more information about the `providerCredentials` field, refer to + pack page. The + `providerCredentials.password` field will be masked when you provide it in the YAML file. You can also use a macro + to store your credentials instead of providing it directly in the YAML file. For more information, refer to + [Macros Support](../../../cluster-management/macros.md): + + + ```yaml {7-8} + pack: + content: + images: + - image: '{{.spectro.pack.edge-native-byoi.options.system.uri}}' + # - image: example.io/my-other-images/example:v1.0.0 + # - image: example.io/my-super-other-images/example:v1.0.0 + providerCredentials: + registry: + # - e.x. registry: registry-1.docker.io + user: user + password: ****** + certificates: | + -----BEGIN CERTIFICATE----- + MIIDVzCCAj+gAwIBAgIRANtGPo/hFkZtYRNw0KaeW54wDQYJKoZIhvcNAQELBQAw + ---------------------------------------------------------------- + 7OicCaV35lje5FSl0owu74ghAlCgMyAdKsJf615g1kKO4V5E2BMErd9Ibw== + -----END CERTIFICATE----- + + options: + system.uri: example.io/my-images/example-custom-os:v1.4.5 + ``` + +7. If you are updating an existing profile, click **Confirm changes**, and then click **Save changes** to publish the + new version of your cluster profile. If you are creating a new profile, click **Next layer** and finish configuring + the remaining layers. + +8. If you already have an active cluster that is using the original version of the cluster profile, update the cluster + so that it uses the new version of the cluster profile you just published. For more information about updating + clusters, refer to [Update a Cluster](../../../cluster-management/cluster-updates.md). This will trigger a full + cluster repave since it includes an update to the OS layer of the cluster. To learn more about cluster repave + behavior, refer to + [Repave Behavior and Configuration](../../../cluster-management/node-pool.md#repave-behavior-and-configuration). + + If you don't have an active cluster yet, deploy a new cluster with the profile you just created, and the cluster + will pull images from the private registry you specified. ## Validate diff --git a/docs/docs-content/clusters/edge/site-deployment/deploy-custom-registries/local-registry.md b/docs/docs-content/clusters/edge/site-deployment/deploy-custom-registries/local-registry.md index 1715d1541f..c2704b3279 100644 --- a/docs/docs-content/clusters/edge/site-deployment/deploy-custom-registries/local-registry.md +++ b/docs/docs-content/clusters/edge/site-deployment/deploy-custom-registries/local-registry.md @@ -17,13 +17,13 @@ Installer ISO will also be loaded into the Harbor registry. For more information to [Build Content Bundle](../../edgeforge-workflow/palette-canvos/build-content-bundle.md) and [Build Edge Artifacts with Content Bundles](../../edgeforge-workflow/palette-canvos/palette-canvos.md). + If you enable the local Harbor registry on a cluster, the Palette agent will pull all images requested by the cluster from the Harbor registry. If your cluster uses any image that is not included in your cluster profile, you will need to instruct the Palette agent to not pull that image from the Harbor registry by disabling this behavior for certain namespaces. You can do this by giving a namespace the label `stylus.io/imageswap=disable`. For more information, refer -to -[Harbor Edge-Native Config pack](../../../../integrations/harbor-edge.md#enable-image-download-from-outside-of-harbor) -documentation. +to documentation. + :::preview @@ -69,9 +69,11 @@ documentation. - enable-admission-plugins=NamespaceLifecycle,ServiceAccount,NodeRestriction ``` + 6. Click **Add New Pack** and search for the **Harbor Edge Native Config** pack. Add the pack to your cluster profile. - For more information about the pack and its parameters, refer to - [Harbor Edge Native Config pack documentation](../../../../integrations/harbor-edge.md). + For more information about the pack and its parameters, refer to . + + 7. In the `harbor-config.storage` parameter, make sure you allocate enough storage in the `registry` field to store all your images. @@ -100,11 +102,14 @@ documentation. connection. Dismiss the warning, and you will be directed to Harbor's web UI. If you are using Google Chrome, you can click anywhere in your browser tab and type `thisisunsafe` using your keyboard to dismiss the warning. + + 6. Type in your credentials to log in to Harbor. The username is always `admin`. The password is what you configured - during cluster creation. If you don't know your password, refer to - [Retrieve Harbor Credentials](../../../../integrations/harbor-edge.md#retrieve-harbor-credentials) to retrieve your + during cluster creation. If you don't know your password, refer to to retrieve your password. + + 7. In the **Projects** view, select the **spectro-images** project. 8. Confirm that all images required by the cluster are stored in the project. diff --git a/docs/docs-content/clusters/edge/site-deployment/model-profile.md b/docs/docs-content/clusters/edge/site-deployment/model-profile.md index 33f029ef49..73c4fea4fb 100644 --- a/docs/docs-content/clusters/edge/site-deployment/model-profile.md +++ b/docs/docs-content/clusters/edge/site-deployment/model-profile.md @@ -62,35 +62,39 @@ needs. Refer to the EdgeForge [Build Images](../edgeforge-workflow/palette-canvos/palette-canvos.md) guide if you are missing a custom OS image. The following is an example configuration using a custom OS image. - ```yaml - pack: - content: - images: - - image: "{{.spectro.pack.edge-native-byoi.options.system.uri}}" - # - image: example.io/my-other-images/example:v1.0.0 - # - image: example.io/my-super-other-images/example:v1.0.0 - #drain: - #cordon: true - #timeout: 60 # The length of time to wait before giving up, zero means infinite - #gracePeriod: 60 # Period of time in seconds given to each pod to terminate gracefully. If negative, the default value specified in the pod will be used - #ignoreDaemonSets: true - #deleteLocalData: true # Continue even if there are pods using emptyDir (local data that will be deleted when the node is drained) - #force: true # Continue even if there are pods that do not declare a controller - #disableEviction: false # Force drain to use delete, even if eviction is supported. This will bypass checking PodDisruptionBudgets, use with caution - #skipWaitForDeleteTimeout: 60 # If pod DeletionTimestamp older than N seconds, skip waiting for the pod. Seconds must be greater than 0 to skip. - - options: - system.uri: example.io/my-images/example-custom-os:v1.4.5 - ``` - - :::info - - You can customize the node drainage behavior and specify additional images that you may have created that are part - of the content bundle. Specify any additional image required by the cluster profile in the `images` section. Add an - `- image: ` entry for each image you need to specify. Refer to the [BYOOS Pack](../../../integrations/byoos.md) - resource to learn more about the pack details. - - ::: + ```yaml + pack: + content: + images: + - image: "{{.spectro.pack.edge-native-byoi.options.system.uri}}" + # - image: example.io/my-other-images/example:v1.0.0 + # - image: example.io/my-super-other-images/example:v1.0.0 + #drain: + #cordon: true + #timeout: 60 # The length of time to wait before giving up, zero means infinite + #gracePeriod: 60 # Period of time in seconds given to each pod to terminate gracefully. If negative, the default value specified in the pod will be used + #ignoreDaemonSets: true + #deleteLocalData: true # Continue even if there are pods using emptyDir (local data that will be deleted when the node is drained) + #force: true # Continue even if there are pods that do not declare a controller + #disableEviction: false # Force drain to use delete, even if eviction is supported. This will bypass checking PodDisruptionBudgets, use with caution + #skipWaitForDeleteTimeout: 60 # If pod DeletionTimestamp older than N seconds, skip waiting for the pod. Seconds must be greater than 0 to skip. + + options: + system.uri: example.io/my-images/example-custom-os:v1.4.5 + ``` + + + +:::info + +You can customize the node drainage behavior and specify additional images that you may have created that are part +of the content bundle. Specify any additional image required by the cluster profile in the `images` section. Add an +`- image: ` entry for each image you need to specify. Refer to the resource to learn more about the +pack details. + +::: + + 11. Specify any cloud-init stages in your OS pack. Cloud-init stages allow you to configure your OS declaratively. For more information about cloud-init stages, refer to [Cloud-init Stages](../edge-configuration/cloud-init.md). @@ -162,9 +166,9 @@ YAML file to set up Edge host users, install other OS packages, install certific You now have a cluster profile you can use for deploying Edge hosts. + Consider creating additional profiles with out-of-the-box packs for monitoring, security, authentication, or other -capabilities. If you need remote access to the cluster, consider adding the -[Spectro Proxy](../../../integrations/frp.md) pack to one of the add-on profiles. +capabilities. If you need remote access to the cluster, consider adding the pack to one of the add-on profiles. Optionally, add additional Helm or OCI registries and include applications hosted in those registries in add-on profiles. Check out the guide for adding a [Helm](../../../registries-and-packs/registries/helm-charts.md) or diff --git a/docs/docs-content/clusters/public-cloud/aws/eks.md b/docs/docs-content/clusters/public-cloud/aws/eks.md index 44175858f7..428e5773b4 100644 --- a/docs/docs-content/clusters/public-cloud/aws/eks.md +++ b/docs/docs-content/clusters/public-cloud/aws/eks.md @@ -239,8 +239,10 @@ To use custom OIDC, you need to do the following: more information and to learn about other available helper applications, you can visit [OIDC Identity Provider authentication for Amazon EKS](https://aws.amazon.com/blogs/containers/introducing-oidc-identity-provider-authentication-amazon-eks/). + - Configure OIDC in the Kubernetes pack YAML file. Refer to steps for Amazon EKS in the - [Configure Custom OIDC](../../../integrations/kubernetes-generic.md#configure-custom-oidc) guide. + guide. + - Map a set of users or groups to a Kubernetes RBAC role. To learn how to map a Kubernetes role to users and groups, refer to [Create Role Bindings](../../cluster-management/cluster-rbac.md#create-role-bindings). Refer to diff --git a/docs/docs-content/enterprise-version/install-palette/install-on-kubernetes/palette-helm-ref.md b/docs/docs-content/enterprise-version/install-palette/install-on-kubernetes/palette-helm-ref.md index 3c3bd9a1b6..7abbae97a3 100644 --- a/docs/docs-content/enterprise-version/install-palette/install-on-kubernetes/palette-helm-ref.md +++ b/docs/docs-content/enterprise-version/install-palette/install-on-kubernetes/palette-helm-ref.md @@ -406,11 +406,11 @@ ingress: ### Spectro Proxy + You can specify a reverse proxy server that clusters deployed through Palette can use to facilitate network connectivity -to the cluster's Kubernetes API server. Host clusters deployed in private networks can use the -[Spectro Proxy pack](../../../integrations/frp.md) to expose the cluster's Kubernetes API to downstream clients that are -not in the same network. Check out the [Reverse Proxy](../../system-management/reverse-proxy.md) documentation to learn -more about setting up a reverse proxy server for Palette. +to the cluster's Kubernetes API server. Host clusters deployed in private networks can use the pack to expose the cluster's Kubernetes API to downstream clients that are not in the same network. Check out the [Reverse +Proxy](../../system-management/reverse-proxy.md) documentation to learn more about setting up a reverse proxy server for +Palette. | **Parameters** | **Description** | **Type** | **Default value** | | ----------------- | -------------------------------------------------------------------------------------------- | -------- | ----------------- | diff --git a/docs/docs-content/enterprise-version/system-management/reverse-proxy.md b/docs/docs-content/enterprise-version/system-management/reverse-proxy.md index d8c6e7c128..69aeb6f5ec 100644 --- a/docs/docs-content/enterprise-version/system-management/reverse-proxy.md +++ b/docs/docs-content/enterprise-version/system-management/reverse-proxy.md @@ -13,9 +13,8 @@ You can configure a reverse proxy for Palette. The reverse proxy can be used by network. Host clusters deployed in a private network are not accessible from the public internet or by users in different networks. You can use a reverse proxy to access the cluster's Kubernetes API server from a different network. -When you configure reverse proxy server for Palette, clusters that use the -[Spectro Proxy pack](../../integrations/frp.md) will use the reverse proxy server address in the kubeconfig file. -Clusters not using the Spectro Proxy pack will use the default cluster address in the kubeconfig file. + +When you configure reverse proxy server for Palette, clusters that use the pack will use the reverse proxy server address in the kubeconfig file. Clusters not using the Spectro Proxy pack will use the default cluster address in the kubeconfig file. Use the following steps to configure a reverse proxy server for Palette. @@ -206,8 +205,9 @@ Output 204 ``` + You now have a Spectro Proxy server that you can use to access Palette clusters deployed in a different network. Make -sure you add the [Spectro Proxy pack](../../integrations/frp.md) to the clusters you want to access using the Spectro +sure you add the pack to the clusters you want to access using the Spectro Proxy server. ## Validate diff --git a/docs/docs-content/integrations/antrea.md b/docs/docs-content/integrations/antrea.md new file mode 100644 index 0000000000..c2a7d189ab --- /dev/null +++ b/docs/docs-content/integrations/antrea.md @@ -0,0 +1,63 @@ +--- +sidebar_label: "Antrea" +title: "Antrea" +description: "Antrea CNI network pack for Palette Kubernetes Clusters" +type: "integration" +category: ["network", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/antrea/blobs/sha256:3c5704caf6652c63374282cbf413f8e73a77c4efbc49f375c19c73f8e2ec4148?type=image.webp" +tags: ["packs", "antrea", "cni", "network"] +--- + +Palette supports Antrea controller network interface (CNI) for VMware Kubernetes clusters. Antrea CNI enables each pod +to have exclusive IP addresses from the subnet with direct accessibility. + +Antrea leverages [Open vSwitch](https://www.openvswitch.org/) to implement pod networking and security features. Open +vSwitch enables Antrea to implement Kubernetes network policies efficiently. + +## Supported Versions + + + + + + + +## Troubleshooting + +If routing problems occur or some hosts cannot communicate outside their subnet, this indicates overlapping IP addresses +or conflicting CIDR IPs. + +Ensure you have provided a non-overlapping IP address for your pod network in Palette's Kubernetes manifest using the +`podCIDR` parameter. The CIDR IP specified with the `podCIDR` parameter in the Kubernetes manifest always takes +precedence. + +If you wish to use Antrea CIDRs and have deployed a cluster using Palette, ensure that you have done the following: + +- Removed any value for `podCIDR` and `serviceCIDR` in the Kubernetes manifest. +- Provided a non-overlapping IP address for your pod network. + +## Terraform + +You can reference the Antrea CNI pack in Terraform with a data resource. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "antrea" { + name = "antrea" + version = "1.9.0" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` + +## References + +- [Antrea Service of type LoadBalancer](https://antrea.io/docs/v1.9.0/docs/service-loadbalancer) +- [MetalLB](https://metallb.universe.tf) +- [Antrea](https://antrea.io/) +- [Antrea IPAM Capabilities](https://antrea.io/docs/v1.6.1/docs/antrea-ipam/) +- [Using MetalLB with Antrea](https://antrea.io/docs/v1.9.0/docs/service-loadbalancer/#using-metallb-with-antrea) diff --git a/docs/docs-content/integrations/argo-cd.md b/docs/docs-content/integrations/argo-cd.md index a2968d64a0..34069bf2a8 100644 --- a/docs/docs-content/integrations/argo-cd.md +++ b/docs/docs-content/integrations/argo-cd.md @@ -10,43 +10,18 @@ logoUrl: "https://registry.spectrocloud.com/v1/argo-cd/blobs/sha256:647cd3df6fec tags: ["packs", "argo-cd", "system app"] --- -[Argo CD](https://argo-cd.readthedocs.io/en/stable/) is a declarative, GitOps continuous delivery tool for Kubernetes. -Argo CD follows the GitOps pattern of using Git repositories as the source of truth for defining the desired application -state. Argo CD automates the deployment of the desired application states in the specified target environments. -Application deployments can track updates to branches, tags, or pinned to a specific version of manifests at a Git -commit. Start using Argo CD with Palette today by consuming this pack. +## Terraform -## Prerequisites +You can reference the Argo CD pack in Terraform with the following data resource. -- Kubernetes 1.7+ +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} -## Version Supported - - - - -- **3.3.5** - - - - - -- **3.2.6** - - - - -## Notable Parameters - -| Parameter | Description | -| ---------------------------- | ---------------------------------------------------------------------------------------------------- | -| global.image.repository | The repository that is the source of truth. | -| global.image.tag | The image tag to pull. | -| global.image.imagePullPolicy | If defined, a imagePullPolicy applied to all ArgoCD deployments. Defaults to ` IfNotPresent` | -| global.securityContext | A list of security contexts | -| imagePullSecrets | If defined, uses a Secret to pull an image from a private Docker registry or repository. | -| hostAliases | A list of mapping between IP and hostnames that will be injected as entries in the pod's hosts files | - -## References - -- [Argo CD](https://argo-cd.readthedocs.io/en/stable/) +data "spectrocloud_pack" "argo_cd" { + name = "argo-cd" + version = "5.46.8" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/aws-autoscaler.md b/docs/docs-content/integrations/aws-cluster-autoscaler.md similarity index 79% rename from docs/docs-content/integrations/aws-autoscaler.md rename to docs/docs-content/integrations/aws-cluster-autoscaler.md index b5ed8d4df4..c0c1f43596 100644 --- a/docs/docs-content/integrations/aws-autoscaler.md +++ b/docs/docs-content/integrations/aws-cluster-autoscaler.md @@ -10,13 +10,7 @@ logoUrl: "https://registry.dev.spectrocloud.com/v1/aws-cluster-autoscaler/blobs/ tags: ["packs", "aws-cluster-autoscaler", "system app", "eks"] --- -Palette supports auto scaling for Amazon Elastic Kubernetes Service (EKS) host clusters through the AWS Cluster -Autoscaler pack. - -The Cluster Autoscaler pack monitors the cluster workload and utilizes -[Amazon EC2 Auto Scaling Groups](https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html) -to dynamically provision or shut down nodes, maximizing the cluster's performance and making it more resilient to -failures. The Kubernetes clusters are resized under the following conditions: +The Kubernetes EKS clusters are resized under the following conditions: - Scale-up: The Cluster Autoscaler triggers a scale-up operation if insufficient cluster resources lead to multiple pod failures. The pods become eligible for scheduling on the new nodes. The Cluster Autoscaler checks for pod failures @@ -29,18 +23,6 @@ failures. The Kubernetes clusters are resized under the following conditions: threshold based on CPU and memory utilization. In scenarios where the node is underutilized, the Cluster Autoscaler migrates the pods from underutilized nodes to other available nodes and then shuts down the underutilized nodes. -## Versions Supported - - - - - -### Prerequisites - -- An EKS host cluster with Kubernetes 1.24.x or higher. - -- Permission to create an IAM policy in the AWS account you use with Palette. - :::warning Existing cluster profiles that use the manifest-based Cluster Autoscaler pack version 1.28.x or earlier cannot be @@ -49,16 +31,13 @@ version of the pack from the cluster profile and then add the new one. ::: -### Parameters +## Versions Supported + + -| **Parameter** | **Description** | **Default Value** | **Required** | -| ----------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ | ------------ | -| `charts.cluster-autoscaler.awsRegion` | The AWS region where the resources will be deployed. | `us-east-1` | Yes | -| `charts.cluster-autoscaler.autoDiscovery.clusterName` | This parameter enables autodiscovery within the EKS host cluster. | `{{ .spectro.system.cluster.name }}` | Yes | -| `charts.cluster-autoscaler.cloudProvider` | The cloud provider where the autoscaler will be deployed. | `aws` | Yes | -| `charts.cluster-autoscaler.extraArgs.expander` | Indicates which Auto Scaling Group (ASG) to expand. Options are `random`, `most-pods`, and `least-waste`. `random` scales up a random ASG. `most-pods` scales up the ASG that will schedule the most amount of pods. `least-waste` scales up the ASG that will waste the least amount of CPU/MEM resources. | `least-waste` | Yes | + -### Usage +## Create IAM Policy The Helm-based Cluster Autoscaler pack is available for Amazon EKS host clusters. To deploy the pack, you must first define an IAM policy in the AWS account associated with Palette. This policy allows the Cluster Autoscaler to scale the @@ -162,7 +141,7 @@ Use the following steps to create the IAM policy and deploy the Cluster Autoscal ::: -#### Resize the Cluster +## Resize the Cluster In this example, you will resize the worker pool nodes to better understand the scaling behavior of the Cluster Autoscaler pack. First, you will create a cluster with large-sized worker pool instances. Then, you will manually reduce @@ -198,19 +177,7 @@ and the pod rescheduling event. -### Prerequisites - -- An EKS host cluster with Kubernetes 1.28.x or higher. - -- Permission to create an IAM policy in the AWS account you use with Palette. - -### Parameters - -| **Parameter** | **Description** | **Default Value** | **Required** | -| ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | ------------ | -| `manifests.aws-cluster-autoscaler.expander` | Indicates which Auto Scaling Group (ASG) to expand. Options are `random`, `most-pods`, and `least-waste`. `random` scales up a random ASG. `most-pods` scales up the ASG that will schedule the most amount of pods. `least-waste` scales up the ASG that will waste the least amount of CPU/MEM resources. | `least-waste` | Yes | - -### Usage +## Create IAM Policy The manifest-based Cluster Autoscaler pack is available for Amazon EKS host clusters. To deploy the pack, you must first define an IAM policy in the AWS account associated with Palette. This policy allows the Cluster Autoscaler to scale the @@ -306,7 +273,7 @@ Use the following steps to create the IAM policy and deploy the Cluster Autoscal ::: -#### Resize the Cluster +## Resize the Cluster In this example, you will resize the worker pool nodes to better understand the scaling behavior of the Cluster Autoscaler pack. First, you will create a cluster with large-sized worker pool instances. Then, you will manually reduce @@ -342,19 +309,7 @@ and the pod rescheduling event. -### Prerequisites - -- An EKS host cluster with Kubernetes 1.27.x or higher. - -- Permission to create an IAM policy in the AWS account you use with Palette. - -### Parameters - -| **Parameter** | **Description** | **Default Value** | **Required** | -| ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | ------------ | -| `manifests.aws-cluster-autoscaler.expander` | Indicates which Auto Scaling Group (ASG) to expand. Options are `random`, `most-pods`, and `least-waste`. `random` scales up a random ASG. `most-pods` scales up the ASG that will schedule the most amount of pods. `least-waste` scales up the ASG that will waste the least amount of CPU/MEM resources. | `least-waste` | Yes | - -### Usage +## Create IAM Policy The manifest-based Cluster Autoscaler pack is available for Amazon EKS host clusters. To deploy the pack, you must first define an IAM policy in the AWS account associated with Palette. This policy allows the Cluster Autoscaler to scale the @@ -450,7 +405,7 @@ Use the following steps to create the IAM policy and deploy the Cluster Autoscal ::: -#### Resize the Cluster +## Resize the Cluster In this example, you will resize the worker pool nodes to better understand the scaling behavior of the Cluster Autoscaler pack. First, you will create a cluster with large-sized worker pool instances. Then, you will manually reduce @@ -486,19 +441,7 @@ and the pod rescheduling event. -### Prerequisites - -- An EKS host cluster with Kubernetes 1.26.x or higher. - -- Permission to create an IAM policy in the AWS account you use with Palette. - -### Parameters - -| **Parameter** | **Description** | **Default Value** | **Required** | -| ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | ------------ | -| `manifests.aws-cluster-autoscaler.expander` | Indicates which Auto Scaling Group (ASG) to expand. Options are `random`, `most-pods`, and `least-waste`. `random` scales up a random ASG. `most-pods` scales up the ASG that will schedule the most amount of pods. `least-waste` scales up the ASG that will waste the least amount of CPU/MEM resources. | `least-waste` | Yes | - -### Usage +## Create IAM Policy The manifest-based Cluster Autoscaler pack is available for Amazon EKS host clusters. To deploy the pack, you must first define an IAM policy in the AWS account associated with Palette. This policy allows the Cluster Autoscaler to scale the @@ -594,7 +537,7 @@ Use the following steps to create the IAM policy and deploy the Cluster Autoscal ::: -#### Resize the Cluster +## Resize the Cluster In this example, you will resize the worker pool nodes to better understand the scaling behavior of the Cluster Autoscaler pack. First, you will create a cluster with large-sized worker pool instances. Then, you will manually reduce @@ -630,19 +573,7 @@ and the pod rescheduling event. -### Prerequisites - -- An EKS host cluster with Kubernetes 1.19.x or higher. - -- Permission to create an IAM policy in the AWS account you use with Palette. - -### Parameters - -| **Parameter** | **Description** | **Default Value** | **Required** | -| ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | ------------ | -| `manifests.aws-cluster-autoscaler.expander` | Indicates which Auto Scaling Group (ASG) to expand. Options are `random`, `most-pods`, and `least-waste`. `random` scales up a random ASG. `most-pods` scales up the ASG that will schedule the most amount of pods. `least-waste` scales up the ASG that will waste the least amount of CPU/MEM resources. | `least-waste` | Yes | - -### Usage +## Create IAM Policy The manifest-based Cluster Autoscaler pack is available for Amazon EKS host clusters. To deploy the pack, you must first define an IAM policy in the AWS account associated with Palette. This policy allows the Cluster Autoscaler to scale the @@ -738,7 +669,7 @@ Use the following steps to create the IAM policy and deploy the Cluster Autoscal ::: -#### Resize the Cluster +## Resize the Cluster In this example, you will resize the worker pool nodes to better understand the scaling behavior of the Cluster Autoscaler pack. First, you will create a cluster with large-sized worker pool instances. Then, you will manually reduce @@ -772,17 +703,6 @@ and the pod rescheduling event. - - -:::warning - -All versions less than version 1.22.x are considered deprecated. Upgrade to a newer version to take advantage of new -features. - -::: - - - ## Troubleshooting @@ -821,11 +741,3 @@ data "spectrocloud_pack_simple" "aws-cluster-autoscaler" { registry_uid = data.spectrocloud_registry.public_registry.id } ``` - -## References - -- [Cluster Autoscaler on AWS](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/README.md) - -- [Amazon EKS Autoscaling](https://docs.aws.amazon.com/eks/latest/userguide/autoscaling.html) - -- [AWS IAM Authenticator Plugin](https://github.com/kubernetes-sigs/aws-iam-authenticator) diff --git a/docs/docs-content/integrations/cloudanix.md b/docs/docs-content/integrations/cloudanix.md index 2d175d66ec..f555231822 100644 --- a/docs/docs-content/integrations/cloudanix.md +++ b/docs/docs-content/integrations/cloudanix.md @@ -12,73 +12,11 @@ logoUrl: "https://cloudanix-assets.s3.amazonaws.com/static/cloudanix-logo-p.png" tags: ["packs", "cloudanix", "security"] --- -The Cloudanix pack is an add-on security pack that provides a dashboard to help you detect threats and unusual behavior -in your Kubernetes clusters. Cloudanix detects the following. - -- Files added or modified in sensitive directories - -- SSH into a container - -- Modifications to shell configuration files - -- Attempts to read sensitive files that contain credential information - -- Crypto mining - -The Cloudanix dashboard provides an interactive interface that displays the mapping between threat events and associated -container, pod, and node workloads. Additionally, Cloudanix identifies the user who initiated an activity identified as -a threat and the command that was used. - -You can also start Jira workflows and target specific workloads from the Cloudanix dashboard. - ## Versions Supported - - - - -## Prerequisites - -- CPUs: 0.5 -- Memory: 256 MiB -- Kubernetes 1.19.x to 1.25.x -- Kernel version 4.5 and higher + -## Parameters - -The Cloudanix pack has the following parameters, which are auto-filled based on Palette user information. - -| Name | Description | -| ------------------- | -------------------------------------------------------------------------- | -| `userEmail` | The email address of the user who created the cluster and cluster profile. | -| `partnerIdentifier` | A Cloudanix unique identifier for Spectro Cloud. | -| `organizationId` | The organization tenant ID in Palette. | -| `userName` | Palette user name. | -| `accountName` | Palette cloud account name. | -| `accountType` | Cloud account type such as AWS or GCP, Azure, or others. | -| `accountId` | The user's cloud account ID. | -| `clusterName` | The name of the cluster. | -| `clusterIdentifier` | The cluster's unique identifier. | -| `clusterDomain` | The Palette cloud account type such as AWS, GCP, Azure, or others. | - -## Usage - -This Helm Chart installs four Cloudanix services to enable container security capabilities: - -
- -- **config-cron**: A job that runs periodically in a Kubernetes cluster to maintain the configuration of Cloudanix - inventory and threat services. -- **misconfig-cron**: A job that captures Kubernetes misconfigurations and displays them on the Cloudanix dashboard. -- **inventory-service**: An inventory service that detects any new Kubernetes resources and displays them on the - Cloudanix dashboard. -- **threat-service**: A threat service that exports threat events and affected Kubernetes resources, which are visible - on the Cloudanix dashboard. - -From the **Workloads** page, click the **Risks** tab to view a list of failed threat rules. You can exclude resources, -such as pods and containers, from the risk findings. - -
+ ### Kubernetes 1.25 and higher @@ -114,18 +52,14 @@ As a final step, apply the cluster profile to your cluster. ## Terraform ```hcl -data "spectrocloud_registry" "public_registry" { - name = "Public Repo" +data "spectrocloud_registry" "public_add_on_repo" { + name = "Spectro Addon Repo" } data "spectrocloud_pack_simple" "cloudanix" { - name = "cloudanix" - version = "0.0.6" - type = "helm" - registry_uid = data.spectrocloud_registry.public_registry.id + name = "cloudanix" + version = "0.0.2" + type = "helm" + registry_uid = data.spectrocloud_registry.public_add_on_repo.id } ``` - -## References - -- [Cloudanix Documentation](https://www.cloudanix.com/docs/introduction) diff --git a/docs/docs-content/integrations/cni-azure.md b/docs/docs-content/integrations/cni-azure.md new file mode 100644 index 0000000000..3bcabe5315 --- /dev/null +++ b/docs/docs-content/integrations/cni-azure.md @@ -0,0 +1,75 @@ +--- +sidebar_label: "Azure CNI" +title: "Azure CNI" +description: "Azure CNI network pack for Palette AKS Clusters" +hide_table_of_contents: true +type: "integration" +category: ["network", "amd64"] +sidebar_class_name: "hide-from-sidebar" +tags: ["packs", "azure-cni", "cni", "network"] +--- + +## Versions Supported + + + + + +:::warning + +Make sure to use Azure CNI with the Windows Operating System as the kubenet CNI is not available for the Windows +environment. + +::: + +### Azure CNI Policy Support + +Network Policy is a Kubernetes specification that defines access policies for communication between pods. By default, +Azure AKS cluster pods can send and receive traffic without limitations. However, to ensure security, rules to control +traffic flow can be defined. Network Policies define an ordered set of rules to send and receive traffic and applies +them to a collection of pods that match one or more label selectors. Palette supports Network Policies to be included as +part of a wider manifest that also creates a deployment or service. Palette leverages two Network Policies from Azure +CNI: + +- **azure**: Azure's own implementation, called + [Azure Network Policy](https://learn.microsoft.com/en-us/azure/virtual-network/kubernetes-network-policies). + +- **calico**: An open-source network and network security solution developed by [Tigera](https://www.tigera.io/). + +- **none**: No network policy is applied. Use this option if you do not want to apply any network policy. + +Update the pack YAML's `networkPolicy` field to apply the desired network policy. The default value is `calico`. + +```yaml +pack: + networkPolicy: "none" +``` + +:::tip + +If you are comparing Azure Network Policy with other Network Policy engines, refer to the +[Differences between Network Policy engines: Cilium, Azure NPM, and Calico](https://learn.microsoft.com/en-us/azure/aks/use-network-policies#differences-between-network-policy-engines-cilium-azure-npm-and-calico). + +::: + + + + + +## Terraform + +Use the following Terraform snippet to reference the Azure CNI pack in your Terraform template. Update the version +number as needed. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "calico" { + name = "cni-azure" + version = "1.4.0" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/cni-calico.md b/docs/docs-content/integrations/cni-calico.md new file mode 100644 index 0000000000..a169f69bf9 --- /dev/null +++ b/docs/docs-content/integrations/cni-calico.md @@ -0,0 +1,214 @@ +--- +sidebar_label: "Calico" +title: "Calico" +description: "Reference documentation for the Calico pack in Palette" +hide_table_of_contents: true +type: "integration" +category: ["network", "amd64", "fips"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/cni-calico/blobs/sha256:9a08103ccd797857a81b6ce55fa4f84a48bcb2bddfc7a4ff27878819c87e1e30?type=image.webp" +tags: ["packs", "calico", "network"] +--- + +:::warning + +Limitations: AWS, VMWare supports IP-in-IP encapsulation type. Azure supports VXLAN encapsulation type. + +::: + +## Versions Supported + + + + + +### Create Bind Mounts for Edge Deployments + +In Edge deployments, Calico requires a bind mount on the host machine. Without the bind mount, it's possible for the +Calico pods to be stuck in the init state. Use the following example to create a bind mount from `/var/lib/calico` on +the Edge host. When you build an installer ISO with the `bind_mounts` block, the folders specified in the block will be +mounted. For more information about building the installer ISO, refer to +[Build Installer ISO](../clusters/edge/edgeforge-workflow/palette-canvos/build-installer-iso.md). + +```yaml +#cloud-config +stylus: + site: + debug: true + insecureSkipVerify: false + paletteEndpoint: api.console.spectrocloud.com + name: edge-appliance-1 + caCerts: + - | + -----BEGIN CERTIFICATE----- + + -----END CERTIFICATE----- + +install: + bind_mounts: + - /var/lib/calico +``` + + + + + +### Create Bind Mounts for Edge Deployments + +In Edge deployments, Calico requires a bind mount on the host machine. Without the bind mount, it's possible for the +Calico pods to be stuck in the init state. Use the following example to create a bind mount from `/var/lib/calico` on +the Edge host. When you build an installer ISO with the `bind_mounts` block, the folders specified in the block will be +mounted. For more information about building the installer ISO, refer to +[Build Installer ISO](../clusters/edge/edgeforge-workflow/palette-canvos/build-installer-iso.md). + +```yaml +#cloud-config +stylus: + site: + debug: true + insecureSkipVerify: false + paletteEndpoint: api.console.spectrocloud.com + name: edge-appliance-1 + caCerts: + - | + -----BEGIN CERTIFICATE----- + + -----END CERTIFICATE----- + +install: + bind_mounts: + - /var/lib/calico +``` + + + + +### Create Bind Mounts for Edge Deployments + +In Edge deployments, Calico requires a bind mount on the host machine. Without the bind mount, it's possible for the +Calico pods to be stuck in the init state. Use the following example to create a bind mount from `/var/lib/calico` on +the Edge host. When you build an installer ISO with the `bind_mounts` block, the folders specified in the block will be +mounted. For more information about building the installer ISO, refer to +[Build Installer ISO](../clusters/edge/edgeforge-workflow/palette-canvos/build-installer-iso.md). + +```yaml +#cloud-config +stylus: + site: + debug: true + insecureSkipVerify: false + paletteEndpoint: api.console.spectrocloud.com + name: edge-appliance-1 + caCerts: + - | + -----BEGIN CERTIFICATE----- + + -----END CERTIFICATE----- + +install: + bind_mounts: + - /var/lib/calico +``` + + + + + +### Create Bind Mounts for Edge Deployments + +In Edge deployments, Calico requires a bind mount on the host machine. Without the bind mount, it's possible for the +Calico pods to be stuck in the init state. Use the following example to create a bind mount from `/var/lib/calico` on +the Edge host. When you build an installer ISO with the `bind_mounts` block, the folders specified in the block will be +mounted. For more information about building the installer ISO, refer to +[Build Installer ISO](../clusters/edge/edgeforge-workflow/palette-canvos/build-installer-iso.md). + +```yaml +#cloud-config +stylus: + site: + debug: true + insecureSkipVerify: false + paletteEndpoint: api.console.spectrocloud.com + name: edge-appliance-1 + caCerts: + - | + -----BEGIN CERTIFICATE----- + + -----END CERTIFICATE----- + +install: + bind_mounts: + - /var/lib/calico +``` + + + + + +### Create Bind Mounts for Edge Deployments + +In Edge deployments, Calico requires a bind mount on the host machine. Without the bind mount, it's possible for the +Calico pods to be stuck in the init state. Use the following example to create a bind mount from `/var/lib/calico` on +the Edge host. When you build an installer ISO with the `bind_mounts` block, the folders specified in the block will be +mounted. For more information about building the installer ISO, refer to +[Build Installer ISO](../clusters/edge/edgeforge-workflow/palette-canvos/build-installer-iso.md). + +```yaml {14-16} +#cloud-config +stylus: + site: + debug: true + insecureSkipVerify: false + paletteEndpoint: api.console.spectrocloud.com + name: edge-appliance-1 + caCerts: + - | + -----BEGIN CERTIFICATE----- + + -----END CERTIFICATE----- + +install: + bind_mounts: + - /var/lib/calico +``` + + + + + +All versions below version 3.23.x are deprecated. + + + + + +## Troubleshooting + +The following are some tips to troubleshoot issues with the Calico CNI. + +- A daemon set is installed, the calico-node pod should be deployed on all the nodes in the cluster to provide + networking. + +- For any issues with networking, check the logs of the `calico-node` and `calico-kube-controller` pods on the cluster. + +## Terraform + +Use the following Terraform snippet to reference the Calico CNI pack in your Terraform template. + +```hcl + +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "calico" { + name = "cni-calico" + version = "3.27.0" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` + +## References + +- [Calico Documentation](https://docs.tigera.io/calico/latest/reference) diff --git a/docs/docs-content/integrations/cni-cilium-oss.md b/docs/docs-content/integrations/cni-cilium-oss.md new file mode 100644 index 0000000000..9931b6b8d7 --- /dev/null +++ b/docs/docs-content/integrations/cni-cilium-oss.md @@ -0,0 +1,128 @@ +--- +sidebar_label: "Cilium" +title: "Cilium" +description: "Cilium network pack for Spectro Cloud Palette" +hide_table_of_contents: true +type: "integration" +category: ["network", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.dev.spectrocloud.com/v1/cni-cilium/blobs/sha256:dbc239ac739ea2939ef41dd0743b82281bc82c360326cd7c536f73f0053e2cd2?type=image.webp" +tags: ["packs", "cilium", "network"] +--- + +## Versions Supported + + + + +:::warning + +If you are using Bring Your Own Operating System (BYOOS), then HWE (Hardware Enabled) Kernel or a Kernel that supports +[eBPF](https://ebpf.io/) modules needs to be provisioned. + +::: + +## Troubleshooting + +### Scenario - I/O Timeout Error on VMware + +If you are deploying a cluster to a VMware environment using the VXLAN tunnel protocol, you may encounter I/O timeout +errors. This is due to a known bug in the VXMNET3 adapter that results in VXLAN traffic being dropped. You can learn +more about this issue in Cilium's [GitHub issue #21801](https://github.com/cilium/cilium/issues/21801). + +You can work around the issue by using one of the two following methods: + +- Option 1: Set a different tunnel protocol in the Cilium configuration. You can set the tunnel protocol to `geneve`. + + ```yaml + charts: + cilium: + tunnelProtocol: "geneve" + ``` + +- Option 2: Modify the Operating System (OS) layer of your cluster profile to automatically disable UDP Segmentation + Offloading (USO). + + ```yaml + kubeadmconfig: + preKubeadmCommands: + # Disable hardware segmentation offloading due to VMXNET3 issue + - | + install -m 0755 /dev/null /usr/lib/networkd-dispatcher/routable.d/10-disable-offloading + cat < /usr/lib/networkd-dispatcher/routable.d/10-disable-offloading + #!/bin/sh + ethtool -K eth0 tx-udp_tnl-segmentation off + ethtool -K eth0 tx-udp_tnl-csum-segmentation off + ethtool --offload eth0 rx off tx off + EOF + systemctl restart systemd-networkd + ``` + + + + + +## Prerequisite + +:::warning + +If you are using Bring Your Own Operating System (BYOOS), then HWE (Hardware Enabled) Kernel or a Kernel that supports +[eBPF](https://ebpf.io/) modules needs to be provisioned. + +::: + +## Troubleshooting + +### Scenario - I/O Timeout Error on VMware + +If you are deploying a cluster to a VMware environment using the VXLAN tunnel protocol, you may encounter I/O timeout +errors. This is due to a known bug in the VXMNET3 adapter that results in VXLAN traffic being dropped. You can learn +more about this issue in Cilium's [GitHub issue #21801](https://github.com/cilium/cilium/issues/21801). + +You can work around the issue by using one of the two following methods: + +- Option 1: Set a different tunnel protocol in the Cilium configuration. You can set the tunnel protocol to `geneve`. + + ```yaml + charts: + cilium: + tunnelProtocol: "geneve" + ``` + +- Option 2: Modify the Operating System (OS) layer of your cluster profile to automatically disable UDP Segmentation + Offloading (USO). + + ```yaml + kubeadmconfig: + preKubeadmCommands: + # Disable hardware segmentation offloading due to VMXNET3 issue + - | + install -m 0755 /dev/null /usr/lib/networkd-dispatcher/routable.d/10-disable-offloading + cat < /usr/lib/networkd-dispatcher/routable.d/10-disable-offloading + #!/bin/sh + ethtool -K eth0 tx-udp_tnl-segmentation off + ethtool -K eth0 tx-udp_tnl-csum-segmentation off + ethtool --offload eth0 rx off tx off + EOF + systemctl restart systemd-networkd + ``` + + + + + +## Terraform + +You can reference the Cilium pack in Terraform with the following data resource. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack" "cilium" { + name = "cni-cilium-oss" + version = "1.15.3" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/cni-flannel.md b/docs/docs-content/integrations/cni-flannel.md new file mode 100644 index 0000000000..6a1424663c --- /dev/null +++ b/docs/docs-content/integrations/cni-flannel.md @@ -0,0 +1,244 @@ +--- +sidebar_label: "Flannel" +title: "Flannel" +description: "Flannel CNI pack in Palette." +hide_table_of_contents: true +type: "integration" +category: ["network", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/cni-flannel/blobs/sha256:24e56da9fc207788ba520cd00e31af042cfc9b00a3c21a5ad40a4dd592500589?type=image.webp" +tags: ["packs", "flannel", "cni"] +--- + +## Versions Supported + + + + +### Change the Backend + +If you need to change the backend type or update the backend port due to firewall or other restrictions, you can do so +by updating the pack YAML. The parameters `charts.flannel.backend` and `charts.flannel.backendPort` can be used to +change the default behavior. Refer to the official +[backend documentation](https://github.com/flannel-io/flannel/blob/v0.23.0/Documentation/backends.md) to learn more +about supported backends. + +```yaml +charts: + flannel: + backend: "vxlan" + backendPort: 8472 +``` + +### Change MTU + +By default, Flannel will use the Maximum Transmission Unit (MTU) of the host interface. If you need to change the MTU, +you can do so by updating the pack YAML. The parameter `charts.flannel.mtu` can be used to change the MTU value. + +```yaml +charts: + flannel: + mtu: 1500 +``` + +### VXLAN Configuration + +Additional parameters can be used to configure the VXLAN backend. The VXLAN configuration is commented out by default in +the pack YAML. Uncomment the parameters you want to use and update the values as needed. Refer to the +[VXLAN backend documentation](https://github.com/flannel-io/flannel/blob/v0.23.0/Documentation/backends.md) for +additional guidance. + +```yaml hideClipboard +charts: + flannel: + VXLAN Configs: + #VXLAN Identifier to be used. On Linux default is 1. + vni: 1 + #Enable VXLAN Group Based Policy (Default false) + GBP: false + #Enable direct routes (default is false) + directRouting: false + #MAC prefix to be used on Windows. (Defaults is 0E-2A) + macPrefix: "0E-2A" + ? Wireguard Configs + + #UDP listen port used with IPv6 + backendPortv6: 51821 + #Pre shared key to use + psk: 0 + #IP version to use on Wireguard + tunnelMode: "separate" + #Persistent keep interval to use + keepaliveInterval: 0 +``` + + + + +### Change the Backend + +If you need to change the backend type or update the backend port due to firewall or other restrictions, you can do so +by updating the pack YAML. The parameters `charts.flannel.backend` and `charts.flannel.backendPort` can be used to +change the default behavior. Refer to the official +[backend documentation](https://github.com/flannel-io/flannel/blob/v0.22.3/Documentation/backends.md) to learn more +about supported backends. + +```yaml +charts: + flannel: + backend: "vxlan" + backendPort: 8472 +``` + +### Change MTU + +By default, Flannel will use the Maximum Transmission Unit (MTU) of the host interface. If you need to change the MTU, +you can do so by updating the pack YAML. The parameter `charts.flannel.mtu` can be used to change the MTU value. + +```yaml +charts: + flannel: + mtu: 1500 +``` + +### VXLAN Configuration + +Additional parameters can be used to configure the VXLAN backend. The VXLAN configuration is commented out by default in +the pack YAML. Uncomment the parameters you want to use and update the values as needed. Refer to the +[VXLAN backend documentation](https://github.com/flannel-io/flannel/blob/v0.22.3/Documentation/backends.md) for +additional guidance. + +```yaml hideClipboard +charts: + flannel: + VXLAN Configs: + #VXLAN Identifier to be used. On Linux default is 1. + vni: 1 + #Enable VXLAN Group Based Policy (Default false) + GBP: false + #Enable direct routes (default is false) + directRouting: false + #MAC prefix to be used on Windows. (Defaults is 0E-2A) + macPrefix: "0E-2A" + ? Wireguard Configs + + #UDP listen port used with IPv6 + backendPortv6: 51821 + #Pre shared key to use + psk: 0 + #IP version to use on Wireguard + tunnelMode: "separate" + #Persistent keep interval to use + keepaliveInterval: 0 +``` + + + + +### Change the Backend + +If you need to change the backend type or update the backend port due to firewall or other restrictions, you can do so +by updating the pack YAML. The parameters `charts.flannel.backend` and `charts.flannel.backendPort` can be used to +change the default behavior. Refer to the official +[backend documentation](https://github.com/flannel-io/flannel/blob/v0.21.5/Documentation/backends.md) to learn more +about supported backends. + +```yaml +manifests: + flannel: + backend: "vxlan" + backendPort: 8472 +``` + +### Change MTU + +By default, Flannel will use the Maximum Transmission Unit (MTU) of the host interface. If you need to change the MTU, +you can do so by updating the pack YAML. The parameter `charts.flannel.mtu` can be used to change the MTU value. + +```yaml +manifests: + flannel: + mtu: 1500 +``` + + + + +### Prerequisites + +- Kubernetes version 1.22 or later. + +## Parameters + +The following table lists commonly used parameters for Flannel version 0.20.x. Refer to the pack YAML file for the +complete list of parameters. + +| Parameter | Description | Default | +| ---------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | +| `manifests.flannel.flannelNetwork` | The IPv4 CIDR range to assign to the pod network. This should match the Kubernetes `PodCIDR`. | `192.168.0.0/16` | +| `manifests.flannel.cniPluginsImage` | The image used for installing the core-cni-plugins through the _initContainer_. | `gcr.io/spectro-images-public/release/cni-plugins/cni-plugins:v1.2.0` | +| `manifests.flannel.image_cni.repository` | The Flannel CNI image repository. | `docker.io/flannel/flannel-cni-plugin` | + +## Usage + +### Change the Backend + +If you need to change the backend type or update the backend port due to firewall or other restrictions, you can do so +by updating the pack YAML. The parameters `charts.flannel.backend` and `charts.flannel.backendPort` can be used to +change the default behavior. Refer to the official +[backend documentation](https://github.com/flannel-io/flannel/blob/v0.21.5/Documentation/backends.md) to learn more +about supported backends. + +```yaml +manifests: + flannel: + backend: "vxlan" + backendPort: 8472 +``` + +### Change MTU + +By default, Flannel will use the Maximum Transmission Unit (MTU) of the host interface. If you need to change the MTU, +you can do so by updating the pack YAML. The parameter `charts.flannel.mtu` can be used to change the MTU value. + +```yaml +manifests: + flannel: + mtu: 1500 +``` + + + + +:::warning + +All versions less than v0.20.x are considered deprecated. Upgrade to a newer version to take advantage of new features. + +::: + + + + +## Terraform + +Use the following Terraform snippet to reference the Flannel CNI pack in your Terraform template. Replace the version +number with the version you want to use. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "flannel" { + name = "cni-flannel" + version = "0.23.0" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` + +## Reference + +- [Flannel Documentation](https://github.com/flannel-io/flannel/tree/master?tab=readme-ov-file#how-it-works) + +- [Configuration Options](https://github.com/flannel-io/flannel/blob/master/Documentation/configuration.md) diff --git a/docs/docs-content/integrations/csi-aws-ebs.md b/docs/docs-content/integrations/csi-aws-ebs.md new file mode 100644 index 0000000000..6d5c9fa2de --- /dev/null +++ b/docs/docs-content/integrations/csi-aws-ebs.md @@ -0,0 +1,118 @@ +--- +sidebar_label: "AWS-EBS" +title: "AWS EBS" +description: "AWS EBS CSI pack for AWS Clusters" +type: "integration" +category: ["storage", "amd64", "fips"] +sidebar_class_name: "hide-from-sidebar" +tags: ["packs", "aws-ebs", "storage"] +--- + +## Versions Supported + + + + + +### KMS Encryption Policy + +If you want to use KMS encryption, you must attach the following IAM policy to the Palette IAM role that is used to +create the cluster. + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "VisualEditor0", + "Effect": "Allow", + "Action": ["kms:GenerateDataKeyWithoutPlaintext", "kms:CreateGrant"], + "Resource": "*" + } + ] +} +``` + + + + + +If you want to use KMS encryption, you must attach the following IAM policy to the Palette IAM role that is used to +create the cluster. + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "VisualEditor0", + "Effect": "Allow", + "Action": ["kms:GenerateDataKeyWithoutPlaintext", "kms:CreateGrant"], + "Resource": "*" + } + ] +} +``` + + + + + +If you want to use KMS encryption, you must attach the following IAM policy to the Palette IAM role that is used to +create the cluster. + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "VisualEditor0", + "Effect": "Allow", + "Action": ["kms:GenerateDataKeyWithoutPlaintext", "kms:CreateGrant"], + "Resource": "*" + } + ] +} +``` + + + + + +If you want to use KMS encryption, you must attach the following IAM policy to the Palette IAM role that is used to +create the cluster. + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "VisualEditor0", + "Effect": "Allow", + "Action": ["kms:GenerateDataKeyWithoutPlaintext", "kms:CreateGrant"], + "Resource": "*" + } + ] +} +``` + + + + +## Terraform + +Use the following Terraform snippet to reference the AWS EBS CSI pack in your Terraform template. Update the version +number as needed. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "aws-ebs-csi" { + name = "csi-aws-ebs" + version = "1.30.0" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/csi-aws-efs.md b/docs/docs-content/integrations/csi-aws-efs.md new file mode 100644 index 0000000000..614f246183 --- /dev/null +++ b/docs/docs-content/integrations/csi-aws-efs.md @@ -0,0 +1,681 @@ +--- +sidebar_label: "AWS EFS" +title: "AWS EFS" +description: "AWS EFS storage add on into Spectro Cloud" +hide_table_of_contents: true +type: "integration" +category: ["storage", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.dev.spectrocloud.com/v1/csi-aws-efs/blobs/sha256:5d1eb98bb847489f341beda1407c14442854ab8e5910d0cc8da1a63636057927?type=image.webp" +tags: ["packs", "aws-efs", "storage"] +--- + +## Versions Supported + + + + +### Policy Information + +You must create a policy that allows you to use EFS from your IAM account. You can use the following JSON to create the +policy. + +```yaml +{ + "Version": "2012-10-17", + "Statement": + [ + { + "Effect": "Allow", + "Action": ["elasticfilesystem:DescribeAccessPoints", "elasticfilesystem:DescribeFileSystems"], + "Resource": "*", + }, + { + "Effect": "Allow", + "Action": ["elasticfilesystem:CreateAccessPoint"], + "Resource": "*", + "Condition": { "StringLike": { "aws:RequestTag/efs.csi.aws.com/cluster": "true" } }, + }, + { + "Effect": "Allow", + "Action": "elasticfilesystem:DeleteAccessPoint", + "Resource": "*", + "Condition": { "StringEquals": { "aws:ResourceTag/efs.csi.aws.com/cluster": "true" } }, + }, + ], +} +``` + +### Storage Class + +Palette creates storage classes named _spectro-storage-class_. You can view a list of storage classes using this kubectl +command: + +```bash +kubectl get storageclass +``` + +### PersistentVolumeClaim + +A PersistentVolumeClaim (PVC) is a request made by a pod for a certain amount of storage from the cluster. It acts as a +link between the pod and the storage resource, allowing the pod to use the storage. You can learn details about a PVC, +as shown in the following output, when you use the `kubectl describe pvc` command. + +```bash +kubectl describe pvc my-efs-volume +``` + +```shell hideClipboard +Name: efs +Namespace: default +StorageClass: aws-efs +Status: Pending + +Volume: + +Labels: + +Annotations: kubectl.kubernetes.io/last-applied-configuration: +{"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{"volume.beta.kubernetes.io/ +storage-class":"aws-efs"},"name":"..."} + +volume.beta.kubernetes.io/storage-class: aws-efs + +Finalizers: [kubernetes.io/pvc-protection] + +Capacity: + +Access Modes: + +Events: +| Type | Reason | Age | From | Message | +| ------- | ------------------ | ------------------ | --------------------------- | ------------------------ | +| Warning | ProvisioningFailed | 43s (x12 over 11m) | persistentvolume-controller | no volume plugin matched | +Mounted By: +``` + + + + +### Policy Information + +You must create a policy that allows you to use EFS from your IAM account. You can use the following JSON to create the +policy. + +```yaml +{ + "Version": "2012-10-17", + "Statement": + [ + { + "Effect": "Allow", + "Action": ["elasticfilesystem:DescribeAccessPoints", "elasticfilesystem:DescribeFileSystems"], + "Resource": "*", + }, + { + "Effect": "Allow", + "Action": ["elasticfilesystem:CreateAccessPoint"], + "Resource": "*", + "Condition": { "StringLike": { "aws:RequestTag/efs.csi.aws.com/cluster": "true" } }, + }, + { + "Effect": "Allow", + "Action": "elasticfilesystem:DeleteAccessPoint", + "Resource": "*", + "Condition": { "StringEquals": { "aws:ResourceTag/efs.csi.aws.com/cluster": "true" } }, + }, + ], +} +``` + +### Storage Class + +Palette creates storage classes named _spectro-storage-class_. You can view a list of storage classes using this kubectl +command: + +```bash +kubectl get storageclass +``` + +### PersistentVolumeClaim + +A PersistentVolumeClaim (PVC) is a request made by a pod for a certain amount of storage from the cluster. It acts as a +link between the pod and the storage resource, allowing the pod to use the storage. You can learn details about a PVC, +as shown in the following output, when you use the `kubectl describe pvc` command. + +```bash +kubectl describe pvc my-efs-volume +``` + +```shell hideClipboard +Name: efs +Namespace: default +StorageClass: aws-efs +Status: Pending + +Volume: + +Labels: + +Annotations: kubectl.kubernetes.io/last-applied-configuration: +{"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{"volume.beta.kubernetes.io/ +storage-class":"aws-efs"},"name":"..."} + +volume.beta.kubernetes.io/storage-class: aws-efs + +Finalizers: [kubernetes.io/pvc-protection] + +Capacity: + +Access Modes: + +Events: +| Type | Reason | Age | From | Message | +| ------- | ------------------ | ------------------ | --------------------------- | ------------------------ | +| Warning | ProvisioningFailed | 43s (x12 over 11m) | persistentvolume-controller | no volume plugin matched | +Mounted By: +``` + + + + +### Policy Information + +You must create a policy that allows you to use EFS from your IAM account. You can use the following JSON to create the +policy. + +```yaml +{ + "Version": "2012-10-17", + "Statement": + [ + { + "Effect": "Allow", + "Action": ["elasticfilesystem:DescribeAccessPoints", "elasticfilesystem:DescribeFileSystems"], + "Resource": "*", + }, + { + "Effect": "Allow", + "Action": ["elasticfilesystem:CreateAccessPoint"], + "Resource": "*", + "Condition": { "StringLike": { "aws:RequestTag/efs.csi.aws.com/cluster": "true" } }, + }, + { + "Effect": "Allow", + "Action": "elasticfilesystem:DeleteAccessPoint", + "Resource": "*", + "Condition": { "StringEquals": { "aws:ResourceTag/efs.csi.aws.com/cluster": "true" } }, + }, + ], +} +``` + +### Storage Class + +Palette creates storage classes named _spectro-storage-class_. You can view a list of storage classes using this kubectl +command: + +```bash +kubectl get storageclass +``` + +### PersistentVolumeClaim + +A PersistentVolumeClaim (PVC) is a request made by a pod for a certain amount of storage from the cluster. It acts as a +link between the pod and the storage resource, allowing the pod to use the storage. You can learn details about a PVC, +as shown in the following output, when you use the `kubectl describe pvc` command. + +```bash +kubectl describe pvc my-efs-volume +``` + +```shell hideClipboard +Name: efs +Namespace: default +StorageClass: aws-efs +Status: Pending + +Volume: + +Labels: + +Annotations: kubectl.kubernetes.io/last-applied-configuration: +{"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{"volume.beta.kubernetes.io/ +storage-class":"aws-efs"},"name":"..."} + +volume.beta.kubernetes.io/storage-class: aws-efs + +Finalizers: [kubernetes.io/pvc-protection] + +Capacity: + +Access Modes: + +Events: +| Type | Reason | Age | From | Message | +| ------- | ------------------ | ------------------ | --------------------------- | ------------------------ | +| Warning | ProvisioningFailed | 43s (x12 over 11m) | persistentvolume-controller | no volume plugin matched | +Mounted By: +``` + + + + +### Policy Information + +You must create a policy that allows you to use EFS from your IAM account. You can use the following JSON to create the +policy. + +```yaml +{ + "Version": "2012-10-17", + "Statement": + [ + { + "Effect": "Allow", + "Action": ["elasticfilesystem:DescribeAccessPoints", "elasticfilesystem:DescribeFileSystems"], + "Resource": "*", + }, + { + "Effect": "Allow", + "Action": ["elasticfilesystem:CreateAccessPoint"], + "Resource": "*", + "Condition": { "StringLike": { "aws:RequestTag/efs.csi.aws.com/cluster": "true" } }, + }, + { + "Effect": "Allow", + "Action": "elasticfilesystem:DeleteAccessPoint", + "Resource": "*", + "Condition": { "StringEquals": { "aws:ResourceTag/efs.csi.aws.com/cluster": "true" } }, + }, + ], +} +``` + +### Storage Class + +Palette creates storage classes named _spectro-storage-class_. You can view a list of storage classes using this kubectl +command: + +```bash +kubectl get storageclass +``` + +### PersistentVolumeClaim + +A PersistentVolumeClaim (PVC) is a request made by a pod for a certain amount of storage from the cluster. It acts as a +link between the pod and the storage resource, allowing the pod to use the storage. You can learn details about a PVC, +as shown in the following output, when you use the `kubectl describe pvc` command. + +```bash +kubectl describe pvc my-efs-volume +``` + +```shell hideClipboard +Name: efs +Namespace: default +StorageClass: aws-efs +Status: Pending + +Volume: + +Labels: + +Annotations: kubectl.kubernetes.io/last-applied-configuration: +{"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{"volume.beta.kubernetes.io/ +storage-class":"aws-efs"},"name":"..."} + +volume.beta.kubernetes.io/storage-class: aws-efs + +Finalizers: [kubernetes.io/pvc-protection] + +Capacity: + +Access Modes: + +Events: +| Type | Reason | Age | From | Message | +| ------- | ------------------ | ------------------ | --------------------------- | ------------------------ | +| Warning | ProvisioningFailed | 43s (x12 over 11m) | persistentvolume-controller | no volume plugin matched | +Mounted By: +``` + + + + + +### Policy Information + +You must create a policy that allows you to use EFS from your IAM account. You can use the following JSON to create the +policy. + +```yaml +{ + "Version": "2012-10-17", + "Statement": + [ + { + "Effect": "Allow", + "Action": ["elasticfilesystem:DescribeAccessPoints", "elasticfilesystem:DescribeFileSystems"], + "Resource": "*", + }, + { + "Effect": "Allow", + "Action": ["elasticfilesystem:CreateAccessPoint"], + "Resource": "*", + "Condition": { "StringLike": { "aws:RequestTag/efs.csi.aws.com/cluster": "true" } }, + }, + { + "Effect": "Allow", + "Action": "elasticfilesystem:DeleteAccessPoint", + "Resource": "*", + "Condition": { "StringEquals": { "aws:ResourceTag/efs.csi.aws.com/cluster": "true" } }, + }, + ], +} +``` + +### Storage Class + +Palette creates storage classes named _spectro-storage-class_. You can view a list of storage classes using this kubectl +command: + +```bash +kubectl get storageclass +``` + +### PersistentVolumeClaim + +A PersistentVolumeClaim (PVC) is a request made by a pod for a certain amount of storage from the cluster. It acts as a +link between the pod and the storage resource, allowing the pod to use the storage. You can learn details about a PVC, +as shown in the following output, when you use the `kubectl describe pvc` command. + +```bash +kubectl describe pvc my-efs-volume +``` + +```shell hideClipboard +Name: efs +Namespace: default +StorageClass: aws-efs +Status: Pending + +Volume: + +Labels: + +Annotations: kubectl.kubernetes.io/last-applied-configuration: +{"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{"volume.beta.kubernetes.io/ +storage-class":"aws-efs"},"name":"..."} + +volume.beta.kubernetes.io/storage-class: aws-efs + +Finalizers: [kubernetes.io/pvc-protection] + +Capacity: + +Access Modes: + +Events: +| Type | Reason | Age | From | Message | +| ------- | ------------------ | ------------------ | --------------------------- | ------------------------ | +| Warning | ProvisioningFailed | 43s (x12 over 11m) | persistentvolume-controller | no volume plugin matched | +Mounted By: +``` + + + + + +## Prerequisites + +- Create the Identity and Access Management (IAM) role that allows the driver to manage AWS EFS access points. The + [Introducing Amazon EFS CSI dynamic provisioning](https://aws.amazon.com/blogs/containers/introducing-efs-csi-dynamic-provisioning/) + blog provides information on `EFSCSIControllerIAMPolicy`. + +- An AWS EFS file system is available. Check out the guide + [Create your Amazon EFS file system](https://docs.aws.amazon.com/efs/latest/ug/gs-step-two-create-efs-resources.html) + if you need additional guidance. + +- Create your EKS cluster using static provisioning. Static provisioning requires you to create a virtual private cloud + (VPC), subnets, route tables, internet gateway and NAT gateways in the AWS console. + + You can use the same VPC or a different one for EFS: + + - Using the same VPC for EFS ensures EFS is reachable from your EKS cluster. We recommend using the same VPC because + it doesn't require peering. + + - If you use a different VPC for EFS, you need to peer the VPC with the VPC on which the EKS cluster is + running.

+ +- The security group associated with your EFS file system must have an inbound rule that allows Network File System + (NFS) traffic (port 2049) from the CIDR for your cluster's VPC. + +## Parameters + +The table lists commonly used parameters you can configure when adding this pack. + +| Parameter | Description | Default | +| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- | +| storageClassName | AWS Volume type to be used. | spectro-storage-class | +| isDefaultClass | Toggle for Default class. | true | +| fileSystemId | The file system under which access points are created. Create the file system prior to this setup. This is a required field and needs to be set to a pre-created AWS EFS volume. Other values can use the default setting. | Set this to an AWS EFS volume you have already created. | +| provisioningMode | Type of volume provisioned by AWS EFS. For now, this is the only access point supported. | efs-ap | +| directoryPerms | Directory permissions for Access Point root directory creation. | 700 | +| gidRangeStart | Starting range of the Portable Operating System Interface (POSIX) group Id to be applied for access point root directory creation (optional). | 1000 | +| gidRangeEnd | End range of the POSIX group Id (optional). | 2000 | +| basePath | Path under which access points for dynamic provisioning is created. If this parameter is not specified, access points are created under the root directory of the file system. | `/base_efs` | + +## Usage + +There are two ways to add AWS EFS to Palette: + +- Add EFS as a CSI layer in AWS/EKS. +- Add EFS as an Add-on layer, which will create a new storage class using the AWS EFS file system. + +### Policy Information + +You must create a policy that allows you to use EFS from your IAM account. You can use the following JSON to create the +policy.

+ +```yaml +{ + "Version": "2012-10-17", + "Statement": + [ + { + "Effect": "Allow", + "Action": ["elasticfilesystem:DescribeAccessPoints", "elasticfilesystem:DescribeFileSystems"], + "Resource": "*", + }, + { + "Effect": "Allow", + "Action": ["elasticfilesystem:CreateAccessPoint"], + "Resource": "*", + "Condition": { "StringLike": { "aws:RequestTag/efs.csi.aws.com/cluster": "true" } }, + }, + { + "Effect": "Allow", + "Action": "elasticfilesystem:DeleteAccessPoint", + "Resource": "*", + "Condition": { "StringEquals": { "aws:ResourceTag/efs.csi.aws.com/cluster": "true" } }, + }, + ], +} +``` + +### Storage Class + +Palette creates storage classes named _spectro-storage-class_. You can view a list of storage classes using this kubectl +command: + +
+ +```bash +kubectl get storageclass +``` + +### PersistentVolumeClaim + +A PersistentVolumeClaim (PVC) is a request made by a pod for a certain amount of storage from the cluster. It acts as a +link between the pod and the storage resource, allowing the pod to use the storage. You can learn details about a PVC by +using the `kubectl describe pvc` command, as the following example output shows.
+ +```bash +kubectl describe pvc my-efs-volume +``` + +```yaml + +Name: efs + +Namespace: default + +StorageClass: aws-efs + +Status: Pending + +Volume: + +Labels: + +Annotations: kubectl.kubernetes.io/last-applied-configuration: +{"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{"volume.beta.kubernetes.io/ +storage-class":"aws-efs"},"name":"..."} + +volume.beta.kubernetes.io/storage-class: aws-efs + +Finalizers: [kubernetes.io/pvc-protection] + +Capacity: + +Access Modes: + +Events: +| Type | Reason | Age | From | Message | +| ------- | ------------------ | ------------------ | --------------------------- | ------------------------ | +| Warning | ProvisioningFailed | 43s (x12 over 11m) | persistentvolume-controller | no volume plugin matched | +Mounted By: + +``` + +
+
+ +## Troubleshooting + +Some basic troubleshooting steps you can take if you receive errors in your pods when mounting an Amazon EFS volume in +your Amazon EKS cluster are to verify you have the following: + +If you encounter some issues when mounting an Amazon EFS volume in your Amazon EKS cluster, start by reviewing the items +below: + +- Ensure you have an Amazon EFS file system created with a mount target in each of the worker node subnets. +- A valid EFS storage class definition is created and using the `efs.csi.aws.com` provisioner. +- A valid PersistentVolumeClaim (PVC) definition and PersistentVolume definition. This is not necessary if you are using + dynamic provisioning. +- The Amazon EFS CSI driver is installed in the cluster. + +### Common Issues + +The following list provides more specific details to help you troubleshoot issues when mounting an Amazon EFS volume. + +:::tip + +The CSI driver pod logs are also available to help you determine the cause of the mount failures. If the volume is +failing to mount, use `efs-plugin` logs to help you debug. Use the following command to view the logs. + +```shell +kubectl logs --namespace kube-system --label app=efs-csi-node --containe efs-plugin +``` + +::: + +- **Mount Targets:** Verify the mount targets are configured correctly. Be sure to create the EFS mount targets in each + Availability Zone where the EKS worker nodes are running. + +- **Allow NFS Traffic:** Verify the security group associated with your EFS file system and worker nodes allows NFS + traffic. The security group that's associated with your EFS file system must have an inbound rule that allows NFS + traffic (port 2049) from the CIDR for your cluster's VPC. The security group that's associated with your worker nodes + where the pods are failing to mount the EFS volume must have an outbound rule that allows NFS traffic (port 2049) to + the EFS file system. + +- **Subdirectories:** If you are mounting the pod to a subdirectory, verify the subdirectory is created in your EFS file + system. When you add sub paths in persistent volumes, the EFS CSI driver does not create the subdirectory path in the + EFS file system as part of the mount operation. Subdirectories must be present before you start the mount operation. + +- **DNS server:** Confirm the cluster's Virtual Private Cloud (VPC) uses the Amazon DNS server. + +- **Permissions:** Verify you have `iam` mount options in the Persistent Volume (PV) definition when using a restrictive + file system policy. In some cases, the EFS file system policy is configured to restrict mount permissions to specific + IAM roles. In this case, the EFS mount helper in the EFS CSI driver requires the `-o iam` mount option during the + mount operation. Include the **spec.mountOptions** property in the Persistent Volume (PV) definition to specify the + mount options. + + ```bash + spec: + mountOptions: + - iam + ``` + +- **IAM role:** Verify the Amazon EFS CSI driver controller service account associates with the correct IAM role and the + IAM role has the required permissions. Use the following command to view the service account annotation. + + ```bash + kubectl describe sa efs-csi-controller-sa --namespace kube-system + ``` + + The output should look similar to the following: + + ```bash + eks.amazonaws.com/role-arn"="arn:aws:iam::111122223333:role/AmazonEKS_EFS_CSI_Driver_Policy + ``` + +- **Driver Pods:** Verify the EFS CSI driver pods are active. Issue the following command to display a list of + controller pods and node pods active in your cluster. + + ```bash + kubectl get all --label app.kubernetes.io/name=aws-efs-csi-driver --namespace kube-system + ``` + +- **File System Not Mounting:** Verify the EFS mount operation from the EC2 worker node where the pod is failing to + mount the file system. Log in to the Amazon EKS worker node where the pod is scheduled. Then, use the EFS mount helper + to try to manually mount the EFS file system to the worker node. Use the following command to mount the EFS file + system. + + ```bash + sudo mount -types -efs -options tls file-system-dns-name efs-mount-point/ + ``` + +Check out the +[Amazon EFS](https://aws.amazon.com/premiumsupport/knowledge-center/eks-troubleshoot-efs-volume-mount-issues/) +troubleshooting guide for more information. + +## Terraform + +You can reference the AWS EFS pack in Terraform with a data resource. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "csi-aws-efs" { + name = "aws-efs" + version = "1.7.0" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` + +## References + +- [Amazon EFS CSI Driver](https://docs.aws.amazon.com/eks/latest/userguide/efs-csi.html) + +- [Amazon Elastic File System](https://aws.amazon.com/efs/) + +- [Amazon EFS Tutorial and Examples](https://github.com/aws-samples/amazon-efs-tutorial) + +- [IAM Policy Example](https://raw.githubusercontent.com/kubernetes-sigs/aws-ebs-csi-driver/master/docs/example-iam-policy.json) + +- [Storage Classes](https://kubernetes.io/docs/concepts/storage/storage-classes/)
diff --git a/docs/docs-content/integrations/csi-azure.md b/docs/docs-content/integrations/csi-azure.md new file mode 100644 index 0000000000..1da269e2da --- /dev/null +++ b/docs/docs-content/integrations/csi-azure.md @@ -0,0 +1,41 @@ +--- +sidebar_label: "Azure Disk" +title: "Azure Disk" +description: "Azure Disk storage add on into Spectro Cloud" +hide_table_of_contents: true +type: "integration" +category: ["storage", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.dev.spectrocloud.com/v1/csi-azure/blobs/sha256:0787b7943741181181823079533cd363884a28aa0651715ea43408bdc77a5c51?type=image.webp" +tags: ["packs", "azure-disk", "storage"] +--- + +## Versions Supported + + + + + + + + + + + +## Terraform + +Use the following Terraform snippet to reference the Azure Disk CSI pack in your Terraform template. Update the version +number as needed. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "azure-disk-csi" { + name = "csi-azure" + version = "1.30.0" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/csi-gcp-driver.md b/docs/docs-content/integrations/csi-gcp-driver.md new file mode 100644 index 0000000000..1108be23ea --- /dev/null +++ b/docs/docs-content/integrations/csi-gcp-driver.md @@ -0,0 +1,42 @@ +--- +sidebar_label: "GCE-Persistent-Disk" +title: "GCE Persistent Disk" +description: "GCE Persistent Disk storage pack in Spectro Cloud" +hide_table_of_contents: true +type: "integration" +category: ["storage", "amd64"] +sidebar_class_name: "hide-from-sidebar" +tags: ["packs", "storage", "gce-persistent-disk"] +--- + +## Versions Supported + + + + + + + + + + + + + +## Terraform + +Use the following Terraform snippet to reference the GCE Persistent Disk pack in your Terraform code. + +```hcl + +data "spectrocloud_registry" "palette_registry_oci" { + name = "Palette Registry" +} + +data "spectrocloud_pack_simple" "cs-gcp-driver" { + name = "csi-gcp-driver" + version = "1.13.2" + type = "helm" + registry_uid = data.spectrocloud_registry.palette_registry_oci.id +} +``` diff --git a/docs/docs-content/integrations/csi-longhorn-addon.md b/docs/docs-content/integrations/csi-longhorn-addon.md new file mode 100644 index 0000000000..cf82b57ea9 --- /dev/null +++ b/docs/docs-content/integrations/csi-longhorn-addon.md @@ -0,0 +1,30 @@ +--- +sidebar_label: "Longhorn" +title: "Longhorn" +description: "Longhorn pack in Palette" +hide_table_of_contents: true +type: "integration" +category: ["storage", "amd64", "fips"] +sidebar_class_name: "hide-from-sidebar" +tags: ["packs", "longhorn", "storage"] +--- + + + +## Terraform + +Use the following Terraform snippet to reference the Longhorn pack in your Terraform template. Update the version number +as needed. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "csi-longhorn-addon" { + name = "csi-longhorn" + version = "1.6.0" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/csi-longhorn.md b/docs/docs-content/integrations/csi-longhorn.md new file mode 100644 index 0000000000..1432360443 --- /dev/null +++ b/docs/docs-content/integrations/csi-longhorn.md @@ -0,0 +1,30 @@ +--- +sidebar_label: "Longhorn" +title: "Longhorn" +description: "Longhorn pack in Palette" +hide_table_of_contents: true +type: "integration" +category: ["storage", "amd64", "fips"] +sidebar_class_name: "hide-from-sidebar" +tags: ["packs", "longhorn", "storage"] +--- + + + +## Terraform + +Use the following Terraform snippet to reference the Longhorn pack in your Terraform template. Update the version number +as needed. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "csi-longhorn" { + name = "csi-longhorn" + version = "1.5.1" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/csi-nfs-subdir-external.md b/docs/docs-content/integrations/csi-nfs-subdir-external.md new file mode 100644 index 0000000000..3f0039f395 --- /dev/null +++ b/docs/docs-content/integrations/csi-nfs-subdir-external.md @@ -0,0 +1,40 @@ +--- +sidebar_label: "nfs-subdir-External" +title: "Kubernetes NFS Subdir External Provisionerl" +description: "NFS-Subdir-External Provisioner pack in Spectro Cloud" +type: "integration" +category: ["storage", "amd64"] +hide_table_of_contents: true +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.dev.spectrocloud.com/v1/csi-nfs-subdir-external/blobs/sha256:4b40eb85382d04dc4dcfc174b5e288b963b6201f6915e14b07bd8a5c4323b51b?type=image.webp" +tags: ["packs", "nfs-subdir-external", "storage"] +--- + +## Versions Supported + + + + + + + + + +## Terraform + +Use the following Terraform snippet to reference the NFS-Subdir-External Provisioner pack in your Terraform template. +Update the version number as needed. + +```hcl +data "spectrocloud_registry" "community_registry" { + name = "Palette Community Registry" +} + + +data "spectrocloud_pack_simple" "csi-nfs-subdir-external" { + name = "csi-nfs-subdir-external" + version = "4.0.13" + type = "helm" + registry_uid = data.spectrocloud_registry.community_registry.id +} +``` diff --git a/docs/docs-content/integrations/csi-portworx-generic.md b/docs/docs-content/integrations/csi-portworx-generic.md new file mode 100644 index 0000000000..e59f321001 --- /dev/null +++ b/docs/docs-content/integrations/csi-portworx-generic.md @@ -0,0 +1,29 @@ +--- +sidebar_label: "Portworx /w Operator" +title: "Portworx Operator" +description: "Portworx storage CSI for all use cases" +hide_table_of_contents: true +type: "integration" +category: ["storage", "amd64"] +sidebar_class_name: "hide-from-sidebar" +tags: ["packs", "portworx", "storage"] +--- + + + +## Terraform + +Use the following Terraform code to interact with the Portworx Operator pack in your Terraform scripts. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "portworx-operator" { + name = "csi-portworx-generic" + version = "3.0.0" + type = "operator-instance" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/csi-rook-ceph-addon.md b/docs/docs-content/integrations/csi-rook-ceph-addon.md new file mode 100644 index 0000000000..1181b6f1c6 --- /dev/null +++ b/docs/docs-content/integrations/csi-rook-ceph-addon.md @@ -0,0 +1,29 @@ +--- +sidebar_label: "rook-ceph" +title: "Rook Ceph" +description: "Rook is an open-source cloud-native storage orchestrator that provides the platform, framework, and support for Ceph +storage to natively integrate with cloud-native environments. Ceph is a distributed storage system that provides file, +block, and object storage and is deployed in large-scale production clusters." +hide_table_of_contents: true +type: "integration" +category: ["storage", "amd64"] +sidebar_class_name: "hide-from-sidebar" +tags: ["packs", "rook-ceph", "storage"] +--- + + + +## Terraform + +```hcl +data "spectrocloud_registry" "registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "csi-rook-ceph" { + name = "csi-rook-ceph-addon" + version = "1.14.0" + type = "helm" + registry_uid = data.spectrocloud_registry.registry.id +} +``` diff --git a/docs/docs-content/integrations/csi-rook-ceph.md b/docs/docs-content/integrations/csi-rook-ceph.md new file mode 100644 index 0000000000..d08f6f6cdf --- /dev/null +++ b/docs/docs-content/integrations/csi-rook-ceph.md @@ -0,0 +1,29 @@ +--- +sidebar_label: "rook-ceph" +title: "Rook Ceph" +description: "Rook is an open-source cloud-native storage orchestrator that provides the platform, framework, and support for Ceph +storage to natively integrate with cloud-native environments. Ceph is a distributed storage system that provides file, +block, and object storage and is deployed in large-scale production clusters." +hide_table_of_contents: true +type: "integration" +category: ["storage", "amd64"] +sidebar_class_name: "hide-from-sidebar" +tags: ["packs", "rook-ceph", "storage"] +--- + + + +## Terraform + +```hcl +data "spectrocloud_registry" "registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "csi-rook-ceph" { + name = "csi-rook-ceph" + version = "1.14.0" + type = "helm" + registry_uid = data.spectrocloud_registry.registry.id +} +``` diff --git a/docs/docs-content/integrations/csi-trident-addon.md b/docs/docs-content/integrations/csi-trident-addon.md new file mode 100644 index 0000000000..ddfa98a5a2 --- /dev/null +++ b/docs/docs-content/integrations/csi-trident-addon.md @@ -0,0 +1,29 @@ +--- +sidebar_label: "Astra Trident Addon" +title: "Astra Trident Addon" +description: "Learn abou the Astra Trident pack." +hide_table_of_contents: true +type: "integration" +category: ["storage", "amd64", "community"] +sidebar_class_name: "hide-from-sidebar" +tags: ["packs", "trident", "storage"] +--- + + + +## Terraform + +You can retrieve details about the Astra Trident pack by using the following Terraform code. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "astra-trident" { + name = "csi-trident-addon" + version = "23.01.0" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/csi-trident.md b/docs/docs-content/integrations/csi-trident.md new file mode 100644 index 0000000000..165643574a --- /dev/null +++ b/docs/docs-content/integrations/csi-trident.md @@ -0,0 +1,29 @@ +--- +sidebar_label: "Astra Trident" +title: "Astra Trident" +description: "Learn abou the Astra Trident pack." +hide_table_of_contents: true +type: "integration" +category: ["storage", "amd64", "community"] +sidebar_class_name: "hide-from-sidebar" +tags: ["packs", "trident", "storage"] +--- + + + +## Terraform + +You can retrieve details about the Astra Trident pack by using the following Terraform code. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "astra-trident" { + name = "csi-trident" + version = "23.01.0" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/dex.md b/docs/docs-content/integrations/dex.md index 6b96370670..536149e744 100644 --- a/docs/docs-content/integrations/dex.md +++ b/docs/docs-content/integrations/dex.md @@ -6,7 +6,6 @@ type: "integration" hide_table_of_contents: true category: ["authentication", "amd64"] sidebar_class_name: "hide-from-sidebar" -logoUrl: "https://registry.spectrocloud.com/v1/dex/blobs/sha256:78e381fe12509ed94c7c19cd6f6fc4e896ec66485364644dc1a40229fcf9d90d?type=image.webp" tags: ["packs", "dex", "security"] --- @@ -16,7 +15,7 @@ to the cluster through any identity provider that dex supports. ## Versions Supported - + diff --git a/docs/docs-content/integrations/edge-k3s.md b/docs/docs-content/integrations/edge-k3s.md new file mode 100644 index 0000000000..163d2b7382 --- /dev/null +++ b/docs/docs-content/integrations/edge-k3s.md @@ -0,0 +1,326 @@ +--- +sidebar_label: "K3s" +title: "K3s" +description: "Learn about the K3s pack in Palette Edge and how you can use it within your Kubernetes clusters." +hide_table_of_contents: true +type: "integration" +category: ["kubernetes", "amd64", "fips"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/edge-k3s/blobs/sha256:5b7f8a80330d6938056848905238efbbd085e2f0f86fd03d7be10ccdabf791c7?type=image.webp" +tags: ["packs", "kubernetes", "k3s", "edge"] +--- + +K3s is available for Edge host deployments as well as virtual clusters that you can create from cluster groups. Refer to +the +[Create an Infrastructure Profile](../profiles/cluster-profiles/create-cluster-profiles/create-infrastructure-profile.md) +guide and the [Create and Manage Cluster Groups](../clusters/cluster-groups/create-cluster-group.md) guide for more +information. + +:::info + +In order to use K3s as part of an Edge deployment, you need to go through the EdgeForge process and specify K3s as your +intended Kubernetes distribution when you build your OS image. For more information, refer to the +[EdgeForge Workflow](../clusters/edge/edgeforge-workflow/edgeforge-workflow.md) guide. + +::: + +### Support Lifecycle + +We support different Kubernetes distributions such as K3s, Microk8s, and RKE2 until their official EOL. The EOL is set +by the respective owner. Once we stop supporting the minor version, we initiate the deprecation process. Refer to the +[Kubernetes Support Lifecycle](kubernetes-support.md#palette-extended-kubernetes-support) guide to learn more. + +:::warning + +Once you upgrade your cluster to a new Kubernetes version, you will not be able to downgrade. We recommend that, before +upgrading, you review the information provided in the [Kubernetes Upgrades](kubernetes-support.md#kubernetes-upgrades) +section. + +::: + +## Versions Supported + + + + + +## Configure OIDC Identity Provider for Edge + +You can modify the configuration file to configure your Edge cluster to use an OpenID Connect (OIDC) Identity Provider +(IDP) for authentication. You can use a custom third-party IDP, such as Okta, or use Palette as your IDP. + +When you add the K3s pack to a cluster profile, Palette displays the OIDC IDP options listed below: + +- **None**: This setting does not require OIDC configuration for the cluster. It displays in the YAML file as `noauth`. + + + +- **Custom**: This is the default setting and does not require OIDC configuration. However, if desired, it allows you to +specify a third-party OIDC provider by configuring OIDC statements in the YAML file as described in + . This + setting displays in the YAML file as `none`. + + +- **Palette**: This setting makes Palette the IDP. Any user with a Palette account in the tenant and the proper + permissions to view and access the project's resources is able to use kubectl CLI to access cluster. This setting + displays in the YAML file as `palette`. When you select **Palette**, all you have to do to enable OIDC for your + cluster is create role bindings to configure authorization. You do not need to provide extra parameters such as + `oidc-issuer-url` as you need to when you configure a custom OIDC provider. + +- **Inherit from Tenant**: This setting allows you to apply RBAC to multiple clusters and requires you to configure + OpenID Connect (OIDC) in **Tenant Settings**. In Tenant Admin scope, navigate to **Tenant Settings** > **SSO**, choose + **OIDC**, and provide your third-party IDP details. This setting displays in the YAML file as `tenant`. For more + information, check out the [SSO Setup](../user-management/saml-sso/saml-sso.md) guide. + +All the options require you to map a set of users or groups to a Kubernetes RBAC role. To learn how to map a Kubernetes +role to users and groups, refer to +[Create Role Bindings](../clusters/cluster-management/cluster-rbac.md#create-role-bindings). + +:::warning + +If your IDP uses Security Assertion Markup Language (SAML) authentication, then the **Inherit from Tenant** option will +not work, and you will need to use the **Custom** option instead. This is because Kubernetes supports only OIDC +authentication and not SAML authentication. + +::: + +To configure a custom OIDC IDP, choose **Custom** when adding the K3s pack to your profile, and then follow these steps: + +1. Add the following OIDC parameters to the `kube-apiserver-arg` section of your configuration file for your Kubernetes + layer when creating a cluster profile. + + ```yaml + cluster: + config: + kube-apiserver-arg: + - oidc-issuer-url="provider URL" + - oidc-client-id="client-id" + - oidc-groups-claim="groups" + - oidc-username-claim="email" + ``` + +2. Add the following `clientConfig` section that contains OIDC parameters to your Kubernetes YAML file and replace the + placeholders with your third-party OIDC IDP details. The `clientConfig` section must be placed at the root level of + the YAML file. + ```yaml + clientConfig: + oidc-issuer-url: "OIDC-ISSUER-URL" + oidc-client-id: "OIDC-CLIENT-ID" + oidc-client-secret: "OIDC-CLIENT-SECRET" + oidc-extra-scope: profile,email,openid + ``` + +After you have configured the IDP for authentication, you can proceed to create role bindings to configure authorization +in your cluster. Refer to [Create Role Bindings](../clusters/cluster-management/cluster-rbac.md#create-role-bindings) +for more guidance. + +## Configure OIDC Identity Provider for Palette Virtual Clusters + +If you are using K3s in a virtual cluster inside of a cluster group, you can also configure OIDC for your cluster. Refer +to [Configure OIDC for a Virtual Cluster](../clusters/palette-virtual-clusters/configure-oidc-virtual-cluster.md) for +more guidance. + +## Add a Certificate for Reverse Proxy + + +You can use a reverse proxy with a K3s Kubernetes cluster. The reverse proxy allows you to connect to the cluster API of +a Palette-managed Kubernetes cluster in private networks or clusters configured with private API endpoints. For more +information, refer to the pack guide. + + + + + + +## Configure OIDC Identity Provider for Edge + +You can modify the configuration file to configure your Edge cluster to use an OpenID Connect (OIDC) Identity Provider +(IDP) for authentication. You can use a custom third-party IDP, such as Okta, or use Palette as your IDP. + +When you add the K3s pack to a cluster profile, Palette displays the OIDC IDP options listed below: + +- **None**: This setting does not require OIDC configuration for the cluster. It displays in the YAML file as `noauth`. + + + +- **Custom**: This is the default setting and does not require OIDC configuration. However, if desired, it allows you to +specify a third-party OIDC provider by configuring OIDC statements in the YAML file as described in + . This + setting displays in the YAML file as `none`. + + +- **Palette**: This setting makes Palette the IDP. Any user with a Palette account in the tenant and the proper + permissions to view and access the project's resources is able to use kubectl CLI to access cluster. This setting + displays in the YAML file as `palette`. When you select **Palette**, all you have to do to enable OIDC for your + cluster is create role bindings to configure authorization. You do not need to provide extra parameters such as + `oidc-issuer-url` as you need to when you configure a custom OIDC provider. + +- **Inherit from Tenant**: This setting allows you to apply RBAC to multiple clusters and requires you to configure + OpenID Connect (OIDC) in **Tenant Settings**. In Tenant Admin scope, navigate to **Tenant Settings** > **SSO**, choose + **OIDC**, and provide your third-party IDP details. This setting displays in the YAML file as `tenant`. For more + information, check out the [SSO Setup](../user-management/saml-sso/saml-sso.md) guide. + +All the options require you to map a set of users or groups to a Kubernetes RBAC role. To learn how to map a Kubernetes +role to users and groups, refer to +[Create Role Bindings](../clusters/cluster-management/cluster-rbac.md#create-role-bindings). + +:::warning + +If your IDP uses Security Assertion Markup Language (SAML) authentication, then the **Inherit from Tenant** option will +not work, and you will need to use the **Custom** option instead. This is because Kubernetes supports only OIDC +authentication and not SAML authentication. + +::: + +To configure a custom OIDC IDP, choose **Custom** when adding the K3s pack to your profile, and then follow these steps: + +1. Add the following OIDC parameters to the `kube-apiserver-arg` section of your configuration file for your Kubernetes + layer when creating a cluster profile. + + ```yaml + cluster: + config: + kube-apiserver-arg: + - oidc-issuer-url="provider URL" + - oidc-client-id="client-id" + - oidc-groups-claim="groups" + - oidc-username-claim="email" + ``` + +2. Add the following `clientConfig` section that contains OIDC parameters to your Kubernetes YAML file and replace the + placeholders with your third-party OIDC IDP details. The `clientConfig` section must be placed at the root level of + the YAML file. + ```yaml + clientConfig: + oidc-issuer-url: "OIDC-ISSUER-URL" + oidc-client-id: "OIDC-CLIENT-ID" + oidc-client-secret: "OIDC-CLIENT-SECRET" + oidc-extra-scope: profile,email,openid + ``` + +After you have configured the IDP for authentication, you can proceed to create role bindings to configure authorization +in your cluster. Refer to [Create Role Bindings](../clusters/cluster-management/cluster-rbac.md#create-role-bindings) +for more guidance. + +## Configure OIDC Identity Provider for Palette Virtual Clusters + +If you are using K3s in a virtual cluster inside of a cluster group, you can also configure OIDC for your cluster. Refer +to [Configure OIDC for a Virtual Cluster](../clusters/palette-virtual-clusters/configure-oidc-virtual-cluster.md) for +more guidance. + +## Add a Certificate for Reverse Proxy + + +You can use a reverse proxy with a K3s Kubernetes cluster. The reverse proxy allows you to connect to the cluster API of +a Palette-managed Kubernetes cluster in private networks or clusters configured with private API endpoints. For more +information, refer to the pack guide. + + + + + +## Configure OIDC Identity Provider for Edge + +You can modify the configuration file to configure your Edge cluster to use an OpenID Connect (OIDC) Identity Provider +(IDP) for authentication. You can use a custom third-party IDP, such as Okta, or use Palette as your IDP. + +When you add the K3s pack to a cluster profile, Palette displays the OIDC IDP options listed below: + +- **None**: This setting does not require OIDC configuration for the cluster. It displays in the YAML file as `noauth`. + + + +- **Custom**: This is the default setting and does not require OIDC configuration. However, if desired, it allows you to +specify a third-party OIDC provider by configuring OIDC statements in the YAML file as described in + . This + setting displays in the YAML file as `none`. + + +- **Palette**: This setting makes Palette the IDP. Any user with a Palette account in the tenant and the proper + permissions to view and access the project's resources is able to use kubectl CLI to access cluster. This setting + displays in the YAML file as `palette`. When you select **Palette**, all you have to do to enable OIDC for your + cluster is create role bindings to configure authorization. You do not need to provide extra parameters such as + `oidc-issuer-url` as you need to when you configure a custom OIDC provider. + +- **Inherit from Tenant**: This setting allows you to apply RBAC to multiple clusters and requires you to configure + OpenID Connect (OIDC) in **Tenant Settings**. In Tenant Admin scope, navigate to **Tenant Settings** > **SSO**, choose + **OIDC**, and provide your third-party IDP details. This setting displays in the YAML file as `tenant`. For more + information, check out the [SSO Setup](../user-management/saml-sso/saml-sso.md) guide. + +All the options require you to map a set of users or groups to a Kubernetes RBAC role. To learn how to map a Kubernetes +role to users and groups, refer to +[Create Role Bindings](../clusters/cluster-management/cluster-rbac.md#create-role-bindings). + +:::warning + +If your IDP uses Security Assertion Markup Language (SAML) authentication, then the **Inherit from Tenant** option will +not work, and you will need to use the **Custom** option instead. This is because Kubernetes supports only OIDC +authentication and not SAML authentication. + +::: + +To configure a custom OIDC IDP, choose **Custom** when adding the K3s pack to your profile, and then follow these steps: + +1. Add the following OIDC parameters to the `kube-apiserver-arg` section of your configuration file for your Kubernetes + layer when creating a cluster profile. + + ```yaml + cluster: + config: + kube-apiserver-arg: + - oidc-issuer-url="provider URL" + - oidc-client-id="client-id" + - oidc-groups-claim="groups" + - oidc-username-claim="email" + ``` + +2. Add the following `clientConfig` section that contains OIDC parameters to your Kubernetes YAML file and replace the + placeholders with your third-party OIDC IDP details. The `clientConfig` section must be placed at the root level of + the YAML file. + + ```yaml + clientConfig: + oidc-issuer-url: "OIDC-ISSUER-URL" + oidc-client-id: "OIDC-CLIENT-ID" + oidc-client-secret: "OIDC-CLIENT-SECRET" + oidc-extra-scope: profile,email,openid + ``` + +After you have configured the IDP for authentication, you can proceed to create role bindings to configure authorization +in your cluster. Refer to [Create Role Bindings](../clusters/cluster-management/cluster-rbac.md#create-role-bindings) +for more guidance. + +## Configure OIDC Identity Provider for Palette Virtual Clusters + +If you are using K3s in a virtual cluster inside of a cluster group, you can also configure OIDC for your cluster. Refer +to [Configure OIDC for a Virtual Cluster](../clusters/palette-virtual-clusters/configure-oidc-virtual-cluster.md) for +more guidance. + +## Add a Certificate for Reverse Proxy + + +You can use a reverse proxy with a K3s Kubernetes cluster. The reverse proxy allows you to connect to the cluster API of +a Palette-managed Kubernetes cluster in private networks or clusters configured with private API endpoints. For more +information, refer to the pack guide. + + + + + + +## Terraform + +You can retrieve details about the K3s pack by using the following Terraform code. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "k8s" { + name = "edge-k3s" + version = "1.27.5" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/edge-k8s.md b/docs/docs-content/integrations/edge-k8s.md new file mode 100644 index 0000000000..8da96a3d94 --- /dev/null +++ b/docs/docs-content/integrations/edge-k8s.md @@ -0,0 +1,1165 @@ +--- +sidebar_label: "Palette eXtended Kubernetes - Edge" +title: "Palette eXtended Kubernetes - Edge" +description: + "Learn about the Palette eXtended Kubernetes - Edge pack and how you can use it your host clusters in an edge + environment." +hide_table_of_contents: true +type: "integration" +category: ["kubernetes", "amd64", "fips"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/k8s-dashboard/blobs/sha256:2de5d88b2573af42d4cc269dff75744c4174ce47cbbeed5445e51a2edd8b7429?type=image.webp" +tags: ["packs", "kubernetes", "pxke", "edge"] +--- + +The Palette eXtended Kubernetes - Edge (PXK-E) pack supports Kubernetes clusters set up on Edge hosts installed in +isolated locations like grocery stores, restaurants, and similar locations, versus a data center or cloud environment. +We offer PXK-E as a core pack in Palette. + +### PXK and Palette VerteX + +The PXK-E used in [Palette VerteX](../vertex/vertex.md) is compiled and linked with our +[NIST-certified FIPS crypto module](../legal-licenses/compliance.md#fips-140-2). PXK-E is by default enabled with +[Ubuntu Pro](https://ubuntu.com/pro) with FIPS mode enabled. Additionally, the Operating System (OS) is hardened based +on the NIST-800 standard. Refer to the +[Build Edge Artifacts](../clusters/edge/edgeforge-workflow/palette-canvos/fips.md) guide to learn more on how to build +the PXK-E image with FIPS mode enabled. + +The combined usage of PXK-E and Palette VerteX provides a secure and FIPS-compliant experience as the Kubernetes +distribution, OS, and management platform VerteX is FIPS-compliant. + +### Support Lifecycle + +We support PXK-E for N-3 Kubernetes minor versions for a duration of 14 months. The duration exceeds the official EOL by +four months. Once we stop supporting the minor version, we initiate the deprecation process. Refer to the +[Kubernetes Support Lifecycle](kubernetes-support.md#palette-extended-kubernetes-support) guide to learn more. + +:::warning + +Once you upgrade your cluster to a new Kubernetes version, you will not be able to downgrade. We recommend that, before +upgrading, you review the information provided in the [Kubernetes Upgrades](kubernetes-support.md#kubernetes-upgrades) +section. + +Review our [Maintenance Policy](maintenance-policy.md) to learn about pack update and deprecation schedules. + +::: + +## Versions Supported + + + + + +## Custom Kubernetes Configuration + + +The Kubernetes configuration file is where you can do the following: + +- Manually configure a third-party OIDC IDP. For more information, check out . + +- Add a certificate for the Spectro Proxy pack if you want to use a reverse proxy with a Kubernetes cluster. For more + information, refer to the guide. + +The PXK-E Kubeadm configuration is updated to dynamically enable OIDC based on your IDP selection by adding the +`identityProvider` parameter. + + +```yaml +pack: + palette: + config: + oidc: + identityProvider: +``` + +Below is an example of a Kubernetes configuration file. + +```yaml +cluster: + config: | + clusterConfiguration: + apiServer: + extraArgs: + advertise-address: "0.0.0.0" + anonymous-auth: "true" + audit-log-maxage: "30" + audit-log-maxbackup: "10" + audit-log-maxsize: "100" + audit-log-path: /var/log/apiserver/audit.log + audit-policy-file: /etc/kubernetes/audit-policy.yaml + authorization-mode: RBAC,Node + default-not-ready-toleration-seconds: "60" + default-unreachable-toleration-seconds: "60" + disable-admission-plugins: AlwaysAdmit + enable-admission-plugins: AlwaysPullImages,NamespaceLifecycle,ServiceAccount,NodeRestriction + profiling: "false" + secure-port: "6443" + tls-cipher-suites: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 + extraVolumes: + - hostPath: /var/log/apiserver + mountPath: /var/log/apiserver + name: audit-log + pathType: DirectoryOrCreate + - hostPath: /etc/kubernetes/audit-policy.yaml + mountPath: /etc/kubernetes/audit-policy.yaml + name: audit-policy + pathType: File + readOnly: true + timeoutForControlPlane: 10m0s + controllerManager: + extraArgs: + feature-gates: RotateKubeletServerCertificate=true + pod-eviction-timeout: 1m0s + profiling: "false" + terminated-pod-gc-threshold: "25" + use-service-account-credentials: "true" + dns: {} + kubernetesVersion: v1.26.4 + etcd: + local: + dataDir: "/etc/kubernetes/etcd" + extraArgs: + listen-client-urls: "https://0.0.0.0:2379" + networking: + podSubnet: 192.168.0.0/16 + serviceSubnet: 192.169.0.0/16 + scheduler: + extraArgs: + profiling: "false" + initConfiguration: + localAPIEndpoint: {} + nodeRegistration: + kubeletExtraArgs: + event-qps: "0" + feature-gates: RotateKubeletServerCertificate=true + protect-kernel-defaults: "true" + read-only-port: "0" + tls-cipher-suites: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 + joinConfiguration: + discovery: {} + nodeRegistration: + kubeletExtraArgs: + event-qps: "0" + feature-gates: RotateKubeletServerCertificate=true + protect-kernel-defaults: "true" + read-only-port: "0" + tls-cipher-suites: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 +stages: + initramfs: + - sysctl: + vm.overcommit_memory: 1 + kernel.panic: 10 + kernel.panic_on_oops: 1 + commands: + - ln -s /etc/kubernetes/admin.conf /run/kubeconfig + files: + - path: /etc/hosts + permission: "0644" + content: | + 127.0.0.1 localhost + - path: "/etc/kubernetes/audit-policy.yaml" + owner_string: "root" + permission: 0600 + content: | + apiVersion: audit.k8s.io/v1 + kind: Policy + rules: + - level: None + users: ["system:kube-proxy"] + verbs: ["watch"] + resources: + - group: "" # core + resources: ["endpoints", "services", "services/status"] + - level: None + users: ["system:unsecured"] + namespaces: ["kube-system"] + verbs: ["get"] + resources: + - group: "" # core + resources: ["configmaps"] + - level: None + users: ["kubelet"] # legacy kubelet identity + verbs: ["get"] + resources: + - group: "" # core + resources: ["nodes", "nodes/status"] + - level: None + userGroups: ["system:nodes"] + verbs: ["get"] + resources: + - group: "" # core + resources: ["nodes", "nodes/status"] + - level: None + users: + - system:kube-controller-manager + - system:kube-scheduler + - system:serviceaccount:kube-system:endpoint-controller + verbs: ["get", "update"] + namespaces: ["kube-system"] + resources: + - group: "" # core + resources: ["endpoints"] + - level: None + users: ["system:apiserver"] + verbs: ["get"] + resources: + - group: "" # core + resources: ["namespaces", "namespaces/status", "namespaces/finalize"] + - level: None + users: ["cluster-autoscaler"] + verbs: ["get", "update"] + namespaces: ["kube-system"] + resources: + - group: "" # core + resources: ["configmaps", "endpoints"] + # Don't log HPA fetching metrics. + - level: None + users: + - system:kube-controller-manager + verbs: ["get", "list"] + resources: + - group: "metrics.k8s.io" + # Don't log these read-only URLs. + - level: None + nonResourceURLs: + - /healthz* + - /version + - /swagger* + # Don't log events requests. + - level: None + resources: + - group: "" # core + resources: ["events"] + # node and pod status calls from nodes are high-volume and can be large, don't log responses for expected updates from nodes + - level: Request + users: ["kubelet", "system:node-problem-detector", "system:serviceaccount:kube-system:node-problem-detector"] + verbs: ["update","patch"] + resources: + - group: "" # core + resources: ["nodes/status", "pods/status"] + omitStages: + - "RequestReceived" + - level: Request + userGroups: ["system:nodes"] + verbs: ["update","patch"] + resources: + - group: "" # core + resources: ["nodes/status", "pods/status"] + omitStages: + - "RequestReceived" + # deletecollection calls can be large, don't log responses for expected namespace deletions + - level: Request + users: ["system:serviceaccount:kube-system:namespace-controller"] + verbs: ["deletecollection"] + omitStages: + - "RequestReceived" + # Secrets, ConfigMaps, and TokenReviews can contain sensitive & binary data, + # so only log at the Metadata level. + - level: Metadata + resources: + - group: "" # core + resources: ["secrets", "configmaps"] + - group: authentication.k8s.io + resources: ["tokenreviews"] + omitStages: + - "RequestReceived" + # Get repsonses can be large; skip them. + - level: Request + verbs: ["get", "list", "watch"] + resources: + - group: "" # core + - group: "admissionregistration.k8s.io" + - group: "apiextensions.k8s.io" + - group: "apiregistration.k8s.io" + - group: "apps" + - group: "authentication.k8s.io" + - group: "authorization.k8s.io" + - group: "autoscaling" + - group: "batch" + - group: "certificates.k8s.io" + - group: "extensions" + - group: "metrics.k8s.io" + - group: "networking.k8s.io" + - group: "policy" + - group: "rbac.authorization.k8s.io" + - group: "settings.k8s.io" + - group: "storage.k8s.io" + omitStages: + - "RequestReceived" + # Default level for known APIs + - level: RequestResponse + resources: + - group: "" # core + - group: "admissionregistration.k8s.io" + - group: "apiextensions.k8s.io" + - group: "apiregistration.k8s.io" + - group: "apps" + - group: "authentication.k8s.io" + - group: "authorization.k8s.io" + - group: "autoscaling" + - group: "batch" + - group: "certificates.k8s.io" + - group: "extensions" + - group: "metrics.k8s.io" + - group: "networking.k8s.io" + - group: "policy" + - group: "rbac.authorization.k8s.io" + - group: "settings.k8s.io" + - group: "storage.k8s.io" + omitStages: + - "RequestReceived" + # Default level for all other requests. + - level: Metadata + omitStages: + - "RequestReceived" +pack: + palette: + config: + oidc: + identityProvider: palette +``` + +### Configure OIDC Identity Provider + +The OIDC IDP feature offers the convenience of managing OIDC at the Kubernetes layer. The OIDC IDP feature is +particularly useful for environments that do not have their own IDP configured. In this scenario, you can leverage +Palette as an IDP without having to configure a third-party IDP. We also support the ability to take advantage of other +OIDC providers by making it possible for you to configure OIDC at the tenant level. For additional flexibility, if you +wish to use a different IDP than the one configured at the tenant level, you can select a different IDP by adding the +OIDC configuration to your cluster profile. + +When you add the PXK-E pack to a cluster profile, Palette displays the OIDC IDP options listed below. + +All the options require you to map a set of users or groups to a Kubernetes RBAC role. To learn how to map a Kubernetes +role to users and groups, refer to +[Create Role Bindings](../clusters/cluster-management/cluster-rbac.md#create-role-bindings). + + + +You can create a role binding that maps individual users or groups assigned within the OIDC provider's configuration to +a role. To learn more, review +. You can also +configure OIDC for virtual clusters. For guidance, refer to +[Configure OIDC for a Virtual Cluster](../clusters/palette-virtual-clusters/configure-oidc-virtual-cluster.md). + +- **None**: This setting does not require OIDC configuration for the cluster. It displays in the YAML file as `noauth`. + +- **Custom**: This is the default setting and does not require OIDC configuration. However, if desired, it allows you to + specify a third-party OIDC provider by configuring OIDC statements in the YAML file as described in + . This + setting displays in the YAML file as `none`. + +- **Palette**: This setting makes Palette the IDP. Any user with a Palette account in the tenant and the proper + permissions to view and access the project's resources is able to log into the Kubernetes dashboard. This setting + displays in the YAML file as `palette`. + +- **Inherit from Tenant**: This setting allows you to apply RBAC to multiple clusters and requires you to configure +OpenID Connect (OIDC) in **Tenant Settings**. In Tenant Admin scope, navigate to **Tenant Settings** > **SSO**, choose +**OIDC**, and provide your third-party IDP details. This setting displays in the YAML file as `tenant`. For more +information, check out the [SSO Setup](../user-management/saml-sso/saml-sso.md) guide. + + +:::info + +If your IDP uses Security Assertion Markup Language (SAML) authentication, then the **Inherit from Tenant** option will +not work, and you will need to use the **Custom** option instead. This is because Kubernetes supports only OIDC +authentication and not SAML authentication. + +::: + +### Configure Custom OIDC + +Follow these steps to configure a third-party OIDC IDP. + +1. Add the following OIDC parameters to the `apiServer.extraArgs` section of your Kubernetes YAML file when creating a + cluster profile. + + ```yaml + cluster: + config: | + clusterConfiguration: + apiServer: + extraArgs: + oidc-issuer-url: "provider URL" + oidc-client-id: "client-id" + oidc-groups-claim: "groups" + oidc-username-claim: "email" + ``` + +2. Add the following `clientConfig` section that contains OIDC parameters to your Kubernetes configuration file. + + ```yaml + clientConfig: + oidc-issuer-url: "" + oidc-client-id: "" + oidc-client-secret: "" + oidc-extra-scope: profile,email,openid + ``` + +3. Provide third-party OIDC IDP details. + +### Use RBAC with OIDC + +You can create a role binding that uses individual users as the subject or specify a group name as the subject to map +many users to a role. The group name is the group assigned in the OIDC provider's configuration. Below is an example. To +learn more, review [Create Role Bindings](../clusters/cluster-management/cluster-rbac.md#create-role-bindings). + +Assume you created a group named `dev-east-2` within an OIDC provider. If you configure the host cluster's Kubernetes +pack with all the correct OIDC settings, you could then create a role binding for the `dev-east-2` group. + +In this example, Palette is used as the IDP, and all users in the `dev-east-2` would inherit the `cluster-admin` role. + +![A subject of the type group is assigned as the subject in a RoleBinding](/clusters_cluster-management_cluster-rbac_cluster-subject-group.webp) + + + + + +## Custom Kubernetes Configuration + + +The Kubernetes configuration file is where you can do the following: + +- Manually configure a third-party OIDC IDP. For more information, check out . + +- Add a certificate for the Spectro Proxy pack if you want to use a reverse proxy with a Kubernetes cluster. For more + information, refer to the guide. + +The PXK-E Kubeadm configuration is updated to dynamically enable OIDC based on your IDP selection by adding the +`identityProvider` parameter. + + +```yaml +pack: + palette: + config: + oidc: + identityProvider: +``` + +Below is an example of a Kubernetes configuration file. + +```yaml +cluster: + config: | + clusterConfiguration: + apiServer: + extraArgs: + advertise-address: "0.0.0.0" + anonymous-auth: "true" + audit-log-maxage: "30" + audit-log-maxbackup: "10" + audit-log-maxsize: "100" + audit-log-path: /var/log/apiserver/audit.log + audit-policy-file: /etc/kubernetes/audit-policy.yaml + authorization-mode: RBAC,Node + default-not-ready-toleration-seconds: "60" + default-unreachable-toleration-seconds: "60" + disable-admission-plugins: AlwaysAdmit + enable-admission-plugins: AlwaysPullImages,NamespaceLifecycle,ServiceAccount,NodeRestriction + profiling: "false" + secure-port: "6443" + tls-cipher-suites: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 + extraVolumes: + - hostPath: /var/log/apiserver + mountPath: /var/log/apiserver + name: audit-log + pathType: DirectoryOrCreate + - hostPath: /etc/kubernetes/audit-policy.yaml + mountPath: /etc/kubernetes/audit-policy.yaml + name: audit-policy + pathType: File + readOnly: true + timeoutForControlPlane: 10m0s + controllerManager: + extraArgs: + feature-gates: RotateKubeletServerCertificate=true + pod-eviction-timeout: 1m0s + profiling: "false" + terminated-pod-gc-threshold: "25" + use-service-account-credentials: "true" + dns: {} + kubernetesVersion: v1.26.4 + etcd: + local: + dataDir: "/etc/kubernetes/etcd" + extraArgs: + listen-client-urls: "https://0.0.0.0:2379" + networking: + podSubnet: 192.168.0.0/16 + serviceSubnet: 192.169.0.0/16 + scheduler: + extraArgs: + profiling: "false" + initConfiguration: + localAPIEndpoint: {} + nodeRegistration: + kubeletExtraArgs: + event-qps: "0" + feature-gates: RotateKubeletServerCertificate=true + protect-kernel-defaults: "true" + read-only-port: "0" + tls-cipher-suites: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 + joinConfiguration: + discovery: {} + nodeRegistration: + kubeletExtraArgs: + event-qps: "0" + feature-gates: RotateKubeletServerCertificate=true + protect-kernel-defaults: "true" + read-only-port: "0" + tls-cipher-suites: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 +stages: + initramfs: + - sysctl: + vm.overcommit_memory: 1 + kernel.panic: 10 + kernel.panic_on_oops: 1 + commands: + - ln -s /etc/kubernetes/admin.conf /run/kubeconfig + files: + - path: /etc/hosts + permission: "0644" + content: | + 127.0.0.1 localhost + - path: "/etc/kubernetes/audit-policy.yaml" + owner_string: "root" + permission: 0600 + content: | + apiVersion: audit.k8s.io/v1 + kind: Policy + rules: + - level: None + users: ["system:kube-proxy"] + verbs: ["watch"] + resources: + - group: "" # core + resources: ["endpoints", "services", "services/status"] + - level: None + users: ["system:unsecured"] + namespaces: ["kube-system"] + verbs: ["get"] + resources: + - group: "" # core + resources: ["configmaps"] + - level: None + users: ["kubelet"] # legacy kubelet identity + verbs: ["get"] + resources: + - group: "" # core + resources: ["nodes", "nodes/status"] + - level: None + userGroups: ["system:nodes"] + verbs: ["get"] + resources: + - group: "" # core + resources: ["nodes", "nodes/status"] + - level: None + users: + - system:kube-controller-manager + - system:kube-scheduler + - system:serviceaccount:kube-system:endpoint-controller + verbs: ["get", "update"] + namespaces: ["kube-system"] + resources: + - group: "" # core + resources: ["endpoints"] + - level: None + users: ["system:apiserver"] + verbs: ["get"] + resources: + - group: "" # core + resources: ["namespaces", "namespaces/status", "namespaces/finalize"] + - level: None + users: ["cluster-autoscaler"] + verbs: ["get", "update"] + namespaces: ["kube-system"] + resources: + - group: "" # core + resources: ["configmaps", "endpoints"] + # Don't log HPA fetching metrics. + - level: None + users: + - system:kube-controller-manager + verbs: ["get", "list"] + resources: + - group: "metrics.k8s.io" + # Don't log these read-only URLs. + - level: None + nonResourceURLs: + - /healthz* + - /version + - /swagger* + # Don't log events requests. + - level: None + resources: + - group: "" # core + resources: ["events"] + # node and pod status calls from nodes are high-volume and can be large, don't log responses for expected updates from nodes + - level: Request + users: ["kubelet", "system:node-problem-detector", "system:serviceaccount:kube-system:node-problem-detector"] + verbs: ["update","patch"] + resources: + - group: "" # core + resources: ["nodes/status", "pods/status"] + omitStages: + - "RequestReceived" + - level: Request + userGroups: ["system:nodes"] + verbs: ["update","patch"] + resources: + - group: "" # core + resources: ["nodes/status", "pods/status"] + omitStages: + - "RequestReceived" + # deletecollection calls can be large, don't log responses for expected namespace deletions + - level: Request + users: ["system:serviceaccount:kube-system:namespace-controller"] + verbs: ["deletecollection"] + omitStages: + - "RequestReceived" + # Secrets, ConfigMaps, and TokenReviews can contain sensitive & binary data, + # so only log at the Metadata level. + - level: Metadata + resources: + - group: "" # core + resources: ["secrets", "configmaps"] + - group: authentication.k8s.io + resources: ["tokenreviews"] + omitStages: + - "RequestReceived" + # Get repsonses can be large; skip them. + - level: Request + verbs: ["get", "list", "watch"] + resources: + - group: "" # core + - group: "admissionregistration.k8s.io" + - group: "apiextensions.k8s.io" + - group: "apiregistration.k8s.io" + - group: "apps" + - group: "authentication.k8s.io" + - group: "authorization.k8s.io" + - group: "autoscaling" + - group: "batch" + - group: "certificates.k8s.io" + - group: "extensions" + - group: "metrics.k8s.io" + - group: "networking.k8s.io" + - group: "policy" + - group: "rbac.authorization.k8s.io" + - group: "settings.k8s.io" + - group: "storage.k8s.io" + omitStages: + - "RequestReceived" + # Default level for known APIs + - level: RequestResponse + resources: + - group: "" # core + - group: "admissionregistration.k8s.io" + - group: "apiextensions.k8s.io" + - group: "apiregistration.k8s.io" + - group: "apps" + - group: "authentication.k8s.io" + - group: "authorization.k8s.io" + - group: "autoscaling" + - group: "batch" + - group: "certificates.k8s.io" + - group: "extensions" + - group: "metrics.k8s.io" + - group: "networking.k8s.io" + - group: "policy" + - group: "rbac.authorization.k8s.io" + - group: "settings.k8s.io" + - group: "storage.k8s.io" + omitStages: + - "RequestReceived" + # Default level for all other requests. + - level: Metadata + omitStages: + - "RequestReceived" +pack: + palette: + config: + oidc: + identityProvider: palette +``` + +### Configure OIDC Identity Provider + +The OIDC IDP feature offers the convenience of managing OIDC at the Kubernetes layer. The OIDC IDP feature is +particularly useful for environments that do not have their own IDP configured. In this scenario, you can leverage +Palette as an IDP without having to configure a third-party IDP. We also support the ability to take advantage of other +OIDC providers by making it possible for you to configure OIDC at the tenant level. For additional flexibility, if you +wish to use a different IDP than the one configured at the tenant level, you can select a different IDP by adding the +OIDC configuration to your cluster profile. + +When you add the PXK-E pack to a cluster profile, Palette displays the OIDC IDP options listed below. + +All the options require you to map a set of users or groups to a Kubernetes RBAC role. To learn how to map a Kubernetes +role to users and groups, refer to +[Create Role Bindings](../clusters/cluster-management/cluster-rbac.md#create-role-bindings). + + + +You can create a role binding that maps individual users or groups assigned within the OIDC provider's configuration to +a role. To learn more, review +. You can also +configure OIDC for virtual clusters. For guidance, refer to +[Configure OIDC for a Virtual Cluster](../clusters/palette-virtual-clusters/configure-oidc-virtual-cluster.md). + +- **None**: This setting does not require OIDC configuration for the cluster. It displays in the YAML file as `noauth`. + +- **Custom**: This is the default setting and does not require OIDC configuration. However, if desired, it allows you to + specify a third-party OIDC provider by configuring OIDC statements in the YAML file as described in + . This + setting displays in the YAML file as `none`. + +- **Palette**: This setting makes Palette the IDP. Any user with a Palette account in the tenant and the proper + permissions to view and access the project's resources is able to log into the Kubernetes dashboard. This setting + displays in the YAML file as `palette`. + +- **Inherit from Tenant**: This setting allows you to apply RBAC to multiple clusters and requires you to configure +OpenID Connect (OIDC) in **Tenant Settings**. In Tenant Admin scope, navigate to **Tenant Settings** > **SSO**, choose +**OIDC**, and provide your third-party IDP details. This setting displays in the YAML file as `tenant`. For more +information, check out the [SSO Setup](../user-management/saml-sso/saml-sso.md) guide. + + +:::info + +If your IDP uses Security Assertion Markup Language (SAML) authentication, then the **Inherit from Tenant** option will +not work, and you will need to use the **Custom** option instead. This is because Kubernetes supports only OIDC +authentication and not SAML authentication. + +::: + +### Configure Custom OIDC + +Follow these steps to configure a third-party OIDC IDP. + +1. Add the following OIDC parameters to the `apiServer.extraArgs` section of your Kubernetes YAML file when creating a + cluster profile. + + ```yaml + cluster: + config: | + clusterConfiguration: + apiServer: + extraArgs: + oidc-issuer-url: "provider URL" + oidc-client-id: "client-id" + oidc-groups-claim: "groups" + oidc-username-claim: "email" + ``` + +2. Add the following `clientConfig` section that contains OIDC parameters to your Kubernetes configuration file. + + ```yaml + clientConfig: + oidc-issuer-url: "" + oidc-client-id: "" + oidc-client-secret: "" + oidc-extra-scope: profile,email,openid + ``` + +3. Provide third-party OIDC IDP details. + +### Use RBAC with OIDC + +You can create a role binding that uses individual users as the subject or specify a group name as the subject to map +many users to a role. The group name is the group assigned in the OIDC provider's configuration. Below is an example. To +learn more, review [Create Role Bindings](../clusters/cluster-management/cluster-rbac.md#create-role-bindings). + +Assume you created a group named `dev-east-2` within an OIDC provider. If you configure the host cluster's Kubernetes +pack with all the correct OIDC settings, you could then create a role binding for the `dev-east-2` group. + +In this example, Palette is used as the IDP, and all users in the `dev-east-2` would inherit the `cluster-admin` role. + +![A subject of the type group is assigned as the subject in a RoleBinding](/clusters_cluster-management_cluster-rbac_cluster-subject-group.webp) + + + + + +## Custom Kubernetes Configuration + + +The Kubernetes configuration file is where you can do the following: + +- Manually configure a third-party OIDC IDP. For more information, check out . + +- Add a certificate for the Spectro Proxy pack if you want to use a reverse proxy with a Kubernetes cluster. For more + information, refer to the guide. + +The PXK-E Kubeadm configuration is updated to dynamically enable OIDC based on your IDP selection by adding the +`identityProvider` parameter. + + +```yaml +pack: + palette: + config: + oidc: + identityProvider: +``` + +Below is an example of a Kubernetes configuration file. + +```yaml +cluster: + config: | + clusterConfiguration: + apiServer: + extraArgs: + advertise-address: "0.0.0.0" + anonymous-auth: "true" + audit-log-maxage: "30" + audit-log-maxbackup: "10" + audit-log-maxsize: "100" + audit-log-path: /var/log/apiserver/audit.log + audit-policy-file: /etc/kubernetes/audit-policy.yaml + authorization-mode: RBAC,Node + default-not-ready-toleration-seconds: "60" + default-unreachable-toleration-seconds: "60" + disable-admission-plugins: AlwaysAdmit + enable-admission-plugins: AlwaysPullImages,NamespaceLifecycle,ServiceAccount,NodeRestriction + profiling: "false" + secure-port: "6443" + tls-cipher-suites: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 + extraVolumes: + - hostPath: /var/log/apiserver + mountPath: /var/log/apiserver + name: audit-log + pathType: DirectoryOrCreate + - hostPath: /etc/kubernetes/audit-policy.yaml + mountPath: /etc/kubernetes/audit-policy.yaml + name: audit-policy + pathType: File + readOnly: true + timeoutForControlPlane: 10m0s + controllerManager: + extraArgs: + feature-gates: RotateKubeletServerCertificate=true + pod-eviction-timeout: 1m0s + profiling: "false" + terminated-pod-gc-threshold: "25" + use-service-account-credentials: "true" + dns: {} + kubernetesVersion: v1.26.4 + etcd: + local: + dataDir: "/etc/kubernetes/etcd" + extraArgs: + listen-client-urls: "https://0.0.0.0:2379" + networking: + podSubnet: 192.168.0.0/16 + serviceSubnet: 192.169.0.0/16 + scheduler: + extraArgs: + profiling: "false" + initConfiguration: + localAPIEndpoint: {} + nodeRegistration: + kubeletExtraArgs: + event-qps: "0" + feature-gates: RotateKubeletServerCertificate=true + protect-kernel-defaults: "true" + read-only-port: "0" + tls-cipher-suites: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 + joinConfiguration: + discovery: {} + nodeRegistration: + kubeletExtraArgs: + event-qps: "0" + feature-gates: RotateKubeletServerCertificate=true + protect-kernel-defaults: "true" + read-only-port: "0" + tls-cipher-suites: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 +stages: + initramfs: + - sysctl: + vm.overcommit_memory: 1 + kernel.panic: 10 + kernel.panic_on_oops: 1 + commands: + - ln -s /etc/kubernetes/admin.conf /run/kubeconfig + files: + - path: /etc/hosts + permission: "0644" + content: | + 127.0.0.1 localhost + - path: "/etc/kubernetes/audit-policy.yaml" + owner_string: "root" + permission: 0600 + content: | + apiVersion: audit.k8s.io/v1 + kind: Policy + rules: + - level: None + users: ["system:kube-proxy"] + verbs: ["watch"] + resources: + - group: "" # core + resources: ["endpoints", "services", "services/status"] + - level: None + users: ["system:unsecured"] + namespaces: ["kube-system"] + verbs: ["get"] + resources: + - group: "" # core + resources: ["configmaps"] + - level: None + users: ["kubelet"] # legacy kubelet identity + verbs: ["get"] + resources: + - group: "" # core + resources: ["nodes", "nodes/status"] + - level: None + userGroups: ["system:nodes"] + verbs: ["get"] + resources: + - group: "" # core + resources: ["nodes", "nodes/status"] + - level: None + users: + - system:kube-controller-manager + - system:kube-scheduler + - system:serviceaccount:kube-system:endpoint-controller + verbs: ["get", "update"] + namespaces: ["kube-system"] + resources: + - group: "" # core + resources: ["endpoints"] + - level: None + users: ["system:apiserver"] + verbs: ["get"] + resources: + - group: "" # core + resources: ["namespaces", "namespaces/status", "namespaces/finalize"] + - level: None + users: ["cluster-autoscaler"] + verbs: ["get", "update"] + namespaces: ["kube-system"] + resources: + - group: "" # core + resources: ["configmaps", "endpoints"] + # Don't log HPA fetching metrics. + - level: None + users: + - system:kube-controller-manager + verbs: ["get", "list"] + resources: + - group: "metrics.k8s.io" + # Don't log these read-only URLs. + - level: None + nonResourceURLs: + - /healthz* + - /version + - /swagger* + # Don't log events requests. + - level: None + resources: + - group: "" # core + resources: ["events"] + # node and pod status calls from nodes are high-volume and can be large, don't log responses for expected updates from nodes + - level: Request + users: ["kubelet", "system:node-problem-detector", "system:serviceaccount:kube-system:node-problem-detector"] + verbs: ["update","patch"] + resources: + - group: "" # core + resources: ["nodes/status", "pods/status"] + omitStages: + - "RequestReceived" + - level: Request + userGroups: ["system:nodes"] + verbs: ["update","patch"] + resources: + - group: "" # core + resources: ["nodes/status", "pods/status"] + omitStages: + - "RequestReceived" + # deletecollection calls can be large, don't log responses for expected namespace deletions + - level: Request + users: ["system:serviceaccount:kube-system:namespace-controller"] + verbs: ["deletecollection"] + omitStages: + - "RequestReceived" + # Secrets, ConfigMaps, and TokenReviews can contain sensitive & binary data, + # so only log at the Metadata level. + - level: Metadata + resources: + - group: "" # core + resources: ["secrets", "configmaps"] + - group: authentication.k8s.io + resources: ["tokenreviews"] + omitStages: + - "RequestReceived" + # Get repsonses can be large; skip them. + - level: Request + verbs: ["get", "list", "watch"] + resources: + - group: "" # core + - group: "admissionregistration.k8s.io" + - group: "apiextensions.k8s.io" + - group: "apiregistration.k8s.io" + - group: "apps" + - group: "authentication.k8s.io" + - group: "authorization.k8s.io" + - group: "autoscaling" + - group: "batch" + - group: "certificates.k8s.io" + - group: "extensions" + - group: "metrics.k8s.io" + - group: "networking.k8s.io" + - group: "policy" + - group: "rbac.authorization.k8s.io" + - group: "settings.k8s.io" + - group: "storage.k8s.io" + omitStages: + - "RequestReceived" + # Default level for known APIs + - level: RequestResponse + resources: + - group: "" # core + - group: "admissionregistration.k8s.io" + - group: "apiextensions.k8s.io" + - group: "apiregistration.k8s.io" + - group: "apps" + - group: "authentication.k8s.io" + - group: "authorization.k8s.io" + - group: "autoscaling" + - group: "batch" + - group: "certificates.k8s.io" + - group: "extensions" + - group: "metrics.k8s.io" + - group: "networking.k8s.io" + - group: "policy" + - group: "rbac.authorization.k8s.io" + - group: "settings.k8s.io" + - group: "storage.k8s.io" + omitStages: + - "RequestReceived" + # Default level for all other requests. + - level: Metadata + omitStages: + - "RequestReceived" +pack: + palette: + config: + oidc: + identityProvider: palette +``` + +### Configure OIDC Identity Provider + +The OIDC IDP feature offers the convenience of managing OIDC at the Kubernetes layer. The OIDC IDP feature is +particularly useful for environments that do not have their own IDP configured. In this scenario, you can leverage +Palette as an IDP without having to configure a third-party IDP. We also support the ability to take advantage of other +OIDC providers by making it possible for you to configure OIDC at the tenant level. For additional flexibility, if you +wish to use a different IDP than the one configured at the tenant level, you can select a different IDP by adding the +OIDC configuration to your cluster profile. + +When you add the PXK-E pack to a cluster profile, Palette displays the OIDC IDP options listed below. + +All the options require you to map a set of users or groups to a Kubernetes RBAC role. To learn how to map a Kubernetes +role to users and groups, refer to +[Create Role Bindings](../clusters/cluster-management/cluster-rbac.md#create-role-bindings). + + + +You can create a role binding that maps individual users or groups assigned within the OIDC provider's configuration to +a role. To learn more, review + +. You can also +configure OIDC for virtual clusters. For guidance, refer to [Configure OIDC for a Virtual +Cluster](../clusters/palette-virtual-clusters/configure-oidc-virtual-cluster.md). + +- **None**: This setting does not require OIDC configuration for the cluster. It displays in the YAML file as `noauth`. + +- **Custom**: This is the default setting and does not require OIDC configuration. However, if desired, it allows you to + specify a third-party OIDC provider by configuring OIDC statements in the YAML file as described in + + . This + setting displays in the YAML file as `none`. + +- **Palette**: This setting makes Palette the IDP. Any user with a Palette account in the tenant and the proper + permissions to view and access the project's resources is able to log into the Kubernetes dashboard. This setting + displays in the YAML file as `palette`. + +- **Inherit from Tenant**: This setting allows you to apply RBAC to multiple clusters and requires you to configure +OpenID Connect (OIDC) in **Tenant Settings**. In Tenant Admin scope, navigate to **Tenant Settings** > **SSO**, choose +**OIDC**, and provide your third-party IDP details. This setting displays in the YAML file as `tenant`. For more +information, check out the [SSO Setup](../user-management/saml-sso/saml-sso.md) guide. + + +:::info + +If your IDP uses Security Assertion Markup Language (SAML) authentication, then the **Inherit from Tenant** option will +not work, and you will need to use the **Custom** option instead. This is because Kubernetes supports only OIDC +authentication and not SAML authentication. + +::: + +### Configure Custom OIDC + +Follow these steps to configure a third-party OIDC IDP. + +1. Add the following OIDC parameters to the `apiServer.extraArgs` section of your Kubernetes YAML file when creating a + cluster profile. + + ```yaml + cluster: + config: + clusterConfiguration: + apiServer: + extraArgs: + oidc-issuer-url: "provider URL" + oidc-client-id: "client-id" + oidc-groups-claim: "groups" + oidc-username-claim: "email" + ``` + +2. Add the following `kubeadmconfig.clientConfig` section that contains OIDC parameters to your Kubernetes YAML file. + + ```yaml + kubeadmconfig: + clientConfig: + oidc-issuer-url: "" + oidc-client-id: "" + oidc-client-secret: "" + oidc-extra-scope: profile,email,openid + ``` + +3. Provide third-party OIDC IDP details. + +### Use RBAC with OIDC + +You can create a role binding that uses individual users as the subject or specify a group name as the subject to map +many users to a role. The group name is the group assigned in the OIDC provider's configuration. Below is an example. To +learn more, review [Create Role Bindings](../clusters/cluster-management/cluster-rbac.md#create-role-bindings). + +Assume you created a group named `dev-east-2` within an OIDC provider. If you configure the host cluster's Kubernetes +pack with all the correct OIDC settings, you could then create a role binding for the `dev-east-2` group. + +In this example, Palette is used as the IDP, and all users in the `dev-east-2` would inherit the `cluster-admin` role. + +![A subject of the type group is assigned as the subject in a RoleBinding](/clusters_cluster-management_cluster-rbac_cluster-subject-group.webp) + + + + +## Terraform + +You can reference Kubernetes in Terraform with the following code snippet. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "edge-k8s" { + name = "edge-k8s" + version = "1.29.0" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/edge-native-byoi.md b/docs/docs-content/integrations/edge-native-byoi.md new file mode 100644 index 0000000000..abebd7703a --- /dev/null +++ b/docs/docs-content/integrations/edge-native-byoi.md @@ -0,0 +1,45 @@ +--- +sidebar_label: "Edge Bring Your Own OS (BYOOS)" +title: "Edge Bring your own OS (BYOOS)" +description: "Bring Your Own OS (BYOOS) pack in Palette Edge." +hide_table_of_contents: true +type: "integration" +category: ["operating system", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.dev.spectrocloud.com/v1/spectro-proxy/blobs/sha256:b6081bca439eeb01a8d43b3cb6895df4c088f80af978856ddc0da568e5c09365?type=image.webp" +tags: ["packs", "byoos", "operating system", "edge"] +--- + +## Versions Supported + + + + + +BYOOS enables you to use a custom OS for your Edge host. The custom OS must include all the Edge artifacts and provider +images required by the Edge Installer. Refer to the +[Build Edge Artifacts](../clusters/edge/edgeforge-workflow/palette-canvos/palette-canvos.md) guide for steps on how to +create a custom OS that includes all the required components for the Edge Installer. + +Next, select the BYOOS pack and fill out the required parameters during the cluster profile creation process. The +`system.uri` parameter specifies the location of the BYOOS image. + + + + +## Terraform + +You can retrieve details about the BYOOS Edge OS agent pack using the following Terraform code. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "byoos" { + name = "edge-native-byoi" + version = "1.0.0" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/edge-native-ubuntu.md b/docs/docs-content/integrations/edge-native-ubuntu.md new file mode 100644 index 0000000000..074f930093 --- /dev/null +++ b/docs/docs-content/integrations/edge-native-ubuntu.md @@ -0,0 +1,30 @@ +--- +sidebar_label: "Ubuntu" +title: "Ubuntu" +description: "Choose Ubuntu Operating System pack in Palette." +hide_table_of_contents: true +type: "integration" +category: ["operating system", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/ubuntu-vsphere/blobs/sha256:09a727f9005b79c69d8e60e12ce130880c63131315b49e7fb4cc44e53d34dc7a?type=image.webp" +tags: ["packs", "ubuntu", "operating system"] +--- + + + +## Terraform + +You can reference Ubuntu in Terraform with the following code snippet. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "ubuntu" { + name = "edge-native-ubuntu" + version = "22.04" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/edge-rke2.md b/docs/docs-content/integrations/edge-rke2.md new file mode 100644 index 0000000000..c816161eed --- /dev/null +++ b/docs/docs-content/integrations/edge-rke2.md @@ -0,0 +1,47 @@ +--- +sidebar_label: "RKE2" +title: "RKE2" +description: "RKE2 pack in Palette" +hide_table_of_contents: true +type: "integration" +category: ["kubernetes", "amd64", "fips"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.dev.spectrocloud.com/v1/kubernetes-rke2/blobs/sha256:47cde61005d9996f1571c132ba9f753982134a7a0d8e445e27001ab8519e6051?type=image.webp" +--- + +### Support Lifecycle + + +We support other Kubernetes distributions such as K3s, Microk8s, and RKE2 until their official EOL. The EOL is set by +the respective owner. Once we stop supporting the minor version, we initiate the deprecation process. Refer to the + + guide to learn more. + +:::warning + + +Once you upgrade your cluster to a new Kubernetes version, you will not be able to downgrade. We recommend that, before +upgrading, you review the information provided in the +section. + +Review the to learn about pack +update and deprecation schedules. + +::: + + + +## Terraform + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "k8s" { + name = "edge-rke2" + version = "1.29.5" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/external-dns.md b/docs/docs-content/integrations/external-dns.md index e4f0ee19e1..bd6fa7f460 100644 --- a/docs/docs-content/integrations/external-dns.md +++ b/docs/docs-content/integrations/external-dns.md @@ -6,48 +6,18 @@ type: "integration" hide_table_of_contents: true category: ["load balancers", "amd64"] sidebar_class_name: "hide-from-sidebar" -logoUrl: "https://registry.spectrocloud.com/v1/external-dns/blobs/sha256:1bfd6dceb0b50efee4068cd6321511f6b24be86e2d613e0a8206e716ba7aea3f?type=image.webp" tags: ["packs", "external-dns", "network"] --- -The integration helps configure public DNS servers with information about Kubernetes services to make them discoverable. - -## Prerequisites - -Providers have to be set up for this pack to get deployed and work seamlessly. For a list of supported providers and the -prerequisites to be set up, visit [providers](https://github.com/kubernetes-sigs/external-dns#status-of-providers) -section - ## Versions Supported - + -- **0.13.1** -- **0.12.2** - - - - -- **0.7.2** - - - - - -## Components - -Integration deploys the following components: - -- External DNS - -## ExternalDNS for Services on AWS Route53 Example +### AWS Route53 -### Setup prerequisites for AWS Route53 - -- Create the following IAM policy in the AWS account. This is needed for externalDNS to list and create Route53 - resources. +To use ExternalDNS with AWS Route53, you need to create an IAM policy and role with the following permissions. ```json { @@ -67,100 +37,77 @@ Integration deploys the following components: } ``` +You also need to meet the following prerequisites: + - Create an IAM role and associate the policy created above. Make a note of the role ARN which will be used in ExternalDNS deployment later -- Setup hosted zone in AWS Route53 + +- Setup hosted zone in AWS Route53. Use the following command to create a hosted zone in Route53 using the AWS CLI. + ```bash - # Create a DNS zone through AWS CLI aws route53 create-hosted-zone --name "external-dns-test.my-org.com." --caller-reference "external-dns-test-$(date +%s)" ``` -### Deploy ExternalDNS on the cluster - -- Add ExternalDNS pack to the desired profile and deploy it to the cluster. You may want to configure the following in - pack values.yaml - - - Configure AWS provider details (line #86) - - - Credentials, Zone Type - - AssumeRoleArn with the Role ARN created above - - - Configure txtOwnerId with the ID of the hosted zone created above (line #366) - ```bash - aws route53 list-hosted-zones-by-name --output json --dns-name "external-dns-test.my-org.com." | jq -r '.HostedZones[0].Id' - ``` - - Optionally change externalDNS policy and logLevel - -### Deploy Ingress Controller on the cluster - -- Deploy one of the Ingress Controller on the cluster - -### Deploy Applications with Ingress on the cluster - -- Add Prometheus-Operator addon to the same profile where ExternalDNS is added - - - Change serviceType to ClusterIP (line #408) - - Enable Ingress for the add-on packs. In this example, let us use Prometheus-Operator integration. Ingress config for - Grafana will look like the following: - - ```yaml - #Ingress config - ingress: - ## If true, Grafana Ingress will be created - ## - enabled: true + + - hosts: - - grafana.external-dns-test.my-org.com +### AWS Route53 - ## Path for grafana ingress - path: / - ``` +To use ExternalDNS with AWS Route53, you need to create an IAM policy and role with the following permissions. - When Prometheus-Operator gets deployed in the Cluster, Ingress resource for Grafana will also get created and will - look like +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": ["route53:ChangeResourceRecordSets"], + "Resource": ["arn:aws:route53:::hostedzone/*"] + }, + { + "Effect": "Allow", + "Action": ["route53:ListHostedZones", "route53:ListResourceRecordSets"], + "Resource": ["*"] + } + ] +} +``` - ```yaml - apiVersion: extensions/v1beta1 - kind: Ingress - metadata: - name: grafana-ingress - namespace: monitoring - spec: - rules: - - host: grafana.external-dns-test.my-org.com - http: - paths: - - backend: - serviceName: grafana - servicePort: 80 - path: / - status: - loadBalancer: - ingress: - - hostname: a9a2eadb64c8e4c2fb37a1f69afb0a30-330939473.us-west-2.elb.amazonaws.com - ``` +You also need to meet the following prerequisites: -### Verify ExternalDNS (Ingress example) +- Create an IAM role and associate the policy created above. Make a note of the role ARN which will be used in + ExternalDNS deployment later -- If all goes well, after 2 minutes, ExternalDNS would have inserted 2 records on your hosted zone +- Setup hosted zone in AWS Route53. Use the following command to create a hosted zone in Route53 using the AWS CLI. ```bash - aws route53 list-resource-record-sets --output json --hosted-zone-id "/hostedzone/ZEWFWZ4R16P7IB" \ - --query "ResourceRecordSets[?Name == 'grafana.external-dns-test.my-org.com.']|[?Type == 'A']" + aws route53 create-hosted-zone --name "external-dns-test.my-org.com." --caller-reference "external-dns-test-$(date +%s)" ``` -- After which, if you access http://grafana.external-dns-test.my-org.com on your browser, you will be able to view the - Grafana login page + + + ### Troubleshooting -- Make sure Ingress resource gets created for the Applications deployed and a LoadBalancer hostname / IP address is set - on the Ingress resource +- Make sure an _Ingress_ resource gets created for the applications deployed and a _LoadBalancer_ hostname or IP address + is set on the Ingress resource + - Check the `external-dns` pod for any issues with ExternalDNS not inserting records. If required, change `logLevel` to debug to see additional info on the logs -## References +## Terraform -- [External DNS Home](https://github.com/kubernetes-sigs/external-dns) -- [External DNS Helm Chart](https://github.com/bitnami/charts/tree/master/bitnami/external-dns) +You can reference the External DNS pack in Terraform with the following data resource. + +```hcl +data "spectrocloud_registry" "palette_registry" { + name = "Palette Registry" +} + +data "spectrocloud_pack" "external-dns" { + name = "external-dns" + version = "0.13.6 + registry_uid = data.spectrocloud_registry.palette_registry.id +} +``` diff --git a/docs/docs-content/integrations/external-secrets-operator.md b/docs/docs-content/integrations/external-secrets-operator.md index ca263a2dd4..717b025ea1 100644 --- a/docs/docs-content/integrations/external-secrets-operator.md +++ b/docs/docs-content/integrations/external-secrets-operator.md @@ -10,40 +10,116 @@ logoUrl: "https://registry.spectrocloud.com/v1/external-secrets-operator/blobs/s tags: ["packs", "external-secrets-operator", "security"] --- -External Secrets Operator (ESO) is a Kubernetes operator that integrates external secret management systems like AWS -Secrets Manager, HashiCorp Vault, Google Secrets Manager, or Azure Key Vault. The operator reads information from -external APIs and automatically injects the values into a Kubernetes Secret. +## Versions Supported -You can use the External-Secrets-Operator Add-on pack as an authenticator in Palette. + + -:::info +#### Example Configuration -Starting from Palette version 3.1, Palette no longer supports upgrades to Kubernetes External Secrets since this is -reaching end of life. Migrate or switch to using External Secrets operator instead. +```yml +apiVersion: [external-secrets.io/v1beta1](http://external-secrets.io/v1beta1) +kind: ExternalSecret +metadata: + name: vault-example # Custom name +spec: + refreshInterval: "15s" + secretStoreRef: + name: vault-backend # Custom value + kind: SecretStore + target: + name: mysecretfoobar + data: + - secretKey: foobar + remoteRef: + key: secret/foo # custom value + property: my-value # custom value -::: +``` -## Versions Supported +```yml +apiVersion: external-secrets.io/v1beta1 +kind: SecretStore +metadata: + name: custom-name +spec: + provider: + vault: + server: "http://12.34.567.133:0000" # custom server end point + path: "secret" # custom path + version: "v2" # custom version + auth: + # points to a secret that contains a vault token + # https://www.vaultproject.io/docs/auth/token + tokenSecretRef: + name: "vault-token1" # Custom name and key + key: "token1" +--- +apiVersion: v1 +kind: Secret +metadata: + name: vault-token1 +data: + token: cm9vdA== # "root" # custome value +``` - + -- **0.7.1** -- **0.6.0** +#### Example Configuration - +```yml +apiVersion: [external-secrets.io/v1beta1](http://external-secrets.io/v1beta1) +kind: ExternalSecret +metadata: + name: vault-example # Custom name +spec: + refreshInterval: "15s" + secretStoreRef: + name: vault-backend # Custom value + kind: SecretStore + target: + name: mysecretfoobar + data: + - secretKey: foobar + remoteRef: + key: secret/foo # custom value + property: my-value # custom value - +``` -- **0.5.6** +```yml +apiVersion: external-secrets.io/v1beta1 +kind: SecretStore +metadata: + name: custom-name +spec: + provider: + vault: + server: "http://12.34.567.133:0000" # custom server end point + path: "secret" # custom path + version: "v2" # custom version + auth: + # points to a secret that contains a vault token + # https://www.vaultproject.io/docs/auth/token + tokenSecretRef: + name: "vault-token1" # Custom name and key + key: "token1" +--- +apiVersion: v1 +kind: Secret +metadata: + name: vault-token1 +data: + token: cm9vdA== # "root" # custome value +``` - -### Sample SecretStore + -
+#### Example Configuration ```yml apiVersion: [external-secrets.io/v1beta1](http://external-secrets.io/v1beta1) @@ -65,10 +141,6 @@ spec: ``` -### Sample ExternalSecret YAML file - -
- ```yml apiVersion: external-secrets.io/v1beta1 kind: SecretStore @@ -95,8 +167,21 @@ data: token: cm9vdA== # "root" # custome value ``` -## References +
+
+ +## Terraform + +You can reference the External Secrets Operator pack in Terraform with the following data resource. -- [Amazon IAM-Policy-Examples-ASM-Secrets](https://docs.aws.amazon.com/mediaconnect/latest/ug/iam-policy-examples-asm-secrets.html) +```hcl +data "spectrocloud_registry" "palette_registry" { + name = "Palette Registry" +} -- [External Secrets](https://github.com/external-secrets/external-secrets) +data "spectrocloud_pack" "external-secrets-operator" { + name = "external-secrets-operator" + version = "0.9.16" + registry_uid = data.spectrocloud_registry.palette_registry.id +} +``` diff --git a/docs/docs-content/integrations/falco.md b/docs/docs-content/integrations/falco.md index 15787d9a98..028b5d3563 100644 --- a/docs/docs-content/integrations/falco.md +++ b/docs/docs-content/integrations/falco.md @@ -6,27 +6,18 @@ hide_table_of_contents: true type: "integration" category: ["security", "amd64"] sidebar_class_name: "hide-from-sidebar" -logoUrl: "https://registry.spectrocloud.com/v1/falco/blobs/sha256:4e37461d0a31959ca8af65128329750ca3417e883e7e4ba17ee085b01a383a27?type=image.webp" tags: ["packs", "falco", "security"] --- -Falco integration is a behavioral activity monitor designed to detect anomalous activity in your applications. You can -use Falco to monitor the run-time security of your Kubernetes applications and internal components. - ## Versions Supported - + -- **1.16.3** - -- **1.0.11** -- **1.0.10** - @@ -37,6 +28,18 @@ use Falco to monitor the run-time security of your Kubernetes applications and i -## References +## Terraform + +You can reference the Falco pack in Terraform with the following data resource. + +```hcl +data "spectrocloud_registry" "palette_registry" { + name = "Palette Registry" +} -- [Falco Helm Chart GitHub](https://github.com/falcosecurity/charts/tree/master/charts/falco) +data "spectrocloud_pack" "external-dns" { + name = "falco" + version = "2.0.18" + registry_uid = data.spectrocloud_registry.palette_registry.id +} +``` diff --git a/docs/docs-content/integrations/gatekeeper.md b/docs/docs-content/integrations/gatekeeper.md new file mode 100644 index 0000000000..2f34d9b333 --- /dev/null +++ b/docs/docs-content/integrations/gatekeeper.md @@ -0,0 +1,54 @@ +--- +sidebar_label: "OpenPolicyAgent" +title: "Open Policy Agent" +description: "OpenPolicyAgent security pack in Spectro Cloud" +hide_table_of_contents: true +type: "integration" +category: ["security", "amd64", "arm64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: + 'https://registry.dev.spectrocloud.com/v1/open-policy-agent/blobs/sha256:fcbad202dc9ca5e7a756562d8f9fc180ee77474034447dabc302d8a5a2bbe148?type=image.webp" + alt="OpenPolicyAgent logo' +tags: ["packs", "open-policy-agent", "security"] +--- + +## Versions Supported + + + + + + + + + +**3.7.0** + + + + + + + + + + + + + +## Terraform + +You can retrieve details about the Gatekeeper pack by using the following Terraform code. + +```hcl +data "spectrocloud_registry" "public_addon_registry" { + name = "Spectro Addon Repo" +} + +data "spectrocloud_pack_simple" "gatekeeper" { + name = "gatekeeper" + version = "3.8.0" + type = "helm" + registry_uid = data.spectrocloud_registry.public_addon_registry.id +} +``` diff --git a/docs/docs-content/integrations/generic-byoi.md b/docs/docs-content/integrations/generic-byoi.md new file mode 100644 index 0000000000..2b1c7dee33 --- /dev/null +++ b/docs/docs-content/integrations/generic-byoi.md @@ -0,0 +1,60 @@ +--- +sidebar_label: "Bring Your Own OS (BYOOS)" +title: "Bring your own OS (BYOOS)" +description: "Bring Your Own OS (BYOOS) pack in Palette." +hide_table_of_contents: true +type: "integration" +category: ["operating system", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.dev.spectrocloud.com/v1/spectro-proxy/blobs/sha256:b6081bca439eeb01a8d43b3cb6895df4c088f80af978856ddc0da568e5c09365?type=image.webp" +tags: ["packs", "byoos", "operating system"] +--- + +## Versions Supported + + + + + +## Reference Custom Image + +Different infrastructure providers have different ways of referencing custom images. The following table provides +examples of how to reference custom images for different infrastructure providers. + +| Provider | Example Image ID | osImageOverride Value | Notes | +| -------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| AWS | `ami-0f4804aff4cf9c5a2` | `ami-0f4804aff4cf9c5a2` | Ensure the AMI is available in the same region as the workload cluster. | +| Azure | `https://docs.blob.core.windows.net/vhds/ubuntu20-1243.vhd` | `https://docs.blob.core.windows.net/vhds/ubuntu20-1243.vhd` | You must reference the Azure blob URL of a Virtual Hard Disk (VHD). Image Gallery ID reference is not supported. | +| Vmware vSphere | `r_u-2004-0-k-1243-0-new.ova` | `path/to/template/r_u-2004-0-k-1243-0-new.ova` | Point to the path to where the custom template is located. Palette and VerteX expect OVAs to have the `r_u-` prefix. | +| Vmware vSphere | `rhel-8-kube-v1.27.11` | `path/to/template/rhel-8-kube-v1.27.11` | Point to the path to where the custom template is located. | + +Image creation tools are available to help you create custom OS images for the infrastructure provider you are using. +The following is a list of commonly used tools for creating a custom OS: + +- [AWS EC2 Image Builder](https://aws.amazon.com/image-builder/). + +- [Azure VM Image Builder](https://learn.microsoft.com/en-us/azure/virtual-machines/image-builder-overview?tabs=azure-powershell). + +- [HashiCorp Packer](https://developer.hashicorp.com/packer). + +- [Kubernetes Image Builder (KIB)](https://image-builder.sigs.k8s.io/introduction.html). + + + + +## Terraform + +You can retrieve details about the BYOOS pack by using the following Terraform code. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "byoos" { + name = "generic-byoi" + version = "1.0.0" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/generic-vm-libvirt.md b/docs/docs-content/integrations/generic-vm-libvirt.md index 2f8a63d580..0294efeb66 100644 --- a/docs/docs-content/integrations/generic-vm-libvirt.md +++ b/docs/docs-content/integrations/generic-vm-libvirt.md @@ -10,52 +10,30 @@ logoUrl: "https://registry.spectrocloud.com/v1/generic-vm-libvirt/blobs/sha256:2 tags: ["packs", "generic-vm-libvirt", "system app"] --- -Generic-VM-Libvirt is a Palette Add-on pack used to simplify deploying the virtual machine applications from a cluster -profile or a system profile. Generic-VM-Libvirt extracts all Terraform constructs inside the pack and exposes nothing -but the values. Users will then have the ability to modify the add-on pack for the different applications. +## Versions Supported -## Version Supported - - + -- **1.0.2** -- **1.0.0** - - - - -
- -## Configuring Palette Generic VM Libvirt Add-on +### Configure VM Libvirt Add-on To configure the Generic-VM-Libvirt add-on pack for the application cluster, begin by editing the manifest namespace value. -`cluster-{{ .spectro.system.cluster.uid }}` - -**Example** - ```yaml -namespace: jet-system +namespace: cluster-{{ .spectro.system.cluster.uid }} ``` If multiple instances of this pack have to be deployed on the cluster for different virtual machine applications, then -modify '`spectrocloud.com/display-name`' and '`releaseNameOverride`' with distinctive names to make it unique across all -the packs in the cluster. - -
+modify `spectrocloud.com/display-name` and `releaseNameOverride` with distinctive names to make it unique across all the +packs in the cluster. ```yaml spectrocloud.com/display-name: vm-app-1 releaseNameOverride: ``` -
- -## Generic-VM-Libvirt Pack Manifest - -
+### Generic-VM-Libvirt Pack Manifest ```yaml pack: @@ -174,14 +152,12 @@ charts: # echo "I am post exec" ``` -## Virtual Machine Hooks +### Virtual Machine Hooks The Generic-VM-Libvirt pack supports various hooks, while deploying VM applications and supports multiple use-cases of customizing workflow, as customers require. -
- -## Using preExecCmd and postExecCmd +#### preExecCmd and postExecCmd The **preExecCmd** and **postExecCmd** commands will be executed in every pod reconciliation. The loop runs at approximately a 2-minute interval. @@ -189,8 +165,6 @@ approximately a 2-minute interval. If you want to run the command or script only, whenever the virtual machine is getting created or after the virtual machine is destroyed, use **preVMInitCmd** and **postVMInitCmd**, respectively. -
- ```yaml preExecCmd: "bash /var/files/pre-exec.sh" ``` @@ -199,17 +173,13 @@ preExecCmd: "bash /var/files/pre-exec.sh" postExecCmd: "bash /var/files/pre-exec.sh" ``` -
- -## Using preVMInitCmd and postVMInitCmd +#### preVMInitCmd and postVMInitCmd The **preVMInitCmd** command is executed, only when the virtual machine is being created or recreated. Likewise, the **postVMInitCmd** command is executed only after the virtual machine is created or recreated. **Note**: These commands will not be executed in each reconciliation. -
- ```yaml preVMInitCmd: "echo 'Hey! Hang on tight. I am gonna create a VM.'" ``` @@ -218,42 +188,30 @@ preVMInitCmd: "echo 'Hey! Hang on tight. I am gonna create a VM.'" postVMInitCmd: "echo 'Ooho! VM is created.'" ``` -
- -## Using preVMDestroyCmd +### preVMDestroyCmd Any command or script provided in this virtual machine hook will execute before the VM gets destroyed. It will be executed only when the VM is being deleted. A virtual machine deletion can happen for any reason, like changing anything in cloud-init or removing the pack from the profile. -
- ```yaml preVMDestroyCmd: "" ``` -
- :::info During a first-time deployment, preVMDestroyCmd will not be invoked. However, if there is any change in cloud-init, then the VM resource will be recreated, preVMDestroyCmd will be invoked before deleting the VM, and once preVMDestroyCmd is executed successfully, only then will the VM resource be deleted. -
-
Once the virtual machine is deleted and before another virtual machine is created, preVMInitCmd will be invoked. ::: -
- -## Files +### Files Files presented in this section will be added to the pod, where the pre-and-post exec hooks are executed. -
- ```yaml files: - name: pre-exec.sh @@ -270,16 +228,12 @@ extraDomainHclConfig: | } ``` -
- -## Mounts +### Mounts Mount the data inside the existing configuration maps or secrets into the pod as files, where pre-and-post hooks are executed. This allows the data present in the configuration map or the secrets file to be accessible while running pre-and-post exec hooks. -
- ```yaml mounts: configMap: @@ -294,16 +248,12 @@ mounts: path: /data/system-config-2 ``` -
- -## Environment Variables +### Environment Variables The ENVS section can inject data inside the existing config maps or secrets into the pod as environment variables, where pre-and post-hooks are executed so that data present in the config map or the secret file can be accessed while running pre-and-post exec hooks. -
- ```yaml envs: configMap: @@ -316,6 +266,22 @@ envs: dataKey: "db.password" ``` -## References +
+
+ +## Terraform -- [Libvirt Apps](https://libvirt.org/apps.html) +You can retrieve details about the Generic-VM-Libvirt pack by using the following Terraform code. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "gatekeeper" { + name = "generic-vm-libvirt" + version = "1.0.6" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/generic-vm-vsphere.md b/docs/docs-content/integrations/generic-vm-vsphere.md index 2fae567fda..cf54d59677 100644 --- a/docs/docs-content/integrations/generic-vm-vsphere.md +++ b/docs/docs-content/integrations/generic-vm-vsphere.md @@ -6,56 +6,34 @@ hide_table_of_contents: true type: "integration" category: ["system app", "amd64"] sidebar_class_name: "hide-from-sidebar" -logoUrl: "https://registry.spectrocloud.com/v1/generic-vm-vsphere/blobs/sha256:3b121dca3cbc7fed0153d3e1c8c3df20076ec200e091085a3a281ba08cb2261e?type=image.webp" tags: ["packs", "generic-vm-vsphere", "system app"] --- -Generic-VM-vSphere is a Palette Add-on pack used to simplify deploying the virtual machine resource from a cluster -profile or a system profile. Generic-VM-vSphere extracts all Terraform constructs inside the pack and exposes nothing -but the values. Users will then have the ability to modify the add-on pack for the different applications. +## Versions Supported -
- -## Version Supported - - + -- **1.0.4** -- **1.0.0** - - - - -
- -## Configuring Generic-VM-vSphere +### Configure Generic-VM-vSphere To configure the Generic-VM-vSphere Add-on pack for the application cluster, the namespace value should be as follows: -`cluster-{{ .spectro.system.cluster.uid }}`
+`cluster-{{ .spectro.system.cluster.uid }}` ```yaml namespace: cluster-{{ .spectro.system.cluster.uid }} ``` If multiple instances of this pack has to be deployed on the cluster for different virtual machine applications, then -modify '`spectrocloud.com/display-name`' and '`releaseNameOverride`' with different names to make it unique across all -the packs in the cluster. - -
+modify `spectrocloud.com/display-name` and `releaseNameOverride` with different names to make it unique across all the +packs in the cluster. ```yaml spectrocloud.com/display-name: vm-app-1 releaseNameOverride: ``` -
-
- -## Generic-VM-vSphere Pack Manifest - -
+### Generic-VM-vSphere Pack Manifest ```yaml pack: @@ -196,26 +174,24 @@ charts: # echo "I am post exec" ``` -## Virtual Machine Hooks +### Virtual Machine Hooks The Generic-VM-vSphere pack supports various hooks while deploying VM applications and supports multiple use-cases of customizing workflow, as customers require. -
- -## Using extraVMHclConfig +#### extraVMHclConfig The extraVMHclConfig command can be used to provide an extra configuration in the virtual machine and the configuration file should be provided in HashiCorp Configuration Language (HCL) format. -```terraform -# extraVMHclConfig: | -# cdrom { -# client_device = true -# } +```hcl +extraVMHclConfig: | + cdrom { + client_device = true + } ``` -## Using preExecCmd and postExecCmd +#### preExecCmd and postExecCmd The **preExecCmd** and **postExecCmd** commands will be executed in every pod reconciliation. The loop runs at approximately a 2-minute interval. @@ -223,8 +199,6 @@ approximately a 2-minute interval. **preExecCMD** and **postVMInitCmd** are used to execute commands or scripts prior to virtual machine creation and after virtual machine creation respectively. -
- ```yaml preExecCmd: "bash /var/files/pre-exec.sh" ``` @@ -233,16 +207,16 @@ preExecCmd: "bash /var/files/pre-exec.sh" postExecCmd: "bash /var/files/pre-exec.sh" ``` -
- -## Using preVMInitCmd and postVMInitCmd +#### preVMInitCmd and postVMInitCmd The **preVMInitCmd** command is executed, only when the virtual machine is being created or recreated. Likewise, the **postVMInitCmd** command is executed only after the virtual machine is created or recreated. -**Note**: These commands will not be executed in each reconciliation. +:::info + +These commands will not be executed in each reconciliation. -
+::: ```yaml preVMInitCmd: "echo 'Hey! Hang on tight. I am gonna create a VM.'" @@ -252,45 +226,32 @@ preVMInitCmd: "echo 'Hey! Hang on tight. I am gonna create a VM.'" postVMInitCmd: "echo 'Ooho! VM is created.'" ``` -
- -## Using preVMDestroyCmd +#### preVMDestroyCmd Any command or script provided in this virtual machine hook will execute before the virtual machine is destroyed. It will be executed only when the VM is getting deleted. A virtual machine deletion can happen for any reason, like changing anything in cloud-init or removing the pack from the profile. -
- ```yaml preVMDestroyCmd: "" ``` -
- :::info -During a first-time deployment, preVMDestroyCmd won't be invoked. However, if there is any change in cloud-init, -then the VM resource will be recreated, preVMDestroyCmd will be invoked before deleting the VM, and once preVMDestroyCmd -is executed successfully, only then the VM resource will be deleted. +During a first-time deployment, `preVMDestroyCmd` won't be invoked. However, if there is any change in cloud-init, then +the VM resource will be recreated, preVMDestroyCmd will be invoked before deleting the VM, and once preVMDestroyCmd is +executed successfully, only then the VM resource will be deleted. -
-
-Once the VM is deleted and before another virtual machine is created, preVMInitCmd will be invoked. +Once the VM is deleted and before another virtual machine is created, `preVMInitCmd` will be invoked. ::: -
-
- -## Mounts +### Mounts Mount the data inside the existing configuration map or secret into the pod as files, where pre-and-post hooks are executed. This allows the data present in the configuration map or the secrets file to be accessible while running pre-and-post exec hooks. -
- ```yaml mounts: configMap: @@ -305,16 +266,12 @@ mounts: # path: /data/system-config-2 ``` -
- -## Environment Variables +### Environment Variables The ENVS section can inject data inside the existing config maps or secrets into the pod as environment variables, where pre-and post-hooks are executed so that data present in the config map or the secret file can be accessed while running pre-and-post exec hooks. -
- ```yaml envs: configMap: @@ -327,14 +284,10 @@ envs: # dataKey: "db.password" ``` -
- -## Files +### Files Files present in this section will be added to the pod and will be accessible while executing pre-and-post execution -hooks and absolute file path would be '/var/files/\'. - -
+hooks and absolute file path would be `/var/files/file_name`. ```yaml files: @@ -348,4 +301,22 @@ files: # echo "I am post exec" ``` -
+
+
+ +## Terraform + +You can retrieve details about the Generic-VM-Libvirt pack by using the following Terraform code. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "gatekeeper" { + name = "generic-vm-vsphere" + version = "1.0.10" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/gke-csi-gcp-driver.md b/docs/docs-content/integrations/gke-csi-gcp-driver.md new file mode 100644 index 0000000000..894e1a4487 --- /dev/null +++ b/docs/docs-content/integrations/gke-csi-gcp-driver.md @@ -0,0 +1,42 @@ +--- +sidebar_label: "GKE GCE-Persistent-Disk" +title: "GKE GCE Persistent Disk" +description: "GCE Persistent Disk storage pack in Spectro Cloud for GKE" +hide_table_of_contents: true +type: "integration" +category: ["storage", "amd64"] +sidebar_class_name: "hide-from-sidebar" +tags: ["packs", "storage", "gce-persistent-disk"] +--- + +## Versions Supported + + + + + + + + + + + + + +## Terraform + +Use the following Terraform snippet to reference the GCE Persistent Disk for GKE pack in your Terraform code. + +```hcl + +data "spectrocloud_registry" "palette_registry_oci" { + name = "Palette Registry" +} + +data "spectrocloud_pack_simple" "cs-gcp-driver" { + name = "gke-csi-gcp-driver" + version = "1.0.0" + type = "helm" + registry_uid = data.spectrocloud_registry.palette_registry_oci.id +} +``` diff --git a/docs/docs-content/integrations/harbor-edge-native-config.md b/docs/docs-content/integrations/harbor-edge-native-config.md new file mode 100644 index 0000000000..4c1a03b4f2 --- /dev/null +++ b/docs/docs-content/integrations/harbor-edge-native-config.md @@ -0,0 +1,312 @@ +--- +sidebar_label: "harbor-edge" +title: "Harbor Edge Native Config" +description: "Harbor Edge Native Config pack in Spectro Cloud" +hide_table_of_contents: true +type: "integration" +category: ["system-app", "registry"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/harbor/blobs/sha256:5cf19a83449d41a6eb2398194dd4563d31d371074375255ba8a2fc4feff4ef33?type=image.webp" +tags: ["packs", "harbor-edge-native-config", "system-app"] +--- + +## Versions Supported + + + + +The Harbor Edge-Native Config pack is a system application pack. When you provision a cluster with a profile that +includes this pack, Palette automatically chooses the latest version of Harbor supported by Palette to install on the +cluster. You cannot manually choose a version of this pack. + +:::preview + +::: + +## Enable Harbor to Protect Against Outage + +You can use Harbor in an Edge cluster that is connected to external networks. Harbor stores all container images +downloaded from the internet and future image pulls from the cluster will be from the local harbor registry. If your +cluster experiences an internet outage, it can still reboot containers or add new nodes using images stored locally in +Harbor. For more information, refer to +[Deploy a Cluster with a Local Harbor Registry](../clusters/edge/site-deployment/deploy-custom-registries/local-registry.md). + +## Log in to Harbor Web UI + +With Harbor enabled on your Edge cluster, you can log in to Harbor via its web UI. By default, the Harbor service is +accessible as a NodePort-type service with HTTPS enabled on port `30003`. You can use the following steps to log in to +Harbor via the web UI. + +1. Log in to [Palette](https://console.spectrocloud.com). + +2. From the left **Main Menu**, navigate to **Clusters**. Choose your Edge cluster. + +3. Navigate to the **Nodes** tab, in the **Private Ips** column, you can find the IP addresses of your Edge hosts. + +4. Ensure you have network access to your Edge hosts. Open a new tab in your browser and navigate to + `https://NODE_IP:30003` and replace `NODE_IP` with any IP address in your cluster. NodePort-type services are exposed + on the same port on all nodes in your cluster. If you changed the HTTPS port in the configurations, replace the port + with the HTTPS port you used. + +5. If you didn't provide a certificate or used a self-signed certificate, your browser might warn you about an unsafe + connection. Dismiss the warning, and you will be directed to Harbor's web UI. If you use Google Chrome, you can click + anywhere in your browser tab and type `this is unsafe` using your keyboard to dismiss the warning. + +6. Type in `admin` as the username and your password to log in to Harbor. If you don't know your password, refer to + [Retrieve Harbor Credentials](#retrieve-harbor-credentials) to retrieve your password. + +## Retrieve Harbor Credentials + +During cluster creation, Palette creates two secrets that store the password used to authenticate the `admin` user in +Harbor and the X509 certificate used for TLS. You can access both of these credentials using the following steps: + +1. Configure kubectl to access your Kubernetes cluster. For more information, refer to + [Access a Cluster with CLI](../clusters/cluster-management/palette-webctl.md). + +2. Depending on the credential you want to retrieve, use the commands described below. + + + + +1. Issue the command `kubectl get namespaces` to get all namespaces. Look for a namespace called `cluster-CLUSTER-ID`, + where `CLUSTER-ID` is a string of alphanumeric characters. This is the namespace where the secret for your Harbor + password is stored. + +2. Issue the following command to get the password of your Harbor user. Replace `CLUSTER-ID-NAMESPACE` with the + namespace you identified in the previous step. This command outputs your password. + +```shell +kubectl get secret registry-info --namespace CLUSTER-ID-NAMESPACE --output jsonpath="{.data.SPECTRO_USER_PASSWORD}" | base64 --decode +``` + + + + +Issue the following command to retrieve the certificate. + +```shell +kubectl get secret harbor-tls --namespace harbor --output jsonpath="{.data.tls\.crt}" | base64 --decode +``` + + + + +Issue the following command to retrieve the private key. + +```shell +kubectl get secret harbor-tls --namespace harbor --output jsonpath="{.data.tls\.key}" | base64 --decode +``` + + + + +## Push and Pull Images to Harbor + +You can use the following steps to push images to and pull images from the Harbor registry. + +:::info + +If you didn't provide a certificate or are using a self-signed certificate, Docker will refuse to connect to the +registry unless you configure Docker to trust the certificate authority or use a insecure connection for your Harbor +registry. You can configure Docker to use a insecure connection by adding a line +`"insecure-registries": ["REGISTRY_URL"]` in your Docker `daemon.json` file. For more information about `daemon.json`, +refer to [Docker documentation](https://docs.docker.com/config/daemon/). + +::: + +1. Log in to [Palette](https://console.spectrocloud.com). + +2. From the left **Main Menu**, navigate to **Clusters**. Choose your Edge cluster. + +3. Navigate to the **Nodes** tab, in the **Private Ips** column, you can find the IP addresses of your Edge hosts. + +4. Ensure you have network access to your Edge hosts. Log in to Harbor from your command-line interface. The following + example uses Docker, but you can use any other image management tool. Replace `NODE_IP` with the IP address of any of + the nodes and replace `HARBOR_PASSWORD` with the password of your Harbor user. If you don't know your password, refer + to [Retrieve Harbor Credentials](#retrieve-harbor-credentials). + + ```shell + docker login NODE_IP:30003 --user admin --password HARBOR_PASSWORD + ``` + +5. After a successful login, you can start to pull and push images. + + + + To pull an image from the Harbor registry, issue the following command. + +```shell +docker pull REGISTRY_URL/PROJECT_NAME/IMAGE_NAME:TAG +``` + +For example, the following command pulls the image for `kube-vip` from the Harbor registry. + +```shell +docker pull 10.10.137.220:30003/spectro-images/gcr.io/spectro-images-public/kube-vip/kube-vip:v0.6.3 +``` + + + + + To push an image to the Harbor registry, first tag the image with your registry URL. + +```shell +docker tag LOCAL_IMAGE:LOCAL_IMAGE_TAG REGISTRY_URL/PROJECT_NAME/IMAGE_NAME:TAG +``` + +After tagging the image, you can push it to the Harbor registry. + +```shell +docker push REGISTRY_URL/PROJECT_NAME/IMAGE_NAME:TAG +``` + +For example, the following commands tag the local image `alpine:latest` and push it to the Harbor registry. + +``` +docker tag alpine:latest 10.10.137.220:30003/spectro-images/alpine:latest +docker push 10.10.137.220:30003/spectro-images/alpine:latest +``` + + + + +## Enable Image Download from Outside of Harbor + +If a cluster is configured with the Harbor Edge-Native Config pack, it will assume that all images will be stored in +Harbor once they are initially downloaded. However, it is important to note that only the images that are part of the +cluster profile and managed by Palette will be stored in the Harbor registry. Any images not managed by Palette will not +be available in the Harbor registry. + +This can cause issues if you want to use images that are not managed by Palette in your cluster. Harbor will not store +those images because they are not part of your cluster profile and were not requested by Palette. However, the Palette +agent in your Edge host will still try to pull those images from Harbor, resulting in ImagePullBackOff errors. + +You can apply the label `stylus.io/imageswap=disable` to a namespace, which instructs the Palette agent to not pull +images from the Harbor registry. You can do this when you create the namespace, or apply the label to existing +namespaces. As long as a namespace has the label, the Palette agent will not attempt to pull images in the namespace +from the Harbor registry. + +You can apply a label to a namespace by editing the pack YAML in the cluster's profile or use `kubectl` to add the label +through the command-line. + + + + +1. Connect to the cluster via `kubectl`. For more information, refer to + [Access Cluster with kubectl](../clusters/cluster-management/palette-webctl.md). + +2. Apply the `stylus.io/imageswap=disable` label to the namespace you plan to deploy resources in. Replace + `namespace-name` with the name of your namespace. + + ```shell + kubectl label namespace namespace-name stylus.io/imageswap=disable + ``` + +3. Deploy the resources into the namespace. Since the namespace has the label `stylus.io/imageswap=disable`, the Palette + agent will pull the image from registiries you specify instead of from the Harbor registry. + + If you already deployed the resources before applying the label, you will need to trigger another image pull action + as the label will only apply to subsequent image pulls after it has been applied. You can do this by issuing the + `kubectl apply` command again to reapply the manifest. Or use the `kubectl delete` command to delete the resource and + wait for it to be re-created. + + + + + +1. Log in to [Palette](https://console.spectrocloud.com). + +2. From the left **Main Menu**, click on **Profiles**. + +3. Select the profile you are using to deploy your cluster. + +4. Click on **Add Manifest** to add a new manifest to your cluster profile containing the namespaces you plan to deploy + resources to. Create a namespace if needed, and apply the label `stylus.io/imageswap=disable` to the namespace. Refer + to [Profile Customizations](../profiles/profile-customization.md) for more information on how to apply labels to + namespaces. For example, the following pack YAML creates a namespaced called `"wordpress"` and applies the label + `stylus.io/imageswap=disable` to the namespace. + + ```yaml + pack: + namespace: "wordpress" + + namespaceLabels: + "wordpress": "stylus.io/imageswap=disable" + ``` + +5. Deploy the resources into the namespace. Since the namespace has the label `stylus.io/imageswap=disable`, the Palette + agent will pull the image from registiries you specify instead of from the Harbor registry. + +## Troubleshooting + +### Scenario - Harbor DB Pod Fails to Start + +When you start a cluster with the Harbor pack, the **harbor-database** pod might fail to start and get stuck on the +**CrashLoopBackoff** state. It's possible that this is due to known issue with the Harbor pack related to file +permissions. The workaround is to delete the pod and a new pod will be automatically created. + +#### Debug Steps + +1. Issue the following command to identify the pods with names that start with `harbor-database`. + +```shell +kubectl get pods --namespace harbor --output wide +``` + +2. Delete the pod you identified in the previous step. Replace `POD_NAME` with the name of the pods. If there are + multiple pods, use the command for each pod. + +```shell +kubectl delete pod POD_NAME --namespace harbor +``` + + + + +## Troubleshooting + +### Scenario - Harbor DB Pod Fails to Start + +When you start a cluster with the Harbor pack, the **harbor-database** pod might fail to start and get stuck on the +**CrashLoopBackoff** state. It's possible that this is due to known issue with the Harbor pack related to file +permissions. The workaround is to delete the pod and a new pod will be automatically created. + +#### Debug Steps + +1. Issue the following command to identify the pods with names that start with `harbor-database`. + +```shell +kubectl get pods --namespace harbor --output wide +``` + +2. Delete the pod you identified in the previous step. Replace `POD_NAME` with the name of the pods. If there are + multiple pods, use the command for each pod. + +```shell +kubectl delete pod POD_NAME --namespace harbor +``` + +### Scenario - Cluster Stuck in the Provisioning State + +A cluster may get stuck in the provisioning state if it uses Longhorn as its storage layer. If this happens, remove the +cluster and try again. + + + + +## Terraform + +You can reference the Harbor Edge-Native Config pack in Terraform with a data resource. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "harbor-edge-native-config" { + name = "harbor-edge-native-config" + version = "1.0.0" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/heartbeat.md b/docs/docs-content/integrations/heartbeat.md index 2c36159582..093836382c 100644 --- a/docs/docs-content/integrations/heartbeat.md +++ b/docs/docs-content/integrations/heartbeat.md @@ -10,21 +10,18 @@ logoUrl: "https://registry.dev.spectrocloud.com/v1/heartbeat/blobs/sha256:19fec6 tags: ["packs", "heart-beat", "monitoring"] --- -Heartbeat is a lightweight daemon installed to a remote server for periodically checking the status of the services and -determine whether they are currently available and reachable. Heartbeat is useful to verify that your service level -agreements are met during the service uptime. +## Terraform -## Versions Supported +You can reference the Heartbeat pack in Terraform with the following data resource. - +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} - - -**1.0.0** - - - - -## References - -- [Heartbeat Reference Documentation](https://www.elastic.co/guide/en/beats/heartbeat/current/index.html) +data "spectrocloud_pack" "heartbeat" { + name = "heartbeat" + version = "1.0.0" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/hello-universe.md b/docs/docs-content/integrations/hello-universe.md index e1240677bd..af03dac30c 100644 --- a/docs/docs-content/integrations/hello-universe.md +++ b/docs/docs-content/integrations/hello-universe.md @@ -10,87 +10,12 @@ logoUrl: "https://raw.githubusercontent.com/spectrocloud/pack-central/main/packs tags: ["packs", "hello-universe", "app-services"] --- -[Hello Universe](https://github.com/spectrocloud/hello-universe) is a demo web application utilized to help users learn -more about [Palette](https://docs.spectrocloud.com/introduction) and its features. - -You can deploy it using two preset configurations: - -- A standalone front-end application. It provides a click counter that is saved locally and displays Spectro Cloud - themed images. -- A three-tier application with a front-end tier, API server, and PostgreSQL database. It provides a click counter that - is saved in the deployed database and displays Spectro Cloud themed images. You can read more about this configuration - on the Hello Universe - [README](https://github.com/spectrocloud/hello-universe?tab=readme-ov-file#reverse-proxy-with-kubernetes). - :::info The three-tier application configuration is only supported by version 1.1.2 of the pack. ::: -## Versions Supported - - - - - -## Prerequisites - -- A Palette account. - -- A cluster profile where the Hello Universe pack can be integrated. - -- A Palette cluster with port `:8080` available. If port 8080 is not available, you can set a different port in the - **values.yaml** file. - -- If you are using the **Enable Hello Universe API** preset, you will need the `:3000` port available on your cluster - too. Check out the [Usage](#usage) section for further details. - -- Ensure sufficient CPU resources within the cluster to allocate a minimum of 500 milliCPU and a maximum of 500 milliCPU - per replica. - -## Parameters - -The following parameters are applied to the **hello-universe.yaml** manifest through the **values.yaml** file. Users do -not need to take any additional actions regarding these parameters. - -| **Parameter** | **Description** | **Default Value** | **Required** | -| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ------------ | -| `manifests.namespace` | The namespace in which the application will be deployed. | `hello-universe` | Yes | -| `manifests.images.hellouniverse` | The [`hello-universe`](https://github.com/spectrocloud/hello-universe) application image that will be utilized to create the front-end containers. | `ghcr.io/spectrocloud/hello-universe:1.1.2`/ `ghcr.io/spectrocloud/hello-universe:1.1.2-proxy` | Yes | -| `manifests.images.hellouniverseapi` | The [`hello-universe-api`](https://github.com/spectrocloud/hello-universe-api) application image that will be utilized to create the API containers. | `ghcr.io/spectrocloud/hello-universe-api:1.0.12` | No | -| `manifests.images.hellouniversedb` | The [`hello-universe-db`](https://github.com/spectrocloud/hello-universe-db) application image that will be utilized to create the database containers. | `ghcr.io/spectrocloud/hello-universe-db:1.0.2` | No | -| `manifests.apiEnabled` | The flag that indicates whether to deploy the UI application as standalone or together with the API server. | `false` | Yes | -| `manifests.port` | The cluster port number on which the service will listen for incoming traffic. | `8080` | Yes | -| `manifests.replicas` | The number of Pods to be created. | `1` | Yes | -| `manifests.dbPassword` | The base64 encoded database password to connect to the API database. | `REPLACE_ME` | No | -| `manifests.authToken` | The base64 encoded auth token for the API connection. | `REPLACE_ME` | No | - -## Usage - -The Hello Universe pack has two presets that you can select: - -- **Disable Hello Universe API** configures Hello Universe as a standalone frontend application. This is the default - configuration of the pack. -- **Enable Hello Universe API** configures Hello Universe as a three-tier application with a frontend, API server, and - Postgres database. - -To utilize the Hello Universe pack, create either a -[full Palette cluster profile](https://docs.spectrocloud.com/profiles/cluster-profiles/create-cluster-profiles/create-full-profile) -or an -[add-on Palette cluster profile](https://docs.spectrocloud.com/profiles/cluster-profiles/create-cluster-profiles/create-addon-profile/) -and add the pack to your profile. You can select the preset you wish to deploy on the cluster profile creation page. - -If your infrastructure provider does not offer a native load balancer solution, such as VMware and MAAS, the -[MetalLB](https://docs.spectrocloud.com/integrations/metallb) pack must be included to the cluster profile to help the -LoadBalancer service specified in the manifest obtain an IP address. - -After defining the cluster profile, use it to deploy a new cluster or attach it as an add-on profile to an existing -cluster. - -Once the cluster status displays **Running** and **Healthy**, access the Hello Universe application through the exposed -service URL along with the displayed port number. - ## Terraform You can reference the Hello Universe pack in Terraform with the following data resource. @@ -105,75 +30,3 @@ data "spectrocloud_pack" "hellouniverse" { registry_uid = data.spectrocloud_registry.community_registry.id } ``` - - - - - -## Prerequisites - -- A Palette account. - -- A cluster profile where the Hello Universe pack can be integrated. - -- A Palette cluster with port `:8080` available. If port 8080 is not available, you can set a different port in the - **values.yaml** file. - -- Ensure sufficient CPU resources within the cluster to allocate a minimum of 100 milliCPU and a maximum of 200 milliCPU - per replica. - -## Parameters - -The following parameters are applied to the **hello-universe.yaml** manifest through the **values.yaml** file. Users do -not need to take any additional actions regarding these parameters. - -| **Parameter** | **Description** | **Default Value** | **Required** | -| --------------------------------- | ------------------------------------------------------------------------------ | ------------------------------------------- | ------------ | -| `manifests.namespace` | The namespace in which the application will be deployed. | `hello-universe` | No | -| `manifests.images.hello-universe` | The application image that will be utilized to create the containers. | `ghcr.io/spectrocloud/hello-universe:1.1.1` | No | -| `manifests.port` | The cluster port number on which the service will listen for incoming traffic. | `8080` | No | -| `manifests.replicas` | The number of Pods to be created. | `1` | No | - -## Usage - -To utilize the Hello Universe pack, create either a -[full Palette cluster profile](../profiles/cluster-profiles/create-cluster-profiles/create-full-profile.md) or an -[add-on Palette cluster profile](../profiles/cluster-profiles/create-cluster-profiles/create-addon-profile/create-addon-profile.md) -and add the pack to your profile. - -If your infrastructure provider does not offer a native load balancer solution, such as VMware and MAAS, the -[MetalLB](./metallb.md) pack must be included to the cluster profile to help the LoadBalancer service specified in the -manifest obtain an IP address. - -After defining the cluster profile, use it to deploy a new cluster or attach it as an add-on profile to an existing -cluster. - -Once the cluster status displays **Running** and **Healthy**, access the Hello Universe application through the exposed -service URL along with the displayed port number. - -## Terraform - -You can reference the Hello Universe pack in Terraform with the following data resource. - -```hcl -data "spectrocloud_registry" "community_registry" { - name = "Palette Registry" -} -data "spectrocloud_pack" "hellouniverse" { - name = "hello-universe" - version = "1.1.1" - registry_uid = data.spectrocloud_registry.community_registry.id -} -``` - - - - - -## References - -- [Hello Universe GitHub Repository](https://github.com/spectrocloud/hello-universe) - -- [Deploy a Custom Pack Tutorial](../tutorials/profiles/deploy-pack.md) - -- [Registries and Packs](../registries-and-packs/registries-and-packs.md) diff --git a/docs/docs-content/integrations/istio.md b/docs/docs-content/integrations/istio.md index be0c9df945..69dc493f1e 100644 --- a/docs/docs-content/integrations/istio.md +++ b/docs/docs-content/integrations/istio.md @@ -10,29 +10,29 @@ logoUrl: "https://registry.spectrocloud.com/v1/istio/blobs/sha256:c80cf596d48592 tags: ["packs", "istio", "network"] --- -This Integration aims to automate and simplify the rollout of the various Istio components which helps with service mesh -use cases. - ## Versions Supported - + -- **1.14.3** -- **1.14.1** - - +## Pack Components - +The integration deploys the Istio Operator with the 'demo' profile which deploys the following components: -- **1.6.2** +- Istiod +- Istio Ingress Gateway +- Istio Egress Gateway +- Grafana +- Prometheus +- Istio Tracing +- Kiali - + -## Contents +## Pack Components The integration deploys the Istio Operator with the 'demo' profile which deploys the following components: @@ -44,10 +44,22 @@ The integration deploys the Istio Operator with the 'demo' profile which deploys - Istio Tracing - Kiali -## References + + + + +## Terraform -- [Istio Home](https://istio.io) +You can reference the Istio pack in Terraform with the following data resource. -- [Istio Documentation](https://istio.io/latest/docs) +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} -- [Istio Operator GitHub](https://github.com/istio/operator) +data "spectrocloud_pack" "istio" { + name = "istio" + version = "1.20.1" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/k8s-dashboard.md b/docs/docs-content/integrations/k8s-dashboard.md new file mode 100644 index 0000000000..49998681ad --- /dev/null +++ b/docs/docs-content/integrations/k8s-dashboard.md @@ -0,0 +1,501 @@ +--- +sidebar_label: "Kubernetes Dashboard" +title: "Kubernetes Dashboard" +description: + "Learn how to manage Kubernetes clusters and applications deployed in them by using the Kubernetes Dashboard + Monitoring pack." +type: "integration" +hide_table_of_contents: true +category: ["monitoring", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/k8s-dashboard/blobs/sha256:2de5d88b2573af42d4cc269dff75744c4174ce47cbbeed5445e51a2edd8b7429?type=image.webp" +tags: ["packs", "kubernetes-dashboard", "monitoring"] +--- + +## Versions Supported + + + + + +:::warning + +Starting with Kubernetes Dashboard version 2.7.0, the **Connect** button is no longer available. For an optimized +experience, we recommend you use the pre-configured version of this dashboard, called Spectro Kubernetes Dashboard pack. +To learn more about it and start using it, check out the [Spectro Kubernetes Dashboard](spectro-k8s-dashboard.md) guide. + +::: + +## Access Kubernetes Dashboard + + +The Kubernetes Dashboard pack requires the pack, which serves as a reverse proxy to expose the Kubernetes dashboard. You must configure the Spectro Proxy pack. + +When connected to the cluster remotely, issue the following command to establish a connection to deploy the Kubernetes +Dashboard on port 8080. + + +```bash +kubectl port-forward -namespace kubernetes-dashboard service/kubernetes-dashboard 8080:443 +``` + +To access Kubernetes Dashboard, navigate to `https://localhost:8080` in a browser of your choice. + +From the Dashboard login page, run the following command from the terminal window to obtain the bearer token: + +```bash +kubectl -namespace kubernetes-dashboard describe secret \ +$(kubectl -namespace kubernetes-dashboard get secret | grep kubernetes-dashboard-token | awk '{print $1}') +``` + +The following example shows the command output with the token value. + +```yaml +Name: kubernetes-dashboard-token-h4lnf +Namespace: kubernetes-dashboard +Labels: +Annotations: kubernetes.io/service-account.name: kubernetes-dashboard + kubernetes.io/service-account.uid: 00e729f1-6638-4e68-8df5-afa2e2e38095 + +Type: kubernetes.io/service-account-token + +Data +==== +ca.crt: 1029 bytes +namespace: 20 bytes +token: eyJhbGciOiJSUzI1NiIsImtpZCI6Ilg1bTg3RWM4Y1c3NnhkQ3dXbXNDUXQydVpYQklRUWoxa1BaS0ctVkVTSDQifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi1oNGxuZiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjAwZTcyOWYxLTY2MzgtNGU2OC04ZGY1LWFmYTJlMmUzODA5NSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.JU4GOJNjGpkHabUyxBt_2rvtXNjpR3w238BF2oMCQUNf_ZkUGSMeAAgIKxbAuk62dtJNDaRh5yAZ9J5KthMcU6k4qVmodUOJdlvigBVNjTDEhPM-sqJus62HMtwjpvm0CX-aP_A_BqHs2yJ3OgXSX0uHmkUO1FMoZSVaRpOvx7f5bPswxd87L3npuZt4p-NJIX32-DGjBnxdANAHcWil3YHIUbDgQIdjDfN6stGU_JByvzfCJpNCWWDinr772W7iZ3uA28F8uGS0ZMd1E5e1moEFBY8BM015Qxg2Y_k7lmv9S8GMkBJyTiJNiqnwLwfsiE1ycE4Tgq_vuQfFToIMNw +``` + +## Configure Ingress + +Use the following steps to configure ingress for the Kubernetes Dashboard pack. + +1. Ensure the `service.type` parameter is set to "ClusterIP". + +2. To enable ingress, set the `ingress.enabled` parameter to "true". + +3. Set ingress rules, such as annotations, path, hosts, and any other rules. + +This allows you to access the Kubernetes Dashboard in hostname or IP format using the IP address that the ingress +controller exposes. + +Typically you would point a DNS CNAME record to the ingress controller IP. Talk to your system administrator to learn +more about which hostname to use. + +## Configure LoadBalancer + +Use the `service.loadBalancerIP` and `service.externalPort` parameters to connect to the Kubernetes Dashboard. + +## Troubleshooting + +### Scenario - Kubernetes Dashboard not Accessible + +If the Kubernetes Dashboard is not accessible, check the dashboard pod for errors and ensure the dashboard service is in +the **Running** state. + + + + + +:::warning + +Starting with Kubernetes Dashboard version 2.7.0, the **Connect** button is no longer available. For an optimized +experience, we recommend you use the pre-configured version of this dashboard, called Spectro Kubernetes Dashboard pack. +To learn more about it and start using it, check out the [Spectro Kubernetes Dashboard](spectro-k8s-dashboard.md) guide. + +::: + +## Access Kubernetes Dashboard + + +The Kubernetes Dashboard pack requires the pack, which serves as a reverse proxy to expose the Kubernetes dashboard. You must configure the Spectro Proxy pack. + +When connected to the cluster remotely, issue the following command to establish a connection to deploy the Kubernetes +Dashboard on port 8080. + + +```bash +kubectl port-forward -namespace kubernetes-dashboard service/kubernetes-dashboard 8080:443 +``` + +To access Kubernetes Dashboard, navigate to `https://localhost:8080` in a browser of your choice. + +From the Dashboard login page, run the following command from the terminal window to obtain the bearer token: + +```bash +kubectl -namespace kubernetes-dashboard describe secret $(kubectl -namespace kubernetes-dashboard get secret | grep kubernetes-dashboard-token | awk '{print $1}') +``` + +The following example shows the command output with the token value. + +```yaml +Name: kubernetes-dashboard-token-h4lnf +Namespace: kubernetes-dashboard +Labels: +Annotations: kubernetes.io/service-account.name: kubernetes-dashboard + kubernetes.io/service-account.uid: 00e729f1-6638-4e68-8df5-afa2e2e38095 + +Type: kubernetes.io/service-account-token + +Data +==== +ca.crt: 1029 bytes +namespace: 20 bytes +token: eyJhbGciOiJSUzI1NiIsImtpZCI6Ilg1bTg3RWM4Y1c3NnhkQ3dXbXNDUXQydVpYQklRUWoxa1BaS0ctVkVTSDQifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi1oNGxuZiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjAwZTcyOWYxLTY2MzgtNGU2OC04ZGY1LWFmYTJlMmUzODA5NSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.JU4GOJNjGpkHabUyxBt_2rvtXNjpR3w238BF2oMCQUNf_ZkUGSMeAAgIKxbAuk62dtJNDaRh5yAZ9J5KthMcU6k4qVmodUOJdlvigBVNjTDEhPM-sqJus62HMtwjpvm0CX-aP_A_BqHs2yJ3OgXSX0uHmkUO1FMoZSVaRpOvx7f5bPswxd87L3npuZt4p-NJIX32-DGjBnxdANAHcWil3YHIUbDgQIdjDfN6stGU_JByvzfCJpNCWWDinr772W7iZ3uA28F8uGS0ZMd1E5e1moEFBY8BM015Qxg2Y_k7lmv9S8GMkBJyTiJNiqnwLwfsiE1ycE4Tgq_vuQfFToIMNw +``` + +## Configure Ingress + +Use the following steps to configure ingress for the Kubernetes Dashboard pack. + +1. Ensure the `service.type` parameter is set to "ClusterIP". + +2. To enable ingress, set the `ingress.enabled` parameter to "true". + +3. Set ingress rules, such as annotations, path, hosts, and any other rules. + +This allows you to access the Kubernetes Dashboard in hostname or IP format using the IP address that the ingress +controller exposes. + +Typically you would point a DNS CNAME record to the ingress controller IP. Talk to your system administrator to learn +more about which hostname to use. + +## Configure LoadBalancer + +Use the `service.loadBalancerIP` and `service.externalPort` parameters to connect to the Kubernetes Dashboard. + +## Troubleshooting + +### Scenario - Kubernetes Dashboard not Accessible + +If the Kubernetes Dashboard is not accessible, check the dashboard pod for errors and ensure the dashboard service is in +the **Running** state. + + + + + +:::warning + +Starting with Kubernetes Dashboard version 2.7.0, the **Connect** button is no longer available. For an optimized +experience, we recommend you use the pre-configured version of this dashboard, called Spectro Kubernetes Dashboard pack. +To learn more about it and start using it, check out the [Spectro Kubernetes Dashboard](spectro-k8s-dashboard.md) guide. + +::: + +## Access Kubernetes Dashboard + + +The Kubernetes Dashboard pack requires the pack, which serves as a reverse proxy to expose the Kubernetes dashboard. You must configure the Spectro Proxy pack. + +When connected to the cluster remotely, issue the following command to establish a connection to deploy the Kubernetes +Dashboard on port 8080. + + +```bash +kubectl port-forward -namespace kubernetes-dashboard service/kubernetes-dashboard 8080:443 +``` + +To access Kubernetes Dashboard, navigate to `https://localhost:8080` in a browser of your choice. + +From the Dashboard login page, run the following command from the terminal window to obtain the bearer token: + +```bash +kubectl -namespace kubernetes-dashboard describe secret $(kubectl -namespace kubernetes-dashboard get secret | grep kubernetes-dashboard-token | awk '{print $1}') +``` + +The following example shows the command output with the token value. + +```yaml +Name: kubernetes-dashboard-token-h4lnf +Namespace: kubernetes-dashboard +Labels: +Annotations: kubernetes.io/service-account.name: kubernetes-dashboard + kubernetes.io/service-account.uid: 00e729f1-6638-4e68-8df5-afa2e2e38095 + +Type: kubernetes.io/service-account-token + +Data +==== +ca.crt: 1029 bytes +namespace: 20 bytes +token: eyJhbGciOiJSUzI1NiIsImtpZCI6Ilg1bTg3RWM4Y1c3NnhkQ3dXbXNDUXQydVpYQklRUWoxa1BaS0ctVkVTSDQifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi1oNGxuZiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjAwZTcyOWYxLTY2MzgtNGU2OC04ZGY1LWFmYTJlMmUzODA5NSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.JU4GOJNjGpkHabUyxBt_2rvtXNjpR3w238BF2oMCQUNf_ZkUGSMeAAgIKxbAuk62dtJNDaRh5yAZ9J5KthMcU6k4qVmodUOJdlvigBVNjTDEhPM-sqJus62HMtwjpvm0CX-aP_A_BqHs2yJ3OgXSX0uHmkUO1FMoZSVaRpOvx7f5bPswxd87L3npuZt4p-NJIX32-DGjBnxdANAHcWil3YHIUbDgQIdjDfN6stGU_JByvzfCJpNCWWDinr772W7iZ3uA28F8uGS0ZMd1E5e1moEFBY8BM015Qxg2Y_k7lmv9S8GMkBJyTiJNiqnwLwfsiE1ycE4Tgq_vuQfFToIMNw +``` + +## Configure Ingress + +Use the following steps to configure ingress for the Kubernetes Dashboard pack. + +1. Ensure the `service.type` parameter is set to "ClusterIP". + +2. To enable ingress, set the `ingress.enabled` parameter to "true". + +3. Set ingress rules, such as annotations, path, hosts, and any other rules. + +This allows you to access the Kubernetes Dashboard in hostname or IP format using the IP address that the ingress +controller exposes. + +Typically you would point a DNS CNAME record to the ingress controller IP. Talk to your system administrator to learn +more about which hostname to use. + +## Configure LoadBalancer + +Use the `service.loadBalancerIP` and `service.externalPort` parameters to connect to the Kubernetes Dashboard. + +## Troubleshooting + +### Scenario - Kubernetes Dashboard not Accessible + +If the Kubernetes Dashboard is not accessible, check the dashboard pod for errors and ensure the dashboard service is in +the **Running** state. + + + + + +:::warning + +Starting with Kubernetes Dashboard version 2.7.0, the **Connect** button is no longer available. For an optimized +experience, we recommend you use the pre-configured version of this dashboard, called Spectro Kubernetes Dashboard pack. +To learn more about it and start using it, check out the [Spectro Kubernetes Dashboard](spectro-k8s-dashboard.md) guide. + +::: + +## Access Kubernetes Dashboard + +When connected to the cluster remotely, run the following command to establish a connection to to deploy the Kubernetes +Dashboard on port 80. + +```bash +kubectl port-forward -namespace kubernetes-dashboard service/kubernetes-dashboard 8080:443 +``` + +To access Kubernetes Dashboard, navigate to `https://localhost:8080` in a browser of your choice. + +From the Dashboard login page, run the following command from the terminal window to obtain the bearer token: + +```bash +kubectl -namespace kubernetes-dashboard describe secret $(kubectl -namespace kubernetes-dashboard get secret | grep kubernetes-dashboard-token | awk '{print $1}') +``` + +The following example shows the command output with the token value. + +```yaml +Name: kubernetes-dashboard-token-h4lnf +Namespace: kubernetes-dashboard +Labels: +Annotations: kubernetes.io/service-account.name: kubernetes-dashboard + kubernetes.io/service-account.uid: 00e729f1-6638-4e68-8df5-afa2e2e38095 + +Type: kubernetes.io/service-account-token + +Data +==== +ca.crt: 1029 bytes +namespace: 20 bytes +token: eyJhbGciOiJSUzI1NiIsImtpZCI6Ilg1bTg3RWM4Y1c3NnhkQ3dXbXNDUXQydVpYQklRUWoxa1BaS0ctVkVTSDQifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi1oNGxuZiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjAwZTcyOWYxLTY2MzgtNGU2OC04ZGY1LWFmYTJlMmUzODA5NSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.JU4GOJNjGpkHabUyxBt_2rvtXNjpR3w238BF2oMCQUNf_ZkUGSMeAAgIKxbAuk62dtJNDaRh5yAZ9J5KthMcU6k4qVmodUOJdlvigBVNjTDEhPM-sqJus62HMtwjpvm0CX-aP_A_BqHs2yJ3OgXSX0uHmkUO1FMoZSVaRpOvx7f5bPswxd87L3npuZt4p-NJIX32-DGjBnxdANAHcWil3YHIUbDgQIdjDfN6stGU_JByvzfCJpNCWWDinr772W7iZ3uA28F8uGS0ZMd1E5e1moEFBY8BM015Qxg2Y_k7lmv9S8GMkBJyTiJNiqnwLwfsiE1ycE4Tgq_vuQfFToIMNw +``` + +## Configure Ingress + +Use the following steps to configure ingress for the Kubernetes Dashboard pack. + +1. Ensure the `service.type` parameter is set to "ClusterIP". + +2. To enable ingress, set the `ingress.enabled` parameter to "true". + +3. Set ingress rules, such as annotations, path, hosts, and any other rules. + +This allows you to access the Kubernetes Dashboard in hostname or IP format using the IP address that the ingress +controller exposes. + +Typically you would point a DNS CNAME record to the ingress controller IP. Talk to your system administrator to learn +more about which hostname to use. + +## Configure LoadBalancer + +Use the `service.loadBalancerIP` and `service.externalPort` parameters to connect to the Kubernetes Dashboard. + +## Troubleshooting + +### Scenario - Kubernetes Dashboard not Accessible + +If the Kubernetes Dashboard is not accessible, check the dashboard pod for errors and ensure the dashboard service is in +the **Running** state. + + + + + +:::warning + +Starting with Kubernetes Dashboard version 2.7.0, the **Connect** button is no longer available. For an optimized +experience, we recommend you use the pre-configured version of this dashboard, called Spectro Kubernetes Dashboard pack. +To learn more about it and start using it, check out the [Spectro Kubernetes Dashboard](spectro-k8s-dashboard.md) guide. + +::: + +## Access Kubernetes Dashboard + + +The Kubernetes Dashboard pack requires the pack, which serves as a reverse proxy to expose the Kubernetes dashboard. You must configure the Spectro Proxy pack. + +When connected to the cluster remotely, run the following command to establish a connection to to deploy the Kubernetes +Dashboard on port 80. + + +```bash +kubectl port-forward -namespace kubernetes-dashboard service/kubernetes-dashboard 8080:443 +``` + +To access Kubernetes Dashboard, navigate to `https://localhost:8080` in a browser of your choice. + +From the Dashboard login page, run the following command from the terminal window to obtain the bearer token: + +```bash +kubectl -namespace kubernetes-dashboard describe secret $(kubectl -namespace kubernetes-dashboard get secret | grep kubernetes-dashboard-token | awk '{print $1}') +``` + +The following example shows the command output with the token value. + +```yaml +Name: kubernetes-dashboard-token-h4lnf +Namespace: kubernetes-dashboard +Labels: +Annotations: kubernetes.io/service-account.name: kubernetes-dashboard + kubernetes.io/service-account.uid: 00e729f1-6638-4e68-8df5-afa2e2e38095 + +Type: kubernetes.io/service-account-token + +Data +==== +ca.crt: 1029 bytes +namespace: 20 bytes +token: eyJhbGciOiJSUzI1NiIsImtpZCI6Ilg1bTg3RWM4Y1c3NnhkQ3dXbXNDUXQydVpYQklRUWoxa1BaS0ctVkVTSDQifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi1oNGxuZiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjAwZTcyOWYxLTY2MzgtNGU2OC04ZGY1LWFmYTJlMmUzODA5NSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.JU4GOJNjGpkHabUyxBt_2rvtXNjpR3w238BF2oMCQUNf_ZkUGSMeAAgIKxbAuk62dtJNDaRh5yAZ9J5KthMcU6k4qVmodUOJdlvigBVNjTDEhPM-sqJus62HMtwjpvm0CX-aP_A_BqHs2yJ3OgXSX0uHmkUO1FMoZSVaRpOvx7f5bPswxd87L3npuZt4p-NJIX32-DGjBnxdANAHcWil3YHIUbDgQIdjDfN6stGU_JByvzfCJpNCWWDinr772W7iZ3uA28F8uGS0ZMd1E5e1moEFBY8BM015Qxg2Y_k7lmv9S8GMkBJyTiJNiqnwLwfsiE1ycE4Tgq_vuQfFToIMNw +``` + +## Configure Ingress + +Use the following steps to configure ingress for the Kubernetes Dashboard pack. + +1. Ensure the `service.type` parameter is set to "ClusterIP". + +2. To enable ingress, set the `ingress.enabled` parameter to "true". + +3. Set ingress rules, such as annotations, path, hosts, and any other rules. + +This allows you to access the Kubernetes Dashboard in hostname or IP format using the IP address that the ingress +controller exposes. + +Typically you would point a DNS CNAME record to the ingress controller IP. Talk to your system administrator to learn +more about which hostname to use. + +## Configure LoadBalancer + +Use the `service.loadBalancerIP` and `service.externalPort` parameters to connect to the Kubernetes Dashboard. + +## Troubleshooting + +### Scenario - Kubernetes Dashboard not Accessible + +If the Kubernetes Dashboard is not accessible, check the dashboard pod for errors and ensure the dashboard service is in +the **Running** state. + + + + + +:::warning + +Starting with Kubernetes Dashboard version 2.7.0, the **Connect** button is no longer available. For an optimized +experience, we recommend you use the pre-configured version of this dashboard, called Spectro Kubernetes Dashboard pack. +To learn more about it and start using it, check out the [Spectro Kubernetes Dashboard](spectro-k8s-dashboard.md) guide. + +::: + +## Access Kubernetes Dashboard + + +The Kubernetes Dashboard pack requires the pack, which serves as a reverse proxy to expose the Kubernetes dashboard. You must configure the Spectro Proxy pack. + +When connected to the cluster remotely, run the following command to establish a connection to to deploy the Kubernetes +Dashboard on port 80. + + +```bash +kubectl port-forward -namespace kubernetes-dashboard service/kubernetes-dashboard 8080:443 +``` + +To access Kubernetes Dashboard, navigate to `https://localhost:8080` in a browser of your choice. + +From the Dashboard login page, run the following command from the terminal window to obtain the bearer token: + +```bash +kubectl -namespace kubernetes-dashboard describe secret $(kubectl -namespace kubernetes-dashboard get secret | grep kubernetes-dashboard-token | awk '{print $1}') +``` + +The following example shows the command output with the token value. + +```yaml +Name: kubernetes-dashboard-token-h4lnf +Namespace: kubernetes-dashboard +Labels: +Annotations: kubernetes.io/service-account.name: kubernetes-dashboard + kubernetes.io/service-account.uid: 00e729f1-6638-4e68-8df5-afa2e2e38095 + +Type: kubernetes.io/service-account-token + +Data +==== +ca.crt: 1029 bytes +namespace: 20 bytes +token: eyJhbGciOiJSUzI1NiIsImtpZCI6Ilg1bTg3RWM4Y1c3NnhkQ3dXbXNDUXQydVpYQklRUWoxa1BaS0ctVkVTSDQifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi1oNGxuZiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjAwZTcyOWYxLTY2MzgtNGU2OC04ZGY1LWFmYTJlMmUzODA5NSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.JU4GOJNjGpkHabUyxBt_2rvtXNjpR3w238BF2oMCQUNf_ZkUGSMeAAgIKxbAuk62dtJNDaRh5yAZ9J5KthMcU6k4qVmodUOJdlvigBVNjTDEhPM-sqJus62HMtwjpvm0CX-aP_A_BqHs2yJ3OgXSX0uHmkUO1FMoZSVaRpOvx7f5bPswxd87L3npuZt4p-NJIX32-DGjBnxdANAHcWil3YHIUbDgQIdjDfN6stGU_JByvzfCJpNCWWDinr772W7iZ3uA28F8uGS0ZMd1E5e1moEFBY8BM015Qxg2Y_k7lmv9S8GMkBJyTiJNiqnwLwfsiE1ycE4Tgq_vuQfFToIMNw +``` + +## Configure Ingress + +Use the following steps to configure ingress for the Kubernetes Dashboard pack. + +1. Ensure the `service.type` parameter is set to "ClusterIP". + +2. To enable ingress, set the `ingress.enabled` parameter to "true". + +3. Set ingress rules, such as annotations, path, hosts, and any other rules. + +This allows you to access the Kubernetes Dashboard in hostname or IP format using the IP address that the ingress +controller exposes. + +Typically you would point a DNS CNAME record to the ingress controller IP. Talk to your system administrator to learn +more about which hostname to use. + +## Configure LoadBalancer + +Use the `service.loadBalancerIP` and `service.externalPort` parameters to connect to the Kubernetes Dashboard. + +## Troubleshooting + +### Scenario - Kubernetes Dashboard not Accessible + +If the Kubernetes Dashboard is not accessible, check the dashboard pod for errors and ensure the dashboard service is in +the **Running** state. + + + + + +## Terraform + +You can reference the Kubernetes Dashboard pack in Terraform with the following data resource. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack" "k8s-dashboard" { + name = "k8s-dashboard" + version = "2.7.0" + type = "monitoring" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/kong.md b/docs/docs-content/integrations/kong.md index 369b5fb7d2..52f0129a54 100644 --- a/docs/docs-content/integrations/kong.md +++ b/docs/docs-content/integrations/kong.md @@ -10,33 +10,18 @@ logoUrl: "https://registry.spectrocloud.com/v1/kong/blobs/sha256:600f20583f85cca tags: ["packs", "kong", "network"] --- -The Kong integration is an Ingress Controller for Kubernetes that configures ingress with a load balancer. You can use -the Kong as an application load balancer for your application. +## Terraform -## Version Supported +You can reference the Kong pack in Terraform with the following data resource. - +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} - - -- **2.13.1** - - - - - -- **1.4.0** - - - - - -## Components - -The integration adds the Kong Ingress Controller, which exposes a Kubernetes service of type LoadBalancer. - -## References - -- [Kong Ingress Controller Documentation ](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers) - -- [Kong GitHub](https://github.com/Kong/kubernetes-ingress-controller) +data "spectrocloud_pack" "kong" { + name = "kong" + version = "2.38.0" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/kubebench.md b/docs/docs-content/integrations/kubebench.md index 26a00e2d45..2b3bbbc7cb 100644 --- a/docs/docs-content/integrations/kubebench.md +++ b/docs/docs-content/integrations/kubebench.md @@ -10,24 +10,18 @@ logoUrl: https://registry-addon.spectrocloud.com/v1/kube-bench/blobs/sha256:28c2 tags: ["packs", "kube-bench", "security"] --- -Palette executes kube-bench, a CIS Benchmark scanner by Aqua Security, for every Kubernetes pack to ensure the control -plane and worker nodes are configured securely. It is available as an Add-on layer within Palette. +## Terraform -kube-bench runs against a series of checks specified in a `controls` YAML file. For more information on how to write -tests and config files, refer to the [controls](https://github.com/aquasecurity/kube-bench/blob/main/docs/controls.md) -section. +You can reference the Kube-bench pack in Terraform with the following data resource. -## Versions Supported +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} - - - - -- **0.6.8** - - - - -## References - -- [kube-bench GitHub](https://github.com/aquasecurity/kube-bench/blob/main/docs/running.md#running-kube-bench) +data "spectrocloud_pack" "kubebench" { + name = "kubebench" + version = "1.16.7" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/kubehunter.md b/docs/docs-content/integrations/kubehunter.md index ea72bf5784..7205631391 100644 --- a/docs/docs-content/integrations/kubehunter.md +++ b/docs/docs-content/integrations/kubehunter.md @@ -10,22 +10,18 @@ logoUrl: "https://registry.dev.spectrocloud.com/v1/kubehunter/blobs/sha256:6b6b9 tags: ["packs", "kube-hunter", "security"] --- -Kube Hunter is an open-source tool that hunts for security issues in your Kubernetes clusters. It’s designed to increase -awareness and visibility of the security controls in Kubernetes environments. Kube-hunter probes a domain or address -range for open Kubernetes-related ports, and tests for any configuration issues that leave your cluster exposed to -attackers. It can be run on a machine in the cluster, and select the option to probe all the local network interfaces. +## Terraform -## Versions Supported +You can reference the Kube-hunter pack in Terraform with the following data resource. - +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} - - -**1.0.3** - - - - -## References - -- [kube-hunter GitHub](https://github.com/aquasecurity/kube-hunter/) +data "spectrocloud_pack" "kubehunter" { + name = "kubehunter" + version = "1.0.3" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/kubernetes-aks.md b/docs/docs-content/integrations/kubernetes-aks.md new file mode 100644 index 0000000000..2e6a18b2be --- /dev/null +++ b/docs/docs-content/integrations/kubernetes-aks.md @@ -0,0 +1,29 @@ +--- +sidebar_label: "Kubernetes" +title: "Kubernetes" +description: "Learn about the Kubernetes pack and how you can use it with your host clusters." +hide_table_of_contents: true +type: "integration" +category: ["kubernetes", "amd64"] +sidebar_class_name: "hide-from-sidebar" +tags: ["packs", "kubernetes"] +--- + + + +## Terraform + +You can retrieve details about the Kubernetes pack for AWS EKS by using the following Terraform code. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "k8s" { + name = "kubernetes-aks" + version = "1.29" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/kubernetes-custom.md b/docs/docs-content/integrations/kubernetes-custom.md new file mode 100644 index 0000000000..e9d84362bd --- /dev/null +++ b/docs/docs-content/integrations/kubernetes-custom.md @@ -0,0 +1,29 @@ +--- +sidebar_label: "Kubernetes" +title: "Kubernetes" +description: "Learn about the Kubernetes pack and how you can use it with your host clusters." +hide_table_of_contents: true +type: "integration" +category: ["kubernetes", "amd64"] +sidebar_class_name: "hide-from-sidebar" +tags: ["packs", "kubernetes"] +--- + + + +## Terraform + +You can retrieve details about the Kubernetes pack for custom clouds by using the following Terraform code. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "k8s" { + name = "kubernetes-custom" + version = "1.0" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/kubernetes-eks.md b/docs/docs-content/integrations/kubernetes-eks.md new file mode 100644 index 0000000000..890a8d771f --- /dev/null +++ b/docs/docs-content/integrations/kubernetes-eks.md @@ -0,0 +1,29 @@ +--- +sidebar_label: "Kubernetes" +title: "Kubernetes" +description: "Learn about the Kubernetes pack and how you can use it with your host clusters." +hide_table_of_contents: true +type: "integration" +category: ["kubernetes", "amd64"] +sidebar_class_name: "hide-from-sidebar" +tags: ["packs", "kubernetes"] +--- + + + +## Terraform + +You can retrieve details about the Kubernetes pack for AWS EKS by using the following Terraform code. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "k8s" { + name = "kubernetes-eks" + version = "1.29" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/kubernetes-gke.md b/docs/docs-content/integrations/kubernetes-gke.md new file mode 100644 index 0000000000..f29d38e990 --- /dev/null +++ b/docs/docs-content/integrations/kubernetes-gke.md @@ -0,0 +1,29 @@ +--- +sidebar_label: "Kubernetes" +title: "Kubernetes" +description: "Learn about the Kubernetes pack and how you can use it with your host clusters." +hide_table_of_contents: true +type: "integration" +category: ["kubernetes", "amd64"] +sidebar_class_name: "hide-from-sidebar" +tags: ["packs", "kubernetes"] +--- + + + +## Terraform + +You can retrieve details about the Kubernetes pack for AWS EKS by using the following Terraform code. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "k8s" { + name = "kubernetes-gke" + version = "1.29" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/kubernetes-konvoy.md b/docs/docs-content/integrations/kubernetes-konvoy.md new file mode 100644 index 0000000000..2435d68af5 --- /dev/null +++ b/docs/docs-content/integrations/kubernetes-konvoy.md @@ -0,0 +1,45 @@ +--- +sidebar_label: "Kubernetes Konvoy" +title: "Kubernetes" +description: "Learn about the Kubernetes pack and how you can use it with your host clusters." +hide_table_of_contents: true +type: "integration" +category: ["kubernetes", "amd64"] +sidebar_class_name: "hide-from-sidebar" +tags: ["packs", "kubernetes"] +--- + +## Versions Supported + + + + +Refer to the to learn how to create a +custom image for RHEL and Konvoy. + + + + +Refer to the to learn how to create a +custom image for RHEL and Konvoy. + + + + + +## Terraform + +You can retrieve details about the Kubernetes pack for Tencent TKE by using the following Terraform code. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "k8s" { + name = "kubernetes-konvoy" + version = "1.27.6" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/kubernetes-microk8s.md b/docs/docs-content/integrations/kubernetes-microk8s.md new file mode 100644 index 0000000000..62998151d7 --- /dev/null +++ b/docs/docs-content/integrations/kubernetes-microk8s.md @@ -0,0 +1,173 @@ +--- +sidebar_label: "MicroK8s" +title: "MicroK8s" +description: "MicroK8s pack in Palette" +hide_table_of_contents: true +type: "integration" +category: ["kubernetes", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/kubernetes-microk8s/blobs/sha256:b971b64f62e2e67b0a166316f96e6f4211aacea6e28459bb89275e8882ade985?type=image.webp" +tags: ["packs", "microk8s", "kubernetes"] +--- + +## Support Lifecycle + +We support different Kubernetes distributions, such as MicroK8s, K3s, and RKE2, until their official End-of-Life (EOL). +The EOL is set by the respective owner. Once we stop supporting the minor version, we initiate the deprecation process. +Refer to the [Kubernetes Support Lifecycle](kubernetes-support.md#other-kubernetes-distributions) guide to learn more. + +:::preview + +::: + +## Versions Supported + + + + + + + +## Container Network Interface (CNI) + +MicroK8s clusters use the [Calico CNI](https://microk8s.io/docs/change-cidr) by default. However, this default +installation was disabled due to Palette's requirement for a CNI layer to be present in the cluster profiles. This way, +users can choose their preferred CNI layer during the cluster profile creation. + +## Upgrade Strategy + +The upgrade strategy describes how to replace existing control plane nodes with new ones during upgrades. + +You can specify the upgrade strategy during cluster profile creation by editing the value of the `upgradeStrategy` +parameter in the MicroK8s pack YAML file displayed under the **Pack Details** section. + +:::warning + +Before upgrading your cluster, review the [Known Issues](../release-notes/known-issues.md) and the +[Kubernetes Upgrades](kubernetes-support.md#kubernetes-upgrades) pages to learn about the limitations associated with +MicroK8s upgrades. + +::: + +The MicroK8s pack supports three types of upgrade strategies: + +- `InPlaceUpgrade` - Performs an in-place upgrade of the control plane. For clusters with one control plane and one + worker node, `InPlaceUpgrade` temporarily shuts down the API server. + +- `RollingUpgrade` - The default upgrade strategy that deletes the current control plane node before creating a new one. + +- `SmartUpgrade` - Performs an in-place upgrade of the control plane on clusters with fewer than three control plane + nodes, and a rolling upgrade on clusters with three or more control plane nodes. + + + + + +## Container Network Interface (CNI) + +MicroK8s clusters use the [Calico CNI](https://microk8s.io/docs/change-cidr) by default. However, this default +installation was disabled due to Palette's requirement for a CNI layer to be present in the cluster profiles. This way, +users can choose their preferred CNI layer during the cluster profile creation. + +## Upgrade Strategy + +The upgrade strategy describes how to replace existing control plane nodes with new ones during upgrades. + +You can specify the upgrade strategy during cluster profile creation by editing the value of the `upgradeStrategy` +parameter in the MicroK8s pack YAML file displayed under the **Pack Details** section. + +:::warning + +Before upgrading your cluster, review the [Known Issues](../release-notes/known-issues.md) and the +[Kubernetes Upgrades](kubernetes-support.md#kubernetes-upgrades) pages to learn about the limitations associated with +MicroK8s upgrades. + +::: + +The MicroK8s pack supports three types of upgrade strategies: + +- `InPlaceUpgrade` - Performs an in-place upgrade of the control plane. For clusters with one control plane and one + worker node, `InPlaceUpgrade` temporarily shuts down the API server. + +- `RollingUpgrade` - The default upgrade strategy that deletes the current control plane node before creating a new one. + +- `SmartUpgrade` - Performs an in-place upgrade of the control plane on clusters with fewer than three control plane + nodes, and a rolling upgrade on clusters with three or more control plane nodes. + + + + +## Terraform + +You can reference the MicroK8s pack in Terraform with the following data resource. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack" "k8s" { + name = "kubernetes-microk8s" + version = "1.27" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/kubernetes-rke2.md b/docs/docs-content/integrations/kubernetes-rke2.md new file mode 100644 index 0000000000..f203c3f339 --- /dev/null +++ b/docs/docs-content/integrations/kubernetes-rke2.md @@ -0,0 +1,47 @@ +--- +sidebar_label: "RKE2" +title: "RKE2" +description: "RKE2 pack in Palette" +hide_table_of_contents: true +type: "integration" +category: ["kubernetes", "amd64", "fips"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.dev.spectrocloud.com/v1/kubernetes-rke2/blobs/sha256:47cde61005d9996f1571c132ba9f753982134a7a0d8e445e27001ab8519e6051?type=image.webp" +--- + +### Support Lifecycle + + +We support other Kubernetes distributions such as K3s, Microk8s, and RKE2 until their official EOL. The EOL is set by +the respective owner. Once we stop supporting the minor version, we initiate the deprecation process. Refer to the + + guide to learn more. + +:::warning + + +Once you upgrade your cluster to a new Kubernetes version, you will not be able to downgrade. We recommend that, before +upgrading, you review the information provided in the +section. + +Review the to learn about pack +update and deprecation schedules. + +::: + + + +## Terraform + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "k8s" { + name = "kubernetes-rke2" + version = "1.29.5-rke2r1-build20240515" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/kubernetes-support.md b/docs/docs-content/integrations/kubernetes-support.md index 0ba8448548..9af0507ad3 100644 --- a/docs/docs-content/integrations/kubernetes-support.md +++ b/docs/docs-content/integrations/kubernetes-support.md @@ -38,10 +38,11 @@ version, we initiate the deprecation process. You can learn more about our depre ## Palette eXtended Kubernetes Support -We support CNCF Kubernetes, [Palette eXtended Kubernetes (PXK)](./kubernetes.md) and -[Palette eXtended Kubernetes Edge (PXK-E)](./kubernetes-edge.md) for N-3 Kubernetes minor versions for a duration of 14 + +We support CNCF Kubernetes, [Palette eXtended Kubernetes (PXK)](./kubernetes.md) and for N-3 Kubernetes minor versions for a duration of 14 months. The duration exceeds the official EOL by four months. Once we stop supporting the minor version, we initiate the deprecation process. + The diagram below illustrates the support lifecycle of a Kubernetes version. A deprecated Kubernetes version will no longer receive updates. diff --git a/docs/docs-content/integrations/kubernetes-tke.md b/docs/docs-content/integrations/kubernetes-tke.md new file mode 100644 index 0000000000..40076f0785 --- /dev/null +++ b/docs/docs-content/integrations/kubernetes-tke.md @@ -0,0 +1,29 @@ +--- +sidebar_label: "Kubernetes" +title: "Kubernetes" +description: "Learn about the Kubernetes pack and how you can use it with your host clusters." +hide_table_of_contents: true +type: "integration" +category: ["kubernetes", "amd64"] +sidebar_class_name: "hide-from-sidebar" +tags: ["packs", "kubernetes"] +--- + + + +## Terraform + +You can retrieve details about the Kubernetes pack for Tencent TKE by using the following Terraform code. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "k8s" { + name = "kubernetes-eks" + version = "1.24.4" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/kubernetes.md b/docs/docs-content/integrations/kubernetes.md index 905870e905..3e1e8fe3ef 100644 --- a/docs/docs-content/integrations/kubernetes.md +++ b/docs/docs-content/integrations/kubernetes.md @@ -60,11 +60,12 @@ We also offer Palette eXtended Kubernetes Edge (PXK-E) for Edge deployments. Ref ### PXK and Palette VerteX + The PXK used in [Palette VerteX](../vertex/vertex.md) is compiled and linked with our [NIST-certified FIPS crypto module](../legal-licenses/compliance.md#fips-140-2) PXK is by default enabled with [Ubuntu Pro](https://ubuntu.com/pro) with FIPS mode enabled. Additionally, the Operating System (OS) is hardened based -on the NIST-800 standard. However, if you use a different OS through the [BYOOS](./byoos.md) pack, then you are -responsible for ensuring FIPS compliance and hardening of the OS. +on the NIST-800 standard. However, if you use a different OS through the pack, then you are responsible for ensuring FIPS compliance and hardening of the OS. + The combined usage of PXK and Palette VerteX provides a secure and FIPS-compliant experience as the Kubernetes distribution, OS, and management platform VerteX is FIPS-compliant. @@ -77,45 +78,10 @@ four months. Once we stop supporting the minor version, we initiate the deprecat ## Versions Supported - + -## Prerequisites - -- A minimum of 4 CPU and 4 GB Memory. - -- Operating System (OS) dependencies as listed in the table. - - | OS Distribution | OS Version | Supports Kubernetes 1.29.x | - | --------------- | ---------- | -------------------------- | - | CentOS | 7.7 | ✅ | - | Ubuntu | 22.04 | ✅ | - | Ubuntu | 20.04 | ❌ | - | Ubuntu | 18.04 | ❌ | - -## Parameters - -| Parameter | Description | -| ------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `pack.podCIDR` | The CIDR range for Pods in the cluster. This should match the networking layer property. Default: `192.168.0.0/16` | -| `pack.serviceClusterIpRange` | The CIDR range for services in the cluster. This should not overlap with any IP ranges assigned to nodes or pods. Default: `10.96.0.0/12` | -| `pack.serviceDomain` | The cluster DNS service domain. Default: `cluster.local`. To change the default, you must add this parameter to the Kubernetes YAML file at cluster creation and specify the cluster DNS service domain to use. This value cannot be changed after cluster creation is complete. Refer to the [Change Cluster DNS Service Domain](kubernetes.md?versions=k8s_v1.27#change-cluster-dns-service-domain) section. | -| `pack.palette.config.dashboard.identityProvider` | Dynamically enabled OpenID Connect (OIDC) Identity Provider (IDP) setting based on your UI selection when you add the PXK pack to your profile. This parameter appears in the YAML file after you make a selection. Refer to [Configure OIDC Identity Provider](kubernetes.md#configure-oidc-identity-provider). | -| `kubeadmconfig.apiServer.extraArgs` | A list of additional apiServer flags you can set. | -| `kubeadmconfig.apiServer.extraVolumes` | A list of additional volumes to mount on the apiServer. | -| `kubeadmconfig.controllerManager.extraArgs` | A list of additional ControllerManager flags to set. | -| `kubeadmconfig.scheduler.extraArgs` | A list of additional Kube scheduler flags to set. | -| `kubeadmconfig.kubeletExtraArgs` | A list of kubelet arguments to set and copy to the nodes. | -| `kubeadmconfig.files` | A list of additional files to copy to the nodes. | -| `kubeadmconfig.preKubeadmCommands` | A list of additional commands to invoke **before** running kubeadm commands. | -| `kubeadmconfig.postKubeadmCommands` | A list of additional commands to invoke **after** running kubeadm commands. | -| `kubeadmconfig.clientConfig` | Settings to manually configure OIDC-based authentication when you choose a third-party (Custom) IDP. Refer to [Configure Custom OIDC](#configure-custom-oidc). | -| `cloud.maas.customEndpoint` | The custom MAAS API or DNS endpoint URL to use for the PXK cluster. This parameter is only available for MAAS. | -| `cloud.maas.customEndpointPort` | The custom MAAS API or DNS endpoint port to use for the PXK cluster. This parameter is only available for MAAS. Default value is `6443`. | - -## Usage - The Kubeadm configuration file is where you can do the following: - Change the default `podCIDR` and `serviceClusterIpRange` values. CIDR IPs specified in the configuration file take @@ -134,7 +100,7 @@ The Kubeadm configuration file is where you can do the following: [Configure Custom OIDC](#configure-custom-oidc). - Add a certificate for the Spectro Proxy pack if you want to use a reverse proxy with a Kubernetes cluster. For more - information, refer to the [Spectro Proxy](frp.md) guide. + information, refer to the guide. ### Change Cluster DNS Service Domain @@ -449,40 +415,6 @@ cloud: -## Prerequisites - -- A minimum of 4 CPU and 4 GB Memory. - -- Operating System (OS) dependencies as listed in the table. - - | OS Distribution | OS Version | Supports Kubernetes 1.28.x | - | --------------- | ---------- | -------------------------- | - | CentOS | 7.7 | ✅ | - | Ubuntu | 22.04 | ✅ | - | Ubuntu | 20.04 | ❌ | - -## Parameters - -| Parameter | Description | -| ------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `pack.podCIDR` | The CIDR range for Pods in the cluster. This should match the networking layer property. Default: `192.168.0.0/16` | -| `pack.serviceClusterIpRange` | The CIDR range for services in the cluster. This should not overlap with any IP ranges assigned to nodes or pods. Default: `10.96.0.0/12` | -| `pack.serviceDomain` | The cluster DNS service domain. Default: `cluster.local`. To change the default, you must add this parameter to the Kubernetes YAML file at cluster creation and specify the cluster DNS service domain to use. This value cannot be changed after cluster creation is complete. Refer to the [Change Cluster DNS Service Domain](kubernetes.md?versions=k8s_v1.27#change-cluster-dns-service-domain) section. | -| `pack.palette.config.dashboard.identityProvider` | Dynamically enabled OpenID Connect (OIDC) Identity Provider (IDP) setting based on your UI selection when you add the PXK pack to your profile. This parameter appears in the YAML file after you make a selection. Refer to [Configure OIDC Identity Provider](kubernetes.md#configure-oidc-identity-provider). | -| `kubeadmconfig.apiServer.extraArgs` | A list of additional apiServer flags you can set. | -| `kubeadmconfig.apiServer.extraVolumes` | A list of additional volumes to mount on the apiServer. | -| `kubeadmconfig.controllerManager.extraArgs` | A list of additional ControllerManager flags to set. | -| `kubeadmconfig.scheduler.extraArgs` | A list of additional Kube scheduler flags to set. | -| `kubeadmconfig.kubeletExtraArgs` | A list of kubelet arguments to set and copy to the nodes. | -| `kubeadmconfig.files` | A list of additional files to copy to the nodes. | -| `kubeadmconfig.preKubeadmCommands` | A list of additional commands to invoke **before** running kubeadm commands. | -| `kubeadmconfig.postKubeadmCommands` | A list of additional commands to invoke **after** running kubeadm commands. | -| `kubeadmconfig.clientConfig` | Settings to manually configure OIDC-based authentication when you choose a third-party (Custom) IDP. Refer to [Configure Custom OIDC](#configure-custom-oidc). | -| `cloud.maas.customEndpoint` | The custom MAAS API or DNS endpoint URL to use for the PXK cluster. This parameter is only available for MAAS. | -| `cloud.maas.customEndpointPort` | The custom MAAS API or DNS endpoint port to use for the PXK cluster. This parameter is only available for MAAS. Default value is `6443`. | - -## Usage - The Kubeadm configuration file is where you can do the following: - Change the default `podCIDR` and `serviceClusterIpRange` values. CIDR IPs specified in the configuration file take @@ -501,7 +433,7 @@ The Kubeadm configuration file is where you can do the following: [Configure Custom OIDC](#configure-custom-oidc). - Add a certificate for the Spectro Proxy pack if you want to use a reverse proxy with a Kubernetes cluster. For more - information, refer to the [Spectro Proxy](frp.md) guide. + information, refer to the guide. ### Change Cluster DNS Service Domain @@ -816,38 +748,6 @@ cloud: -## Prerequisites - -- A minimum of 4 CPU and 4 GB Memory. - -- Operating System (OS) dependencies as listed in the table. - - | OS Distribution | OS Version | Supports Kubernetes 1.27.x | - | --------------- | ---------- | -------------------------- | - | CentOS | 7.7 | ✅ | - | Ubuntu | 22.04 | ✅ | - | Ubuntu | 20.04 | ❌ | - -## Parameters - -| Parameter | Description | -| ------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `pack.podCIDR` | The CIDR range for Pods in the cluster. This should match the networking layer property. Default: `192.168.0.0/16` | -| `pack.serviceClusterIpRange` | The CIDR range for services in the cluster. This should not overlap with any IP ranges assigned to nodes or pods. Default: `10.96.0.0/12` | -| `pack.serviceDomain` | The cluster DNS service domain. Default: `cluster.local`. To change the default, you must add this parameter to the Kubernetes YAML file at cluster creation and specify the cluster DNS service domain to use. This value cannot be changed after cluster creation is complete. Refer to the [Change Cluster DNS Service Domain](kubernetes.md?versions=k8s_v1.27#change-cluster-dns-service-domain) section. | -| `pack.palette.config.dashboard.identityProvider` | Dynamically enabled OpenID Connect (OIDC) Identity Provider (IDP) setting based on your UI selection when you add the PXK pack to your profile. This parameter appears in the YAML file after you make a selection. Refer to [Configure OIDC Identity Provider](kubernetes.md#configure-oidc-identity-provider). | -| `kubeadmconfig.apiServer.extraArgs` | A list of additional apiServer flags you can set. | -| `kubeadmconfig.apiServer.extraVolumes` | A list of additional volumes to mount on the apiServer. | -| `kubeadmconfig.controllerManager.extraArgs` | A list of additional ControllerManager flags to set. | -| `kubeadmconfig.scheduler.extraArgs` | A list of additional Kube scheduler flags to set. | -| `kubeadmconfig.kubeletExtraArgs` | A list of kubelet arguments to set and copy to the nodes. | -| `kubeadmconfig.files` | A list of additional files to copy to the nodes. | -| `kubeadmconfig.preKubeadmCommands` | A list of additional commands to invoke **before** running kubeadm commands. | -| `kubeadmconfig.postKubeadmCommands` | A list of additional commands to invoke **after** running kubeadm commands. | -| `kubeadmconfig.clientConfig` | Settings to manually configure OIDC-based authentication when you choose a third-party (Custom) IDP. Refer to [Configure Custom OIDC](#configure-custom-oidc). | - -## Usage - The Kubeadm configuration file is where you can do the following: - Change the default `podCIDR` and `serviceClusterIpRange` values. CIDR IPs specified in the configuration file take @@ -866,7 +766,7 @@ The Kubeadm configuration file is where you can do the following: [Configure Custom OIDC](#configure-custom-oidc). - Add a certificate for the Spectro Proxy pack if you want to use a reverse proxy with a Kubernetes cluster. For more - information, refer to the [Spectro Proxy](frp.md) guide. + information, refer to the guide. ### Change Cluster DNS Service Domain @@ -1151,16 +1051,6 @@ In this example, Palette is used as the IDP, and all users in the `dev-east-2` w ![A subject of the type group is assigned as the subject in a RoleBinding](/clusters_cluster-management_cluster-rbac_cluster-subject-group.webp) - - - - -:::warning - -All versions less than v1.27.x are considered deprecated. Upgrade to a newer version to take advantage of new features. - -::: - @@ -1180,13 +1070,3 @@ data "spectrocloud_pack_simple" "k8s" { registry_uid = data.spectrocloud_registry.public_registry.id } ``` - -## Resources - -- [Kubernetes](https://kubernetes.io/) - -- [Kubernetes Documentation](https://kubernetes.io/docs/concepts/overview/) - -- [Image Swap with Palette](../clusters/cluster-management/image-swap.md) - -- [RHEL and PXK for Vmware](../byoos/usecases/vmware/rhel-pxk.md) diff --git a/docs/docs-content/integrations/kubevious.md b/docs/docs-content/integrations/kubevious.md index d0bc28d298..5583405c13 100644 --- a/docs/docs-content/integrations/kubevious.md +++ b/docs/docs-content/integrations/kubevious.md @@ -10,28 +10,74 @@ logoUrl: "https://registry.spectrocloud.com/v1/kubevious/blobs/sha256:5e33d7b51b tags: ["packs", "kubevious", "monitoring"] --- -Kubevious integration provides a graphical interface that renders easy to understand, application-centric Kubernetes -configurations. - ## Versions Supported - + -- **1.0.10** +## Components + +This integration deploys the following components: + +- Deployment +- MySql DB +- UI +- Parser + +## Configure Ingress + +Follow the steps below to configure Ingress on Kubevious, according to the corresponding version. + +1. Within the manifest, find the kubevious section **user** > **interface** > **service** > **type** and confirm/change, + according to the Kubevious version as listed in the table below. + + | **Versions** | **Parameters** | **Action** | + | ------------ | -------------------------------- | -------------------------------------------------------------------- | + | **1.0.10** | ui: service: type: **ClusterIP** | Confirm that it states **ClusterIP**. | + | **0.8.15** | ui: service: type: **ClusterIP** | Confirm that it states **ClusterIP**. | + | **0.5.9** | ui: svcType: **LoadBalancer** | Change kubevious.ui.svcType from **LoadBalancer** to **Cluster IP**. | + +2. Configure Ingress + - Enable Ingress; change enabled from _false_ to **true**. + - Set Ingress rules like annotations, path, hosts, etc. + +With these configuration changes, you can access the Kubevious service on the Ingress Controller LoadBalancer +hostname/IP. -- **0.8.15** +## Components - - +This integration deploys the following components: + +- Deployment +- MySql DB +- UI +- Parser + +## Configure Ingress + +Follow the steps below to configure Ingress on Kubevious, according to the corresponding version. + +1. Within the manifest, find the kubevious section **user** > **interface** > **service** > **type** and confirm/change, + according to the Kubevious version as listed in the table below. + + | **Versions** | **Parameters** | **Action** | + | ------------ | -------------------------------- | -------------------------------------------------------------------- | + | **1.0.10** | ui: service: type: **ClusterIP** | Confirm that it states **ClusterIP**. | + | **0.8.15** | ui: service: type: **ClusterIP** | Confirm that it states **ClusterIP**. | + | **0.5.9** | ui: svcType: **LoadBalancer** | Change kubevious.ui.svcType from **LoadBalancer** to **Cluster IP**. | + +2. Configure Ingress + - Enable Ingress; change enabled from _false_ to **true**. + - Set Ingress rules like annotations, path, hosts, etc. -- **0.5.9** +With these configuration changes, you can access the Kubevious service on the Ingress Controller LoadBalancer +hostname/IP. - + ## Components @@ -42,9 +88,9 @@ This integration deploys the following components: - UI - Parser -## Ingress +## Configure Ingress -Follow the steps below to configure Ingress on Kubevious, according to the corresponding version +Follow the steps below to configure Ingress on Kubevious, according to the corresponding version. 1. Within the manifest, find the kubevious section **user** > **interface** > **service** > **type** and confirm/change, according to the Kubevious version as listed in the table below. @@ -62,6 +108,21 @@ Follow the steps below to configure Ingress on Kubevious, according to the corre With these configuration changes, you can access the Kubevious service on the Ingress Controller LoadBalancer hostname/IP. -## References + + -- [Kubevious GitHub](https://github.com/kubevious/kubevious) +## Terraform + +You can reference the Kubevious pack in Terraform with the following data resource. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} +data "spectrocloud_pack" "kubevious" { + name = "kubevious" + version = "1.0.10" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/kubevirt.md b/docs/docs-content/integrations/kubevirt.md index 8720256c09..81eb5eed8d 100644 --- a/docs/docs-content/integrations/kubevirt.md +++ b/docs/docs-content/integrations/kubevirt.md @@ -10,55 +10,18 @@ logoUrl: "https://registry.spectrocloud.com/v1/kubevirt/blobs/sha256:185e7a7658c tags: ["packs", "kubevirt", "system app"] --- -KubeVirt is a virtual machine management add-on for Kubernetes clusters. Create predefine virtual machines using -KubeVirt, and Palette will provision KubeVirt as an Add-on Pack to manage the VM resources within the orchestrator. - -
- -## Version Supported - - - - -**0.51.0** - - - - -**0.55.0** - - - - -
-
- -## Notable Parameters - -```yaml -manifests: - KubeVirt-operator: - # Enable Emulation (when no nested virtualization enabled) - useEmulation: true - KubeVirt-cr: - contents: | - apiVersion: KubeVirt.io/v1 - kind: KubeVirt - metadata: - name: KubeVirt - namespace: KubeVirt - spec: - certificateRotateStrategy: {} - configuration: - developerConfiguration: - featureGates: [] - customizeComponents: {} - imagePullPolicy: IfNotPresent - workloadUpdateStrategy: {} +## Terraform + +You can reference the Kubevirt pack in Terraform with the following data resource. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} +data "spectrocloud_pack" "kubevirt" { + name = "kubevirt" + version = "0.59.0" + type = "manifest" + registry_uid = data.spectrocloud_registry.public_registry.id +} ``` - -## References - -- [Installing KubeVirt on Kubernetes](https://kubevirt.io/user-guide/cluster_admin/installation/#installing-kubevirt-on-kubernetes) - -- [GitHub KubeVirt](https://github.com/KubeVirt/KubeVirt/releases/tag/v0.51.0) diff --git a/docs/docs-content/integrations/kubewatch.md b/docs/docs-content/integrations/kubewatch.md index cfd0684789..61c004e626 100644 --- a/docs/docs-content/integrations/kubewatch.md +++ b/docs/docs-content/integrations/kubewatch.md @@ -10,32 +10,18 @@ logoUrl: "https://registry.dev.spectrocloud.com/v1/kubewatch/blobs/sha256:a277fb tags: ["packs", "kube-watch", "monitoring"] --- -Kubewatch is a Kubernetes watcher that currently publishes notification to available collaboration hubs/notification -channels. It is run in the k8s cluster for monitoring resource changes and event notifications are obtained through -webhooks. The supported webhooks are: - -- slack -- hipchat -- mattermost -- flock -- webhook -- smtp - -## Usage: - -kubewatch [flags] kubewatch [command] - -## Versions Supported - - - - - -**1.0.7** - - - - -## References - -- [kube-watch GitHub](https://github.com/robusta-dev/kubewatch) +## Terraform + +You can reference the Kubewatch pack in Terraform with the following data resource. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} +data "spectrocloud_pack" "kubewatch" { + name = "kubewatch" + version = "1.0.7" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/lb-citrix-adc.md b/docs/docs-content/integrations/lb-citrix-adc.md new file mode 100644 index 0000000000..ec4bb84208 --- /dev/null +++ b/docs/docs-content/integrations/lb-citrix-adc.md @@ -0,0 +1,27 @@ +--- +sidebar_label: "Citrix IPAM" +title: "Citrix IPAM" +description: "Citrix IPAM Load Balancer pack in Spectro Cloud" +hide_table_of_contents: true +type: "integration" +category: ["load balancers", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/lb-citrix-adc/blobs/sha256:17f8ebc0dc69d329a39e5d27fc0ce3574034d18ab1776fabda396c5403b0bd86?type=image.webp" +tags: ["packs", "citrix-ipam", "network"] +--- + +## Terraform + +You can reference the Citrix ADC pack in Terraform with the following data resource. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} +data "spectrocloud_pack" "citrix" { + name = "lb-citrix-adc" + version = "1.7.6" + type = "manifest" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/lb-metallb-helm.md b/docs/docs-content/integrations/lb-metallb-helm.md new file mode 100644 index 0000000000..069d2e770f --- /dev/null +++ b/docs/docs-content/integrations/lb-metallb-helm.md @@ -0,0 +1,142 @@ +--- +sidebar_label: "MetalLB Helm" +title: "MetalLB Helm" +description: "MetalLB Load Balancer pack in Spectro Cloud" +hide_table_of_contents: true +type: "integration" +category: ["load balancers", "amd64", "arm64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/lb-metallb/blobs/sha256:3d09a1eab856a03d5b821062dcd1da624256e8f1e2ede404d88cb088d3adb945?type=image.webp" +tags: ["packs", "metallb", "network"] +--- + +## Versions Supported + + + + + +## Configure IP Address Range + +Helm-based MetalLB default gives you an L2 address pool by default. It has two sections, +`charts:metallb-full:configuration` and `charts:metallb-full:metallb`, as shown in the following examples. + +Use the `charts:metallb-full:configuration` parameter section to set resource types that MetalLB supports. The pack +default gives you an L2 address pool. To set up a more advanced scenario, you can use the other resource types provided +in the pack. The pack includes a commented-out example for each resource. + +```yaml +charts: + metallb-full: + configuration: + ipaddresspools: + first-pool: + spec: + addresses: + - 192.168.10.0/24 + avoidBuggyIPs: true + autoAssign: true + + l2advertisements: + default: + spec: + ipAddressPools: + - first-pool + + bgpadvertisements: {} + bgppeers: {} + communities: {} + bfdprofiles: {} +``` + +The `charts:metallb-full:metallb` parameter section provides access to all the options of the base chart that installs +MetalLB. You don’t need to change anything unless you want to install MetalLB in Free Range Routing (FRR) mode. To use +FRR mode, set the option to `true`, as the example shows. + +```yaml +charts: + metallb-full: + metallb: + speaker: + frr: + enabled: true +``` + +## Airgap Palette and VerteX + +In the context of an airgap Palette or VerteX installation, you must add the following labels to the MetalLB namespace. +These labels allow the speaker pods to come up successfully. Otherwise, depending on the Kubernetes version, the speaker +pods may get blocked by security policies. + +- `pod-security.kubernetes.io/enforce: privileged` +- `pod-security.kubernetes.io/audit: privileged` +- `pod-security.kubernetes.io/warn: privileged` + +The following example shows how to update the pack YAML with the required labels. + +```yaml {13-15} +pack: + content: + images: + - image: gcr.io/spectro-images-public/packs/metallb/0.13.11/controller:v0.13.11 + - image: gcr.io/spectro-images-public/packs/metallb/0.13.11/speaker:v0.13.11 + - image: gcr.io/spectro-images-public/packs/metallb/0.13.11/frr:8.5.2 + charts: + - repo: https://metallb.github.io/metallb + name: metallb + version: 0.13.11 + namespace: metallb-system + namespaceLabels: + "metallb-system": + "pod-security.kubernetes.io/warn=privileged,pod-security.kubernetes.io/audit=privileged,pod-security.kubernetes.io/enforce=privileged,pod-security.kubernetes.io/enforce-version=v{{ + .spectro.system.kubernetes.version | substr 0 4 }}" +``` + +Refer to the [Profile Customization](../profiles/profile-customization.md) page to learn more about additional namespace +labels and annotations. + +## Troubleshooting + +### Scenario - Controller and Speaker Pods Are Not Assigning New IP Addresses + +If controller and speaker pods are not assigning new IP addresses that you provided in the MetalLB pack, it is likely +pods in existing deployments do not have the latest configMap file. + +IP addresses you specify in MetalLB pack values go into a configMap called `config` in the `metallb-system` namespace. +The MetalLB controller and speakers use the configMap as a volume mount. + +Any changed IP addresses will get updated in the configMap. You can confirm this by issuing the following command. + +```bash +kubectl describe cm config --namespace metallb-system +``` + +Since the controller and speaker pods are using a previous copy of the configMap, existing deployments are unaware of +the changes made to configMap. + +To ensure updated addresses are reflected in the configMap, you need to restart the controller and speaker pods so they +fetch the new configMap and start assigning new addresses correctly. Issue the commands below to restart the controller +and speaker. + +```bash +kubectl rollout restart deploy controller --namespace metallb-system +kubectl rollout restart ds speaker --namespace metallb-system +``` + + + + +## Terraform + +You can reference the MetalLB pack in Terraform with the following data resource. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} +data "spectrocloud_pack" "MetalLB-Helm" { + name = "lb-metallb-helm" + version = "0.13.7" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/lb-metallb.md b/docs/docs-content/integrations/lb-metallb.md new file mode 100644 index 0000000000..cbaf24f490 --- /dev/null +++ b/docs/docs-content/integrations/lb-metallb.md @@ -0,0 +1,168 @@ +--- +sidebar_label: "MetalLB" +title: "MetalLB" +description: "MetalLB Load Balancer pack in Spectro Cloud" +hide_table_of_contents: true +type: "integration" +category: ["load balancers", "amd64", "arm64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/lb-metallb/blobs/sha256:3d09a1eab856a03d5b821062dcd1da624256e8f1e2ede404d88cb088d3adb945?type=image.webp" +tags: ["packs", "metallb", "network"] +--- + +## Versions Supported + + + + + +## Configure IP Address Range + +The _lb-metallb_ manifest-based pack supports direct configuration of an L2 IP address set. You can set either a range +of addresses or use CIDR format, such as `192.168.250.48/29`. A more advanced MetalLB configuration, such as Border +Gateway Protocol (BGP) routing requires you to write your own manifests and add them to the Palette cluster profile. + +The example shows the syntax used to set an address range. + +```yaml +manifests: + metallb: + images: + controller: "" + speaker: "" + namespace: "metallb-system" + avoidBuggyIps: true + addresses: + - 192.168.250.48-192.168.250.55 +``` + +## Airgap Palette and VerteX + +In the context of an airgap Palette or VerteX installation, you must add the following labels to the MetalLB namespace. +These labels allow the speaker pods to come up successfully. Otherwise, depending on the Kubernetes version, the speaker +pods may get blocked by security policies. + +- `pod-security.kubernetes.io/enforce: privileged` +- `pod-security.kubernetes.io/audit: privileged` +- `pod-security.kubernetes.io/warn: privileged` + +The following example shows how to update the pack YAML with the required labels. + +```yaml {13-15} +pack: + content: + images: + - image: gcr.io/spectro-images-public/packs/metallb/0.13.11/controller:v0.13.11 + - image: gcr.io/spectro-images-public/packs/metallb/0.13.11/speaker:v0.13.11 + - image: gcr.io/spectro-images-public/packs/metallb/0.13.11/frr:8.5.2 + charts: + - repo: https://metallb.github.io/metallb + name: metallb + version: 0.13.11 + namespace: metallb-system + namespaceLabels: + "metallb-system": + "pod-security.kubernetes.io/warn=privileged,pod-security.kubernetes.io/audit=privileged,pod-security.kubernetes.io/enforce=privileged,pod-security.kubernetes.io/enforce-version=v{{ + .spectro.system.kubernetes.version | substr 0 4 }}" +``` + +Refer to the [Profile Customization](../profiles/profile-customization.md) page to learn more about additional namespace +labels and annotations. + +## Troubleshooting + +### Scenario - Controller and Speaker Pods Are Not Assigning New IP Addresses + +If controller and speaker pods are not assigning new IP addresses that you provided in the MetalLB pack, it is likely +pods in existing deployments do not have the latest configMap file. + +IP addresses you specify in MetalLB pack values go into a configMap called `config` in the `metallb-system` namespace. +The MetalLB controller and speakers use the configMap as a volume mount. + +Any changed IP addresses will get updated in the configMap. You can confirm this by issuing the following command. + +```bash +kubectl describe cm config --namespace metallb-system +``` + +Since the controller and speaker pods are using a previous copy of the configMap, existing deployments are unaware of +the changes made to configMap. + +To ensure updated addresses are reflected in the configMap, you need to restart the controller and speaker pods so they +fetch the new configMap and start assigning new addresses correctly. Issue the commands below to restart the controller +and speaker. + +```bash +kubectl rollout restart deploy controller --namespace metallb-system +kubectl rollout restart ds speaker --namespace metallb-system +``` + + + + + +## Configure IP Address Range + +The _lb-metallb_ manifest-based pack supports direct configuration of an L2 IP address set. You can set either a range +of addresses or use CIDR format, such as `192.168.250.48/29`. A more advanced MetalLB configuration, such as Border +Gateway Protocol (BGP) routing requires you to write your own manifests and add them to the Palette cluster profile. + +The example shows the syntax used to set an address range. + +```yaml +manifests: + metallb: + images: + controller: "" + speaker: "" + namespace: "metallb-system" + avoidBuggyIps: true + addresses: + - 192.168.250.48-192.168.250.55 +``` + +## Troubleshooting + +### Scenario - Controller and Speaker Pods Are Not Assigning New IP Addresses + +If controller and speaker pods are not assigning new IP addresses that you provided in the MetalLB pack, it is likely +pods in existing deployments do not have the latest configMap file. + +IP addresses you specify in MetalLB pack values go into a configMap called `config` in the `metallb-system` namespace. +The MetalLB controller and speakers use the configMap as a volume mount. + +Any changed IP addresses will get updated in the configMap. You can confirm this by issuing the following command. + +```bash +kubectl describe cm config --namespace metallb-system +``` + +Since the controller and speaker pods are using a previous copy of the configMap, existing deployments are unaware of +the changes made to configMap. + +To ensure updated addresses are reflected in the configMap, you need to restart the controller and speaker pods so they +fetch the new configMap and start assigning new addresses correctly. Issue the commands below to restart the controller +and speaker. + +```bash +kubectl rollout restart deploy controller --namespace metallb-system +kubectl rollout restart ds speaker --namespace metallb-system +``` + + + + +## Terraform + +You can reference the MetalLB pack in Terraform with the following data resource. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} +data "spectrocloud_pack" "MetalLB" { + name = "lb-metallb" + version = "0.13.5" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/nginx.md b/docs/docs-content/integrations/nginx.md index 10d55cf71b..fadcfb033f 100644 --- a/docs/docs-content/integrations/nginx.md +++ b/docs/docs-content/integrations/nginx.md @@ -10,69 +10,181 @@ logoUrl: "https://registry.spectrocloud.com/v1/nginx/blobs/sha256:a36bf7e8023f01 tags: ["packs", "nginx", "network"] --- -Ingress resource(s) in Kubernetes helps provide Service(s) externally-reachable URLs, load balance traffic, terminate -SSL / TLS, and offer name-based virtual hosting. NGINX integration is an -[Ingress controller](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers) responsible for -fulfilling the Ingress, usually with a load balancer, though it may also configure your edge router or additional -frontends to help handle the traffic. - ## Versions Supported - + -- **1.4.0** +## Components + +Integration creates the following components: + +- Ingress Controller. +- Default Backend. + +## Default SSL Certificate + +NGINX Ingress controller provides an option to set a default SSL certificate to be used for requests that do not match +any of the configured server names. The default certificate will also be used for ingress tls: sections that do not have +a secretName option. Below steps will come in handy to set the default certificate. + +1. Create a secret with key and certificate + ```bash + kubectl -n kube-system create secret tls ingress-tls --cert server.crt --key server.key + ``` +2. Edit Nginx ingress pack values to include extraArgs.default-ssl-certificate section which will reference the secret + created above + ```bash + charts: + nginx-ingress: + fullnameOverride: "nginx-ingress" + controller: + ... + ... + extraArgs: + default-ssl-certificate: "kube-system/ingress-tls" + ``` -- **1.3.0** +## Components - +Integration creates the following components: - +- Ingress Controller. +- Default Backend. + +## Default SSL Certificate -- **1.2.5** +NGINX Ingress controller provides an option to set a default SSL certificate to be used for requests that do not match +any of the configured server names. The default certificate will also be used for ingress tls: sections that do not have +a secretName option. Below steps will come in handy to set the default certificate. -
+1. Create a secret with key and certificate + ```bash + kubectl -n kube-system create secret tls ingress-tls --cert server.crt --key server.key + ``` +2. Edit Nginx ingress pack values to include extraArgs.default-ssl-certificate section which will reference the secret + created above + ```bash + charts: + nginx-ingress: + fullnameOverride: "nginx-ingress" + controller: + ... + ... + extraArgs: + default-ssl-certificate: "kube-system/ingress-tls" + ``` - **1.2.4** +
-
+ - **1.2.3** +## Components -
+Integration creates the following components: - **1.2.1** (deprecated) +- Ingress Controller. +- Default Backend. -
+## Default SSL Certificate - **1.2.0** (deprecated) +NGINX Ingress controller provides an option to set a default SSL certificate to be used for requests that do not match +any of the configured server names. The default certificate will also be used for ingress tls: sections that do not have +a secretName option. Below steps will come in handy to set the default certificate. + +1. Create a secret with key and certificate + ```bash + kubectl -n kube-system create secret tls ingress-tls --cert server.crt --key server.key + ``` +2. Edit Nginx ingress pack values to include extraArgs.default-ssl-certificate section which will reference the secret + created above + ```bash + charts: + nginx-ingress: + fullnameOverride: "nginx-ingress" + controller: + ... + ... + extraArgs: + default-ssl-certificate: "kube-system/ingress-tls" + ```
-- **1.0.4** +## Components + +Integration creates the following components: + +- Ingress Controller. +- Default Backend. + +## Default SSL Certificate + +NGINX Ingress controller provides an option to set a default SSL certificate to be used for requests that do not match +any of the configured server names. The default certificate will also be used for ingress tls: sections that do not have +a secretName option. Below steps will come in handy to set the default certificate. + +1. Create a secret with key and certificate + ```bash + kubectl -n kube-system create secret tls ingress-tls --cert server.crt --key server.key + ``` +2. Edit Nginx ingress pack values to include extraArgs.default-ssl-certificate section which will reference the secret + created above + ```bash + charts: + nginx-ingress: + fullnameOverride: "nginx-ingress" + controller: + ... + ... + extraArgs: + default-ssl-certificate: "kube-system/ingress-tls" + ``` -- **0.26.1** +## Components - +Integration creates the following components: - +- Ingress Controller. +- Default Backend. + +## Default SSL Certificate + +NGINX Ingress controller provides an option to set a default SSL certificate to be used for requests that do not match +any of the configured server names. The default certificate will also be used for ingress tls: sections that do not have +a secretName option. Below steps will come in handy to set the default certificate. -- **0.43.0** +1. Create a secret with key and certificate + ```bash + kubectl -n kube-system create secret tls ingress-tls --cert server.crt --key server.key + ``` +2. Edit Nginx ingress pack values to include extraArgs.default-ssl-certificate section which will reference the secret + created above + ```bash + charts: + nginx-ingress: + fullnameOverride: "nginx-ingress" + controller: + ... + ... + extraArgs: + default-ssl-certificate: "kube-system/ingress-tls" + ``` -
+ ## Components @@ -104,11 +216,22 @@ a secretName option. Below steps will come in handy to set the default certifica default-ssl-certificate: "kube-system/ingress-tls" ``` -## Troubleshooting + + +
+ +## Terraform -For basic troubleshooting, refer the below troubleshooting guide: -https://github.com/kubernetes/ingress-nginx/blob/master/docs/troubleshooting.md +You can reference the nginx pack in Terraform with the following data resource. -## References +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} -- [Nginx Ingress Controller](https://www.nginx.com/products/nginx-ingress-controller/) +data "spectrocloud_pack" "nginx" { + name = "nginx" + version = "1.10.0" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/ngrok-ingress-controller.md b/docs/docs-content/integrations/ngrok-ingress-controller.md new file mode 100644 index 0000000000..e45426f459 --- /dev/null +++ b/docs/docs-content/integrations/ngrok-ingress-controller.md @@ -0,0 +1,97 @@ +--- +sidebar_label: "ngrok" +title: "ngrok" +description: "Learn about using ngrok Kubernetes Ingress to access applications in Palette." +hide_table_of_contents: true +type: "integration" +category: ["ingress", "amd64", "community"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/ngrok-ingress-controller/blobs/sha256:a723399d53d716c5441d57d021a7975d961e5b7db79ccb2bc10f7524ba7e67c1?type=image.webp" +tags: ["packs", "ngrok", "network", "kubernetes"] +--- + +## Versions Supported + + + + + +## Configure Ingress Service Definition + +To use the ngrok Ingress Controller pack, first create a new +[add-on cluster profile](../profiles/cluster-profiles/create-cluster-profiles/create-addon-profile/create-addon-profile.md), +search for the **ngrok Ingress Controller** pack, and overwrite the default pack configuration with your API key and +authentication token like the following example YAML content: + +```yaml +charts: + kubernetes-ingress-controller: + ... + credentials: + apiKey: API_KEY + authtoken: AUTHTOKEN +``` + +Next, you must create an ingress service definition for your application, which requires a new manifest layer. Click on +the **Add Manifest** button to create a new manifest layer. + +The following YAML content demonstrates an example ingress service where the ngrok Ingress Controller creates a new edge +to route traffic on your ngrok subdomain `example.com` to an existing `example-app` deployed on your Kubernetes cluster +in Palette. + +```yaml +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: example-ingress + namespace: ngrok-ingress-controller +spec: + ingressClassName: ngrok + rules: + - host: example.com + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: example-app + port: + number: 80 +``` + +Once you have defined the ngrok Ingress Controller pack, you can add it to an existing cluster profile, as an add-on +profile, or as a new add-on layer to a deployed cluster. + +:::warning + +If you have a free ngrok account, you can only have one ngrok agent active at a time. This means that you will need to +set the number of replicas to `1` to ensure that your ngrok agent operates properly. + +```yaml +charts: + kubernetes-ingress-controller: + replicaCount: 1 +``` + +::: + + + + + +## Terraform + +You can reference the ngrok Ingress Controller pack in Terraform with a data resource. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} +data "spectrocloud_pack_simple" "ngrok-ingress" { + name = "ngrok-ingress-controller" + version = "0.9.0" + type = "operator-instance" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/nutanix-csi.md b/docs/docs-content/integrations/nutanix-csi.md index f69b71549b..c1f6f6d0c6 100644 --- a/docs/docs-content/integrations/nutanix-csi.md +++ b/docs/docs-content/integrations/nutanix-csi.md @@ -10,49 +10,13 @@ logoUrl: "https://registry.dev.spectrocloud.com/v1/nutanix-csi/blobs/sha256:7944 tags: ["packs", "Nutanix", "Storage"] --- -The Nutanix Container Storage Interface (CSI) pack provides persistent storage for stateful applications. The pack -consists of two Helm charts - **nutanix-csi-storage** and **nutanix-cloud-provider**. - -The Nutanix Container Storage Interface (CSI) Volume Driver chart leverages Nutanix Volumes and Nutanix Files to provide -scalable and persistent storage for applications. - -The Nutanix Cloud Provider chart is a plugin that allows the integration of the Nutanix Acropolis Hypervisor (AHV) -platform with Kubernetes by implementing a node controller function. - ## Versions Supported -- 2.6.6 - -## Prerequisites - -- A Nutanix Prism Central account. - -- A Nutanix Prism Element cluster created. - -- A Nutanix cloud registered with Palette with the name `nutanix`. For more information, refer to - [Register Nutanix Cloud](../clusters/data-center/nutanix/register-nutanix-cloud.md). - -- The cluster must use Kubernetes version 1.20 or higher. + -## Parameters + -The table below lists commonly used parameters you can configure when adding the Nutanix CSI pack. Review the Nutanix -CSI Pack README for a complete list of parameters. - -| **Parameter** | **Description** | **Default** | -| ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------- | -| `nutanix-cloud-provider.createConfig` | Creates a config for the Nutanix Cloud Provider. The existing config will be used if this parameter is set as `false`. | `true` | -| `nutanix-cloud-provider.configName` | Name of the ConfigMap for the Nutanix Cloud Provider config. | `nutanix-config` | -| `nutanix-cloud-provider.createSecret` | Creates a secret for the Nutanix Cloud Provider. The existing secret will be used if this parameter is set as `false`. | `true` | -| `nutanix-cloud-provider.enableCustomLabeling` | Adds additional and custom Nutanix labels to nodes. | `false` | -| `nutanix-cloud-provider.topologyDiscovery.type` | Defines how topology will be discovered (Prism or Categories). | `Prism` | -| `nutanix-cloud-provider.podAnnotations` | Adds annotations to the Cloud Provider Pod. | `{}` | -| `nutanix-csi-storage.volumeClass` | Activates the Nutanix Volumes Storage Class. | `false` | -| `nutanix-csi-storage.volumeClassName` | Name of the Nutanix Volumes Storage Class. | `nutanix-volume` | -| `nutanix-csi-storage.volumeClassRetention` | Retention policy for the Volumes Storage Class (Delete or Retain). | `Delete` | -| `nutanix-csi-storage.fileClass` | Activates Nutanix Files Storage Class. | `false` | - -## Usage +## Configure Storage Container Palette provides a default Volume storage class called `spectro-storage-class` to allow applications requiring volumes to access persistent volumes. This storage class is created by the Nutanix CSI pack. @@ -66,8 +30,10 @@ showcases an example configuration with a storage container named **test-contain storageContainer: "test-container" ``` +## Configure ISCSI Data Services IP Address + Nutanix Volumes utilize an Internet Small Computer System Interface (iSCSI) data service IP address to provide access to -cluster storage. In the Prism Element UI, go to the **Cluster Details** page and configure the iSCSI Data services IP +cluster storage. In the Prism Element UI, go to the **Cluster Details** page and configure the ISCSI data services IP address as described in the [Adding an ISCSI Data Services IP Address](https://portal.nutanix.com/page/documents/details?targetId=Volumes-Guide:vol-cluster-details-modify-wc-t.html) guide. @@ -80,6 +46,10 @@ registration process. ::: + + + + ## Terraform You can reference the Nutanix CSI pack in Terraform with the following data resource. @@ -88,16 +58,10 @@ You can reference the Nutanix CSI pack in Terraform with the following data reso data "spectrocloud_registry" "public_registry" { name = "Public Repo" } -data "spectrocloud_pack_simple" "nutanix-csi" { +data "spectrocloud_pack" "nutanix-csi" { name = "nutanix-csi" version = "2.6.6" type = "helm" registry_uid = data.spectrocloud_registry.public_registry.id } ``` - -## References - -- [Nutanix Documentation](https://www.nutanixbible.com) -- [Nutanix Cloud Controller Manager on GitHub](https://github.com/nutanix-cloud-native/cloud-provider-nutanix) -- [Nutanix CSI Volume Driver Documentation](https://portal.nutanix.com/page/documents/details?targetId=CSI-Volume-Driver-v2_6:CSI-Volume-Driver-v2_6) diff --git a/docs/docs-content/integrations/open-policy-agent.md b/docs/docs-content/integrations/open-policy-agent.md new file mode 100644 index 0000000000..99ad881248 --- /dev/null +++ b/docs/docs-content/integrations/open-policy-agent.md @@ -0,0 +1,29 @@ +--- +sidebar_label: "OpenPolicyAgent" +title: "Open Policy Agent" +description: "OpenPolicyAgent security pack in Spectro Cloud" +hide_table_of_contents: true +type: "integration" +category: ["security", "amd64", "arm64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: + 'https://registry.dev.spectrocloud.com/v1/open-policy-agent/blobs/sha256:fcbad202dc9ca5e7a756562d8f9fc180ee77474034447dabc302d8a5a2bbe148?type=image.webp" + alt="OpenPolicyAgent logo' +tags: ["packs", "open-policy-agent", "security"] +--- + +## Terraform + +You can reference the Open Policy Agent pack in Terraform with the following data resource. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} +data "spectrocloud_pack" "open-policy-agent" { + name = "open-policy-agent" + version = "3.15.1" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/outcold-monitoring.md b/docs/docs-content/integrations/outcold-monitoring.md new file mode 100644 index 0000000000..45456036e1 --- /dev/null +++ b/docs/docs-content/integrations/outcold-monitoring.md @@ -0,0 +1,27 @@ +--- +sidebar_label: "Outcold Solutions" +title: "Outcold Solutions" +description: "Outcold Solutions - Monitoring pack in Spectro Cloud" +hide_table_of_contents: true +type: "integration" +category: ["monitoring", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/outcold-monitoring/blobs/sha256:3140960d1f39649ad821cfc59450d3c164079b03d15387b2e638eae07442af41?type=image.webp" +tags: ["packs", "outcold-monitoring", "monitoring"] +--- + +## Terraform + +You can reference the Outcold Solutions pack in Terraform with the following data resource. + +```hcl +data "spectrocloud_registry" "community_registry" { + name = "Palette Registry" +} +data "spectrocloud_pack" "outcold" { + name = "outcold-monitoring" + version = "5.0.0" + type = "manifest" + registry_uid = data.spectrocloud_registry.community_registry.id +} +``` diff --git a/docs/docs-content/integrations/packs.mdx b/docs/docs-content/integrations/packs.mdx new file mode 100644 index 0000000000..0433ef8494 --- /dev/null +++ b/docs/docs-content/integrations/packs.mdx @@ -0,0 +1,11 @@ +--- +sidebar_label: "Pack Information" +title: "Pack Information" +description: "Learn about packs that Palette offers and choose from Pallette packs." +hide_table_of_contents: true +sidebar_class_name: "hide-from-sidebar" +icon: "teams" +tags: ["packs"] +--- + + diff --git a/docs/docs-content/integrations/permission-manager.md b/docs/docs-content/integrations/permission-manager.md index 0ebc2d653c..c81ffbdb4a 100644 --- a/docs/docs-content/integrations/permission-manager.md +++ b/docs/docs-content/integrations/permission-manager.md @@ -10,33 +10,18 @@ logoUrl: "https://registry.spectrocloud.com/v1/permission-manager/blobs/sha256:1 tags: ["packs", "permission-manager", "security"] --- -This integration provides a graphical user interface for RBAC management in Kubernetes. You can create users, assign -namespaces/permissions, and distribute Kubeconfig YAML files quickly. - ## Versions Supported - + -- **1.0.0** - - - - -## Configuration - -| Name | Supported Value | Description | -| ------------ | -------------------------- | ------------------------------------------------------------------ | -| namespace | Any valid namespace string | The namespace under which this integration should be deployed onto | -| authPassword | | Login password for the web interface | - -## Customizing the permission templates +## Customize Permission Templates Create a ClusterRole starting with `template-namespaced-resources___` or `template-cluster-resources___` and apply it to the cluster. Permission manager will honor any custom resources with this naming convention and will populate on the user interface. -## Ingress +## Configure Ingress Follow below steps to configure Ingress on Permission Manager @@ -45,9 +30,23 @@ Follow below steps to configure Ingress on Permission Manager - Enable Ingress; Change enabled from false to "true" - Set Ingress rules like annotations, path, hosts, etc. -With these config changes, you can access Permission manager service on the Ingress Controller LoadBalancer hostname / -IP +With these config changes, you can access Permission manager service on the Ingress Controller LoadBalancer hostname/IP. -## References +
+
-- [Permission Manager GitHub](https://github.com/sighupio/permission-manager) +## Terraform + +You can reference the Permission Manager pack in Terraform with the following data resource. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} +data "spectrocloud_pack" "permission-manager" { + name = "permission-manager" + version = "1.0.0" + type = "manifest" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/portworx-add-on.md b/docs/docs-content/integrations/portworx-add-on.md new file mode 100644 index 0000000000..8cca604c95 --- /dev/null +++ b/docs/docs-content/integrations/portworx-add-on.md @@ -0,0 +1,29 @@ +--- +sidebar_label: "Portworx /w Operator Add-on" +title: "Portworx Operator Add-on" +description: "Portworx storage CSI for all use cases" +hide_table_of_contents: true +type: "integration" +category: ["storage", "amd64"] +sidebar_class_name: "hide-from-sidebar" +tags: ["packs", "portworx", "storage"] +--- + + + +## Terraform + +Use the following Terraform code to interact with the Portworx Operator pack in your Terraform scripts. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "portworx-operator" { + name = "csi-portworx-add-on" + version = "3.0.0" + type = "operator-instance" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/prismacloud.md b/docs/docs-content/integrations/prismacloud.md index 66879f8bbc..89c98d5532 100644 --- a/docs/docs-content/integrations/prismacloud.md +++ b/docs/docs-content/integrations/prismacloud.md @@ -10,21 +10,18 @@ logoUrl: "https://registry.dev.spectrocloud.com/v1/prismacloud/blobs/sha256:9ddb tags: ["packs", "prismacloud", "security"] --- -Prisma Cloud Compute is a cloud workload protection platform (CWPP) offering protection for hosts, containers, and -server-less deployments in any cloud, and across the software lifecycle. Prisma Cloud Compute is cloud-native and -API-enabled. It can protect tenant workloads, regardless of the underlying compute technology or the cloud deployment. - -## Versions Supported - - - - - -**20.9.0** - - - - -## References - -- [Prisma Cloud Compute Documentation](https://docs.paloaltonetworks.com/prisma/prisma-cloud) +## Terraform + +You can reference the Prisma Cloud Compute pack in Terraform with the following data resource. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} +data "spectrocloud_pack" "prisma" { + name = "prismacloud" + version = "20.09.0" + type = "manifest" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/prometheus-agent.md b/docs/docs-content/integrations/prometheus-agent.md index f1404b62de..65f5f02059 100644 --- a/docs/docs-content/integrations/prometheus-agent.md +++ b/docs/docs-content/integrations/prometheus-agent.md @@ -10,30 +10,13 @@ logoUrl: "https://registry.spectrocloud.com/v1/prometheus-operator/blobs/sha256: tags: ["packs", "prometheus-agent", "monitoring"] --- -Prometheus is an open-source monitoring and alerting system that is designed to collect and analyze metrics from various -systems and services. - -Prometheus is built around a time-series database that stores metrics data. It uses a flexible querying language called -PromQL to extract and process metrics data. Prometheus also has a powerful alerting system that can be used to send -notifications when specific conditions are met. - -Prometheus can be used to monitor a wide range of systems and services, including servers, containers, databases, and -applications. It can be deployed in a variety of environments, including on-prem, cloud, and hybrid setups. - -The Prometheus Agent pack works in tandem with the [Prometheus Operator pack](prometheus-operator.md). Check out the -guides [Deploy Monitoring Stack](../clusters/cluster-management/monitoring/deploy-monitor-stack.md) and -[Enable Monitoring on Host Cluster](../clusters/cluster-management/monitoring/deploy-agent.md) to learn how to create a -monitoring stack with Prometheus for your Palette environment. - ## Versions Supported -**19.0.X** + -## Prerequisites + -- A host cluster that has the [Prometheus Operator pack](prometheus-operator.md) installed. - -## Parameters +## Configure the Prometheus Agent Pack The Prometheus agent supports all the parameters exposed by the Prometheus Helm Chart. Refer to the [Prometheus Helm Chart](https://github.com/prometheus-community/helm-charts/tree/main/charts/prometheus#configuration) @@ -41,8 +24,6 @@ documentation for details. From a Palette perspective, you must provide a value for the `remoteWrite.url` parameter shown in the following example. -
- ```yaml charts: prometheus: @@ -60,8 +41,6 @@ The following image displays a host cluster with the Prometheus Operator pack in ![A view of the cluster details page with a highlighted box around the Prometheus service URL](/integrations_prometheus-agent_cluster-detail-view.webp) -
- :::warning The Prometheus server URL must be in the format `http://HOST:PORT/api/v1/write`. Example: @@ -72,8 +51,6 @@ The Prometheus server URL must be in the format `http://HOST:PORT/api/v1/write`. If the Prometheus server is configured with authentication, add the authentication parameters. Replace `` and `` with the actual credential values. -
- ```yaml charts: prometheus: @@ -86,13 +63,7 @@ charts: password: ``` -## Usage - -The Prometheus agent pack works out-of-the-box and only requires you to provide a Prometheus server URL. Add the -Prometheus agent pack to a cluster profile to get started with Prometheus. You can create a new cluster profile that has -the Prometheus agent as an add-on pack or you can update an existing cluster profile by adding the Prometheus agent -pack. For guidance, review -[Update a Cluster Profile](../profiles/cluster-profiles/modify-cluster-profiles/update-cluster-profile.md). +## Access the Grafana Dashboard Log in to the Grafana dashboard to view and create dashboards. You can find the Grafana dashboard URL by reviewing the details of the Kubernetes cluster hosting the Prometheus server. Use the URL exposed by the @@ -116,8 +87,6 @@ The following dashboards are available by default: - Kubernetes/Views/Pods: A view of all the pods in a node with the Prometheus agent installed. -
- :::info Use the filters to narrow down the information displayed. All Palette dashboards include the **project** and **cluster** @@ -128,27 +97,23 @@ filter. We encourage you to check out the [Grafana](https://grafana.com/tutorials/) tutorials and learning resources to learn more about Grafana. +
+ +
+ ## Terraform -You can retrieve details about the Prometheus agent pack by using the following Terraform code. +You can reference the Prometheus Agent pack in Terraform with the following data resource. ```hcl data "spectrocloud_registry" "public_registry" { name = "Public Repo" } -data "spectrocloud_pack_simple" "pack-info" { +data "spectrocloud_pack" "prometheus" { name = "prometheus-agent" version = "19.0.2" type = "helm" registry_uid = data.spectrocloud_registry.public_registry.id } ``` - -# References - -- [Prometheus Operator pack](prometheus-operator.md) - -- [Prometheus Helm Chart](https://github.com/prometheus-community/helm-charts/tree/main/charts/prometheus#configuration) - -- [Grafana Tutorials](https://grafana.com/tutorials/) diff --git a/docs/docs-content/integrations/prometheus-operator.md b/docs/docs-content/integrations/prometheus-operator.md index e7ba20dbd4..c085669ba8 100644 --- a/docs/docs-content/integrations/prometheus-operator.md +++ b/docs/docs-content/integrations/prometheus-operator.md @@ -10,24 +10,6 @@ logoUrl: "https://registry.spectrocloud.com/v1/prometheus-operator/blobs/sha256: tags: ["packs", "prometheus-operator", "monitoring"] --- -Prometheus is an open-source monitoring system that is designed to collect and analyze metrics from various sources, -such as applications, servers, and networks. It is widely used in the DevOps world to monitor the health and performance -of applications and infrastructure. Prometheus stores metrics in a time-series database and provides a query language -for analyzing the data. It also includes a powerful alerting system that can notify operators when thresholds are -breached. - -The Prometheus Operator is a tool that simplifies the deployment and management of Prometheus in a Kubernetes cluster. -It automates tasks such as configuring Prometheus, creating and managing Prometheus rules and alerts and scaling -Prometheus instances based on demand. The Operator uses Kubernetes custom resources to define and manage Prometheus -instances and related resources, such as ServiceMonitors, which enable Prometheus to discover and monitor services -running in the cluster. - -You can use the Prometheus Operator to create a monitoring stack that other host clusters point to and forward metrics -to. Check out the guide [Deploy Monitoring Stack](../clusters/cluster-management/monitoring/deploy-monitor-stack.md) to -learn how to create a monitoring stack with Prometheus for your Palette environment. - -
- :::info We recommend you use version v44.3.x or greater moving forward for a simplified and improved user experience when @@ -39,74 +21,13 @@ more about the remote monitoring feature. ## Versions Supported -
- - + -## Prerequisites - -- Kubernetes v1.16 or greater. - -- The minimum required size for the Prometheus server is 4 CPU, 8 GB Memory, and 10 GB Storage. We recommend the - monitoring stack have 1.5x to 2x the minimum required size: - - Recommended size: - - - 8 CPU - - 16 GB Memory - - 20 GB Storage - - As new clusters with the Prometheus agent are added to your environment, review the resource utilization and consider - increasing resources if needed. As the Prometheus documentation recommends, each additional agent requires the - following resources from the monitoring stack: - - Each added agent: - - - 0.1 CPU - - 250 MiB Memory - - 1 GB Storage - - Refer to the - [Prometheus Operational aspects](https://prometheus.io/docs/prometheus/latest/storage/#operational-aspects) - documentation for additional guidance. - -## Parameters - -The Prometheus operator supports all the parameters exposed by the kube-prometheus-stack Helm Chart. Refer to the -[kube-prometheus-stack](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack) -documentation for details. - -The Prometheus Operator pack has one parameter you must initialize `grafana.adminPassword`: - -
- -```yaml -charts: - kube-prometheus-stack: - grafana: - adminPassword: "" -``` - -Use the `grafana.adminPassword` parameter to assign a password to the Grafana admin user `admin`. - -Additional parameters you should be aware of can be found by expanding the **Presets** options. You can modify the -preset settings when you create the profile or when you deploy the cluster and review the cluster profile. - -![A view of the pack's preset drawer expanded with radio buttons](/integrations_prometheus-operator_operator-preset-view-expanded.webp) - -Review the usage section below to learn more about each preset option. - -
- -## Usage - Check out the guide [Deploy Monitoring Stack](../clusters/cluster-management/monitoring/deploy-monitor-stack.md) to learn how to create a monitoring stack with Prometheus for your Palette environment. -
- -#### Airgap Palette and VerteX +## Airgap Palette and VerteX In the context of an airgap Palette or VerteX installation, you must remove the `grafana-piechart-panel` plugin. This plugin is not included by default and requires an internet connection to download. The monitoring stack doesn't require @@ -120,13 +41,11 @@ charts: - grafana-piechart-panel ``` -#### Email Alerts +## Email Alerts You can configure the Prometheus server to send email alerts to a set of contacts. Toggle the **Email Alerts** button to enable email alerting. Update the `alertmanager.config.receivers` settings with all the required email setting values. -
- ```yaml charts: kube-prometheus-stack: @@ -147,9 +66,7 @@ charts: Refer to the [Prometheus Alertmanager Configuration](https://prometheus.io/docs/alerting/latest/configuration/) documentation to learn more about Alertmanager. -
- -#### Grafana Ingress +## Grafana Ingress You can enable an ingress endpoint for Grafana that will deploy an NGINX ingress controller. This feature can be used to enable HTTPS and require authentication for all Prometheus API requests. @@ -159,9 +76,7 @@ port 80. Toggle the **Enable** button to enable the use of Ingress. -
- -#### Thanos SideCar +## Thanos SideCar [Thanos](https://prometheus-operator.dev/docs/platform/thanos/) is an open-source system for running large-scale, distributed, and highly available Prometheus setups. Thanos allows Prometheus to store data for extended periods in @@ -170,17 +85,13 @@ horizontally without the risk of using up local storage space. Toggle the **Enable** button to enable the use of Thanos. -
- -#### Object Store +## Object Store Select the Thanos object storage type you will use. Review the `thanos.objstoreConfig` parameters to configure the use of object storage with Thanos. Refer to the [Thanos Object Storage](https://github.com/thanos-io/thanos/blob/main/docs/storage.md) documentation to learn more about how to configure each object storage. -
- ```yaml charts: kube-prometheus-stack: @@ -190,15 +101,13 @@ charts: objstoreConfig: ``` -#### Thanos Ruler Object Store +## Thanos Ruler Object Store By default, Thanos Ruler event data is saved in object storage specified for Thanos, but you can specify a different object storage for event data. Refer to the [Thanos Ruler](https://prometheus-operator.dev/docs/platform/thanos/#thanos-ruler) resource to learn more. -
- -#### Remote Monitoring +## Remote Monitoring You can configure the Prometheus server to accept metrics from Prometheus agents and become a centralized aggregation point for all Kubernetes metrics. Enabling this feature will expose port 9090 of the _prometheus-operator-prometheus_ @@ -214,24 +123,18 @@ about configuration options. To get started with remote monitoring, check out the [Deploy Monitoring Stack](../clusters/cluster-management/monitoring/deploy-monitor-stack.md) guide. -
+## Palette Resources Monitoring -#### Palette Resources Monitoring - -You can access internal Palette metrics in Grafana by adding the -[Prometheus Cluster Metrics](prometheus-cluster-metrics.md) pack to all your client clusters. Refer to the -[Enable Monitoring on Host Cluster](../clusters/cluster-management/monitoring/deploy-agent.md) guide to learn more. + +You can access internal Palette metrics in Grafana by adding the pack to all your client clusters. Refer to the [Enable Monitoring on Host Cluster](../clusters/cluster-management/monitoring/deploy-agent.md) guide to learn more. + -
- -#### Persistent Storage +## Persistent Storage You can configure the Prometheus Operator to use persistent storage. To enable persistent storage add the following code snippet to the `kube-prometheus-stack.prometheus.prometheusSpec.storageSpec` configuration block in the pack's YAML configuration file. The code snippet below creates a Persistent Volume Claim (PVC) for the Prometheus Operator. -
- ```yaml kube-prometheus-stack: prometheus: @@ -248,7 +151,7 @@ kube-prometheus-stack: storage: 5Gi ``` -### Dependencies +## Dependencies The Prometheus Operator pack installs the following dependencies: @@ -265,69 +168,10 @@ The Prometheus Operator pack installs the following dependencies: -## Prerequisites - -- Kubernetes v1.16 or greater. - -- The minimum required size for the Prometheus server is 4 CPU, 8 GB Memory, and 10 GB Storage. We recommend the - monitoring stack have 1.5x to 2x the minimum required size: - - Recommended size: - - - 8 CPU - - 16 GB Memory - - 20 GB Storage - - As new clusters with the Prometheus agent are added to your environment, review the resource utilization and consider - increasing resources if needed. As the Prometheus documentation recommends, each additional agent requires the - following resources from the monitoring stack: - - Each added agent: - - - 0.1 CPU - - 250 MiB Memory - - 1 GB Storage - - Refer to the - [Prometheus Operational aspects](https://prometheus.io/docs/prometheus/latest/storage/#operational-aspects) - documentation for additional guidance. - -## Parameters - -The Prometheus operator supports all the parameters exposed by the kube-prometheus-stack Helm Chart. Refer to the -[kube-prometheus-stack](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack) -documentation for details. - -The Prometheus Operator pack has one parameter you must initialize `grafana.adminPassword`: - -
- -```yaml -charts: - kube-prometheus-stack: - grafana: - adminPassword: "" -``` - -Use the `grafana.adminPassword` parameter to assign a password to the Grafana admin user `admin`. - -Additional parameters you should be aware of can be found by expanding the **Presets** options. You can modify the -preset settings when you create the profile or when you deploy the cluster and review the cluster profile. - -![A view of the pack's preset drawer expanded with radio buttons](/integrations_prometheus-operator_operator-preset-view-expanded.webp) - -Review the usage section below to learn more about each preset option. - -
- -## Usage - Check out the guide [Deploy Monitoring Stack](../clusters/cluster-management/monitoring/deploy-monitor-stack.md) to learn how to create a monitoring stack with Prometheus for your Palette environment. -
- -#### Airgap Palette and VerteX +## Airgap Palette and VerteX In the context of an airgap Palette or VerteX installation, you must remove the `grafana-piechart-panel` plugin. This plugin is not included by default and requires an internet connection to download. The monitoring stack doesn't require @@ -341,13 +185,11 @@ charts: - grafana-piechart-panel ``` -#### Email Alerts +## Email Alerts You can configure the Prometheus server to send email alerts to a set of contacts. Toggle the **Email Alerts** button to enable email alerting. Update the `alertmanager.config.receivers` settings with all the required email setting values. -
- ```yaml charts: kube-prometheus-stack: @@ -368,9 +210,7 @@ charts: Refer to the [Prometheus Alertmanager Configuration](https://prometheus.io/docs/alerting/latest/configuration/) documentation to learn more about Alertmanager. -
- -#### Grafana Ingress +## Grafana Ingress You can enable an ingress endpoint for Grafana that will deploy an NGINX ingress controller. This feature can be used to enable HTTPS and require authentication for all Prometheus API requests. @@ -380,9 +220,7 @@ port 80. Toggle the **Enable** button to enable the use of Ingress. -
- -#### Thanos SideCar +## Thanos SideCar [Thanos](https://prometheus-operator.dev/docs/platform/thanos/) is an open-source system for running large-scale, distributed, and highly available Prometheus setups. Thanos allows Prometheus to store data for extended periods in @@ -391,17 +229,13 @@ horizontally without the risk of using up local storage space. Toggle the **Enable** button to enable the use of Thanos. -
- -#### Object Store +## Object Store Select the Thanos object storage type you will use. Review the `thanos.objstoreConfig` parameters to configure the use of object storage with Thanos. Refer to the [Thanos Object Storage](https://github.com/thanos-io/thanos/blob/main/docs/storage.md) documentation to learn more about how to configure each object storage. -
- ```yaml charts: kube-prometheus-stack: @@ -411,15 +245,13 @@ charts: objstoreConfig: ``` -#### Thanos Ruler Object Store +## Thanos Ruler Object Store By default, Thanos Ruler event data is saved in object storage specified for Thanos, but you can specify a different object storage for event data. Refer to the [Thanos Ruler](https://prometheus-operator.dev/docs/platform/thanos/#thanos-ruler) resource to learn more. -
- -#### Remote Monitoring +## Remote Monitoring You can configure the Prometheus server to accept metrics from Prometheus agents and become a centralized aggregation point for all Kubernetes metrics. Enabling this feature will expose port 9090 of the _prometheus-operator-prometheus_ @@ -435,24 +267,18 @@ about configuration options. To get started with remote monitoring, check out the [Deploy Monitoring Stack](../clusters/cluster-management/monitoring/deploy-monitor-stack.md) guide. -
- -#### Palette Resources Monitoring - -You can access internal Palette metrics in Grafana by adding the -[Prometheus Cluster Metrics](prometheus-cluster-metrics.md) pack to all your client clusters. Refer to the -[Enable Monitoring on Host Cluster](../clusters/cluster-management/monitoring/deploy-agent.md) guide to learn more. +## Palette Resources Monitoring -
+ +You can access internal Palette metrics in Grafana by adding the pack to all your client clusters. Refer to the [Enable Monitoring on Host Cluster](../clusters/cluster-management/monitoring/deploy-agent.md) guide to learn more. + -#### Persistent Storage +## Persistent Storage You can configure the Prometheus Operator to use persistent storage. To enable persistent storage, add the following code snippet to the `kube-prometheus-stack.prometheus.prometheusSpec.storageSpec` configuration block in the pack's YAML configuration file. The code snippet below creates a Persistent Volume Claim (PVC) for the Prometheus Operator. -
- ```yaml kube-prometheus-stack: prometheus: @@ -469,7 +295,7 @@ kube-prometheus-stack: storage: 5Gi ``` -### Dependencies +## Dependencies The Prometheus Operator pack installs the following dependencies: @@ -486,69 +312,10 @@ The Prometheus Operator pack installs the following dependencies: -## Prerequisites - -- Kubernetes v1.16 or greater. - -- The minimum required size for the Prometheus server is 4 CPU, 8 GB Memory, and 10 GB Storage. We recommend the - monitoring stack have 1.5x to 2x the minimum required size: - - Recommended size: - - - 8 CPU - - 16 GB Memory - - 20 GB Storage - - As new clusters with the Prometheus agent are added to your environment, review the resource utilization and consider - increasing resources if needed. As the Prometheus documentation recommends, each additional agent requires the - following resources from the monitoring stack: - - Each added agent: - - - 0.1 CPU - - 250 MiB Memory - - 1 GB Storage - - Refer to the - [Prometheus Operational aspects](https://prometheus.io/docs/prometheus/latest/storage/#operational-aspects) - documentation for additional guidance. - -## Parameters - -The Prometheus operator supports all the parameters exposed by the kube-prometheus-stack Helm Chart. Refer to the -[kube-prometheus-stack](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack) -documentation for details. - -The Prometheus Operator pack has one parameter you must initialize `grafana.adminPassword`: - -
- -```yaml -charts: - kube-prometheus-stack: - grafana: - adminPassword: "" -``` - -Use the `grafana.adminPassword` parameter to assign a password to the Grafana admin user `admin`. - -Additional parameters you should be aware of can be found by expanding the **Presets** options. You can modify the -preset settings when you create the profile or when you deploy the cluster and review the cluster profile. - -![A view of the pack's preset drawer expanded with radio buttons](/integrations_prometheus-operator_operator-preset-view-expanded.webp) - -Review the usage section below to learn more about each preset option. - -
- -## Usage - Check out the guide [Deploy Monitoring Stack](../clusters/cluster-management/monitoring/deploy-monitor-stack.md) to learn how to create a monitoring stack with Prometheus for your Palette environment. -
- -#### Airgap Palette and VerteX +## Airgap Palette and VerteX In the context of an airgap Palette or VerteX installation, you must remove the `grafana-piechart-panel` plugin. This plugin is not included by default and requires an internet connection to download. The monitoring stack doesn't require @@ -562,13 +329,11 @@ charts: - grafana-piechart-panel ``` -#### Email Alerts +## Email Alerts You can configure the Prometheus server to send email alerts to a set of contacts. Toggle the **Email Alerts** button to enable email alerting. Update the `alertmanager.config.receivers` settings with all the required email setting values. -
- ```yaml charts: kube-prometheus-stack: @@ -589,9 +354,7 @@ charts: Refer to the [Prometheus Alertmanager Configuration](https://prometheus.io/docs/alerting/latest/configuration/) documentation to learn more about Alertmanager. -
- -#### Grafana Ingress +## Grafana Ingress You can enable an ingress endpoint for Grafana that will deploy an NGINX ingress controller. This feature can be used to enable HTTPS and require authentication for all Prometheus API requests. @@ -601,9 +364,7 @@ port 80. Toggle the **Enable** button to enable the use of Ingress. -
- -#### Thanos SideCar +## Thanos SideCar [Thanos](https://prometheus-operator.dev/docs/platform/thanos/) is an open-source system for running large-scale, distributed, and highly available Prometheus setups. Thanos allows Prometheus to store data for extended periods in @@ -612,17 +373,13 @@ horizontally without the risk of using up local storage space. Toggle the **Enable** button to enable the use of Thanos. -
- -#### Object Store +## Object Store Select the Thanos object storage type you will use. Review the `thanos.objstoreConfig` parameters to configure the use of object storage with Thanos. Refer to the [Thanos Object Storage](https://github.com/thanos-io/thanos/blob/main/docs/storage.md) documentation to learn more about how to configure each object storage. -
- ```yaml charts: kube-prometheus-stack: @@ -632,15 +389,13 @@ charts: objstoreConfig: ``` -#### Thanos Ruler Object Store +## Thanos Ruler Object Store By default, Thanos Ruler event data is saved in object storage specified for Thanos, but you can specify a different object storage for event data. Refer to the [Thanos Ruler](https://prometheus-operator.dev/docs/platform/thanos/#thanos-ruler) resource to learn more. -
- -#### Remote Monitoring +## Remote Monitoring You can configure the Prometheus server to accept metrics from Prometheus agents and become a centralized aggregation point for all Kubernetes metrics. Enabling this feature will expose port 9090 of the _prometheus-operator-prometheus_ @@ -650,30 +405,26 @@ service. Use the generated service URL to provide other Kubernetes clusters with The remote monitoring feature is configured with defaults to help you consume this feature out-of-the-box. You can change any configuration related to remote monitoring to fine-tune settings for your environment. -Refer to the [Prometheus Remote Write Tuning](https://prometheus.io/docs/practices/remote_write/) resource to learn more + +Refer to the resource to learn more about the available configuration options. + To get started with remote monitoring, check out the [Deploy Monitoring Stack](../clusters/cluster-management/monitoring/deploy-monitor-stack.md) guide. -
- -#### Palette Resources Monitoring - -You can access internal Palette metrics in Grafana by adding the -[Prometheus Cluster Metrics](prometheus-cluster-metrics.md) pack to all your client clusters. Refer to the -[Enable Monitoring on Host Cluster](../clusters/cluster-management/monitoring/deploy-agent.md) guide to learn more. +## Palette Resources Monitoring -
+ +You can access internal Palette metrics in Grafana by adding the pack to all your client clusters. Refer to the [Enable Monitoring on Host Cluster](../clusters/cluster-management/monitoring/deploy-agent.md) guide to learn more. + -#### Persistent Storage +## Persistent Storage You can configure the Prometheus Operator to use persistent storage. To enable persistent storage add the following code snippet to the `kube-prometheus-stack.prometheus.prometheusSpec.storageSpec` configuration block in the pack's YAML configuration file. The code snippet below creates a Persistent Volume Claim (PVC) for the Prometheus Operator. -
- ```yaml kube-prometheus-stack: prometheus: @@ -690,7 +441,7 @@ kube-prometheus-stack: storage: 5Gi ``` -### Dependencies +## Dependencies The Prometheus Operator pack installs the following dependencies: @@ -707,69 +458,10 @@ The Prometheus Operator pack installs the following dependencies: -## Prerequisites - -- Kubernetes v1.16 or greater. - -- The minimum required size for the Prometheus server is 4 CPU, 8 GB Memory, and 10 GB Storage. We recommend the - monitoring stack have 1.5x to 2x the minimum required size: - - Recommended size: - - - 8 CPU - - 16 GB Memory - - 20 GB Storage - - As new clusters with the Prometheus agent are added to your environment, review the resource utilization and consider - increasing resources if needed. As the Prometheus documentation recommends, each additional agent requires the - following resources from the monitoring stack: - - Each added agent: - - - 0.1 CPU - - 250 MiB Memory - - 1 GB Storage - - Refer to the - [Prometheus Operational aspects](https://prometheus.io/docs/prometheus/latest/storage/#operational-aspects) - documentation for additional guidance. - -## Parameters - -The Prometheus operator supports all the parameters exposed by the kube-prometheus-stack Helm Chart. Refer to the -[kube-prometheus-stack](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack) -documentation for details. - -The Prometheus Operator pack has one parameter you must initialize `grafana.adminPassword`: - -
- -```yaml -charts: - kube-prometheus-stack: - grafana: - adminPassword: "" -``` - -Use the `grafana.adminPassword` parameter to assign a password to the Grafana admin user `admin`. - -Additional parameters you should be aware of can be found by expanding the **Presets** options. You can modify the -preset settings when you create the profile or when you deploy the cluster and review the cluster profile. - -![A view of the pack's preset drawer expanded with radio buttons](/integrations_prometheus-operator_operator-preset-view-expanded.webp) - -Review the usage section below to learn more about each preset option. - -
- -## Usage - Check out the guide [Deploy Monitoring Stack](../clusters/cluster-management/monitoring/deploy-monitor-stack.md) to learn how to create a monitoring stack with Prometheus for your Palette environment. -
- -#### Airgap Palette and VerteX +## Airgap Palette and VerteX In the context of an airgap Palette or VerteX installation, you must remove the `grafana-piechart-panel` plugin. This plugin is not included by default and requires an internet connection to download. The monitoring stack doesn't require @@ -783,13 +475,11 @@ charts: - grafana-piechart-panel ``` -#### Email Alerts +## Email Alerts You can configure the Prometheus server to send email alerts to a set of contacts. Toggle the **Email Alerts** button to enable email alerting. Update the `alertmanager.config.receivers` settings with all the required email setting values. -
- ```yaml charts: kube-prometheus-stack: @@ -810,9 +500,7 @@ charts: Refer to the [Prometheus Alertmanager Configuration](https://prometheus.io/docs/alerting/latest/configuration/) documentation to learn more about Alertmanager. -
- -#### Grafana Ingress +## Grafana Ingress You can enable an ingress endpoint for Grafana that will deploy an NGINX ingress controller. This feature can be used to enable HTTPS and require authentication for all Prometheus API requests. @@ -822,9 +510,7 @@ port 80. Toggle the **Enable** button to enable the use of Ingress. -
- -#### Thanos SideCar +## Thanos SideCar [Thanos](https://prometheus-operator.dev/docs/platform/thanos/) is an open-source system for running large-scale, distributed, and highly available Prometheus setups. Thanos allows Prometheus to store data for extended periods in @@ -833,17 +519,13 @@ horizontally without the risk of using up local storage space. Toggle the **Enable** button to enable the use of Thanos. -
- -#### Object Store +## Object Store Select the Thanos object storage type you will use. Review the `thanos.objstoreConfig` parameters to configure the use of object storage with Thanos. Refer to the [Thanos Object Storage](https://github.com/thanos-io/thanos/blob/main/docs/storage.md) documentation to learn more about how to configure each object storage. -
- ```yaml charts: kube-prometheus-stack: @@ -853,15 +535,13 @@ charts: objstoreConfig: ``` -#### Thanos Ruler Object Store +## Thanos Ruler Object Store By default, Thanos Ruler event data is saved in object storage specified for Thanos, but you can specify a different object storage for event data. Refer to the [Thanos Ruler](https://prometheus-operator.dev/docs/platform/thanos/#thanos-ruler) resource to learn more. -
- -#### Remote Monitoring +## Remote Monitoring You can configure the Prometheus server to accept metrics from Prometheus agents and become a centralized aggregation point for all Kubernetes metrics. Enabling this feature will expose port 9090 of the _prometheus-operator-prometheus_ @@ -877,17 +557,14 @@ about configuration options. To get started with remote monitoring, check out the [Deploy Monitoring Stack](../clusters/cluster-management/monitoring/deploy-monitor-stack.md) guide. -
- -#### Palette Resources Monitoring +## Palette Resources Monitoring -You can access internal Palette metrics in Grafana by adding the -[Prometheus Cluster Metrics](prometheus-cluster-metrics.md) pack to all your client clusters. Refer to the + +You can access internal Palette metrics in Grafana by adding the pack to all your client clusters. Refer to the [Enable Monitoring on Host Cluster](../clusters/cluster-management/monitoring/deploy-agent.md) guide to learn more. + -
- -### Dependencies +## Dependencies The Prometheus Operator pack installs the following dependencies: @@ -904,75 +581,14 @@ The Prometheus Operator pack installs the following dependencies: -## Prerequisites - -- Kubernetes v1.16 or greater. - -- The minimum required size for the Prometheus server is 4 CPU, 8 GB Memory, and 10 GB Storage. We recommend the - monitoring stack have 1.5x to 2x the minimum required size: - - Recommended size: - - - 8 CPU - - 16 GB Memory - - 20 GB Storage. - - As new clusters with the Prometheus agent are added to your environment, review the resource utilization and consider - increasing resources if needed. As the Prometheus documentation recommends, each additional agent requires the - following resources from the monitoring stack: - - Each added agent: - - - 0.1 CPU - - 250 MiB Memory - - 1 GB Storage. - - Refer to the - [Prometheus Operational aspects](https://prometheus.io/docs/prometheus/latest/storage/#operational-aspects) - documentation for additional guidance. - -## Parameters - -The Prometheus operator supports all the parameters exposed by the kube-prometheus-stack Helm Chart. Refer to the -[kube-prometheus-stack](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack) -documentation for details. - -The Prometheus Operator pack has one parameter you must initialize `grafana.adminPassword`: - -
- -```yaml -charts: - kube-prometheus-stack: - grafana: - adminPassword: "" -``` - -Use the `grafana.adminPassword` parameter to assign a password to the Grafana admin user `admin`. - -Additional parameters you should be aware of can be found by expanding the **Presets** options. You can modify the -preset settings when you create the profile or when you deploy the cluster and review the cluster profile. - -![A view of the pack's preset drawer expanded with radio buttons](/integrations_prometheus-operator_operator-preset-view-expanded.webp) - -Review the usage section below to learn more about each preset option. - -
- -## Usage - Check out the guide [Deploy Monitoring Stack](../clusters/cluster-management/monitoring/deploy-monitor-stack.md) to learn how to create a monitoring stack with Prometheus for your Palette environment. -
- -#### Email Alerts +## Email Alerts You can configure the Prometheus server to send email alerts to a set of contacts. Toggle the **Email Alerts** button to enable email alerting. Update the `alertmanager.config.receivers` settings with all the required email setting values. -
- ```yaml charts: kube-prometheus-stack: @@ -993,9 +609,7 @@ charts: Refer to the [Prometheus Alertmanager Configuration](https://prometheus.io/docs/alerting/latest/configuration/) documentation to learn more about Alertmanager. -
- -#### Grafana Ingress +## Grafana Ingress You can enable an ingress endpoint for Grafana that will deploy an NGINX ingress controller. This feature can be used to enable HTTPS and require authentication for all Prometheus API requests. @@ -1005,9 +619,7 @@ port 80. Toggle the **Enable** button to enable the use of Ingress. -
- -#### Thanos SideCar +## Thanos SideCar [Thanos](https://prometheus-operator.dev/docs/platform/thanos/) is an open-source system for running large-scale, distributed, and highly available Prometheus setups. Thanos allows Prometheus to store data for extended periods in @@ -1016,17 +628,13 @@ horizontally without the risk of using up local storage space. Toggle the **Enable** button to enable the use of Thanos. -
- -#### Object Store +## Object Store Select the Thanos object storage type you will use. Review the `thanos.objstoreConfig` parameters to configure the use of object storage with Thanos. Refer to the [Thanos Object Storage](https://github.com/thanos-io/thanos/blob/main/docs/storage.md) documentation to learn more about how to configure each object storage. -
- ```yaml charts: kube-prometheus-stack: @@ -1036,15 +644,13 @@ charts: objstoreConfig: ``` -#### Thanos Ruler Object Store +## Thanos Ruler Object Store By default, Thanos Ruler event data is saved in object storage specified for Thanos, but you can specify a different object storage for event data. Refer to the [Thanos Ruler](https://prometheus-operator.dev/docs/platform/thanos/#thanos-ruler) resource to learn more. -
- -#### Remote Monitoring +## Remote Monitoring You can configure the Prometheus server to accept metrics from Prometheus agents and become a centralized aggregation point for all Kubernetes metrics. Enabling this feature will expose port 9090 of the _prometheus-operator-prometheus_ @@ -1060,7 +666,7 @@ configuration options. To get started with remote monitoring, check out the [Deploy Monitoring Stack](../clusters/cluster-management/monitoring/deploy-monitor-stack.md) guide. -### Dependencies +## Dependencies The Prometheus Operator pack installs the following dependencies: @@ -1076,45 +682,14 @@ The Prometheus Operator pack installs the following dependencies: -## Prerequisites - -- Kubernetes v1.16 or greater. - -## Parameters - -The Prometheus operator supports all the parameters exposed by the kube-prometheus-stack Helm Chart. Refer to the -[kube-prometheus-stack](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack) -documentation for details. - -The Prometheus Operator pack has one parameter you must initialize `grafana.adminPassword`: - -
- -```yaml -charts: - kube-prometheus-stack: - grafana: - adminPassword: "" -``` - -Use the `grafana.adminPassword` parameter to assign a password to the Grafana admin user `admin`. - -Additional parameters you should be aware of can be found by expanding the **Presets** options. You can modify the -preset settings when you create the profile or when you deploy the cluster and review the cluster profile. - -![A view of the pack's preset drawer expanded with radio buttons](/integrations_prometheus-operator_operator-preset-view-expanded.webp) - -Review the usage section below to learn more about each preset option. - -
+Check out the guide [Deploy Monitoring Stack](../clusters/cluster-management/monitoring/deploy-monitor-stack.md) to +learn how to create a monitoring stack with Prometheus for your Palette environment. -#### Email Alerts +## Email Alerts You can configure the Prometheus server to send email alerts to a set of contacts. Toggle the **Email Alerts** button to enable email alerting. Update the `alertmanager.config.receivers` settings with all the required email setting values. -
- ```yaml charts: kube-prometheus-stack: @@ -1135,9 +710,7 @@ charts: Refer to the [Prometheus Alertmanager Configuration](https://prometheus.io/docs/alerting/latest/configuration/) documentation to learn more about Alertmanager. -
- -#### Grafana Ingress +## Grafana Ingress You can enable an ingress endpoint for Grafana that will deploy an NGINX ingress controller. This feature can be used to enable HTTPS and require authentication for all Prometheus API requests. @@ -1146,9 +719,7 @@ If you do not enable the ingress option, by default a service with a load balanc Toggle the **Enable** button to enable the use of Ingress. -
- -#### Thanos SideCar +## Thanos SideCar [Thanos](https://prometheus-operator.dev/docs/platform/thanos/) is an open-source system for running large-scale, distributed, and highly available Prometheus setups. Thanos allows Prometheus to store data for extended periods in @@ -1157,17 +728,13 @@ horizontally without the risk of using up local storage space. Toggle the **Enable** button to enable the use of Thanos. -
- -#### Object Store +## Object Store Select the Thanos object storage type you will use. Review the `thanos.objstoreConfig` parameters to configure the use of object storage with Thanos. Refer to the [Thanos Object Storage](https://github.com/thanos-io/thanos/blob/main/docs/storage.md) documentation to learn more about how to configure each object storage. -
- ```yaml charts: kube-prometheus-stack: @@ -1177,15 +744,13 @@ charts: objstoreConfig: ``` -#### Thanos Ruler Object Store +## Thanos Ruler Object Store You can specify a different object storage to store the Thanos Ruler event data. Defaults to the object storage specified for Thanos. Refer to the [Thanos Ruler](https://prometheus-operator.dev/docs/platform/thanos/#thanos-ruler) resource to learn more. -
- -### Dependencies +## Dependencies The Prometheus Operator pack installs the following dependencies: @@ -1199,44 +764,21 @@ The Prometheus Operator pack installs the following dependencies:
- - -All versions less than v40.x.x are considered deprecated. Upgrade to a newer version to take advantage of the new -features. - - -
## Terraform -You can retrieve details about the Prometheus operator pack by using the following Terraform code. - -
+You can reference the Prometheus Operator pack in Terraform with the following data resource. ```hcl data "spectrocloud_registry" "public_registry" { name = "Public Repo" } -data "spectrocloud_pack_simple" "pack-info" { +data "spectrocloud_pack" "prometheus-operator" { name = "prometheus-opeartor" - version = "45.4.0" + version = "57.0.1" type = "helm" registry_uid = data.spectrocloud_registry.public_registry.id } ``` - -## References - -- [Deploy Monitoring Stack](../clusters/cluster-management/monitoring/deploy-monitor-stack.md) - -- [Prometheus Operator GitHub](https://github.com/coreos/prometheus-operator) - -- [Prometheus Remote Write Tuning](https://prometheus.io/docs/practices/remote_write) - -- [Thanos & Prometheus](https://prometheus-operator.dev/docs/platform/thanos/) - -- [Prometheus FAQ](https://prometheus.io/docs/introduction/faq) - -- [Prometheus Cluster Metrics](prometheus-cluster-metrics.md) diff --git a/docs/docs-content/integrations/spectro-cluster-metrics.md b/docs/docs-content/integrations/spectro-cluster-metrics.md new file mode 100644 index 0000000000..9c5d972bc9 --- /dev/null +++ b/docs/docs-content/integrations/spectro-cluster-metrics.md @@ -0,0 +1,45 @@ +--- +sidebar_label: "Spectro Cluster Metrics" +title: "Spectro Cluster Metrics" +description: "Use the Spectro Cluster Metrics addon pack to expose Palette resource metrics" +type: "integration" +hide_table_of_contents: true +category: ["monitoring", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/prometheus-operator/blobs/sha256:64589616d7f667e5f1d7e3c9a39e32c676e03518a318924e123738693e104ce0?type=image.webp" +tags: ["packs", "spectro-cluster-metrics", "monitoring"] +--- + +## Versions Supported + + + + + +You can learn how to add the Prometheus Cluster Metrics to your cluster by following the steps outlined in the +[Enable Monitoring on Host Cluster](../clusters/cluster-management/monitoring/deploy-agent.md). + + +Use the pack to access the metric data through Grafana dashboards. + + + + + + +## Terraform + +You can reference the Spectro Cluster Metrics pack in Terraform with the following data resource. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack" "cluster-metrics" { + name = "spectro-cluster-metrics" + version = "3.4.1" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/spectro-grafana-dashboards.md b/docs/docs-content/integrations/spectro-grafana-dashboards.md new file mode 100644 index 0000000000..d2b3897997 --- /dev/null +++ b/docs/docs-content/integrations/spectro-grafana-dashboards.md @@ -0,0 +1,45 @@ +--- +sidebar_label: "Spectro Cloud Grafana Dashboards" +title: "Spectro Cloud Grafana Dashboards" +description: "Learn more about the Spectro Cloud Grafana dashboard and how to use it." +type: "integration" +category: ["monitoring", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/spectrocloud-grafana-dashboards/blobs/sha256:a48c9929480a8c463e409e7563279f97d80e674c5cc91cb81c47454aea2c203d?type=image.webp" +tags: ["packs", "spectrocloud-grafana-dashboards", "monitoring"] +--- + +## Versions Supported + + + + +You can learn how to add the Spectro Cloud Grafana Dashboards pack to your cluster by following the steps outlined in +the [Enable Monitoring on Host Cluster](../clusters/cluster-management/monitoring/deploy-agent.md). + +:::warning + +Pods without the defined attributes `request` and `limit` will not display metrics data in the Grafana out-of-the-box +Kubernetes Pods dashboard. + +::: + + + + +## Terraform + +You can reference the Spectro Cloud Grafana Dashboards pack in Terraform with the following data resource. + +```terraform hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack" "spectro-cloud-grafana-dashboards" { + name = "spectrocloud-grafana-dashboards" + version = "1.0.0" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/spectro-k8s-dashboard.md b/docs/docs-content/integrations/spectro-k8s-dashboard.md index 10c0c2081b..45cd55d604 100644 --- a/docs/docs-content/integrations/spectro-k8s-dashboard.md +++ b/docs/docs-content/integrations/spectro-k8s-dashboard.md @@ -12,81 +12,18 @@ logoUrl: "https://registry.spectrocloud.com/v1/k8s-dashboard/blobs/sha256:2de5d8 tags: ["packs", "spectro-k8s-dashboard", "monitoring"] --- -Spectro Kubernetes Dashboard is a web-based UI for Kubernetes clusters that auto-enables the Kubernetes Dashboard using -secure ports and conveniently includes the [Spectro Proxy](frp.md) pack. - ## Versions Supported -**2.7.x** - -
- -## Prerequisites - -- Outbound internet connectivity for port 443 is allowed so that you and your applications can connect with the - [Spectro Proxy](frp.md) reverse proxy. - -- Users or groups must be mapped to a Kubernetes RBAC role, either a _Role_ or a _ClusterRole_. You can create a custom - role through a manifest and use Palette's roleBinding feature to associate users or groups with the role. Refer to the - [Create a Role Binding](../clusters/cluster-management/cluster-rbac.md#create-role-bindings) guide to learn more. - -## Parameters - - - -| Parameter | Description | Default | -| --------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- | -| `namespace` | The Kubernetes namespace to install the dashboard. | `kubernetes-dashboard` | -| `ClusterRole` | The ClusterRole to assign to the Spectro Kubernetes Dashboard. | `read-only` | -| `certDuration` | Self-signed certificate duration in hours. | 8760h (365d) | -| `certRenewal` | Self-signed certificate renewal in hours | 720h (30d) | -| `enableInsecureLogin` | RBAC ensures secure login. | `false` | -| `serviceType` | The service type for the dashboard. Supported values are `ClusterIP`, `LoadBalancer`, and `NodePort`. | `ClusterIP` | -| `skipLogin` | Enables or disables the skip login option on the Spectro Kubernetes Dashboard. | `false` | -| `enableInsecureLogin` | Enables non-Secure Sockets Layer (SSL) login. Dashboard login is always restricted to HTTP(S) + localhost or HTTPS and external domain. | `false` | -| `ingress.enabled` | Ingress configuration to access the `ClusterIP`, `LoadBalancer`, or `NodePort`. | `false` | + + -## Usage - -To use the Spectro Kubernetes Dashboard pack, you have to add it to your cluster profile. Spectro Kubernetes Dashboard -supports several public cloud and data center cloud environments. To learn more, refer to [Clusters](/clusters). - -Use the following information to find the Kubernetes Dashboard pack. - -- **Pack Type**: Monitoring -- **Registry**: Public Repo -- **Pack Name**: Spectro Kubernetes Dashboard -- **Pack Version**: 2.7.0 or higher - -Spectro Kubernetes Dashboard has the following Access options. - -
- -- **Proxied**: This option is useful for access to the Kubernetes Dashboard from anywhere and leverages the Spectro - Proxy pack, which gets installed automatically. The Service resource for the Kubernetes Dashboard will be configured - as ClusterIP and is only accessible through the proxy. To learn more, check out the [Spectro Proxy](frp.md) guide. - -- **Direct**: This option is meant for a private configuration where a proxy is not implemented or not desired. The - Service resource for the Kubernetes Dashboard will be configured as LoadBalancer, which you can access directly. This - option requires you to be on a network that can reach the IP address given to the LoadBalancer service. +
+
## Terraform You can reference the Spectro Proxy pack in Terraform with a data resource. -
- ```hcl data "spectrocloud_registry" "public_registry" { name = "Public Repo" @@ -94,14 +31,8 @@ data "spectrocloud_registry" "public_registry" { data "spectrocloud_pack_simple" "k8s-dashboard" { name = "spectro-k8s-dashboard" - version = "2.7.0" + version = "2.7.1" type = "helm" registry_uid = data.spectrocloud_registry.public_registry.id } ``` - -## References - -- [Microsoft Access Control Using Kubernetes RBAC](https://learn.microsoft.com/en-us/azure/aks/azure-ad-rbac?toc=https%3A%2F%2Fdocs.micro[…]icrosoft.com%2Fen-us%2Fazure%2Fbread%2Ftoc.json&tabs=portal) - -- [Terraform Data Resource](https://registry.terraform.io/providers/spectrocloud/spectrocloud/latest/docs/data-sources/pack) diff --git a/docs/docs-content/integrations/spectro-proxy.md b/docs/docs-content/integrations/spectro-proxy.md new file mode 100644 index 0000000000..182d6f98ed --- /dev/null +++ b/docs/docs-content/integrations/spectro-proxy.md @@ -0,0 +1,302 @@ +--- +sidebar_label: "Spectro Proxy" +title: "Spectro Proxy" +description: "Fast Reverse Proxy Authentication pack in Spectro Cloud-Spectro Proxy" +hide_table_of_contents: true +type: "integration" +category: ["authentication", "amd64", "fips", "network"] +sidebar_class_name: "hide-from-sidebar" +tags: ["packs", "spectro-proxy", "network"] +--- + +Spectro Proxy is a pack that enables the use of a reverse proxy with a Kubernetes cluster. The reverse proxy allows you +to connect to the cluster API of a Palette-managed Kubernetes cluster in private networks or clusters configured with +private API endpoints. The reverse proxy managed by Spectro Cloud is also known as the forward reverse proxy (FRP). + +The reverse proxy has a server component and a client component. The reverse proxy server is publicly available and +managed by Spectro Cloud. The client is deployed inside your Palette-managed Kubernetes cluster and connects to the +reverse proxy server. When you add the Spectro Proxy pack to a cluster profile, a couple of things happen: + +- Palette injects the reverse proxy server's SSL certificate into the cluster. This allows the cluster to trust the + reverse proxy server. + +- The kubeconfig file is updated with the reverse proxy address instead of pointing directly to the cluster's API + address. The following is an example of a kubeconfig file where the `server` attribute points to the reverse proxy. + + ```hideClipboard yaml {4-5} + apiVersion: v1 + clusters: + - cluster: + certificate-authority-data: LS...... + server: https://cluster-61a578b5259452b88941a1.proxy.spectrocloud.com:443 + name: example-server + contexts: + # The remainder configuration is omitted for brevity. + ``` + +- Any requests to the Kubernetes API server, such as kubectl commands, will be routed to the reverse proxy. The reverse + proxy forwards the request to the intended client, which is the cluster's API server. The cluster's API server + authenticates the request and replies with the proper response. + +You can attach this pack to a cluster profile. For more information, refer to +[Cluster Profiles](../profiles/cluster-profiles/cluster-profiles.md). The pack installs the Spectro Proxy client in the +workload clusters and configures the cluster's API server to point to a managed proxy server. + +:::info + +This pack can be combined with the +[Kubernetes dashboard](https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/) pack to expose the +Kubernetes dashboard. To learn more about exposing the Kubernetes dashboard, check out the +[Enable Kubernetes Dashboard](../clusters/cluster-management/kubernetes-dashboard.md) guide. + +::: + +## Network Connectivity + +The host cluster's network configuration defines who can access the host cluster from a network perspective. If a user +is in the same network as the cluster, the user may be able to access the host cluster without needing a forward proxy. +However, if the user is on a different network, the host cluster's network configuration may limit the user's ability to +connect to the host cluster and may require the use of a forward proxy. + +:::warning + +The Spectro Proxy pack does not support Edge deployments in airgapped environments where the Edge host does not have +outbound access to the internet. + +::: + +From a network configuration perspective, a cluster can be in a private or a public network. Host clusters deployed in a +network that does not allow inbound internet access are considered private. Whereas the clusters deployed in a network +with both inbound and outbound access to the internet are considered public. The following are the three possible +network connectivity scenarios: + +- The cluster and the user are in the same private network. + +- The cluster and the user are in different private networks. + +- The cluster is in a public network. + +![An overview of the three different connectivity scenarios](/integrations_frp_conection_overview.webp) + +The following table summarizes the network connectivity requirements for each scenario and whether the Spectro Proxy is +required. + +| **Scenario** | **Description** | **Requires Spectro Proxy?** | +| -------------------------------------- | ------------------------------------------------------------------------------------------ | --------------------------- | +| Private cluster in the same network | The cluster is deployed with a private endpoint, and the user is also in the same network. | ❌ | +| Private cluster in a different network | The cluster is deployed with a private endpoint, and the user is in a different network. | ✅ | +| Public cluster in a different network | The cluster is deployed with a public endpoint, and the user is in a different network. | ❌ | + +To learn more about how the Spectro Proxy interacts with clusters in a public or private network environment and when +the Spectro Proxy is required, select the tab that matches your use case. + + + + + +Networks labeled as private do not allow inbound internet access. Inbound network requests to the network are allowed +only if the connection originated from the internal network. If you are in a different network than the cluster, you can +connect to the cluster's API server through the Spectro Proxy. The Spectro Proxy allows you to connect to the cluster's +API server although you are not in the same network as the cluster. + +:::warning + +Users that are in a different network than the cluster require the Spectro Proxy server to connect to the cluster's API +server. Otherwise, requests to the cluster's API server will fail due to a lack of network connectivity. + +::: + +The Spectro Proxy client is installed by the Spectro Proxy pack. The client is deployed in the cluster and connects to +the Spectro Proxy server. The Spectro Proxy server is a managed service that is publicly available and managed by +Spectro Cloud. The Spectro Proxy server forwards the request to the cluster's API server. The cluster's API server +authenticates the request and replies with the proper response. + +The kubeconfig files generated for the host cluster are updated with the Spectro Proxy server's address. When you or +other users issue a kubectl command, the request is routed to the Spectro Proxy server. The following is an example of a +kubeconfig file where the SSL certificate and server address attribute point to the Spectro Proxy. + +The following diagram displays the network connection flow of a user attempting to connect to a cluster with private +endpoints. The user is in a different network than the cluster. + +1. The user issues a kubectl command to the cluster's API server. + +2. The request is routed to the Spectro Proxy server. The Spectro Proxy client inside the host cluster has an + established connection with the cluster's API server. + +3. The Spectro Proxy server forwards the request to the cluster's API server located in a different network. The + cluster's API server authenticates the request and replies with the proper response. + +![Private cluster in a different network.](/integrations_frp_conection_private-different-network.webp) + +Depending on what type of infrastructure provider you are deploying the host cluster in, you may have to specify the +Spectro Proxy server's SSL certificate in the Kubernetes cluster's configuration. + + + + + +Networks labeled as private do not allow inbound internet access. Inbound network requests to the network are allowed +only if the connection originated from the internal network. If you are in the same network as the cluster, you can +connect directly to the cluster's API server. The term "same network" means that from a network perspective, requests +can reach the cluster's API server without having to traverse the internet. + +:::info + +Users in the same network as the cluster do not require the Spectro Proxy server to connect to the cluster's API server. + +::: + +![Private cluster in the same network.](/integrations_frp_conection_private-same-network.webp) + + + + + +Clusters deployed in a network with both inbound and outbound access to the internet are considered public. + +:::info + +Clusters deployed in a public network do not require the Spectro Proxy to connect to the cluster's API server. + +::: + +When a cluster has public endpoints, you can query the cluster's Kubernetes API server from any network with internet +access. The following diagram displays the network connection flow of a user attempting to connect to a cluster with +public endpoints. Any user with access to the internet can connect to the cluster's API server. + +![A public cluster connection path](/integrations_frp_conection_public_connection.webp) + + + + + +--- + +## Versions Supported + + + + +To use this pack, you have to add it to your cluster profile. You can also add the Spectro Proxy pack when you create +the cluster profile. Check out the +[Create Cluster Profile](../profiles/cluster-profiles/create-cluster-profiles/create-cluster-profiles.md) guide to learn +more about cluster profile creation. + +The kubeconfig file generated for the host cluster is updated with the Spectro Proxy server's address. Refer to the +[Access Cluster with CLI](../clusters/cluster-management/palette-webctl.md) guide to learn how to download the +kubeconfig file and access the cluster. + +:::warning + +If this pack is added as a Day-2 operation, meaning not during the cluster creation process, you will have to +re-download the kubeconfig file to pick up the new configuration changes. This will also result in the Kubernetes +control plane nodes getting repaved. + +::: + + + + + +To use this pack, you have to add it to your cluster profile. You can also add the Spectro Proxy pack when you create +the cluster profile. Check out the +[Create Cluster Profile](../profiles/cluster-profiles/create-cluster-profiles/create-cluster-profiles.md) guide to learn +more about cluster profile creation. + +The kubeconfig file generated for the host cluster is updated with the Spectro Proxy server's address. Refer to the +[Access Cluster with CLI](../clusters/cluster-management/palette-webctl.md) guide to learn how to download the +kubeconfig file and access the cluster. + +:::warning + +Be aware that if this pack is added as a Day-2 operation, meaning not during the cluster creation process, you will have +to re-download the kubeconfig file to pick up the new configuration changes. This will also result in Kubernetes control +plane nodes getting repaved. + +::: + + + + + +To use this pack, you have to add it to your cluster profile. You can also add the Spectro Proxy pack when you create +the cluster profile. Check out the +[Create Cluster Profile](../profiles/cluster-profiles/create-cluster-profiles/create-cluster-profiles.md) guide to learn +more about cluster profile creation. + +The kubeconfig file generated for the host cluster is updated with the Spectro Proxy server's address. Refer to the +[Access Cluster with CLI](../clusters/cluster-management/palette-webctl.md) guide to learn how to download the +kubeconfig file and access the cluster. + +:::warning + +Be aware that if this pack is added as a Day-2 operation, meaning not during the cluster creation process, you will have +to re-download the kubeconfig file to pick up the new configuration changes. This will also result in Kubernetes control +plane nodes getting repaved. + +::: + + + + + +To use this pack, you have to add it to your cluster profile. You can also add the Spectro Proxy pack when you create +the cluster profile. Check out the +[Create Cluster Profile](../profiles/cluster-profiles/create-cluster-profiles/create-cluster-profiles.md) guide to learn +more about cluster profile creation. + +The kubeconfig file generated for the host cluster is updated with the Spectro Proxy server's address. Refer to the +[Access Cluster with CLI](../clusters/cluster-management/palette-webctl.md) guide to learn how to download the +kubeconfig file and access the cluster. + +:::warning + +Be aware that if this pack is added as a Day-2 operation, meaning not during the cluster creation process, you will have +to re-download the kubeconfig file to pick up the new configuration changes. This will also result in Kubernetes control +plane nodes getting repaved. + +::: + + + + +## Troubleshooting + +Troubleshooting scenarios related to the Spectro Proxy. + +### x509 Unknown Authority Error + +If you encounter an x509 unknown authority error when deploying a cluster with the Spectro Proxy. + +```hideClipboard shell +Unable to connect to connect the server: X509: certiticate signed by unknown authorit signed by +``` + +The workaround for this error is to wait a few moments for all the kubeconfig configurations to get propagated to +Palette. The Palette cluster agent sends the original kubeconfig to Palette, followed by the modified kubeconfig +containing the reverse proxy settings. If you attempt to open up a web shell session or interact with cluster API during +the initialization process, you will receive an x509 error. Once Palette receives the kubeconfig file containing the +cluster's reverse proxy configurations from the cluster agent, the x509 errors will disappear. + +## Terraform + +You can reference the Spectro Proxy pack in Terraform with a data resource. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "spectro-proxy" { + name = "spectro-proxy" + version = "1.5.3" + type = "operator-instance" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` + +# References + +- [Enable Kubernetes Dashboard](../clusters/cluster-management/kubernetes-dashboard.md) + +- [Terraform Data Resource](https://registry.terraform.io/providers/spectrocloud/spectrocloud/latest/docs/data-sources/pack) diff --git a/docs/docs-content/integrations/ubuntu-aks.md b/docs/docs-content/integrations/ubuntu-aks.md new file mode 100644 index 0000000000..96d64d6f67 --- /dev/null +++ b/docs/docs-content/integrations/ubuntu-aks.md @@ -0,0 +1,30 @@ +--- +sidebar_label: "Ubuntu" +title: "Ubuntu" +description: "Choose Ubuntu Operating System pack in Palette." +hide_table_of_contents: true +type: "integration" +category: ["operating system", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/ubuntu-vsphere/blobs/sha256:09a727f9005b79c69d8e60e12ce130880c63131315b49e7fb4cc44e53d34dc7a?type=image.webp" +tags: ["packs", "ubuntu", "operating system"] +--- + + + +## Terraform + +You can reference Ubuntu in Terraform with the following code snippet. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "ubuntu" { + name = "ubuntu-aks" + version = "22.04" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/ubuntu-aws.md b/docs/docs-content/integrations/ubuntu-aws.md new file mode 100644 index 0000000000..cd41fcdac6 --- /dev/null +++ b/docs/docs-content/integrations/ubuntu-aws.md @@ -0,0 +1,30 @@ +--- +sidebar_label: "Ubuntu" +title: "Ubuntu" +description: "Choose Ubuntu Operating System pack in Palette." +hide_table_of_contents: true +type: "integration" +category: ["operating system", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/ubuntu-vsphere/blobs/sha256:09a727f9005b79c69d8e60e12ce130880c63131315b49e7fb4cc44e53d34dc7a?type=image.webp" +tags: ["packs", "ubuntu", "operating system"] +--- + + + +## Terraform + +You can reference Ubuntu in Terraform with the following code snippet. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "ubuntu" { + name = "ubuntu-aws" + version = "22.04" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/ubuntu-azure.md b/docs/docs-content/integrations/ubuntu-azure.md new file mode 100644 index 0000000000..755d393670 --- /dev/null +++ b/docs/docs-content/integrations/ubuntu-azure.md @@ -0,0 +1,30 @@ +--- +sidebar_label: "Ubuntu" +title: "Ubuntu" +description: "Choose Ubuntu Operating System pack in Palette." +hide_table_of_contents: true +type: "integration" +category: ["operating system", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/ubuntu-vsphere/blobs/sha256:09a727f9005b79c69d8e60e12ce130880c63131315b49e7fb4cc44e53d34dc7a?type=image.webp" +tags: ["packs", "ubuntu", "operating system"] +--- + + + +## Terraform + +You can reference Ubuntu in Terraform with the following code snippet. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "ubuntu" { + name = "ubuntu-azure" + version = "22.04" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/ubuntu-edge.md b/docs/docs-content/integrations/ubuntu-edge.md new file mode 100644 index 0000000000..4593d857b6 --- /dev/null +++ b/docs/docs-content/integrations/ubuntu-edge.md @@ -0,0 +1,30 @@ +--- +sidebar_label: "Ubuntu" +title: "Ubuntu" +description: "Choose Ubuntu Operating System pack in Palette." +hide_table_of_contents: true +type: "integration" +category: ["operating system", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/ubuntu-vsphere/blobs/sha256:09a727f9005b79c69d8e60e12ce130880c63131315b49e7fb4cc44e53d34dc7a?type=image.webp" +tags: ["packs", "ubuntu", "operating system"] +--- + + + +## Terraform + +You can reference Ubuntu in Terraform with the following code snippet. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "ubuntu" { + name = "ubuntu-edge" + version = "22.04" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/ubuntu-gcp.md b/docs/docs-content/integrations/ubuntu-gcp.md new file mode 100644 index 0000000000..bd814978f4 --- /dev/null +++ b/docs/docs-content/integrations/ubuntu-gcp.md @@ -0,0 +1,30 @@ +--- +sidebar_label: "Ubuntu" +title: "Ubuntu" +description: "Choose Ubuntu Operating System pack in Palette." +hide_table_of_contents: true +type: "integration" +category: ["operating system", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/ubuntu-vsphere/blobs/sha256:09a727f9005b79c69d8e60e12ce130880c63131315b49e7fb4cc44e53d34dc7a?type=image.webp" +tags: ["packs", "ubuntu", "operating system"] +--- + + + +## Terraform + +You can reference Ubuntu in Terraform with the following code snippet. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "ubuntu" { + name = "ubuntu-gcp" + version = "22.04" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/ubuntu-libvirt.md b/docs/docs-content/integrations/ubuntu-libvirt.md new file mode 100644 index 0000000000..6a71090c54 --- /dev/null +++ b/docs/docs-content/integrations/ubuntu-libvirt.md @@ -0,0 +1,30 @@ +--- +sidebar_label: "Ubuntu" +title: "Ubuntu" +description: "Choose Ubuntu Operating System pack in Palette." +hide_table_of_contents: true +type: "integration" +category: ["operating system", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/ubuntu-vsphere/blobs/sha256:09a727f9005b79c69d8e60e12ce130880c63131315b49e7fb4cc44e53d34dc7a?type=image.webp" +tags: ["packs", "ubuntu", "operating system"] +--- + + + +## Terraform + +You can reference Ubuntu in Terraform with the following code snippet. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "ubuntu" { + name = "ubuntu-libvirt" + version = "22.04" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/ubuntu-maas.md b/docs/docs-content/integrations/ubuntu-maas.md new file mode 100644 index 0000000000..8228f87911 --- /dev/null +++ b/docs/docs-content/integrations/ubuntu-maas.md @@ -0,0 +1,30 @@ +--- +sidebar_label: "Ubuntu" +title: "Ubuntu" +description: "Choose Ubuntu Operating System pack in Palette." +hide_table_of_contents: true +type: "integration" +category: ["operating system", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/ubuntu-vsphere/blobs/sha256:09a727f9005b79c69d8e60e12ce130880c63131315b49e7fb4cc44e53d34dc7a?type=image.webp" +tags: ["packs", "ubuntu", "operating system"] +--- + + + +## Terraform + +You can reference Ubuntu in Terraform with the following code snippet. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "ubuntu" { + name = "ubuntu-maas" + version = "22.04" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/ubuntu-openstack.md b/docs/docs-content/integrations/ubuntu-openstack.md new file mode 100644 index 0000000000..c4d26b25e6 --- /dev/null +++ b/docs/docs-content/integrations/ubuntu-openstack.md @@ -0,0 +1,30 @@ +--- +sidebar_label: "Ubuntu" +title: "Ubuntu" +description: "Choose Ubuntu Operating System pack in Palette." +hide_table_of_contents: true +type: "integration" +category: ["operating system", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/ubuntu-vsphere/blobs/sha256:09a727f9005b79c69d8e60e12ce130880c63131315b49e7fb4cc44e53d34dc7a?type=image.webp" +tags: ["packs", "ubuntu", "operating system"] +--- + + + +## Terraform + +You can reference Ubuntu in Terraform with the following code snippet. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "ubuntu" { + name = "ubuntu-openstack" + version = "22.04" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/ubuntu-vsphere.md b/docs/docs-content/integrations/ubuntu-vsphere.md new file mode 100644 index 0000000000..4a5fdd0158 --- /dev/null +++ b/docs/docs-content/integrations/ubuntu-vsphere.md @@ -0,0 +1,30 @@ +--- +sidebar_label: "Ubuntu" +title: "Ubuntu" +description: "Choose Ubuntu Operating System pack in Palette." +hide_table_of_contents: true +type: "integration" +category: ["operating system", "amd64"] +sidebar_class_name: "hide-from-sidebar" +logoUrl: "https://registry.spectrocloud.com/v1/ubuntu-vsphere/blobs/sha256:09a727f9005b79c69d8e60e12ce130880c63131315b49e7fb4cc44e53d34dc7a?type=image.webp" +tags: ["packs", "ubuntu", "operating system"] +--- + + + +## Terraform + +You can reference Ubuntu in Terraform with the following code snippet. + +```hcl +data "spectrocloud_registry" "public_registry" { + name = "Public Repo" +} + +data "spectrocloud_pack_simple" "ubuntu" { + name = "ubuntu-vsphere" + version = "22.04" + type = "helm" + registry_uid = data.spectrocloud_registry.public_registry.id +} +``` diff --git a/docs/docs-content/integrations/vault.md b/docs/docs-content/integrations/vault.md index 2bad5981a8..45eb5788a0 100644 --- a/docs/docs-content/integrations/vault.md +++ b/docs/docs-content/integrations/vault.md @@ -10,48 +10,78 @@ logoUrl: "https://registry.spectrocloud.com/v1/vault/blobs/sha256:1abda0173be1fd tags: ["packs", "vault", "security"] --- -[Vault](https://www.vaultproject.io/) helps secure, store, and tightly control access to tokens, passwords, -certificates, encryption keys for protecting secrets, and other sensitive data using a UI, CLI, or HTTP API. +## Versions Supported -Vault integration has the following components: + + -- Vault server -- UI (optional). -- [Agent injector](https://www.vaultproject.io/docs/platform/k8s/injector/) (optional). +HashiCorp provides documentation for many uses cases for Vault. For examples, refer to +[HashiCorp Vault documentation](https://developer.hashicorp.com/vault/docs/use-cases). -## Versions Supported +#### Initialize and Unseal Vault - +If you enabled dev server mode, you do not need to initialize Vault and it is already unsealed. Use the root token you +configured in the `values.yaml` file to sign in to Vault directly. - +Before any operation can be performed on Vault, you need to initialize the first root token and keys that can be used to +unseal Vault. You can do so by following these steps: -### Prerequisites +1. Log in to [Palette](https://console.spectrocloud.com). -- A Kubernetes cluster with Kubernetes version 1.22 or later. +2. Navigate to the left **Main Menu** and select **Clusters**. -### Parameters +3. Select the cluster that has Vault installed to view its details page. -The table lists commonly used parameters you can configure when adding this pack. +4. Download the cluster **kubeconfig** file. -| Parameters | Description | Default | -| -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -| `charts.vault.server.ingress` | Enable ingress traffic to the Vault server. If you want to enable ingress traffic, make sure that `charts.server.serviceType` is set to `"ClusterIP"` or is left empty. | `False` | -| `charts.vault.global.tlsDisable` | Disable TLS for end-to-end encrypted transport. | `True` | -| `charts.vault.agent.enabled` | Enable vault agent injection to inject secrets into the pods. | `-` | -| `charts.vault.server.ha` | Enable high-availability mode to protect against outages by running multiple Vault servers. For more information, refer to [Vault documentation](https://developer.hashicorp.com/vault/docs/internals/high-availability). | `false` | -| `charts.vault.server.dataStorage` | Controls the size, location, storage class of the persistent storage used by the Vault. | | -| `charts.vault.server.dev` | Enable dev server mode. The dev server mode skips most setup required before you can begin to use a Vault server, including initialization and unseal, and stores all data in-memory. For more details about dev server mode, refer to [Vault documentation](https://developer.hashicorp.com/vault/docs/concepts/dev-server). | `False` | -| `charts.vault.server.dev.devRootToken` | If you enabled dev server mode, this parameter specifies the root token for your Vault server. Root token has unlimited privileges and can do anything in Vault. | `"root"` | +5. Set up your local kubectl environment to use the **kubeconfig** file you downloaded. Review the + [Access Cluster with CLI](../clusters/cluster-management/palette-webctl.md) guide for additional guidance. -:::warning +6. You need to get the Vault namespace and application name. Issue the following command to get the unique values. + +
-Never operate a dev mode server in production. It is insecure and loses data on every restart. + ```shell + VAULT_NAMESPACE=$(kubectl get pods --selector app.kubernetes.io/name=vault --all-namespaces --output jsonpath='{.items[0].metadata.namespace}') && \ + APP_NAME=$(echo "$VAULT_NAMESPACE" | sed 's/-ns$//') + ``` + +7. Set up port forwarding by issuing the following command so you can access the Vault UI: + + ``` + kubectl port-forward $APP_NAME 8200:8200 --namespace $VAULT_NAMESPACE + ``` + +8. Open your browser and access the Vault UI at `https://localhost:8200/ui`. You will receive a warning due to using a + self-signed certificate, but you can ignore this warning. Follow the prompts on the UI to initialize your root token. + +:::tip + +If you do not want to use the Vault UI, you can also initialize and unseal Vault using the Vault CLI or API. For more +information, refer to +[Vault documentation](https://developer.hashicorp.com/vault/docs/platform/k8s/helm/run#initialize-and-unseal-vault). ::: -### Usage +#### Storage + +In a production Vault server, backend storage is on a data persistent layer, is untrusted and only stores encrypted +data. In a dev mode Vault server, all data is stored in-memory and will be erased when Vault restarts. + +##### RKE2 -HashiCorp provides many uses cases for Vault. For examples, refer to +When using Vault with the RKE2 distribution of Kubernetes in Palette Edge, you must explicitly specify a storage class +for the Vault server. To specify a storage class, change the value of the field +`charts.vault.server.dataStorage.storageClass` in `values.yaml` for the Vault pack in your cluster profile from `null` +to a storage class that meets your needs. Refer to +[Kubernetes documentation on storage classes](https://kubernetes.io/docs/concepts/storage/storage-classes/) for more +details. + +
+ + + +HashiCorp provides documentation for many uses cases for Vault. For examples, refer to [HashiCorp Vault documentation](https://developer.hashicorp.com/vault/docs/use-cases). #### Initialize and Unseal Vault @@ -113,9 +143,13 @@ to a storage class that meets your needs. Refer to [Kubernetes documentation on storage classes](https://kubernetes.io/docs/concepts/storage/storage-classes/) for more details. + + +
+ ### Terraform -You can reference the Vault pack in Terraform with a data resource: +Use the following Terraform code snippet to reference the Vault pack. ```hcl data "spectrocloud_registry" "public_registry" { @@ -124,33 +158,8 @@ data "spectrocloud_registry" "public_registry" { data "spectrocloud_pack_simple" "pack-info" { name = "vault" - version = "0.22.0" + version = "0.27.0" type = "helm" registry_uid = data.spectrocloud_registry.public_registry.id } ``` - -
- - - -:::warning - -All versions of the manifest-based pack less than v0.22.x are considered deprecated. Upgrade to a newer version to take -advantage of new features. - -::: - - - -
- -## References - -- [Vault Agent injector](https://www.vaultproject.io/docs/platform/k8s/injector/) - -- [Injecting Vault Secrets Into Kubernetes Pods via a Sidecar - Blog](https://www.hashicorp.com/blog/injecting-vault-secrets-into-kubernetes-pods-via-a-sidecar/) - -- [Vault Agent Injector Examples](https://www.vaultproject.io/docs/platform/k8s/injector/examples/) - -- [Vault on Kubernetes Guide](https://www.vaultproject.io/docs/platform/k8s/helm/run) diff --git a/docs/docs-content/release-notes/known-issues.md b/docs/docs-content/release-notes/known-issues.md index 65c82017d7..95c8d25cd5 100644 --- a/docs/docs-content/release-notes/known-issues.md +++ b/docs/docs-content/release-notes/known-issues.md @@ -14,38 +14,39 @@ to review and stay informed about the status of known issues in Palette. As issu The following table lists all known issues that are currently active and affecting users. -| Description | Workaround | Publish Date | Product Component | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | -------------------------- | -| Palette CLI users who authenticated with the `login` command and specified a Palette console endpoint that does not contain the tenant name are encountering issues with expired JWT tokens. | Re-authenticate using your tenant URL, for example, `https://my-org.console.spectrocloud.com.` If the issue persists after re-authenticating, remove the `~/.palette/palette.yaml` file that is auto-generated by the Palette CLI. Re-authenticate with the `login` command if other commands require it. | July 25, 2024 | CLI | -| Adding new cloud providers, such as Nutanix, is currently unavailable. Private Cloud Gateway (PCG) deployments in new Nutanix environments fail to complete the installation. As a result, adding a new Nutanix environment to launch new host clusters is unavailable. This does not impact existing Nutanix deployments with a PCG deployed. | No workarounds are available. | July 20, 2024 | Clusters, Self-Hosted, PCG | -| Single-node Private Cloud Gateway (PCG) clusters are experiencing an issue upgrading to 4.4.11. The vSphere CSI controller pod fails to start because there are no matching affinity rules. | Check out the [vSphere Controller Pod Fails to Start in Single Node PCG Cluster](../troubleshooting/pcg.md#scenario---vsphere-controller-pod-fails-to-start-in-single-node-pcg-cluster) guide for workaround steps. | July 20, 2024 | PCG | -| When provisioning an Edge cluster, it's possible that some Operating System (OS) user credentials will be lost once the cluster is active. This is because the cloud-init stages from different sources merge during the deployment process, and sometimes, the same stages without distinct names overwrite each other. | Give each of your cloud-init stages in the OS pack and in the Edge installer **user-data** file a unique name. For more information about cloud-init stages and examples of cloud-init stages with names, refer to [Cloud-init Stages](../clusters/edge/edge-configuration/cloud-init.md). | July 17, 2024 | Edge | -| When you use a content bundle to provision a new cluster without using the local Harbor registry, it's possible for the images to be pulled from external networks instead of from the content bundle, consuming network bandwidth. If your Edge host has no connection to external networks or if it cannot locate the image on a remote registry, some pods may enter the `ImagePullBackOff` state at first, but eventually the pods will be created using images from the content bundle. | For connected clusters, you can make sure that the remote images are not reachable by the Edge host, which will stop the Palette agent from downloading the image and consuming bandwidth, and eventually the cluster will be created using images from the content bundle. For airgap clusters, the `ImagePullBackOff` error will eventually resolve on its own and there is no action to take. | July 11, 2024 | Edge | -| When you add a new VMware vSphere Edge host to an Edge cluster, the IP address may fail to be assigned to the Edge host after a reboot. | Review the [Edge Troubleshooting](../troubleshooting/edge.md) section for workarounds. | July 9, 2024 | Edge | -| When you install Palette Edge using an Edge Installer ISO with a RHEL 8 operating system on a Virtual Machine (VM) with insufficient video memory, the QR code in the registration screen does not display correctly. | Increase the video memory of your VM to 8 MB or higher. The steps to do this vary depending on the platform you use to deploy your VM. In vSphere, you can right click on the VM, click **Edit Settings** and adjust the video card memory in the **Video card** tab. | July 9, 2024 | Edge | -| Custom Certificate Authority (CA) is not supported for accessing Azure AKS clusters. Using a custom CA prevents the `spectro-proxy` pack from working correctly with Azure AKS clusters. | No workaround is available. | July 9, 2024 | Packs, Clusters | -| Manifests attached to an Infrastructure Pack, such as OS, Kubernetes, Network, or Storage, are not applied to the Edge cluster. This issue does not impact the infrastructure pack's YAML definition, which is applied to the cluster. | Specify custom configurations through an add-on pack or a custom manifest pack applied after the infrastructure packs. | Jul 9, 2024 | Edge, Packs | -| Clusters using Cilium and deployed to VMware environments with the VXLAN tunnel protocol may encounter an I/O timeout error. This issue is caused by the VXMNET3 adapter, which is dropping network traffic and resulting in VXLAN traffic being dropped. You can learn more about this issue in the [Cilium's GitHub issue #21801](https://github.com/cilium/cilium/issues/21801). | Review the [Cilium Troubleshooting](../integrations/cilium.md#io-timeout-error-on-vmware) section for workarounds. | June 27, 2024 | Packs, Clusters, Edge | -| [Sonobuoy](../clusters/cluster-management/compliance-scan.md#conformance-testing) scans fail to generate reports on airgapped Palette Edge clusters. | No workaround is available. | June 24, 2024 | Edge | -| Clusters configured with OpenID Connect (OIDC) at the Kubernetes layer encounter issues when authenticating with the [non-admin Kubeconfig file](../clusters/cluster-management/kubeconfig.md#cluster-admin). Kubeconfig files using OIDC to authenticate will not work if the SSL certificate is set at the OIDC provider level. | Use the admin Kubeconfig file to authenticate with the cluster, as it does not use OIDC to authenticate. | June 21, 2024 | Clusters | -| During the platform upgrade from Palette 4.3 to 4.4, Virtual Clusters may encounter a scenario where the pod `palette-controller-manager` is not upgraded to the newer version of Palette. The virtual cluster will continue to be operational, and this does not impact its functionality. | Refer to the [Controller Manager Pod Not Upgraded](../troubleshooting/palette-dev-engine.md#scenario---controller-manager-pod-not-upgraded) troubleshooting guide. | June 15, 2024 | Virtual Clusters | -| Edge hosts with FIPS-compliant RHEL Operating System (OS) distribution may encounter the error where the `systemd-resolved.service` service enters the **failed** state. This prevents the nameserver from being configured, which will result in cluster deployment failure. | Refer to [TroubleShooting](../troubleshooting/edge.md#scenario---systemd-resolvedservice-enters-failed-state) for a workaround. | June 15, 2024 | Edge | -| The GKE cluster's Kubernetes pods are failing to start because the Kubernetes patch version is unavailable. This is encountered during pod restarts or node scaling operations. | Deploy a new cluster and use a GKE cluster profile that does not contain a Kubernetes pack layer with a patch version. Migrate the workloads from the existing cluster to the new cluster. This is a breaking change introduced in Palette 4.4.0 | June 15, 2024 | Packs, Clusters | -| [MicroK8s](../integrations/microk8s.md) does not support multi-node control plane clusters. The upgrade strategy, `InPlaceUpgrade`, is the only option available for use. | No workaround is available. | June 15, 2024 | Packs | -| Clusters using [MicroK8s](../integrations/microk8s.md) as the Kubernetes distribution, the control plane node fails to upgrade when using the `InPlaceUpgrade` strategy for sequential upgrades, such as upgrading from version 1.25.x to version 1.26.x and then to version 1.27.x. | Refer to the [Control Plane Node Fails to Upgrade in Sequential MicroK8s Upgrades](../troubleshooting/pack-issues.md) troubleshooting guide for resolution steps. | June 15, 2024 | Packs | -| Azure IaaS clusters are having issues with deployed load balancers and ingress deployments when using Kubernetes versions 1.29.0 and 1.29.4. Incoming connections time out as a result due to a lack of network path inside the cluster. Azure AKS clusters are not impacted. | Use a Kubernetes version lower than 1.29.0 | June 12, 2024 | Clusters | -| OIDC integration with Virtual Clusters is not functional. All other operations related to Virtual Clusters are operational. | No workaround is available. | Jun 11, 2024 | Virtual Clusters | -| Deploying self-hosted Palette or VerteX to a vSphere environment fails if vCenter has standalone hosts directly under a Datacenter. Persistent Volume (PV) provisioning fails due to an upstream issue with the vSphere Container Storage Interface (CSI) for all versions before v3.2.0. Palette and VerteX use the vSphere CSI version 3.1.2 internally. The issue may also occur in workload clusters deployed on vSphere using the same vSphere CSI for storage volume provisioning. | If you encounter the following error message when deploying self-hosted Palette or VerteX: `'ProvisioningFailed failed to provision volume with StorageClass "spectro-storage-class". Error: failed to fetch hosts from entity ComputeResource:domain-xyz` then use the following workaround. Remove standalone hosts directly under the Datacenter from vCenter and allow the volume provisioning to complete. After the volume is provisioned, you can add the standalone hosts back. You can also use a service account that does not have access to the standalone hosts as the user that deployed Palette. | May 21, 2024 | Self-Hosted | -| Conducting cluster node scaling operations on a cluster undergoing a backup can lead to issues and potential unresponsiveness. | To avoid this, ensure no backup operations are in progress before scaling nodes or performing other cluster operations that change the cluster state | April 14, 2024 | Clusters | -| Palette automatically creates an AWS security group for worker nodes using the format `-node`. If a security group with the same name already exists in the VPC, the cluster creation process fails. | To avoid this, ensure that no security group with the same name exists in the VPC before creating a cluster. | April 14, 2024 | Clusters | -| K3s version 1.27.7 has been marked as _Deprecated_. This version has a known issue that causes clusters to crash. | Upgrade to a newer version of K3s to avoid the issue, such as versions 1.26.12, 1.28.5, and 1.27.11. You can learn more about the issue in the [K3s GitHub issue](https://github.com/k3s-io/k3s/issues/9047) page. | April 14, 2024 | Packs, Clusters | -| When deploying a multi-node AWS EKS cluster with the Container Network Interface (CNI) [Calico](../integrations/calico.md), the cluster deployment fails. | A workaround is to use the AWS VPC CNI in the interim while the issue is resolved. | April 14, 2024 | Packs, Clusters | -| If a Kubernetes cluster deployed onto VMware is deleted, and later re-created with the same name, the cluster creation process fails. The issue is caused by existing resources remaining inside the PCG, or the System PCG, that are not cleaned up during the cluster deletion process. | Refer to the [VMware Resources Remain After Cluster Deletion](../troubleshooting/pcg.md#scenario---vmware-resources-remain-after-cluster-deletion) troubleshooting guide for resolution steps. | April 14, 2024 | Clusters | -| In a VMware environment, self-hosted Palette instances do not receive a unique cluster ID when deployed, which can cause issues during a node repave event, such as a Kubernetes version upgrade. Specifically, Persistent Volumes (PVs) and Persistent Volume Claims (PVCs) will experience start problems due to the lack of a unique cluster ID. | To resolve this issue, refer to the [Volume Attachment Errors Volume in VMware Environment](../troubleshooting/palette-upgrade.md#volume-attachment-errors-volume-in-vmware-environment) troubleshooting guide. | April 14, 2024 | Self-Hosted | -| Day-2 operations related to infrastructure changes, such as modifying the node size and count, when using MicroK8s are not taking effect. | No workaround is available. | April 14, 2024 | Packs, Clusters | -| If a cluster that uses the Rook-Ceph pack experiences network issues, it's possible for the file mount to become and remain unavailable even after the network is restored. | This a known issue disclosed in the [Rook GitHub repository](https://github.com/rook/rook/issues/13818). To resolve this issue, refer to [Rook-Ceph](../integrations/rook-ceph.md#file-mount-becomes-unavailable-after-cluster-experiences-network-issues) pack documentation. | April 14, 2024 | Packs, Edge | -| Edge clusters on Edge hosts with ARM64 processors may experience instability issues that cause cluster failures. | ARM64 support is limited to a specific set of Edge devices. Currently, Nvidia Jetson devices are supported. | April 14, 2024 | Edge | -| During the cluster provisioning process of new edge clusters, the Palette webhook pods may not always deploy successfully, causing the cluster to be stuck in the provisioning phase. This issue does not impact deployed clusters. | Review the [Palette Webhook Pods Fail to Start](../troubleshooting/edge.md#scenario---palette-webhook-pods-fail-to-start) troubleshooting guide for resolution steps. | April 14, 2024 | Edge | +| Description | Workaround | Publish Date | Product Component | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | ---------------------------- | +| Clusters with the Virtual Machine Orchestrator (VMO) pack may experience VMs getting stuck in a continuous migration loop, as indicated by a `Migrating` or `Migration` VM status. | Review the [Virtual Machine Orchestrator (VMO) Troubleshooting](../troubleshooting/vmo-issues.md) section for workarounds. | August 1, 2024 | Virtual Machine Orchestrator | +| Palette CLI users who authenticated with the `login` command and specified a Palette console endpoint that does not contain the tenant name are encountering issues with expired JWT tokens. | Re-authenticate using your tenant URL, for example, `https://my-org.console.spectrocloud.com.` If the issue persists after re-authenticating, remove the `~/.palette/palette.yaml` file that is auto-generated by the Palette CLI. Re-authenticate with the `login` command if other commands require it. | July 25, 2024 | CLI | +| Adding new cloud providers, such as Nutanix, is currently unavailable. Private Cloud Gateway (PCG) deployments in new Nutanix environments fail to complete the installation. As a result, adding a new Nutanix environment to launch new host clusters is unavailable. This does not impact existing Nutanix deployments with a PCG deployed. | No workarounds are available. | July 20, 2024 | Clusters, Self-Hosted, PCG | +| Single-node Private Cloud Gateway (PCG) clusters are experiencing an issue upgrading to 4.4.11. The vSphere CSI controller pod fails to start because there are no matching affinity rules. | Check out the [vSphere Controller Pod Fails to Start in Single Node PCG Cluster](../troubleshooting/pcg.md#scenario---vsphere-controller-pod-fails-to-start-in-single-node-pcg-cluster) guide for workaround steps. | July 20, 2024 | PCG | +| When provisioning an Edge cluster, it's possible that some Operating System (OS) user credentials will be lost once the cluster is active. This is because the cloud-init stages from different sources merge during the deployment process, and sometimes, the same stages without distinct names overwrite each other. | Give each of your cloud-init stages in the OS pack and in the Edge installer **user-data** file a unique name. For more information about cloud-init stages and examples of cloud-init stages with names, refer to [Cloud-init Stages](../clusters/edge/edge-configuration/cloud-init.md). | July 17, 2024 | Edge | +| When you use a content bundle to provision a new cluster without using the local Harbor registry, it's possible for the images to be pulled from external networks instead of from the content bundle, consuming network bandwidth. If your Edge host has no connection to external networks or if it cannot locate the image on a remote registry, some pods may enter the `ImagePullBackOff` state at first, but eventually the pods will be created using images from the content bundle. | For connected clusters, you can make sure that the remote images are not reachable by the Edge host, which will stop the Palette agent from downloading the image and consuming bandwidth, and eventually the cluster will be created using images from the content bundle. For airgap clusters, the `ImagePullBackOff` error will eventually resolve on its own and there is no action to take. | July 11, 2024 | Edge | +| When you add a new VMware vSphere Edge host to an Edge cluster, the IP address may fail to be assigned to the Edge host after a reboot. | Review the [Edge Troubleshooting](../troubleshooting/edge.md) section for workarounds. | July 9, 2024 | Edge | +| When you install Palette Edge using an Edge Installer ISO with a RHEL 8 operating system on a Virtual Machine (VM) with insufficient video memory, the QR code in the registration screen does not display correctly. | Increase the video memory of your VM to 8 MB or higher. The steps to do this vary depending on the platform you use to deploy your VM. In vSphere, you can right click on the VM, click **Edit Settings** and adjust the video card memory in the **Video card** tab. | July 9, 2024 | Edge | +| Custom Certificate Authority (CA) is not supported for accessing Azure AKS clusters. Using a custom CA prevents the `spectro-proxy` pack from working correctly with Azure AKS clusters. | No workaround is available. | July 9, 2024 | Packs, Clusters | +| Manifests attached to an Infrastructure Pack, such as OS, Kubernetes, Network, or Storage, are not applied to the Edge cluster. This issue does not impact the infrastructure pack's YAML definition, which is applied to the cluster. | Specify custom configurations through an add-on pack or a custom manifest pack applied after the infrastructure packs. | Jul 9, 2024 | Edge, Packs | +| Clusters using Cilium and deployed to VMware environments with the VXLAN tunnel protocol may encounter an I/O timeout error. This issue is caused by the VXMNET3 adapter, which is dropping network traffic and resulting in VXLAN traffic being dropped. You can learn more about this issue in the [Cilium's GitHub issue #21801](https://github.com/cilium/cilium/issues/21801). | Review the section for workarounds. | June 27, 2024 | Packs, Clusters, Edge | +| [Sonobuoy](../clusters/cluster-management/compliance-scan.md#conformance-testing) scans fail to generate reports on airgapped Palette Edge clusters. | No workaround is available. | June 24, 2024 | Edge | +| Clusters configured with OpenID Connect (OIDC) at the Kubernetes layer encounter issues when authenticating with the [non-admin Kubeconfig file](../clusters/cluster-management/kubeconfig.md#cluster-admin). Kubeconfig files using OIDC to authenticate will not work if the SSL certificate is set at the OIDC provider level. | Use the admin Kubeconfig file to authenticate with the cluster, as it does not use OIDC to authenticate. | June 21, 2024 | Clusters | +| During the platform upgrade from Palette 4.3 to 4.4, Virtual Clusters may encounter a scenario where the pod `palette-controller-manager` is not upgraded to the newer version of Palette. The virtual cluster will continue to be operational, and this does not impact its functionality. | Refer to the [Controller Manager Pod Not Upgraded](../troubleshooting/palette-dev-engine.md#scenario---controller-manager-pod-not-upgraded) troubleshooting guide. | June 15, 2024 | Virtual Clusters | +| Edge hosts with FIPS-compliant RHEL Operating System (OS) distribution may encounter the error where the `systemd-resolved.service` service enters the **failed** state. This prevents the nameserver from being configured, which will result in cluster deployment failure. | Refer to [TroubleShooting](../troubleshooting/edge.md#scenario---systemd-resolvedservice-enters-failed-state) for a workaround. | June 15, 2024 | Edge | +| The GKE cluster's Kubernetes pods are failing to start because the Kubernetes patch version is unavailable. This is encountered during pod restarts or node scaling operations. | Deploy a new cluster and use a GKE cluster profile that does not contain a Kubernetes pack layer with a patch version. Migrate the workloads from the existing cluster to the new cluster. This is a breaking change introduced in Palette 4.4.0 | June 15, 2024 | Packs, Clusters | +| does not support multi-node control plane clusters. The upgrade strategy, `InPlaceUpgrade`, is the only option available for use. | No workaround is available. | June 15, 2024 | Packs | +| Clusters using as the Kubernetes distribution, the control plane node fails to upgrade when using the `InPlaceUpgrade` strategy for sequential upgrades, such as upgrading from version 1.25.x to version 1.26.x and then to version 1.27.x. | Refer to the [Control Plane Node Fails to Upgrade in Sequential MicroK8s Upgrades](../troubleshooting/pack-issues.md) troubleshooting guide for resolution steps. | June 15, 2024 | Packs | +| Azure IaaS clusters are having issues with deployed load balancers and ingress deployments when using Kubernetes versions 1.29.0 and 1.29.4. Incoming connections time out as a result due to a lack of network path inside the cluster. Azure AKS clusters are not impacted. | Use a Kubernetes version lower than 1.29.0 | June 12, 2024 | Clusters | +| OIDC integration with Virtual Clusters is not functional. All other operations related to Virtual Clusters are operational. | No workaround is available. | Jun 11, 2024 | Virtual Clusters | +| Deploying self-hosted Palette or VerteX to a vSphere environment fails if vCenter has standalone hosts directly under a Datacenter. Persistent Volume (PV) provisioning fails due to an upstream issue with the vSphere Container Storage Interface (CSI) for all versions before v3.2.0. Palette and VerteX use the vSphere CSI version 3.1.2 internally. The issue may also occur in workload clusters deployed on vSphere using the same vSphere CSI for storage volume provisioning. | If you encounter the following error message when deploying self-hosted Palette or VerteX: `'ProvisioningFailed failed to provision volume with StorageClass "spectro-storage-class". Error: failed to fetch hosts from entity ComputeResource:domain-xyz` then use the following workaround. Remove standalone hosts directly under the Datacenter from vCenter and allow the volume provisioning to complete. After the volume is provisioned, you can add the standalone hosts back. You can also use a service account that does not have access to the standalone hosts as the user that deployed Palette. | May 21, 2024 | Self-Hosted | +| Conducting cluster node scaling operations on a cluster undergoing a backup can lead to issues and potential unresponsiveness. | To avoid this, ensure no backup operations are in progress before scaling nodes or performing other cluster operations that change the cluster state | April 14, 2024 | Clusters | +| Palette automatically creates an AWS security group for worker nodes using the format `-node`. If a security group with the same name already exists in the VPC, the cluster creation process fails. | To avoid this, ensure that no security group with the same name exists in the VPC before creating a cluster. | April 14, 2024 | Clusters | +| K3s version 1.27.7 has been marked as _Deprecated_. This version has a known issue that causes clusters to crash. | Upgrade to a newer version of K3s to avoid the issue, such as versions 1.26.12, 1.28.5, and 1.27.11. You can learn more about the issue in the [K3s GitHub issue](https://github.com/k3s-io/k3s/issues/9047) page. | April 14, 2024 | Packs, Clusters | +| When deploying a multi-node AWS EKS cluster with the Container Network Interface (CNI) , the cluster deployment fails. | A workaround is to use the AWS VPC CNI in the interim while the issue is resolved. | April 14, 2024 | Packs, Clusters | +| If a Kubernetes cluster deployed onto VMware is deleted, and later re-created with the same name, the cluster creation process fails. The issue is caused by existing resources remaining inside the PCG, or the System PCG, that are not cleaned up during the cluster deletion process. | Refer to the [VMware Resources Remain After Cluster Deletion](../troubleshooting/pcg.md#scenario---vmware-resources-remain-after-cluster-deletion) troubleshooting guide for resolution steps. | April 14, 2024 | Clusters | +| In a VMware environment, self-hosted Palette instances do not receive a unique cluster ID when deployed, which can cause issues during a node repave event, such as a Kubernetes version upgrade. Specifically, Persistent Volumes (PVs) and Persistent Volume Claims (PVCs) will experience start problems due to the lack of a unique cluster ID. | To resolve this issue, refer to the [Volume Attachment Errors Volume in VMware Environment](../troubleshooting/palette-upgrade.md#volume-attachment-errors-volume-in-vmware-environment) troubleshooting guide. | April 14, 2024 | Self-Hosted | +| Day-2 operations related to infrastructure changes, such as modifying the node size and count, when using MicroK8s are not taking effect. | No workaround is available. | April 14, 2024 | Packs, Clusters | +| If a cluster that uses the Rook-Ceph pack experiences network issues, it's possible for the file mount to become and remain unavailable even after the network is restored. | This a known issue disclosed in the [Rook GitHub repository](https://github.com/rook/rook/issues/13818). To resolve this issue, refer to pack documentation. | April 14, 2024 | Packs, Edge | +| Edge clusters on Edge hosts with ARM64 processors may experience instability issues that cause cluster failures. | ARM64 support is limited to a specific set of Edge devices. Currently, Nvidia Jetson devices are supported. | April 14, 2024 | Edge | +| During the cluster provisioning process of new edge clusters, the Palette webhook pods may not always deploy successfully, causing the cluster to be stuck in the provisioning phase. This issue does not impact deployed clusters. | Review the [Palette Webhook Pods Fail to Start](../troubleshooting/edge.md#scenario---palette-webhook-pods-fail-to-start) troubleshooting guide for resolution steps. | April 14, 2024 | Edge | ## Resolved Known Issues diff --git a/docs/docs-content/release-notes/release-notes.md b/docs/docs-content/release-notes/release-notes.md index a0b334a6c0..37a976ef39 100644 --- a/docs/docs-content/release-notes/release-notes.md +++ b/docs/docs-content/release-notes/release-notes.md @@ -260,7 +260,7 @@ features and improvements. - The MicroK8s pack layer now exposes `bootCommands`, `preRunCommands` and `postRunCommands`. You can use these commands to customize and configure MicroK8s as needed. MicroK8s is delivered as a Technical Preview for AWS and Canonical MAAS in this release. To learn more, refer to the MicroK8s pack - [documentation](../integrations/microk8s.md). + . #### Improvements @@ -303,12 +303,13 @@ features and improvements. - An issue prevents RKE2 and Palette eXtended Kubernetes (PXK) on version 1.29.4 from operating correctly with Canonical MAAS. A temporary workaround is using a version lower than 1.29.4 when using MAAS.. -- [MicroK8s](../integrations/microk8s.md) does not support a multi-node cluster deployment and is limited to a - single-node cluster. As a result, the only supported upgrade strategy is `InPlaceUpgrade`. +- does not support a multi-node + cluster deployment and is limited to a single-node cluster. As a result, the only supported upgrade strategy is + `InPlaceUpgrade`. -- Clusters using [MicroK8s](../integrations/microk8s.md) as the Kubernetes distribution, the control plane node fails to - upgrade when using the `InPlaceUpgrade` strategy for sequential upgrades, such as upgrading from version 1.25.x to - version 1.26.x and then to version 1.27.x. Refer to the +- Clusters using as the Kubernetes + distribution, the control plane node fails to upgrade when using the `InPlaceUpgrade` strategy for sequential + upgrades, such as upgrading from version 1.25.x to version 1.26.x and then to version 1.27.x. Refer to the [Control Plane Node Fails to Upgrade in Sequential MicroK8s Upgrades](../troubleshooting/pack-issues.md) troubleshooting guide for resolution steps. diff --git a/docs/docs-content/troubleshooting/pack-issues.md b/docs/docs-content/troubleshooting/pack-issues.md index ef10fa6316..f9de25a8f9 100644 --- a/docs/docs-content/troubleshooting/pack-issues.md +++ b/docs/docs-content/troubleshooting/pack-issues.md @@ -12,10 +12,10 @@ The following are common scenarios that you may encounter when using Packs. ## Scenario - Control Plane Node Fails to Upgrade in Sequential MicroK8s Upgrades -In clusters that use [MicroK8s](../integrations/microk8s.md) as the Kubernetes distribution, there is a known issue when -using the `InPlaceUpgrade` strategy for sequential Kubernetes upgrades. For example, upgrading from version 1.25.x to -version 1.26.x and then to version 1.27.x may cause the control plane node to fail to upgrade. Use the following steps -to troubleshoot and resolve the issue. +In clusters that use as the +Kubernetes distribution, there is a known issue when using the `InPlaceUpgrade` strategy for sequential Kubernetes +upgrades. For example, upgrading from version 1.25.x to version 1.26.x and then to version 1.27.x may cause the control +plane node to fail to upgrade. Use the following steps to troubleshoot and resolve the issue. ### Debug Steps diff --git a/docs/docs-content/troubleshooting/troubleshooting.md b/docs/docs-content/troubleshooting/troubleshooting.md index fe13c40c8f..bb056c4603 100644 --- a/docs/docs-content/troubleshooting/troubleshooting.md +++ b/docs/docs-content/troubleshooting/troubleshooting.md @@ -29,6 +29,8 @@ support team by opening up a ticket through our [support page](http://support.sp - [Private Cloud Gateway](pcg.md) +- [Virtual Machine Orchestrator](vmo-issues.md) + ## Generate HAR Files When you report issues with Palette to Spectro Cloud Support, we may ask you to generate an HTTP Archive (HAR) file to diff --git a/docs/docs-content/troubleshooting/vmo-issues.md b/docs/docs-content/troubleshooting/vmo-issues.md new file mode 100644 index 0000000000..97f2ae9ba2 --- /dev/null +++ b/docs/docs-content/troubleshooting/vmo-issues.md @@ -0,0 +1,43 @@ +--- +sidebar_label: "Virtual Machine Orchestrator" +title: "Virtual Machine Orchestrator" +description: "Troubleshooting steps for common Virtual Machine Orchestrator scenarios." +icon: "" +hide_table_of_contents: false +sidebar_position: 55 +tags: ["troubleshooting", "vmo"] +--- + +The following are common scenarios that you may encounter when using Virtual Machine Orchestrator (VMO). + +## Scenario - Virtual Machines (VM) Stuck in a Migration Loop + +Clusters with the VMO pack may experience VMs getting stuck in a continuous migration loop, as indicated by a +`Migrating` or `Migration` VM status. Use the following steps to troubleshoot and resolve the issue. + +### Debug Steps + +1. Log in to [Palette](https://console.spectrocloud.com) and click **Clusters** from the left **Main Menu**. + +2. Select your cluster and click on the **Profile** tab. + +3. Select the VMO pack layer and click **Values** under the **Pack Details** section. + +4. Comment out the following lines under the `workloads: {}` section and click **Save**. + + ```yaml + workloads: {} + # workloadsUpdateStrategy: + # workloadUpdateMethods: + # - LiveMigrate + ``` + +5. Within a few minutes, the VMs will stop being stuck in the continuous migration loop. + + :::warning + + Step **4** affects the [CPU Hotplug](../vm-management/create-manage-vm/enable-cpu-hotplug.md) functionality. If your + cluster has CPU Hotplug enabled, you will need to manually restart your VM each time you add a virtual CPU for the + changes to take effect. + + ::: diff --git a/docs/docs-content/tutorials/cluster-deployment/pcg/deploy-app-pcg.md b/docs/docs-content/tutorials/cluster-deployment/pcg/deploy-app-pcg.md index 1825b70604..30809471eb 100644 --- a/docs/docs-content/tutorials/cluster-deployment/pcg/deploy-app-pcg.md +++ b/docs/docs-content/tutorials/cluster-deployment/pcg/deploy-app-pcg.md @@ -357,10 +357,12 @@ complete the core infrastructure stack. Next, click on the **Add New Pack** button to include add-on layers to your cluster profile. -Add the **MetalLB (Helm)** pack to your profile. The [MetalLB](../../../integrations/metallb.md) pack provides a -load-balancer implementation for your Kubernetes cluster, as VMware does not offer a load balancer solution natively. -The load balancer is required to help the _LoadBalancer_ service specified in the Hello Universe application manifest -obtain an IP address, so that you can access the application from your browser. +Add the **MetalLB (Helm)** pack to your profile. The + + pack provides a load-balancer +implementation for your Kubernetes cluster, as VMware does not offer a load balancer solution natively. The load +balancer is required to help the _LoadBalancer_ service specified in the Hello Universe application manifest obtain an +IP address, so that you can access the application from your browser. | Pack Name | Version | Layer | | --------------- | ------- | ------------- | @@ -498,10 +500,10 @@ overview of each file. | lb-metallb-helm | 0.13.x | Load Balancer | | hello-universe | 1.1.x | App Service | - The [MetalLB](../../../integrations/metallb.md) pack provides a load-balancer implementation for your Kubernetes - cluster, as VMware does not offer a load balancer solution natively. The load balancer is required to help the - _LoadBalancer_ service specified in the Hello Universe application manifest obtain an IP address, so that you can - access the application on your browser. + The pack provides a load-balancer + implementation for your Kubernetes cluster, as VMware does not offer a load balancer solution natively. The load + balancer is required to help the _LoadBalancer_ service specified in the Hello Universe application manifest obtain an + IP address, so that you can access the application on your browser. - **cluster.tf** - Configuration for the `spectrocloud_cluster_vsphere` resource. diff --git a/docs/docs-content/tutorials/edge/deploy-cluster.md b/docs/docs-content/tutorials/edge/deploy-cluster.md index 45cb7c9046..e765c750b4 100644 --- a/docs/docs-content/tutorials/edge/deploy-cluster.md +++ b/docs/docs-content/tutorials/edge/deploy-cluster.md @@ -705,7 +705,12 @@ section. ### Profile Layers -In the **Profile Layers** section, add the following [BYOS Edge OS](../../integrations/byoos.md) pack to the OS layer. + + +In the **Profile Layers** section, add the following + pack to the OS layer. + + | **Pack Type** | **Registry** | **Pack Name** | **Pack Version** | | ------------- | ------------ | ------------- | ---------------- | diff --git a/docs/docs-content/tutorials/profiles/deploy-pack.md b/docs/docs-content/tutorials/profiles/deploy-pack.md index ceeb14b2be..5207b7d69a 100644 --- a/docs/docs-content/tutorials/profiles/deploy-pack.md +++ b/docs/docs-content/tutorials/profiles/deploy-pack.md @@ -816,9 +816,9 @@ diagram. You can select any layer to make further edits or change the version if Next, proceed to include the add-on layers. Click on the **Add New Pack** button. + Add the Spectro Proxy pack to enable a reverse proxy to connect to the cluster's API. Adding this pack is _optional_, -but it will help connect your local machine to the cluster's API for debugging. Refer to the -[Spectro Proxy](../../integrations/frp.md) guide for more details. +but it will help connect your local machine to the cluster's API for debugging. Refer to the guide for more details. | **Pack Type** | **Registry** | **Pack Name** | **Pack Version** | | -------------- | ------------ | ------------- | ---------------- | @@ -1318,7 +1318,7 @@ deployment scripts. All you need to do is maintain the cluster profiles. To learn more about packs in Palette, we encourage you to check out the reference resources below. -- [Custom OS Pack](../../integrations/byoos.md) +- - [Add-on Packs](../../registries-and-packs/adding-add-on-packs.md) diff --git a/docs/docs-content/vertex/fips/fips-compliant-components.md b/docs/docs-content/vertex/fips/fips-compliant-components.md index 0d6d53e0f6..3e10354a68 100644 --- a/docs/docs-content/vertex/fips/fips-compliant-components.md +++ b/docs/docs-content/vertex/fips/fips-compliant-components.md @@ -49,20 +49,17 @@ resource to learn about our NIST certificate. ## FIPS-Compliant Kubernetes -Our customized version of Kubernetes is FIPS-compliant. Both -[Palette eXtended Kubernetes (PXK)](../../integrations/kubernetes.md) and -[Palette eXtended Kubernetes-Edge (PXK-E)](../../integrations/kubernetes-edge.md) are compiled with FIPS-compliant -compiler and libraries. - -
+ +Our customized version of Kubernetes is FIPS-compliant. Both and are compiled with FIPS-compliant compiler and libraries. :::info -Refer to the [Palette eXtended Kubernetes (PXK)](../../integrations/kubernetes.md) and -[Palette eXtended Kubernetes-Edge (PXK-E)](../../integrations/kubernetes-edge.md) documentation to learn more about the +Refer to the and + documentation to learn more about the each Kubernetes distribution. ::: + All PXK and PXKE components and supporting open-source components are compiled in their native programming language using language specific FIPS-compliant libraries and static linking. If the component is not available in the form of a diff --git a/docs/docs-content/vertex/install-palette-vertex/install-on-kubernetes/vertex-helm-ref.md b/docs/docs-content/vertex/install-palette-vertex/install-on-kubernetes/vertex-helm-ref.md index bb30447c36..9a88c9edf1 100644 --- a/docs/docs-content/vertex/install-palette-vertex/install-on-kubernetes/vertex-helm-ref.md +++ b/docs/docs-content/vertex/install-palette-vertex/install-on-kubernetes/vertex-helm-ref.md @@ -399,11 +399,11 @@ ingress: ## Spectro Proxy + You can specify a reverse proxy server that clusters deployed through Palette VerteX can use to facilitate network -connectivity to the cluster's Kubernetes API server. Host clusters deployed in private networks can use the -[Spectro Proxy pack](../../../integrations/frp.md) to expose the cluster's Kubernetes API to downstream clients that are -not in the same network. Check out the [Reverse Proxy](../../system-management/reverse-proxy.md) documentation to learn -more about setting up a reverse proxy server for Palette VerteX. +connectivity to the cluster's Kubernetes API server. Host clusters deployed in private networks can use the pack to expose the cluster's Kubernetes API to downstream clients that are not in the same network. Check out the [Reverse +Proxy](../../system-management/reverse-proxy.md) documentation to learn more about setting up a reverse proxy server for +Palette VerteX. | **Parameters** | **Description** | **Type** | **Default value** | | ----------------- | -------------------------------------------------------------------------------------------- | -------- | ----------------- | diff --git a/docs/docs-content/vertex/system-management/reverse-proxy.md b/docs/docs-content/vertex/system-management/reverse-proxy.md index 19cf7f95bb..e4007a8a72 100644 --- a/docs/docs-content/vertex/system-management/reverse-proxy.md +++ b/docs/docs-content/vertex/system-management/reverse-proxy.md @@ -13,9 +13,9 @@ You can configure a reverse proxy for Palette VerteX. The reverse proxy can be u private network. Host clusters deployed in a private network are not accessible from the public internet or by users in different networks. You can use a reverse proxy to access the cluster's Kubernetes API server from a different network. -When you configure reverse proxy server for Palette VerteX, clusters that use the -[Spectro Proxy pack](../../integrations/frp.md) will use the reverse proxy server address in the kubeconfig file. -Clusters not using the Spectro Proxy pack will use the default cluster address in the kubeconfig file. + +When you configure reverse proxy server for Palette VerteX, clusters that use the will use the reverse proxy server address in the kubeconfig file. Clusters not using the Spectro Proxy pack will use the default cluster address in the +kubeconfig file. Use the following steps to configure a reverse proxy server for Palette VerteX. @@ -208,8 +208,8 @@ Output ``` You now have a Spectro Proxy server that you can use to access Palette VerteX clusters deployed in a different network. -Make sure you add the [Spectro Proxy pack](../../integrations/frp.md) to the clusters you want to access using the -Spectro Proxy server. +Make sure you add the to the +clusters you want to access using the Spectro Proxy server. ## Validate diff --git a/docs/docs-content/vm-management/create-vmo-profile.md b/docs/docs-content/vm-management/create-vmo-profile.md index 27b614dcd0..0086d158f3 100644 --- a/docs/docs-content/vm-management/create-vmo-profile.md +++ b/docs/docs-content/vm-management/create-vmo-profile.md @@ -8,9 +8,9 @@ sidebar_position: 10 tags: ["vmo"] --- -The **Virtual Machine Orchestrator** pack conveniently includes several components and automatically installs the -[Spectro Proxy](../integrations/frp.md) pack when you use the default profile configuration. To learn about pack -components, refer to [Palette VMO](./vm-management.md). + +The **Virtual Machine Orchestrator** pack conveniently includes several components and automatically installs the pack when you use the default +profile configuration. To learn about pack components, refer to [Palette VMO](./vm-management.md). ## Limitations @@ -49,8 +49,8 @@ components, refer to [Palette VMO](./vm-management.md). 7. Review the **Access** configuration panel at right. The default setting is **Proxied**, which automatically adds the **Spectro Proxy** pack when you create the cluster, allowing access to the Spectro VM Dashboard from anywhere. Check - out the [Spectro Proxy](../integrations/frp.md) guide to learn more. Changing the default may require some additional - configuration. + out the guide to learn more. + Changing the default may require some additional configuration. The **Direct** option is intended for a private configuration where a proxy is not implemented or not desired. @@ -86,12 +86,11 @@ components, refer to [Palette VMO](./vm-management.md). 6. Locate the **Virtual Machine Orchestrator** pack and add it to your profile. + 7. Review the **Access** configuration panel at right. The default setting is **Proxied**, which automatically adds the **Spectro Proxy** pack when you create the cluster, allowing access to the Spectro VM Dashboard from anywhere. Changing the default may require some additional configuration. Check out the - [Spectro Proxy](../integrations/frp.md) guide to learn more - - The **Direct** option is intended for a private configuration where a proxy is not implemented or not desired. + guide to learn more. The **Direct** option is intended for a private configuration where a proxy is not implemented or not desired. 8. If you are using PKX-E, no change is required and you can skip this step. @@ -107,14 +106,16 @@ components, refer to [Palette VMO](./vm-management.md). criSocketContainerPath: /host/run/containerd/containerd.sock ``` + 9. If your cluster profile does include a load balancer such as MetalLB, no changes are required and you can skip this - step. For more information about MetalLB, refer to [MetalLB pack documentation](../integrations/metallb.md). + step. For more information about MetalLB, refer to the + If your cluster profile does not include a load balancer, update the services `charts.virtual-machine-orchestrator.kubevirt` and `charts.virtual-machine-orchestrator.cdi` to type ClusterIP in **values.yaml** for the VMO pack: - + @@ -133,9 +134,9 @@ components, refer to [Palette VMO](./vm-management.md). targetPort: 8443 ``` - + - + ```yaml {7} kubevirt: @@ -149,7 +150,7 @@ components, refer to [Palette VMO](./vm-management.md). targetPort: 8443 ``` - + diff --git a/docusaurus.config.js b/docusaurus.config.js index 0445fd74b1..d4271f5ae2 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -10,6 +10,7 @@ const { pluginPacksAndIntegrationsData } = require("./plugins/packs-integrations const { pluginImportFontAwesomeIcons } = require("./plugins/font-awesome"); import path from "path"; +import { Logger } from "sass"; /** @type {import('@docusaurus/types').Config} */ const config = { @@ -206,7 +207,10 @@ const config = { id: "enable-source-map", }, ], - pluginPacksAndIntegrationsData, + [ + pluginPacksAndIntegrationsData, + { repositories: ["Palette Registry", "Public Repo", "Spectro Addon Repo", "Palette Community Registry"] }, + ], pluginImportFontAwesomeIcons, function () { return { diff --git a/jest.config.js b/jest.config.js index b32519fcf4..14462d9e61 100644 --- a/jest.config.js +++ b/jest.config.js @@ -4,7 +4,7 @@ module.exports = { preset: "ts-jest", testEnvironment: "jsdom", moduleNameMapper: { - ".+\\.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$": `identity-obj-proxy`, + ".+\\.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2|svg)$": `identity-obj-proxy`, }, testPathIgnorePatterns: [`node_modules`, `\\.cache`, `.*/build`, `visuals`], testEnvironment: `jsdom`, diff --git a/package-lock.json b/package-lock.json index 090f16c860..bcd98ede01 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "spectro-cloud-docs", "version": "4.3.0", "dependencies": { + "@ant-design/icons": "^4.8.3", "@commitlint/cli": "^19.3.0", "@commitlint/config-conventional": "^19.2.2", "@docusaurus/core": "^3.4.0", @@ -20,6 +21,7 @@ "@fortawesome/react-fontawesome": "^0.2.0", "@mdx-js/react": "^3.0.0", "antd": "^5.6.2", + "axios-retry": "^3.8.0", "babel-plugin-macros": "^3.1.0", "clsx": "^1.2.1", "docusaurus-plugin-image-zoom": "^1.0.1", @@ -27,11 +29,17 @@ "docusaurus-plugin-sass": "^0.2.5", "docusaurus-theme-openapi-docs": "^3.0.0-beta.10", "fuse.js": "^6.6.2", + "markdown-to-jsx": "^7.0.0", + "node-fetch": "^3.1.0", + "p-ratelimit": "^1.0.1", "prism-react-renderer": "^2.1.0", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-markdown": "9.0.1", "react-select": "^5.8.0", - "sass": "^1.77.6" + "remark-gfm": "4.0.0", + "sass": "^1.77.6", + "semver": "^7.3.7" }, "devDependencies": { "@argos-ci/cli": "^2.0.1", @@ -94,8 +102,7 @@ }, "node_modules/@algolia/autocomplete-core": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", - "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", + "license": "MIT", "dependencies": { "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", "@algolia/autocomplete-shared": "1.9.3" @@ -103,8 +110,7 @@ }, "node_modules/@algolia/autocomplete-plugin-algolia-insights": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", - "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", + "license": "MIT", "dependencies": { "@algolia/autocomplete-shared": "1.9.3" }, @@ -114,8 +120,7 @@ }, "node_modules/@algolia/autocomplete-preset-algolia": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", - "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", + "license": "MIT", "dependencies": { "@algolia/autocomplete-shared": "1.9.3" }, @@ -126,8 +131,7 @@ }, "node_modules/@algolia/autocomplete-shared": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", - "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", + "license": "MIT", "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", "algoliasearch": ">= 4.9.1 < 6" @@ -135,29 +139,25 @@ }, "node_modules/@algolia/cache-browser-local-storage": { "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.23.3.tgz", - "integrity": "sha512-vRHXYCpPlTDE7i6UOy2xE03zHF2C8MEFjPN2v7fRbqVpcOvAUQK81x3Kc21xyb5aSIpYCjWCZbYZuz8Glyzyyg==", + "license": "MIT", "dependencies": { "@algolia/cache-common": "4.23.3" } }, "node_modules/@algolia/cache-common": { "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.23.3.tgz", - "integrity": "sha512-h9XcNI6lxYStaw32pHpB1TMm0RuxphF+Ik4o7tcQiodEdpKK+wKufY6QXtba7t3k8eseirEMVB83uFFF3Nu54A==" + "license": "MIT" }, "node_modules/@algolia/cache-in-memory": { "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.23.3.tgz", - "integrity": "sha512-yvpbuUXg/+0rbcagxNT7un0eo3czx2Uf0y4eiR4z4SD7SiptwYTpbuS0IHxcLHG3lq22ukx1T6Kjtk/rT+mqNg==", + "license": "MIT", "dependencies": { "@algolia/cache-common": "4.23.3" } }, "node_modules/@algolia/client-account": { "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.23.3.tgz", - "integrity": "sha512-hpa6S5d7iQmretHHF40QGq6hz0anWEHGlULcTIT9tbUssWUriN9AUXIFQ8Ei4w9azD0hc1rUok9/DeQQobhQMA==", + "license": "MIT", "dependencies": { "@algolia/client-common": "4.23.3", "@algolia/client-search": "4.23.3", @@ -166,8 +166,7 @@ }, "node_modules/@algolia/client-analytics": { "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.23.3.tgz", - "integrity": "sha512-LBsEARGS9cj8VkTAVEZphjxTjMVCci+zIIiRhpFun9jGDUlS1XmhCW7CTrnaWeIuCQS/2iPyRqSy1nXPjcBLRA==", + "license": "MIT", "dependencies": { "@algolia/client-common": "4.23.3", "@algolia/client-search": "4.23.3", @@ -177,8 +176,7 @@ }, "node_modules/@algolia/client-common": { "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.23.3.tgz", - "integrity": "sha512-l6EiPxdAlg8CYhroqS5ybfIczsGUIAC47slLPOMDeKSVXYG1n0qGiz4RjAHLw2aD0xzh2EXZ7aRguPfz7UKDKw==", + "license": "MIT", "dependencies": { "@algolia/requester-common": "4.23.3", "@algolia/transporter": "4.23.3" @@ -186,8 +184,7 @@ }, "node_modules/@algolia/client-personalization": { "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.23.3.tgz", - "integrity": "sha512-3E3yF3Ocr1tB/xOZiuC3doHQBQ2zu2MPTYZ0d4lpfWads2WTKG7ZzmGnsHmm63RflvDeLK/UVx7j2b3QuwKQ2g==", + "license": "MIT", "dependencies": { "@algolia/client-common": "4.23.3", "@algolia/requester-common": "4.23.3", @@ -196,8 +193,7 @@ }, "node_modules/@algolia/client-search": { "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.23.3.tgz", - "integrity": "sha512-P4VAKFHqU0wx9O+q29Q8YVuaowaZ5EM77rxfmGnkHUJggh28useXQdopokgwMeYw2XUht49WX5RcTQ40rZIabw==", + "license": "MIT", "dependencies": { "@algolia/client-common": "4.23.3", "@algolia/requester-common": "4.23.3", @@ -206,26 +202,22 @@ }, "node_modules/@algolia/events": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", - "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" + "license": "MIT" }, "node_modules/@algolia/logger-common": { "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.23.3.tgz", - "integrity": "sha512-y9kBtmJwiZ9ZZ+1Ek66P0M68mHQzKRxkW5kAAXYN/rdzgDN0d2COsViEFufxJ0pb45K4FRcfC7+33YB4BLrZ+g==" + "license": "MIT" }, "node_modules/@algolia/logger-console": { "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.23.3.tgz", - "integrity": "sha512-8xoiseoWDKuCVnWP8jHthgaeobDLolh00KJAdMe9XPrWPuf1by732jSpgy2BlsLTaT9m32pHI8CRfrOqQzHv3A==", + "license": "MIT", "dependencies": { "@algolia/logger-common": "4.23.3" } }, "node_modules/@algolia/recommend": { "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-4.23.3.tgz", - "integrity": "sha512-9fK4nXZF0bFkdcLBRDexsnGzVmu4TSYZqxdpgBW2tEyfuSSY54D4qSRkLmNkrrz4YFvdh2GM1gA8vSsnZPR73w==", + "license": "MIT", "dependencies": { "@algolia/cache-browser-local-storage": "4.23.3", "@algolia/cache-common": "4.23.3", @@ -242,29 +234,25 @@ }, "node_modules/@algolia/requester-browser-xhr": { "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.23.3.tgz", - "integrity": "sha512-jDWGIQ96BhXbmONAQsasIpTYWslyjkiGu0Quydjlowe+ciqySpiDUrJHERIRfELE5+wFc7hc1Q5hqjGoV7yghw==", + "license": "MIT", "dependencies": { "@algolia/requester-common": "4.23.3" } }, "node_modules/@algolia/requester-common": { "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.23.3.tgz", - "integrity": "sha512-xloIdr/bedtYEGcXCiF2muajyvRhwop4cMZo+K2qzNht0CMzlRkm8YsDdj5IaBhshqfgmBb3rTg4sL4/PpvLYw==" + "license": "MIT" }, "node_modules/@algolia/requester-node-http": { "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.23.3.tgz", - "integrity": "sha512-zgu++8Uj03IWDEJM3fuNl34s746JnZOWn1Uz5taV1dFyJhVM/kTNw9Ik7YJWiUNHJQXcaD8IXD1eCb0nq/aByA==", + "license": "MIT", "dependencies": { "@algolia/requester-common": "4.23.3" } }, "node_modules/@algolia/transporter": { "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.23.3.tgz", - "integrity": "sha512-Wjl5gttqnf/gQKJA+dafnD0Y6Yw97yvfY8R9h0dQltX1GXTgNs1zWgvtWW0tHl1EgMdhAyw189uWiZMnL3QebQ==", + "license": "MIT", "dependencies": { "@algolia/cache-common": "4.23.3", "@algolia/logger-common": "4.23.3", @@ -311,14 +299,15 @@ "license": "MIT" }, "node_modules/@ant-design/icons": { - "version": "5.2.6", + "version": "4.8.3", "license": "MIT", "dependencies": { - "@ant-design/colors": "^7.0.0", + "@ant-design/colors": "^6.0.0", "@ant-design/icons-svg": "^4.3.0", "@babel/runtime": "^7.11.2", "classnames": "^2.2.6", - "rc-util": "^5.31.1" + "lodash": "^4.17.15", + "rc-util": "^5.9.4" }, "engines": { "node": ">=8" @@ -329,9 +318,16 @@ } }, "node_modules/@ant-design/icons-svg": { - "version": "4.3.1", + "version": "4.4.2", "license": "MIT" }, + "node_modules/@ant-design/icons/node_modules/@ant-design/colors": { + "version": "6.0.0", + "license": "MIT", + "dependencies": { + "@ctrl/tinycolor": "^3.4.0" + } + }, "node_modules/@ant-design/react-slick": { "version": "1.0.2", "license": "MIT", @@ -371,9 +367,8 @@ }, "node_modules/@argos-ci/cli": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@argos-ci/cli/-/cli-2.1.0.tgz", - "integrity": "sha512-nbubtKVqtGt4VW0AhSDxBL3wryk1INC9Fv4Hk+BEI72nATjA7OMWqZKs/iVQp4iDbrk7ydnzy+0dSNN1m5WPYg==", "dev": true, + "license": "MIT", "dependencies": { "@argos-ci/core": "2.2.0", "commander": "^12.0.0", @@ -389,9 +384,8 @@ }, "node_modules/@argos-ci/cli/node_modules/@argos-ci/core": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@argos-ci/core/-/core-2.2.0.tgz", - "integrity": "sha512-T5W37CZ6HZjRcVAXuPj0wUB/Fm4VdwLvKpQL9yqSwiJganeNz7u8AFYJ30ujSUJS1jdUViW5TNnmsgDjuvGyTQ==", "dev": true, + "license": "MIT", "dependencies": { "@argos-ci/util": "2.0.0", "axios": "^1.6.8", @@ -407,18 +401,16 @@ }, "node_modules/@argos-ci/cli/node_modules/@argos-ci/util": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@argos-ci/util/-/util-2.0.0.tgz", - "integrity": "sha512-wnsNQOjcNfxOi8cHWSv8+GhzUeIitDJgjhuSNR9zrfHB0Y3nDVI57S/mHRo+EMAaWwghfbrxW1ypRCXVseN0GA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18.0.0" } }, "node_modules/@argos-ci/cli/node_modules/axios": { "version": "1.6.8", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", - "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", "dev": true, + "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -427,9 +419,8 @@ }, "node_modules/@argos-ci/cli/node_modules/boxen": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", - "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", "dev": true, + "license": "MIT", "dependencies": { "ansi-align": "^3.0.1", "camelcase": "^7.0.1", @@ -449,9 +440,8 @@ }, "node_modules/@argos-ci/cli/node_modules/camelcase": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", - "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -461,9 +451,8 @@ }, "node_modules/@argos-ci/cli/node_modules/chalk": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -473,31 +462,17 @@ }, "node_modules/@argos-ci/cli/node_modules/commander": { "version": "12.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.0.0.tgz", - "integrity": "sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" } }, - "node_modules/@argos-ci/cli/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@argos-ci/cli/node_modules/sharp": { "version": "0.33.4", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.4.tgz", - "integrity": "sha512-7i/dt5kGl7qR4gwPRD2biwD2/SvBn3O04J77XKFgL2OnZtQw+AG9wnuS/csmu80nPRHLYE9E41fyEiG8nhH6/Q==", "dev": true, "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { "color": "^4.2.3", "detect-libc": "^2.0.3", @@ -534,9 +509,8 @@ }, "node_modules/@argos-ci/cli/node_modules/update-notifier": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-7.0.0.tgz", - "integrity": "sha512-Hv25Bh+eAbOLlsjJreVPOs4vd51rrtCrmhyOJtbpAojro34jS4KQaEp4/EvlHJX7jSO42VvEFpkastVyXyIsdQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boxen": "^7.1.1", "chalk": "^5.3.0", @@ -665,6 +639,13 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/generator": { "version": "7.23.6", "license": "MIT", @@ -712,6 +693,13 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.23.6", "license": "MIT", @@ -733,6 +721,13 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.22.15", "license": "MIT", @@ -748,6 +743,13 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-define-polyfill-provider": { "version": "0.4.4", "license": "MIT", @@ -1903,6 +1905,13 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.23.3", "license": "MIT", @@ -2132,6 +2141,13 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/preset-modules": { "version": "0.1.6-no-external-plugins", "license": "MIT", @@ -2262,8 +2278,7 @@ }, "node_modules/@commitlint/cli": { "version": "19.3.0", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.3.0.tgz", - "integrity": "sha512-LgYWOwuDR7BSTQ9OLZ12m7F/qhNY+NpAyPBgo4YNMkACE7lGuUnuQq1yi9hz1KA4+3VqpOYl8H1rY/LYK43v7g==", + "license": "MIT", "dependencies": { "@commitlint/format": "^19.3.0", "@commitlint/lint": "^19.2.2", @@ -2282,8 +2297,7 @@ }, "node_modules/@commitlint/cli/node_modules/execa": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", @@ -2304,8 +2318,7 @@ }, "node_modules/@commitlint/cli/node_modules/get-stream": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "license": "MIT", "engines": { "node": ">=16" }, @@ -2315,16 +2328,14 @@ }, "node_modules/@commitlint/cli/node_modules/human-signals": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "license": "Apache-2.0", "engines": { "node": ">=16.17.0" } }, "node_modules/@commitlint/cli/node_modules/is-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -2334,8 +2345,7 @@ }, "node_modules/@commitlint/cli/node_modules/mimic-fn": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -2345,8 +2355,7 @@ }, "node_modules/@commitlint/cli/node_modules/npm-run-path": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "license": "MIT", "dependencies": { "path-key": "^4.0.0" }, @@ -2359,8 +2368,7 @@ }, "node_modules/@commitlint/cli/node_modules/onetime": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "license": "MIT", "dependencies": { "mimic-fn": "^4.0.0" }, @@ -2373,8 +2381,7 @@ }, "node_modules/@commitlint/cli/node_modules/path-key": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -2384,8 +2391,7 @@ }, "node_modules/@commitlint/cli/node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", "engines": { "node": ">=14" }, @@ -2395,8 +2401,7 @@ }, "node_modules/@commitlint/cli/node_modules/strip-final-newline": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -2406,8 +2411,7 @@ }, "node_modules/@commitlint/config-conventional": { "version": "19.2.2", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.2.2.tgz", - "integrity": "sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw==", + "license": "MIT", "dependencies": { "@commitlint/types": "^19.0.3", "conventional-changelog-conventionalcommits": "^7.0.2" @@ -2418,8 +2422,7 @@ }, "node_modules/@commitlint/config-validator": { "version": "19.0.3", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-19.0.3.tgz", - "integrity": "sha512-2D3r4PKjoo59zBc2auodrSCaUnCSALCx54yveOFwwP/i2kfEAQrygwOleFWswLqK0UL/F9r07MFi5ev2ohyM4Q==", + "license": "MIT", "dependencies": { "@commitlint/types": "^19.0.3", "ajv": "^8.11.0" @@ -2430,8 +2433,7 @@ }, "node_modules/@commitlint/ensure": { "version": "19.0.3", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-19.0.3.tgz", - "integrity": "sha512-SZEpa/VvBLoT+EFZVb91YWbmaZ/9rPH3ESrINOl0HD2kMYsjvl0tF7nMHh0EpTcv4+gTtZBAe1y/SS6/OhfZzQ==", + "license": "MIT", "dependencies": { "@commitlint/types": "^19.0.3", "lodash.camelcase": "^4.3.0", @@ -2446,16 +2448,14 @@ }, "node_modules/@commitlint/execute-rule": { "version": "19.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-19.0.0.tgz", - "integrity": "sha512-mtsdpY1qyWgAO/iOK0L6gSGeR7GFcdW7tIjcNFxcWkfLDF5qVbPHKuGATFqRMsxcO8OUKNj0+3WOHB7EHm4Jdw==", + "license": "MIT", "engines": { "node": ">=v18" } }, "node_modules/@commitlint/format": { "version": "19.3.0", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-19.3.0.tgz", - "integrity": "sha512-luguk5/aF68HiF4H23ACAfk8qS8AHxl4LLN5oxPc24H+2+JRPsNr1OS3Gaea0CrH7PKhArBMKBz5RX9sA5NtTg==", + "license": "MIT", "dependencies": { "@commitlint/types": "^19.0.3", "chalk": "^5.3.0" @@ -2466,8 +2466,7 @@ }, "node_modules/@commitlint/format/node_modules/chalk": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -2477,8 +2476,7 @@ }, "node_modules/@commitlint/is-ignored": { "version": "19.2.2", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.2.2.tgz", - "integrity": "sha512-eNX54oXMVxncORywF4ZPFtJoBm3Tvp111tg1xf4zWXGfhBPKpfKG6R+G3G4v5CPlRROXpAOpQ3HMhA9n1Tck1g==", + "license": "MIT", "dependencies": { "@commitlint/types": "^19.0.3", "semver": "^7.6.0" @@ -2487,21 +2485,9 @@ "node": ">=v18" } }, - "node_modules/@commitlint/is-ignored/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@commitlint/lint": { "version": "19.2.2", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.2.2.tgz", - "integrity": "sha512-xrzMmz4JqwGyKQKTpFzlN0dx0TAiT7Ran1fqEBgEmEj+PU98crOFtysJgY+QdeSagx6EDRigQIXJVnfrI0ratA==", + "license": "MIT", "dependencies": { "@commitlint/is-ignored": "^19.2.2", "@commitlint/parse": "^19.0.3", @@ -2514,8 +2500,7 @@ }, "node_modules/@commitlint/load": { "version": "19.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.2.0.tgz", - "integrity": "sha512-XvxxLJTKqZojCxaBQ7u92qQLFMMZc4+p9qrIq/9kJDy8DOrEa7P1yx7Tjdc2u2JxIalqT4KOGraVgCE7eCYJyQ==", + "license": "MIT", "dependencies": { "@commitlint/config-validator": "^19.0.3", "@commitlint/execute-rule": "^19.0.0", @@ -2534,8 +2519,7 @@ }, "node_modules/@commitlint/load/node_modules/chalk": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -2545,8 +2529,7 @@ }, "node_modules/@commitlint/load/node_modules/cosmiconfig": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "license": "MIT", "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", @@ -2570,16 +2553,14 @@ }, "node_modules/@commitlint/message": { "version": "19.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-19.0.0.tgz", - "integrity": "sha512-c9czf6lU+9oF9gVVa2lmKaOARJvt4soRsVmbR7Njwp9FpbBgste5i7l/2l5o8MmbwGh4yE1snfnsy2qyA2r/Fw==", + "license": "MIT", "engines": { "node": ">=v18" } }, "node_modules/@commitlint/parse": { "version": "19.0.3", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-19.0.3.tgz", - "integrity": "sha512-Il+tNyOb8VDxN3P6XoBBwWJtKKGzHlitEuXA5BP6ir/3loWlsSqDr5aecl6hZcC/spjq4pHqNh0qPlfeWu38QA==", + "license": "MIT", "dependencies": { "@commitlint/types": "^19.0.3", "conventional-changelog-angular": "^7.0.0", @@ -2591,8 +2572,7 @@ }, "node_modules/@commitlint/read": { "version": "19.2.1", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.2.1.tgz", - "integrity": "sha512-qETc4+PL0EUv7Q36lJbPG+NJiBOGg7SSC7B5BsPWOmei+Dyif80ErfWQ0qXoW9oCh7GTpTNRoaVhiI8RbhuaNw==", + "license": "MIT", "dependencies": { "@commitlint/top-level": "^19.0.0", "@commitlint/types": "^19.0.3", @@ -2606,8 +2586,7 @@ }, "node_modules/@commitlint/read/node_modules/execa": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", @@ -2628,8 +2607,7 @@ }, "node_modules/@commitlint/read/node_modules/get-stream": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "license": "MIT", "engines": { "node": ">=16" }, @@ -2639,16 +2617,14 @@ }, "node_modules/@commitlint/read/node_modules/human-signals": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "license": "Apache-2.0", "engines": { "node": ">=16.17.0" } }, "node_modules/@commitlint/read/node_modules/is-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -2658,8 +2634,7 @@ }, "node_modules/@commitlint/read/node_modules/mimic-fn": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -2669,8 +2644,7 @@ }, "node_modules/@commitlint/read/node_modules/npm-run-path": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "license": "MIT", "dependencies": { "path-key": "^4.0.0" }, @@ -2683,8 +2657,7 @@ }, "node_modules/@commitlint/read/node_modules/onetime": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "license": "MIT", "dependencies": { "mimic-fn": "^4.0.0" }, @@ -2697,8 +2670,7 @@ }, "node_modules/@commitlint/read/node_modules/path-key": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -2708,8 +2680,7 @@ }, "node_modules/@commitlint/read/node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", "engines": { "node": ">=14" }, @@ -2719,8 +2690,7 @@ }, "node_modules/@commitlint/read/node_modules/strip-final-newline": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -2730,8 +2700,7 @@ }, "node_modules/@commitlint/resolve-extends": { "version": "19.1.0", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-19.1.0.tgz", - "integrity": "sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg==", + "license": "MIT", "dependencies": { "@commitlint/config-validator": "^19.0.3", "@commitlint/types": "^19.0.3", @@ -2746,8 +2715,7 @@ }, "node_modules/@commitlint/resolve-extends/node_modules/import-meta-resolve": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", - "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -2755,8 +2723,7 @@ }, "node_modules/@commitlint/rules": { "version": "19.0.3", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.0.3.tgz", - "integrity": "sha512-TspKb9VB6svklxNCKKwxhELn7qhtY1rFF8ls58DcFd0F97XoG07xugPjjbVnLqmMkRjZDbDIwBKt9bddOfLaPw==", + "license": "MIT", "dependencies": { "@commitlint/ensure": "^19.0.3", "@commitlint/message": "^19.0.0", @@ -2770,8 +2737,7 @@ }, "node_modules/@commitlint/rules/node_modules/execa": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", @@ -2792,8 +2758,7 @@ }, "node_modules/@commitlint/rules/node_modules/get-stream": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "license": "MIT", "engines": { "node": ">=16" }, @@ -2803,16 +2768,14 @@ }, "node_modules/@commitlint/rules/node_modules/human-signals": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "license": "Apache-2.0", "engines": { "node": ">=16.17.0" } }, "node_modules/@commitlint/rules/node_modules/is-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -2822,8 +2785,7 @@ }, "node_modules/@commitlint/rules/node_modules/mimic-fn": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -2833,8 +2795,7 @@ }, "node_modules/@commitlint/rules/node_modules/npm-run-path": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "license": "MIT", "dependencies": { "path-key": "^4.0.0" }, @@ -2847,8 +2808,7 @@ }, "node_modules/@commitlint/rules/node_modules/onetime": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "license": "MIT", "dependencies": { "mimic-fn": "^4.0.0" }, @@ -2861,8 +2821,7 @@ }, "node_modules/@commitlint/rules/node_modules/path-key": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -2872,8 +2831,7 @@ }, "node_modules/@commitlint/rules/node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", "engines": { "node": ">=14" }, @@ -2883,8 +2841,7 @@ }, "node_modules/@commitlint/rules/node_modules/strip-final-newline": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -2894,16 +2851,14 @@ }, "node_modules/@commitlint/to-lines": { "version": "19.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-19.0.0.tgz", - "integrity": "sha512-vkxWo+VQU5wFhiP9Ub9Sre0FYe019JxFikrALVoD5UGa8/t3yOJEpEhxC5xKiENKKhUkTpEItMTRAjHw2SCpZw==", + "license": "MIT", "engines": { "node": ">=v18" } }, "node_modules/@commitlint/top-level": { "version": "19.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-19.0.0.tgz", - "integrity": "sha512-KKjShd6u1aMGNkCkaX4aG1jOGdn7f8ZI8TR1VEuNqUOjWTOdcDSsmglinglJ18JTjuBX5I1PtjrhQCRcixRVFQ==", + "license": "MIT", "dependencies": { "find-up": "^7.0.0" }, @@ -2913,8 +2868,7 @@ }, "node_modules/@commitlint/top-level/node_modules/find-up": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", - "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", + "license": "MIT", "dependencies": { "locate-path": "^7.2.0", "path-exists": "^5.0.0", @@ -2929,8 +2883,7 @@ }, "node_modules/@commitlint/top-level/node_modules/locate-path": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "license": "MIT", "dependencies": { "p-locate": "^6.0.0" }, @@ -2943,8 +2896,7 @@ }, "node_modules/@commitlint/top-level/node_modules/p-limit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "license": "MIT", "dependencies": { "yocto-queue": "^1.0.0" }, @@ -2957,8 +2909,7 @@ }, "node_modules/@commitlint/top-level/node_modules/p-locate": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "license": "MIT", "dependencies": { "p-limit": "^4.0.0" }, @@ -2971,16 +2922,14 @@ }, "node_modules/@commitlint/top-level/node_modules/path-exists": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/@commitlint/top-level/node_modules/yocto-queue": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "license": "MIT", "engines": { "node": ">=12.20" }, @@ -2990,8 +2939,7 @@ }, "node_modules/@commitlint/types": { "version": "19.0.3", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-19.0.3.tgz", - "integrity": "sha512-tpyc+7i6bPG9mvaBbtKUeghfyZSDgWquIDfMgqYtTbmZ9Y9VzEm2je9EYcQ0aoz5o7NvGS+rcDec93yO08MHYA==", + "license": "MIT", "dependencies": { "@types/conventional-commits-parser": "^5.0.0", "chalk": "^5.3.0" @@ -3002,8 +2950,7 @@ }, "node_modules/@commitlint/types/node_modules/chalk": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -3051,13 +2998,11 @@ }, "node_modules/@docsearch/css": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.6.0.tgz", - "integrity": "sha512-+sbxb71sWre+PwDK7X2T8+bhS6clcVMLwBPznX45Qu6opJcgRjAp7gYSDzVFp187J+feSj5dNBN1mJoi6ckkUQ==" + "license": "MIT" }, "node_modules/@docsearch/react": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.6.0.tgz", - "integrity": "sha512-HUFut4ztcVNmqy9gp/wxNbC7pTOHhgVVkHVGCACTuLhUKUhKAF9KYHJtMiLUJxEqiFLQiuri1fWF8zqwM/cu1w==", + "license": "MIT", "dependencies": { "@algolia/autocomplete-core": "1.9.3", "@algolia/autocomplete-preset-algolia": "1.9.3", @@ -3087,8 +3032,7 @@ }, "node_modules/@docusaurus/core": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.4.0.tgz", - "integrity": "sha512-g+0wwmN2UJsBqy2fQRQ6fhXruoEa62JDeEa5d8IdTJlMoaDaEDfHh7WjwGRn4opuTQWpjAwP/fbcgyHKlE+64w==", + "license": "MIT", "dependencies": { "@babel/core": "^7.23.3", "@babel/generator": "^7.23.3", @@ -3213,8 +3157,7 @@ }, "node_modules/@docusaurus/core/node_modules/css-declaration-sorter": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", - "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", + "license": "ISC", "engines": { "node": "^14 || ^16 || >=18" }, @@ -3224,8 +3167,7 @@ }, "node_modules/@docusaurus/core/node_modules/css-minimizer-webpack-plugin": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz", - "integrity": "sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==", + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", "cssnano": "^6.0.1", @@ -3267,8 +3209,7 @@ }, "node_modules/@docusaurus/core/node_modules/css-tree": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "license": "MIT", "dependencies": { "mdn-data": "2.0.30", "source-map-js": "^1.0.1" @@ -3279,8 +3220,7 @@ }, "node_modules/@docusaurus/core/node_modules/cssnano": { "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", - "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", + "license": "MIT", "dependencies": { "cssnano-preset-default": "^6.1.2", "lilconfig": "^3.1.1" @@ -3298,8 +3238,7 @@ }, "node_modules/@docusaurus/core/node_modules/cssnano-preset-default": { "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", - "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "css-declaration-sorter": "^7.2.0", @@ -3341,8 +3280,7 @@ }, "node_modules/@docusaurus/core/node_modules/cssnano-utils": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", - "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", + "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -3352,8 +3290,7 @@ }, "node_modules/@docusaurus/core/node_modules/csso": { "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", "dependencies": { "css-tree": "~2.2.0" }, @@ -3364,8 +3301,7 @@ }, "node_modules/@docusaurus/core/node_modules/csso/node_modules/css-tree": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" @@ -3377,8 +3313,7 @@ }, "node_modules/@docusaurus/core/node_modules/csso/node_modules/mdn-data": { "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==" + "license": "CC0-1.0" }, "node_modules/@docusaurus/core/node_modules/has-flag": { "version": "4.0.0", @@ -3389,8 +3324,7 @@ }, "node_modules/@docusaurus/core/node_modules/lilconfig": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", - "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", + "license": "MIT", "engines": { "node": ">=14" }, @@ -3398,25 +3332,13 @@ "url": "https://github.com/sponsors/antonk52" } }, - "node_modules/@docusaurus/core/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@docusaurus/core/node_modules/mdn-data": { "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" + "license": "CC0-1.0" }, "node_modules/@docusaurus/core/node_modules/postcss-calc": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", - "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", + "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.11", "postcss-value-parser": "^4.2.0" @@ -3430,8 +3352,7 @@ }, "node_modules/@docusaurus/core/node_modules/postcss-colormin": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", - "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "caniuse-api": "^3.0.0", @@ -3447,8 +3368,7 @@ }, "node_modules/@docusaurus/core/node_modules/postcss-convert-values": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", - "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "postcss-value-parser": "^4.2.0" @@ -3462,8 +3382,7 @@ }, "node_modules/@docusaurus/core/node_modules/postcss-discard-comments": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", - "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", + "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -3473,8 +3392,7 @@ }, "node_modules/@docusaurus/core/node_modules/postcss-discard-duplicates": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", - "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", + "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -3484,8 +3402,7 @@ }, "node_modules/@docusaurus/core/node_modules/postcss-discard-empty": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", - "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", + "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -3495,8 +3412,7 @@ }, "node_modules/@docusaurus/core/node_modules/postcss-discard-overridden": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", - "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", + "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -3506,8 +3422,7 @@ }, "node_modules/@docusaurus/core/node_modules/postcss-merge-longhand": { "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", - "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0", "stylehacks": "^6.1.1" @@ -3521,8 +3436,7 @@ }, "node_modules/@docusaurus/core/node_modules/postcss-merge-rules": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", - "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "caniuse-api": "^3.0.0", @@ -3538,8 +3452,7 @@ }, "node_modules/@docusaurus/core/node_modules/postcss-minify-font-values": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", - "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -3552,8 +3465,7 @@ }, "node_modules/@docusaurus/core/node_modules/postcss-minify-gradients": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", - "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", + "license": "MIT", "dependencies": { "colord": "^2.9.3", "cssnano-utils": "^4.0.2", @@ -3568,8 +3480,7 @@ }, "node_modules/@docusaurus/core/node_modules/postcss-minify-params": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", - "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "cssnano-utils": "^4.0.2", @@ -3584,8 +3495,7 @@ }, "node_modules/@docusaurus/core/node_modules/postcss-minify-selectors": { "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", - "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", + "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.16" }, @@ -3598,8 +3508,7 @@ }, "node_modules/@docusaurus/core/node_modules/postcss-normalize-charset": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", - "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", + "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -3609,8 +3518,7 @@ }, "node_modules/@docusaurus/core/node_modules/postcss-normalize-display-values": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", - "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -3623,8 +3531,7 @@ }, "node_modules/@docusaurus/core/node_modules/postcss-normalize-positions": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", - "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -3637,8 +3544,7 @@ }, "node_modules/@docusaurus/core/node_modules/postcss-normalize-repeat-style": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", - "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -3651,8 +3557,7 @@ }, "node_modules/@docusaurus/core/node_modules/postcss-normalize-string": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", - "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -3665,8 +3570,7 @@ }, "node_modules/@docusaurus/core/node_modules/postcss-normalize-timing-functions": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", - "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -3679,8 +3583,7 @@ }, "node_modules/@docusaurus/core/node_modules/postcss-normalize-unicode": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", - "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "postcss-value-parser": "^4.2.0" @@ -3694,8 +3597,7 @@ }, "node_modules/@docusaurus/core/node_modules/postcss-normalize-url": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", - "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -3708,8 +3610,7 @@ }, "node_modules/@docusaurus/core/node_modules/postcss-normalize-whitespace": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", - "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -3722,8 +3623,7 @@ }, "node_modules/@docusaurus/core/node_modules/postcss-ordered-values": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", - "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", + "license": "MIT", "dependencies": { "cssnano-utils": "^4.0.2", "postcss-value-parser": "^4.2.0" @@ -3737,8 +3637,7 @@ }, "node_modules/@docusaurus/core/node_modules/postcss-reduce-initial": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", - "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "caniuse-api": "^3.0.0" @@ -3752,8 +3651,7 @@ }, "node_modules/@docusaurus/core/node_modules/postcss-reduce-transforms": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", - "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -3766,8 +3664,7 @@ }, "node_modules/@docusaurus/core/node_modules/postcss-svgo": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", - "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0", "svgo": "^3.2.0" @@ -3781,8 +3678,7 @@ }, "node_modules/@docusaurus/core/node_modules/postcss-unique-selectors": { "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", - "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", + "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.16" }, @@ -3796,8 +3692,7 @@ "node_modules/@docusaurus/core/node_modules/react-loadable": { "name": "@docusaurus/react-loadable", "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz", - "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==", + "license": "MIT", "dependencies": { "@types/react": "*" }, @@ -3805,23 +3700,9 @@ "react": "*" } }, - "node_modules/@docusaurus/core/node_modules/semver": { - "version": "7.5.4", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@docusaurus/core/node_modules/stylehacks": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", - "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "postcss-selector-parser": "^6.0.16" @@ -3845,8 +3726,7 @@ }, "node_modules/@docusaurus/core/node_modules/svgo": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", - "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", + "license": "MIT", "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", @@ -3869,20 +3749,14 @@ }, "node_modules/@docusaurus/core/node_modules/svgo/node_modules/commander": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", "engines": { "node": ">= 10" } }, - "node_modules/@docusaurus/core/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/@docusaurus/cssnano-preset": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.4.0.tgz", - "integrity": "sha512-qwLFSz6v/pZHy/UP32IrprmH5ORce86BGtN0eBtG75PpzQJAzp9gefspox+s8IEOr0oZKuQ/nhzZ3xwyc3jYJQ==", + "license": "MIT", "dependencies": { "cssnano-preset-advanced": "^6.1.2", "postcss": "^8.4.38", @@ -3895,16 +3769,14 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/commander": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", "engines": { "node": ">= 10" } }, "node_modules/@docusaurus/cssnano-preset/node_modules/css-declaration-sorter": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", - "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", + "license": "ISC", "engines": { "node": "^14 || ^16 || >=18" }, @@ -3914,8 +3786,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/css-tree": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "license": "MIT", "dependencies": { "mdn-data": "2.0.30", "source-map-js": "^1.0.1" @@ -3926,8 +3797,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/cssnano-preset-advanced": { "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-6.1.2.tgz", - "integrity": "sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ==", + "license": "MIT", "dependencies": { "autoprefixer": "^10.4.19", "browserslist": "^4.23.0", @@ -3946,8 +3816,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/cssnano-preset-default": { "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", - "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "css-declaration-sorter": "^7.2.0", @@ -3989,8 +3858,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/cssnano-utils": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", - "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", + "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -4000,8 +3868,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/csso": { "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", "dependencies": { "css-tree": "~2.2.0" }, @@ -4012,8 +3879,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/csso/node_modules/css-tree": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" @@ -4025,18 +3891,15 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/csso/node_modules/mdn-data": { "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==" + "license": "CC0-1.0" }, "node_modules/@docusaurus/cssnano-preset/node_modules/mdn-data": { "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" + "license": "CC0-1.0" }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-calc": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", - "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", + "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.11", "postcss-value-parser": "^4.2.0" @@ -4050,8 +3913,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-colormin": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", - "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "caniuse-api": "^3.0.0", @@ -4067,8 +3929,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-convert-values": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", - "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "postcss-value-parser": "^4.2.0" @@ -4082,8 +3943,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-discard-comments": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", - "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", + "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -4093,8 +3953,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-discard-duplicates": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", - "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", + "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -4104,8 +3963,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-discard-empty": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", - "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", + "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -4115,8 +3973,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-discard-overridden": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", - "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", + "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -4126,8 +3983,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-discard-unused": { "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-6.0.5.tgz", - "integrity": "sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA==", + "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.16" }, @@ -4140,8 +3996,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-merge-idents": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz", - "integrity": "sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g==", + "license": "MIT", "dependencies": { "cssnano-utils": "^4.0.2", "postcss-value-parser": "^4.2.0" @@ -4155,8 +4010,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-merge-longhand": { "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", - "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0", "stylehacks": "^6.1.1" @@ -4170,8 +4024,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-merge-rules": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", - "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "caniuse-api": "^3.0.0", @@ -4187,8 +4040,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-minify-font-values": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", - "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -4201,8 +4053,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-minify-gradients": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", - "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", + "license": "MIT", "dependencies": { "colord": "^2.9.3", "cssnano-utils": "^4.0.2", @@ -4217,8 +4068,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-minify-params": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", - "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "cssnano-utils": "^4.0.2", @@ -4233,8 +4083,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-minify-selectors": { "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", - "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", + "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.16" }, @@ -4247,8 +4096,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-normalize-charset": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", - "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", + "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -4258,8 +4106,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-normalize-display-values": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", - "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -4272,8 +4119,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-normalize-positions": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", - "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -4286,8 +4132,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-normalize-repeat-style": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", - "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -4300,8 +4145,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-normalize-string": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", - "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -4314,8 +4158,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-normalize-timing-functions": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", - "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -4328,8 +4171,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-normalize-unicode": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", - "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "postcss-value-parser": "^4.2.0" @@ -4343,8 +4185,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-normalize-url": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", - "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -4357,8 +4198,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-normalize-whitespace": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", - "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -4371,8 +4211,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-ordered-values": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", - "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", + "license": "MIT", "dependencies": { "cssnano-utils": "^4.0.2", "postcss-value-parser": "^4.2.0" @@ -4386,8 +4225,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-reduce-idents": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz", - "integrity": "sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA==", + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -4400,8 +4238,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-reduce-initial": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", - "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "caniuse-api": "^3.0.0" @@ -4415,8 +4252,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-reduce-transforms": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", - "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -4429,8 +4265,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-sort-media-queries": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz", - "integrity": "sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA==", + "license": "MIT", "dependencies": { "sort-css-media-queries": "2.2.0" }, @@ -4443,8 +4278,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-svgo": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", - "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0", "svgo": "^3.2.0" @@ -4458,8 +4292,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-unique-selectors": { "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", - "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", + "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.16" }, @@ -4472,8 +4305,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-zindex": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-6.0.2.tgz", - "integrity": "sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg==", + "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -4483,16 +4315,14 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/sort-css-media-queries": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz", - "integrity": "sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==", + "license": "MIT", "engines": { "node": ">= 6.3.0" } }, "node_modules/@docusaurus/cssnano-preset/node_modules/stylehacks": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", - "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "postcss-selector-parser": "^6.0.16" @@ -4506,8 +4336,7 @@ }, "node_modules/@docusaurus/cssnano-preset/node_modules/svgo": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", - "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", + "license": "MIT", "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", @@ -4530,8 +4359,7 @@ }, "node_modules/@docusaurus/logger": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.4.0.tgz", - "integrity": "sha512-bZwkX+9SJ8lB9kVRkXw+xvHYSMGG4bpYHKGXeXFvyVc79NMeeBSGgzd4TQLHH+DYeOJoCdl8flrFJVxlZ0wo/Q==", + "license": "MIT", "dependencies": { "chalk": "^4.1.2", "tslib": "^2.6.0" @@ -4542,8 +4370,7 @@ }, "node_modules/@docusaurus/logger/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -4556,8 +4383,7 @@ }, "node_modules/@docusaurus/logger/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4571,8 +4397,7 @@ }, "node_modules/@docusaurus/logger/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -4582,21 +4407,18 @@ }, "node_modules/@docusaurus/logger/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "license": "MIT" }, "node_modules/@docusaurus/logger/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@docusaurus/logger/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -4606,8 +4428,7 @@ }, "node_modules/@docusaurus/lqip-loader": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/lqip-loader/-/lqip-loader-3.4.0.tgz", - "integrity": "sha512-F//Gjqcz925zLL1l3Y3XOtQvn927GBIr9ZouvzWF4jHNKuuHBqzOPSADF5O/cT3Vq1ucPWooyhPBxYcvSGF4SA==", + "license": "MIT", "dependencies": { "@docusaurus/logger": "3.4.0", "file-loader": "^6.2.0", @@ -4621,8 +4442,7 @@ }, "node_modules/@docusaurus/mdx-loader": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.4.0.tgz", - "integrity": "sha512-kSSbrrk4nTjf4d+wtBA9H+FGauf2gCax89kV8SUSJu3qaTdSIKdWERlngsiHaCFgZ7laTJ8a67UFf+xlFPtuTw==", + "license": "MIT", "dependencies": { "@docusaurus/logger": "3.4.0", "@docusaurus/utils": "3.4.0", @@ -4659,8 +4479,7 @@ }, "node_modules/@docusaurus/module-type-aliases": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.4.0.tgz", - "integrity": "sha512-A1AyS8WF5Bkjnb8s+guTDuYmUiwJzNrtchebBHpc0gz0PyHJNMaybUlSrmJjHVcGrya0LKI4YcR3lBDQfXRYLw==", + "license": "MIT", "dependencies": { "@docusaurus/types": "3.4.0", "@types/history": "^4.7.11", @@ -4678,8 +4497,7 @@ "node_modules/@docusaurus/module-type-aliases/node_modules/react-loadable": { "name": "@docusaurus/react-loadable", "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz", - "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==", + "license": "MIT", "dependencies": { "@types/react": "*" }, @@ -4689,8 +4507,7 @@ }, "node_modules/@docusaurus/plugin-client-redirects": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.4.0.tgz", - "integrity": "sha512-Pr8kyh/+OsmYCvdZhc60jy/FnrY6flD2TEAhl4rJxeVFxnvvRgEhoaIVX8q9MuJmaQoh6frPk94pjs7/6YgBDQ==", + "license": "MIT", "dependencies": { "@docusaurus/core": "3.4.0", "@docusaurus/logger": "3.4.0", @@ -4712,8 +4529,7 @@ }, "node_modules/@docusaurus/plugin-content-blog": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.4.0.tgz", - "integrity": "sha512-vv6ZAj78ibR5Jh7XBUT4ndIjmlAxkijM3Sx5MAAzC1gyv0vupDQNhzuFg1USQmQVj3P5I6bquk12etPV3LJ+Xw==", + "license": "MIT", "dependencies": { "@docusaurus/core": "3.4.0", "@docusaurus/logger": "3.4.0", @@ -4743,8 +4559,7 @@ }, "node_modules/@docusaurus/plugin-content-docs": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.4.0.tgz", - "integrity": "sha512-HkUCZffhBo7ocYheD9oZvMcDloRnGhBMOZRyVcAQRFmZPmNqSyISlXA1tQCIxW+r478fty97XXAGjNYzBjpCsg==", + "license": "MIT", "dependencies": { "@docusaurus/core": "3.4.0", "@docusaurus/logger": "3.4.0", @@ -4773,8 +4588,7 @@ }, "node_modules/@docusaurus/plugin-content-pages": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.4.0.tgz", - "integrity": "sha512-h2+VN/0JjpR8fIkDEAoadNjfR3oLzB+v1qSXbIAKjQ46JAHx3X22n9nqS+BWSQnTnp1AjkjSvZyJMekmcwxzxg==", + "license": "MIT", "dependencies": { "@docusaurus/core": "3.4.0", "@docusaurus/mdx-loader": "3.4.0", @@ -4795,8 +4609,7 @@ }, "node_modules/@docusaurus/plugin-debug": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.4.0.tgz", - "integrity": "sha512-uV7FDUNXGyDSD3PwUaf5YijX91T5/H9SX4ErEcshzwgzWwBtK37nUWPU3ZLJfeTavX3fycTOqk9TglpOLaWkCg==", + "license": "MIT", "dependencies": { "@docusaurus/core": "3.4.0", "@docusaurus/types": "3.4.0", @@ -4815,8 +4628,7 @@ }, "node_modules/@docusaurus/plugin-google-analytics": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.4.0.tgz", - "integrity": "sha512-mCArluxEGi3cmYHqsgpGGt3IyLCrFBxPsxNZ56Mpur0xSlInnIHoeLDH7FvVVcPJRPSQ9/MfRqLsainRw+BojA==", + "license": "MIT", "dependencies": { "@docusaurus/core": "3.4.0", "@docusaurus/types": "3.4.0", @@ -4833,8 +4645,7 @@ }, "node_modules/@docusaurus/plugin-google-gtag": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.4.0.tgz", - "integrity": "sha512-Dsgg6PLAqzZw5wZ4QjUYc8Z2KqJqXxHxq3vIoyoBWiLEEfigIs7wHR+oiWUQy3Zk9MIk6JTYj7tMoQU0Jm3nqA==", + "license": "MIT", "dependencies": { "@docusaurus/core": "3.4.0", "@docusaurus/types": "3.4.0", @@ -4852,8 +4663,7 @@ }, "node_modules/@docusaurus/plugin-google-tag-manager": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.4.0.tgz", - "integrity": "sha512-O9tX1BTwxIhgXpOLpFDueYA9DWk69WCbDRrjYoMQtFHSkTyE7RhNgyjSPREUWJb9i+YUg3OrsvrBYRl64FCPCQ==", + "license": "MIT", "dependencies": { "@docusaurus/core": "3.4.0", "@docusaurus/types": "3.4.0", @@ -4870,8 +4680,7 @@ }, "node_modules/@docusaurus/plugin-ideal-image": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-ideal-image/-/plugin-ideal-image-3.4.0.tgz", - "integrity": "sha512-s8N/PRiv1R66UY+WX/2E9a+GjkRooXVcf0VJNEYA3yZ6c24Path15ivjmdMtKaSo/6OXYbejGlA4DJZ5TPLkCQ==", + "license": "MIT", "dependencies": { "@docusaurus/core": "3.4.0", "@docusaurus/lqip-loader": "3.4.0", @@ -4901,8 +4710,7 @@ }, "node_modules/@docusaurus/plugin-sitemap": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.4.0.tgz", - "integrity": "sha512-+0VDvx9SmNrFNgwPoeoCha+tRoAjopwT0+pYO1xAbyLcewXSemq+eLxEa46Q1/aoOaJQ0qqHELuQM7iS2gp33Q==", + "license": "MIT", "dependencies": { "@docusaurus/core": "3.4.0", "@docusaurus/logger": "3.4.0", @@ -4924,8 +4732,7 @@ }, "node_modules/@docusaurus/preset-classic": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.4.0.tgz", - "integrity": "sha512-Ohj6KB7siKqZaQhNJVMBBUzT3Nnp6eTKqO+FXO3qu/n1hJl3YLwVKTWBg28LF7MWrKu46UuYavwMRxud0VyqHg==", + "license": "MIT", "dependencies": { "@docusaurus/core": "3.4.0", "@docusaurus/plugin-content-blog": "3.4.0", @@ -4985,8 +4792,7 @@ }, "node_modules/@docusaurus/theme-classic": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.4.0.tgz", - "integrity": "sha512-0IPtmxsBYv2adr1GnZRdMkEQt1YW6tpzrUPj02YxNpvJ5+ju4E13J5tB4nfdaen/tfR1hmpSPlTFPvTf4kwy8Q==", + "license": "MIT", "dependencies": { "@docusaurus/core": "3.4.0", "@docusaurus/mdx-loader": "3.4.0", @@ -5031,8 +4837,7 @@ }, "node_modules/@docusaurus/theme-common": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.4.0.tgz", - "integrity": "sha512-0A27alXuv7ZdCg28oPE8nH/Iz73/IUejVaCazqu9elS4ypjiLhK3KfzdSQBnL/g7YfHSlymZKdiOHEo8fJ0qMA==", + "license": "MIT", "dependencies": { "@docusaurus/mdx-loader": "3.4.0", "@docusaurus/module-type-aliases": "3.4.0", @@ -5067,8 +4872,7 @@ }, "node_modules/@docusaurus/theme-search-algolia": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.4.0.tgz", - "integrity": "sha512-aiHFx7OCw4Wck1z6IoShVdUWIjntC8FHCw9c5dR8r3q4Ynh+zkS8y2eFFunN/DL6RXPzpnvKCg3vhLQYJDmT9Q==", + "license": "MIT", "dependencies": { "@docsearch/react": "^3.5.2", "@docusaurus/core": "3.4.0", @@ -5097,16 +4901,14 @@ }, "node_modules/@docusaurus/theme-search-algolia/node_modules/clsx": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/@docusaurus/theme-translations": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.4.0.tgz", - "integrity": "sha512-zSxCSpmQCCdQU5Q4CnX/ID8CSUUI3fvmq4hU/GNP/XoAWtXo9SAVnM3TzpU8Gb//H3WCsT8mJcTfyOk3d9ftNg==", + "license": "MIT", "dependencies": { "fs-extra": "^11.1.1", "tslib": "^2.6.0" @@ -5117,8 +4919,7 @@ }, "node_modules/@docusaurus/types": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.4.0.tgz", - "integrity": "sha512-4jcDO8kXi5Cf9TcyikB/yKmz14f2RZ2qTRerbHAsS+5InE9ZgSLBNLsewtFTcTOXSVcbU3FoGOzcNWAmU1TR0A==", + "license": "MIT", "dependencies": { "@mdx-js/mdx": "^3.0.0", "@types/history": "^4.7.11", @@ -5137,8 +4938,7 @@ }, "node_modules/@docusaurus/utils": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.4.0.tgz", - "integrity": "sha512-fRwnu3L3nnWaXOgs88BVBmG1yGjcQqZNHG+vInhEa2Sz2oQB+ZjbEMO5Rh9ePFpZ0YDiDUhpaVjwmS+AU2F14g==", + "license": "MIT", "dependencies": { "@docusaurus/logger": "3.4.0", "@docusaurus/utils-common": "3.4.0", @@ -5175,8 +4975,7 @@ }, "node_modules/@docusaurus/utils-common": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.4.0.tgz", - "integrity": "sha512-NVx54Wr4rCEKsjOH5QEVvxIqVvm+9kh7q8aYTU5WzUU9/Hctd6aTrcZ3G0Id4zYJ+AeaG5K5qHA4CY5Kcm2iyQ==", + "license": "MIT", "dependencies": { "tslib": "^2.6.0" }, @@ -5194,8 +4993,7 @@ }, "node_modules/@docusaurus/utils-validation": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.4.0.tgz", - "integrity": "sha512-hYQ9fM+AXYVTWxJOT1EuNaRnrR2WGpRdLDQG07O8UOpsvCPWUVOeo26Rbm0JWY2sGLfzAb+tvJ62yF+8F+TV0g==", + "license": "MIT", "dependencies": { "@docusaurus/logger": "3.4.0", "@docusaurus/utils": "3.4.0", @@ -5212,8 +5010,7 @@ }, "node_modules/@docusaurus/utils/node_modules/@svgr/babel-plugin-add-jsx-attribute": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", + "license": "MIT", "engines": { "node": ">=14" }, @@ -5227,8 +5024,7 @@ }, "node_modules/@docusaurus/utils/node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", - "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", + "license": "MIT", "engines": { "node": ">=14" }, @@ -5242,8 +5038,7 @@ }, "node_modules/@docusaurus/utils/node_modules/@svgr/babel-plugin-svg-dynamic-title": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", - "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", + "license": "MIT", "engines": { "node": ">=14" }, @@ -5257,8 +5052,7 @@ }, "node_modules/@docusaurus/utils/node_modules/@svgr/babel-plugin-svg-em-dimensions": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", - "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", + "license": "MIT", "engines": { "node": ">=14" }, @@ -5272,8 +5066,7 @@ }, "node_modules/@docusaurus/utils/node_modules/@svgr/babel-plugin-transform-react-native-svg": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", - "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", + "license": "MIT", "engines": { "node": ">=14" }, @@ -5287,8 +5080,7 @@ }, "node_modules/@docusaurus/utils/node_modules/@svgr/babel-plugin-transform-svg-component": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", - "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -5302,8 +5094,7 @@ }, "node_modules/@docusaurus/utils/node_modules/@svgr/babel-preset": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", - "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", + "license": "MIT", "dependencies": { "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", @@ -5327,8 +5118,7 @@ }, "node_modules/@docusaurus/utils/node_modules/@svgr/core": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", - "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", + "license": "MIT", "dependencies": { "@babel/core": "^7.21.3", "@svgr/babel-preset": "8.1.0", @@ -5346,8 +5136,7 @@ }, "node_modules/@docusaurus/utils/node_modules/@svgr/hast-util-to-babel-ast": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", - "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", + "license": "MIT", "dependencies": { "@babel/types": "^7.21.3", "entities": "^4.4.0" @@ -5362,8 +5151,7 @@ }, "node_modules/@docusaurus/utils/node_modules/@svgr/plugin-jsx": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", - "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", + "license": "MIT", "dependencies": { "@babel/core": "^7.21.3", "@svgr/babel-preset": "8.1.0", @@ -5383,8 +5171,7 @@ }, "node_modules/@docusaurus/utils/node_modules/@svgr/plugin-svgo": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz", - "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==", + "license": "MIT", "dependencies": { "cosmiconfig": "^8.1.3", "deepmerge": "^4.3.1", @@ -5403,8 +5190,7 @@ }, "node_modules/@docusaurus/utils/node_modules/@svgr/webpack": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz", - "integrity": "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==", + "license": "MIT", "dependencies": { "@babel/core": "^7.21.3", "@babel/plugin-transform-react-constant-elements": "^7.21.3", @@ -5425,16 +5211,14 @@ }, "node_modules/@docusaurus/utils/node_modules/commander": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", "engines": { "node": ">= 10" } }, "node_modules/@docusaurus/utils/node_modules/css-tree": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "license": "MIT", "dependencies": { "mdn-data": "2.0.30", "source-map-js": "^1.0.1" @@ -5445,8 +5229,7 @@ }, "node_modules/@docusaurus/utils/node_modules/csso": { "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", "dependencies": { "css-tree": "~2.2.0" }, @@ -5457,8 +5240,7 @@ }, "node_modules/@docusaurus/utils/node_modules/csso/node_modules/css-tree": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" @@ -5470,18 +5252,15 @@ }, "node_modules/@docusaurus/utils/node_modules/csso/node_modules/mdn-data": { "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==" + "license": "CC0-1.0" }, "node_modules/@docusaurus/utils/node_modules/mdn-data": { "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" + "license": "CC0-1.0" }, "node_modules/@docusaurus/utils/node_modules/svgo": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", - "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", + "license": "MIT", "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", @@ -5502,16 +5281,6 @@ "url": "https://opencollective.com/svgo" } }, - "node_modules/@emnapi/runtime": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.1.1.tgz", - "integrity": "sha512-3bfqkzuR1KLx57nZfjr2NLnFOobvyS0aTszaEGCGqmYMVDRaGvgIZbjGSV/MHSSmLgQ/b9JFHQ5xm5WRZYd+XQ==", - "dev": true, - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/@emotion/babel-plugin": { "version": "11.11.0", "license": "MIT", @@ -5746,9 +5515,8 @@ }, "node_modules/@eslint/js": { "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "devOptional": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } @@ -5839,10 +5607,8 @@ }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "deprecated": "Use @eslint/config-array instead", "devOptional": true, + "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^2.0.2", "debug": "^4.3.1", @@ -5854,9 +5620,8 @@ }, "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "devOptional": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5864,9 +5629,8 @@ }, "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "devOptional": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -5888,19 +5652,16 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "devOptional": true + "devOptional": true, + "license": "BSD-3-Clause" }, "node_modules/@img/sharp-darwin-arm64": { "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.4.tgz", - "integrity": "sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA==", "cpu": [ "arm64" ], "dev": true, + "license": "Apache-2.0", "optional": true, "os": [ "darwin" @@ -5919,40 +5680,13 @@ "@img/sharp-libvips-darwin-arm64": "1.0.2" } }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.4.tgz", - "integrity": "sha512-0l7yRObwtTi82Z6ebVI2PnHT8EB2NxBgpK2MiKJZJ7cz32R4lxd001ecMhzzsZig3Yv9oclvqqdV93jo9hy+Dw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.0.2" - } - }, "node_modules/@img/sharp-libvips-darwin-arm64": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.2.tgz", - "integrity": "sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==", "cpu": [ "arm64" ], "dev": true, + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "darwin" @@ -5967,382 +5701,6 @@ "url": "https://opencollective.com/libvips" } }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.2.tgz", - "integrity": "sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "macos": ">=10.13", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.2.tgz", - "integrity": "sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.28", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.2.tgz", - "integrity": "sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.26", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.2.tgz", - "integrity": "sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.28", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.2.tgz", - "integrity": "sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.26", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.2.tgz", - "integrity": "sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "musl": ">=1.2.2", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.2.tgz", - "integrity": "sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "musl": ">=1.2.2", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.4.tgz", - "integrity": "sha512-RUgBD1c0+gCYZGCCe6mMdTiOFS0Zc/XrN0fYd6hISIKcDUbAW5NtSQW9g/powkrXYm6Vzwd6y+fqmExDuCdHNQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.28", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.0.2" - } - }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.4.tgz", - "integrity": "sha512-2800clwVg1ZQtxwSoTlHvtm9ObgAax7V6MTAB/hDT945Tfyy3hVkmiHpeLPCKYqYR1Gcmv1uDZ3a4OFwkdBL7Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.0.2" - } - }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.4.tgz", - "integrity": "sha512-h3RAL3siQoyzSoH36tUeS0PDmb5wINKGYzcLB5C6DIiAn2F3udeFAum+gj8IbA/82+8RGCTn7XW8WTFnqag4tQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.31", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.0.2" - } - }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.4.tgz", - "integrity": "sha512-GoR++s0XW9DGVi8SUGQ/U4AeIzLdNjHka6jidVwapQ/JebGVQIpi52OdyxCNVRE++n1FCLzjDovJNozif7w/Aw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.0.2" - } - }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.4.tgz", - "integrity": "sha512-nhr1yC3BlVrKDTl6cO12gTpXMl4ITBUZieehFvMntlCXFzH2bvKG76tBL2Y/OqhupZt81pR7R+Q5YhJxW0rGgQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "musl": ">=1.2.2", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.0.2" - } - }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.4.tgz", - "integrity": "sha512-uCPTku0zwqDmZEOi4ILyGdmW76tH7dm8kKlOIV1XC5cLyJ71ENAAqarOHQh0RLfpIpbV5KOpXzdU6XkJtS0daw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "musl": ">=1.2.2", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.0.2" - } - }, - "node_modules/@img/sharp-wasm32": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.4.tgz", - "integrity": "sha512-Bmmauh4sXUsUqkleQahpdNXKvo+wa1V9KhT2pDA4VJGKwnKMJXiSTGphn0gnJrlooda0QxCtXc6RX1XAU6hMnQ==", - "cpu": [ - "wasm32" - ], - "dev": true, - "optional": true, - "dependencies": { - "@emnapi/runtime": "^1.1.1" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.4.tgz", - "integrity": "sha512-99SJ91XzUhYHbx7uhK3+9Lf7+LjwMGQZMDlO/E/YVJ7Nc3lyDFZPGhjwiYdctoH2BOzW9+TnfqcaMKt0jHLdqw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.4.tgz", - "integrity": "sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "dev": true, @@ -6879,31 +6237,6 @@ "node": ">=10" } }, - "node_modules/@jest/reporters/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@jest/reporters/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@jest/reporters/node_modules/supports-color": { "version": "7.2.0", "dev": true, @@ -6915,11 +6248,6 @@ "node": ">=8" } }, - "node_modules/@jest/reporters/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/@jest/schemas": { "version": "29.6.3", "license": "MIT", @@ -7299,36 +6627,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/config/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/config/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/config/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/@npmcli/map-workspaces": { "version": "3.0.4", "dev": true, @@ -7463,9 +6761,8 @@ }, "node_modules/@octokit/plugin-paginate-rest": { "version": "11.3.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.0.tgz", - "integrity": "sha512-n4znWfRinnUQF6TPyxs7EctSAA3yVSP4qlJP2YgI3g9d4Ae2n5F3XDOjbUluKRxPU3rfsgpOboI4O4VtPc6Ilg==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/types": "^13.5.0" }, @@ -7478,15 +6775,13 @@ }, "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": { "version": "22.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", - "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { "version": "13.5.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz", - "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/openapi-types": "^22.2.0" } @@ -7938,6 +7233,40 @@ "npm": ">=7.0.0" } }, + "node_modules/@redocly/openapi-core/node_modules/node-fetch": { + "version": "2.7.0", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@redocly/openapi-core/node_modules/tr46": { + "version": "0.0.3", + "license": "MIT" + }, + "node_modules/@redocly/openapi-core/node_modules/webidl-conversions": { + "version": "3.0.1", + "license": "BSD-2-Clause" + }, + "node_modules/@redocly/openapi-core/node_modules/whatwg-url": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/@reduxjs/toolkit": { "version": "1.9.7", "license": "MIT", @@ -7962,9 +7291,8 @@ }, "node_modules/@sec-ant/readable-stream": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", - "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@semantic-release/changelog": { "version": "6.0.3", @@ -8066,6 +7394,7 @@ "resolved": "https://registry.npmjs.org/@semantic-release/git/-/git-10.0.1.tgz", "integrity": "sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==", "dev": true, + "license": "MIT", "dependencies": { "@semantic-release/error": "^3.0.0", "aggregate-error": "^3.0.0", @@ -8084,10 +7413,11 @@ } }, "node_modules/@semantic-release/github": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-10.0.4.tgz", - "integrity": "sha512-eHCfW3jlzax5OKd5nTovlvoCdg+b9YBa31M2JGT1KmzmJR3TIalu2ahVU+V/xATVeOx+S8fbCiPnBBgMlzH5Vw==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-10.1.1.tgz", + "integrity": "sha512-sSmsBKGpAlTtXf9rUJf/si16p+FwPEsvsJRjl3KCwFP0WywaSpynvUhlYvE18n5rzkQNbGJnObAKIoo3xFMSjA==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/core": "^6.0.0", "@octokit/plugin-paginate-rest": "^11.0.0", @@ -8233,6 +7563,7 @@ "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-12.0.1.tgz", "integrity": "sha512-/6nntGSUGK2aTOI0rHPwY3ZjgY9FkXmEHbW9Kr+62NVOsyqpKKeP0lrCH+tphv+EsNdJNmqqwijTEnVWUMQ2Nw==", "dev": true, + "license": "MIT", "dependencies": { "@semantic-release/error": "^4.0.0", "aggregate-error": "^5.0.0", @@ -8265,9 +7596,8 @@ }, "node_modules/@semantic-release/npm/node_modules/@sindresorhus/merge-streams": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", - "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -8317,9 +7647,8 @@ }, "node_modules/@semantic-release/npm/node_modules/execa": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-9.1.0.tgz", - "integrity": "sha512-lSgHc4Elo2m6bUDhc3Hl/VxvUDJdQWI40RZ4KMY9bKRc+hgMOT7II/JjbNDhI8VnMtrCb7U/fhpJIkLORZozWw==", "dev": true, + "license": "MIT", "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "cross-spawn": "^7.0.3", @@ -8343,9 +7672,8 @@ }, "node_modules/@semantic-release/npm/node_modules/figures": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", - "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", "dev": true, + "license": "MIT", "dependencies": { "is-unicode-supported": "^2.0.0" }, @@ -8358,9 +7686,8 @@ }, "node_modules/@semantic-release/npm/node_modules/get-stream": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", - "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", "dev": true, + "license": "MIT", "dependencies": { "@sec-ant/readable-stream": "^0.4.1", "is-stream": "^4.0.1" @@ -8374,9 +7701,8 @@ }, "node_modules/@semantic-release/npm/node_modules/human-signals": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-7.0.0.tgz", - "integrity": "sha512-74kytxOUSvNbjrT9KisAbaTZ/eJwD/LrbM/kh5j0IhPuJzwuA19dWvniFGwBzN9rVjg+O/e+F310PjObDXS+9Q==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=18.18.0" } @@ -8394,9 +7720,8 @@ }, "node_modules/@semantic-release/npm/node_modules/is-stream": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", - "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -8406,9 +7731,8 @@ }, "node_modules/@semantic-release/npm/node_modules/is-unicode-supported": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.0.0.tgz", - "integrity": "sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -8416,22 +7740,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@semantic-release/npm/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@semantic-release/npm/node_modules/npm-run-path": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^4.0.0" }, @@ -8444,9 +7756,8 @@ }, "node_modules/@semantic-release/npm/node_modules/path-key": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -8454,25 +7765,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@semantic-release/npm/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@semantic-release/npm/node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -8482,9 +7778,8 @@ }, "node_modules/@semantic-release/npm/node_modules/strip-final-newline": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", - "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -8492,11 +7787,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@semantic-release/npm/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/@semantic-release/release-notes-generator": { "version": "10.0.3", "dev": true, @@ -9273,8 +8563,7 @@ }, "node_modules/@types/conventional-commits-parser": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", - "integrity": "sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -9343,8 +8632,7 @@ }, "node_modules/@types/gtag.js": { "version": "0.0.12", - "resolved": "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz", - "integrity": "sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==" + "license": "MIT" }, "node_modules/@types/hast": { "version": "3.0.3", @@ -9409,9 +8697,8 @@ }, "node_modules/@types/jest": { "version": "29.5.12", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", - "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", "dev": true, + "license": "MIT", "dependencies": { "expect": "^29.0.0", "pretty-format": "^29.0.0" @@ -9615,8 +8902,7 @@ }, "node_modules/@types/sax": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", - "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -9695,9 +8981,8 @@ }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.15.0.tgz", - "integrity": "sha512-uiNHpyjZtFrLwLDpHnzaDlP3Tt6sGMqTCiqmxaN4n4RP0EfYZDODJyddiFDF44Hjwxr5xAcaYxVKm9QKQFJFLA==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "7.15.0", @@ -9728,9 +9013,8 @@ }, "node_modules/@typescript-eslint/parser": { "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.15.0.tgz", - "integrity": "sha512-k9fYuQNnypLFcqORNClRykkGOMOj+pV6V91R4GO/l1FDGwpqmSwoOQrOHo3cGaH63e+D3ZiCAOsuS/D2c99j/A==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "7.15.0", "@typescript-eslint/types": "7.15.0", @@ -9756,9 +9040,8 @@ }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.15.0.tgz", - "integrity": "sha512-Q/1yrF/XbxOTvttNVPihxh1b9fxamjEoz2Os/Pe38OHwxC24CyCqXxGTOdpb4lt6HYtqw9HetA/Rf6gDGaMPlw==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "7.15.0", "@typescript-eslint/visitor-keys": "7.15.0" @@ -9773,9 +9056,8 @@ }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.15.0.tgz", - "integrity": "sha512-aV1+B1+ySXbQH0pLK0rx66I3IkiZNidYobyfn0WFsdGhSXw+P3YOqeTq5GED458SfB24tg+ux3S+9g118hjlTw==", "dev": true, + "license": "MIT", "engines": { "node": "^18.18.0 || >=20.0.0" }, @@ -9786,9 +9068,8 @@ }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.15.0.tgz", - "integrity": "sha512-gjyB/rHAopL/XxfmYThQbXbzRMGhZzGw6KpcMbfe8Q3nNQKStpxnUKeXb0KiN/fFDR42Z43szs6rY7eHk0zdGQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "7.15.0", "@typescript-eslint/visitor-keys": "7.15.0", @@ -9814,9 +9095,8 @@ }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.15.0.tgz", - "integrity": "sha512-Hqgy/ETgpt2L5xueA/zHHIl4fJI2O4XUE9l4+OIfbJIRSnTJb/QscncdqqZzofQegIJugRIF57OJea1khw2SDw==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "7.15.0", "eslint-visitor-keys": "^3.4.3" @@ -9831,9 +9111,8 @@ }, "node_modules/@typescript-eslint/parser/node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -9846,9 +9125,8 @@ }, "node_modules/@typescript-eslint/parser/node_modules/semver": { "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -9858,9 +9136,8 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.15.0.tgz", - "integrity": "sha512-Q/1yrF/XbxOTvttNVPihxh1b9fxamjEoz2Os/Pe38OHwxC24CyCqXxGTOdpb4lt6HYtqw9HetA/Rf6gDGaMPlw==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "7.15.0", "@typescript-eslint/visitor-keys": "7.15.0" @@ -9875,9 +9152,8 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.15.0.tgz", - "integrity": "sha512-SkgriaeV6PDvpA6253PDVep0qCqgbO1IOBiycjnXsszNTVQe5flN5wR5jiczoEoDEnAqYFSFFc9al9BSGVltkg==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/typescript-estree": "7.15.0", "@typescript-eslint/utils": "7.15.0", @@ -9902,9 +9178,8 @@ }, "node_modules/@typescript-eslint/types": { "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.15.0.tgz", - "integrity": "sha512-aV1+B1+ySXbQH0pLK0rx66I3IkiZNidYobyfn0WFsdGhSXw+P3YOqeTq5GED458SfB24tg+ux3S+9g118hjlTw==", "dev": true, + "license": "MIT", "engines": { "node": "^18.18.0 || >=20.0.0" }, @@ -9915,9 +9190,8 @@ }, "node_modules/@typescript-eslint/typescript-estree": { "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.15.0.tgz", - "integrity": "sha512-gjyB/rHAopL/XxfmYThQbXbzRMGhZzGw6KpcMbfe8Q3nNQKStpxnUKeXb0KiN/fFDR42Z43szs6rY7eHk0zdGQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "7.15.0", "@typescript-eslint/visitor-keys": "7.15.0", @@ -9943,9 +9217,8 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -9958,9 +9231,8 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -9970,9 +9242,8 @@ }, "node_modules/@typescript-eslint/utils": { "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.15.0.tgz", - "integrity": "sha512-hfDMDqaqOqsUVGiEPSMLR/AjTSCsmJwjpKkYQRo1FNbmW4tBwBspYDwO9eh7sKSTwMQgBw9/T4DHudPaqshRWA==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@typescript-eslint/scope-manager": "7.15.0", @@ -9992,9 +9263,8 @@ }, "node_modules/@typescript-eslint/visitor-keys": { "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.15.0.tgz", - "integrity": "sha512-Hqgy/ETgpt2L5xueA/zHHIl4fJI2O4XUE9l4+OIfbJIRSnTJb/QscncdqqZzofQegIJugRIF57OJea1khw2SDw==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "7.15.0", "eslint-visitor-keys": "^3.4.3" @@ -10279,8 +9549,7 @@ }, "node_modules/algoliasearch": { "version": "4.23.3", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.23.3.tgz", - "integrity": "sha512-Le/3YgNvjW9zxIQMRhUHuhiUjAlKY/zsdZpfq4dlLqg6mEm0nL6yk+7f2hDOtLpxsgE4jSzDmvHL7nXdBp5feg==", + "license": "MIT", "dependencies": { "@algolia/cache-browser-local-storage": "4.23.3", "@algolia/cache-common": "4.23.3", @@ -10301,8 +9570,7 @@ }, "node_modules/algoliasearch-helper": { "version": "3.21.0", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.21.0.tgz", - "integrity": "sha512-hjVOrL15I3Y3K8xG0icwG1/tWE+MocqBrhW6uVBWpU+/kVEMK0BnM2xdssj6mZM61eJ4iRxHR0djEI3ENOpR8w==", + "license": "MIT", "dependencies": { "@algolia/events": "^4.0.1" }, @@ -10489,6 +9757,24 @@ "react-dom": ">=16.9.0" } }, + "node_modules/antd/node_modules/@ant-design/icons": { + "version": "5.3.7", + "license": "MIT", + "dependencies": { + "@ant-design/colors": "^7.0.0", + "@ant-design/icons-svg": "^4.4.0", + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "rc-util": "^5.31.1" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, "node_modules/any-promise": { "version": "1.3.0", "license": "MIT" @@ -10560,8 +9846,7 @@ }, "node_modules/arg": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", @@ -10628,9 +9913,8 @@ }, "node_modules/array-buffer-byte-length": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" @@ -10765,9 +10049,8 @@ }, "node_modules/array.prototype.findlast": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -10837,9 +10120,8 @@ }, "node_modules/array.prototype.toreversed": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", - "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -10849,9 +10131,8 @@ }, "node_modules/array.prototype.tosorted": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", - "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -10862,9 +10143,8 @@ }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", @@ -11020,8 +10300,6 @@ }, "node_modules/autoprefixer": { "version": "10.4.19", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", - "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", "funding": [ { "type": "opencollective", @@ -11036,6 +10314,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "caniuse-lite": "^1.0.30001599", @@ -11056,8 +10335,7 @@ }, "node_modules/available-typed-arrays": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -11097,6 +10375,24 @@ "follow-redirects": "^1.14.7" } }, + "node_modules/axios-retry": { + "version": "3.9.1", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.15.4", + "is-retry-allowed": "^2.2.0" + } + }, + "node_modules/axios-retry/node_modules/is-retry-allowed": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/axobject-query": { "version": "3.2.1", "dev": true, @@ -11300,6 +10596,13 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.8.7", "license": "MIT", @@ -12509,8 +11812,6 @@ }, "node_modules/browserslist": { "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "funding": [ { "type": "opencollective", @@ -12525,6 +11826,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "caniuse-lite": "^1.0.30001587", "electron-to-chromium": "^1.4.668", @@ -12648,36 +11950,6 @@ "semver": "^7.0.0" } }, - "node_modules/builtins/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/builtins/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/builtins/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/bundle-name": { "version": "3.0.0", "dev": true, @@ -12753,8 +12025,7 @@ }, "node_modules/call-bind": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -12842,8 +12113,6 @@ }, "node_modules/caniuse-lite": { "version": "1.0.30001627", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001627.tgz", - "integrity": "sha512-4zgNiB8nTyV/tHhwZrFs88ryjls/lHiqFhrxCW4qSTeuRByBVnPYpDInchOIySWknznucaf31Z4KYqjfbrecVw==", "funding": [ { "type": "opencollective", @@ -12857,7 +12126,8 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/cardinal": { "version": "2.1.1", @@ -13752,8 +13022,7 @@ }, "node_modules/conventional-changelog-angular": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", - "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", + "license": "ISC", "dependencies": { "compare-func": "^2.0.0" }, @@ -13763,8 +13032,7 @@ }, "node_modules/conventional-changelog-conventionalcommits": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", - "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", + "license": "ISC", "dependencies": { "compare-func": "^2.0.0" }, @@ -13794,6 +13062,14 @@ "node": ">=10" } }, + "node_modules/conventional-changelog-writer/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/conventional-commits-filter": { "version": "2.0.7", "dev": true, @@ -13808,8 +13084,7 @@ }, "node_modules/conventional-commits-parser": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", - "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", + "license": "MIT", "dependencies": { "is-text-path": "^2.0.0", "JSONStream": "^1.3.5", @@ -13825,8 +13100,7 @@ }, "node_modules/conventional-commits-parser/node_modules/is-text-path": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", - "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", + "license": "MIT", "dependencies": { "text-extensions": "^2.0.0" }, @@ -13836,8 +13110,7 @@ }, "node_modules/conventional-commits-parser/node_modules/meow": { "version": "12.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", - "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", + "license": "MIT", "engines": { "node": ">=16.10" }, @@ -13847,16 +13120,14 @@ }, "node_modules/conventional-commits-parser/node_modules/split2": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", "engines": { "node": ">= 10.x" } }, "node_modules/conventional-commits-parser/node_modules/text-extensions": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz", - "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", + "license": "MIT", "engines": { "node": ">=8" }, @@ -14054,8 +13325,7 @@ }, "node_modules/cosmiconfig-typescript-loader": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-5.0.0.tgz", - "integrity": "sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==", + "license": "MIT", "dependencies": { "jiti": "^1.19.1" }, @@ -14202,6 +13472,44 @@ "node-fetch": "^2.6.12" } }, + "node_modules/cross-fetch/node_modules/node-fetch": { + "version": "2.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/cross-fetch/node_modules/tr46": { + "version": "0.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/cross-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "license": "MIT", @@ -14296,33 +13604,6 @@ "webpack": "^5.0.0" } }, - "node_modules/css-loader/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/css-loader/node_modules/semver": { - "version": "7.5.4", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/css-loader/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/css-minimizer-webpack-plugin": { "version": "4.2.2", "dev": true, @@ -14599,8 +13880,7 @@ }, "node_modules/dargs": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", - "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -14619,6 +13899,13 @@ "node": ">=0.10" } }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, "node_modules/data-urls": { "version": "3.0.2", "dev": true, @@ -14634,9 +13921,8 @@ }, "node_modules/data-view-buffer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -14651,9 +13937,8 @@ }, "node_modules/data-view-byte-length": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -14668,9 +13953,8 @@ }, "node_modules/data-view-byte-offset": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -15255,8 +14539,7 @@ }, "node_modules/define-data-property": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -15388,8 +14671,7 @@ }, "node_modules/detect-libc": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "license": "Apache-2.0", "engines": { "node": ">=8" } @@ -15758,6 +15040,14 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/docusaurus-theme-openapi-docs/node_modules/hast-util-whitespace": { + "version": "2.0.1", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/docusaurus-theme-openapi-docs/node_modules/hastscript": { "version": "7.2.0", "license": "MIT", @@ -15781,10 +15071,443 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-definitions": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-from-markdown": { + "version": "1.3.1", + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-to-hast": { + "version": "12.3.0", + "license": "MIT", + "dependencies": { + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-definitions": "^5.0.0", + "micromark-util-sanitize-uri": "^1.1.0", + "trim-lines": "^3.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-to-string": { + "version": "3.2.0", + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark": { + "version": "3.2.0", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-core-commonmark": { + "version": "1.1.0", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-factory-destination": { + "version": "1.1.0", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-factory-label": { + "version": "1.1.0", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-factory-title": { + "version": "1.1.0", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-factory-whitespace": { + "version": "1.1.0", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-chunked": { + "version": "1.1.0", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-classify-character": { + "version": "1.1.0", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-combine-extensions": { + "version": "1.1.0", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-decode-numeric-character-reference": { + "version": "1.1.0", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-decode-string": { + "version": "1.1.0", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-encode": { + "version": "1.1.0", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-html-tag-name": { + "version": "1.2.0", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-normalize-identifier": { + "version": "1.1.0", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-resolve-all": { + "version": "1.1.0", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-sanitize-uri": { + "version": "1.2.0", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-subtokenize": { + "version": "1.1.0", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, "node_modules/docusaurus-theme-openapi-docs/node_modules/parse5": { "version": "6.0.1", "license": "MIT" }, + "node_modules/docusaurus-theme-openapi-docs/node_modules/react-is": { + "version": "18.3.1", + "license": "MIT" + }, + "node_modules/docusaurus-theme-openapi-docs/node_modules/react-markdown": { + "version": "8.0.7", + "license": "MIT", + "dependencies": { + "@types/hast": "^2.0.0", + "@types/prop-types": "^15.0.0", + "@types/unist": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^2.0.0", + "prop-types": "^15.0.0", + "property-information": "^6.0.0", + "react-is": "^18.0.0", + "remark-parse": "^10.0.0", + "remark-rehype": "^10.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-object": "^0.4.0", + "unified": "^10.0.0", + "unist-util-visit": "^4.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=16", + "react": ">=16" + } + }, "node_modules/docusaurus-theme-openapi-docs/node_modules/rehype-raw": { "version": "6.1.1", "license": "MIT", @@ -15798,6 +15521,33 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/docusaurus-theme-openapi-docs/node_modules/remark-parse": { + "version": "10.0.2", + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/docusaurus-theme-openapi-docs/node_modules/remark-rehype": { + "version": "10.1.0", + "license": "MIT", + "dependencies": { + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-to-hast": "^12.1.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/docusaurus-theme-openapi-docs/node_modules/sass-loader": { "version": "13.3.2", "license": "MIT", @@ -15850,6 +15600,14 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/docusaurus-theme-openapi-docs/node_modules/unist-util-generated": { + "version": "2.0.1", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/docusaurus-theme-openapi-docs/node_modules/unist-util-is": { "version": "5.2.1", "license": "MIT", @@ -16054,9 +15812,8 @@ }, "node_modules/dotenv": { "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=12" }, @@ -16337,8 +16094,7 @@ }, "node_modules/electron-to-chromium": { "version": "1.4.788", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.788.tgz", - "integrity": "sha512-ubp5+Ev/VV8KuRoWnfP2QF2Bg+O2ZFdb49DiiNbz2VmgkIqrnyYaqIOqj8A6K/3p1xV0QcU5hBQ1+BmB6ot1OA==" + "license": "ISC" }, "node_modules/elliptic": { "version": "6.5.4", @@ -16542,8 +16298,7 @@ }, "node_modules/env-paths": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", "engines": { "node": ">=6" } @@ -16569,9 +16324,8 @@ }, "node_modules/es-abstract": { "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", @@ -16629,8 +16383,7 @@ }, "node_modules/es-define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4" }, @@ -16640,8 +16393,7 @@ }, "node_modules/es-errors": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -16672,9 +16424,8 @@ }, "node_modules/es-iterator-helpers": { "version": "1.0.19", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", - "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -16701,9 +16452,8 @@ }, "node_modules/es-object-atoms": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -16713,9 +16463,8 @@ }, "node_modules/es-set-tostringtag": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", @@ -16863,9 +16612,8 @@ }, "node_modules/eslint": { "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "devOptional": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -17985,6 +17733,14 @@ "node": "*" } }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-plugin-jsx-a11y": { "version": "6.8.0", "dev": true, @@ -18994,17 +18750,6 @@ "concat-map": "0.0.1" } }, - "node_modules/eslint-plugin-n/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-plugin-n/node_modules/minimatch": { "version": "3.1.2", "dev": true, @@ -19016,25 +18761,6 @@ "node": "*" } }, - "node_modules/eslint-plugin-n/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-n/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/eslint-plugin-promise": { "version": "6.1.1", "dev": true, @@ -19048,9 +18774,8 @@ }, "node_modules/eslint-plugin-react": { "version": "7.34.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", - "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", "dev": true, + "license": "MIT", "dependencies": { "array-includes": "^3.1.7", "array.prototype.findlast": "^1.2.4", @@ -19125,6 +18850,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-scope": { "version": "7.2.2", "devOptional": true, @@ -20091,6 +19824,27 @@ "node": ">=0.4.0" } }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, "node_modules/figures": { "version": "5.0.0", "dev": true, @@ -20793,16 +20547,6 @@ "version": "0.4.1", "license": "MIT" }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/minimatch": { "version": "3.1.2", "license": "ISC", @@ -20829,19 +20573,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "7.5.4", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { "version": "7.2.0", "license": "MIT", @@ -20859,10 +20590,6 @@ "node": ">=6" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/form-data": { "version": "4.0.0", "dev": true, @@ -20889,6 +20616,16 @@ "node": ">=0.4.x" } }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/forwarded": { "version": "0.2.0", "license": "MIT", @@ -21110,6 +20847,34 @@ "node": ">=14" } }, + "node_modules/gaxios/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/gaxios/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true, + "license": "MIT" + }, "node_modules/gaxios/node_modules/uuid": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", @@ -21124,6 +20889,24 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/gaxios/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/gaxios/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "license": "MIT", @@ -21140,9 +20923,8 @@ }, "node_modules/get-east-asian-width": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", - "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -21152,8 +20934,7 @@ }, "node_modules/get-intrinsic": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", @@ -21203,9 +20984,8 @@ }, "node_modules/get-symbol-description": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", @@ -21330,8 +21110,7 @@ }, "node_modules/git-raw-commits": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", - "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", + "license": "MIT", "dependencies": { "dargs": "^8.0.0", "meow": "^12.0.1", @@ -21346,8 +21125,7 @@ }, "node_modules/git-raw-commits/node_modules/meow": { "version": "12.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", - "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", + "license": "MIT", "engines": { "node": ">=16.10" }, @@ -21357,8 +21135,7 @@ }, "node_modules/git-raw-commits/node_modules/split2": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", "engines": { "node": ">= 10.x" } @@ -21784,8 +21561,7 @@ }, "node_modules/global-directory": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", - "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", + "license": "MIT", "dependencies": { "ini": "4.1.1" }, @@ -21798,8 +21574,7 @@ }, "node_modules/global-directory/node_modules/ini": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -22547,8 +22322,7 @@ }, "node_modules/has-property-descriptors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -22558,8 +22332,7 @@ }, "node_modules/has-proto": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -22598,8 +22371,7 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -22717,8 +22489,7 @@ }, "node_modules/hasown": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -23153,6 +22924,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/html-url-attributes": { + "version": "3.0.0", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/html-void-elements": { "version": "3.0.0", "license": "MIT", @@ -23442,8 +23221,7 @@ }, "node_modules/ignore": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "license": "MIT", "engines": { "node": ">= 4" } @@ -23965,9 +23743,8 @@ }, "node_modules/internal-slot": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", @@ -24090,9 +23867,8 @@ }, "node_modules/is-array-buffer": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" @@ -24252,9 +24028,8 @@ }, "node_modules/is-data-view": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", "dev": true, + "license": "MIT", "dependencies": { "is-typed-array": "^1.1.13" }, @@ -24417,9 +24192,8 @@ }, "node_modules/is-in-ci": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-in-ci/-/is-in-ci-0.1.0.tgz", - "integrity": "sha512-d9PXLEY0v1iJ64xLiQMJ51J128EYHAaOR4yZqQi8aHGfw6KgifM3/Viw1oZZ1GCVmb3gBuyhLyHj0HgR2DhSXQ==", "dev": true, + "license": "MIT", "bin": { "is-in-ci": "cli.js" }, @@ -24552,9 +24326,8 @@ }, "node_modules/is-negative-zero": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -24718,9 +24491,8 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7" }, @@ -24797,8 +24569,7 @@ }, "node_modules/is-typed-array": { "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "license": "MIT", "dependencies": { "which-typed-array": "^1.1.14" }, @@ -24985,6 +24756,14 @@ "node": ">=8" } }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/istanbul-lib-report": { "version": "3.0.1", "dev": true, @@ -26323,17 +26102,6 @@ "node": ">=0.10.0" } }, - "node_modules/jest-config-docusaurus/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jest-config-docusaurus/node_modules/make-dir": { "version": "3.1.0", "dev": true, @@ -26721,20 +26489,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/jest-config-docusaurus/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jest-config-docusaurus/node_modules/semver-diff": { "version": "3.1.1", "dev": true, @@ -27060,11 +26814,6 @@ "node": ">=8" } }, - "node_modules/jest-config-docusaurus/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/jest-config-docusaurus/node_modules/zwitch": { "version": "1.0.5", "dev": true, @@ -28142,17 +27891,6 @@ "node": ">=8" } }, - "node_modules/jest-snapshot/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jest-snapshot/node_modules/pretty-format": { "version": "29.7.0", "dev": true, @@ -28182,20 +27920,6 @@ "dev": true, "license": "MIT" }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jest-snapshot/node_modules/supports-color": { "version": "7.2.0", "dev": true, @@ -28207,11 +27931,6 @@ "node": ">=8" } }, - "node_modules/jest-snapshot/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/jest-util": { "version": "29.7.0", "license": "MIT", @@ -29553,8 +29272,7 @@ }, "node_modules/lodash.kebabcase": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==" + "license": "MIT" }, "node_modules/lodash.memoize": { "version": "4.1.2", @@ -29566,18 +29284,15 @@ }, "node_modules/lodash.mergewith": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", - "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==" + "license": "MIT" }, "node_modules/lodash.snakecase": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" + "license": "MIT" }, "node_modules/lodash.startcase": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", - "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==" + "license": "MIT" }, "node_modules/lodash.uniq": { "version": "4.5.0", @@ -29590,8 +29305,7 @@ }, "node_modules/lodash.upperfirst": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", - "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==" + "license": "MIT" }, "node_modules/log-update": { "version": "5.0.1", @@ -29725,36 +29439,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/make-error": { "version": "1.3.6", "dev": true, @@ -29836,6 +29520,16 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/markdown-to-jsx": { + "version": "7.4.7", + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "peerDependencies": { + "react": ">= 0.14.0" + } + }, "node_modules/marked": { "version": "4.3.0", "dev": true, @@ -34543,11 +34237,9 @@ }, "node_modules/netlify-cli": { "version": "17.31.0", - "resolved": "https://registry.npmjs.org/netlify-cli/-/netlify-cli-17.31.0.tgz", - "integrity": "sha512-2YULK0AabMg8+xKzx1UL/MtXPQUuKuPEAH0jZwK3j/tvVwn7d6HFmWrjzl/ESh7sErUgh5KAyrcckyD/PmFEiw==", "dev": true, "hasInstallScript": true, - "hasShrinkwrap": true, + "license": "MIT", "dependencies": { "@bugsnag/js": "7.23.0", "@fastify/static": "7.0.4", @@ -34674,9 +34366,8 @@ }, "node_modules/netlify-cli/node_modules/@babel/code-frame": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/highlight": "^7.24.7", "picocolors": "^1.0.0" @@ -34687,27 +34378,24 @@ }, "node_modules/netlify-cli/node_modules/@babel/helper-string-parser": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", - "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/netlify-cli/node_modules/@babel/helper-validator-identifier": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/netlify-cli/node_modules/@babel/highlight": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", @@ -34720,9 +34408,8 @@ }, "node_modules/netlify-cli/node_modules/@babel/highlight/node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -34732,9 +34419,8 @@ }, "node_modules/netlify-cli/node_modules/@babel/highlight/node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -34746,27 +34432,24 @@ }, "node_modules/netlify-cli/node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/netlify-cli/node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/netlify-cli/node_modules/@babel/highlight/node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -34776,9 +34459,8 @@ }, "node_modules/netlify-cli/node_modules/@babel/parser": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", - "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", "dev": true, + "license": "MIT", "bin": { "parser": "bin/babel-parser.js" }, @@ -34788,9 +34470,8 @@ }, "node_modules/netlify-cli/node_modules/@babel/types": { "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.6.tgz", - "integrity": "sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.24.6", "@babel/helper-validator-identifier": "^7.24.6", @@ -34802,18 +34483,16 @@ }, "node_modules/netlify-cli/node_modules/@bugsnag/browser": { "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@bugsnag/browser/-/browser-7.22.7.tgz", - "integrity": "sha512-70jFkWKscK2osm7bnFbPLevrzHClrygM3UcKetKs/l81Xuzlxnu1SS3onN5OUl9kd9RN4XMFr46Pv5jSqWqImQ==", "dev": true, + "license": "MIT", "dependencies": { "@bugsnag/core": "^7.22.7" } }, "node_modules/netlify-cli/node_modules/@bugsnag/core": { "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@bugsnag/core/-/core-7.22.7.tgz", - "integrity": "sha512-9DPWBkkBjhFJc5dCFy/wVC3HE0Aw3ZiLJKjyAxgywSKbILgtpD+qT1Xe8sacWyxU92znamlZ8H8ziQOe7jhhbA==", "dev": true, + "license": "MIT", "dependencies": { "@bugsnag/cuid": "^3.0.0", "@bugsnag/safe-json-stringify": "^6.0.0", @@ -34824,15 +34503,13 @@ }, "node_modules/netlify-cli/node_modules/@bugsnag/cuid": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@bugsnag/cuid/-/cuid-3.1.0.tgz", - "integrity": "sha512-U6vPVhFPLWLXQIGnmk/uPbyidB5xLVFfEdZDmmLbv41Be67re4mNsjMukHdUv669RXOWTDQNJ+bMODhuWpshkw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/@bugsnag/js": { "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@bugsnag/js/-/js-7.23.0.tgz", - "integrity": "sha512-gnCpcv/v6p3CtbwwDuAjVYPPNq4NMVj4hp70MiB3OGJ+LmIS66CwElDiyvRMA8Ar6OzCF4joTeaNG5bD9cM41w==", "dev": true, + "license": "MIT", "dependencies": { "@bugsnag/browser": "^7.22.7", "@bugsnag/node": "^7.23.0" @@ -34840,9 +34517,8 @@ }, "node_modules/netlify-cli/node_modules/@bugsnag/node": { "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@bugsnag/node/-/node-7.23.0.tgz", - "integrity": "sha512-eXA8/h+J2booEMlKsuRl1NAszebwm4KZ9zxCSg/xN4sw5boXia7kMifLf8QTqk+UBtIhNKBsyQQKHXbawKyE6Q==", "dev": true, + "license": "MIT", "dependencies": { "@bugsnag/core": "^7.22.7", "byline": "^5.0.0", @@ -34854,24 +34530,21 @@ }, "node_modules/netlify-cli/node_modules/@bugsnag/safe-json-stringify": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.0.0.tgz", - "integrity": "sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/@colors/colors": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.1.90" } }, "node_modules/netlify-cli/node_modules/@cspotcode/source-map-support": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -34881,9 +34554,8 @@ }, "node_modules/netlify-cli/node_modules/@dabh/diagnostics": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", - "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==", "dev": true, + "license": "MIT", "dependencies": { "colorspace": "1.1.x", "enabled": "2.0.x", @@ -34892,9 +34564,8 @@ }, "node_modules/netlify-cli/node_modules/@dependents/detective-less": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@dependents/detective-less/-/detective-less-4.1.0.tgz", - "integrity": "sha512-KrkT6qO5NxqNfy68sBl6CTSoJ4SNDIS5iQArkibhlbGU4LaDukZ3q2HIkh8aUKDio6o4itU4xDR7t82Y2eP1Bg==", "dev": true, + "license": "MIT", "dependencies": { "gonzales-pe": "^4.3.0", "node-source-walk": "^6.0.1" @@ -34903,78 +34574,13 @@ "node": ">=14" } }, - "node_modules/netlify-cli/node_modules/@esbuild/aix-ppc64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz", - "integrity": "sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@esbuild/android-arm": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.11.tgz", - "integrity": "sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@esbuild/android-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz", - "integrity": "sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@esbuild/android-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.11.tgz", - "integrity": "sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/netlify-cli/node_modules/@esbuild/darwin-arm64": { "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz", - "integrity": "sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -34983,308 +34589,18 @@ "node": ">=12" } }, - "node_modules/netlify-cli/node_modules/@esbuild/darwin-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz", - "integrity": "sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz", - "integrity": "sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@esbuild/freebsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz", - "integrity": "sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@esbuild/linux-arm": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz", - "integrity": "sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@esbuild/linux-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz", - "integrity": "sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@esbuild/linux-ia32": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz", - "integrity": "sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@esbuild/linux-loong64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz", - "integrity": "sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@esbuild/linux-mips64el": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz", - "integrity": "sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@esbuild/linux-ppc64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz", - "integrity": "sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@esbuild/linux-riscv64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz", - "integrity": "sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@esbuild/linux-s390x": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz", - "integrity": "sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@esbuild/linux-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz", - "integrity": "sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@esbuild/netbsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz", - "integrity": "sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@esbuild/openbsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz", - "integrity": "sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@esbuild/sunos-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz", - "integrity": "sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@esbuild/win32-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz", - "integrity": "sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@esbuild/win32-ia32": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz", - "integrity": "sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@esbuild/win32-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz", - "integrity": "sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/netlify-cli/node_modules/@fastify/accept-negotiator": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@fastify/accept-negotiator/-/accept-negotiator-1.1.0.tgz", - "integrity": "sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/netlify-cli/node_modules/@fastify/ajv-compiler": { "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.5.0.tgz", - "integrity": "sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^8.11.0", "ajv-formats": "^2.1.1", @@ -35293,9 +34609,8 @@ }, "node_modules/netlify-cli/node_modules/@fastify/ajv-compiler/node_modules/ajv": { "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -35309,39 +34624,34 @@ }, "node_modules/netlify-cli/node_modules/@fastify/ajv-compiler/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/@fastify/error": { "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.4.1.tgz", - "integrity": "sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/@fastify/fast-json-stringify-compiler": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz", - "integrity": "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==", "dev": true, + "license": "MIT", "dependencies": { "fast-json-stringify": "^5.7.0" } }, "node_modules/netlify-cli/node_modules/@fastify/merge-json-schemas": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz", - "integrity": "sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" } }, "node_modules/netlify-cli/node_modules/@fastify/send": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@fastify/send/-/send-2.0.1.tgz", - "integrity": "sha512-8jdouu0o5d0FMq1+zCKeKXc1tmOQ5tTGYdQP3MpyF9+WWrZT1KCBdh6hvoEYxOm3oJG/akdE9BpehLiJgYRvGw==", "dev": true, + "license": "MIT", "dependencies": { "@lukeed/ms": "^2.0.1", "escape-html": "~1.0.3", @@ -35352,18 +34662,16 @@ }, "node_modules/netlify-cli/node_modules/@fastify/send/node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/netlify-cli/node_modules/@fastify/send/node_modules/http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, + "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -35377,9 +34685,8 @@ }, "node_modules/netlify-cli/node_modules/@fastify/send/node_modules/mime": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", "dev": true, + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -35389,9 +34696,8 @@ }, "node_modules/netlify-cli/node_modules/@fastify/static": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@fastify/static/-/static-7.0.4.tgz", - "integrity": "sha512-p2uKtaf8BMOZWLs6wu+Ihg7bWNBdjNgCwDza4MJtTqg+5ovKmcbgbR9Xs5/smZ1YISfzKOCNYmZV8LaCj+eJ1Q==", "dev": true, + "license": "MIT", "dependencies": { "@fastify/accept-negotiator": "^1.0.0", "@fastify/send": "^2.0.0", @@ -35403,18 +34709,16 @@ }, "node_modules/netlify-cli/node_modules/@fastify/static/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/netlify-cli/node_modules/@fastify/static/node_modules/glob": { "version": "10.3.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz", - "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.6", @@ -35434,9 +34738,8 @@ }, "node_modules/netlify-cli/node_modules/@fastify/static/node_modules/minimatch": { "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -35449,45 +34752,39 @@ }, "node_modules/netlify-cli/node_modules/@fastify/static/node_modules/minipass": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", - "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/netlify-cli/node_modules/@humanwhocodes/momoa": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/momoa/-/momoa-2.0.4.tgz", - "integrity": "sha512-RE815I4arJFtt+FVeU1Tgp9/Xvecacji8w/V6XtXsWWH/wz/eNkNbhb+ny/+PlVZjV0rxQpRSQKNKE3lcktHEA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.10.0" } }, "node_modules/netlify-cli/node_modules/@iarna/toml": { "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", - "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/@import-maps/resolve": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@import-maps/resolve/-/resolve-1.0.1.tgz", - "integrity": "sha512-tWZNBIS1CoekcwlMuyG2mr0a1Wo5lb5lEHwwWvZo+5GLgr3e9LLDTtmgtCWEwBpXMkxn9D+2W9j2FY6eZQq0tA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/@ioredis/commands": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", - "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/@isaacs/cliui": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -35502,15 +34799,13 @@ }, "node_modules/netlify-cli/node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -35525,9 +34820,8 @@ }, "node_modules/netlify-cli/node_modules/@isaacs/cliui/node_modules/wrap-ansi": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -35542,9 +34836,8 @@ }, "node_modules/netlify-cli/node_modules/@jest/types": { "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", @@ -35558,18 +34851,16 @@ }, "node_modules/netlify-cli/node_modules/@jest/types/node_modules/@types/yargs": { "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/netlify-cli/node_modules/@jest/types/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -35582,9 +34873,8 @@ }, "node_modules/netlify-cli/node_modules/@jest/types/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -35598,9 +34888,8 @@ }, "node_modules/netlify-cli/node_modules/@jest/types/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -35610,15 +34899,13 @@ }, "node_modules/netlify-cli/node_modules/@jest/types/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/@jest/types/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -35628,24 +34915,21 @@ }, "node_modules/netlify-cli/node_modules/@jridgewell/resolve-uri": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/netlify-cli/node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -35653,18 +34937,16 @@ }, "node_modules/netlify-cli/node_modules/@lukeed/ms": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lukeed/ms/-/ms-2.0.1.tgz", - "integrity": "sha512-Xs/4RZltsAL7pkvaNStUQt7netTkyxrS0K+RILcVr3TRMS/ToOg4I6uNfhB9SlGsnWBym4U+EaXq0f0cEMNkHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/netlify-cli/node_modules/@mapbox/node-pre-gyp": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "detect-libc": "^2.0.0", "https-proxy-agent": "^5.0.0", @@ -35682,9 +34964,8 @@ }, "node_modules/netlify-cli/node_modules/@mapbox/node-pre-gyp/node_modules/https-proxy-agent": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "6", "debug": "4" @@ -35695,9 +34976,8 @@ }, "node_modules/netlify-cli/node_modules/@mapbox/node-pre-gyp/node_modules/node-fetch": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dev": true, + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -35715,24 +34995,21 @@ }, "node_modules/netlify-cli/node_modules/@netlify/binary-info": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@netlify/binary-info/-/binary-info-1.0.0.tgz", - "integrity": "sha512-4wMPu9iN3/HL97QblBsBay3E1etIciR84izI3U+4iALY+JHCrI+a2jO0qbAZ/nxKoegypYEaiiqWXylm+/zfrw==", - "dev": true + "dev": true, + "license": "Apache 2" }, "node_modules/netlify-cli/node_modules/@netlify/blobs": { "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@netlify/blobs/-/blobs-7.3.0.tgz", - "integrity": "sha512-wN/kNTZo4xjlUM/C0WILOkJbe8p4AFquSGkZEIoIcgnsx5ikp2GyqGiq1WMLee7QdbnqeIV2g2hn/PjT324E5w==", "dev": true, + "license": "MIT", "engines": { "node": "^14.16.0 || >=16.0.0" } }, "node_modules/netlify-cli/node_modules/@netlify/build": { "version": "29.50.0", - "resolved": "https://registry.npmjs.org/@netlify/build/-/build-29.50.0.tgz", - "integrity": "sha512-9/xFufOlqB5jydYnqqzO8N93YP2ZFJ6qAdRgo/JclJyxQ3yNBfVLzwWiY7FhKpT0p/laag0RJ/a8TNENwHhPhg==", "dev": true, + "license": "MIT", "dependencies": { "@bugsnag/js": "^7.0.0", "@netlify/blobs": "^7.3.0", @@ -35811,9 +35088,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/build-info": { "version": "7.13.2", - "resolved": "https://registry.npmjs.org/@netlify/build-info/-/build-info-7.13.2.tgz", - "integrity": "sha512-smzhIgcms6Z/v2cct90l8ncBbnA5kvknj5/quhwyM6UHUycgMKFlA22qkB0KLj9shwL1Lkh7iQW751JwhSaP9g==", "dev": true, + "license": "MIT", "dependencies": { "@bugsnag/js": "^7.20.0", "@iarna/toml": "^2.2.5", @@ -35834,18 +35110,16 @@ }, "node_modules/netlify-cli/node_modules/@netlify/build-info/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/netlify-cli/node_modules/@netlify/build-info/node_modules/dot-prop": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-7.2.0.tgz", - "integrity": "sha512-Ol/IPXUARn9CSbkrdV4VJo7uCy1I3VuSiWCaFSg+8BdUOzF9n3jefIpcgAydvUZbTdEBZs2vEiTiS9m61ssiDA==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^2.11.2" }, @@ -35858,9 +35132,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/build-info/node_modules/find-up": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^7.1.0", "path-exists": "^5.0.0" @@ -35874,9 +35147,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/build-info/node_modules/minimatch": { "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -35889,18 +35161,16 @@ }, "node_modules/netlify-cli/node_modules/@netlify/build-info/node_modules/path-exists": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/netlify-cli/node_modules/@netlify/build-info/node_modules/read-pkg": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz", - "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", "dev": true, + "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.1", "normalize-package-data": "^3.0.2", @@ -35916,9 +35186,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/build-info/node_modules/yaml": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", - "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", "dev": true, + "license": "ISC", "bin": { "yaml": "bin.mjs" }, @@ -35928,9 +35197,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/build/node_modules/ansi-escapes": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", - "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -35940,24 +35208,21 @@ }, "node_modules/netlify-cli/node_modules/@netlify/build/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/netlify-cli/node_modules/@netlify/build/node_modules/emoji-regex": { "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/@netlify/build/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -35967,9 +35232,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/build/node_modules/execa": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", - "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.1", @@ -35990,9 +35254,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/build/node_modules/figures": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", - "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^5.0.0", "is-unicode-supported": "^1.2.0" @@ -36006,9 +35269,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/build/node_modules/find-up": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^7.1.0", "path-exists": "^5.0.0" @@ -36022,18 +35284,16 @@ }, "node_modules/netlify-cli/node_modules/@netlify/build/node_modules/human-signals": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", - "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.20.0" } }, "node_modules/netlify-cli/node_modules/@netlify/build/node_modules/indent-string": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -36043,9 +35303,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/build/node_modules/is-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -36055,9 +35314,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/build/node_modules/map-obj": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-5.0.2.tgz", - "integrity": "sha512-K6K2NgKnTXimT3779/4KxSvobxOtMmx1LBZ3NwRxT/MDIR3Br/fQ4Q+WCX5QxjyUR8zg5+RV9Tbf2c5pAWTD2A==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -36067,9 +35325,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/build/node_modules/minimatch": { "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -36082,9 +35339,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/build/node_modules/npm-run-path": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^4.0.0" }, @@ -36097,9 +35353,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/build/node_modules/onetime": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^4.0.0" }, @@ -36112,9 +35367,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/build/node_modules/p-filter": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-3.0.0.tgz", - "integrity": "sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==", "dev": true, + "license": "MIT", "dependencies": { "p-map": "^5.1.0" }, @@ -36127,9 +35381,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/build/node_modules/p-filter/node_modules/p-map": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", - "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", "dev": true, + "license": "MIT", "dependencies": { "aggregate-error": "^4.0.0" }, @@ -36142,9 +35395,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/build/node_modules/p-limit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^1.0.0" }, @@ -36157,9 +35409,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/build/node_modules/p-locate": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^4.0.0" }, @@ -36172,9 +35423,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/build/node_modules/p-map": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-6.0.0.tgz", - "integrity": "sha512-T8BatKGY+k5rU+Q/GTYgrEf2r4xRMevAN5mtXc2aPc4rS1j3s+vWTaO2Wag94neXuCAUAs8cxBL9EeB5EA6diw==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -36184,18 +35434,16 @@ }, "node_modules/netlify-cli/node_modules/@netlify/build/node_modules/path-exists": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/netlify-cli/node_modules/@netlify/build/node_modules/path-type": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -36205,9 +35453,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/build/node_modules/pkg-dir": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^6.3.0" }, @@ -36220,9 +35467,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/build/node_modules/string-width": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -36237,9 +35483,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/build/node_modules/strip-final-newline": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -36249,9 +35494,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/build/node_modules/yocto-queue": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.20" }, @@ -36261,9 +35505,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/cache-utils": { "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@netlify/cache-utils/-/cache-utils-5.1.5.tgz", - "integrity": "sha512-lMNdFmy2Yu3oVquSPooRDLxJ8QOsIX6X6vzA2pKz/9V2LQFJiqBukggXM+Rnqzk1regPpdJ0jK3dPGvOKaRQgg==", "dev": true, + "license": "MIT", "dependencies": { "cpy": "^9.0.0", "get-stream": "^6.0.0", @@ -36280,9 +35523,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/cache-utils/node_modules/globby": { "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", "dev": true, + "license": "MIT", "dependencies": { "dir-glob": "^3.0.1", "fast-glob": "^3.3.0", @@ -36299,18 +35541,16 @@ }, "node_modules/netlify-cli/node_modules/@netlify/cache-utils/node_modules/path-exists": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/netlify-cli/node_modules/@netlify/cache-utils/node_modules/slash": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -36320,9 +35560,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/config": { "version": "20.15.4", - "resolved": "https://registry.npmjs.org/@netlify/config/-/config-20.15.4.tgz", - "integrity": "sha512-qH9kubtF4A53GJwem3BZGVaVRjBpnfeRrkC4Krz45yp4isdhI6mt6L0rDiSSkUl64uu3SQWWd1JapG+hzdhqNQ==", "dev": true, + "license": "MIT", "dependencies": { "@iarna/toml": "^2.2.5", "chalk": "^5.0.0", @@ -36358,9 +35597,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/config/node_modules/dot-prop": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-7.2.0.tgz", - "integrity": "sha512-Ol/IPXUARn9CSbkrdV4VJo7uCy1I3VuSiWCaFSg+8BdUOzF9n3jefIpcgAydvUZbTdEBZs2vEiTiS9m61ssiDA==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^2.11.2" }, @@ -36373,9 +35611,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/config/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -36385,9 +35622,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/config/node_modules/execa": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", - "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.1", @@ -36408,9 +35644,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/config/node_modules/figures": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", - "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^5.0.0", "is-unicode-supported": "^1.2.0" @@ -36424,9 +35659,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/config/node_modules/find-up": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^7.1.0", "path-exists": "^5.0.0" @@ -36440,18 +35674,16 @@ }, "node_modules/netlify-cli/node_modules/@netlify/config/node_modules/human-signals": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", - "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.20.0" } }, "node_modules/netlify-cli/node_modules/@netlify/config/node_modules/indent-string": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -36461,9 +35693,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/config/node_modules/is-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -36473,9 +35704,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/config/node_modules/map-obj": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-5.0.2.tgz", - "integrity": "sha512-K6K2NgKnTXimT3779/4KxSvobxOtMmx1LBZ3NwRxT/MDIR3Br/fQ4Q+WCX5QxjyUR8zg5+RV9Tbf2c5pAWTD2A==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -36485,9 +35715,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/config/node_modules/npm-run-path": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^4.0.0" }, @@ -36500,9 +35729,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/config/node_modules/onetime": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^4.0.0" }, @@ -36515,9 +35743,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/config/node_modules/p-limit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^1.0.0" }, @@ -36530,9 +35757,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/config/node_modules/p-locate": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^4.0.0" }, @@ -36545,18 +35771,16 @@ }, "node_modules/netlify-cli/node_modules/@netlify/config/node_modules/path-exists": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/netlify-cli/node_modules/@netlify/config/node_modules/path-type": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -36566,9 +35790,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/config/node_modules/strip-final-newline": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -36578,9 +35801,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/config/node_modules/yocto-queue": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.20" }, @@ -36590,9 +35812,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/edge-bundler": { "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@netlify/edge-bundler/-/edge-bundler-12.1.1.tgz", - "integrity": "sha512-Jmq4JrWfTRdEJMgIrZt4kr6ETTCCVGupG6AgBwVZ6p93T7z9u9QBb4nkMDbCG6o9roGgUNlh2DtMG8HvD4zdUA==", "dev": true, + "license": "MIT", "dependencies": { "@import-maps/resolve": "^1.0.1", "@vercel/nft": "^0.27.0", @@ -36622,78 +35843,13 @@ "node": "^14.16.0 || >=16.0.0" } }, - "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/@esbuild/aix-ppc64": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.2.tgz", - "integrity": "sha512-/c7hocx0pm14bHQlqUVKmxwdT/e5/KkyoY1W8F9lk/8CkE037STDDz8PXUP/LE6faj2HqchvDs9GcShxFhI78Q==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/@esbuild/android-arm": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.2.tgz", - "integrity": "sha512-G1ve3b4FeyJeyCjB4MX1CiWyTaIJwT9wAYE+8+IRA53YoN/reC/Bf2GDRXAzDTnh69Fpl+1uIKg76DiB3U6vwQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/@esbuild/android-arm64": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.2.tgz", - "integrity": "sha512-SGZKngoTWVUriO5bDjI4WDGsNx2VKZoXcds+ita/kVYB+8IkSCKDRDaK+5yu0b5S0eq6B3S7fpiEvpsa2ammlQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/@esbuild/android-x64": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.2.tgz", - "integrity": "sha512-1wzzNoj2QtNkAYwIcWJ66UTRA80+RTQ/kuPMtEuP0X6dp5Ar23Dn566q3aV61h4EYrrgGlOgl/HdcqN/2S/2vg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/@esbuild/darwin-arm64": { "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.2.tgz", - "integrity": "sha512-ZyMkPWc5eTROcLOA10lEqdDSTc6ds6nuh3DeHgKip/XJrYjZDfnkCVSty8svWdy+SC1f77ULtVeIqymTzaB6/Q==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -36702,299 +35858,10 @@ "node": ">=12" } }, - "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/@esbuild/darwin-x64": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.2.tgz", - "integrity": "sha512-K4ZdVq1zP9v51h/cKVna7im7G0zGTKKB6bP2yJiSmHjjOykbd8DdhrSi8V978sF69rkwrn8zCyL2t6I3ei6j9A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.2.tgz", - "integrity": "sha512-4kbOGdpA61CXqadD+Gb/Pw3YXamQGiz9mal/h93rFVSjr5cgMnmJd/gbfPRm+3BMifvnaOfS1gNWaIDxkE2A3A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/@esbuild/freebsd-x64": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.2.tgz", - "integrity": "sha512-ShS+R09nuHzDBfPeMUliKZX27Wrmr8UFp93aFf/S8p+++x5BZ+D344CLKXxmY6qzgTL3mILSImPCNJOzD6+RRg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/@esbuild/linux-arm": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.2.tgz", - "integrity": "sha512-nnGXjOAv+7cM3LYRx4tJsYdgy8dGDGkAzF06oIDGppWbUkUKN9SmgQA8H0KukpU0Pjrj9XmgbWqMVSX/U7eeTA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/@esbuild/linux-arm64": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.2.tgz", - "integrity": "sha512-Hdu8BL+AmO+eCDvvT6kz/fPQhvuHL8YK4ExKZfANWsNe1kFGOHw7VJvS/FKSLFqheXmB3rTF3xFQIgUWPYsGnA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/@esbuild/linux-ia32": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.2.tgz", - "integrity": "sha512-m73BOCW2V9lcj7RtEMi+gBfHC6n3+VHpwQXP5offtQMPLDkpVolYn1YGXxOZ9hp4h3UPRKuezL7WkBsw+3EB3Q==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/@esbuild/linux-loong64": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.2.tgz", - "integrity": "sha512-84eYHwwWHq3myIY/6ikALMcnwkf6Qo7NIq++xH0x+cJuUNpdwh8mlpUtRY+JiGUc60yu7ElWBbVHGWTABTclGw==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/@esbuild/linux-mips64el": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.2.tgz", - "integrity": "sha512-9siSZngT0/ZKG+AH+/agwKF29LdCxw4ODi/PiE0F52B2rtLozlDP92umf8G2GPoVV611LN4pZ+nSTckebOscUA==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/@esbuild/linux-ppc64": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.2.tgz", - "integrity": "sha512-y0T4aV2CA+ic04ULya1A/8M2RDpDSK2ckgTj6jzHKFJvCq0jQg8afQQIn4EM0G8u2neyOiNHgSF9YKPfuqKOVw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/@esbuild/linux-riscv64": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.2.tgz", - "integrity": "sha512-x5ssCdXmZC86L2Li1qQPF/VaC4VP20u/Zm8jlAu9IiVOVi79YsSz6cpPDYZl1rfKSHYCJW9XBfFCo66S5gVPSA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/@esbuild/linux-s390x": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.2.tgz", - "integrity": "sha512-NP7fTpGSFWdXyvp8iAFU04uFh9ARoplFVM/m+8lTRpaYG+2ytHPZWyscSsMM6cvObSIK2KoPHXiZD4l99WaxbQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/@esbuild/linux-x64": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.2.tgz", - "integrity": "sha512-giZ/uOxWDKda44ZuyfKbykeXznfuVNkTgXOUOPJIjbayJV6FRpQ4zxUy9JMBPLaK9IJcdWtaoeQrYBMh3Rr4vQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/@esbuild/netbsd-x64": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.2.tgz", - "integrity": "sha512-IeFMfGFSQfIj1d4XU+6lkbFzMR+mFELUUVYrZ+jvWzG4NGvs6o53ReEHLHpYkjRbdEjJy2W3lTekTxrFHW7YJg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/@esbuild/openbsd-x64": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.2.tgz", - "integrity": "sha512-48QhWD6WxcebNNaE4FCwgvQVUnAycuTd+BdvA/oZu+/MmbpU8pY2dMEYlYzj5uNHWIG5jvdDmFXu0naQeOWUoA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/@esbuild/sunos-x64": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.2.tgz", - "integrity": "sha512-90r3nTBLgdIgD4FCVV9+cR6Hq2Dzs319icVsln+NTmTVwffWcCqXGml8rAoocHuJ85kZK36DCteii96ba/PX8g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/@esbuild/win32-arm64": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.2.tgz", - "integrity": "sha512-sNndlsBT8OeE/MZDSGpRDJlWuhjuUz/dn80nH0EP4ZzDUYvMDVa7G87DVpweBrn4xdJYyXS/y4CQNrf7R2ODXg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/@esbuild/win32-ia32": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.2.tgz", - "integrity": "sha512-Ti2QChGNFzWhUNNVuU4w21YkYTErsNh3h+CzvlEhzgRbwsJ7TrWQqRzW3bllLKKvTppuF3DJ3XP1GEg11AfrEQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/@esbuild/win32-x64": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.2.tgz", - "integrity": "sha512-VEfTCZicoZnZ6sGkjFPGRFFJuL2fZn2bLhsekZl1CJslflp2cJS/VoKs1jMk+3pDfsGW6CfQVUckP707HwbXeQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/ajv": { "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", - "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", @@ -37008,19 +35875,17 @@ }, "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/ajv-errors": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-3.0.0.tgz", - "integrity": "sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==", "dev": true, + "license": "MIT", "peerDependencies": { "ajv": "^8.0.1" } }, "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/esbuild": { "version": "0.21.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.2.tgz", - "integrity": "sha512-LmHPAa5h4tSxz+g/D8IHY6wCjtIiFx8I7/Q0Aq+NmvtoYvyMnJU0KQJcqB6QH30X9x/W4CemgUtPgQDZFca5SA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -37055,9 +35920,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/execa": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", - "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.1", @@ -37078,9 +35942,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/find-up": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^7.1.0", "path-exists": "^5.0.0" @@ -37094,9 +35957,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/get-port": { "version": "6.1.2", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-6.1.2.tgz", - "integrity": "sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -37106,18 +35968,16 @@ }, "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/human-signals": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", - "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.20.0" } }, "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/is-path-inside": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", - "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -37127,9 +35987,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/is-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -37139,15 +35998,13 @@ }, "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/npm-run-path": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^4.0.0" }, @@ -37160,9 +36017,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/onetime": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^4.0.0" }, @@ -37175,9 +36031,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/p-timeout": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", - "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -37187,9 +36042,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/p-wait-for": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-wait-for/-/p-wait-for-4.1.0.tgz", - "integrity": "sha512-i8nE5q++9h8oaQHWltS1Tnnv4IoMDOlqN7C0KFG2OdbK0iFJIt6CROZ8wfBM+K4Pxqfnq4C4lkkpXqTEpB5DZw==", "dev": true, + "license": "MIT", "dependencies": { "p-timeout": "^5.0.0" }, @@ -37202,18 +36056,16 @@ }, "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/path-exists": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/netlify-cli/node_modules/@netlify/edge-bundler/node_modules/strip-final-newline": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -37223,15 +36075,13 @@ }, "node_modules/netlify-cli/node_modules/@netlify/edge-functions": { "version": "2.8.1", - "resolved": "https://registry.npmjs.org/@netlify/edge-functions/-/edge-functions-2.8.1.tgz", - "integrity": "sha512-BoAz/gCWHLn9DVugGViORbWFDqaqrB/JHM+9N+ahk7U6C3EwaFojnnGKCMrQ65f2YOi6Wwlue1ZZO+8mq43RZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/@netlify/framework-info": { "version": "9.8.13", - "resolved": "https://registry.npmjs.org/@netlify/framework-info/-/framework-info-9.8.13.tgz", - "integrity": "sha512-ZZXCggokY/y5Sz93XYbl/Lig1UAUSWPMBiQRpkVfbrrkjmW2ZPkYS/BgrM2/MxwXRvYhc/TQpZX6y5JPe3quQg==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^8.12.0", "filter-obj": "^5.0.0", @@ -37250,9 +36100,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/framework-info/node_modules/ajv": { "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -37266,9 +36115,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/framework-info/node_modules/find-up": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^7.1.0", "path-exists": "^5.0.0" @@ -37282,15 +36130,13 @@ }, "node_modules/netlify-cli/node_modules/@netlify/framework-info/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/@netlify/framework-info/node_modules/p-filter": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-3.0.0.tgz", - "integrity": "sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==", "dev": true, + "license": "MIT", "dependencies": { "p-map": "^5.1.0" }, @@ -37303,9 +36149,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/framework-info/node_modules/p-limit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^1.0.0" }, @@ -37318,9 +36163,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/framework-info/node_modules/p-locate": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^4.0.0" }, @@ -37333,9 +36177,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/framework-info/node_modules/p-map": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", - "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", "dev": true, + "license": "MIT", "dependencies": { "aggregate-error": "^4.0.0" }, @@ -37348,18 +36191,16 @@ }, "node_modules/netlify-cli/node_modules/@netlify/framework-info/node_modules/path-exists": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/netlify-cli/node_modules/@netlify/framework-info/node_modules/yocto-queue": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.20" }, @@ -37369,9 +36210,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/functions-utils": { "version": "5.2.70", - "resolved": "https://registry.npmjs.org/@netlify/functions-utils/-/functions-utils-5.2.70.tgz", - "integrity": "sha512-7SSLuLmvcyIs4vGVyp4K1Vs9fvwNMmpwjBSLOYqrC89rGKFA9zJ7QWgHxtoYF+7I1zf91vRQpz1oiir8kW9F1g==", "dev": true, + "license": "MIT", "dependencies": { "@netlify/zip-it-and-ship-it": "9.37.2", "cpy": "^9.0.0", @@ -37383,18 +36223,16 @@ }, "node_modules/netlify-cli/node_modules/@netlify/functions-utils/node_modules/path-exists": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/netlify-cli/node_modules/@netlify/git-utils": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@netlify/git-utils/-/git-utils-5.1.1.tgz", - "integrity": "sha512-oyHieuTZH3rKTmg7EKpGEGa28IFxta2oXuVwpPJI/FJAtBje3UE+yko0eDjNufgm3AyGa8G77trUxgBhInAYuw==", "dev": true, + "license": "MIT", "dependencies": { "execa": "^6.0.0", "map-obj": "^5.0.0", @@ -37408,9 +36246,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/git-utils/node_modules/execa": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", - "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.1", @@ -37431,18 +36268,16 @@ }, "node_modules/netlify-cli/node_modules/@netlify/git-utils/node_modules/human-signals": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", - "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.20.0" } }, "node_modules/netlify-cli/node_modules/@netlify/git-utils/node_modules/is-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -37452,9 +36287,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/git-utils/node_modules/map-obj": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-5.0.2.tgz", - "integrity": "sha512-K6K2NgKnTXimT3779/4KxSvobxOtMmx1LBZ3NwRxT/MDIR3Br/fQ4Q+WCX5QxjyUR8zg5+RV9Tbf2c5pAWTD2A==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -37464,9 +36298,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/git-utils/node_modules/npm-run-path": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^4.0.0" }, @@ -37479,9 +36312,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/git-utils/node_modules/onetime": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^4.0.0" }, @@ -37494,18 +36326,16 @@ }, "node_modules/netlify-cli/node_modules/@netlify/git-utils/node_modules/path-exists": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/netlify-cli/node_modules/@netlify/git-utils/node_modules/strip-final-newline": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -37515,9 +36345,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/local-functions-proxy": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy/-/local-functions-proxy-1.1.1.tgz", - "integrity": "sha512-eXSsayLT6PMvjzFQpjC9nkg2Otc3lZ5GoYele9M6f8PmsvWpaXRhwjNQ0NYhQQ2UZbLMIiO2dH8dbRsT3bMkFw==", "dev": true, + "license": "MIT", "optionalDependencies": { "@netlify/local-functions-proxy-darwin-arm64": "1.1.1", "@netlify/local-functions-proxy-darwin-x64": "1.1.1", @@ -37535,12 +36364,11 @@ }, "node_modules/netlify-cli/node_modules/@netlify/local-functions-proxy-darwin-arm64": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-darwin-arm64/-/local-functions-proxy-darwin-arm64-1.1.1.tgz", - "integrity": "sha512-lphJ9qqZ3glnKWEqlemU1LMqXxtJ/tKf7VzakqqyjigwLscXSZSb6fupSjQfd4tR1xqxA76ylws/2HDhc/gs+Q==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -37549,205 +36377,26 @@ "local-functions-proxy": "bin/local-functions-proxy" } }, - "node_modules/netlify-cli/node_modules/@netlify/local-functions-proxy-darwin-x64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-darwin-x64/-/local-functions-proxy-darwin-x64-1.1.1.tgz", - "integrity": "sha512-4CRB0H+dXZzoEklq5Jpmg+chizXlVwCko94d8+UHWCgy/bA3M/rU/BJ8OLZisnJaAktHoeLABKtcLOhtRHpxZQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "bin": { - "local-functions-proxy": "bin/local-functions-proxy" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/local-functions-proxy-freebsd-arm64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-freebsd-arm64/-/local-functions-proxy-freebsd-arm64-1.1.1.tgz", - "integrity": "sha512-u13lWTVMJDF0A6jX7V4N3HYGTIHLe5d1Z2wT43fSIHwXkTs6UXi72cGSraisajG+5JFIwHfPr7asw5vxFC0P9w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "bin": { - "local-functions-proxy": "bin/local-functions-proxy" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/local-functions-proxy-freebsd-x64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-freebsd-x64/-/local-functions-proxy-freebsd-x64-1.1.1.tgz", - "integrity": "sha512-g5xw4xATK5YDzvXtzJ8S1qSkWBiyF8VVRehXPMOAMzpGjCX86twYhWp8rbAk7yA1zBWmmWrWNA2Odq/MgpKJJg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "bin": { - "local-functions-proxy": "bin/local-functions-proxy" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/local-functions-proxy-linux-arm": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-linux-arm/-/local-functions-proxy-linux-arm-1.1.1.tgz", - "integrity": "sha512-YsTpL+AbHwQrfHWXmKnwUrJBjoUON363nr6jUG1ueYnpbbv6wTUA7gI5snMi/gkGpqFusBthAA7C30e6bixfiA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "bin": { - "local-functions-proxy": "bin/local-functions-proxy" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/local-functions-proxy-linux-arm64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-linux-arm64/-/local-functions-proxy-linux-arm64-1.1.1.tgz", - "integrity": "sha512-dPGu1H5n8na7mBKxiXQ+FNmthDAiA57wqgpm5JMAHtcdcmRvcXwJkwWVGvwfj8ShhYJHQaSaS9oPgO+mpKkgmA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "bin": { - "local-functions-proxy": "bin/local-functions-proxy" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/local-functions-proxy-linux-ia32": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-linux-ia32/-/local-functions-proxy-linux-ia32-1.1.1.tgz", - "integrity": "sha512-Ra0FlXDrmPRaq+rYH3/ttkXSrwk1D5Zx/Na7UPfJZxMY7Qo5iY4bgi/FuzjzWzlp0uuKZOhYOYzYzsIIyrSvmw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "bin": { - "local-functions-proxy": "bin/local-functions-proxy" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/local-functions-proxy-linux-ppc64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-linux-ppc64/-/local-functions-proxy-linux-ppc64-1.1.1.tgz", - "integrity": "sha512-oXf1satwqwUUxz7LHS1BxbRqc4FFEKIDFTls04eXiLReFR3sqv9H/QuYNTCCDMuRcCOd92qKyDfATdnxT4HR8w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "bin": { - "local-functions-proxy": "bin/local-functions-proxy" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/local-functions-proxy-linux-x64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-linux-x64/-/local-functions-proxy-linux-x64-1.1.1.tgz", - "integrity": "sha512-bS3u4JuDg/eC0y4Na3i/29JBOxrdUvsK5JSjHfzUeZEbOcuXYf4KavTpHS5uikdvTgyczoSrvbmQJ5m0FLXfLA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "bin": { - "local-functions-proxy": "bin/local-functions-proxy" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/local-functions-proxy-openbsd-x64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-openbsd-x64/-/local-functions-proxy-openbsd-x64-1.1.1.tgz", - "integrity": "sha512-1xLef/kLRNkBTXJ+ZGoRFcwsFxd/B2H3oeJZyXaZ3CN5umd9Mv9wZuAD74NuMt/535yRva8jtAJqvEgl9xMSdA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "bin": { - "local-functions-proxy": "bin/local-functions-proxy" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/local-functions-proxy-win32-ia32": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-win32-ia32/-/local-functions-proxy-win32-ia32-1.1.1.tgz", - "integrity": "sha512-4IOMDBxp2f8VbIkhZ85zGNDrZR4ey8d68fCMSOIwitjsnKav35YrCf8UmAh3UR6CNIRJdJL4MW1GYePJ7iJ8uA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "bin": { - "local-functions-proxy.exe": "bin/local-functions-proxy.exe" - } - }, - "node_modules/netlify-cli/node_modules/@netlify/local-functions-proxy-win32-x64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-win32-x64/-/local-functions-proxy-win32-x64-1.1.1.tgz", - "integrity": "sha512-VCBXBJWBujVxyo5f+3r8ovLc9I7wJqpmgDn3ixs1fvdrER5Ac+SzYwYH4mUug9HI08mzTSAKZErzKeuadSez3w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "bin": { - "local-functions-proxy.exe": "bin/local-functions-proxy.exe" - } - }, "node_modules/netlify-cli/node_modules/@netlify/node-cookies": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@netlify/node-cookies/-/node-cookies-0.1.0.tgz", - "integrity": "sha512-OAs1xG+FfLX0LoRASpqzVntVV/RpYkgpI0VrUnw2u0Q1qiZUzcPffxRK8HF3gc4GjuhG5ahOEMJ9bswBiZPq0g==", "dev": true, + "license": "MIT", "engines": { "node": "^14.16.0 || >=16.0.0" } }, "node_modules/netlify-cli/node_modules/@netlify/open-api": { "version": "2.33.1", - "resolved": "https://registry.npmjs.org/@netlify/open-api/-/open-api-2.33.1.tgz", - "integrity": "sha512-EP5nVae2sRSg8orieT/PvmykIUkPWr/Qzk2vj1QIUAPeMbR8JM3Aq+W/4fK9m0Yq+1CZ3sWeNy/r6nsxLqnXVg==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/netlify-cli/node_modules/@netlify/opentelemetry-utils": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@netlify/opentelemetry-utils/-/opentelemetry-utils-1.2.1.tgz", - "integrity": "sha512-A6nQBvUn/avHQopLOOjX8rY2eua//jufbx4NZZODACEHtfXAEmOjCoDe2m+cQPRq+jNa98nvCy/sJh2RwuCQog==", "dev": true, + "license": "MIT", "engines": { "node": ">=18.0.0" }, @@ -37757,18 +36406,16 @@ }, "node_modules/netlify-cli/node_modules/@netlify/plugins-list": { "version": "6.80.0", - "resolved": "https://registry.npmjs.org/@netlify/plugins-list/-/plugins-list-6.80.0.tgz", - "integrity": "sha512-bCKLI51UZ70ziIWsf2nvgPd4XuG6m8AMCoHiYtl/BSsiaSBfmryZnTTqdRXerH09tBRpbPPwzaEgUJwyU9o8Qw==", "dev": true, + "license": "MIT", "engines": { "node": "^14.14.0 || >=16.0.0" } }, "node_modules/netlify-cli/node_modules/@netlify/run-utils": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@netlify/run-utils/-/run-utils-5.1.1.tgz", - "integrity": "sha512-V2B8ZB19heVKa715uOeDkztxLH7uaqZ+9U5fV7BRzbQ2514DO5Vxj9hG0irzuRLfZXZZjp/chPUesv4VVsce/A==", "dev": true, + "license": "MIT", "dependencies": { "execa": "^6.0.0" }, @@ -37778,9 +36425,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/run-utils/node_modules/execa": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", - "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.1", @@ -37801,18 +36447,16 @@ }, "node_modules/netlify-cli/node_modules/@netlify/run-utils/node_modules/human-signals": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", - "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.20.0" } }, "node_modules/netlify-cli/node_modules/@netlify/run-utils/node_modules/is-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -37822,9 +36466,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/run-utils/node_modules/npm-run-path": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^4.0.0" }, @@ -37837,9 +36480,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/run-utils/node_modules/onetime": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^4.0.0" }, @@ -37852,9 +36494,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/run-utils/node_modules/strip-final-newline": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -37864,9 +36505,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/zip-it-and-ship-it": { "version": "9.37.2", - "resolved": "https://registry.npmjs.org/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-9.37.2.tgz", - "integrity": "sha512-ZOibSzp4ICeNgBu66UjVnRkEUpxZ59OtvR2Wk0bZxU708jCgcYzyQfIXrWqDHNq3QTFjFpZVuhBe6CTSOZkPjg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.22.5", "@babel/types": "7.24.6", @@ -37912,9 +36552,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/zip-it-and-ship-it/node_modules/@netlify/serverless-functions-api": { "version": "1.18.5", - "resolved": "https://registry.npmjs.org/@netlify/serverless-functions-api/-/serverless-functions-api-1.18.5.tgz", - "integrity": "sha512-2/LCG0b7xPee9uVMh422h4TPQdT5/Uk4o2H9L//sKDp8PLlvEdJJkagmWqBOYDtGMId/aO5KyZ/iF/zRA7Nq5A==", "dev": true, + "license": "MIT", "dependencies": { "@netlify/node-cookies": "^0.1.0", "urlpattern-polyfill": "8.0.2" @@ -37925,18 +36564,16 @@ }, "node_modules/netlify-cli/node_modules/@netlify/zip-it-and-ship-it/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/netlify-cli/node_modules/@netlify/zip-it-and-ship-it/node_modules/execa": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", - "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.1", @@ -37957,9 +36594,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/zip-it-and-ship-it/node_modules/find-up": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^7.1.0", "path-exists": "^5.0.0" @@ -37973,10 +36609,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/zip-it-and-ship-it/node_modules/glob": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -37993,9 +36627,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/zip-it-and-ship-it/node_modules/glob/node_modules/minimatch": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -38005,18 +36638,16 @@ }, "node_modules/netlify-cli/node_modules/@netlify/zip-it-and-ship-it/node_modules/human-signals": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", - "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.20.0" } }, "node_modules/netlify-cli/node_modules/@netlify/zip-it-and-ship-it/node_modules/is-path-inside": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", - "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -38026,9 +36657,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/zip-it-and-ship-it/node_modules/is-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -38038,9 +36668,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/zip-it-and-ship-it/node_modules/minimatch": { "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -38053,9 +36682,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/zip-it-and-ship-it/node_modules/npm-run-path": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^4.0.0" }, @@ -38068,9 +36696,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/zip-it-and-ship-it/node_modules/onetime": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^4.0.0" }, @@ -38083,9 +36710,8 @@ }, "node_modules/netlify-cli/node_modules/@netlify/zip-it-and-ship-it/node_modules/p-map": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", - "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", "dev": true, + "license": "MIT", "dependencies": { "aggregate-error": "^4.0.0" }, @@ -38098,18 +36724,16 @@ }, "node_modules/netlify-cli/node_modules/@netlify/zip-it-and-ship-it/node_modules/path-exists": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/netlify-cli/node_modules/@netlify/zip-it-and-ship-it/node_modules/strip-final-newline": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -38119,9 +36743,8 @@ }, "node_modules/netlify-cli/node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -38132,18 +36755,16 @@ }, "node_modules/netlify-cli/node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/netlify-cli/node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -38154,18 +36775,16 @@ }, "node_modules/netlify-cli/node_modules/@octokit/auth-token": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", - "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 18" } }, "node_modules/netlify-cli/node_modules/@octokit/core": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.0.tgz", - "integrity": "sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.1.0", @@ -38181,9 +36800,8 @@ }, "node_modules/netlify-cli/node_modules/@octokit/endpoint": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.5.tgz", - "integrity": "sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" @@ -38194,9 +36812,8 @@ }, "node_modules/netlify-cli/node_modules/@octokit/graphql": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.0.tgz", - "integrity": "sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/request": "^8.3.0", "@octokit/types": "^13.0.0", @@ -38208,15 +36825,13 @@ }, "node_modules/netlify-cli/node_modules/@octokit/openapi-types": { "version": "22.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", - "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/@octokit/plugin-paginate-rest": { "version": "11.3.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.1.tgz", - "integrity": "sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/types": "^13.5.0" }, @@ -38229,9 +36844,8 @@ }, "node_modules/netlify-cli/node_modules/@octokit/plugin-request-log": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.1.tgz", - "integrity": "sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 18" }, @@ -38241,9 +36855,8 @@ }, "node_modules/netlify-cli/node_modules/@octokit/plugin-rest-endpoint-methods": { "version": "13.2.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.2.tgz", - "integrity": "sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/types": "^13.5.0" }, @@ -38256,9 +36869,8 @@ }, "node_modules/netlify-cli/node_modules/@octokit/request": { "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.0.tgz", - "integrity": "sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/endpoint": "^9.0.1", "@octokit/request-error": "^5.1.0", @@ -38271,9 +36883,8 @@ }, "node_modules/netlify-cli/node_modules/@octokit/request-error": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.0.tgz", - "integrity": "sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/types": "^13.1.0", "deprecation": "^2.0.0", @@ -38285,9 +36896,8 @@ }, "node_modules/netlify-cli/node_modules/@octokit/rest": { "version": "20.1.1", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.1.1.tgz", - "integrity": "sha512-MB4AYDsM5jhIHro/dq4ix1iWTLGToIGk6cWF5L6vanFaMble5jTX/UBQyiv05HsWnwUtY8JrfHy2LWfKwihqMw==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/core": "^5.0.2", "@octokit/plugin-paginate-rest": "11.3.1", @@ -38300,28 +36910,24 @@ }, "node_modules/netlify-cli/node_modules/@octokit/types": { "version": "13.5.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz", - "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/openapi-types": "^22.2.0" } }, "node_modules/netlify-cli/node_modules/@opentelemetry/api": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.8.0.tgz", - "integrity": "sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=8.0.0" } }, "node_modules/netlify-cli/node_modules/@parcel/watcher": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.4.0.tgz", - "integrity": "sha512-XJLGVL0DEclX5pcWa2N9SX1jCGTDd8l972biNooLFtjneuGqodupPQh6XseXIBBeVIMaaJ7bTcs3qGvXwsp4vg==", "dev": true, - "hasInstallScript": true, + "license": "MIT", "dependencies": { "detect-libc": "^1.0.3", "is-glob": "^4.0.3", @@ -38350,34 +36956,13 @@ "@parcel/watcher-win32-x64": "2.4.0" } }, - "node_modules/netlify-cli/node_modules/@parcel/watcher-android-arm64": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.0.tgz", - "integrity": "sha512-+fPtO/GsbYX1LJnCYCaDVT3EOBjvSFdQN9Mrzh9zWAOOfvidPWyScTrHIZHHfJBvlHzNA0Gy0U3NXFA/M7PHUA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, "node_modules/netlify-cli/node_modules/@parcel/watcher-darwin-arm64": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.0.tgz", - "integrity": "sha512-T/At5pansFuQ8VJLRx0C6C87cgfqIYhW2N/kBfLCUvDhCah0EnLLwaD/6MW3ux+rpgkpQAnMELOCTKlbwncwiA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -38390,154 +36975,13 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/netlify-cli/node_modules/@parcel/watcher-darwin-x64": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.0.tgz", - "integrity": "sha512-vZMv9jl+szz5YLsSqEGCMSllBl1gU1snfbRL5ysJU03MEa6gkVy9OMcvXV1j4g0++jHEcvzhs3Z3LpeEbVmY6Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/netlify-cli/node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.0.tgz", - "integrity": "sha512-dHTRMIplPDT1M0+BkXjtMN+qLtqq24sLDUhmU+UxxLP2TEY2k8GIoqIJiVrGWGomdWsy5IO27aDV1vWyQ6gfHA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/netlify-cli/node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.0.tgz", - "integrity": "sha512-9NQXD+qk46RwATNC3/UB7HWurscY18CnAPMTFcI9Y8CTbtm63/eex1SNt+BHFinEQuLBjaZwR2Lp+n7pmEJPpQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/netlify-cli/node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.0.tgz", - "integrity": "sha512-QuJTAQdsd7PFW9jNGaV9Pw+ZMWV9wKThEzzlY3Lhnnwy7iW23qtQFPql8iEaSFMCVI5StNNmONUopk+MFKpiKg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/netlify-cli/node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.0.tgz", - "integrity": "sha512-oyN+uA9xcTDo/45bwsd6TFHa7Lc7hKujyMlvwrCLvSckvWogndCEoVYFNfZ6JJ2KNL/6fFiGPcbjp8jJmEh5Ng==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/netlify-cli/node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.0.tgz", - "integrity": "sha512-KphV8awJmxU3q52JQvJot0QMu07CIyEjV+2Tb2ZtbucEgqyRcxOBDMsqp1JNq5nuDXtcCC0uHQICeiEz38dPBQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/netlify-cli/node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.0.tgz", - "integrity": "sha512-7jzcOonpXNWcSijPpKD5IbC6xC7yTibjJw9jviVzZostYLGxbz8LDJLUnLzLzhASPlPGgpeKLtFUMjAAzM+gSA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, "node_modules/netlify-cli/node_modules/@parcel/watcher-wasm": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-wasm/-/watcher-wasm-2.4.0.tgz", - "integrity": "sha512-MNgQ4WCbBybqQ97KwR/hqJGYTg3+s8qHpgIyFWB2qJOBvoJWbXuJGmm4ZkPLq2bMaANqCZqrXwmKYagZTkMKZA==", "bundleDependencies": [ "napi-wasm" ], "dev": true, + "license": "MIT", "dependencies": { "is-glob": "^4.0.3", "micromatch": "^4.0.5", @@ -38557,71 +37001,10 @@ "inBundle": true, "license": "MIT" }, - "node_modules/netlify-cli/node_modules/@parcel/watcher-win32-arm64": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.0.tgz", - "integrity": "sha512-NOej2lqlq8bQNYhUMnOD0nwvNql8ToQF+1Zhi9ULZoG+XTtJ9hNnCFfyICxoZLXor4bBPTOnzs/aVVoefYnjIg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/netlify-cli/node_modules/@parcel/watcher-win32-ia32": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.0.tgz", - "integrity": "sha512-IO/nM+K2YD/iwjWAfHFMBPz4Zqn6qBDqZxY4j2n9s+4+OuTSRM/y/irksnuqcspom5DjkSeF9d0YbO+qpys+JA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/netlify-cli/node_modules/@parcel/watcher-win32-x64": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.0.tgz", - "integrity": "sha512-pAUyUVjfFjWaf/pShmJpJmNxZhbMvJASUpdes9jL6bTEJ+gDxPRSpXTIemNyNsb9AtbiGXs9XduP1reThmd+dA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, "node_modules/netlify-cli/node_modules/@parcel/watcher/node_modules/detect-libc": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", "dev": true, + "license": "Apache-2.0", "bin": { "detect-libc": "bin/detect-libc.js" }, @@ -38631,9 +37014,8 @@ }, "node_modules/netlify-cli/node_modules/@pkgjs/parseargs": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=14" @@ -38641,18 +37023,16 @@ }, "node_modules/netlify-cli/node_modules/@pnpm/config.env-replace": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.22.0" } }, "node_modules/netlify-cli/node_modules/@pnpm/network.ca-file": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.1.tgz", - "integrity": "sha512-gkINruT2KUhZLTaiHxwCOh1O4NVnFT0wLjWFBHmTz9vpKag/C/noIMJXBxFe4F0mYpUVX2puLwAieLYFg2NvoA==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "4.2.10" }, @@ -38662,9 +37042,8 @@ }, "node_modules/netlify-cli/node_modules/@pnpm/npm-conf": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.0.tgz", - "integrity": "sha512-roLI1ul/GwzwcfcVpZYPdrgW2W/drLriObl1h+yLF5syc8/5ULWw2ALbCHUWF+4YltIqA3xFSbG4IwyJz37e9g==", "dev": true, + "license": "MIT", "dependencies": { "@pnpm/config.env-replace": "^1.1.0", "@pnpm/network.ca-file": "^1.0.1", @@ -38676,9 +37055,8 @@ }, "node_modules/netlify-cli/node_modules/@rollup/pluginutils": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", "dev": true, + "license": "MIT", "dependencies": { "estree-walker": "^2.0.1", "picomatch": "^2.2.2" @@ -38689,9 +37067,8 @@ }, "node_modules/netlify-cli/node_modules/@sindresorhus/is": { "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -38701,9 +37078,8 @@ }, "node_modules/netlify-cli/node_modules/@sindresorhus/slugify": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-2.2.1.tgz", - "integrity": "sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw==", "dev": true, + "license": "MIT", "dependencies": { "@sindresorhus/transliterate": "^1.0.0", "escape-string-regexp": "^5.0.0" @@ -38717,9 +37093,8 @@ }, "node_modules/netlify-cli/node_modules/@sindresorhus/slugify/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -38729,9 +37104,8 @@ }, "node_modules/netlify-cli/node_modules/@sindresorhus/transliterate": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-1.5.0.tgz", - "integrity": "sha512-/sfSkoNelLq5riqNRp5uBjHIKBi1MWZk9ubRT1WiBQuTfmDf7BeQkph2DJzRB83QagMPHk2VDjuvpy0VuwyzdA==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^5.0.0", "lodash.deburr": "^4.1.0" @@ -38745,9 +37119,8 @@ }, "node_modules/netlify-cli/node_modules/@sindresorhus/transliterate/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -38757,9 +37130,8 @@ }, "node_modules/netlify-cli/node_modules/@szmarczak/http-timer": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", "dev": true, + "license": "MIT", "dependencies": { "defer-to-connect": "^2.0.1" }, @@ -38769,48 +37141,41 @@ }, "node_modules/netlify-cli/node_modules/@tokenizer/token": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/@trysound/sax": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10.13.0" } }, "node_modules/netlify-cli/node_modules/@tsconfig/node10": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/@tsconfig/node12": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/@tsconfig/node14": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/@tsconfig/node16": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/@types/body-parser": { "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", "dev": true, + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -38820,9 +37185,8 @@ }, "node_modules/netlify-cli/node_modules/@types/connect": { "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "dev": true, + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -38831,9 +37195,8 @@ }, "node_modules/netlify-cli/node_modules/@types/express": { "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", "dev": true, + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -38845,9 +37208,8 @@ }, "node_modules/netlify-cli/node_modules/@types/express-serve-static-core": { "version": "4.17.28", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", - "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", "dev": true, + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -38858,93 +37220,81 @@ }, "node_modules/netlify-cli/node_modules/@types/http-cache-semantics": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/@types/http-proxy": { "version": "1.17.8", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", - "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/netlify-cli/node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/@types/istanbul-lib-report": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/netlify-cli/node_modules/@types/istanbul-reports": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/netlify-cli/node_modules/@types/mime": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true, + "license": "MIT", "optional": true, "peer": true }, "node_modules/netlify-cli/node_modules/@types/node": { "version": "20.14.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.8.tgz", - "integrity": "sha512-DO+2/jZinXfROG7j7WKFn/3C6nFwxy2lLpgLjEXJz+0XKphZlTLJ14mo8Vfg8X5BWN6XjyESXq+LcYdT7tR3bA==", "dev": true, + "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/netlify-cli/node_modules/@types/normalize-package-data": { "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/@types/qs": { "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", "dev": true, + "license": "MIT", "optional": true, "peer": true }, "node_modules/netlify-cli/node_modules/@types/range-parser": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", "dev": true, + "license": "MIT", "optional": true, "peer": true }, "node_modules/netlify-cli/node_modules/@types/retry": { "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", - "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/@types/serve-static": { "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", "dev": true, + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -38954,15 +37304,13 @@ }, "node_modules/netlify-cli/node_modules/@types/yargs-parser": { "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/@types/yauzl": { "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "@types/node": "*" @@ -38970,9 +37318,8 @@ }, "node_modules/netlify-cli/node_modules/@vercel/nft": { "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.27.2.tgz", - "integrity": "sha512-7LeioS1yE5hwPpQfD3DdH04tuugKjo5KrJk3yK5kAI3Lh76iSsK/ezoFQfzuT08X3ZASQOd1y9ePjLNI9+TxTQ==", "dev": true, + "license": "MIT", "dependencies": { "@mapbox/node-pre-gyp": "^1.0.5", "@rollup/pluginutils": "^4.0.0", @@ -38996,9 +37343,8 @@ }, "node_modules/netlify-cli/node_modules/@xhmikosr/archive-type": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@xhmikosr/archive-type/-/archive-type-6.0.1.tgz", - "integrity": "sha512-PB3NeJL8xARZt52yDBupK0dNPn8uIVQDe15qNehUpoeeLWCZyAOam4vGXnoZGz2N9D1VXtjievJuCsXam2TmbQ==", "dev": true, + "license": "MIT", "dependencies": { "file-type": "^18.5.0" }, @@ -39008,9 +37354,8 @@ }, "node_modules/netlify-cli/node_modules/@xhmikosr/decompress": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@xhmikosr/decompress/-/decompress-9.0.1.tgz", - "integrity": "sha512-9Lvlt6Qdpo9SaRQyRIXCo3lgU++eMZ68lzgjcTwtuKDrlwT635+5zsHZ1yrSx/Blc5IDuVLlPkBPj5CZkx+2+Q==", "dev": true, + "license": "MIT", "dependencies": { "@xhmikosr/decompress-tar": "^7.0.0", "@xhmikosr/decompress-tarbz2": "^7.0.0", @@ -39026,9 +37371,8 @@ }, "node_modules/netlify-cli/node_modules/@xhmikosr/decompress-tar": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@xhmikosr/decompress-tar/-/decompress-tar-7.0.0.tgz", - "integrity": "sha512-kyWf2hybtQVbWtB+FdRyOT+jyR5jxCNZPLqvQGB7djZj75lrpLUPEmRbyo86AtJ5OEtivpYaNWjCkqSJ8xtRWw==", "dev": true, + "license": "MIT", "dependencies": { "file-type": "^18.5.0", "is-stream": "^3.0.0", @@ -39040,9 +37384,8 @@ }, "node_modules/netlify-cli/node_modules/@xhmikosr/decompress-tar/node_modules/is-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -39052,9 +37395,8 @@ }, "node_modules/netlify-cli/node_modules/@xhmikosr/decompress-tarbz2": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@xhmikosr/decompress-tarbz2/-/decompress-tarbz2-7.0.0.tgz", - "integrity": "sha512-3QnjipYkRgh3Dee1MWDgKmANWxOQBVN4e1IwiGNe2fHYfMYTeSkVvWREt87UIoSucKUh3E95v8uGFttgTknZcA==", "dev": true, + "license": "MIT", "dependencies": { "@xhmikosr/decompress-tar": "^7.0.0", "file-type": "^18.5.0", @@ -39068,9 +37410,8 @@ }, "node_modules/netlify-cli/node_modules/@xhmikosr/decompress-tarbz2/node_modules/is-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -39080,9 +37421,8 @@ }, "node_modules/netlify-cli/node_modules/@xhmikosr/decompress-targz": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@xhmikosr/decompress-targz/-/decompress-targz-7.0.0.tgz", - "integrity": "sha512-7BNHJl92g9OLhw89zqcFS67V1LAtm4Ex02j6OiQzuE8P7Yy9lQcyBuEL3x6v436grLdL+BcFjgbmhWxnem4GHw==", "dev": true, + "license": "MIT", "dependencies": { "@xhmikosr/decompress-tar": "^7.0.0", "file-type": "^18.5.0", @@ -39094,9 +37434,8 @@ }, "node_modules/netlify-cli/node_modules/@xhmikosr/decompress-targz/node_modules/is-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -39106,9 +37445,8 @@ }, "node_modules/netlify-cli/node_modules/@xhmikosr/decompress-unzip": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@xhmikosr/decompress-unzip/-/decompress-unzip-6.0.0.tgz", - "integrity": "sha512-R1HAkjXLS7RAL74YFLxYY9zYflCcYGssld9KKFDu87PnJ4h4btdhzXfSC8J5i5A2njH3oYIoCzx03RIGTH07Sg==", "dev": true, + "license": "MIT", "dependencies": { "file-type": "^18.5.0", "get-stream": "^6.0.1", @@ -39120,15 +37458,13 @@ }, "node_modules/netlify-cli/node_modules/@xhmikosr/decompress/node_modules/graceful-fs": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/@xhmikosr/decompress/node_modules/make-dir": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -39141,9 +37477,8 @@ }, "node_modules/netlify-cli/node_modules/@xhmikosr/downloader": { "version": "13.0.1", - "resolved": "https://registry.npmjs.org/@xhmikosr/downloader/-/downloader-13.0.1.tgz", - "integrity": "sha512-mBvWew1kZJHfNQVVfVllMjUDwCGN9apPa0t4/z1zaUJ9MzpXjRL3w8fsfJKB8gHN/h4rik9HneKfDbh2fErN+w==", "dev": true, + "license": "MIT", "dependencies": { "@xhmikosr/archive-type": "^6.0.1", "@xhmikosr/decompress": "^9.0.1", @@ -39162,9 +37497,8 @@ }, "node_modules/netlify-cli/node_modules/@xhmikosr/downloader/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -39174,9 +37508,8 @@ }, "node_modules/netlify-cli/node_modules/@xhmikosr/downloader/node_modules/filename-reserved-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz", - "integrity": "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -39186,9 +37519,8 @@ }, "node_modules/netlify-cli/node_modules/@xhmikosr/downloader/node_modules/filenamify": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-5.1.1.tgz", - "integrity": "sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA==", "dev": true, + "license": "MIT", "dependencies": { "filename-reserved-regex": "^3.0.0", "strip-outer": "^2.0.0", @@ -39203,9 +37535,8 @@ }, "node_modules/netlify-cli/node_modules/@xhmikosr/downloader/node_modules/strip-outer": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-2.0.0.tgz", - "integrity": "sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -39215,9 +37546,8 @@ }, "node_modules/netlify-cli/node_modules/@xhmikosr/downloader/node_modules/trim-repeated": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-2.0.0.tgz", - "integrity": "sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^5.0.0" }, @@ -39227,15 +37557,13 @@ }, "node_modules/netlify-cli/node_modules/abbrev": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/abort-controller": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dev": true, + "license": "MIT", "dependencies": { "event-target-shim": "^5.0.0" }, @@ -39245,15 +37573,13 @@ }, "node_modules/netlify-cli/node_modules/abstract-logging": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz", - "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/accepts": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, + "license": "MIT", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -39264,9 +37590,8 @@ }, "node_modules/netlify-cli/node_modules/acorn": { "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -39276,27 +37601,24 @@ }, "node_modules/netlify-cli/node_modules/acorn-import-attributes": { "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^8" } }, "node_modules/netlify-cli/node_modules/acorn-walk": { "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/netlify-cli/node_modules/agent-base": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "4" }, @@ -39306,9 +37628,8 @@ }, "node_modules/netlify-cli/node_modules/aggregate-error": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", - "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", "dev": true, + "license": "MIT", "dependencies": { "clean-stack": "^4.0.0", "indent-string": "^5.0.0" @@ -39322,9 +37643,8 @@ }, "node_modules/netlify-cli/node_modules/aggregate-error/node_modules/indent-string": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -39334,9 +37654,8 @@ }, "node_modules/netlify-cli/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -39351,9 +37670,8 @@ }, "node_modules/netlify-cli/node_modules/ajv-formats": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^8.0.0" }, @@ -39368,9 +37686,8 @@ }, "node_modules/netlify-cli/node_modules/ajv-formats/node_modules/ajv": { "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -39384,15 +37701,13 @@ }, "node_modules/netlify-cli/node_modules/ajv-formats/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/all-node-versions": { "version": "11.3.0", - "resolved": "https://registry.npmjs.org/all-node-versions/-/all-node-versions-11.3.0.tgz", - "integrity": "sha512-psMkc5s3qpr+QMfires9bC4azRYciPWql1wqZKMsYRh1731qefQDH2X4+O19xSBX6u0Ra/8Y5diG6y/fEmqKsw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "fetch-node-website": "^7.3.0", "filter-obj": "^5.1.0", @@ -39409,18 +37724,16 @@ }, "node_modules/netlify-cli/node_modules/all-node-versions/node_modules/path-exists": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/netlify-cli/node_modules/all-node-versions/node_modules/write-file-atomic": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -39431,18 +37744,16 @@ }, "node_modules/netlify-cli/node_modules/ansi-align": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.1.0" } }, "node_modules/netlify-cli/node_modules/ansi-escapes": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", - "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", "dev": true, + "license": "MIT", "dependencies": { "environment": "^1.0.0" }, @@ -39455,18 +37766,16 @@ }, "node_modules/netlify-cli/node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/netlify-cli/node_modules/ansi-styles": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -39476,9 +37785,8 @@ }, "node_modules/netlify-cli/node_modules/ansi-to-html": { "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.7.2.tgz", - "integrity": "sha512-v6MqmEpNlxF+POuyhKkidusCHWWkaLcGRURzivcU3I9tv7k4JVhFcnukrM5Rlk2rUywdZuzYAZ+kbZqWCnfN3g==", "dev": true, + "license": "MIT", "dependencies": { "entities": "^2.2.0" }, @@ -39491,18 +37799,16 @@ }, "node_modules/netlify-cli/node_modules/ansi-to-html/node_modules/entities": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, + "license": "BSD-2-Clause", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/netlify-cli/node_modules/anymatch": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -39513,15 +37819,13 @@ }, "node_modules/netlify-cli/node_modules/aproba": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/archiver": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz", - "integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==", "dev": true, + "license": "MIT", "dependencies": { "archiver-utils": "^5.0.2", "async": "^3.2.4", @@ -39537,9 +37841,8 @@ }, "node_modules/netlify-cli/node_modules/archiver-utils": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz", - "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==", "dev": true, + "license": "MIT", "dependencies": { "glob": "^10.0.0", "graceful-fs": "^4.2.0", @@ -39555,17 +37858,14 @@ }, "node_modules/netlify-cli/node_modules/archiver-utils/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/netlify-cli/node_modules/archiver-utils/node_modules/buffer": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "funding": [ { @@ -39581,6 +37881,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -39588,9 +37889,8 @@ }, "node_modules/netlify-cli/node_modules/archiver-utils/node_modules/glob": { "version": "10.4.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", - "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -39610,9 +37910,8 @@ }, "node_modules/netlify-cli/node_modules/archiver-utils/node_modules/is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -39622,9 +37921,8 @@ }, "node_modules/netlify-cli/node_modules/archiver-utils/node_modules/jackspeak": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.1.2.tgz", - "integrity": "sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -39640,9 +37938,8 @@ }, "node_modules/netlify-cli/node_modules/archiver-utils/node_modules/minimatch": { "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -39655,18 +37952,16 @@ }, "node_modules/netlify-cli/node_modules/archiver-utils/node_modules/minipass": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/netlify-cli/node_modules/archiver-utils/node_modules/readable-stream": { "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", "dev": true, + "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -39680,8 +37975,6 @@ }, "node_modules/netlify-cli/node_modules/archiver-utils/node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -39696,21 +37989,19 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/netlify-cli/node_modules/archiver-utils/node_modules/string_decoder": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/netlify-cli/node_modules/archiver/node_modules/buffer": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "funding": [ { @@ -39726,6 +38017,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -39733,18 +38025,16 @@ }, "node_modules/netlify-cli/node_modules/archiver/node_modules/buffer-crc32": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", - "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0" } }, "node_modules/netlify-cli/node_modules/archiver/node_modules/readable-stream": { "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", "dev": true, + "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -39758,8 +38048,6 @@ }, "node_modules/netlify-cli/node_modules/archiver/node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -39774,28 +38062,26 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/netlify-cli/node_modules/archiver/node_modules/string_decoder": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/netlify-cli/node_modules/archy": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/are-we-there-yet": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", "dev": true, + "license": "ISC", "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" @@ -39806,42 +38092,36 @@ }, "node_modules/netlify-cli/node_modules/arg": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/netlify-cli/node_modules/array-flatten": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/array-timsort": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", - "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/array-union": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/netlify-cli/node_modules/arrify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", - "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -39851,45 +38131,39 @@ }, "node_modules/netlify-cli/node_modules/ascii-table": { "version": "0.0.9", - "resolved": "https://registry.npmjs.org/ascii-table/-/ascii-table-0.0.9.tgz", - "integrity": "sha1-BqZgTWpV1L9BqaR9mHLXp42jHnM=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/ast-module-types": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-5.0.0.tgz", - "integrity": "sha512-JvqziE0Wc0rXQfma0HZC/aY7URXHFuZV84fJRtP8u+lhp0JYCNd5wJzVXP45t0PH0Mej3ynlzvdyITYIu0G4LQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/netlify-cli/node_modules/async": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/async-sema": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz", - "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/atomic-sleep": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", - "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0" } }, "node_modules/netlify-cli/node_modules/avvio": { "version": "8.3.0", - "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.3.0.tgz", - "integrity": "sha512-VBVH0jubFr9LdFASy/vNtm5giTrnbVquWBhT0fyizuNK2rQ7e7ONU2plZQWUNqtE1EmxFEb+kbSkFRkstiaS9Q==", "dev": true, + "license": "MIT", "dependencies": { "@fastify/error": "^3.3.0", "archy": "^1.0.0", @@ -39899,15 +38173,13 @@ }, "node_modules/netlify-cli/node_modules/b4a": { "version": "1.6.4", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", - "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/backoff": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", - "integrity": "sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA==", "dev": true, + "license": "MIT", "dependencies": { "precond": "0.2" }, @@ -39917,14 +38189,11 @@ }, "node_modules/netlify-cli/node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/base64-js": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, "funding": [ { @@ -39939,19 +38208,18 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/netlify-cli/node_modules/before-after-hook": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", - "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/netlify-cli/node_modules/better-ajv-errors": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/better-ajv-errors/-/better-ajv-errors-1.2.0.tgz", - "integrity": "sha512-UW+IsFycygIo7bclP9h5ugkNH8EjCSgqyFB/yQ4Hqqa1OEYDtb0uFIkYE0b6+CjkgJYVM5UKI/pJPxjYe9EZlA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@babel/code-frame": "^7.16.0", "@humanwhocodes/momoa": "^2.0.2", @@ -39968,9 +38236,8 @@ }, "node_modules/netlify-cli/node_modules/better-ajv-errors/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -39983,9 +38250,8 @@ }, "node_modules/netlify-cli/node_modules/better-ajv-errors/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -39999,9 +38265,8 @@ }, "node_modules/netlify-cli/node_modules/better-ajv-errors/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -40011,15 +38276,13 @@ }, "node_modules/netlify-cli/node_modules/better-ajv-errors/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/better-ajv-errors/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -40029,9 +38292,8 @@ }, "node_modules/netlify-cli/node_modules/better-opn": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", - "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", "dev": true, + "license": "MIT", "dependencies": { "open": "^8.0.4" }, @@ -40041,27 +38303,24 @@ }, "node_modules/netlify-cli/node_modules/binary-extensions": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/netlify-cli/node_modules/bindings": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "dev": true, + "license": "MIT", "dependencies": { "file-uri-to-path": "1.0.0" } }, "node_modules/netlify-cli/node_modules/bl": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, + "license": "MIT", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -40070,15 +38329,13 @@ }, "node_modules/netlify-cli/node_modules/blueimp-md5": { "version": "2.19.0", - "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", - "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/body-parser": { "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -40100,27 +38357,24 @@ }, "node_modules/netlify-cli/node_modules/body-parser/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/netlify-cli/node_modules/body-parser/node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/netlify-cli/node_modules/body-parser/node_modules/http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, + "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -40134,21 +38388,18 @@ }, "node_modules/netlify-cli/node_modules/body-parser/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/boolbase": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/boxen": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", - "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", "dev": true, + "license": "MIT", "dependencies": { "ansi-align": "^3.0.1", "camelcase": "^7.0.1", @@ -40168,9 +38419,8 @@ }, "node_modules/netlify-cli/node_modules/boxen/node_modules/camelcase": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", - "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -40180,15 +38430,13 @@ }, "node_modules/netlify-cli/node_modules/boxen/node_modules/emoji-regex": { "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/boxen/node_modules/string-width": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -40203,9 +38451,8 @@ }, "node_modules/netlify-cli/node_modules/boxen/node_modules/wrap-ansi": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -40220,9 +38467,8 @@ }, "node_modules/netlify-cli/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -40230,9 +38476,8 @@ }, "node_modules/netlify-cli/node_modules/braces": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.0.1" }, @@ -40242,8 +38487,6 @@ }, "node_modules/netlify-cli/node_modules/buffer": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -40259,6 +38502,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -40266,30 +38510,26 @@ }, "node_modules/netlify-cli/node_modules/buffer-crc32": { "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, "node_modules/netlify-cli/node_modules/buffer-equal-constant-time": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/netlify-cli/node_modules/buffer-from": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/builtin-modules": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -40299,45 +38539,40 @@ }, "node_modules/netlify-cli/node_modules/builtins": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", - "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.0.0" } }, "node_modules/netlify-cli/node_modules/byline": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", - "integrity": "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/netlify-cli/node_modules/bytes": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/netlify-cli/node_modules/cacheable-lookup": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" } }, "node_modules/netlify-cli/node_modules/cacheable-request": { "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-cache-semantics": "^4.0.2", "get-stream": "^6.0.1", @@ -40353,18 +38588,16 @@ }, "node_modules/netlify-cli/node_modules/cachedir": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", - "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/netlify-cli/node_modules/call-bind": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -40375,8 +38608,6 @@ }, "node_modules/netlify-cli/node_modules/callsite": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", "dev": true, "engines": { "node": "*" @@ -40384,9 +38615,8 @@ }, "node_modules/netlify-cli/node_modules/camelcase": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -40396,9 +38626,8 @@ }, "node_modules/netlify-cli/node_modules/chalk": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -40408,15 +38637,13 @@ }, "node_modules/netlify-cli/node_modules/chardet": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/chokidar": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -40438,17 +38665,14 @@ }, "node_modules/netlify-cli/node_modules/chownr": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/netlify-cli/node_modules/ci-info": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz", - "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==", "dev": true, "funding": [ { @@ -40456,24 +38680,23 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/netlify-cli/node_modules/citty": { "version": "0.1.6", - "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", - "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", "dev": true, + "license": "MIT", "dependencies": { "consola": "^3.2.3" } }, "node_modules/netlify-cli/node_modules/clean-deep": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/clean-deep/-/clean-deep-3.4.0.tgz", - "integrity": "sha512-Lo78NV5ItJL/jl+B5w0BycAisaieJGXK1qYi/9m4SjR8zbqmrUtO7Yhro40wEShGmmxs/aJLI/A+jNhdkXK8mw==", "dev": true, + "license": "MIT", "dependencies": { "lodash.isempty": "^4.4.0", "lodash.isplainobject": "^4.0.6", @@ -40485,9 +38708,8 @@ }, "node_modules/netlify-cli/node_modules/clean-stack": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", - "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "5.0.0" }, @@ -40500,9 +38722,8 @@ }, "node_modules/netlify-cli/node_modules/clean-stack/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -40512,9 +38733,8 @@ }, "node_modules/netlify-cli/node_modules/cli-boxes": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -40524,9 +38744,8 @@ }, "node_modules/netlify-cli/node_modules/cli-cursor": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", "dev": true, + "license": "MIT", "dependencies": { "restore-cursor": "^2.0.0" }, @@ -40536,9 +38755,8 @@ }, "node_modules/netlify-cli/node_modules/cli-progress": { "version": "3.12.0", - "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", - "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==", "dev": true, + "license": "MIT", "dependencies": { "string-width": "^4.2.3" }, @@ -40548,9 +38766,8 @@ }, "node_modules/netlify-cli/node_modules/cli-spinners": { "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -40560,9 +38777,8 @@ }, "node_modules/netlify-cli/node_modules/cli-truncate": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", - "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", "dev": true, + "license": "MIT", "dependencies": { "slice-ansi": "^5.0.0", "string-width": "^7.0.0" @@ -40576,15 +38792,13 @@ }, "node_modules/netlify-cli/node_modules/cli-truncate/node_modules/emoji-regex": { "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/cli-truncate/node_modules/string-width": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -40599,15 +38813,13 @@ }, "node_modules/netlify-cli/node_modules/cli-width": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/clipboardy": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-4.0.0.tgz", - "integrity": "sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==", "dev": true, + "license": "MIT", "dependencies": { "execa": "^8.0.1", "is-wsl": "^3.1.0", @@ -40622,9 +38834,8 @@ }, "node_modules/netlify-cli/node_modules/clipboardy/node_modules/execa": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", @@ -40645,9 +38856,8 @@ }, "node_modules/netlify-cli/node_modules/clipboardy/node_modules/get-stream": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -40657,18 +38867,16 @@ }, "node_modules/netlify-cli/node_modules/clipboardy/node_modules/human-signals": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=16.17.0" } }, "node_modules/netlify-cli/node_modules/clipboardy/node_modules/is-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -40678,9 +38886,8 @@ }, "node_modules/netlify-cli/node_modules/clipboardy/node_modules/npm-run-path": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", - "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^4.0.0" }, @@ -40693,9 +38900,8 @@ }, "node_modules/netlify-cli/node_modules/clipboardy/node_modules/onetime": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^4.0.0" }, @@ -40708,9 +38914,8 @@ }, "node_modules/netlify-cli/node_modules/clipboardy/node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -40720,9 +38925,8 @@ }, "node_modules/netlify-cli/node_modules/clipboardy/node_modules/strip-final-newline": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -40732,18 +38936,16 @@ }, "node_modules/netlify-cli/node_modules/cluster-key-slot": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", - "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=0.10.0" } }, "node_modules/netlify-cli/node_modules/color": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.3", "color-string": "^1.6.0" @@ -40751,24 +38953,21 @@ }, "node_modules/netlify-cli/node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/netlify-cli/node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/color-string": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz", - "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -40776,33 +38975,29 @@ }, "node_modules/netlify-cli/node_modules/color-support": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true, + "license": "ISC", "bin": { "color-support": "bin.js" } }, "node_modules/netlify-cli/node_modules/colorette": { "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/colors": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.1.90" } }, "node_modules/netlify-cli/node_modules/colors-option": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/colors-option/-/colors-option-3.0.0.tgz", - "integrity": "sha512-DP3FpjsiDDvnQC1OJBsdOJZPuy7r0o6sepY2T5M3L/d2nrE23O/ErFkEqyY3ngVL1ZhTj/H0pCMNObZGkEOaaQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "chalk": "^5.0.0", "filter-obj": "^3.0.0", @@ -40815,9 +39010,8 @@ }, "node_modules/netlify-cli/node_modules/colors-option/node_modules/filter-obj": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-3.0.0.tgz", - "integrity": "sha512-oQZM+QmVni8MsYzcq9lgTHD/qeLqaG8XaOPOW7dzuSafVxSUlH1+1ZDefj2OD9f2XsmG5lFl2Euc9NI4jgwFWg==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -40827,9 +39021,8 @@ }, "node_modules/netlify-cli/node_modules/colorspace": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", - "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", "dev": true, + "license": "MIT", "dependencies": { "color": "^3.1.3", "text-hex": "1.0.x" @@ -40837,18 +39030,16 @@ }, "node_modules/netlify-cli/node_modules/commander": { "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/netlify-cli/node_modules/comment-json": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.3.tgz", - "integrity": "sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw==", "dev": true, + "license": "MIT", "dependencies": { "array-timsort": "^1.0.3", "core-util-is": "^1.0.3", @@ -40862,21 +39053,18 @@ }, "node_modules/netlify-cli/node_modules/comment-json/node_modules/core-util-is": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/common-path-prefix": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/compress-commons": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz", - "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==", "dev": true, + "license": "MIT", "dependencies": { "crc-32": "^1.2.0", "crc32-stream": "^6.0.0", @@ -40890,8 +39078,6 @@ }, "node_modules/netlify-cli/node_modules/compress-commons/node_modules/buffer": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "funding": [ { @@ -40907,6 +39093,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -40914,9 +39101,8 @@ }, "node_modules/netlify-cli/node_modules/compress-commons/node_modules/is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -40926,9 +39112,8 @@ }, "node_modules/netlify-cli/node_modules/compress-commons/node_modules/readable-stream": { "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", "dev": true, + "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -40942,8 +39127,6 @@ }, "node_modules/netlify-cli/node_modules/compress-commons/node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -40958,28 +39141,26 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/netlify-cli/node_modules/compress-commons/node_modules/string_decoder": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/netlify-cli/node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/concordance": { "version": "5.0.4", - "resolved": "https://registry.npmjs.org/concordance/-/concordance-5.0.4.tgz", - "integrity": "sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==", "dev": true, + "license": "ISC", "dependencies": { "date-time": "^3.1.0", "esutils": "^2.0.3", @@ -40996,9 +39177,8 @@ }, "node_modules/netlify-cli/node_modules/config-chain": { "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", "dev": true, + "license": "MIT", "dependencies": { "ini": "^1.3.4", "proto-list": "~1.2.1" @@ -41006,15 +39186,13 @@ }, "node_modules/netlify-cli/node_modules/config-chain/node_modules/ini": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/configstore": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", - "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "dot-prop": "^6.0.1", "graceful-fs": "^4.2.6", @@ -41031,9 +39209,8 @@ }, "node_modules/netlify-cli/node_modules/configstore/node_modules/dot-prop": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", "dev": true, + "license": "MIT", "dependencies": { "is-obj": "^2.0.0" }, @@ -41046,9 +39223,8 @@ }, "node_modules/netlify-cli/node_modules/configstore/node_modules/write-file-atomic": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", @@ -41058,24 +39234,21 @@ }, "node_modules/netlify-cli/node_modules/consola": { "version": "3.2.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", - "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", "dev": true, + "license": "MIT", "engines": { "node": "^14.18.0 || >=16.10.0" } }, "node_modules/netlify-cli/node_modules/console-control-strings": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/content-disposition": { "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -41085,8 +39258,6 @@ }, "node_modules/netlify-cli/node_modules/content-disposition/node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -41101,49 +39272,44 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/netlify-cli/node_modules/content-type": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/netlify-cli/node_modules/cookie": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/netlify-cli/node_modules/cookie-es": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.0.0.tgz", - "integrity": "sha512-mWYvfOLrfEc996hlKcdABeIiPHUPC6DM2QYZdGGOvhOTbA3tjm2eBwqlJpoFdjC89NI4Qt6h0Pu06Mp+1Pj5OQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/cookie-signature": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/core-util-is": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/cp-file": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-10.0.0.tgz", - "integrity": "sha512-vy2Vi1r2epK5WqxOLnskeKeZkdZvTKfFZQCplE3XWsP+SUJyd5XAUFC9lFgTjjXJF2GMne/UML14iEmkAaDfFg==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.10", "nested-error-stacks": "^2.1.1", @@ -41158,9 +39324,8 @@ }, "node_modules/netlify-cli/node_modules/cpy": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/cpy/-/cpy-9.0.1.tgz", - "integrity": "sha512-D9U0DR5FjTCN3oMTcFGktanHnAG5l020yvOCR1zKILmAyPP7I/9pl6NFgRbDcmSENtbK1sQLBz1p9HIOlroiNg==", "dev": true, + "license": "MIT", "dependencies": { "arrify": "^3.0.0", "cp-file": "^9.1.0", @@ -41180,9 +39345,8 @@ }, "node_modules/netlify-cli/node_modules/cpy/node_modules/cp-file": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-9.1.0.tgz", - "integrity": "sha512-3scnzFj/94eb7y4wyXRWwvzLFaQp87yyfTnChIjlfYrVqp5lVO3E2hIJMeQIltUT0K2ZAB3An1qXcBmwGyvuwA==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "make-dir": "^3.0.0", @@ -41198,9 +39362,8 @@ }, "node_modules/netlify-cli/node_modules/cpy/node_modules/globby": { "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", "dev": true, + "license": "MIT", "dependencies": { "dir-glob": "^3.0.1", "fast-glob": "^3.3.0", @@ -41217,9 +39380,8 @@ }, "node_modules/netlify-cli/node_modules/cpy/node_modules/p-event": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", "dev": true, + "license": "MIT", "dependencies": { "p-timeout": "^3.1.0" }, @@ -41232,9 +39394,8 @@ }, "node_modules/netlify-cli/node_modules/cpy/node_modules/p-filter": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-3.0.0.tgz", - "integrity": "sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==", "dev": true, + "license": "MIT", "dependencies": { "p-map": "^5.1.0" }, @@ -41247,9 +39408,8 @@ }, "node_modules/netlify-cli/node_modules/cpy/node_modules/p-map": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", - "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", "dev": true, + "license": "MIT", "dependencies": { "aggregate-error": "^4.0.0" }, @@ -41262,9 +39422,8 @@ }, "node_modules/netlify-cli/node_modules/cpy/node_modules/p-timeout": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "dev": true, + "license": "MIT", "dependencies": { "p-finally": "^1.0.0" }, @@ -41274,9 +39433,8 @@ }, "node_modules/netlify-cli/node_modules/cpy/node_modules/slash": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -41286,9 +39444,8 @@ }, "node_modules/netlify-cli/node_modules/crc-32": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", "dev": true, + "license": "Apache-2.0", "bin": { "crc32": "bin/crc32.njs" }, @@ -41298,9 +39455,8 @@ }, "node_modules/netlify-cli/node_modules/crc32-stream": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz", - "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==", "dev": true, + "license": "MIT", "dependencies": { "crc-32": "^1.2.0", "readable-stream": "^4.0.0" @@ -41311,8 +39467,6 @@ }, "node_modules/netlify-cli/node_modules/crc32-stream/node_modules/buffer": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "funding": [ { @@ -41328,6 +39482,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -41335,9 +39490,8 @@ }, "node_modules/netlify-cli/node_modules/crc32-stream/node_modules/readable-stream": { "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", "dev": true, + "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -41351,8 +39505,6 @@ }, "node_modules/netlify-cli/node_modules/crc32-stream/node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -41367,28 +39519,26 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/netlify-cli/node_modules/crc32-stream/node_modules/string_decoder": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/netlify-cli/node_modules/create-require": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/cron-parser": { "version": "4.9.0", - "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz", - "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==", "dev": true, + "license": "MIT", "dependencies": { "luxon": "^3.2.1" }, @@ -41398,9 +39548,8 @@ }, "node_modules/netlify-cli/node_modules/cross-spawn": { "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -41412,24 +39561,21 @@ }, "node_modules/netlify-cli/node_modules/cross-spawn/node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/netlify-cli/node_modules/crossws": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.1.1.tgz", - "integrity": "sha512-c9c/o7bS3OjsdpSkvexpka0JNlesBF2JU9B2V1yNsYGwRbAafxhJQ7VI9b48D5bpONz/oxbPGMzBojy9sXoQIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/crypto-random-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^1.0.1" }, @@ -41442,9 +39588,8 @@ }, "node_modules/netlify-cli/node_modules/crypto-random-string/node_modules/type-fest": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -41454,9 +39599,8 @@ }, "node_modules/netlify-cli/node_modules/css-select": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", @@ -41470,9 +39614,8 @@ }, "node_modules/netlify-cli/node_modules/css-tree": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", "dev": true, + "license": "MIT", "dependencies": { "mdn-data": "2.0.30", "source-map-js": "^1.0.1" @@ -41483,9 +39626,8 @@ }, "node_modules/netlify-cli/node_modules/css-what": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">= 6" }, @@ -41495,15 +39637,13 @@ }, "node_modules/netlify-cli/node_modules/cssfilter": { "version": "0.0.10", - "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", - "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/csso": { "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", "dev": true, + "license": "MIT", "dependencies": { "css-tree": "~2.2.0" }, @@ -41514,9 +39654,8 @@ }, "node_modules/netlify-cli/node_modules/csso/node_modules/css-tree": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", "dev": true, + "license": "MIT", "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" @@ -41528,30 +39667,26 @@ }, "node_modules/netlify-cli/node_modules/csso/node_modules/mdn-data": { "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", - "dev": true + "dev": true, + "license": "CC0-1.0" }, "node_modules/netlify-cli/node_modules/cyclist": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/data-uri-to-buffer": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", - "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 12" } }, "node_modules/netlify-cli/node_modules/date-time": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz", - "integrity": "sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==", "dev": true, + "license": "MIT", "dependencies": { "time-zone": "^1.0.0" }, @@ -41561,9 +39696,8 @@ }, "node_modules/netlify-cli/node_modules/debug": { "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -41578,24 +39712,21 @@ }, "node_modules/netlify-cli/node_modules/debug/node_modules/ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/decache": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz", - "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==", "dev": true, + "license": "MIT", "dependencies": { "callsite": "^1.0.0" } }, "node_modules/netlify-cli/node_modules/decompress-response": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" }, @@ -41608,9 +39739,8 @@ }, "node_modules/netlify-cli/node_modules/decompress-response/node_modules/mimic-response": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -41620,87 +39750,76 @@ }, "node_modules/netlify-cli/node_modules/deep-extend": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0.0" } }, "node_modules/netlify-cli/node_modules/deepmerge": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/netlify-cli/node_modules/defer-to-connect": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/netlify-cli/node_modules/define-lazy-prop": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/netlify-cli/node_modules/defu": { "version": "6.1.4", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", - "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/delegates": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/denque": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=0.10" } }, "node_modules/netlify-cli/node_modules/depd": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/netlify-cli/node_modules/deprecation": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/destr": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.2.tgz", - "integrity": "sha512-65AlobnZMiCET00KaFFjUefxDX0khFA/E4myqZ7a6Sq1yZtR8+FVIvilVX66vF2uobSumxooYZChiRPCKNqhmg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/destroy": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -41708,18 +39827,16 @@ }, "node_modules/netlify-cli/node_modules/detect-libc": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=8" } }, "node_modules/netlify-cli/node_modules/detective-amd": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-5.0.2.tgz", - "integrity": "sha512-XFd/VEQ76HSpym80zxM68ieB77unNuoMwopU2TFT/ErUk5n4KvUTwW4beafAVUugrjV48l4BmmR0rh2MglBaiA==", "dev": true, + "license": "MIT", "dependencies": { "ast-module-types": "^5.0.0", "escodegen": "^2.0.0", @@ -41735,9 +39852,8 @@ }, "node_modules/netlify-cli/node_modules/detective-cjs": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-5.0.1.tgz", - "integrity": "sha512-6nTvAZtpomyz/2pmEmGX1sXNjaqgMplhQkskq2MLrar0ZAIkHMrDhLXkRiK2mvbu9wSWr0V5/IfiTrZqAQMrmQ==", "dev": true, + "license": "MIT", "dependencies": { "ast-module-types": "^5.0.0", "node-source-walk": "^6.0.0" @@ -41748,9 +39864,8 @@ }, "node_modules/netlify-cli/node_modules/detective-es6": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-4.0.1.tgz", - "integrity": "sha512-k3Z5tB4LQ8UVHkuMrFOlvb3GgFWdJ9NqAa2YLUU/jTaWJIm+JJnEh4PsMc+6dfT223Y8ACKOaC0qcj7diIhBKw==", "dev": true, + "license": "MIT", "dependencies": { "node-source-walk": "^6.0.1" }, @@ -41760,9 +39875,8 @@ }, "node_modules/netlify-cli/node_modules/detective-postcss": { "version": "6.1.3", - "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-6.1.3.tgz", - "integrity": "sha512-7BRVvE5pPEvk2ukUWNQ+H2XOq43xENWbH0LcdCE14mwgTBEAMoAx+Fc1rdp76SmyZ4Sp48HlV7VedUnP6GA1Tw==", "dev": true, + "license": "MIT", "dependencies": { "is-url": "^1.2.4", "postcss": "^8.4.23", @@ -41774,9 +39888,8 @@ }, "node_modules/netlify-cli/node_modules/detective-sass": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-5.0.3.tgz", - "integrity": "sha512-YsYT2WuA8YIafp2RVF5CEfGhhyIVdPzlwQgxSjK+TUm3JoHP+Tcorbk3SfG0cNZ7D7+cYWa0ZBcvOaR0O8+LlA==", "dev": true, + "license": "MIT", "dependencies": { "gonzales-pe": "^4.3.0", "node-source-walk": "^6.0.1" @@ -41787,9 +39900,8 @@ }, "node_modules/netlify-cli/node_modules/detective-scss": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-4.0.3.tgz", - "integrity": "sha512-VYI6cHcD0fLokwqqPFFtDQhhSnlFWvU614J42eY6G0s8c+MBhi9QAWycLwIOGxlmD8I/XvGSOUV1kIDhJ70ZPg==", "dev": true, + "license": "MIT", "dependencies": { "gonzales-pe": "^4.3.0", "node-source-walk": "^6.0.1" @@ -41800,18 +39912,16 @@ }, "node_modules/netlify-cli/node_modules/detective-stylus": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-4.0.0.tgz", - "integrity": "sha512-TfPotjhszKLgFBzBhTOxNHDsutIxx9GTWjrL5Wh7Qx/ydxKhwUrlSFeLIn+ZaHPF+h0siVBkAQSuy6CADyTxgQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/netlify-cli/node_modules/detective-typescript": { "version": "11.2.0", - "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-11.2.0.tgz", - "integrity": "sha512-ARFxjzizOhPqs1fYC/2NMC3N4jrQ6HvVflnXBTRqNEqJuXwyKLRr9CrJwkRcV/SnZt1sNXgsF6FPm0x57Tq0rw==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/typescript-estree": "^5.62.0", "ast-module-types": "^5.0.0", @@ -41824,9 +39934,8 @@ }, "node_modules/netlify-cli/node_modules/detective-typescript/node_modules/@typescript-eslint/types": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -41837,9 +39946,8 @@ }, "node_modules/netlify-cli/node_modules/detective-typescript/node_modules/@typescript-eslint/typescript-estree": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "5.62.0", "@typescript-eslint/visitor-keys": "5.62.0", @@ -41864,9 +39972,8 @@ }, "node_modules/netlify-cli/node_modules/detective-typescript/node_modules/@typescript-eslint/visitor-keys": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "5.62.0", "eslint-visitor-keys": "^3.3.0" @@ -41881,9 +39988,8 @@ }, "node_modules/netlify-cli/node_modules/detective-typescript/node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -41893,9 +39999,8 @@ }, "node_modules/netlify-cli/node_modules/detective-typescript/node_modules/typescript": { "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -41906,9 +40011,8 @@ }, "node_modules/netlify-cli/node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -41918,9 +40022,8 @@ }, "node_modules/netlify-cli/node_modules/dom-serializer": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -41932,21 +40035,19 @@ }, "node_modules/netlify-cli/node_modules/domelementtype": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "license": "BSD-2-Clause" }, "node_modules/netlify-cli/node_modules/domhandler": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" }, @@ -41959,9 +40060,8 @@ }, "node_modules/netlify-cli/node_modules/domutils": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -41973,9 +40073,8 @@ }, "node_modules/netlify-cli/node_modules/dot-prop": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz", - "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^4.18.2" }, @@ -41988,9 +40087,8 @@ }, "node_modules/netlify-cli/node_modules/dot-prop/node_modules/type-fest": { "version": "4.18.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.18.2.tgz", - "integrity": "sha512-+suCYpfJLAe4OXS6+PPXjW3urOS4IoP9waSiLuXfLgqZODKw/aWwASvzqE886wA0kQgGy0mIWyhd87VpqIy6Xg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=16" }, @@ -42000,9 +40098,8 @@ }, "node_modules/netlify-cli/node_modules/dotenv": { "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=12" }, @@ -42012,60 +40109,52 @@ }, "node_modules/netlify-cli/node_modules/eastasianwidth": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/ecdsa-sig-formatter": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" } }, "node_modules/netlify-cli/node_modules/ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/enabled": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/encodeurl": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/netlify-cli/node_modules/end-of-stream": { "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, + "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/netlify-cli/node_modules/entities": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -42075,9 +40164,8 @@ }, "node_modules/netlify-cli/node_modules/env-paths": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", - "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -42087,9 +40175,8 @@ }, "node_modules/netlify-cli/node_modules/envinfo": { "version": "7.13.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", - "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", "dev": true, + "license": "MIT", "bin": { "envinfo": "dist/cli.js" }, @@ -42099,9 +40186,8 @@ }, "node_modules/netlify-cli/node_modules/environment": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -42111,40 +40197,35 @@ }, "node_modules/netlify-cli/node_modules/error-ex": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/netlify-cli/node_modules/error-stack-parser": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", "dev": true, + "license": "MIT", "dependencies": { "stackframe": "^1.3.4" } }, "node_modules/netlify-cli/node_modules/es-module-lexer": { "version": "1.5.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.3.tgz", - "integrity": "sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/es6-promisify": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz", - "integrity": "sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/esbuild": { "version": "0.19.11", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz", - "integrity": "sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -42179,18 +40260,16 @@ }, "node_modules/netlify-cli/node_modules/escalade": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/netlify-cli/node_modules/escape-goat": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", - "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -42200,15 +40279,13 @@ }, "node_modules/netlify-cli/node_modules/escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/escodegen": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -42227,9 +40304,8 @@ }, "node_modules/netlify-cli/node_modules/esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -42240,66 +40316,58 @@ }, "node_modules/netlify-cli/node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/netlify-cli/node_modules/estree-walker": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/netlify-cli/node_modules/etag": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/netlify-cli/node_modules/event-target-shim": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/netlify-cli/node_modules/eventemitter3": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/events": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.x" } }, "node_modules/netlify-cli/node_modules/execa": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -42320,9 +40388,8 @@ }, "node_modules/netlify-cli/node_modules/execa/node_modules/is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -42332,18 +40399,16 @@ }, "node_modules/netlify-cli/node_modules/expand-template": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", "dev": true, + "license": "(MIT OR WTFPL)", "engines": { "node": ">=6" } }, "node_modules/netlify-cli/node_modules/express": { "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -42383,9 +40448,8 @@ }, "node_modules/netlify-cli/node_modules/express-logging": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/express-logging/-/express-logging-1.1.1.tgz", - "integrity": "sha512-1KboYwxxCG5kwkJHR5LjFDTD1Mgl8n4PIMcCuhhd/1OqaxlC68P3QKbvvAbZVUtVgtlxEdTgSUwf6yxwzRCuuA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "on-headers": "^1.0.0" }, @@ -42395,27 +40459,24 @@ }, "node_modules/netlify-cli/node_modules/express/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/netlify-cli/node_modules/express/node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/netlify-cli/node_modules/express/node_modules/http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, + "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -42429,14 +40490,11 @@ }, "node_modules/netlify-cli/node_modules/express/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/express/node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -42451,13 +40509,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/netlify-cli/node_modules/ext-list": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", - "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": "^1.28.0" }, @@ -42467,9 +40525,8 @@ }, "node_modules/netlify-cli/node_modules/ext-name": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", "dev": true, + "license": "MIT", "dependencies": { "ext-list": "^2.0.0", "sort-keys-length": "^1.0.0" @@ -42480,9 +40537,8 @@ }, "node_modules/netlify-cli/node_modules/external-editor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, + "license": "MIT", "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -42494,9 +40550,8 @@ }, "node_modules/netlify-cli/node_modules/extract-zip": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -42514,9 +40569,8 @@ }, "node_modules/netlify-cli/node_modules/extract-zip/node_modules/get-stream": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -42529,45 +40583,38 @@ }, "node_modules/netlify-cli/node_modules/fast-content-type-parse": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz", - "integrity": "sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/fast-decode-uri-component": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", - "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/fast-diff": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/netlify-cli/node_modules/fast-equals": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-3.0.3.tgz", - "integrity": "sha512-NCe8qxnZFARSHGztGMZOO/PC1qa5MIFB5Hp66WdzbCRAz8U8US3bx1UTgLS49efBQPcUtO9gf5oVEY8o7y/7Kg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/fast-fifo": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.0.tgz", - "integrity": "sha512-IgfweLvEpwyA4WgiQe9Nx6VV2QkML2NkvZnk1oKnIzXgXdWxuhF7zw4DvLTPZJn6PIUneiAXPF24QmoEqHTjyw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/fast-glob": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -42581,16 +40628,14 @@ }, "node_modules/netlify-cli/node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/netlify-cli/node_modules/fast-json-stringify": { "version": "5.15.1", - "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.15.1.tgz", - "integrity": "sha512-JopGtkvvguRqrS4gHXSSA2jf4pDgOZkeBAkLO1LbzOpiOMo7/kugoR+KiWifpLpluaVeYDkAuxCJOj4Gyc6L9A==", "dev": true, + "license": "MIT", "dependencies": { "@fastify/merge-json-schemas": "^0.1.0", "ajv": "^8.10.0", @@ -42603,9 +40648,8 @@ }, "node_modules/netlify-cli/node_modules/fast-json-stringify/node_modules/ajv": { "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -42619,9 +40663,8 @@ }, "node_modules/netlify-cli/node_modules/fast-json-stringify/node_modules/ajv-formats": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^8.0.0" }, @@ -42636,53 +40679,45 @@ }, "node_modules/netlify-cli/node_modules/fast-json-stringify/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/fast-querystring": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.0.0.tgz", - "integrity": "sha512-3LQi62IhQoDlmt4ULCYmh17vRO2EtS7hTSsG4WwoKWgV7GLMKBOecEh+aiavASnLx8I2y89OD33AGLo0ccRhzA==", "dev": true, + "license": "MIT", "dependencies": { "fast-decode-uri-component": "^1.0.1" } }, "node_modules/netlify-cli/node_modules/fast-redact": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.1.2.tgz", - "integrity": "sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/netlify-cli/node_modules/fast-safe-stringify": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/fast-uri": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.2.0.tgz", - "integrity": "sha512-cIusKBIt/R/oI6z/1nyfe2FvGKVTohVRfvkOhvx0nCEW+xf5NoCXjAHcWp93uOUBchzYcsvPlrapAdX1uW+YGg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/fastest-levenshtein": { "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.9.1" } }, "node_modules/netlify-cli/node_modules/fastify": { "version": "4.27.0", - "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.27.0.tgz", - "integrity": "sha512-ci9IXzbigB8dyi0mSy3faa3Bsj0xWAPb9JeT4KRzubdSb6pNhcADRUaXCBml6V1Ss/a05kbtQls5LBmhHydoTA==", "dev": true, "funding": [ { @@ -42694,6 +40729,7 @@ "url": "https://opencollective.com/fastify" } ], + "license": "MIT", "dependencies": { "@fastify/ajv-compiler": "^3.5.0", "@fastify/error": "^3.4.0", @@ -42715,14 +40751,11 @@ }, "node_modules/netlify-cli/node_modules/fastify-plugin": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-4.4.0.tgz", - "integrity": "sha512-ovwFQG2qNy3jcCROiWpr94Hs0le+c7N/3t7m9aVwbFhkxcR/esp2xu25dP8e617HpQdmeDv+gFX4zagdUhDByw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/fastify/node_modules/buffer": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "funding": [ { @@ -42738,6 +40771,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -42745,9 +40779,8 @@ }, "node_modules/netlify-cli/node_modules/fastify/node_modules/pino": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-9.1.0.tgz", - "integrity": "sha512-qUcgfrlyOtjwhNLdbhoL7NR4NkHjzykAPw0V2QLFbvu/zss29h4NkRnibyFzBrNCbzCOY3WZ9hhKSwfOkNggYA==", "dev": true, + "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.1.1", @@ -42767,9 +40800,8 @@ }, "node_modules/netlify-cli/node_modules/fastify/node_modules/pino-abstract-transport": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz", - "integrity": "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "^4.0.0", "split2": "^4.0.0" @@ -42777,21 +40809,18 @@ }, "node_modules/netlify-cli/node_modules/fastify/node_modules/pino-std-serializers": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", - "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/fastify/node_modules/process-warning": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", - "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/fastify/node_modules/readable-stream": { "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", "dev": true, + "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -42805,8 +40834,6 @@ }, "node_modules/netlify-cli/node_modules/fastify/node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -42821,67 +40848,61 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/netlify-cli/node_modules/fastify/node_modules/sonic-boom": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.0.1.tgz", - "integrity": "sha512-hTSD/6JMLyT4r9zeof6UtuBDpjJ9sO08/nmS5djaA9eozT9oOlNdpXSnzcgj4FTqpk3nkLrs61l4gip9r1HCrQ==", "dev": true, + "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0" } }, "node_modules/netlify-cli/node_modules/fastify/node_modules/split2": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", "dev": true, + "license": "ISC", "engines": { "node": ">= 10.x" } }, "node_modules/netlify-cli/node_modules/fastify/node_modules/string_decoder": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/netlify-cli/node_modules/fastify/node_modules/thread-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.0.0.tgz", - "integrity": "sha512-oUIFjxaUT6knhPtWgDMc29zF1FcSl0yXpapkyrQrCGEfYA2HUZXCilUtKyYIv6HkCyqSPAMkY+EG0GbyIrNDQg==", "dev": true, + "license": "MIT", "dependencies": { "real-require": "^0.2.0" } }, "node_modules/netlify-cli/node_modules/fastq": { "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/netlify-cli/node_modules/fd-slicer": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", "dev": true, + "license": "MIT", "dependencies": { "pend": "~1.2.0" } }, "node_modules/netlify-cli/node_modules/fdir": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.0.1.tgz", - "integrity": "sha512-bdrUUb0eYQrPRlaAtlSRoLs7sp6yKEwbMQuUgwvi/14TnaqhM/deSZUrC5ic+yjm5nEPPWE61oWpTTxQFQMmLA==", "dev": true, + "license": "MIT", "peerDependencies": { "picomatch": "2.x" }, @@ -42893,14 +40914,11 @@ }, "node_modules/netlify-cli/node_modules/fecha": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", - "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/fetch-blob": { "version": "3.1.4", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.4.tgz", - "integrity": "sha512-Eq5Xv5+VlSrYWEqKrusxY1C3Hm/hjeAsCGVG3ft7pZahlUAChpGZT/Ms1WmSLnEAisEXszjzu/s+ce6HZB2VHA==", "dev": true, "funding": [ { @@ -42912,6 +40930,7 @@ "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" @@ -42922,9 +40941,8 @@ }, "node_modules/netlify-cli/node_modules/fetch-node-website": { "version": "7.3.0", - "resolved": "https://registry.npmjs.org/fetch-node-website/-/fetch-node-website-7.3.0.tgz", - "integrity": "sha512-/wayUHbdVUWrD72aqRNNrr6+MHnCkumZgNugN0RfiWJpbNJUdAkMk4Z18MGayGZVVqYXR1RWrV+bIFEt5HuBZg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "cli-progress": "^3.11.2", "colors-option": "^4.4.0", @@ -42938,9 +40956,8 @@ }, "node_modules/netlify-cli/node_modules/fetch-node-website/node_modules/colors-option": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/colors-option/-/colors-option-4.5.0.tgz", - "integrity": "sha512-Soe5lerRg3erMRgYC0EC696/8dMCGpBzcQchFfi55Yrkja8F+P7cUt0LVTIg7u5ob5BexLZ/F1kO+ejmv+nq8w==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^5.0.1", "is-plain-obj": "^4.1.0" @@ -42951,9 +40968,8 @@ }, "node_modules/netlify-cli/node_modules/fetch-node-website/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -42963,9 +40979,8 @@ }, "node_modules/netlify-cli/node_modules/fetch-node-website/node_modules/figures": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", - "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^5.0.0", "is-unicode-supported": "^1.2.0" @@ -42979,9 +40994,8 @@ }, "node_modules/netlify-cli/node_modules/figures": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -42994,18 +41008,16 @@ }, "node_modules/netlify-cli/node_modules/figures/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/netlify-cli/node_modules/file-type": { "version": "18.5.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.5.0.tgz", - "integrity": "sha512-yvpl5U868+V6PqXHMmsESpg6unQ5GfnPssl4dxdJudBrr9qy7Fddt7EVX1VLlddFfe8Gj9N7goCZH22FXuSQXQ==", "dev": true, + "license": "MIT", "dependencies": { "readable-web-to-node-stream": "^3.0.2", "strtok3": "^7.0.0", @@ -43020,15 +41032,13 @@ }, "node_modules/netlify-cli/node_modules/file-uri-to-path": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/fill-range": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -43038,9 +41048,8 @@ }, "node_modules/netlify-cli/node_modules/filter-obj": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-5.1.0.tgz", - "integrity": "sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -43050,9 +41059,8 @@ }, "node_modules/netlify-cli/node_modules/finalhandler": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -43068,24 +41076,21 @@ }, "node_modules/netlify-cli/node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/netlify-cli/node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/find-my-way": { "version": "8.2.0", - "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-8.2.0.tgz", - "integrity": "sha512-HdWXgFYc6b1BJcOBDBwjqWuHJj1WYiqrxSh25qtU4DabpMFdj/gSunNBQb83t+8Zt67D7CXEzJWTkxaShMTMOA==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-querystring": "^1.0.0", @@ -43097,9 +41102,8 @@ }, "node_modules/netlify-cli/node_modules/find-up": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", - "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^7.2.0", "path-exists": "^5.0.0", @@ -43114,9 +41118,8 @@ }, "node_modules/netlify-cli/node_modules/find-up-simple": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.0.tgz", - "integrity": "sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -43126,18 +41129,16 @@ }, "node_modules/netlify-cli/node_modules/find-up/node_modules/path-exists": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/netlify-cli/node_modules/flush-write-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-2.0.0.tgz", - "integrity": "sha512-uXClqPxT4xW0lcdSBheb2ObVU+kuqUk3Jk64EwieirEXZx9XUrVwp/JuBfKAWaM4T5Td/VL7QLDWPXp/MvGm/g==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "readable-stream": "^3.1.1" @@ -43145,23 +41146,19 @@ }, "node_modules/netlify-cli/node_modules/fn.name": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/folder-walker": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/folder-walker/-/folder-walker-3.2.0.tgz", - "integrity": "sha512-VjAQdSLsl6AkpZNyrQJfO7BXLo4chnStqb055bumZMbRUPpVuPN3a4ktsnRCmrFZjtMlYLkyXiR5rAs4WOpC4Q==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "from2": "^2.1.0" } }, "node_modules/netlify-cli/node_modules/follow-redirects": { "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "dev": true, "funding": [ { @@ -43169,6 +41166,7 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -43180,9 +41178,8 @@ }, "node_modules/netlify-cli/node_modules/foreground-child": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dev": true, + "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -43196,9 +41193,8 @@ }, "node_modules/netlify-cli/node_modules/foreground-child/node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -43208,18 +41204,16 @@ }, "node_modules/netlify-cli/node_modules/form-data-encoder": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.3.tgz", - "integrity": "sha512-KqU0nnPMgIJcCOFTNJFEA8epcseEaoox4XZffTgy8jlI6pL/5EFyR54NRG7CnCJN0biY7q52DO3MH6/sJ/TKlQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 14.17" } }, "node_modules/netlify-cli/node_modules/formdata-polyfill": { "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", "dev": true, + "license": "MIT", "dependencies": { "fetch-blob": "^3.1.2" }, @@ -43229,27 +41223,24 @@ }, "node_modules/netlify-cli/node_modules/forwarded": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/netlify-cli/node_modules/fresh": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/netlify-cli/node_modules/from2": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" @@ -43257,18 +41248,16 @@ }, "node_modules/netlify-cli/node_modules/from2-array": { "version": "0.0.4", - "resolved": "https://registry.npmjs.org/from2-array/-/from2-array-0.0.4.tgz", - "integrity": "sha512-0G0cAp7sYLobH7ALsr835x98PU/YeVF7wlwxdWbCUaea7wsa7lJfKZUAo6p2YZGZ8F94luCuqHZS3JtFER6uPg==", "dev": true, + "license": "MIT", "dependencies": { "from2": "^2.0.3" } }, "node_modules/netlify-cli/node_modules/from2/node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -43281,15 +41270,13 @@ }, "node_modules/netlify-cli/node_modules/fs-constants": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/fs-minipass": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -43299,9 +41286,8 @@ }, "node_modules/netlify-cli/node_modules/fs-minipass/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -43311,16 +41297,13 @@ }, "node_modules/netlify-cli/node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/fsevents": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -43331,17 +41314,14 @@ }, "node_modules/netlify-cli/node_modules/function-bind": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/netlify-cli/node_modules/fuzzy": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", - "integrity": "sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==", "dev": true, "engines": { "node": ">= 0.6.0" @@ -43349,9 +41329,8 @@ }, "node_modules/netlify-cli/node_modules/gauge": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", "dev": true, + "license": "ISC", "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.2", @@ -43369,9 +41348,8 @@ }, "node_modules/netlify-cli/node_modules/gauge/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -43381,9 +41359,8 @@ }, "node_modules/netlify-cli/node_modules/get-amd-module-type": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-5.0.1.tgz", - "integrity": "sha512-jb65zDeHyDjFR1loOVk0HQGM5WNwoGB8aLWy3LKCieMKol0/ProHkhO2X1JxojuN10vbz1qNn09MJ7tNp7qMzw==", "dev": true, + "license": "MIT", "dependencies": { "ast-module-types": "^5.0.0", "node-source-walk": "^6.0.1" @@ -43394,18 +41371,16 @@ }, "node_modules/netlify-cli/node_modules/get-caller-file": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/netlify-cli/node_modules/get-east-asian-width": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", - "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -43415,9 +41390,8 @@ }, "node_modules/netlify-cli/node_modules/get-intrinsic": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -43429,18 +41403,16 @@ }, "node_modules/netlify-cli/node_modules/get-package-name": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/get-package-name/-/get-package-name-2.2.0.tgz", - "integrity": "sha512-LmCKVxioe63Fy6KDAQ/mmCSOSSRUE/x4zdrMD+7dU8quF3bGpzvP8mOmq4Dgce3nzU9AgkVDotucNOOg7c27BQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 12.0.0" } }, "node_modules/netlify-cli/node_modules/get-port": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -43450,15 +41422,13 @@ }, "node_modules/netlify-cli/node_modules/get-port-please": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.2.tgz", - "integrity": "sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -43468,9 +41438,8 @@ }, "node_modules/netlify-cli/node_modules/gh-release-fetch": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gh-release-fetch/-/gh-release-fetch-4.0.3.tgz", - "integrity": "sha512-TOiP1nwLsH5shG85Yt6v6Kjq5JU/44jXyEpbcfPgmj3C829yeXIlx9nAEwQRaxtRF3SJinn2lz7XUkfG9W/U4g==", "dev": true, + "license": "MIT", "dependencies": { "@xhmikosr/downloader": "^13.0.0", "node-fetch": "^3.3.1", @@ -43482,39 +41451,34 @@ }, "node_modules/netlify-cli/node_modules/git-repo-info": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/git-repo-info/-/git-repo-info-2.1.1.tgz", - "integrity": "sha512-8aCohiDo4jwjOwma4FmYFd3i97urZulL8XL24nIPxuE+GZnfsAyy/g2Shqx6OjUiFKUXZM+Yy+KHnOmmA3FVcg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.0" } }, "node_modules/netlify-cli/node_modules/gitconfiglocal": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-2.1.0.tgz", - "integrity": "sha512-qoerOEliJn3z+Zyn1HW2F6eoYJqKwS6MgC9cztTLUB/xLWX8gD/6T60pKn4+t/d6tP7JlybI7Z3z+I572CR/Vg==", "dev": true, + "license": "BSD", "dependencies": { "ini": "^1.3.2" } }, "node_modules/netlify-cli/node_modules/gitconfiglocal/node_modules/ini": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/github-from-package": { "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -43532,9 +41496,8 @@ }, "node_modules/netlify-cli/node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -43544,9 +41507,8 @@ }, "node_modules/netlify-cli/node_modules/global-cache-dir": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global-cache-dir/-/global-cache-dir-4.4.0.tgz", - "integrity": "sha512-bk0gI6IbbphRjAaCJJn5H+T/CcEck5B3a5KBO2BXSDzjFSV+API17w8GA7YPJ6IXJiasW8M0VsEIig1PCHdfOQ==", "dev": true, + "license": "MIT", "dependencies": { "cachedir": "^2.3.0", "path-exists": "^5.0.0" @@ -43557,18 +41519,16 @@ }, "node_modules/netlify-cli/node_modules/global-cache-dir/node_modules/path-exists": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/netlify-cli/node_modules/globby": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -43586,9 +41546,8 @@ }, "node_modules/netlify-cli/node_modules/gonzales-pe": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", - "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.5" }, @@ -43601,9 +41560,8 @@ }, "node_modules/netlify-cli/node_modules/got": { "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", "dev": true, + "license": "MIT", "dependencies": { "@sindresorhus/is": "^5.2.0", "@szmarczak/http-timer": "^5.0.1", @@ -43626,15 +41584,13 @@ }, "node_modules/netlify-cli/node_modules/graceful-fs": { "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/h3": { "version": "1.10.1", - "resolved": "https://registry.npmjs.org/h3/-/h3-1.10.1.tgz", - "integrity": "sha512-UBAUp47hmm4BB5/njB4LrEa9gpuvZj4/Qf/ynSMzO6Ku2RXaouxEfiG2E2IFnv6fxbhAkzjasDxmo6DFdEeXRg==", "dev": true, + "license": "MIT", "dependencies": { "cookie-es": "^1.0.0", "defu": "^6.1.4", @@ -43649,9 +41605,8 @@ }, "node_modules/netlify-cli/node_modules/has": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.1" }, @@ -43661,27 +41616,24 @@ }, "node_modules/netlify-cli/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/netlify-cli/node_modules/has-own-prop": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", - "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/netlify-cli/node_modules/has-symbols": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -43691,15 +41643,13 @@ }, "node_modules/netlify-cli/node_modules/has-unicode": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/hasbin": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/hasbin/-/hasbin-1.2.3.tgz", - "integrity": "sha512-CCd8e/w2w28G8DyZvKgiHnQJ/5XXDz6qiUHnthvtag/6T5acUeN5lqq+HMoBqcmgWueWDhiCplrw0Kb1zDACRg==", "dev": true, + "license": "MIT", "dependencies": { "async": "~1.5" }, @@ -43709,15 +41659,13 @@ }, "node_modules/netlify-cli/node_modules/hasbin/node_modules/async": { "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/hasha": { "version": "5.2.2", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", - "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "dev": true, + "license": "MIT", "dependencies": { "is-stream": "^2.0.0", "type-fest": "^0.8.0" @@ -43731,9 +41679,8 @@ }, "node_modules/netlify-cli/node_modules/hasha/node_modules/is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -43743,18 +41690,16 @@ }, "node_modules/netlify-cli/node_modules/hasha/node_modules/type-fest": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, "node_modules/netlify-cli/node_modules/hosted-git-info": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -43764,9 +41709,8 @@ }, "node_modules/netlify-cli/node_modules/hot-shots": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/hot-shots/-/hot-shots-10.0.0.tgz", - "integrity": "sha512-uy/uGpuJk7yuyiKRfZMBNkF1GAOX5O2ifO9rDCaX9jw8fu6eW9QeWC7WRPDI+O98frW1HQgV3+xwjWsZPECIzQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -43776,15 +41720,13 @@ }, "node_modules/netlify-cli/node_modules/http-cache-semantics": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/netlify-cli/node_modules/http-errors": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, + "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", @@ -43798,18 +41740,16 @@ }, "node_modules/netlify-cli/node_modules/http-errors/node_modules/statuses": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/netlify-cli/node_modules/http-proxy": { "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, + "license": "MIT", "dependencies": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", @@ -43821,9 +41761,8 @@ }, "node_modules/netlify-cli/node_modules/http-proxy-middleware": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", @@ -43845,9 +41784,8 @@ }, "node_modules/netlify-cli/node_modules/http-proxy-middleware/node_modules/is-plain-obj": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -43857,9 +41795,8 @@ }, "node_modules/netlify-cli/node_modules/http-shutdown": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/http-shutdown/-/http-shutdown-1.2.2.tgz", - "integrity": "sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" @@ -43867,9 +41804,8 @@ }, "node_modules/netlify-cli/node_modules/http2-wrapper": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", "dev": true, + "license": "MIT", "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.2.0" @@ -43880,9 +41816,8 @@ }, "node_modules/netlify-cli/node_modules/https-proxy-agent": { "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -43893,9 +41828,8 @@ }, "node_modules/netlify-cli/node_modules/https-proxy-agent/node_modules/agent-base": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -43905,18 +41839,16 @@ }, "node_modules/netlify-cli/node_modules/human-signals": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } }, "node_modules/netlify-cli/node_modules/iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -43926,8 +41858,6 @@ }, "node_modules/netlify-cli/node_modules/ieee754": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true, "funding": [ { @@ -43942,46 +41872,42 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/netlify-cli/node_modules/ignore": { "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/netlify-cli/node_modules/image-meta": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/image-meta/-/image-meta-0.2.0.tgz", - "integrity": "sha512-ZBGjl0ZMEMeOC3Ns0wUF/5UdUmr3qQhBSCniT0LxOgGGIRHiNFOkMtIHB7EOznRU47V2AxPgiVP+s+0/UCU0Hg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/import-lazy": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/netlify-cli/node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } }, "node_modules/netlify-cli/node_modules/index-to-position": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-0.1.2.tgz", - "integrity": "sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -43991,9 +41917,8 @@ }, "node_modules/netlify-cli/node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -44001,15 +41926,13 @@ }, "node_modules/netlify-cli/node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/inquirer": { "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^3.2.0", "chalk": "^2.4.2", @@ -44031,9 +41954,8 @@ }, "node_modules/netlify-cli/node_modules/inquirer-autocomplete-prompt": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-1.4.0.tgz", - "integrity": "sha512-qHgHyJmbULt4hI+kCmwX92MnSxDs/Yhdt4wPA30qnoa01OF6uTXV8yvH4hKXgdaTNmkZ9D01MHjqKYEuJN+ONw==", "dev": true, + "license": "ISC", "dependencies": { "ansi-escapes": "^4.3.1", "chalk": "^4.0.0", @@ -44050,9 +41972,8 @@ }, "node_modules/netlify-cli/node_modules/inquirer-autocomplete-prompt/node_modules/ansi-escapes": { "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -44065,9 +41986,8 @@ }, "node_modules/netlify-cli/node_modules/inquirer-autocomplete-prompt/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -44080,9 +42000,8 @@ }, "node_modules/netlify-cli/node_modules/inquirer-autocomplete-prompt/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -44096,9 +42015,8 @@ }, "node_modules/netlify-cli/node_modules/inquirer-autocomplete-prompt/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -44108,15 +42026,13 @@ }, "node_modules/netlify-cli/node_modules/inquirer-autocomplete-prompt/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/inquirer-autocomplete-prompt/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -44126,9 +42042,8 @@ }, "node_modules/netlify-cli/node_modules/inquirer-autocomplete-prompt/node_modules/type-fest": { "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -44138,27 +42053,24 @@ }, "node_modules/netlify-cli/node_modules/inquirer/node_modules/ansi-escapes": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/netlify-cli/node_modules/inquirer/node_modules/ansi-regex": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/netlify-cli/node_modules/inquirer/node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -44168,9 +42080,8 @@ }, "node_modules/netlify-cli/node_modules/inquirer/node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -44182,18 +42093,16 @@ }, "node_modules/netlify-cli/node_modules/inquirer/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/netlify-cli/node_modules/inquirer/node_modules/figures": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -44203,27 +42112,24 @@ }, "node_modules/netlify-cli/node_modules/inquirer/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/netlify-cli/node_modules/inquirer/node_modules/is-fullwidth-code-point": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/netlify-cli/node_modules/inquirer/node_modules/string-width": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, + "license": "MIT", "dependencies": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -44234,18 +42140,16 @@ }, "node_modules/netlify-cli/node_modules/inquirer/node_modules/string-width/node_modules/ansi-regex": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/netlify-cli/node_modules/inquirer/node_modules/string-width/node_modules/strip-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^3.0.0" }, @@ -44255,9 +42159,8 @@ }, "node_modules/netlify-cli/node_modules/inquirer/node_modules/strip-ansi": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^4.1.0" }, @@ -44267,9 +42170,8 @@ }, "node_modules/netlify-cli/node_modules/inquirer/node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -44279,18 +42181,16 @@ }, "node_modules/netlify-cli/node_modules/inspect-with-kind": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/inspect-with-kind/-/inspect-with-kind-1.0.5.tgz", - "integrity": "sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g==", "dev": true, + "license": "ISC", "dependencies": { "kind-of": "^6.0.2" } }, "node_modules/netlify-cli/node_modules/ioredis": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.3.2.tgz", - "integrity": "sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==", "dev": true, + "license": "MIT", "dependencies": { "@ioredis/commands": "^1.1.1", "cluster-key-slot": "^1.1.0", @@ -44312,18 +42212,16 @@ }, "node_modules/netlify-cli/node_modules/ipaddr.js": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/netlify-cli/node_modules/ipx": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipx/-/ipx-2.1.0.tgz", - "integrity": "sha512-AVnPGXJ8L41vjd11Z4akIF2yd14636Klxul3tBySxHA6PKfCOQPxBDkCFK5zcWh0z/keR6toh1eg8qzdBVUgdA==", "dev": true, + "license": "MIT", "dependencies": { "@fastify/accept-negotiator": "^1.1.0", "citty": "^0.1.5", @@ -44348,9 +42246,8 @@ }, "node_modules/netlify-cli/node_modules/ipx/node_modules/@netlify/blobs": { "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@netlify/blobs/-/blobs-6.5.0.tgz", - "integrity": "sha512-wRFlNnL/Qv3WNLZd3OT/YYqF1zb6iPSo8T31sl9ccL1ahBxW1fBqKgF4b1XL7Z+6mRIkatvcsVPkWBcO+oJMNA==", "dev": true, + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -44359,18 +42256,16 @@ }, "node_modules/netlify-cli/node_modules/ipx/node_modules/lru-cache": { "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", "dev": true, + "license": "ISC", "engines": { "node": "14 || >=16.14" } }, "node_modules/netlify-cli/node_modules/ipx/node_modules/unstorage": { "version": "1.10.1", - "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.10.1.tgz", - "integrity": "sha512-rWQvLRfZNBpF+x8D3/gda5nUCQL2PgXy2jNG4U7/Rc9BGEv9+CAJd0YyGCROUBKs9v49Hg8huw3aih5Bf5TAVw==", "dev": true, + "license": "MIT", "dependencies": { "anymatch": "^3.1.3", "chokidar": "^3.5.3", @@ -44439,24 +42334,21 @@ }, "node_modules/netlify-cli/node_modules/iron-webcrypto": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.0.0.tgz", - "integrity": "sha512-anOK1Mktt8U1Xi7fCM3RELTuYbnFikQY5VtrDj7kPgpejV7d43tWKhzgioO0zpkazLEL/j/iayRqnJhrGfqUsg==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/brc-dd" } }, "node_modules/netlify-cli/node_modules/is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -44466,9 +42358,8 @@ }, "node_modules/netlify-cli/node_modules/is-builtin-module": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz", - "integrity": "sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==", "dev": true, + "license": "MIT", "dependencies": { "builtin-modules": "^3.0.0" }, @@ -44478,9 +42369,8 @@ }, "node_modules/netlify-cli/node_modules/is-core-module": { "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dev": true, + "license": "MIT", "dependencies": { "has": "^1.0.3" }, @@ -44490,9 +42380,8 @@ }, "node_modules/netlify-cli/node_modules/is-docker": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "dev": true, + "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -44505,18 +42394,16 @@ }, "node_modules/netlify-cli/node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/netlify-cli/node_modules/is-fullwidth-code-point": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -44526,9 +42413,8 @@ }, "node_modules/netlify-cli/node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -44538,9 +42424,8 @@ }, "node_modules/netlify-cli/node_modules/is-in-ci": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-in-ci/-/is-in-ci-0.1.0.tgz", - "integrity": "sha512-d9PXLEY0v1iJ64xLiQMJ51J128EYHAaOR4yZqQi8aHGfw6KgifM3/Viw1oZZ1GCVmb3gBuyhLyHj0HgR2DhSXQ==", "dev": true, + "license": "MIT", "bin": { "is-in-ci": "cli.js" }, @@ -44553,9 +42438,8 @@ }, "node_modules/netlify-cli/node_modules/is-inside-container": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", "dev": true, + "license": "MIT", "dependencies": { "is-docker": "^3.0.0" }, @@ -44571,9 +42455,8 @@ }, "node_modules/netlify-cli/node_modules/is-installed-globally": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dev": true, + "license": "MIT", "dependencies": { "global-dirs": "^3.0.0", "is-path-inside": "^3.0.2" @@ -44587,9 +42470,8 @@ }, "node_modules/netlify-cli/node_modules/is-installed-globally/node_modules/global-dirs": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", "dev": true, + "license": "MIT", "dependencies": { "ini": "2.0.0" }, @@ -44602,18 +42484,16 @@ }, "node_modules/netlify-cli/node_modules/is-installed-globally/node_modules/ini": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/netlify-cli/node_modules/is-interactive": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -44623,9 +42503,8 @@ }, "node_modules/netlify-cli/node_modules/is-npm": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", - "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -44635,36 +42514,32 @@ }, "node_modules/netlify-cli/node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/netlify-cli/node_modules/is-obj": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/netlify-cli/node_modules/is-path-inside": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/netlify-cli/node_modules/is-plain-obj": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -44674,9 +42549,8 @@ }, "node_modules/netlify-cli/node_modules/is-stream": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", - "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -44686,15 +42560,13 @@ }, "node_modules/netlify-cli/node_modules/is-typedarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/is-unicode-supported": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -44704,15 +42576,13 @@ }, "node_modules/netlify-cli/node_modules/is-url": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/is-url-superb": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-url-superb/-/is-url-superb-4.0.0.tgz", - "integrity": "sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -44722,9 +42592,8 @@ }, "node_modules/netlify-cli/node_modules/is-wsl": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", "dev": true, + "license": "MIT", "dependencies": { "is-inside-container": "^1.0.0" }, @@ -44737,9 +42606,8 @@ }, "node_modules/netlify-cli/node_modules/is64bit": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is64bit/-/is64bit-2.0.0.tgz", - "integrity": "sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw==", "dev": true, + "license": "MIT", "dependencies": { "system-architecture": "^0.1.0" }, @@ -44752,30 +42620,26 @@ }, "node_modules/netlify-cli/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/iserror": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/iserror/-/iserror-0.0.2.tgz", - "integrity": "sha512-oKGGrFVaWwETimP3SiWwjDeY27ovZoyZPHtxblC4hCq9fXxed/jasx+ATWFFjCVSRZng8VTMsN1nDnGo6zMBSw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/isexe": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=16" } }, "node_modules/netlify-cli/node_modules/jackspeak": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -44791,18 +42655,16 @@ }, "node_modules/netlify-cli/node_modules/jest-get-type": { "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", "dev": true, + "license": "MIT", "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/netlify-cli/node_modules/jest-validate": { "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^27.5.1", "camelcase": "^6.2.0", @@ -44817,9 +42679,8 @@ }, "node_modules/netlify-cli/node_modules/jest-validate/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -44832,9 +42693,8 @@ }, "node_modules/netlify-cli/node_modules/jest-validate/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -44848,9 +42708,8 @@ }, "node_modules/netlify-cli/node_modules/jest-validate/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -44860,15 +42719,13 @@ }, "node_modules/netlify-cli/node_modules/jest-validate/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/jest-validate/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -44878,33 +42735,29 @@ }, "node_modules/netlify-cli/node_modules/jiti": { "version": "1.21.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", "dev": true, + "license": "MIT", "bin": { "jiti": "bin/jiti.js" } }, "node_modules/netlify-cli/node_modules/js-string-escape": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", - "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/netlify-cli/node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -44914,52 +42767,45 @@ }, "node_modules/netlify-cli/node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/json-schema-ref-resolver": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz", - "integrity": "sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" } }, "node_modules/netlify-cli/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/netlify-cli/node_modules/jsonc-parser": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/jsonpointer": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/netlify-cli/node_modules/jsonwebtoken": { "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", "dev": true, + "license": "MIT", "dependencies": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", @@ -44979,9 +42825,8 @@ }, "node_modules/netlify-cli/node_modules/junk": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/junk/-/junk-4.0.1.tgz", - "integrity": "sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.20" }, @@ -44991,9 +42836,8 @@ }, "node_modules/netlify-cli/node_modules/jwa": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", "dev": true, + "license": "MIT", "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -45002,9 +42846,8 @@ }, "node_modules/netlify-cli/node_modules/jws": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", "dev": true, + "license": "MIT", "dependencies": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" @@ -45012,18 +42855,16 @@ }, "node_modules/netlify-cli/node_modules/jwt-decode": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", - "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/netlify-cli/node_modules/keep-func-props": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/keep-func-props/-/keep-func-props-4.0.1.tgz", - "integrity": "sha512-87ftOIICfdww3SxR5P1veq3ThBNyRPG0JGL//oaR08v0k2yTicEIHd7s0GqSJfQvlb+ybC3GiDepOweo0LDhvw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "mimic-fn": "^4.0.0" }, @@ -45033,33 +42874,29 @@ }, "node_modules/netlify-cli/node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } }, "node_modules/netlify-cli/node_modules/kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/netlify-cli/node_modules/kuler": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/lambda-local": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/lambda-local/-/lambda-local-2.2.0.tgz", - "integrity": "sha512-bPcgpIXbHnVGfI/omZIlgucDqlf4LrsunwoKue5JdZeGybt8L6KyJz2Zu19ffuZwIwLj2NAI2ZyaqNT6/cetcg==", "dev": true, + "license": "MIT", "dependencies": { "commander": "^10.0.1", "dotenv": "^16.3.1", @@ -45074,9 +42911,8 @@ }, "node_modules/netlify-cli/node_modules/latest-version": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", - "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", "dev": true, + "license": "MIT", "dependencies": { "package-json": "^8.1.0" }, @@ -45089,9 +42925,8 @@ }, "node_modules/netlify-cli/node_modules/lazystream": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "^2.0.5" }, @@ -45101,9 +42936,8 @@ }, "node_modules/netlify-cli/node_modules/lazystream/node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -45116,18 +42950,16 @@ }, "node_modules/netlify-cli/node_modules/leven": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/netlify-cli/node_modules/light-my-request": { "version": "5.13.0", - "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.13.0.tgz", - "integrity": "sha512-9IjUN9ZyCS9pTG+KqTDEQo68Sui2lHsYBrfMyVUTTZ3XhH8PMZq7xO94Kr+eP9dhi/kcKsx4N41p2IXEBil1pQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "cookie": "^0.6.0", "process-warning": "^3.0.0", @@ -45136,21 +42968,18 @@ }, "node_modules/netlify-cli/node_modules/light-my-request/node_modules/process-warning": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", - "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/lines-and-columns": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/listhen": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/listhen/-/listhen-1.6.0.tgz", - "integrity": "sha512-z0RcEXVX5oTpY1bO02SKoTU/kmZSrFSngNNzHRM6KICR17PTq7ANush6AE6ztGJwJD4RLpBrVHd9GnV51J7s3w==", "dev": true, + "license": "MIT", "dependencies": { "@parcel/watcher": "^2.4.0", "@parcel/watcher-wasm": "2.4.0", @@ -45178,9 +43007,8 @@ }, "node_modules/netlify-cli/node_modules/listr2": { "version": "8.2.3", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.3.tgz", - "integrity": "sha512-Lllokma2mtoniUOS94CcOErHWAug5iu7HOmDrvWgpw8jyQH2fomgB+7lZS4HWZxytUuQwkGOwe49FvwVaA85Xw==", "dev": true, + "license": "MIT", "dependencies": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", @@ -45195,21 +43023,18 @@ }, "node_modules/netlify-cli/node_modules/listr2/node_modules/emoji-regex": { "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/listr2/node_modules/eventemitter3": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/listr2/node_modules/string-width": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -45224,9 +43049,8 @@ }, "node_modules/netlify-cli/node_modules/listr2/node_modules/wrap-ansi": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", @@ -45241,9 +43065,8 @@ }, "node_modules/netlify-cli/node_modules/locate-path": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^6.0.0" }, @@ -45256,9 +43079,8 @@ }, "node_modules/netlify-cli/node_modules/locate-path/node_modules/p-limit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^1.0.0" }, @@ -45271,9 +43093,8 @@ }, "node_modules/netlify-cli/node_modules/locate-path/node_modules/p-locate": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^4.0.0" }, @@ -45286,9 +43107,8 @@ }, "node_modules/netlify-cli/node_modules/locate-path/node_modules/yocto-queue": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.20" }, @@ -45298,93 +43118,78 @@ }, "node_modules/netlify-cli/node_modules/lodash": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/lodash-es": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/lodash.deburr": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz", - "integrity": "sha1-3bG7s+8HRYwBd7oH3hRCLLAz/5s=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/lodash.defaults": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/lodash.includes": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/lodash.isarguments": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/lodash.isboolean": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/lodash.isempty": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", - "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/lodash.isinteger": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/lodash.isnumber": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/lodash.isplainobject": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/lodash.isstring": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/lodash.once": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/lodash.transform": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz", - "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/log-process-errors": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/log-process-errors/-/log-process-errors-8.0.0.tgz", - "integrity": "sha512-+SNGqNC1gCMJfhwYzAHr/YgNT/ZJc+V2nCkvtPnjrENMeCe+B/jgShBW0lmWoh6uVV2edFAPc/IUOkDdsjTbTg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "colors-option": "^3.0.0", "figures": "^4.0.0", @@ -45400,9 +43205,8 @@ }, "node_modules/netlify-cli/node_modules/log-process-errors/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -45412,9 +43216,8 @@ }, "node_modules/netlify-cli/node_modules/log-process-errors/node_modules/figures": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/figures/-/figures-4.0.1.tgz", - "integrity": "sha512-rElJwkA/xS04Vfg+CaZodpso7VqBknOYbzi6I76hI4X80RUjkSxO2oAyPmGbuXUppywjqndOrQDl817hDnI++w==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^5.0.0", "is-unicode-supported": "^1.2.0" @@ -45428,9 +43231,8 @@ }, "node_modules/netlify-cli/node_modules/log-process-errors/node_modules/filter-obj": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-3.0.0.tgz", - "integrity": "sha512-oQZM+QmVni8MsYzcq9lgTHD/qeLqaG8XaOPOW7dzuSafVxSUlH1+1ZDefj2OD9f2XsmG5lFl2Euc9NI4jgwFWg==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -45440,9 +43242,8 @@ }, "node_modules/netlify-cli/node_modules/log-process-errors/node_modules/map-obj": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-5.0.2.tgz", - "integrity": "sha512-K6K2NgKnTXimT3779/4KxSvobxOtMmx1LBZ3NwRxT/MDIR3Br/fQ4Q+WCX5QxjyUR8zg5+RV9Tbf2c5pAWTD2A==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -45452,9 +43253,8 @@ }, "node_modules/netlify-cli/node_modules/log-symbols": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", - "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^5.3.0", "is-unicode-supported": "^1.3.0" @@ -45468,9 +43268,8 @@ }, "node_modules/netlify-cli/node_modules/log-update": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz", - "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^6.2.0", "cli-cursor": "^4.0.0", @@ -45487,9 +43286,8 @@ }, "node_modules/netlify-cli/node_modules/log-update/node_modules/ansi-escapes": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", - "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -45499,9 +43297,8 @@ }, "node_modules/netlify-cli/node_modules/log-update/node_modules/cli-cursor": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "dev": true, + "license": "MIT", "dependencies": { "restore-cursor": "^4.0.0" }, @@ -45514,15 +43311,13 @@ }, "node_modules/netlify-cli/node_modules/log-update/node_modules/emoji-regex": { "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/log-update/node_modules/is-fullwidth-code-point": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", - "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", "dev": true, + "license": "MIT", "dependencies": { "get-east-asian-width": "^1.0.0" }, @@ -45535,9 +43330,8 @@ }, "node_modules/netlify-cli/node_modules/log-update/node_modules/restore-cursor": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "dev": true, + "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -45551,9 +43345,8 @@ }, "node_modules/netlify-cli/node_modules/log-update/node_modules/slice-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", - "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^5.0.0" @@ -45567,9 +43360,8 @@ }, "node_modules/netlify-cli/node_modules/log-update/node_modules/string-width": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -45584,9 +43376,8 @@ }, "node_modules/netlify-cli/node_modules/log-update/node_modules/wrap-ansi": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", @@ -45601,9 +43392,8 @@ }, "node_modules/netlify-cli/node_modules/logform": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.0.tgz", - "integrity": "sha512-CPSJw4ftjf517EhXZGGvTHHkYobo7ZCc0kvwUoOYcjfR2UVrI66RHj8MCrfAdEitdmFqbu2BYdYs8FHHZSb6iw==", "dev": true, + "license": "MIT", "dependencies": { "@colors/colors": "1.5.0", "fecha": "^4.2.0", @@ -45614,9 +43404,8 @@ }, "node_modules/netlify-cli/node_modules/lowercase-keys": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -45626,9 +43415,8 @@ }, "node_modules/netlify-cli/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -45638,18 +43426,16 @@ }, "node_modules/netlify-cli/node_modules/luxon": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.2.1.tgz", - "integrity": "sha512-QrwPArQCNLAKGO/C+ZIilgIuDnEnKx5QYODdDtbFaxzsbZcc/a7WFq7MhsVYgRlwawLtvOUESTlfJ+hc/USqPg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" } }, "node_modules/netlify-cli/node_modules/macos-release": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-3.0.1.tgz", - "integrity": "sha512-3l6OrhdDg2H2SigtuN3jBh+5dRJRWxNKuJTPBbGeNJTsmt/pj9PO25wYaNb05NuNmAsl435j4rDP6rgNXz7s7g==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -45659,9 +43445,8 @@ }, "node_modules/netlify-cli/node_modules/make-dir": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^6.0.0" }, @@ -45674,30 +43459,26 @@ }, "node_modules/netlify-cli/node_modules/make-dir/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/netlify-cli/node_modules/make-error": { "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/maxstache": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/maxstache/-/maxstache-1.0.7.tgz", - "integrity": "sha512-53ZBxHrZM+W//5AcRVewiLpDunHnucfdzZUGz54Fnvo4tE+J3p8EL66kBrs2UhBXvYKTWckWYYWBqJqoTcenqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/maxstache-stream": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/maxstache-stream/-/maxstache-stream-1.0.4.tgz", - "integrity": "sha512-v8qlfPN0pSp7bdSoLo1NTjG43GXGqk5W2NWFnOCq2GlmFFqebGzPCjLKSbShuqIOVorOtZSAy7O/S1OCCRONUw==", "dev": true, + "license": "MIT", "dependencies": { "maxstache": "^1.0.0", "pump": "^1.0.0", @@ -45707,9 +43488,8 @@ }, "node_modules/netlify-cli/node_modules/maxstache-stream/node_modules/pump": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -45717,9 +43497,8 @@ }, "node_modules/netlify-cli/node_modules/maxstache-stream/node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -45732,18 +43511,16 @@ }, "node_modules/netlify-cli/node_modules/maxstache-stream/node_modules/split2": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/split2/-/split2-1.1.1.tgz", - "integrity": "sha512-cfurE2q8LamExY+lJ9Ex3ZfBwqAPduzOKVscPDXNCLLMvyaeD3DTz1yk7fVIs6Chco+12XeD0BB6HEoYzPYbXA==", "dev": true, + "license": "ISC", "dependencies": { "through2": "~2.0.0" } }, "node_modules/netlify-cli/node_modules/maxstache-stream/node_modules/through2": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -45751,9 +43528,8 @@ }, "node_modules/netlify-cli/node_modules/md5-hex": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-3.0.1.tgz", - "integrity": "sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==", "dev": true, + "license": "MIT", "dependencies": { "blueimp-md5": "^2.10.0" }, @@ -45763,36 +43539,31 @@ }, "node_modules/netlify-cli/node_modules/mdn-data": { "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true + "dev": true, + "license": "CC0-1.0" }, "node_modules/netlify-cli/node_modules/media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/netlify-cli/node_modules/memoize-one": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", - "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/merge-descriptors": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/merge-options": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", - "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", "dev": true, + "license": "MIT", "dependencies": { "is-plain-obj": "^2.1.0" }, @@ -45802,54 +43573,47 @@ }, "node_modules/netlify-cli/node_modules/merge-options/node_modules/is-plain-obj": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/netlify-cli/node_modules/merge-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/netlify-cli/node_modules/methods": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/netlify-cli/node_modules/micro-api-client": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/micro-api-client/-/micro-api-client-3.3.0.tgz", - "integrity": "sha512-y0y6CUB9RLVsy3kfgayU28746QrNMpSm9O/AYGNsBgOkJr/X/Jk0VLGoO8Ude7Bpa8adywzF+MzXNZRFRsNPhg==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/micro-memoize": { "version": "4.0.11", - "resolved": "https://registry.npmjs.org/micro-memoize/-/micro-memoize-4.0.11.tgz", - "integrity": "sha512-CjxsaYe4j43df32DtzzNCwanPqZjZDwuQAZilsCYpa2ZVtSPDjHXbTlR4gsEZRyO9/twHs0b7HLjvy/sowl7sA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/micromatch": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -45860,9 +43624,8 @@ }, "node_modules/netlify-cli/node_modules/mime": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -45872,18 +43635,16 @@ }, "node_modules/netlify-cli/node_modules/mime-db": { "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/netlify-cli/node_modules/mime-types": { "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": "1.51.0" }, @@ -45893,9 +43654,8 @@ }, "node_modules/netlify-cli/node_modules/mimic-fn": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -45905,9 +43665,8 @@ }, "node_modules/netlify-cli/node_modules/mimic-response": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -45917,9 +43676,8 @@ }, "node_modules/netlify-cli/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -45929,27 +43687,24 @@ }, "node_modules/netlify-cli/node_modules/minimist": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/netlify-cli/node_modules/minipass": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=8" } }, "node_modules/netlify-cli/node_modules/minizlib": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, + "license": "MIT", "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -45960,9 +43715,8 @@ }, "node_modules/netlify-cli/node_modules/minizlib/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -45972,9 +43726,8 @@ }, "node_modules/netlify-cli/node_modules/mkdirp": { "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.6" }, @@ -45984,15 +43737,13 @@ }, "node_modules/netlify-cli/node_modules/mkdirp-classic": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/mlly": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.5.0.tgz", - "integrity": "sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==", "dev": true, + "license": "MIT", "dependencies": { "acorn": "^8.11.3", "pathe": "^1.1.2", @@ -46002,9 +43753,8 @@ }, "node_modules/netlify-cli/node_modules/module-definition": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-5.0.1.tgz", - "integrity": "sha512-kvw3B4G19IXk+BOXnYq/D/VeO9qfHaapMeuS7w7sNUqmGaA6hywdFHMi+VWeR9wUScXM7XjoryTffCZ5B0/8IA==", "dev": true, + "license": "MIT", "dependencies": { "ast-module-types": "^5.0.0", "node-source-walk": "^6.0.1" @@ -46018,9 +43768,8 @@ }, "node_modules/netlify-cli/node_modules/moize": { "version": "6.1.3", - "resolved": "https://registry.npmjs.org/moize/-/moize-6.1.3.tgz", - "integrity": "sha512-Cn+1T5Ypieeo46fn8X98V2gHj2VSRohVPjvT8BRvNANJJC3UOeege/G84xA/3S9c5qA4p9jOdSB1jfhumwe8qw==", "dev": true, + "license": "MIT", "dependencies": { "fast-equals": "^3.0.1", "micro-memoize": "^4.0.11" @@ -46028,9 +43777,8 @@ }, "node_modules/netlify-cli/node_modules/move-file": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/move-file/-/move-file-3.0.0.tgz", - "integrity": "sha512-v6u4XjX3MFW6Jo1V/YfbhC7eiGSgvYPJ/NM+aGtTtB9/Y6IYj7YViaHu6dkgDsZFB7MbnAoSI5+Z26XZXnP0vg==", "dev": true, + "license": "MIT", "dependencies": { "path-exists": "^5.0.0" }, @@ -46043,33 +43791,29 @@ }, "node_modules/netlify-cli/node_modules/move-file/node_modules/path-exists": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/netlify-cli/node_modules/mri": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/netlify-cli/node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/multiparty": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/multiparty/-/multiparty-4.2.3.tgz", - "integrity": "sha512-Ak6EUJZuhGS8hJ3c2fY6UW5MbkGUPMBEGd13djUzoY/BHqV/gTuFWtC6IuVA7A2+v3yjBS6c4or50xhzTQZImQ==", "dev": true, + "license": "MIT", "dependencies": { "http-errors": "~1.8.1", "safe-buffer": "5.2.1", @@ -46081,8 +43825,6 @@ }, "node_modules/netlify-cli/node_modules/multiparty/node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -46097,25 +43839,22 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/netlify-cli/node_modules/mute-stream": { "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/nan": { "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/netlify-cli/node_modules/nanoid": { "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true, "funding": [ { @@ -46123,6 +43862,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -46132,30 +43872,26 @@ }, "node_modules/netlify-cli/node_modules/napi-build-utils": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/negotiator": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/netlify-cli/node_modules/nested-error-stacks": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz", - "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/netlify": { "version": "13.1.20", - "resolved": "https://registry.npmjs.org/netlify/-/netlify-13.1.20.tgz", - "integrity": "sha512-pfYUCfaywrzkMzN8If4IVM58DqsAYq2JroAFziuYK7m0LKYPzlbuSNYWhlfQL/zoBmRm8kxzRxEiK6fj1tvOOw==", "dev": true, + "license": "MIT", "dependencies": { "@netlify/open-api": "^2.33.1", "lodash-es": "^4.17.21", @@ -46171,9 +43907,8 @@ }, "node_modules/netlify-cli/node_modules/netlify-headers-parser": { "version": "7.1.4", - "resolved": "https://registry.npmjs.org/netlify-headers-parser/-/netlify-headers-parser-7.1.4.tgz", - "integrity": "sha512-fTVQf8u65vS4YTP2Qt1K6Np01q3yecRKXf6VMONMlWbfl5n3M/on7pZlZISNAXHNOtnVt+6Kpwfl+RIeALC8Kg==", "dev": true, + "license": "MIT", "dependencies": { "@iarna/toml": "^2.2.5", "escape-string-regexp": "^5.0.0", @@ -46188,9 +43923,8 @@ }, "node_modules/netlify-cli/node_modules/netlify-headers-parser/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -46200,9 +43934,8 @@ }, "node_modules/netlify-cli/node_modules/netlify-headers-parser/node_modules/map-obj": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-5.0.2.tgz", - "integrity": "sha512-K6K2NgKnTXimT3779/4KxSvobxOtMmx1LBZ3NwRxT/MDIR3Br/fQ4Q+WCX5QxjyUR8zg5+RV9Tbf2c5pAWTD2A==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -46212,18 +43945,16 @@ }, "node_modules/netlify-cli/node_modules/netlify-headers-parser/node_modules/path-exists": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/netlify-cli/node_modules/netlify-redirect-parser": { "version": "14.3.0", - "resolved": "https://registry.npmjs.org/netlify-redirect-parser/-/netlify-redirect-parser-14.3.0.tgz", - "integrity": "sha512-/Oqq+SrTXk8hZqjCBy0AkWf5qAhsgcsdxQA09uYFdSSNG5w9rhh17a7dp77o5Q5XoHCahm8u4Kig/lbXkl4j2g==", "dev": true, + "license": "MIT", "dependencies": { "@iarna/toml": "^2.2.5", "fast-safe-stringify": "^2.1.1", @@ -46237,24 +43968,21 @@ }, "node_modules/netlify-cli/node_modules/netlify-redirect-parser/node_modules/path-exists": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/netlify-cli/node_modules/netlify-redirector": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/netlify-redirector/-/netlify-redirector-0.5.0.tgz", - "integrity": "sha512-4zdzIP+6muqPCuE8avnrgDJ6KW/2+UpHTRcTbMXCIRxiRmyrX+IZ4WSJGZdHPWF3WmQpXpy603XxecZ9iygN7w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/netlify/node_modules/p-timeout": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", - "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -46264,9 +43992,8 @@ }, "node_modules/netlify-cli/node_modules/netlify/node_modules/p-wait-for": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-wait-for/-/p-wait-for-4.1.0.tgz", - "integrity": "sha512-i8nE5q++9h8oaQHWltS1Tnnv4IoMDOlqN7C0KFG2OdbK0iFJIt6CROZ8wfBM+K4Pxqfnq4C4lkkpXqTEpB5DZw==", "dev": true, + "license": "MIT", "dependencies": { "p-timeout": "^5.0.0" }, @@ -46279,9 +44006,8 @@ }, "node_modules/netlify-cli/node_modules/node-abi": { "version": "3.51.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.51.0.tgz", - "integrity": "sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.3.5" }, @@ -46291,17 +44017,14 @@ }, "node_modules/netlify-cli/node_modules/node-addon-api": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.0.tgz", - "integrity": "sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==", "dev": true, + "license": "MIT", "engines": { "node": "^16 || ^18 || >= 20" } }, "node_modules/netlify-cli/node_modules/node-domexception": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", "dev": true, "funding": [ { @@ -46313,15 +44036,15 @@ "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "engines": { "node": ">=10.5.0" } }, "node_modules/netlify-cli/node_modules/node-fetch": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", "dev": true, + "license": "MIT", "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -46337,24 +44060,21 @@ }, "node_modules/netlify-cli/node_modules/node-fetch-native": { "version": "1.6.2", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.2.tgz", - "integrity": "sha512-69mtXOFZ6hSkYiXAVB5SqaRvrbITC/NPyqv7yuu/qw0nmgPyYbIMYYNIDhNtwPrzk0ptrimrLz/hhjvm4w5Z+w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/node-forge": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { "node": ">= 6.13.0" } }, "node_modules/netlify-cli/node_modules/node-gyp-build": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", "dev": true, + "license": "MIT", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -46363,9 +44083,8 @@ }, "node_modules/netlify-cli/node_modules/node-source-walk": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-6.0.2.tgz", - "integrity": "sha512-jn9vOIK/nfqoFCcpK89/VCVaLg1IHE6UVfDOzvqmANaJ/rWCTEdH8RZ1V278nv2jr36BJdyQXIAavBLXpzdlag==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.21.8" }, @@ -46375,9 +44094,8 @@ }, "node_modules/netlify-cli/node_modules/node-stream-zip": { "version": "1.15.0", - "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", - "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" }, @@ -46388,9 +44106,8 @@ }, "node_modules/netlify-cli/node_modules/node-version-alias": { "version": "3.4.1", - "resolved": "https://registry.npmjs.org/node-version-alias/-/node-version-alias-3.4.1.tgz", - "integrity": "sha512-Kf3L9spAL6lEHMPyqpwHSTNG3LPkOXBfSUnBMG/YE2TdoC8Qoqf0+qg01nr6K9MFQEcXtWUyTQzLJByRixSBsA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "all-node-versions": "^11.3.0", "filter-obj": "^5.1.0", @@ -46405,18 +44122,16 @@ }, "node_modules/netlify-cli/node_modules/node-version-alias/node_modules/path-exists": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/netlify-cli/node_modules/nopt": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dev": true, + "license": "ISC", "dependencies": { "abbrev": "1" }, @@ -46429,9 +44144,8 @@ }, "node_modules/netlify-cli/node_modules/normalize-node-version": { "version": "12.4.0", - "resolved": "https://registry.npmjs.org/normalize-node-version/-/normalize-node-version-12.4.0.tgz", - "integrity": "sha512-0oLZN5xcyKVrSHMk8/9RuNblEe7HEsXAt5Te2xmMiZD9VX7bqWYe0HMyfqSYFD3xv0949lZuXaEwjTqle1uWWQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "all-node-versions": "^11.3.0", "filter-obj": "^5.1.0", @@ -46443,9 +44157,8 @@ }, "node_modules/netlify-cli/node_modules/normalize-package-data": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", @@ -46458,18 +44171,16 @@ }, "node_modules/netlify-cli/node_modules/normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/netlify-cli/node_modules/normalize-url": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", - "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -46479,9 +44190,8 @@ }, "node_modules/netlify-cli/node_modules/npm-run-path": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -46491,18 +44201,16 @@ }, "node_modules/netlify-cli/node_modules/npm-run-path/node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/netlify-cli/node_modules/npmlog": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", "dev": true, + "license": "ISC", "dependencies": { "are-we-there-yet": "^2.0.0", "console-control-strings": "^1.1.0", @@ -46512,9 +44220,8 @@ }, "node_modules/netlify-cli/node_modules/nth-check": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0" }, @@ -46524,27 +44231,24 @@ }, "node_modules/netlify-cli/node_modules/object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/netlify-cli/node_modules/object-inspect": { "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/netlify-cli/node_modules/ofetch": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.3.3.tgz", - "integrity": "sha512-s1ZCMmQWXy4b5K/TW9i/DtiN8Ku+xCiHcjQ6/J/nDdssirrQNOoB165Zu8EqLMA2lln1JUth9a0aW9Ap2ctrUg==", "dev": true, + "license": "MIT", "dependencies": { "destr": "^2.0.1", "node-fetch-native": "^1.4.0", @@ -46553,30 +44257,26 @@ }, "node_modules/netlify-cli/node_modules/ohash": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.3.tgz", - "integrity": "sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/omit.js": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/omit.js/-/omit.js-2.0.2.tgz", - "integrity": "sha512-hJmu9D+bNB40YpL9jYebQl4lsTW6yEHRTroJzNLqQJYHm7c+NQnJGfZmIWh8S3q3KoaxV1aLhV6B3+0N0/kyJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/on-exit-leak-free": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", - "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.0.0" } }, "node_modules/netlify-cli/node_modules/on-finished": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -46586,36 +44286,32 @@ }, "node_modules/netlify-cli/node_modules/on-headers": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/netlify-cli/node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } }, "node_modules/netlify-cli/node_modules/one-time": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", "dev": true, + "license": "MIT", "dependencies": { "fn.name": "1.x.x" } }, "node_modules/netlify-cli/node_modules/onetime": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -46628,18 +44324,16 @@ }, "node_modules/netlify-cli/node_modules/onetime/node_modules/mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/netlify-cli/node_modules/open": { "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, + "license": "MIT", "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -46654,9 +44348,8 @@ }, "node_modules/netlify-cli/node_modules/open/node_modules/is-docker": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, + "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -46669,9 +44362,8 @@ }, "node_modules/netlify-cli/node_modules/open/node_modules/is-wsl": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, + "license": "MIT", "dependencies": { "is-docker": "^2.0.0" }, @@ -46681,9 +44373,8 @@ }, "node_modules/netlify-cli/node_modules/ora": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-8.0.1.tgz", - "integrity": "sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^5.3.0", "cli-cursor": "^4.0.0", @@ -46704,9 +44395,8 @@ }, "node_modules/netlify-cli/node_modules/ora/node_modules/cli-cursor": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "dev": true, + "license": "MIT", "dependencies": { "restore-cursor": "^4.0.0" }, @@ -46719,15 +44409,13 @@ }, "node_modules/netlify-cli/node_modules/ora/node_modules/emoji-regex": { "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/ora/node_modules/is-unicode-supported": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.0.0.tgz", - "integrity": "sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -46737,9 +44425,8 @@ }, "node_modules/netlify-cli/node_modules/ora/node_modules/restore-cursor": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "dev": true, + "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -46753,9 +44440,8 @@ }, "node_modules/netlify-cli/node_modules/ora/node_modules/string-width": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -46770,9 +44456,8 @@ }, "node_modules/netlify-cli/node_modules/os-name": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-5.0.1.tgz", - "integrity": "sha512-0EQpaHUHq7olp2/YFUr+0vZi9tMpDTblHGz+Ch5RntKxiRXOAY0JOz1UlxhSjMSksHvkm13eD6elJj3M8Ht/kw==", "dev": true, + "license": "MIT", "dependencies": { "macos-release": "^3.0.1", "windows-release": "^5.0.1" @@ -46786,27 +44471,24 @@ }, "node_modules/netlify-cli/node_modules/os-tmpdir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/netlify-cli/node_modules/p-cancelable": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.20" } }, "node_modules/netlify-cli/node_modules/p-event": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-5.0.1.tgz", - "integrity": "sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==", "dev": true, + "license": "MIT", "dependencies": { "p-timeout": "^5.0.2" }, @@ -46819,9 +44501,8 @@ }, "node_modules/netlify-cli/node_modules/p-event/node_modules/p-timeout": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", - "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -46831,9 +44512,8 @@ }, "node_modules/netlify-cli/node_modules/p-every": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-every/-/p-every-2.0.0.tgz", - "integrity": "sha512-MCz9DqD5opPC48Zsd+BHm56O/HfhYIQQtupfDzhXoVgQdg/Ux4F8/JcdRuQ+arq7zD5fB6zP3axbH3d9Nr8dlw==", "dev": true, + "license": "MIT", "dependencies": { "p-map": "^2.0.0" }, @@ -46843,18 +44523,16 @@ }, "node_modules/netlify-cli/node_modules/p-every/node_modules/p-map": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/netlify-cli/node_modules/p-filter": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-4.1.0.tgz", - "integrity": "sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==", "dev": true, + "license": "MIT", "dependencies": { "p-map": "^7.0.1" }, @@ -46867,18 +44545,16 @@ }, "node_modules/netlify-cli/node_modules/p-finally": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/netlify-cli/node_modules/p-map": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.2.tgz", - "integrity": "sha512-z4cYYMMdKHzw4O5UkWJImbZynVIo0lSGTXc7bzB1e/rrDqkgGUNysK/o4bTr+0+xKvvLoTyGqYC4Fgljy9qe1Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -46888,9 +44564,8 @@ }, "node_modules/netlify-cli/node_modules/p-reduce": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", - "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -46900,9 +44575,8 @@ }, "node_modules/netlify-cli/node_modules/p-retry": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-5.1.1.tgz", - "integrity": "sha512-i69WkEU5ZAL8mrmdmVviWwU+DN+IUF8f4sSJThoJ3z5A7Nn5iuO5ROX3Boye0u+uYQLOSfgFl7SuFZCjlAVbQA==", "dev": true, + "license": "MIT", "dependencies": { "@types/retry": "0.12.1", "retry": "^0.13.1" @@ -46916,9 +44590,8 @@ }, "node_modules/netlify-cli/node_modules/p-timeout": { "version": "6.1.2", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.2.tgz", - "integrity": "sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -46928,9 +44601,8 @@ }, "node_modules/netlify-cli/node_modules/p-wait-for": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/p-wait-for/-/p-wait-for-5.0.2.tgz", - "integrity": "sha512-lwx6u1CotQYPVju77R+D0vFomni/AqRfqLmqQ8hekklqZ6gAY9rONh7lBQ0uxWMkC2AuX9b2DVAl8To0NyP1JA==", "dev": true, + "license": "MIT", "dependencies": { "p-timeout": "^6.0.0" }, @@ -46943,9 +44615,8 @@ }, "node_modules/netlify-cli/node_modules/package-json": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.0.tgz", - "integrity": "sha512-hySwcV8RAWeAfPsXb9/HGSPn8lwDnv6fabH+obUZKX169QknRkRhPxd1yMubpKDskLFATkl3jHpNtVtDPFA0Wg==", "dev": true, + "license": "MIT", "dependencies": { "got": "^12.1.0", "registry-auth-token": "^5.0.1", @@ -46961,9 +44632,8 @@ }, "node_modules/netlify-cli/node_modules/parallel-transform": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", "dev": true, + "license": "MIT", "dependencies": { "cyclist": "^1.0.1", "inherits": "^2.0.3", @@ -46972,9 +44642,8 @@ }, "node_modules/netlify-cli/node_modules/parallel-transform/node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -46987,9 +44656,8 @@ }, "node_modules/netlify-cli/node_modules/parse-github-url": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz", - "integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==", "dev": true, + "license": "MIT", "bin": { "parse-github-url": "cli.js" }, @@ -46999,18 +44667,16 @@ }, "node_modules/netlify-cli/node_modules/parse-gitignore": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-gitignore/-/parse-gitignore-2.0.0.tgz", - "integrity": "sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/netlify-cli/node_modules/parse-json": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -47026,9 +44692,8 @@ }, "node_modules/netlify-cli/node_modules/parse-ms": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-3.0.0.tgz", - "integrity": "sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -47038,27 +44703,24 @@ }, "node_modules/netlify-cli/node_modules/parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/netlify-cli/node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/netlify-cli/node_modules/path-key": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -47068,61 +44730,31 @@ }, "node_modules/netlify-cli/node_modules/path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/netlify-cli/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/netlify-cli/node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } + "license": "MIT" }, "node_modules/netlify-cli/node_modules/path-to-regexp": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/netlify-cli/node_modules/pathe": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/peek-readable": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz", - "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -47133,21 +44765,18 @@ }, "node_modules/netlify-cli/node_modules/pend": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/picocolors": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -47157,9 +44786,8 @@ }, "node_modules/netlify-cli/node_modules/pkg-types": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", - "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", "dev": true, + "license": "MIT", "dependencies": { "jsonc-parser": "^3.2.0", "mlly": "^1.2.0", @@ -47168,8 +44796,6 @@ }, "node_modules/netlify-cli/node_modules/postcss": { "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, "funding": [ { @@ -47185,6 +44811,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", @@ -47196,9 +44823,8 @@ }, "node_modules/netlify-cli/node_modules/postcss-values-parser": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-6.0.2.tgz", - "integrity": "sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==", "dev": true, + "license": "MPL-2.0", "dependencies": { "color-name": "^1.1.4", "is-url-superb": "^4.0.0", @@ -47213,15 +44839,13 @@ }, "node_modules/netlify-cli/node_modules/postcss-values-parser/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/prebuild-install": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", "dev": true, + "license": "MIT", "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", @@ -47245,15 +44869,13 @@ }, "node_modules/netlify-cli/node_modules/prebuild-install/node_modules/chownr": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/prebuild-install/node_modules/tar-fs": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "dev": true, + "license": "MIT", "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -47263,9 +44885,8 @@ }, "node_modules/netlify-cli/node_modules/prebuild-install/node_modules/tar-stream": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, + "license": "MIT", "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -47279,9 +44900,8 @@ }, "node_modules/netlify-cli/node_modules/precinct": { "version": "11.0.5", - "resolved": "https://registry.npmjs.org/precinct/-/precinct-11.0.5.tgz", - "integrity": "sha512-oHSWLC8cL/0znFhvln26D14KfCQFFn4KOLSw6hmLhd+LQ2SKt9Ljm89but76Pc7flM9Ty1TnXyrA2u16MfRV3w==", "dev": true, + "license": "MIT", "dependencies": { "@dependents/detective-less": "^4.1.0", "commander": "^10.0.1", @@ -47305,8 +44925,6 @@ }, "node_modules/netlify-cli/node_modules/precond": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", - "integrity": "sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw=", "dev": true, "engines": { "node": ">= 0.6" @@ -47314,9 +44932,8 @@ }, "node_modules/netlify-cli/node_modules/pretty-format": { "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -47328,9 +44945,8 @@ }, "node_modules/netlify-cli/node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -47340,9 +44956,8 @@ }, "node_modules/netlify-cli/node_modules/pretty-ms": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-8.0.0.tgz", - "integrity": "sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==", "dev": true, + "license": "MIT", "dependencies": { "parse-ms": "^3.0.0" }, @@ -47355,9 +44970,8 @@ }, "node_modules/netlify-cli/node_modules/prettyjson": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/prettyjson/-/prettyjson-1.2.5.tgz", - "integrity": "sha512-rksPWtoZb2ZpT5OVgtmy0KHVM+Dca3iVwWY9ifwhcexfjebtgjg3wmrUt9PvJ59XIYBcknQeYHD8IAnVlh9lAw==", "dev": true, + "license": "MIT", "dependencies": { "colors": "1.4.0", "minimist": "^1.2.0" @@ -47368,30 +44982,26 @@ }, "node_modules/netlify-cli/node_modules/process": { "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6.0" } }, "node_modules/netlify-cli/node_modules/process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/proto-list": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/proxy-addr": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, + "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -47402,9 +45012,8 @@ }, "node_modules/netlify-cli/node_modules/ps-list": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/ps-list/-/ps-list-8.1.0.tgz", - "integrity": "sha512-NoGBqJe7Ou3kfQxEvDzDyKGAyEgwIuD3YrfXinjcCmBRv0hTld0Xb71hrXvtsNPj7HSFATfemvzB8PPJtq6Yag==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -47414,9 +45023,8 @@ }, "node_modules/netlify-cli/node_modules/pump": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -47424,18 +45032,16 @@ }, "node_modules/netlify-cli/node_modules/punycode": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/netlify-cli/node_modules/pupa": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", - "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", "dev": true, + "license": "MIT", "dependencies": { "escape-goat": "^4.0.0" }, @@ -47448,9 +45054,8 @@ }, "node_modules/netlify-cli/node_modules/qs": { "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" }, @@ -47463,8 +45068,6 @@ }, "node_modules/netlify-cli/node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -47479,25 +45082,23 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/netlify-cli/node_modules/queue-tick": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/quick-format-unescaped": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", - "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/quick-lru": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -47507,39 +45108,34 @@ }, "node_modules/netlify-cli/node_modules/quote-unquote": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/quote-unquote/-/quote-unquote-1.0.0.tgz", - "integrity": "sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/radix3": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.0.tgz", - "integrity": "sha512-pNsHDxbGORSvuSScqNJ+3Km6QAVqk8CfsCBIEoDgpqLrkD2f3QM4I7d1ozJJ172OmIcoUcerZaNWqtLkRXTV3A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/random-bytes": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", - "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/netlify-cli/node_modules/range-parser": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/netlify-cli/node_modules/raw-body": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -47552,18 +45148,16 @@ }, "node_modules/netlify-cli/node_modules/raw-body/node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/netlify-cli/node_modules/raw-body/node_modules/http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, + "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -47577,9 +45171,8 @@ }, "node_modules/netlify-cli/node_modules/rc": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -47592,30 +45185,26 @@ }, "node_modules/netlify-cli/node_modules/rc/node_modules/ini": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/netlify-cli/node_modules/react-is": { "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/read-package-up": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz", - "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up-simple": "^1.0.0", "read-pkg": "^9.0.0", @@ -47630,9 +45219,8 @@ }, "node_modules/netlify-cli/node_modules/read-package-up/node_modules/hosted-git-info": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", - "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^10.0.1" }, @@ -47642,18 +45230,16 @@ }, "node_modules/netlify-cli/node_modules/read-package-up/node_modules/lru-cache": { "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", "dev": true, + "license": "ISC", "engines": { "node": "14 || >=16.14" } }, "node_modules/netlify-cli/node_modules/read-package-up/node_modules/normalize-package-data": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", - "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^7.0.0", "is-core-module": "^2.8.1", @@ -47666,9 +45252,8 @@ }, "node_modules/netlify-cli/node_modules/read-package-up/node_modules/parse-json": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.1.0.tgz", - "integrity": "sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.22.13", "index-to-position": "^0.1.2", @@ -47683,9 +45268,8 @@ }, "node_modules/netlify-cli/node_modules/read-package-up/node_modules/read-pkg": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", - "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", "dev": true, + "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.3", "normalize-package-data": "^6.0.0", @@ -47702,9 +45286,8 @@ }, "node_modules/netlify-cli/node_modules/read-package-up/node_modules/type-fest": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.12.0.tgz", - "integrity": "sha512-5Y2/pp2wtJk8o08G0CMkuFPCO354FGwk/vbidxrdhRGZfd0tFnb4Qb8anp9XxXriwBgVPjdWbKpGl4J9lJY2jQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=16" }, @@ -47714,9 +45297,8 @@ }, "node_modules/netlify-cli/node_modules/read-pkg-up": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz", - "integrity": "sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^6.3.0", "read-pkg": "^7.1.0", @@ -47731,9 +45313,8 @@ }, "node_modules/netlify-cli/node_modules/read-pkg-up/node_modules/find-up": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^7.1.0", "path-exists": "^5.0.0" @@ -47747,18 +45328,16 @@ }, "node_modules/netlify-cli/node_modules/read-pkg-up/node_modules/path-exists": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/netlify-cli/node_modules/read-pkg-up/node_modules/read-pkg": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz", - "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", "dev": true, + "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.1", "normalize-package-data": "^3.0.2", @@ -47774,9 +45353,8 @@ }, "node_modules/netlify-cli/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -47788,9 +45366,8 @@ }, "node_modules/netlify-cli/node_modules/readable-web-to-node-stream": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", - "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "^3.6.0" }, @@ -47804,27 +45381,24 @@ }, "node_modules/netlify-cli/node_modules/readdir-glob": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", - "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "minimatch": "^5.1.0" } }, "node_modules/netlify-cli/node_modules/readdir-glob/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/netlify-cli/node_modules/readdir-glob/node_modules/minimatch": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -47834,9 +45408,8 @@ }, "node_modules/netlify-cli/node_modules/readdirp": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -47846,27 +45419,24 @@ }, "node_modules/netlify-cli/node_modules/real-require": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", - "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 12.13.0" } }, "node_modules/netlify-cli/node_modules/redis-errors": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", - "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/netlify-cli/node_modules/redis-parser": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", - "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", "dev": true, + "license": "MIT", "dependencies": { "redis-errors": "^1.0.0" }, @@ -47876,9 +45446,8 @@ }, "node_modules/netlify-cli/node_modules/registry-auth-token": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", - "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", "dev": true, + "license": "MIT", "dependencies": { "@pnpm/npm-conf": "^2.1.0" }, @@ -47888,9 +45457,8 @@ }, "node_modules/netlify-cli/node_modules/registry-url": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", - "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", "dev": true, + "license": "MIT", "dependencies": { "rc": "1.2.8" }, @@ -47903,54 +45471,47 @@ }, "node_modules/netlify-cli/node_modules/remove-trailing-separator": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/repeat-string": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } }, "node_modules/netlify-cli/node_modules/require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/netlify-cli/node_modules/require-from-string": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/netlify-cli/node_modules/require-package-name": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/require-package-name/-/require-package-name-2.0.1.tgz", - "integrity": "sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/requires-port": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/resolve": { "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -47965,24 +45526,21 @@ }, "node_modules/netlify-cli/node_modules/resolve-alpn": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/netlify-cli/node_modules/responselike": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", "dev": true, + "license": "MIT", "dependencies": { "lowercase-keys": "^3.0.0" }, @@ -47995,9 +45553,8 @@ }, "node_modules/netlify-cli/node_modules/restore-cursor": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", "dev": true, + "license": "MIT", "dependencies": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" @@ -48008,18 +45565,16 @@ }, "node_modules/netlify-cli/node_modules/restore-cursor/node_modules/mimic-fn": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/netlify-cli/node_modules/restore-cursor/node_modules/onetime": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^1.0.0" }, @@ -48029,18 +45584,16 @@ }, "node_modules/netlify-cli/node_modules/retry": { "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/netlify-cli/node_modules/reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -48048,15 +45601,13 @@ }, "node_modules/netlify-cli/node_modules/rfdc": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -48069,17 +45620,14 @@ }, "node_modules/netlify-cli/node_modules/run-async": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/netlify-cli/node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -48095,15 +45643,15 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/netlify-cli/node_modules/rxjs": { "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^1.9.0" }, @@ -48113,60 +45661,52 @@ }, "node_modules/netlify-cli/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/safe-json-stringify": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/safe-regex2": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-3.1.0.tgz", - "integrity": "sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==", "dev": true, + "license": "MIT", "dependencies": { "ret": "~0.4.0" } }, "node_modules/netlify-cli/node_modules/safe-regex2/node_modules/ret": { "version": "0.4.3", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.4.3.tgz", - "integrity": "sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/netlify-cli/node_modules/safe-stable-stringify": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz", - "integrity": "sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/netlify-cli/node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/secure-json-parse": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", - "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/netlify-cli/node_modules/seek-bzip": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", - "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", "dev": true, + "license": "MIT", "dependencies": { "commander": "^2.8.1" }, @@ -48177,15 +45717,13 @@ }, "node_modules/netlify-cli/node_modules/seek-bzip/node_modules/commander": { "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/semver": { "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -48195,9 +45733,8 @@ }, "node_modules/netlify-cli/node_modules/semver-diff": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", - "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.3.5" }, @@ -48210,9 +45747,8 @@ }, "node_modules/netlify-cli/node_modules/send": { "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -48234,33 +45770,29 @@ }, "node_modules/netlify-cli/node_modules/send/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/netlify-cli/node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/send/node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/netlify-cli/node_modules/send/node_modules/http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, + "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -48274,9 +45806,8 @@ }, "node_modules/netlify-cli/node_modules/serve-static": { "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, + "license": "MIT", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -48289,28 +45820,24 @@ }, "node_modules/netlify-cli/node_modules/set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/set-cookie-parser": { "version": "2.5.1", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.5.1.tgz", - "integrity": "sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/sharp": { "version": "0.32.6", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", - "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", "dev": true, "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { "color": "^4.2.3", "detect-libc": "^2.0.2", @@ -48330,9 +45857,8 @@ }, "node_modules/netlify-cli/node_modules/sharp/node_modules/color": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1", "color-string": "^1.9.0" @@ -48343,9 +45869,8 @@ }, "node_modules/netlify-cli/node_modules/sharp/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -48355,21 +45880,18 @@ }, "node_modules/netlify-cli/node_modules/sharp/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/sharp/node_modules/node-addon-api": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", - "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -48379,18 +45901,16 @@ }, "node_modules/netlify-cli/node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/netlify-cli/node_modules/side-channel": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -48402,14 +45922,11 @@ }, "node_modules/netlify-cli/node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/simple-concat": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", "dev": true, "funding": [ { @@ -48424,12 +45941,11 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/netlify-cli/node_modules/simple-get": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", "dev": true, "funding": [ { @@ -48445,6 +45961,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "decompress-response": "^6.0.0", "once": "^1.3.1", @@ -48453,33 +45970,29 @@ }, "node_modules/netlify-cli/node_modules/simple-swizzle": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.3.1" } }, "node_modules/netlify-cli/node_modules/simple-swizzle/node_modules/is-arrayish": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/netlify-cli/node_modules/slice-ansi": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" @@ -48493,9 +46006,8 @@ }, "node_modules/netlify-cli/node_modules/sort-keys": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", "dev": true, + "license": "MIT", "dependencies": { "is-plain-obj": "^1.0.0" }, @@ -48505,9 +46017,8 @@ }, "node_modules/netlify-cli/node_modules/sort-keys-length": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", "dev": true, + "license": "MIT", "dependencies": { "sort-keys": "^1.0.0" }, @@ -48517,36 +46028,32 @@ }, "node_modules/netlify-cli/node_modules/sort-keys/node_modules/is-plain-obj": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/netlify-cli/node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/netlify-cli/node_modules/source-map-js": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/netlify-cli/node_modules/source-map-support": { "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -48554,9 +46061,8 @@ }, "node_modules/netlify-cli/node_modules/spdx-correct": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -48564,15 +46070,13 @@ }, "node_modules/netlify-cli/node_modules/spdx-exceptions": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true + "dev": true, + "license": "CC-BY-3.0" }, "node_modules/netlify-cli/node_modules/spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, + "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -48580,60 +46084,52 @@ }, "node_modules/netlify-cli/node_modules/spdx-license-ids": { "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true + "dev": true, + "license": "CC0-1.0" }, "node_modules/netlify-cli/node_modules/stack-generator": { "version": "2.0.10", - "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", - "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==", "dev": true, + "license": "MIT", "dependencies": { "stackframe": "^1.3.4" } }, "node_modules/netlify-cli/node_modules/stack-trace": { "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, "node_modules/netlify-cli/node_modules/stackframe": { "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/standard-as-callback": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", - "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/netlify-cli/node_modules/std-env": { "version": "3.7.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", - "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/stdin-discarder": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", - "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -48643,9 +46139,8 @@ }, "node_modules/netlify-cli/node_modules/streamx": { "version": "2.15.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.0.tgz", - "integrity": "sha512-HcxY6ncGjjklGs1xsP1aR71INYcsXFJet5CU1CHqihQ2J5nOsbd4OjgjHO42w/4QNv9gZb3BueV+Vxok5pLEXg==", "dev": true, + "license": "MIT", "dependencies": { "fast-fifo": "^1.1.0", "queue-tick": "^1.0.1" @@ -48653,18 +46148,16 @@ }, "node_modules/netlify-cli/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/netlify-cli/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -48677,9 +46170,8 @@ "node_modules/netlify-cli/node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -48691,18 +46183,16 @@ }, "node_modules/netlify-cli/node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/netlify-cli/node_modules/string-width-cjs/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -48712,18 +46202,16 @@ }, "node_modules/netlify-cli/node_modules/string-width/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/netlify-cli/node_modules/string-width/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -48733,9 +46221,8 @@ }, "node_modules/netlify-cli/node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -48749,9 +46236,8 @@ "node_modules/netlify-cli/node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -48761,15 +46247,13 @@ }, "node_modules/netlify-cli/node_modules/strip-ansi-control-characters": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi-control-characters/-/strip-ansi-control-characters-2.0.0.tgz", - "integrity": "sha512-Q0/k5orrVGeaOlIOUn1gybGU0IcAbgHQT1faLo5hik4DqClKVSaka5xOhNNoRgtfztHVxCYxi7j71mrWom0bIw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/strip-ansi/node_modules/ansi-regex": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -48779,9 +46263,8 @@ }, "node_modules/netlify-cli/node_modules/strip-dirs": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-3.0.0.tgz", - "integrity": "sha512-I0sdgcFTfKQlUPZyAqPJmSG3HLO9rWDFnxonnIbskYNM3DwFOeTNB5KzVq3dA1GdRAc/25b5Y7UO2TQfKWw4aQ==", "dev": true, + "license": "ISC", "dependencies": { "inspect-with-kind": "^1.0.5", "is-plain-obj": "^1.1.0" @@ -48789,27 +46272,24 @@ }, "node_modules/netlify-cli/node_modules/strip-dirs/node_modules/is-plain-obj": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/netlify-cli/node_modules/strip-final-newline": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/netlify-cli/node_modules/strtok3": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz", - "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==", "dev": true, + "license": "MIT", "dependencies": { "@tokenizer/token": "^0.3.0", "peek-readable": "^5.0.0" @@ -48824,9 +46304,8 @@ }, "node_modules/netlify-cli/node_modules/supports-color": { "version": "9.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", - "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -48836,9 +46315,8 @@ }, "node_modules/netlify-cli/node_modules/supports-hyperlinks": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" @@ -48849,9 +46327,8 @@ }, "node_modules/netlify-cli/node_modules/supports-hyperlinks/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -48861,9 +46338,8 @@ }, "node_modules/netlify-cli/node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -48873,9 +46349,8 @@ }, "node_modules/netlify-cli/node_modules/svgo": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.2.0.tgz", - "integrity": "sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ==", "dev": true, + "license": "MIT", "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", @@ -48898,18 +46373,16 @@ }, "node_modules/netlify-cli/node_modules/svgo/node_modules/commander": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } }, "node_modules/netlify-cli/node_modules/system-architecture": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/system-architecture/-/system-architecture-0.1.0.tgz", - "integrity": "sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -48919,9 +46392,8 @@ }, "node_modules/netlify-cli/node_modules/tabtab": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/tabtab/-/tabtab-3.0.2.tgz", - "integrity": "sha512-jANKmUe0sIQc/zTALTBy186PoM/k6aPrh3A7p6AaAfF6WPSbTx1JYeGIGH162btpH+mmVEXln+UxwViZHO2Jhg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.0.1", "es6-promisify": "^6.0.0", @@ -48933,9 +46405,8 @@ }, "node_modules/netlify-cli/node_modules/tar": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dev": true, + "license": "ISC", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -48950,9 +46421,8 @@ }, "node_modules/netlify-cli/node_modules/tar-fs": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", - "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", "dev": true, + "license": "MIT", "dependencies": { "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", @@ -48961,9 +46431,8 @@ }, "node_modules/netlify-cli/node_modules/tar-stream": { "version": "3.1.7", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", "dev": true, + "license": "MIT", "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", @@ -48972,9 +46441,8 @@ }, "node_modules/netlify-cli/node_modules/tar/node_modules/mkdirp": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, + "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" }, @@ -48984,18 +46452,16 @@ }, "node_modules/netlify-cli/node_modules/temp-dir": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", - "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" } }, "node_modules/netlify-cli/node_modules/tempy": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz", - "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==", "dev": true, + "license": "MIT", "dependencies": { "is-stream": "^3.0.0", "temp-dir": "^3.0.0", @@ -49011,9 +46477,8 @@ }, "node_modules/netlify-cli/node_modules/tempy/node_modules/is-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -49023,9 +46488,8 @@ }, "node_modules/netlify-cli/node_modules/terminal-link": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-3.0.0.tgz", - "integrity": "sha512-flFL3m4wuixmf6IfhFJd1YPiLiMuxEc8uHRM1buzIeZPm22Au2pDqBJQgdo7n1WfPU1ONFGv7YDwpFBmHGF6lg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^5.0.0", "supports-hyperlinks": "^2.2.0" @@ -49039,9 +46503,8 @@ }, "node_modules/netlify-cli/node_modules/terminal-link/node_modules/ansi-escapes": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", - "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^1.0.2" }, @@ -49054,9 +46517,8 @@ }, "node_modules/netlify-cli/node_modules/terminal-link/node_modules/type-fest": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -49066,30 +46528,26 @@ }, "node_modules/netlify-cli/node_modules/text-hex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/through2": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "3" } }, "node_modules/netlify-cli/node_modules/through2-filter": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-4.0.0.tgz", - "integrity": "sha512-P8IpQL19bSdXqGLvLdbidYRxERXgHEXGcQofPxbLpPkqS1ieOrUrocdYRTNv8YwSukaDJWr71s6F2kZ3bvgEhA==", "dev": true, + "license": "MIT", "dependencies": { "through2": "^4.0.2" }, @@ -49099,9 +46557,8 @@ }, "node_modules/netlify-cli/node_modules/through2-map": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/through2-map/-/through2-map-4.0.0.tgz", - "integrity": "sha512-+rpmDB5yckiBGEuqJSsWYWMs9e1zdksypDKvByysEyN+knhsPXV9Z6O2mA9meczIa6AON7bi2G3xWk5T8UG4zQ==", "dev": true, + "license": "MIT", "dependencies": { "through2": "^4.0.2" }, @@ -49111,18 +46568,16 @@ }, "node_modules/netlify-cli/node_modules/time-zone": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz", - "integrity": "sha1-mcW/VZWJZq9tBtg73zgA3IL67F0=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/netlify-cli/node_modules/tmp": { "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, + "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -49132,18 +46587,16 @@ }, "node_modules/netlify-cli/node_modules/tmp-promise": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", - "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", "dev": true, + "license": "MIT", "dependencies": { "tmp": "^0.2.0" } }, "node_modules/netlify-cli/node_modules/tmp-promise/node_modules/tmp": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, + "license": "MIT", "dependencies": { "rimraf": "^3.0.0" }, @@ -49153,18 +46606,16 @@ }, "node_modules/netlify-cli/node_modules/to-fast-properties": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/netlify-cli/node_modules/to-readable-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-3.0.0.tgz", - "integrity": "sha512-vD2LytT6DxPynBa1xbMtswY9gGqj27wNbh2uvI5OhBe+mrGLurRWRQZyQn3812sqlQRtUJwaKVshG+PoGwbPDQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -49174,9 +46625,8 @@ }, "node_modules/netlify-cli/node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -49186,27 +46636,24 @@ }, "node_modules/netlify-cli/node_modules/toad-cache": { "version": "3.7.0", - "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz", - "integrity": "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" } }, "node_modules/netlify-cli/node_modules/toidentifier": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6" } }, "node_modules/netlify-cli/node_modules/token-types": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", - "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", "dev": true, + "license": "MIT", "dependencies": { "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" @@ -49221,33 +46668,28 @@ }, "node_modules/netlify-cli/node_modules/toml": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", - "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/tomlify-j0.4": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tomlify-j0.4/-/tomlify-j0.4-3.0.0.tgz", - "integrity": "sha512-2Ulkc8T7mXJ2l0W476YC/A209PR38Nw8PuaCNtk9uI3t1zzFdGQeWYGQvmj2PZkVvRC/Yoi4xQKMRnWc/N29tQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/tr46": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/triple-beam": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/ts-node": { "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dev": true, + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -49288,24 +46730,21 @@ }, "node_modules/netlify-cli/node_modules/ts-node/node_modules/diff": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/netlify-cli/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/netlify-cli/node_modules/tsutils": { "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^1.8.1" }, @@ -49318,9 +46757,8 @@ }, "node_modules/netlify-cli/node_modules/tunnel-agent": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, + "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" }, @@ -49330,9 +46768,8 @@ }, "node_modules/netlify-cli/node_modules/type-fest": { "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=12.20" }, @@ -49342,9 +46779,8 @@ }, "node_modules/netlify-cli/node_modules/type-is": { "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, + "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -49355,18 +46791,16 @@ }, "node_modules/netlify-cli/node_modules/typedarray-to-buffer": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, + "license": "MIT", "dependencies": { "is-typedarray": "^1.0.0" } }, "node_modules/netlify-cli/node_modules/typescript": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -49377,15 +46811,13 @@ }, "node_modules/netlify-cli/node_modules/ufo": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.4.0.tgz", - "integrity": "sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/uid-safe": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", - "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", "dev": true, + "license": "MIT", "dependencies": { "random-bytes": "~1.0.0" }, @@ -49395,18 +46827,16 @@ }, "node_modules/netlify-cli/node_modules/ulid": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/ulid/-/ulid-2.3.0.tgz", - "integrity": "sha512-keqHubrlpvT6G2wH0OEfSW4mquYRcbe/J8NMmveoQOjUqmo+hXtO+ORCpWhdbZ7k72UtY61BL7haGxW6enBnjw==", "dev": true, + "license": "MIT", "bin": { "ulid": "bin/cli.js" } }, "node_modules/netlify-cli/node_modules/unbzip2-stream": { "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "dev": true, + "license": "MIT", "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -49414,21 +46844,18 @@ }, "node_modules/netlify-cli/node_modules/uncrypto": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", - "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/undici-types": { "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/unenv": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/unenv/-/unenv-1.9.0.tgz", - "integrity": "sha512-QKnFNznRxmbOF1hDgzpqrlIf6NC5sbZ2OJ+5Wl3OX8uM+LUJXbj4TXvLJCtwbPTmbMHCLIz6JLKNinNsMShK9g==", "dev": true, + "license": "MIT", "dependencies": { "consola": "^3.2.3", "defu": "^6.1.3", @@ -49439,9 +46866,8 @@ }, "node_modules/netlify-cli/node_modules/unenv/node_modules/mime": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", "dev": true, + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -49451,9 +46877,8 @@ }, "node_modules/netlify-cli/node_modules/unicorn-magic": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -49463,9 +46888,8 @@ }, "node_modules/netlify-cli/node_modules/unique-string": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", "dev": true, + "license": "MIT", "dependencies": { "crypto-random-string": "^4.0.0" }, @@ -49478,16 +46902,13 @@ }, "node_modules/netlify-cli/node_modules/universal-user-agent": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", - "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/unix-dgram": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/unix-dgram/-/unix-dgram-2.0.6.tgz", - "integrity": "sha512-AURroAsb73BZ6CdAyMrTk/hYKNj3DuYYEuOaB8bYMOHGKupRNScw90Q5C71tWJc3uE7dIeXRyuwN0xLLq3vDTg==", "dev": true, - "hasInstallScript": true, + "license": "ISC", "optional": true, "dependencies": { "bindings": "^1.5.0", @@ -49499,9 +46920,8 @@ }, "node_modules/netlify-cli/node_modules/unixify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz", - "integrity": "sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==", "dev": true, + "license": "MIT", "dependencies": { "normalize-path": "^2.1.1" }, @@ -49511,9 +46931,8 @@ }, "node_modules/netlify-cli/node_modules/unixify/node_modules/normalize-path": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dev": true, + "license": "MIT", "dependencies": { "remove-trailing-separator": "^1.0.1" }, @@ -49523,27 +46942,24 @@ }, "node_modules/netlify-cli/node_modules/unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/netlify-cli/node_modules/untildify": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.3.tgz", - "integrity": "sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/netlify-cli/node_modules/untun": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/untun/-/untun-0.1.3.tgz", - "integrity": "sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ==", "dev": true, + "license": "MIT", "dependencies": { "citty": "^0.1.5", "consola": "^3.2.3", @@ -49555,9 +46971,8 @@ }, "node_modules/netlify-cli/node_modules/update-notifier": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-7.0.0.tgz", - "integrity": "sha512-Hv25Bh+eAbOLlsjJreVPOs4vd51rrtCrmhyOJtbpAojro34jS4KQaEp4/EvlHJX7jSO42VvEFpkastVyXyIsdQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boxen": "^7.1.1", "chalk": "^5.3.0", @@ -49581,64 +46996,56 @@ }, "node_modules/netlify-cli/node_modules/uqr": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/uqr/-/uqr-0.1.2.tgz", - "integrity": "sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/netlify-cli/node_modules/urlpattern-polyfill": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz", - "integrity": "sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/utils-merge": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4.0" } }, "node_modules/netlify-cli/node_modules/uuid": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", "dev": true, "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/netlify-cli/node_modules/v8-compile-cache-lib": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -49646,9 +47053,8 @@ }, "node_modules/netlify-cli/node_modules/validate-npm-package-name": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", "dev": true, + "license": "ISC", "dependencies": { "builtins": "^5.0.0" }, @@ -49658,18 +47064,16 @@ }, "node_modules/netlify-cli/node_modules/vary": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/netlify-cli/node_modules/wait-port": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/wait-port/-/wait-port-1.1.0.tgz", - "integrity": "sha512-3e04qkoN3LxTMLakdqeWth8nih8usyg+sf1Bgdf9wwUkp05iuK1eSY/QpLvscT/+F/gA89+LpUmmgBtesbqI2Q==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.2", "commander": "^9.3.0", @@ -49684,9 +47088,8 @@ }, "node_modules/netlify-cli/node_modules/wait-port/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -49699,9 +47102,8 @@ }, "node_modules/netlify-cli/node_modules/wait-port/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -49715,9 +47117,8 @@ }, "node_modules/netlify-cli/node_modules/wait-port/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -49727,24 +47128,21 @@ }, "node_modules/netlify-cli/node_modules/wait-port/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/wait-port/node_modules/commander": { "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || >=14" } }, "node_modules/netlify-cli/node_modules/wait-port/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -49754,27 +47152,24 @@ }, "node_modules/netlify-cli/node_modules/web-streams-polyfill": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz", - "integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/netlify-cli/node_modules/well-known-symbols": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz", - "integrity": "sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==", "dev": true, + "license": "ISC", "engines": { "node": ">=6" } }, "node_modules/netlify-cli/node_modules/whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -49782,15 +47177,13 @@ }, "node_modules/netlify-cli/node_modules/whatwg-url/node_modules/webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/netlify-cli/node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -49803,24 +47196,21 @@ }, "node_modules/netlify-cli/node_modules/which/node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/wide-align": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } }, "node_modules/netlify-cli/node_modules/widest-line": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", "dev": true, + "license": "MIT", "dependencies": { "string-width": "^5.0.1" }, @@ -49833,15 +47223,13 @@ }, "node_modules/netlify-cli/node_modules/widest-line/node_modules/emoji-regex": { "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/widest-line/node_modules/string-width": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -49856,9 +47244,8 @@ }, "node_modules/netlify-cli/node_modules/windows-release": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-5.0.1.tgz", - "integrity": "sha512-y1xFdFvdMiDXI3xiOhMbJwt1Y7dUxidha0CWPs1NgjZIjZANTcX7+7bMqNjuezhzb8s5JGEiBAbQjQQYYy7ulw==", "dev": true, + "license": "MIT", "dependencies": { "execa": "^5.1.1" }, @@ -49871,9 +47258,8 @@ }, "node_modules/netlify-cli/node_modules/winston": { "version": "3.13.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.13.0.tgz", - "integrity": "sha512-rwidmA1w3SE4j0E5MuIufFhyJPBDG7Nu71RkZor1p2+qHvJSZ9GYDA81AyleQcZbh/+V6HjeBdfnTZJm9rSeQQ==", "dev": true, + "license": "MIT", "dependencies": { "@colors/colors": "^1.6.0", "@dabh/diagnostics": "^2.0.2", @@ -49893,9 +47279,8 @@ }, "node_modules/netlify-cli/node_modules/winston-transport": { "version": "4.7.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.0.tgz", - "integrity": "sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==", "dev": true, + "license": "MIT", "dependencies": { "logform": "^2.3.2", "readable-stream": "^3.6.0", @@ -49907,18 +47292,16 @@ }, "node_modules/netlify-cli/node_modules/winston/node_modules/@colors/colors": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", - "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.1.90" } }, "node_modules/netlify-cli/node_modules/winston/node_modules/is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -49928,9 +47311,8 @@ }, "node_modules/netlify-cli/node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -49946,9 +47328,8 @@ "node_modules/netlify-cli/node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -49963,9 +47344,8 @@ }, "node_modules/netlify-cli/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -49978,9 +47358,8 @@ }, "node_modules/netlify-cli/node_modules/wrap-ansi-cjs/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -49990,15 +47369,13 @@ }, "node_modules/netlify-cli/node_modules/wrap-ansi-cjs/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -50008,9 +47385,8 @@ }, "node_modules/netlify-cli/node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -50023,9 +47399,8 @@ }, "node_modules/netlify-cli/node_modules/wrap-ansi/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -50035,15 +47410,13 @@ }, "node_modules/netlify-cli/node_modules/wrap-ansi/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -50053,15 +47426,13 @@ }, "node_modules/netlify-cli/node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/write-file-atomic": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^4.0.1" @@ -50072,9 +47443,8 @@ }, "node_modules/netlify-cli/node_modules/write-file-atomic/node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -50084,9 +47454,8 @@ }, "node_modules/netlify-cli/node_modules/ws": { "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -50105,9 +47474,8 @@ }, "node_modules/netlify-cli/node_modules/xdg-basedir": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", - "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -50117,9 +47485,8 @@ }, "node_modules/netlify-cli/node_modules/xss": { "version": "1.0.14", - "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.14.tgz", - "integrity": "sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==", "dev": true, + "license": "MIT", "dependencies": { "commander": "^2.20.3", "cssfilter": "0.0.10" @@ -50133,39 +47500,34 @@ }, "node_modules/netlify-cli/node_modules/xss/node_modules/commander": { "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netlify-cli/node_modules/xtend": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4" } }, "node_modules/netlify-cli/node_modules/y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/netlify-cli/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/netlify-cli/node_modules/yargs": { "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -50181,9 +47543,8 @@ }, "node_modules/netlify-cli/node_modules/yargs/node_modules/cliui": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -50195,9 +47556,8 @@ }, "node_modules/netlify-cli/node_modules/yargs/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -50207,18 +47567,16 @@ }, "node_modules/netlify-cli/node_modules/yargs/node_modules/yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/netlify-cli/node_modules/yauzl": { "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", "dev": true, + "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -50226,18 +47584,16 @@ }, "node_modules/netlify-cli/node_modules/yn": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/netlify-cli/node_modules/zip-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz", - "integrity": "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==", "dev": true, + "license": "MIT", "dependencies": { "archiver-utils": "^5.0.0", "compress-commons": "^6.0.2", @@ -50249,8 +47605,6 @@ }, "node_modules/netlify-cli/node_modules/zip-stream/node_modules/buffer": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "funding": [ { @@ -50266,6 +47620,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -50273,9 +47628,8 @@ }, "node_modules/netlify-cli/node_modules/zip-stream/node_modules/readable-stream": { "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", "dev": true, + "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -50289,8 +47643,6 @@ }, "node_modules/netlify-cli/node_modules/zip-stream/node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -50305,30 +47657,25 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/netlify-cli/node_modules/zip-stream/node_modules/string_decoder": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/netlify-cli/node_modules/zod": { "version": "3.23.8", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", - "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } }, - "node_modules/netlify-cli/tools/lint-rules": { - "name": "eslint-plugin-workspace", - "extraneous": true - }, "node_modules/next-tick": { "version": "1.1.0", "dev": true, @@ -50357,37 +47704,27 @@ "node": ">=10" } }, - "node_modules/node-abi/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-abi/node_modules/semver": { - "version": "7.5.4", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-abi/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/node-addon-api": { "version": "6.1.0", "license": "MIT" }, + "node_modules/node-domexception": { + "version": "1.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, "node_modules/node-emoji": { "version": "2.1.3", "license": "MIT", @@ -50402,21 +47739,19 @@ } }, "node_modules/node-fetch": { - "version": "2.7.0", + "version": "3.3.2", "license": "MIT", "dependencies": { - "whatwg-url": "^5.0.0" + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" } }, "node_modules/node-fetch-h2": { @@ -50429,22 +47764,6 @@ "node": "4.x || >=6.0.0" } }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "license": "MIT" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "license": "BSD-2-Clause" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/node-forge": { "version": "1.3.1", "license": "(BSD-3-Clause OR GPL-2.0)", @@ -50533,36 +47852,6 @@ "node": ">=10" } }, - "node_modules/normalize-package-data/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/normalize-path": { "version": "3.0.0", "license": "MIT", @@ -53998,9 +51287,8 @@ }, "node_modules/ora": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-8.0.1.tgz", - "integrity": "sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^5.3.0", "cli-cursor": "^4.0.0", @@ -54021,9 +51309,8 @@ }, "node_modules/ora/node_modules/ansi-regex": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -54033,9 +51320,8 @@ }, "node_modules/ora/node_modules/chalk": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -54045,15 +51331,13 @@ }, "node_modules/ora/node_modules/emoji-regex": { "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ora/node_modules/is-unicode-supported": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.0.0.tgz", - "integrity": "sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -54063,9 +51347,8 @@ }, "node_modules/ora/node_modules/log-symbols": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", - "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^5.3.0", "is-unicode-supported": "^1.3.0" @@ -54079,9 +51362,8 @@ }, "node_modules/ora/node_modules/log-symbols/node_modules/is-unicode-supported": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -54091,9 +51373,8 @@ }, "node_modules/ora/node_modules/stdin-discarder": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", - "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -54103,9 +51384,8 @@ }, "node_modules/ora/node_modules/string-width": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -54120,9 +51400,8 @@ }, "node_modules/ora/node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -54338,6 +51617,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-ratelimit": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=10.23.0" + } + }, "node_modules/p-reduce": { "version": "2.1.0", "dev": true, @@ -54398,33 +51684,6 @@ "dev": true, "license": "BlueOak-1.0.0" }, - "node_modules/package-json/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/package-json/node_modules/semver": { - "version": "7.5.4", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/package-json/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/pako": { "version": "1.0.11", "license": "(MIT AND Zlib)" @@ -54515,9 +51774,8 @@ }, "node_modules/parse-ms": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", - "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -55141,16 +52399,13 @@ }, "node_modules/possible-typed-array-names": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/postcss": { "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "funding": [ { "type": "opencollective", @@ -55165,6 +52420,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", @@ -55324,33 +52580,6 @@ "webpack": "^5.0.0" } }, - "node_modules/postcss-loader/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postcss-loader/node_modules/semver": { - "version": "7.5.4", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postcss-loader/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/postcss-merge-idents": { "version": "5.1.1", "dev": true, @@ -55470,8 +52699,7 @@ }, "node_modules/postcss-modules-local-by-default": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", - "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "license": "MIT", "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", @@ -55486,8 +52714,7 @@ }, "node_modules/postcss-modules-scope": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", - "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "license": "ISC", "dependencies": { "postcss-selector-parser": "^6.0.4" }, @@ -55707,8 +52934,7 @@ }, "node_modules/postcss-selector-parser": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", - "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", + "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -55863,9 +53089,8 @@ }, "node_modules/prettier": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", - "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -55929,9 +53154,8 @@ }, "node_modules/pretty-ms": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.0.0.tgz", - "integrity": "sha512-E9e9HJ9R9NasGOgPaPE8VMeiPKAyWR5jcFpNnwIejslIhWqdqOrb2wShBsncMPUb+BcCd2OPYfh7p2W6oemTng==", "dev": true, + "license": "MIT", "dependencies": { "parse-ms": "^4.0.0" }, @@ -57016,8 +54240,7 @@ }, "node_modules/react-json-view-lite": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-1.4.0.tgz", - "integrity": "sha512-wh6F6uJyYAmQ4fK0e8dSQMEWuvTs2Wr3el3sLD9bambX1+pSWUVXIz1RFaoy3TI1mZ0FqdpKq9YgbgTTgyrmXA==", + "license": "MIT", "engines": { "node": ">=14" }, @@ -57080,591 +54303,27 @@ "license": "MIT" }, "node_modules/react-markdown": { - "version": "8.0.7", + "version": "9.0.1", "license": "MIT", "dependencies": { - "@types/hast": "^2.0.0", - "@types/prop-types": "^15.0.0", - "@types/unist": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-whitespace": "^2.0.0", - "prop-types": "^15.0.0", - "property-information": "^6.0.0", - "react-is": "^18.0.0", - "remark-parse": "^10.0.0", - "remark-rehype": "^10.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^0.4.0", - "unified": "^10.0.0", - "unist-util-visit": "^4.0.0", - "vfile": "^5.0.0" + "@types/hast": "^3.0.0", + "devlop": "^1.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "html-url-attributes": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "unified": "^11.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" }, "peerDependencies": { - "@types/react": ">=16", - "react": ">=16" - } - }, - "node_modules/react-markdown/node_modules/@types/hast": { - "version": "2.3.8", - "license": "MIT", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/react-markdown/node_modules/@types/unist": { - "version": "2.0.10", - "license": "MIT" - }, - "node_modules/react-markdown/node_modules/hast-util-whitespace": { - "version": "2.0.1", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/mdast-util-definitions": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/mdast-util-from-markdown": { - "version": "1.3.1", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/mdast-util-to-hast": { - "version": "12.3.0", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-definitions": "^5.0.0", - "micromark-util-sanitize-uri": "^1.1.0", - "trim-lines": "^3.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/mdast-util-to-string": { - "version": "3.2.0", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/micromark": { - "version": "3.2.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-core-commonmark": { - "version": "1.1.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-factory-destination": { - "version": "1.1.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-factory-label": { - "version": "1.1.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-factory-title": { - "version": "1.1.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-factory-whitespace": { - "version": "1.1.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-util-chunked": { - "version": "1.1.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-util-classify-character": { - "version": "1.1.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-util-combine-extensions": { - "version": "1.1.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-util-decode-numeric-character-reference": { - "version": "1.1.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-util-decode-string": { - "version": "1.1.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-util-encode": { - "version": "1.1.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/react-markdown/node_modules/micromark-util-html-tag-name": { - "version": "1.2.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/react-markdown/node_modules/micromark-util-normalize-identifier": { - "version": "1.1.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-util-resolve-all": { - "version": "1.1.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-util-sanitize-uri": { - "version": "1.2.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-util-subtokenize": { - "version": "1.1.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/react-markdown/node_modules/react-is": { - "version": "18.2.0", - "license": "MIT" - }, - "node_modules/react-markdown/node_modules/remark-parse": { - "version": "10.0.2", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/remark-rehype": { - "version": "10.1.0", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-to-hast": "^12.1.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/unified": { - "version": "10.1.2", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/unist-util-generated": { - "version": "2.0.1", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/unist-util-is": { - "version": "5.2.1", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/unist-util-position": { - "version": "4.0.4", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/unist-util-visit": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/vfile": { - "version": "5.3.7", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/vfile-message": { - "version": "3.1.4", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@types/react": ">=18", + "react": ">=18" } }, "node_modules/react-modal": { @@ -58007,31 +54666,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-pkg/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/read-pkg/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/read-pkg/node_modules/type-fest": { "version": "4.8.3", "dev": true, @@ -58043,11 +54677,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-pkg/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/readable-stream": { "version": "4.4.2", "license": "MIT", @@ -58274,9 +54903,8 @@ }, "node_modules/regexp.prototype.flags": { "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "define-properties": "^1.2.1", @@ -59446,9 +56074,8 @@ }, "node_modules/safe-array-concat": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4", @@ -59464,9 +56091,8 @@ }, "node_modules/safe-array-concat/node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/safe-buffer": { "version": "5.2.1", @@ -59496,9 +56122,8 @@ }, "node_modules/safe-regex-test": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -59517,8 +56142,7 @@ }, "node_modules/sass": { "version": "1.77.6", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", - "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", + "license": "MIT", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -59591,16 +56215,6 @@ "version": "0.4.1", "license": "MIT" }, - "node_modules/sass-loader/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/sass-loader/node_modules/schema-utils": { "version": "3.3.0", "license": "MIT", @@ -59617,23 +56231,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/sass-loader/node_modules/semver": { - "version": "7.5.4", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/sass-loader/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/sax": { "version": "1.3.0", "license": "ISC" @@ -59682,8 +56279,7 @@ }, "node_modules/search-insights": { "version": "2.14.0", - "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.14.0.tgz", - "integrity": "sha512-OLN6MsPMCghDOqlCtsIsYgtsC0pnwVTyT9Mu6A3ewOj1DxvzZF6COrn2g86E/c05xbktB0XN04m/t1Z+n+fTGw==", + "license": "MIT", "peer": true }, "node_modules/section-matter": { @@ -60219,6 +56815,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/semantic-release/node_modules/node-fetch": { + "version": "2.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/semantic-release/node_modules/normalize-package-data": { "version": "2.5.0", "dev": true, @@ -62992,31 +59607,6 @@ "node": ">=8" } }, - "node_modules/semantic-release/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semantic-release/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/semantic-release/node_modules/temp-dir": { "version": "2.0.0", "dev": true, @@ -63054,6 +59644,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/semantic-release/node_modules/tr46": { + "version": "0.0.3", + "dev": true, + "license": "MIT" + }, "node_modules/semantic-release/node_modules/unique-string": { "version": "2.0.0", "dev": true, @@ -63070,6 +59665,20 @@ "dev": true, "license": "MIT" }, + "node_modules/semantic-release/node_modules/webidl-conversions": { + "version": "3.0.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/semantic-release/node_modules/whatwg-url": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/semantic-release/node_modules/yallist": { "version": "4.0.0", "dev": true, @@ -63087,10 +59696,13 @@ } }, "node_modules/semver": { - "version": "6.3.1", + "version": "7.6.2", "license": "ISC", "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/semver-diff": { @@ -63106,33 +59718,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semver-diff/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-diff/node_modules/semver": { - "version": "7.5.4", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-diff/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/semver-greatest-satisfied-range": { "version": "1.1.0", "dev": true, @@ -63376,8 +59961,7 @@ }, "node_modules/set-function-length": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -63482,33 +60066,6 @@ "url": "https://opencollective.com/libvips" } }, - "node_modules/sharp/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/sharp/node_modules/semver": { - "version": "7.5.4", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/sharp/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/shebang-command": { "version": "2.0.0", "license": "MIT", @@ -63708,8 +60265,7 @@ }, "node_modules/sitemap": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.2.tgz", - "integrity": "sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==", + "license": "MIT", "dependencies": { "@types/node": "^17.0.5", "@types/sax": "^1.2.1", @@ -63726,8 +60282,7 @@ }, "node_modules/sitemap/node_modules/@types/node": { "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + "license": "MIT" }, "node_modules/skin-tone": { "version": "2.0.0", @@ -63781,8 +60336,7 @@ }, "node_modules/snake-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "license": "MIT", "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" @@ -63957,8 +60511,7 @@ }, "node_modules/source-map-js": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -64523,9 +61076,8 @@ }, "node_modules/string.prototype.trim": { "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -64541,9 +61093,8 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -64555,9 +61106,8 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -64759,9 +61309,8 @@ }, "node_modules/stylus": { "version": "0.62.0", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.62.0.tgz", - "integrity": "sha512-v3YCf31atbwJQIMtPNX8hcQ+okD4NQaTuKGUWfII8eaqn+3otrbttGL1zSMZAAtiPsBztQnujVBugg/cXFUpyg==", "dev": true, + "license": "MIT", "dependencies": { "@adobe/css-tools": "~4.3.1", "debug": "^4.3.2", @@ -65022,6 +61571,40 @@ "url": "https://github.com/Mermade/oas-kit?sponsor=1" } }, + "node_modules/swagger2openapi/node_modules/node-fetch": { + "version": "2.7.0", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/swagger2openapi/node_modules/tr46": { + "version": "0.0.3", + "license": "MIT" + }, + "node_modules/swagger2openapi/node_modules/webidl-conversions": { + "version": "3.0.1", + "license": "BSD-2-Clause" + }, + "node_modules/swagger2openapi/node_modules/whatwg-url": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/symbol-tree": { "version": "3.2.4", "dev": true, @@ -65642,9 +62225,8 @@ }, "node_modules/test-links/node_modules/ws": { "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.3.0" }, @@ -66248,9 +62830,8 @@ }, "node_modules/ts-api-utils": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -66264,9 +62845,8 @@ }, "node_modules/ts-jest": { "version": "29.1.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.4.tgz", - "integrity": "sha512-YiHwDhSvCiItoAgsKtoLFCuakDzDsJ1DLDnSouTaTmdOcOwIkSzbLXduaQ6M5DRVhuZC/NYaaZ/mtHbWMv/S6Q==", "dev": true, + "license": "MIT", "dependencies": { "bs-logger": "0.x", "fast-json-stable-stringify": "2.x", @@ -66309,36 +62889,6 @@ } } }, - "node_modules/ts-jest/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-jest/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-jest/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/ts-jest/node_modules/yargs-parser": { "version": "21.1.1", "dev": true, @@ -66498,9 +63048,8 @@ }, "node_modules/typed-array-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -66512,9 +63061,8 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -66531,9 +63079,8 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -66551,9 +63098,8 @@ }, "node_modules/typed-array-length": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -66594,9 +63140,8 @@ }, "node_modules/typescript-plugin-css-modules": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/typescript-plugin-css-modules/-/typescript-plugin-css-modules-5.1.0.tgz", - "integrity": "sha512-6h+sLBa4l+XYSTn/31vZHd/1c3SvAbLpobY6FxDiUOHJQG1eD9Gh3eCs12+Eqc+TCOAdxcO+zAPvUq0jBfdciw==", "dev": true, + "license": "MIT", "dependencies": { "@types/postcss-modules-local-by-default": "^4.0.2", "@types/postcss-modules-scope": "^3.0.4", @@ -67297,33 +63842,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/update-notifier/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/update-notifier/node_modules/semver": { - "version": "7.5.4", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/update-notifier/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/uri-js": { "version": "4.4.1", "license": "BSD-2-Clause", @@ -67611,33 +64129,6 @@ "node": ">= 12" } }, - "node_modules/validate-peer-dependencies/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/validate-peer-dependencies/node_modules/semver": { - "version": "7.5.4", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/validate-peer-dependencies/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/validate.io-array": { "version": "1.0.6", "license": "MIT" @@ -68133,6 +64624,13 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, "node_modules/webidl-conversions": { "version": "7.0.0", "dev": true, @@ -68220,8 +64718,7 @@ }, "node_modules/webpack-bundle-analyzer/node_modules/ws": { "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", "engines": { "node": ">=8.3.0" }, @@ -68485,9 +64982,8 @@ }, "node_modules/webpconvert": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webpconvert/-/webpconvert-3.0.1.tgz", - "integrity": "sha512-svqxsUKvOR1ZBMDQG03uKTDVYIA8G+wMBsyOOOBmxYIW+ajRJF//m21YCxr9B9QB338VWHLgwDuyFon+Rx8p4Q==", "dev": true, + "license": "MIT", "dependencies": { "gulp": "^4.0.2", "gulp-imagemin": "^8.0.0", @@ -68631,8 +65127,7 @@ }, "node_modules/which-typed-array": { "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -68808,8 +65303,7 @@ }, "node_modules/ws": { "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -68990,9 +65484,8 @@ }, "node_modules/yoctocolors": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.0.2.tgz", - "integrity": "sha512-Ct97huExsu7cWeEjmrXlofevF8CvzUglJ4iGUet5B8xn1oumtAZBpHU4GzYuoE6PVqcZ5hghtBrSlhwHuR1Jmw==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, diff --git a/package.json b/package.json index 5af771b997..163b84e41b 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "react-live": ">=3.1.1 <4.0.0" }, "dependencies": { + "@ant-design/icons": "^4.8.3", "@commitlint/cli": "^19.3.0", "@commitlint/config-conventional": "^19.2.2", "@docusaurus/core": "^3.4.0", @@ -47,6 +48,7 @@ "@fortawesome/react-fontawesome": "^0.2.0", "@mdx-js/react": "^3.0.0", "antd": "^5.6.2", + "axios-retry": "^3.8.0", "babel-plugin-macros": "^3.1.0", "clsx": "^1.2.1", "docusaurus-plugin-image-zoom": "^1.0.1", @@ -54,11 +56,17 @@ "docusaurus-plugin-sass": "^0.2.5", "docusaurus-theme-openapi-docs": "^3.0.0-beta.10", "fuse.js": "^6.6.2", + "markdown-to-jsx": "^7.0.0", + "node-fetch": "^3.1.0", + "p-ratelimit": "^1.0.1", "prism-react-renderer": "^2.1.0", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-markdown": "9.0.1", + "remark-gfm": "4.0.0", "react-select": "^5.8.0", - "sass": "^1.77.6" + "sass": "^1.77.6", + "semver": "^7.3.7" }, "devDependencies": { "@argos-ci/cli": "^2.0.1", diff --git a/plugins/font-awesome.js b/plugins/font-awesome.js index e476b36d50..7d5d69f820 100644 --- a/plugins/font-awesome.js +++ b/plugins/font-awesome.js @@ -86,7 +86,7 @@ async function pluginImportFontAwesomeIcons() { fs.mkdirSync(directory, { recursive: true }); } - fs.writeFile(path.join(directory, "dynamicFontAwesomeImports.js"), fileContent, "utf8", (err) => { + fs.writeFile(path.join(directory, "dynamicFontAwesomeImports.ts"), fileContent, "utf8", (err) => { if (err) { console.error("An error occurred while writing the file:", err); } diff --git a/plugins/packs-integrations.js b/plugins/packs-integrations.js index f44283ab54..16494d87b7 100644 --- a/plugins/packs-integrations.js +++ b/plugins/packs-integrations.js @@ -1,33 +1,491 @@ +const { api, callRateLimitAPI } = require("../src/services/api"); +const { packTypeNames, addOnTypes, layerTypes } = require("../src/constants/packs"); +const packDescription = require("../static/packs-data/packs_information.json"); +const { coerce, rcompare } = require("semver"); +const path = require("path"); +const mime = require("mime-types"); +const { setTimeout } = require("timers/promises"); +const BASE_URL = require("../static/scripts/constants.js").BASE_URL; +const fetch = require("node-fetch"); +const excludeList = require("../static/packs-data/exclude_packs.json"); +const { existsSync, promises, open, mkdirSync, writeFile, close, createWriteStream } = require("node:fs"); +import logger from "@docusaurus/logger"; + +const filterLimit = 100; //Limit for fetching the packs from the Palette API +const dirname = ".docusaurus/packs-integrations/"; +const logoDirname = "static/img/packs/"; +const filename = "api_pack_response.json"; +const options = { + headers: { + "Content-Disposition": "attachment", + ApiKey: process.env.PALETTE_API_KEY, + }, +}; +let counter = 0; function generateIntegrationData(allContent) { const packsData = allContent["docusaurus-plugin-content-docs"].default.loadedVersions[0].docs .filter((doc) => { return doc.frontMatter.type === "appTier"; }) .map((doc) => { - return { fields: { ...doc.frontMatter, slug: doc.slug, id: doc.id } }; + return { ...doc.frontMatter, slug: doc.slug, id: doc.id }; }); return packsData; } -function generatePacksData(allContent) { - const packsData = allContent["docusaurus-plugin-content-docs"].default.loadedVersions[0].docs - .filter((doc) => { - return doc.frontMatter.type === "integration"; +function getPackUidMap(registries) { + let generatedReadMeData = {}; + registries.forEach((registry) => { + const proccessedPackReadMeDetails = registry.packValues.reduce( + (packValuesMap, packValue) => + Object.assign(packValuesMap, { + [packValue.packUid]: { + registryUid: registry.registryUid, + readme: packValue.readme, + deprecated: packValue.annotations?.system_state === "deprecated", + }, + }), + {} + ); + generatedReadMeData = Object.assign(generatedReadMeData, proccessedPackReadMeDetails); + }); + return generatedReadMeData; +} + +function filterBasedOnRegistriesInConfig(packRegistries, configRepositories) { + //Filter the pack registries based on the selected registries given in the docusaurus config file + return packRegistries.filter((registry) => { + return configRepositories.find((repo) => repo.uid === registry.registryUid); + }); +} + +function combineAPICustomPackData(packsMData, packsPaletteDetailsData, customPacksData, repositories, logoPathMap) { + const filteredPalattePackDataMap = packsPaletteDetailsData.reduce((acc, packContent) => { + const packName = packContent.name; + //filtered the packs based on the selected registries given in the docusaurus config file + if ( + repositories.find((repo) => repo.uid === packContent.registryUid) && + ((packsMData[packName].spec.layer === "addon" && packsMData[packName].spec.addonType) || + packsMData[packName].spec.layer !== "addon") + ) { + if (Object.hasOwnProperty.call(acc, packName)) { + const packValues = acc[packName]; + packValues.registries.push(packContent); + } else { + const packData = { + name: packName, + registries: [packContent], + }; + acc[packName] = packData; + } + } + return acc; + }, {}); + const filteredPalattePackData = Object.values(filteredPalattePackDataMap); + const preferredRegistryUid = repositories?.[0]?.uid; + return filteredPalattePackData.map((packContent) => { + const packName = packContent.name; + if (packsMData[packName]) { + const packMDValue = packsMData[packName]; + const preferredRegistry = packMDValue.spec.registries.find((registry) => registry.uid === preferredRegistryUid); + const latestPackVersion = preferredRegistry + ? preferredRegistry.latestVersion + : packMDValue.spec.registries[0].latestVersion; + const packType = packMDValue.spec.layer === "addon" ? packMDValue.spec.addonType : packMDValue.spec.layer; + const layer = + packMDValue.spec.layer === "addon" ? packMDValue.spec.addonType : packTypeNames[packMDValue.spec.layer]; + const selectedRegistries = filterBasedOnRegistriesInConfig(packContent.registries, repositories); + const packDetailsMap = getPackUidMap(selectedRegistries); + //union of all the versions of all the supported registries of a pack. + const allSupportedVersions = getAggregatedVersions(selectedRegistries, repositories, packDetailsMap, packName); + return { + name: packName, + title: packMDValue.spec.displayName, + description: customPacksData?.[packName], + packUidMap: packDetailsMap, + cloudTypes: packMDValue.spec.cloudTypes, + type: "integration", + category: [layer], + packType: packType, + logoUrl: logoPathMap[packName], + tags: [], + slug: "/integrations/${packMDValue.spec.name}", + id: "integrations/${packMDValue.spec.name}", + registries: packMDValue.spec.registries.map((registry) => registry.uid), + community: packMDValue.spec.registries[0].annotations?.source === "community", + verified: packMDValue.spec.registries[0].annotations?.source === "spectrocloud", + versions: allSupportedVersions, + // disabled: packMDValue.spec.registries[0].annotations?.disabled === "true", + disabled: packMDValue.spec.registries[0].annotations?.disabled === "true", + deprecated: packMDValue.spec.registries[0].annotations?.system_state === "deprecated", + latestVersion: latestPackVersion, + }; + } + }); +} + +function matchAmbiguousPatch(tag) { + const [major, minor, patch] = tag.split("."); + return major !== undefined && minor !== undefined && patch === "x"; +} + +export function sanitizeVersion(version) { + let sanitizedVersion = version; + if (version.split(".").length < 3) { + sanitizedVersion = `${version}.0`; + } + return sanitizedVersion + .split(".") + .map((subVersion) => { + if (subVersion.startsWith("0")) { + return subVersion.replace("0", ""); + } + + return subVersion; }) - .map((doc) => { - return { fields: { ...doc.frontMatter, slug: doc.slug, id: doc.id } }; + .join("."); +} + +function sortVersions(tags) { + let sortedVersions = [...tags].sort((pack1, pack2) => { + let version1 = sanitizeVersion(pack1.version); + let version2 = sanitizeVersion(pack2.version); + + if (coerce(version1) !== null) { + version1 = coerce(version1).version; + } + + if (coerce(version2) !== null) { + version2 = coerce(version2).version; + } + + try { + return rcompare(version1, version2, true); + } catch (e) { + return 0; + } + }); + return sortedVersions; +} + +function getAggregatedVersions(registries, repositories, packUidMap) { + const prefferedRegistryUid = repositories?.[0]?.uid; + //if a pack has multiple registries, then the versions of the pack are aggregated based on the selected registries + //if a same version in multiple registries, the preferred registry is the higher precendence. + const aggregatedTags = registries.reduce((previousVersions, registry) => { + const computedVersions = getComputedVersions(registry.tags); + if (previousVersions.length) { + const versionTags = new Set(previousVersions.map((verssion) => verssion.title)); + const computedCommonVersions = computedVersions.filter((version) => versionTags.has(version.title)); + if (computedCommonVersions.length) { + //merging the non-overlapping Tags in the previous computed versions and current computing versions + const mergedNonOverlappingParentVersions = [ + ...computedVersions.filter((version) => !versionTags.has(version.title)), + ...previousVersions.filter((version) => !versionTags.has(version.title)), + ]; + computedCommonVersions.forEach((commonVersion) => { + //Take PreviousVersion Parent version tag from the iterated overlapping tag title + const previousVersiontagdata = previousVersions.find( + (prevVersion) => prevVersion.title === commonVersion.title + ); + const previousVersionChildrenSet = new Set(previousVersiontagdata.children.map((verssion) => verssion.title)); + const commonComputedChildren = commonVersion.children.filter((child) => + previousVersionChildrenSet.has(child.title) + ); + if (commonComputedChildren.length) { + //merge non overlapping children in each parent version + const mergedNonOverlappingChildren = [ + ...commonVersion.children.filter((child) => !previousVersionChildrenSet.has(child.title)), + ...previousVersiontagdata.children.filter((child) => !previousVersionChildrenSet.has(child.title)), + ]; + commonComputedChildren.forEach((childComputedVersion) => { + const previousVersionChild = previousVersiontagdata.children.find( + (prevChildVersion) => prevChildVersion.title === childComputedVersion.title + ); + const childPreviousVersionPackUid = previousVersionChild.packUid; + const previousVersionRegistryUid = packUidMap[childPreviousVersionPackUid]?.registryUid; + //while doing union of both versions of pack of the registries, not belong to the preferred registry, + //then either of the registry is considered. + if (previousVersionRegistryUid !== prefferedRegistryUid) { + previousVersionChild.packUid = childComputedVersion.packUid; + } + }); + //merging non-overlapping children with the previous version children + previousVersiontagdata.children = [...previousVersiontagdata.children, ...mergedNonOverlappingChildren]; + } else { + previousVersiontagdata.children = [...previousVersiontagdata.children, ...commonVersion.children]; + } + }); + //merging the non-overlapping tags with the previous Versions + previousVersions = [...previousVersions, ...mergedNonOverlappingParentVersions]; + } else { + previousVersions = [...previousVersions, ...computedVersions]; + } + } else { + previousVersions = [...previousVersions, ...computedVersions]; + } + return previousVersions; + }, []); + return aggregatedTags; +} + +function getComputedVersions(tags) { + const sortedVersions = sortVersions(tags); + const roots = sortedVersions + .filter((version) => { + return matchAmbiguousPatch(version.tag); + }) + .map((version) => { + return { + title: version.tag, + value: version.version, + packUid: version.packUid, + }; }); - return packsData; + sortedVersions.forEach((version) => { + const parentTags = version?.parentTags || []; + const parent = parentTags.find(matchAmbiguousPatch); + if (!parent) return; + const parentVersion = roots.find((rootVersion) => rootVersion.title === parent); + if (parentVersion) { + parentVersion.children = parentVersion.children || []; + parentVersion.children.push({ + title: version.tag, + value: version.version, + packUid: version.packUid, + }); + } + }); + return roots; +} + +function generateCustomData(packsDescription) { + const generatedCustomData = packsDescription.reduce( + (obj, desc) => Object.assign(obj, { [desc.name]: desc.description }), + {} + ); + logger.info("Completed generating custom data description."); + return generatedCustomData; +} + +function generateRoutes(packsAllData) { + return packsAllData.map((pack) => { + const parentVersion = pack.versions.find((version) => { + return version.children.find((child) => child.title === pack.latestVersion); + }); + let path = `/integrations/packs/${pack.name}/${pack.latestVersion}`; + if (parentVersion && parentVersion.title) { + path = `${path}/${parentVersion.title}`; + } + return { + path: path, + exact: false, + component: "@site/src/components/PacksInformation", + metadata: { + sourceFilePath: "../docs/docs-content/integrations/packs.mdx", + }, + data: { name: pack.name, version: pack.latestVersion, parent: parentVersion?.title }, + }; + }); +} + +async function fetchPackListItems(queryParams, packDataArr, counter) { + const payload = { filter: { type: ["spectro", "oci"] } }; + const response = await callRateLimitAPI(() => api.post(`/v1/packs/search${queryParams}`, payload)); + const tempPackArr = packDataArr.concat(response?.data?.items); + if (response?.data?.listmeta?.continue) { + return fetchPackListItems( + `?limit=${filterLimit}&continue=` + response.data.listmeta.continue, + tempPackArr, + counter + ); + } else { + return tempPackArr; + } } -async function pluginPacksAndIntegrationsData() { +async function mapRepositories(repositories) { + const ociRegistries = await api.get("v1/registries/oci/summary"); + const packRegistries = await api.get("v1/registries/pack"); + const mergedRegistries = [ociRegistries.data?.items || [], packRegistries.data?.items || []]; + const results = mergedRegistries.flat(); + const repoMap = repositories.reduce((acc, repository) => { + const repoObj = results.find((repo) => { + return repo.metadata.name === repository; + }); + if (repoObj) { + acc.push({ name: repoObj.metadata.name, uid: repoObj.metadata.uid }); + } + return acc; + }, []); + return repoMap; +} + +async function write(res, packName, logoUrlMap) { + return new Promise((resolve, reject) => { + const type = res.headers.get("Content-Type"); + if (mime.extension(type) !== "html") { + const destination = path.resolve(logoDirname, packName); + const fileStream = createWriteStream(`${destination}.${mime.extension(type)}`); + res.body.pipe(fileStream); + res.body.on("error", (err) => { + reject(err); + }); + fileStream.on("finish", function () { + resolve(); + logoUrlMap[packName] = `${packName}.${mime.extension(type)}`; + }); + } else { + reject(`Invalid MIME type received for the logo ${packName}`); + } + }); +} + +async function getLogoUrl(packsAllData, logoUrlMap) { + for (let j = 0; j < packsAllData.length; j++) { + const registries = packsAllData[j].spec.registries; + const packName = packsAllData[j].spec.name; + for (let i = 0; i < registries.length; i++) { + const registry = registries[i]; + try { + let url = registry.logoUrl; + if (!url) { + url = `${BASE_URL}/v1/packs/${registry.latestPackUid}/logo`; + } else { + url = url.startsWith("https") ? url : url.startsWith("/") ? `${BASE_URL}${url}` : `${BASE_URL}/${url}`; + } + if (!Object.hasOwnProperty.call(logoUrlMap, packName)) { + const res = await fetch(url, options); + await write(res, packName, logoUrlMap); + counter++; + if (counter % 10 === 0) { + await setTimeout(1000); + } + } + } catch (e) { + // Intentionally ignoring errors here to continue processing other logos + // Enable the below line to log the error, if needed, for debugging. + // logger.error(e); + } + } + } +} + +async function pluginPacksAndIntegrationsData(context, options) { return { name: "plugin-packs-integrations", + async loadContent() { + const repositories = options.repositories || []; + const mappedRepos = await mapRepositories(repositories); + let apiPackResponse = {}; + let isFileExists = false; + if (existsSync(dirname) && existsSync(`${dirname}${filename}`)) { + isFileExists = true; + } + let logoUrlMap = {}; + if (!isFileExists) { + if (!existsSync(dirname)) { + mkdirSync(dirname, { recursive: true }); + } + logger.info("Fetching the list of packs from the Palette API"); + let packDataArr = await fetchPackListItems(`?limit=${filterLimit}`, [], 0); + + // Filter out the packs from the exclude list. + packDataArr = packDataArr.filter((pack) => { + if (excludeList.includes(pack.spec.name)) { + // Only uncomment if debugging is required + // logger.warn(`Pack ${pack.spec.name} is excluded from the list`); + return false; + } + return true; + }); + logger.info("Downloading each pack's details and README"); + packDataArr = packDataArr.filter((pack) => { + return ( + layerTypes.includes(pack.spec.layer) || + (pack.spec.layer === "addon" && addOnTypes.includes(pack.spec.addonType) && pack.spec.registries.length) + ); + }); + const packUrl = "v1/packs/"; + const packMDMap = new Map(); + let apiPacksData = []; + const promisesPackDetails = packDataArr.map((packData) => { + packMDMap[packData.spec.name] = packData; + const cloudType = packData.spec.cloudTypes.includes("all") ? "aws" : packData.spec.cloudTypes[0]; + const registryPackData = []; + for (const registry of packData.spec.registries) { + const url = `${packUrl}${packData.spec.name}/registries/${registry.uid}?cloudType=${cloudType}&layer=${packData.spec.layer}`; + registryPackData.push(callRateLimitAPI(() => api.get(url))); + } + return registryPackData; + }); + const flatted = promisesPackDetails.flat(); + const results = await Promise.allSettled(flatted); + apiPacksData = results + .filter((result) => result.status === "fulfilled" && result.value?.data) + .map((result) => result.value.data); + logger.info("Completed fetching all the packs and their details"); + logger.info("Fetching the logo for each pack"); + //Fetch logos + if (!existsSync(logoDirname)) { + mkdirSync(logoDirname, { recursive: true }); + } + await getLogoUrl(packDataArr, logoUrlMap); + logger.info("Completed fetching all pack logos"); + apiPackResponse.apiPacksData = apiPacksData; + apiPackResponse.packMDMap = packMDMap; + apiPackResponse.logoUrlMap = logoUrlMap; + open(`${dirname}${filename}`, "w+", (err, fd) => { + try { + writeFile(`${dirname}${filename}`, JSON.stringify(apiPackResponse), (err) => { + if (err) { + logger.error("An error occurred while writing the JSON file:", err); + } + }); + } finally { + close(fd, (err1) => { + if (err1) logger.error("An error occurred while closing the file:", err1); + }); + } + }); + } else { + try { + const data = await promises.readFile(`${dirname}${filename}`); + apiPackResponse = JSON.parse(data); + } catch (e) { + logger.error("An error occurred while reading the JSON file:", e); + } + } + logger.info(`The number of packs identified are ${Object.keys(apiPackResponse.packMDMap).length}`); + return { + packsPaletteData: apiPackResponse.packMDMap, + packsPaletteDetailsData: apiPackResponse.apiPacksData, + packsDescription: packDescription, + repositories: mappedRepos, + logoFilesPathMap: apiPackResponse.logoUrlMap, + }; + }, + async contentLoaded({ content, actions }) { + const { setGlobalData, addRoute } = actions; + const { packsPaletteData, packsPaletteDetailsData, packsDescription, repositories, logoFilesPathMap } = content; + const customPacksData = generateCustomData(packsDescription); + const unionPackData = combineAPICustomPackData( + packsPaletteData, + packsPaletteDetailsData, + customPacksData, + repositories, + logoFilesPathMap + ); + const routes = generateRoutes(unionPackData); + logger.info("Completed generating routes for all the packs"); + routes.map((route) => addRoute(route)); + setGlobalData({ packs: unionPackData, repositories: repositories }); + logger.success("Packs data successfully loaded 📦"); + }, async allContentLoaded({ allContent, actions }) { const { setGlobalData } = actions; const integrationsData = generateIntegrationData(allContent); - const packsData = generatePacksData(allContent); - setGlobalData({ integrations: integrationsData, packs: packsData }); + setGlobalData({ integrations: integrationsData }); }, }; } diff --git a/redirects.js b/redirects.js index 55a938d721..8343e554f1 100644 --- a/redirects.js +++ b/redirects.js @@ -83,10 +83,6 @@ const redirects = [ from: `/clusters/public-cloud/aks/`, to: `/clusters/public-cloud/azure/aks/`, }, - { - from: `/integrations/minio-operator/`, - to: `/integrations/`, - }, { from: `/knowledgebase/how-to/reverse-proxy-dashboard/`, to: `/clusters/cluster-management/kubernetes-dashboard/`, @@ -163,18 +159,10 @@ const redirects = [ from: `/clusters/edge/edgeforge-workflow/build-images/`, to: `/clusters/edge/edgeforge-workflow/palette-canvos/`, }, - { - from: `/integrations/ubuntu-k3s/`, - to: `/integrations/ubuntu/`, - }, { from: `/clusters/brownfield-clusters/`, to: `/clusters/imported-clusters/`, }, - { - from: `/integrations/oidc-eks/`, - to: `/integrations/kubernetes/`, - }, { from: `/clusters/palette-virtual-clusters/add-virtual-cluster-to-host-cluster/`, to: `/clusters/palette-virtual-clusters/deploy-virtual-cluster/`, @@ -299,10 +287,6 @@ const redirects = [ from: `/devx/app-profile/services/service-listings/cockroach-db/`, to: `/devx/services/service-listings/cockroach-db/`, }, - { - from: `/integrations/EKS-D/`, - to: `/integrations/`, - }, { from: `/enterprise-version/on-prem-system-requirements/`, to: `/enterprise-version/install-palette/`, @@ -533,6 +517,176 @@ const redirects = [ from: "/security-bulletins/cve-reports/", to: "/security-bulletins/reports/", }, + { + from: [ + "/integrations/antrea-cni", + "/integrations/aws-autoscaler", + "/integrations/aws-ebs", + "/integrations/aws-efs", + "/integrations/azure-cni", + "/integrations/azure-disk", + "/integrations/byoos", + "/integrations/calico", + "/integrations/centos", + "/integrations/certmanager", + "/integrations/cilium", + "/integrations/citrix-ipam", + "/integrations/collectord", + "/integrations/flannel-cni", + "/integrations/fluentbit", + "/integrations/frp", + "/integrations/gce", + "/integrations/grafana-spectrocloud-dashboards", + "/integrations/harbor-edge", + "/integrations/k3s", + "/integrations/konvoy", + "/integrations/kubernetes-dashboard", + "/integrations/kubernetes-edge", + "/integrations/kubernetes-generic", + "/integrations/longhorn", + "/integrations/metallb", + "/integrations/microk8s", + "/integrations/nfs-subdir-external", + "/integrations/opa-gatekeeper", + "/integrations/portworx", + "/integrations/portworx_operator", + "/integrations/prometheus-cluster-metrics", + "/integrations/rke2", + "/integrations/rook-ceph", + "/integrations/trident", + "/integrations/ubuntu", + "/integrations/vsphere-csi", + ], + to: "/integrations/", + }, + // { + // from: "/integrations/argo-cd/", + // to: "/integrations/packs/?pack=argo-cd", + // }, + // { + // from: "/integrations/cilium-tetragon", + // to: "/integrations/packs/?pack=cilium-tetragon", + // }, + // { + // from: "/integrations/cloudanix", + // to: "/integrations/packs/?pack=cloudanix", + // }, + // { + // from: "/integrations/dex", + // to: "/integrations/packs/?pack=dex", + // }, + // { + // from: "/integrations/external-dns", + // to: "/integrations/packs/?pack=external-dns", + // }, + // { + // from: "/integrations/external-secrets-operator", + // to: "/integrations/packs/?pack=external-secrets-operator", + // }, + // { + // from: "/integrations/falco", + // to: "/integrations/packs/?pack=falco", + // }, + // { + // from: "/integrations/generic-vm-libvirt", + // to: "/integrations/packs/?pack=generic-vm-libvirtlco", + // }, + // { + // from: "/integrations/generic-vm-vsphere", + // to: "/integrations/packs/?pack=generic-vm-vsphere", + // }, + // { + // from: "/integrations/heartbeat", + // to: "/integrations/packs/?pack=heartbeat", + // }, + // { + // from: "/integrations/hello-universe", + // to: "/integrations/packs/?pack=hello-universe", + // }, + // { + // from: "/integrations/istio", + // to: "/integrations/packs/?pack=istio", + // }, + // { + // from: "/integrations/kibana", + // to: "/integrations/packs/?pack=kibana", + // }, + // { + // from: "/integrations/kong", + // to: "/integrations/packs/?pack=kong", + // }, + // { + // from: "/integrations/kubebench", + // to: "/integrations/packs/?pack=kubebench", + // }, + // { + // from: "/integrations/kubehunter", + // to: "/integrations/packs/?pack=kubehunter", + // }, + // { + // from: "/integrations/kubernetes", + // to: "/integrations/packs/?pack=kubernetes", + // }, + // { + // from: "/integrations/kubevious", + // to: "/integrations/packs/?pack=kubevious", + // }, + // { + // from: "/integrations/kubevirt", + // to: "/integrations/packs/?pack=kubevirt", + // }, + // { + // from: "/integrations/kubewatch", + // to: "/integrations/packs/?pack=kubewatch", + // }, + // { + // from: "/integrations/multus-cni", + // to: "/integrations/packs/?pack=multus-cni", + // }, + // { + // from: "/integrations/nginx", + // to: "/integrations/packs/?pack=nginx", + // }, + // { + // from: "/integrations/ngrok", + // to: "/integrations/packs/?pack=ngrok", + // }, + // { + // from: "/integrations/nutanix-csi", + // to: "/integrations/packs/?pack=nutanix-csi", + // }, + // { + // from: "/integrations/openstack-cinder", + // to: "/integrations/packs/?pack=openstack-cinder", + // }, + // { + // from: "/integrations/permission-manager", + // to: "/integrations/packs/?pack=permission-manager", + // }, + // { + // from: "/integrations/prismacloud", + // to: "/integrations/packs/?pack=prismacloud", + // }, + // { + // from: "/integrations/prometheus-agent", + // to: "/integrations/packs/?pack=prometheus-agent", + // }, + // { + // from: "/integrations/prometheus-opeartor", + // to: "/integrations/packs/?pack=prometheus-operator", + // }, + // { + // from: "/integrations/spectro-k8s-dashboard", + // to: "/integrations/packs/?pack=spectro-k8s-dashboard", + // }, + // { + // from: "/integrations/vault", + // to: "/integrations/packs/?pack=vault", + // }, + // { + // from: "/integrations/vsphere-volume", + // to: "/integrations/packs/?pack=vsphere-volume", + // }, ]; module.exports = redirects; diff --git a/src/components/IconMapper/IconMapper.tsx b/src/components/IconMapper/IconMapper.tsx index 22c06aaa02..54180d2590 100644 --- a/src/components/IconMapper/IconMapper.tsx +++ b/src/components/IconMapper/IconMapper.tsx @@ -18,6 +18,21 @@ import RolesIcon from "@site/static/assets/icons/roles.svg"; import TeamsIcon from "@site/static/assets/icons/teams.svg"; import WorkspacesIcon from "@site/static/assets/icons/workspaces.svg"; import TerraformIcon from "@site/static/assets/icons/terraform.svg"; +import K8sIcon from "@site/static/assets/packs/k8s_layer.svg"; +import CniIcon from "@site/static/assets/packs/cni_layer.svg"; +import OsIcon from "@site/static/assets/packs/os_layer.svg"; +import ServiceMeshIcon from "@site/static/assets/packs/service_mesh_layer.svg"; +import MonitoringIcon from "@site/static/assets/packs/monitoring_layer.svg"; +import CsiIcon from "@site/static/assets/packs/csi_layer.svg"; +import LoggingIcon from "@site/static/assets/packs/logging_layer.svg"; +import LoadBalancerIcon from "@site/static/assets/packs/load_balancer_layer.svg"; +import IngressIcon from "@site/static/assets/packs/ingress_layer.svg"; +import AuthenticationIcon from "@site/static/assets/packs/authentication_layer.svg"; +import RegistryIcon from "@site/static/assets/packs/registry_layer.svg"; +import SystemAppIcon from "@site/static/assets/packs/system_app_layer.svg"; +import SecurityIcon from "@site/static/assets/packs/security_layer.svg"; +import AppServicesIcon from "@site/static/assets/packs/system_app_layer.svg"; +import MiscIcon from "@site/static/assets/packs/misc_layer.svg"; import { IconProp } from "@fortawesome/fontawesome-svg-core"; import { fontAwesomeIcons } from "./dynamicFontAwesomeImports"; @@ -44,6 +59,23 @@ export const icons: IconsMap = { teams: , workspaces: , terraform: , + integration: , + k8s: , + cni: , + os: , + servicemesh: , + monitoring: , + csi: , + logging: , + "load balancer": , + ingress: , + authentication: , + registry: , + "system app": , + spectro: , + security: , + serverless: , + "app services": , }; function IconMapper({ type }: { type: string }): React.ReactElement { diff --git a/src/components/IconMapper/dynamicFontAwesomeImports.js b/src/components/IconMapper/dynamicFontAwesomeImports.ts similarity index 100% rename from src/components/IconMapper/dynamicFontAwesomeImports.js rename to src/components/IconMapper/dynamicFontAwesomeImports.ts diff --git a/src/components/Integrations/AppTiers/AppTiers.tsx b/src/components/Integrations/AppTiers/AppTiers.tsx index b0dc850a4c..1e5c7228f9 100644 --- a/src/components/Integrations/AppTiers/AppTiers.tsx +++ b/src/components/Integrations/AppTiers/AppTiers.tsx @@ -1,5 +1,5 @@ import React from "react"; -import Integrations from "@site/src/components/Technologies"; +import Integrations from "@site/src/components/Technologies/AppPackList"; import { usePluginData } from "@docusaurus/useGlobalData"; import PacksIntegrationsPluginData from "../IntegrationTypes"; diff --git a/src/components/Integrations/IntegrationTypes.ts b/src/components/Integrations/IntegrationTypes.ts index beb6fa5e6f..926cf549b6 100644 --- a/src/components/Integrations/IntegrationTypes.ts +++ b/src/components/Integrations/IntegrationTypes.ts @@ -1,24 +1,37 @@ export interface FrontMatterData { - sidebar_label: string; + name: string; title: string; description: string; - hide_table_of_contents: boolean; type: string; category: string[]; logoUrl: string; slug: string; id: string; + packType: string; + verified: boolean; + cloudTypes: string[]; + packUidMap: Map; + versions: VersionTemplate[]; + community: boolean; + registries: string[]; + disabled: boolean; + latestVersion: string; } -export interface PacksData { - fields: FrontMatterData; +export interface VersionTemplate { + title: string; + version: string; + packUid: string; + children: VersionTemplate[]; } -export interface IntegrationsData { - fields: FrontMatterData; +export interface RepositoryData { + name: string; + uid: string; } export default interface PacksIntegrationsPluginData { - integrations: PacksData[]; - packs: IntegrationsData[]; + integrations: FrontMatterData[]; + packs: FrontMatterData[]; + repositories: RepositoryData[]; } diff --git a/src/components/Integrations/Packs/Packs.tsx b/src/components/Integrations/Packs/Packs.tsx index 3fa934d4b8..439b8c6ab2 100644 --- a/src/components/Integrations/Packs/Packs.tsx +++ b/src/components/Integrations/Packs/Packs.tsx @@ -4,6 +4,6 @@ import { usePluginData } from "@docusaurus/useGlobalData"; import PacksIntegrationsPluginData from "../IntegrationTypes"; export default function Packs() { - const { packs } = usePluginData("plugin-packs-integrations") as PacksIntegrationsPluginData; - return ; + const { packs, repositories } = usePluginData("plugin-packs-integrations") as PacksIntegrationsPluginData; + return ; } diff --git a/src/components/PacksInformation/PacksInformation.tsx b/src/components/PacksInformation/PacksInformation.tsx new file mode 100644 index 0000000000..80be2d66ab --- /dev/null +++ b/src/components/PacksInformation/PacksInformation.tsx @@ -0,0 +1,31 @@ +import React from "react"; +import PacksReadme from "@site/src/components/PacksReadme/PacksReadme"; +import { Switch, Redirect } from "react-router-dom"; + +interface Packs { + route: PacksData; +} + +interface PacksData { + data: { + name: string; + version: string; + parent: string; + }; +} + +export default function Packs(props: Packs) { + return ( + <> + {props?.route?.data ? ( + + + + ) : ( + + )} + + ); +} diff --git a/src/components/PacksInformation/index.ts b/src/components/PacksInformation/index.ts new file mode 100644 index 0000000000..e2877bba87 --- /dev/null +++ b/src/components/PacksInformation/index.ts @@ -0,0 +1,3 @@ +import PacksInformation from "./PacksInformation"; + +export default PacksInformation; diff --git a/src/components/PacksReadme/PacksReadme.antd.css b/src/components/PacksReadme/PacksReadme.antd.css new file mode 100644 index 0000000000..67b6d1299c --- /dev/null +++ b/src/components/PacksReadme/PacksReadme.antd.css @@ -0,0 +1,12 @@ +.ant-list-header { + padding-bottom: 0px; + font-size: 16px; + font-weight: bold; +} +p { + font-size: 16px; +} +[data-theme="dark"] .ant-select-tree-list-holder-inner { + background-color: #1f1f1f; + color: whitesmoke; +} diff --git a/src/components/PacksReadme/PacksReadme.module.scss b/src/components/PacksReadme/PacksReadme.module.scss new file mode 100644 index 0000000000..b753d705e3 --- /dev/null +++ b/src/components/PacksReadme/PacksReadme.module.scss @@ -0,0 +1,174 @@ +.wrapper { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + + .tabPane { + padding-top: 15px; + font-size: 16px; + width: 100%; + } + + .customReadme { + h2[id="versions-supported"] { + display: none; + + div > ul { + display: none; + } + } + } + + .warningSection { + margin-top: 1em; + } + + .emptyContent { + padding-top: 20px; + display: flex; + flex-direction: column; + text-align: center; + align-items: center; + + .emptyContentTitle { + padding-top: 15px; + font-size: 20px; + font-weight: 500; + line-height: 24px; + } + + .emptyContentDescription { + font-size: 16px; + color: #545f7e; + font-weight: 400; + line-height: 24px; + margin-top: 10px; + } + } + + .description { + display: flex; + width: 100%; + padding: 10px; + + .packDescFirstCol { + display: flex; + flex-direction: column; + width: 70%; + + .packName { + font-size: 16px; + font-weight: 600; + line-height: 20px; + } + + .descriptionContent { + display: flex; + height: 100%; + font-size: 14px; + font-weight: 400; + align-items: center; + + .packIcon { + height: 100%; + } + + .customDesc { + padding-top: 12px; + padding-left: 16px; + width: 85%; + } + } + } + + .packDescSecondCol { + display: flex; + flex-direction: column; + width: 30%; + padding: 10px; + + .versionSelect { + height: max-content; + display: flex; + flex-direction: row; + padding: 10px; + } + + .versionSelectBox { + width: 300px; + } + + .packDesc { + display: flex; + flex-direction: column; + font-size: 12px; + font-weight: 400; + line-height: 16px; + + .packDescItem { + padding-top: 8px; + padding-left: 5px; + } + } + } + @media (max-width: 768px) { + .packDescFirstCol { + width: 100%; + padding-bottom: 12px; + } + .packDescSecondCol { + width: 100%; + .versionSelectBox { + width: 200px; + } + } + } + } + @media (max-width: 768px) { + .description { + display: flex; + flex-direction: column; + justify-content: space-between; + } + } +} +[data-theme="dark"] .description { + background-color: #1c202b; +} +[data-theme="light"] .description { + background-color: #edeef4; +} +[data-theme="dark"] .packDescSecondCol { + background-color: black; + border: 1px solid #1f263c; +} +[data-theme="light"] .packDescSecondCol { + background-color: white; + border: 1px solid #dee1ea; +} +[data-theme="light"] .emptyContentDescription { + color: #545f7e; +} +[data-theme="dark"] .emptyContentDescription { + color: #b5bdd4; + background-color: #111726; +} +[data-theme="dark"] .emptyContentTitle { + color: #b5bdd4; + background-color: #111726; +} +[data-theme="light"] .emptyContentTitle { + color: #545f7e; +} +[data-theme="light"] .content { + color: #545f7e; +} +[data-theme="dark"] .content { + color: #b5bdd4; +} +[data-theme="dark"] .versionSelect { + border: 1px solid #1f263c; +} +[data-theme="light"] .versionSelect { + border: 1px solid #b6bed4; +} diff --git a/src/components/PacksReadme/PacksReadme.tsx b/src/components/PacksReadme/PacksReadme.tsx new file mode 100644 index 0000000000..96aa1d5d02 --- /dev/null +++ b/src/components/PacksReadme/PacksReadme.tsx @@ -0,0 +1,306 @@ +import React, { useEffect, useState, useMemo, ReactElement } from "react"; +import styles from "./PacksReadme.module.scss"; +import { Tabs, ConfigProvider, theme, TreeSelect } from "antd"; +import CustomLabel from "../Technologies/CategorySelector/CustomLabel"; +import PackCardIcon from "../Technologies/PackCardIcon"; +import Markdown from "markdown-to-jsx"; +import { useHistory } from "react-router-dom"; +import "./PacksReadme.antd.css"; +import { usePluginData } from "@docusaurus/useGlobalData"; +import PacksIntegrationsPluginData from "../Integrations/IntegrationTypes"; +import ThemedImage from "@theme/ThemedImage"; +import useBaseUrl from "@docusaurus/useBaseUrl"; +import { useColorMode } from "@docusaurus/theme-common"; +import { packTypeNames, cloudDisplayNames } from "../../constants/packs"; +import Admonition from "@theme/Admonition"; + +interface PackReadmeProps { + customDescription: string; + packUidMap: Record; + versions: Version[]; + title: string; + logoUrl: string; + type: string; + provider: Array; + registries: Array; + selectedRepositories: Array<{ uid: string; name: string }>; + disabled: boolean; + latestVersion: string; +} +interface MarkdownFile { + default: React.FC; +} + +interface Version { + title: string; + children: Array<{ + title: string; + packUid: string; + }>; +} + +interface PackData { + customDescription: string; + packUidMap: Record; + versions: Version[]; + title: string; + logoUrl: string; + type: string; + provider: Array; + registries: Array; + selectedRepositories: Array<{ uid: string; name: string }>; + disabled: boolean; + latestVersion: string; +} + +export default function PacksReadme() { + const { packs, repositories } = usePluginData("plugin-packs-integrations") as PacksIntegrationsPluginData; + const [customReadme, setCustomReadme] = useState | null>(null); + const [packName, setPackName] = useState(""); + const [selectedPackUid, setSelectedPackUid] = useState(""); + const empty_icon_light = useBaseUrl("/img/empty_icon_table_light.svg"); + const empty_icon_dark = useBaseUrl("/img/empty_icon_table_dark.svg"); + const { colorMode } = useColorMode(); + const { defaultAlgorithm, darkAlgorithm } = theme; + const [selectedVersion, setSelectedVersion] = useState(""); + const history = useHistory(); + + useEffect(() => { + const searchParams = window ? new URLSearchParams(window.location.search) : null; + const pckName = searchParams?.get("pack") || ""; + setPackName(pckName); + const importComponent = async () => { + try { + const module: MarkdownFile = await import(`../../../docs/docs-content/integrations/${pckName}.md`); + const PackReadMeComponent = module.default; + setCustomReadme( +
+ +
+ ); + } catch (error) { + setCustomReadme(null); + } + }; + importComponent().catch((e) => { + console.error("Error importing custom readme component for pack. Additional information follows: \n", e); + }); + }, []); + + const packData: PackData = useMemo(() => { + const pack = packs.find((pack) => pack.name === packName); + if (pack) { + const packDataInfo: PackReadmeProps = { + customDescription: pack.description, + packUidMap: pack.packUidMap, + versions: pack.versions, + title: pack.title, + logoUrl: pack.logoUrl, + type: pack.packType, + provider: pack.cloudTypes, + registries: pack.registries, + selectedRepositories: repositories, + disabled: pack.disabled, + latestVersion: pack.latestVersion, + }; + return packDataInfo; + } + return { + customDescription: "", + packUidMap: {}, + versions: [], + title: "", + logoUrl: "", + type: "", + provider: [], + selectedRepositories: [], + registries: [], + disabled: false, + latestVersion: "", + }; + }, [packName]); + + useEffect(() => { + const searchParams = window ? new URLSearchParams(window.location.search) : null; + const urlParamVersion = searchParams?.get("version"); + const version = urlParamVersion || packData?.latestVersion || packData?.versions[0]?.title || ""; + if (version && !version.endsWith(".x")) { + const parentVersionObj = getParentVersion(version); + const packDataObj = parentVersionObj?.children.find((child) => child.title === version); + if (packDataObj) { + setSelectedPackUid(packDataObj.packUid); + setSelectedVersion(version); + } + } + }, [packData]); + + function versionChange(item: string) { + const [version, packUid] = item.split("==="); + const parentVersion = getParentVersion(version)?.title || ""; + history.replace({ search: `?pack=${packName}&version=${version}&parent=${parentVersion}` }); + setSelectedVersion(version); + setSelectedPackUid(packUid); + } + + function getParentVersion(version: string) { + return packData.versions.find((tagVersion) => tagVersion.children.find((child) => child.title === version)); + } + + function compareVersions(v1: string, v2: string): number { + const v1Parts = v1.split(".").map(Number); + const v2Parts = v2.split(".").map(Number); + + for (let i = 0; i < Math.max(v1Parts.length, v2Parts.length); i++) { + const v1Part = v1Parts[i] || 0; + const v2Part = v2Parts[i] || 0; + + if (v1Part < v2Part) { + return 1; + } + if (v1Part > v2Part) { + return -1; + } + } + + return 0; + } + + function renderVersionOptions() { + return packData.versions + .sort((a, b) => compareVersions(a.title, b.title)) + .map((tagVersion) => ({ + value: tagVersion.title, + title: tagVersion.title, + selectable: false, + children: tagVersion.children + .sort((a, b) => compareVersions(a.title, b.title)) + .map((child) => ({ + value: `${child.title}===${child.packUid}`, + title: {child.title}, + })), + })); + } + + function renderTabs() { + const readme = selectedPackUid ? packData.packUidMap[selectedPackUid]?.readme : ""; + const tabs = [ + readme && { + label: `README`, + key: "1", + children: {readme}, + }, + customReadme && { + label: `Additional Details`, + key: "2", + children: customReadme, + }, + ].filter(Boolean) as { label: string; key: string; children: JSX.Element }[]; + + if (tabs.length > 1) { + return ( + + {tabs.map((item) => ( + + {item.children} + + ))} + + ); + } + if (tabs.length === 1) { + return tabs[0].children; + } + return ( +
+ +
No README found
+
+ ); + } + + function getProviders() { + if (packData.provider.includes("all")) { + return "All"; + } + + return packData.provider + .map((provider) => cloudDisplayNames[provider as keyof typeof cloudDisplayNames] || provider) + .join(", "); + } + + function getRegistries() { + if (selectedVersion && !selectedVersion.endsWith(".x")) { + const registryUid = packData.packUidMap[selectedPackUid]?.registryUid || ""; + const registry = packData.selectedRepositories.find((registry) => registry.uid === registryUid); + return registry ? registry.name : ""; + } + const consolidatedRegistries = packData.registries.reduce((accumulator, registry) => { + const regObj = packData.selectedRepositories.find((repo) => repo.uid === registry); + if (regObj) { + accumulator.push(regObj.name); + } + return accumulator; + }, []); + return consolidatedRegistries.join(", "); + } + + return ( +
+
+
+
{packData.title}
+
+ +
{packData.customDescription}
+
+
+
+
+ + versionChange(item)} + treeData={renderVersionOptions()} + /> +
+
+
{`Type: ${packTypeNames[packData.type]}`}
+
{`Cloud Providers: ${getProviders()}`}
+
{`Registry: ${getRegistries()}`}
+
+
+
+
+ {packData.disabled ? ( + + Pack version v{selectedVersion} is disabled. Upgrade to a newer version to take advantage + of new features. + + ) : selectedPackUid && packData.packUidMap[selectedPackUid]?.deprecated ? ( + + Pack version v{selectedVersion} is deprecated. Upgrade to a newer version to take advantage + of new features. + + ) : null} +
+
+ + {renderTabs()} + +
+
+ ); +} diff --git a/src/components/PacksTable/PacksTable.tsx b/src/components/PacksTable/PacksTable.tsx index f96534c7ab..685daaa994 100644 --- a/src/components/PacksTable/PacksTable.tsx +++ b/src/components/PacksTable/PacksTable.tsx @@ -137,6 +137,7 @@ const FilteredTable: React.FC = () => { const [deprecatedPacks, setDeprecatedPacks] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(false); + const [timer, setTimer] = useState(null); useEffect(() => { fetch("/packs-data/packs_report.json") @@ -163,15 +164,20 @@ const FilteredTable: React.FC = () => { }); }, []); - const handleSearch = useCallback((e: React.ChangeEvent) => { - const value = e.target.value; - // Delay the update to the search value by 300ms to debounce the search - const timer = setTimeout(() => { - setSearchValue(value); - }, 300); + const handleSearch = useCallback( + (searchString: string) => { + if (timer) { + clearTimeout(timer); + } - return () => clearTimeout(timer); - }, []); + const newTimer = setTimeout(() => { + setSearchValue(searchString); + }, 300); + + setTimer(newTimer); + }, + [timer] + ); const filteredPacks = searchValue ? deprecatedPacks.filter((pack) => pack.displayName.toLowerCase().includes(searchValue.toLowerCase())) diff --git a/src/components/Technologies/AppPackList.tsx b/src/components/Technologies/AppPackList.tsx new file mode 100644 index 0000000000..ada0f10d58 --- /dev/null +++ b/src/components/Technologies/AppPackList.tsx @@ -0,0 +1,80 @@ +import React, { useState, useMemo } from "react"; +import Fuse from "fuse.js"; +import styles from "./Technologies.module.scss"; +import Search from "./Search"; +import CategorySelector from "./CategorySelector/CategorySelector"; +import { FrontMatterData } from "../Integrations/IntegrationTypes"; +import TechnologyCard from "./TechnologyCard"; + +const searchOptions = { + threshold: 0.5, + keys: ["title"], +}; + +interface TechnologiesProps { + data: FrontMatterData[]; +} + +export default function Technologies({ data }: TechnologiesProps) { + const [selectedCategory, setSelectedCategory] = useState("all"); + const [searchValue, setSearchValue] = useState(""); + + const categories = useMemo(() => { + const categoriesSet = data.reduce( + (accumulator, technology) => { + const categories = technology.category || []; + categories.forEach((category) => { + accumulator.add(category); + }); + return accumulator; + }, + new Set(["all"]) + ); + return new Set([...categoriesSet].sort()); + }, [data]); + + const technologies = useMemo(() => { + let technologies = [...data].sort((pack1, pack2) => { + const category1 = pack1.category[0]; + const category2 = pack2.category[0]; + + if (category1 < category2) { + return -1; + } + + if (category1 > category2) { + return 1; + } + + return 0; + }); + + if (searchValue) { + const fuse = new Fuse(technologies, searchOptions); + technologies = fuse.search(searchValue).map(({ item }) => item); + } + + if (selectedCategory !== "all") { + technologies = technologies.filter((field) => field.category.includes(selectedCategory)) || []; + } + + return technologies; + }, [data, searchValue, selectedCategory]); + + const onSearch = (value: string) => { + setSearchValue(value); + }; + + return ( +
+ + +
+ {technologies.map((field) => { + const { title, slug, logoUrl } = field; + return ; + })} +
+
+ ); +} diff --git a/src/components/Technologies/CategorySelector/CategorySelector.module.scss b/src/components/Technologies/CategorySelector/CategorySelector.module.scss index efc4875655..b1a4ff7a25 100644 --- a/src/components/Technologies/CategorySelector/CategorySelector.module.scss +++ b/src/components/Technologies/CategorySelector/CategorySelector.module.scss @@ -3,6 +3,10 @@ flex-wrap: wrap; margin-top: 15px; margin-bottom: 15px; + align-items: center; + .selectBox { + width: 200px; + } .selectorCard { padding: 4px 12px; background: var(--ifm-breadcrumb-item-background-active); diff --git a/src/components/Technologies/CategorySelector/CategorySelector.test.tsx b/src/components/Technologies/CategorySelector/CategorySelector.test.tsx deleted file mode 100644 index d728c06eca..0000000000 --- a/src/components/Technologies/CategorySelector/CategorySelector.test.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import React from "react"; -import { render, fireEvent, screen } from "@testing-library/react"; -import CategorySelector from "./CategorySelector"; - -describe("CategorySelector Component", () => { - const mockSelectCategory = jest.fn(); - const categories = ["all", "category_one", "category_two"]; - - beforeEach(() => { - render(); - }); - - it("renders all categories", () => { - categories.forEach((category) => { - expect(screen.getByText(category.split("_").join(" "))).toBeInTheDocument(); - }); - }); - - it("indicates which category is selected", () => { - const selectedCategory = screen.getByText("all"); - expect(selectedCategory).toHaveClass("isSelected"); - }); - - it("calls the selectCategory function with the correct argument when clicked", () => { - const unselectedCategory = screen.getByText("category one"); - fireEvent.click(unselectedCategory); - expect(mockSelectCategory).toHaveBeenCalledWith("category_one"); - }); -}); diff --git a/src/components/Technologies/CategorySelector/CustomLabel.module.scss b/src/components/Technologies/CategorySelector/CustomLabel.module.scss new file mode 100644 index 0000000000..c97ead249d --- /dev/null +++ b/src/components/Technologies/CategorySelector/CustomLabel.module.scss @@ -0,0 +1,17 @@ +.customLabel { + font-size: 14px; + height: 32px; + align-self: center; + padding-top: 5px; + padding-left: 5px; + padding-right: 5px; +} +[data-theme="dark"] .customLabel { + color: white; + background-color: #1c202b; +} + +[data-theme="light"] .customLabel { + color: black; + background-color: #dee1ea; +} diff --git a/src/components/Technologies/CategorySelector/CustomLabel.tsx b/src/components/Technologies/CategorySelector/CustomLabel.tsx new file mode 100644 index 0000000000..162fda9468 --- /dev/null +++ b/src/components/Technologies/CategorySelector/CustomLabel.tsx @@ -0,0 +1,15 @@ +import React from "react"; +import styles from "./CustomLabel.module.scss"; + +interface CustomLabelProps { + label: string; + className?: string; +} + +export default function CustomLabel({ label, className = "" }: CustomLabelProps) { + return ( + <> +
{label}
+ + ); +} diff --git a/src/components/Technologies/CategorySelector/FilterSelect.tsx b/src/components/Technologies/CategorySelector/FilterSelect.tsx new file mode 100644 index 0000000000..58d091f465 --- /dev/null +++ b/src/components/Technologies/CategorySelector/FilterSelect.tsx @@ -0,0 +1,34 @@ +import React from "react"; +import { Select, SelectProps } from "antd"; +import filterStyles from "./CategorySelector.module.scss"; +import "./filterSelect.antd.css"; + +interface FilterSelectProps { + selectMode?: SelectProps["mode"]; + options: { value: string; label: string }[]; + onChange: (...args: any) => void; + value: SelectProps["value"]; +} + +export default function FilterSelect({ selectMode, options, onChange, value }: FilterSelectProps) { + return ( +
+ +
+ ); +} diff --git a/src/components/Technologies/CategorySelector/filterSelect.antd.css b/src/components/Technologies/CategorySelector/filterSelect.antd.css new file mode 100644 index 0000000000..28bc723909 --- /dev/null +++ b/src/components/Technologies/CategorySelector/filterSelect.antd.css @@ -0,0 +1,52 @@ +[data-theme="dark"] .ant-select-outlined:not(.ant-select-customize-input) .ant-select-selector { + border: 1px solid #424242; + background: #141414; +} +[data-theme="dark"] .ant-select-selection-placeholder { + color: #6a6d76; +} +[data-theme="dark"] .ant-select-arrow { + color: #6a6d76; +} +[data-theme="dark"] .ant-select-item-option { + color: whitesmoke; +} +[data-theme="dark"] .rc-virtual-list { + background-color: #1f1f1f; +} +[data-theme="dark"] .ant-select-dropdown { + background-color: #1f1f1f; +} +[data-theme="dark"] .ant-select-dropdown .ant-select-item-option-selected:not(.ant-select-item-option-disabled) { + background-color: #111a2c; + color: whitesmoke; +} +[data-theme="dark"] + .ant-select-dropdown + .ant-select-item-option-selected:not(.ant-select-item-option-disabled) + .ant-select-item-option-state { + color: #1668dc; +} +[data-theme="dark"] .ant-select:not(.ant-select-customize-input) .ant-select-selector { + background-color: #1f1f1f; +} +[data-theme="dark"] .ant-select-multiple { + .ant-select-selection-item { + color: #d6d0d0; + background-color: #313131; + } + .ant-select-selection-overflow .ant-select-selection-item-remove { + color: #d6d0d0; + } +} +[dark-theme="dark"] .ant-select-multiple .ant-select-selection-overflow .ant-select-selection-item-remove { + color: #d6d0d0; +} +[data-theme="dark"] .ant-select-clear { + color: #b1adad; + background-color: #1f1f1f; +} +[data-theme="dark"] .ant-select-single .ant-select-selector { + color: #d6d0d0; + background-color: #1f1f1f; +} diff --git a/src/components/Technologies/CategorySelector/index.ts b/src/components/Technologies/CategorySelector/index.ts deleted file mode 100644 index 4da20365ba..0000000000 --- a/src/components/Technologies/CategorySelector/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import CategorySelector from "./CategorySelector"; - -export default CategorySelector; diff --git a/src/components/Technologies/PackCardIcon.module.scss b/src/components/Technologies/PackCardIcon.module.scss new file mode 100644 index 0000000000..0dd530123d --- /dev/null +++ b/src/components/Technologies/PackCardIcon.module.scss @@ -0,0 +1,13 @@ +.imageWrapper { + display: flex; + justify-content: center; + align-items: center; + margin: 5px 0 5px; + max-width: 52px; + max-height: 52px; + align-self: center; + svg { + width: 52px; + height: 52px; + } +} diff --git a/src/components/Technologies/PackCardIcon.tsx b/src/components/Technologies/PackCardIcon.tsx new file mode 100644 index 0000000000..e6ae29aa82 --- /dev/null +++ b/src/components/Technologies/PackCardIcon.tsx @@ -0,0 +1,31 @@ +import React, { useState, useEffect, ReactElement } from "react"; +import styles from "./PackCardIcon.module.scss"; +import IconMapper from "@site/src/components/IconMapper/IconMapper"; +import Image from "@theme/IdealImage"; +interface PackCardIconProps { + appType?: string; + logoUrl?: string; + type?: any; + className?: any; +} + +export default function PackCardIcon({ appType, logoUrl, type, className }: PackCardIconProps) { + const [icon, setIcon] = useState(null); + useEffect(() => { + if (logoUrl) { + try { + if (appType === "app") { + setIcon(); + } else { + setIcon(); + } + } catch (e) { + type ? setIcon() : setIcon(null); + } + } else { + type ? setIcon() : setIcon(null); + } + }, [logoUrl]); + + return
{icon}
; +} diff --git a/src/components/Technologies/PackFilters.module.scss b/src/components/Technologies/PackFilters.module.scss new file mode 100644 index 0000000000..d607428991 --- /dev/null +++ b/src/components/Technologies/PackFilters.module.scss @@ -0,0 +1,8 @@ +.wrapper { + display: flex; + flex-wrap: wrap; + .filterItems { + display: flex; + padding-right: 10px; + } +} diff --git a/src/components/Technologies/PacksFilters.tsx b/src/components/Technologies/PacksFilters.tsx new file mode 100644 index 0000000000..28ea4b8256 --- /dev/null +++ b/src/components/Technologies/PacksFilters.tsx @@ -0,0 +1,107 @@ +import React from "react"; +import styles from "./PackFilters.module.scss"; +import CustomLabel from "./CategorySelector/CustomLabel"; +import FilterSelect from "./CategorySelector/FilterSelect"; +import "./packsFilters.antd.css"; +import { packTypeNames, cloudProviderTypes } from "../../constants/packs"; + +interface PackFiltersProps { + categories: string[]; + registries: registry[]; + setSelectedSearchFilters: (filters: SelectedFilters) => void; + selectedFilters: SelectedFilters; +} + +interface registry { + uid: string; + name: string; +} + +interface sources { + label: string; + value: string; +} + +interface SelectedFilters { + category: string[]; + registries: string[]; + cloudTypes: string[]; + source: string[]; +} + +const sourceList: sources[] = [ + { + label: "All", + value: "all", + }, + { + label: "Verified", + value: "verified", + }, + { + label: "Community", + value: "community", + }, +]; + +export default function PacksFilters({ + categories, + registries, + setSelectedSearchFilters, + selectedFilters, +}: PackFiltersProps) { + return ( +
+
+ + { + return { value: category, label: packTypeNames[category] }; + })} + onChange={(items) => setSelectedSearchFilters({ ...selectedFilters, category: items as string[] })} + value={selectedFilters.category} + /> +
+
+ + { + return { value: registry.uid, label: registry.name }; + })} + onChange={(items) => setSelectedSearchFilters({ ...selectedFilters, registries: items as string[] })} + value={selectedFilters.registries} + /> +
+
+ + { + return { value: provider.name, label: provider.displayName }; + })} + onChange={(item) => { + setSelectedSearchFilters({ + ...selectedFilters, + cloudTypes: item ? [item as string] : [], + }); + }} + value={selectedFilters.cloudTypes.length ? selectedFilters.cloudTypes[0] : undefined} + /> +
+
+ + { + setSelectedSearchFilters({ + ...selectedFilters, + source: item ? [item as string] : [], + }); + }} + value={selectedFilters.source.length ? selectedFilters.source[0] : undefined} + /> +
+
+ ); +} diff --git a/src/components/Technologies/Search/Search.tsx b/src/components/Technologies/Search/Search.tsx index c471eaa8c2..41d465ed81 100644 --- a/src/components/Technologies/Search/Search.tsx +++ b/src/components/Technologies/Search/Search.tsx @@ -1,17 +1,20 @@ -import React, { useRef, useState } from "react"; +import React, { useRef, useState, useEffect } from "react"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import styles from "./Search.module.scss"; import { faSearch, faTimes } from "@fortawesome/free-solid-svg-icons"; interface IntegrationSearchProps { - onSearch: (searchString: React.ChangeEvent) => void; + onSearch: (searchString: string) => void; placeholder: string; + value?: string; } -export default function IntegrationSearch({ onSearch, placeholder }: IntegrationSearchProps) { +export default function IntegrationSearch({ onSearch, placeholder, value = "" }: IntegrationSearchProps) { const [inputValue, setInputValue] = useState(""); const ref = useRef(null); - + useEffect(() => { + setInputValue(value); + }, [value]); return (
@@ -22,7 +25,7 @@ export default function IntegrationSearch({ onSearch, placeholder }: Integration value={inputValue} onChange={(e) => { setInputValue(e.target.value); - onSearch(e); + onSearch(e.target.value); }} /> { setInputValue(""); + onSearch(""); ref.current?.focus(); }} /> diff --git a/src/components/Technologies/Technologies.module.scss b/src/components/Technologies/Technologies.module.scss index ae777eea6a..be613fce68 100644 --- a/src/components/Technologies/Technologies.module.scss +++ b/src/components/Technologies/Technologies.module.scss @@ -1,9 +1,12 @@ .wrapper { padding: 15px 0; .technologyWrapper { - display: flex; - flex-wrap: wrap; margin-top: 32px; + display: flex; + svg { + vertical-align: bottom; + margin-right: 5px; + } } .imageWrapper { display: flex; @@ -13,11 +16,6 @@ width: 100%; margin: 5px 0 5px; } - - .imageWrapper > img { - max-height: 100%; - max-width: 100%; - } .card { width: 120px; height: 120px; @@ -34,6 +32,11 @@ 0px 0px 2px rgba(0, 0, 0, 0.2), 0px 2px 0px rgba(0, 0, 0, 0.2); border-radius: 8px; + cursor: pointer; + .cardContent { + display: flex; + flex-direction: column; + } } .title { @@ -44,4 +47,14 @@ text-align: center; word-break: break-word; } + .ant-collapse { + width: 100%; + border: 0 none; + background: white; + } +} +.ant-collapse { + width: 100%; + border: 0 none; + background: white; } diff --git a/src/components/Technologies/Technologies.test.tsx b/src/components/Technologies/Technologies.test.tsx index c7ffc9be58..b40922afb0 100644 --- a/src/components/Technologies/Technologies.test.tsx +++ b/src/components/Technologies/Technologies.test.tsx @@ -1,6 +1,7 @@ import React from "react"; import { render, screen, fireEvent, waitFor } from "@testing-library/react"; import Technologies from "./Technologies"; // Replace with your actual import +import { FrontMatterData, RepositoryData } from "../Integrations/IntegrationTypes"; /* * TODO: Docusaurus Link import not resolving in Jest, @@ -20,38 +21,61 @@ jest.mock("./TechnologyCard", () => { }); }); -const mockData = [ +const mockData: FrontMatterData[] = [ { - fields: { - title: "React", - description: "A JavaScript library for building user interfaces", - hide_table_of_contents: false, - type: "library", - category: ["frontend"], - logoUrl: "react-logo.png", - slug: "/react", - id: "1", - sidebar_label: "React.js", - }, + name: "React", + title: "React", + description: "A JavaScript library for building user interfaces", + type: "library", + category: ["frontend"], + logoUrl: "react-logo.png", + slug: "/react", + id: "1", + packType: "library", // Example value, adjust as needed + verified: true, // Example value, adjust as needed + cloudTypes: ["cloudA", "cloudB"], // Example values, adjust as needed + packUidMap: new Map(), // Initialize as empty map + versions: [], // Initialize as empty array + community: true, // Example value, adjust as needed + registries: ["npm"], // Example values, adjust as needed + disabled: false, // Example value, adjust as needed + latestVersion: "17.0.2", // Example value, adjust as needed }, { - fields: { - title: "Node.js", - description: "JavaScript runtime built on Chrome's V8 JavaScript engine", - hide_table_of_contents: false, - type: "runtime", - category: ["backend"], - logoUrl: "nodejs-logo.png", - slug: "/nodejs", - id: "2", - sidebar_label: "Node", - }, + name: "Node.js", + title: "Node.js", + description: "JavaScript runtime built on Chrome's V8 JavaScript engine", + type: "runtime", + category: ["backend"], + logoUrl: "nodejs-logo.png", + slug: "/nodejs", + id: "2", + packType: "runtime", // Example value, adjust as needed + verified: true, // Example value, adjust as needed + cloudTypes: ["cloudA", "cloudB"], // Example values, adjust as needed + packUidMap: new Map(), // Initialize as empty map + versions: [], // Initialize as empty array + community: true, // Example value, adjust as needed + registries: ["64eaff453040297344bcad5d", "5eecc89d0b150045ae661cef"], // Example values, adjust as needed + disabled: false, // Example value, adjust as needed + latestVersion: "14.17.0", // Example value, adjust as needed + }, +]; + +const mockRepositories: RepositoryData[] = [ + { + name: "Palette Registry", + uid: "64eaff453040297344bcad5d", + }, + { + name: "Community Registry", + uid: "5eecc89d0b150045ae661cef", }, ]; describe("", () => { it("should filter technologies based on search", async () => { - render(); + render(); fireEvent.change(screen.getByRole("textbox"), { target: { value: "React" } }); @@ -61,39 +85,4 @@ describe("", () => { expect(screen.getByText("React")).toBeInTheDocument(); expect(screen.queryByText("Node.js")).not.toBeInTheDocument(); }); - - it("searches the technologies and checks if React is rendered", async () => { - render(); - - // Simulate a user clicking the "frontend" category - fireEvent.click(screen.getByText("frontend")); - - // Wait for the DOM to update - await waitFor(() => {}, { timeout: 300 }); - - // Check if React is displayed after selecting the "frontend" category - expect(screen.getByText("React")).toBeInTheDocument(); - - // Optionally, check if other technologies are not displayed - expect(screen.queryByText("Node.js")).not.toBeInTheDocument(); - }); - - it("searches the technologies using the input field and checks if React.js is rendered with Fuse search", async () => { - render(); - - // Get the input field by its role - const searchInput = screen.getByRole("textbox"); - - // Simulate a user typing "React.js" into the search input - fireEvent.change(searchInput, { target: { value: "React.js" } }); - - // Wait for the DOM to update - await waitFor(() => {}, { timeout: 300 }); - - // Check if React.js is displayed after searching for it - expect(screen.getByText("React")).toBeInTheDocument(); - - // Optionally, check if other technologies are not displayed - expect(screen.queryByText("Node.js")).not.toBeInTheDocument(); - }); }); diff --git a/src/components/Technologies/Technologies.tsx b/src/components/Technologies/Technologies.tsx index b0a8cdb156..ce4bd62303 100644 --- a/src/components/Technologies/Technologies.tsx +++ b/src/components/Technologies/Technologies.tsx @@ -1,79 +1,223 @@ -import React, { useState, useMemo } from "react"; +import React, { useState, useMemo, useEffect } from "react"; import Fuse from "fuse.js"; import styles from "./Technologies.module.scss"; import Search from "./Search"; -import CategorySelector from "./CategorySelector"; -import { PacksData, IntegrationsData } from "../Integrations/IntegrationTypes"; +import { FrontMatterData } from "../Integrations/IntegrationTypes"; import TechnologyCard from "./TechnologyCard"; +import PacksFilters from "./PacksFilters"; +import { packTypeNames, packTypes } from "../../constants/packs"; +import { Collapse } from "antd"; +import "./technologies.antd.css"; +import IconMapper from "../IconMapper/IconMapper"; -const searchOptions = { +const searchOptions: Fuse.IFuseOptions = { threshold: 0.5, - keys: ["fields.title"], + keys: ["title"], }; interface TechnologiesProps { - data: PacksData[] | IntegrationsData[]; + data: FrontMatterData[]; + repositories: any[]; } -export default function Technologies({ data }: TechnologiesProps) { - const [selectedCategory, setSelectedCategory] = useState("all"); - const [searchValue, setSearchValue] = useState(""); - - const categories = useMemo(() => { - const categoriesSet = data.reduce( - (accumulator, technology) => { - const categories = technology.fields.category || []; - categories.forEach((category) => { - accumulator.add(category); - }); - return accumulator; +interface SelectedFilters { + category: string[]; + registries: string[]; + cloudTypes: string[]; + source: string[]; +} + +const PACKLISTFILTERS = "packListFilters"; + +export default function Technologies({ data, repositories }: TechnologiesProps) { + const [selectedFilters, setSelectedFilters] = useState({ + category: [], + registries: [], + cloudTypes: [], + source: ["all"], + }); + + const [searchValue, setSearchValue] = useState(""); + + const filteredTechCards = useMemo(() => { + const selectedFiltersKeys = Object.keys(selectedFilters) as (keyof SelectedFilters)[]; + let filteredCards: FrontMatterData[] = []; + const conditions = selectedFiltersKeys.reduce( + (acc: ((techCard: FrontMatterData) => boolean)[], key) => { + const selectedFiltersValue = selectedFilters[key]; + if (selectedFiltersValue.length) { + let condition: (techCard: FrontMatterData) => boolean = () => false; + if (selectedFiltersValue && selectedFiltersValue.length) { + switch (key) { + case "category": + condition = (techCard: FrontMatterData) => { + return selectedFiltersValue.includes(techCard.packType); + }; + break; + case "registries": + condition = (techCard: FrontMatterData) => { + return selectedFiltersValue.some((value) => techCard.registries.includes(value)); + }; + break; + case "cloudTypes": + condition = (techCard: FrontMatterData) => { + return selectedFiltersValue.some( + (value) => techCard.cloudTypes.includes("all") || techCard.cloudTypes.includes(value) + ); + }; + break; + case "source": + if (!selectedFiltersValue.includes("all")) { + condition = (techCard: FrontMatterData) => { + return !!techCard[selectedFiltersValue[0] as keyof FrontMatterData]; + }; + } else { + condition = () => true; + } + break; + } + if (condition) { + acc.push(condition); + } + } + } + return acc; }, - new Set(["all"]) + [] as ((techCard: FrontMatterData) => boolean)[] ); - return new Set([...categoriesSet].sort()); - }, [data]); - - const technologies = useMemo(() => { - let technologies = [...data].sort((pack1, pack2) => { - const category1 = pack1.fields.category[0]; - const category2 = pack2.fields.category[0]; - if (category1 < category2) { - return -1; + filteredCards = data.filter((card) => { + if (conditions.length) { + return conditions.every((condition) => condition(card)); + } else { + return true; } + }); - if (category1 > category2) { - return 1; + if (searchValue) { + const fuse = new Fuse(filteredCards, searchOptions); + filteredCards = fuse.search(searchValue).map(({ item }) => item); + } + + const categoriesMap = filteredCards.reduce((acc: Map, technology: FrontMatterData) => { + const packType = technology.packType; + if (acc.has(packType)) { + acc.get(packType)!.push(technology); + } else { + acc.set(packType, [technology]); } + return acc; + }, new Map()); - return 0; + const sortedCategoriesMap = new Map( + [...categoriesMap.entries()].sort(([key1], [key2]) => { + const name1 = packTypeNames[key1]; + const name2 = packTypeNames[key2]; + if (!name1) return 1; + if (!name2) return -1; + return name1.localeCompare(name2); + }) + ); + + sortedCategoriesMap.forEach((techCards) => { + techCards.sort((a, b) => a.title.localeCompare(b.title)); }); - if (searchValue) { - const fuse = new Fuse(technologies, searchOptions); - technologies = fuse.search(searchValue).map(({ item }) => item); - } + return sortedCategoriesMap; + }, [data, selectedFilters, searchValue]); - if (selectedCategory !== "all") { - technologies = technologies.filter(({ fields }) => fields.category.includes(selectedCategory)) || []; + useEffect(() => { + const filters = localStorage.getItem(PACKLISTFILTERS); + if (filters) { + try { + const parsedFilters = JSON.parse(filters) as { selectedFilters: SelectedFilters; searchValue: string }; + setSelectedFilters(parsedFilters.selectedFilters); + setSearchValue(parsedFilters.searchValue || ""); + } catch (e) { + console.error("Error in parsing filters from local storage", e); + } + } else { + setFiltersInLocalStorage({ + selectedFilters: selectedFilters, + searchValue: "", + }); } + }, []); - return technologies; - }, [data, searchValue, selectedCategory]); + const renderPacksCategories = () => { + const categoryKeys = Array.from(filteredTechCards.keys()); + return categoryKeys.map((category) => { + const categoryItems = filteredTechCards.get(category)!; + if (categoryItems.length) { + return ( + + {categoryItems.map((field) => { + const { title, logoUrl, packType, name, latestVersion, versions } = field; + return ( + + ); + })} + + ); + } + return null; + }); + }; + + function addPanelHeader(category: string) { + return ( + <> + + {packTypeNames[category]} + + ); + } + + const setSelectedSearchFilters = (selectedSearchFilters: Partial) => { + const updatedFilters = { + ...selectedFilters, + ...selectedSearchFilters, + }; + setFiltersInLocalStorage({ + selectedFilters: updatedFilters, + searchValue: searchValue, + }); + setSelectedFilters(updatedFilters); + }; + + const onSearch = (value: string) => { + setFiltersInLocalStorage({ + selectedFilters: selectedFilters, + searchValue: value, + }); + setSearchValue(value); + }; - const onSearch = (event: React.ChangeEvent) => { - setSearchValue(event.target.value); + const setFiltersInLocalStorage = (filters: { selectedFilters: SelectedFilters; searchValue: string }) => { + localStorage.setItem(PACKLISTFILTERS, JSON.stringify(filters)); }; return (
- - + +
- {technologies.map(({ fields }) => { - const { title, slug, logoUrl } = fields; - return ; - })} + + {renderPacksCategories()} +
); diff --git a/src/components/Technologies/TechnologyCard.tsx b/src/components/Technologies/TechnologyCard.tsx index 67a7c9c382..173a2ba90e 100644 --- a/src/components/Technologies/TechnologyCard.tsx +++ b/src/components/Technologies/TechnologyCard.tsx @@ -1,22 +1,35 @@ import React from "react"; -import Link from "@docusaurus/Link"; import styles from "./Technologies.module.scss"; +import PackCardIcon from "./PackCardIcon"; +import Link from "@docusaurus/Link"; +interface Version { + title: string; + children: { + title: string; + }[]; +} interface TechnologyCardProps { + name?: string; title: string; - slug: string; logoUrl: string; + type?: string; + slug?: string; + version?: string; + versions?: Version[]; } -export default function TechnologyCard({ title, slug, logoUrl }: TechnologyCardProps) { +export default function TechnologyCard({ name, title, logoUrl, type, slug, version, versions }: TechnologyCardProps) { + const parentVersion = + versions?.find((tagVersion) => tagVersion.children.find((child) => child.title === version))?.title || ""; return ( - -
-
- {`${title} +
+ +
+ +
{title}
-
{title}
-
- + +
); } diff --git a/src/components/Technologies/packsFilters.antd.css b/src/components/Technologies/packsFilters.antd.css new file mode 100644 index 0000000000..c3320792be --- /dev/null +++ b/src/components/Technologies/packsFilters.antd.css @@ -0,0 +1,3 @@ +.ant-select .ant-select-selector { + border-radius: 0px; +} diff --git a/src/components/Technologies/technologies.antd.css b/src/components/Technologies/technologies.antd.css new file mode 100644 index 0000000000..3bf9b3843a --- /dev/null +++ b/src/components/Technologies/technologies.antd.css @@ -0,0 +1,27 @@ +.ant-collapse { + width: 100%; + border: 0 none; +} +.ant-collapse-content-box { + display: flex; + flex-wrap: wrap; +} +.ant-menu-horizontal > .ant-menu-submenu:hover::after { + border-bottom-color: transparent !important; +} +[data-theme="dark"] .ant-collapse-header-text { + color: whitesmoke; +} +[data-theme="dark"] .ant-collapse-header { + background-color: #161824; +} +[data-theme="dark"] .ant-collapse .ant-collapse-content { + background-color: #141414; + border-top: 1px solid #424242; +} +[data-theme="dark"] .ant-collapse-item { + border-bottom: 1px solid #424242; +} +[data-theme="dark"] .ant-collapse-expand-icon { + color: whitesmoke; +} diff --git a/src/constants/packs.ts b/src/constants/packs.ts new file mode 100644 index 0000000000..64ab196ebc --- /dev/null +++ b/src/constants/packs.ts @@ -0,0 +1,82 @@ +export const packTypes = [ + "app services", + "authentication", + "ingress", + "k8s", + "load balancer", + "logging", + "monitoring", + "cni", + "os", + "registry", + "security", + "servicemesh", + "csi", + "system app", + "integration", +] as const; + +export const packTypeNames: Record = { + "app services": "App Services", + authentication: "Authentication", + ingress: "Ingress", + k8s: "Kubernetes", + "load balancer": "Load Balancer", + logging: "Logging", + monitoring: "Monitoring", + cni: "Network", + os: "Operating System", + registry: "Registry", + security: "Security", + servicemesh: "Service Mesh", + csi: "Storage", + "system app": "System App", + integration: "Integration", +} as const; + +export const cloudProviderTypes = [ + { name: "aws", displayName: "AWS IaaS" }, + { name: "eks", displayName: "AWS EKS" }, + { name: "azure", displayName: "Azure IaaS" }, + { name: "aks", displayName: "Azure AKS" }, + { name: "gcp", displayName: "GCP IaaS" }, + { name: "gke", displayName: "GCP GKE" }, + { name: "tke", displayName: "TKE" }, + { name: "vsphere", displayName: "VMware" }, + { name: "openstack", displayName: "OpenStack" }, + { name: "maas", displayName: "MAAS" }, + { name: "edge-native", displayName: "Edge" }, + { name: "custom", displayName: "Custom" }, +] as const; + +export const layerTypes = ["k8s", "cni", "os", "csi"] as const; + +export const addOnTypes = [ + "app services", + "authentication", + "ingress", + "load balancer", + "logging", + "monitoring", + "registry", + "security", + "servicemesh", + "system app", + "integreation", + "integration", +] as const; + +export const cloudDisplayNames = { + aws: "AWS", + eks: "AWS EKS", + aks: "Azure AKS", + gke: "GCP GKE", + azure: "Azure", + gcp: "GCP", + vsphere: "VMware", + openstack: "OpenStack", + maas: "MAAS", + tke: "Tencent", + "edge-native": "Edge", + custom: "Custom", +} as const; diff --git a/src/declarations.d.ts b/src/declarations.d.ts index 98ead581ce..a9da8662dd 100644 --- a/src/declarations.d.ts +++ b/src/declarations.d.ts @@ -4,6 +4,11 @@ declare module "*.module.scss"; declare module "*.png"; +declare module "*.md" { + const value: string; // markdown is just a string + export default value; +} + interface Mendable { /* eslint-disable @typescript-eslint/no-explicit-any */ initialize: (config: any) => void; diff --git a/src/services/api/index.js b/src/services/api/index.js new file mode 100644 index 0000000000..5fcca58250 --- /dev/null +++ b/src/services/api/index.js @@ -0,0 +1,41 @@ +import axios from "axios"; +import axiosRetry from "axios-retry"; +import { pRateLimit } from "p-ratelimit"; +import { BASE_URL } from "../../../static/scripts/constants"; + +const api = axios.create({ + baseURL: BASE_URL, + timeout: 120000, // 2 minutes + headers: { + "Content-Type": "application/json", + ApiKey: process.env.PALETTE_API_KEY, + }, +}); + +const limit = pRateLimit({ + interval: 2000, // 1000 ms == 1 second + rate: 10, // 10 API calls per interval + concurrency: 10, // no more than 10 running at once +}); + +axiosRetry(api, { + retries: 3, + retryDelay: (...arg) => axiosRetry.exponentialDelay(...arg, 1000), + retryCondition(error) { + switch (error.response?.status) { + case 500: + case 404: + case 501: + case 429: + return true; + default: + return false; + } + }, +}); + +function callRateLimitAPI(delayedApiCall) { + return limit(delayedApiCall); +} + +module.exports = { api, callRateLimitAPI }; diff --git a/src/theme/MDXComponents/MDXComponents.ts b/src/theme/MDXComponents/MDXComponents.ts index cf7717bd5a..a0fd011c76 100644 --- a/src/theme/MDXComponents/MDXComponents.ts +++ b/src/theme/MDXComponents/MDXComponents.ts @@ -6,6 +6,7 @@ import Tooltip from "@site/src/components/Tooltip/Tooltip"; import PointsOfInterest from "@site/src/components/PointOfInterest/index"; import YouTube from "@site/src/components/Youtube/Youtube"; import Packs from "@site/src/components/Integrations/Packs/Packs"; +import PacksInformation from "@site/src/components/PacksInformation/PacksInformation"; import AppTiers from "@site/src/components/Integrations/AppTiers/AppTiers"; import PacksTable from "@site/src/components/PacksTable/PacksTable"; import TOCInline from "@theme/TOCInline"; @@ -24,6 +25,7 @@ export default { PointsOfInterest, YouTube, Packs, + PacksInformation, AppTiers, PacksTable, TOCInline, diff --git a/src/types/index.d.ts b/src/types/index.d.ts index 2f73749538..b22afd025e 100644 --- a/src/types/index.d.ts +++ b/src/types/index.d.ts @@ -4,6 +4,11 @@ declare module "*.module.scss"; declare module "*.png"; +declare module "*.md" { + const value: string; // markdown is just a string + export default value; +} + interface Mendable { initialize: () => void; // Add other methods or properties as needed diff --git a/static/assets/packs/app_layer.svg b/static/assets/packs/app_layer.svg new file mode 100644 index 0000000000..0546d733ca --- /dev/null +++ b/static/assets/packs/app_layer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/assets/packs/authentication_layer.svg b/static/assets/packs/authentication_layer.svg new file mode 100644 index 0000000000..5b54c141ef --- /dev/null +++ b/static/assets/packs/authentication_layer.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/assets/packs/cni_layer.svg b/static/assets/packs/cni_layer.svg new file mode 100644 index 0000000000..6190df0eca --- /dev/null +++ b/static/assets/packs/cni_layer.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/static/assets/packs/csi_layer.svg b/static/assets/packs/csi_layer.svg new file mode 100644 index 0000000000..4dff687862 --- /dev/null +++ b/static/assets/packs/csi_layer.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/assets/packs/ingress_layer.svg b/static/assets/packs/ingress_layer.svg new file mode 100644 index 0000000000..28a02fefb6 --- /dev/null +++ b/static/assets/packs/ingress_layer.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/static/assets/packs/k8s_layer.svg b/static/assets/packs/k8s_layer.svg new file mode 100644 index 0000000000..643cb21c2a --- /dev/null +++ b/static/assets/packs/k8s_layer.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/assets/packs/load_balancer_layer.svg b/static/assets/packs/load_balancer_layer.svg new file mode 100644 index 0000000000..b676b5f9d1 --- /dev/null +++ b/static/assets/packs/load_balancer_layer.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/static/assets/packs/logging_layer.svg b/static/assets/packs/logging_layer.svg new file mode 100644 index 0000000000..491f49d8fa --- /dev/null +++ b/static/assets/packs/logging_layer.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/assets/packs/misc_layer.svg b/static/assets/packs/misc_layer.svg new file mode 100644 index 0000000000..806f5d04fb --- /dev/null +++ b/static/assets/packs/misc_layer.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/assets/packs/monitoring_layer.svg b/static/assets/packs/monitoring_layer.svg new file mode 100644 index 0000000000..fcf3bf26b3 --- /dev/null +++ b/static/assets/packs/monitoring_layer.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/assets/packs/os_layer.svg b/static/assets/packs/os_layer.svg new file mode 100644 index 0000000000..4d8a3e8b9e --- /dev/null +++ b/static/assets/packs/os_layer.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/assets/packs/registry_layer.svg b/static/assets/packs/registry_layer.svg new file mode 100644 index 0000000000..1408268e00 --- /dev/null +++ b/static/assets/packs/registry_layer.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/assets/packs/security_layer.svg b/static/assets/packs/security_layer.svg new file mode 100644 index 0000000000..216408aefd --- /dev/null +++ b/static/assets/packs/security_layer.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/assets/packs/service_mesh_layer.svg b/static/assets/packs/service_mesh_layer.svg new file mode 100644 index 0000000000..87f68780ee --- /dev/null +++ b/static/assets/packs/service_mesh_layer.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/assets/packs/system_app_layer.svg b/static/assets/packs/system_app_layer.svg new file mode 100644 index 0000000000..462a2fb7bb --- /dev/null +++ b/static/assets/packs/system_app_layer.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/empty_icon_table_dark.svg b/static/img/empty_icon_table_dark.svg new file mode 100644 index 0000000000..fdf0420b83 --- /dev/null +++ b/static/img/empty_icon_table_dark.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/empty_icon_table_light.svg b/static/img/empty_icon_table_light.svg new file mode 100644 index 0000000000..3bd7c3eb1a --- /dev/null +++ b/static/img/empty_icon_table_light.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/packs-data/exclude_packs.json b/static/packs-data/exclude_packs.json new file mode 100644 index 0000000000..87deb017f8 --- /dev/null +++ b/static/packs-data/exclude_packs.json @@ -0,0 +1,15 @@ +[ + "palette-upgrader", + "csi-aws-new", + "csi-portworx-gcp", + "csi-portworx-aws", + "csi-portworx-vsphere", + "csi-rook-ceph-helm", + "csi-rook-ceph-helm-addon", + "calico-networking", + "ubuntu-k3s", + "ubuntu-coxedge", + "edge-os", + "spectro-zen-of-k8s", + "spectro-mgmt" +] diff --git a/static/packs-data/packs_information.json b/static/packs-data/packs_information.json new file mode 100644 index 0000000000..facd0f2d07 --- /dev/null +++ b/static/packs-data/packs_information.json @@ -0,0 +1,922 @@ +[ + { + "name": "amazon-linux-eks", + "description": "The Amazon EKS optimized Amazon Linux AMI is built on top of Amazon Linux 2 (AL2) and Amazon Linux 2023 (AL2023). This image is configured to serve as the base image for Amazon EKS nodes." + }, + { + "name": "ambassador", + "description": "Ambassador is a Kubernetes-native API gateway built on the Envoy Proxy. Ambassador simplifies the process of exposing, securing, and managing traffic to services in Kubernetes clusters, reducing challenges to implement complex networking scenarios in cloud-native environments." + }, + { + "name": "antrea", + "description": "Antrea is a Kubernetes networking solution intended to be Kubernetes native. It operates at Layer 3/4 to provide networking and security services for a Kubernetes cluster, leveraging Open vSwitch as the networking data plane." + }, + { + "name": "appdynamics-collector", + "description": "AppDynamics Collector is a component within the AppDynamics platform that gathers and processes telemetry data from applications, databases, or other monitored systems, and sends this data to the AppDynamics backend for analysis and visualization." + }, + { + "name": "appdynamics-operator", + "description": "AppDynamics Operator is a Kubernetes-native component designed to manage and automate the deployment and configuration of AppDynamics monitoring agents within Kubernetes environments." + }, + { + "name": "argo-rollouts", + "description": "Argo Rollouts is a Kubernetes controller and set of CRDs which provide advanced deployment capabilities such as blue-green, canary, canary analysis, experimentation, and progressive delivery features to Kubernetes." + }, + { + "name": "avi", + "description": "AVI AKO is a Kubernetes operator which works as an ingress controller and performs Avi-specific functions in a Kubernetes environment with the Avi Controller. AKO is deployed as a pod in the cluster and translates the required Kubernetes objects to Avi objects and automates the implementation of ingresses/routes/services on the Service Engines (SE) via the Avi Controller." + }, + { + "name": "avi-ako", + "description": "AVI AKO is a Kubernetes operator which works as an ingress controller and performs Avi-specific functions in a Kubernetes environment with the Avi Controller. AKO is deployed as a pod in the cluster and translates the required Kubernetes objects to Avi objects and automates the implementation of ingresses/routes/services on the Service Engines (SE) via the Avi Controller." + }, + { + "name": "aws-eks-calico", + "description": "Calico is a networking and security solution that enables Kubernetes workloads and non-Kubernetes/legacy workloads to communicate seamlessly and securely. Calico consists of networking to secure network communication, and advanced network policy to secure cloud-native microservices/applications at scale." + }, + { + "name": "aws-alb", + "description": "AWS Load Balancer Controller is a controller to help manage Elastic Load Balancers for a Kubernetes cluster. AWS Load Balancer Controller satisfies Kubernetes Ingress resources by provisioning Application Load Balancers. It also satisfies Kubernetes Service resources by provisioning Network Load Balancers." + }, + { + "name": "csi-aws-efs", + "description": "The Amazon Elastic File System Container Storage Interface (CSI) Driver implements the CSI specification for container orchestrators to manage the lifecycle of Amazon EFS file systems. Amazon EFS CSI driver supports dynamic provisioning and static provisioning. " + }, + { + "name": "aws-eks-oidc", + "description": "The AWS EKS OIDC pack provides the necessary configurations to configure your Identity Provider with the OIDC identity provider for Amazon EKS clusters." + }, + { + "name": "aws-ssm-agent", + "description": "The AWS SSM Agent pack installs the Amazon Session Manager Agent on the nodes of your Amazon Kubernetes cluster. The agent enables you to manage your interact and automate takss through the AWS Systems Manager." + }, + { + "name": "canonical-apache2", + "description": "The Apache HTTP Server Project is an effort to develop and maintain an open-source HTTP server for modern operating systems including UNIX and Windows. The goal of this project is to provide a secure, efficient and extensible server that provides HTTP services in sync with the current HTTP standards." + }, + { + "name": "canonical-charms-deployer", + "description": "Juju is an open source orchestration engine for software operators that enables the deployment, integration and lifecycle management of applications at any scale, on any infrastructure using charms. A charm is an operator - business logic encapsulated in reusable software packages that automate every aspect of an application's life." + }, + { + "name": "canonical-juju-olm", + "description": "The Juju controller is used to manage the software deployed through Juju, from deployment to upgrades to day-two operations. One Juju controller can manage multiple projects or workspaces, which in Juju are known as models" + }, + { + "name": "canonical-mysql", + "description": "MySQL is a fast, multi-threaded, multi-user, and robust SQL database server. It is intended for mission-critical, heavy-load production systems and mass-deployed software. This pack uses the Canonical MySQL Docker image to deploy a MySQL database." + }, + { + "name": "canonical-postgres", + "description": "PostgreSQL is a powerful, open source object-relational database system with over 35 years of active development that has earned it a strong reputation for reliability, feature robustness, and performance. This pack uses the Canonical PostgreSQL Docker image to deploy a PostgreSQL database." + }, + { + "name": "canonical-redis", + "description": "Redis is an in-memory data store used by millions of developers as a cache, vector database, document database, streaming engine, and message broker. Redis has built-in replication and different levels of on-disk persistence. It supports complex data types (for example, strings, hashes, lists, sets, sorted sets, and JSON), with atomic operations defined on those data types. This pack uses the Canonical Redis Docker image to deploy a Redis database." + }, + { + "name": "calico-network-policy", + "description": "Calico network policy provides a richer set of policy capabilities than what Kubernetes provides out-of-the-box. The Nework Policy provider includes: policy ordering/priority, deny rules, and more flexible match rules. While Kubernetes network policy applies only to pods, Calico network policy can be applied to multiple types of endpoints including pods, VMs, and host interfaces. Finally, when used with Istio service mesh, Calico network policy supports securing applications layers 5-7 match criteria, and cryptographic identity." + }, + { + "name": "calico-networking", + "description": "Calico network policy provides a richer set of policy capabilities than what Kubernetes provides out-of-the-box. The Nework Policy provider includes: policy ordering/priority, deny rules, and more flexible match rules. While Kubernetes network policy applies only to pods, Calico network policy can be applied to multiple types of endpoints including pods, VMs, and host interfaces. Finally, when used with Istio service mesh, Calico network policy supports securing applications layers 5-7 match criteria, and cryptographic identity." + }, + { + "name": "centos-aws", + "description": "CentOS Linux distribution is a stable, predictable, manageable and reproducible platform derived from the sources of RedHat Enterprise Linux (RHEL). It provides a rich base platform for open-source communities to build upon." + }, + { + "name": "centos-azure", + "description": "CentOS Linux distribution is a stable, predictable, manageable and reproducible platform derived from the sources of RedHat Enterprise Linux (RHEL). It provides a rich base platform for open-source communities to build upon." + }, + { + "name": "centos-gcp", + "description": "CentOS Linux distribution is a stable, predictable, manageable and reproducible platform derived from the sources of RedHat Enterprise Linux (RHEL). It provides a rich base platform for open-source communities to build upon." + }, + { + "name": "centos-vsphere", + "description": "CentOS Linux distribution is a stable, predictable, manageable and reproducible platform derived from the sources of RedHat Enterprise Linux (RHEL). It provides a rich base platform for open-source communities to build upon." + }, + { + "name": "centos-libvirt", + "description": "CentOS Linux distribution is a stable, predictable, manageable and reproducible platform derived from the sources of RedHat Enterprise Linux (RHEL). It provides a rich base platform for open-source communities to build upon." + }, + { + "name": "ceph-rbd", + "description": "A Container Storage Interface (CSI) driver, provisioner, snapshotter, resizer and attacher for Ceph RBD." + }, + { + "name": "ceph-rbd-addon", + "description": "A Container Storage Interface (CSI) driver, provisioner, snapshotter, resizer and attacher for Ceph RBD." + }, + { + "name": "certmanager", + "description": "cert-manager adds certificates and certificate issuers as resource types in Kubernetes clusters, simplifying obtaining, renewing, and using those certificates. It can issue certificates from various supported sources, including Let’s Encrypt, HashiCorp Vault, Venafi, and private PKI. It also takes care of the certificate validity and attempts to renew certificates before expiry." + }, + { + "name": "cisco-appdynamics-collectors", + "description": "AppDynamics Collector is a component within the AppDynamics platform that gathers and processes telemetry data from applications, databases, or other monitored systems, and sends this data to the AppDynamics backend for analysis and visualization." + }, + { + "name": "cisco-appdynamics-operators", + "description": "AppDynamics Operator is a Kubernetes-native component designed to manage and automate the deployment and configuration of AppDynamics monitoring agents within Kubernetes environments." + }, + { + "name": "cloudanix", + "description": "The Cloudanix pack is an add-on security pack that provides a dashboard to help you detect threats and unusual behavior in your Kubernetes clusters. Cloudanix detects the following: Files added or modified in sensitive directories. SSH into a container. Modifications to shell configuration files. Attempts to read sensitive files that contain credential information. And identitfy crypto mining." + }, + { + "name": "cni-azure", + "description": "The Azure CNI plugin provides network support to Azure Kubernetes Service (AKS) clusters. The plugin is responsible for setting up the network interfaces on the nodes and pods, and for managing the IP addresses. The CNI ensures every pod gets an IP address from the subnet and can be accessed directly." + }, + { + "name": "cni-aws-vpc-eks", + "description": "The Amazon Virtual Private Cloud (VPC) CNI plugin for Kubernetes. This plugin provides pod networking through Elastic Network Interfaces (ENI) for clusters deployed on AWS." + }, + { + "name": "cni-aws-vpc-eks-helm", + "description": "The Amazon Virtual Private Cloud (VPC) CNI plugin for Kubernetes. This plugin provides pod networking through Elastic Network Interfaces (ENI) for clusters deployed on AWS." + }, + { + "name": "cni-calico", + "description": "Calico is a networking and security solution that enables Kubernetes workloads and non-Kubernetes/legacy workloads to communicate seamlessly and securely. Calico consists of networking to secure network communication, and advanced network policy to secure cloud-native microservices/applications at scale." + }, + { + "name": "cni-calico-azure", + "description": "Calico is a networking and security solution that enables Kubernetes workloads and non-Kubernetes/legacy workloads to communicate seamlessly and securely. Calico consists of networking to secure network communication, and advanced network policy to secure cloud-native microservices/applications at scale." + }, + { + "name": "cni-kubenet", + "description": "Kubenet, a basic Kubernetes network plugin, configures pod network interfaces and routes using CNI plugins. It assigns IP addresses from a node-specific subnet, enabling pod-to-pod communication within nodes and relies on host network configurations for inter-node traffic." + }, + { + "name": "cni-multus", + "description": "Multus CNI is a container network interface plugin for Kubernetes that enables attaching multiple network interfaces to pods. Typically, in Kubernetes each pod only has one network interface,apart from a loopback. With Multus you can create a multi-homed pod that has multiple interfaces. This is accomplished by Multus acting as a meta-plugin, a CNI plugin that can call multiple other CNI plugins." + }, + { + "name": "cni-romana", + "description": "Romana is a new Software Defined Network (SDN) solution specifically designed for the Cloud Native architectural style. The result of this focus is that Romana cloud networks are less expensive to build, simpler to operate and deliver higher performance than cloud networks built using alternative SDN designs." + }, + { + "name": "cni-tke-global-router", + "description": "This pack deploys the TKE Global Router CNI plugin, which provides a global routing solution for Kubernetes clusters. The plugin is designed to work with the TKE Global Router controller to provide a global routing solution for Kubernetes clusters." + }, + { + "name": "cni-vpc-native-gke", + "description": "This pack deploys the GKE Container Network Interface (CNI) that provides network support to Google Kubernetes Engine (GKE) clusters. The CNI plugin is responsible for setting up the network interfaces on the nodes and pods, and for managing the IP addresses." + }, + { + "name": "cni-weavenet", + "description": "WeaveNet, a Kubernetes CNI plugin, uniquely creates a resilient virtual network for pod communication across clusters with zero configuration. It supports encryption, network policies, multicast, and automatic IP allocation, making it ideal for secure and scalable environments." + }, + { + "name": "centos", + "description": "CentOS Linux distribution is a stable, predictable, manageable and reproducible platform derived from the sources of RedHat Enterprise Linux (RHEL). It provides a rich base platform for open source communities to build upon. Spectro Cloudprovides CentOS as a development framework for its users." + }, + { + "name": "cni-flannel", + "description": "Flannel is a network layer, layer three, fabric for Kubernetes. It is designed to work with Linux routing infrastructure and creates a virtual network that gives each computing host a subnet. Flannel uses either the Kubernetes API or etcd directly to store the network configuration, the allocated subnets, and any auxiliary data such as the host’s public IP address." + }, + { + "name": "cni-cilium", + "description": "The Cilium agent runs on all clusters and servers to provide networking, security and observability to the workload running on that node." + }, + { + "name": "csi-azure", + "description": "Azure Disk CSI Driver allows Kubernetes to access Azure Disk volumes. The driver is implemented as a Container Storage Interface (CSI) plugin." + }, + { + "name": "csi-gcp", + "description": "The Google Compute Engine Persistent Disk (GCE PD) Container Storage Interface (CSI) Storage Plugin. You can use the GCE PD CSI driver to manage the lifecycle of GCE PD volumes." + }, + { + "name": "csi-gcp-driver", + "description": "The Google Compute Engine Persistent Disk (GCE PD) Container Storage Interface (CSI) Storage Plugin. You can use the GCE PD CSI driver to manage the lifecycle of GCE PD volumes. This pack supports Google IaaS clusters." + }, + { + "name": "gke-csi-gcp-driver", + "description": "The Google Compute Engine Persistent Disk (GCE PD) Container Storage Interface (CSI) Storage Plugin. You can use the GCE PD CSI driver to manage the lifecycle of GCE PD volumes. This pack supports Google GKE clusters." + }, + { + "name": "csi-local-path-provisioner", + "description": "Local Path Provisioner provides a way for the Kubernetes users to utilize the local storage in each node. Based on the user configuration, the Local Path Provisioner will create either hostPath or local based persistent volume on the node automatically" + }, + { + "name": "csi-local-path-provisioner-addon", + "description": "Local Path Provisioner provides a way for the Kubernetes users to utilize the local storage in each node. Based on the user configuration, the Local Path Provisioner will create either hostPath or local based persistent volume on the node automatically" + }, + { + "name": "csi-longhorn", + "description": "Longhorn is a lightweight distributed block storage system for cloud native storage Kubernetes that allows you to replicate storage to Kubernetes clusters. Once Longhorn is installed, it adds persistent volume support to the Kubernetes cluster using containers and microservices." + }, + { + "name": "csi-longhorn-addon", + "description": "Longhorn is a lightweight distributed block storage system for cloud native storage Kubernetes that allows you to replicate storage to Kubernetes clusters. Once Longhorn is installed, it adds persistent volume support to the Kubernetes cluster using containers and microservices." + }, + { + "name": "csi-maas-volume", + "description": "The MAAS Volume CSI driver allows Kubernetes to access MAAS volumes. The driver is implemented as a Container Storage Interface (CSI) plugin." + }, + { + "name": "csi-nfs", + "description": "The NFS Container Storage Interface (CSI) Driver provides a CSI interface used by Kubernetes to manage the lifecycle of NFS volumes." + }, + { + "name": "csi-nfs-subdir-external", + "description": "NFS subdir external provisioner is an automatic provisioner that use your existing and already configured NFS server to support dynamic provisioning of Kubernetes Persistent Volumes via Persistent Volume Claims." + }, + { + "name": "csi-openstack-cinder", + "description": "The Cinder CSI Driver is a CSI Specification compliant driver used by Container Orchestrators to manage the lifecycle of OpenStack Cinder Volumes." + }, + { + "name": "csi-portworx-aws", + "description": "The Portworx CSI Driver provides a standardized way to manage storage resources in containerized environments. This driver supports the full range of Portworx features and most of the CSI specifications, facilitating seamless integration and management of storage across different platforms." + }, + { + "name": "csi-portworx-gcp", + "description": "The Portworx CSI Driver provides a standardized way to manage storage resources in containerized environments. This driver supports the full range of Portworx features and most of the CSI specifications, facilitating seamless integration and management of storage across different platforms." + }, + { + "name": "csi-portworx-generic", + "description": "The Portworx CSI Driver provides a standardized way to manage storage resources in containerized environments. This driver supports the full range of Portworx features and most of the CSI specifications, facilitating seamless integration and management of storage across different platforms." + }, + { + "name": "csi-portworx-vsphere", + "description": "The Portworx CSI Driver provides a standardized way to manage storage resources in containerized environments. This driver supports the full range of Portworx features and most of the CSI specifications, facilitating seamless integration and management of storage across different platforms." + }, + { + "name": "kubernetes", + "description": "Palette eXtended Kubernetes (PXK) is a customized version of the open-source Cloud Native Computing Foundation (CNCF) distribution of Kubernetes. This Kubernetes version can be deployed through Palette to all major infrastructure providers, public cloud providers, and private data center providers. This is the default distribution when deploying a Kubernetes cluster through Palette." + }, + { + "name": "edge-k8s", + "description": "Palette eXtended Kubernetes (PXK-E) is a customized version of the open-source Cloud Native Computing Foundation (CNCF) distribution of Kubernetes for Edge devices. This Kubernetes version can be deployed Edge hosts. This is the default distribution when deploying Edge Kubernetes cluster through Palette." + }, + { + "name": "edge-native-opensuse", + "description": "openSUSE is a free and open-source Linux distribution developed by the openSUSE project." + }, + { + "name": "portworx-add-on", + "description": "The Portworx CSI Driver provides a standardized way to manage storage resources in containerized environments. This driver supports the full range of Portworx features and most of the CSI specifications, facilitating seamless integration and management of storage across different platforms." + }, + { + "name": "csi-rook-ceph", + "description": "Rook is an open source cloud-native storage orchestrator, providing the platform, framework, and support for Ceph storage to natively integrate with cloud-native environments." + }, + { + "name": "csi-rook-ceph-addon", + "description": "Rook is an open source cloud-native storage orchestrator, providing the platform, framework, and support for Ceph storage to natively integrate with cloud-native environments." + }, + { + "name": "csi-rook-ceph-helm", + "description": "Rook is an open source cloud-native storage orchestrator, providing the platform, framework, and support for Ceph storage to natively integrate with cloud-native environments." + }, + { + "name": "csi-rook-ceph-helm-addon", + "description": "Rook is an open source cloud-native storage orchestrator, providing the platform, framework, and support for Ceph storage to natively integrate with cloud-native environments." + }, + { + "name": "csi-rook", + "description": "Rook is a cloud-native storage orchestrator for Kubernetes, providing the platform, framework, and support for a diverse set of storage solutions to natively integrate with cloud-native environments. Rook turns storage" + }, + { + "name": "csi-tke", + "description": "The TKE CSI Driver provides support for Kubernetes clusters to use Tencent Cloud Block Storage." + }, + { + "name": "csi-topolvm", + "description": "TopoLVM is a CSI plugin using LVM for Kubernetes. It can be considered as a specific implementation of local persistent volumes using CSI and LVM. TopoLVM supports dynamic volume provisioning from PVC, flexible volume capacity management, and enhances the scheduler to prefer nodes having a larger storage capacity." + }, + { + "name": "csi-topolvm-addon", + "description": "TopoLVM is a CSI plugin using LVM for Kubernetes. It can be considered as a specific implementation of local persistent volumes using CSI and LVM. TopoLVM supports dynamic volume provisioning from PVC, flexible volume capacity management, and enhances the scheduler to prefer nodes having a larger storage capacity." + }, + { + "name": "csi-trident", + "description": "Trident is a fully supported open source project maintained by NetApp. It has been designed from the ground up to help you meet your containerized applications' persistence demands using industry-standard interfaces, such as the Container Storage Interface (CSI)." + }, + { + "name": "csi-trident-addon", + "description": "Trident is a fully supported open source project maintained by NetApp. It has been designed from the ground up to help you meet your containerized applications' persistence demands using industry-standard interfaces, such as the Container Storage Interface (CSI)." + }, + { + "name": "csi-vsphere-csi", + "description": "The vSphere CSI Driver is a Kubernetes plugin that allows persistent storage for containerized workloads running on vSphere infrastructure. It enables dynamic provisioning of storage volumes and provides features like snapshots, cloning, and dynamic expansion of volumes. The vSphere CSI Driver replaces the in-tree vSphere volume plugin and offers integration with vSphere with better scale and performance." + }, + { + "name": "csi-vsphere", + "description": "The vSphere CSI Driver is a Kubernetes plugin that allows persistent storage for containerized workloads running on vSphere infrastructure. It enables dynamic provisioning of storage volumes and provides features like snapshots, cloning, and dynamic expansion of volumes. The vSphere CSI Driver replaces the in-tree vSphere volume plugin and offers integration with vSphere with better scale and performance." + }, + { + "name": "csi-vsphere-volume", + "description": "The Vsphere CSI Volume plugin uses in-tree vSphere volumes to provide persistent storage for containerized workloads deployed on vSphere infrastructure." + }, + { + "name": "csm-operator-addon", + "description": "The Dell Container Storage Modules Operator is a Kubernetes Operator, which can be used to install and manage the CSI Drivers and CSM Modules provided by Dell for various storage platforms." + }, + { + "name": "custom_os", + "description": "This pack supports the deployment of Operating Systems for additional infrastructure platforms, such as Nutanix." + }, + { + "name": "db-postgresql", + "description": "PostgreSQL is a free and open-source relational database management system (RDBMS) emphasizing extensibility and SQL compliance. PostgreSQL features transactions with atomicity, consistency, isolation, durability (ACID) properties, automatically updatable views, materialized views, triggers, foreign keys, and stored procedures. It is supported on all major operating systems and handles a range of workloads from single machines to data warehouses or web services with many concurrent users." + }, + { + "name": "dex", + "description": "Dex is an identity service to drive authentication for Kubernetes API Server through the OpenID Connect plugin. Clients such as kubectl can act on behalf of users who can log in to the cluster through any identity provider that dex supports." + }, + { + "name": "hello-universe", + "description": "Hello Universe is a demo web application used to help users learn more about Palette and its features. It includes a click counter and funny Spectro Cloud-themed images." + }, + { + "name": "cockroachdb-operator", + "description": "The CockroachDB Kubernetes Operator deploys CockroachDB on a Kubernetes cluster. You can use the Operator to manage the configuration of an active CockroachDB cluster." + }, + { + "name": "cost-analyzer", + "description": "Kubecost is a cost monitoring and optimization application that offers real-time cost visibility and insights for Kubernetes clusters." + }, + { + "name": "aws-cluster-autoscaler", + "description": "The AWS Cluster Autoscaler pack monitors the cluster workload and utilizes AWS autoscaling groups to dynamically provision or shut down nodes, maximizing the cluster's performance and making it more resilient to failures." + }, + { + "name": "consul", + "description": "Consul is a service networking solution that enables teams to manage secure network connectivity between services and across on-prem and multi-cloud environments and runtimes. Consul offers service discovery, service mesh, traffic management, and automated updates to network infrastructure devices." + }, + { + "name": "cos-gke", + "description": "Container-Optimized OS is an operating system image for your Compute Engine VMs that is optimized for deploying Docker containers. With Container-Optimized OS, you can bring up your Docker containers on Google Cloud Platform quickly, efficiently, and securely. Container-Optimized OS is maintained by Google and is based on the open source Chromium OS project." + }, + { + "name": "crossplane", + "description": "Crossplane transforms Kubernetes clusters into universal control planes, extending the Kubernetes API and enabling infrastructure resource provisioning and management across major infrastructure providers." + }, + { + "name": "csi-aws", + "description": "This Container Storage Interface (CSI) driver, provisioner, snapshotter, resizer, and attacher for Amazon Elastic Block Store (EBS) volumes enables Kubernetes to manage the lifecycle of EBS volumes." + }, + { + "name": "csi-aws-ebs", + "description": "The Amazon Elastic Block Store Container Storage Interface (CSI) Driver provides a CSI interface used by Container Orchestrators to manage the lifecycle of Amazon EBS volumes." + }, + { + "name": "elastic-fluentd-kibana", + "description": "This pack deploys an Elasticsearch, Fluentd and Kibana stack. Elasticsearch is a distributed, RESTful search and analytics engine capable of solving a growing number of use cases. Fluentd is an open-source data collector for unified logging layer. Kibana is an open-source data visualization dashboard for Elasticsearch." + }, + { + "name": "elastic-operator", + "description": "Elastic Cloud on Kubernetes automates the deployment, provisioning, management, and orchestration of Elasticsearch, Kibana, APM Server, Enterprise Search, Beats, Elastic Agent, Elastic Maps Server, and Logstash on Kubernetes based on the operator pattern." + }, + { + "name": "elastic-stack", + "description": "Elastic Cloud on Kubernetes automates the deployment, provisioning, management, and orchestration of Elasticsearch, Kibana, APM Server, Enterprise Search, Beats, Elastic Agent, Elastic Maps Server, and Logstash on Kubernetes based on the operator pattern." + }, + { + "name": "external-dns", + "description": "ExternalDNS makes Kubernetes resources discoverable via public DNS servers. Like KubeDNS, it retrieves a list of resources, such as Services, Ingresses, etc, from the Kubernetes API to determine a desired list of DNS records. Unlike KubeDNS, however, it's not a DNS server but configures other DNS providers accordingly, such as AWS Route 53 or Google Cloud DNS. In a broader sense, ExternalDNS allows you to control DNS records dynamically via Kubernetes resources in a DNS provider-agnostic way." + }, + { + "name": "external-secrets", + "description": "External Secrets is a tool integrates external secret management systems like AWS Secrets Manager, HashiCorp Vault, Google Secrets Manager, Azure Key Vault, IBM Cloud Secrets Manager, CyberArk Conjur and many more. The operator reads information from external APIs and automatically injects the values into a Kubernetes Secret." + }, + { + "name": "external-secrets-operator", + "description": "External Secrets Operator is a Kubernetes operator that integrates external secret management systems like AWS Secrets Manager, HashiCorp Vault, Google Secrets Manager, Azure Key Vault, IBM Cloud Secrets Manager, CyberArk Conjur and many more. The operator reads information from external APIs and automatically injects the values into a Kubernetes Secret." + }, + { + "name": "external-snapshotter", + "description": "External Snapshotter is a Kubernetes controller that watches Kubernetes Snapshot CRD objects and triggers CreateSnapshot/DeleteSnapshot against a CSI endpoint. It is used to create and delete volume snapshots in a Kubernetes cluster." + }, + { + "name": "falco", + "description": "Falco is a cloud-native security tool designed for Linux systems. It employs custom rules on kernel events, which are enriched with container and Kubernetes metadata, to provide real-time alerts. Falco helps you gain visibility into abnormal behavior, potential security threats, and compliance violations, contributing to comprehensive runtime security." + }, + { + "name": "falcon-sensor", + "description": "Falcon is the CrowdStrike platform purpose-built to stop breaches via a unified set of cloud-delivered technologies that prevent all types of attacks — including malware and more. " + }, + { + "name": "f5", + "description": "F5 provides protocol and application traffic awareness for intelligent load balancing decisions. This pack deploys the F5 BIG-IP Controller for Kubernetes, which integrates with the F5 BIG-IP platform to provide advanced traffic management and security services for applications running in Kubernetes." + }, + { + "name": "fluentbit", + "description": "Fluent Bit is a fast, lightweight, and highly scalable logging and metrics processor and forwarder. Fluentbit can process Kubernetes containers logs from the file system or Systemd/Journald. Enrich logs with Kubernetes Metadata, and centralize your logs in third party storage services like Elasticsearch, InfluxDB, HTTP, etc." + }, + { + "name": "flux-cd", + "description": "Flux is a tool for keeping Kubernetes clusters in sync with sources of configuration, such as Git repositories, and automating updates to configuration when there is new code to deploy. Flux is built from the ground up to use Kubernetes' API extension system, and to integrate with Prometheus and other core components of the Kubernetes ecosystem. Flux supports multi-tenancy and support for syncing an arbitrary number of Git repositories." + }, + { + "name": "gatekeeper", + "description": "Gatekeeper is a validating and mutating webhook that enforces CRD-based policies executed by Open Policy Agent, a policy engine for Cloud Native environments hosted by CNCF." + }, + { + "name": "generic-vm-libvirt", + "description": "Generic-VM-Libvirt is a Palette Add-on pack used to simplify deploying the virtual machine applications from a cluster profile or a system profile. Generic-VM-Libvirt extracts all Terraform constructs inside the pack and exposes nothing but the values. Users will then have the ability to modify the add-on pack for the different applications." + }, + { + "name": "generic-vm-vsphere", + "description": "Generic-VM-vSphere is a Palette Add-on pack used to simplify deploying the virtual machine resource from a cluster profile or a system profile. Generic-VM-vSphere extracts all Terraform constructs inside the pack and exposes nothing but the values. Users will then have the ability to modify the add-on pack for the different applications." + }, + { + "name": "gloo", + "descrption": "Gloo Gateway is a feature-rich, fast, and flexible Kubernetes-native ingress controller and next-generation API gateway that is built on top of Envoy proxy and the Kubernetes Gateway API. It excels in function-level routing, supports legacy apps, microservices and serverless, offers robust discovery capabilities, integrates seamlessly with open-source projects, and is designed to support hybrid applications with various technologies, architectures, protocols, and clouds." + }, + { + "name": "gvisor", + "description": "gVisor is an open-source Linux-compatible sandbox that can be deployed anywhere existing container tooling does. It enables cloud-native container security and portability. gVisor leverages years of experience isolating production workloads at Google." + }, + { + "name": "kubernetes-microk8s", + "description": "MicroK8s is a lightweight Kubernetes distribution developed by Canonical. It deploys all Kubernetes services in a single, fully contained package and offers out-of-the-box add-ons." + }, + { + "name": "kubernetes-aks", + "description": "Kubernetes is a portable, extensible, open source platform for managing containerized workloads and services, that facilitates both declarative configuration and automation. It has a large, rapidly growing ecosystem. Kubernetes services, support, and tools are widely available." + }, + { + "name": "kubernetes-eks", + "description": "Kubernetes is a portable, extensible, open source platform for managing containerized workloads and services, that facilitates both declarative configuration and automation. It has a large, rapidly growing ecosystem. Kubernetes services, support, and tools are widely available." + }, + { + "name": "kubernetes-gke", + "description": "Kubernetes is a portable, extensible, open source platform for managing containerized workloads and services, that facilitates both declarative configuration and automation. It has a large, rapidly growing ecosystem. Kubernetes services, support, and tools are widely available." + }, + { + "name": "kubernetes-konvoy", + "description": "Konvoy is built using upstream Kubernetes combined with all other required technologies and add-ons such as networking, storage, monitoring, logging, lifecycle management, using best of breed open source CNCF technologies. Konvoy comes with operational, security leading practices, testing and support for all of those technologies, and it works on virtual, bare metal, and public cloud infrastructure." + }, + { + "name": "kubernetes-tke", + "description": "Kubernetes is a portable, extensible, open source platform for managing containerized workloads and services, that facilitates both declarative configuration and automation. It has a large, rapidly growing ecosystem. Kubernetes services, support, and tools are widely available." + }, + { + "name": "kubernetes-custom", + "description": "Kubernetes is a portable, extensible, open source platform for managing containerized workloads and services, that facilitates both declarative configuration and automation. It has a large, rapidly growing ecosystem. Kubernetes services, support, and tools are widely available." + }, + { + "name": "kubernetes-rke2", + "description": "RKE2, also known as RKE Government, is Rancher's next-generation Kubernetes distribution. RKE2 is a fully conformant Kubernetes distribution that focuses security and compliance within the U.S. Federal Government sector." + }, + { + "name": "edge-rke2", + "description": "RKE2, also known as RKE Government, is Rancher's next-generation Kubernetes distribution. RKE2 is a fully conformant Kubernetes distribution that focuses security and compliance within the U.S. Federal Government sector." + }, + { + "name": "edge-microk8s", + "description": "MicroK8s is a lightweight Kubernetes distribution developed by Canonical. It deploys all Kubernetes services in a single, fully contained package and offers out-of-the-box add-ons." + }, + { + "name": "lb-metallb", + "description": "MetalLB is a load balancer implementation for bare metal Kubernetes clusters that use standard routing protocols." + }, + { + "name": "lb-metallb-helm", + "description": "MetalLB is a load balancer implementation for bare metal Kubernetes clusters that use standard routing protocols." + }, + { + "name": "ngrok-ingress-controller", + "description": "The ngrok Ingress Controller provides secure internet access to Kubernetes workloads by offloading network ingress and middleware execution to ngrok's platform." + }, + { + "name": "nutanix-csi", + "description": "The Nutanix CSI pack uses Nutanix Volumes and Nutanix Files to provide persistent storage for stateful applications." + }, + { + "name": "argo-cd", + "description": "Argo CD is a declarative continuous delivery tool for Kubernetes. It automates the deployment of the desired application states in the specified target environments using Git repositories as the source of truth." + }, + { + "name": "cni-cilium-oss", + "description": "Cilium is an open-source software for securing and observing network connectivity between cloud-native container workloads." + }, + { + "name": "cni-cilium", + "description": "Cilium is an open-source software for securing and observing network connectivity between cloud-native container workloads." + }, + { + "name": "edge-k3s", + "description": "K3s is a lightweight distribution of Kubernetes that is specifically designed for resource-constrained environments and Internet of Things (IoT) applications." + }, + { + "name": "edge-k8s", + "description": "Palette eXtended Kubernetes - Edge (PXK-E) is a customized version of the open-source Cloud Native Computing Foundation (CNCF) distribution of Kubernetes. This Kubernetes distribution is customized and optimized for edge computing environments and can be deployed through Palette." + }, + { + "name": "edge-native-byoi", + "description": "The Bring Your Own Operating System (BYOOS) pack enables you to use a custom Operating System (OS) with Palette Edge clusters." + }, + { + "name": "generic-byoi", + "description": "The Bring Your Own Operating System (BYOOS) pack enables you to use a custom Operating System (OS) with Palette clusters." + }, + { + "name": "harbor-edge-native-config", + "description": "Harbor is an open-source registry that secures artifacts with policies and role-based access control. You can install Harbor on your Edge clusters and use it to store all the images used by the cluster, including your provider images and packs." + }, + { + "name": "harbor", + "description": "Harbor is an open-source registry that secures artifacts with policies and role-based access control. You can install Harbor on your clusters and use it to store all the images and packs used by the cluster." + }, + { + "name": "nginx", + "description": "The NGNIX pack is an Ingress Controller implementation that uses NGINX as a reverse proxy and load balancer. It provides services with externally reachable URLs, offers SSL/TLS termination, load balances traffic, and supports name-based virtual hosting." + }, + { + "name": "local-ai", + "description": "LocalAI is an open-source alternative to OpenAI that enables you to run LLMs and generate images and audio locally using consumer-grade hardware. It supports multiple model families." + }, + { + "name": "minio", + "description": "MinIO is a Kubernetes-native high-performance object store with an S3-compatible API." + }, + { + "name": "nvidia-gpu-operator", + "description": "The NVIDIA GPU Operator automates the management of the NVIDIA software components required for GPU provisioning. This allows Kubernetes cluster administrators to manage GPU nodes in the same way as CPU nodes." + }, + { + "name": "oam-app-controller", + "description": "The OAM App Controller is a set of packs used for deploying Open Application Model (OAM) applications. It comprises the App-core, Flux2, and Zot packs." + }, + { + "name": "opensuse-k3s", + "description": "SUSE K3s is a SUSE offering for K3s, a lightweight yet powerful certified Kubernetes distribution designed for production workloads across resource-restrained, remote locations or on Edge IoT devices." + }, + { + "name": "open-policy-agent", + "description": "Open Policy Agent (OPA) Gatekeeper provides an admission control system based on policies or rules implemented through parameterized and admin configurable constraints." + }, + { + "name": "outcold-monitoring", + "description": "Outcold Solutions is a Kubernetes monitoring solution integrated with Splunk. It includes capabilities for log aggregation, cluster health monitoring, application monitoring, and security auditing." + }, + { + "name": "kubesec", + "description": "Kubesec provides security risk analysis for Kubernetes resources. It identifies misconfigurations and generates recommendations to improve the security of Pods, Deployments, and other resources." + }, + { + "name": "kubevious", + "description": "Kubevious is a cloud-native best practices and configuration validation enforcement tool for Kubernetes clusters and applications. It detects and enforces custom policies and conditions within your clusters." + }, + { + "name": "kubevirt", + "description": "KubeVirt is a virtual machine management add-on that allows the management of virtual machine workloads alongside container workloads within a Kubernetes cluster." + }, + { + "name": "kubevirt-cdi", + "description": "The KubeVirt Containerized Data Importer (CDI) provides facilities for enabling Persistent Volume Claims (PVCs) to be used as disks for KubeVirt VMs via DataVolumes." + }, + { + "name": "kubewatch", + "description": "Kubewatch is a Kubernetes watcher that monitors the cluster for resource changes and publishes notifications to available collaboration hubs and notification channels." + }, + { + "name": "lb-citrix-adc", + "description": "Citrix ADC is an application delivery controller (ADC) solution that offers IP address management and load balancing capabilities for external services deployed on Kubernetes clusters, particularly suited for on-premise deployments." + }, + { + "name": "linkerd", + "description": "Linkerd is a service mesh for Kubernetes that provides runtime debugging, observability, reliability, and security without requiring code changes." + }, + { + "name": "newrelic", + "description": "New Relic is an observability platform designed to provide real-time insights into the performance and behavior of digital systems. It allows you to monitor applications, infrastructure, web browsers, and other components." + }, + { + "name": "permission-manager", + "description": "The Permission Manager pack provides a graphical user interface for RBAC management in Kubernetes. It allows you to create users, assign namespaces and permissions, and distribute Kubeconfig YAML files." + }, + { + "name": "palette-upgrader", + "description": "The Palette Upgrader pack enables you to manage the Palette upgrade version of Edge-virtual clusters." + }, + { + "name": "pfsense-vm-libvirt", + "description": "pfSense is an open-source customized distribution of the FreeBSD operating system designed for use as a firewall and router in libvirt VMs." + }, + { + "name": "pfsense-vm-vsphere", + "description": "pfSense is an open-source customized distribution of the FreeBSD operating system designed for use as a firewall and router in vSphere VMs." + }, + { + "name": "datadog", + "description": "Datadog is an observability platform that offers a variety of application monitoring capabilities for servers, databases, tools, and services." + }, + { + "name": "prismacloud", + "description": "Prisma Cloud Compute is a cloud workload protection platform (CWPP) that protects hosts, containers, and serverless deployments in any cloud at every stage of the software lifecycle. It provides security for tenant workloads regardless of the underlying compute technology or cloud environment." + }, + { + "name": "prometheus-agent", + "description": "Prometheus is an open-source monitoring and alerting system that is designed to collect and analyze metrics from various systems and services. The Prometheus Agent pack works together with the Prometheus Operator pack." + }, + { + "name": "prometheus-operator", + "description": "The Prometheus Operator is a tool that simplifies the deployment and management of Prometheus in a Kubernetes cluster. It automates tasks such as configuring Prometheus, creating and managing Prometheus rules and alerts and scaling Prometheus instances based on demand." + }, + { + "name": "qualys-agent", + "description": "Qualys Cloud Agent is a lightweight cloud security agent that enables real-time, global visibility of IT assets and response." + }, + { + "name": "rbac-manager", + "description": "Fairwinds RBAC Manager is an operator that supports declarative configuration for RBAC with new custom resources, simplifying authorization in Kubernetes." + }, + { + "name": "registry-creds", + "description": "The Registry Credentials pack allows you to refresh AWS ECR, Google Registry, and Azure Container Registry credentials inside your Kubernetes cluster using ImagePullSecrets." + }, + { + "name": "reloader", + "description": "Reloader is a Kubernetes controller that monitors changes in ConfigMaps and Secrets and performs rolling upgrades on Pods with their associated Deployments, StatefulSets, DaemonSets, and DeploymentConfigs." + }, + { + "name": "rhel-vmware", + "description": "Red Hat Enterprise Linux (RHEL) is an enterprise Linux operating system (OS) developed by Red Hat. The RHEL pack is designed for VMware clusters." + }, + { + "name": "sapp-hipster", + "description": "Hipster Commerce is a demo e-commerce application used to showcase Palette." + }, + { + "name": "seccomp", + "description": "Seccomp (Secure Computing Mode) is a security mechanism for Linux processes that filters system calls (syscalls) based on a set of defined rules. You can apply seccomp profiles to containerized workloads to enhance the security of the application deployment." + }, + { + "name": "signalfx", + "description": "SignalFx is a cloud monitoring platform for infrastructure, microservices, and applications. It allows you to monitor and observe data in real-time, regardless of the data source or type of application." + }, + { + "name": "slem-rke2", + "description": "RKE2 is a fully conformant Kubernetes distribution by Rancher, focusing on security and compliance within the U.S. Federal Government sector. SLE Micro RKE2 is the RKE2 Kubernetes distribution suited for the SUSE Linux Enterprise (SLE) Micro edge operating system." + }, + { + "name": "spectro-byo-manifest", + "description": "The BYO Manifest add-on pack enables you to add your own Kubernetes manifest to the pack's values field, allowing you to deploy your own custom applications." + }, + { + "name": "spectro-cluster-metrics", + "description": "The Spectro Cluster Metrics pack exposes Palette-specific host cluster metrics to Prometheus. You can use this data to learn about the state of your clusters, resource utilization, and more." + }, + { + "name": "spectrocloud-grafana-dashboards", + "description": "The Spectro Cloud Grafana Dashboards is a demo add-on pack that exposes internal cluster resource metrics. You can access the cluster information exposed by the pack in Grafana by visiting the Spectro Cloud/Spectro Clusters dashboard." + }, + { + "name": "spectro-grafana-dashboards", + "description": "The Spectro Cloud Grafana Dashboards is an add-on pack that exposes internal cluster resource metrics. You can access the cluster information exposed by the pack in Grafana by visiting the Spectro Cloud/Spectro Clusters dashboard." + }, + { + "name": "heartbeat", + "description": "Heartbeat is a lightweight daemon that periodically checks the status of your services and determines whether they are reachable." + }, + { + "name": "image-swap", + "description": "The ImageSwap pack is a webhook that allows you to define mappings to automatically swap image definitions within Kubernetes Pods with a different registry." + }, + { + "name": "istio", + "description": "Istio is an open-source service mesh that layers transparently onto existing distributed applications. It helps you to secure, connect, and monitor services." + }, + { + "name": "k8gb", + "description": "k8gb is an open-source global load balancing solution for Kubernetes. It focuses on load balancing traffic across geographically dispersed Kubernetes clusters using different load balancing strategies." + }, + { + "name": "k8sgpt-operator", + "description": "The K8sGPT Operator enables K8sGPT within a Kubernetes cluster. K8sGPT is a tool that continuously scans your Kubernetes clusters for anomalies. It analyzes cluster data and uses AI engines to provide insights and recommendations." + }, + { + "name": "konvoy-defaultstorageclass", + "description": "The Konvoy Default Storage Class pack enables users to specify a default storage class for applications that require persistent storage." + }, + { + "name": "konvoy-nvidia", + "description": "The NVIDIA GPU Plugin pack enables the NVIDIA device plugin in Konvoy clusters." + }, + { + "name": "konvoy-opsportal", + "description": "Konvoy Operations Portal is a web application that provides an overview of cluster status and shortcuts to several dashboards for add-on services, such as Grafana." + }, + { + "name": "kong", + "description": "Kong Ingress Controller allows you to run Kong Gateway as a Kubernetes Ingress to handle inbound requests for a Kubernetes cluster." + }, + { + "name": "k8s-dashboard", + "description": "Kubernetes Dashboard is a web-based Kubernetes UI that allows users to monitor and manage clusters and deployed workloads." + }, + { + "name": "kotsadm", + "description": "Kotsadm is an admin console designed for managing Kubernetes Off-The-Shelf (KOTS) software. Once deployed, Kotsadm enables administrators to configure, install, and update applications using step-through configuration and automated preflight checks." + }, + { + "name": "kube-bench", + "description": "kube-bench is a tool that checks whether Kubernetes is deployed securely by running the checks documented in the CIS Kubernetes Benchmark." + }, + { + "name": "kubeflow", + "description": "Kubeflow is the machine learning toolkit for Kubernetes. It helps make the deployment of machine learning (ML) workflows on Kubernetes simple, portable, and scalable." + }, + { + "name": "kubeflow-full", + "description": "The Kubeflow Full pack offers the complete suite of Kubeflow components bundled together." + }, + { + "name": "kubeflow-pipelines", + "description": "Kubeflow Pipelines is a platform for building and deploying portable, scalable machine learning (ML) workflows based on Docker containers." + }, + { + "name": "kubeflow-serving", + "description": "The Kubeflow Serving pack provides a Kubernetes Custom Resource Definition (CRD) for serving predictive and generative Machine Learning (ML) models." + }, + { + "name": "kubeflow-training", + "description": "The Kubeflow Training Operator is a Kubernetes-native project for fine-tuning and scalable distributed training of Machine Learning (ML) models created with various ML frameworks. It allows you to use Kubernetes workloads to train your large models via Kubernetes Custom Resources APIs or using the Training Operator Python Software Development Toolkit (SDK)." + }, + { + "name": "kubehunter", + "description": "Kube-hunter searches for security weaknesses in Kubernetes clusters. It is designed to increase awareness and visibility of security issues in Kubernetes environments." + }, + { + "name": "kubebench", + "description": "kube-bench is a tool that checks whether Kubernetes is deployed securely by running the checks documented in the CIS Kubernetes Benchmark." + }, + { + "name": "spectro-proxy", + "description": "Spectro Proxy is a pack that enables the use of a reverse proxy with a Kubernetes cluster. The reverse proxy allows you to connect to the cluster API of a Palette-managed Kubernetes cluster in private networks or clusters configured with private API endpoints. The reverse proxy managed by Spectro Cloud is also known as the forward reverse proxy (FRP)." + }, + { + "name": "spectro-k8s-dashboard", + "description": "This pack deploys the Kubernetes Dashboard, and the Spectro Proxy if needed. The pack reduces the complexity of deploying the Kubernetes Dashboard by creating required resources and roles." + }, + { + "name": "spectro-rbac", + "description": "The Spectro RBAC pack is a helper pack to create roleBindings and clusterRoleBindings for a user or service account in a Kubernetes cluster." + }, + { + "name": "spectro-namespace-labeler", + "description": "The Spectro Namespace Labeler pack is a helper pack to add labels to a namespace in a Kubernetes cluster." + }, + { + "name": "spectro-nodes-task-handler", + "description": "The Spectro Nodes Task Handler pack is tool you can use to perform tasks on nodes in a Kubernetes cluster post-initailization. For example, you can use it to install software, or modify default settings, and more." + }, + { + "name": "spectro-pack-status-check", + "description": "This pack invokes a script that reads a timeout from the YAML file provided, calculates the number of attempts, and repeatedly checks the status of specified Kubernetes resources against expected conditions. If a resource meets the condition within the attempts, it exits successfully; otherwise, it fa" + }, + { + "name": "spegel", + "description": "Spegel is a local OCI registry mirror for Kubernets clusters. You can use it to locally cache images from external registries with no explicit configuration, and more." + }, + { + "name": "splunk", + "description": "This pack deploys Splunk Connect for Kubernetes. Splunk Connect for Kubernetes provides a way to import and search your Kubernetes logging, object, and metrics data in your Splunk platform deployment." + }, + { + "name": "spotinst-kubernetes-cluster-controller", + "description": "Ocean automates cloud infrastructure for containers. It continuously analyzes how your containers are using infrastructure, automatically scaling compute resources to maximize utilization and availability and utilizing the optimal blend of spot, reserved, and on-demand compute instances. Ocean eliminates the need to manage and operate cloud infrastructure." + }, + { + "name": "sr-iov", + "description": "SR-IOV is a CNI plugin that enables the configuration and usage of SR-IOV VF networks in containers and orchestrators like Kubernetes." + }, + { + "name": "strimzi-kafka", + "description": "Strimzi provides a way to deploy an Apache Kafka® cluster on Kubernetes in various deployment configurations. " + }, + { + "name": "suc", + "description": "System Upgrade Controller, is a general-purpose, Kubernetes-native upgrade controller for Kubernetes nodes developed by Rancher. It introduces a new CRD, the Plan, for defining any and all of your upgrade policie and requirements. A Plan is an outstanding intent to mutate nodes in your cluster." + }, + { + "name": "sumologic", + "description": "The Sumo Logic Kubernetes app provides visibility into the worker nodes that comprise a cluster, as well as application logs of the worker nodes. The app is a single-pane-of-glass through which you can monitor and troubleshoot container health, replication, load balancing, pod state and hardware resource allocation." + }, + { + "name": "sysdig", + "description": "Sysdig is a monitoring, security, and troubleshooting platform for cloud-native applications. Sysdig provides deep visibility into containerized applications, allowing you to monitor, secure, and troubleshoot your Kubernetes environment." + }, + { + "name": "stormforge-optimize-live", + "description": "StormForge Optimize Live is a Kubernetes-native performance optimization platform that uses machine learning to automatically tune your applications for performance, cost, and resource efficiency." + }, + { + "name": "tekton-chains", + "descriptions": "Tekton Chains is a Kubernetes Custom Resource Definition (CRD) controller that allows you to manage your supply chain security in Tekton. In its default mode of operation, Chains works by observing all TaskRuns executions in your cluster. When TaskRuns complete, Chains takes a snapshot of them. Chains then converts this snapshot to one or more standard payload formats, signs them and stores where specified." + }, + { + "name": "tekton-operator", + "description": "Tekton Operator is a Kubernetes extension that can install, upgrade and manage TektonCD Pipelines, Dashboard, Triggers and other components, on any Kubernetes Cluster." + }, + { + "name": "tetragon", + "description": "Tetragon is a flexible Kubernetes-aware security observability and runtime enforcement tool that applies policy and filtering directly with eBPF, allowing for reduced observation overhead, tracking of any process, and real-time enforcement of policies." + }, + { + "name": "tke-managed-os", + "description": "TKE Managed OS is a pack that provides a managed operating system for Tencent Kubernetes Engine (TKE) clusters. The pack includes the operating system and the necessary configurations to deploy the TKE cluster." + }, + { + "name": "thanos", + "description": "Thanos is a set of components that can be composed into a highly available metric system with unlimited storage capacity, which can be added seamlessly on top of existing Prometheus deployments. Thanos leverages the Prometheus 2.0 storage format to cost-efficiently store historical metric data in any object storage while retaining fast query latencies." + }, + { + "name": "triliovault", + "description": "Trilio for Kubernetes is a data protection and backup solution specifically designed for Kubernetes environments. Trilio provides backup and recovery capabilities tailored for these dynamic, container-based infrastructures." + }, + { + "name": "trivy", + "description": "Trivy is a simple and comprehensive vulnerability, misconfiguration, secret scanner for containers and other artifacts. Trivy detects vulnerabilities of OS packages and language-specific packages. In addition, Trivy scans Infrastructure as Code (IaC) files such as Terraform and Kubernetes, to detect potential configuration issues that expose your deployments to the risk of attack." + }, + { + "name": "trow", + "description": "Trow is an image management service for Kubernetes that allows you to store, manage, and distribute container images in your cluster. Trow provides a secure, private registry for your Kubernetes cluster, allowing you to store images locally and distribute them across your cluster." + }, + { + "name": "Twistlock", + "description": "Twistlock is a comprehensive container security solution designed specifically for Kubernetes and other container environments. Twistlock provides end-to-end security for containerized applications running on Kubernetes, covering the entire container lifecycle from development to production." + }, + { + "name": "ubuntu-aws", + "description": "Ubuntu is a free, open-source operating system (OS) based on Linux that can be used on desktops, servers, in the cloud, and for IoT devices. Ubuntu is a Linux distribution derived from Debian." + }, + { + "name": "ubuntu-azure", + "description": "Ubuntu is a free, open-source operating system (OS) based on Linux that can be used on desktops, servers, in the cloud, and for IoT devices. Ubuntu is a Linux distribution derived from Debian." + }, + { + "name": "ubuntu-gcp", + "description": "Ubuntu is a free, open-source operating system (OS) based on Linux that can be used on desktops, servers, in the cloud, and for IoT devices. Ubuntu is a Linux distribution derived from Debian." + }, + { + "name": "ubuntu-aks", + "description": "Ubuntu is a free, open-source operating system (OS) based on Linux that can be used on desktops, servers, in the cloud, and for IoT devices. Ubuntu is a Linux distribution derived from Debian." + }, + { + "name": "ubuntu-eks", + "description": "Ubuntu is a free, open-source operating system (OS) based on Linux that can be used on desktops, servers, in the cloud, and for IoT devices. Ubuntu is a Linux distribution derived from Debian." + }, + { + "name": "ubuntu-gke", + "description": "Ubuntu is a free, open-source operating system (OS) based on Linux that can be used on desktops, servers, in the cloud, and for IoT devices. Ubuntu is a Linux distribution derived from Debian." + }, + { + "name": "ubuntu-maas", + "description": "Ubuntu is a free, open-source operating system (OS) based on Linux that can be used on desktops, servers, in the cloud, and for IoT devices. Ubuntu is a Linux distribution derived from Debian." + }, + { + "name": "ubuntu-edge", + "description": "Ubuntu is a free, open-source operating system (OS) based on Linux that can be used on desktops, servers, in the cloud, and for IoT devices. Ubuntu is a Linux distribution derived from Debian." + }, + { + "name": "ubuntu-libvirt", + "description": "Ubuntu is a free, open-source operating system (OS) based on Linux that can be used on desktops, servers, in the cloud, and for IoT devices. Ubuntu is a Linux distribution derived from Debian." + }, + { + "name": "ubuntu-openstack", + "description": "Ubuntu is a free, open-source operating system (OS) based on Linux that can be used on desktops, servers, in the cloud, and for IoT devices. Ubuntu is a Linux distribution derived from Debian." + }, + { + "name": "ubuntu-vsphere", + "description": "Ubuntu is a free, open-source operating system (OS) based on Linux that can be used on desktops, servers, in the cloud, and for IoT devices. Ubuntu is a Linux distribution derived from Debian." + }, + { + "name": "edge-native-ubuntu", + "description": "Ubuntu is a free, open-source operating system (OS) based on Linux that can be used on desktops, servers, in the cloud, and for IoT devices. Ubuntu is a Linux distribution derived from Debian." + }, + { + "name": "unctl", + "description": "unctl is a versatile command-line tool designed to perform a wide range of checks and inspections on various components of your infrastructure. It provides a unified interface to assess the health and performance of different services and platforms, and goes beyond mere diagnosis." + }, + { + "name": "vault", + "description": "Vault is a tool developed by HashiCorp that helps organizations manage and protect sensitive data and secrets. It uses identity-based security to authenticate and authorize access to secrets, such as passwords, API keys, and encryption keys, using authentication and authorization methods. Vault also protects data in-transit and at rest, and can help prevent credential exposure and unauthorized users." + }, + { + "name": "velero", + "description": "Velero is an open source tool to safely backup and restore, perform disaster recovery, and migrate Kubernetes cluster resources and persistent volumes." + }, + { + "name": "virtual-machine-orchestrator", + "description": "The Palette Virtual Machine Orchestrator (VMO) pack consolidates all components that you need to deploy and manage Virtual Machines (VMs) alongside containers in a Kubernetes host cluster. You can deploy VMO as an add-on cluster profile on top of an existing data center or edge cluster." + }, + { + "name": "volume-snapshot-controller", + "description": "The Volume Snapshot Controller is a Kubernetes controller that can take snapshots of a persistent volume. A snapshot can be used either to rehydrate a new volume, pre-populated with the snapshot data, or to restore an existing volume to a previous state (represented by the snapshot)." + }, + { + "name": "wordpress-chart", + "description": "WordPress is an open-source web content management system. It was originally created as a tool to publish blogs but has evolved to support publishing other web content, including more traditional websites, mailing lists and Internet forum, media galleries, membership sites, learning management systems, and online stores. " + } +] diff --git a/static/scripts/constants.js b/static/scripts/constants.js new file mode 100644 index 0000000000..47e12617c1 --- /dev/null +++ b/static/scripts/constants.js @@ -0,0 +1 @@ +export const BASE_URL = "http://api.spectrocloud.com"; diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json index 80de3b1401..9de14de20c 100644 --- a/tsconfig.eslint.json +++ b/tsconfig.eslint.json @@ -3,7 +3,15 @@ "noEmit": true, "allowJs": true }, - "extends": "./tsconfig.json", - "include": ["src/**/*.ts", "src/**/*.tsx", "./.eslintrc.js", "*.d.ts", "visuals/**/*.ts", "playwright.config.ts"], + "extends": ["./tsconfig.json"], + "include": [ + "src/**/*.ts", + "src/**/*.tsx", + "./.eslintrc.js", + "*.d.ts", + "visuals/**/*.ts", + "playwright.config.ts", + "_partials/*.ts" + ], "exclude": ["**/node_modules", "deprecated"] }