utils

package
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 12, 2020 License: Apache-2.0 Imports: 46 Imported by: 0

Documentation

Index

Constants

View Source
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"
)
View Source
const (
	//MIDNIGHT define the midnight format
	MIDNIGHT = "12:00AM"
)
View Source
const NoiseLogLel = 5

NoiseLogLel - information inside "important functions"

View Source
const QuiteLogLel = 4

QuiteLogLel - "important" information

View Source
const VeryNoisy = 10

VeryNoisy = show call stack, routine and everything

Variables

View Source
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

func CheckAndInstallCRD(crdconfig *rest.Config, pathname string) error

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 EnterFnString

func EnterFnString() string

EnterFnString - called when enter a function

func ExitFuString

func ExitFuString(s string)

ExitFuString - called when exiting a function

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

func GetChannelSecret(client client.Client, chn *chnv1.Channel) (string, string, error)

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 GetFnName

func GetFnName() string

GetFnName - get name of function

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

func GetKubeIgnore(resourcePath string) *gitignore.GitIgnore

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

func GetReleaseName(base string) (string, error)

GetReleaseName alters the given name in a deterministic way if the length exceed the maximum character

func GetSourceFromObject

func GetSourceFromObject(obj metav1.Object) string

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

func ParseKubeResoures(file []byte) [][]byte

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

func SemverCheck(vSubStr, vDplStr string) bool

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

type VersionRep struct {
	DplKey string
	Vrange string
}

VersionRep represent version

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL