diff --git a/apis/installer/v1alpha1/ace_ocm_addons.go b/apis/installer/v1alpha1/ace_ocm_addons.go
new file mode 100644
index 000000000..e97cb921f
--- /dev/null
+++ b/apis/installer/v1alpha1/ace_ocm_addons.go
@@ -0,0 +1,61 @@
+/*
+Copyright AppsCode Inc. and Contributors
+
+Licensed under the AppsCode Community License 1.0.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ https://github.com/appscode/licenses/raw/1.0.0/AppsCode-Community-1.0.0.md
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package v1alpha1
+
+import (
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "kmodules.xyz/resource-metadata/apis/shared"
+)
+
+const (
+ ResourceKindAceOcmAddons = "AceOcmAddons"
+ ResourceAceOcmAddons = "aceocmaddons"
+ ResourceAceOcmAddonss = "aceocmaddonss"
+)
+
+// AceOcmAddons defines the schama for AceOcmAddons Installer.
+
+// +genclient
+// +genclient:skipVerbs=updateStatus
+// +k8s:openapi-gen=true
+// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
+
+// +kubebuilder:object:root=true
+// +kubebuilder:resource:path=aceocmaddonss,singular=aceocmaddons,categories={kubeops,appscode}
+type AceOcmAddons struct {
+ metav1.TypeMeta `json:",inline,omitempty"`
+ metav1.ObjectMeta `json:"metadata,omitempty"`
+ Spec AceOcmAddonsSpec `json:"spec,omitempty"`
+}
+
+// AceOcmAddonsSpec is the schema for AceOcmAddons Operator values file
+type AceOcmAddonsSpec struct {
+ NameOverride string `json:"nameOverride"`
+ FullnameOverride string `json:"fullnameOverride"`
+
+ shared.BootstrapPresets `json:",inline,omitempty"`
+}
+
+// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
+
+// AceOcmAddonsList is a list of AceOcmAddonss
+type AceOcmAddonsList struct {
+ metav1.TypeMeta `json:",inline"`
+ metav1.ListMeta `json:"metadata,omitempty"`
+ // Items is a list of AceOcmAddons CRD objects
+ Items []AceOcmAddons `json:"items,omitempty"`
+}
diff --git a/apis/installer/v1alpha1/register.go b/apis/installer/v1alpha1/register.go
index 0e1e1a70e..5ea848fae 100644
--- a/apis/installer/v1alpha1/register.go
+++ b/apis/installer/v1alpha1/register.go
@@ -60,6 +60,8 @@ func addKnownTypes(scheme *runtime.Scheme) error {
&AceList{},
&AceInstaller{},
&AceInstallerList{},
+ &AceOcmAddons{},
+ &AceOcmAddonsList{},
&Billing{},
&BillingList{},
&BillingUi{},
diff --git a/apis/installer/v1alpha1/types_test.go b/apis/installer/v1alpha1/types_test.go
index c1c873a1d..6903d452b 100644
--- a/apis/installer/v1alpha1/types_test.go
+++ b/apis/installer/v1alpha1/types_test.go
@@ -29,6 +29,7 @@ func TestDefaultValues(t *testing.T) {
checker := sc.New(os.DirFS("../../.."),
sc.TestCase{Obj: v1alpha1.AccountsUiSpec{}},
sc.TestCase{Obj: v1alpha1.AceInstallerSpec{}},
+ sc.TestCase{Obj: v1alpha1.AceOcmAddonsSpec{}},
sc.TestCase{Obj: v1alpha1.AceSpec{}},
sc.TestCase{Obj: v1alpha1.BillingSpec{}},
sc.TestCase{Obj: v1alpha1.BillingUiSpec{}},
diff --git a/apis/installer/v1alpha1/zz_generated.deepcopy.go b/apis/installer/v1alpha1/zz_generated.deepcopy.go
index ff24b664a..426117f08 100644
--- a/apis/installer/v1alpha1/zz_generated.deepcopy.go
+++ b/apis/installer/v1alpha1/zz_generated.deepcopy.go
@@ -618,6 +618,80 @@ func (in *AceNatsDns) DeepCopy() *AceNatsDns {
return out
}
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *AceOcmAddons) DeepCopyInto(out *AceOcmAddons) {
+ *out = *in
+ out.TypeMeta = in.TypeMeta
+ in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+ in.Spec.DeepCopyInto(&out.Spec)
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AceOcmAddons.
+func (in *AceOcmAddons) DeepCopy() *AceOcmAddons {
+ if in == nil {
+ return nil
+ }
+ out := new(AceOcmAddons)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *AceOcmAddons) DeepCopyObject() runtime.Object {
+ if c := in.DeepCopy(); c != nil {
+ return c
+ }
+ return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *AceOcmAddonsList) DeepCopyInto(out *AceOcmAddonsList) {
+ *out = *in
+ out.TypeMeta = in.TypeMeta
+ in.ListMeta.DeepCopyInto(&out.ListMeta)
+ if in.Items != nil {
+ in, out := &in.Items, &out.Items
+ *out = make([]AceOcmAddons, len(*in))
+ for i := range *in {
+ (*in)[i].DeepCopyInto(&(*out)[i])
+ }
+ }
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AceOcmAddonsList.
+func (in *AceOcmAddonsList) DeepCopy() *AceOcmAddonsList {
+ if in == nil {
+ return nil
+ }
+ out := new(AceOcmAddonsList)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *AceOcmAddonsList) DeepCopyObject() runtime.Object {
+ if c := in.DeepCopy(); c != nil {
+ return c
+ }
+ return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *AceOcmAddonsSpec) DeepCopyInto(out *AceOcmAddonsSpec) {
+ *out = *in
+ in.BootstrapPresets.DeepCopyInto(&out.BootstrapPresets)
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AceOcmAddonsSpec.
+func (in *AceOcmAddonsSpec) DeepCopy() *AceOcmAddonsSpec {
+ if in == nil {
+ return nil
+ }
+ out := new(AceOcmAddonsSpec)
+ in.DeepCopyInto(out)
+ return out
+}
+
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *AceOptions) DeepCopyInto(out *AceOptions) {
*out = *in
diff --git a/charts/ace-ocm-addons/.helmignore b/charts/ace-ocm-addons/.helmignore
new file mode 100644
index 000000000..0e8a0eb36
--- /dev/null
+++ b/charts/ace-ocm-addons/.helmignore
@@ -0,0 +1,23 @@
+# Patterns to ignore when building packages.
+# This supports shell glob matching, relative path matching, and
+# negation (prefixed with !). Only one pattern per line.
+.DS_Store
+# Common VCS dirs
+.git/
+.gitignore
+.bzr/
+.bzrignore
+.hg/
+.hgignore
+.svn/
+# Common backup files
+*.swp
+*.bak
+*.tmp
+*.orig
+*~
+# Various IDEs
+.project
+.idea/
+*.tmproj
+.vscode/
diff --git a/charts/ace-ocm-addons/Chart.yaml b/charts/ace-ocm-addons/Chart.yaml
new file mode 100644
index 000000000..6f878a58e
--- /dev/null
+++ b/charts/ace-ocm-addons/Chart.yaml
@@ -0,0 +1,13 @@
+apiVersion: v2
+name: ace-ocm-addons
+description: A Helm chart for ACE OCM Addons
+type: application
+version: v2023.10.18
+appVersion: v2023.10.18
+home: https://github.com/bytebuilders
+icon: https://cdn.appscode.com/images/products/kubeops/icons/android-icon-192x192.png
+sources:
+- https://github.com/bytebuilders/installer
+maintainers:
+- name: appscode
+ email: support@appscode.com
diff --git a/charts/ace-ocm-addons/README.md b/charts/ace-ocm-addons/README.md
new file mode 100644
index 000000000..d695218e5
--- /dev/null
+++ b/charts/ace-ocm-addons/README.md
@@ -0,0 +1,80 @@
+# ACE OCM Addons
+
+[ACE OCM Addons](https://github.com/bytebuilders/installer) - ACE OCM Addons
+
+## TL;DR;
+
+```bash
+$ helm repo add appscode https://charts.appscode.com/stable
+$ helm repo update
+$ helm search repo appscode/ace-ocm-addons --version=v2023.10.18
+$ helm upgrade -i ace-ocm-addons appscode/ace-ocm-addons -n open-cluster-management --create-namespace --version=v2023.10.18
+```
+
+## Introduction
+
+This chart deploys charts for ACE OCM Addons on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
+
+## Prerequisites
+
+- Kubernetes 1.21+
+
+## Installing the Chart
+
+To install/upgrade the chart with the release name `ace-ocm-addons`:
+
+```bash
+$ helm upgrade -i ace-ocm-addons appscode/ace-ocm-addons -n open-cluster-management --create-namespace --version=v2023.10.18
+```
+
+The command deploys charts for ACE OCM Addons on the Kubernetes cluster in the default configuration. The [configuration](#configuration) section lists the parameters that can be configured during installation.
+
+> **Tip**: List all releases using `helm list`
+
+## Uninstalling the Chart
+
+To uninstall the `ace-ocm-addons`:
+
+```bash
+$ helm uninstall ace-ocm-addons -n open-cluster-management
+```
+
+The command removes all the Kubernetes components associated with the chart and deletes the release.
+
+## Configuration
+
+The following table lists the configurable parameters of the `ace-ocm-addons` chart and their default values.
+
+| Parameter | Description | Default |
+|-------------------------------------------|-------------------------|--------------------------------------------|
+| nameOverride | | ""
|
+| fullnameOverride | | ""
|
+| offlineInstaller | | false
|
+| image.proxies.appscode | r.appscode.com | r.appscode.com
|
+| image.proxies.dockerHub | company/bin:tag | ""
|
+| image.proxies.dockerLibrary | alpine, nginx etc. | ""
|
+| image.proxies.ghcr | ghcr.io/company/bin:tag | ghcr.io
|
+| image.proxies.quay | quay.io/company/bin:tag | quay.io
|
+| image.proxies.kubernetes | registry.k8s.io/bin:tag | registry.k8s.io
|
+| registry.credentials | | {}
|
+| helm.repositories.appscode-charts-oci.url | | oci://ghcr.io/appscode-charts
|
+| helm.releases.kube-ui-server.enabled | | true
|
+| helm.releases.kube-ui-server.version | | "v2023.10.1"
|
+| helm.releases.license-proxyserver.enabled | | true
|
+| helm.releases.license-proxyserver.version | | "v2023.10.18"
|
+| helm.releases.opscenter-features.enabled | | true
|
+| helm.releases.opscenter-features.version | | "v2023.10.18"
|
+
+
+Specify each parameter using the `--set key=value[,key=value]` argument to `helm upgrade -i`. For example:
+
+```bash
+$ helm upgrade -i ace-ocm-addons appscode/ace-ocm-addons -n open-cluster-management --create-namespace --version=v2023.10.18 --set image.proxies.appscode=r.appscode.com
+```
+
+Alternatively, a YAML file that specifies the values for the parameters can be provided while
+installing the chart. For example:
+
+```bash
+$ helm upgrade -i ace-ocm-addons appscode/ace-ocm-addons -n open-cluster-management --create-namespace --version=v2023.10.18 --values values.yaml
+```
diff --git a/charts/ace-ocm-addons/doc.yaml b/charts/ace-ocm-addons/doc.yaml
new file mode 100644
index 000000000..5df1a28c5
--- /dev/null
+++ b/charts/ace-ocm-addons/doc.yaml
@@ -0,0 +1,18 @@
+project:
+ name: ACE OCM Addons
+ shortName: ACE OCM Addons
+ url: https://github.com/bytebuilders/installer
+ description: ACE OCM Addons
+ app: charts for ACE OCM Addons
+repository:
+ url: https://charts.appscode.com/stable
+ name: appscode
+chart:
+ name: ace-ocm-addons
+ values: -- generate from values file --
+ valuesExample: -- generate from values file --
+prerequisites:
+- Kubernetes 1.21+
+release:
+ name: ace-ocm-addons
+ namespace: open-cluster-management
diff --git a/charts/ace-ocm-addons/templates/NOTES.txt b/charts/ace-ocm-addons/templates/NOTES.txt
new file mode 100644
index 000000000..75c2afad2
--- /dev/null
+++ b/charts/ace-ocm-addons/templates/NOTES.txt
@@ -0,0 +1,3 @@
+To verify that ACE OCM addons are setup correctly, run:
+
+kubectl get placement,manifestworkreplicaset -n open-cluster-management-addon
diff --git a/charts/ace-ocm-addons/templates/_helpers.tpl b/charts/ace-ocm-addons/templates/_helpers.tpl
new file mode 100644
index 000000000..b1ace4087
--- /dev/null
+++ b/charts/ace-ocm-addons/templates/_helpers.tpl
@@ -0,0 +1,116 @@
+{{/*
+Expand the name of the chart.
+*/}}
+{{- define "ace-ocm-addons.name" -}}
+{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
+{{- end }}
+
+{{/*
+Create a default fully qualified app name.
+We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
+If release name contains chart name it will be used as a full name.
+*/}}
+{{- define "ace-ocm-addons.fullname" -}}
+{{- if .Values.fullnameOverride }}
+{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
+{{- else }}
+{{- $name := default .Chart.Name .Values.nameOverride }}
+{{- if contains $name .Release.Name }}
+{{- .Release.Name | trunc 63 | trimSuffix "-" }}
+{{- else }}
+{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
+{{- end }}
+{{- end }}
+{{- end }}
+
+{{/*
+Create chart name and version as used by the chart label.
+*/}}
+{{- define "ace-ocm-addons.chart" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
+{{- end }}
+
+{{/*
+Common labels
+*/}}
+{{- define "ace-ocm-addons.labels" -}}
+helm.sh/chart: {{ include "ace-ocm-addons.chart" . }}
+{{ include "ace-ocm-addons.selectorLabels" . }}
+{{- if .Chart.AppVersion }}
+app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
+{{- end }}
+app.kubernetes.io/managed-by: {{ .Release.Service }}
+{{- end }}
+
+{{/*
+Selector labels
+*/}}
+{{- define "ace-ocm-addons.selectorLabels" -}}
+app.kubernetes.io/name: {{ include "ace-ocm-addons.name" . }}
+app.kubernetes.io/instance: {{ .Release.Name }}
+{{- end }}
+
+{{/*
+Create the name of the service account to use
+*/}}
+{{- define "ace-ocm-addons.serviceAccountName" -}}
+{{- if .Values.serviceAccount.create }}
+{{- default (include "ace-ocm-addons.fullname" .) .Values.serviceAccount.name }}
+{{- else }}
+{{- default "default" .Values.serviceAccount.name }}
+{{- end }}
+{{- end }}
+
+{{/*
+Registry Proxy Templates
+*/}}
+{{- define "registry.dockerHub" -}}
+{{ .Values.image.proxies.dockerHub }}
+{{- end }}
+
+{{- define "registry.dockerLibrary" -}}
+{{ default .Values.image.proxies.dockerHub .Values.image.proxies.dockerLibrary }}
+{{- end }}
+
+{{- define "registry.ghcr" -}}
+{{ .Values.image.proxies.ghcr }}
+{{- end }}
+
+{{- define "registry.quay" -}}
+{{ .Values.image.proxies.quay }}
+{{- end }}
+
+{{- define "registry.kubernetes" -}}
+{{ .Values.image.proxies.kubernetes }}
+{{- end }}
+
+{{- define "registry.appscode" -}}
+{{ .Values.image.proxies.appscode }}
+{{- end }}
+
+{{/*
+Image Templates
+*/}}
+{{- define "image.dockerHub" -}}
+{{ list .Values.image.proxies.dockerHub ._repo | compact | join "/" }}
+{{- end }}
+
+{{- define "image.dockerLibrary" -}}
+{{ list (default .Values.image.proxies.dockerHub .Values.image.proxies.dockerLibrary) ._repo | compact | join "/" }}
+{{- end }}
+
+{{- define "image.ghcr" -}}
+{{ list .Values.image.proxies.ghcr ._repo | compact | join "/" }}
+{{- end }}
+
+{{- define "image.quay" -}}
+{{ list .Values.image.proxies.quay ._repo | compact | join "/" }}
+{{- end }}
+
+{{- define "image.kubernetes" -}}
+{{ list .Values.image.proxies.kubernetes ._repo | compact | join "/" }}
+{{- end }}
+
+{{- define "image.appscode" -}}
+{{ list .Values.image.proxies.appscode ._repo | compact | join "/" }}
+{{- end }}
diff --git a/charts/ace-ocm-addons/templates/clustersetbinding.yaml b/charts/ace-ocm-addons/templates/clustersetbinding.yaml
new file mode 100644
index 000000000..195f5b328
--- /dev/null
+++ b/charts/ace-ocm-addons/templates/clustersetbinding.yaml
@@ -0,0 +1,7 @@
+apiVersion: cluster.open-cluster-management.io/v1beta2
+kind: ManagedClusterSetBinding
+metadata:
+ name: global
+ namespace: open-cluster-management-addon
+spec:
+ clusterSet: global
diff --git a/charts/ace-ocm-addons/templates/manifestrelicaset.yaml b/charts/ace-ocm-addons/templates/manifestrelicaset.yaml
new file mode 100644
index 000000000..59763f393
--- /dev/null
+++ b/charts/ace-ocm-addons/templates/manifestrelicaset.yaml
@@ -0,0 +1,220 @@
+apiVersion: work.open-cluster-management.io/v1alpha1
+kind: ManifestWorkReplicaSet
+metadata:
+ name: opscenter-core-addons
+ namespace: open-cluster-management-addon
+spec:
+ placementRefs:
+ - name: global
+ manifestWorkTemplate:
+ # deleteOption:
+ # propagationPolicy: SelectivelyOrphan
+ # selectivelyOrphans:
+ # orphaningRules:
+ # - group: ''
+ # name: ocm-ns
+ # namespace: ''
+ # resource: Namespace
+ # manifestConfigs:
+ # - feedbackRules:
+ # - jsonPaths:
+ # - name: lastScheduleTime
+ # path: .status.lastScheduleTime
+ # - name: lastSuccessfulTime
+ # path: .status.lastSuccessfulTime
+ # type: JSONPaths
+ # resourceIdentifier:
+ # group: batch
+ # name: sync-cronjob
+ # namespace: ocm-ns
+ # resource: cronjobs
+ workload:
+ manifests:
+ - kind: Namespace
+ apiVersion: v1
+ metadata:
+ name: kubeops
+
+ {{- $helmrepos := dict
+ "bootstrap" (index .Values.helm "repositories" "appscode-charts-oci")
+ }}
+ {{ range $name, $cfg := $helmrepos }}
+ - apiVersion: source.toolkit.fluxcd.io/v1beta2
+ kind: HelmRepository
+ metadata:
+ name: {{ $name }}
+ namespace: kubeops
+ labels:
+ kubernetes.io/metadata.name: {{ $name }}
+ spec:
+ {{- with $cfg.url }}
+ url: {{ . }}
+ {{- end }}
+ interval: {{ default "30m" $cfg.interval }}
+ timeout: {{ default "1m" $cfg.timeout }}
+
+ {{- if hasPrefix "oci://" $cfg.url }}
+ type: oci
+ {{- end }}
+
+ {{- with $cfg.provider }}
+ provider: {{ . }}
+ {{- end }}
+
+ {{- if $.Values.registry.credentials }}
+ secretRef:
+ name: {{ include "ace-ocm-addons.fullname" $ }}-helmcred
+ {{- end }}
+ {{- end }}
+
+ {{- if .Values.registry.credentials }}
+ - apiVersion: v1
+ kind: Secret
+ metadata:
+ name: {{ include "ace-ocm-addons.fullname" . }}-helmcred
+ namespace: kubeops
+ stringData: {{ .Values.registry.credentials | toJson }}
+ {{- end }}
+
+ {{- with (index .Values "helm" "releases" "opscenter-features") }}
+ {{- if .enabled }}
+
+ {{ $overrides := dict "image" $.Values.image "registry" $.Values.registry "helm" dict }}
+
+ {{ $helmrepos := dig "repositories" dict $.Values.helm | deepCopy }}
+ {{ $_ := set $overrides.helm "repositories" $helmrepos }}
+
+ {{ $vals := dig "values" dict . }}
+ {{ $vals = mergeOverwrite $vals $overrides }}
+
+ - apiVersion: helm.toolkit.fluxcd.io/v2beta1
+ kind: HelmRelease
+ metadata:
+ name: opscenter-features
+ namespace: kubeops
+ labels:
+ ace.appscode.com/feature: opscenter-features
+ spec:
+ interval: 5m
+ timeout: 30m
+ releaseName: opscenter-features
+ targetNamespace: kubeops
+ storageNamespace: kubeops
+ install:
+ createNamespace: true
+ # crds: CreateReplace
+ remediation:
+ retries: -1
+ upgrade:
+ crds: CreateReplace
+ remediation:
+ retries: -1
+ chart:
+ spec:
+ chart: opscenter-features
+ version: {{ .version | quote }}
+ sourceRef:
+ kind: HelmRepository
+ name: bootstrap
+ namespace: kubeops
+ {{- with $vals }}
+ {{- dict "values" . | toYaml | nindent 12 }}
+ {{- end }}
+ {{- end }}
+ {{- end }}
+
+ {{- with (index .Values "helm" "releases" "license-proxyserver") }}
+ {{- if .enabled }}
+
+ {{ $overrides := dict "registryFQDN" (include "registry.ghcr" $) }}
+
+ {{ $vals := dig "values" dict . }}
+ {{ $vals = mergeOverwrite $vals $overrides }}
+
+ - apiVersion: helm.toolkit.fluxcd.io/v2beta1
+ kind: HelmRelease
+ metadata:
+ name: license-proxyserver
+ namespace: kubeops
+ labels:
+ ace.appscode.com/feature: license-proxyserver
+ spec:
+ interval: 5m
+ timeout: 30m
+ releaseName: license-proxyserver
+ targetNamespace: kubeops
+ storageNamespace: kubeops
+ install:
+ createNamespace: true
+ # crds: CreateReplace
+ remediation:
+ retries: -1
+ upgrade:
+ crds: CreateReplace
+ remediation:
+ retries: -1
+ dependsOn:
+ - name: opscenter-features
+ namespace: kubeops
+ chart:
+ spec:
+ chart: license-proxyserver
+ version: {{ .version | quote }}
+ interval: 60m
+ sourceRef:
+ kind: HelmRepository
+ name: appscode-charts-oci
+ namespace: kubeops
+ {{- with $vals }}
+ {{- dict "values" . | toYaml | nindent 12 }}
+ {{- end }}
+ {{- end }}
+ {{- end }}
+
+ {{- with (index .Values "helm" "releases" "kube-ui-server") }}
+ {{- if .enabled }}
+
+ {{ $overrides := dict "registryFQDN" (include "registry.ghcr" $) }}
+
+ {{ $vals := dig "values" dict . }}
+ {{ $vals = mergeOverwrite $vals $overrides }}
+
+ - apiVersion: helm.toolkit.fluxcd.io/v2beta1
+ kind: HelmRelease
+ metadata:
+ name: kube-ui-server
+ namespace: kubeops
+ labels:
+ ace.appscode.com/feature: kube-ui-server
+ spec:
+ interval: 5m
+ timeout: 30m
+ releaseName: kube-ui-server
+ targetNamespace: kubeops
+ storageNamespace: kubeops
+ install:
+ createNamespace: true
+ # crds: CreateReplace
+ remediation:
+ retries: -1
+ upgrade:
+ crds: CreateReplace
+ remediation:
+ retries: -1
+ dependsOn:
+ - name: opscenter-features
+ namespace: kubeops
+ chart:
+ spec:
+ chart: kube-ui-server
+ version: {{ .version | quote }}
+ interval: 60m
+ sourceRef:
+ kind: HelmRepository
+ name: appscode-charts-oci
+ namespace: kubeops
+ {{- with $vals }}
+ {{- dict "values" . | toYaml | nindent 12 }}
+ {{- end }}
+ {{- end }}
+ {{- end }}
diff --git a/charts/ace-ocm-addons/templates/namespace.yaml b/charts/ace-ocm-addons/templates/namespace.yaml
new file mode 100644
index 000000000..27f6607cb
--- /dev/null
+++ b/charts/ace-ocm-addons/templates/namespace.yaml
@@ -0,0 +1,4 @@
+apiVersion: v1
+kind: Namespace
+metadata:
+ name: open-cluster-management-addon
diff --git a/charts/ace-ocm-addons/templates/placement.yaml b/charts/ace-ocm-addons/templates/placement.yaml
new file mode 100644
index 000000000..22d208b9e
--- /dev/null
+++ b/charts/ace-ocm-addons/templates/placement.yaml
@@ -0,0 +1,8 @@
+apiVersion: cluster.open-cluster-management.io/v1beta1
+kind: Placement
+metadata:
+ name: global
+ namespace: open-cluster-management-addon
+spec:
+ clusterSets:
+ - global
diff --git a/charts/ace-ocm-addons/values.openapiv3_schema.yaml b/charts/ace-ocm-addons/values.openapiv3_schema.yaml
new file mode 100644
index 000000000..13ea047af
--- /dev/null
+++ b/charts/ace-ocm-addons/values.openapiv3_schema.yaml
@@ -0,0 +1,89 @@
+properties:
+ fullnameOverride:
+ type: string
+ helm:
+ properties:
+ releases:
+ additionalProperties:
+ properties:
+ enabled:
+ type: boolean
+ values:
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ version:
+ type: string
+ required:
+ - enabled
+ - version
+ type: object
+ type: object
+ repositories:
+ additionalProperties:
+ properties:
+ interval:
+ pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m|h))+$
+ type: string
+ provider:
+ default: generic
+ enum:
+ - generic
+ - aws
+ - azure
+ - gcp
+ type: string
+ secretName:
+ type: string
+ timeout:
+ type: string
+ type:
+ enum:
+ - default
+ - oci
+ type: string
+ url:
+ type: string
+ required:
+ - url
+ type: object
+ type: object
+ required:
+ - releases
+ - repositories
+ type: object
+ image:
+ properties:
+ proxies:
+ properties:
+ appscode:
+ type: string
+ dockerHub:
+ type: string
+ dockerLibrary:
+ type: string
+ ghcr:
+ type: string
+ kubernetes:
+ type: string
+ quay:
+ type: string
+ type: object
+ type: object
+ nameOverride:
+ type: string
+ offlineInstaller:
+ type: boolean
+ registry:
+ properties:
+ credentials:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+required:
+- fullnameOverride
+- helm
+- image
+- nameOverride
+- registry
+type: object
diff --git a/charts/ace-ocm-addons/values.yaml b/charts/ace-ocm-addons/values.yaml
new file mode 100644
index 000000000..dfe3aaa49
--- /dev/null
+++ b/charts/ace-ocm-addons/values.yaml
@@ -0,0 +1,45 @@
+# Default values for ace-ocm-addons.
+# This is a YAML-formatted file.
+# Declare variables to be passed into your templates.
+
+nameOverride: ""
+fullnameOverride: ""
+
+offlineInstaller: false
+
+image:
+ proxies:
+ # r.appscode.com
+ appscode: r.appscode.com
+ # company/bin:tag
+ dockerHub: ""
+ # alpine, nginx etc.
+ dockerLibrary: ""
+ # ghcr.io/company/bin:tag
+ ghcr: ghcr.io
+ # quay.io/company/bin:tag
+ quay: quay.io
+ # registry.k8s.io/bin:tag
+ kubernetes: registry.k8s.io
+
+registry:
+ credentials: {}
+ # username: "abc"
+ # password: "xyz"
+
+helm:
+ repositories:
+ # oci://harbor.appscode.ninja/ac/appscode-charts
+ appscode-charts-oci:
+ url: oci://ghcr.io/appscode-charts
+
+ releases:
+ kube-ui-server:
+ enabled: true
+ version: "v2023.10.1"
+ license-proxyserver:
+ enabled: true
+ version: "v2023.10.18"
+ opscenter-features:
+ enabled: true
+ version: "v2023.10.18"