Get default CheckExisting from Target

This commit is contained in:
John Gardiner Myers 2022-12-20 09:20:21 -08:00
parent f5fb91c858
commit 7abacb9b3b
23 changed files with 76 additions and 35 deletions

View File

@ -396,8 +396,6 @@ func (c *ApplyClusterCmd) Run(ctx context.Context) error {
return err
}
checkExisting := true
project := ""
var sshPublicKeys [][]byte
@ -729,7 +727,6 @@ func (c *ApplyClusterCmd) Run(ctx context.Context) error {
}
case TargetTerraform:
checkExisting = false
outDir := c.OutDir
var vfsProvider *vfs.TerraformProvider
if tfPath, ok := configBase.(vfs.TerraformPath); ok && featureflag.TerraformManagedFiles.Enabled() {
@ -776,14 +773,14 @@ func (c *ApplyClusterCmd) Run(ctx context.Context) error {
}
c.Target = target
if checkExisting {
if target.DefaultCheckExisting() {
c.TaskMap, err = l.FindDeletions(cloud, c.LifecycleOverrides)
if err != nil {
return fmt.Errorf("error finding deletions: %w", err)
}
}
context, err := fi.NewCloudupContext(ctx, target, cluster, cloud, keyStore, secretStore, configBase, checkExisting, c.TaskMap)
context, err := fi.NewCloudupContext(ctx, target, cluster, cloud, keyStore, secretStore, configBase, c.TaskMap)
if err != nil {
return fmt.Errorf("error building context: %v", err)
}

View File

@ -98,7 +98,7 @@ func TestSharedEgressOnlyInternetGatewayDoesNotRename(t *testing.T) {
Cloud: cloud,
}
context, err := fi.NewCloudupContext(ctx, target, nil, cloud, nil, nil, nil, true, allTasks)
context, err := fi.NewCloudupContext(ctx, target, nil, cloud, nil, nil, nil, allTasks)
if err != nil {
t.Fatalf("error building context: %v", err)
}

View File

@ -81,7 +81,7 @@ func TestElasticIPCreate(t *testing.T) {
Cloud: cloud,
}
context, err := fi.NewCloudupContext(ctx, target, nil, cloud, nil, nil, nil, true, allTasks)
context, err := fi.NewCloudupContext(ctx, target, nil, cloud, nil, nil, nil, allTasks)
if err != nil {
t.Fatalf("error building context: %v", err)
}
@ -129,7 +129,7 @@ func checkNoChanges(t *testing.T, ctx context.Context, cloud fi.Cloud, allTasks
}
assetBuilder := assets.NewAssetBuilder(cluster, false)
target := fi.NewCloudupDryRunTarget(assetBuilder, os.Stderr)
context, err := fi.NewCloudupContext(ctx, target, nil, cloud, nil, nil, nil, true, allTasks)
context, err := fi.NewCloudupContext(ctx, target, nil, cloud, nil, nil, nil, allTasks)
if err != nil {
t.Fatalf("error building context: %v", err)
}

View File

@ -114,7 +114,7 @@ func TestSharedInternetGatewayDoesNotRename(t *testing.T) {
Cloud: cloud,
}
context, err := fi.NewCloudupContext(ctx, target, nil, cloud, nil, nil, nil, true, allTasks)
context, err := fi.NewCloudupContext(ctx, target, nil, cloud, nil, nil, nil, allTasks)
if err != nil {
t.Fatalf("error building context: %v", err)
}

View File

@ -132,7 +132,7 @@ func TestSecurityGroupCreate(t *testing.T) {
Cloud: cloud,
}
context, err := fi.NewCloudupContext(ctx, target, nil, cloud, nil, nil, nil, true, allTasks)
context, err := fi.NewCloudupContext(ctx, target, nil, cloud, nil, nil, nil, allTasks)
if err != nil {
t.Fatalf("error building context: %v", err)
}

View File

@ -102,7 +102,7 @@ func TestSubnetCreate(t *testing.T) {
Cloud: cloud,
}
context, err := fi.NewCloudupContext(ctx, target, nil, cloud, nil, nil, nil, true, allTasks)
context, err := fi.NewCloudupContext(ctx, target, nil, cloud, nil, nil, nil, allTasks)
if err != nil {
t.Fatalf("error building context: %v", err)
}
@ -194,7 +194,7 @@ func TestSubnetCreateIPv6(t *testing.T) {
Cloud: cloud,
}
context, err := fi.NewCloudupContext(ctx, target, nil, cloud, nil, nil, nil, true, allTasks)
context, err := fi.NewCloudupContext(ctx, target, nil, cloud, nil, nil, nil, allTasks)
if err != nil {
t.Fatalf("error building context: %v", err)
}
@ -294,7 +294,7 @@ func TestSubnetCreateIPv6NetNum(t *testing.T) {
Cloud: cloud,
}
context, err := fi.NewCloudupContext(ctx, target, nil, cloud, nil, nil, nil, true, allTasks)
context, err := fi.NewCloudupContext(ctx, target, nil, cloud, nil, nil, nil, allTasks)
if err != nil {
t.Fatalf("error building context: %v", err)
}
@ -428,7 +428,7 @@ func TestSharedSubnetCreateDoesNotCreateNew(t *testing.T) {
Cloud: cloud,
}
context, err := fi.NewCloudupContext(ctx, target, nil, cloud, nil, nil, nil, true, allTasks)
context, err := fi.NewCloudupContext(ctx, target, nil, cloud, nil, nil, nil, allTasks)
if err != nil {
t.Fatalf("error building context: %v", err)
}

View File

@ -56,7 +56,7 @@ func TestVPCCreate(t *testing.T) {
Cloud: cloud,
}
context, err := fi.NewCloudupContext(ctx, target, nil, cloud, nil, nil, nil, true, allTasks)
context, err := fi.NewCloudupContext(ctx, target, nil, cloud, nil, nil, nil, allTasks)
if err != nil {
t.Fatalf("error building context: %v", err)
}
@ -181,7 +181,7 @@ func TestSharedVPCAdditionalCIDR(t *testing.T) {
Cloud: cloud,
}
context, err := fi.NewCloudupContext(ctx, target, nil, cloud, nil, nil, nil, true, allTasks)
context, err := fi.NewCloudupContext(ctx, target, nil, cloud, nil, nil, nil, allTasks)
if err != nil {
t.Fatalf("error building context: %v", err)
}

View File

@ -42,6 +42,10 @@ func (t *AWSAPITarget) ProcessDeletions() bool {
return true
}
func (t *AWSAPITarget) DefaultCheckExisting() bool {
return true
}
func (t *AWSAPITarget) Finish(taskMap map[string]fi.CloudupTask) error {
return nil
}

View File

@ -44,3 +44,7 @@ func (t *AzureAPITarget) Finish(taskMap map[string]fi.CloudupTask) error {
func (t *AzureAPITarget) ProcessDeletions() bool {
return true
}
func (t *AzureAPITarget) DefaultCheckExisting() bool {
return true
}

View File

@ -39,3 +39,7 @@ func (t *DOAPITarget) Finish(taskMap map[string]fi.CloudupTask) error {
func (t *DOAPITarget) ProcessDeletions() bool {
return true
}
func (t *DOAPITarget) DefaultCheckExisting() bool {
return true
}

View File

@ -39,3 +39,7 @@ func (t *GCEAPITarget) Finish(taskMap map[string]fi.CloudupTask) error {
func (t *GCEAPITarget) ProcessDeletions() bool {
return true
}
func (t *GCEAPITarget) DefaultCheckExisting() bool {
return true
}

View File

@ -100,7 +100,7 @@ func checkHasChanges(t *testing.T, ctx context.Context, cloud fi.Cloud, allTasks
func runTasks(t *testing.T, ctx context.Context, cloud gce.GCECloud, allTasks map[string]fi.CloudupTask) {
target := gce.NewGCEAPITarget(cloud)
context, err := fi.NewCloudupContext(ctx, target, nil, cloud, nil, nil, nil, true, allTasks)
context, err := fi.NewCloudupContext(ctx, target, nil, cloud, nil, nil, nil, allTasks)
if err != nil {
t.Fatalf("error building context: %v", err)
}
@ -119,7 +119,7 @@ func doDryRun(t *testing.T, ctx context.Context, cloud fi.Cloud, allTasks map[st
}
assetBuilder := assets.NewAssetBuilder(cluster, false)
target := fi.NewCloudupDryRunTarget(assetBuilder, os.Stderr)
context, err := fi.NewCloudupContext(ctx, target, nil, cloud, nil, nil, nil, true, allTasks)
context, err := fi.NewCloudupContext(ctx, target, nil, cloud, nil, nil, nil, allTasks)
if err != nil {
t.Fatalf("error building context: %v", err)
}

View File

@ -39,3 +39,7 @@ func (t *HetznerAPITarget) Finish(taskMap map[string]fi.CloudupTask) error {
func (t *HetznerAPITarget) ProcessDeletions() bool {
return true
}
func (t *HetznerAPITarget) DefaultCheckExisting() bool {
return true
}

View File

@ -39,3 +39,7 @@ func (t *OpenstackAPITarget) Finish(taskMap map[string]fi.CloudupTask) error {
func (t *OpenstackAPITarget) ProcessDeletions() bool {
return true
}
func (t *OpenstackAPITarget) DefaultCheckExisting() bool {
return true
}

View File

@ -37,3 +37,7 @@ func (s ScwAPITarget) Finish(taskMap map[string]fi.CloudupTask) error {
func (s ScwAPITarget) ProcessDeletions() bool {
return true
}
func (t *ScwAPITarget) DefaultCheckExisting() bool {
return true
}

View File

@ -71,6 +71,10 @@ func (t *TerraformTarget) ProcessDeletions() bool {
return false
}
func (t *TerraformTarget) DefaultCheckExisting() bool {
return false
}
// tfGetProviderExtraConfig is a helper function to get extra config with safety checks on the pointers.
func tfGetProviderExtraConfig(c *kops.TargetSpec) map[string]string {
if c != nil &&

View File

@ -36,8 +36,6 @@ type Context[T SubContext] struct {
Target Target[T]
Keystore Keystore
CheckExisting bool
tasks map[string]Task[T]
warnings []*Warning[T]
@ -75,14 +73,13 @@ type Warning[T SubContext] struct {
Message string
}
func newContext[T SubContext](ctx context.Context, target Target[T], keystore Keystore, checkExisting bool, sub T, tasks map[string]Task[T]) (*Context[T], error) {
func newContext[T SubContext](ctx context.Context, target Target[T], keystore Keystore, sub T, tasks map[string]Task[T]) (*Context[T], error) {
c := &Context[T]{
ctx: ctx,
Target: target,
Keystore: keystore,
CheckExisting: checkExisting,
tasks: tasks,
T: sub,
ctx: ctx,
Target: target,
Keystore: keystore,
tasks: tasks,
T: sub,
}
return c, nil
@ -90,24 +87,24 @@ func newContext[T SubContext](ctx context.Context, target Target[T], keystore Ke
func NewInstallContext(ctx context.Context, target InstallTarget, tasks map[string]InstallTask) (*InstallContext, error) {
sub := InstallSubContext{}
return newContext[InstallSubContext](ctx, target, nil, true, sub, tasks)
return newContext[InstallSubContext](ctx, target, nil, sub, tasks)
}
func NewNodeupContext(ctx context.Context, target NodeupTarget, keystore Keystore, checkExisting bool, bootConfig *nodeup.BootConfig, nodeupConfig *nodeup.Config, tasks map[string]NodeupTask) (*NodeupContext, error) {
func NewNodeupContext(ctx context.Context, target NodeupTarget, keystore Keystore, bootConfig *nodeup.BootConfig, nodeupConfig *nodeup.Config, tasks map[string]NodeupTask) (*NodeupContext, error) {
sub := NodeupSubContext{
BootConfig: bootConfig,
NodeupConfig: nodeupConfig,
}
return newContext[NodeupSubContext](ctx, target, keystore, checkExisting, sub, tasks)
return newContext[NodeupSubContext](ctx, target, keystore, sub, tasks)
}
func NewCloudupContext(ctx context.Context, target CloudupTarget, cluster *kops.Cluster, cloud Cloud, keystore Keystore, secretStore SecretStore, clusterConfigBase vfs.Path, checkExisting bool, tasks map[string]CloudupTask) (*CloudupContext, error) {
func NewCloudupContext(ctx context.Context, target CloudupTarget, cluster *kops.Cluster, cloud Cloud, keystore Keystore, secretStore SecretStore, clusterConfigBase vfs.Path, tasks map[string]CloudupTask) (*CloudupContext, error) {
sub := CloudupSubContext{
Cloud: cloud,
Cluster: cluster,
ClusterConfigBase: clusterConfigBase,
SecretStore: secretStore,
}
return newContext[CloudupSubContext](ctx, target, keystore, checkExisting, sub, tasks)
return newContext[CloudupSubContext](ctx, target, keystore, sub, tasks)
}
func (c *Context[T]) AllTasks() map[string]Task[T] {

View File

@ -59,7 +59,7 @@ func defaultDeltaRunMethod[T SubContext](e Task[T], c *Context[T]) error {
return nil
}
checkExisting := c.CheckExisting
checkExisting := c.Target.DefaultCheckExisting()
if hce, ok := e.(HasCheckExisting[T]); ok {
checkExisting = hce.CheckExisting(c)
}

View File

@ -97,6 +97,10 @@ func (t *DryRunTarget[T]) ProcessDeletions() bool {
return true
}
func (t *DryRunTarget[T]) DefaultCheckExisting() bool {
return true
}
func (t *DryRunTarget[T]) Render(a, e, changes Task[T]) error {
valA := reflect.ValueOf(a)
aIsNil := valA.IsNil()

View File

@ -364,7 +364,6 @@ func (c *NodeUpCommand) Run(out io.Writer) error {
// Protokube load image task is in ProtokubeBuilder
var target fi.NodeupTarget
checkExisting := true
switch c.Target {
case "direct":
@ -379,7 +378,7 @@ func (c *NodeUpCommand) Run(out io.Writer) error {
return fmt.Errorf("unsupported target type %q", c.Target)
}
context, err := fi.NewNodeupContext(ctx, target, keyStore, checkExisting, &bootConfig, &nodeupConfig, taskMap)
context, err := fi.NewNodeupContext(ctx, target, keyStore, &bootConfig, &nodeupConfig, taskMap)
if err != nil {
klog.Exitf("error building context: %v", err)
}

View File

@ -36,6 +36,10 @@ func (t *InstallTarget) ProcessDeletions() bool {
return true
}
func (t *InstallTarget) DefaultCheckExisting() bool {
return true
}
// CombinedOutput is a helper function that executes a command, returning stdout & stderr combined
func (t *InstallTarget) CombinedOutput(args []string) ([]byte, error) {
c := exec.Command(args[0], args[1:]...)

View File

@ -38,6 +38,10 @@ func (t *LocalTarget) ProcessDeletions() bool {
return true
}
func (t *LocalTarget) DefaultCheckExisting() bool {
return true
}
// CombinedOutput is a helper function that executes a command, returning stdout & stderr combined
func (t *LocalTarget) CombinedOutput(args []string) ([]byte, error) {
c := exec.Command(args[0], args[1:]...)

View File

@ -23,6 +23,10 @@ type Target[T SubContext] interface {
// ProcessDeletions returns true if we should delete resources
// Some providers (e.g. Terraform) actively keep state, and will delete resources automatically
ProcessDeletions() bool
// DefaultCheckExisting returns true if DefaultDeltaRun tasks which aren't HasCheckExisting
// should invoke Find() when running against this Target.
DefaultCheckExisting() bool
}
type CloudupTarget = Target[CloudupSubContext]