Skip to content

Commit 96310d2

Browse files
Merge pull request #5563 from djoshy/debug-bootstrap-e2e
OCPBUGS-73802: Fix up bootstrap-e2e
2 parents a01d548 + 0ee39a1 commit 96310d2

3 files changed

Lines changed: 69 additions & 16 deletions

File tree

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
apiVersion: config.openshift.io/v1
2+
kind: ClusterImagePolicy
3+
metadata:
4+
creationTimestamp: null
5+
name: openshift
6+
spec:
7+
policy:
8+
rootOfTrust:
9+
policyType: PublicKey
10+
publicKey: #using public key from https://docs.sigstore.dev/cosign/verifying/verify
11+
keyData: LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFTGlnQ25sTE5LZ09nbFJUeDFEN0poSTdlUnc5OQpRb2xFOUpvNFFVeG5iTXk1blV1QkwrVVpGOXFxZm0vRGcxQk5lSFJUaEh6V2gya2k5dkFFZ1dFRE93PT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==
12+
scopes:
13+
- quay.io/openshift-release-dev/ocp-release

test/e2e-bootstrap/bootstrap_test.go

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
configv1alpha1 "github.com/openshift/api/config/v1alpha1"
1818
features "github.com/openshift/api/features"
1919
mcfgv1 "github.com/openshift/api/machineconfiguration/v1"
20+
mcfgv1alpha1 "github.com/openshift/api/machineconfiguration/v1alpha1"
2021
apioperatorsv1alpha1 "github.com/openshift/api/operator/v1alpha1"
2122
_ "github.com/openshift/api/operator/v1alpha1/zz_generated.crd-manifests"
2223
featuregatescontroller "github.com/openshift/api/payload-command/render"
@@ -72,6 +73,7 @@ func TestE2EBootstrap(t *testing.T) {
7273
configv1.Install(scheme.Scheme)
7374
configv1alpha1.Install(scheme.Scheme)
7475
mcfgv1.Install(scheme.Scheme)
76+
mcfgv1alpha1.Install(scheme.Scheme)
7577
apioperatorsv1alpha1.Install(scheme.Scheme)
7678

7779
baseTestManifests := loadBaseTestManifests(t)
@@ -384,7 +386,6 @@ metadata:
384386
// Compare the rendered configs
385387
compareRenderedConfigPool(t, clientSet, destDir, "master", controllerRenderedMasterConfigName)
386388
compareRenderedConfigPool(t, clientSet, destDir, "worker", controllerRenderedWorkerConfigName)
387-
388389
})
389390
}
390391
}
@@ -447,14 +448,14 @@ metadata:
447448
require.NoError(t, err)
448449
t.Logf("Controller rendered worker config as %q", controllerRenderedWorkerConfigName)
449450

450-
// Verify node sizing enabled file for master
451-
verifyNodeSizingEnabled(t, clientSet, controllerRenderedMasterConfigName)
451+
// Verify node sizing disabled file for master
452+
verifyNodeSizing(t, clientSet, controllerRenderedMasterConfigName, false)
452453

453454
// Verify node sizing enabled file for worker
454-
verifyNodeSizingEnabled(t, clientSet, controllerRenderedWorkerConfigName)
455+
verifyNodeSizing(t, clientSet, controllerRenderedWorkerConfigName, true)
455456
}
456457

