@@ -3,11 +3,12 @@ package imagepolicy
33import (
44 "context"
55 "fmt"
6+ "net"
67 "time"
78
89 g "github.com/onsi/ginkgo/v2"
910 o "github.com/onsi/gomega"
10- configv1alpha1 "github.com/openshift/api/config/v1alpha1 "
11+ configv1 "github.com/openshift/api/config/v1 "
1112 machineconfighelper "github.com/openshift/origin/test/extended/machine_config"
1213 exutil "github.com/openshift/origin/test/extended/util"
1314 kapiv1 "k8s.io/api/core/v1"
@@ -50,6 +51,25 @@ var _ = g.Describe("[sig-imagepolicy][OCPFeatureGate:SigstoreImageVerification][
5051 if ! exutil .IsTechPreviewNoUpgrade (tctx , oc .AdminConfigClient ()) {
5152 g .Skip ("skipping, this feature is only supported on TechPreviewNoUpgrade clusters" )
5253 }
54+ // skip test on disconnected clusters.
55+ networkConfig , err := oc .AdminConfigClient ().ConfigV1 ().Networks ().Get (context .Background (), "cluster" , metav1.GetOptions {})
56+ if err != nil {
57+ e2e .Failf ("unable to get cluster network config: %v" , err )
58+ }
59+ usingIPv6 := false
60+ for _ , clusterNetworkEntry := range networkConfig .Status .ClusterNetwork {
61+ addr , _ , err := net .ParseCIDR (clusterNetworkEntry .CIDR )
62+ if err != nil {
63+ continue
64+ }
65+ if addr .To4 () == nil {
66+ usingIPv6 = true
67+ break
68+ }
69+ }
70+ if usingIPv6 {
71+ g .Skip ("skipping test on disconnected platform" )
72+ }
5373 })
5474
5575 g .It ("Should fail clusterimagepolicy signature validation root of trust does not match the identity in the signature" , func () {
@@ -227,67 +247,78 @@ func waitForTestPodContainerToFailSignatureValidation(ctx context.Context, f *e2
227247 return e2epod .WaitForPodContainerToFail (ctx , f .ClientSet , pod .Namespace , pod .Name , 0 , SignatureValidationFaildReason , e2e .PodStartShortTimeout )
228248}
229249
230- func createClusterImagePolicy (oc * exutil.CLI , policy configv1alpha1 .ClusterImagePolicy ) {
231- _ , err := oc .AdminConfigClient ().ConfigV1alpha1 ().ClusterImagePolicies ().Create (context .TODO (), & policy , metav1.CreateOptions {})
250+ func createClusterImagePolicy (oc * exutil.CLI , policy configv1 .ClusterImagePolicy ) {
251+ _ , err := oc .AdminConfigClient ().ConfigV1 ().ClusterImagePolicies ().Create (context .TODO (), & policy , metav1.CreateOptions {})
232252 o .Expect (err ).NotTo (o .HaveOccurred ())
233253}
234254
235255func deleteClusterImagePolicy (oc * exutil.CLI , policyName string ) error {
236- if err := oc .AdminConfigClient ().ConfigV1alpha1 ().ClusterImagePolicies ().Delete (context .TODO (), policyName , metav1.DeleteOptions {}); err != nil && ! errors .IsNotFound (err ) {
256+ if err := oc .AdminConfigClient ().ConfigV1 ().ClusterImagePolicies ().Delete (context .TODO (), policyName , metav1.DeleteOptions {}); err != nil && ! errors .IsNotFound (err ) {
237257 return fmt .Errorf ("failed to delete cluster image policy %s: %v" , policyName , err )
238258 }
239259 waitForPoolComplete (oc )
240260 return nil
241261}
242262
243- func createImagePolicy (oc * exutil.CLI , policy configv1alpha1 .ImagePolicy , namespace string ) {
244- _ , err := oc .AdminConfigClient ().ConfigV1alpha1 ().ImagePolicies (namespace ).Create (context .TODO (), & policy , metav1.CreateOptions {})
263+ func createImagePolicy (oc * exutil.CLI , policy configv1 .ImagePolicy , namespace string ) {
264+ _ , err := oc .AdminConfigClient ().ConfigV1 ().ImagePolicies (namespace ).Create (context .TODO (), & policy , metav1.CreateOptions {})
245265 o .Expect (err ).NotTo (o .HaveOccurred ())
246266}
247267
248268func deleteImagePolicy (oc * exutil.CLI , policyName string , namespace string ) error {
249- if err := oc .AdminConfigClient ().ConfigV1alpha1 ().ImagePolicies (namespace ).Delete (context .TODO (), policyName , metav1.DeleteOptions {}); err != nil && ! errors .IsNotFound (err ) {
269+ if err := oc .AdminConfigClient ().ConfigV1 ().ImagePolicies (namespace ).Delete (context .TODO (), policyName , metav1.DeleteOptions {}); err != nil && ! errors .IsNotFound (err ) {
250270 return fmt .Errorf ("failed to delete image policy %s in namespace %s: %v" , policyName , namespace , err )
251271 }
252272 waitForPoolComplete (oc )
253273 return nil
254274}
255275
256- func generateClusterImagePolicies () map [string ]configv1alpha1 .ClusterImagePolicy {
257- testClusterImagePolicies := map [string ]configv1alpha1 .ClusterImagePolicy {
276+ func generateClusterImagePolicies () map [string ]configv1 .ClusterImagePolicy {
277+ testClusterImagePolicies := map [string ]configv1 .ClusterImagePolicy {
258278 invalidPublicKeyClusterImagePolicyName : {
279+ TypeMeta : metav1.TypeMeta {
280+ Kind : "ClusterImagePolicy" ,
281+ APIVersion : configv1 .SchemeGroupVersion .String (),
282+ },
259283 ObjectMeta : metav1.ObjectMeta {Name : invalidPublicKeyClusterImagePolicyName },
260- Spec : configv1alpha1.ClusterImagePolicySpec {
261- Scopes : []configv1alpha1.ImageScope {testSignedPolicyScope },
262- Policy : configv1alpha1.Policy {
263- RootOfTrust : configv1alpha1.PolicyRootOfTrust {
264- PolicyType : configv1alpha1 .PublicKeyRootOfTrust ,
265- PublicKey : & configv1alpha1.PublicKey {
266- KeyData : []byte (`LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFVW9GVW9ZQVJlS1hHeTU5eGU1U1FPazJhSjhvKwoyL1l6NVk4R2NOM3pGRTZWaUl2a0duSGhNbEFoWGFYL2JvME05UjYyczAvNnErK1Q3dXdORnVPZzhBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCgo=` ),
284+ Spec : configv1.ClusterImagePolicySpec {
285+ Scopes : []configv1.ImageScope {testSignedPolicyScope },
286+ Policy : configv1.Policy {
287+ RootOfTrust : configv1.PolicyRootOfTrust {
288+ PolicyType : configv1 .PublicKeyRootOfTrust ,
289+ PublicKey : & configv1.PublicKey {
290+ KeyData : []byte (`-----BEGIN PUBLIC KEY-----
291+ MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEUoFUoYAReKXGy59xe5SQOk2aJ8o+
292+ 2/Yz5Y8GcN3zFE6ViIvkGnHhMlAhXaX/bo0M9R62s0/6q++T7uwNFuOg8A==
293+ -----END PUBLIC KEY-----` ),
267294 },
268295 },
269- SignedIdentity : configv1alpha1 .PolicyIdentity {
270- MatchPolicy : configv1alpha1 .IdentityMatchPolicyMatchRepoDigestOrExact ,
296+ SignedIdentity : & configv1 .PolicyIdentity {
297+ MatchPolicy : configv1 .IdentityMatchPolicyMatchRepoDigestOrExact ,
271298 },
272299 },
273300 },
274301 },
275302 publiKeyRekorClusterImagePolicyName : {
303+ TypeMeta : metav1.TypeMeta {
304+ Kind : "ClusterImagePolicy" ,
305+ APIVersion : configv1 .SchemeGroupVersion .String (),
306+ },
276307 ObjectMeta : metav1.ObjectMeta {Name : publiKeyRekorClusterImagePolicyName },
277- Spec : configv1alpha1 .ClusterImagePolicySpec {
278- Scopes : []configv1alpha1 .ImageScope {testSignedPolicyScope },
279- Policy : configv1alpha1 .Policy {
280- RootOfTrust : configv1alpha1 .PolicyRootOfTrust {
281- PolicyType : configv1alpha1 .PublicKeyRootOfTrust ,
282- PublicKey : & configv1alpha1 .PublicKey {
308+ Spec : configv1 .ClusterImagePolicySpec {
309+ Scopes : []configv1 .ImageScope {testSignedPolicyScope },
310+ Policy : configv1 .Policy {
311+ RootOfTrust : configv1 .PolicyRootOfTrust {
312+ PolicyType : configv1 .PublicKeyRootOfTrust ,
313+ PublicKey : & configv1 .PublicKey {
283314 KeyData : []byte (`-----BEGIN PUBLIC KEY-----
284315MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKvZH0CXTk8XQkETuxkzkl3Bi4ms5
28531660l1/qUU0fRATNSCVORCog5PDFo5z0ZLeblWgwbn4c8xpvuo9jQFwpeOsg==
286317-----END PUBLIC KEY-----` ),
287318 },
288319 },
289- SignedIdentity : configv1alpha1 .PolicyIdentity {
290- MatchPolicy : configv1alpha1 .IdentityMatchPolicyMatchRepository ,
320+ SignedIdentity : & configv1 .PolicyIdentity {
321+ MatchPolicy : configv1 .IdentityMatchPolicyMatchRepository ,
291322 },
292323 },
293324 },
@@ -296,41 +327,52 @@ MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKvZH0CXTk8XQkETuxkzkl3Bi4ms5
296327 return testClusterImagePolicies
297328}
298329
299- func generateImagePolicies () map [string ]configv1alpha1 .ImagePolicy {
300- testImagePolicies := map [string ]configv1alpha1 .ImagePolicy {
330+ func generateImagePolicies () map [string ]configv1 .ImagePolicy {
331+ testImagePolicies := map [string ]configv1 .ImagePolicy {
301332 invalidPublicKeyImagePolicyName : {
333+ TypeMeta : metav1.TypeMeta {
334+ Kind : "ImagePolicy" ,
335+ APIVersion : configv1 .SchemeGroupVersion .String (),
336+ },
302337 ObjectMeta : metav1.ObjectMeta {Name : invalidPublicKeyImagePolicyName },
303- Spec : configv1alpha1.ImagePolicySpec {
304- Scopes : []configv1alpha1.ImageScope {testSignedPolicyScope },
305- Policy : configv1alpha1.Policy {
306- RootOfTrust : configv1alpha1.PolicyRootOfTrust {
307- PolicyType : configv1alpha1 .PublicKeyRootOfTrust ,
308- PublicKey : & configv1alpha1.PublicKey {
309- KeyData : []byte (`LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFVW9GVW9ZQVJlS1hHeTU5eGU1U1FPazJhSjhvKwoyL1l6NVk4R2NOM3pGRTZWaUl2a0duSGhNbEFoWGFYL2JvME05UjYyczAvNnErK1Q3dXdORnVPZzhBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCgo=` ),
338+ Spec : configv1.ImagePolicySpec {
339+ Scopes : []configv1.ImageScope {testSignedPolicyScope },
340+ Policy : configv1.Policy {
341+ RootOfTrust : configv1.PolicyRootOfTrust {
342+ PolicyType : configv1 .PublicKeyRootOfTrust ,
343+ PublicKey : & configv1.PublicKey {
344+ KeyData : []byte (`-----BEGIN PUBLIC KEY-----
345+ MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEUoFUoYAReKXGy59xe5SQOk2aJ8o+
346+ 2/Yz5Y8GcN3zFE6ViIvkGnHhMlAhXaX/bo0M9R62s0/6q++T7uwNFuOg8A==
347+ -----END PUBLIC KEY-----` ),
310348 },
311349 },
312- SignedIdentity : configv1alpha1 .PolicyIdentity {
313- MatchPolicy : configv1alpha1 .IdentityMatchPolicyMatchRepoDigestOrExact ,
350+ SignedIdentity : & configv1 .PolicyIdentity {
351+ MatchPolicy : configv1 .IdentityMatchPolicyMatchRepoDigestOrExact ,
314352 },
315353 },
316354 },
317355 },
318356 publiKeyRekorImagePolicyName : {
357+ TypeMeta : metav1.TypeMeta {
358+ Kind : "ImagePolicy" ,
359+ APIVersion : configv1 .SchemeGroupVersion .String (),
360+ },
319361 ObjectMeta : metav1.ObjectMeta {Name : publiKeyRekorImagePolicyName },
320- Spec : configv1alpha1 .ImagePolicySpec {
321- Scopes : []configv1alpha1 .ImageScope {testSignedPolicyScope },
322- Policy : configv1alpha1 .Policy {
323- RootOfTrust : configv1alpha1 .PolicyRootOfTrust {
324- PolicyType : configv1alpha1 .PublicKeyRootOfTrust ,
325- PublicKey : & configv1alpha1 .PublicKey {
362+ Spec : configv1 .ImagePolicySpec {
363+ Scopes : []configv1 .ImageScope {testSignedPolicyScope },
364+ Policy : configv1 .Policy {
365+ RootOfTrust : configv1 .PolicyRootOfTrust {
366+ PolicyType : configv1 .PublicKeyRootOfTrust ,
367+ PublicKey : & configv1 .PublicKey {
326368 KeyData : []byte (`-----BEGIN PUBLIC KEY-----
327369MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKvZH0CXTk8XQkETuxkzkl3Bi4ms5
32837060l1/qUU0fRATNSCVORCog5PDFo5z0ZLeblWgwbn4c8xpvuo9jQFwpeOsg==
329371-----END PUBLIC KEY-----` ),
330372 },
331373 },
332- SignedIdentity : configv1alpha1 .PolicyIdentity {
333- MatchPolicy : configv1alpha1 .IdentityMatchPolicyMatchRepository ,
374+ SignedIdentity : & configv1 .PolicyIdentity {
375+ MatchPolicy : configv1 .IdentityMatchPolicyMatchRepository ,
334376 },
335377 },
336378 },
0 commit comments