Skip to content

Commit f7e8cd3

Browse files
committed
Schedule tkn serve cli pod also on infra node
This will add the field in the tekton addon CRD so that nodeselector and tolerations can be passed to tekton addon cr from config cr and use those values in scheduling the tkn serve cli pod using already existing transformer Added the hash value in the installerset and if it changes, it again read the manifest and assign to the installerset This will fix tkn serve cli pod not getting scheduled on infra nodes if configured in subscription and config CR
1 parent 947f8e7 commit f7e8cd3

5 files changed

Lines changed: 94 additions & 11 deletions

File tree

pkg/apis/operator/v1alpha1/tektonaddon_types.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ type TektonAddonSpec struct {
5050
// The params to customize different components of Addon
5151
// +optional
5252
Params []Param `json:"params,omitempty"`
53+
// Config holds the configuration for resources created by Addon
54+
// +optional
55+
Config Config `json:"config,omitempty"`
5356
}
5457

5558
// TektonAddonStatus defines the observed state of TektonAddon

pkg/apis/operator/v1alpha1/zz_generated.deepcopy.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/reconciler/openshift/tektonaddon/extension.go

Lines changed: 75 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,11 @@ import (
3131
"github.com/tektoncd/operator/pkg/client/clientset/versioned"
3232
operatorclient "github.com/tektoncd/operator/pkg/client/injection/client"
3333
"github.com/tektoncd/operator/pkg/reconciler/common"
34+
"github.com/tektoncd/operator/pkg/reconciler/kubernetes/tektoninstallerset"
35+
"github.com/tektoncd/operator/pkg/reconciler/shared/hash"
3436
"go.uber.org/zap"
3537
corev1 "k8s.io/api/core/v1"
38+
apierrors "k8s.io/apimachinery/pkg/api/errors"
3639
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3740
"knative.dev/pkg/apis"
3841
"knative.dev/pkg/injection"
@@ -84,33 +87,76 @@ func (oe openshiftExtension) PostReconcile(ctx context.Context, comp v1alpha1.Te
8487
logger := logging.FromContext(ctx)
8588
addon := comp.(*v1alpha1.TektonAddon)
8689

87-
miscellaneousManifest := oe.manifest
8890
exist, err := checkIfInstallerSetExist(ctx, oe.operatorClientSet, oe.version, addon, miscellaneousResourcesInstallerSet)
8991
if err != nil {
9092
return err
9193
}
9294
if !exist {
9395

94-
if err := applyAddons(&miscellaneousManifest, "05-tkncliserve"); err != nil {
96+
manifest, err := getMiscellaneousManifest(ctx, addon, oe.manifest, comp)
97+
if err != nil {
9598
return err
9699
}
97100

98-
if err := getOptionalAddons(&miscellaneousManifest, comp); err != nil {
101+
if err := createInstallerSet(ctx, oe.operatorClientSet, addon, manifest, oe.version,
102+
miscellaneousResourcesInstallerSet, "addon-openshift"); err != nil {
99103
return err
100104
}
105+
}
106+
107+
// Check if installer set is already created
108+
compInstallerSet, ok := addon.Status.AddonsInstallerSet[miscellaneousResourcesInstallerSet]
109+
if !ok {
110+
return v1alpha1.RECONCILE_AGAIN_ERR
111+
}
112+
113+
installedTIS, err := oe.operatorClientSet.OperatorV1alpha1().TektonInstallerSets().
114+
Get(ctx, compInstallerSet, metav1.GetOptions{})
115+
if err != nil {
116+
if apierrors.IsNotFound(err) {
117+
manifest, err := getMiscellaneousManifest(ctx, addon, oe.manifest, comp)
118+
if err != nil {
119+
return err
120+
}
101121

102-
images := common.ToLowerCaseKeys(common.ImagesFromEnv(common.AddonsImagePrefix))
103-
extraTranformers := []mf.Transformer{
104-
common.DeploymentImages(images),
122+
if err := createInstallerSet(ctx, oe.operatorClientSet, addon, manifest, oe.version,
123+
miscellaneousResourcesInstallerSet, "addon-openshift"); err != nil {
124+
return err
125+
}
105126
}
106-
if err := addonTransform(ctx, &miscellaneousManifest, addon, extraTranformers...); err != nil {
127+
logger.Error("failed to get InstallerSet: %s", err)
128+
return err
129+
}
130+
131+
expectedSpecHash, err := hash.Compute(addon.Spec)
132+
if err != nil {
133+
return err
134+
}
135+
136+
// spec hash stored on installerSet
137+
lastAppliedHash := installedTIS.GetAnnotations()[tektoninstallerset.LastAppliedHashKey]
138+
139+
if lastAppliedHash != expectedSpecHash {
140+
141+
manifest, err := getMiscellaneousManifest(ctx, addon, oe.manifest, comp)
142+
if err != nil {
107143
return err
108144
}
109145

110-
if err := createInstallerSet(ctx, oe.operatorClientSet, addon, miscellaneousManifest, oe.version,
111-
miscellaneousResourcesInstallerSet, "addon-openshift"); err != nil {
146+
// Update the spec hash
147+
current := installedTIS.GetAnnotations()
148+
current[tektoninstallerset.LastAppliedHashKey] = expectedSpecHash
149+
installedTIS.SetAnnotations(current)
150+
151+
// Update the manifests
152+
installedTIS.Spec.Manifests = manifest.Resources()
153+
154+
if _, err = oe.operatorClientSet.OperatorV1alpha1().TektonInstallerSets().
155+
Update(ctx, installedTIS, metav1.UpdateOptions{}); err != nil {
112156
return err
113157
}
158+
159+
return v1alpha1.RECONCILE_AGAIN_ERR
114160
}
115161

116162
existingInstallerSet, ok := addon.Status.AddonsInstallerSet[miscellaneousResourcesInstallerSet]
@@ -221,3 +267,23 @@ func getRouteHost(manifest *mf.Manifest) (string, error) {
221267
}
222268
return hostUrl, nil
223269
}
270+
271+
func getMiscellaneousManifest(ctx context.Context, addon *v1alpha1.TektonAddon, miscellaneousManifest mf.Manifest, comp v1alpha1.TektonComponent) (mf.Manifest, error) {
272+
if err := applyAddons(&miscellaneousManifest, "05-tkncliserve"); err != nil {
273+
return mf.Manifest{}, err
274+
}
275+
276+
if err := getOptionalAddons(&miscellaneousManifest, comp); err != nil {
277+
return mf.Manifest{}, err
278+
}
279+
280+
images := common.ToLowerCaseKeys(common.ImagesFromEnv(common.AddonsImagePrefix))
281+
extraTranformers := []mf.Transformer{
282+
common.DeploymentImages(images),
283+
common.AddConfiguration(addon.Spec.Config),
284+
}
285+
if err := addonTransform(ctx, &miscellaneousManifest, addon, extraTranformers...); err != nil {
286+
return mf.Manifest{}, err
287+
}
288+
return miscellaneousManifest, nil
289+
}

pkg/reconciler/openshift/tektonaddon/tektonaddon.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import (
3232
"github.com/tektoncd/operator/pkg/reconciler/common"
3333
"github.com/tektoncd/operator/pkg/reconciler/kubernetes/tektoninstallerset"
3434
tektonaddon "github.com/tektoncd/operator/pkg/reconciler/openshift/tektonaddon/pipelinetemplates"
35+
"github.com/tektoncd/operator/pkg/reconciler/shared/hash"
3536
corev1 "k8s.io/api/core/v1"
3637
"k8s.io/apimachinery/pkg/api/errors"
3738
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -410,7 +411,12 @@ func checkIfInstallerSetExist(ctx context.Context, oc clientset.Interface, relVe
410411
func createInstallerSet(ctx context.Context, oc clientset.Interface, ta *v1alpha1.TektonAddon,
411412
manifest mf.Manifest, releaseVersion, component, installerSetPrefix string) error {
412413

413-
is := makeInstallerSet(ta, manifest, installerSetPrefix, releaseVersion)
414+
specHash, err := hash.Compute(ta.Spec)
415+
if err != nil {
416+
return err
417+
}
418+
419+
is := makeInstallerSet(ta, manifest, installerSetPrefix, releaseVersion, specHash)
414420

415421
createdIs, err := oc.OperatorV1alpha1().TektonInstallerSets().
416422
Create(ctx, is, metav1.CreateOptions{})
@@ -435,7 +441,7 @@ func createInstallerSet(ctx context.Context, oc clientset.Interface, ta *v1alpha
435441
return nil
436442
}
437443

438-
func makeInstallerSet(ta *v1alpha1.TektonAddon, manifest mf.Manifest, prefix, releaseVersion string) *v1alpha1.TektonInstallerSet {
444+
func makeInstallerSet(ta *v1alpha1.TektonAddon, manifest mf.Manifest, prefix, releaseVersion, specHash string) *v1alpha1.TektonInstallerSet {
439445
ownerRef := *metav1.NewControllerRef(ta, ta.GetGroupVersionKind())
440446
return &v1alpha1.TektonInstallerSet{
441447
ObjectMeta: metav1.ObjectMeta{
@@ -446,6 +452,7 @@ func makeInstallerSet(ta *v1alpha1.TektonAddon, manifest mf.Manifest, prefix, re
446452
Annotations: map[string]string{
447453
tektoninstallerset.ReleaseVersionKey: releaseVersion,
448454
tektoninstallerset.TargetNamespaceKey: ta.Spec.TargetNamespace,
455+
tektoninstallerset.LastAppliedHashKey: specHash,
449456
},
450457
OwnerReferences: []metav1.OwnerReference{ownerRef},
451458
},

pkg/reconciler/openshift/tektonconfig/extension/addon.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@ func ensureTektonAddonExists(ctx context.Context, clients op.TektonAddonInterfac
6262
updated = true
6363
}
6464

65+
if !reflect.DeepEqual(taCR.Spec.Config, config.Spec.Config) {
66+
taCR.Spec.Config = config.Spec.Config
67+
updated = true
68+
}
69+
6570
if taCR.ObjectMeta.OwnerReferences == nil {
6671
ownerRef := *metav1.NewControllerRef(config, config.GroupVersionKind())
6772
taCR.ObjectMeta.OwnerReferences = []metav1.OwnerReference{ownerRef}
@@ -88,6 +93,7 @@ func ensureTektonAddonExists(ctx context.Context, clients op.TektonAddonInterfac
8893
TargetNamespace: config.Spec.TargetNamespace,
8994
},
9095
Params: config.Spec.Addon.Params,
96+
Config: config.Spec.Config,
9197
},
9298
}
9399
return clients.Create(ctx, taCR, metav1.CreateOptions{})

0 commit comments

Comments
 (0)