[v3.2] Add grafana dashboard importing API (#11)

* Add API to import grafana templates to kubesphere dashboard
* Merge and fix the latest codes from kubesphere #2501

Signed-off-by: zhu733756 <talonzhu@yunify.com>
This commit is contained in:
zhu733756
2021-08-16 11:41:29 +08:00
committed by zhu733756
parent 9df6df5544
commit 242ceb54f6
217 changed files with 119028 additions and 96 deletions

View File

@@ -0,0 +1,29 @@
/*
Copyright 2020 KubeSphere Authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
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 crdinstall
import (
k8sruntime "k8s.io/apimachinery/pkg/runtime"
urlruntime "k8s.io/apimachinery/pkg/util/runtime"
"kubesphere.io/api/application/v1alpha1"
)
func Install(scheme *k8sruntime.Scheme) {
urlruntime.Must(v1alpha1.AddToScheme(scheme))
urlruntime.Must(scheme.SetVersionPriority(v1alpha1.SchemeGroupVersion))
}

View File

@@ -0,0 +1,63 @@
/*
Copyright 2020 The KubeSphere Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
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
const (
MsgLen = 512
HelmRepoSyncStateLen = 10
// app version state
StateDraft = "draft"
StateSubmitted = "submitted"
StatePassed = "passed"
StateRejected = "rejected"
StateSuspended = "suspended"
StateActive = "active"
// repo state
RepoStateSuccessful = "successful"
RepoStateFailed = "failed"
RepoStateSyncing = "syncing"
// helm release state
HelmStatusActive = "active"
HelmStatusCreating = "creating"
HelmStatusDeleting = "deleting"
HelmStatusUpgrading = "upgrading"
HelmStatusRollbacking = "rollbacking"
HelmStatusFailed = "failed"
HelmStatusCreated = "created"
HelmStatusUpgraded = "upgraded"
AttachmentTypeScreenshot = "screenshot"
AttachmentTypeIcon = "icon"
HelmApplicationAppStoreSuffix = "-store"
HelmApplicationIdPrefix = "app-"
HelmRepoIdPrefix = "repo-"
HelmApplicationVersionIdPrefix = "appv-"
HelmCategoryIdPrefix = "ctg-"
HelmAttachmentPrefix = "att-"
HelmReleasePrefix = "rls-"
UncategorizedName = "uncategorized"
UncategorizedId = "ctg-uncategorized"
AppStoreRepoId = "repo-helm"
ApplicationInstance = "app.kubesphere.io/instance"
OriginWorkspaceLabelKey = "kubesphere.io/workspace-origin"
)

20
vendor/kubesphere.io/api/application/v1alpha1/doc.go generated vendored Normal file
View File

@@ -0,0 +1,20 @@
/*
Copyright 2020 The KubeSphere Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
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.
*/
// +k8s:deepcopy-gen=package,register
// +groupName=application.kubesphere.io
package v1alpha1

View File

@@ -0,0 +1,136 @@
/*
Copyright 2020 The KubeSphere Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
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 (
"strings"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"kubesphere.io/api/constants"
)
const (
ResourceKindHelmApplication = "HelmApplication"
ResourceSingularHelmApplication = "helmapplication"
ResourcePluralHelmApplication = "helmapplications"
)
// HelmApplicationSpec defines the desired state of HelmApplication
type HelmApplicationSpec struct {
// the name of the helm application
Name string `json:"name"`
// description from chart's description or frontend
Description string `json:"description,omitempty"`
// attachments id
Attachments []string `json:"attachments,omitempty"`
// info from frontend
Abstraction string `json:"abstraction,omitempty"`
AppHome string `json:"appHome,omitempty"`
// The attachment id of the icon
Icon string `json:"icon,omitempty"`
}
// HelmApplicationStatus defines the observed state of HelmApplication
type HelmApplicationStatus struct {
// If this application belong to appStore, latestVersion is the the latest version of the active application version.
// otherwise latestVersion is the latest version of all application version
LatestVersion string `json:"latestVersion,omitempty"`
// the state of the helm application: draft, submitted, passed, rejected, suspended, active
State string `json:"state,omitempty"`
UpdateTime *metav1.Time `json:"updateTime"`
StatusTime *metav1.Time `json:"statusTime"`
}
// +kubebuilder:object:root=true
// +kubebuilder:resource:scope=Cluster,shortName=happ
// +kubebuilder:subresource:status
// +kubebuilder:printcolumn:name="application name",type=string,JSONPath=`.spec.name`
// +kubebuilder:printcolumn:name="workspace",type="string",JSONPath=".metadata.labels.kubesphere\\.io/workspace"
// +kubebuilder:printcolumn:name="State",type="string",JSONPath=".status.state"
// +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp"
// +genclient
// +genclient:nonNamespaced
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// HelmApplication is the Schema for the helmapplications API
type HelmApplication struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec HelmApplicationSpec `json:"spec,omitempty"`
Status HelmApplicationStatus `json:"status,omitempty"`
}
// +kubebuilder:object:root=true
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// HelmApplicationList contains a list of HelmApplication
type HelmApplicationList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []HelmApplication `json:"items"`
}
func init() {
SchemeBuilder.Register(&HelmApplication{}, &HelmApplicationList{})
}
func (in *HelmApplication) GetTrueName() string {
return in.Spec.Name
}
func (in *HelmApplication) GetHelmRepoId() string {
return getValue(in.Labels, constants.ChartRepoIdLabelKey)
}
func (in *HelmApplication) GetHelmApplicationId() string {
return strings.TrimSuffix(in.Name, HelmApplicationAppStoreSuffix)
}
func (in *HelmApplication) GetHelmCategoryId() string {
return getValue(in.Labels, constants.CategoryIdLabelKey)
}
func (in *HelmApplication) GetWorkspace() string {
ws := getValue(in.Labels, constants.WorkspaceLabelKey)
if ws == "" {
return getValue(in.Labels, OriginWorkspaceLabelKey)
}
return ws
}
func getValue(m map[string]string, key string) string {
if m == nil {
return ""
}
return m[key]
}
func (in *HelmApplication) GetCategoryId() string {
return getValue(in.Labels, constants.CategoryIdLabelKey)
}
func (in *HelmApplication) State() string {
if in.Status.State == "" {
return StateDraft
}
return in.Status.State
}
func (in *HelmApplication) GetCreator() string {
return getValue(in.Annotations, constants.CreatorAnnotationKey)
}

View File

@@ -0,0 +1,233 @@
/*
Copyright 2020 The KubeSphere Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
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 (
"fmt"
"strings"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"kubesphere.io/api/constants"
)
const (
ResourceKindHelmApplicationVersion = "HelmApplicationVersion"
ResourceSingularHelmApplicationVersion = "helmapplicationversion"
ResourcePluralHelmApplicationVersion = "helmapplicationversions"
)
// HelmApplicationVersionSpec defines the desired state of HelmApplicationVersion
type HelmApplicationVersionSpec struct {
// metadata from chart
*Metadata `json:",inline"`
// chart url
URLs []string `json:"urls,omitempty"`
// raw data of chart, it will !!!NOT!!! be save to etcd
Data []byte `json:"data,omitempty"`
// dataKey in the storage
DataKey string `json:"dataKey,omitempty"`
// chart create time
Created *metav1.Time `json:"created,omitempty"`
// chart digest
Digest string `json:"digest,omitempty"`
}
// HelmApplicationVersionStatus defines the observed state of HelmApplicationVersion
type HelmApplicationVersionStatus struct {
State string `json:"state,omitempty"`
Audit []Audit `json:"audit,omitempty"`
}
// +kubebuilder:object:root=true
// +kubebuilder:resource:scope=Cluster,shortName=happver
// +kubebuilder:subresource:status
// +kubebuilder:printcolumn:name="application name",type=string,JSONPath=`.spec.name`
// +kubebuilder:printcolumn:name="State",type="string",JSONPath=".status.state"
// +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp"
// +genclient
// +genclient:nonNamespaced
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// HelmApplicationVersion is the Schema for the helmapplicationversions API
type HelmApplicationVersion struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec HelmApplicationVersionSpec `json:"spec,omitempty"`
Status HelmApplicationVersionStatus `json:"status,omitempty"`
}
// Maintainer describes a Chart maintainer.
type Maintainer struct {
// Name is a user name or organization name
Name string `json:"name,omitempty"`
// Email is an optional email address to contact the named maintainer
Email string `json:"email,omitempty"`
// URL is an optional URL to an address for the named maintainer
URL string `json:"url,omitempty"`
}
// Metadata for a Chart file. This models the structure of a Chart.yaml file.
type Metadata struct {
// The name of the chart
Name string `json:"name,omitempty"`
// The URL to a relevant project page, git repo, or contact person
Home string `json:"home,omitempty"`
// Source is the URL to the source code of this chart
Sources []string `json:"sources,omitempty"`
// A SemVer 2 conformant version string of the chart
Version string `json:"version,omitempty"`
// A one-sentence description of the chart
Description string `json:"description,omitempty"`
// A list of string keywords
Keywords []string `json:"keywords,omitempty"`
// A list of name and URL/email address combinations for the maintainer(s)
Maintainers []*Maintainer `json:"maintainers,omitempty"`
// The URL to an icon file.
Icon string `json:"icon,omitempty"`
// The API Version of this chart.
APIVersion string `json:"apiVersion,omitempty"`
// The condition to check to enable chart
Condition string `json:"condition,omitempty"`
// The tags to check to enable chart
Tags string `json:"tags,omitempty"`
// The version of the application enclosed inside of this chart.
AppVersion string `json:"appVersion,omitempty"`
// Whether or not this chart is deprecated
Deprecated bool `json:"deprecated,omitempty"`
// Annotations are additional mappings uninterpreted by Helm,
// made available for inspection by other applications.
Annotations map[string]string `json:"annotations,omitempty"`
// KubeVersion is a SemVer constraint specifying the version of Kubernetes required.
KubeVersion string `json:"kubeVersion,omitempty"`
// Dependencies are a list of dependencies for a chart.
Dependencies []*Dependency `json:"dependencies,omitempty"`
// Specifies the chart type: application or library
Type string `json:"type,omitempty"`
}
type Audit struct {
// audit message
Message string `json:"message,omitempty"`
// audit state: submitted, passed, draft, active, rejected, suspended
State string `json:"state,omitempty"`
// audit time
Time metav1.Time `json:"time"`
// audit operator
Operator string `json:"operator,omitempty"`
OperatorType string `json:"operatorType,omitempty"`
}
// Dependency describes a chart upon which another chart depends.
// Dependencies can be used to express developer intent, or to capture the state
// of a chart.
type Dependency struct {
// Name is the name of the dependency.
// This must mach the name in the dependency's Chart.yaml.
Name string `json:"name"`
// Version is the version (range) of this chart.
// A lock file will always produce a single version, while a dependency
// may contain a semantic version range.
Version string `json:"version,omitempty"`
// The URL to the repository.
// Appending `index.yaml` to this string should result in a URL that can be
// used to fetch the repository index.
Repository string `json:"repository"`
// A yaml path that resolves to a boolean, used for enabling/disabling charts (e.g. subchart1.enabled )
Condition string `json:"condition,omitempty"`
// Tags can be used to group charts for enabling/disabling together
Tags []string `json:"tags,omitempty"`
// Enabled bool determines if chart should be loaded
Enabled bool `json:"enabled,omitempty"`
// ImportValues holds the mapping of source values to parent key to be imported. Each item can be a
// string or pair of child/parent sublist items.
// ImportValues []interface{} `json:"import_values,omitempty"`
// Alias usable alias to be used for the chart
Alias string `json:"alias,omitempty"`
}
// +kubebuilder:object:root=true
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// HelmApplicationVersionList contains a list of HelmApplicationVersion
type HelmApplicationVersionList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []HelmApplicationVersion `json:"items"`
}
func init() {
SchemeBuilder.Register(&HelmApplicationVersion{}, &HelmApplicationVersionList{})
}
func (in *HelmApplicationVersion) GetCreator() string {
return getValue(in.Annotations, constants.CreatorAnnotationKey)
}
func (in *HelmApplicationVersion) GetHelmApplicationVersionId() string {
return in.Name
}
func (in *HelmApplicationVersion) GetWorkspace() string {
return getValue(in.Labels, constants.WorkspaceLabelKey)
}
func (in *HelmApplicationVersion) GetVersionName() string {
appV := in.GetChartAppVersion()
if appV != "" {
return fmt.Sprintf("%s [%s]", in.GetChartVersion(), appV)
} else {
return in.GetChartVersion()
}
}
func (in *HelmApplicationVersion) GetHelmApplicationId() string {
return getValue(in.Labels, constants.ChartApplicationIdLabelKey)
}
func (in *HelmApplicationVersion) GetSemver() string {
return strings.Split(in.GetVersionName(), " ")[0]
}
func (in *HelmApplicationVersion) GetTrueName() string {
return in.Spec.Name
}
func (in *HelmApplicationVersion) GetChartVersion() string {
return in.Spec.Version
}
func (in *HelmApplicationVersion) GetChartAppVersion() string {
return in.Spec.AppVersion
}
func (in *HelmApplicationVersion) GetHelmRepoId() string {
return getValue(in.Labels, constants.ChartRepoIdLabelKey)
}
func (in *HelmApplicationVersion) State() string {
if in.Status.State == "" {
return StateDraft
}
return in.Status.State
}

View File

@@ -0,0 +1,81 @@
/*
Copyright 2020 The KubeSphere Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
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"
)
const (
ResourceKindHelmCategory = "HelmCategory"
ResourceSingularHelmCategory = "helmcategory"
ResourcePluralHelmCategory = "helmcategories"
)
// HelmCategorySpec defines the desired state of HelmRepo
type HelmCategorySpec struct {
// name of the category
Name string `json:"name"`
// info from frontend
Description string `json:"description,omitempty"`
Locale string `json:"locale,omitempty"`
}
// +kubebuilder:object:root=true
// +kubebuilder:resource:scope=Cluster,shortName=hctg
// +kubebuilder:subresource:status
// +kubebuilder:printcolumn:name="name",type=string,JSONPath=`.spec.name`
// +kubebuilder:printcolumn:name="total",type=string,JSONPath=`.status.total`
// +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp"
// +genclient
// +genclient:nonNamespaced
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// HelmCategory is the Schema for the helmcategories API
type HelmCategory struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec HelmCategorySpec `json:"spec,omitempty"`
Status HelmCategoryStatus `json:"status,omitempty"`
}
type HelmCategoryStatus struct {
// total helmapplications belong to this category
Total int `json:"total"`
}
// +kubebuilder:object:root=true
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// HelmCategoryList contains a list of HelmCategory
type HelmCategoryList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []HelmCategory `json:"items"`
}
func (in *HelmCategory) GetTrueName() string {
if in == nil {
return ""
}
return in.Spec.Name
}
func init() {
SchemeBuilder.Register(&HelmCategory{}, &HelmCategoryList{})
}

View File

@@ -0,0 +1,154 @@
/*
Copyright 2020 The KubeSphere Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
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 (
"fmt"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"kubesphere.io/api/constants"
)
const (
ResourceKindHelmRelease = "HelmRelease"
ResourceSingularHelmRelease = "helmrelease"
ResourcePluralHelmRelease = "helmreleases"
)
// HelmReleaseSpec defines the desired state of HelmRelease
type HelmReleaseSpec struct {
// Name of the release
Name string `json:"name"`
// Message got from frontend
Description string `json:"description,omitempty"`
// helm release values.yaml
Values []byte `json:"values,omitempty"`
// The name of the chart which will be installed.
ChartName string `json:"chartName"`
// Specify the exact chart version to install. If this is not specified, the latest version is installed
ChartVersion string `json:"chartVersion"`
// appVersion from Chart.yaml
ChartAppVersion string `json:"chartAppVer,omitempty"`
// id of the repo
RepoId string `json:"repoId,omitempty"`
// id of the helmapplication
ApplicationId string `json:"appId,omitempty"`
// application version id
ApplicationVersionId string `json:"appVerId,omitempty"`
// expected release version, when this version is not equal status.version, the release need upgrade
// this filed should be modified when any filed of the spec modified.
Version int `json:"version"`
}
type HelmReleaseDeployStatus struct {
// A human readable message indicating details about why the release is in this state.
Message string `json:"message,omitempty"`
// current state of the release
State string `json:"state"`
// deploy time, upgrade time or check status time
Time metav1.Time `json:"deployTime"`
}
// HelmReleaseStatus defines the observed state of HelmRelease
type HelmReleaseStatus struct {
// current state
State string `json:"state"`
// A human readable message indicating details about why the release is in this state.
Message string `json:"message,omitempty"`
// current release version
Version int `json:"version,omitempty"`
// deploy status list of history, which will store at most 10 state
DeployStatus []HelmReleaseDeployStatus `json:"deployStatus,omitempty"`
// last update time
LastUpdate metav1.Time `json:"lastUpdate,omitempty"`
// last deploy time or upgrade time
LastDeployed *metav1.Time `json:"lastDeployed,omitempty"`
}
// +kubebuilder:object:root=true
// +kubebuilder:resource:scope=Cluster,shortName=hrls
// +kubebuilder:subresource:status
// +kubebuilder:printcolumn:name="Release Name",type=string,JSONPath=".spec.name"
// +kubebuilder:printcolumn:name="Workspace",type="string",JSONPath=".metadata.labels.kubesphere\\.io/workspace"
// +kubebuilder:printcolumn:name="Cluster",type="string",JSONPath=".metadata.labels.kubesphere\\.io/cluster"
// +kubebuilder:printcolumn:name="Namespace",type="string",JSONPath=".metadata.labels.kubesphere\\.io/namespace"
// +kubebuilder:printcolumn:name="State",type="string",JSONPath=".status.state"
// +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp"
// +genclient
// +genclient:nonNamespaced
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// HelmRelease is the Schema for the helmreleases API
type HelmRelease struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec HelmReleaseSpec `json:"spec,omitempty"`
Status HelmReleaseStatus `json:"status,omitempty"`
}
// +kubebuilder:object:root=true
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// HelmReleaseList contains a list of HelmRelease
type HelmReleaseList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []HelmRelease `json:"items"`
}
func init() {
SchemeBuilder.Register(&HelmRelease{}, &HelmReleaseList{})
}
func (in *HelmRelease) GetCreator() string {
return getValue(in.Annotations, constants.CreatorAnnotationKey)
}
func (in *HelmRelease) GetTrueName() string {
return in.Spec.Name
}
func (in *HelmRelease) GetChartVersionName() string {
appV := in.GetChartAppVersion()
if appV != "" {
return fmt.Sprintf("%s [%s]", in.GetChartVersion(), appV)
} else {
return in.GetChartVersion()
}
}
func (in *HelmRelease) GetChartAppVersion() string {
return in.Spec.ChartAppVersion
}
func (in *HelmRelease) GetChartVersion() string {
return in.Spec.ChartVersion
}
func (in *HelmRelease) GetRlsCluster() string {
return getValue(in.Labels, constants.ClusterNameLabelKey)
}
func (in *HelmRelease) GetWorkspace() string {
return getValue(in.Labels, constants.WorkspaceLabelKey)
}
func (in *HelmRelease) GetRlsNamespace() string {
return getValue(in.Labels, constants.NamespaceLabelKey)
}

View File

@@ -0,0 +1,141 @@
/*
Copyright 2020 The KubeSphere Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
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"
"kubesphere.io/api/constants"
)
const (
ResourceKindHelmRepo = "HelmRepo"
ResourceSingularHelmRepo = "helmrepo"
ResourcePluralHelmRepo = "helmrepos"
)
type HelmRepoCredential struct {
// chart repository username
Username string `json:"username,omitempty"`
// chart repository password
Password string `json:"password,omitempty"`
// identify HTTPS client using this SSL certificate file
CertFile string `json:"certFile,omitempty"`
// identify HTTPS client using this SSL key file
KeyFile string `json:"keyFile,omitempty"`
// verify certificates of HTTPS-enabled servers using this CA bundle
CAFile string `json:"caFile,omitempty"`
// skip tls certificate checks for the repository, default is ture
InsecureSkipTLSVerify *bool `json:"insecureSkipTLSVerify,omitempty"`
S3Config `json:",inline"`
}
type S3Config struct {
AccessKeyID string `json:"accessKeyID,omitempty"`
SecretAccessKey string `json:"secretAccessKey,omitempty"`
}
// HelmRepoSpec defines the desired state of HelmRepo
type HelmRepoSpec struct {
// name of the repo
Name string `json:"name"`
// helm repo url
Url string `json:"url"`
// helm repo credential
Credential HelmRepoCredential `json:"credential,omitempty"`
// chart repo description from frontend
Description string `json:"description,omitempty"`
// sync period in seconds, no sync when SyncPeriod=0, the minimum SyncPeriod is 180s
SyncPeriod int `json:"syncPeriod,omitempty"`
// expected repo version, when this version is not equal status.version, the repo need upgrade
// this filed should be modified when any filed of the spec modified.
Version int `json:"version,omitempty"`
}
type HelmRepoSyncState struct {
// last sync state, valid state are: "failed", "success", and ""
State string `json:"state,omitempty"`
// A human readable message indicating details about why the repo is in this state.
Message string `json:"message,omitempty"`
SyncTime *metav1.Time `json:"syncTime"`
}
// HelmRepoStatus defines the observed state of HelmRepo
type HelmRepoStatus struct {
// repo index
Data string `json:"data,omitempty"`
// status last update time
LastUpdateTime *metav1.Time `json:"lastUpdateTime,omitempty"`
// current state of the repo, successful, failed or syncing
State string `json:"state,omitempty"`
// sync state list of history, which will store at most 10 state
SyncState []HelmRepoSyncState `json:"syncState,omitempty"`
// if status.version!=spec.Version, we need sync the repo now
Version int `json:"version,omitempty"`
}
// +kubebuilder:object:root=true
// +kubebuilder:resource:scope=Cluster,path=helmrepos,shortName=hrepo
// +kubebuilder:subresource:status
// +kubebuilder:printcolumn:name="name",type=string,JSONPath=`.spec.name`
// +kubebuilder:printcolumn:name="Workspace",type="string",JSONPath=".metadata.labels.kubesphere\\.io/workspace"
// +kubebuilder:printcolumn:name="url",type=string,JSONPath=`.spec.url`
// +kubebuilder:printcolumn:name="State",type="string",JSONPath=".status.state"
// +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp"
// +genclient
// +genclient:nonNamespaced
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// HelmRepo is the Schema for the helmrepoes API
type HelmRepo struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec HelmRepoSpec `json:"spec,omitempty"`
Status HelmRepoStatus `json:"status,omitempty"`
}
// +kubebuilder:object:root=true
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// HelmRepoList contains a list of HelmRepo
type HelmRepoList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []HelmRepo `json:"items"`
}
func init() {
SchemeBuilder.Register(&HelmRepo{}, &HelmRepoList{})
}
func (in *HelmRepo) GetTrueName() string {
return in.Spec.Name
}
func (in *HelmRepo) GetHelmRepoId() string {
return in.Name
}
func (in *HelmRepo) GetWorkspace() string {
return getValue(in.Labels, constants.WorkspaceLabelKey)
}
func (in *HelmRepo) GetCreator() string {
return getValue(in.Annotations, constants.CreatorAnnotationKey)
}

View File

@@ -0,0 +1,40 @@
/*
Copyright 2020 The KubeSphere Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
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 contains API Schema definitions for the application v1alpha1 API group
// +kubebuilder:object:generate=true
// +groupName=application.kubesphere.io
package v1alpha1
import (
"k8s.io/apimachinery/pkg/runtime/schema"
"sigs.k8s.io/controller-runtime/pkg/scheme"
)
var (
// SchemeGroupVersion is group version used to register these objects
SchemeGroupVersion = schema.GroupVersion{Group: "application.kubesphere.io", Version: "v1alpha1"}
// SchemeBuilder is used to add go types to the GroupVersionKind scheme
SchemeBuilder = &scheme.Builder{GroupVersion: SchemeGroupVersion}
// AddToScheme adds the types in this group-version to the given scheme.
AddToScheme = SchemeBuilder.AddToScheme
)
func Resource(resource string) schema.GroupResource {
return SchemeGroupVersion.WithResource(resource).GroupResource()
}

View File

@@ -0,0 +1,742 @@
// +build !ignore_autogenerated
/*
Copyright 2020 The KubeSphere Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
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.
*/
// Code generated by deepcopy-gen. DO NOT EDIT.
package v1alpha1
import (
runtime "k8s.io/apimachinery/pkg/runtime"
)
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Audit) DeepCopyInto(out *Audit) {
*out = *in
in.Time.DeepCopyInto(&out.Time)
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Audit.
func (in *Audit) DeepCopy() *Audit {
if in == nil {
return nil
}
out := new(Audit)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Dependency) DeepCopyInto(out *Dependency) {
*out = *in
if in.Tags != nil {
in, out := &in.Tags, &out.Tags
*out = make([]string, len(*in))
copy(*out, *in)
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Dependency.
func (in *Dependency) DeepCopy() *Dependency {
if in == nil {
return nil
}
out := new(Dependency)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *HelmApplication) DeepCopyInto(out *HelmApplication) {
*out = *in
out.TypeMeta = in.TypeMeta
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
in.Spec.DeepCopyInto(&out.Spec)
in.Status.DeepCopyInto(&out.Status)
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmApplication.
func (in *HelmApplication) DeepCopy() *HelmApplication {
if in == nil {
return nil
}
out := new(HelmApplication)
in.DeepCopyInto(out)
return out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (in *HelmApplication) 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 *HelmApplicationList) DeepCopyInto(out *HelmApplicationList) {
*out = *in
out.TypeMeta = in.TypeMeta
in.ListMeta.DeepCopyInto(&out.ListMeta)
if in.Items != nil {
in, out := &in.Items, &out.Items
*out = make([]HelmApplication, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmApplicationList.
func (in *HelmApplicationList) DeepCopy() *HelmApplicationList {
if in == nil {
return nil
}
out := new(HelmApplicationList)
in.DeepCopyInto(out)
return out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (in *HelmApplicationList) 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 *HelmApplicationSpec) DeepCopyInto(out *HelmApplicationSpec) {
*out = *in
if in.Attachments != nil {
in, out := &in.Attachments, &out.Attachments
*out = make([]string, len(*in))
copy(*out, *in)
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmApplicationSpec.
func (in *HelmApplicationSpec) DeepCopy() *HelmApplicationSpec {
if in == nil {
return nil
}
out := new(HelmApplicationSpec)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *HelmApplicationStatus) DeepCopyInto(out *HelmApplicationStatus) {
*out = *in
if in.UpdateTime != nil {
in, out := &in.UpdateTime, &out.UpdateTime
*out = (*in).DeepCopy()
}
if in.StatusTime != nil {
in, out := &in.StatusTime, &out.StatusTime
*out = (*in).DeepCopy()
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmApplicationStatus.
func (in *HelmApplicationStatus) DeepCopy() *HelmApplicationStatus {
if in == nil {
return nil
}
out := new(HelmApplicationStatus)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *HelmApplicationVersion) DeepCopyInto(out *HelmApplicationVersion) {
*out = *in
out.TypeMeta = in.TypeMeta
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
in.Spec.DeepCopyInto(&out.Spec)
in.Status.DeepCopyInto(&out.Status)
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmApplicationVersion.
func (in *HelmApplicationVersion) DeepCopy() *HelmApplicationVersion {
if in == nil {
return nil
}
out := new(HelmApplicationVersion)
in.DeepCopyInto(out)
return out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (in *HelmApplicationVersion) 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 *HelmApplicationVersionList) DeepCopyInto(out *HelmApplicationVersionList) {
*out = *in
out.TypeMeta = in.TypeMeta
in.ListMeta.DeepCopyInto(&out.ListMeta)
if in.Items != nil {
in, out := &in.Items, &out.Items
*out = make([]HelmApplicationVersion, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmApplicationVersionList.
func (in *HelmApplicationVersionList) DeepCopy() *HelmApplicationVersionList {
if in == nil {
return nil
}
out := new(HelmApplicationVersionList)
in.DeepCopyInto(out)
return out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (in *HelmApplicationVersionList) 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 *HelmApplicationVersionSpec) DeepCopyInto(out *HelmApplicationVersionSpec) {
*out = *in
if in.Metadata != nil {
in, out := &in.Metadata, &out.Metadata
*out = new(Metadata)
(*in).DeepCopyInto(*out)
}
if in.URLs != nil {
in, out := &in.URLs, &out.URLs
*out = make([]string, len(*in))
copy(*out, *in)
}
if in.Data != nil {
in, out := &in.Data, &out.Data
*out = make([]byte, len(*in))
copy(*out, *in)
}
if in.Created != nil {
in, out := &in.Created, &out.Created
*out = (*in).DeepCopy()
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmApplicationVersionSpec.
func (in *HelmApplicationVersionSpec) DeepCopy() *HelmApplicationVersionSpec {
if in == nil {
return nil
}
out := new(HelmApplicationVersionSpec)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *HelmApplicationVersionStatus) DeepCopyInto(out *HelmApplicationVersionStatus) {
*out = *in
if in.Audit != nil {
in, out := &in.Audit, &out.Audit
*out = make([]Audit, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmApplicationVersionStatus.
func (in *HelmApplicationVersionStatus) DeepCopy() *HelmApplicationVersionStatus {
if in == nil {
return nil
}
out := new(HelmApplicationVersionStatus)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *HelmCategory) DeepCopyInto(out *HelmCategory) {
*out = *in
out.TypeMeta = in.TypeMeta
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
out.Spec = in.Spec
out.Status = in.Status
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmCategory.
func (in *HelmCategory) DeepCopy() *HelmCategory {
if in == nil {
return nil
}
out := new(HelmCategory)
in.DeepCopyInto(out)
return out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (in *HelmCategory) 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 *HelmCategoryList) DeepCopyInto(out *HelmCategoryList) {
*out = *in
out.TypeMeta = in.TypeMeta
in.ListMeta.DeepCopyInto(&out.ListMeta)
if in.Items != nil {
in, out := &in.Items, &out.Items
*out = make([]HelmCategory, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmCategoryList.
func (in *HelmCategoryList) DeepCopy() *HelmCategoryList {
if in == nil {
return nil
}
out := new(HelmCategoryList)
in.DeepCopyInto(out)
return out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (in *HelmCategoryList) 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 *HelmCategorySpec) DeepCopyInto(out *HelmCategorySpec) {
*out = *in
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmCategorySpec.
func (in *HelmCategorySpec) DeepCopy() *HelmCategorySpec {
if in == nil {
return nil
}
out := new(HelmCategorySpec)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *HelmCategoryStatus) DeepCopyInto(out *HelmCategoryStatus) {
*out = *in
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmCategoryStatus.
func (in *HelmCategoryStatus) DeepCopy() *HelmCategoryStatus {
if in == nil {
return nil
}
out := new(HelmCategoryStatus)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *HelmRelease) DeepCopyInto(out *HelmRelease) {
*out = *in
out.TypeMeta = in.TypeMeta
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
in.Spec.DeepCopyInto(&out.Spec)
in.Status.DeepCopyInto(&out.Status)
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmRelease.
func (in *HelmRelease) DeepCopy() *HelmRelease {
if in == nil {
return nil
}
out := new(HelmRelease)
in.DeepCopyInto(out)
return out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (in *HelmRelease) 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 *HelmReleaseDeployStatus) DeepCopyInto(out *HelmReleaseDeployStatus) {
*out = *in
in.Time.DeepCopyInto(&out.Time)
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmReleaseDeployStatus.
func (in *HelmReleaseDeployStatus) DeepCopy() *HelmReleaseDeployStatus {
if in == nil {
return nil
}
out := new(HelmReleaseDeployStatus)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *HelmReleaseList) DeepCopyInto(out *HelmReleaseList) {
*out = *in
out.TypeMeta = in.TypeMeta
in.ListMeta.DeepCopyInto(&out.ListMeta)
if in.Items != nil {
in, out := &in.Items, &out.Items
*out = make([]HelmRelease, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmReleaseList.
func (in *HelmReleaseList) DeepCopy() *HelmReleaseList {
if in == nil {
return nil
}
out := new(HelmReleaseList)
in.DeepCopyInto(out)
return out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (in *HelmReleaseList) 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 *HelmReleaseSpec) DeepCopyInto(out *HelmReleaseSpec) {
*out = *in
if in.Values != nil {
in, out := &in.Values, &out.Values
*out = make([]byte, len(*in))
copy(*out, *in)
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmReleaseSpec.
func (in *HelmReleaseSpec) DeepCopy() *HelmReleaseSpec {
if in == nil {
return nil
}
out := new(HelmReleaseSpec)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *HelmReleaseStatus) DeepCopyInto(out *HelmReleaseStatus) {
*out = *in
if in.DeployStatus != nil {
in, out := &in.DeployStatus, &out.DeployStatus
*out = make([]HelmReleaseDeployStatus, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
in.LastUpdate.DeepCopyInto(&out.LastUpdate)
if in.LastDeployed != nil {
in, out := &in.LastDeployed, &out.LastDeployed
*out = (*in).DeepCopy()
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmReleaseStatus.
func (in *HelmReleaseStatus) DeepCopy() *HelmReleaseStatus {
if in == nil {
return nil
}
out := new(HelmReleaseStatus)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *HelmRepo) DeepCopyInto(out *HelmRepo) {
*out = *in
out.TypeMeta = in.TypeMeta
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
in.Spec.DeepCopyInto(&out.Spec)
in.Status.DeepCopyInto(&out.Status)
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmRepo.
func (in *HelmRepo) DeepCopy() *HelmRepo {
if in == nil {
return nil
}
out := new(HelmRepo)
in.DeepCopyInto(out)
return out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (in *HelmRepo) 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 *HelmRepoCredential) DeepCopyInto(out *HelmRepoCredential) {
*out = *in
if in.InsecureSkipTLSVerify != nil {
in, out := &in.InsecureSkipTLSVerify, &out.InsecureSkipTLSVerify
*out = new(bool)
**out = **in
}
out.S3Config = in.S3Config
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmRepoCredential.
func (in *HelmRepoCredential) DeepCopy() *HelmRepoCredential {
if in == nil {
return nil
}
out := new(HelmRepoCredential)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *HelmRepoList) DeepCopyInto(out *HelmRepoList) {
*out = *in
out.TypeMeta = in.TypeMeta
in.ListMeta.DeepCopyInto(&out.ListMeta)
if in.Items != nil {
in, out := &in.Items, &out.Items
*out = make([]HelmRepo, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmRepoList.
func (in *HelmRepoList) DeepCopy() *HelmRepoList {
if in == nil {
return nil
}
out := new(HelmRepoList)
in.DeepCopyInto(out)
return out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (in *HelmRepoList) 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 *HelmRepoSpec) DeepCopyInto(out *HelmRepoSpec) {
*out = *in
in.Credential.DeepCopyInto(&out.Credential)
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmRepoSpec.
func (in *HelmRepoSpec) DeepCopy() *HelmRepoSpec {
if in == nil {
return nil
}
out := new(HelmRepoSpec)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *HelmRepoStatus) DeepCopyInto(out *HelmRepoStatus) {
*out = *in
if in.LastUpdateTime != nil {
in, out := &in.LastUpdateTime, &out.LastUpdateTime
*out = (*in).DeepCopy()
}
if in.SyncState != nil {
in, out := &in.SyncState, &out.SyncState
*out = make([]HelmRepoSyncState, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmRepoStatus.
func (in *HelmRepoStatus) DeepCopy() *HelmRepoStatus {
if in == nil {
return nil
}
out := new(HelmRepoStatus)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *HelmRepoSyncState) DeepCopyInto(out *HelmRepoSyncState) {
*out = *in
if in.SyncTime != nil {
in, out := &in.SyncTime, &out.SyncTime
*out = (*in).DeepCopy()
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmRepoSyncState.
func (in *HelmRepoSyncState) DeepCopy() *HelmRepoSyncState {
if in == nil {
return nil
}
out := new(HelmRepoSyncState)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Maintainer) DeepCopyInto(out *Maintainer) {
*out = *in
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Maintainer.
func (in *Maintainer) DeepCopy() *Maintainer {
if in == nil {
return nil
}
out := new(Maintainer)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Metadata) DeepCopyInto(out *Metadata) {
*out = *in
if in.Sources != nil {
in, out := &in.Sources, &out.Sources
*out = make([]string, len(*in))
copy(*out, *in)
}
if in.Keywords != nil {
in, out := &in.Keywords, &out.Keywords
*out = make([]string, len(*in))
copy(*out, *in)
}
if in.Maintainers != nil {
in, out := &in.Maintainers, &out.Maintainers
*out = make([]*Maintainer, len(*in))
for i := range *in {
if (*in)[i] != nil {
in, out := &(*in)[i], &(*out)[i]
*out = new(Maintainer)
**out = **in
}
}
}
if in.Annotations != nil {
in, out := &in.Annotations, &out.Annotations
*out = make(map[string]string, len(*in))
for key, val := range *in {
(*out)[key] = val
}
}
if in.Dependencies != nil {
in, out := &in.Dependencies, &out.Dependencies
*out = make([]*Dependency, len(*in))
for i := range *in {
if (*in)[i] != nil {
in, out := &(*in)[i], &(*out)[i]
*out = new(Dependency)
(*in).DeepCopyInto(*out)
}
}
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Metadata.
func (in *Metadata) DeepCopy() *Metadata {
if in == nil {
return nil
}
out := new(Metadata)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *S3Config) DeepCopyInto(out *S3Config) {
*out = *in
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new S3Config.
func (in *S3Config) DeepCopy() *S3Config {
if in == nil {
return nil
}
out := new(S3Config)
in.DeepCopyInto(out)
return out
}