457-
func verifyNodeSizingEnabled(t *testing.T, clientSet *framework.ClientSet, renderedConfigName string) {
458+
func verifyNodeSizing(t *testing.T, clientSet *framework.ClientSet, renderedConfigName string, enabled bool) {
458459
controllerMC, err := clientSet.MachineConfigs().Get(context.Background(), renderedConfigName, metav1.GetOptions{})
459460
require.NoError(t, err)
460461

@@ -472,7 +473,11 @@ func verifyNodeSizingEnabled(t *testing.T, clientSet *framework.ClientSet, rende
472473
require.NoError(t, err, "Failed to decode node-sizing-enabled.env file contents")
473474

474475
contentsStr := string(contents)
475-
require.Contains(t, contentsStr, "NODE_SIZING_ENABLED=true", "Expected /etc/node-sizing-enabled.env to contain NODE_SIZING_ENABLED=true in machine config %s", renderedConfigName)
476+
if enabled {
477+
require.Contains(t, contentsStr, "NODE_SIZING_ENABLED=true", "Expected /etc/node-sizing-enabled.env to contain NODE_SIZING_ENABLED=true in machine config %s", renderedConfigName)
478+
} else {
479+
require.Contains(t, contentsStr, "NODE_SIZING_ENABLED=false", "Expected /etc/node-sizing-enabled.env to contain NODE_SIZING_ENABLED=false in machine config %s", renderedConfigName)
480+
}
476481
break
477482
}
478483
}
@@ -493,6 +498,7 @@ func compareRenderedConfigPool(t *testing.T, clientSet *framework.ClientSet, des
493498
require.Nil(t, err)
494499
outIgn := ign3types.Config{}
495500
err = json.Unmarshal(controllerMC.Spec.Config.Raw, &outIgn)
501+
require.NoError(t, err, "failed to unmarshal controller MC ignition config")
496502

497503
for _, file := range outIgn.Storage.Files {
498504
require.False(t, file.Path == "/etc/kubernetes/kubelet-ca.crt")
@@ -687,6 +693,30 @@ func ensureFeatureGate(t *testing.T, clientSet *framework.ClientSet, objs ...run
687693
require.NoError(t, err)
688694
currentDetails := featuregatescontroller.FeaturesGateDetailsFromFeatureSets(featureGateStatus, controllerConfig.Spec.ReleaseImage)
689695

696+
// Explicitly disable OSStreams feature. This is because this feature requires a controllerconfig object
697+
// with valid RHEL image metadata that is capable of being inspected without needing credentials. Potential possibilites are:
698+
// 1. Setup a test image w/ appropriate metadata on a public registry
699+
// 2. Mock the image inspector
700+
osstreamsfg := configv1.FeatureGateName("OSStreams")
701+
newEnabled := []configv1.FeatureGateAttributes{}
702+
for _, fg := range currentDetails.Enabled {
703+
if fg.Name != osstreamsfg {
704+
newEnabled = append(newEnabled, fg)
705+
}
706+
}
707+
currentDetails.Enabled = newEnabled
708+
// Add to disabled if not already there
709+
found := false
710+
for _, fg := range currentDetails.Disabled {
711+
if fg.Name == osstreamsfg {
712+
found = true
713+
break
714+
}
715+
}
716+
if !found {
717+
currentDetails.Disabled = append(currentDetails.Disabled, configv1.FeatureGateAttributes{Name: osstreamsfg})
718+
}
719+
690720
rawDetails := *currentDetails
691721
rawDetails.Version = version.ReleaseVersion
692722

@@ -731,7 +761,7 @@ func loadBaseTestManifests(t *testing.T) []runtime.Object {
731761

732762
func loadRawManifests(t *testing.T, rawObjs [][]byte) []runtime.Object {
733763
codecFactory := serializer.NewCodecFactory(scheme.Scheme)
734-
decoder := codecFactory.UniversalDecoder(corev1GroupVersion, mcfgv1.GroupVersion, apioperatorsv1alpha1.GroupVersion, configv1alpha1.GroupVersion, configv1.GroupVersion)
764+
decoder := codecFactory.UniversalDecoder(corev1GroupVersion, mcfgv1.GroupVersion, mcfgv1alpha1.GroupVersion, apioperatorsv1alpha1.GroupVersion, configv1alpha1.GroupVersion, configv1.GroupVersion)
735765

736766
objs := []runtime.Object{}
737767
for _, raw := range rawObjs {

test/framework/envtest.go

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -86,12 +86,8 @@ func setupEnvTest(t *testing.T) (string, error) {
8686
os.Setenv("HOME", homeDir)
8787
}
8888

89-
// Use the remote-bucket flag to keep up with openshift/api's divergence
90-
// More info:
91-
// https://github.com/openshift/api/pull/1774,
92-
// https://github.com/openshift/api/blob/master/tools/publish-kubebuilder-tools/README.md#using-the-archives
93-
// https://groups.google.com/a/redhat.com/g/aos-devel/c/JXtIlYlFbDA
94-
cmd := exec.Command(setupEnvTestBinPath, "use", k8sVersion, "--index", "https://raw.githubusercontent.com/openshift/api/master/envtest-releases.yaml")
89+
// Explanation for flags: https://groups.google.com/a/redhat.com/g/aos-devel/c/JXtIlYlFbDA
90+
cmd := exec.Command(setupEnvTestBinPath, "use", k8sVersion, "-p", "path", "--index", "https://raw.githubusercontent.com/openshift/api/master/envtest-releases.yaml")
9591
t.Log("Setting up EnvTest: $", cmd)
9692

9793
// We want to consume the path of where setup-envtest installed the
@@ -117,11 +113,9 @@ func NewTestEnv(t *testing.T) *envtest.Environment {
117113
return &envtest.Environment{
118114
CRDInstallOptions: envtest.CRDInstallOptions{
119115
Paths: []string{
120-
filepath.Join("..", "..", "vendor", "github.com", "openshift", "api", "config", "v1"),
121-
filepath.Join("..", "..", "vendor", "github.com", "openshift", "api", "operator", "v1alpha1"),
116+
filepath.Join("..", "..", "vendor", "github.com", "openshift", "api", "operator", "v1", "zz_generated.crd-manifests"),
122117
filepath.Join("..", "..", "vendor", "github.com", "openshift", "api", "operator", "v1alpha1", "zz_generated.crd-manifests"),
123118
filepath.Join("..", "..", "vendor", "github.com", "openshift", "api", "config", "v1", "zz_generated.crd-manifests"),
124-
filepath.Join("..", "..", "vendor", "github.com", "openshift", "api", "config", "v1alpha1", "zz_generated.crd-manifests"),
125119
filepath.Join("..", "..", "vendor", "github.com", "openshift", "api", "machineconfiguration", "v1", "zz_generated.crd-manifests"),
126120
filepath.Join("..", "..", "vendor", "github.com", "openshift", "api", "machineconfiguration", "v1alpha1", "zz_generated.crd-manifests"),
127121
},
@@ -220,6 +214,10 @@ func CheckCleanEnvironment(t *testing.T, clientSet *ClientSet) {
220214
nodeConfigList, err := clientSet.ConfigV1Interface.Nodes().List(ctx, metav1.ListOptions{})
221215
require.NoError(t, err)
222216
require.Len(t, nodeConfigList.Items, 0)
217+
218+
clusterImagePolicyList, err := clientSet.ConfigV1Interface.ClusterImagePolicies().List(ctx, metav1.ListOptions{})
219+
require.NoError(t, err)
220+
require.Len(t, clusterImagePolicyList.Items, 0)
223221
// ###########################
224222
// END: config.openshift.io/v1
225223
// ###########################
@@ -261,6 +259,9 @@ func CleanEnvironment(t *testing.T, clientSet *ClientSet) {
261259

262260
err = clientSet.MachineConfigs().DeleteCollection(ctx, metav1.DeleteOptions{}, metav1.ListOptions{})
263261
require.NoError(t, err)
262+
263+
err = clientSet.MachineOSConfigs().DeleteCollection(ctx, metav1.DeleteOptions{}, metav1.ListOptions{})
264+
require.NoError(t, err)
264265
// ######################################
265266
// END: machineconfiguration.openshift.io
266267
// ######################################
@@ -312,6 +313,9 @@ func CleanEnvironment(t *testing.T, clientSet *ClientSet) {
312313

313314
err = clientSet.ConfigV1Interface.Nodes().DeleteCollection(ctx, metav1.DeleteOptions{}, metav1.ListOptions{})
314315
require.NoError(t, err)
316+
317+
err = clientSet.ConfigV1Interface.ClusterImagePolicies().DeleteCollection(ctx, metav1.DeleteOptions{}, metav1.ListOptions{})
318+
require.NoError(t, err)
315319
// ###########################
316320
// END: config.openshift.io/v1
317321
// ###########################
@@ -346,6 +350,9 @@ func CreateObjects(t *testing.T, clientSet *ClientSet, objs ...runtime.Object) {
346350
case *mcfgv1.KubeletConfig:
347351
_, err := clientSet.KubeletConfigs().Create(ctx, tObj, metav1.CreateOptions{})
348352
require.NoError(t, err)
353+
case *mcfgv1.MachineOSConfig:
354+
_, err := clientSet.MachineOSConfigs().Create(ctx, tObj, metav1.CreateOptions{})
355+
require.NoError(t, err)
349356
case *corev1.Secret:
350357
_, err := clientSet.Secrets(tObj.GetNamespace()).Create(ctx, tObj, metav1.CreateOptions{})
351358
require.NoError(t, err)
@@ -361,6 +368,9 @@ func CreateObjects(t *testing.T, clientSet *ClientSet, objs ...runtime.Object) {
361368
case *configv1.Image:
362369
_, err := clientSet.ConfigV1Interface.Images().Create(ctx, tObj, metav1.CreateOptions{})
363370
require.NoError(t, err)
371+
case *configv1.ClusterImagePolicy:
372+
_, err := clientSet.ConfigV1Interface.ClusterImagePolicies().Create(ctx, tObj, metav1.CreateOptions{})
373+
require.NoError(t, err)
364374
case *configv1.FeatureGate:
365375
originalStatus := tObj.Status
366376
cObj, err := clientSet.FeatureGates().Create(ctx, tObj, metav1.CreateOptions{})

0 commit comments

Comments
 (0)