Documentation ¶
Index ¶
- Constants
- func Add(mgr manager.Manager) error
- func GenerateResourceListByConfig(cfg *rest.Config, s *releasev1.HelmRelease) (kube.ResourceList, error)
- func GetClustersByPlacement(instance *subv1.Subscription, kubeclient client.Client, logger logr.Logger) ([]types.NamespacedName, error)
- func GetDeployableTemplateAsUnstructrure(dpl *dplv1.Deployable) (*unstructured.Unstructured, error)
- func GetLatestRemoteGitCommitID(repo, branch, user, pwd string) (string, error)
- func GetReferenceString(ref *corev1.ObjectReference) string
- func GetSubscriptionRefChannel(clt client.Client, s *appv1.Subscription) (*chnv1.Channel, error)
- func ObjectString(obj metav1.Object) string
- func PrintHelper(o metav1.Object) types.NamespacedName
- func UpdateHelmTopoAnnotation(hubClt client.Client, hubCfg *rest.Config, sub *subv1.Subscription, ...) (bool, error)
- type AnsibleHooks
- func (a *AnsibleHooks) AppendPreHookStatusToSubscription(subIns *subv1.Subscription) subv1.SubscriptionStatus
- func (a *AnsibleHooks) AppendStatusToSubscription(subIns *subv1.Subscription) subv1.SubscriptionStatus
- func (a *AnsibleHooks) ApplyPostHooks(subKey types.NamespacedName) error
- func (a *AnsibleHooks) ApplyPreHooks(subKey types.NamespacedName) error
- func (a *AnsibleHooks) DeregisterSubscription(subKey types.NamespacedName) error
- func (a *AnsibleHooks) GetLastAppliedInstance(subKey types.NamespacedName) AppliedInstance
- func (a *AnsibleHooks) HasHooks(hookType string, subKey types.NamespacedName) bool
- func (a *AnsibleHooks) IsPostHooksCompleted(subKey types.NamespacedName) (bool, error)
- func (a *AnsibleHooks) IsPreHooksCompleted(subKey types.NamespacedName) (bool, error)
- func (a *AnsibleHooks) RegisterSubscription(subIns *subv1.Subscription, placementDecisionUpdated bool, ...) error
- func (a *AnsibleHooks) ResetGitOps(g GitOps)
- func (a *AnsibleHooks) SetSuffixFunc(f SuffixFunc)
- type AppliedInstance
- type EqualSub
- type FormatFunc
- type GetCommitFunc
- type GitOps
- type HookOps
- type HookProcessor
- type Hooks
- type HubGitOps
- func (h *HubGitOps) DeregisterBranch(subKey types.NamespacedName)
- func (h *HubGitOps) DownloadAnsibleHookResource(subIns *subv1.Subscription) error
- func (h *HubGitOps) GetHooks(subIns *subv1.Subscription, hookPath string) ([]ansiblejob.AnsibleJob, error)
- func (h *HubGitOps) GetLatestCommitID(subIns *subv1.Subscription) (string, error)
- func (h *HubGitOps) GetRepoRecords() map[string]*RepoRegistery
- func (h *HubGitOps) GetRepoRootDirctory(subIns *subv1.Subscription) string
- func (h *HubGitOps) GetSubRecords() map[types.NamespacedName]string
- func (h *HubGitOps) GitWatch(ctx context.Context)
- func (h *HubGitOps) HasHookFolders(subIns *subv1.Subscription) bool
- func (h *HubGitOps) RegisterBranch(subIns *subv1.Subscription) error
- func (h *HubGitOps) ResolveLocalGitFolder(chn *chnv1.Channel, subIns *subv1.Subscription) string
- func (h *HubGitOps) Start(ctx context.Context) error
- type HubGitOption
- type Job
- type JobInstances
- type Option
- type ReconcileSubscription
- func (r *ReconcileSubscription) AddClusterAdminAnnotation(sub *appv1.Subscription) bool
- func (r *ReconcileSubscription) CreateSubscriptionAdminRBAC() error
- func (r *ReconcileSubscription) GetChannelGeneration(s *appv1alpha1.Subscription) (string, error)
- func (r *ReconcileSubscription) GetChannelNamespaceType(s *appv1alpha1.Subscription) (string, string, string)
- func (r *ReconcileSubscription) IsSubscriptionCompleted(subKey types.NamespacedName) (bool, error)
- func (r *ReconcileSubscription) Reconcile(ctx context.Context, request reconcile.Request) (result reconcile.Result, returnErr error)
- func (r *ReconcileSubscription) UpdateDeployablesAnnotation(sub *appv1alpha1.Subscription, parentType string) bool
- func (r *ReconcileSubscription) UpdateGitDeployablesAnnotation(sub *appv1.Subscription) (bool, error)
- type RepoRegistery
- type SuffixFunc
Constants ¶
const ( PrehookDirSuffix = "/prehook/" PosthookDirSuffix = "/posthook/" JobCompleted = "successful" AnsibleJobKind = "AnsibleJob" AnsibleJobVersion = "tower.ansible.com/v1alpha1" Status = "status" AnsibleJobResult = "ansiblejobresult" SubLabel = "ownersub" PreHookType = "pre" PostHookType = "post" DebugLog = 1 InfoLog = 0 )
const (
INFOLevel = 1
)
Variables ¶
This section is empty.
Functions ¶
func Add ¶
Add creates a new Subscription Controller and adds it to the Manager. The Manager will set fields on the Controller and Start it when the Manager is Started.
func GenerateResourceListByConfig ¶
func GenerateResourceListByConfig(cfg *rest.Config, s *releasev1.HelmRelease) (kube.ResourceList, error)
GenerateResourceListByConfig this func and it's child funcs(downloadChart, generateResourceList) is a clone of from the helmrelease. Having this clone give us the flexiblity to modify the function parameters,which helped to pass test case. generates the resource list for given HelmRelease
func GetClustersByPlacement ¶
func GetClustersByPlacement(instance *subv1.Subscription, kubeclient client.Client, logger logr.Logger) ([]types.NamespacedName, error)
Top priority: placementRef, ignore others Next priority: clusterNames, ignore selector Bottomline: Use label selector
func GetDeployableTemplateAsUnstructrure ¶
func GetDeployableTemplateAsUnstructrure(dpl *dplv1.Deployable) (*unstructured.Unstructured, error)
func GetReferenceString ¶
func GetReferenceString(ref *corev1.ObjectReference) string
func ObjectString ¶
func PrintHelper ¶
func PrintHelper(o metav1.Object) types.NamespacedName
Types ¶
type AnsibleHooks ¶
type AnsibleHooks struct {
// contains filtered or unexported fields
}
func NewAnsibleHooks ¶
func (*AnsibleHooks) AppendPreHookStatusToSubscription ¶
func (a *AnsibleHooks) AppendPreHookStatusToSubscription(subIns *subv1.Subscription) subv1.SubscriptionStatus
func (*AnsibleHooks) AppendStatusToSubscription ¶
func (a *AnsibleHooks) AppendStatusToSubscription(subIns *subv1.Subscription) subv1.SubscriptionStatus
func (*AnsibleHooks) ApplyPostHooks ¶
func (a *AnsibleHooks) ApplyPostHooks(subKey types.NamespacedName) error
func (*AnsibleHooks) ApplyPreHooks ¶
func (a *AnsibleHooks) ApplyPreHooks(subKey types.NamespacedName) error
func (*AnsibleHooks) DeregisterSubscription ¶
func (a *AnsibleHooks) DeregisterSubscription(subKey types.NamespacedName) error
func (*AnsibleHooks) GetLastAppliedInstance ¶
func (a *AnsibleHooks) GetLastAppliedInstance(subKey types.NamespacedName) AppliedInstance
func (*AnsibleHooks) HasHooks ¶
func (a *AnsibleHooks) HasHooks(hookType string, subKey types.NamespacedName) bool
func (*AnsibleHooks) IsPostHooksCompleted ¶
func (a *AnsibleHooks) IsPostHooksCompleted(subKey types.NamespacedName) (bool, error)
func (*AnsibleHooks) IsPreHooksCompleted ¶
func (a *AnsibleHooks) IsPreHooksCompleted(subKey types.NamespacedName) (bool, error)
func (*AnsibleHooks) RegisterSubscription ¶
func (a *AnsibleHooks) RegisterSubscription(subIns *subv1.Subscription, placementDecisionUpdated bool, placementRuleRv string) error
func (*AnsibleHooks) ResetGitOps ¶
func (a *AnsibleHooks) ResetGitOps(g GitOps)
func (*AnsibleHooks) SetSuffixFunc ¶
func (a *AnsibleHooks) SetSuffixFunc(f SuffixFunc)
type AppliedInstance ¶
type AppliedInstance struct {
// contains filtered or unexported fields
}
type EqualSub ¶
type EqualSub func(*subv1.Subscription, *subv1.Subscription) bool
type FormatFunc ¶
type FormatFunc func(ansiblejob.AnsibleJob) string
type GetCommitFunc ¶
type GitOps ¶
type GitOps interface { //DownloadAnsibleHookResource downloads the ansible job from the git and marshal //the resource to DownloadAnsibleHookResource(*subv1.Subscription) error HasHookFolders(*subv1.Subscription) bool // GetHooks returns the ansiblejob from a given folder, if the folder is // inaccessible, then os.Error is returned GetHooks(*subv1.Subscription, string) ([]ansiblejob.AnsibleJob, error) // RegisterBranch to git watcher and do a initial download for other // components to consume RegisterBranch(*subv1.Subscription) error // DeregisterBranch DeregisterBranch(types.NamespacedName) //helper for test GetRepoRecords() map[string]*RepoRegistery GetSubRecords() map[types.NamespacedName]string //GetLatestCommitID will output the latest commit id from local git record GetLatestCommitID(*subv1.Subscription) (string, error) //ResolveLocalGitFolder is used to open a local folder for downloading the //repo branch ResolveLocalGitFolder(*chnv1.Channel, *subv1.Subscription) string GetRepoRootDirctory(*subv1.Subscription) string //Runnable Start(context.Context) error }
type HookOps ¶
type HookOps func(*AnsibleHooks)
type HookProcessor ¶
type HookProcessor interface { // register subsription to the HookProcessor RegisterSubscription(*subv1.Subscription, bool, string) error DeregisterSubscription(types.NamespacedName) error //SetSuffixFunc let user reset the suffixFunc rule of generating the suffix //of hook instance name SetSuffixFunc(SuffixFunc) ResetGitOps(GitOps) //ApplyPreHook returns a type.NamespacedName of the preHook ApplyPreHooks(types.NamespacedName) error IsPreHooksCompleted(types.NamespacedName) (bool, error) ApplyPostHooks(types.NamespacedName) error IsPostHooksCompleted(types.NamespacedName) (bool, error) HasHooks(string, types.NamespacedName) bool //WriteStatusToSubscription gets the status at the entry of the reconcile, //also the procssed subscription(which should carry all the update status on //the given reconciel), then WriteStatusToSubscription will append the hook //status info and make a update to the cluster AppendStatusToSubscription(*appv1.Subscription) appv1.SubscriptionStatus AppendPreHookStatusToSubscription(*appv1.Subscription) appv1.SubscriptionStatus GetLastAppliedInstance(types.NamespacedName) AppliedInstance }
HookProcessor tracks the pre and post hook information of subscriptions.
type Hooks ¶
type Hooks struct {
// contains filtered or unexported fields
}
func (*Hooks) ConstructStatus ¶
func (h *Hooks) ConstructStatus() subv1.AnsibleJobsStatus
type HubGitOps ¶
type HubGitOps struct {
// contains filtered or unexported fields
}
func NewHookGit ¶
func NewHookGit(clt client.Client, ops ...HubGitOption) *HubGitOps
func (*HubGitOps) DeregisterBranch ¶
func (h *HubGitOps) DeregisterBranch(subKey types.NamespacedName)
func (*HubGitOps) DownloadAnsibleHookResource ¶
func (h *HubGitOps) DownloadAnsibleHookResource(subIns *subv1.Subscription) error
func (*HubGitOps) GetHooks ¶
func (h *HubGitOps) GetHooks(subIns *subv1.Subscription, hookPath string) ([]ansiblejob.AnsibleJob, error)
GetHooks will provided the ansibleJobs at the given hookPath(if given a posthook path, then posthook ansiblejob is returned)
func (*HubGitOps) GetLatestCommitID ¶
func (h *HubGitOps) GetLatestCommitID(subIns *subv1.Subscription) (string, error)
func (*HubGitOps) GetRepoRecords ¶
func (h *HubGitOps) GetRepoRecords() map[string]*RepoRegistery
helper for test
func (*HubGitOps) GetRepoRootDirctory ¶
func (h *HubGitOps) GetRepoRootDirctory(subIns *subv1.Subscription) string
func (*HubGitOps) GetSubRecords ¶
func (h *HubGitOps) GetSubRecords() map[types.NamespacedName]string
helper for test
func (*HubGitOps) HasHookFolders ¶
func (h *HubGitOps) HasHookFolders(subIns *subv1.Subscription) bool
func (*HubGitOps) RegisterBranch ¶
func (h *HubGitOps) RegisterBranch(subIns *subv1.Subscription) error
func (*HubGitOps) ResolveLocalGitFolder ¶
type HubGitOption ¶
type HubGitOption func(*HubGitOps)
type Job ¶
type Job struct { Original ansiblejob.AnsibleJob Instance []ansiblejob.AnsibleJob // track the create instance InstanceSet map[types.NamespacedName]struct{} // contains filtered or unexported fields }
type JobInstances ¶
type JobInstances map[types.NamespacedName]*Job
JobInstances can be applied and can be quired to see if the most applied instance is succeeded or not
type Option ¶
type Option func(*ReconcileSubscription)
Option provide easy way to test the reconciler
type ReconcileSubscription ¶
ReconcileSubscription reconciles a Subscription object
func (*ReconcileSubscription) AddClusterAdminAnnotation ¶
func (r *ReconcileSubscription) AddClusterAdminAnnotation(sub *appv1.Subscription) bool
AddClusterAdminAnnotation adds cluster-admin annotation if conditions are met
func (*ReconcileSubscription) CreateSubscriptionAdminRBAC ¶
func (r *ReconcileSubscription) CreateSubscriptionAdminRBAC() error
CreateSubscriptionAdminRBAC checks existence of subscription-admin clusterrole and clusterrolebinding and creates them if not found
func (*ReconcileSubscription) GetChannelGeneration ¶
func (r *ReconcileSubscription) GetChannelGeneration(s *appv1alpha1.Subscription) (string, error)
GetChannelGeneration get the channel generation
func (*ReconcileSubscription) GetChannelNamespaceType ¶
func (r *ReconcileSubscription) GetChannelNamespaceType(s *appv1alpha1.Subscription) (string, string, string)
GetChannelNamespaceType get the channel namespace and channel type by the given subscription
func (*ReconcileSubscription) IsSubscriptionCompleted ¶
func (r *ReconcileSubscription) IsSubscriptionCompleted(subKey types.NamespacedName) (bool, error)
IsSubscriptionCompleted will check: a, if the subscription itself is processed b, for each of the subscription created on managed cluster, it will check if it is 1, propagated and 2, subscribed
func (*ReconcileSubscription) Reconcile ¶
func (r *ReconcileSubscription) Reconcile(ctx context.Context, request reconcile.Request) (result reconcile.Result, returnErr error)
Reconcile reads that state of the cluster for a Subscription object and makes changes based on the state read and what is in the Subscription.Spec
func (*ReconcileSubscription) UpdateDeployablesAnnotation ¶
func (r *ReconcileSubscription) UpdateDeployablesAnnotation(sub *appv1alpha1.Subscription, parentType string) bool
UpdateDeployablesAnnotation set all deployables subscribed by the subscription to the apps.open-cluster-management.io/deployables annotation
func (*ReconcileSubscription) UpdateGitDeployablesAnnotation ¶
func (r *ReconcileSubscription) UpdateGitDeployablesAnnotation(sub *appv1.Subscription) (bool, error)
UpdateGitDeployablesAnnotation clones the git repo and regenerate deployables and update annotation if needed
type RepoRegistery ¶
type RepoRegistery struct {
// contains filtered or unexported fields
}
type SuffixFunc ¶
type SuffixFunc func(GitOps, *subv1.Subscription) string