Skip to content

Commit abdc58d

Browse files
authored
Merge pull request #17385 from justinsb/fix_get_assets
fix get assets
2 parents 3fde56b + 1c42e0c commit abdc58d

File tree

7 files changed

+143
-14
lines changed

7 files changed

+143
-14
lines changed

cmd/kops/integration_test.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ type integrationTest struct {
7575
nthRebalance bool
7676
// enable GCE startup script
7777
startupScript bool
78+
// verify "kops get assets" functionality
79+
testGetAssets bool
7880
}
7981

8082
func newIntegrationTest(clusterName, srcDir string) *integrationTest {
@@ -89,6 +91,11 @@ func newIntegrationTest(clusterName, srcDir string) *integrationTest {
8991
}
9092
}
9193

94+
func (i *integrationTest) withTestGetAssets() *integrationTest {
95+
i.testGetAssets = true
96+
return i
97+
}
98+
9299
func (i *integrationTest) withStartupScript() *integrationTest {
93100
i.startupScript = true
94101
return i
@@ -1041,6 +1048,7 @@ func TestContainerd(t *testing.T) {
10411048
dnsControllerAddon,
10421049
awsCCMAddon,
10431050
).
1051+
withTestGetAssets().
10441052
runTestTerraformAWS(t)
10451053
}
10461054

@@ -1319,6 +1327,22 @@ func (i *integrationTest) runTest(t *testing.T, ctx context.Context, h *testutil
13191327
}
13201328
}
13211329
}
1330+
1331+
if i.testGetAssets {
1332+
options := &GetAssetsOptions{}
1333+
options.GetOptions = &GetOptions{}
1334+
options.Output = "yaml"
1335+
options.ClusterName = i.clusterName
1336+
1337+
var assetsOut bytes.Buffer
1338+
err := RunGetAssets(ctx, factory, &assetsOut, options)
1339+
if err != nil {
1340+
t.Fatalf("error running get assets %q: %v", i.clusterName, err)
1341+
}
1342+
1343+
wantPath := filepath.Join(i.srcDir, "assets.yaml")
1344+
golden.AssertMatchesFile(t, assetsOut.String(), wantPath)
1345+
}
13221346
}
13231347

