Documentation ¶
Index ¶
- Constants
- Variables
- func CanPassPackageFilter(filter *appv1.PackageFilter, obj objAnno) bool
- func CheckAndInstallCRD(crdconfig *rest.Config, pathname string) error
- func CloneGitRepo(repoURL string, branch plumbing.ReferenceName, user, password, destDir string) (commitID string, err error)
- func ConvertLabels(labelSelector *metav1.LabelSelector) (labels.Selector, error)
- func CreateHelmCRDeployable(repoURL string, packageName string, chartVersions repo.ChartVersions, ...) (*dplv1.Deployable, error)
- func CreateOrUpdateHelmChart(packageName string, releaseCRName string, chartVersions repo.ChartVersions, ...) (helmRelease *releasev1.HelmRelease, err error)
- func DeleteDeployableCRD(runtimeClient client.Client, crdx *clientsetx.Clientset)
- func DeleteHelmReleaseCRD(runtimeClient client.Client, crdx *clientsetx.Clientset)
- func DeleteSubscriptionCRD(runtimeClient client.Client, crdx *clientsetx.Clientset)
- func DplArrayToDplPointers(dplList []dplv1alpha1.Deployable) []*dplv1alpha1.Deployable
- func EnterFnString() string
- func ExitFuString(s string)
- func FilterCharts(sub *appv1.Subscription, indexFile *repo.IndexFile) error
- func GenerateHelmIndexFile(sub *appv1.Subscription, repoRoot string, chartDirs map[string]string) (*repo.IndexFile, error)
- func GenerateVersionSet(dplPointers []*dplv1alpha1.Deployable, vsub string) map[string]VersionRep
- func GetChannelSecret(client client.Client, chn *chnv1.Channel) (string, string, error)
- func GetClusterFromResourceObject(obj metav1.Object) *types.NamespacedName
- func GetFnName() string
- func GetHostDeployableFromObject(obj metav1.Object) *types.NamespacedName
- func GetHostSubscriptionFromObject(obj metav1.Object) *types.NamespacedName
- func GetKubeIgnore(resourcePath string) *gitignore.GitIgnore
- func GetLocalGitFolder(chn *chnv1.Channel, sub *appv1.Subscription) string
- func GetPackageAlias(sub *appv1.Subscription, packageName string) string
- func GetPauseLabel(instance *appv1.Subscription) bool
- func GetReleaseName(base string) (string, error)
- func GetSourceFromObject(obj metav1.Object) string
- func GetSubscriptionBranch(sub *appv1.Subscription) plumbing.ReferenceName
- func IsDeployableInVersionSet(vMap map[string]VersionRep, dpl *dplv1alpha1.Deployable) bool
- func IsInWindow(tw *appv1alpha1.TimeWindow, t time.Time) bool
- func IsLocalDeployable(instance *dplv1.Deployable) bool
- func IsResourceOwnedByCluster(obj metav1.Object, cluster types.NamespacedName) bool
- func KeywordsChecker(labelSelector *metav1.LabelSelector, ks []string) bool
- func LabelChecker(ls *metav1.LabelSelector, dplls map[string]string) bool
- func LabelsChecker(labelSelector *metav1.LabelSelector, ls map[string]string) bool
- func MatchLabelForSubAndDpl(ls *metav1.LabelSelector, dplls map[string]string) bool
- func NamespacedNameFormat(str string) types.NamespacedName
- func NextStartPoint(tw *appv1alpha1.TimeWindow, t time.Time) time.Duration
- func NextStatusReconcile(tw *appv1alpha1.TimeWindow, t time.Time) time.Duration
- func Override(helmRelease *releasev1.HelmRelease, sub *appv1.Subscription) error
- func OverrideKustomize(pov appv1.PackageOverride, kustomizeDir string) error
- func OverrideResourceBySubscription(template *unstructured.Unstructured, pkgName string, ...) (*unstructured.Unstructured, error)
- func OverrideTemplate(template *unstructured.Unstructured, overrides []appv1alpha1.ClusterOverride) (*unstructured.Unstructured, error)
- func ParseKubeResoures(file []byte) [][]byte
- func PrepareOverrides(cluster types.NamespacedName, instance *appv1alpha1.Deployable) ([]appv1alpha1.ClusterOverride, error)
- func SemverCheck(vSubStr, vDplStr string) bool
- func SetInClusterPackageStatus(substatus *appv1.SubscriptionStatus, pkgname string, pkgerr error, ...) error
- func SortResources(repoRoot, resourcePath string) (map[string]string, map[string]string, []string, []string, []string, error)
- func UnifyTimeZone(tw *appv1alpha1.TimeWindow, t time.Time) time.Time
- func UpdateDeployableStatus(statusClient client.Client, templateerr error, tplunit metav1.Object, ...) error
- func UpdateSubscriptionStatus(statusClient client.Client, templateerr error, tplunit metav1.Object, ...) error
- func ValidatePackagesInSubscriptionStatus(statusClient client.StatusClient, sub *appv1.Subscription, ...) error
- type EventRecorder
- type VersionRep
Constants ¶
const ( // UserID is key of GitHub user ID in secret UserID = "user" // AccessToken is key of GitHub user password or personal token in secret AccessToken = "accessToken" )
const (
//MIDNIGHT define the midnight format
MIDNIGHT = "12:00AM"
)
const NoiseLogLel = 5
NoiseLogLel - information inside "important functions"
const QuiteLogLel = 4
QuiteLogLel - "important" information
const VeryNoisy = 10
VeryNoisy = show call stack, routine and everything
Variables ¶
var SubscriptionPredicateFunctions = predicate.Funcs{ UpdateFunc: func(e event.UpdateEvent) bool { subOld := e.ObjectOld.(*appv1.Subscription) subNew := e.ObjectNew.(*appv1.Subscription) if len(subNew.GetFinalizers()) > 0 { return true } if !reflect.DeepEqual(subOld.GetLabels(), subNew.GetLabels()) { return true } if !reflect.DeepEqual(subOld.GetAnnotations(), subNew.GetAnnotations()) { return true } if !reflect.DeepEqual(subOld.Spec, subNew.Spec) { return true } if subNew.Status.Phase == "" || subNew.Status.Phase != subOld.Status.Phase { klog.V(5).Info("We care phase..", subNew.Status.Phase, " vs ", subOld.Status.Phase) return true } klog.V(5).Info("Something we don't care changed") return false }, }
SubscriptionPredicateFunctions filters status update
Functions ¶
func CanPassPackageFilter ¶
func CanPassPackageFilter(filter *appv1.PackageFilter, obj objAnno) bool
FilterPackageOut process the package filter logic
func CheckAndInstallCRD ¶
CheckAndInstallCRD checks if deployable belongs to this cluster managed cluster annotation matches or no managed cluster annotation (local)
func CloneGitRepo ¶
func CloneGitRepo(repoURL string, branch plumbing.ReferenceName, user, password, destDir string) (commitID string, err error)
CloneGitRepo clones a GitHub repository
func ConvertLabels ¶
func ConvertLabels(labelSelector *metav1.LabelSelector) (labels.Selector, error)
ConvertLabels coverts label selector to lables.Selector
func CreateHelmCRDeployable ¶
func CreateHelmCRDeployable( repoURL string, packageName string, chartVersions repo.ChartVersions, client client.Client, channel *chnv1.Channel, sub *appv1.Subscription) (*dplv1.Deployable, error)
func CreateOrUpdateHelmChart ¶
func CreateOrUpdateHelmChart( packageName string, releaseCRName string, chartVersions repo.ChartVersions, client client.Client, channel *chnv1.Channel, sub *appv1.Subscription) (helmRelease *releasev1.HelmRelease, err error)
func DeleteDeployableCRD ¶
func DeleteDeployableCRD(runtimeClient client.Client, crdx *clientsetx.Clientset)
DeleteDeployableCRD deletes the Deployable CRD
func DeleteHelmReleaseCRD ¶
func DeleteHelmReleaseCRD(runtimeClient client.Client, crdx *clientsetx.Clientset)
DeleteHelmReleaseCRD deletes the HelmRelease CRD
func DeleteSubscriptionCRD ¶
func DeleteSubscriptionCRD(runtimeClient client.Client, crdx *clientsetx.Clientset)
DeleteSubscriptionCRD deletes the Subscription CRD
func DplArrayToDplPointers ¶
func DplArrayToDplPointers(dplList []dplv1alpha1.Deployable) []*dplv1alpha1.Deployable
DplArrayToDplPointers covert the array to pointer array
func FilterCharts ¶
func FilterCharts(sub *appv1.Subscription, indexFile *repo.IndexFile) error
FilterCharts filters the indexFile by name, tillerVersion, version, digest
func GenerateHelmIndexFile ¶
func GenerateHelmIndexFile(sub *appv1.Subscription, repoRoot string, chartDirs map[string]string) (*repo.IndexFile, error)
GenerateHelmIndexFile generate helm repo index file
func GenerateVersionSet ¶
func GenerateVersionSet(dplPointers []*dplv1alpha1.Deployable, vsub string) map[string]VersionRep
GenerateVersionSet produce a map, key: dpl.GetGenerateName(), value: dpl.NamespacedName.String() the value is the largest version which meet the subscription version requirement.
func GetChannelSecret ¶
GetChannelSecret returns username and password for channel
func GetClusterFromResourceObject ¶
func GetClusterFromResourceObject(obj metav1.Object) *types.NamespacedName
GetClusterFromResourceObject return nil if no host is found
func GetHostDeployableFromObject ¶
func GetHostDeployableFromObject(obj metav1.Object) *types.NamespacedName
GetHostDeployableFromObject return nil if no host is found
func GetHostSubscriptionFromObject ¶
func GetHostSubscriptionFromObject(obj metav1.Object) *types.NamespacedName
GetHostSubscriptionFromObject extract the namespacedname of subscription hosting the object resource
func GetKubeIgnore ¶
GetKubeIgnore get .kubernetesignore list
func GetLocalGitFolder ¶
func GetLocalGitFolder(chn *chnv1.Channel, sub *appv1.Subscription) string
GetLocalGitFolder returns the local Git repo clone directory
func GetPackageAlias ¶
func GetPackageAlias(sub *appv1.Subscription, packageName string) string
func GetPauseLabel ¶
func GetPauseLabel(instance *appv1.Subscription) bool
GetPauseLabel check if the subscription-pause label exists
func GetReleaseName ¶
GetReleaseName alters the given name in a deterministic way if the length exceed the maximum character
func GetSourceFromObject ¶
GetSourceFromObject extract the namespacedname of subscription hosting the object resource
func GetSubscriptionBranch ¶
func GetSubscriptionBranch(sub *appv1.Subscription) plumbing.ReferenceName
GetSubscriptionBranch returns GitHub repo branch for a given subscription
func IsDeployableInVersionSet ¶
func IsDeployableInVersionSet(vMap map[string]VersionRep, dpl *dplv1alpha1.Deployable) bool
IsDeployableInVersionSet - check if deployable is in version
func IsInWindow ¶
func IsInWindow(tw *appv1alpha1.TimeWindow, t time.Time) bool
IsInWindow returns true if the give time is within a timewindow
func IsLocalDeployable ¶
func IsLocalDeployable(instance *dplv1.Deployable) bool
IsLocalDeployable checks if the deployable meant to be deployed
func IsResourceOwnedByCluster ¶
func IsResourceOwnedByCluster(obj metav1.Object, cluster types.NamespacedName) bool
IsResourceOwnedByCluster checks if the deployable belongs to this controller by AnnotationManagedCluster only the managed cluster annotation matches
func KeywordsChecker ¶
func KeywordsChecker(labelSelector *metav1.LabelSelector, ks []string) bool
KeywordsChecker Checks if the helm chart has at least 1 keyword from the packageFilter.Keywords array
func LabelChecker ¶
func LabelChecker(ls *metav1.LabelSelector, dplls map[string]string) bool
func LabelsChecker ¶
func LabelsChecker(labelSelector *metav1.LabelSelector, ls map[string]string) bool
LabelsChecker checks labels against a labelSelector
func MatchLabelForSubAndDpl ¶
func MatchLabelForSubAndDpl(ls *metav1.LabelSelector, dplls map[string]string) bool
func NamespacedNameFormat ¶
func NamespacedNameFormat(str string) types.NamespacedName
func NextStartPoint ¶
func NextStartPoint(tw *appv1alpha1.TimeWindow, t time.Time) time.Duration
NextStartPoint will map the container's time to the location time specified by user then it will handle the window type as will the hour ange and daysofweek for hour range and daysofweek, it will handle as the following if hour range is empty and weekday is empty then retrun 0 if hour range is empty and weekday is not then return nextday durtion(here the window type will be considered again)
func NextStatusReconcile ¶
func NextStatusReconcile(tw *appv1alpha1.TimeWindow, t time.Time) time.Duration
NextStatusReconcile generate a duartion for the reconcile to requeue after
func Override ¶
func Override(helmRelease *releasev1.HelmRelease, sub *appv1.Subscription) error
func OverrideKustomize ¶
func OverrideKustomize(pov appv1.PackageOverride, kustomizeDir string) error
func OverrideResourceBySubscription ¶
func OverrideResourceBySubscription(template *unstructured.Unstructured, pkgName string, instance *appv1.Subscription) (*unstructured.Unstructured, error)
OverrideResourceBySubscription alter the given template with overrides
func OverrideTemplate ¶
func OverrideTemplate(template *unstructured.Unstructured, overrides []appv1alpha1.ClusterOverride) (*unstructured.Unstructured, error)
OverrideTemplate alter the given template with overrides
func ParseKubeResoures ¶
ParseKubeResoures parses a YAML content and returns kube resources in byte array from the file
func PrepareOverrides ¶
func PrepareOverrides(cluster types.NamespacedName, instance *appv1alpha1.Deployable) ([]appv1alpha1.ClusterOverride, error)
PrepareOverrides returns the overridemap for given deployable instance
func SemverCheck ¶
SemverCheck filter Deployable based on the version annotations from Subscription and Deployable. Assume the input version is a string which meets the Semver format(https://semver.org/) SemverCheck: if the subscription version is geater than deploayalbe, then return true, otherwise return false edge case: if the version of subscription or deployable is empty then return true
func SetInClusterPackageStatus ¶
func SetInClusterPackageStatus(substatus *appv1.SubscriptionStatus, pkgname string, pkgerr error, status interface{}) error
SetInClusterPackageStatus creates status strcuture and fill status
func SortResources ¶
func SortResources(repoRoot, resourcePath string) (map[string]string, map[string]string, []string, []string, []string, error)
SortResources sorts kube resources into different arrays for processing them later.
func UnifyTimeZone ¶
func UnifyTimeZone(tw *appv1alpha1.TimeWindow, t time.Time) time.Time
UnifyTimeZone convert a given time to the timewindow time zone, if the time window doesn't sepcifiy a time zone, then the running machine's time zone will be used
func UpdateDeployableStatus ¶
func UpdateDeployableStatus(statusClient client.Client, templateerr error, tplunit metav1.Object, status interface{}) error
UpdateDeployableStatus based on error message, and propagate resource status - nil: success - others: failed, with error message in reason
func UpdateSubscriptionStatus ¶
func UpdateSubscriptionStatus(statusClient client.Client, templateerr error, tplunit metav1.Object, status interface{}) error
UpdateSubscriptionStatus based on error message, and propagate resource status - nil: success - others: failed, with error message in reason
func ValidatePackagesInSubscriptionStatus ¶
func ValidatePackagesInSubscriptionStatus(statusClient client.StatusClient, sub *appv1.Subscription, pkgMap map[string]bool) error
ValidatePackagesInSubscriptionStatus validate the status struture for packages
Types ¶
type EventRecorder ¶
type EventRecorder struct {
record.EventRecorder
}
EventRecorder - record kubernetes event
func NewEventRecorder ¶
func NewEventRecorder(cfg *rest.Config, scheme *apiruntime.Scheme) (*EventRecorder, error)
NewEventRecorder - create new event recorder from rect config
func (*EventRecorder) RecordEvent ¶
func (rec *EventRecorder) RecordEvent(obj apiruntime.Object, reason, msg string, err error)
RecordEvent - record kuberentes event
type VersionRep ¶
VersionRep represent version