argo-cd/pkg/diff/diff_options.go

125 lines
3.2 KiB
Go
Raw Normal View History

package diff
import (
feat: Implement Server-Side Diffs (#522) * feat: Implement Server-Side Diffs Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * trigger build Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * chore: remove unused function Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * make HasAnnotationOption more generic Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * add server-side-diff printer option Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * remove managedFields during server-side-diff Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * add ignore mutation webhook logic Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix configSet Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Fix comparison Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * merge typedconfig in typedpredictedlive Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * handle webhook diff conflicts Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Fix webhook normalization logic Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * address review comments 1/2 Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * address review comments 2/2 Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix lint Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * remove kubectl getter from cluster-cache Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix query param verifier instantiation Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * Add server-side-diff unit tests Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> --------- Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
2023-12-18 19:45:13 +00:00
"context"
"github.com/go-logr/logr"
feat: Implement Server-Side Diffs (#522) * feat: Implement Server-Side Diffs Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * trigger build Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * chore: remove unused function Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * make HasAnnotationOption more generic Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * add server-side-diff printer option Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * remove managedFields during server-side-diff Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * add ignore mutation webhook logic Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix configSet Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Fix comparison Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * merge typedconfig in typedpredictedlive Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * handle webhook diff conflicts Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Fix webhook normalization logic Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * address review comments 1/2 Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * address review comments 2/2 Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix lint Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * remove kubectl getter from cluster-cache Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix query param verifier instantiation Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * Add server-side-diff unit tests Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> --------- Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
2023-12-18 19:45:13 +00:00
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
feat: Add server-side apply manager config (#418) * feat: Add server-side apply manager config Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Force conflicts when SSA Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Implement strategic-merge patch in diff Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Implement structured merge diff Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Implement structured merge in diff Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Fix parseable type conversion Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Handle structured merge diff for create/delete operations Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * User NormalizeUnionsApply instead of Merge for structured-merge diff Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * NormalizeUnions Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * merge first than normalize union Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * calculate diff with fieldsets Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * extract managed fields Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * remove managed fields then merge Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Just remove fields if manager is found Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * remove config fieldset instead of using managed fields Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Structure merge diff with defaults Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * tests Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Normalize union at the end Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * test Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * test Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Remove fields after merging Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * test Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * test Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * apply defaults when building diff result Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix default func call Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Fix diff default Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix merged object Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * keep diff order Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * apply default with patch Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * handle ssa diffs with resource annotations Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * use managed fields to calculate diff Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Implement unit tests Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix bad merge Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * add test to validate service with multiple ports Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * resolveFromStaticParser optimization Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * try without reordering while patching default values Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com>
2022-08-02 18:48:09 +00:00
"k8s.io/apimachinery/pkg/util/managedfields"
"k8s.io/klog/v2/textlogger"
feat: Implement Server-Side Diffs (#522) * feat: Implement Server-Side Diffs Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * trigger build Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * chore: remove unused function Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * make HasAnnotationOption more generic Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * add server-side-diff printer option Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * remove managedFields during server-side-diff Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * add ignore mutation webhook logic Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix configSet Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Fix comparison Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * merge typedconfig in typedpredictedlive Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * handle webhook diff conflicts Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Fix webhook normalization logic Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * address review comments 1/2 Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * address review comments 2/2 Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix lint Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * remove kubectl getter from cluster-cache Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix query param verifier instantiation Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * Add server-side-diff unit tests Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> --------- Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
2023-12-18 19:45:13 +00:00
cmdutil "k8s.io/kubectl/pkg/cmd/util"
)
type Option func(*options)
// Holds diffing settings
type options struct {
// If set to true then differences caused by aggregated roles in RBAC resources are ignored.
ignoreAggregatedRoles bool
normalizer Normalizer
log logr.Logger
feat: Add server-side apply manager config (#418) * feat: Add server-side apply manager config Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Force conflicts when SSA Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Implement strategic-merge patch in diff Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Implement structured merge diff Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Implement structured merge in diff Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Fix parseable type conversion Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Handle structured merge diff for create/delete operations Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * User NormalizeUnionsApply instead of Merge for structured-merge diff Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * NormalizeUnions Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * merge first than normalize union Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * calculate diff with fieldsets Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * extract managed fields Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * remove managed fields then merge Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Just remove fields if manager is found Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * remove config fieldset instead of using managed fields Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Structure merge diff with defaults Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * tests Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Normalize union at the end Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * test Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * test Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Remove fields after merging Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * test Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * test Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * apply defaults when building diff result Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix default func call Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Fix diff default Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix merged object Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * keep diff order Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * apply default with patch Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * handle ssa diffs with resource annotations Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * use managed fields to calculate diff Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Implement unit tests Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix bad merge Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * add test to validate service with multiple ports Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * resolveFromStaticParser optimization Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * try without reordering while patching default values Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com>
2022-08-02 18:48:09 +00:00
structuredMergeDiff bool
gvkParser *managedfields.GvkParser
manager string
feat: Implement Server-Side Diffs (#522) * feat: Implement Server-Side Diffs Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * trigger build Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * chore: remove unused function Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * make HasAnnotationOption more generic Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * add server-side-diff printer option Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * remove managedFields during server-side-diff Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * add ignore mutation webhook logic Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix configSet Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Fix comparison Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * merge typedconfig in typedpredictedlive Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * handle webhook diff conflicts Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Fix webhook normalization logic Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * address review comments 1/2 Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * address review comments 2/2 Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix lint Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * remove kubectl getter from cluster-cache Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix query param verifier instantiation Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * Add server-side-diff unit tests Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> --------- Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
2023-12-18 19:45:13 +00:00
serverSideDiff bool
serverSideDryRunner ServerSideDryRunner
ignoreMutationWebhook bool
}
func applyOptions(opts []Option) options {
o := options{
ignoreAggregatedRoles: false,
feat: Implement Server-Side Diffs (#522) * feat: Implement Server-Side Diffs Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * trigger build Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * chore: remove unused function Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * make HasAnnotationOption more generic Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * add server-side-diff printer option Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * remove managedFields during server-side-diff Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * add ignore mutation webhook logic Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix configSet Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Fix comparison Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * merge typedconfig in typedpredictedlive Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * handle webhook diff conflicts Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Fix webhook normalization logic Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * address review comments 1/2 Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * address review comments 2/2 Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix lint Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * remove kubectl getter from cluster-cache Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix query param verifier instantiation Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * Add server-side-diff unit tests Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> --------- Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
2023-12-18 19:45:13 +00:00
ignoreMutationWebhook: true,
normalizer: GetNoopNormalizer(),
log: textlogger.NewLogger(textlogger.NewConfig()),
}
for _, opt := range opts {
opt(&o)
}
return o
}
feat: Implement Server-Side Diffs (#522) * feat: Implement Server-Side Diffs Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * trigger build Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * chore: remove unused function Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * make HasAnnotationOption more generic Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * add server-side-diff printer option Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * remove managedFields during server-side-diff Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * add ignore mutation webhook logic Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix configSet Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Fix comparison Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * merge typedconfig in typedpredictedlive Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * handle webhook diff conflicts Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Fix webhook normalization logic Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * address review comments 1/2 Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * address review comments 2/2 Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix lint Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * remove kubectl getter from cluster-cache Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix query param verifier instantiation Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * Add server-side-diff unit tests Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> --------- Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
2023-12-18 19:45:13 +00:00
type KubeApplier interface {
ApplyResource(ctx context.Context, obj *unstructured.Unstructured, dryRunStrategy cmdutil.DryRunStrategy, force, validate, serverSideApply bool, manager string, serverSideDiff bool) (string, error)
}
// ServerSideDryRunner defines the contract to run a server-side apply in
// dryrun mode.
type ServerSideDryRunner interface {
Run(ctx context.Context, obj *unstructured.Unstructured, manager string) (string, error)
}
// K8sServerSideDryRunner is the Kubernetes implementation of ServerSideDryRunner.
type K8sServerSideDryRunner struct {
dryrunApplier KubeApplier
}
// NewK8sServerSideDryRunner will instantiate a new K8sServerSideDryRunner with
// the given kubeApplier.
func NewK8sServerSideDryRunner(kubeApplier KubeApplier) *K8sServerSideDryRunner {
return &K8sServerSideDryRunner{
dryrunApplier: kubeApplier,
}
}
// ServerSideApplyDryRun will invoke a kubernetes server-side apply with the given
// obj and the given manager in dryrun mode. Will return the predicted live state
// json as string.
func (kdr *K8sServerSideDryRunner) Run(ctx context.Context, obj *unstructured.Unstructured, manager string) (string, error) {
return kdr.dryrunApplier.ApplyResource(ctx, obj, cmdutil.DryRunServer, false, false, true, manager, true)
}
func IgnoreAggregatedRoles(ignore bool) Option {
return func(o *options) {
o.ignoreAggregatedRoles = ignore
}
}
func WithNormalizer(normalizer Normalizer) Option {
return func(o *options) {
o.normalizer = normalizer
}
}
func WithLogr(log logr.Logger) Option {
return func(o *options) {
o.log = log
}
}
feat: Add server-side apply manager config (#418) * feat: Add server-side apply manager config Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Force conflicts when SSA Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Implement strategic-merge patch in diff Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Implement structured merge diff Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Implement structured merge in diff Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Fix parseable type conversion Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Handle structured merge diff for create/delete operations Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * User NormalizeUnionsApply instead of Merge for structured-merge diff Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * NormalizeUnions Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * merge first than normalize union Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * calculate diff with fieldsets Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * extract managed fields Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * remove managed fields then merge Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Just remove fields if manager is found Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * remove config fieldset instead of using managed fields Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Structure merge diff with defaults Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * tests Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Normalize union at the end Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * test Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * test Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Remove fields after merging Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * test Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * test Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * apply defaults when building diff result Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix default func call Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Fix diff default Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix merged object Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * keep diff order Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * apply default with patch Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * handle ssa diffs with resource annotations Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * use managed fields to calculate diff Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Implement unit tests Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix bad merge Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * add test to validate service with multiple ports Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * resolveFromStaticParser optimization Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * try without reordering while patching default values Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com>
2022-08-02 18:48:09 +00:00
func WithStructuredMergeDiff(smd bool) Option {
return func(o *options) {
o.structuredMergeDiff = smd
}
}
func WithGVKParser(parser *managedfields.GvkParser) Option {
return func(o *options) {
o.gvkParser = parser
}
}
func WithManager(manager string) Option {
return func(o *options) {
o.manager = manager
}
}
feat: Implement Server-Side Diffs (#522) * feat: Implement Server-Side Diffs Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * trigger build Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * chore: remove unused function Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * make HasAnnotationOption more generic Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * add server-side-diff printer option Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * remove managedFields during server-side-diff Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * add ignore mutation webhook logic Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix configSet Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Fix comparison Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * merge typedconfig in typedpredictedlive Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * handle webhook diff conflicts Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * Fix webhook normalization logic Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * address review comments 1/2 Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * address review comments 2/2 Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix lint Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * remove kubectl getter from cluster-cache Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> * fix query param verifier instantiation Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * Add server-side-diff unit tests Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> --------- Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com> Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
2023-12-18 19:45:13 +00:00
func WithServerSideDiff(ssd bool) Option {
return func(o *options) {
o.serverSideDiff = ssd
}
}
func WithIgnoreMutationWebhook(mw bool) Option {
return func(o *options) {
o.ignoreMutationWebhook = mw
}
}
func WithServerSideDryRunner(ssadr ServerSideDryRunner) Option {
return func(o *options) {
o.serverSideDryRunner = ssadr
}
}