13241348
func (i *integrationTest) setupCluster(t *testing.T, ctx context.Context, inputYAML string, stdout bytes.Buffer) *util.Factory {
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
files:
2+
- canonical: https://dl.k8s.io/release/v1.32.0/bin/linux/amd64/kubelet
3+
download: https://dl.k8s.io/release/v1.32.0/bin/linux/amd64/kubelet
4+
sha: 5ad4965598773d56a37a8e8429c3dc3d86b4c5c26d8417ab333ae345c053dae2
5+
- canonical: https://dl.k8s.io/release/v1.32.0/bin/linux/amd64/kubectl
6+
download: https://dl.k8s.io/release/v1.32.0/bin/linux/amd64/kubectl
7+
sha: 646d58f6d98ee670a71d9cdffbf6625aeea2849d567f214bc43a35f8ccb7bf70
8+
- canonical: https://artifacts.k8s.io/binaries/cloud-provider-aws/v1.27.1/linux/amd64/ecr-credential-provider-linux-amd64
9+
download: https://artifacts.k8s.io/binaries/cloud-provider-aws/v1.27.1/linux/amd64/ecr-credential-provider-linux-amd64
10+
sha: 5035d7814c95cd3cedbc5efb447ef25a4942ef05caab2159746d55ce1698c74a
11+
- canonical: https://storage.googleapis.com/k8s-artifacts-cni/release/v1.6.1/cni-plugins-linux-amd64-v1.6.1.tgz
12+
download: https://storage.googleapis.com/k8s-artifacts-cni/release/v1.6.1/cni-plugins-linux-amd64-v1.6.1.tgz
13+
sha: 2503ce29ac445715ebe146073f45468153f9e28f45fa173cb060cfd9e735f563
14+
- canonical: https://github.com/containerd/containerd/releases/download/v1.7.25/containerd-1.7.25-linux-amd64.tar.gz
15+
download: https://github.com/containerd/containerd/releases/download/v1.7.25/containerd-1.7.25-linux-amd64.tar.gz
16+
sha: 02990fa281c0a2c4b073c6d2415d264b682bd693aa7d86c5d8eb4b86d684a18c
17+
- canonical: https://github.com/opencontainers/runc/releases/download/v1.2.4/runc.amd64
18+
download: https://github.com/opencontainers/runc/releases/download/v1.2.4/runc.amd64
19+
sha: e83565aa78ec8f52a4d2b4eb6c4ca262b74c5f6770c1f43670c3029c20175502
20+
- canonical: https://github.com/containerd/nerdctl/releases/download/v1.7.4/nerdctl-1.7.4-linux-amd64.tar.gz
21+
download: https://github.com/containerd/nerdctl/releases/download/v1.7.4/nerdctl-1.7.4-linux-amd64.tar.gz
22+
sha: 71aee9d987b7fad0ff2ade50b038ad7e2356324edc02c54045960a3521b3e6a7
23+
- canonical: https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.29.0/crictl-v1.29.0-linux-amd64.tar.gz
24+
download: https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.29.0/crictl-v1.29.0-linux-amd64.tar.gz
25+
sha: d16a1ffb3938f5a19d5c8f45d363bd091ef89c0bc4d44ad16b933eede32fdcbb
26+
- canonical: https://dl.k8s.io/release/v1.32.0/bin/linux/arm64/kubelet
27+
download: https://dl.k8s.io/release/v1.32.0/bin/linux/arm64/kubelet
28+
sha: bda9b2324c96693b38c41ecea051bab4c7c434be5683050b5e19025b50dbc0bf
29+
- canonical: https://dl.k8s.io/release/v1.32.0/bin/linux/arm64/kubectl
30+
download: https://dl.k8s.io/release/v1.32.0/bin/linux/arm64/kubectl
31+
sha: ba4004f98f3d3a7b7d2954ff0a424caa2c2b06b78c17b1dccf2acc76a311a896
32+
- canonical: https://artifacts.k8s.io/binaries/cloud-provider-aws/v1.27.1/linux/arm64/ecr-credential-provider-linux-arm64
33+
download: https://artifacts.k8s.io/binaries/cloud-provider-aws/v1.27.1/linux/arm64/ecr-credential-provider-linux-arm64
34+
sha: b3d567bda9e2996fc1fbd9d13506bd16763d3865b5c7b0b3c4b48c6088c04481
35+
- canonical: https://storage.googleapis.com/k8s-artifacts-cni/release/v1.6.1/cni-plugins-linux-arm64-v1.6.1.tgz
36+
download: https://storage.googleapis.com/k8s-artifacts-cni/release/v1.6.1/cni-plugins-linux-arm64-v1.6.1.tgz
37+
sha: f0f440b968ab50ad13d9d42d993ba98ec30b2ec666846f4ef1bddc7646a701cc
38+
- canonical: https://github.com/containerd/containerd/releases/download/v1.7.25/containerd-1.7.25-linux-arm64.tar.gz
39+
download: https://github.com/containerd/containerd/releases/download/v1.7.25/containerd-1.7.25-linux-arm64.tar.gz
40+
sha: e9201d478e4c931496344b779eb6cb40ce5084ec08c8fff159a02cabb0c6b9bf
41+
- canonical: https://github.com/opencontainers/runc/releases/download/v1.2.4/runc.arm64
42+
download: https://github.com/opencontainers/runc/releases/download/v1.2.4/runc.arm64
43+
sha: 285f6c4c3de1d78d9f536a0299ae931219527b2ebd9ad89df5a1072896b7e82a
44+
- canonical: https://github.com/containerd/nerdctl/releases/download/v1.7.4/nerdctl-1.7.4-linux-arm64.tar.gz
45+
download: https://github.com/containerd/nerdctl/releases/download/v1.7.4/nerdctl-1.7.4-linux-arm64.tar.gz
46+
sha: d8df47708ca57b9cd7f498055126ba7dcfc811d9ba43aae1830c93a09e70e22d
47+
- canonical: https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.29.0/crictl-v1.29.0-linux-arm64.tar.gz
48+
download: https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.29.0/crictl-v1.29.0-linux-arm64.tar.gz
49+
sha: 0b615cfa00c331fb9c4524f3d4058a61cc487b33a3436d1269e7832cf283f925
50+
images:
51+
- canonical: registry.k8s.io/kube-apiserver:v1.32.0
52+
download: registry.k8s.io/kube-apiserver:v1.32.0
53+
- canonical: registry.k8s.io/pause:3.9
54+
download: registry.k8s.io/pause:3.9
55+
- canonical: registry.k8s.io/kube-controller-manager:v1.32.0
56+
download: registry.k8s.io/kube-controller-manager:v1.32.0
57+
- canonical: registry.k8s.io/kube-scheduler:v1.32.0
58+
download: registry.k8s.io/kube-scheduler:v1.32.0
59+
- canonical: registry.k8s.io/kube-proxy:v1.32.0
60+
download: registry.k8s.io/kube-proxy:v1.32.0
61+
- canonical: registry.k8s.io/kops/kops-controller:1.32.0-beta.1
62+
download: registry.k8s.io/kops/kops-controller:1.32.0-beta.1
63+
- canonical: registry.k8s.io/coredns/coredns:v1.11.3
64+
download: registry.k8s.io/coredns/coredns:v1.11.3
65+
- canonical: registry.k8s.io/cpa/cluster-proportional-autoscaler:v1.8.9
66+
download: registry.k8s.io/cpa/cluster-proportional-autoscaler:v1.8.9
67+
- canonical: registry.k8s.io/kops/dns-controller:1.32.0-beta.1
68+
download: registry.k8s.io/kops/dns-controller:1.32.0-beta.1
69+
- canonical: public.ecr.aws/aws-ec2/aws-node-termination-handler:v1.22.0
70+
download: public.ecr.aws/aws-ec2/aws-node-termination-handler:v1.22.0
71+
- canonical: registry.k8s.io/provider-aws/cloud-controller-manager:v1.31.0
72+
download: registry.k8s.io/provider-aws/cloud-controller-manager:v1.31.0
73+
- canonical: public.ecr.aws/ebs-csi-driver/aws-ebs-csi-driver:v1.38.1
74+
download: public.ecr.aws/ebs-csi-driver/aws-ebs-csi-driver:v1.38.1
75+
- canonical: public.ecr.aws/eks-distro/kubernetes-csi/node-driver-registrar:v2.12.0-eks-1-32-1
76+
download: public.ecr.aws/eks-distro/kubernetes-csi/node-driver-registrar:v2.12.0-eks-1-32-1
77+
- canonical: public.ecr.aws/eks-distro/kubernetes-csi/livenessprobe:v2.14.0-eks-1-32-1
78+
download: public.ecr.aws/eks-distro/kubernetes-csi/livenessprobe:v2.14.0-eks-1-32-1
79+
- canonical: public.ecr.aws/eks-distro/kubernetes-csi/external-provisioner:v5.1.0-eks-1-32-1
80+
download: public.ecr.aws/eks-distro/kubernetes-csi/external-provisioner:v5.1.0-eks-1-32-1
81+
- canonical: public.ecr.aws/eks-distro/kubernetes-csi/external-attacher:v4.7.0-eks-1-32-1
82+
download: public.ecr.aws/eks-distro/kubernetes-csi/external-attacher:v4.7.0-eks-1-32-1
83+
- canonical: public.ecr.aws/ebs-csi-driver/volume-modifier-for-k8s:v0.5.0
84+
download: public.ecr.aws/ebs-csi-driver/volume-modifier-for-k8s:v0.5.0
85+
- canonical: public.ecr.aws/eks-distro/kubernetes-csi/external-resizer:v1.12.0-eks-1-32-1
86+
download: public.ecr.aws/eks-distro/kubernetes-csi/external-resizer:v1.12.0-eks-1-32-1
87+
- canonical: registry.k8s.io/kops/kube-apiserver-healthcheck:1.32.0-beta.1
88+
download: registry.k8s.io/kops/kube-apiserver-healthcheck:1.32.0-beta.1
89+
- canonical: registry.k8s.io/kops/kops-utils-cp:1.32.0-beta.1
90+
download: registry.k8s.io/kops/kops-utils-cp:1.32.0-beta.1
91+
- canonical: registry.k8s.io/etcd:3.4.13-0
92+
download: registry.k8s.io/etcd:3.4.13-0
93+
- canonical: registry.k8s.io/etcd:3.5.21-0
94+
download: registry.k8s.io/etcd:3.5.21-0
95+
- canonical: registry.k8s.io/etcd-manager/etcd-manager-slim:v3.0.20241012
96+
download: registry.k8s.io/etcd-manager/etcd-manager-slim:v3.0.20241012

upup/pkg/fi/cloudup/apply_cluster.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -235,11 +235,6 @@ func (c *ApplyClusterCmd) Run(ctx context.Context) (*ApplyResults, error) {
235235
default:
236236
return nil, fmt.Errorf("unknown phase %q", c.Phase)
237237
}
238-
if c.GetAssets {
239-
networkLifecycle = fi.LifecycleIgnore
240-
securityLifecycle = fi.LifecycleIgnore
241-
clusterLifecycle = fi.LifecycleIgnore
242-
}
243238

244239
assetBuilder := assets.NewAssetBuilder(c.Clientset.VFSContext(), c.Cluster.Spec.Assets, c.GetAssets)
245240
if len(c.ControlPlaneRunningVersion) > 0 && c.ControlPlaneRunningVersion != c.Cluster.Spec.KubernetesVersion {
@@ -776,10 +771,14 @@ func (c *ApplyClusterCmd) Run(ctx context.Context) (*ApplyResults, error) {
776771

777772
case TargetDryRun:
778773
var out io.Writer = os.Stdout
774+
checkExisting := true
779775
if c.GetAssets {
780776
out = io.Discard
777+
// For `kops get assets`,there is no need to run Find,
778+
// we are just trying to discover the assets.
779+
checkExisting = false
781780
}
782-
target = fi.NewCloudupDryRunTarget(assetBuilder, out)
781+
target = fi.NewCloudupDryRunTarget(assetBuilder, checkExisting, out)
783782

784783
// Avoid making changes on a dry-run
785784
shouldPrecreateDNS = false

upup/pkg/fi/cloudup/awstasks/elastic_ip_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,8 @@ func checkNoChanges(t *testing.T, ctx context.Context, cloud fi.Cloud, allTasks
118118
},
119119
}
120120
assetBuilder := assets.NewAssetBuilder(vfs.Context, cluster.Spec.Assets, false)
121-
target := fi.NewCloudupDryRunTarget(assetBuilder, os.Stderr)
121+
checkExisting := true
122+
target := fi.NewCloudupDryRunTarget(assetBuilder, checkExisting, os.Stderr)
122123
context, err := fi.NewCloudupContext(ctx, fi.DeletionProcessingModeDeleteIncludingDeferred, target, nil, cloud, nil, nil, nil, allTasks)
123124
if err != nil {
124125
t.Fatalf("error building context: %v", err)

upup/pkg/fi/cloudup/gcetasks/serviceaccount_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,8 @@ func doDryRun(t *testing.T, ctx context.Context, cloud fi.Cloud, allTasks map[st
119119
},
120120
}
121121
assetBuilder := assets.NewAssetBuilder(vfs.Context, cluster.Spec.Assets, false)
122-
target := fi.NewCloudupDryRunTarget(assetBuilder, os.Stderr)
122+
checkExisting := true
123+
target := fi.NewCloudupDryRunTarget(assetBuilder, checkExisting, os.Stderr)
123124
context, err := fi.NewCloudupContext(ctx, fi.DeletionProcessingModeDeleteIncludingDeferred, target, nil, cloud, nil, nil, nil, allTasks)
124125
if err != nil {
125126
t.Fatalf("error building context: %v", err)

upup/pkg/fi/dryrun_target.go

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ type DryRunTarget[T SubContext] struct {
4545

4646
// assetBuilder records all assets used
4747
assetBuilder *assets.AssetBuilder
48+
49+
// defaultCheckExisting will control whether we look for existing objects in our dry-run.
50+
// This is normally true except for special-case dry-runs, like `kops get assets`
51+
defaultCheckExisting bool
4852
}
4953

5054
type NodeupDryRunTarget = DryRunTarget[NodeupSubContext]
@@ -77,23 +81,26 @@ func (a DeletionByTaskName[T]) Less(i, j int) bool {
7781

7882
var _ Target[CloudupSubContext] = &DryRunTarget[CloudupSubContext]{}
7983

80-
func newDryRunTarget[T SubContext](assetBuilder *assets.AssetBuilder, out io.Writer) *DryRunTarget[T] {
84+
func newDryRunTarget[T SubContext](assetBuilder *assets.AssetBuilder, defaultCheckExisting bool, out io.Writer) *DryRunTarget[T] {
8185
t := &DryRunTarget[T]{}
8286
t.out = out
8387
t.assetBuilder = assetBuilder
88+
t.defaultCheckExisting = defaultCheckExisting
8489
return t
8590
}
8691

87-
func NewCloudupDryRunTarget(assetBuilder *assets.AssetBuilder, out io.Writer) *CloudupDryRunTarget {
88-
return newDryRunTarget[CloudupSubContext](assetBuilder, out)
92+
// NewCloudupDryRunTarget builds a dry-run target.
93+
// checkExisting should normally be true, but can be false for special-case dry-run, such as in `kops get assets`
94+
func NewCloudupDryRunTarget(assetBuilder *assets.AssetBuilder, checkExisting bool, out io.Writer) *CloudupDryRunTarget {
95+
return newDryRunTarget[CloudupSubContext](assetBuilder, checkExisting, out)
8996
}
9097

9198
func NewNodeupDryRunTarget(assetBuilder *assets.AssetBuilder, out io.Writer) *NodeupDryRunTarget {
92-
return newDryRunTarget[NodeupSubContext](assetBuilder, out)
99+
return newDryRunTarget[NodeupSubContext](assetBuilder, true, out)
93100
}
94101

95102
func (t *DryRunTarget[T]) DefaultCheckExisting() bool {
96-
return true
103+
return t.defaultCheckExisting
97104
}
98105

99106
func (t *DryRunTarget[T]) Render(a, e, changes Task[T]) error {

upup/pkg/fi/dryruntarget_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ func (*testTask) Run(_ *CloudupContext) error {
6969
func Test_DryrunTarget_PrintReport(t *testing.T) {
7070
builder := assets.NewAssetBuilder(vfs.Context, nil, false)
7171
var stdout bytes.Buffer
72-
target := newDryRunTarget[CloudupSubContext](builder, &stdout)
72+
checkExisting := true
73+
target := newDryRunTarget[CloudupSubContext](builder, checkExisting, &stdout)
7374
tasks := map[string]CloudupTask{}
7475
a := &testTask{
7576
Name: PtrTo("TestName"),

0 commit comments

Comments
 (0)